Replace _parent_ expression with direct field on sale and purchase line

Since #12003 lines can be edited outside the parent form so expression should
not rely on _parent_.

Closes #12109
This commit is contained in:
Cédric Krier
2023-02-27 16:37:11 +01:00
parent 439d357bae
commit 4dc58e30e9
3 changed files with 33 additions and 26 deletions
+16 -12
View File
@@ -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:
+16 -13
View File
@@ -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:
+1 -1
View File
@@ -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',