From f04fa4664dfbd4a703c97c51a9589bc21bb244f2 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 27 Dec 2012 14:05:10 +0530 Subject: [PATCH 1/4] fixes in lead list --- selling/doctype/lead/lead_list.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/selling/doctype/lead/lead_list.js b/selling/doctype/lead/lead_list.js index 21f0ffd61f..cfbfc36d67 100644 --- a/selling/doctype/lead/lead_list.js +++ b/selling/doctype/lead/lead_list.js @@ -20,7 +20,8 @@ wn.doclistviews['Lead'] = wn.views.ListView.extend({ data.label_type = 'info' } data.status_html = repl('%(status)s', data); - data.lead_name = repl("%(name)s: %(lead_name)s", + data.lead_name = repl("%(name)s: %(lead_name)s", data); data.lead_status = (data.rating ? ('['+data.rating+'] ') : '') + '['+data.source+']'; }, @@ -28,10 +29,11 @@ wn.doclistviews['Lead'] = wn.views.ListView.extend({ columns: [ {width: '3%', content: 'check'}, {width: '5%', content:'avatar_modified'}, - {width: '30%', content:'lead_name'}, - {width: '12%', content:'status_html'}, - {width: '15%', content:'lead_status+tags', css: {color:'#222'}}, - {width: '23%', content: 'company_name'}, + {width: '30%', content:'lead_name', title: "Lead Name"}, + {width: '12%', content:'status_html', title: "Status"}, + {width: '25%', content: 'company_name', title: "Company"}, + {width: '13%', content:'lead_status+tags', css: {color:'#222'}, + title: "More Info"}, {width: '12%', content:'modified', css: {'text-align': 'right', 'color':'#777'}} ] }) From e05a5b6043f24382c6f5f64f058566a01924c3a3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 27 Dec 2012 15:05:06 +0530 Subject: [PATCH 2/4] do not pull customer on selection of project --- selling/doctype/sales_order/sales_order.js | 14 +--- selling/doctype/sales_order/sales_order.py | 75 +--------------------- 2 files changed, 4 insertions(+), 85 deletions(-) diff --git a/selling/doctype/sales_order/sales_order.js b/selling/doctype/sales_order/sales_order.js index 17c8d097b3..a3b71b4cbb 100644 --- a/selling/doctype/sales_order/sales_order.js +++ b/selling/doctype/sales_order/sales_order.js @@ -178,19 +178,11 @@ cur_frm.fields_dict['project_name'].get_query = function(doc, cdt, cdn) { var cond = ''; if(doc.customer) cond = '(`tabProject`.customer = "'+doc.customer+'" OR IFNULL(`tabProject`.customer,"")="") AND'; return repl('SELECT `tabProject`.name FROM `tabProject` \ - WHERE `tabProject`.status not in ("Completed", "Cancelled") \ - AND %(cond)s `tabProject`.name LIKE "%s" ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond}); + WHERE `tabProject`.status not in ("Completed", "Cancelled") \ + AND %(cond)s `tabProject`.name LIKE "%s" \ + ORDER BY `tabProject`.name ASC LIMIT 50', {cond:cond}); } -//---- get customer details ---------------------------- -cur_frm.cscript.project_name = function(doc,cdt,cdn){ - $c_obj(make_doclist(doc.doctype, doc.name),'pull_project_customer','', function(r,rt){ - refresh_many(['customer','customer_name', 'customer_address', 'contact_person', 'territory', 'contact_no', 'email_id', 'customer_group']); - }); - -} - - // *************** Customized link query for QUOTATION ***************************** cur_frm.fields_dict['quotation_no'].get_query = function(doc) { diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index f024efc2a8..e0ac2ffb57 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -39,10 +39,6 @@ class DocType(TransactionBase): self.partner_tname = 'Partner Target Detail' self.territory_tname = 'Territory Target Detail' -# DOCTYPE TRIGGER FUNCTIONS -# ============================= - # Pull Quotation Items - # ----------------------- def pull_quotation_details(self): self.doclist = self.doc.clear_table(self.doclist, 'other_charges') self.doclist = self.doc.clear_table(self.doclist, 'sales_order_details') @@ -55,29 +51,12 @@ class DocType(TransactionBase): return cstr(self.doc.quotation_no) - #pull project customer - #------------------------- - def pull_project_customer(self): - res = sql("select customer from `tabProject` where name = '%s'"%self.doc.project_name) - if res and res[0][0]: - get_obj('DocType Mapper', 'Project-Sales Order').dt_map('Project', 'Sales Order', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Order']]") - - - # Get contact person details based on customer selected - # ------------------------------------------------------ def get_contact_details(self): get_obj('Sales Common').get_contact_details(self,0) - # Get Commission rate of Sales Partner - # ------------------------------------- def get_comm_rate(self, sales_partner): return get_obj('Sales Common').get_comm_rate(sales_partner, self) - -# SALES ORDER DETAILS TRIGGER FUNCTIONS -# ================================================================================ - # Get Item Details - # ---------------- def get_item_details(self, args=None): import json args = args and json.loads(args) or {} @@ -94,45 +73,24 @@ class DocType(TransactionBase): if not doc.fields.get(r): doc.fields[r] = ret[r] - - # Re-calculates Basic Rate & amount based on Price List Selected - # -------------------------------------------------------------- def get_adj_percent(self, arg=''): get_obj('Sales Common').get_adj_percent(self) - - - # Get projected qty of item based on warehouse selected - # ----------------------------------------------------- def get_available_qty(self,args): return get_obj('Sales Common').get_available_qty(eval(args)) -# 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) - # Load Default Charges - # ---------------------------------------------------------- def load_default_taxes(self): self.doclist = get_obj('Sales Common').load_default_taxes(self) - # Pull details from other charges master (Get Sales Taxes and Charges Master) - # ---------------------------------------------------------- def get_other_charges(self): self.doclist = get_obj('Sales Common').get_other_charges(self) - -# GET TERMS & CONDITIONS -# ===================================================================================== def get_tc_details(self): return get_obj('Sales Common').get_tc_details(self) -#check if maintenance schedule already generated -#============================================ def check_maintenance_schedule(self): nm = sql("select t1.name from `tabMaintenance Schedule` t1, `tabMaintenance Schedule Item` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1", self.doc.name) nm = nm and nm[0][0] or '' @@ -140,8 +98,6 @@ class DocType(TransactionBase): if not nm: return 'No' -#check if maintenance visit already generated -#============================================ def check_maintenance_visit(self): nm = sql("select t1.name from `tabMaintenance Visit` t1, `tabMaintenance Visit Purpose` t2 where t2.parent=t1.name and t2.prevdoc_docname=%s and t1.docstatus=1 and t1.completion_status='Fully Completed'", self.doc.name) nm = nm and nm[0][0] or '' @@ -149,20 +105,12 @@ class DocType(TransactionBase): if not nm: return 'No' -# VALIDATE -# ===================================================================================== - # Fiscal Year Validation - # ---------------------- def validate_fiscal_year(self): get_obj('Sales Common').validate_fiscal_year(self.doc.fiscal_year,self.doc.transaction_date,'Sales Order Date') - # Validate values with reference document - #---------------------------------------- def validate_reference_value(self): get_obj('DocType Mapper', 'Quotation-Sales Order', with_children = 1).validate_reference_value(self, self.doc.name) - # Validate Mandatory - # ------------------- def validate_mandatory(self): # validate transaction date v/s delivery date if self.doc.delivery_date: @@ -174,9 +122,6 @@ class DocType(TransactionBase): msgprint("Please Enter Amendment Date") raise Exception - - # Validate P.O Date - # ------------------ def validate_po(self): # validate p.o date v/s delivery date if self.doc.po_date and self.doc.delivery_date and getdate(self.doc.po_date) > getdate(self.doc.delivery_date): @@ -191,8 +136,6 @@ class DocType(TransactionBase): msgprint("""Another Sales Order (%s) exists against same PO No and Customer. Please be sure, you are not making duplicate entry.""" % so[0][0]) - # Validations of Details Table - # ----------------------------- def validate_for_items(self): check_list, flag = [], 0 chk_dupl_itm = [] @@ -237,8 +180,6 @@ class DocType(TransactionBase): if getlist(self.doclist, 'sales_order_details') and self.doc.quotation_no and flag == 0: msgprint("There are no items of the quotation selected", raise_exception=1) - # validate sales/ maintenance quotation against order type - #------------------------------------------------------------------ def validate_sales_mntc_quotation(self): for d in getlist(self.doclist, 'sales_order_details'): if d.prevdoc_docname: @@ -255,18 +196,13 @@ class DocType(TransactionBase): self.validate_sales_mntc_quotation() - #check for does customer belong to same project as entered.. - #------------------------------------------------------------------------------------------------- def validate_proj_cust(self): if self.doc.project_name and self.doc.customer_name: res = sql("select name from `tabProject` where name = '%s' and (customer = '%s' or ifnull(customer,'')='')"%(self.doc.project_name, self.doc.customer)) 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 - # --------- + def validate(self): self.validate_fiscal_year() self.validate_order_type() @@ -295,11 +231,6 @@ class DocType(TransactionBase): if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered' - -# ON SUBMIT -# =============================================================================================== - # Checks Quotation Status - # ------------------------ def check_prev_docstatus(self): for d in getlist(self.doclist, 'sales_order_details'): cancel_quo = sql("select name from `tabQuotation` where docstatus = 2 and name = '%s'" % d.prevdoc_docname) @@ -312,8 +243,6 @@ class DocType(TransactionBase): if enq: sql("update `tabOpportunity` set status = %s where name=%s",(flag,enq[0][0])) - #update status of quotation, enquiry - #---------------------------------------- def update_prevdoc_status(self, flag): for d in getlist(self.doclist, 'sales_order_details'): if d.prevdoc_docname: @@ -354,8 +283,6 @@ class DocType(TransactionBase): webnotes.conn.set(self.doc, 'status', 'Cancelled') - # does not allow to cancel document if DN or RV made against it is SUBMITTED - # ---------------------------------------------------------------------------- def check_nextdoc_docstatus(self): # Checks Delivery Note submit_dn = sql("select t1.name from `tabDelivery Note` t1,`tabDelivery Note Item` t2 where t1.name = t2.parent and t2.prevdoc_docname = '%s' and t1.docstatus = 1" % (self.doc.name)) From 562de92070d9741456c4c7b8699a681583d9eb7f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 27 Dec 2012 15:14:27 +0530 Subject: [PATCH 3/4] removed project related doctype mapper --- .../Project-Sales Invoice.txt | 49 ------------------- .../doctype/sales_invoice/sales_invoice.js | 7 --- .../doctype/sales_invoice/sales_invoice.py | 7 --- .../december_2012/remove_project_mapper.py | 6 +++ patches/patch_list.py | 4 ++ .../Project-Sales Order.txt | 49 ------------------- .../Project-Delivery Note.txt | 49 ------------------- stock/doctype/delivery_note/delivery_note.py | 7 --- 8 files changed, 10 insertions(+), 168 deletions(-) delete mode 100644 accounts/DocType Mapper/Project-Sales Invoice/Project-Sales Invoice.txt create mode 100644 patches/december_2012/remove_project_mapper.py delete mode 100644 selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt delete mode 100644 stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt diff --git a/accounts/DocType Mapper/Project-Sales Invoice/Project-Sales Invoice.txt b/accounts/DocType Mapper/Project-Sales Invoice/Project-Sales Invoice.txt deleted file mode 100644 index dd5705da9a..0000000000 --- a/accounts/DocType Mapper/Project-Sales Invoice/Project-Sales Invoice.txt +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "owner": "ashwini@webnotestech.com", - "docstatus": 0, - "creation": "2010-09-01 15:47:59", - "modified_by": "Administrator", - "modified": "2012-04-03 12:49:50" - }, - { - "match_id": 0, - "parent": "Project-Sales Invoice", - "name": "__common__", - "doctype": "Table Mapper Detail", - "parenttype": "DocType Mapper", - "from_table": "Project", - "to_table": "Sales Invoice", - "validation_logic": "name is not null", - "parentfield": "table_mapper_details" - }, - { - "map": "Yes", - "match_id": 0, - "parent": "Project-Sales Invoice", - "name": "__common__", - "to_field": "customer", - "doctype": "Field Mapper Detail", - "parenttype": "DocType Mapper", - "checking_operator": "=", - "from_field": "customer", - "parentfield": "field_mapper_details" - }, - { - "name": "__common__", - "to_doctype": "Sales Invoice", - "module": "Accounts", - "doctype": "DocType Mapper", - "from_doctype": "Project" - }, - { - "name": "Project-Sales Invoice", - "doctype": "DocType Mapper" - }, - { - "doctype": "Field Mapper Detail" - }, - { - "doctype": "Table Mapper Detail" - } -] \ No newline at end of file diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index 7c9b47710f..86dc3a5c14 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -264,13 +264,6 @@ cur_frm.cscript.write_off_amount = function(doc) { } -//---- get customer details ---------------------------- -cur_frm.cscript.project_name = function(doc,cdt,cdn){ - $c_obj(make_doclist(doc.doctype, doc.name),'pull_project_customer','', function(r,rt){ - refresh_many(['customer', 'customer_name','customer_address', 'territory']); - }); -} - //Set debit and credit to zero on adding new row //---------------------------------------------- cur_frm.fields_dict['entries'].grid.onrowadd = function(doc, cdt, cdn){ diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 486bc0aad1..5042f5380b 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -320,13 +320,6 @@ class DocType(TransactionBase): def get_advances(self): self.doclist = get_obj('GL Control').get_advances(self, self.doc.debit_to, 'Sales Invoice Advance', 'advance_adjustment_details', 'credit') - - def pull_project_customer(self): - res = webnotes.conn.sql("select customer from `tabProject` where name = '%s'" % - self.doc.project_name) - if res and res[0][0]: - get_obj('DocType Mapper', 'Project-Sales Invoice').dt_map('Project', 'Sales Invoice', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Sales Invoice']]") - def get_company_abbr(self): return webnotes.conn.sql("select abbr from tabCompany where name=%s", self.doc.company)[0][0] diff --git a/patches/december_2012/remove_project_mapper.py b/patches/december_2012/remove_project_mapper.py new file mode 100644 index 0000000000..39aae6b764 --- /dev/null +++ b/patches/december_2012/remove_project_mapper.py @@ -0,0 +1,6 @@ +import webnotes + +def execute(): + from webnotes.model import delete_doc + for d in ["Project-Sales Order", "Project-Delivery Note", "Project-Sales Invoice"]: + delete_doc("DocType Mapper", d) \ No newline at end of file diff --git a/patches/patch_list.py b/patches/patch_list.py index 2ca4822f37..7a347ff6a0 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -562,4 +562,8 @@ patch_list = [ 'patch_module': 'patches.december_2012', 'patch_file': 'delete_form16_print_format', }, + { + 'patch_module': 'patches.december_2012', + 'patch_file': 'remove_project_mapper', + }, ] \ No newline at end of file diff --git a/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt b/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt deleted file mode 100644 index 0d4a5a3e97..0000000000 --- a/selling/DocType Mapper/Project-Sales Order/Project-Sales Order.txt +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "owner": "ashwini@webnotestech.com", - "docstatus": 0, - "creation": "2010-09-01 15:47:59", - "modified_by": "Administrator", - "modified": "2011-09-15 15:04:43" - }, - { - "match_id": 0, - "parent": "Project-Sales Order", - "name": "__common__", - "doctype": "Table Mapper Detail", - "parenttype": "DocType Mapper", - "from_table": "Project", - "to_table": "Sales Order", - "validation_logic": "name is not null", - "parentfield": "table_mapper_details" - }, - { - "map": "Yes", - "match_id": 0, - "parent": "Project-Sales Order", - "name": "__common__", - "to_field": "customer", - "doctype": "Field Mapper Detail", - "parenttype": "DocType Mapper", - "checking_operator": "=", - "from_field": "customer", - "parentfield": "field_mapper_details" - }, - { - "name": "__common__", - "to_doctype": "Sales Order", - "module": "Selling", - "doctype": "DocType Mapper", - "from_doctype": "Project" - }, - { - "name": "Project-Sales Order", - "doctype": "DocType Mapper" - }, - { - "doctype": "Field Mapper Detail" - }, - { - "doctype": "Table Mapper Detail" - } -] \ No newline at end of file diff --git a/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt b/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt deleted file mode 100644 index 6bc90f42d5..0000000000 --- a/stock/DocType Mapper/Project-Delivery Note/Project-Delivery Note.txt +++ /dev/null @@ -1,49 +0,0 @@ -[ - { - "owner": "harshada@webnotestech.com", - "docstatus": 0, - "creation": "2010-09-01 15:47:59", - "modified_by": "Administrator", - "modified": "2011-09-15 15:04:43" - }, - { - "match_id": 0, - "parent": "Project-Delivery Note", - "name": "__common__", - "doctype": "Table Mapper Detail", - "parenttype": "DocType Mapper", - "from_table": "Project", - "to_table": "Delivery Note", - "validation_logic": "name is not null", - "parentfield": "table_mapper_details" - }, - { - "map": "Yes", - "match_id": 0, - "parent": "Project-Delivery Note", - "name": "__common__", - "to_field": "customer", - "doctype": "Field Mapper Detail", - "parenttype": "DocType Mapper", - "checking_operator": "=", - "from_field": "customer", - "parentfield": "field_mapper_details" - }, - { - "name": "__common__", - "to_doctype": "Delivery Note", - "module": "Stock", - "doctype": "DocType Mapper", - "from_doctype": "Project" - }, - { - "name": "Project-Delivery Note", - "doctype": "DocType Mapper" - }, - { - "doctype": "Field Mapper Detail" - }, - { - "doctype": "Table Mapper Detail" - } -] \ 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 ef22437797..af4d91e9aa 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -78,13 +78,6 @@ class DocType(TransactionBase): def get_tc_details(self): return get_obj('Sales Common').get_tc_details(self) - - def pull_project_customer(self): - res = sql("select customer from `tabProject` where name = '%s'" % self.doc.project_name) - if res and res[0][0]: - get_obj('DocType Mapper', 'Project-Delivery Note').dt_map('Project', 'Delivery Note', self.doc.project_name, self.doc, self.doclist, "[['Project', 'Delivery Note']]") - - def get_item_details(self, args=None): import json args = args and json.loads(args) or {} From b62c4edf0211d2743b1e17ed967d05825b3fed8b Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 27 Dec 2012 15:35:58 +0530 Subject: [PATCH 4/4] added is_item_table_empty validation in submit event of purchase common --- .../doctype/purchase_invoice/purchase_invoice.py | 6 ++++-- buying/doctype/purchase_common/purchase_common.js | 13 ------------- buying/doctype/purchase_common/purchase_common.py | 9 +++++++-- buying/doctype/purchase_order/purchase_order.py | 7 ++++--- buying/doctype/purchase_request/purchase_request.js | 7 ++----- buying/doctype/purchase_request/purchase_request.py | 3 +++ .../supplier_quotation/supplier_quotation.py | 3 +++ stock/doctype/purchase_receipt/purchase_receipt.py | 8 +++++--- 8 files changed, 28 insertions(+), 28 deletions(-) diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py index 7d858a9dc4..dc17071308 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -482,6 +482,9 @@ class DocType(TransactionBase): def on_submit(self): + purchase_controller = webnotes.get_obj("Purchase Common") + purchase_controller.is_item_table_empty(self) + self.check_prev_docstatus() # Check for Approving Authority @@ -492,8 +495,7 @@ class DocType(TransactionBase): self.make_gl_entries() self.update_against_document_in_jv() - - get_obj(dt = 'Purchase Common').update_prevdoc_detail(self, is_submit = 1) + purchase_controller.update_prevdoc_detail(self, is_submit = 1) def make_gl_entries(self, is_cancel = 0): diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js index f4cfc299d6..519905a010 100644 --- a/buying/doctype/purchase_common/purchase_common.js +++ b/buying/doctype/purchase_common/purchase_common.js @@ -280,21 +280,8 @@ cur_frm.cscript.import_ref_rate = function(doc, cdt, cdn) { cur_frm.cscript.calc_amount(doc, 5); } -//==================== check if item table is blank ============================================== -var is_item_table = function(doc,cdt,cdn) { - // Step 1 :=>Get all childrens/ rows from Detail Table - var cl = getchildren(tname, doc.name, fname); - // Step 2 :=> If there are no rows then set validated = false, this will stop further execution of code. - if (cl.length == 0) { - alert("There is no item in table"); validated = false; - } -} - //==================== Validate ==================================================================== cur_frm.cscript.validate = function(doc, cdt, cdn) { - // Step 1:=> check if item table is blank - is_item_table(doc,cdt,cdn); - // Step 2:=> Calculate Amount cur_frm.cscript.calc_amount(doc, 1); // calculate advances if pv diff --git a/buying/doctype/purchase_common/purchase_common.py b/buying/doctype/purchase_common/purchase_common.py index e8b725ed92..bb342287e4 100644 --- a/buying/doctype/purchase_common/purchase_common.py +++ b/buying/doctype/purchase_common/purchase_common.py @@ -22,14 +22,14 @@ from webnotes.model import db_exists from webnotes.model.doc import Document, addchild from webnotes.model.wrapper import getlist, copy_doclist from webnotes.model.code import get_obj -from webnotes import form, msgprint +from webnotes import form, msgprint, _ sql = webnotes.conn.sql from utilities.transaction_base import TransactionBase class DocType(TransactionBase): - def __init__(self, doc, doclist=[]): + def __init__(self, doc, doclist=None): self.doc = doc self.doclist = doclist @@ -64,6 +64,11 @@ class DocType(TransactionBase): self.msg = [] + def is_item_table_empty(self, obj): + if not len(obj.doclist.get({"parentfield": obj.fname})): + msgprint(_("Hey there! You need to put at least one item in \ + the item table."), raise_exception=True) + def get_default_schedule_date( self, obj): for d in getlist( obj.doclist, obj.fname): diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py index 812f59c740..85a11ed813 100644 --- a/buying/doctype/purchase_order/purchase_order.py +++ b/buying/doctype/purchase_order/purchase_order.py @@ -220,10 +220,11 @@ class DocType(TransactionBase): # On Submit def on_submit(self): - pc_obj = get_obj(dt ='Purchase Common') + purchase_controller = webnotes.get_obj("Purchase Common") + purchase_controller.is_item_table_empty(self) # Step 1 :=> Update Previous Doc i.e. update pending_qty and Status accordingly - pc_obj.update_prevdoc_detail(self, is_submit = 1) + purchase_controller.update_prevdoc_detail(self, is_submit = 1) # Step 2 :=> Update Bin self.update_bin(is_submit = 1, is_stopped = 0) @@ -236,7 +237,7 @@ class DocType(TransactionBase): "last_purchase_order", self.doc.name) # Step 5 :=> Update last purchase rate - pc_obj.update_last_purchase_rate(self, is_submit = 1) + purchase_controller.update_last_purchase_rate(self, is_submit = 1) # Step 6 :=> Set Status webnotes.conn.set(self.doc,'status','Submitted') diff --git a/buying/doctype/purchase_request/purchase_request.js b/buying/doctype/purchase_request/purchase_request.js index 510762a0f2..f46518f0bf 100644 --- a/buying/doctype/purchase_request/purchase_request.js +++ b/buying/doctype/purchase_request/purchase_request.js @@ -50,22 +50,19 @@ cur_frm.cscript.refresh = function(doc, cdt, cdn) { erpnext.hide_naming_series(); if(doc.docstatus == 1 && doc.status != 'Stopped'){ + cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation); if(flt(doc.per_ordered, 2) < 100) { cur_frm.add_custom_button('Make Purchase Order', cur_frm.cscript['Make Purchase Order']); cur_frm.add_custom_button('Stop Purchase Request', cur_frm.cscript['Stop Purchase Request']); } cur_frm.add_custom_button('Send SMS', cur_frm.cscript.send_sms); - cur_frm.add_custom_button("Make Supplier Quotation", cur_frm.cscript.make_supplier_quotation); + } if(doc.docstatus == 1 && doc.status == 'Stopped') cur_frm.add_custom_button('Unstop Purchase Request', cur_frm.cscript['Unstop Purchase Request']) } -//======================= validation =================================== -cur_frm.cscript.validate = function(doc,cdt,cdn){ - is_item_table(doc,cdt,cdn); -} //======================= transaction date ============================= cur_frm.cscript.transaction_date = function(doc,cdt,cdn){ if(doc.__islocal){ diff --git a/buying/doctype/purchase_request/purchase_request.py b/buying/doctype/purchase_request/purchase_request.py index 7d0e08e440..3f7f932c25 100644 --- a/buying/doctype/purchase_request/purchase_request.py +++ b/buying/doctype/purchase_request/purchase_request.py @@ -178,6 +178,9 @@ class DocType: get_obj('Warehouse', d.warehouse).update_bin(args) def on_submit(self): + purchase_controller = webnotes.get_obj("Purchase Common") + purchase_controller.is_item_table_empty(self) + webnotes.conn.set(self.doc,'status','Submitted') self.update_bin(is_submit = 1, is_stopped = 0) diff --git a/buying/doctype/supplier_quotation/supplier_quotation.py b/buying/doctype/supplier_quotation/supplier_quotation.py index e5861e5389..cac4bab5f3 100644 --- a/buying/doctype/supplier_quotation/supplier_quotation.py +++ b/buying/doctype/supplier_quotation/supplier_quotation.py @@ -36,6 +36,9 @@ class DocType(TransactionBase): self.doc.status = "Draft" def on_submit(self): + purchase_controller = webnotes.get_obj("Purchase Common") + purchase_controller.is_item_table_empty(self) + webnotes.conn.set(self.doc, "status", "Submitted") def on_cancel(self): diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index e5e1fe110e..5e60753a18 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -284,15 +284,17 @@ class DocType(TransactionBase): # on submit def on_submit(self): + purchase_controller = webnotes.get_obj("Purchase Common") + purchase_controller.is_item_table_empty(self) + # Check for Approving Authority get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total) # Set status as Submitted webnotes.conn.set(self.doc,'status', 'Submitted') - pc_obj = get_obj('Purchase Common') # Update Previous Doc i.e. update pending_qty and Status accordingly - pc_obj.update_prevdoc_detail(self, is_submit = 1) + purchase_controller.update_prevdoc_detail(self, is_submit = 1) # Update Serial Record get_obj('Stock Ledger').update_serial_record(self, 'purchase_receipt_details', is_submit = 1, is_incoming = 1) @@ -301,7 +303,7 @@ class DocType(TransactionBase): self.update_stock(is_submit = 1) # Update last purchase rate - pc_obj.update_last_purchase_rate(self, 1) + purchase_controller.update_last_purchase_rate(self, 1)