From 9d835a039a593ac1aa48ab8207794e188e673050 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Dec 2013 11:00:40 +0530 Subject: [PATCH 01/12] [fix] [minor] convert serial no to upper case for comparing --- stock/doctype/serial_no/serial_no.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py index dc067ec6d1..bd2704d8ac 100644 --- a/stock/doctype/serial_no/serial_no.py +++ b/stock/doctype/serial_no/serial_no.py @@ -150,7 +150,7 @@ class DocType(StockController): where serial_no like %s and item_code=%s and ifnull(is_cancelled, 'No')='No' order by posting_date desc, posting_time desc, name desc""", ("%%%s%%" % self.doc.name, self.doc.item_code), as_dict=1): - if self.doc.name in get_serial_nos(sle.serial_no): + if self.doc.name.upper() in get_serial_nos(sle.serial_no): if sle.actual_qty > 0: sle_dict.setdefault("incoming", []).append(sle) else: @@ -268,7 +268,8 @@ def get_item_details(item_code): from tabItem where name=%s""", item_code, as_dict=True)[0] def get_serial_nos(serial_no): - return [s.strip() for s in cstr(serial_no).strip().replace(',', '\n').split('\n') if s.strip()] + return [s.strip() for s in cstr(serial_no).strip().upper().replace(',', '\n').split('\n') + if s.strip()] def make_serial_no(serial_no, sle): sr = webnotes.new_bean("Serial No") From 13fc64d7329a1b15236fc9383c7f31ea68e8cc31 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Dec 2013 12:50:42 +0530 Subject: [PATCH 02/12] [fix] [minor] Negative outstanding validation for JV against JV --- accounts/doctype/gl_entry/gl_entry.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/accounts/doctype/gl_entry/gl_entry.py b/accounts/doctype/gl_entry/gl_entry.py index 3a0b28c78f..d3c6317787 100644 --- a/accounts/doctype/gl_entry/gl_entry.py +++ b/accounts/doctype/gl_entry/gl_entry.py @@ -5,8 +5,7 @@ from __future__ import unicode_literals import webnotes from webnotes.utils import flt, fmt_money, getdate -from webnotes.model.code import get_obj -from webnotes import msgprint, _ +from webnotes import _ class DocType: def __init__(self,d,dl): @@ -130,11 +129,12 @@ def update_outstanding_amt(account, against_voucher_type, against_voucher, on_ca against_voucher_amount = flt(webnotes.conn.sql(""" select sum(ifnull(debit, 0)) - sum(ifnull(credit, 0)) from `tabGL Entry` where voucher_type = 'Journal Voucher' and voucher_no = %s - and account = %s""", (against_voucher, account))[0][0]) + and account = %s and ifnull(against_voucher, '') = ''""", + (against_voucher, account))[0][0]) bal = against_voucher_amount + bal if against_voucher_amount < 0: bal = -bal - + # Validation : Outstanding can not be negative if bal < 0 and not on_cancel: webnotes.throw(_("Outstanding for Voucher ") + against_voucher + _(" will become ") + @@ -158,4 +158,4 @@ def validate_frozen_account(account, adv_adj): elif frozen_accounts_modifier not in webnotes.user.get_roles(): webnotes.throw(account + _(" is a frozen account. ") + _("To create / edit transactions against this account, you need role") + ": " + - frozen_accounts_modifier) + frozen_accounts_modifier) \ No newline at end of file From 6ad8973538788c869cf0896b1daba13463c02b3e Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Thu, 12 Dec 2013 13:39:21 +0600 Subject: [PATCH 03/12] bumped to version 3.2.0 --- config.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.json b/config.json index bc72fa9bc9..779f0638b7 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "app_name": "ERPNext", - "app_version": "3.1.2", + "app_version": "3.2.0", "base_template": "app/portal/templates/base.html", "modules": { "Accounts": { @@ -74,5 +74,5 @@ "type": "module" } }, - "requires_framework_version": "==3.1.1" + "requires_framework_version": "==3.2.0" } \ No newline at end of file From c3f2fb7355ec457edca6f1972063e367d66f2c6f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Dec 2013 14:55:25 +0530 Subject: [PATCH 04/12] [fix] [minor] payment to invoice patching tool --- .../payment_to_invoice_matching_tool.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py b/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py index 6a31191969..dea5fb59c9 100644 --- a/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py +++ b/accounts/doctype/payment_to_invoice_matching_tool/payment_to_invoice_matching_tool.py @@ -145,6 +145,8 @@ def gl_entry_details(doctype, txt, searchfield, start, page_len, filters): and voucher_no != gle.voucher_no) != abs(ifnull(gle.debit, 0) - ifnull(gle.credit, 0) ) + and if(gle.voucher_type='Sales Invoice', (select is_pos from `tabSales Invoice` + where name=gle.voucher_no), 0)=0 %(mcond)s ORDER BY gle.posting_date desc, gle.voucher_no desc limit %(start)s, %(page_len)s""" % { From c10c0c506671f0bf4352dacf1e8ab7354b36270f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Dec 2013 17:13:22 +0530 Subject: [PATCH 05/12] [fix] [minor] series skipping issue in salary manager --- hr/doctype/salary_manager/salary_manager.py | 1 - hr/doctype/salary_slip/salary_slip.py | 13 ++++++------- hr/doctype/salary_structure/salary_structure.py | 5 ++++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/hr/doctype/salary_manager/salary_manager.py b/hr/doctype/salary_manager/salary_manager.py index 29b13aed98..37a8c5d5e9 100644 --- a/hr/doctype/salary_manager/salary_manager.py +++ b/hr/doctype/salary_manager/salary_manager.py @@ -12,7 +12,6 @@ class DocType: self.doc = doc self.doclist = doclist - def get_emp_list(self): """ Returns list of active employees based on selected criteria diff --git a/hr/doctype/salary_slip/salary_slip.py b/hr/doctype/salary_slip/salary_slip.py index f5eeea164d..94660d0fd8 100644 --- a/hr/doctype/salary_slip/salary_slip.py +++ b/hr/doctype/salary_slip/salary_slip.py @@ -29,18 +29,17 @@ class DocType(TransactionBase): if struct: self.pull_sal_struct(struct) - def check_sal_struct(self): - struct = webnotes.conn.sql("select name from `tabSalary Structure` where employee ='%s' and is_active = 'Yes' "%self.doc.employee) + struct = webnotes.conn.sql("""select name from `tabSalary Structure` + where employee=%s and is_active = 'Yes'""", self.doc.employee) if not struct: - msgprint("Please create Salary Structure for employee '%s'"%self.doc.employee) - self.doc.employee = '' + msgprint("Please create Salary Structure for employee '%s'" % self.doc.employee) + self.doc.employee = None return struct and struct[0][0] or '' - def pull_sal_struct(self, struct): - from hr.doctype.salary_structure.salary_structure import make_salary_slip - self.doclist = make_salary_slip(struct, self.doclist) + from hr.doctype.salary_structure.salary_structure import get_mapped_doclist + self.doclist = get_mapped_doclist(struct, self.doclist) def pull_emp_details(self): emp = webnotes.conn.get_value("Employee", self.doc.employee, diff --git a/hr/doctype/salary_structure/salary_structure.py b/hr/doctype/salary_structure/salary_structure.py index 2dc056dd16..a034b90284 100644 --- a/hr/doctype/salary_structure/salary_structure.py +++ b/hr/doctype/salary_structure/salary_structure.py @@ -74,6 +74,9 @@ class DocType: @webnotes.whitelist() def make_salary_slip(source_name, target_doclist=None): + return [d.fields for d in get_mapped_doclist(source_name, target_doclist)] + +def get_mapped_doclist(source_name, target_doclist=None): from webnotes.model.mapper import get_mapped_doclist def postprocess(source, target): @@ -109,4 +112,4 @@ def make_salary_slip(source_name, target_doclist=None): } }, target_doclist, postprocess) - return [d.fields for d in doclist] \ No newline at end of file + return doclist \ No newline at end of file From f6e06311becce981a1ce54f10d460a0dee053251 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 12 Dec 2013 17:45:29 +0530 Subject: [PATCH 06/12] [cleanup] [minor] carry forwarded leaves field read only and depends on carry forward checkbox --- hr/doctype/leave_allocation/leave_allocation.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hr/doctype/leave_allocation/leave_allocation.txt b/hr/doctype/leave_allocation/leave_allocation.txt index a24823a454..38e3eb57c9 100644 --- a/hr/doctype/leave_allocation/leave_allocation.txt +++ b/hr/doctype/leave_allocation/leave_allocation.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-20 19:10:38", "docstatus": 0, - "modified": "2013-07-05 14:44:19", + "modified": "2013-12-12 17:41:52", "modified_by": "Administrator", "owner": "Administrator" }, @@ -131,10 +131,12 @@ "label": "Carry Forward" }, { + "depends_on": "carry_forward", "doctype": "DocField", "fieldname": "carry_forwarded_leaves", "fieldtype": "Float", - "label": "Carry Forwarded Leaves" + "label": "Carry Forwarded Leaves", + "read_only": 1 }, { "allow_on_submit": 1, From f943dc5dc1d446b6c47beda4e85289464c801699 Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Thu, 12 Dec 2013 19:45:30 +0600 Subject: [PATCH 07/12] bumped to version 3.2.1 --- config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.json b/config.json index 779f0638b7..77a00b846f 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "app_name": "ERPNext", - "app_version": "3.2.0", + "app_version": "3.2.1", "base_template": "app/portal/templates/base.html", "modules": { "Accounts": { From 1251a93fc5aabb477677be119bce899f35868e30 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 13 Dec 2013 11:40:16 +0530 Subject: [PATCH 08/12] [fix] [minor] fixes in packed item --- selling/doctype/sales_order/sales_order.py | 9 ++++----- stock/doctype/delivery_note/delivery_note.py | 7 +++---- stock/doctype/packed_item/packed_item.py | 15 +++------------ 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 771aafa6c3..a66c4460a0 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -110,12 +110,12 @@ class DocType(SellingController): self.validate_uom_is_integer("stock_uom", "qty") self.validate_for_items() self.validate_warehouse() - + from stock.doctype.packed_item.packed_item import make_packing_list self.doclist = make_packing_list(self,'sales_order_details') - + self.validate_with_previous_doc() - + if not self.doc.status: self.doc.status = "Draft" @@ -124,8 +124,7 @@ class DocType(SellingController): "Cancelled"]) if not self.doc.billing_status: self.doc.billing_status = 'Not Billed' - if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered' - + if not self.doc.delivery_status: self.doc.delivery_status = 'Not Delivered' def validate_warehouse(self): from stock.utils import validate_warehouse_user, validate_warehouse_company diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 1089a5697c..b2149b1be8 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -73,6 +73,9 @@ class DocType(SellingController): self.update_current_stock() self.validate_with_previous_doc() + from stock.doctype.packed_item.packed_item import make_packing_list + self.doclist = make_packing_list(self, 'delivery_note_details') + self.doc.status = 'Draft' if not self.doc.installation_status: self.doc.installation_status = 'Not Installed' @@ -142,10 +145,6 @@ class DocType(SellingController): bin = webnotes.conn.sql("select actual_qty, projected_qty from `tabBin` where item_code = %s and warehouse = %s", (d.item_code, d.warehouse), as_dict = 1) d.actual_qty = bin and flt(bin[0]['actual_qty']) or 0 d.projected_qty = bin and flt(bin[0]['projected_qty']) or 0 - - def on_update(self): - from stock.doctype.packed_item.packed_item import make_packing_list - self.doclist = make_packing_list(self, 'delivery_note_details') def on_submit(self): self.validate_packed_qty() diff --git a/stock/doctype/packed_item/packed_item.py b/stock/doctype/packed_item/packed_item.py index a58444d554..ba3cb30ff3 100644 --- a/stock/doctype/packed_item/packed_item.py +++ b/stock/doctype/packed_item/packed_item.py @@ -56,9 +56,6 @@ def update_packing_list_item(obj, packing_item_code, qty, warehouse, line, packi pi.batch_no = cstr(line.batch_no) pi.idx = packing_list_idx - # saved, since this function is called on_update of delivery note - pi.save() - packing_list_idx += 1 @@ -87,19 +84,13 @@ def cleanup_packing_list(obj, parent_items): for d in obj.doclist.get({"parentfield": "packing_details"}): if [d.parent_item, d.parent_detail_docname] not in parent_items: # mark for deletion from doclist - delete_list.append(d.name) + delete_list.append([d.parent_item, d.parent_detail_docname]) if not delete_list: return obj.doclist # delete from doclist - obj.doclist = webnotes.doclist(filter(lambda d: d.name not in delete_list, obj.doclist)) - - # delete from db - webnotes.conn.sql("""\ - delete from `tabPacked Item` - where name in (%s)""" - % (", ".join(["%s"] * len(delete_list))), - tuple(delete_list)) + obj.doclist = webnotes.doclist(filter(lambda d: [d.parent_item, d.parent_detail_docname] + not in delete_list, obj.doclist)) return obj.doclist \ No newline at end of file From dea59996d87c22b02b4f9c44fa84943e30d64b4f Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Sat, 14 Dec 2013 01:15:37 +0600 Subject: [PATCH 09/12] bumped to version 3.2.2 --- config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.json b/config.json index 77a00b846f..28d1a3d5e3 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "app_name": "ERPNext", - "app_version": "3.2.1", + "app_version": "3.2.2", "base_template": "app/portal/templates/base.html", "modules": { "Accounts": { From 70cd146bb5d00c78a906947332f70dc176bebe36 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 14 Dec 2013 17:16:21 +0530 Subject: [PATCH 10/12] [fix] [minor] update naming series --- setup/doctype/naming_series/naming_series.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/setup/doctype/naming_series/naming_series.py b/setup/doctype/naming_series/naming_series.py index 234a689a7b..3a14d4182d 100644 --- a/setup/doctype/naming_series/naming_series.py +++ b/setup/doctype/naming_series/naming_series.py @@ -22,7 +22,7 @@ class DocType: where fieldname='naming_series'""") )))), "prefixes": "\n".join([''] + [i[0] for i in - webnotes.conn.sql("""select name from tabSeries""")]) + webnotes.conn.sql("""select name from tabSeries order by name""")]) } def scrub_options_list(self, ol): @@ -38,7 +38,7 @@ class DocType: self.set_series_for(self.doc.select_doc_for_series, series_list) # create series - map(self.insert_series, series_list) + map(self.insert_series, [d.split('.')[0] for d in series_list]) msgprint('Series Updated') @@ -103,7 +103,8 @@ class DocType: dt.validate_series(series, self.doc.select_doc_for_series) for i in sr: if i[0]: - if series in i[0].split("\n"): + existing_series = [d.split('.')[0] for d in i[0].split("\n")] + if series.split(".")[0] in existing_series: msgprint("Oops! Series name %s is already in use in %s. \ Please select a new one" % (series, i[1]), raise_exception=1) @@ -120,17 +121,21 @@ class DocType: def get_current(self, arg=None): """get series current""" - self.doc.current_value = webnotes.conn.get_value("Series", self.doc.prefix, "current") + self.doc.current_value = webnotes.conn.get_value("Series", + self.doc.prefix.split('.')[0], "current") def insert_series(self, series): """insert series if missing""" if not webnotes.conn.exists('Series', series): - webnotes.conn.sql("insert into tabSeries (name, current) values (%s,0)", (series)) + webnotes.conn.sql("insert into tabSeries (name, current) values (%s, 0)", + (series)) def update_series_start(self): if self.doc.prefix: - self.insert_series(self.doc.prefix) - webnotes.conn.sql("update `tabSeries` set current = '%s' where name = '%s'" % (self.doc.current_value,self.doc.prefix)) + prefix = self.doc.prefix.split('.')[0] + self.insert_series(prefix) + webnotes.conn.sql("update `tabSeries` set current = %s where name = %s", + (self.doc.current_value, prefix)) msgprint("Series Updated Successfully") else: msgprint("Please select prefix first") From 45a35ced331a8947ca33da6cc02f16935cba261e Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sat, 14 Dec 2013 17:29:42 +0530 Subject: [PATCH 11/12] [fix] [minor] match condition fixes for customer and supplier --- buying/doctype/supplier_quotation/supplier_quotation.txt | 3 ++- selling/doctype/quotation/quotation.txt | 3 ++- stock/doctype/delivery_note/delivery_note.txt | 4 ++-- support/doctype/support_ticket/support_ticket.txt | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/buying/doctype/supplier_quotation/supplier_quotation.txt b/buying/doctype/supplier_quotation/supplier_quotation.txt index cf62a9f9fb..e532aa6dd1 100644 --- a/buying/doctype/supplier_quotation/supplier_quotation.txt +++ b/buying/doctype/supplier_quotation/supplier_quotation.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-21 16:16:45", "docstatus": 0, - "modified": "2013-11-22 17:16:16", + "modified": "2013-12-14 17:27:47", "modified_by": "Administrator", "owner": "Administrator" }, @@ -632,6 +632,7 @@ "cancel": 0, "create": 0, "doctype": "DocPerm", + "match": "supplier", "role": "Supplier", "submit": 0, "write": 0 diff --git a/selling/doctype/quotation/quotation.txt b/selling/doctype/quotation/quotation.txt index dc342726e4..93346d3029 100644 --- a/selling/doctype/quotation/quotation.txt +++ b/selling/doctype/quotation/quotation.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:08", "docstatus": 0, - "modified": "2013-11-27 17:57:19", + "modified": "2013-12-14 17:25:46", "modified_by": "Administrator", "owner": "Administrator" }, @@ -863,6 +863,7 @@ "cancel": 0, "create": 0, "doctype": "DocPerm", + "match": "customer", "role": "Customer", "submit": 0, "write": 0 diff --git a/stock/doctype/delivery_note/delivery_note.txt b/stock/doctype/delivery_note/delivery_note.txt index 7fb166e686..450b4f7c2e 100644 --- a/stock/doctype/delivery_note/delivery_note.txt +++ b/stock/doctype/delivery_note/delivery_note.txt @@ -2,7 +2,7 @@ { "creation": "2013-05-24 19:29:09", "docstatus": 0, - "modified": "2013-11-03 14:20:19", + "modified": "2013-12-14 17:26:12", "modified_by": "Administrator", "owner": "Administrator" }, @@ -1058,7 +1058,7 @@ }, { "doctype": "DocPerm", - "match": "customer_name", + "match": "customer", "role": "Customer" } ] \ No newline at end of file diff --git a/support/doctype/support_ticket/support_ticket.txt b/support/doctype/support_ticket/support_ticket.txt index 684c809a90..4fa4874a9c 100644 --- a/support/doctype/support_ticket/support_ticket.txt +++ b/support/doctype/support_ticket/support_ticket.txt @@ -2,7 +2,7 @@ { "creation": "2013-02-01 10:36:25", "docstatus": 0, - "modified": "2013-11-02 14:06:26", + "modified": "2013-12-14 17:27:02", "modified_by": "Administrator", "owner": "Administrator" }, @@ -278,6 +278,7 @@ { "cancel": 0, "doctype": "DocPerm", + "match": "customer", "role": "Customer" }, { From ba31ecc6112223da94c201051b05e0b0f9c13da6 Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Sat, 14 Dec 2013 18:29:58 +0600 Subject: [PATCH 12/12] bumped to version 3.2.3 --- config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.json b/config.json index 28d1a3d5e3..bb88d76293 100644 --- a/config.json +++ b/config.json @@ -1,6 +1,6 @@ { "app_name": "ERPNext", - "app_version": "3.2.2", + "app_version": "3.2.3", "base_template": "app/portal/templates/base.html", "modules": { "Accounts": {