- Improve warning message when user tries to create credit note - Hide 'Active' column in Taxes/Currencies and added default 'Active' filter in Taxes - Removed 'save this page...' under 'Account Follow-up Levels','Budget Management', 'Asset Management','Deferred Revenues Management' section in Accounting Settings - Fixed margin between Cash Rounding checkbox and it's link in Accounting Settings - Renamed action menu 'Confirm Payments' to 'Post Payments' for payments to make it consistent with it's form view - Hide payment acquirers config for non-adviser users and also restric editing access rights for non advisior and employee user (only data read access rights on payment acquirers) - Renamed Journal type from 'Sale' to 'Sales' and journals 'POS Sale Journal, Stock Journal, Cash Basis Tax Journal to Point of Sale Journal, Inventory Valuation Journal and Cash Basis Taxes Journal respectively - Renamed the stat button 'Entries' to 'Items' for account assets form view - Improved description and name of account_voucher module - Improved Menu typo, Purchase Receipts to Purchases Receipts - account_check_printing, hr_expense_check: made field storing check numbers character instead of integer, integer field for check numbers shows check numbers as amount (i.e., with thousand separator) on UI, which is wrong, hence replaced it with character type field and a constraint to allow only numbers to be stored in it. TaskID: 40157 Co-authored-by: Ravi Gohil <rgo@odoo.com> closes odoo/odoo#21982
472 lines
26 KiB
XML
472 lines
26 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<odoo>
|
|
<data>
|
|
|
|
<!-- Payment menu in settings -->
|
|
<menuitem
|
|
name='Payments'
|
|
id='root_payment_menu'
|
|
parent='account.menu_finance_configuration'
|
|
groups='account.group_account_manager'/>
|
|
|
|
<record id="acquirer_form" model="ir.ui.view">
|
|
<field name="name">payment.acquirer.form</field>
|
|
<field name="model">payment.acquirer</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Payment Acquirer">
|
|
<field name="environment" invisible='1'/>
|
|
<field name="fees_implemented" invisible='1'/>
|
|
<field name="token_implemented" invisible='1'/>
|
|
<field name="authorize_implemented" invisible="1"/>
|
|
<sheet>
|
|
<field name="module_id" invisible="1"/>
|
|
<field name="module_state" invisible="1"/>
|
|
<field name="inbound_payment_method_ids" invisible="1"/>
|
|
<div class="oe_button_box" name="button_box" attrs="{'invisible': ['&', ('module_id', '!=', False), ('module_state', '!=', 'installed')]}">
|
|
<!-- transfer referenced here due to view inheritance issue in current master (post-saas-16) -->
|
|
<button name="toggle_environment_value"
|
|
attrs="{'invisible': ['|', ('environment', '=', 'test'), ('provider', '=', 'transfer')]}"
|
|
class="oe_stat_button"
|
|
type="object" icon="fa-play">
|
|
<div class="o_stat_info o_field_widget">
|
|
<span class="text-success">Production</span>
|
|
<span class="o_stat_text">Environment</span>
|
|
</div>
|
|
</button>
|
|
<!-- transfer referenced here due to view inheritance issue in current master (post-saas-16) -->
|
|
<button name="toggle_environment_value"
|
|
attrs="{'invisible': ['|', ('environment', '=', 'prod'), ('provider', '=', 'transfer')]}"
|
|
class="oe_stat_button"
|
|
type="object" icon="fa-stop">
|
|
<div class="o_stat_info o_field_widget">
|
|
<span class="o_warning_text">Test</span>
|
|
<span class="o_stat_text">Environment</span>
|
|
</div>
|
|
</button>
|
|
<button name="toggle_website_published"
|
|
class="oe_stat_button"
|
|
type="object" icon="fa-globe">
|
|
<field name="website_published" widget="boolean_button"
|
|
options='{"terminology": {"string_true": "Published", "hover_false": "Publish"}}'/>
|
|
</button>
|
|
</div>
|
|
<field name="image" widget='image' class="oe_avatar" options='{"preview_image": "image_medium"}'/>
|
|
<div class="oe_title">
|
|
<h1><field name="name" placeholder="Name"/></h1>
|
|
</div>
|
|
<div attrs="{'invisible': ['|', ('module_state', '=', 'installed'), ('module_id', '=', False)]}">
|
|
<button type="object" class="btn btn-primary" name="button_immediate_install" string="Install"/>
|
|
<div class="o_payment_acquirer_desc">
|
|
<field name="description"/>
|
|
</div>
|
|
</div>
|
|
<group name="acquirer_base" col="2" attrs="{'invisible': ['&', ('module_id', '!=', False), ('module_state', '!=', 'installed')]}">
|
|
<group name="acquirer_left">
|
|
<field name="provider" groups="base.group_no_one"/>
|
|
<field name="company_id" groups="base.group_multi_company" options='{"no_open":True}'/>
|
|
</group>
|
|
</group>
|
|
<notebook attrs="{'invisible': ['&', ('module_id', '!=', False), ('module_state', '!=', 'installed')]}">
|
|
<page string="Credentials" name="acquirer_credentials">
|
|
<group name="acquirer">
|
|
</group>
|
|
</page>
|
|
<page string="Messages">
|
|
<group>
|
|
<field name="pre_msg" invisible="1"/>
|
|
<field name="post_msg"/>
|
|
<field name="pending_msg"/>
|
|
<field name="done_msg"/>
|
|
<field name="cancel_msg"/>
|
|
<field name="error_msg"/>
|
|
</group>
|
|
</page>
|
|
<page string="Configuration">
|
|
<group name="acquirer_config">
|
|
<field name="journal_id" context="{'default_type': 'bank'}"/>
|
|
<field name="capture_manually" attrs="{'invisible': [('authorize_implemented', '=', False)]}"/>
|
|
<field name="save_token" widget="radio" attrs="{'invisible': ['|', ('token_implemented', '=', False), ('payment_flow', '=', 's2s')]}"/>
|
|
<field name="fees_active" attrs="{'invisible': [('fees_implemented', '=', False)]}"/>
|
|
<field name="fees_dom_fixed" attrs="{'invisible': [('fees_active', '=', False)]}"/>
|
|
<field name="fees_dom_var" attrs="{'invisible': [('fees_active', '=', False)]}"/>
|
|
<field name="fees_int_fixed" attrs="{'invisible': [('fees_active', '=', False)]}"/>
|
|
<field name="fees_int_var" attrs="{'invisible': [('fees_active', '=', False)]}"/>
|
|
<field name="specific_countries"/>
|
|
<field name="qr_code" attrs="{'invisible': [('provider', '!=', 'transfer')]}"/>
|
|
<field name="country_ids" widget="many2many_tags" attrs="{'invisible': [('specific_countries', '=', False)]}"/>
|
|
<label for="view_template_id" groups="base.group_no_one"/>
|
|
<div groups="base.group_no_one">
|
|
<field name="view_template_id" nolabel="1"/>
|
|
<div>
|
|
This template renders the acquirer button with all necessary values.
|
|
It is rendered with qWeb with the following evaluation context:
|
|
<ul>
|
|
<li>tx_url: transaction URL to post the form</li>
|
|
<li>acquirer: payment.acquirer browse record</li>
|
|
<li>user: current user browse record</li>
|
|
<li>reference: the transaction reference number</li>
|
|
<li>currency: the transaction currency browse record</li>
|
|
<li>amount: the transaction amount, a float</li>
|
|
<li>partner: the buyer partner browse record, not necessarily set</li>
|
|
<li>partner_values: specific values about the buyer, for example coming from a shipping form</li>
|
|
<li>tx_values: transaction values</li>
|
|
<li>context: the current context dictionary</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<field name="registration_view_template_id" groups="base.group_no_one"/>
|
|
<field name="payment_icon_ids" widget="many2many_tags"/>
|
|
<field name="payment_flow" widget="radio" attrs="{'invisible': [('token_implemented', '=', False)]}"/>
|
|
</group>
|
|
</page>
|
|
</notebook>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
|
|
<!-- Acquirer Kanban View -->
|
|
<record id="acquirer_kanban" model="ir.ui.view">
|
|
<field name="name">payment.acquirer.kanban</field>
|
|
<field name="model">payment.acquirer</field>
|
|
<field name="arch" type="xml">
|
|
<kanban quick_create="false" create="true" class="o_kanban_payment_acquirer">
|
|
<field name="id"/>
|
|
<field name="name"/>
|
|
<field name="description"/>
|
|
<field name="environment"/>
|
|
<field name="provider"/>
|
|
<field name="module_id"/>
|
|
<field name="module_state"/>
|
|
<field name="website_published"/>
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<t t-set="installed" t-value="!record.module_id.value || (record.module_id.value && record.module_state.raw_value === 'installed')"/>
|
|
<div t-attf-class="oe_kanban_global_click #{installed and record.website_published.raw_value ? 'oe_kanban_color_5' : 'oe_kanban_color_white'}">
|
|
<div class="o_kanban_image">
|
|
<img type="open" t-att-src="kanban_image('payment.acquirer', 'image_small', record.id.raw_value)" alt="Acquirer"/>
|
|
</div>
|
|
<div class="o_payment_acquirer_desc">
|
|
<h3 class="mt4"><t t-esc="record.name.value"/></h3>
|
|
<t t-if="record.description.raw_value" t-raw="record.description.raw_value"/>
|
|
</div>
|
|
<div class="o_payment_acquirer_bottom">
|
|
<t t-if="installed">
|
|
<field name="environment" widget="label_selection" options="{'classes': {'test': 'warning', 'production': 'success'}}"/>
|
|
</t>
|
|
<button t-if="!installed" type="object" class="btn btn-secondary float-right" name="button_immediate_install">Install</button>
|
|
<button t-if="installed and !record.website_published.raw_value" type="edit" class="btn btn-primary float-right">Activate</button>
|
|
<button t-if="installed and record.website_published.raw_value" type="edit" class="btn btn-primary float-right">Configure</button>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="acquirer_list" model="ir.ui.view">
|
|
<field name="name">payment.acquirer.list</field>
|
|
<field name="model">payment.acquirer</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Payment Acquirers">
|
|
<field name="sequence" widget="handle"/>
|
|
<field name="name"/>
|
|
<field name="provider"/>
|
|
<field name="website_published"/>
|
|
<field name="environment"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="acquirer_search" model="ir.ui.view">
|
|
<field name="name">payment.acquirer.search</field>
|
|
<field name="model">payment.acquirer</field>
|
|
<field name="arch" type="xml">
|
|
<search>
|
|
<field name="name"/>
|
|
<field name="provider"/>
|
|
<group expand="0" string="Group By">
|
|
<filter string="Provider" name="provider" domain="[]" context="{'group_by': 'provider'}"/>
|
|
<filter string="Environment" name="environment" domain="[]" context="{'group_by': 'environment'}"/>
|
|
</group>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_payment_acquirer" model="ir.actions.act_window">
|
|
<field name="name">Payment Acquirers</field>
|
|
<field name="res_model">payment.acquirer</field>
|
|
<field name='view_type'>form</field>
|
|
<field name='view_mode'>kanban,tree,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create a new payment acquirer
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
action='action_payment_acquirer'
|
|
id='payment_acquirer_menu'
|
|
parent='root_payment_menu'
|
|
sequence='10' />
|
|
|
|
<!-- Payment transactions -->
|
|
<record id="transaction_form" model="ir.ui.view">
|
|
<field name="name">payment.transaction.form</field>
|
|
<field name="model">payment.transaction</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Payment Transactions" create="false" edit="false">
|
|
<header>
|
|
<button type="object" name="action_capture" states="authorized" string="Capture Transaction" class="oe_highlight"/>
|
|
<button type="object" name="action_void" states="authorized" string="Void Transaction"
|
|
confirm="Are you sure you want to void the authorized transaction? This action can't be undone."/>
|
|
<field name="state" widget="statusbar"/>
|
|
</header>
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button name="action_view_invoices" type="object"
|
|
class="oe_stat_button" icon="fa-money"
|
|
attrs="{'invisible': [('invoice_ids_nbr', '=', 0)]}">
|
|
<field name="invoice_ids_nbr" widget="statinfo" string="Invoice(s)"/>
|
|
</button>
|
|
</div>
|
|
<group>
|
|
<group>
|
|
<field name="reference"/>
|
|
<field name="payment_id"/>
|
|
<label for="amount"/>
|
|
<div class="o_row">
|
|
<field name="amount"/>
|
|
<field name="currency_id" options="{'no_open': True, 'no_create': True}"/>
|
|
</div>
|
|
<field name="fees" readonly="1"/>
|
|
<label for="partner_id"/>
|
|
<div>
|
|
<field name="partner_id" context="{'show_address': 1}" options="{'always_reload': True}"/>
|
|
<div name="partner_details" class="o_address_format" attrs="{'invisible': [('partner_id', '!=', False)]}">
|
|
<field name="partner_name" placeholder="Name" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/>
|
|
<field name="partner_address" placeholder="Address" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/>
|
|
<field name="partner_city" placeholder="City" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_city"/>
|
|
<field name="partner_zip" placeholder="ZIP" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_zip"/>
|
|
<field name="partner_country_id" placeholder="Country" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_country"/>
|
|
<field name="partner_lang" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/>
|
|
<field name="partner_email" placeholder="E-mail" attrs="{'readonly': [('partner_id', '!=', False)]}" class="o_address_street"/>
|
|
</div>
|
|
</div>
|
|
</group>
|
|
<group>
|
|
<field name="acquirer_id"/>
|
|
<field name="provider" invisible="1"/>
|
|
<field name="payment_token_id" options="{'no_create': True}"/>
|
|
<field name="acquirer_reference" readonly="1"/>
|
|
<field name="date"/>
|
|
</group>
|
|
</group>
|
|
<group string="Message">
|
|
<field name="state_message" nolabel="1"/>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="transaction_list" model="ir.ui.view">
|
|
<field name="name">payment.transaction.list</field>
|
|
<field name="model">payment.transaction</field>
|
|
<field name="arch" type="xml">
|
|
<tree string="Payment Transactions" create="false">
|
|
<field name="reference"/>
|
|
<field name="create_date"/>
|
|
<field name="acquirer_id"/>
|
|
<field name="partner_id"/>
|
|
<field name="partner_name"/>
|
|
<field name="amount"/>
|
|
<field name="fees"/>
|
|
<field name="state"/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="transaction_view_kanban" model="ir.ui.view">
|
|
<field name="name">payment.transaction.kanban</field>
|
|
<field name="model">payment.transaction</field>
|
|
<field name="arch" type="xml">
|
|
<kanban class="o_kanban_mobile" create="false">
|
|
<templates>
|
|
<t t-name="kanban-box">
|
|
<div t-attf-class="oe_kanban_content oe_kanban_global_click">
|
|
<div class="row">
|
|
<div class="col-6">
|
|
<strong><field name="reference"/></strong>
|
|
</div>
|
|
<div class="col-6">
|
|
<span><field name="partner_name"/></span>
|
|
</div>
|
|
<div class="col-6">
|
|
<span class="float-right">
|
|
<field name="amount" widget="monetary"/>
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</t>
|
|
</templates>
|
|
</kanban>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="transaction" model="ir.ui.view">
|
|
<field name="name">payment.transaction.search</field>
|
|
<field name="model">payment.transaction</field>
|
|
<field name="arch" type="xml">
|
|
<search>
|
|
<field name="reference"/>
|
|
<field name="acquirer_id"/>
|
|
<field name="partner_id"/>
|
|
<field name="partner_name"/>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_payment_transaction" model="ir.actions.act_window">
|
|
<field name="name">Payment Transactions</field>
|
|
<field name="res_model">payment.transaction</field>
|
|
<field name='view_type'>form</field>
|
|
<field name='view_mode'>tree,kanban,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create a new payment transaction
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
action='action_payment_transaction'
|
|
id='payment_transaction_menu'
|
|
parent='root_payment_menu'
|
|
groups="base.group_no_one"
|
|
sequence='20' />
|
|
|
|
<!-- Payment Tokens -->
|
|
<record model='ir.ui.view' id='payment_token_tree_view'>
|
|
<field name='name'>payment.token.tree</field>
|
|
<field name='model'>payment.token</field>
|
|
<field name='arch' type='xml'>
|
|
<tree string='Payment Tokens'>
|
|
<field name="name"/>
|
|
<field name="active"/>
|
|
<field name='partner_id' />
|
|
<field name='acquirer_id' readonly='1'/>
|
|
<field name='acquirer_ref' readonly='1'/>
|
|
</tree>
|
|
</field>
|
|
</record>
|
|
|
|
<record id='payment_token_view_search' model='ir.ui.view'>
|
|
<field name='name'>payment.token.search</field>
|
|
<field name='model'>payment.token</field>
|
|
<field name='arch' type='xml'>
|
|
<search string='Payment Tokens'>
|
|
<field name='partner_id'/>
|
|
</search>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_payment_tx_ids" model="ir.actions.act_window">
|
|
<field name="name">Payment Transactions</field>
|
|
<field name="res_model">payment.transaction</field>
|
|
<field name="view_type">form</field>
|
|
<field name="view_mode">tree,form</field>
|
|
<field name="domain">[('payment_token_id','=', active_id)]</field>
|
|
<field name="context">{'create': False}</field>
|
|
</record>
|
|
|
|
<record model='ir.ui.view' id='payment_token_form_view'>
|
|
<field name='name'>payment.token.form</field>
|
|
<field name='model'>payment.token</field>
|
|
<field name='arch' type='xml'>
|
|
<form string='Payment Tokens' create='false' editable='bottom'>
|
|
<sheet>
|
|
<div class="oe_button_box" name="button_box">
|
|
<button class="oe_stat_button" name="%(action_payment_tx_ids)d"
|
|
type="action" icon="fa-money" string="Payments">
|
|
</button>
|
|
</div>
|
|
<group>
|
|
<field name="name"/>
|
|
<field name='partner_id' />
|
|
</group>
|
|
<group>
|
|
<field name="active"/>
|
|
<field name='acquirer_id'/>
|
|
<field name='acquirer_ref'/>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record model='ir.actions.act_window' id='payment_token_action'>
|
|
<field name='name'>Saved Payment Data</field>
|
|
<field name='res_model'>payment.token</field>
|
|
<field name='view_type'>form</field>
|
|
<field name='view_mode'>tree,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create a saved payment data
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
action='payment_token_action'
|
|
id='payment_token_menu'
|
|
parent='root_payment_menu'
|
|
groups='base.group_no_one'/>
|
|
|
|
<!-- Payment icons -->
|
|
<record model="ir.ui.view" id="payment_icon_form_view">
|
|
<field name="name">payment.icon.form</field>
|
|
<field name="model">payment.icon</field>
|
|
<field name="arch" type="xml">
|
|
<form string="Payment Icon">
|
|
<sheet>
|
|
<field name="image" widget="image" class="oe_avatar"/>
|
|
<div class="oe_title">
|
|
<h1><field name="name" placeholder="Name"/></h1>
|
|
</div>
|
|
<group>
|
|
<notebook>
|
|
<page string="Acquirers list">
|
|
<field nolabel="1" name="acquirer_ids"/>
|
|
</page>
|
|
</notebook>
|
|
</group>
|
|
</sheet>
|
|
</form>
|
|
</field>
|
|
</record>
|
|
|
|
<record id="action_payment_icon" model="ir.actions.act_window">
|
|
<field name="name">Payment Icons</field>
|
|
<field name="res_model">payment.icon</field>
|
|
<field name="view_type">form</field>
|
|
<field name="view_mode">tree,form</field>
|
|
<field name="help" type="html">
|
|
<p class="o_view_nocontent_smiling_face">
|
|
Create a payment icon
|
|
</p>
|
|
</field>
|
|
</record>
|
|
|
|
<menuitem
|
|
action="action_payment_icon"
|
|
id="payment_icon_menu"
|
|
parent="root_payment_menu"
|
|
groups="base.group_no_one"/>
|
|
</data>
|
|
</odoo>
|