From 8a56df695d9fd26f7c78ea0ebb86501ae8b6b1d1 Mon Sep 17 00:00:00 2001 From: Ankush Menat Date: Tue, 10 Jan 2023 09:54:15 +0530 Subject: [PATCH 1/6] perf: Drop `name` part from posting sort index (#33551) --- erpnext/patches.txt | 1 + .../patches/v13_0/drop_unused_sle_index_parts.py | 14 ++++++++++++++ .../stock_ledger_entry/stock_ledger_entry.py | 11 +++-------- 3 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 erpnext/patches/v13_0/drop_unused_sle_index_parts.py diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 6be6e06ca7..7495ab8d0b 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -316,6 +316,7 @@ erpnext.patches.v14_0.create_accounting_dimensions_in_subcontracting_doctypes erpnext.patches.v14_0.fix_subcontracting_receipt_gl_entries erpnext.patches.v14_0.migrate_remarks_from_gl_to_payment_ledger erpnext.patches.v13_0.update_schedule_type_in_loans +erpnext.patches.v13_0.drop_unused_sle_index_parts erpnext.patches.v14_0.create_accounting_dimensions_for_asset_capitalization erpnext.patches.v14_0.update_partial_tds_fields erpnext.patches.v14_0.create_incoterms_and_migrate_shipment diff --git a/erpnext/patches/v13_0/drop_unused_sle_index_parts.py b/erpnext/patches/v13_0/drop_unused_sle_index_parts.py new file mode 100644 index 0000000000..fa8a98ce16 --- /dev/null +++ b/erpnext/patches/v13_0/drop_unused_sle_index_parts.py @@ -0,0 +1,14 @@ +import frappe + +from erpnext.stock.doctype.stock_ledger_entry.stock_ledger_entry import on_doctype_update + + +def execute(): + try: + frappe.db.sql_ddl("ALTER TABLE `tabStock Ledger Entry` DROP INDEX `posting_sort_index`") + except Exception: + frappe.log_error("Failed to drop index") + return + + # Recreate indexes + on_doctype_update() diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index c64370dcdf..052f7781c1 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -221,14 +221,9 @@ class StockLedgerEntry(Document): def on_doctype_update(): - if not frappe.db.has_index("tabStock Ledger Entry", "posting_sort_index"): - frappe.db.commit() - frappe.db.add_index( - "Stock Ledger Entry", - fields=["posting_date", "posting_time", "name"], - index_name="posting_sort_index", - ) - + frappe.db.add_index( + "Stock Ledger Entry", fields=["posting_date", "posting_time"], index_name="posting_sort_index" + ) frappe.db.add_index("Stock Ledger Entry", ["voucher_no", "voucher_type"]) frappe.db.add_index("Stock Ledger Entry", ["batch_no", "item_code", "warehouse"]) frappe.db.add_index("Stock Ledger Entry", ["warehouse", "item_code"], "item_warehouse") From ef2bf3c22350351c8ddbc375c4d04a1f48854ed5 Mon Sep 17 00:00:00 2001 From: Rohit Waghchaure Date: Tue, 10 Jan 2023 10:59:50 +0530 Subject: [PATCH 2/6] fix: don't check other warehouse ledgers to calculate valuation rate --- erpnext/stock/stock_ledger.py | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 55a11a1867..5d75bfd05a 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -1270,20 +1270,6 @@ def get_valuation_rate( (item_code, warehouse, voucher_no, voucher_type), ) - if not last_valuation_rate: - # Get valuation rate from last sle for the item against any warehouse - last_valuation_rate = frappe.db.sql( - """select valuation_rate - from `tabStock Ledger Entry` force index (item_code) - where - item_code = %s - AND valuation_rate > 0 - AND is_cancelled = 0 - AND NOT(voucher_no = %s AND voucher_type = %s) - order by posting_date desc, posting_time desc, name desc limit 1""", - (item_code, voucher_no, voucher_type), - ) - if last_valuation_rate: return flt(last_valuation_rate[0][0]) From 0ed938a49020d1d892d9727fbeac5a88b996e71c Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Tue, 10 Jan 2023 20:12:43 +0530 Subject: [PATCH 3/6] fix: Incorrect exchange rate in payment entries (#33481) * fix: Incorrect exchange rate in payment entries * test: Update failing tests --- erpnext/accounts/doctype/payment_entry/payment_entry.py | 2 +- .../buying/doctype/purchase_order/test_purchase_order.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py index ff2690f675..1cccbd9388 100644 --- a/erpnext/accounts/doctype/payment_entry/payment_entry.py +++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py @@ -247,7 +247,7 @@ class PaymentEntry(AccountsController): self.set_target_exchange_rate(ref_doc) def set_source_exchange_rate(self, ref_doc=None): - if self.paid_from and not self.source_exchange_rate: + if self.paid_from: if self.paid_from_account_currency == self.company_currency: self.source_exchange_rate = 1 else: diff --git a/erpnext/buying/doctype/purchase_order/test_purchase_order.py b/erpnext/buying/doctype/purchase_order/test_purchase_order.py index 291d756a41..572d9d3865 100644 --- a/erpnext/buying/doctype/purchase_order/test_purchase_order.py +++ b/erpnext/buying/doctype/purchase_order/test_purchase_order.py @@ -743,9 +743,9 @@ class TestPurchaseOrder(FrappeTestCase): pe = get_payment_entry("Purchase Order", po_doc.name) pe.mode_of_payment = "Cash" pe.paid_from = "Cash - _TC" - pe.source_exchange_rate = 80 - pe.target_exchange_rate = 1 - pe.paid_amount = po_doc.grand_total + pe.source_exchange_rate = 1 + pe.target_exchange_rate = 80 + pe.paid_amount = po_doc.base_grand_total pe.save(ignore_permissions=True) pe.submit() From 0f0bc9a4629603d2a8346df9f8bddaf3a154a1bb Mon Sep 17 00:00:00 2001 From: vr-greycube <66350441+vr-greycube@users.noreply.github.com> Date: Tue, 10 Jan 2023 20:26:33 +0530 Subject: [PATCH 4/6] fix: customer selection not mandatory in purchase invoice to fetch item details (#33572) --- erpnext/public/js/controllers/transaction.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index f2f1ce132e..5c1c6d1919 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -1691,7 +1691,7 @@ erpnext.TransactionController = class TransactionController extends erpnext.taxe var valid = true; $.each(["company", "customer"], function(i, fieldname) { - if(frappe.meta.has_field(me.frm.doc.doctype, fieldname) && me.frm.doc.doctype != "Purchase Order") { + if(frappe.meta.has_field(me.frm.doc.doctype, fieldname) && !["Purchase Order","Purchase Invoice"].includes(me.frm.doc.doctype)) { if (!me.frm.doc[fieldname]) { frappe.msgprint(__("Please specify") + ": " + frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) + From e0f5ecdad6d181ce3c69afc2cab7df832e27baa4 Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Tue, 10 Jan 2023 20:40:12 +0530 Subject: [PATCH 5/6] fix: RFQ emails not sent with pdf attachment (#33604) --- .../doctype/request_for_quotation/request_for_quotation.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py index dbc3644957..8e9ded9842 100644 --- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.py @@ -216,6 +216,7 @@ class RequestforQuotation(BuyingController): recipients=data.email_id, sender=sender, attachments=attachments, + print_format=self.meta.default_print_format or "Standard", send_email=True, doctype=self.doctype, name=self.name, @@ -224,9 +225,7 @@ class RequestforQuotation(BuyingController): frappe.msgprint(_("Email Sent to Supplier {0}").format(data.supplier)) def get_attachments(self): - attachments = [d.name for d in get_attachments(self.doctype, self.name)] - attachments.append(frappe.attach_print(self.doctype, self.name, doc=self)) - return attachments + return [d.name for d in get_attachments(self.doctype, self.name)] def update_rfq_supplier_status(self, sup_name=None): for supplier in self.suppliers: From be05aea101fe34de22bd3ff14b71daa7fcf5af29 Mon Sep 17 00:00:00 2001 From: Smit Vora Date: Wed, 11 Jan 2023 05:21:13 +0000 Subject: [PATCH 6/6] fix: better comparision of difference value between stock and account --- .../stock_and_account_value_comparison.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py index 99f820ecac..106e877c4c 100644 --- a/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py +++ b/erpnext/stock/report/stock_and_account_value_comparison/stock_and_account_value_comparison.py @@ -41,7 +41,7 @@ def get_data(report_filters): key = (d.voucher_type, d.voucher_no) gl_data = voucher_wise_gl_data.get(key) or {} d.account_value = gl_data.get("account_value", 0) - d.difference_value = abs(d.stock_value - d.account_value) + d.difference_value = d.stock_value - d.account_value if abs(d.difference_value) > 0.1: data.append(d)