From bd9cb0cc9d590c32a02690401cc6ed2f8103769e Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Tue, 18 Jun 2024 11:15:10 +0200 Subject: [PATCH 1/2] fix: Replace numpy with statistics --- .../doctype/subscription/subscription.py | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py index 75d8180a38..ed657565a2 100644 --- a/erpnext/accounts/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -137,9 +137,13 @@ class Subscription(Document): if self.apply_additional_discount: total = self.total if self.apply_additional_discount == "Net Total" else self.grand_total if self.additional_discount_percentage: - self.additional_discount_amount = flt(total) * flt(self.additional_discount_percentage) / 100.0 + self.additional_discount_amount = ( + flt(total) * flt(self.additional_discount_percentage) / 100.0 + ) elif self.additional_discount_amount: - self.additional_discount_percentage = flt(self.additional_discount_amount) / flt(total) * 100.0 + self.additional_discount_percentage = ( + flt(self.additional_discount_amount) / flt(total) * 100.0 + ) def process(self): SubscriptionPeriod(self).validate() @@ -159,7 +163,9 @@ class Subscription(Document): SubscriptionStateManager(self).set_status() if ( - sales_order and flt(sales_order.per_billed) < 100.0 and self.generate_invoice_before_payment + sales_order + and flt(sales_order.per_billed) < 100.0 + and self.generate_invoice_before_payment ): self.generate_invoice(sales_order) SubscriptionStateManager(self).set_status() @@ -384,6 +390,8 @@ def get_subscription_plan(plan): @frappe.whitelist() def get_chart_data(title, doctype, docname): + from statistics import fmean + invoices = frappe.get_all( "Sales Invoice", filters={"subscription": docname, "docstatus": 1}, @@ -396,8 +404,7 @@ def get_chart_data(title, doctype, docname): return {} symbol = ( - frappe.db.get_value("Currency", invoices[0].currency, "symbol", cache=True) - or invoices[0].currency + frappe.db.get_value("Currency", invoices[0].currency, "symbol", cache=True) or invoices[0].currency ) dates = [] @@ -408,7 +415,7 @@ def get_chart_data(title, doctype, docname): total.insert(0, invoice.grand_total) outstanding.insert(0, invoice.outstanding_amount) - mean_value = np.mean(np.array([x.grand_total for x in invoices])) + mean_value = fmean([x.grand_total for x in invoices]) data = { "title": title + " (" + symbol + ")", @@ -433,9 +440,7 @@ def get_chart_data(title, doctype, docname): def subscription_headline(name): subscription = frappe.get_doc("Subscription", name) - if subscription.cancellation_date and getdate(subscription.cancellation_date) > getdate( - nowdate() - ): + if subscription.cancellation_date and getdate(subscription.cancellation_date) > getdate(nowdate()): return _("This subscription will be cancelled on {0}").format( global_date_format(subscription.cancellation_date) ) -- GitLab From f465f3640d70b72ece27d28b1f0749905505400d Mon Sep 17 00:00:00 2001 From: Charles-Henri Decultot Date: Tue, 18 Jun 2024 11:26:05 +0200 Subject: [PATCH 2/2] fix: remove numpy --- .../doctype/subscription/subscription.py | 1 - .../bank_transaction_match.py | 20 +++++++------------ 2 files changed, 7 insertions(+), 14 deletions(-) diff --git a/erpnext/accounts/doctype/subscription/subscription.py b/erpnext/accounts/doctype/subscription/subscription.py index ed657565a2..24f138de1c 100644 --- a/erpnext/accounts/doctype/subscription/subscription.py +++ b/erpnext/accounts/doctype/subscription/subscription.py @@ -4,7 +4,6 @@ import copy import frappe -import numpy as np from frappe import _ from frappe.model import default_fields, no_value_fields from frappe.model.document import Document diff --git a/erpnext/accounts/page/bank_reconciliation/bank_transaction_match.py b/erpnext/accounts/page/bank_reconciliation/bank_transaction_match.py index f5cc1dbbc0..64d9355cc3 100644 --- a/erpnext/accounts/page/bank_reconciliation/bank_transaction_match.py +++ b/erpnext/accounts/page/bank_reconciliation/bank_transaction_match.py @@ -5,7 +5,6 @@ import difflib import frappe -import numpy as np from frappe import _ from frappe.utils import add_days, flt, getdate from frappe.utils.dateutils import parse_date @@ -487,30 +486,25 @@ def get_statement_chart(account, start_date, end_date): ) dates = [add_days(getdate(start_date), -1)] - daily_balance = [balance_before.get("balance")] - unallocated_amount = [ - previous_unallocation[0]["unallocated_amount"] if previous_unallocation else 0 - ] + unallocated_amount = [previous_unallocation[0]["unallocated_amount"] if previous_unallocation else 0] + + current_balance = balance_before.get("balance") + daily_balance = [current_balance] for transaction in transactions: dates.append(transaction.date) - daily_balance.append(transaction.amount) + current_balance = current_balance + transaction.amount + daily_balance.append(flt(current_balance, 2)) unallocated_amount.append(transaction.unallocated_amount) - bank_balance = np.round(np.cumsum(daily_balance), decimals=2) - mean_value = np.mean(bank_balance) - data = { "title": _("Bank Balance") + " (" + symbol + ")", "data": { "datasets": [ - {"name": _("Bank Balance"), "values": bank_balance}, + {"name": _("Bank Balance"), "values": daily_balance}, {"name": _("Unallocated Amount"), "chartType": "bar", "values": unallocated_amount}, ], "labels": dates, - "yMarkers": [ - {"label": _("Average balance"), "value": mean_value, "options": {"labelPos": "left"}} - ], }, "type": "line", "colors": ["blue", "green"], -- GitLab