From 613c8158a8d939065439ccfaf8e3ebfe13bb067b Mon Sep 17 00:00:00 2001 From: Devin Slauenwhite Date: Fri, 16 Sep 2022 17:49:00 -0400 Subject: [PATCH 1/9] fix: actually reject process_scan when update_table fails. --- erpnext/public/js/utils/barcode_scanner.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js index a6bff2c148..6a80f92bc1 100644 --- a/erpnext/public/js/utils/barcode_scanner.js +++ b/erpnext/public/js/utils/barcode_scanner.js @@ -59,14 +59,14 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { } me.update_table(data).then(row => { - row ? resolve(row) : reject(); - }); + resolve(row); + }).catch(() => reject()); }); }); } update_table(data) { - return new Promise(resolve => { + return new Promise((resolve, reject) => { let cur_grid = this.frm.fields_dict[this.items_table_name].grid; const {item_code, barcode, batch_no, serial_no, uom} = data; @@ -77,6 +77,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { if (this.dont_allow_new_row) { this.show_alert(__("Maximum quantity scanned for item {0}.", [item_code]), "red"); this.clean_up(); + reject(); return; } @@ -88,6 +89,7 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { if (this.is_duplicate_serial_no(row, serial_no)) { this.clean_up(); + reject(); return; } From 32e75ff80809bb7f9317ef1bf8d94b9dbbe6286f Mon Sep 17 00:00:00 2001 From: Devin Slauenwhite Date: Fri, 16 Sep 2022 17:58:01 -0400 Subject: [PATCH 2/9] feat: audible indication of scan status. --- erpnext/public/js/utils/barcode_scanner.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/erpnext/public/js/utils/barcode_scanner.js b/erpnext/public/js/utils/barcode_scanner.js index 6a80f92bc1..83b108b874 100644 --- a/erpnext/public/js/utils/barcode_scanner.js +++ b/erpnext/public/js/utils/barcode_scanner.js @@ -21,6 +21,11 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { this.items_table_name = opts.items_table_name || "items"; this.items_table = this.frm.doc[this.items_table_name]; + // optional sound name to play when scan either fails or passes. + // see https://frappeframework.com/docs/v14/user/en/python-api/hooks#sounds + this.success_sound = opts.play_success_sound; + this.fail_sound = opts.play_fail_sound; + // any API that takes `search_value` as input and returns dictionary as follows // { // item_code: "HORSESHOE", // present if any item was found @@ -54,13 +59,18 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { if (!data || Object.keys(data).length === 0) { this.show_alert(__("Cannot find Item with this Barcode"), "red"); this.clean_up(); + this.play_fail_sound(); reject(); return; } me.update_table(data).then(row => { + this.play_success_sound(); resolve(row); - }).catch(() => reject()); + }).catch(() => { + this.play_fail_sound(); + reject(); + }); }); }); } @@ -221,6 +231,14 @@ erpnext.utils.BarcodeScanner = class BarcodeScanner { return this.items_table.find((d) => !d.item_code); } + play_success_sound() { + this.success_sound && frappe.utils.play_sound(this.success_sound); + } + + play_fail_sound() { + this.fail_sound && frappe.utils.play_sound(this.fail_sound); + } + clean_up() { this.scan_barcode_field.set_value(""); refresh_field(this.items_table_name); From 785eaf8e8f9b0efc5674e499d82b7e54213e5c36 Mon Sep 17 00:00:00 2001 From: Shashank Shirke Date: Sun, 18 Sep 2022 05:42:47 -0700 Subject: [PATCH 3/9] fix: broken link for item valuation updated Old URL (404 Not Found): https://docs.erpnext.com/docs/v13/user/manual/en/stock/item/item-valuation-fifo-and-moving-average Updated URL: https://docs.erpnext.com/docs/v13/user/manual/en/stock/articles/calculation-of-valuation-rate-in-fifo-and-moving-average --- erpnext/public/js/help_links.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/public/js/help_links.js b/erpnext/public/js/help_links.js index b643ccae94..1c3f43e9cf 100644 --- a/erpnext/public/js/help_links.js +++ b/erpnext/public/js/help_links.js @@ -671,7 +671,7 @@ frappe.help.help_links["List/Item"] = [ label: "Item Valuation", url: docsUrl + - "user/manual/en/stock/articles/item-valuation-fifo-and-moving-average", + "user/manual/en/stock/articles/calculation-of-valuation-rate-in-fifo-and-moving-average", }, ]; From 9decebe6e1960687934dc0b99535019c547889c0 Mon Sep 17 00:00:00 2001 From: Ernesto Ruiz Date: Mon, 19 Sep 2022 10:13:30 -0600 Subject: [PATCH 4/9] fix: Add strings to translate function --- erpnext/projects/report/project_summary/project_summary.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/projects/report/project_summary/project_summary.py b/erpnext/projects/report/project_summary/project_summary.py index 606c0c2d81..7a35fd236a 100644 --- a/erpnext/projects/report/project_summary/project_summary.py +++ b/erpnext/projects/report/project_summary/project_summary.py @@ -91,9 +91,9 @@ def get_chart_data(data): "data": { "labels": labels[:30], "datasets": [ - {"name": "Overdue", "values": overdue[:30]}, - {"name": "Completed", "values": completed[:30]}, - {"name": "Total Tasks", "values": total[:30]}, + {"name": _("Overdue"), "values": overdue[:30]}, + {"name": _("Completed"), "values": completed[:30]}, + {"name": _("Total Tasks"), "values": total[:30]}, ], }, "type": "bar", From aa49ec815a3837ff5777903f929477b836d92472 Mon Sep 17 00:00:00 2001 From: Ernesto Ruiz Date: Mon, 19 Sep 2022 11:55:13 -0600 Subject: [PATCH 5/9] fix: add translate function to strings --- .../report/work_order_summary/work_order_summary.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/manufacturing/report/work_order_summary/work_order_summary.py b/erpnext/manufacturing/report/work_order_summary/work_order_summary.py index 2368bfdf2c..41ffcbb190 100644 --- a/erpnext/manufacturing/report/work_order_summary/work_order_summary.py +++ b/erpnext/manufacturing/report/work_order_summary/work_order_summary.py @@ -83,6 +83,7 @@ def get_chart_based_on_status(data): for d in data: status_wise_data[d.status] += 1 + labels = [_(label) for label in labels] values = [status_wise_data[label] for label in labels] chart = { @@ -95,7 +96,7 @@ def get_chart_based_on_status(data): def get_chart_based_on_age(data): - labels = ["0-30 Days", "30-60 Days", "60-90 Days", "90 Above"] + labels = [_("0-30 Days"), _("30-60 Days"), _("60-90 Days"), _("90 Above")] age_wise_data = {"0-30 Days": 0, "30-60 Days": 0, "60-90 Days": 0, "90 Above": 0} @@ -135,8 +136,8 @@ def get_chart_based_on_qty(data, filters): pending.append(periodic_data.get("Pending").get(d)) completed.append(periodic_data.get("Completed").get(d)) - datasets.append({"name": "Pending", "values": pending}) - datasets.append({"name": "Completed", "values": completed}) + datasets.append({"name": _("Pending"), "values": pending}) + datasets.append({"name": _("Completed"), "values": completed}) chart = { "data": {"labels": labels, "datasets": datasets}, From 94199b78675e8d20c98bf9d7d95fb3d6d7d2b831 Mon Sep 17 00:00:00 2001 From: Ernesto Ruiz Date: Mon, 19 Sep 2022 11:56:42 -0600 Subject: [PATCH 6/9] fix: add translate function to strings --- .../manufacturing/report/job_card_summary/job_card_summary.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py index 5083b7369d..63c2d97d57 100644 --- a/erpnext/manufacturing/report/job_card_summary/job_card_summary.py +++ b/erpnext/manufacturing/report/job_card_summary/job_card_summary.py @@ -85,8 +85,8 @@ def get_chart_data(job_card_details, filters): open_job_cards.append(periodic_data.get("Open").get(d)) completed.append(periodic_data.get("Completed").get(d)) - datasets.append({"name": "Open", "values": open_job_cards}) - datasets.append({"name": "Completed", "values": completed}) + datasets.append({"name": _("Open"), "values": open_job_cards}) + datasets.append({"name": _("Completed"), "values": completed}) chart = {"data": {"labels": labels, "datasets": datasets}, "type": "bar"} From 122d5f2729b28105272fd9c714d0a0ca3a8125e5 Mon Sep 17 00:00:00 2001 From: ruthra kumar Date: Sun, 18 Sep 2022 16:16:38 +0530 Subject: [PATCH 7/9] fix: difference amount calculation on payment reconciliation --- .../payment_reconciliation.py | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py index 601fc87a22..52efd33fef 100644 --- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py +++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py @@ -14,6 +14,7 @@ from erpnext.accounts.utils import ( QueryPaymentLedger, get_outstanding_invoices, reconcile_against_document, + update_reference_in_payment_entry, ) from erpnext.controllers.accounts_controller import get_advance_payment_entries @@ -212,6 +213,23 @@ class PaymentReconciliation(Document): inv.currency = entry.get("currency") inv.outstanding_amount = flt(entry.get("outstanding_amount")) + def get_difference_amount(self, allocated_entry): + if allocated_entry.get("reference_type") != "Payment Entry": + return + + dr_or_cr = ( + "credit_in_account_currency" + if erpnext.get_party_account_type(self.party_type) == "Receivable" + else "debit_in_account_currency" + ) + + row = self.get_payment_details(allocated_entry, dr_or_cr) + + doc = frappe.get_doc(allocated_entry.reference_type, allocated_entry.reference_name) + update_reference_in_payment_entry(row, doc, do_not_save=True) + + return doc.difference_amount + @frappe.whitelist() def allocate_entries(self, args): self.validate_entries() @@ -227,12 +245,16 @@ class PaymentReconciliation(Document): res = self.get_allocated_entry(pay, inv, pay["amount"]) inv["outstanding_amount"] = flt(inv.get("outstanding_amount")) - flt(pay.get("amount")) pay["amount"] = 0 + + res.difference_amount = self.get_difference_amount(res) + if pay.get("amount") == 0: entries.append(res) break elif inv.get("outstanding_amount") == 0: entries.append(res) continue + else: break From c4919cf5ec6ab6c3dd60364e82dd072cf6f4b023 Mon Sep 17 00:00:00 2001 From: Ernesto Ruiz Date: Thu, 22 Sep 2022 15:42:46 -0600 Subject: [PATCH 8/9] fix: typo on opportunity summary by sales stage report --- .../opportunity_summary_by_sales_stage.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js index 116db2f5a2..7cd1710a7f 100644 --- a/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js +++ b/erpnext/crm/report/opportunity_summary_by_sales_stage/opportunity_summary_by_sales_stage.js @@ -44,7 +44,7 @@ frappe.query_reports["Opportunity Summary by Sales Stage"] = { }, { fieldname: "opportunity_source", - label: __("Oppoturnity Source"), + label: __("Opportunity Source"), fieldtype: "Link", options: "Lead Source", }, @@ -62,4 +62,4 @@ frappe.query_reports["Opportunity Summary by Sales Stage"] = { default: frappe.defaults.get_user_default("Company") } ] -}; \ No newline at end of file +}; From 6919f389aa704f21a83d6a4e8cb6e8a754582663 Mon Sep 17 00:00:00 2001 From: nishibakabeer <59765279+nishibakabeer@users.noreply.github.com> Date: Wed, 21 Sep 2022 13:40:03 +0400 Subject: [PATCH 9/9] fix: total value in all keys Gross and net profit report showing wrong values in monthly quarterly and half yearly filters which is the total value @ruthra-kumar added in develop branch as suggested ( https://github.com/frappe/erpnext/pull/32020) --- .../gross_and_net_profit_report/gross_and_net_profit_report.py | 1 - 1 file changed, 1 deletion(-) diff --git a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py index 9d56678541..cd5f366707 100644 --- a/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py +++ b/erpnext/accounts/report/gross_and_net_profit_report/gross_and_net_profit_report.py @@ -155,7 +155,6 @@ def adjust_account(data, period_list, consolidated=False): for d in data: for period in period_list: key = period if consolidated else period.key - d[key] = totals[d["account"]] d["total"] = totals[d["account"]] return data