Reviewers: ,
Please review this at http://codereview.tryton.org/778002/
Affected files:
M sale.py
Index: sale.py
===================================================================
--- a/sale.py
+++ b/sale.py
@@ -6,6 +6,7 @@
from trytond.pyson import Eval
from trytond.pool import Pool, PoolMeta
from trytond.transaction import Transaction
+from trytond.const import OPERATORS
__all__ = ['Sale', 'SaleLine']
__metaclass__ = PoolMeta
@@ -173,7 +174,8 @@
if value['purchase_request']:
purchase_request = id2purchase_requests[
value['purchase_request']]
- if purchase_request.purchase_line:
+ if (purchase_request.customer
+ and purchase_request.purchase_line):
move_ids = tuple(m.id
for m in purchase_request.purchase_line.moves)
if value['moves'] is None:
@@ -183,3 +185,29 @@
if added:
del value['purchase_request']
return values
+
+ @classmethod
+ def search(cls, domain, *args, **kwargs):
+ def process(domain):
+ domain = domain[:]
+ i = 0
+ while i < len(domain):
+ arg = domain[i]
+ if (isinstance(arg, tuple)
+ or (isinstance(arg, list)
+ and len(arg) > 2
+ and arg[1] in OPERATORS)):
+ if arg[0] == 'moves':
+ domain[i] = ['OR',
+ arg,
+ [
+ ('purchase_request.purchase_line.moves',) +
+ tuple(arg[1:]),
+ ('purchase_request.customer', '!=', None),
+ ]
+ ]
+ elif isinstance(arg, list):
+ domain[i] = process(domain)
+ i += 1
+ return domain
+ return super(SaleLine, cls).search(process(domain), *args, **kwargs)