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 @@
-
+
-
+
-
+