From 4e4a83bcef4cb5af0c02d5fe1ff287001096ab8f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 27 Jun 2014 13:16:58 +0530 Subject: [PATCH 1/4] Fixes in maintenance schedule --- erpnext/setup/doctype/sales_person/sales_person.py | 2 +- .../doctype/maintenance_schedule/maintenance_schedule.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/setup/doctype/sales_person/sales_person.py b/erpnext/setup/doctype/sales_person/sales_person.py index bbd5690e7b..f37b139d6c 100644 --- a/erpnext/setup/doctype/sales_person/sales_person.py +++ b/erpnext/setup/doctype/sales_person/sales_person.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import frappe - +from frappe import _ from frappe.utils import flt from frappe.utils.nestedset import NestedSet diff --git a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py index a0eba19ff8..f276b56b03 100644 --- a/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py +++ b/erpnext/support/doctype/maintenance_schedule/maintenance_schedule.py @@ -40,9 +40,8 @@ class MaintenanceSchedule(TransactionBase): child.idx = count count = count + 1 child.sales_person = d.sales_person - child.save(1) - self.on_update() + self.save() def on_submit(self): if not self.get('maintenance_schedule_detail'): From 7c9652997bd4e6215e7786e0f5c97a8234ba5c89 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 27 Jun 2014 15:19:26 +0530 Subject: [PATCH 2/4] Item website specification from item group --- .../accounts/doctype/sales_invoice/sales_invoice.py | 2 +- erpnext/stock/doctype/item/item.js | 10 +++------- erpnext/stock/doctype/item/item.py | 9 +++++++++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 262ac22386..834865bcd6 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -262,7 +262,7 @@ class SalesInvoice(SellingController): """Validate Fixed Asset and whether Income Account Entered Exists""" for d in self.get('entries'): item = frappe.db.sql("""select name,is_asset_item,is_sales_item from `tabItem` - where name = %s and (ifnull(end_of_life,'')='' or end_of_life > now())""", d.item_code) + where name = %s""", d.item_code) acc = frappe.db.sql("""select account_type from `tabAccount` where name = %s and docstatus != 2""", d.income_account) if item and item[0][1] == 'Yes' and acc and acc[0][0] != 'Fixed Asset': diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js index 173a1cfc41..93c1191da5 100644 --- a/erpnext/stock/doctype/item/item.js +++ b/erpnext/stock/doctype/item/item.js @@ -169,13 +169,9 @@ cur_frm.fields_dict.item_supplier_details.grid.get_field("supplier").get_query = } cur_frm.cscript.copy_from_item_group = function(doc) { - frappe.model.with_doc("Item Group", doc.item_group, function(name, r) { - $.each((r.docs[0].item_website_specifications || []), function(i, d) { - var n = frappe.model.add_child(doc, "Item Website Specification", "item_website_specifications"); - n.label = d.label; - n.description = d.description; - }); - cur_frm.refresh(); + return cur_frm.call({ + doc: doc, + method: "copy_specification_from_item_group" }); } diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index f43b531392..1f163890ba 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -256,6 +256,15 @@ class Item(WebsiteGenerator): frappe.db.get_value("Stock Settings", None, "allow_negative_stock")) frappe.db.auto_commit_on_many_writes = 0 + def copy_specification_from_item_group(self): + self.set("item_website_specifications", []) + if self.item_group: + for label, desc in frappe.db.get_values("Item Website Specification", + {"parent": self.item_group}, ["label", "description"]): + row = self.append("item_website_specifications") + row.label = label + row.description = desc + def validate_end_of_life(item_code, end_of_life=None, verbose=1): if not end_of_life: end_of_life = frappe.db.get_value("Item", item_code, "end_of_life") From 606c601fc01257e336c53898ceb46d8f9946280e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 27 Jun 2014 15:35:04 +0530 Subject: [PATCH 3/4] Make debit/credit note from sales/purchase return --- erpnext/stock/doctype/stock_entry/stock_entry.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js index 959739225e..10241983ad 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.js +++ b/erpnext/stock/doctype/stock_entry/stock_entry.js @@ -213,11 +213,7 @@ erpnext.stock.StockEntry = erpnext.stock.StockController.extend({ if(!r.exc) { var jv_name = frappe.model.make_new_doc_and_get_name('Journal Voucher'); var jv = locals["Journal Voucher"][jv_name]; - $.extend(jv, r.message[0]); - $.each(r.message.slice(1), function(i, jvd) { - var child = frappe.model.add_child(jv, "Journal Voucher Detail", "entries"); - $.extend(child, jvd); - }); + $.extend(jv, r.message); loaddoc("Journal Voucher", jv_name); } } From 6c7cd70202bcb12e6897997d95795f7f7f87ea4c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 30 Jun 2014 11:49:46 +0530 Subject: [PATCH 4/4] Pricing rule condition if item group missing --- erpnext/accounts/doctype/pricing_rule/pricing_rule.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py index 2706603bc6..9141697a77 100644 --- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.py +++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.py @@ -131,6 +131,8 @@ def get_pricing_rule_for_item(args): if not (args.item_group and args.brand): args.item_group, args.brand = frappe.db.get_value("Item", args.item_code, ["item_group", "brand"]) + if not args.item_group: + frappe.throw(_("Item Group not mentioned in item master for item {0}").format(args.item_code)) if args.customer and not (args.customer_group and args.territory): args.customer_group, args.territory = frappe.db.get_value("Customer", args.customer, @@ -188,12 +190,15 @@ def get_pricing_rules(args): conditions += """ and %(transaction_date)s between ifnull(valid_from, '2000-01-01') and ifnull(valid_upto, '2500-12-31')""" + item_group_condition = _get_tree_conditions("Item Group", False) + if item_group_condition: item_group_condition = " or " + item_group_condition + return frappe.db.sql("""select * from `tabPricing Rule` - where (item_code=%(item_code)s or {item_group_condition} or brand=%(brand)s) + where (item_code=%(item_code)s {item_group_condition} or brand=%(brand)s) and docstatus < 2 and ifnull(disable, 0) = 0 and ifnull({transaction_type}, 0) = 1 {conditions} order by priority desc, name desc""".format( - item_group_condition=_get_tree_conditions("Item Group", False), + item_group_condition=item_group_condition, transaction_type=args.transaction_type, conditions=conditions), args, as_dict=1) def filter_pricing_rules(args, pricing_rules):