From 0c560c4e8a055a77238ee231d28d7ec9689a126b Mon Sep 17 00:00:00 2001 From: Albert Cunillera Benet Date: Sun, 12 Apr 2020 09:15:06 +0200 Subject: [PATCH] Add return wizard issue9049 review256631002 --- CHANGELOG | 1 + __init__.py | 2 ++ purchase.py | 33 +++++++++++++++++++++++++++++++++ purchase.xml | 16 ++++++++++++++++ tests/test_purchase.py | 5 +++++ 5 files changed, 57 insertions(+) diff --git a/CHANGELOG b/CHANGELOG index f33d908152..b0e7cfa676 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,4 @@ +* Add return wizard * Add employee on purchases for some states * Add contact and invoice party on purchase diff --git a/__init__.py b/__init__.py index edc4272e47..fa5abbef51 100644 --- a/__init__.py +++ b/__init__.py @@ -36,6 +36,7 @@ def register(): stock.Location, party.Party, party.CustomerCode, + purchase.ReturnPurchaseStart, module='purchase', type_='model') Pool.register( purchase.PurchaseReport, @@ -47,4 +48,5 @@ def register(): party.PartyReplace, party.PartyErase, purchase.ModifyHeader, + purchase.ReturnPurchase, module='purchase', type_='wizard') diff --git a/purchase.py b/purchase.py index 65afbe0eaa..4349df30d7 100644 --- a/purchase.py +++ b/purchase.py @@ -1903,3 +1903,36 @@ class ModifyHeader(Wizard): Line.save(purchase.lines) return 'end' + + +class ReturnPurchaseStart(ModelView): + "Return Purchase" + __name__ = 'purchase.return_purchase.start' + + +class ReturnPurchase(Wizard): + "Return Purchase" + __name__ = 'purchase.return_purchase' + start = StateView('purchase.return_purchase.start', + 'purchase.return_purchase_start_view_form', [ + Button("Cancel", 'end', 'tryton-cancel'), + Button("Return", 'return_', 'tryton-ok', default=True), + ]) + return_ = StateAction('purchase.act_purchase_form') + + def do_return_(self, action): + Purchase = Pool().get('purchase.purchase') + + purchases = Purchase.browse(Transaction().context['active_ids']) + return_purchases = Purchase.copy(purchases) + for return_purchase, purchase in zip(return_purchases, purchases): + for line in return_purchase.lines: + if line.type == 'line': + line.quantity *= -1 + return_purchase.lines = return_purchase.lines # Force saving + Purchase.save(return_purchases) + + data = {'res_id': [s.id for s in return_purchases]} + if len(return_purchases) == 1: + action['views'].reverse() + return action, data diff --git a/purchase.xml b/purchase.xml index 27f30d3ccb..4fc7fd3fa3 100644 --- a/purchase.xml +++ b/purchase.xml @@ -515,6 +515,22 @@ this repository contains the full copyright notices and license terms. --> template_tree + + purchase.return_purchase.start + form + return_purchase_start_form + + + Return Purchase + purchase.return_purchase + purchase.purchase + + + form_action + purchase.purchase,-1 + + + Parties associated to Purchases purchase.open_supplier diff --git a/tests/test_purchase.py b/tests/test_purchase.py index 0bc22b7798..4dcd9deed8 100644 --- a/tests/test_purchase.py +++ b/tests/test_purchase.py @@ -122,4 +122,9 @@ def suite(): tearDown=doctest_teardown, encoding='utf-8', optionflags=doctest.REPORT_ONLY_FIRST_FAILURE, checker=doctest_checker)) + suite.addTests(doctest.DocFileSuite( + 'scenario_purchase_return_wizard.rst', + tearDown=doctest_teardown, encoding='utf-8', + optionflags=doctest.REPORT_ONLY_FIRST_FAILURE, + checker=doctest_checker)) return suite