From 2ad6d637ee9193253fbade6ab35769636906c8d1 Mon Sep 17 00:00:00 2001 From: ljain112 Date: Tue, 20 Aug 2024 10:58:45 +0530 Subject: [PATCH 1/6] fix: revert 091c5496b20864577d133b0804e957ff8995606f (cherry picked from commit eeb6e75dcf4a79d8ea87c4538f3424348088117d) --- .../doctype/purchase_invoice/purchase_invoice.js | 2 +- .../doctype/purchase_invoice/purchase_invoice.py | 16 ---------------- 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 9c8c8cdfb03..54153b5c19f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -652,7 +652,7 @@ frappe.ui.form.on("Purchase Invoice", { if (frm.doc.supplier) { frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0; } - if (!frm.doc.__onload.enable_apply_tds) { + if (!frm.doc.__onload.supplier_tds) { frm.set_df_property("apply_tds", "read_only", 1); } } diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py index 623fb941b89..c9f3b220cc6 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -346,22 +346,6 @@ class PurchaseInvoice(BuyingController): self.tax_withholding_category = tds_category self.set_onload("supplier_tds", tds_category) - # If Linked Purchase Order has TDS applied, enable 'apply_tds' checkbox - if purchase_orders := [x.purchase_order for x in self.items if x.purchase_order]: - po = qb.DocType("Purchase Order") - po_with_tds = ( - qb.from_(po) - .select(po.name) - .where( - po.docstatus.eq(1) - & (po.name.isin(purchase_orders)) - & (po.apply_tds.eq(1)) - & (po.tax_withholding_category.notnull()) - ) - .run() - ) - self.set_onload("enable_apply_tds", True if po_with_tds else False) - super().set_missing_values(for_validate) def validate_credit_to_acc(self): From 11359bd2353e7804e226ae000464093d8d5aa71c Mon Sep 17 00:00:00 2001 From: ljain112 Date: Fri, 23 Aug 2024 12:34:07 +0530 Subject: [PATCH 2/6] fix: tds workflow in purchase order (cherry picked from commit a7888b26a73ab61240adf22392bb2ef7b4f93927) --- .../doctype/purchase_order/purchase_order.js | 36 +++++++++++++++++++ .../doctype/purchase_order/purchase_order.py | 7 ++++ 2 files changed, 43 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index bd92ebef3d7..cab375ea557 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -65,6 +65,33 @@ frappe.ui.form.on("Purchase Order", { } }, + supplier: function (frm) { + // Do not update if inter company reference is there as the details will already be updated + if (frm.updating_party_details || frm.doc.inter_company_invoice_reference) return; + + if (frm.doc.__onload && frm.doc.__onload.load_after_mapping) return; + + erpnext.utils.get_party_details( + frm, + "erpnext.accounts.party.get_party_details", + { + posting_date: frm.doc.transaction_date, + bill_date: frm.doc.bill_date, + party: frm.doc.supplier, + party_type: "Supplier", + account: frm.doc.credit_to, + price_list: frm.doc.buying_price_list, + fetch_payment_terms_template: cint(!frm.doc.ignore_default_payment_terms_template), + }, + function () { + frm.doc.apply_tds = frm.supplier_tds ? 1 : 0; + frm.doc.tax_withholding_category = frm.supplier_tds; + frm.set_df_property("apply_tds", "read_only", frm.supplier_tds ? 0 : 1); + frm.set_df_property("tax_withholding_category", "hidden", frm.supplier_tds ? 0 : 1); + } + ); + }, + get_materials_from_supplier: function (frm) { let po_details = []; @@ -108,6 +135,15 @@ frappe.ui.form.on("Purchase Order", { frm.set_value("transaction_date", frappe.datetime.get_today()); } + if (frm.doc.__onload && frm.is_new()) { + if (frm.doc.supplier) { + frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0; + } + if (!frm.doc.__onload.supplier_tds) { + frm.set_df_property("apply_tds", "read_only", 1); + } + } + erpnext.queries.setup_queries(frm, "Warehouse", function () { return erpnext.queries.warehouse(frm.doc); }); diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 0508483a0fc..32968bc6a56 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -648,6 +648,13 @@ class PurchaseOrder(BuyingController): if sco: update_sco_status(sco, "Closed" if self.status == "Closed" else None) + def set_missing_values(self, for_validate=False): + tds_category = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category") + if tds_category and not for_validate: + self.apply_tds = 1 + self.tax_withholding_category = tds_category + self.set_onload("supplier_tds", tds_category) + @frappe.request_cache def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor=1.0): From 5edebb28a5bcbeacc1084c9da3cb99e156d95b8d Mon Sep 17 00:00:00 2001 From: ljain112 Date: Tue, 3 Sep 2024 11:44:55 +0530 Subject: [PATCH 3/6] fix: do not check appy_tds in Purchase Order Automatically (cherry picked from commit be6c174b439c6a3729f89583c74723921e1fb9f5) --- erpnext/buying/doctype/purchase_order/purchase_order.js | 2 -- erpnext/buying/doctype/purchase_order/purchase_order.py | 2 ++ 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index cab375ea557..a40ef47afcf 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -84,8 +84,6 @@ frappe.ui.form.on("Purchase Order", { fetch_payment_terms_template: cint(!frm.doc.ignore_default_payment_terms_template), }, function () { - frm.doc.apply_tds = frm.supplier_tds ? 1 : 0; - frm.doc.tax_withholding_category = frm.supplier_tds; frm.set_df_property("apply_tds", "read_only", frm.supplier_tds ? 0 : 1); frm.set_df_property("tax_withholding_category", "hidden", frm.supplier_tds ? 0 : 1); } diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 32968bc6a56..6c311953aea 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -655,6 +655,8 @@ class PurchaseOrder(BuyingController): self.tax_withholding_category = tds_category self.set_onload("supplier_tds", tds_category) + super().set_missing_values(for_validate) + @frappe.request_cache def item_last_purchase_rate(name, conversion_rate, item_code, conversion_factor=1.0): From 01f30682ee9e15a51161a4f2a91681484e6ac8bf Mon Sep 17 00:00:00 2001 From: ljain112 Date: Tue, 3 Sep 2024 13:58:30 +0530 Subject: [PATCH 4/6] fix: consistent behaviour on refresh (cherry picked from commit b216d7127816a9b61c3ca20c645e5b78e9984be6) --- erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js | 4 ++-- erpnext/buying/doctype/purchase_order/purchase_order.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js index 54153b5c19f..2d5cbb9e6c3 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -648,8 +648,8 @@ frappe.ui.form.on("Purchase Invoice", { }, onload: function (frm) { - if (frm.doc.__onload && frm.is_new()) { - if (frm.doc.supplier) { + if (frm.doc.__onload && frm.doc.supplier) { + if (frm.is_new()) { frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0; } if (!frm.doc.__onload.supplier_tds) { diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js index a40ef47afcf..ac2aa43f23d 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.js +++ b/erpnext/buying/doctype/purchase_order/purchase_order.js @@ -133,8 +133,8 @@ frappe.ui.form.on("Purchase Order", { frm.set_value("transaction_date", frappe.datetime.get_today()); } - if (frm.doc.__onload && frm.is_new()) { - if (frm.doc.supplier) { + if (frm.doc.__onload && frm.doc.supplier) { + if (frm.is_new()) { frm.doc.apply_tds = frm.doc.__onload.supplier_tds ? 1 : 0; } if (!frm.doc.__onload.supplier_tds) { From 7027be8fbcf51282ea470299e4edb3d9ce89dd6f Mon Sep 17 00:00:00 2001 From: ljain112 Date: Wed, 4 Sep 2024 13:57:03 +0530 Subject: [PATCH 5/6] fix: set tax_withholding_category from Purchase Order while creating pi form po (cherry picked from commit b9048ca6faad26837626f42a9cc475f96d4a4894) --- erpnext/buying/doctype/purchase_order/purchase_order.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index 6c311953aea..afb43e30c7b 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -769,6 +769,11 @@ def get_mapped_purchase_invoice(source_name, target_doc=None, ignore_permissions def postprocess(source, target): target.flags.ignore_permissions = ignore_permissions set_missing_values(source, target) + + # set tax_withholding_category from Purchase Order + if source.apply_tds and source.tax_withholding_category and target.apply_tds: + target.tax_withholding_category = source.tax_withholding_category + # Get the advance paid Journal Entries in Purchase Invoice Advance if target.get("allocate_advances_automatically"): target.set_advances() From 741c18b14468f29586cc9c19c293b6f6518249e1 Mon Sep 17 00:00:00 2001 From: ljain112 Date: Tue, 10 Sep 2024 13:11:09 +0530 Subject: [PATCH 6/6] fix: do not auto apply tds in purchase order (cherry picked from commit 0b942a06144977a052b48d6b61daf9c61816c82d) --- erpnext/buying/doctype/purchase_order/purchase_order.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py index afb43e30c7b..14424dfdf4a 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -651,8 +651,6 @@ class PurchaseOrder(BuyingController): def set_missing_values(self, for_validate=False): tds_category = frappe.db.get_value("Supplier", self.supplier, "tax_withholding_category") if tds_category and not for_validate: - self.apply_tds = 1 - self.tax_withholding_category = tds_category self.set_onload("supplier_tds", tds_category) super().set_missing_values(for_validate)