From e6ddd28067cc1b2e67132eceeec7421bd80c0b60 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 30 May 2014 14:44:37 +0530 Subject: [PATCH 1/5] Don't execute reorder_item, if initial setup not completed. fixes #1668 --- erpnext/stock/utils.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index b5c98bf2e1..252a296d8b 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -175,6 +175,11 @@ def get_buying_amount(voucher_type, voucher_no, item_row, stock_ledger_entries): def reorder_item(): """ Reorder item if stock reaches reorder level""" + + # if initial setup not completed, return + if not frappe.db.sql("select name from `tabFiscal Year` limit 1"): + return + if getattr(frappe.local, "auto_indent", None) is None: frappe.local.auto_indent = cint(frappe.db.get_value('Stock Settings', None, 'auto_indent')) From fb988ba8349a0e1954e9e511d838aea22f596c41 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 30 May 2014 15:46:50 +0530 Subject: [PATCH 2/5] Salary Slip: pull details from salary struture. fixes #1719 --- erpnext/hr/doctype/salary_slip/salary_slip.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.py b/erpnext/hr/doctype/salary_slip/salary_slip.py index 9ae394b97c..232d6a9840 100644 --- a/erpnext/hr/doctype/salary_slip/salary_slip.py +++ b/erpnext/hr/doctype/salary_slip/salary_slip.py @@ -33,8 +33,8 @@ class SalarySlip(TransactionBase): return struct and struct[0][0] or '' def pull_sal_struct(self, struct): - from erpnext.hr.doctype.salary_structure.salary_structure import get_mapped_doc - self.update(get_mapped_doc(struct, self)) + from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip + self.update(make_salary_slip(struct, self).as_dict()) def pull_emp_details(self): emp = frappe.db.get_value("Employee", self.employee, From 0be378af6ac951ff07b0b1288ec7b10ad17759d8 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 30 May 2014 15:52:52 +0530 Subject: [PATCH 3/5] Purchase ordered qty can not be less than minimum order qty. fixes #1529 --- erpnext/buying/doctype/purchase_order/purchase_order.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 8d6ba46040..91cc865b7b 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -45,6 +45,7 @@ class PurchaseOrder(BuyingController): self.validate_with_previous_doc() self.validate_for_subcontracting() + self.validate_minimum_order_qty() self.create_raw_materials_supplied("po_raw_material_details") def validate_with_previous_doc(self): @@ -61,6 +62,13 @@ class PurchaseOrder(BuyingController): } }) + def validate_minimum_order_qty(self): + itemwise_min_order_qty = frappe._dict(frappe.db.sql("select name, min_order_qty from tabItem")) + + for d in self.get("po_details"): + if flt(d.qty) < flt(itemwise_min_order_qty.get(d.item_code)): + frappe.throw(_("Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).").format(d.idx)) + def get_schedule_dates(self): for d in self.get('po_details'): if d.prevdoc_detail_docname and not d.schedule_date: From 548cf96c44b8f1dec36f06b3374554c39327bfa3 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 30 May 2014 19:09:59 +0530 Subject: [PATCH 4/5] Minor fixes in sales return --- erpnext/stock/doctype/stock_entry/stock_entry.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index cbe8c29749..ac81f88e88 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -297,8 +297,8 @@ class StockEntry(StockController): frappe.DoesNotExistError) # validate quantity <= ref item's qty - qty already returned - ref_item = ref.doc.getone({"item_code": item.item_code}) - returnable_qty = ref_item.qty - flt(already_returned_item_qty.get(item.item_code)) + ref_item_qty = sum([flt(d.qty) for d in ref.doc.get({"item_code": item.item_code})]) + returnable_qty = ref_item_qty - flt(already_returned_item_qty.get(item.item_code)) if not returnable_qty: frappe.throw(_("Item {0} has already been returned").format(item.item_code), StockOverReturnError) elif item.transfer_qty > returnable_qty: From 0984f227a8d0c5dd3a25dec2f87f5eece773f29b Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 30 May 2014 19:10:12 +0530 Subject: [PATCH 5/5] minor fixes related to path --- erpnext/buying/doctype/purchase_common/purchase_common.js | 4 ++-- erpnext/selling/doctype/sales_order/sales_order.js | 2 +- erpnext/selling/sales_common.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/buying/doctype/purchase_common/purchase_common.js b/erpnext/buying/doctype/purchase_common/purchase_common.js index 032448f79f..c3ef365f68 100644 --- a/erpnext/buying/doctype/purchase_common/purchase_common.js +++ b/erpnext/buying/doctype/purchase_common/purchase_common.js @@ -111,7 +111,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ var item = frappe.get_doc(cdt, cdn); if(item.item_code && item.uom) { return this.frm.call({ - method: "erpnext.buying.utils.get_conversion_factor", + method: "erpnext.stock.get_item_details.get_conversion_factor", child: item, args: { item_code: item.item_code, @@ -144,7 +144,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({ var item = frappe.get_doc(cdt, cdn); if(item.item_code && item.warehouse) { return this.frm.call({ - method: "erpnext.buying.utils.get_projected_qty", + method: "erpnext.stock.get_item_details.get_projected_qty", child: item, args: { item_code: item.item_code, diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js index dce9916c51..06eb470318 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.js +++ b/erpnext/selling/doctype/sales_order/sales_order.js @@ -89,7 +89,7 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend( var item = frappe.get_doc(cdt, cdn); if(item.item_code && item.warehouse) { return this.frm.call({ - method: "erpnext.selling.utils.get_available_qty", + method: "erpnext.stock.get_item_details.get_available_qty", child: item, args: { item_code: item.item_code, diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js index b4841006e2..260fbe5ab9 100644 --- a/erpnext/selling/sales_common.js +++ b/erpnext/selling/sales_common.js @@ -215,7 +215,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({ var item = frappe.get_doc(cdt, cdn); if(item.item_code && item.warehouse) { return this.frm.call({ - method: "erpnext.selling.utils.get_available_qty", + method: "erpnext.stock.get_item_details.get_available_qty", child: item, args: { item_code: item.item_code,