diff --git a/modules/purchase_trade/stock.py b/modules/purchase_trade/stock.py index dc9ac55..aef9619 100755 --- a/modules/purchase_trade/stock.py +++ b/modules/purchase_trade/stock.py @@ -1510,21 +1510,46 @@ class ShipmentIn(metaclass=PoolMeta): return unique def _get_report_linkage_lots(self): - lots = self._get_report_physical_lots() - if lots: - return lots return self._report_unique_records( getattr(move, 'lot', None) for move in (self.incoming_moves or self.moves or [])) + @staticmethod + def _report_linkage_lot_purchase_line(lot): + line = getattr(lot, 'line', None) + if line: + return line + get_virtual_lot = getattr(lot, 'getVlot_p', None) + if callable(get_virtual_lot): + try: + virtual_lot = get_virtual_lot() + except (IndexError, AttributeError): + virtual_lot = None + return getattr(virtual_lot, 'line', None) + return None + + @staticmethod + def _report_linkage_lot_sale_line(lot): + line = getattr(lot, 'sale_line', None) + if line: + return line + get_virtual_lot = getattr(lot, 'getVlot_s', None) + if callable(get_virtual_lot): + try: + virtual_lot = get_virtual_lot() + except (IndexError, AttributeError): + virtual_lot = None + return getattr(virtual_lot, 'sale_line', None) + return None + def _get_report_linkage_purchase_lines(self): return self._report_unique_records( - getattr(lot, 'line', None) + self._report_linkage_lot_purchase_line(lot) for lot in self._get_report_linkage_lots()) def _get_report_linkage_sale_lines(self): return self._report_unique_records( - getattr(lot, 'sale_line', None) + self._report_linkage_lot_sale_line(lot) for lot in self._get_report_linkage_lots()) def _get_report_linkage_purchase(self): @@ -1866,12 +1891,18 @@ class ShipmentIn(metaclass=PoolMeta): @property def report_linkage_desk(self): - product = self._get_report_linkage_product() + purchase_lines = self._get_report_linkage_purchase_lines() + product = ( + getattr(purchase_lines[0], 'product', None) + if purchase_lines else self._get_report_linkage_product()) return self._report_rec_name(product) @property def report_linkage_book(self): - product = self._get_report_linkage_product() + purchase_lines = self._get_report_linkage_purchase_lines() + product = ( + getattr(purchase_lines[0], 'product', None) + if purchase_lines else self._get_report_linkage_product()) code = getattr(product, 'code', None) if product else '' period = self.report_linkage_strategy return ' '.join(part for part in [code, period] if part) @@ -1880,7 +1911,7 @@ class ShipmentIn(metaclass=PoolMeta): def report_linkage_strategy(self): for line in ( self._get_report_linkage_purchase_lines() - + self._get_report_linkage_sale_lines()): + or self._get_report_linkage_sale_lines()): strategies = list(getattr(line, 'mtm', []) or []) if strategies: strategy = getattr(strategies[0], 'strategy', None) or strategies[0] diff --git a/modules/stock/linkage.fodt b/modules/stock/linkage.fodt index bbb8596..5a2e758 100644 --- a/modules/stock/linkage.fodt +++ b/modules/stock/linkage.fodt @@ -1150,9 +1150,9 @@ - - - + + + @@ -1180,8 +1180,8 @@ - - + + @@ -1202,15 +1202,15 @@ - + - + - +