Files
enterprise-addons/account_accountant/views/bank_rec_widget_views.xml
T

554 lines
33 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_bank_statement_form_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.form.bank_rec_widget</field>
<field name="model">account.bank.statement</field>
<field name="priority">10</field>
<field name="arch" type="xml">
<form string="Bank Statement">
<div class="alert alert-warning text-center" role="alert" invisible="is_valid and is_complete and (not context.get('at_creation') or not journal_has_invalid_statements)">
<div invisible="is_valid">The starting balance doesn't match the ending balance of the previous statement, or an earlier statement is missing.</div>
<div invisible="is_complete">The running balance (<field name="balance_end"/>) doesn't match the specified ending balance.</div>
<div invisible="not context.get('at_creation') or not journal_has_invalid_statements">
There are one or more <a type="object" name="action_open_journal_invalid_statements" string="invalid statement(s)"/>
</div>
</div>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_open_bank_reconcile_widget" type="object"
class="oe_stat_button" invisible="not line_ids">
<field name="line_ids" string="Transactions" widget="statinfo"/>
</button>
</div>
<group>
<field name="create_date" invisible="1"/>
<field name="is_valid" invisible="1"/>
<field name="is_complete" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="journal_id" invisible="1"/>
<group>
<field name="name" required="1" />
<field name="date"/>
</group>
<group>
<field name="balance_start"/>
<field name="balance_end_real"/>
</group>
</group>
<notebook>
<page string="Statement Lines">
<field name="line_ids" context="{'default_journal_id': journal_id}">
<list editable="bottom">
<field name="date"/>
<field name="payment_ref" required="1"/>
<field name="journal_id" column_invisible="1"/>
<field name="account_number" optional="hide"/>
<field name="foreign_currency_id" optional="hide"/>
<field name="amount_currency" optional="hide"/>
<field name="amount"/>
</list>
</field>
</page>
</notebook>
</sheet>
<div class="o_attachment_preview"/>
<chatter/>
</form>
</field>
</record>
<record id="view_bank_create_statement_form_bank_rec_widget" model="ir.ui.view">
<field name="name">account.create.bank.statement.form.bank_rec_widget</field>
<field name="model">account.bank.statement</field>
<field name="arch" type="xml">
<form string="Bank Statement">
<div class="alert alert-warning text-center" role="alert" invisible="is_valid and is_complete and (not context.get('at_creation') or not journal_has_invalid_statements)">
<div invisible="is_valid">The starting balance doesn't match the ending balance of the previous statement, or an earlier statement is missing.</div>
<div invisible="is_complete">The running balance (<field name="balance_end"/>) doesn't match the specified ending balance.</div>
<div invisible="not context.get('at_creation') or not journal_has_invalid_statements">
There are one or more <a type="object" name="action_open_journal_invalid_statements" string="invalid statement(s)"/>
</div>
</div>
<sheet>
<div class="oe_button_box" name="button_box">
<button name="action_open_bank_reconcile_widget" type="object" class="oe_stat_button" invisible="not line_ids">
<field name="line_ids" string="Transactions" widget="statinfo" />
</button>
</div>
<group>
<field name="name" required="1" />
<field name="balance_start"/>
<field name="balance_end_real"/>
<field name="attachment_ids" widget="many2many_binary"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_bank_statement_form_bank_rec_widget" model="ir.actions.act_window">
<!-- Binding removed since the same can be achieved with multi-edit -->
<field name="name">Create Statement</field>
<field name="res_model">account.bank.statement</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_bank_create_statement_form_bank_rec_widget"/>
<field name="target">new</field>
<field name="context">{'dialog_size': 'medium', 'show_running_balance_latest': True, 'at_creation': True}</field>
</record>
<!-- Search view of the reconcile button -->
<record id="view_account_move_line_search_bank_rec_widget" model="ir.ui.view">
<field name="name">account.move.line.search.bank_rec_widget</field>
<field name="model">account.move.line</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<search>
<field name="name"
string="Journal Item"
filter_domain="['|', '|', '|', '|', '|', ('name', 'ilike', self), ('ref', 'ilike', self), ('partner_id', 'ilike', self), ('amount_residual', 'ilike', self), ('amount_residual_currency', 'ilike', self), ('discount_amount_currency', 'ilike', self)]"/>
<field name="invoice_date"/>
<field name="date"/>
<field name="account_id"/>
<field name="partner_id"/>
<field name="journal_id"/>
<field name="currency_id" groups="base.group_multi_currency"/>
<field name="move_id"
string="Journal Entry"
filter_domain="['|', ('move_id.name', 'ilike', self), ('move_id.ref', 'ilike', self)]"/>
<separator/>
<filter name="amount_received" string="Incoming" domain="[('balance', '>', 0.0)]"/>
<filter name="amount_paid" string="Outgoing" domain="[('balance', '&lt;', 0.0)]"/>
<separator/>
<filter name="posted" string="Posted" domain="[('parent_state', '=', 'posted')]"/>
<filter name="draft" string="Draft" domain="[('parent_state', '=', 'draft')]"/>
<separator name="inject_after"/>
<filter name="date" string="Date" date="date"/>
<filter name="invoice_date" string="Invoice Date" date="invoice_date"/>
</search>
</field>
</record>
<!-- Search view on aml to be injected inside the form (view_bank_rec_widget_form) -->
<record id="view_bank_statement_line_search_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.line.search.bank_rec_widget</field>
<field name="model">account.bank.statement.line</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<search>
<field name="name"
string="Transaction"
filter_domain="['|', '|', '|', '|', '|', '|', ('payment_ref', 'ilike', self), ('narration', 'ilike', self), ('partner_id', 'ilike', self), ('partner_name', 'ilike', self), ('partner_bank_id', 'ilike', self), ('account_number', 'ilike', self), ('amount', 'ilike', self)]"/>
<field name="id" invisible="1"/>
<field name="payment_ref"/>
<field name="date"/>
<field name="statement_id"/>
<field name="partner_id"/>
<field name="journal_id"
domain="[('type', 'in', ('bank', 'cash'))]"
invisible="context.get('default_journal_id')"/>
<field name="narration" string="Notes"/>
<field name="transaction_type"/>
<field name="amount"/>
<field name="is_reconciled"/>
<field name="move_id"
string="Journal Entry"
filter_domain="['|', ('move_id.name', 'ilike', self), ('move_id.ref', 'ilike', self)]"/>
<field name="statement_line_id" string="Statement Line"/>
<field name="activity_ids"/>
<separator/>
<filter name="deposits" string="Deposits" domain="[('amount', '>', 0.0)]"/>
<filter name="payments" string="Payments" domain="[('amount', '&lt;', 0.0)]"/>
<separator/>
<filter name="to_check" string="To Review" domain="[('checked', '=', False)]"/>
<separator/>
<filter name="no_statement" string="No statement" domain="[('statement_id', '=', False)]"/>
<filter name="invalid_statement" string="Invalid statements"
domain="[('statement_id', '!=', False), '|',('statement_complete', '=', False), ('statement_valid', '=', False)]"/>
<separator/>
<filter name="matched" string="Matched" domain="[('is_reconciled', '=', True)]"/>
<filter name="not_matched" string="Not Matched"
domain="[('is_reconciled', '=', False), ('checked', '=', True)]"/>
<filter name="to_check" string="To Check" domain="[('checked', '=', False)]"/>
<filter name="with_activities" string="With Activities" domain="[('activity_ids', '!=', False)]"/>
<separator/>
<filter name="date" string="Date" date="date"/>
<separator/>
<filter name="statement_group" string="Statement" context="{'group_by': 'statement_id'}"/>
<filter name="journal_group" string="Journal" context="{'group_by': 'journal_id'}"/>
<filter name="date_group" string="Date" context="{'group_by': 'date'}"/>
<filter name="invoice_date_group" string="Invoice Date" domain="[]" context="{'group_by': 'invoice_date'}"/>
</search>
</field>
</record>
<!-- Kanban view on statement line injected inside the form (view_bank_rec_widget) -->
<record id="view_bank_statement_line_kanban_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.line.kanban.bank_rec_widget</field>
<field name="model">account.bank.statement.line</field>
<field name="arch" type="xml">
<kanban js_class="bank_rec_widget_kanban"
on_create="quick_create"
quick_create_view="account_accountant.view_bank_statement_line_quick_create_form_bank_rec_widget">
<field name="id"/>
<field name="state"/>
<field name="statement_complete"/>
<field name="statement_valid"/>
<field name="statement_balance_end_real"/>
<field name="statement_name"/>
<field name="journal_id"/>
<field name="statement_id"/>
<field name="is_reconciled"/>
<field name="checked"/>
<field name="currency_id"/>
<field name="partner_id"/>
<field name="amount"/>
<field name="amount_currency"/>
<field name="date"/>
<field name="payment_ref"/>
<field name="move_id"/>
<field name="line_ids"/>
<field name="account_number"/>
<field name="activity_ids"/>
<field name="company_id"/>
<field name="partner_name"/>
<field name="transaction_details"/>
<field name="foreign_currency_id"/>
<field name="bank_statement_attachment_ids"/>
<templates>
<!-- We are overriding the whole kanban record element, but we still need to load the template
card. Look at the bank_reconciliation components to work on the view. -->
<t t-name="card"/>
</templates>
</kanban>
</field>
</record>
<record id="view_bank_statement_line_tree_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.line.list.bank_rec_widget</field>
<field name="model">account.bank.statement.line</field>
<field name="arch" type="xml">
<list editable="top"
multi_edit="1"
js_class="bank_rec_list"
decoration-muted="state == 'draft'"
default_order="internal_index desc">
<!--Invisible fields-->
<field name="statement_complete" column_invisible="True"/>
<field name="statement_valid" column_invisible="True"/>
<field name="is_reconciled" column_invisible="True"/>
<field name="checked" column_invisible="True"/>
<field name="country_code" column_invisible="True"/>
<field name="currency_id" column_invisible="True"/>
<field name="company_id" column_invisible="True"/>
<!--Visible fields-->
<field name="sequence" widget="handle" column_invisible="True"/> <!--Until we add the JS class-->
<field name="date" readonly="is_reconciled and amount != 0"
options="{'warn_future': true}"/>
<field name="move_id" optional="hidden" required="0"/>
<field name="payment_ref" required="1" readonly="is_reconciled and amount != 0"/>
<field name="partner_id" readonly="is_reconciled and amount != 0"/>
<field name="account_number" optional="hidden"/>
<field name="narration"
string="Notes"
readonly="is_reconciled and amount != 0"
optional="hidden"/>
<field name="ref" readonly="is_reconciled and amount != 0" optional="hidden"/>
<field name="transaction_type" optional="hidden"/>
<field name="foreign_currency_id"
optional="hidden"
groups="base.group_multi_currency"
domain="[('id', '!=', currency_id)]"
options="{'no_open': True, 'no_create': True}"
readonly="is_reconciled and amount != 0"/>
<field name="amount_currency"
optional="hidden"
groups="base.group_multi_currency"
invisible="not foreign_currency_id"
readonly="is_reconciled and amount != 0"/>
<field name="amount" readonly="is_reconciled and amount != 0" />
<field name="journal_id"
domain="[('type', 'in', ['bank','cash'])]"
column_invisible="bool(context.get('default_journal_id'))"
readonly="(statement_id or is_reconciled) and amount != 0"/>
<field name="running_balance" class="oe_read_only"/>
<field name="statement_id"
optional="show"
options="{'no_quick_create': True}"
domain="['|',('journal_id', '=', journal_id),('journal_id', '=', False)]"
context="{
'default_journal_id':journal_id,
'form_view_ref': 'account_accountant.view_bank_statement_form_bank_rec_widget',
'st_line_id':id,
}"
decoration-danger="statement_complete == False or statement_valid == False"
widget="bank_rec_list_many2one_multi_id"
readonly="not id"/>
<field name="state"
optional="hide"
widget="badge"
decoration-info="state == 'draft'"
decoration-success="state == 'posted'"/>
</list>
</field>
</record>
<!-- Form view for adding statement lines on the fly in a popup-->
<record id="view_bank_statement_line_form_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.line.form.bank_rec_widget</field>
<field name="model">account.bank.statement.line</field>
<field name="arch" type="xml">
<form string="New Transaction">
<header>
<button name="action_button_draft" type="object" class="btn btn-primary" string="Reset to Draft" invisible="state == 'draft'"/>
</header>
<field name="state" invisible="1"/>
<field name="statement_complete" invisible="1"/>
<field name="statement_valid" invisible="1"/>
<field name="is_reconciled" invisible="1"/>
<field name="suitable_journal_ids" invisible="1"/>
<field name="currency_id" invisible="1"/>
<field name="company_id" invisible="1"/>
<sheet>
<group>
<group>
<field name="date" readonly="is_reconciled and amount != 0"/>
<field name="payment_ref"
required="1"
readonly="is_reconciled and amount != 0"/>
<field name="partner_id"
readonly="is_reconciled and amount != 0"/>
</group>
<group>
<field name="amount" readonly="is_reconciled and amount != 0"/>
<field name="foreign_currency_id"
groups="base.group_multi_currency"
domain="[('id', '!=', currency_id)]"
options="{'no_open': True, 'no_create': True}"
readonly="is_reconciled and amount != 0"/>
<field name="amount_currency"
groups="base.group_multi_currency"
invisible="not foreign_currency_id"
readonly="is_reconciled and amount != 0"/>
<field name="journal_id"
domain="[('type', 'in', ['bank', 'cash'])]"
readonly="context.get('default_journal_id') or (is_reconciled and amount != 0)"/>
</group>
</group>
<footer>
<button string="Save &amp; Close" type="object"
name="action_save_close" class="btn btn-primary"
data-hotkey="q"/>
<button string="Save &amp; New" type="object"
name="action_save_new" class="btn btn-primary"
data-hotkey="n"/>
<button string="Cancel" class="btn-secondary"
special="cancel" data-hotkey="x"/>
</footer>
</sheet>
</form>
</field>
</record>
<!-- Form view for quick creating statement lines -->
<record id="view_bank_statement_line_quick_create_form_bank_rec_widget" model="ir.ui.view">
<field name="name">account.bank.statement.line.form.bank_rec_widget</field>
<field name="model">account.bank.statement.line</field>
<field name="arch" type="xml">
<form string="New Transaction">
<field name="journal_id" invisible="1"/>
<field name="currency_id" invisible="1"/>
<group class="o_quick_create p-2">
<field name="date" nolabel="1"/>
<field name="payment_ref" class="o_payment_ref" required="1" nolabel="1" placeholder="Write a label ..."/>
<field name="partner_id" class="w-100" nolabel="1" placeholder="Partner"/>
<field name="amount" class="w-100" nolabel="1"/>
</group>
</form>
</field>
</record>
<record id="action_bank_statement_line_form_bank_rec_widget" model="ir.actions.act_window">
<field name="name">New Transaction</field>
<field name="res_model">account.bank.statement.line</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_bank_statement_line_form_bank_rec_widget"/>
<field name="target">new</field>
</record>
<!--
The action record of Bank Reconciliation has a duplicate one below it with different view_mode (and path).
This was needed because the function "_action_open_bank_reconciliation_widget" was expected to return 2
different view_modes namely list,kanban and kanban,list depending on the boolean "kanban_first".
The solution of changing the action dict was not useful because the dict view_mode would be erased on page refresh.
-->
<record id="action_bank_statement_line_transactions" model="ir.actions.act_window">
<field name="name">Bank Matching</field>
<field name="res_model">account.bank.statement.line</field>
<field name="view_mode">list,kanban</field>
<field name="search_view_id" ref="view_bank_statement_line_search_bank_rec_widget"/>
<field name="view_id" ref="view_bank_statement_line_tree_bank_rec_widget"/>
<field name="path">reconciliation_list</field>
<field name="domain">[('state', '!=', 'cancel')]</field>
<field name="context">{'default_journal_id': active_id, 'search_default_journal_id': active_id}</field>
<field name="help" type="html">
<p class='o_view_nocontent_smiling_face'>Nothing to do here!</p>
<p>No transactions matching your filters were found.</p>
</field>
</record>
<record id="action_bank_statement_line_transactions_kanban" model="ir.actions.act_window">
<field name="name">Bank Matching</field>
<field name="res_model">account.bank.statement.line</field>
<field name="view_mode">kanban,list</field>
<field name="search_view_id" ref="view_bank_statement_line_search_bank_rec_widget"/>
<field name="view_id" ref="view_bank_statement_line_kanban_bank_rec_widget"/>
<field name="path">reconciliation</field>
<field name="domain">[('state', '!=', 'cancel')]</field>
<field name="context">{'default_journal_id': active_id, 'search_default_journal_id': active_id}</field>
<field name="help" type="html">
<p class='o_view_nocontent_smiling_face'>Nothing to do here!</p>
<p>No transactions matching your filters were found.</p>
</field>
</record>
<record id="view_move_form_bank_rec_widget" model="ir.ui.view">
<field name="name">account.move.form.bank_rec_widget</field>
<field name="model">account.move</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<form>
<chatter/>
</form>
</field>
</record>
<!-- List view of aml used in the reconcile search more (bank rec widget) -->
<record id="view_account_move_line_list_bank_rec_widget" model="ir.ui.view">
<field name="name">account.move.line.list.bank_rec_widget</field>
<field name="model">account.move.line</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<list js_class="bank_rec_dialog_list" string="Journal Items to Match" create="false" edit="false" decoration-info="parent_state == 'draft'">
<field name="date"/>
<field name="move_name" string="Journal Entry" optional="show"/>
<field name="account_id" optional="hidden"/>
<field name="journal_id" optional="hidden"/>
<field name="partner_id" optional="show"/>
<field name="invoice_date" string="Invoice Date" optional="hide"/>
<field name="name" optional="show"/>
<field name="date_maturity" optional="hidden"/>
<field name="ref" optional="hidden"/>
<field name="analytic_distribution" groups="analytic.group_analytic_accounting" widget="analytic_distribution" optional="hidden" options="{'account_field': 'account_id', 'business_domain': 'general'}"/>
<field name="amount_residual" invisible="currency_id == company_currency_id" decoration-muted="amount_residual &lt; 0" nolabel="1" />
<field name="company_currency_id" column_invisible="True"/>
<field name="amount_residual_currency" decoration-muted="amount_residual_currency &lt; 0" string="Amount Due"/>
<field name="currency_id" column_invisible="True"/>
<field name="move_id" column_invisible="True"/>
</list>
</field>
</record>
<!-- Kanban view of aml used in the reconcile search more (bank rec widget) -->
<record id="view_account_move_line_kanban_bank_rec_widget" model="ir.ui.view">
<field name="name">account.move.line.kanban.bank_rec_widget</field>
<field name="model">account.move.line</field>
<field name="priority">999</field>
<field name="arch" type="xml">
<kanban js_class="bank_rec_dialog_kanban" class="o_kanban_mobile" create="false" group_create="false">
<field name="currency_id"/>
<field name="company_currency_id"/>
<templates>
<t t-name="card" class="px-3">
<div class="d-flex justify-content-between mb-2">
<field name="move_name"/>
<div t-if="record.date.raw_value" class="fw-bold">
<field name="date"/>
</div>
</div>
<div class="o_bank_rec_ref fst-italic w-50">
<field name="ref"/>
</div>
<div class="d-flex align-items-end justify-content-between">
<field name="partner_id"/>
<div class="d-flex flex-column align-items-end"
t-attf-class="{{ record.amount_residual_currency.raw_value &lt; 0 ? 'text-muted' : '' }}">
<field name="amount_residual" invisible="currency_id == company_currency_id"/>
<field name="amount_residual_currency"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<!-- List view of aml used in the set account search (bank rec widget) -->
<record id="view_account_list_bank_rec_widget" model="ir.ui.view">
<field name="name">account.account.list.bank.rec.widget</field>
<field name="model">account.account</field>
<field name="arch" type="xml">
<list string="Account" create="false" edit="false">
<field name="code" groups="account.group_account_readonly"/>
<field name="name" optional="show"/>
<field name="description" optional="show" width="350px"/>
<field name="account_type" optional="hide"/>
<field name="group_id" optional="hide"/>
<field name="reconcile" string="Reconcile" optional="hide"/>
</list>
</field>
</record>
<record id="view_account_search_bank_rec_widget" model="ir.ui.view">
<field name="name">account.account.search.bank.rec.widget</field>
<field name="model">account.account</field>
<field name="inherit_id" ref="account.view_account_search"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<field name="name" position="after">
<filter invisible="1" name="bankrec_income" string="Income" domain="[('account_type', '=', 'income')]"/>
<filter invisible="1" name="bankrec_expense" string="Expenses" domain="[('account_type', '=', 'expense')]"/>
<filter invisible="1" name="bankrec_currentasset" string="Current Assets" domain="[('account_type', '=', 'asset_current')]"/>
</field>
</field>
</record>
<!-- Add bank recon widget to the statements list view -->
<record id="view_bank_statement_tree" model="ir.ui.view">
<field name="name">account.bank.statement.list</field>
<field name="model">account.bank.statement</field>
<field name="inherit_id" ref="account.view_bank_statement_tree"/>
<field name="arch" type="xml">
<list position="inside">
<button name="action_open_bank_reconcile_widget" string="Transactions" type="object"/>
</list>
</field>
</record>
<record model="ir.actions.server" id="action_bank_statement_attachment">
<field name="name">Statement</field>
<field name="model_id" ref="model_account_bank_statement"/>
<field name="binding_model_id" ref="model_account_bank_statement" />
<field name="binding_type">report</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_generate_attachment()
</field>
</record>
<record id="model_account_statement_line_button_draft" model="ir.actions.server">
<field name="name">Reset to draft</field>
<field name="model_id" ref="model_account_bank_statement_line"/>
<field name="binding_model_id" ref="model_account_bank_statement_line" />
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">
if records:
action = records.action_button_draft()
</field>
</record>
</data>
</odoo>