Odoo18-Base/addons/payment/views/portal_templates.xml
2025-01-06 10:57:38 +07:00

393 lines
19 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Display of /payment/pay -->
<template id="payment.pay">
<!-- Parameters description:
- reference_prefix: The custom prefix to compute the full transaction reference.
- amount: The amount to pay.
- currency: The currency of the payment, as a `res.currency` record.
- partner_id: The id of the partner on behalf of whom the payment should be made.
- payment_methods_sudo: The compatible payment methods, as a sudoed `payment.method`
recordset.
- tokens_sudo: The available payment tokens, as a sudoed `payment.token` recordset.
- availability_report: The availability report of providers and payment methods.
- res_company: The company in which the payment if made (for the company logo).
- company_mismatch: Whether the user should make the payment in another company.
- expected_company: The record of the company that the user should switch to.
- partner_is_different: Whether the partner logged in is the one making the payment.
-->
<t t-call="portal.frontend_layout">
<t t-set="page_title" t-value="'Payment'"/>
<t t-set="additional_title"><t t-esc="page_title"/></t>
<div class="wrap">
<div class="container">
<!-- Portal breadcrumb -->
<t t-call="payment.portal_breadcrumb"/>
<!-- Payment page -->
<div class="row justify-content-center my-3">
<div class="col-lg-7">
<div t-if="not amount" class="alert alert-info">
There is nothing to pay.
</div>
<div t-elif="not currency" class="alert alert-warning">
<strong>Warning</strong> The currency is missing or incorrect.
</div>
<div t-elif="not partner_id" class="alert alert-warning">
<strong>Warning</strong> You must be logged in to pay.
</div>
<div t-elif="company_mismatch">
<t t-call="payment.company_mismatch_warning"/>
</div>
<t t-else="">
<div t-if="partner_is_different" class="alert alert-warning">
<strong>Warning</strong> Make sure you are logged in as the
correct partner before making this payment.
</div>
<div class="text-bg-light row row-cols-1 row-cols-md-2 mx-0 py-2
rounded"
>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'amount'"/>
<t t-set="label">Amount</t>
<t t-set="value" t-value="amount"/>
<t t-set="options"
t-value="{'widget': 'monetary', 'display_currency': currency}"
/>
</t>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'reference'"/>
<t t-set="label">Reference</t>
<t t-set="value" t-value="reference_prefix"/>
<t t-set="include_separator" t-value="True"/>
</t>
</div>
<div class="mt-4">
<t t-call="payment.form"/>
</div>
</t>
</div>
</div>
</div>
</div>
</t>
</template>
<template id="payment.company_mismatch_warning" name="Company Mismatch Warning">
<!-- Parameters description:
- expected_company: The record of the company that the user should switch to.
-->
<div class="row mr16">
<div class="alert alert-warning col-lg-12 ms-3 me-3" role="alert">
<p>
Please switch to company <t t-esc="expected_company.name"/> to make this
payment.
</p>
</div>
</div>
</template>
<!-- Display of /my/payment_methods -->
<template id="payment.payment_methods" name="Payment Methods">
<t t-call="portal.frontend_layout">
<t t-set="page_title" t-value="'Payment Methods'"/>
<t t-set="additional_title"><t t-esc="page_title"/></t>
<div class="wrap">
<div class="container">
<!-- Portal breadcrumb -->
<t t-call="payment.portal_breadcrumb"/>
<!-- Payment methods page -->
<div class="row justify-content-center">
<div class="col-lg-7">
<t t-call="payment.form"/>
</div>
</div>
</div>
</div>
</t>
</template>
<!-- Display of /payment/status -->
<template id="payment.payment_status" name="Payment Status">
<t t-call="portal.frontend_layout">
<t t-set="page_title" t-value="'Payment Status'"/>
<t t-set="additional_title"><t t-esc="page_title"/></t>
<div class="wrap">
<div class="container">
<!-- Portal breadcrumb -->
<t t-call="payment.portal_breadcrumb"/>
<!-- Payment status page -->
<div class="row justify-content-center my-3">
<div class="col-12 col-lg-8">
<div t-if="payment_not_found" class="text-center">
<p>Your payment is on its way!</p>
<p>
You should receive an email confirming your payment within a few
minutes.
</p>
<p>Don't hesitate to contact us if you don't receive it.</p>
</div>
<div t-else="" name="o_payment_status">
<t t-call="payment.state_header">
<t t-set="is_processing" t-value="True"/>
</t>
<div class="text-bg-light row row-cols-1 row-cols-md-2 mx-0 mb-3
py-2 rounded"
>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'amount'"/>
<t t-set="label">Amount</t>
<t t-set="value" t-value="tx.amount"/>
<t t-set="options"
t-value="{
'widget': 'monetary',
'display_currency': tx.currency_id,
}"
/>
</t>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'reference'"/>
<t t-set="label">Reference</t>
<t t-set="value" t-value="tx.reference"/>
<t t-set="include_separator" t-value="True"/>
</t>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
<!-- Display of /payment/confirmation -->
<template id="payment.confirm">
<!-- Parameters description:
- tx: The transaction to display.
-->
<t t-call="portal.frontend_layout">
<t t-set="page_title" t-value="'Payment Confirmation'"/>
<t t-set="additional_title"><t t-esc="page_title"/></t>
<t t-set="show_pm" t-value="tx.payment_method_code != 'unknown'"/>
<div class="wrap">
<div class="container">
<!-- Portal breadcrumb -->
<t t-call="payment.portal_breadcrumb"/>
<div class="row justify-content-center my-3">
<div class="col-12 col-lg-7">
<!-- Confirmation page -->
<div class="row">
<div class="col">
<t t-call="payment.state_header"/>
</div>
</div>
<div t-att-class="'text-bg-light row row-cols-1 mx-0 mb-3 py-2 rounded'
+ (' row-cols-md-4' if show_pm else ' row-cols-md-3')"
>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'amount'"/>
<t t-set="label">Amount</t>
<t t-set="value" t-value="tx.amount"/>
<t t-set="options"
t-value="{'widget': 'monetary', 'display_currency': tx.currency_id}"
/>
</t>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'reference'"/>
<t t-set="label">Reference</t>
<t t-set="value" t-value="tx.reference"/>
<t t-set="include_separator" t-value="True"/>
</t>
<t t-if="tx.payment_method_code != 'unknown'">
<t t-call="payment.summary_item">
<t t-set="name" t-value="'method'"/>
<t t-set="label">Payment Method</t>
<t t-set="value" t-value="tx.payment_method_id.name"/>
<t t-set="include_separator" t-value="True"/>
</t>
</t>
<t t-call="payment.summary_item">
<t t-set="name" t-value="'provider'"/>
<t t-set="label">Processed by</t>
<t t-set="value" t-value="tx.provider_id.sudo().name"/>
<t t-set="include_separator" t-value="True"/>
</t>
</div>
<div class="row">
<div class="col offset-md-3 ps-0">
<a role="button" class="btn btn-primary float-end" href="/my/home">
Go to my Account <i class="oi oi-arrow-right ms-2"/>
</a>
</div>
</div>
</div>
</div>
</div>
</div>
</t>
</template>
<!-- Breadcrumb for the portal -->
<template id="payment.portal_breadcrumb">
<!-- Parameters description:
- page_title: The title of the breadcrumb item.
-->
<div class="row">
<div class="col-md-6">
<ol class="breadcrumb px-0 mt16">
<li id="o_payment_portal_home" class="breadcrumb-item">
<a href="/my/home">
<i class="fa fa-home"
role="img"
title="Home"
aria-label="Home"/>
</a>
</li>
<li class="breadcrumb-item"><t t-esc="page_title"/></li>
</ol>
</div>
</div>
</template>
<template id="payment.summary_item">
<!-- Parameters description:
- name: The summary item name that is suffixed to `o_payment_summary_` to create the id.
- label: The label that is displayed.
- value: The value of the summary item.
- options: The widget options to set.
- include_separator: Whether the summary item should be preceded by a separator.
-->
<t t-set="options" t-value="options or {'widget': 'string'}"/>
<hr t-if="include_separator" class="d-md-none m-0 text-300 opacity-100"/>
<div t-att-class="'col my-3 text-break'
+ (' o_payment_summary_separator' if include_separator else '')"
>
<label t-attf-for="o_payment_summary_{{name}}"
t-out="label"
class="d-block small opacity-75"
/>
<span t-attf-id="o_payment_summary_{{name}}"
t-out="value"
t-options="options"
class="fs-5 fw-bold"
/>
</div>
</template>
<template id="payment.state_header">
<!-- Parameters description:
- tx: The transaction whose status must be displayed.
- is_processing: Whether the transaction is being processed.
-->
<t t-set="waiting_heading">
<p>Please wait...</p>
</t>
<t t-if="tx.state == 'draft'">
<t t-set="alert_style" t-value="'warning'"/>
<t t-if="is_processing" t-set="status_heading" t-value="waiting_heading"/>
<t t-set="status_message">
<p>Your payment has not been processed yet.</p>
</t>
</t>
<t t-elif="tx.state == 'pending'">
<t t-set="alert_style" t-value="'info'"/>
<t t-if="is_processing" t-set="status_heading" t-value="waiting_heading"/>
<t t-if="tx.operation == 'validation'" t-set="status_message">
<p>Saving your payment method.</p>
</t>
<t t-else="" t-set="status_message" t-value="tx.provider_id.sudo().pending_msg"/>
</t>
<t t-elif="tx.state == 'authorized'">
<t t-set="alert_style" t-value="'success'"/>
<t t-if="is_processing" t-set="status_heading" t-value="waiting_heading"/>
<t t-set="status_message" t-value="tx.provider_id.sudo().auth_msg"/>
</t>
<t t-elif="tx.state == 'done'">
<t t-set="alert_style" t-value="'success'"/>
<t t-if="not is_processing" t-set="status_heading">
<p>Thank you!</p>
</t>
<t t-if="tx.operation == 'validation'" t-set="status_message">
<p>Your payment method has been saved.</p>
</t>
<t t-else="" t-set="status_message" t-value="tx.provider_id.sudo().done_msg"/>
</t>
<t t-elif="tx.state == 'cancel'">
<t t-set="alert_style" t-value="'danger'"/>
<t t-if="tx.operation == 'validation'" t-set="status_message">
<p>The saving of your payment method has been canceled.</p>
</t>
<t t-else="" t-set="status_message" t-value="tx.provider_id.sudo().cancel_msg"/>
</t>
<t t-elif="tx.state == 'error'">
<t t-set="alert_style" t-value="'danger'"/>
<t t-if="tx.operation == 'validation'" t-set="status_message">
<p class="mb-0">An error occurred while saving your payment method.</p>
</t>
<t t-else="" t-set="status_message">
<p class="mb-0">An error occurred during the processing of your payment.</p>
</t>
</t>
<t t-if="is_html_empty(status_message)" t-set="status_message" t-value="''"/>
<t t-set="o_payment_status_alert_class"
t-value="'alert alert-'+ alert_style +' d-flex gap-3'"
/>
<div t-if="status_heading or status_message or tx.state_message"
name="o_payment_status_alert"
t-attf-class="{{o_payment_status_alert_class}}"
>
<t t-set="alert_icon"
t-value="'fa-cog fa-spin' if is_processing and alert_style != 'danger'
else 'fa-check' if alert_style == 'success'
else 'fa-info-circle' if alert_style == 'info'
else 'fa-exclamation-triangle'"
/>
<div id="o_payment_status_icon">
<i t-attf-class="fa {{alert_icon}}"/>
</div>
<div id="o_payment_status_message" class="w-100">
<h5 t-if="status_heading" t-out="status_heading" class="alert-heading mb-0"/>
<t t-if="status_message" t-out="status_message" class="mb-0"/>
<t t-if="tx.state_message" t-out="tx.state_message" class="mb-0"/>
</div>
<a t-if="is_processing"
t-att-href="tx.landing_route"
class="alert-link ms-auto text-nowrap"
>
Skip <i class="oi oi-arrow-right ms-1 small"/>
</a>
</div>
</template>
<!-- "Manage payment methods" card on /my -->
<template id="portal_my_home_payment" name="Payment Methods" customize_show="True" inherit_id="portal.portal_my_home" priority="60">
<xpath expr="//div[hasclass('o_portal_docs')]" position="before">
<t t-set="portal_client_category_enable" t-value="True"/>
</xpath>
<div id="portal_client_category" position="inside">
<t t-set="partner_sudo" t-value="request.env.user.partner_id"/>
<t t-set="providers_sudo"
t-value="request.env['payment.provider'].sudo()._get_compatible_providers(request.env.company.id, partner_sudo.id, 0., force_tokenization=True, is_validation=True)"/>
<t t-set="methods_allowing_tokenization"
t-value="request.env['payment.method'].sudo()._get_compatible_payment_methods(
providers_sudo.ids,
partner_sudo.id,
force_tokenization=True,
)"
/>
<t t-set="existing_tokens" t-value="partner_sudo.payment_token_ids + partner_sudo.commercial_partner_id.payment_token_ids"/>
<t t-if="methods_allowing_tokenization or existing_tokens" t-call="portal.portal_docs_entry">
<t t-set="icon" t-value="'/payment/static/img/payment-methods.svg'"/>
<t t-set="title">Payment methods</t>
<t t-set="text">Manage your payment methods</t>
<t t-set="url" t-value="'/my/payment_method'"/>
<t t-set="config_card" t-value="True"/>
</t>
</div>
</template>
</odoo>