From bc4574b59d7f13f6ecb1d797d37fe5aa647751b5 Mon Sep 17 00:00:00 2001 From: Anurag mishra Date: Thu, 22 Nov 2018 18:12:45 +0530 Subject: [PATCH 1/7] Delivery Note fixes --- erpnext/stock/doctype/delivery_note/delivery_note.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index ab624d17db..e4cfb474ff 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -119,6 +119,12 @@ class DeliveryNote(SellingController): self.update_current_stock() if not self.installation_status: self.installation_status = 'Not Installed' + + def validate_qty(self): + data = frappe.get_all("Delivery Note Item", filters={"parent" : self.name}, fields=["qty"]) + for quant in data: + if quant.qty == 0: + frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): super(DeliveryNote, self).validate_with_previous_doc({ @@ -202,6 +208,7 @@ class DeliveryNote(SellingController): def on_submit(self): self.validate_packed_qty() + self.validate_qty() # Check for Approving Authority frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total, self) From 66bd5810c5317eb8611ebdb94916770c2c9f3bfc Mon Sep 17 00:00:00 2001 From: Anurag mishra Date: Mon, 26 Nov 2018 11:28:22 +0530 Subject: [PATCH 2/7] fix(validate): Qty is mandatory in delivery note --- erpnext/stock/doctype/delivery_note/delivery_note.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index e4cfb474ff..ea1808b215 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -98,6 +98,7 @@ class DeliveryNote(SellingController): frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) def validate(self): + self.validate_qty() self.validate_posting_time() super(DeliveryNote, self).validate() self.set_status() @@ -121,9 +122,8 @@ class DeliveryNote(SellingController): if not self.installation_status: self.installation_status = 'Not Installed' def validate_qty(self): - data = frappe.get_all("Delivery Note Item", filters={"parent" : self.name}, fields=["qty"]) - for quant in data: - if quant.qty == 0: + for item in self.items: + if not item.qty: frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): From 42d3af3bbb1bd876eb2702442c616f359c463090 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 26 Nov 2018 15:19:17 +0530 Subject: [PATCH 3/7] making validation generic for sales order,sales invoice,purchase order etc. --- erpnext/controllers/accounts_controller.py | 7 +++++++ erpnext/selling/doctype/sales_order/sales_order.py | 1 - erpnext/stock/doctype/delivery_note/delivery_note.py | 7 ------- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 51747f67ae..403adb35a4 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -57,6 +57,8 @@ class AccountsController(TransactionBase): _('{0} is blocked so this transaction cannot proceed'.format(supplier_name)), raise_exception=1) def validate(self): + + self.validate_qty_is_not_zero() if self.get("_action") and self._action != "update_after_submit": self.set_missing_values(for_validate=True) @@ -359,6 +361,11 @@ class AccountsController(TransactionBase): return gl_dict + def validate_qty_is_not_zero(self): + for item in self.items: + if not item.qty: + frappe.throw("Item quantity can not be zero") + def validate_account_currency(self, account, account_currency=None): valid_currency = [self.company_currency] if self.get("currency") and self.currency != self.company_currency: diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 5f435ced74..f6ee48ef45 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -32,7 +32,6 @@ class SalesOrder(SellingController): def validate(self): super(SalesOrder, self).validate() - self.validate_order_type() self.validate_delivery_date() self.validate_proj_cust() diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index ea1808b215..ab624d17db 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -98,7 +98,6 @@ class DeliveryNote(SellingController): frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) def validate(self): - self.validate_qty() self.validate_posting_time() super(DeliveryNote, self).validate() self.set_status() @@ -120,11 +119,6 @@ class DeliveryNote(SellingController): self.update_current_stock() if not self.installation_status: self.installation_status = 'Not Installed' - - def validate_qty(self): - for item in self.items: - if not item.qty: - frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): super(DeliveryNote, self).validate_with_previous_doc({ @@ -208,7 +202,6 @@ class DeliveryNote(SellingController): def on_submit(self): self.validate_packed_qty() - self.validate_qty() # Check for Approving Authority frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total, self) From 7b2c445707e1f716c586cac8c1c49b151d8158c7 Mon Sep 17 00:00:00 2001 From: Anurag mishra Date: Thu, 22 Nov 2018 18:12:45 +0530 Subject: [PATCH 4/7] Delivery Note fixes --- erpnext/stock/doctype/delivery_note/delivery_note.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index ab624d17db..e4cfb474ff 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -119,6 +119,12 @@ class DeliveryNote(SellingController): self.update_current_stock() if not self.installation_status: self.installation_status = 'Not Installed' + + def validate_qty(self): + data = frappe.get_all("Delivery Note Item", filters={"parent" : self.name}, fields=["qty"]) + for quant in data: + if quant.qty == 0: + frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): super(DeliveryNote, self).validate_with_previous_doc({ @@ -202,6 +208,7 @@ class DeliveryNote(SellingController): def on_submit(self): self.validate_packed_qty() + self.validate_qty() # Check for Approving Authority frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total, self) From 6ddb15b3dfeb148af8ec36d701bebe3b3a6f18df Mon Sep 17 00:00:00 2001 From: Anurag mishra Date: Mon, 26 Nov 2018 11:28:22 +0530 Subject: [PATCH 5/7] fix(validate): Qty is mandatory in delivery note --- erpnext/stock/doctype/delivery_note/delivery_note.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index e4cfb474ff..ea1808b215 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -98,6 +98,7 @@ class DeliveryNote(SellingController): frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) def validate(self): + self.validate_qty() self.validate_posting_time() super(DeliveryNote, self).validate() self.set_status() @@ -121,9 +122,8 @@ class DeliveryNote(SellingController): if not self.installation_status: self.installation_status = 'Not Installed' def validate_qty(self): - data = frappe.get_all("Delivery Note Item", filters={"parent" : self.name}, fields=["qty"]) - for quant in data: - if quant.qty == 0: + for item in self.items: + if not item.qty: frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): From e657fe84b87b7af39d9c972469cb6bb46dcf1361 Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 26 Nov 2018 15:19:17 +0530 Subject: [PATCH 6/7] making validation generic for sales order,sales invoice,purchase order etc. --- erpnext/controllers/accounts_controller.py | 7 +++++++ erpnext/selling/doctype/sales_order/sales_order.py | 1 - erpnext/stock/doctype/delivery_note/delivery_note.py | 7 ------- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 51747f67ae..403adb35a4 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -57,6 +57,8 @@ class AccountsController(TransactionBase): _('{0} is blocked so this transaction cannot proceed'.format(supplier_name)), raise_exception=1) def validate(self): + + self.validate_qty_is_not_zero() if self.get("_action") and self._action != "update_after_submit": self.set_missing_values(for_validate=True) @@ -359,6 +361,11 @@ class AccountsController(TransactionBase): return gl_dict + def validate_qty_is_not_zero(self): + for item in self.items: + if not item.qty: + frappe.throw("Item quantity can not be zero") + def validate_account_currency(self, account, account_currency=None): valid_currency = [self.company_currency] if self.get("currency") and self.currency != self.company_currency: diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index 5f435ced74..f6ee48ef45 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -32,7 +32,6 @@ class SalesOrder(SellingController): def validate(self): super(SalesOrder, self).validate() - self.validate_order_type() self.validate_delivery_date() self.validate_proj_cust() diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.py b/erpnext/stock/doctype/delivery_note/delivery_note.py index ea1808b215..ab624d17db 100644 --- a/erpnext/stock/doctype/delivery_note/delivery_note.py +++ b/erpnext/stock/doctype/delivery_note/delivery_note.py @@ -98,7 +98,6 @@ class DeliveryNote(SellingController): frappe.throw(_("Sales Order required for Item {0}").format(d.item_code)) def validate(self): - self.validate_qty() self.validate_posting_time() super(DeliveryNote, self).validate() self.set_status() @@ -120,11 +119,6 @@ class DeliveryNote(SellingController): self.update_current_stock() if not self.installation_status: self.installation_status = 'Not Installed' - - def validate_qty(self): - for item in self.items: - if not item.qty: - frappe.throw("Item quantity can not be zero") def validate_with_previous_doc(self): super(DeliveryNote, self).validate_with_previous_doc({ @@ -208,7 +202,6 @@ class DeliveryNote(SellingController): def on_submit(self): self.validate_packed_qty() - self.validate_qty() # Check for Approving Authority frappe.get_doc('Authorization Control').validate_approving_authority(self.doctype, self.company, self.base_grand_total, self) From 5b6dd58b3e8718f752e858a12412b3662113ba1c Mon Sep 17 00:00:00 2001 From: Anurag Mishra Date: Mon, 26 Nov 2018 17:22:50 +0530 Subject: [PATCH 7/7] fixed ZeroDivisionError in sales_order.py --- erpnext/selling/doctype/sales_order/sales_order.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py index f6ee48ef45..9a35aedb72 100755 --- a/erpnext/selling/doctype/sales_order/sales_order.py +++ b/erpnext/selling/doctype/sales_order/sales_order.py @@ -341,9 +341,11 @@ class SalesOrder(SellingController): delivered_qty += item.delivered_qty tot_qty += item.qty - - self.db_set("per_delivered", flt(delivered_qty/tot_qty) * 100, - update_modified=False) + + if tot_qty != 0: + self.db_set("per_delivered", flt(delivered_qty/tot_qty) * 100, + update_modified=False) + def set_indicator(self): """Set indicator for portal"""