diff --git a/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.js b/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.js index 133d5c75c84e42ce426153dc9de22f7ee6b2983e..7070f20f833fb8b990f7303c8e34b4d0a6384a07 100644 --- a/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.js +++ b/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.js @@ -13,7 +13,7 @@ frappe.query_reports["Soldes Intermediaires de Gestion"]["filters"].splice(1, 1) Object.assign(frappe.query_reports["Soldes Intermediaires de Gestion"], { "formatter": function(value, row, column, data, default_formatter, filter) { - if (row[1].content && column.fieldtype == "Currency") { + if (row[1].content && ["Currency", "Percent"].includes(column.fieldtype)) { value = default_formatter(value, row, column, data); } return value || ""; diff --git a/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.py b/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.py index 4a09c5f6e5d09967b21e1811b3813b665148bb72..3f54acb3b05c0846e951d171e4b357ff6c933eb8 100644 --- a/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.py +++ b/erpnext/regional/report/soldes_intermediaires_de_gestion/soldes_intermediaires_de_gestion.py @@ -97,11 +97,21 @@ class SIGCalculator: "width": 150, } ) + # Ajoute la colonne pourcentage pour chaque période + columns.append( + { + "fieldname": f"{period.key}_pct", + "label": f"{period.label} (%)", + "fieldtype": "Percent", + "width": 100, # largeur réduite + } + ) return columns def get_data(self): self.data = defaultdict(dict) + self.turnover_by_period = {} for period in self.period_list: self.period_key = period.key @@ -115,6 +125,11 @@ class SIGCalculator: self.calcul_resultat_exceptionnel() self.calcul_resultat_net() + # Calcul du CA pour la période courante + self.turnover_by_period[self.period_key] = self.data[_("Ventes de marchandise")].get( + self.period_key, 0.0 + ) + self.data[_("Production vendue")].get(self.period_key, 0.0) + result = [] empty_row = False for label in self.labels: @@ -129,12 +144,22 @@ class SIGCalculator: row["bold"] = True empty_row = True + # Ajoute le pourcentage pour chaque période (toujours en valeur absolue, arrondi sans virgule) + for period in self.period_list: + val = row.get(period.key, 0.0) + period_turnover = self.turnover_by_period.get(period.key) + if not period_turnover: + percent = 0.0 + else: + percent = abs(val) / abs(period_turnover) * 100 + row[f"{period.key}_pct"] = round(percent) + result.append(row) return result def get_accounts( - self, account_type: str, selected_numbers: tuple | str, excluded_numbers: list = None + self, account_type: str, selected_numbers: tuple | str, excluded_numbers: list | None = None ): accounts_list = self.revenue_accounts if account_type == "revenue" else self.expense_accounts @@ -158,6 +183,7 @@ class SIGCalculator: True, ) + def get_accounts_balance(self, accounts): if not accounts: return 0.0 @@ -219,9 +245,7 @@ class SIGCalculator: # 3.2 Variation des stocks de matières premières stock_variation_accounts = self.get_accounts("expense", "603", "6037") total_stock_variations = self.get_accounts_balance(stock_variation_accounts) - self.data[_("Variation des stocks de matières premières")][ - self.period_key - ] = total_stock_variations + self.data[_("Variation des stocks de matières premières")][self.period_key] = total_stock_variations # 3.3 Autres achats et charges externes external_expenses_accounts = self.get_accounts("expense", ("61", "62"))