diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js index f21df25c479..b3dcde681a3 100644 --- a/selling/doctype/quotation/quotation.js +++ b/selling/doctype/quotation/quotation.js @@ -11,7 +11,7 @@ $import(SMS Control) // ONLOAD // =================================================================================== -cur_frm.cscript.onload = function(doc, cdt, cdn) { +cur_frm.cscript.onload = function(doc, cdt, cdn) { if(!doc.quotation_to) hide_field(['customer','customer_address','contact_person','customer_name','lead', 'lead_name', 'address_display', 'contact_display', 'contact_mobile', 'contact_email', 'territory', 'customer_group']); if(!doc.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name}); if(!doc.status) set_multiple(cdt,cdn,{status:'Draft'}); @@ -21,7 +21,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) { //if(!doc.price_list_name && sys_defaults.price_list_name) set_multiple(cdt,cdn,{price_list_name:sys_defaults.price_list_name}); if(!doc.company && sys_defaults.company) set_multiple(cdt,cdn,{company:sys_defaults.company}); if(!doc.fiscal_year && sys_defaults.fiscal_year) set_multiple(cdt,cdn,{fiscal_year:sys_defaults.fiscal_year}); - + if(doc.quotation_to) { if(doc.quotation_to == 'Customer') { hide_field(['lead', 'lead_name']); @@ -34,7 +34,7 @@ cur_frm.cscript.onload = function(doc, cdt, cdn) { cur_frm.cscript.onload_post_render = function(doc, dt, dn) { // load default charges - if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) + if(doc.__islocal && !getchildren('RV Tax Detail', doc.name, 'other_charges', doc.doctype).length) cur_frm.cscript.load_taxes(doc, cdt, cdn); } @@ -46,9 +46,9 @@ cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){ hide_field(['lead_name','customer','customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']); doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = ""; } - else if(doc.quotation_to == 'Customer'){ + else if(doc.quotation_to == 'Customer'){ unhide_field(['customer']); - hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']); + hide_field(['lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory']); doc.lead = doc.lead_name = doc.customer = doc.customer_address = doc.contact_person = doc.address_display = doc.contact_display = doc.contact_mobile = doc.contact_email = doc.territory = doc.customer_group = ""; } //refresh_many(['lead','customer']); @@ -56,7 +56,7 @@ cur_frm.cscript.lead_cust_show = function(doc,cdt,cdn){ -//================ hide - unhide fields on basis of quotation to either lead or customer =============================== +//================ hide - unhide fields on basis of quotation to either lead or customer =============================== cur_frm.cscript.quotation_to = function(doc,cdt,cdn){ cur_frm.cscript.lead_cust_show(doc,cdt,cdn); //doc.customer_address = doc.territory = doc.contact_no = doc.email_id = ""; @@ -77,7 +77,7 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) { cur_frm.add_custom_button('Set as Lost', cur_frm.cscript['Declare Order Lost']); cur_frm.add_custom_button('Send SMS', cur_frm.cscript['Send SMS']); } - + if (!doc.docstatus) hide_field(['Update Follow up']); else unhide_field(['Update Follow up']); //cur_frm.cscript.lead_cust_show(doc,cdt,cdn); @@ -111,7 +111,7 @@ cur_frm.cscript.customer = function(doc,dt,dn) { var callback = function(r,rt) { var doc = locals[cur_frm.doctype][cur_frm.docname]; cur_frm.refresh(); - } + } if(doc.customer) $c_obj(make_doclist(doc.doctype, doc.name), 'get_default_customer_address', '', callback); if(doc.customer) unhide_field(['customer_address','contact_person','customer_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']); @@ -123,12 +123,12 @@ cur_frm.cscript.customer_address = cur_frm.cscript.contact_person = function(doc cur_frm.fields_dict.customer_address.on_new = function(dn) { locals['Address'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer; - locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name; + locals['Address'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name; } cur_frm.fields_dict.contact_person.on_new = function(dn) { locals['Contact'][dn].customer = locals[cur_frm.doctype][cur_frm.docname].customer; - locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name; + locals['Contact'][dn].customer_name = locals[cur_frm.doctype][cur_frm.docname].customer_name; } cur_frm.fields_dict['customer_address'].get_query = function(doc, cdt, cdn) { @@ -146,7 +146,7 @@ cur_frm.fields_dict['lead'].get_query = function(doc,cdt,cdn){ cur_frm.cscript.lead = function(doc, cdt, cdn) { if(doc.lead) get_server_fields('get_lead_details', doc.lead,'', doc, cdt, cdn, 1); - if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']); + if(doc.lead) unhide_field(['lead_name','address_display','contact_mobile','contact_email','territory']); } @@ -166,7 +166,7 @@ cur_frm.fields_dict['enq_no'].get_query = function(doc,cdt,cdn){ cur_frm.cscript['Make Sales Order'] = function() { var doc = cur_frm.doc; - if (doc.docstatus == 1) { + if (doc.docstatus == 1) { var n = createLocal("Sales Order"); $c('dt_map', args={ 'docs':compress_doclist([locals["Sales Order"][n]]), @@ -186,17 +186,17 @@ cur_frm.cscript['Pull Enquiry Detail'] = function(doc,cdt,cdn){ var callback = function(r,rt){ if(r.message){ doc.quotation_to = r.message; - + if(doc.quotation_to == 'Lead') { - unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']); + unhide_field(['lead','lead_name','address_display','contact_mobile','contact_email','territory']); } else if(doc.quotation_to == 'Customer') { unhide_field(['customer','customer_address','contact_person','address_display','contact_display','contact_mobile','contact_email','territory','customer_group']); } refresh_many(['quotation_details','quotation_to','customer','customer_address','contact_person','lead','lead_name','address_display','contact_display','contact_mobile','contact_email','territory','customer_group','order_type']); } - } - + } + $c_obj(make_doclist(doc.doctype, doc.name),'pull_enq_details','',callback); } @@ -217,7 +217,7 @@ cur_frm.cscript['Update Follow up'] = function(doc){ //------------------------- cur_frm.cscript['Declare Order Lost'] = function(){ var qtn_lost_dialog; - + set_qtn_lost_dialog = function(doc,cdt,cdn){ qtn_lost_dialog = new Dialog(400,400,'Add Quotation Lost Reason'); qtn_lost_dialog.make_body([ @@ -226,26 +226,26 @@ cur_frm.cscript['Declare Order Lost'] = function(){ ['HTML', 'Response', '
'], ['HTML', 'Add Reason', ''] ]); - + var add_reason_btn1 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button'); add_reason_btn1.innerHTML = 'Add'; add_reason_btn1.onclick = function(){ qtn_lost_dialog.add(); } - + var add_reason_btn2 = $a($i(qtn_lost_dialog.widgets['Add Reason']), 'button', 'button'); add_reason_btn2.innerHTML = 'Cancel'; $y(add_reason_btn2,{marginLeft:'4px'}); add_reason_btn2.onclick = function(){ qtn_lost_dialog.hide();} - + qtn_lost_dialog.onshow = function() { qtn_lost_dialog.widgets['Quotation Lost Reason'].value = ''; $i('update_quotation_dialog_response').innerHTML = ''; } - + qtn_lost_dialog.add = function() { // sending... $i('update_quotation_dialog_response').innerHTML = 'Processing...'; var arg = strip(qtn_lost_dialog.widgets['Quotation Lost Reason'].value); - var call_back = function(r,rt) { + var call_back = function(r,rt) { if(r.message == 'true'){ $i('update_quotation_dialog_response').innerHTML = 'Done'; qtn_lost_dialog.hide(); @@ -254,11 +254,11 @@ cur_frm.cscript['Declare Order Lost'] = function(){ if(arg) $c_obj(make_doclist(cur_frm.doc.doctype, cur_frm.doc.name),'declare_order_lost',arg,call_back); else msgprint("Please add Quotation lost reason"); } - } - + } + if(!qtn_lost_dialog){ set_qtn_lost_dialog(doc,cdt,cdn); - } + } qtn_lost_dialog.show(); } @@ -284,23 +284,23 @@ cur_frm.fields_dict['territory'].get_query = function(doc,cdt,cdn) { //===================== Quotation to validation - either customer or lead mandatory ==================== cur_frm.cscript.quot_to_validate = function(doc,cdt,cdn){ - + if(doc.quotation_to == 'Lead'){ - + if(!doc.lead){ - alert("Lead is mandatory."); - validated = false; + alert("Lead is mandatory."); + validated = false; } } else if(doc.quotation_to == 'Customer'){ - + if(!doc.customer){ alert("Customer is mandatory."); validated = false; } - + } - + } //===================validation function ================================= @@ -308,3 +308,35 @@ cur_frm.cscript.quot_to_validate = function(doc,cdt,cdn){ cur_frm.cscript.validate = function(doc,cdt,cdn){ cur_frm.cscript.quot_to_validate(doc,cdt,cdn); } + +//================ Last Quoted Price and Last Sold Price suggestion ====================== +cur_frm.fields_dict['quotation_details'].grid.get_field('item_code').get_query= function(doc, cdt, cdn) { + var d = locals[cdt][cdn]; + if(doc.customer) + return repl("SELECT i.name,i.item_code,concat('Last quoted at - ',cast(quote_rate as char)) as quote_rate,concat('Last sold at - ',cast(sales_rate as char)) as sales_rate FROM\ + (\ + select item_code,name from tabItem where tabItem.%(key)s like '%s'\ + )i\ + left join\ + (\ + select q.item_code,q.quote_rate from\ + (\ + select q.transaction_date,qd.item_code,basic_rate as quote_rate from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s'\ + )q,\ + (\ + select qd.item_code,max(transaction_date) as transaction_date from `tabQuotation Detail` qd, `tabQuotation` q where q.name=qd.parent and q.docstatus=1 and customer='%(cust)s' group by qd.item_code\ + )m where q.item_code=m.item_code and q.transaction_date=m.transaction_date\ + )q on i.item_code=q.item_code\ + left join\ + (\ + select r.item_code,r.sales_rate from\ + (\ + select r.voucher_date,rd.item_code,basic_rate as sales_rate from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s'\ + )r,\ + (\ + select rd.item_code,max(voucher_date) as voucher_date from `tabRV Detail` rd, `tabReceivable Voucher` r where r.name=rd.parent and r.docstatus=1 and customer='%(cust)s' group by rd.item_code\ + )m where r.item_code=m.item_code and r.voucher_date=m.voucher_date\ + )s on i.item_code=s.item_code ORDER BY item_code LIMIT 50",{cust:doc.customer}); + else + return "SELECT name, item_code FROM tabItem WHERE `tabItem`.%(key)s LIKE '%s' ORDER BY tabItem.item_code DESC LIMIT 50"; +} \ No newline at end of file diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 3534dadc9ab..2a2900fccf4 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -13,7 +13,7 @@ sql = webnotes.conn.sql get_value = webnotes.conn.get_value in_transaction = webnotes.conn.in_transaction convert_to_lists = webnotes.conn.convert_to_lists - + # ----------------------------------------------------------------------------------------- from utilities.transaction_base import TransactionBase @@ -24,7 +24,7 @@ class DocType(TransactionBase): self.doclist = doclist self.tname = 'Delivery Note Detail' self.fname = 'delivery_note_details' - + # Notification objects self.notify_obj = get_obj('Notification Control') @@ -33,7 +33,7 @@ class DocType(TransactionBase): def autoname(self): self.doc.name = make_autoname(self.doc.naming_series+'.#####') - + # DOCTYPE TRIGGERS FUNCTIONS # ============================================================================== #************Fiscal Year Validation***************************** @@ -48,21 +48,21 @@ class DocType(TransactionBase): # *********** Get Commission rate of Sales Partner **************** def get_comm_rate(self, sales_partner): return get_obj('Sales Common').get_comm_rate(sales_partner, self) - + # *************** Pull Sales Order Details ************************ def pull_sales_order_details(self): self.validate_prev_docname() self.doc.clear_table(self.doclist,'other_charges') - - if self.doc.sales_order_no: + + if self.doc.sales_order_no: get_obj('DocType Mapper', 'Sales Order-Delivery Note').dt_map('Sales Order', 'Delivery Note', self.doc.sales_order_no, self.doc, self.doclist, "[['Sales Order', 'Delivery Note'],['Sales Order Detail', 'Delivery Note Detail'],['RV Tax Detail','RV Tax Detail'],['Sales Team','Sales Team']]") else: - msgprint("Please select Sales Order No. whose details need to be pulled") + msgprint("Please select Sales Order No. whose details need to be pulled") return cstr(self.doc.sales_order_no) - - + + #-------------------set item details -uom and item group---------------- def set_item_details(self): for d in getlist(self.doclist,'delivery_note_details'): @@ -70,14 +70,14 @@ class DocType(TransactionBase): if not d.stock_uom: d.stock_uom = res and cstr(res[0][0]) or '' if not d.item_group: d.item_group = res and cstr(res[0][1]) or '' d.save() - + # ::::: Validates that Sales Order is not pulled twice ::::::: def validate_prev_docname(self): - for d in getlist(self.doclist, 'delivery_note_details'): + for d in getlist(self.doclist, 'delivery_note_details'): if self.doc.sales_order_no == d.prevdoc_docname: msgprint(cstr(self.doc.sales_order_no) + " sales order details have already been pulled. ") raise Exception, "Validation Error. " - + #Set Actual Qty based on item code and warehouse #------------------------------------------------------ def set_actual_qty(self): @@ -91,14 +91,14 @@ class DocType(TransactionBase): # ------------------------------------- def get_tc_details(self): return get_obj('Sales Common').get_tc_details(self) - + #pull project customer #------------------------- def pull_project_customer(self): res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) if res: get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]") - + # DELIVERY NOTE DETAILS TRIGGER FUNCTIONS # ================================================================================ @@ -119,10 +119,10 @@ class DocType(TransactionBase): } return ret - + # OTHER CHARGES TRIGGER FUNCTIONS # ==================================================================================== - + # *********** Get Tax rate if account type is TAX ******************** def get_rate(self,arg): return get_obj('Sales Common').get_rate(arg) @@ -137,7 +137,7 @@ class DocType(TransactionBase): def get_other_charges(self): return get_obj('Sales Common').get_other_charges(self) - + #check in manage account if sales order required or not. # ==================================================================================== def so_required(self): @@ -147,9 +147,9 @@ class DocType(TransactionBase): if not d.prevdoc_docname: msgprint("Sales Order No. required against item %s"%d.item_code) raise Exception - - + + # VALIDATE # ==================================================================================== def validate(self): @@ -167,13 +167,13 @@ class DocType(TransactionBase): sales_com_obj.make_packing_list(self,'delivery_note_details') get_obj('Stock Ledger').validate_serial_no(self, 'packing_details') sales_com_obj.validate_max_discount(self, 'delivery_note_details') #verify whether rate is not greater than max discount - sales_com_obj.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100% + sales_com_obj.get_allocated_sum(self) # this is to verify that the allocated % of sales persons is 100% sales_com_obj.check_conversion_rate(self) # ::::::: Get total in Words :::::::: dcc = TransactionBase().get_company_currency(self.doc.company) self.doc.in_words = sales_com_obj.get_total_in_words(dcc, self.doc.rounded_total) self.doc.in_words_export = sales_com_obj.get_total_in_words(self.doc.currency, self.doc.rounded_total_export) - + # ::::::: Set actual qty for each item in selected warehouse ::::::: self.update_current_stock() # :::::: set DN status ::::::: @@ -181,8 +181,8 @@ class DocType(TransactionBase): self.doc.status = 'Draft' if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' if not self.doc.installation_status: self.doc.installation_status = 'Not Installed' - - + + # ************** Validate Mandatory ************************* def validate_mandatory(self): # :::::::::: Amendment Date :::::::::::::: @@ -198,20 +198,20 @@ class DocType(TransactionBase): if not res: msgprint("Customer - %s does not belong to project - %s. \n\nIf you want to use project for multiple customers then please make customer details blank in project - %s."%(self.doc.customer,self.doc.project_name,self.doc.project_name)) raise Exception - + # Validate values with reference document #---------------------------------------- def validate_reference_value(self): get_obj('DocType Mapper', 'Sales Order-Delivery Note', with_children = 1).validate_reference_value(self, self.doc.name) - - + + # ******* Validate Previous Document Details ************ def validate_prevdoc_details(self): for d in getlist(self.doclist,'delivery_note_details'): - + prevdoc = d.prevdoc_doctype prevdoc_docname = d.prevdoc_docname - + if prevdoc_docname and prevdoc: # ::::::::::: Validates Transaction Date of DN and previous doc (i.e. SO , PO, PR) ********* trans_date = sql("select transaction_date from `tab%s` where name = '%s'" %(prevdoc,prevdoc_docname))[0][0] @@ -259,7 +259,7 @@ class DocType(TransactionBase): ch = sql("select is_stock_item from `tabItem` where name = '%s'"%d.item_code) if d.prevdoc_doctype and d.prevdoc_detail_docname and ch and ch[0][0]=='Yes': self.validate_items_with_prevdoc(d) - + # validates whether item is not entered twice e = [d.item_code, d.description, d.warehouse, d.prevdoc_docname or '', d.batch_no or ''] f = [d.item_code, d.description, d.prevdoc_docname or ''] @@ -297,8 +297,8 @@ class DocType(TransactionBase): for d in getlist(self.doclist, 'packing_details'): bin = sql("select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1) d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0 - d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0 - + d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0 + # ON SUBMIT # ================================================================================================= @@ -322,7 +322,7 @@ class DocType(TransactionBase): # on submit notification self.notify_obj.notify_contact('Delivery Note',self.doc.doctype,self.doc.name, self.doc.email_id, self.doc.contact_person) - + # *********** Checks whether actual quantity is present in warehouse ************* def check_qty_in_stock(self): for d in getlist(self.doclist, 'packing_details'): @@ -334,7 +334,7 @@ class DocType(TransactionBase): # ON CANCEL -# ================================================================================================= +# ================================================================================================= def on_cancel(self): sales_com_obj = get_obj(dt = 'Sales Common') sales_com_obj.check_stop_sales_order(self) @@ -345,14 +345,14 @@ class DocType(TransactionBase): # :::::: set DN status ::::::: set(self.doc, 'status', 'Cancelled') - + # ******************** Check Next DocStatus ************************** def check_next_docstatus(self): submit_rv = sql("select t1.name from `tabReceivable Voucher` t1,`tabRV Detail` t2 where t1.name = t2.parent and t2.delivery_note = '%s' and t1.docstatus = 1" % (self.doc.name)) if submit_rv: msgprint("Sales Invoice : " + cstr(submit_rv[0][0]) + " has already been submitted !") raise Exception , "Validation Error." - + submit_in = sql("select t1.name from `tabInstallation Note` t1, `tabInstalled Item Details` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name)) if submit_in: msgprint("Installation Note : "+cstr(submit_in[0][0]) +" has already been submitted !") @@ -369,11 +369,11 @@ class DocType(TransactionBase): if not d[0]: msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d[1]) raise Exception - # if prevdoc_doctype = "Sales Order" + # if prevdoc_doctype = "Sales Order" if d[3] < 0 : # Reduce Reserved Qty from warehouse bin = get_obj('Warehouse', d[0]).update_bin(0, flt(update_stock) * flt(d[3]), 0, 0, 0, d[1], self.doc.transaction_date) - + # Reduce actual qty from warehouse self.make_sl_entry(d, d[0], - flt(d[2]) , 0, update_stock) get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values) @@ -383,7 +383,7 @@ class DocType(TransactionBase): def get_item_list(self, is_stopped): return get_obj('Sales Common').get_item_list(self, is_stopped) - + # ********************** Make Stock Entry ************************************ def make_sl_entry(self, d, wh, qty, in_value, update_stock): self.values.append({ @@ -394,8 +394,8 @@ class DocType(TransactionBase): 'posting_time' : self.doc.posting_time, 'voucher_type' : 'Delivery Note', 'voucher_no' : self.doc.name, - 'voucher_detail_no' : '', - 'actual_qty' : qty, + 'voucher_detail_no' : '', + 'actual_qty' : qty, 'stock_uom' : d[4], 'incoming_rate' : in_value, 'company' : self.doc.company, @@ -403,9 +403,9 @@ class DocType(TransactionBase): 'is_cancelled' : (update_stock==1) and 'No' or 'Yes', 'batch_no' : d[5], 'serial_no' : d[6] - }) + }) + - # SEND SMS # ============================================================================================ def send_sms(self): @@ -436,3 +436,7 @@ class DocType(TransactionBase): # =========================================== def repair_delivery_note(self): get_obj('Sales Common', 'Sales Common').repair_curr_doctype_details(self) + + # Packing Slip Related + # ========================================== + #def get \ No newline at end of file diff --git a/stock/doctype/delivery_note/delivery_note.txt b/stock/doctype/delivery_note/delivery_note.txt index b77a6a5b88b..3ec4b383bc5 100644 --- a/stock/doctype/delivery_note/delivery_note.txt +++ b/stock/doctype/delivery_note/delivery_note.txt @@ -5,14 +5,23 @@ { 'creation': '2011-04-18 15:58:20', 'docstatus': 0, - 'modified': '2011-08-09 17:10:45', + 'modified': '2011-08-18 16:31:02', 'modified_by': 'Administrator', 'owner': 'Administrator' }, + # These values are common for all DocField + { + 'doctype': 'DocField', + 'name': '__common__', + 'parent': 'Delivery Note', + 'parentfield': 'fields', + 'parenttype': 'DocType' + }, + # These values are common for all DocType { - '_last_update': '1311621379', + '_last_update': '1313485457', 'colour': 'White:FFF', 'doctype': 'DocType', 'document_type': 'Transaction', @@ -27,15 +36,15 @@ 'show_in_menu': 0, 'subject': 'To %(customer_name)s on %(transaction_date)s | %(per_billed)s% billed', 'tag_fields': 'billing_status', - 'version': 446 + 'version': 447 }, - # These values are common for all DocField + # These values are common for all DocFormat { - 'doctype': 'DocField', + 'doctype': 'DocFormat', 'name': '__common__', 'parent': 'Delivery Note', - 'parentfield': 'fields', + 'parentfield': 'formats', 'parenttype': 'DocType' }, @@ -109,21 +118,8 @@ # DocPerm { - 'amend': 1, - 'cancel': 1, - 'create': 1, 'doctype': 'DocPerm', 'idx': 5, - 'permlevel': 0, - 'role': 'Sales Manager', - 'submit': 1, - 'write': 1 - }, - - # DocPerm - { - 'doctype': 'DocPerm', - 'idx': 6, 'permlevel': 1, 'role': 'All' }, @@ -131,11 +127,25 @@ # DocPerm { 'doctype': 'DocPerm', - 'idx': 7, + 'idx': 6, 'permlevel': 2, 'role': 'All' }, + # DocFormat + { + 'doctype': 'DocFormat', + 'format': 'Delivery Note Format', + 'idx': 1 + }, + + # DocFormat + { + 'doctype': 'DocFormat', + 'format': 'Delivery Note Packing List Wise', + 'idx': 2 + }, + # DocField { 'colour': 'White:FFF', diff --git a/stock/doctype/delivery_note_detail/delivery_note_detail.txt b/stock/doctype/delivery_note_detail/delivery_note_detail.txt index 78aea3267f0..a8fea209c46 100644 --- a/stock/doctype/delivery_note_detail/delivery_note_detail.txt +++ b/stock/doctype/delivery_note_detail/delivery_note_detail.txt @@ -5,7 +5,7 @@ { 'creation': '2010-08-08 17:08:58', 'docstatus': 0, - 'modified': '2011-03-01 10:35:06', + 'modified': '2011-08-22 12:11:51', 'modified_by': 'Administrator', 'owner': 'Administrator' }, @@ -21,7 +21,7 @@ 'section_style': 'Tray', 'server_code_error': ' ', 'show_in_menu': 0, - 'version': 35 + 'version': 38 }, # These values are common for all DocField @@ -102,27 +102,13 @@ 'width': '50px' }, - # DocField - { - 'doctype': 'DocField', - 'fieldname': 'no_of_packs', - 'fieldtype': 'Int', - 'idx': 5, - 'label': 'No of Packs', - 'oldfieldname': 'no_of_packs', - 'oldfieldtype': 'Int', - 'permlevel': 0, - 'print_hide': 1, - 'width': '100px' - }, - # DocField { 'default': '0.00', 'doctype': 'DocField', 'fieldname': 'qty', 'fieldtype': 'Currency', - 'idx': 6, + 'idx': 5, 'label': 'Quantity', 'oldfieldname': 'qty', 'oldfieldtype': 'Currency', @@ -138,7 +124,7 @@ 'doctype': 'DocField', 'fieldname': 'ref_rate', 'fieldtype': 'Currency', - 'idx': 7, + 'idx': 6, 'label': 'Ref Rate', 'no_copy': 0, 'oldfieldname': 'ref_rate', @@ -156,7 +142,7 @@ 'doctype': 'DocField', 'fieldname': 'adj_rate', 'fieldtype': 'Float', - 'idx': 8, + 'idx': 7, 'label': 'Discount (%)', 'oldfieldname': 'adj_rate', 'oldfieldtype': 'Float', @@ -171,7 +157,7 @@ 'doctype': 'DocField', 'fieldname': 'export_rate', 'fieldtype': 'Currency', - 'idx': 9, + 'idx': 8, 'label': 'Rate', 'oldfieldname': 'export_rate', 'oldfieldtype': 'Currency', @@ -187,7 +173,7 @@ 'doctype': 'DocField', 'fieldname': 'export_amount', 'fieldtype': 'Currency', - 'idx': 10, + 'idx': 9, 'label': 'Amount', 'oldfieldname': 'export_amount', 'oldfieldtype': 'Currency', @@ -202,7 +188,7 @@ 'doctype': 'DocField', 'fieldname': 'base_ref_rate', 'fieldtype': 'Currency', - 'idx': 11, + 'idx': 10, 'label': 'Ref Rate*', 'oldfieldname': 'base_ref_rate', 'oldfieldtype': 'Currency', @@ -217,7 +203,7 @@ 'doctype': 'DocField', 'fieldname': 'basic_rate', 'fieldtype': 'Currency', - 'idx': 12, + 'idx': 11, 'label': 'Rate*', 'oldfieldname': 'basic_rate', 'oldfieldtype': 'Currency', @@ -233,7 +219,7 @@ 'doctype': 'DocField', 'fieldname': 'amount', 'fieldtype': 'Currency', - 'idx': 13, + 'idx': 12, 'label': 'Amount*', 'oldfieldname': 'amount', 'oldfieldtype': 'Currency', @@ -248,7 +234,7 @@ 'doctype': 'DocField', 'fieldname': 'warehouse', 'fieldtype': 'Link', - 'idx': 14, + 'idx': 13, 'label': 'Warehouse', 'oldfieldname': 'warehouse', 'oldfieldtype': 'Link', @@ -264,7 +250,8 @@ 'doctype': 'DocField', 'fieldname': 'serial_no', 'fieldtype': 'Text', - 'idx': 15, + 'idx': 14, + 'in_filter': 1, 'label': 'Serial No', 'no_copy': 1, 'oldfieldname': 'serial_no', @@ -279,14 +266,13 @@ 'doctype': 'DocField', 'fieldname': 'batch_no', 'fieldtype': 'Link', - 'idx': 16, + 'idx': 15, 'label': 'Batch No', 'oldfieldname': 'batch_no', 'oldfieldtype': 'Link', 'options': 'Batch', 'permlevel': 0, - 'print_hide': 1, - 'search_index': 0 + 'print_hide': 1 }, # DocField @@ -294,14 +280,13 @@ 'doctype': 'DocField', 'fieldname': 'item_group', 'fieldtype': 'Link', - 'idx': 17, + 'idx': 16, 'label': 'Item Group', 'oldfieldname': 'item_group', 'oldfieldtype': 'Link', 'options': 'Item Group', 'permlevel': 1, - 'print_hide': 1, - 'search_index': 0 + 'print_hide': 1 }, # DocField @@ -309,23 +294,77 @@ 'doctype': 'DocField', 'fieldname': 'brand', 'fieldtype': 'Link', - 'idx': 18, + 'idx': 17, 'label': 'Brand Name', 'oldfieldname': 'brand', 'oldfieldtype': 'Link', 'options': 'Brand', 'permlevel': 1, 'print_hide': 1, - 'search_index': 0, 'width': '150px' }, + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'pack_no', + 'fieldtype': 'Data', + 'idx': 18, + 'label': 'Pack No', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'pack_gross_wt', + 'fieldtype': 'Float', + 'idx': 19, + 'label': 'Pack Gross Wt', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'weight_uom', + 'fieldtype': 'Link', + 'idx': 20, + 'label': 'Weight UOM', + 'options': 'UOM', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'pack_nett_wt', + 'fieldtype': 'Float', + 'idx': 21, + 'label': 'Pack Nett Wt', + 'permlevel': 0 + }, + + # DocField + { + 'doctype': 'DocField', + 'fieldname': 'no_of_packs', + 'fieldtype': 'Int', + 'idx': 22, + 'label': 'No of Packs', + 'oldfieldname': 'no_of_packs', + 'oldfieldtype': 'Int', + 'permlevel': 0, + 'print_hide': 1, + 'width': '100px' + }, + # DocField { 'doctype': 'DocField', 'fieldname': 'pack_unit', 'fieldtype': 'Data', - 'idx': 19, + 'idx': 23, 'label': 'Pack Unit', 'oldfieldname': 'pack_unit', 'oldfieldtype': 'Data', @@ -339,7 +378,7 @@ 'doctype': 'DocField', 'fieldname': 'installed_qty', 'fieldtype': 'Currency', - 'idx': 20, + 'idx': 24, 'label': 'Installed Qty', 'no_copy': 1, 'oldfieldname': 'installed_qty', @@ -354,7 +393,7 @@ 'doctype': 'DocField', 'fieldname': 'actual_qty', 'fieldtype': 'Currency', - 'idx': 21, + 'idx': 25, 'label': 'Available Qty at Warehouse', 'no_copy': 1, 'oldfieldname': 'actual_qty', @@ -364,29 +403,12 @@ 'width': '150px' }, - # DocField - { - 'colour': 'White:FFF', - 'default': '0.00', - 'doctype': 'DocField', - 'fieldname': 'billed_qty', - 'fieldtype': 'Currency', - 'idx': 22, - 'label': 'Billed Qty', - 'no_copy': 1, - 'oldfieldname': 'billed_qty', - 'oldfieldtype': 'Currency', - 'permlevel': 1, - 'print_hide': 1, - 'width': '100px' - }, - # DocField { 'doctype': 'DocField', 'fieldname': 'billed_amt', 'fieldtype': 'Currency', - 'idx': 23, + 'idx': 26, 'label': 'Billed Amt', 'no_copy': 1, 'permlevel': 1, @@ -401,7 +423,7 @@ 'fieldname': 'prevdoc_docname', 'fieldtype': 'Data', 'hidden': 0, - 'idx': 24, + 'idx': 27, 'in_filter': 1, 'label': 'Against Document No', 'no_copy': 1, @@ -419,14 +441,14 @@ 'fieldname': 'prevdoc_doctype', 'fieldtype': 'Data', 'hidden': 1, - 'idx': 25, + 'idx': 28, 'in_filter': 1, 'label': 'Document Type', 'oldfieldname': 'prevdoc_doctype', 'oldfieldtype': 'Data', 'permlevel': 1, 'print_hide': 1, - 'search_index': 0, + 'search_index': 1, 'width': '150px' }, @@ -436,7 +458,7 @@ 'fieldname': 'prevdoc_date', 'fieldtype': 'Date', 'hidden': 1, - 'idx': 26, + 'idx': 29, 'in_filter': 1, 'label': 'Against Document Date', 'oldfieldname': 'prevdoc_date', @@ -451,14 +473,14 @@ 'fieldname': 'prevdoc_detail_docname', 'fieldtype': 'Data', 'hidden': 1, - 'idx': 27, + 'idx': 30, 'in_filter': 1, 'label': 'Against Document Detail No', 'oldfieldname': 'prevdoc_detail_docname', 'oldfieldtype': 'Data', 'permlevel': 1, 'print_hide': 1, - 'search_index': 1, + 'search_index': 0, 'width': '150px' }, @@ -468,7 +490,7 @@ 'fieldname': 'item_tax_rate', 'fieldtype': 'Small Text', 'hidden': 1, - 'idx': 28, + 'idx': 31, 'label': 'Item Tax Rate', 'oldfieldname': 'item_tax_rate', 'oldfieldtype': 'Small Text', @@ -482,7 +504,7 @@ 'doctype': 'DocField', 'fieldname': 'page_break', 'fieldtype': 'Check', - 'idx': 29, + 'idx': 32, 'label': 'Page Break', 'oldfieldname': 'page_break', 'oldfieldtype': 'Check', diff --git a/stock/doctype/item/item.js b/stock/doctype/item/item.js index 3c0262979e3..6dd7377ed7e 100644 --- a/stock/doctype/item/item.js +++ b/stock/doctype/item/item.js @@ -1,17 +1,17 @@ cur_frm.cscript.refresh = function(doc) { // make sensitive fields(has_serial_no, is_stock_item, valuation_method) // read only if any stock ledger entry exists - + if ((!doc.__islocal) && (doc.is_stock_item == 'Yes')) { var callback = function(r, rt) { if (r.message == 'exists') permlevel = 1; else permlevel = 0; - + set_field_permlevel('has_serial_no', permlevel); set_field_permlevel('is_stock_item', permlevel); set_field_permlevel('valuation_method', permlevel); } - $c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback); + $c_obj(make_doclist(doc.doctype, doc.name),'check_if_sle_exists','',callback); } } @@ -24,25 +24,25 @@ cur_frm.fields_dict['default_bom'].get_query = function(doc) { // Expense Account // --------------------------------- -cur_frm.fields_dict['purchase_account'].get_query = function(doc){ +cur_frm.fields_dict['purchase_account'].get_query = function(doc){ return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Debit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50' } -// Income Account +// Income Account // -------------------------------- cur_frm.fields_dict['default_income_account'].get_query = function(doc) { return 'SELECT DISTINCT `tabAccount`.`name` FROM `tabAccount` WHERE `tabAccount`.`debit_or_credit`="Credit" AND `tabAccount`.`group_or_ledger`="Ledger" AND `tabAccount`.`is_pl_account` = "Yes" AND `tabAccount`.`docstatus`!=2 AND `tabAccount`.`account_type` ="Income Account" AND `tabAccount`.%(key)s LIKE "%s" ORDER BY `tabAccount`.`name` LIMIT 50' } -// Purchase Cost Center +// Purchase Cost Center // ----------------------------- cur_frm.fields_dict['cost_center'].get_query = function(doc) { return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY `tabCost Center`.`name` ASC LIMIT 50' } -// Sales Cost Center +// Sales Cost Center // ----------------------------- cur_frm.fields_dict['default_sales_cost_center'].get_query = function(doc) { return 'SELECT `tabCost Center`.`name` FROM `tabCost Center` WHERE `tabCost Center`.%(key)s LIKE "%s" AND `tabCost Center`.`group_or_ledger` = "Ledger" AND `tabCost Center`.`docstatus`!= 2 ORDER BY `tabCost Center`.`name` ASC LIMIT 50' @@ -66,7 +66,7 @@ cur_frm.fields_dict['item_group'].get_query = function(doc,cdt,cdn) { cur_frm.cscript.IGHelp = function(doc,dt,dn){ var call_back = function(){ - var sb_obj = new SalesBrowser(); + var sb_obj = new SalesBrowser(); sb_obj.set_val('Item Group'); } @@ -79,21 +79,34 @@ cur_frm.cscript.IGHelp = function(doc,dt,dn){ // in the "alternate_description" field cur_frm.cscript['Add Image'] = function(doc, dt, dn) { if(!doc.file_list) { - msgprint('Please attach a file first!'); + msgprint('Please attach a file first!'); } - + var f = doc.file_list.split('\n')[0]; var fname = f.split(',')[0]; var fid = f.split(',')[1]; if(!in_list(['jpg','jpeg','gif','png'], fname.split('.')[1].toLowerCase())) { msgprint('File must be of extension jpg, jpeg, gif or png'); return; } - + doc.description_html = repl('| %(desc)s |