diff --git a/modules/account_invoice/invoice.xml b/modules/account_invoice/invoice.xml index 0ae609d..7cbd47c 100755 --- a/modules/account_invoice/invoice.xml +++ b/modules/account_invoice/invoice.xml @@ -339,6 +339,32 @@ this repository contains the full copyright notices and license terms. --> + + Commission invoice Sale + account.invoice + account.invoice + account_invoice/sale_commission_ict.fodt + + + + form_print + account.invoice,-1 + + + + + Commission invoice Purchase + account.invoice + account.invoice + account_invoice/purchase_commission_ict.fodt + + + + form_print + account.invoice,-1 + + + Invoice diff --git a/modules/purchase/purchase_commission_ict.fodt b/modules/account_invoice/purchase_commission_ict.fodt similarity index 99% rename from modules/purchase/purchase_commission_ict.fodt rename to modules/account_invoice/purchase_commission_ict.fodt index 903a3c0..c6e2352 100644 --- a/modules/purchase/purchase_commission_ict.fodt +++ b/modules/account_invoice/purchase_commission_ict.fodt @@ -17128,9 +17128,9 @@ - <for each="purchase in records"> - <replace text:p="set_lang(purchase.party.lang)"> - <replace text:p="purchase.set_lang(purchase.party.lang)"> + <for each="invoice in records"> + <replace text:p="set_lang(invoice.party.lang)"> + <replace text:p="invoice.set_lang(invoice.party.lang)"> @@ -17143,7 +17143,7 @@ - <for each="line in purchase.report_address.splitlines()"><line></for> + <for each="line in invoice.report_commission_address.splitlines()"><line></for> @@ -17155,11 +17155,11 @@ COMMISSION INVOICE - INVOICE N. <purchase.report_commission_invoice_number> - CONTRACT N. <purchase.report_commission_contract_number> + INVOICE N. <invoice.report_commission_invoice_number> + CONTRACT N. <invoice.report_commission_contract_number> - <format_date(purchase.purchase_date or today, purchase.party.lang)> + <format_date(invoice.report_commission_date or today, invoice.party.lang)> @@ -17170,8 +17170,8 @@ - Bill of Lading N. <purchase.report_commission_bl_number> dated <format_date(purchase.report_commission_bl_date, purchase.party.lang) if purchase.report_commission_bl_date else ''> - M/V <purchase.report_commission_vessel> + Bill of Lading N. <invoice.report_commission_bl_number> dated <format_date(invoice.report_commission_bl_date, invoice.party.lang) if invoice.report_commission_bl_date else ''> + M/V <invoice.report_commission_vessel> @@ -17179,16 +17179,16 @@ COMMISSION - <purchase.report_commission_invoice_line> + <invoice.report_commission_invoice_line> - <purchase.report_commission_quantity_unit_upper> + <invoice.report_commission_quantity_unit_upper> - <purchase.report_commission_quantity_display> + <invoice.report_commission_quantity_display> @@ -17196,12 +17196,12 @@ Lbs - <purchase.report_commission_lbs_display> + <invoice.report_commission_lbs_display> - Your commission: <purchase.report_commission_rate_line> - <purchase.report_commission_secondary_rate_line> + Your commission: <invoice.report_commission_rate_line> + <invoice.report_commission_secondary_rate_line> VAT 0% RATE @@ -17214,15 +17214,15 @@ TOTAL DUE TO YOU - <purchase.report_commission_currency_name> + <invoice.report_commission_currency_name> - <purchase.report_commission_total_display> + <invoice.report_commission_total_display> - <purchase.company.party.name> + <invoice.company.party.name> </for> diff --git a/modules/sale/sale_commission_ict.fodt b/modules/account_invoice/sale_commission_ict.fodt similarity index 99% rename from modules/sale/sale_commission_ict.fodt rename to modules/account_invoice/sale_commission_ict.fodt index ae7d4d8..0252f76 100644 --- a/modules/sale/sale_commission_ict.fodt +++ b/modules/account_invoice/sale_commission_ict.fodt @@ -3625,9 +3625,9 @@ - <for each="sale in records"> - <replace text:p="set_lang(sale.party.lang)"> - <replace text:p="sale.set_lang(sale.party.lang)"> + <for each="invoice in records"> + <replace text:p="set_lang(invoice.party.lang)"> + <replace text:p="invoice.set_lang(invoice.party.lang)"> @@ -3639,7 +3639,7 @@ - <for each="line in sale.report_address.splitlines()"><line></for> + <for each="line in invoice.report_commission_address.splitlines()"><line></for> @@ -3653,11 +3653,11 @@ COMMISSION INVOICE - INVOICE N. <sale.report_commission_invoice_number> - CONTRACT N. <sale.report_commission_contract_number> + INVOICE N. <invoice.report_commission_invoice_number> + CONTRACT N. <invoice.report_commission_contract_number> - <format_date(sale.sale_date or today, sale.party.lang)> + <format_date(invoice.report_commission_date or today, invoice.party.lang)> @@ -3667,8 +3667,8 @@ - Bill of Lading N. <sale.report_commission_bl_number> dated <format_date(sale.report_commission_bl_date, sale.party.lang) if sale.report_commission_bl_date else ''> - M/V <sale.report_commission_vessel> + Bill of Lading N. <invoice.report_commission_bl_number> dated <format_date(invoice.report_commission_bl_date, invoice.party.lang) if invoice.report_commission_bl_date else ''> + M/V <invoice.report_commission_vessel> @@ -3677,16 +3677,16 @@ COMMISSION - <sale.report_commission_invoice_line> + <invoice.report_commission_invoice_line> - <sale.report_commission_quantity_unit_upper> + <invoice.report_commission_quantity_unit_upper> - <sale.report_commission_quantity_display> + <invoice.report_commission_quantity_display> @@ -3694,12 +3694,12 @@ Lbs - <sale.report_commission_lbs_display> + <invoice.report_commission_lbs_display> - Your commission: <sale.report_commission_rate_line> - <sale.report_commission_secondary_rate_line> + Your commission: <invoice.report_commission_rate_line> + <invoice.report_commission_secondary_rate_line> VAT 0% RATE @@ -3714,15 +3714,15 @@ - <sale.report_commission_currency_name> + <invoice.report_commission_currency_name> - <sale.report_commission_total_display> + <invoice.report_commission_total_display> - <sale.company.party.name> + <invoice.company.party.name> </for> diff --git a/modules/purchase/purchase.xml b/modules/purchase/purchase.xml index 0274edc..d83cd92 100755 --- a/modules/purchase/purchase.xml +++ b/modules/purchase/purchase.xml @@ -405,18 +405,6 @@ this repository contains the full copyright notices and license terms. --> - - Commission invoice - purchase.purchase - purchase.purchase - purchase/purchase_commission_ict.fodt - - - form_print - purchase.purchase,-1 - - - purchase.line form diff --git a/modules/purchase_trade/configuration.py b/modules/purchase_trade/configuration.py index 998dc0b..6a574d4 100644 --- a/modules/purchase_trade/configuration.py +++ b/modules/purchase_trade/configuration.py @@ -58,8 +58,8 @@ class Configuration(ModelSingleton, ModelSQL, ModelView): _REPORT_LABELS = ( ('sale_report_label', 'sale', 'report_sale', 'Proforma'), - ('sale_commission_report_label', 'sale', - 'report_sale_commission_ict', 'Commission invoice'), + ('sale_commission_report_label', 'account_invoice', + 'report_sale_commission_ict', 'Commission invoice Sale'), ('sale_bill_report_label', 'sale', 'report_bill', 'Draft'), ('invoice_report_label', 'account_invoice', 'report_invoice', 'Invoice'), @@ -74,8 +74,8 @@ class Configuration(ModelSingleton, ModelSQL, ModelView): ('invoice_payment_order_report_label', 'purchase_trade', 'report_payment_order', 'Payment Order'), ('purchase_report_label', 'purchase', 'report_purchase', 'Purchase'), - ('purchase_commission_report_label', 'purchase', - 'report_purchase_commission_ict', 'Commission invoice'), + ('purchase_commission_report_label', 'account_invoice', + 'report_purchase_commission_ict', 'Commission invoice Purchase'), ('shipment_shipping_report_label', 'stock', 'report_shipment_in_shipping', 'Shipping instructions'), ('shipment_insurance_report_label', 'purchase_trade', diff --git a/modules/purchase_trade/invoice.py b/modules/purchase_trade/invoice.py index e4ed8e0..96f2bb5 100644 --- a/modules/purchase_trade/invoice.py +++ b/modules/purchase_trade/invoice.py @@ -319,6 +319,97 @@ class Invoice(metaclass=PoolMeta): ] return lines or list(self.lines or []) + def _get_report_commission_trade(self): + for line in self._get_report_invoice_lines(): + origin = getattr(line, 'origin', None) + if not origin: + continue + trade = getattr(origin, 'sale', None) or getattr(origin, 'purchase', None) + if trade: + return trade + + @property + def report_commission_address(self): + trade = self._get_report_commission_trade() + return getattr(trade, 'report_address', '') or '' + + @property + def report_commission_date(self): + trade = self._get_report_commission_trade() + return ( + getattr(trade, 'sale_date', None) + or getattr(trade, 'purchase_date', None) + or self.invoice_date) + + def _get_report_commission_value(self, name): + trade = self._get_report_commission_trade() + return getattr(trade, name, '') if trade else '' + + @property + def report_commission_invoice_number(self): + return self._get_report_commission_value( + 'report_commission_invoice_number') + + @property + def report_commission_contract_number(self): + return self._get_report_commission_value( + 'report_commission_contract_number') + + @property + def report_commission_bl_number(self): + return self._get_report_commission_value( + 'report_commission_bl_number') + + @property + def report_commission_bl_date(self): + return self._get_report_commission_value( + 'report_commission_bl_date') + + @property + def report_commission_vessel(self): + return self._get_report_commission_value( + 'report_commission_vessel') + + @property + def report_commission_invoice_line(self): + return self._get_report_commission_value( + 'report_commission_invoice_line') + + @property + def report_commission_quantity_unit_upper(self): + return self._get_report_commission_value( + 'report_commission_quantity_unit_upper') + + @property + def report_commission_quantity_display(self): + return self._get_report_commission_value( + 'report_commission_quantity_display') + + @property + def report_commission_lbs_display(self): + return self._get_report_commission_value( + 'report_commission_lbs_display') + + @property + def report_commission_rate_line(self): + return self._get_report_commission_value( + 'report_commission_rate_line') + + @property + def report_commission_secondary_rate_line(self): + return self._get_report_commission_value( + 'report_commission_secondary_rate_line') + + @property + def report_commission_currency_name(self): + return self._get_report_commission_value( + 'report_commission_currency_name') + + @property + def report_commission_total_display(self): + return self._get_report_commission_value( + 'report_commission_total_display') + @staticmethod def _get_report_related_lots(line): lots = [] @@ -1940,6 +2031,7 @@ class InvoiceReport(ReportTemplateMixin, BaseInvoiceReport): def _resolve_configured_report_path(cls, action): report_path = cls._get_action_report_path(action) or '' action_name = cls._get_action_name(action) + legacy_prefix = None if (report_path.endswith('/prepayment.fodt') or action_name == 'Prepayment'): @@ -1955,9 +2047,21 @@ class InvoiceReport(ReportTemplateMixin, BaseInvoiceReport): elif (report_path.endswith('/commission__ict_final.fodt') or action_name == 'CN/DN Commission'): field_name = 'invoice_commission_cndn_report_template' + elif (report_path.endswith('/sale_commission_ict.fodt') + or action_name == 'Commission invoice Sale'): + field_name = 'sale_commission_report_template' + legacy_prefix = 'sale/' + elif (report_path.endswith('/purchase_commission_ict.fodt') + or action_name == 'Commission invoice Purchase'): + field_name = 'purchase_commission_report_template' + legacy_prefix = 'purchase/' else: field_name = 'invoice_report_template' - return cls._resolve_template_path(action, field_name, 'account_invoice') + resolved_path = cls._resolve_template_path( + action, field_name, 'account_invoice') + if legacy_prefix and resolved_path.startswith(legacy_prefix): + return 'account_invoice/%s' % resolved_path.rsplit('/', 1)[-1] + return resolved_path class SaleReport(ReportTemplateMixin, BaseSaleReport): @@ -1967,10 +2071,7 @@ class SaleReport(ReportTemplateMixin, BaseSaleReport): def _resolve_configured_report_path(cls, action): report_path = cls._get_action_report_path(action) action_name = cls._get_action_name(action) - if (report_path.endswith('/sale_commission_ict.fodt') - or action_name == 'Commission invoice'): - field_name = 'sale_commission_report_template' - elif report_path.endswith('/bill.fodt') or action_name == 'Bill': + if report_path.endswith('/bill.fodt') or action_name == 'Bill': field_name = 'sale_bill_report_template' elif report_path.endswith('/sale_final.fodt') or action_name == 'Sale (final)': field_name = 'sale_final_report_template' @@ -1986,9 +2087,5 @@ class PurchaseReport(ReportTemplateMixin, BasePurchaseReport): def _resolve_configured_report_path(cls, action): report_path = cls._get_action_report_path(action) action_name = cls._get_action_name(action) - if (report_path.endswith('/purchase_commission_ict.fodt') - or action_name == 'Commission invoice'): - return cls._resolve_template_path( - action, 'purchase_commission_report_template', 'purchase') return cls._resolve_template_path( action, 'purchase_report_template', 'purchase') diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index 126fffc..7c8e255 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -4556,7 +4556,7 @@ class PurchaseTradeTestCase(ModuleTestCase): config_model.search.return_value = [ Mock( sale_report_template='sale_melya.fodt', - sale_commission_report_template='sale_commission_ict.fodt', + sale_commission_report_template='sale/sale_commission_ict.fodt', sale_bill_report_template='bill_melya.fodt', sale_final_report_template='sale_final_melya.fodt', invoice_report_template='invoice_melya.fodt', @@ -4568,7 +4568,7 @@ class PurchaseTradeTestCase(ModuleTestCase): invoice_payment_order_report_template='payment_order.fodt', purchase_report_template='purchase_melya.fodt', purchase_commission_report_template=( - 'purchase_commission_ict.fodt'), + 'purchase/purchase_commission_ict.fodt'), ) ] @@ -4601,6 +4601,18 @@ class PurchaseTradeTestCase(ModuleTestCase): 'report': 'account_invoice/commission__ict_final.fodt', }), 'account_invoice/commission__ict_final.fodt') + self.assertEqual( + report_class._resolve_configured_report_path({ + 'name': 'Commission invoice Sale', + 'report': 'account_invoice/sale_commission_ict.fodt', + }), + 'account_invoice/sale_commission_ict.fodt') + self.assertEqual( + report_class._resolve_configured_report_path({ + 'name': 'Commission invoice Purchase', + 'report': 'account_invoice/purchase_commission_ict.fodt', + }), + 'account_invoice/purchase_commission_ict.fodt') self.assertEqual( report_class._resolve_configured_report_path({ 'name': 'Payment Order', @@ -4623,6 +4635,8 @@ class PurchaseTradeTestCase(ModuleTestCase): invoice_report_template='', invoice_cndn_report_template='', invoice_commission_cndn_report_template='', + sale_commission_report_template='', + purchase_commission_report_template='', invoice_prepayment_report_template='', invoice_packing_list_report_template='', invoice_payment_order_report_template='', @@ -4638,6 +4652,16 @@ class PurchaseTradeTestCase(ModuleTestCase): 'name': 'Invoice', 'report': 'account_invoice/invoice.fodt', }) + with self.assertRaises(UserError): + report_class._resolve_configured_report_path({ + 'name': 'Commission invoice Sale', + 'report': 'account_invoice/sale_commission_ict.fodt', + }) + with self.assertRaises(UserError): + report_class._resolve_configured_report_path({ + 'name': 'Commission invoice Purchase', + 'report': 'account_invoice/purchase_commission_ict.fodt', + }) with self.assertRaises(UserError): report_class._resolve_configured_report_path({ 'name': 'Payment Order', @@ -4673,12 +4697,6 @@ class PurchaseTradeTestCase(ModuleTestCase): 'report': 'sale/sale.fodt', }), 'sale/sale_melya.fodt') - self.assertEqual( - report_class._resolve_configured_report_path({ - 'name': 'Commission invoice', - 'report': 'sale/sale_commission_ict.fodt', - }), - 'sale/sale_commission_ict.fodt') self.assertEqual( report_class._resolve_configured_report_path({ 'name': 'Bill', @@ -4715,12 +4733,6 @@ class PurchaseTradeTestCase(ModuleTestCase): 'report': 'purchase/purchase.fodt', }), 'purchase/purchase_melya.fodt') - self.assertEqual( - report_class._resolve_configured_report_path({ - 'name': 'Commission invoice', - 'report': 'purchase/purchase_commission_ict.fodt', - }), - 'purchase/purchase_commission_ict.fodt') def test_shipment_reports_use_templates_from_configuration(self): 'shipment report paths are resolved from purchase_trade configuration' diff --git a/modules/purchase_trade/view/template_configuration_form.xml b/modules/purchase_trade/view/template_configuration_form.xml index bb6da52..1c4fb9a 100644 --- a/modules/purchase_trade/view/template_configuration_form.xml +++ b/modules/purchase_trade/view/template_configuration_form.xml @@ -5,10 +5,6 @@ - - Commission invoice - sale.sale - sale.sale - sale/sale_commission_ict.fodt - - - form_print - sale.sale,-1 - - - Draft sale.sale