From eea4a4d3efa0867e121ab87d17340168dcd7c780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Wed, 20 Dec 2017 19:30:57 +0100 Subject: [PATCH] Expose shipments_returns constructors issue7016 review42951002 --- sale.py | 63 ++++++++++++++++++++++++++++---------------------------- sale.xml | 26 +++++++++++++++++++++++ 2 files changed, 58 insertions(+), 31 deletions(-) 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 + + +