diff --git a/modules/purchase/purchase.py b/modules/purchase/purchase.py index 0f8a023357..b73acaf8fc 100644 --- a/modules/purchase/purchase.py +++ b/modules/purchase/purchase.py @@ -1132,16 +1132,13 @@ class Line(sequence_ordered(), ModelSQL, ModelView): 'company': Eval('company', None), }, search_context={ - 'locations': If(Bool(Eval('_parent_purchase', {}).get( - 'warehouse')), - [Eval('_parent_purchase', {}).get('warehouse', None)], - []), - 'stock_date_end': Eval('_parent_purchase', {}).get( - 'purchase_date'), + 'locations': If(Bool(Eval('warehouse')), + [Eval('warehouse', -1)], []), + 'stock_date_end': Eval('purchase_date', None), 'stock_skip_warehouse': True, - 'currency': Eval('_parent_purchase', {}).get('currency'), - 'supplier': Eval('_parent_purchase', {}).get('party'), - 'purchase_date': Eval('_parent_purchase', {}).get('purchase_date'), + 'currency': Eval('currency', -1), + 'supplier': Eval('supplier', -1), + 'purchase_date': Eval('purchase_date', None), 'uom': Eval('unit'), 'taxes': Eval('taxes', []), 'quantity': Eval('quantity'), @@ -1163,7 +1160,7 @@ class Line(sequence_ordered(), ModelSQL, ModelView): ('product', '=', Eval('product')), ], []), - ('party', '=', Eval('_parent_purchase', {}).get('party')), + ('party', '=', Eval('supplier', -1)), ], states={ 'invisible': Eval('type') != 'line', @@ -1205,8 +1202,7 @@ class Line(sequence_ordered(), ModelSQL, ModelView): ('group', '=', None), ('group.kind', 'in', ['purchase', 'both']), ], - ('company', '=', - Eval('_parent_purchase', {}).get('company', -1)), + ('company', '=', Eval('company', -1)), If(Eval('type') != 'line', ('id', '=', None), ()), @@ -1234,6 +1230,9 @@ class Line(sequence_ordered(), ModelSQL, ModelView): moves_progress = fields.Function( fields.Float("Moves Progress", digits=(1, 4)), 'get_moves_progress') + warehouse = fields.Function(fields.Many2One( + 'stock.location', "Warehouse"), + 'on_change_with_warehouse') from_location = fields.Function(fields.Many2One('stock.location', 'From Location'), 'get_from_location') to_location = fields.Function(fields.Many2One('stock.location', @@ -1524,6 +1523,11 @@ class Line(sequence_ordered(), ModelSQL, ModelView): return amount return Decimal('0.0') + @fields.depends('purchase', '_parent_purchase.warehouse') + def on_change_with_warehouse(self, name=None): + if self.purchase and self.purchase.warehouse: + return self.purchase.warehouse.id + def get_from_location(self, name): if (self.quantity or 0) >= 0: if self.purchase.party.supplier_location: diff --git a/modules/sale/sale.py b/modules/sale/sale.py index c1e654fa61..cd9862dc6b 100644 --- a/modules/sale/sale.py +++ b/modules/sale/sale.py @@ -1216,13 +1216,13 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView): 'company': Eval('company', None), }, search_context={ - 'locations': If(Bool(Eval('_parent_sale', {}).get('warehouse')), - [Eval('_parent_sale', {}).get('warehouse', 0)], []), - 'stock_date_end': Eval('_parent_sale', {}).get('sale_date'), + 'locations': If(Bool(Eval('warehouse')), + [Eval('warehouse', -1)], []), + 'stock_date_end': Eval('sale_date', None), 'stock_skip_warehouse': True, - 'currency': Eval('_parent_sale', {}).get('currency'), - 'customer': Eval('_parent_sale', {}).get('party'), - 'sale_date': Eval('_parent_sale', {}).get('sale_date'), + 'currency': Eval('currency', -1), + 'customer': Eval('customer', -1), + 'sale_date': Eval('sale_date', None), 'uom': Eval('unit'), 'taxes': Eval('taxes', []), 'quantity': Eval('quantity'), @@ -1265,9 +1265,9 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView): ('parent', '=', None), ['OR', ('group', '=', None), - ('group.kind', 'in', ['sale', 'both'])], - ('company', '=', - Eval('_parent_sale', {}).get('company', -1)), + ('group.kind', 'in', ['sale', 'both']), + ], + ('company', '=', Eval('company', -1)), If(Eval('type') != 'line', ('id', '=', None), ()), @@ -1296,8 +1296,9 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView): moves_progress = fields.Function( fields.Float("Moves Progress", digits=(1, 4)), 'get_moves_progress') - warehouse = fields.Function(fields.Many2One('stock.location', - 'Warehouse'), 'get_warehouse') + warehouse = fields.Function(fields.Many2One( + 'stock.location', "Warehouse"), + 'on_change_with_warehouse') from_location = fields.Function(fields.Many2One('stock.location', 'From Location'), 'get_from_location') to_location = fields.Function(fields.Many2One('stock.location', @@ -1543,8 +1544,10 @@ class SaleLine(TaxableMixin, sequence_ordered(), ModelSQL, ModelView): return amount return Decimal('0.0') - def get_warehouse(self, name): - return self.sale.warehouse.id if self.sale.warehouse else None + @fields.depends('sale', '_parent_sale.warehouse') + def on_change_with_warehouse(self, name=None): + if self.sale and self.sale.warehouse: + return self.sale.warehouse.id def get_from_location(self, name): if (self.quantity or 0) >= 0: diff --git a/modules/sale_product_customer/sale.py b/modules/sale_product_customer/sale.py index 0c783a5efa..7ee1f7168f 100644 --- a/modules/sale_product_customer/sale.py +++ b/modules/sale_product_customer/sale.py @@ -22,7 +22,7 @@ class Line(metaclass=PoolMeta): ('product', '=', Eval('product')), ], []), - ('party', '=', Eval('_parent_sale', {}).get('party')), + ('party', '=', Eval('customer', -1)), ], states={ 'invisible': Eval('type') != 'line',