diff --git a/modules/purchase_trade/stock.py b/modules/purchase_trade/stock.py
index 288218d..a64b9c8 100755
--- a/modules/purchase_trade/stock.py
+++ b/modules/purchase_trade/stock.py
@@ -622,9 +622,18 @@ class ShipmentIn(metaclass=PoolMeta):
booking_date =fields.Date("Booking date")
ref = fields.Char("Our reference")
note = fields.Text("Notes")
- dashboard = fields.Many2One('purchase.dashboard',"Dashboard")
+ dashboard = fields.Many2One('purchase.dashboard',"Dashboard")
himself = fields.Function(fields.Many2One('stock.shipment.in',"Shipment"),'get_sh')
charter_party = fields.Many2One('stock.charter.party', "Charter Party")
+ owner_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Owner Conditions"),
+ 'get_owner_charter_conditions')
+ purchase_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Supplier Conditions"),
+ 'get_purchase_charter_conditions')
+ sale_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Customer Conditions"),
+ 'get_sale_charter_conditions')
sof = fields.One2Many('sof.statement', 'shipment',"Demurrage calculations")
del_from = fields.Date("Delivery period from")
del_to = fields.Date("to")
@@ -1618,9 +1627,65 @@ class ShipmentIn(metaclass=PoolMeta):
return sum([(e.quantity if e.quantity else 0) for e in self.incoming_moves])
if self.lotqt:
return sum([(e.lot_quantity if e.lot_quantity else 0) for e in self.lotqt])
-
- def get_bales(self,name=None):
- Lot = Pool().get('lot.lot')
+
+ @staticmethod
+ def _unique_condition_ids(conditions):
+ ids = []
+ seen = set()
+ for condition in conditions or []:
+ condition_id = getattr(condition, 'id', condition)
+ if not condition_id or condition_id in seen:
+ continue
+ seen.add(condition_id)
+ ids.append(condition_id)
+ return ids
+
+ def get_owner_charter_conditions(self, name=None):
+ return self._unique_condition_ids(
+ getattr(self.charter_party, 'conditions', None) or [])
+
+ def _get_purchase_lines_from_lots(self):
+ lines = []
+ seen = set()
+ for lot_qt in getattr(self, 'lotqt', []) or []:
+ line = getattr(getattr(lot_qt, 'lot_p', None), 'line', None)
+ line_id = getattr(line, 'id', None)
+ if not line or line_id in seen:
+ continue
+ seen.add(line_id)
+ lines.append(line)
+ return lines
+
+ def _get_sale_lines_from_lots(self):
+ lines = []
+ seen = set()
+ for lot_qt in getattr(self, 'lotqt', []) or []:
+ line = getattr(getattr(lot_qt, 'lot_s', None), 'sale_line', None)
+ line_id = getattr(line, 'id', None)
+ if not line or line_id in seen:
+ continue
+ seen.add(line_id)
+ lines.append(line)
+ return lines
+
+ def get_purchase_charter_conditions(self, name=None):
+ conditions = []
+ for line in self._get_purchase_lines_from_lots():
+ getter = getattr(line, 'get_effective_charter_conditions', None)
+ if getter:
+ conditions.extend(getter())
+ return self._unique_condition_ids(conditions)
+
+ def get_sale_charter_conditions(self, name=None):
+ conditions = []
+ for line in self._get_sale_lines_from_lots():
+ getter = getattr(line, 'get_effective_charter_conditions', None)
+ if getter:
+ conditions.extend(getter())
+ return self._unique_condition_ids(conditions)
+
+ def get_bales(self,name=None):
+ Lot = Pool().get('lot.lot')
lots = Lot.search(['lot_shipment_in','=',self.id])
if lots:
return sum([l.lot_qt for l in lots])
@@ -1879,6 +1944,15 @@ class StatementOfFacts(ModelSQL, ModelView):
timebar_day = fields.Integer("TimeBar")
timebar_warn = fields.Integer("Warning TimeBar")
charter_party = fields.Many2One('stock.charter.party', "Charter Party")
+ owner_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Owner Conditions"),
+ 'get_owner_charter_conditions')
+ purchase_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Supplier Conditions"),
+ 'get_purchase_charter_conditions')
+ sale_charter_conditions = fields.Function(
+ fields.One2Many('charter.condition', '', "Customer Conditions"),
+ 'get_sale_charter_conditions')
chart = fields.Many2One('document.incoming',"Charter Party Terms")
sof = fields.Many2One('document.incoming',"Statement of facts")
@@ -1914,6 +1988,23 @@ class StatementOfFacts(ModelSQL, ModelView):
if self.shipment and self.shipment.charter_party and not self.charter_party:
self.charter_party = self.shipment.charter_party
+ def get_owner_charter_conditions(self, name=None):
+ if self.charter_party:
+ return ShipmentIn._unique_condition_ids(self.charter_party.conditions)
+ if self.shipment:
+ return self.shipment.get_owner_charter_conditions(name)
+ return []
+
+ def get_purchase_charter_conditions(self, name=None):
+ if self.shipment:
+ return self.shipment.get_purchase_charter_conditions(name)
+ return []
+
+ def get_sale_charter_conditions(self, name=None):
+ if self.shipment:
+ return self.shipment.get_sale_charter_conditions(name)
+ return []
+
def get_qt(self,name):
if self.shipment:
return self.shipment.get_quantity()
diff --git a/modules/purchase_trade/view/shipment_in_form.xml b/modules/purchase_trade/view/shipment_in_form.xml
index bf23839..1b36f2a 100755
--- a/modules/purchase_trade/view/shipment_in_form.xml
+++ b/modules/purchase_trade/view/shipment_in_form.xml
@@ -111,6 +111,18 @@ this repository contains the full copyright notices and license terms. -->