diff --git a/modules/account_payment/__init__.py b/modules/account_payment/__init__.py
index 52f6be034a..1511f6b6cd 100644
--- a/modules/account_payment/__init__.py
+++ b/modules/account_payment/__init__.py
@@ -11,7 +11,6 @@ def register():
payment.Group,
payment.Payment,
account.MoveLine,
- payment.ProcessPaymentStart,
account.CreateDirectDebitStart,
account.PayLineStart,
account.PayLineAskJournal,
diff --git a/modules/account_payment/payment.py b/modules/account_payment/payment.py
index 0b38a427f3..46f1494ef0 100644
--- a/modules/account_payment/payment.py
+++ b/modules/account_payment/payment.py
@@ -21,7 +21,7 @@ from trytond.rpc import RPC
from trytond.tools import (
cursor_dict, grouped_slice, reduce_ids, sortable_values)
from trytond.transaction import Transaction
-from trytond.wizard import Button, StateAction, StateView, Wizard
+from trytond.wizard import StateAction, Wizard
from .exceptions import OverpayWarning
@@ -423,6 +423,14 @@ class Payment(Workflow, ModelSQL, ModelView):
'icon': 'tryton-forward',
'depends': ['state', 'kind'],
},
+ 'process_wizard': {
+ 'invisible': ~(
+ (Eval('state') == 'approved')
+ | ((Eval('state') == 'submitted')
+ & (Eval('kind') == 'receivable'))),
+ 'icon': 'tryton-launch',
+ 'depends': ['state', 'kind'],
+ },
'proceed': {
'invisible': (
~Eval('state').in_(['succeeded', 'failed'])
@@ -578,6 +586,11 @@ class Payment(Workflow, ModelSQL, ModelView):
def approve(cls, payments):
pass
+ @classmethod
+ @ModelView.button_action('account_payment.act_process_payments')
+ def process_wizard(cls, payments):
+ pass
+
@classmethod
@Workflow.transition('processing')
def process(cls, payments, group):
@@ -619,19 +632,10 @@ class Payment(Workflow, ModelSQL, ModelView):
pass
-class ProcessPaymentStart(ModelView):
- 'Process Payment'
- __name__ = 'account.payment.process.start'
-
-
class ProcessPayment(Wizard):
'Process Payment'
__name__ = 'account.payment.process'
- start = StateView('account.payment.process.start',
- 'account_payment.payment_process_start_view_form', [
- Button('Cancel', 'end', 'tryton-cancel'),
- Button('Process', 'process', 'tryton-ok', default=True),
- ])
+ start_state = 'process'
process = StateAction('account_payment.act_payment_group_form')
def _group_payment_key(self, payment):
diff --git a/modules/account_payment/payment.xml b/modules/account_payment/payment.xml
index 45d161e90b..691c635cfe 100644
--- a/modules/account_payment/payment.xml
+++ b/modules/account_payment/payment.xml
@@ -503,6 +503,13 @@ this repository contains the full copyright notices and license terms. -->
+
+ process_wizard
+ Process
+
+ Are you sure you want to process the payments?
+
+
proceed
Processing
@@ -533,22 +540,10 @@ this repository contains the full copyright notices and license terms. -->
-
- account.payment.process.start
- form
- payment_process_start_form
-
-
Process Payments
account.payment.process
account.payment
-
- form_action
- account.payment,-1
-
-
-
diff --git a/modules/account_payment/tests/scenario_account_payment.rst b/modules/account_payment/tests/scenario_account_payment.rst
index ce8a21b3c9..857b843cb1 100644
--- a/modules/account_payment/tests/scenario_account_payment.rst
+++ b/modules/account_payment/tests/scenario_account_payment.rst
@@ -105,9 +105,10 @@ Partially pay line::
True
>>> payment.state
'approved'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
+ >>> group, = process_payment.actions[0]
+ >>> group.payments == [payment]
+ True
>>> payment.state
'processing'
>>> line.reload()
@@ -158,8 +159,7 @@ Partially fail to pay the remaining::
Decimal('30.00')
>>> payment.click('submit')
>>> payment.click('approve')
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> line.reload()
>>> line.payment_amount
Decimal('0.00')
diff --git a/modules/account_payment/tests/scenario_account_payment_dunning.rst b/modules/account_payment/tests/scenario_account_payment_dunning.rst
index 94eb55e292..e5f803c9c7 100644
--- a/modules/account_payment/tests/scenario_account_payment_dunning.rst
+++ b/modules/account_payment/tests/scenario_account_payment_dunning.rst
@@ -99,8 +99,10 @@ Create no dunning::
Fail the payment::
>>> payment.click('submit')
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
+ >>> group, = process_payment.actions[0]
+ >>> group.payments == [payment]
+ True
>>> payment.click('fail')
>>> payment.state
'failed'
diff --git a/modules/account_payment/tests/scenario_account_payment_invoice.rst b/modules/account_payment/tests/scenario_account_payment_invoice.rst
index f7b2aba5d0..e809aa0c3a 100644
--- a/modules/account_payment/tests/scenario_account_payment_invoice.rst
+++ b/modules/account_payment/tests/scenario_account_payment_invoice.rst
@@ -3,6 +3,7 @@ Invoice Payment Scenario
========================
Imports::
+
>>> import datetime
>>> from decimal import Decimal
>>> from proteus import Model, Wizard
@@ -90,8 +91,7 @@ Check amount to pay::
Process the payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
Check amount to pay::
diff --git a/modules/account_payment/view/payment_form.xml b/modules/account_payment/view/payment_form.xml
index 62246e4952..158ca2a648 100644
--- a/modules/account_payment/view/payment_form.xml
+++ b/modules/account_payment/view/payment_form.xml
@@ -44,6 +44,7 @@ this repository contains the full copyright notices and license terms. -->
+
diff --git a/modules/account_payment/view/payment_list.xml b/modules/account_payment/view/payment_list.xml
index 3499305f51..4a40ebc20e 100644
--- a/modules/account_payment/view/payment_list.xml
+++ b/modules/account_payment/view/payment_list.xml
@@ -11,6 +11,7 @@ this repository contains the full copyright notices and license terms. -->
+
diff --git a/modules/account_payment/view/payment_process_start_form.xml b/modules/account_payment/view/payment_process_start_form.xml
deleted file mode 100644
index 0e6681f556..0000000000
--- a/modules/account_payment/view/payment_process_start_form.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
diff --git a/modules/account_payment_braintree/tests/scenario_account_payment_braintree.rst b/modules/account_payment_braintree/tests/scenario_account_payment_braintree.rst
index 3fdc18cd7e..36441af9a2 100644
--- a/modules/account_payment_braintree/tests/scenario_account_payment_braintree.rst
+++ b/modules/account_payment_braintree/tests/scenario_account_payment_braintree.rst
@@ -106,8 +106,7 @@ Checkout the payment::
Process the payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
>>> bool(payment.braintree_payment_settled)
@@ -177,8 +176,7 @@ Make payment with customer::
>>> payment.click('submit')
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -219,8 +217,7 @@ Create payment to settle::
... 'braintree_nonce': Nonces.Transactable,
... }, config.context)
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
diff --git a/modules/account_payment_clearing/tests/scenario_account_negative_payment_clearing.rst b/modules/account_payment_clearing/tests/scenario_account_negative_payment_clearing.rst
index e9336f8880..f1e6b4de7c 100644
--- a/modules/account_payment_clearing/tests/scenario_account_negative_payment_clearing.rst
+++ b/modules/account_payment_clearing/tests/scenario_account_negative_payment_clearing.rst
@@ -91,9 +91,7 @@ Pay the line::
>>> payment.click('approve')
>>> payment.state
'approved'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
diff --git a/modules/account_payment_clearing/tests/scenario_account_payment_clearing.rst b/modules/account_payment_clearing/tests/scenario_account_payment_clearing.rst
index f49ab80dc2..d77502b6e3 100644
--- a/modules/account_payment_clearing/tests/scenario_account_payment_clearing.rst
+++ b/modules/account_payment_clearing/tests/scenario_account_payment_clearing.rst
@@ -101,9 +101,7 @@ Partially pay the line::
>>> payment.click('approve')
>>> payment.state
'approved'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -158,9 +156,7 @@ Pay the line::
>>> payment.click('approve')
>>> payment.state
'approved'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -364,9 +360,7 @@ Pay the line::
Decimal('40.00')
>>> payment.click('submit')
>>> payment.click('approve')
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -406,9 +400,7 @@ Pay the line::
>>> payment.amount
Decimal('100.0')
>>> payment.click('submit')
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -448,9 +440,7 @@ Create a processing payment for the move::
>>> payment.click('approve')
>>> payment.state
'approved'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
diff --git a/modules/account_payment_clearing/tests/scenario_account_payment_clearing_invoice_amount_to_pay.rst b/modules/account_payment_clearing/tests/scenario_account_payment_clearing_invoice_amount_to_pay.rst
index c58c60c281..aa1766ead1 100644
--- a/modules/account_payment_clearing/tests/scenario_account_payment_clearing_invoice_amount_to_pay.rst
+++ b/modules/account_payment_clearing/tests/scenario_account_payment_clearing_invoice_amount_to_pay.rst
@@ -97,9 +97,7 @@ Create and pay an invoice without clearing::
>>> payment.click('submit')
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
@@ -130,9 +128,7 @@ Create an invoice and pay it::
>>> payment.click('submit')
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
- >>> payment.reload()
+ >>> process_payment = payment.click('process_wizard')
>>> succeed = payment.click('succeed_wizard')
>>> succeed.execute('succeed')
diff --git a/modules/account_payment_stripe/tests/scenario_account_payment_stripe.rst b/modules/account_payment_stripe/tests/scenario_account_payment_stripe.rst
index 9f7f41575e..9409652dd7 100644
--- a/modules/account_payment_stripe/tests/scenario_account_payment_stripe.rst
+++ b/modules/account_payment_stripe/tests/scenario_account_payment_stripe.rst
@@ -117,8 +117,7 @@ Checkout the payment::
Process the payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -155,8 +154,7 @@ Create failing payment::
... 'stripe_chargeable': True,
... 'stripe_payment_intent_id': None, # Remove intent from checkout
... }, config.context)
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'failed'
>>> payment.stripe_error_code
@@ -224,8 +222,7 @@ Make payment with customer::
>>> payment.click('submit')
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -290,8 +287,7 @@ Checkout the capture payment::
Process the capture payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
>>> bool(payment.stripe_captured)
diff --git a/modules/account_payment_stripe/tests/scenario_account_payment_stripe_dispute.rst b/modules/account_payment_stripe/tests/scenario_account_payment_stripe_dispute.rst
index 498b435647..7138ce53fe 100644
--- a/modules/account_payment_stripe/tests/scenario_account_payment_stripe_dispute.rst
+++ b/modules/account_payment_stripe/tests/scenario_account_payment_stripe_dispute.rst
@@ -100,8 +100,7 @@ Create fully disputed payment::
... 'stripe_payment_intent_id': None, # Remove intent from checkout
... }, config.context)
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -192,8 +191,7 @@ Create partial disputed payment::
... 'stripe_payment_intent_id': None, # Remove intent from checkout
... }, config.context)
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -262,8 +260,7 @@ Create won disputed payment::
... 'stripe_payment_intent_id': None, # Remove intent from checkout
... }, config.context)
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
diff --git a/modules/account_payment_stripe/tests/scenario_account_payment_stripe_intent.rst b/modules/account_payment_stripe/tests/scenario_account_payment_stripe_intent.rst
index feb014fd92..596b268726 100644
--- a/modules/account_payment_stripe/tests/scenario_account_payment_stripe_intent.rst
+++ b/modules/account_payment_stripe/tests/scenario_account_payment_stripe_intent.rst
@@ -117,8 +117,7 @@ Create submitted payment::
Process off-session the payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
@@ -164,8 +163,7 @@ Cancel payment intent::
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.state
'processing'
diff --git a/modules/sale_payment/tests/scenario_sale_payment.rst b/modules/sale_payment/tests/scenario_sale_payment.rst
index 9930f88a53..c9eff83f42 100644
--- a/modules/sale_payment/tests/scenario_sale_payment.rst
+++ b/modules/sale_payment/tests/scenario_sale_payment.rst
@@ -117,8 +117,7 @@ Attempt to cancel sale::
Revert sale to draft after failed payment::
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.click('fail')
>>> payment.state
'failed'
@@ -181,8 +180,7 @@ Create and process a final payment::
>>> payment.origin = sale
>>> payment.amount = Decimal('60.00')
>>> payment.click('submit')
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.click('succeed')
The sale should be processing::
diff --git a/modules/sale_payment/tests/scenario_sale_payment_no_clearing.rst b/modules/sale_payment/tests/scenario_sale_payment_no_clearing.rst
index a5e5af30ec..1c3d6345b0 100644
--- a/modules/sale_payment/tests/scenario_sale_payment_no_clearing.rst
+++ b/modules/sale_payment/tests/scenario_sale_payment_no_clearing.rst
@@ -85,8 +85,7 @@ Pay the sale using payment::
>>> payment.click('submit')
>>> payment.state
'submitted'
- >>> process_payment = Wizard('account.payment.process', [payment])
- >>> process_payment.execute('process')
+ >>> process_payment = payment.click('process_wizard')
>>> payment.click('succeed')
The sale should be processing::