diff --git a/sale.py b/sale.py
index 9c851f52af..c07dbd5e12 100644
--- a/sale.py
+++ b/sale.py
@@ -28,7 +28,8 @@ __all__ = ['Sale', 'SaleIgnoredInvoice', 'SaleRecreatedInvoice',
'SaleLineRecreatedMove', 'SaleReport', 'OpenCustomer',
'HandleShipmentExceptionAsk', 'HandleShipmentException',
'HandleInvoiceExceptionAsk', 'HandleInvoiceException',
- 'ReturnSaleStart', 'ReturnSale']
+ 'ReturnSaleStart', 'ReturnSale',
+ 'get_shipments_returns', 'search_shipments_returns']
_ZERO = Decimal(0)
STATES = [
@@ -41,6 +42,36 @@ STATES = [
]
+def get_shipments_returns(model_name):
+ "Computes the returns or shipments"
+ def method(self, name):
+ Model = Pool().get(model_name)
+ shipments = set()
+ for line in self.lines:
+ for move in line.moves:
+ if isinstance(move.shipment, Model):
+ shipments.add(move.shipment.id)
+ return list(shipments)
+ return method
+
+
+def search_shipments_returns(model_name):
+ "Search on shipments or returns"
+ def method(self, name, clause):
+ nested = clause[0].lstrip(name)
+ if nested:
+ return [('lines.moves.shipment' + nested,)
+ + tuple(clause[1:3]) + (model_name,) + tuple(clause[3:])]
+ else:
+ if isinstance(clause[2], basestring):
+ target = 'rec_name'
+ else:
+ target = 'id'
+ return [('lines.moves.shipment.' + target,)
+ + tuple(clause[1:3]) + (model_name,)]
+ return classmethod(method)
+
+
class Sale(Workflow, ModelSQL, ModelView, TaxableMixin):
'Sale'
__name__ = 'sale.sale'
@@ -565,39 +596,9 @@ class Sale(Workflow, ModelSQL, ModelView, TaxableMixin):
'invoice_state': state,
})
- def get_shipments_returns(model_name):
- "Computes the returns or shipments"
- def method(self, name):
- Model = Pool().get(model_name)
- shipments = set()
- for line in self.lines:
- for move in line.moves:
- if isinstance(move.shipment, Model):
- shipments.add(move.shipment.id)
- return list(shipments)
- return method
-
get_shipments = get_shipments_returns('stock.shipment.out')
get_shipment_returns = get_shipments_returns('stock.shipment.out.return')
- def search_shipments_returns(model_name):
- '''
- Search on shipments or returns
- '''
- def method(self, name, clause):
- nested = clause[0].lstrip(name)
- if nested:
- return [('lines.moves.shipment' + nested,)
- + tuple(clause[1:3]) + (model_name,) + tuple(clause[3:])]
- else:
- if isinstance(clause[2], basestring):
- target = 'rec_name'
- else:
- target = 'id'
- return [('lines.moves.shipment.' + target,)
- + tuple(clause[1:3]) + (model_name,)]
- return classmethod(method)
-
search_shipments = search_shipments_returns('stock.shipment.out')
search_shipment_returns = search_shipments_returns(
'stock.shipment.out.return')
diff --git a/sale.xml b/sale.xml
index 3adce539df..ae887df99c 100644
--- a/sale.xml
+++ b/sale.xml
@@ -224,6 +224,32 @@ this repository contains the full copyright notices and license terms. -->
+
+ Sales
+ sale.sale
+
+
+
+
+
+
+
+
+
+
+
+
+
+ form_relate
+ stock.shipment.out.return,-1
+
+
+