From c375b8f534cf84b52e47379f9d188074e0aaeec6 Mon Sep 17 00:00:00 2001 From: "Anita (anko)" Date: Tue, 10 Jan 2023 11:48:44 +0100 Subject: [PATCH] [IMP] payment(_demo): support express checkout This will allow users to test the "express checkout" feature in eCommerce without requiring to setup a real payment provider. task-3047772 closes odoo/odoo#113644 Signed-off-by: Valentin Chevalier --- .../views/express_checkout_templates.xml | 2 +- .../data/payment_provider_data.xml | 2 + .../payment_demo/models/payment_provider.py | 1 + .../static/src/js/express_checkout_form.js | 81 +++++++ .../static/src/js/payment_demo_mixin.js | 32 +++ .../static/src/js/payment_form.js | 18 +- .../views/payment_demo_templates.xml | 227 +++++++++++++++--- .../views/payment_provider_views.xml | 2 +- addons/website_sale/controllers/main.py | 9 +- 9 files changed, 319 insertions(+), 55 deletions(-) create mode 100644 addons/payment_demo/static/src/js/express_checkout_form.js create mode 100644 addons/payment_demo/static/src/js/payment_demo_mixin.js diff --git a/addons/payment/views/express_checkout_templates.xml b/addons/payment/views/express_checkout_templates.xml index bcb2da3498e..8c11a5120a8 100644 --- a/addons/payment/views/express_checkout_templates.xml +++ b/addons/payment/views/express_checkout_templates.xml @@ -36,7 +36,7 @@ t-att-data-express-checkout-route="express_checkout_route" t-att-data-landing-route="landing_route" > - + diff --git a/addons/payment_demo/data/payment_provider_data.xml b/addons/payment_demo/data/payment_provider_data.xml index 4978785aed5..25acb7f9e04 100644 --- a/addons/payment_demo/data/payment_provider_data.xml +++ b/addons/payment_demo/data/payment_provider_data.xml @@ -5,7 +5,9 @@ demo + True + True { + window.location = '/payment/status'; + }).guardedCatch(error => { + error.event.preventDefault(); + this._displayErrorDialog(_t("Payment processing failed"), error.message.data.message); + this._enableButton?.(); // This method doesn't exists in Express Checkout form. + }); + }, + +}; diff --git a/addons/payment_demo/static/src/js/payment_form.js b/addons/payment_demo/static/src/js/payment_form.js index d252a9fc947..09f06ba0e77 100644 --- a/addons/payment_demo/static/src/js/payment_form.js +++ b/addons/payment_demo/static/src/js/payment_form.js @@ -1,8 +1,7 @@ /** @odoo-module **/ -import { _t } from "@web/core/l10n/translation"; - import paymentForm from '@payment/js/payment_form'; +import paymentDemoMixin from '@payment_demo/js/payment_demo_mixin'; paymentForm.include({ @@ -48,20 +47,7 @@ paymentForm.include({ this._super(...arguments); return; } - - const customerInput = document.getElementById('customer_input').value; - const simulatedPaymentState = document.getElementById('simulated_payment_state').value; - this.rpc('/payment/demo/simulate_payment', { - 'reference': processingValues.reference, - 'payment_details': customerInput, - 'simulated_state': simulatedPaymentState, - }).then(() => { - window.location = '/payment/status'; - }).guardedCatch(error => { - error.event.preventDefault(); - this._displayErrorDialog(_t("Payment processing failed"), error.message.data.message); - this._enableButton(); // The button has been disabled before initiating the flow. - }); + paymentDemoMixin.processDemoPayment(processingValues); }, }); diff --git a/addons/payment_demo/views/payment_demo_templates.xml b/addons/payment_demo/views/payment_demo_templates.xml index eb2bbd0ab7a..017359bc42a 100644 --- a/addons/payment_demo/views/payment_demo_templates.xml +++ b/addons/payment_demo/views/payment_demo_templates.xml @@ -3,39 +3,7 @@ @@ -58,4 +26,197 @@ + + + + + + diff --git a/addons/payment_stripe/views/payment_provider_views.xml b/addons/payment_stripe/views/payment_provider_views.xml index a187723581a..ec83165941b 100644 --- a/addons/payment_stripe/views/payment_provider_views.xml +++ b/addons/payment_stripe/views/payment_provider_views.xml @@ -47,7 +47,7 @@ type="object" name="action_stripe_verify_apple_pay_domain" class="btn btn-primary" - invisible="not allow_express_checkout"/> + invisible="not allow_express_checkout or code != 'stripe'"/> diff --git a/addons/website_sale/controllers/main.py b/addons/website_sale/controllers/main.py index 4c4d32e009d..86051e6f818 100644 --- a/addons/website_sale/controllers/main.py +++ b/addons/website_sale/controllers/main.py @@ -1312,7 +1312,8 @@ class WebsiteSale(payment_portal.PaymentPortal): # assigned to ensure the right behavior from `shop_payment_confirmation()`. request.session['sale_last_order_id'] = order_sudo.id - if shipping_address and shipping_option: + if shipping_address: + #in order to not override shippig address, it's checked separately from shipping option self._include_country_and_state_in_address(shipping_address) if order_sudo.partner_shipping_id.name.endswith(order_sudo.name): @@ -1338,7 +1339,8 @@ class WebsiteSale(payment_portal.PaymentPortal): shipping_address, type='delivery', parent_id=order_sudo.partner_id.id ) # Process the delivery carrier - order_sudo._check_carrier_quotation(force_carrier_id=int(shipping_option['id'])) + if shipping_option: + order_sudo._check_carrier_quotation(force_carrier_id=int(shipping_option['id'])) return order_sudo.partner_id.id @@ -1373,7 +1375,7 @@ class WebsiteSale(payment_portal.PaymentPortal): ('code', '=', address.pop('country')), ], limit=1) state = request.env["res.country.state"].search([ - ('code', '=', address.pop('state')), + ('code', '=', address.pop('state', '')), ], limit=1) address.update(country_id=country, state_id=state) @@ -1538,7 +1540,6 @@ class WebsiteSale(payment_portal.PaymentPortal): # ------------------------------------------------------ def _get_express_shop_payment_values(self, order, **kwargs): - request.session['sale_last_order_id'] = order.id payment_form_values = sale_portal.CustomerPortal._get_payment_values( self, order, website_id=request.website.id, is_express_checkout=True )