From eeb6e75dcf4a79d8ea87c4538f3424348088117d 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 --- .../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 3dc2ef01a58..9a9bf84e944 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -656,7 +656,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 44d8a407017..70c79dc3b3d 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -347,22 +347,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 a7888b26a73ab61240adf22392bb2ef7b4f93927 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 --- .../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 4ecdd44d594..b85555ee9f7 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 37592ce77fa..388fdb336ba 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -652,6 +652,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 be6c174b439c6a3729f89583c74723921e1fb9f5 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 --- 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 b85555ee9f7..aaab5390e91 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 388fdb336ba..e3240de70a3 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -659,6 +659,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 b216d7127816a9b61c3ca20c645e5b78e9984be6 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 --- 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 9a9bf84e944..79f8deea59b 100644 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js @@ -652,8 +652,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 aaab5390e91..77a6467ccd0 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 b9048ca6faad26837626f42a9cc475f96d4a4894 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 --- 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 e3240de70a3..d28f8f62318 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -773,6 +773,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 0b942a06144977a052b48d6b61daf9c61816c82d 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 --- 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 d28f8f62318..320bcde0a25 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/purchase_order.py @@ -655,8 +655,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)