diff --git a/modules/purchase_trade/stock.py b/modules/purchase_trade/stock.py
index 5c1ff4a..4bcd10f 100755
--- a/modules/purchase_trade/stock.py
+++ b/modules/purchase_trade/stock.py
@@ -1714,6 +1714,15 @@ class ShipmentIn(metaclass=PoolMeta):
amount = Decimal(str(amount or 0))
return -amount if getattr(fee, 'p_r', None) == 'pay' else amount
+ @classmethod
+ def _report_linkage_fee_label(cls, fee):
+ product = getattr(fee, 'product', None)
+ label = (
+ getattr(product, 'name', None)
+ or cls._report_rec_name(product)
+ or 'Fee')
+ return label
+
def _get_report_linkage_summary_rows(self):
purchase_lines = self._get_report_linkage_purchase_lines()
sale_lines = self._get_report_linkage_sale_lines()
@@ -1728,11 +1737,13 @@ class ShipmentIn(metaclass=PoolMeta):
rows.append(('Sales', '', sale_total, sale_total))
fee_total = Decimal('0')
+ fee_rows = {}
for fee in self._get_report_linkage_fees():
- product = getattr(fee, 'product', None)
- label = self._report_rec_name(product) or 'Fee'
+ label = self._report_linkage_fee_label(fee)
amount = self._report_fee_amount(fee)
fee_total += amount
+ fee_rows[label] = fee_rows.get(label, Decimal('0')) + amount
+ for label, amount in fee_rows.items():
rows.append(('Costs', label, amount, amount))
if rows:
@@ -2940,6 +2951,10 @@ class LotQt(metaclass=PoolMeta):
def _report_fee_amount(cls, fee):
return ShipmentIn._report_fee_amount(fee)
+ @classmethod
+ def _report_linkage_fee_label(cls, fee):
+ return ShipmentIn._report_linkage_fee_label(fee)
+
@classmethod
def _report_column(cls, rows, index, amount=False):
return ShipmentIn._report_column(rows, index, amount=amount)
@@ -4710,6 +4725,10 @@ class LotReportLinkageRecord:
def _report_fee_amount(cls, fee):
return ShipmentIn._report_fee_amount(fee)
+ @classmethod
+ def _report_linkage_fee_label(cls, fee):
+ return ShipmentIn._report_linkage_fee_label(fee)
+
@classmethod
def _report_column(cls, rows, index, amount=False):
return ShipmentIn._report_column(rows, index, amount=amount)
diff --git a/modules/purchase_trade/tests/test_module.py b/modules/purchase_trade/tests/test_module.py
index 5c4c88e..b3e5431 100644
--- a/modules/purchase_trade/tests/test_module.py
+++ b/modules/purchase_trade/tests/test_module.py
@@ -6562,7 +6562,17 @@ class PurchaseTradeTestCase(ModuleTestCase):
ShipmentIn = Pool().get('stock.shipment.in')
shipment = ShipmentIn()
shipment.bl_date = datetime.date(2026, 4, 30)
- shipment.fees = []
+ freight_product = SimpleNamespace(
+ rec_name='[Maritime Freight] Maritime freight',
+ name='Maritime freight')
+ shipment.fees = [
+ SimpleNamespace(
+ id=201, product=freight_product, price=Decimal('10'),
+ quantity=Decimal('1'), mode='lumpsum', p_r='pay'),
+ SimpleNamespace(
+ id=202, product=freight_product, price=Decimal('15'),
+ quantity=Decimal('1'), mode='lumpsum', p_r='pay'),
+ ]
shipment.moves = []
shipment.lotqt = []
@@ -6637,6 +6647,12 @@ class PurchaseTradeTestCase(ModuleTestCase):
self.assertIn('Sales', shipment.report_linkage_summary_groups)
self.assertIn('-8,000.000', shipment.report_linkage_summary_estimated)
self.assertIn('10,000.000', shipment.report_linkage_summary_estimated)
+ summary_rows = shipment._get_report_linkage_summary_rows()
+ freight_rows = [
+ row for row in summary_rows
+ if row[0] == 'Costs' and row[1] == 'Maritime freight']
+ self.assertEqual(len(freight_rows), 1)
+ self.assertEqual(freight_rows[0][2], Decimal('-25'))
self.assertIn('P-10', shipment.report_linkage_movement_references)
self.assertIn('S-20', shipment.report_linkage_movement_references)
self.assertIn('100 MT', shipment.report_linkage_movement_quantities)
diff --git a/modules/stock/linkage.fodt b/modules/stock/linkage.fodt
index 5a2e758..8e84c77 100644
--- a/modules/stock/linkage.fodt
+++ b/modules/stock/linkage.fodt
@@ -1153,15 +1153,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -1186,26 +1186,26 @@
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
@@ -1690,4 +1690,4 @@
</for>
-
\ No newline at end of file
+