diff --git a/modules/account_invoice/commission__ict_final.fodt b/modules/account_invoice/commission__ict_final.fodt index fe3e494..5e1d2ad 100644 --- a/modules/account_invoice/commission__ict_final.fodt +++ b/modules/account_invoice/commission__ict_final.fodt @@ -3851,10 +3851,10 @@ - <for each="line in invoice.report_positive_rate_lines.splitlines()">Your commission: <line></for> + Your commission: <invoice.report_commission_adjustment_rate_line> - <for each="tax in invoice.taxes">VAT <tax.description or '0%'> RATE</for> + <invoice.report_commission_tax_rate_line> @@ -3870,7 +3870,7 @@ <invoice.currency.name> - <format_currency(invoice.total_amount, invoice.party.lang, invoice.currency)> + <format_number(invoice.total_amount, invoice.party.lang, digits=invoice.currency.digits)> diff --git a/modules/purchase_trade/invoice.py b/modules/purchase_trade/invoice.py index dba3c3b..d54514c 100644 --- a/modules/purchase_trade/invoice.py +++ b/modules/purchase_trade/invoice.py @@ -532,6 +532,49 @@ class Invoice(metaclass=PoolMeta): totals['difference'], totals['unit']) return self._format_report_quantity_display(lbs) + @property + def report_commission_adjustment_rate_line(self): + fee = self._get_report_commission_fee() + if not fee: + return self.report_commission_rate_line + + mode = getattr(fee, 'mode', None) + price = getattr(fee, 'price', None) or 0 + if mode in {'pprice', 'rate', 'pcost'}: + kind = self._get_report_commission_kind() or 'sale' + return ' '.join(part for part in [ + self._format_report_number(price, digits='0.0000'), + '% on', + kind, + 'amount', + self._get_report_commission_base_amount_display_for(kind), + self._get_report_commission_currency_name_for(kind), + ] if part) + + if (getattr(fee, 'enable_linked_currency', False) + and getattr(fee, 'linked_price', None) is not None): + price = fee.linked_price + currency = getattr(fee, 'linked_currency', None) + unit = getattr(fee, 'linked_unit', None) + else: + currency = getattr(fee, 'currency', None) + unit = getattr(fee, 'unit', None) + price_text = self._format_report_number(price, digits='0.0000') + currency_text = self._report_record_name(currency) + unit_text = self._report_record_name(unit) + if currency_text and unit_text: + return '%s %s / %s' % (price_text, currency_text, unit_text) + return ' '.join(part for part in [ + price_text, currency_text or unit_text, + ] if part) + + @property + def report_commission_tax_rate_line(self): + for tax in getattr(self, 'taxes', []) or []: + description = getattr(tax, 'description', None) or '0%' + return 'VAT %s RATE' % description + return 'VAT 0% RATE' + @property def report_commission_address(self): trade = self._get_report_commission_trade() diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py index b20b231..1f26778 100644 --- a/modules/purchase_trade/tests/test_module.py +++ b/modules/purchase_trade/tests/test_module.py @@ -5481,6 +5481,9 @@ class PurchaseTradeTestCase(ModuleTestCase): get_current_quantity_converted=lambda state=0, unit=None: Decimal('397')) fee = SimpleNamespace( enable_linked_currency=False, + mode='perqt', + price=Decimal('7.85719'), + currency=SimpleNamespace(rec_name='USD'), unit=unit, sale_line=SimpleNamespace(sale=SimpleNamespace()), line=None, @@ -5497,6 +5500,10 @@ class PurchaseTradeTestCase(ModuleTestCase): self.assertEqual( invoice.report_commission_weight_difference_display, '3.00') self.assertEqual(invoice.report_commission_adjustment_unit_upper, 'MT') + self.assertEqual( + invoice.report_commission_adjustment_rate_line, + '7.8572 USD / MT') + self.assertEqual(invoice.report_commission_tax_rate_line, 'VAT 0% RATE') def test_fee_delete_detects_generated_ordered_purchase(self): 'ordered fee deletion targets only its generated service purchase'