From 94fd181c114d83f37202874b877f08adf358af64 Mon Sep 17 00:00:00 2001 From: laurentbarontini Date: Tue, 7 Jul 2026 16:37:53 +0200 Subject: [PATCH] Linkage template --- modules/purchase_trade/stock.py | 41 ++++++++ modules/stock/linkage.fodt | 167 ++++++++++++++++++++++++++++---- 2 files changed, 190 insertions(+), 18 deletions(-) diff --git a/modules/purchase_trade/stock.py b/modules/purchase_trade/stock.py index f4714fc..dc9ac55 100755 --- a/modules/purchase_trade/stock.py +++ b/modules/purchase_trade/stock.py @@ -1836,6 +1836,19 @@ class ShipmentIn(metaclass=PoolMeta): values.append(str(value or '')) return '\n'.join(values) + @classmethod + def _report_table_rows(cls, rows, names, amount_names=()): + result = [] + for row in rows: + values = {} + for index, name in enumerate(names): + value = row[index] + if name in amount_names: + value = cls._report_amount(value) + values[name] = str(value or '') + result.append(values) + return result + @property def report_linkage_title(self): purchase = self._get_report_linkage_purchase() @@ -1911,6 +1924,13 @@ class ShipmentIn(metaclass=PoolMeta): return self._report_column( self._get_report_linkage_summary_rows(), 3, amount=True) + @property + def report_linkage_summary_rows(self): + return self._report_table_rows( + self._get_report_linkage_summary_rows(), + ('group', 'cost_type', 'estimated', 'validated'), + {'estimated', 'validated'}) + @property def report_linkage_movement_types(self): return self._report_column(self._get_report_linkage_movement_rows(), 0) @@ -1951,6 +1971,13 @@ class ShipmentIn(metaclass=PoolMeta): def report_linkage_movement_to_dates(self): return self._report_column(self._get_report_linkage_movement_rows(), 9) + @property + def report_linkage_movement_rows(self): + return self._report_table_rows( + self._get_report_linkage_movement_rows(), + ('type', 'reference', 'counterpart', 'commodity', 'quantity', + 'delivery', 'basis', 'period', 'from_date', 'to_date')) + @property def report_linkage_bank_deal(self): purchase = self._get_report_linkage_purchase() @@ -2009,6 +2036,12 @@ class ShipmentIn(metaclass=PoolMeta): def report_linkage_pricing_input_prices(self): return self._report_column(self._get_report_linkage_pricing_rows(), 5) + @property + def report_linkage_pricing_rows(self): + return self._report_table_rows( + self._get_report_linkage_pricing_rows(), + ('deal', 'side', 'type', 'symbol', 'period', 'input_price')) + @property def report_linkage_detail_groups(self): return self._report_column(self._get_report_linkage_detail_rows(), 0) @@ -2042,6 +2075,14 @@ class ShipmentIn(metaclass=PoolMeta): def report_linkage_detail_validated(self): return self._report_column( self._get_report_linkage_detail_rows(), 7, amount=True) + + @property + def report_linkage_detail_rows(self): + return self._report_table_rows( + self._get_report_linkage_detail_rows(), + ('group', 'cost_type', 'counterpart', 'source', 'unit_price', + 'quantity', 'estimated', 'validated'), + {'estimated', 'validated'}) def get_rec_name(self, name=None): if self.number: diff --git a/modules/stock/linkage.fodt b/modules/stock/linkage.fodt index 72da5ea..1edbe23 100644 --- a/modules/stock/linkage.fodt +++ b/modules/stock/linkage.fodt @@ -1141,22 +1141,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - -<records[0].report_linkage_title or ''> - /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoM + <for each="shipment in records"> + + + <shipment.report_linkage_title or ''> + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoM DAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsN FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAAR CAAyAqADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA @@ -1349,10 +1413,58 @@ UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k= - - - Desk<records[0].report_linkage_desk or ''>B/L Date<records[0].report_linkage_bl_date or ''>Book<records[0].report_linkage_book or ''>Trading Unit<records[0].report_linkage_trading_unit or ''>Strategy<records[0].report_linkage_strategy or ''>Finance user<records[0].report_linkage_finance_user or ''>1- Financial summary ( USD )2- InformationGroupCost TypeEstimatedValidated<records[0].report_linkage_summary_groups or ''><records[0].report_linkage_summary_cost_types or ''><records[0].report_linkage_summary_estimated or ''><records[0].report_linkage_summary_validated or ''>3- Loading and Discharge movementsTypeReferenceCounterpartCommodityQuantityDeliveryBasisPeriod atFromTo<records[0].report_linkage_movement_types or ''><records[0].report_linkage_movement_references or ''><records[0].report_linkage_movement_counterparts or ''><records[0].report_linkage_movement_commodities or ''><records[0].report_linkage_movement_quantities or ''><records[0].report_linkage_movement_deliveries or ''><records[0].report_linkage_movement_basis or ''><records[0].report_linkage_movement_periods or ''><records[0].report_linkage_movement_from_dates or ''><records[0].report_linkage_movement_to_dates or ''>4- Bank InformationDeal<records[0].report_linkage_bank_deal or ''>Type<records[0].report_linkage_bank_type or ''>Financing Bank<records[0].report_linkage_bank_name or ''>LC Type<records[0].report_linkage_lc_type or ''>LC Number<records[0].report_linkage_lc_number or ''>LC Amount<records[0].report_linkage_lc_amount or ''>LC Expiry Date<records[0].report_linkage_lc_expiry_date or ''>5- PricingDealTypeTypeSymbolPeriodInput Price<records[0].report_linkage_pricing_deals or ''><records[0].report_linkage_pricing_sides or ''><records[0].report_linkage_pricing_types or ''><records[0].report_linkage_pricing_symbols or ''><records[0].report_linkage_pricing_periods or ''><records[0].report_linkage_pricing_input_prices or ''><records[0].report_linkage_title or ''> - /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoM + Desk<shipment.report_linkage_desk or ''>B/L Date<shipment.report_linkage_bl_date or ''> + Book<shipment.report_linkage_book or ''>Trading Unit<shipment.report_linkage_trading_unit or ''> + Strategy<shipment.report_linkage_strategy or ''>Finance user<shipment.report_linkage_finance_user or ''> + + + + + +1- Financial summary ( USD )2- Information + + + + GroupCost TypeEstimatedValidated + <for each="row in shipment.report_linkage_summary_rows"><row['group']><row['cost_type']><row['estimated']><row['validated']></for> + + + + + +3- Loading and Discharge movements + + + + TypeReferenceCounterpartCommodityQuantityDeliveryBasisPeriod atFromTo + <for each="row in shipment.report_linkage_movement_rows"><row['type']><row['reference']><row['counterpart']><row['commodity']><row['quantity']><row['delivery']><row['basis']><row['period']><row['from_date']><row['to_date']></for> + + + + + +4- Bank Information + + + + Deal<shipment.report_linkage_bank_deal or ''>Type<shipment.report_linkage_bank_type or ''>Financing Bank<shipment.report_linkage_bank_name or ''>LC Type<shipment.report_linkage_lc_type or ''>LC Number<shipment.report_linkage_lc_number or ''>LC Amount<shipment.report_linkage_lc_amount or ''>LC Expiry Date<shipment.report_linkage_lc_expiry_date or ''> + + + + + +5- Pricing + + + + DealTypeTypeSymbolPeriodInput Price + <for each="row in shipment.report_linkage_pricing_rows"><row['deal']><row['side']><row['type']><row['symbol']><row['period']><row['input_price']></for> + + + + + <shipment.report_linkage_title or ''> + /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoM DAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsN FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAAR CAAyAqADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA @@ -1545,9 +1657,28 @@ UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAU UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9k= - - - Desk<records[0].report_linkage_desk or ''>B/L Date<records[0].report_linkage_bl_date or ''>Book<records[0].report_linkage_book or ''>Trading Unit<records[0].report_linkage_trading_unit or ''>Strategy<records[0].report_linkage_strategy or ''>Finance user<records[0].report_linkage_finance_user or ''>6- Financial details ( USD )GroupCost TypeCounterpartSourceUnit PriceQuantityEstimatedValidated<records[0].report_linkage_detail_groups or ''><records[0].report_linkage_detail_cost_types or ''><records[0].report_linkage_detail_counterparts or ''><records[0].report_linkage_detail_sources or ''><records[0].report_linkage_detail_unit_prices or ''><records[0].report_linkage_detail_quantities or ''><records[0].report_linkage_detail_estimated or ''><records[0].report_linkage_detail_validated or ''>OliverGyslerDigitally signed by Oliver GyslerDate: 2026.03.27 10:02:25 +01'00'J?r?mieCOLLOTDigitally signed by J?r?mie COLLOTDate: 2026.03.27 10:05:10 +01'00'Stephane MonnardDigitally signed by Stephane MonnardDate: 2026.03.27 10:54:44 +01'00'SteveZaccariniDigitally signed by Steve ZaccariniDate: 2026.03.30 15:49:42 +02'00' - + Desk<shipment.report_linkage_desk or ''>B/L Date<shipment.report_linkage_bl_date or ''> + Book<shipment.report_linkage_book or ''>Trading Unit<shipment.report_linkage_trading_unit or ''> + Strategy<shipment.report_linkage_strategy or ''>Finance user<shipment.report_linkage_finance_user or ''> + + + + + +6- Financial details ( USD ) + + + + GroupCost TypeCounterpartSourceUnit PriceQuantityEstimatedValidated + <for each="row in shipment.report_linkage_detail_rows"><row['group']><row['cost_type']><row['counterpart']><row['source']><row['unit_price']><row['quantity']><row['estimated']><row['validated']></for> + + + + + OliverGyslerDigitally signed by Oliver GyslerDate: 2026.03.27 10:02:25 +01'00'JeremieCOLLOTDigitally signed by Jeremie COLLOTDate: 2026.03.27 10:05:10 +01'00'Stephane MonnardDigitally signed by Stephane MonnardDate: 2026.03.27 10:54:44 +01'00' + SteveZaccariniDigitally signed by Steve ZaccariniDate: 2026.03.30 15:49:42 +02'00' + + </for> + \ No newline at end of file