From f95171e8088d47acdcaa596a928f616cf6de2b5b Mon Sep 17 00:00:00 2001 From: crossxcell99 Date: Tue, 26 Feb 2019 18:01:37 +0100 Subject: [PATCH 1/5] fix: call base clase onload method --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 0dd716df3f..a9e8fbc3e8 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -46,6 +46,7 @@ class PurchaseInvoice(BuyingController): }] def onload(self): + super(PurchaseInvoice, self).onload() supplier_tds = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category") self.set_onload("supplier_tds", supplier_tds) From 74cfe5771655d9d5b27bcf437a87e9d6aae36e39 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 26 Feb 2019 20:08:26 +0530 Subject: [PATCH 2/5] fix: e-invoicing patch, patch to set country code in the address --- erpnext/patches.txt | 2 +- .../v11_0/make_italian_localization_fields.py | 10 ++++++---- erpnext/regional/italy/e-invoice.xml | 10 +++++----- erpnext/regional/italy/setup.py | 2 +- erpnext/regional/italy/utils.py | 20 +++++++++++-------- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index b1a393bdf3..1f104be112 100755 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -587,4 +587,4 @@ erpnext.patches.v11_1.setup_guardian_role execute:frappe.delete_doc('DocType', 'Notification Control') erpnext.patches.v11_0.remove_barcodes_field_from_copy_fields_to_variants erpnext.patches.v10_0.item_barcode_childtable_migrate # 16-02-2019 -erpnext.patches.v11_0.make_italian_localization_fields +erpnext.patches.v11_0.make_italian_localization_fields # 26-02-2019 diff --git a/erpnext/patches/v11_0/make_italian_localization_fields.py b/erpnext/patches/v11_0/make_italian_localization_fields.py index fa77149752..44a281f86f 100644 --- a/erpnext/patches/v11_0/make_italian_localization_fields.py +++ b/erpnext/patches/v11_0/make_italian_localization_fields.py @@ -22,7 +22,9 @@ def execute(): condition += " when '{0}' then '{1}'".format(frappe.db.escape(state), frappe.db.escape(code)) if condition: - frappe.db.sql(""" - UPDATE tabAddress set state_code = (case state {condition} end) - WHERE country in ('Italy', 'Italia', 'Italian Republic', 'Repubblica Italiana') - """.format(condition=condition)) + condition = "state_code = (case state {0} end),".format(condition) + + frappe.db.sql(""" + UPDATE tabAddress set {condition} country_code = UPPER(ifnull((select code + from `tabCountry` where name = `tabAddress`.country), '')) + """.format(condition=condition)) diff --git a/erpnext/regional/italy/e-invoice.xml b/erpnext/regional/italy/e-invoice.xml index 30ac1e0f0e..c0ef4af549 100644 --- a/erpnext/regional/italy/e-invoice.xml +++ b/erpnext/regional/italy/e-invoice.xml @@ -9,7 +9,7 @@ {%- if address.state_code %} {{ address.state_code }} {%- endif %} -{{ address.country_code|upper }} +{{ address.country_code }} {%- endmacro %} {%- macro render_discount_or_margin(item) -%} @@ -40,7 +40,7 @@ - {{ doc.company_address_data.country_code|upper or "IT" }} + {{ doc.company_address_data.country_code }} {{ doc.company_fiscal_code or doc.company_tax_id | replace("IT","") }} {{ doc.progressive_number }} @@ -56,7 +56,7 @@ - {{ doc.company_address_data.country_code|upper or "IT"}} + {{ doc.company_address_data.country_code }} {{ doc.company_tax_id | replace("IT","") }} {%- if doc.company_fiscal_code %} @@ -99,7 +99,7 @@ {{ doc.customer_data.fiscal_code }} {%- else %} - {{ doc.customer_address_data.country_code|upper or "IT" }} + {{ doc.customer_address_data.country_code }} {{ doc.tax_id | replace("IT","") }} {%- endif %} @@ -160,7 +160,7 @@ CODICE {{ item.item_code }} - {{ html2text(item.description) or item.item_name }} + {{ html2text(item.description or '') or item.item_name }} {{ format_float(item.qty) }} {{ item.stock_uom }} {{ format_float(item.price_list_rate or item.rate) }} diff --git a/erpnext/regional/italy/setup.py b/erpnext/regional/italy/setup.py index a9de2d1f18..1bbc7226a1 100644 --- a/erpnext/regional/italy/setup.py +++ b/erpnext/regional/italy/setup.py @@ -132,7 +132,7 @@ def make_custom_fields(update=True): 'Supplier Quotation Item': invoice_item_fields, 'Address': [ dict(fieldname='country_code', label='Country Code', - fieldtype='Data', insert_after='country', print_hide=1, read_only=1, + fieldtype='Data', insert_after='country', print_hide=1, read_only=0, fetch_from="country.code"), dict(fieldname='state_code', label='State Code', fieldtype='Data', insert_after='state', print_hide=1) diff --git a/erpnext/regional/italy/utils.py b/erpnext/regional/italy/utils.py index 540cea3f9d..edf66d78a3 100644 --- a/erpnext/regional/italy/utils.py +++ b/erpnext/regional/italy/utils.py @@ -189,7 +189,7 @@ def sales_invoice_validate(doc): if not doc.company_address: frappe.throw(_("Please set an Address on the Company '%s'" % doc.company), title=_("E-Invoicing Information Missing")) else: - validate_address(doc.company_address, "Company") + validate_address(doc.company_address) company_fiscal_regime = frappe.get_cached_value("Company", doc.company, 'fiscal_regime') if not company_fiscal_regime: @@ -217,7 +217,7 @@ def sales_invoice_validate(doc): if not doc.customer_address: frappe.throw(_("Please set the Customer Address"), title=_("E-Invoicing Information Missing")) else: - validate_address(doc.customer_address, "Customer") + validate_address(doc.customer_address) if not len(doc.taxes): frappe.throw(_("Please set at least one row in the Taxes and Charges Table"), title=_("E-Invoicing Information Missing")) @@ -285,13 +285,14 @@ def get_e_invoice_attachments(invoice): return out -def validate_address(address_name, address_context): - pincode, city = frappe.db.get_value("Address", address_name, ["pincode", "city"]) - if not pincode: - frappe.throw(_("Please set pin code on %s Address" % address_context), title=_("E-Invoicing Information Missing")) - if not city: - frappe.throw(_("Please set city on %s Address" % address_context), title=_("E-Invoicing Information Missing")) +def validate_address(address_name): + fields = ["pincode", "city", "country_code"] + data = frappe.get_cached_value("Address", address_name, fields, as_dict=1) or {} + for field in fields: + if not data.get(field): + frappe.throw(_("Please set {0} for address {1}".format(field.replace('-',''), address_name)), + title=_("E-Invoicing Information Missing")) def get_unamended_name(doc): attributes = ["naming_series", "amended_from"] @@ -312,6 +313,9 @@ def get_progressive_name_and_number(doc): return progressive_name, progressive_number def set_state_code(doc, method): + if doc.get('country_code'): + doc.country_code = doc.country_code.upper() + if not doc.get('state'): return From cd34c70670e64b7ffa6d8821b3663c98c8d9fa36 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 27 Feb 2019 18:01:25 +0530 Subject: [PATCH 3/5] fix: bom cost update is not working --- erpnext/stock/get_item_details.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 74f35953e2..8d1d779438 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -521,12 +521,15 @@ def check_packing_list(price_list_rate_name, desired_qty, item_code): :param qty: Derised Qt """ + flag = True item_price = frappe.get_doc("Item Price", price_list_rate_name) if desired_qty and item_price.packing_unit: packing_increment = desired_qty % item_price.packing_unit - if packing_increment == 0: - return True + if packing_increment != 0: + flag = False + + return flag def validate_price_list(args): if args.get("price_list"): From b48effebce28225a307bb5fa76d4f9b8d8c10649 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Wed, 27 Feb 2019 19:31:32 +0530 Subject: [PATCH 4/5] fix: test case --- erpnext/stock/doctype/item_price/test_item_price.py | 2 +- erpnext/stock/get_item_details.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/stock/doctype/item_price/test_item_price.py b/erpnext/stock/doctype/item_price/test_item_price.py index 455dff4e15..3782f540cf 100644 --- a/erpnext/stock/doctype/item_price/test_item_price.py +++ b/erpnext/stock/doctype/item_price/test_item_price.py @@ -11,7 +11,7 @@ from erpnext.stock.doctype.item_price.item_price import ItemPriceDuplicateItem class TestItemPrice(unittest.TestCase): def setUp(self): - frappe.db.sql("delete from `tabItem Price`") + frappe.db.sql("delete from `tabItem Price`") make_test_records_for_doctype("Item Price", force=True) def test_duplicate_item(self): diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py index 8d1d779438..7f0e670f65 100644 --- a/erpnext/stock/get_item_details.py +++ b/erpnext/stock/get_item_details.py @@ -490,7 +490,7 @@ def get_price_list_rate_for(args, item_code): price_list_rate = get_item_price(item_price_args, item_code) if price_list_rate: desired_qty = args.get("qty") - if check_packing_list(price_list_rate[0][0], desired_qty, item_code): + if desired_qty and check_packing_list(price_list_rate[0][0], desired_qty, item_code): item_price_data = price_list_rate else: for field in ["customer", "supplier", "min_qty"]: @@ -523,7 +523,7 @@ def check_packing_list(price_list_rate_name, desired_qty, item_code): flag = True item_price = frappe.get_doc("Item Price", price_list_rate_name) - if desired_qty and item_price.packing_unit: + if item_price.packing_unit: packing_increment = desired_qty % item_price.packing_unit if packing_increment != 0: From 58135976dd6c2e573c15bd767f20f46dc6580e79 Mon Sep 17 00:00:00 2001 From: Frappe Bot Date: Thu, 28 Feb 2019 10:08:08 +0000 Subject: [PATCH 5/5] bumped to version 11.1.12 --- erpnext/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/__init__.py b/erpnext/__init__.py index 2e7748d128..b67f30fe32 100644 --- a/erpnext/__init__.py +++ b/erpnext/__init__.py @@ -5,7 +5,7 @@ import frappe from erpnext.hooks import regional_overrides from frappe.utils import getdate -__version__ = '11.1.11' +__version__ = '11.1.12' def get_default_company(user=None): '''Get default company for user'''