From dce9fdfe267867b506973c2743efcf46190c378f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Jul 2013 16:16:03 +0530 Subject: [PATCH 1/4] [minor] [fix] --- stock/doctype/delivery_note/delivery_note.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 3f8a43883f8..7ea512daad5 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -114,7 +114,8 @@ class DocType(SellingController): def validate_with_previous_doc(self): prev_doctype = [d.prevdoc_doctype for d in self.doclist.get({ - "parentfield": "delivery_note_details", "prevdoc_doctype": ["!=", ""]})] + "parentfield": "delivery_note_details"}) if cstr(d.prevdoc_doctype) != ""] + if prev_doctype: super(DocType, self).validate_with_previous_doc(self.tname, { prev_doctype[0]: { From 19d945a4e75f75fd17e1053cb55dead1d789bce5 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Jul 2013 18:35:39 +0530 Subject: [PATCH 2/4] [minor] [fix] apply float precision on over-billing validation --- .../doctype/purchase_invoice/purchase_invoice.py | 3 ++- accounts/doctype/sales_invoice/sales_invoice.py | 3 ++- controllers/accounts_controller.py | 15 +++++++++------ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py index 539cef5e46f..141811d0f9c 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -71,7 +71,8 @@ class DocType(BuyingController): self.validate_write_off_account() self.update_raw_material_cost() self.update_valuation_rate("entries") - self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount") + self.validate_multiple_billing("Purchase Receipt", "pr_detail", "import_amount", + "purchase_receipt_details") def get_credit_to(self): acc_head = sql("""select name, credit_days from `tabAccount` diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index 8f33eb3ccd0..c27f999fcfa 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -93,7 +93,8 @@ class DocType(SellingController): self.validate_c_form() self.validate_time_logs_are_submitted() self.validate_recurring_invoice() - self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount") + self.validate_multiple_billing("Delivery Note", "dn_detail", "export_amount", + "delivery_note_details") def on_submit(self): if cint(self.doc.update_stock) == 1: diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py index 822717b3723..8e531fbda85 100644 --- a/controllers/accounts_controller.py +++ b/controllers/accounts_controller.py @@ -382,18 +382,21 @@ class AccountsController(TransactionBase): "allocate_amount": 0 }) - def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on): + def validate_multiple_billing(self, ref_dt, item_ref_dn, based_on, parentfield): for item in self.doclist.get({"parentfield": "entries"}): if item.fields.get(item_ref_dn): already_billed = webnotes.conn.sql("""select sum(%s) from `tab%s` where %s=%s and docstatus=1""" % (based_on, self.tname, item_ref_dn, '%s'), item.fields[item_ref_dn])[0][0] - - max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", - item.fields[item_ref_dn], based_on)) - if max_allowed_amt and \ - flt(already_billed) + flt(item.fields[based_on]) > max_allowed_amt: + max_allowed_amt = flt(webnotes.conn.get_value(ref_dt + " Item", + item.fields[item_ref_dn], based_on), self.precision(based_on, item)) + + total_billed_amt = flt(flt(already_billed) + flt(item.fields[based_on]), + self.precision(based_on, item)) + webnotes.errprint([max_allowed_amt, total_billed_amt]) + + if max_allowed_amt and total_billed_amt > max_allowed_amt: webnotes.msgprint(_("Row ")+ cstr(item.idx) + ": " + cstr(item.item_code) + _(" will be over-billed against mentioned ") + cstr(ref_dt) + _(". Max allowed " + cstr(based_on) + ": " + cstr(max_allowed_amt)), From 1f996c31217682c3cbf2d38ce79b5ed5749c1cdb Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 29 Jul 2013 19:00:53 +0530 Subject: [PATCH 3/4] [minor] currency trigger should not be called in refresh --- controllers/accounts_controller.py | 2 +- public/js/transaction.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/controllers/accounts_controller.py b/controllers/accounts_controller.py index 8e531fbda85..725fdb32797 100644 --- a/controllers/accounts_controller.py +++ b/controllers/accounts_controller.py @@ -396,7 +396,7 @@ class AccountsController(TransactionBase): self.precision(based_on, item)) webnotes.errprint([max_allowed_amt, total_billed_amt]) - if max_allowed_amt and total_billed_amt > max_allowed_amt: + if max_allowed_amt and total_billed_amt - max_allowed_amt > 0.02: webnotes.msgprint(_("Row ")+ cstr(item.idx) + ": " + cstr(item.item_code) + _(" will be over-billed against mentioned ") + cstr(ref_dt) + _(". Max allowed " + cstr(based_on) + ": " + cstr(max_allowed_amt)), diff --git a/public/js/transaction.js b/public/js/transaction.js index 8770ba958a1..7077e02e76f 100644 --- a/public/js/transaction.js +++ b/public/js/transaction.js @@ -49,7 +49,7 @@ erpnext.TransactionController = wn.ui.form.Controller.extend({ erpnext.hide_naming_series(); erpnext.hide_company(); this.show_item_wise_taxes(); - this.frm.fields_dict.currency ? this.currency() : this.set_dynamic_labels(); + this.set_dynamic_labels(); }, onload_post_render: function() { From f90df7da02bdb2ae43e00a92c0064a76398354e8 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 29 Jul 2013 19:53:44 +0530 Subject: [PATCH 4/4] [fix] [minor] if customer_account is mentioned in POS Settings, also fetch customer_name --- accounts/doctype/sales_invoice/sales_invoice.py | 8 +++++++- selling/utils.py | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/accounts/doctype/sales_invoice/sales_invoice.py b/accounts/doctype/sales_invoice/sales_invoice.py index c27f999fcfa..ca937860540 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.py +++ b/accounts/doctype/sales_invoice/sales_invoice.py @@ -174,8 +174,8 @@ class DocType(SellingController): self.convert_to_recurring() def set_missing_values(self, for_validate=False): - super(DocType, self).set_missing_values(for_validate) self.set_pos_fields(for_validate) + super(DocType, self).set_missing_values(for_validate) def set_customer_defaults(self): # TODO cleanup these methods @@ -216,6 +216,12 @@ class DocType(SellingController): "docstatus": ["!=", 2] }) or pos.customer_account + if self.doc.debit_to and not self.doc.customer: + self.doc.customer = webnotes.conn.get_value("Account", { + "name": self.doc.debit_to, + "master_type": "Customer" + }, "master_name") + for fieldname in ('territory', 'naming_series', 'currency', 'charge', 'letter_head', 'tc_name', 'price_list_name', 'company', 'select_print_heading', 'cash_bank_account'): if (not for_validate) or (for_validate and not self.doc.fields.get(fieldname)): diff --git a/selling/utils.py b/selling/utils.py index bf4f0811ec4..d24a35072f6 100644 --- a/selling/utils.py +++ b/selling/utils.py @@ -190,7 +190,7 @@ def get_pos_settings(company): if not pos_settings: pos_settings = webnotes.conn.sql("""select * from `tabPOS Setting` where ifnull(user,'') = '' and company = %s""", company, as_dict=1) - + return pos_settings and pos_settings[0] or None def apply_pos_settings(pos_settings, opts):