mirror of
https://github.com/bringout/oca-ocb-accounting.git
synced 2026-04-22 16:02:00 +02:00
19.0 vanilla
This commit is contained in:
parent
ba20ce7443
commit
768b70e05e
2357 changed files with 1057103 additions and 712486 deletions
|
|
@ -8,13 +8,12 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Tags">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="applicability"/>
|
||||
<field name="tax_negate" readonly="1" attrs="{'invisible': [('applicability', '!=', 'taxes')]}"/>
|
||||
<field name="country_id" options="{'no_open': True, 'no_create': True}" attrs="{'invisible': [('applicability', '!=', 'taxes')]}"/>
|
||||
<field name="country_id" options="{'no_open': True, 'no_create': True}" invisible="applicability != 'taxes'"/>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
@ -25,11 +24,11 @@
|
|||
<field name="name">Tags</field>
|
||||
<field name="model">account.account.tag</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Tags">
|
||||
<list string="Tags">
|
||||
<field name="name"/>
|
||||
<field name="applicability"/>
|
||||
<field name="country_id" />
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" name="action_open_related_taxes"
|
||||
type="object" icon="fa-bars"
|
||||
attrs="{'invisible': [('related_taxes_amount', '=', 0)]}">
|
||||
invisible="related_taxes_amount == 0">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="related_taxes_amount"/>
|
||||
|
|
@ -32,17 +32,8 @@
|
|||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<div>
|
||||
<h1 style="font-size: 1.9rem;">
|
||||
<div class="row">
|
||||
<div class="col col-md-auto">
|
||||
<label for="code" string="Code"/>
|
||||
<div>
|
||||
<field name="code" placeholder="e.g. 101000" class="oe_inline"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col col-md-8">
|
||||
<label for="name" string="Account Name"/>
|
||||
|
|
@ -53,7 +44,16 @@
|
|||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<div class="row">
|
||||
<div class="col col-md-auto">
|
||||
<label for="code" string="Code"/>
|
||||
<div>
|
||||
<field name="placeholder_code" invisible="1"/>
|
||||
<field name="code" placeholder="e.g. 101000" class="oe_inline"
|
||||
options="{'placeholder_field': 'placeholder_code'}"/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</h1>
|
||||
</div>
|
||||
<notebook>
|
||||
|
|
@ -61,26 +61,33 @@
|
|||
<group>
|
||||
<group>
|
||||
<field name="account_type" widget="account_type_selection"/>
|
||||
<field name="tax_ids" widget="many2many_tags" domain="[('company_id','=',company_id)]" attrs="{'invisible': [('internal_group', '=', 'off_balance')]}" options="{'no_quick_create': True}"/>
|
||||
<field name="tax_ids" widget="many2many_tax_tags" invisible="account_type == 'off_balance'" options="{'no_quick_create': True}"/>
|
||||
<field name="tag_ids" widget="many2many_tags" domain="[('applicability', '=', 'accounts')]" context="{'default_applicability': 'accounts'}" options="{'no_create_edit': True}"/>
|
||||
<field name="allowed_journal_ids" widget="many2many_tags" domain="[('company_id','=',company_id)]" options="{'no_create_edit': True}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="internal_group" invisible="1" readonly="1"/>
|
||||
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency"/>
|
||||
<field name="deprecated"/>
|
||||
<field name="group_id"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency" string="Currency" placeholder="Any currency"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
<field name="group_id" groups="base.group_no_one"/>
|
||||
<field name="company_ids" widget="many2many_tags" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="Description">
|
||||
<field name="description"/>
|
||||
</page>
|
||||
<page name="mapping" string="Mapping" groups="base.group_multi_company" invisible="not display_mapping_tab">
|
||||
<field name="code_mapping_ids" nolabel="1">
|
||||
<list editable="bottom">
|
||||
<field name="company_id" force_save="1"/>
|
||||
<field name="code"/>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<!-- Chatter -->
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" groups="base.group_user"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -89,22 +96,21 @@
|
|||
<field name="name">account.account.list</field>
|
||||
<field name="model">account.account</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="top" create="1" delete="1" multi_edit="1" string="Chart of accounts">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="code"/>
|
||||
<list create="1" delete="1" multi_edit="1" string="Chart of accounts">
|
||||
<field name="placeholder_code" column_invisible="1"/>
|
||||
<field name="code" string="Code" widget="char_with_placeholder_field" options="{'placeholder_field': 'placeholder_code'}"/>
|
||||
<field name="name"/>
|
||||
<field name="account_type" widget="account_type_selection"/>
|
||||
<field name="group_id" optional="hide"/>
|
||||
<field name="internal_group" invisible="1"/>
|
||||
<field name="reconcile" widget="boolean_toggle" attrs="{'invisible': ['|', ('account_type', 'in', ('asset_cash', 'liability_credit_card')), ('internal_group', '=', 'off_balance')]}"/>
|
||||
<field name="non_trade" widget="boolean_toggle" attrs="{'invisible': [('account_type', 'not in', ('liability_payable', 'asset_receivable'))]}" optional="hide"/>
|
||||
<field name="tax_ids" optional="hide" widget="many2many_tags"/>
|
||||
<field name="internal_group" column_invisible="True"/>
|
||||
<field name="reconcile" widget="boolean_toggle" invisible="account_type in ('asset_cash', 'liability_credit_card', 'off_balance')"/>
|
||||
<field name="active" optional="hide" widget="boolean_toggle"/>
|
||||
<field name="non_trade" widget="boolean_toggle" invisible="account_type not in ('liability_payable', 'asset_receivable')" optional="hide"/>
|
||||
<field name="tax_ids" optional="hide" widget="many2many_tax_tags"/>
|
||||
<field name="tag_ids" domain="[('applicability', '=', 'accounts')]" optional="hide" widget="many2many_tags"/>
|
||||
<field name="allowed_journal_ids" optional="hide" widget="many2many_tags"/>
|
||||
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<button name="action_read_account" type="object" string="Setup" class="float-end btn-secondary"/>
|
||||
</tree>
|
||||
<field name="company_ids" widget="many2many_tags" readonly="True" groups="base.group_multi_company"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -113,24 +119,20 @@
|
|||
<field name="model">account.account</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="code"/>
|
||||
<field name="account_type"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<strong><field name="name"/></strong>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<span class="badge rounded-pill"><t t-esc="record.code.value"/></span>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<div class="row">
|
||||
<div class="col-8">
|
||||
<field class="fw-bolder" name="name"/>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Type: </strong><t t-esc="record.account_type.value"/>
|
||||
<div class="col-4 text-end">
|
||||
<field class="badge rounded-pill" name="code"/>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Type: </strong>
|
||||
<field name="account_type"/>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -142,7 +144,7 @@
|
|||
<field name="model">account.account</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Accounts">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('code','ilike',self)]" string="Account"/>
|
||||
<field name="name" filter_domain="['|', '|', ('name', 'ilike', self), ('code', '=ilike', self + '%'), ('description', 'ilike', self)]" string="Account"/>
|
||||
<filter string="Receivable" name="receivableacc" domain="[('account_type','=','asset_receivable')]"/>
|
||||
<filter string="Payable" name="payableacc" domain="[('account_type','=','liability_payable')]"/>
|
||||
<filter string="Equity" name="equityacc" domain="[('internal_group','=', 'equity')]"/>
|
||||
|
|
@ -150,16 +152,18 @@
|
|||
<filter string="Liability" name="liabilityacc" domain="[('internal_group','=', 'liability')]"/>
|
||||
<filter string="Income" name="incomeacc" domain="[('internal_group','=', 'income')]"/>
|
||||
<filter string="Expenses" name="expensesacc" domain="[('internal_group','=', 'expense')]"/>
|
||||
<filter string="Fixed Assets" name="type_asset_fixed" domain="[('account_type', '=', 'asset_fixed')]" invisible="True"/>
|
||||
<filter string="Frequent Expenses" name="type_expense" domain="[('account_type', '=', 'expense')]" invisible="True"/>
|
||||
<separator/>
|
||||
<filter string="Account with Entries" name="used" domain="[('used', '=', True)]"/>
|
||||
<filter string="Active Account" name="activeacc" domain="[('deprecated', '=', False)]"/>
|
||||
<filter string="Inactive Accounts" name="inactiveacc" domain="[('active', '=', False)]"/>
|
||||
<separator/>
|
||||
<field name="account_type"/>
|
||||
<group expand="0" string="Group By">
|
||||
<group>
|
||||
<filter string="Account Type" name="accounttype" domain="" context="{'group_by':'account_type'}"/>
|
||||
</group>
|
||||
<searchpanel class="account_root">
|
||||
<field name="root_id" icon="fa-filter" limit="0"/>
|
||||
<searchpanel class="account_root w-auto">
|
||||
<field name="root_id" icon="fa-filter" limit="false"/>
|
||||
</searchpanel>
|
||||
</search>
|
||||
</field>
|
||||
|
|
@ -168,7 +172,7 @@
|
|||
<record id="action_account_form" model="ir.actions.act_window">
|
||||
<field name="name">Chart of Accounts</field>
|
||||
<field name="res_model">account.account</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="view_account_search"/>
|
||||
<field name="view_id" ref="view_account_list"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -183,19 +187,19 @@
|
|||
to disclose a certain amount of information.
|
||||
</p>
|
||||
</field>
|
||||
<field name="context">{'search_default_activeacc': True}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_duplicate_account" model="ir.actions.server">
|
||||
<field name="name">Duplicate</field>
|
||||
<record model="ir.actions.server" id="action_unmerge_accounts">
|
||||
<field name="name">Unmerge account</field>
|
||||
<field name="model_id" ref="model_account_account"/>
|
||||
<field name="binding_model_id" ref="account.model_account_account"/>
|
||||
<field name="binding_view_types">list</field>
|
||||
<field name="group_ids" eval="[(4, ref('account.group_account_manager'))]"/>
|
||||
<field name="binding_model_id" ref="account.model_account_account" />
|
||||
<field name="binding_view_types">form,list,kanban</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
action = model.action_duplicate_accounts()
|
||||
if records:
|
||||
action = records.action_unmerge()
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -10,11 +10,11 @@
|
|||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button class="oe_stat_button" type="object" name="action_view_invoice"
|
||||
icon="fa-pencil-square-o" attrs="{'invisible': [('invoice_count', '=', 0)]}">
|
||||
icon="fa-pencil-square-o" invisible="invoice_count == 0">
|
||||
<field string="Customer Invoices" name="invoice_count" widget="statinfo"/>
|
||||
</button>
|
||||
<button class="oe_stat_button" type="object" name="action_view_vendor_bill"
|
||||
icon="fa-file-text-o" attrs="{'invisible': [('vendor_bill_count', '=', 0)]}">
|
||||
icon="fa-file-text-o" invisible="vendor_bill_count == 0">
|
||||
<field string="Vendor Bills" name="vendor_bill_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
|
|
@ -27,12 +27,14 @@
|
|||
<field name="inherit_id" ref="analytic.view_account_analytic_account_list"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="debit" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
<attribute name="column_invisible">False</attribute>
|
||||
<attribute name="groups">account.group_account_readonly</attribute>
|
||||
</field>
|
||||
<field name="credit" position="attributes">
|
||||
<attribute name="invisible">False</attribute>
|
||||
<attribute name="column_invisible">False</attribute>
|
||||
<attribute name="groups">account.group_account_readonly</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -2,13 +2,14 @@
|
|||
<odoo>
|
||||
<data>
|
||||
<record id="account_analytic_distribution_model_tree_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.distribution.model.inherit.tree</field>
|
||||
<field name="name">account.analytic.distribution.model.inherit.list</field>
|
||||
<field name="model">account.analytic.distribution.model</field>
|
||||
<field name="inherit_id" ref="analytic.account_analytic_distribution_model_tree_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='partner_id']" position="before">
|
||||
<field name="account_prefix" optional="show"/>
|
||||
<field name="prefix_placeholder" column_invisible="1"/> <!-- Needed for the char_with_placeholder_field widget -->
|
||||
<field name="account_prefix" string="Accounts Prefixes" optional="show" widget="char_with_placeholder_field" options="{'placeholder_field': 'prefix_placeholder'}"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='company_id']" position="before">
|
||||
<field name="product_id" optional="show"/>
|
||||
|
|
@ -25,7 +26,8 @@
|
|||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='partner_category_id']" position="after">
|
||||
<field name="account_prefix"/>
|
||||
<field name="prefix_placeholder" invisible="1"/> <!-- Needed for the char_with_placeholder_field widget -->
|
||||
<field name="account_prefix" string="Accounts Prefixes" options="{'placeholder_field': 'prefix_placeholder'}"/>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='company_id']" position="before">
|
||||
<field name="product_id"/>
|
||||
|
|
|
|||
|
|
@ -18,20 +18,20 @@
|
|||
<group/> <!-- put Accounting group under Amount group -->
|
||||
<group name="accounting" string="Accounting">
|
||||
<field name="move_line_id" options="{'no_create': True}" widget="line_open_move_widget"/>
|
||||
<field name="general_account_id" attrs="{'readonly': [('move_line_id', '!=', False)]}"/>
|
||||
<field name="general_account_id" readonly="move_line_id"/>
|
||||
</group>
|
||||
</group>
|
||||
</data>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_account_analytic_line_tree_inherit_account" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.tree.inherit.account</field>
|
||||
<field name="name">account.analytic.line.list.inherit.account</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="inherit_id" ref="analytic.view_account_analytic_line_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='account_id']" position="after">
|
||||
<field name="ref" invisible="context.get('to_invoice', False)" optional="hide"/>
|
||||
<field name="ref" column_invisible="context.get('to_invoice', False)" optional="hide"/>
|
||||
<field name="general_account_id" optional="hide"/>
|
||||
<field name="move_line_id" widget="line_open_move_widget" optional="hide"/>
|
||||
<field name="product_id" optional="hide"/>
|
||||
|
|
@ -43,14 +43,25 @@
|
|||
<field name="name">account.analytic.line.select.inherit.account</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="inherit_id" ref="analytic.view_account_analytic_line_filter"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='date']" position="after">
|
||||
<field name="auto_account_id"/>
|
||||
<field name="account_id"/>
|
||||
<field name="product_id"/>
|
||||
<field name="general_account_id"/>
|
||||
<field name="partner_id" filter_domain="[('partner_id','child_of',self)]"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='groupby']" position="after">
|
||||
<filter string="Financial Account" name="financialaccount" context="{'group_by':'general_account_id'}"/>
|
||||
<xpath expr="//filter[@name='month']" position="after">
|
||||
<filter name="fiscal_date" string="From last fiscal year" domain="[('fiscal_year_search', '=', True)]" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//group[@name='groupby']" position="inside">
|
||||
<separator/>
|
||||
<filter name="account_id" context="{'group_by': 'account_id'}"/>
|
||||
<separator/>
|
||||
<filter string="Financial Account" name="group_by_financial_account" context="{'group_by':'general_account_id'}"/>
|
||||
<filter string="Category" name='category' context="{'group_by': 'category'}"/>
|
||||
<filter string="Product" name="product" context="{'group_by':'product_id'}"/>
|
||||
<filter string="Partner" name="partner" context="{'group_by':'partner_id'}"/>
|
||||
</xpath>
|
||||
|
|
@ -64,20 +75,29 @@
|
|||
<field name="inherit_id" ref="analytic.view_account_analytic_line_pivot"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="account_id" position="after">
|
||||
<field name="partner_id" type="row"/>
|
||||
<field name="partner_id" type="row" invisible="1"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_analytic_line_filter_inherit" model="ir.ui.view">
|
||||
<field name="name">account.analytic.line.select.inherit</field>
|
||||
<field name="model">account.analytic.line</field>
|
||||
<field name="inherit_id" ref="analytic.view_account_analytic_line_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='group_date']" position="after">
|
||||
<filter string="Category" name='category' context="{'group_by': 'category'}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
<record id="analytic.account_analytic_line_action_entries" model="ir.actions.act_window">
|
||||
<field name="search_view_id" ref="view_account_analytic_line_filter_inherit_account"/>
|
||||
<field name="context">{
|
||||
'search_default_group_by_analytic_account': 1,
|
||||
'search_default_fiscal_date': 1,
|
||||
}</field>
|
||||
</record>
|
||||
|
||||
<record id="action_analytic_reporting" model="ir.actions.act_window">
|
||||
<field name="name">Analytic Reporting</field>
|
||||
<field name="res_model">account.analytic.line</field>
|
||||
<field name="path">analytic-report</field>
|
||||
<field name="search_view_id" ref="view_account_analytic_line_filter_inherit_account"/>
|
||||
<field name="context">{
|
||||
'search_default_group_by_analytic_account': 1,
|
||||
'search_default_fiscal_date': 1,
|
||||
}</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -8,7 +8,12 @@
|
|||
<field name="arch" type="xml">
|
||||
<data>
|
||||
<xpath expr="//field[@name='applicability_ids']//field[@name='business_domain']" position="after">
|
||||
<field name="account_prefix"/>
|
||||
<field name="display_account_prefix" column_invisible="True"/>
|
||||
<field name="account_prefix_placeholder" column_invisible="True"/>
|
||||
<field name="account_prefix"
|
||||
widget="char_with_placeholder_field"
|
||||
options="{'placeholder_field': 'account_prefix_placeholder'}"
|
||||
invisible="not display_account_prefix"/>
|
||||
<field name="product_categ_id"/>
|
||||
</xpath>
|
||||
</data>
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
|
||||
|
||||
<record id="view_bank_statement_tree" model="ir.ui.view">
|
||||
<field name="name">account.bank.statement.tree</field>
|
||||
<field name="name">account.bank.statement.list</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree decoration-danger="journal_id and not is_complete or not is_valid"
|
||||
<list decoration-danger="journal_id and not is_complete or not is_valid"
|
||||
decoration-muted="not journal_id"
|
||||
create="false"
|
||||
string="Statements">
|
||||
|
|
@ -17,11 +17,11 @@
|
|||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="balance_start"/>
|
||||
<field name="balance_end_real"/>
|
||||
<field name="balance_end" invisible="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="is_complete" invisible="1"/>
|
||||
<field name="is_valid" invisible="1"/>
|
||||
</tree>
|
||||
<field name="balance_end" column_invisible="True"/>
|
||||
<field name="currency_id" column_invisible="True"/>
|
||||
<field name="is_complete" column_invisible="True"/>
|
||||
<field name="is_valid" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -29,16 +29,16 @@
|
|||
<field name="name">account.bank.statement.search</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Bank Statements">
|
||||
<field name="name" string="Bank Statement"/>
|
||||
<search string="Search Statements">
|
||||
<field name="name" string="Statement"/>
|
||||
<field name="date"/>
|
||||
<filter string="Empty" name="empty" domain="[('line_ids','=',False)]"/>
|
||||
<filter name="invalid" string="Invalid"
|
||||
domain="['|', ('is_valid', '=', False),('is_complete', '=', False)]"/>
|
||||
<separator/>
|
||||
<filter name="filter_date" date="date"/>
|
||||
<field name="journal_id" domain="[('type', 'in', ('bank', 'cash'))]" />
|
||||
<group expand="0" string="Group By">
|
||||
<field name="journal_id" domain="[('type', 'in', ('bank', 'cash', 'credit'))]" />
|
||||
<group>
|
||||
<filter string="Journal" name="journal" context="{'group_by': 'journal_id'}"/>
|
||||
<filter string="Date" name="date" context="{'group_by': 'date'}"/>
|
||||
</group>
|
||||
|
|
@ -50,8 +50,8 @@
|
|||
<record id="action_bank_statement_tree" model="ir.actions.act_window">
|
||||
<field name="name">Bank Statements</field>
|
||||
<field name="res_model">account.bank.statement</field>
|
||||
<field name="view_mode">tree,pivot,graph</field>
|
||||
<field name="domain">['|', ('journal_id', '=', False), ('journal_id.type', '=', 'bank')]</field>
|
||||
<field name="view_mode">list,pivot,graph,form</field>
|
||||
<field name="domain">[('journal_id.type', '=', 'bank')]</field>
|
||||
<field name="context">{'journal_type':'bank'}</field>
|
||||
<field name="search_view_id" ref="view_bank_statement_search"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -67,9 +67,31 @@
|
|||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_credit_statement_tree" model="ir.actions.act_window">
|
||||
<field name="name">Credit Statements</field>
|
||||
<field name="res_model">account.bank.statement</field>
|
||||
<field name="view_mode">list,pivot,graph</field>
|
||||
<field name="domain">[('journal_id.type', '=', 'credit')]</field>
|
||||
<field name="context">{'journal_type': 'credit'}</field>
|
||||
<field name="search_view_id" ref="view_bank_statement_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Register a bank statement
|
||||
</p><p>
|
||||
A credit statement is a summary of all financial transactions
|
||||
occurring over a given period of time on a credit account. You
|
||||
should receive this periodically from your bank.
|
||||
</p><p>
|
||||
Odoo allows you to reconcile a statement line directly with
|
||||
the related sale or purchase invoices.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.actions.act_window.view" id="action_bank_statement_tree_bank">
|
||||
<field name="sequence" eval="1"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="view_id" ref="view_bank_statement_tree"/>
|
||||
<field name="act_window_id" ref="action_bank_statement_tree"/>
|
||||
</record>
|
||||
|
|
@ -102,10 +124,10 @@
|
|||
<field name="name">Cash Registers</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">account.bank.statement</field>
|
||||
<field name="view_mode">tree,pivot,graph</field>
|
||||
<field name="view_mode">list,pivot,graph</field>
|
||||
<field name="view_id" ref="view_bank_statement_tree"/>
|
||||
<field name="search_view_id" ref="view_bank_statement_search"/>
|
||||
<field name="domain">['|', ('journal_id', '=', False), ('journal_id.type', '=', 'cash')]</field>
|
||||
<field name="domain">[('journal_id.type', '=', 'cash')]</field>
|
||||
<field name="context">{'journal_type':'cash'}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<record id="rounding_list_action" model="ir.actions.act_window">
|
||||
<field name="name">Cash Roundings</field>
|
||||
<field name="res_model">account.cash.rounding</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">Create the first cash rounding</p>
|
||||
</field>
|
||||
|
|
@ -26,10 +26,10 @@
|
|||
<group>
|
||||
<field name="rounding"/>
|
||||
<field name="strategy"/>
|
||||
<field name="profit_account_id" options="{'no_create': True}" attrs="{'invisible': [('strategy', '!=', 'add_invoice_line')], 'required': [('strategy', '=', 'add_invoice_line')]}"
|
||||
groups="account.group_account_invoice,account.group_account_readonly" domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable'))]"/>
|
||||
<field name="loss_account_id" options="{'no_create': True}" attrs="{'invisible': [('strategy', '!=', 'add_invoice_line')], 'required': [('strategy', '=', 'add_invoice_line')]}"
|
||||
groups="account.group_account_invoice,account.group_account_readonly" domain="[('account_type', 'not in', ('asset_receivable', 'liability_payable'))]"/>
|
||||
<field name="profit_account_id" options="{'no_create': True}" invisible="strategy != 'add_invoice_line'" required="strategy == 'add_invoice_line'"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"/>
|
||||
<field name="loss_account_id" options="{'no_create': True}" invisible="strategy != 'add_invoice_line'" required="strategy == 'add_invoice_line'"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"/>
|
||||
<field name="rounding_method"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
@ -49,14 +49,14 @@
|
|||
</record>
|
||||
|
||||
<record id="rounding_tree_view" model="ir.ui.view">
|
||||
<field name="name">account.cash.rounding.tree</field>
|
||||
<field name="name">account.cash.rounding.list</field>
|
||||
<field name="model">account.cash.rounding</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Rounding Tree">
|
||||
<list string="Rounding List">
|
||||
<field name="name"/>
|
||||
<field name="rounding"/>
|
||||
<field name="rounding_method"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,158 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- Account Tax Templates -->
|
||||
|
||||
<record id="view_account_tax_template_form" model="ir.ui.view">
|
||||
<field name="name">account.tax.template.form</field>
|
||||
<field name="model">account.tax.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Tax Template">
|
||||
<sheet>
|
||||
<group name="main_group">
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="type_tax_use"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="definition" string="Definition">
|
||||
<group name="tax_definitions">
|
||||
<group>
|
||||
<field name="amount_type" />
|
||||
<label for="amount" attrs="{'invisible':[('amount_type','=', 'group')]}"/>
|
||||
<div attrs="{'invisible':[('amount_type','=', 'group')]}">
|
||||
<field name="amount" class="oe_inline" />
|
||||
<span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}">%</span>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<field name="children_tax_ids"
|
||||
attrs="{'invisible':['|', ('amount_type','!=','group'), ('type_tax_use','=','none')]}"
|
||||
domain="[('type_tax_use','in',('none',type_tax_use)), ('amount_type','!=','group')]">
|
||||
<tree string="Children Taxes">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name"/>
|
||||
<field name="amount_type" />
|
||||
<field name="amount" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
<page name="advanced_options" string="Advanced Options">
|
||||
<group name="advanced_definitions">
|
||||
<group>
|
||||
<field name="description" attrs="{'invisible':[('amount_type','=', 'group')]}"/>
|
||||
<field name="analytic" attrs="{'invisible':[('amount_type','=', 'group')]}" groups="analytic.group_analytic_accounting" />
|
||||
</group>
|
||||
<group name="price_definitions">
|
||||
<field name="price_include" attrs="{'invisible':[('amount_type','=', 'group')]}" />
|
||||
<field name="include_base_amount" attrs="{'invisible':[('amount_type','=', 'group')]}" />
|
||||
<field name="is_base_affected"
|
||||
attrs="{'invisible': ['|', ('amount_type','=', 'group'), ('price_include', '=', True)]}"/>
|
||||
</group>
|
||||
<group name="tax_configuration">
|
||||
<field name="active" groups="base.group_no_one"/>
|
||||
<field name="tax_exigibility" widget="radio" attrs="{'invisible':[('amount_type','=', 'group')]}"/>
|
||||
<field name="cash_basis_transition_account_id" attrs="{'invisible': [('tax_exigibility', '=', 'on_invoice')], 'required': [('tax_exigibility', '=', 'on_payment')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_tax_template_tree" model="ir.ui.view">
|
||||
<field name="name">account.tax.template.tree</field>
|
||||
<field name="model">account.tax.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Tax Template">
|
||||
<field name="name"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_tax_template_search" model="ir.ui.view">
|
||||
<field name="name">account.tax.template.search</field>
|
||||
<field name="model">account.tax.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Tax Templates">
|
||||
<field name="name" filter_domain="['|', ('name', 'ilike', self), ('description', 'ilike', self)]" string="Tax Template"/>
|
||||
<field name="chart_template_id"/>
|
||||
<filter string="Sale" name="sale" domain="[('type_tax_use', '=', 'sale')]" help="Taxes used in Sales"/>
|
||||
<filter string="Purchase" name="purchase" domain="[('type_tax_use', '=', 'purchase')]" help="Taxes used in Purchases"/>
|
||||
<separator/>
|
||||
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_tax_template_form" model="ir.actions.act_window">
|
||||
<field name="name">Tax Templates</field>
|
||||
<field name="res_model">account.tax.template</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="search_view_id" ref="view_account_tax_template_search"/>
|
||||
</record>
|
||||
|
||||
<!-- Fiscal Position Templates -->
|
||||
|
||||
<record id="view_account_position_template_search" model="ir.ui.view">
|
||||
<field name="name">account.fiscal.position.template.search</field>
|
||||
<field name="model">account.fiscal.position.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Fiscal Position">
|
||||
<field name="name" string="Fiscal Position Template"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_position_template_form" model="ir.ui.view">
|
||||
<field name="name">account.fiscal.position.template.form</field>
|
||||
<field name="model">account.fiscal.position.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Fiscal Position Template">
|
||||
<group col="4">
|
||||
<field name="name"/>
|
||||
<field name="chart_template_id"/>
|
||||
</group>
|
||||
<field name="tax_ids">
|
||||
<tree string="Taxes Mapping" editable="bottom">
|
||||
<field name="tax_src_id" domain="[('type_tax_use', '!=', None)]"/>
|
||||
<field name="tax_dest_id" domain="[('type_tax_use', '!=', None)]"/>
|
||||
</tree>
|
||||
<form string="Taxes Mapping">
|
||||
<field name="tax_src_id" domain="[('type_tax_use', '!=', None)]"/>
|
||||
<field name="tax_dest_id" domain="[('type_tax_use', '!=', None)]"/>
|
||||
</form>
|
||||
</field>
|
||||
<field name="account_ids">
|
||||
<tree string="Accounts Mapping" editable="bottom">
|
||||
<field name="account_src_id"/>
|
||||
<field name="account_dest_id"/>
|
||||
</tree>
|
||||
<form string="Accounts Mapping">
|
||||
<field name="account_src_id"/>
|
||||
<field name="account_dest_id"/>
|
||||
</form>
|
||||
</field>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_position_template_tree" model="ir.ui.view">
|
||||
<field name="name">account.fiscal.position.template.tree</field>
|
||||
<field name="model">account.fiscal.position.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Fiscal Position">
|
||||
<field name="name"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
<odoo>
|
||||
<record id="account_journal_dashboard_kanban_view_js" model="ir.ui.view">
|
||||
<field name="name">account.journal.dashboard.kanban.js</field>
|
||||
<field name="model">account.journal</field>
|
||||
<field name="inherit_id" ref="account.account_journal_dashboard_kanban_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//kanban" position="attributes">
|
||||
<attribute name="js_class">account_setup_bar</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
<form string="Matching">
|
||||
<group>
|
||||
<div class="oe_title" colspan="4">
|
||||
<h1><field name="name" readonly="1"/></h1>
|
||||
<h1><field name="id" readonly="1"/></h1>
|
||||
</div>
|
||||
<separator string="Matched Journal Items" colspan="4"/>
|
||||
<field name="reconciled_line_ids" readonly="1" colspan="4" nolabel="1"/>
|
||||
|
|
|
|||
|
|
@ -34,15 +34,15 @@
|
|||
</record>
|
||||
|
||||
<record id="view_account_group_tree" model="ir.ui.view">
|
||||
<field name="name">account.group.tree</field>
|
||||
<field name="name">account.group.list</field>
|
||||
<field name="model">account.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Group">
|
||||
<list string="Account Group">
|
||||
<field name="code_prefix_start"/>
|
||||
<field name="code_prefix_end"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,14 +3,14 @@
|
|||
<data>
|
||||
<!-- account incoterms -->
|
||||
<record id="view_incoterms_tree" model="ir.ui.view">
|
||||
<field name="name">account.incoterms.tree</field>
|
||||
<field name="name">account.incoterms.list</field>
|
||||
<field name="model">account.incoterms</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Incoterms" editable="bottom">
|
||||
<field name="active" invisible="1"/>
|
||||
<list string="Incoterms" editable="bottom">
|
||||
<field name="active" column_invisible="True"/>
|
||||
<field name="code"/>
|
||||
<field colspan="4" name="name"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -20,7 +20,7 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Incoterms">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="name"/>
|
||||
|
|
@ -46,8 +46,7 @@
|
|||
<record id="action_incoterms_tree" model="ir.actions.act_window">
|
||||
<field name="name">Incoterms</field>
|
||||
<field name="res_model">account.incoterms</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new incoterm
|
||||
|
|
|
|||
|
|
@ -3,365 +3,385 @@
|
|||
<field name="name">account.journal.dashboard.kanban</field>
|
||||
<field name="model">account.journal</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban create="false" class="oe_background_grey o_kanban_dashboard o_account_kanban" banner_route="/account/account_dashboard_onboarding" js_class="account_dashboard_kanban">
|
||||
<kanban can_open="0" highlight_color="color" class="o_account_kanban" js_class="account_dashboard_kanban">
|
||||
<field name="id"/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="color"/>
|
||||
<field name="show_on_dashboard"/>
|
||||
<field name="kanban_dashboard"/>
|
||||
<field name="has_entries"/>
|
||||
<field name="has_posted_entries"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="activity_state"/>
|
||||
<field name="alias_domain"/>
|
||||
<field name="alias_domain_id"/>
|
||||
<field name="bank_account_id"/>
|
||||
<field name="show_fetch_in_einvoices_button"/>
|
||||
<field name="show_refresh_out_einvoices_status_button"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="d-flex flex-column flex-fill">
|
||||
<t t-value="JSON.parse(record.kanban_dashboard.raw_value)" t-set="dashboard"/>
|
||||
<t t-value="record.type.raw_value" t-set="journal_type"/>
|
||||
<t t-call="JournalTop"/>
|
||||
<div t-att-class="'container o_kanban_card_content' + (dashboard.is_sample_data ? ' o_sample_data' : '')">
|
||||
<div class="row">
|
||||
<t t-if="(journal_type == 'bank' || journal_type == 'cash')" t-call="JournalBodyBankCash"/>
|
||||
<t t-if="journal_type == 'sale' || journal_type == 'purchase'" t-call="JournalBodySalePurchase"/>
|
||||
<t t-if="journal_type == 'general'" t-call="JournalMiscelaneous"/>
|
||||
<div class="col-12 col-sm-5 mb-3 mb-sm-0 o_kanban_primary_left"/>
|
||||
<div class="col-12 col-sm-7 o_kanban_primary_right">
|
||||
<t t-call="HasSequenceHoles"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt-auto">
|
||||
<t t-if="['bank', 'cash', 'sale', 'purchase'].includes(journal_type)" t-call="JournalBodyGraph"/>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<t t-value="JSON.parse(record.kanban_dashboard.raw_value)" t-set="dashboard"/>
|
||||
<t t-value="record.type.raw_value" t-set="journal_type"/>
|
||||
<t t-value="!record.has_entries.raw_value" t-set="journal_is_empty"/>
|
||||
<t t-set="bank_unconfigured" t-value="(journal_type == 'bank' or journal_type == 'credit')
|
||||
and ['undefined', 'online_sync'].includes(dashboard.bank_statements_source)
|
||||
and journal_is_empty"/>
|
||||
<t t-call="JournalTop"/>
|
||||
<div t-att-class="'mt-3 p-0 container-fluid' + (dashboard.is_sample_data ? ' o_sample_data' : '')">
|
||||
<div class="row">
|
||||
<t t-if="journal_type == 'bank' || journal_type == 'credit'" t-call="JournalBodyBank"/>
|
||||
<t t-if="journal_type == 'cash'" t-call="JournalBodyBankCash"/>
|
||||
<t t-if="journal_type == 'sale' || journal_type == 'purchase'" t-call="JournalBodySalePurchase"/>
|
||||
<t t-if="journal_type == 'general'" t-call="JournalMiscelaneous"/>
|
||||
</div>
|
||||
<div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
|
||||
<t t-call="JournalManage"/>
|
||||
<div class="row mt-auto">
|
||||
<t t-if="['bank', 'cash', 'credit', 'sale'].includes(journal_type)
|
||||
and !bank_unconfigured
|
||||
or (journal_type == 'purchase' and !journal_is_empty)"
|
||||
t-call="JournalBodyGraph"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalTop">
|
||||
<div t-attf-class="o_kanban_card_header">
|
||||
<div class="o_kanban_card_header_title">
|
||||
<div class="o_primary">
|
||||
<a type="object" name="open_action"><field name="name"/></a>
|
||||
<t t-if="dashboard.company_count > 1">
|
||||
<span groups="base.group_multi_company" class="small">- <field name="company_id"/></span>
|
||||
</t>
|
||||
<span class="d-flex d-flew-row align-items-baseline">
|
||||
<a class="fs-4 fw-bold" type="object" name="open_action" context="{'show_fetch_in_einvoices_button': show_fetch_in_einvoices_button, 'show_refresh_out_einvoices_status_button': show_refresh_out_einvoices_status_button}"><field name="name"/></a>
|
||||
<t t-if="dashboard.show_company" groups="base.group_multi_company" >
|
||||
<span class="small fw-bold ms-1"> - <field name="company_id"/></span>
|
||||
</t>
|
||||
</span>
|
||||
<div t-att-title="dashboard.title" t-if="journal_type == 'purchase' && record.alias_domain_id.raw_value && !journal_is_empty">
|
||||
<field name="alias_id"/>
|
||||
</div>
|
||||
<t t-if="journal_is_empty" name="empty_journal_helper">
|
||||
<span class="text-muted" t-if="journal_type == 'sale'">Get Paid online. Send electronic invoices.</span>
|
||||
<span class="text-muted" t-if="journal_type == 'purchase'">Let artificial intelligence scan your bill. Pay easily.</span>
|
||||
<span class="text-muted" t-if="journal_type == 'bank'">Connect your bank. Match invoices automatically.</span>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<t t-name="menu">
|
||||
<t t-value="JSON.parse(record.kanban_dashboard.raw_value)" t-set="dashboard"/>
|
||||
<t t-value="record.type.raw_value" t-set="journal_type"/>
|
||||
<div class="container">
|
||||
<!-- For bank, cash and credit -->
|
||||
<div t-if="journal_type == 'bank' || journal_type == 'cash' || journal_type == 'credit'" class="row" id="bank_and_cash_container">
|
||||
<div class="col-4">
|
||||
<h5 id="card_action_view_menus" class="o_kanban_card_manage_title">
|
||||
<span role="separator">View</span>
|
||||
</h5>
|
||||
<div id="action_card_statements">
|
||||
<a t-if="journal_type == 'bank'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
<a t-if="journal_type == 'credit'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_credit_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
<a t-if="journal_type == 'cash'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_view_bank_statement_tree', 'search_default_journal': True}">Cash Registers</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_payments_action">Payments</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_secondary" t-att-title="dashboard.title" t-if="journal_type == 'purchase' && record.alias_domain.raw_value">
|
||||
<field name="alias_id"/>
|
||||
|
||||
<div class="col-4" groups="account.group_account_basic" name="kanban_manage_new">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span role="separator">New</span>
|
||||
</h5>
|
||||
<div name="bank_customer_payment">
|
||||
<a role="menuitem" type="object" name="create_customer_payment">Customer Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_supplier_payment">Vendor Payment</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4" groups="account.group_account_basic" name="kanban_manage_reconciliation">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span role="separator">Reconciliation</span>
|
||||
</h5>
|
||||
<div name="action_card_reconciliation">
|
||||
<a type="action" name="%(account.action_account_reconcile_model)d">Models</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- For purchase and sale -->
|
||||
<div t-if="journal_type == 'purchase' || journal_type == 'sale'" class="row">
|
||||
<div class="col-4">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_invoice_type'}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_invoice_type'}">Bills</a>
|
||||
</div>
|
||||
<div id="sale_purchase_refund">
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_refund_type_non_legacy'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_refund_type'}">Refund</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="account.group_account_user">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4" groups="account.group_account_invoice" name="kanban_manage_new">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">
|
||||
<span t-if="journal_type == 'sale'">Invoice</span>
|
||||
<span t-if="journal_type == 'purchase'">Bill</span>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new" context="{'refund':True}">
|
||||
<span t-if="journal_type == 'sale'">Credit Note</span>
|
||||
<span t-if="journal_type == 'purchase'">Refund</span>
|
||||
</a>
|
||||
</div>
|
||||
<div t-if="journal_type == 'sale'">
|
||||
<widget name="account_file_uploader" title="Upload Invoices" btnClass="file_upload_kanban_action_a"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4" name="kanban_manage_reports">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="action" name="%(action_account_invoice_report_all)d" groups="account.group_account_readonly">Invoices Analysis</a>
|
||||
<a t-if="journal_type == 'purchase'" type="action" name="%(action_account_invoice_report_all_supp)d" groups="account.group_account_readonly">Bills Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="o_kanban_manage_button_section">
|
||||
<a class="o_kanban_manage_toggle_button" href="#"><i class="fa fa-ellipsis-v" aria-label="Selection" role="img" title="Selection"/></a>
|
||||
|
||||
<!-- For general and situation -->
|
||||
<div t-if="journal_type == 'general' || journal_type == 'situation'" class="row" groups="account.group_account_readonly">
|
||||
<div class="col-4">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line'}">Journal Entries</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1}">Entries to Review</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4" groups="account.group_account_user" name="kanban_manage_new">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">Journal Entry</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_manage_operations" groups="account.group_account_user">
|
||||
<h5 class="o_kanban_card_manage_title">
|
||||
<span>Operations</span>
|
||||
</h5>
|
||||
<div>
|
||||
<a type="object" name="action_post_all_entries">Post All Entries</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<field class="col-8" name="color" widget="kanban_color_picker"/>
|
||||
</div>
|
||||
|
||||
<div groups="account.group_account_manager" class="row o_kanban_card_manage_settings">
|
||||
<field name="show_on_dashboard" widget="boolean_favorite" class="col-6"/>
|
||||
<div class="col-6 text-end">
|
||||
<a class="dropdown-item" t-if="widget.editable" type="open">Configuration</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="HasSequenceHoles">
|
||||
<a t-if="dashboard.has_sequence_holes"
|
||||
name="show_sequence_holes"
|
||||
type="object"
|
||||
class="text-warning"
|
||||
title="Gaps due to canceled invoices, deleted entries or manual errors in open period.">
|
||||
Gaps in the sequence
|
||||
</a>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalManage">
|
||||
|
||||
<!-- For bank and cash -->
|
||||
<div t-if="journal_type == 'bank' || journal_type == 'cash'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div id="card_action_view_menus" class="o_kanban_card_manage_title">
|
||||
<span role="separator">View</span>
|
||||
</div>
|
||||
<div id="action_card_statements">
|
||||
<a t-if="journal_type == 'bank'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
<a t-if="journal_type == 'cash'" role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_view_bank_statement_tree', 'search_default_journal': True}">Statements</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_collect_money">Cust. Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_spend_money">Vendor Payments</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_transfer_money">Internal Transfers</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">New</span>
|
||||
</div>
|
||||
<div name="bank_customer_payment">
|
||||
<a role="menuitem" type="object" name="create_customer_payment">Cust. Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_supplier_payment">Vendor Payment</a>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="create_internal_transfer">Internal Transfer</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reconciliation">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span role="separator">Reconciliation</span>
|
||||
</div>
|
||||
<div>
|
||||
<a role="menuitem" type="object" name="open_action_with_context" context="{'action_name': 'action_account_reconcile_model', 'use_domain': ['|', ('match_journal_ids', '=', False), ('match_journal_ids', 'in', active_id)]}" groups="account.group_account_manager">Reconciliation Models</a>
|
||||
</div>
|
||||
</div>
|
||||
<t t-name="JournalChecks">
|
||||
<div class="row" t-if="dashboard.has_unhashed_entries">
|
||||
<a name="show_unhashed_entries" type="object" class="text-warning">
|
||||
Unhashed entries
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<!-- For purchase and sale -->
|
||||
<div t-if="journal_type == 'purchase' || journal_type == 'sale'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_invoice_type'}">Invoices</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_invoice_type'}">Bills</a>
|
||||
</div>
|
||||
<div id="sale_purchase_refund">
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'action_name': 'action_move_out_refund_type'}">Credit Notes</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'action_name': 'action_move_in_refund_type'}">Refund</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_invoice">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">
|
||||
<span t-if="journal_type == 'sale'">Invoice</span>
|
||||
<span t-if="journal_type == 'purchase'">Bill</span>
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new" context="{'refund':True}">
|
||||
<span t-if="journal_type == 'sale'">Credit Note</span>
|
||||
<span t-if="journal_type == 'purchase'">Refund</span>
|
||||
</a>
|
||||
</div>
|
||||
<div t-if="journal_type == 'sale'">
|
||||
<widget name="account_file_uploader" title="Upload Invoices" btnClass="file_upload_kanban_action_a"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_reports">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Reporting</span>
|
||||
</div>
|
||||
<div>
|
||||
<a t-if="journal_type == 'sale'" type="action" name="%(action_account_invoice_report_all)d" groups="account.group_account_readonly">Invoices Analysis</a>
|
||||
<a t-if="journal_type == 'purchase'" type="action" name="%(action_account_invoice_report_all_supp)d" groups="account.group_account_readonly">Bills Analysis</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- For general and situation -->
|
||||
<div t-if="journal_type == 'general' || journal_type == 'situation'" class="row">
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_view">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>View</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line'}">Journal Entries</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_unposted': 1}">Entries to Review</a>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_account_moves_all_a'}" groups="base.group_no_one">Journal Items</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_new" groups="account.group_account_user">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>New</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="action_create_new">Journal Entry</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="col-4 o_kanban_card_manage_section o_kanban_manage_operations">
|
||||
<div class="o_kanban_card_manage_title">
|
||||
<span>Operations</span>
|
||||
</div>
|
||||
<div>
|
||||
<a type="object" name="open_action_with_context" context="{'action_name': 'action_validate_account_move', 'search_default_journal': True}" groups="account.group_account_user">Post All Entries</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div t-if="widget.editable" class="o_kanban_card_manage_settings row">
|
||||
<div class="col-8">
|
||||
<ul class="oe_kanban_colorpicker" data-field="color"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div groups="account.group_account_manager" class="row o_kanban_card_manage_settings">
|
||||
<div class="col-6 position-relative">
|
||||
<field name="show_on_dashboard" widget="boolean_favorite" />
|
||||
</div>
|
||||
<div class="col-6 text-end mt-1">
|
||||
<a class="dropdown-item" t-if="widget.editable" type="edit">Configuration</a>
|
||||
</div>
|
||||
<div class="row" t-if="dashboard.has_sequence_holes">
|
||||
<a name="show_sequence_holes" type="object" class="text-warning" t-att-title="dashboard.title_has_sequence_holes">
|
||||
Irregular Sequences
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalMiscelaneous">
|
||||
<div class="col-12 col-sm-4 mb-3 mb-sm-0 o_kanban_primary_left">
|
||||
<button id="new_misc_entry_button" type="object" name="action_create_new" class="btn btn-primary" groups="account.group_account_invoice">
|
||||
<span>New Entry</span>
|
||||
<div id="dashboard_misc_left" class="col mb-3 mb-sm-0">
|
||||
<button id="new_misc_entry_button" type="object" name="action_create_new" class="btn btn-primary float-start me-1" groups="account.group_account_user">
|
||||
New
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-12 col-sm-8 o_kanban_primary_right">
|
||||
<field name="json_activity_data" widget="kanban_vat_activity"/>
|
||||
<t t-if="dashboard.number_to_check > 0">
|
||||
<div class="row">
|
||||
<div id="dashboard_general_right" class="col-auto">
|
||||
<t t-if="dashboard.number_draft > 0">
|
||||
<div class="row" groups="account.group_account_user">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<a type="object" name="open_action" context="{'action_name': 'action_move_journal_line', 'search_default_to_check': True}"><t t-esc="dashboard.number_to_check"/> to check</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.to_check_balance"/></span>
|
||||
<a type="object" name="open_action" context="{'search_default_no_auto_post': 1, 'search_default_posted': 0, 'search_default_unposted': 1}"><t t-out="dashboard.number_draft"/> To Validate</a>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-call="JournalChecks"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalBodyBank">
|
||||
<t t-call="JournalBodyBankCash" t-name="bank_configuration_placeholder"/>
|
||||
</t>
|
||||
|
||||
<t t-name="JournalBodyBankCash">
|
||||
<!-- On the left, display :
|
||||
- A button corresponding to the bank_statements_source, if it wasn't configured, a button for each of them
|
||||
- If there are statements to reconcile, a link to reconcile them -->
|
||||
<div id="dashboard_bank_cash_left" class="col-12 col-sm-5 mb-3 mb-sm-0 o_kanban_primary_left">
|
||||
<t t-if="journal_type == 'bank'">
|
||||
<t t-if="dashboard.bank_statements_source == 'undefined'">
|
||||
<a t-if="dashboard.number_to_reconcile > 0" name="action_configure_bank_journal" type="object" class="oe_inline" groups="account.group_account_invoice">Connect</a>
|
||||
<button t-if="dashboard.number_to_reconcile == 0" name="action_configure_bank_journal" type="object" class="btn btn-primary" groups="account.group_account_invoice">Connect</button>
|
||||
</t>
|
||||
<div name="bank_journal_cta" class="mt-3 mt-sm-0"/>
|
||||
</t>
|
||||
<t t-if="journal_type == 'cash'">
|
||||
<a t-if="dashboard.number_to_reconcile > 0" type="object" name="create_cash_statement" class="oe_inline" groups="account.group_account_invoice">New Transaction</a>
|
||||
<button t-if="dashboard.number_to_reconcile == 0" type="object" name="create_cash_statement" class="btn btn-primary" groups="account.group_account_invoice">New Transaction</button>
|
||||
</t>
|
||||
<div id="dashboard_bank_cash_left" class="col mb-3 mb-sm-0 o_kanban_primary_left">
|
||||
<div name="bank_cash_buttons" class="d-flex gap-1">
|
||||
<t t-set="bank_requires_setup" t-value="!record.bank_account_id.raw_value and ['undefined', 'online_sync'].includes(dashboard.bank_statements_source)"/>
|
||||
<button t-if="journal_type == 'bank' and bank_requires_setup" name="action_configure_bank_journal" type="object" class="btn btn-primary" groups="account.group_account_basic">Bank Setup</button>
|
||||
<button id="all_transactions_btn" type="object" name="open_action" class="btn btn-primary">Transactions</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- On the right, show other common informations/actions -->
|
||||
<div id="dashboard_bank_cash_right" class="col-12 col-sm-7 o_kanban_primary_right">
|
||||
<div id="dashboard_bank_cash_right" class="col-auto" name="kanban_primary_right">
|
||||
<div class="row" t-if="dashboard.nb_lines_bank_account_balance > 0">
|
||||
<div id="dashboard_bank_cash_balance" class="col overflow-hidden text-start">
|
||||
<span>Running Balance</span>
|
||||
<span>Balance</span>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.account_balance"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.account_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" t-if="dashboard.nb_lines_outstanding_pay_account_balance > 0">
|
||||
<div id="dashboard_bank_cash_outstanding_balance" class="col overflow-hidden text-start">
|
||||
<span title="Outstanding Payments/Receipts">Outstanding Payments/Receipts</span>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.outstanding_pay_account_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="dashboard.has_at_least_one_statement and dashboard.account_balance != dashboard.last_balance">
|
||||
<t t-if="dashboard.has_at_least_one_statement and dashboard.account_balance != dashboard.last_balance and dashboard.last_statement_visible">
|
||||
<div class="row" name="latest_statement">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<span title="Latest Statement">Latest Statement</span>
|
||||
<span title="Latest Statement">Last Statement</span>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.last_balance"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.last_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<div class="row" t-if="dashboard.nb_lines_outstanding_pay_account_balance > 0">
|
||||
<div id="dashboard_bank_cash_outstanding_balance" class="col overflow-hidden text-start">
|
||||
<a
|
||||
type="action"
|
||||
name="%(account.action_account_all_payments)d"
|
||||
context="{'search_default_unmatched': True, 'search_default_journal_id': id, 'search_default_state_posted': True, }"
|
||||
>
|
||||
Payments
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span><t t-out="dashboard.outstanding_pay_account_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" t-if="dashboard.nb_misc_operations > 0" groups="account.group_account_readonly">
|
||||
<div id="dashboard_bank_cash_misc_total" class="col text-start">
|
||||
<a type="object" name="open_bank_difference_action" t-att-class="dashboard.misc_class">Misc. Operations</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span dir="ltr"><t t-out="dashboard.misc_operations_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-call="JournalChecks"/>
|
||||
<t t-if="dashboard.has_invalid_statements">
|
||||
<div class="row">
|
||||
<a type="object"
|
||||
name="open_invalid_statements_action"
|
||||
title="Invalid Statement(s)"
|
||||
class="text-danger">
|
||||
Invalid Statement(s)
|
||||
</a>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="JournalBodySalePurchase" id="account.JournalBodySalePurchase">
|
||||
<div class="col-12 col-sm-5 mb-3 mb-sm-0 o_kanban_primary_left">
|
||||
<div class="col mb-3 mb-sm-0" name="kanban_primary_left">
|
||||
<t t-if="journal_type == 'sale'">
|
||||
<button type="object" name="action_create_new" class="btn btn-primary o_invoice_new" groups="account.group_account_invoice">
|
||||
<span>New Invoice</span>
|
||||
<button type="object" name="action_create_new" class="btn btn-primary" groups="account.group_account_invoice">
|
||||
New
|
||||
</button>
|
||||
<widget name="account_onboarding" t-if="journal_is_empty and dashboard['onboarding']"/>
|
||||
</t>
|
||||
<t t-if="journal_type == 'purchase'">
|
||||
<t t-if="dashboard.entries_count > 0">
|
||||
<widget name="account_file_uploader" btnClass="btn btn-primary oe_kanban_action_button"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<button type="object" name="action_create_vendor_bill" class="btn btn-primary d-block" journal_type="purchase" groups="account.group_account_invoice">
|
||||
<span>Upload</span>
|
||||
</button>
|
||||
</t>
|
||||
<a type="object" name="action_create_new" class="o_invoice_new" groups="account.group_account_invoice">Create Manually</a>
|
||||
<div t-if="!journal_is_empty" class="d-flex">
|
||||
<widget name="account_file_uploader" btnClass="btn btn-primary oe_kanban_action"/>
|
||||
<div class="ms-1">
|
||||
<button type="object" name="action_create_new" class="btn-secondary " groups="account.group_account_invoice">New</button>
|
||||
</div>
|
||||
</div>
|
||||
<div t-else="">
|
||||
<widget name="account_file_uploader" btnClass="btn btn-primary oe_kanban_action"/>
|
||||
<widget name="bill_upload_guide"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-12 col-sm-7 o_kanban_primary_right">
|
||||
<div t-if="!journal_is_empty" class="col-auto" name="kanban_primary_right">
|
||||
<div class="row" t-if="dashboard.number_draft">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<a type="object" name="open_action" context="{'search_default_draft': '1'}">
|
||||
<span t-if="journal_type == 'sale'" title="Invoices to Validate"><t t-esc="dashboard.number_draft"/> Invoices to Validate</span>
|
||||
<span t-if="journal_type == 'purchase'" title="Bills to Validate"><t t-esc="dashboard.number_draft"/> Bills to Validate</span>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'search_default_draft': '1'}">
|
||||
<span title="Invoices to Validate"><t t-out="dashboard.number_draft"/> To Validate</span>
|
||||
</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'search_default_draft': '1'}">
|
||||
<span title="Bills to Validate" id="account_dashboard_purchase_draft"><t t-out="dashboard.number_draft"/> To Validate</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.sum_draft"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.sum_draft"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" t-if="dashboard.number_waiting">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<a type="object" t-if="journal_type == 'sale'" name="open_action"
|
||||
context="{'search_default_open':1, 'search_default_posted':1, 'search_default_partial': 1}" id="account_dashboard_sale_pay_link">
|
||||
<t t-esc="dashboard.number_waiting"/> Unpaid Invoices
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'search_default_open': '1', 'search_default_posted': '1', 'journal_type': type}">
|
||||
<span><t t-out="dashboard.number_waiting"/> Unpaid</span>
|
||||
</a>
|
||||
|
||||
<a type="object" t-if="journal_type == 'purchase'" name="open_action"
|
||||
context="{'search_default_open':1, 'search_default_posted':1, 'search_default_partial': 1}" id="account_dashboard_purchase_pay_link">
|
||||
<t t-esc="dashboard.number_waiting"/> Bills to Pay
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'search_default_open': '1', 'search_default_posted': '1', 'journal_type': type}">
|
||||
<span title="Bills to Pay" id="account_dashboard_bills_to_pay"><t t-out="dashboard.number_waiting"/> To Pay</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.sum_waiting"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.sum_waiting"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" t-if="dashboard.number_late">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<a type="object" name="open_action" context="{'search_default_late': '1'}">
|
||||
<span t-if="journal_type == 'sale'" title="Late Invoices"><t t-esc="dashboard.number_late"/> Late Invoices</span>
|
||||
<span t-if="journal_type == 'purchase'" title="Late Bills"><t t-esc="dashboard.number_late"/> Late Bills</span>
|
||||
<a t-if="journal_type == 'sale'" type="object" name="open_action" context="{'search_default_late': '1', 'search_default_posted': '1', 'journal_type': type}">
|
||||
<span title="Invoices late" id="account_dashboard_invoices_late">
|
||||
<t t-out="dashboard.number_late"/> Late
|
||||
</span>
|
||||
</a>
|
||||
<a t-if="journal_type == 'purchase'" type="object" name="open_action" context="{'search_default_late': '1', 'search_default_posted': '1', 'journal_type': type}">
|
||||
<span title="Bills Late" id="account_dashboard_bills_late">
|
||||
<t t-out="dashboard.number_late"/> Late
|
||||
</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.sum_late"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.sum_late"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="dashboard.number_to_check > 0">
|
||||
<div class="row">
|
||||
<div class="row" groups="account.group_account_user">
|
||||
<div class="col overflow-hidden text-start">
|
||||
<a type="object" name="open_action" context="{'search_default_to_check': True}"><t t-esc="dashboard.number_to_check"/> to check</a>
|
||||
<a type="object" name="open_action" context="{'search_default_to_check': True}"><t t-out="dashboard.number_to_check"/> To Review</a>
|
||||
</div>
|
||||
<div class="col-auto text-end">
|
||||
<span class="o_kanban_monetary"><t t-esc="dashboard.to_check_balance"/></span>
|
||||
<span dir="ltr"><t t-out="dashboard.to_check_balance"/></span>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-call="JournalChecks"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="JournalBodyGraph">
|
||||
<field name="kanban_dashboard_graph" t-att-graph_type="['cash','bank'].includes(journal_type) ? 'line' : 'bar'" widget="dashboard_graph"/>
|
||||
<field name="kanban_dashboard_graph" t-att-graph_type="['cash', 'bank', 'credit'].includes(journal_type) ? 'line' : 'bar'" widget="dashboard_graph"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -369,7 +389,8 @@
|
|||
</record>
|
||||
|
||||
<record id="open_account_journal_dashboard_kanban" model="ir.actions.act_window">
|
||||
<field name="name">Accounting Dashboard</field>
|
||||
<field name="name">Dashboard</field>
|
||||
<field name="path">accounting</field>
|
||||
<field name="res_model">account.journal</field>
|
||||
<field name="view_mode">kanban,form</field>
|
||||
<field name="view_id" ref="account_journal_dashboard_kanban_view"/>
|
||||
|
|
|
|||
|
|
@ -3,22 +3,22 @@
|
|||
<data>
|
||||
|
||||
<record id="view_account_journal_tree" model="ir.ui.view">
|
||||
<field name="name">account.journal.tree</field>
|
||||
<field name="name">account.journal.list</field>
|
||||
<field name="model">account.journal</field>
|
||||
<field name="priority">1</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Journal">
|
||||
<list string="Account Journal">
|
||||
<field name='sequence' widget='handle'/>
|
||||
<field name="name"/>
|
||||
<field name="type"/>
|
||||
<field name="journal_group_ids" widget="many2many_tags" readonly="1" optional="show"/>
|
||||
<field name="journal_group_ids" widget="many2many_tags" readonly="1" optional="hide"/>
|
||||
<field name="currency_id" groups="base.group_multi_currency" optional="hide"/>
|
||||
<field name="code" optional="show"/>
|
||||
<field name="default_account_id" optional="show"/>
|
||||
<field name="active" optional="hide"/>
|
||||
<field name="company_id" groups="base.group_multi_company" optional="hide"/>
|
||||
<field name="company_id" groups="!base.group_multi_company" invisible="1"/>
|
||||
</tree>
|
||||
<field name="company_id" groups="!base.group_multi_company" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -33,18 +33,24 @@
|
|||
<sheet>
|
||||
<div name="button_box" class="oe_button_box">
|
||||
<button class="oe_stat_button" type="action"
|
||||
name="%(action_account_moves_all_a)d" icon="fa-book" string="Journal Entries"
|
||||
context="{'search_default_journal_id':active_id}"/>
|
||||
name="%(action_account_moves_all_a)d" icon="fa-book"
|
||||
context="{'search_default_journal_id':id}">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_text">Journal Entries</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1><field name="name" placeholder="e.g. Customer Invoices"/></h1>
|
||||
<field name="name_placeholder" invisible="1" force_save="1"/>
|
||||
<h1><field name="name" options="{'placeholder_field': 'name_placeholder'}" required="not type"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="type"/>
|
||||
<field name="code" placeholder="e.g. INV"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
|
|
@ -54,120 +60,134 @@
|
|||
<notebook>
|
||||
<page name="bank_account" string="Journal Entries">
|
||||
<group>
|
||||
<group string="Accounting Information">
|
||||
<group>
|
||||
<field name="default_account_type" invisible="1"/>
|
||||
<label for="default_account_id" string="Bank Account"
|
||||
attrs="{'invisible': [('type', '!=', 'bank')]}" groups="account.group_account_readonly"/>
|
||||
invisible="type != 'bank'" groups="account.group_account_readonly"/>
|
||||
<label for="default_account_id" string="Journal Account"
|
||||
invisible="type != 'credit'" groups="account.group_account_readonly"/>
|
||||
<label for="default_account_id" string="Cash Account"
|
||||
attrs="{'invisible': [('type', '!=', 'cash')]}" groups="account.group_account_readonly"/>
|
||||
invisible="type != 'cash'" groups="account.group_account_readonly"/>
|
||||
<label for="default_account_id" string="Default Income Account"
|
||||
attrs="{'invisible': [('type', '!=', 'sale')]}" groups="account.group_account_readonly"/>
|
||||
invisible="type != 'sale'" groups="account.group_account_readonly"/>
|
||||
<label for="default_account_id" string="Default Expense Account"
|
||||
attrs="{'invisible': [('type', '!=', 'purchase')]}" groups="account.group_account_readonly"/>
|
||||
invisible="type != 'purchase'" groups="account.group_account_readonly"/>
|
||||
<label for="default_account_id" string="Default Account"
|
||||
help="If set, this account is used to automatically balance entries."
|
||||
invisible="type != 'general'" groups="account.group_account_readonly"/>
|
||||
<field name="default_account_id" nolabel="1"
|
||||
attrs="{'required': ['|', '&', ('id', '!=', False), ('type', 'in', ('bank', 'cash')), ('type', 'in', ('sale', 'purchase'))],
|
||||
'invisible': [('type', 'in', (False, 'general'))]}"
|
||||
placeholder="Create new account"
|
||||
invisible="not type or type in ('sale', 'purchase', 'general')"
|
||||
required="(id and type in ('bank', 'cash', 'credit'))"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
<field name="default_account_id" nolabel="1"
|
||||
invisible="type not in ('sale', 'purchase', 'general')"
|
||||
required="type in ('sale', 'purchase')"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
<field name="suspense_account_id"
|
||||
attrs="{'required': [('type', 'in', ('bank', 'cash'))], 'invisible': [('type', 'not in', ('bank', 'cash'))]}"
|
||||
invisible="type not in ('bank', 'cash', 'credit')"
|
||||
required="type in ('bank', 'cash', 'credit')"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
<field name="profit_account_id" attrs="{'invisible': ['!', ('type', 'in', ('cash', 'bank'))]}"/>
|
||||
<field name="loss_account_id" attrs="{'invisible': ['!', ('type', 'in', ('cash', 'bank'))]}"/>
|
||||
<field name="refund_sequence" attrs="{'invisible': [('type', 'not in', ['sale', 'purchase'])]}"/>
|
||||
<field name="payment_sequence" attrs="{'invisible': [('type', 'not in', ('bank', 'cash'))]}"/>
|
||||
<field name="code" placeholder="e.g. INV"/>
|
||||
<field name="non_deductible_account_id"
|
||||
invisible="type != 'purchase'"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
<field name="profit_account_id" invisible="type not in ('cash', 'bank')" groups="account.group_account_readonly"/>
|
||||
<field name="loss_account_id" invisible="type not in ('cash', 'bank')" groups="account.group_account_readonly"/>
|
||||
<field name="refund_sequence" invisible="type not in ['sale', 'purchase']"/>
|
||||
<field name="payment_sequence" invisible="type not in ('bank', 'cash', 'credit')"/>
|
||||
<field name="invoice_template_pdf_report_id"
|
||||
invisible="not display_invoice_template_pdf_report_id"
|
||||
options="{'no_create': True, 'no_edit': True}"/>
|
||||
<field name="currency_id" options="{'no_create': True}" groups="base.group_multi_currency"/>
|
||||
</group>
|
||||
<group name="bank_account_number" string="Bank Account Number" attrs="{'invisible': [('type', '!=', 'bank')]}">
|
||||
<group name="bank_account_number" invisible="type != 'bank'">
|
||||
<field name="company_partner_id" invisible="1"/>
|
||||
<field name="bank_account_id" string="Account Number" context="{'default_partner_id': company_partner_id}"/>
|
||||
<field name="bank_id" attrs="{'invisible': [('bank_account_id', '=', False)]}"/>
|
||||
<field name="bank_statements_source" widget="radio" attrs="{'required': [('type', '=', 'bank')]}" groups="account.group_account_readonly"/>
|
||||
<field name="bank_account_id" string="Bank Account Number" context="{'default_partner_id': company_partner_id}"/>
|
||||
<field name="bank_id" invisible="not bank_account_id"/>
|
||||
<field name="bank_statements_source" widget="radio" required="type == 'bank'" groups="account.group_account_basic"/>
|
||||
</group>
|
||||
<group name="bank_source" invisible="type != 'credit'">
|
||||
<label for="bank_statements_source" string="Transaction Feeds" invisible="type != 'credit'" groups="account.group_account_readonly"/>
|
||||
<field name="bank_statements_source" nolabel="1" widget="radio" required="type == 'credit'" groups="account.group_account_basic"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page id="inbound_payment_settings" string="Incoming Payments" attrs="{'invisible': [('type', 'not in', ['cash', 'bank'])]}">
|
||||
<page id="inbound_payment_settings" string="Incoming Payments" name="page_incoming_payments" invisible="type not in ['cash', 'bank', 'credit']">
|
||||
<field name="available_payment_method_ids" invisible="1"/>
|
||||
<field name="inbound_payment_method_line_ids" nolabel="1" context="{'default_payment_type': 'inbound'}">
|
||||
<tree string="Payment Methods" editable="bottom">
|
||||
<field name="available_payment_method_ids" invisible="1"/>
|
||||
<field name="payment_type" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<list string="Payment Methods" editable="bottom">
|
||||
<field name="available_payment_method_ids" column_invisible="True"/>
|
||||
<field name="payment_type" column_invisible="True"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="payment_method_id" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="name"/>
|
||||
<field name="payment_account_id"
|
||||
placeholder="Leave empty to use the default outstanding account"
|
||||
placeholder="No payment journal entries"
|
||||
string="Outstanding Receipts accounts"
|
||||
optional="hide"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page id="outbound_payment_settings" string="Outgoing Payments" attrs="{'invisible': [('type', 'not in', ['cash', 'bank'])]}">
|
||||
<page id="outbound_payment_settings" string="Outgoing Payments" name="page_outgoing_payments" invisible="type not in ['cash', 'bank', 'credit']">
|
||||
<field name="outbound_payment_method_line_ids" nolabel="1" context="{'default_payment_type': 'outbound'}">
|
||||
<tree string="Payment Methods" editable="bottom" nolabel="1">
|
||||
<field name="available_payment_method_ids" invisible="1"/>
|
||||
<field name="payment_type" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<list string="Payment Methods" editable="bottom">
|
||||
<field name="available_payment_method_ids" column_invisible="True"/>
|
||||
<field name="payment_type" column_invisible="True"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="payment_method_id" options="{'no_create': True, 'no_open': True}"/>
|
||||
<field name="name"/>
|
||||
<field name="payment_account_id"
|
||||
placeholder="Leave empty to use the default outstanding account"
|
||||
placeholder="No payment journal entries"
|
||||
string="Outstanding Payments accounts"
|
||||
optional="hide"
|
||||
options="{'no_quick_create': True}"
|
||||
groups="account.group_account_readonly"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
<field name="selected_payment_method_codes" invisible="1"/>
|
||||
<group name="outgoing_payment" />
|
||||
</page>
|
||||
<page name="advanced_settings" string="Advanced Settings">
|
||||
<group>
|
||||
<group string="Control-Access" groups="account.group_account_manager">
|
||||
<div class="text-muted" colspan="2">Keep empty for no control</div>
|
||||
<field name="account_control_ids" widget="many2many_tags" options="{'no_create_edit': True}"/>
|
||||
<field name="restrict_mode_hash_table" groups="account.group_account_readonly" attrs="{'invisible': [('type', 'in', ['bank', 'cash'])]}"/>
|
||||
<group string="Automation" groups="account.group_account_manager">
|
||||
<field name="restrict_mode_hash_table" groups="account.group_account_readonly" invisible="type not in ['sale', 'purchase', 'general']"
|
||||
/>
|
||||
<field name="is_self_billing" invisible="type != 'purchase'"/>
|
||||
</group>
|
||||
<!-- email alias -->
|
||||
<group class="oe_read_only" name="group_alias_ro" string="Create Invoices upon Emails" attrs="{'invisible': ['|', ('type', 'not in', ('sale' ,'purchase')), ('alias_domain', '=', False)]}">
|
||||
<field name="alias_id"/>
|
||||
</group>
|
||||
<group name="group_alias_no_domain" string="Create Invoices upon Emails" attrs="{'invisible': ['|', ('type', 'not in', ('sale' ,'purchase')), ('alias_domain', '!=', False)]}">
|
||||
<div class="content-group" colspan="2">
|
||||
<a type='action' name='%(action_open_settings)d' class="btn btn-link" role="button"><i class="fa fa-fw o_button_icon fa-arrow-right"/> Configure Email Servers</a>
|
||||
<group string="Emails" name="group_email_alias"
|
||||
invisible="type not in ('general', 'sale', 'purchase')">
|
||||
<field name="display_alias_fields" invisible="1"/>
|
||||
<div class="o_row" colspan="2" invisible="display_alias_fields">
|
||||
<a type='action' name='%(action_open_settings)d' class="btn btn-link" role="button">
|
||||
<i class="oi oi-fw o_button_icon oi-arrow-right"/> Configure Alias Domain
|
||||
</a>
|
||||
</div>
|
||||
</group>
|
||||
<group class="oe_edit_only" name="group_alias_edit" string="Create Invoices upon Emails" attrs="{'invisible': ['|', ('type', 'not in', ('sale' ,'purchase')), ('alias_domain', '=', False)]}">
|
||||
<label string="Email Alias" for="alias_name"/>
|
||||
<div class="oe_inline" name="edit_alias" style="display: inline;" dir="ltr">
|
||||
<field name="alias_name" class="oe_inline"/>@<field name="alias_domain" class="oe_inline" readonly="1"/>
|
||||
<div class="o_row" colspan="2" dir="ltr" invisible="not display_alias_fields">
|
||||
<label string="Email Alias" for="alias_name"/>
|
||||
<field name="alias_name" placeholder="alias"/>@
|
||||
<field name="alias_domain_id" placeholder="e.g. mycompany.com" options="{'no_create': True, 'no_open': True}"/>
|
||||
</div>
|
||||
<field name="incoming_einvoice_notification_email"
|
||||
placeholder="e.g. finance@example.com; accountant@example.com"
|
||||
class="w-100"/>
|
||||
</group>
|
||||
<!-- email alias end -->
|
||||
<group string="Payment Communications" attrs="{'invisible': [('type', '!=', 'sale')]}">
|
||||
<!-- edi -->
|
||||
<group name="group_edi_config" string="Electronic Data Interchange" invisible="1"/>
|
||||
<group string="Payment Communications" invisible="type != 'sale'">
|
||||
<field name="invoice_reference_type"/>
|
||||
<field name="invoice_reference_model" attrs="{'invisible': [('invoice_reference_type', '=', 'none')]}"/>
|
||||
</group>
|
||||
<group string="Follow Customer Payments" attrs="{'invisible': [('type', '!=', 'sale')]}">
|
||||
<field name="sale_activity_type_id" options="{'no_quick_create': True}"/>
|
||||
<field name="sale_activity_user_id" attrs="{'invisible': [('sale_activity_type_id', '=', False)]}" options="{'no_quick_create': True}"/>
|
||||
<field name="sale_activity_note" placeholder="e.g. Give a phone call, check with others , ..." attrs="{'invisible': [('sale_activity_type_id', '=', False)]}"/>
|
||||
<field name="invoice_reference_model" invisible="invoice_reference_type == 'none'"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -179,16 +199,12 @@
|
|||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<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="name"/></strong>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<span class="float-end"><field name="type"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-name="card" class="row g-0">
|
||||
<div class="col-6">
|
||||
<field class="fw-bolder" name="name"/>
|
||||
</div>
|
||||
<div class="col-6 ">
|
||||
<field class="float-end" name="type"/>
|
||||
</div>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
@ -203,12 +219,14 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Search Account Journal">
|
||||
<field name="name" string="Journal" filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"/>
|
||||
<field name="activity_user_id" string="Activities of"/>
|
||||
<field name="activity_type_id" string="Activity type"/>
|
||||
<filter name="dashboard" string="Favorites" domain="[('show_on_dashboard', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter name="sales" string="Sales" domain="[('type', '=', 'sale')]"/>
|
||||
<filter name="purchases" string="Purchases" domain="[('type', '=', 'purchase')]"/>
|
||||
<filter name="liquidity" string="Liquidity" domain="['|', ('type', '=', 'cash'), ('type', '=', 'bank')]"/>
|
||||
<filter name="miscellaneous" string="Miscellaneous" domain="[('type', 'not in', ['sale', 'purchase', 'cash', 'bank'])]"/>
|
||||
<filter name="liquidity" string="Liquidity" domain="[('type', 'in', ('cash', 'bank', 'credit'))]"/>
|
||||
<filter name="miscellaneous" string="Miscellaneous" domain="[('type', 'not in', ['sale', 'purchase', 'cash', 'bank', 'credit'])]"/>
|
||||
<separator/>
|
||||
<filter name="inactive" string="Archived" domain="[('active', '=', False)]"/>
|
||||
</search>
|
||||
|
|
@ -218,9 +236,9 @@
|
|||
<record id="action_account_journal_form" model="ir.actions.act_window">
|
||||
<field name="name">Journals</field>
|
||||
<field name="res_model">account.journal</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('view_account_journal_tree')}),
|
||||
(0, 0, {'view_mode': 'list', 'view_id': ref('view_account_journal_tree')}),
|
||||
(0, 0, {'view_mode': 'kanban', 'view_id': ref('account_journal_view_kanban')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('view_account_journal_form')})]"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -234,17 +252,19 @@
|
|||
</record>
|
||||
|
||||
<record id="view_account_journal_group_tree" model="ir.ui.view">
|
||||
<field name="name">account.journal.group.tree</field>
|
||||
<field name="name">account.journal.group.list</field>
|
||||
<field name="model">account.journal.group</field>
|
||||
<field name="priority">1</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<list editable="bottom">
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="excluded_journal_ids" widget="many2many_tags" options="{'no_create': True}"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
<field name="name" placeholder="e.g. GAAP, IFRS, ..."/>
|
||||
<field name="excluded_journal_ids"
|
||||
widget="many2many_tags_journals"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="company_id" groups="base.group_multi_company" placeholder="Visible to all" options="{'no_create': True}"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -253,12 +273,14 @@
|
|||
<field name="model">account.journal.group</field>
|
||||
<field name="priority">1</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Journal Groups">
|
||||
<form string="Multi-ledger">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="name" placeholder="e.g. GAAP, IFRS, ..."/>
|
||||
<field name="excluded_journal_ids" widget="many2many_tags" options="{'no_create': True}"/>
|
||||
<field name="excluded_journal_ids"
|
||||
widget="many2many_tags_journals"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="sequence" groups="base.group_no_one"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
|
|
@ -268,14 +290,16 @@
|
|||
</record>
|
||||
|
||||
<record id="action_account_journal_group_list" model="ir.actions.act_window">
|
||||
<field name="name">Journal Groups</field>
|
||||
<field name="name">Multi-ledger</field>
|
||||
<field name="res_model">account.journal.group</field>
|
||||
<field name="path">multi-ledger</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Add a journal group
|
||||
</p><p>
|
||||
Journal group are used in reporting to display relevant data together.
|
||||
</p>
|
||||
<p class="o_view_nocontent_multi_ledger"/>
|
||||
<h2 class="d-md-block">Ledger group allows managing multiple accounting standards.</h2>
|
||||
<p>
|
||||
Create as many ledger groups as needed to maintain separate ledgers for local GAAP, IFRS, or fiscal
|
||||
adjustments, ensuring compliance with diverse regulations.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_account_lock_exception_form" model="ir.ui.view">
|
||||
<field name="name">account.lock_exception.form</field>
|
||||
<field name="model">account.lock_exception</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Lock Exception">
|
||||
<header>
|
||||
<field name="active" invisible="True"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="active,expired" invisible="not active"/>
|
||||
<button string="Revoke" invisible="state != 'active'" class="btn-secondary"
|
||||
type="object" name="action_revoke"/>
|
||||
</header>
|
||||
<sheet>
|
||||
<widget name="web_ribbon" title="Revoked" bg_color="bg-danger" invisible="active"/>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" name="action_show_audit_trail_during_exception"
|
||||
type="object" icon="fa-bars">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_text">
|
||||
Audit
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<div>
|
||||
<div class="oe_title">
|
||||
<h2><field name="display_name" decoration-bf="1"/></h2>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="create_uid" readonly="True"/>
|
||||
<label for="user_id" string="Valid for"/>
|
||||
<field name="user_id" readonly="True" invisible="not user_id" nolabel="1"/>
|
||||
<span invisible="user_id">everyone</span>
|
||||
<field name="reason" readonly="True" invisible="not reason"/>
|
||||
<field name="create_date" readonly="True"/>
|
||||
<field name="end_datetime" readonly="True"/>
|
||||
</group>
|
||||
<group>
|
||||
<div colspan="2" class="o_wrap_label">
|
||||
<span class="o_form_label">Changed Lock Date:</span>
|
||||
</div>
|
||||
|
||||
<div class="o_wrap_label">
|
||||
<field name="lock_date_field" class="o_form_label o_form_label_readonly" nolabel="1" readonly="True"/>
|
||||
</div>
|
||||
<div>
|
||||
<field name="lock_date" nolabel="1" class="oe_inline" readonly="True"/>
|
||||
<i class="text-muted">
|
||||
(from <field name="company_lock_date" class="oe_inline" readonly="True"/>)
|
||||
</i>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
</div>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
@ -6,69 +6,66 @@
|
|||
groups="account.group_account_readonly,account.group_account_invoice"
|
||||
web_icon="account,static/description/icon.png"
|
||||
sequence="55">
|
||||
<menuitem id="menu_board_journal_1" name="Dashboard" action="open_account_journal_dashboard_kanban" groups="account.group_account_readonly" sequence="1"/>
|
||||
<menuitem id="menu_board_journal_1" name="Dashboard" action="open_account_journal_dashboard_kanban" groups="account.group_account_basic" sequence="1"/>
|
||||
<menuitem id="menu_finance_receivables" name="Customers" sequence="2">
|
||||
<menuitem id="menu_action_move_out_invoice_type" action="action_move_out_invoice_type" sequence="1"/>
|
||||
<menuitem id="menu_action_move_out_refund_type" action="action_move_out_refund_type" sequence="2"/>
|
||||
<menuitem id="menu_action_move_out_receipt_type" action="action_move_out_receipt_type" groups="account.group_sale_receipts" sequence="3"/>
|
||||
<menuitem id="menu_action_account_payments_receivable" action="action_account_payments" sequence="15"/>
|
||||
<menuitem id="menu_action_move_out_invoice_type" action="action_move_out_invoice" sequence="1"/>
|
||||
<menuitem id="menu_action_move_out_refund_type" action="action_move_out_refund_type_non_legacy" sequence="2"/>
|
||||
<menuitem id="menu_action_account_payments_receivable" name="Payments" action="action_account_payments" sequence="15"/>
|
||||
<menuitem id="product_product_menu_sellable" name="Products" action="product_product_action_sellable" sequence="100"/>
|
||||
<menuitem id="menu_account_customer" name="Customers" action="res_partner_action_customer" sequence="110"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_payables" name="Vendors" sequence="3">
|
||||
<menuitem id="menu_action_move_in_invoice_type" action="action_move_in_invoice_type" sequence="1"/>
|
||||
<menuitem id="menu_action_move_in_invoice_type" action="action_move_in_invoice" sequence="1"/>
|
||||
<menuitem id="menu_action_move_in_refund_type" action="action_move_in_refund_type" sequence="2"/>
|
||||
<menuitem id="menu_action_move_in_receipt_type" action="action_move_in_receipt_type" groups="account.group_purchase_receipts" sequence="3"/>
|
||||
<menuitem id="menu_action_account_payments_payable" action="action_account_payments_payable" sequence="20"/>
|
||||
<menuitem id="menu_action_account_payments_payable" name="Payments" action="action_account_payments_payable" sequence="20"/>
|
||||
<menuitem id="product_product_menu_purchasable" name="Products" action="product_product_action_purchasable" sequence="100"/>
|
||||
<menuitem id="menu_account_supplier" name="Vendors" action="account.res_partner_action_supplier" sequence="200"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_entries" name="Accounting" sequence="4" groups="account.group_account_readonly">
|
||||
<menuitem id="menu_finance_entries_accounting_miscellaneous" name="Journals" sequence="1">
|
||||
<menuitem id="account_transactions_menu" name="Transactions" groups="account.group_account_readonly" sequence="0">
|
||||
<menuitem id="menu_action_move_journal_line_form" action="action_move_journal_line" groups="account.group_account_readonly" sequence="1"/>
|
||||
<menuitem id="menu_action_account_moves_all" action="action_account_moves_all" groups="account.group_account_readonly" sequence="10"/>
|
||||
<menuitem id="menu_action_analytic_lines_tree" name="Analytic Items" action="analytic.account_analytic_line_action_entries" groups="analytic.group_analytic_accounting" sequence="31"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_entries_management" name="Management" sequence="10" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<menuitem id="menu_action_analytic_lines_tree" name="Analytic Items" action="analytic.account_analytic_line_action_entries" groups="analytic.group_analytic_accounting" sequence="50"/>
|
||||
<menuitem id="account_closing_menu" name="Closing" groups="account.group_account_readonly" sequence="20"/>
|
||||
</menuitem>
|
||||
<menuitem id="account_audit_menu" name="Review" sequence="7" groups="account.group_account_readonly">
|
||||
<menuitem id="account_audit_control_menu" name="Control" sequence="20" groups="account.group_account_readonly">
|
||||
<menuitem id="menu_action_account_moves_all" action="action_account_moves_all" groups="account.group_account_readonly" sequence="6"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_entries_generate_entries" name="Generate Entries"/>
|
||||
<menuitem id="menu_finance_entries_actions" name="Actions" sequence="11" groups="account.group_account_user"/>
|
||||
<menuitem id="account_logs_menu" name="Logs" sequence="60"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_reports" name="Reporting" sequence="20" groups="account.group_account_readonly,account.group_account_invoice">
|
||||
<menuitem id="account_reports_management_menu" name="Management" sequence="4">
|
||||
<menuitem id="account_reports_partners_reports_menu" name="Partner Reports" sequence="3"/>
|
||||
<menuitem id="account_reports_taxes_and_fiscal_menu" name="Taxes & Fiscal" sequence="4"/>
|
||||
<menuitem id="account_reports_management_menu" name="Management" sequence="5">
|
||||
<menuitem id="menu_action_account_invoice_report_all" name="Invoice Analysis" action="action_account_invoice_report_all" sequence="1"/>
|
||||
<menuitem id="menu_action_analytic_reporting" name="Analytic Report" action="action_analytic_reporting" groups="account.group_account_readonly"/>
|
||||
</menuitem>
|
||||
<menuitem id="account_reports_legal_statements_menu" name="Statement Reports" sequence="1" groups="account.group_account_readonly"/>
|
||||
<menuitem id="account_reports_legal_statements_menu" name="Statement Reports" sequence="1" groups="account.group_account_readonly,account.group_account_basic"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_finance_configuration" name="Configuration" sequence="35" groups="account.group_account_manager">
|
||||
<menuitem id="menu_account_config" name="Settings" action="action_account_config" groups="base.group_system" sequence="0"/>
|
||||
<menuitem id="account_invoicing_menu" name="Invoicing" groups="account.group_account_invoice,account.group_account_readonly" sequence="1">
|
||||
<menuitem id="menu_action_payment_term_form" action="action_payment_term_form" sequence="1"/>
|
||||
<menuitem id="menu_action_incoterm_open" action="action_incoterms_tree" groups="account.group_account_manager" sequence="3"/>
|
||||
</menuitem>
|
||||
<menuitem id="account_banks_menu" name="Banks" groups="account.group_account_manager" sequence="2">
|
||||
<menuitem id="menu_action_account_bank_journal_form" action="action_new_bank_setting" groups="account.group_account_manager" sequence="1"/>
|
||||
<menuitem id="action_account_reconcile_model_menu" action="account.action_account_reconcile_model" sequence="3" groups="account.group_account_user"/>
|
||||
</menuitem>
|
||||
<menuitem id="account_account_menu" name="Accounting" groups="account.group_account_manager" sequence="3">
|
||||
<menuitem id="account_account_menu" name="Accounting" groups="account.group_account_manager" sequence="10">
|
||||
<menuitem id="menu_action_account_form" action="action_account_form" groups="account.group_account_readonly" sequence="1"/>
|
||||
<menuitem id="menu_action_tax_form" action="action_tax_form" sequence="2"/>
|
||||
<menuitem id="menu_action_account_journal_form" action="action_account_journal_form" groups="account.group_account_manager" sequence="3"/>
|
||||
<menuitem id="account_report_folder" name="Reporting" groups="account.group_account_readonly" sequence="4"/>
|
||||
<menuitem id="menu_action_currency_form" action="base.action_currency_form" name="Currencies" sequence="4"/>
|
||||
<menuitem id="menu_action_account_fiscal_position_form" action="action_account_fiscal_position_form" sequence="5"/>
|
||||
<menuitem id="menu_action_account_journal_group_list" action="action_account_journal_group_list" groups="account.group_account_manager" sequence="7"/>
|
||||
<menuitem id="menu_action_tax_group" action="action_tax_group" sequence="8" groups="base.group_no_one"/>
|
||||
<menuitem id="menu_action_currency_form" action="base.action_currency_form" name="Currencies" sequence="5"/>
|
||||
<menuitem id="menu_action_account_fiscal_position_form" action="action_account_fiscal_position_form" sequence="6"/>
|
||||
<menuitem id="menu_action_account_journal_group_list" name="Multi-Ledger" action="action_account_journal_group_list" groups="account.group_account_readonly" sequence="7"/>
|
||||
<menuitem id="menu_action_tax_group" action="action_tax_group" groups="base.group_no_one" sequence="8"/>
|
||||
<menuitem id="menu_action_rounding_form_view" action="rounding_list_action" groups="account.group_cash_rounding" sequence="9"/>
|
||||
</menuitem>
|
||||
<menuitem id="root_payment_menu" name="Payments" groups="account.group_account_manager" sequence="4"/>
|
||||
<menuitem id="account_management_menu" name="Management" groups="account.group_account_manager" sequence="5">
|
||||
<menuitem id="menu_product_product_categories" action="product.product_category_action_form" sequence="3"/>
|
||||
<menuitem id="menu_action_rounding_form_view" action="rounding_list_action" groups="account.group_cash_rounding" sequence="4"/>
|
||||
<menuitem id="account_invoicing_menu" name="Invoicing" groups="account.group_account_invoice,account.group_account_readonly" sequence="20">
|
||||
<menuitem id="menu_action_payment_term_form" action="action_payment_term_form" sequence="10"/>
|
||||
<menuitem id="menu_action_incoterm_open" action="action_incoterms_tree" groups="base.group_no_one" sequence="20"/>
|
||||
<menuitem id="menu_product_product_categories" name="Product Categories" action="product.product_category_action_form" sequence="30"/>
|
||||
</menuitem>
|
||||
<menuitem id="menu_analytic_accounting" name="Analytic Accounting" groups="analytic.group_analytic_accounting" sequence="6">
|
||||
<menuitem id="menu_analytic__distribution_model" name="Analytic Distribution Models" action="analytic.action_analytic_distribution_model" groups="analytic.group_analytic_accounting" sequence="1"/>
|
||||
<menuitem id="account_analytic_def_account" action="analytic.action_account_analytic_account_form" groups="analytic.group_analytic_accounting" sequence="1"/>
|
||||
<menuitem id="account_analytic_plan_menu" name="Analytic Plans" action="analytic.account_analytic_plan_action" groups="analytic.group_analytic_accounting" sequence="2"/>
|
||||
<menuitem id="root_payment_menu" name="Online Payments" groups="account.group_account_manager" sequence="30"/>
|
||||
<menuitem id="menu_analytic_accounting" name="Analytic Accounting" groups="analytic.group_analytic_accounting" sequence="40">
|
||||
<menuitem id="menu_analytic__distribution_model" name="Analytic Distribution Models" action="analytic.action_analytic_distribution_model" groups="analytic.group_analytic_accounting" sequence="10"/>
|
||||
<menuitem id="account_analytic_def_account" action="analytic.action_account_analytic_account_form" groups="analytic.group_analytic_accounting" sequence="20"/>
|
||||
<menuitem id="account_analytic_plan_menu" name="Analytic Plans" action="analytic.account_analytic_plan_action" groups="analytic.group_analytic_accounting" sequence="30"/>
|
||||
</menuitem>
|
||||
</menuitem>
|
||||
</menuitem>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,149 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<!-- ONBOARDING STEPS -->
|
||||
<template id="onboarding_invoice_layout_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Invoice Layout</t>
|
||||
<t t-set="description">Customize the look of your invoices.</t>
|
||||
<t t-set="done_icon" t-value="'fa-star'" />
|
||||
<t t-set="btn_text">Customize</t>
|
||||
<t t-set="done_text">Looks great!</t>
|
||||
<t t-set="method" t-value="'action_open_base_document_layout'" />
|
||||
<t t-set="model" t-value="'base.document.layout'" />
|
||||
<t t-set="state" t-value="state.get('account_onboarding_invoice_layout_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="onboarding_create_invoice_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Create Invoice</t>
|
||||
<t t-set="description">
|
||||
Create your first invoice.
|
||||
</t>
|
||||
<t t-set="btn_text">Create</t>
|
||||
<t t-set="done_text">First invoice sent!</t>
|
||||
<t t-set="method" t-value="'action_open_account_onboarding_create_invoice'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_onboarding_create_invoice_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="onboarding_bank_account_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Bank Account</t>
|
||||
<t t-set="description">
|
||||
Connect your financial accounts in seconds.
|
||||
</t>
|
||||
<t t-set="btn_text">Add a bank account</t>
|
||||
<t t-set="done_text">Step Completed!</t>
|
||||
<t t-set="method" t-value="'setting_init_bank_account_action'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_setup_bank_data_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="onboarding_fiscal_year_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Accounting Periods</t>
|
||||
<t t-set="description">Define your fiscal years & tax returns periodicity.</t>
|
||||
<t t-set="btn_text">Configure</t>
|
||||
<t t-set="done_text">Step Completed!</t>
|
||||
<t t-set="method" t-value="'setting_init_fiscal_year_action'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_setup_fy_data_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="onboarding_chart_of_account_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Chart of Accounts</t>
|
||||
<t t-set="description">Setup your chart of accounts and record initial balances.</t>
|
||||
<t t-set="btn_text">Review</t>
|
||||
<t t-set="done_text">Chart of accounts set.</t>
|
||||
<t t-set="method" t-value="'setting_chart_of_accounts_action'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_setup_coa_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="onboarding_taxes_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Taxes</t>
|
||||
<t t-set="description">Set default Taxes for sales and purchase transactions.</t>
|
||||
<t t-set="btn_text">Review</t>
|
||||
<t t-set="done_text">Taxes set.</t>
|
||||
<t t-set="method" t-value="'action_open_taxes_onboarding'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_setup_taxes_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<!-- ONBOARDING PANELS -->
|
||||
<template id="account_invoice_onboarding_panel" name="account.invoice.onboarding.panel">
|
||||
<t t-call="base.onboarding_container">
|
||||
<t t-set="classes" t-value="'o_onboarding_blue'"/>
|
||||
<t t-set="bg_image" t-value="'/account/static/src/img/account_invoice_onboarding_bg.jpg'"/>
|
||||
<t t-set="close_method" t-value="'action_close_account_invoice_onboarding'"/>
|
||||
<t t-set="close_model" t-value="'res.company'"/>
|
||||
<t t-set="text_completed">Congratulations! You are all set.</t>
|
||||
|
||||
<t t-call="base.onboarding_company_step" name="company_step" />
|
||||
<t t-call="account.onboarding_bank_account_step" name="bank_account_step" t-if="not env.user.has_group('account.group_account_user')"/>
|
||||
<t t-call="account.onboarding_invoice_layout_step" name="invoice_layout_step" />
|
||||
<t t-call="account.onboarding_create_invoice_step" name="create_invoice_step" />
|
||||
</t>
|
||||
</template>
|
||||
<template id="account_dashboard_onboarding_panel" name="account.dashboard.onboarding.panel">
|
||||
<t t-call="base.onboarding_container">
|
||||
<t t-set="classes" t-value="'o_onboarding_orange'"/>
|
||||
<t t-set="bg_image" t-value="'/account/static/src/img/account_dashboard_onboarding_bg.jpg'"/>
|
||||
<t t-set="close_method" t-value="'action_close_account_dashboard_onboarding'"/>
|
||||
<t t-set="close_model" t-value="'res.company'"/>
|
||||
|
||||
<t t-call="account.onboarding_fiscal_year_step" name="fiscal_year_step" />
|
||||
<t t-call="account.onboarding_bank_account_step" name="bank_account_step" />
|
||||
<t t-call="account.onboarding_taxes_step" name="taxes_step" />
|
||||
<t t-call="account.onboarding_chart_of_account_step" name="chart_of_account_step" />
|
||||
</t>
|
||||
</template>
|
||||
<!-- SAMPLE INVOICE EMAIL -->
|
||||
<record id="action_open_account_onboarding_create_invoice" model="ir.actions.act_window">
|
||||
<field name="name">Create first invoice</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="account.view_move_form" />
|
||||
<field name="context">{'default_move_type': 'out_invoice'}</field>
|
||||
</record>
|
||||
<!-- SALE TAX -->
|
||||
<template id="onboarding_sale_tax_step">
|
||||
<t t-call="base.onboarding_step">
|
||||
<t t-set="title">Taxes</t>
|
||||
<t t-set="description">Choose a default sales tax for your products.</t>
|
||||
<t t-set="btn_text">Set taxes</t>
|
||||
<t t-set="done_text">Step Completed!</t>
|
||||
<t t-set="method" t-value="'action_open_account_onboarding_sale_tax'" />
|
||||
<t t-set="model" t-value="'res.company'" />
|
||||
<t t-set="state" t-value="state.get('account_onboarding_sale_tax_state')" />
|
||||
</t>
|
||||
</template>
|
||||
<record id="account_invoice_onboarding_sale_tax_form" model="ir.ui.view">
|
||||
<field name="name">account.invoice.layout.onboarding.form</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<div class="mb16">Choose a default sales tax for your products.</div>
|
||||
<label for="account_sale_tax_id" string="Sales Tax"/>
|
||||
<field name="account_sale_tax_id" />
|
||||
<footer>
|
||||
<button string="Apply" class="btn btn-primary" type="object" name="action_save_onboarding_sale_tax" data-hotkey="q" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="z" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
<record id="action_open_account_onboarding_sale_tax" model="ir.actions.act_window">
|
||||
<field name="name">Sales tax</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.company</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="account_invoice_onboarding_sale_tax_form" />
|
||||
<field name="target">new</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_account_payment_method_line_tree" model="ir.ui.view">
|
||||
<field name="name">account.payment.method.line.list</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<list edit="0">
|
||||
<field name="name" string="Payment Method Name"/>
|
||||
<field name="journal_id"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_payment_method_line_kanban_mobile" model="ir.ui.view">
|
||||
<field name="name">account.payment.method.line.kanban</field>
|
||||
<field name="model">account.payment.method.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<t t-name="card">
|
||||
<field name="display_name"/>
|
||||
</t>
|
||||
</kanban>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -16,14 +16,14 @@
|
|||
</record>
|
||||
|
||||
<record id="view_payment_term_tree" model="ir.ui.view">
|
||||
<field name="name">account.payment.term.tree</field>
|
||||
<field name="name">account.payment.term.list</field>
|
||||
<field name="model">account.payment.term</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Payment Terms">
|
||||
<list string="Payment Terms">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -34,52 +34,66 @@
|
|||
<form string="Payment Terms">
|
||||
<sheet>
|
||||
<field name="active" invisible="1"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="note" placeholder="Payment term explanation for the customer..."/>
|
||||
</group>
|
||||
<label for="display_on_invoice"/>
|
||||
<field name="display_on_invoice"/>
|
||||
<separator string="Terms"/>
|
||||
<p class="text-muted">
|
||||
The last line's computation type should be "Balance" to ensure that the whole amount will be allocated.
|
||||
</p>
|
||||
<field name="line_ids">
|
||||
<tree string="Payment Terms" editable="top" no_open="True">
|
||||
<field name="value" string="Due Type"/>
|
||||
<field name="value_amount" attrs="{'invisible': [('value', '=', 'balance')]}" />
|
||||
<field name="months"/>
|
||||
<field name="days"/>
|
||||
<field name="end_month" widget="boolean_toggle" options="{'autosave': False}"/>
|
||||
<field name="days_after" attrs="{'invisible': [('end_month','=', False)]}"/>
|
||||
<field name="discount_percentage"/>
|
||||
<field name="discount_days"/>
|
||||
</tree>
|
||||
</field>
|
||||
|
||||
<div class="oe_edit_only">
|
||||
<separator string="Example"/>
|
||||
<field name="example_invalid" invisible="1"/>
|
||||
<div attrs="{'invisible': [('example_invalid', '=', False)]}">
|
||||
The Payment Term must have one Balance line.
|
||||
</div>
|
||||
<div attrs="{'invisible': [('example_invalid', '=', True)]}" class="d-flex" >
|
||||
For any invoice of
|
||||
<span class="mx-1"/> <field name="example_amount" /> <span class="mx-1"/>
|
||||
dated
|
||||
<span class="mx-1"/> <field name="example_date" class="oe_inline" style="color: #704A66; font-weight: bold"/>,
|
||||
the due date(s) and amount(s) will be:
|
||||
</div>
|
||||
<field name="example_preview" attrs="{'invisible': [('example_invalid', '=', True)]}"/>
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<div class="oe_title">
|
||||
<label for="name" string="Payment Terms"/>
|
||||
<h1><field name="name" nolabel="1" placeholder="e.g. 30 days"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<field name="company_id" options="{'no_create': True}" class="w-25" groups="base.group_multi_company" placeholder="Visible to all"/>
|
||||
<label for="early_discount"/>
|
||||
<div class="o_field_highlight">
|
||||
<field name="early_discount"/>
|
||||
<field name="discount_percentage"
|
||||
class="text-end o_field_highlight o_input oe_inline"
|
||||
invisible="not early_discount"/>
|
||||
<span invisible="not early_discount"> % if paid within </span>
|
||||
<field name="discount_days"
|
||||
class="text-end o_field_highlight o_input oe_inline"
|
||||
invisible="not early_discount"/>
|
||||
<span invisible="not early_discount"> days</span>
|
||||
<div invisible="not early_discount">
|
||||
<span> Reduced tax:
|
||||
<field name="early_pay_discount_computation" class="w-auto"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<group string="Due Terms">
|
||||
<field name="line_ids" widget="payment_term_line_ids" nolabel="1">
|
||||
<list string="Payment Terms" editable="bottom" no_open="True">
|
||||
<field name="value_amount"/>
|
||||
<field name="value" nolabel="1"/>
|
||||
<field name="nb_days" string="After"/>
|
||||
<field name="delay_type" nolabel="1"/>
|
||||
<field name="display_days_next_month" column_invisible="1"/>
|
||||
<field name="days_next_month" width="30px" nolabel="1" invisible="not display_days_next_month"/>
|
||||
</list>
|
||||
</field>
|
||||
</group>
|
||||
<group string="Preview">
|
||||
<div colspan="2">
|
||||
<field name="display_on_invoice" nolabel="1"/>
|
||||
<label for="display_on_invoice"/>
|
||||
</div>
|
||||
<div class="d-flex gap-2" colspan="2" col="4">
|
||||
Example:
|
||||
<field name="example_amount" class="oe_inline"/>
|
||||
on
|
||||
<field name="example_date" class="fw-bold border-bottom o_example_date"/>
|
||||
</div>
|
||||
<div colspan="2" class="py-1 bg-secondary">
|
||||
<field name="note" placeholder="Description on invoice (e.g. Payment terms: 30 days after invoice date)" class="border-bottom o_example_note"/>
|
||||
<field name="example_preview_discount" class="ps-2"
|
||||
invisible="not early_discount or not display_on_invoice"/>
|
||||
<field name="example_preview" class="ps-2"
|
||||
invisible="not display_on_invoice"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
|
|
@ -90,14 +104,10 @@
|
|||
<field name="model">account.payment.term</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="note"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div><strong class="o_kanban_record_title"><t t-esc="record.name.value"/></strong></div>
|
||||
<div t-if="!widget.isHtmlEmpty(record.note.raw_value)"><t t-out="record.note.value"/></div>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<field class="fw-bolder fs-5" name="name"/>
|
||||
<field name="note"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -107,7 +117,8 @@
|
|||
<record id="action_payment_term_form" model="ir.actions.act_window">
|
||||
<field name="name">Payment Terms</field>
|
||||
<field name="res_model">account.payment.term</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="path">payment-terms</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="view_payment_term_search"/>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -5,31 +5,34 @@
|
|||
<!-- VIEWS -->
|
||||
|
||||
<record id="view_account_payment_tree" model="ir.ui.view">
|
||||
<field name="name">account.payment.tree</field>
|
||||
<field name="name">account.payment.list</field>
|
||||
<field name="model">account.payment</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree edit="false" sample="1" decoration-info="state == 'draft'" decoration-muted="state == 'cancel'">
|
||||
<list edit="false" sample="1" decoration-info="state == 'draft'" decoration-muted="state == 'canceled'">
|
||||
<header>
|
||||
<button name="action_post" type="object" string="Confirm"/>
|
||||
</header>
|
||||
<field name="company_currency_id" invisible="1"/>
|
||||
<field name="suitable_journal_ids" invisible="1"/>
|
||||
<field name="available_payment_method_line_ids" invisible="1"/>
|
||||
<field name="date"/>
|
||||
<field name="company_currency_id" column_invisible="True"/>
|
||||
<!-- <field name="suitable_journal_ids" column_invisible="True"/> -->
|
||||
<field name="available_payment_method_line_ids" column_invisible="True"/>
|
||||
<field name="date" readonly="state in ['cancel', 'in_process']"/>
|
||||
<field name="name"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="payment_method_line_id"/>
|
||||
<field name="company_id" optional="hide" groups="base.group_multi_company"/>
|
||||
<field name="payment_method_line_id" context="{'hide_payment_journal_id': 1}"/>
|
||||
<field name="partner_id" string="Customer"/>
|
||||
<field name="amount_signed" string="Amount in Currency" groups="base.group_multi_currency" optional="hide"/>
|
||||
<field name="currency_id" string="Payment Currency" groups="base.group_multi_currency" optional="hide"/>
|
||||
<field name="amount_signed" string="Amount in Currency" optional="hide" groups="!base.group_multi_currency"/>
|
||||
<field name="amount_signed" string="Amount in Currency" optional="show" groups="base.group_multi_currency"/>
|
||||
<field name="currency_id" string="Payment Currency" optional="hide"/>
|
||||
<field name="activity_ids" widget="list_activity" optional="hide"/>
|
||||
<field name="amount_company_currency_signed" widget="monetary" string="Amount" sum="Total"/>
|
||||
<field name="state" widget="badge" decoration-info="state == 'draft'" decoration-success="state == 'posted'"/>
|
||||
</tree>
|
||||
<field name="state" widget="badge" decoration-info="state == 'draft'" decoration-warning="state == 'in_process'" decoration-success="state == 'paid'"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_supplier_payment_tree" model="ir.ui.view">
|
||||
<field name="name">account.supplier.payment.tree</field>
|
||||
<field name="name">account.supplier.payment.list</field>
|
||||
<field name="model">account.payment</field>
|
||||
<field name="inherit_id" ref="account.view_account_payment_tree"/>
|
||||
<field name="mode">primary</field>
|
||||
|
|
@ -41,7 +44,7 @@
|
|||
</record>
|
||||
|
||||
<record id="view_account_various_payment_tree" model="ir.ui.view">
|
||||
<field name="name">account.supplier.payment.tree</field>
|
||||
<field name="name">account.supplier.payment.list</field>
|
||||
<field name="model">account.payment</field>
|
||||
<field name="inherit_id" ref="account.view_account_payment_tree"/>
|
||||
<field name="mode">primary</field>
|
||||
|
|
@ -57,38 +60,23 @@
|
|||
<field name="model">account.payment</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile" create="0" group_create="0" sample="1">
|
||||
<field name="name"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="date"/>
|
||||
<field name="state"/>
|
||||
<field name="currency_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_global_click">
|
||||
<div class="row mb4">
|
||||
<div class="col-6">
|
||||
<strong><span><field name="name"/></span></strong>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<strong><i class="fa fa-clock-o" role="img" aria-label="Date" title="Date"/> <t t-esc="record.date.value"/></strong>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<span><field name="partner_id"/></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<field name="amount" widget='monetary'/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<span class="float-end">
|
||||
<field name="state" widget="label_selection" options="{'classes': {'draft': 'secondary', 'sent': 'success'}}"/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<div class="d-flex align-items-baseline mb-2">
|
||||
<field name="partner_id" class="fw-bolder fs-5 me-2" invisible="not partner_id"/>
|
||||
<field name="journal_id" class="fw-bolder fs-5 me-2" invisible="partner_id"/>
|
||||
<field name="amount" widget="monetary" class="fw-bolder ms-auto flex-shrink-0"/>
|
||||
</div>
|
||||
<footer class="align-items-end">
|
||||
<div class="d-flex flex-wrap gap-1 text-muted text-nowrap">
|
||||
<field name="name"/>
|
||||
<field name="date"/>
|
||||
<field name="activity_ids" widget="kanban_activity"/>
|
||||
</div>
|
||||
<field name="state" widget="label_selection" class="ms-auto"
|
||||
options="{'classes': {'draft': 'default', 'posted': 'success'}}" />
|
||||
</footer>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -101,30 +89,29 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Payments">
|
||||
<field name="name" string="Payment"
|
||||
filter_domain="['|', '|', '|', '|', ('name', 'ilike', self), ('partner_id', 'ilike', self), ('ref', 'ilike', self), ('amount_company_currency_signed' , 'ilike', self), ('amount', 'ilike', self)]"/>
|
||||
filter_domain="['|', '|', '|', '|', ('name', 'ilike', self), ('partner_id', 'ilike', self), ('memo', 'ilike', self), ('amount_company_currency_signed' , 'ilike', self), ('amount', 'ilike', self)]"/>
|
||||
<field name="partner_id" string="Customer/Vendor"/>
|
||||
<field name="journal_id"/>
|
||||
<field name="is_internal_transfer"/>
|
||||
<separator/>
|
||||
<filter string="Customer Payments"
|
||||
name="inbound_filter"
|
||||
domain="[('partner_type', '=', 'customer'), ('is_internal_transfer', '=', False)]"/>
|
||||
domain="[('partner_type', '=', 'customer')]"/>
|
||||
<filter string="Vendor Payments"
|
||||
name="outbound_filter"
|
||||
domain="[('partner_type', '=', 'supplier'), ('is_internal_transfer', '=', False)]"/>
|
||||
<filter string="Internal Transfers" name="transfers_filter" domain="[('is_internal_transfer', '=', True)]"/>
|
||||
domain="[('partner_type', '=', 'supplier')]"/>
|
||||
<separator/>
|
||||
<filter string="Draft" name="state_draft" domain="[('state', '=', 'draft')]"/>
|
||||
<filter string="Posted" name="state_posted" domain="[('state', '=', 'posted')]"/>
|
||||
<filter string="In Process" name="state_in_process" domain="[('state', '=', 'in_process')]"/>
|
||||
<separator/>
|
||||
<filter string="Sent" name="state_sent" domain="[('is_move_sent', '=', True)]"/>
|
||||
<filter string="Sent" name="state_sent" domain="[('is_sent', '=', 'True')]"/>
|
||||
<filter string="Not Sent" name="state_sent" domain="[('is_sent', '=', 'False')]"/>
|
||||
<filter string="No Bank Matching" name="unmatched" domain="[('is_matched', '=', False)]"/>
|
||||
<filter string="Reconciled" name="reconciled" domain="[('is_reconciled', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter string="Payment Date" name="date" date="date"/>
|
||||
<separator/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<filter string="Customer/Vendor" name="partner" domain="[]" context="{'group_by': 'partner_id'}"/>
|
||||
<filter string="Partner" name="partner" domain="[]" context="{'group_by': 'partner_id'}"/>
|
||||
<filter string="Journal" name="journal" domain="[]" context="{'group_by': 'journal_id'}"/>
|
||||
<filter string="Payment Method Line" name="paymentmethodline" domain="[]" context="{'group_by': 'payment_method_line_id'}"/>
|
||||
<filter string="Status" name="state" domain="[]" context="{'group_by': 'state'}"/>
|
||||
|
|
@ -132,13 +119,16 @@
|
|||
<filter string="Currency" name="currency" domain="[]" context="{'group_by': 'currency_id'}" groups="base.group_multi_currency"/>
|
||||
<filter string="Company" name="company" domain="[]" context="{'group_by': 'company_id'}" groups="base.group_multi_company"/>
|
||||
<separator/>
|
||||
<filter invisible="1" string="My Activities" name="filter_activities_my"
|
||||
domain="[('activity_user_id', '=', uid)]"/>
|
||||
<separator invisible="1"/>
|
||||
<filter invisible="1" string="Late Activities" name="activities_overdue"
|
||||
domain="[('my_activity_date_deadline', '<', context_today().strftime('%Y-%m-%d'))]"
|
||||
help="Show all records which has next action date is before today"/>
|
||||
domain="[('my_activity_date_deadline', '<', 'today')]"
|
||||
help="Show all records whose next activity date is past"/>
|
||||
<filter invisible="1" string="Today Activities" name="activities_today"
|
||||
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
domain="[('my_activity_date_deadline', '=', 'today')]"/>
|
||||
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
|
||||
domain="[('my_activity_date_deadline', '>', context_today().strftime('%Y-%m-%d'))]"/>
|
||||
domain="[('my_activity_date_deadline', '>', 'today')]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -147,33 +137,40 @@
|
|||
<field name="name">account.payment.form</field>
|
||||
<field name="model">account.payment</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Register Payment">
|
||||
<form string="Pay">
|
||||
<header>
|
||||
<button name="action_post" string="Confirm" type="object" class="oe_highlight"
|
||||
attrs="{'invisible': [('state', '!=', 'draft')]}" data-hotkey="v"/>
|
||||
<button name="action_draft" string="Reset To Draft" type="object" class="btn btn-secondary"
|
||||
attrs="{'invisible': [('state', 'not in', ('posted', 'cancel'))]}"
|
||||
invisible="state != 'draft'" data-hotkey="q"/>
|
||||
<button name="action_validate" string="Validate" type="object" class="oe_highlight"
|
||||
invisible="state != 'in_process' or move_id" data-hotkey="q"/>
|
||||
<button name="action_reject" string="Reject" type="object"
|
||||
invisible="state != 'in_process' or not is_sent" data-hotkey="q"/>
|
||||
<button name="action_draft" string="Reset to Draft" type="object" class="btn btn-secondary"
|
||||
invisible="state in ('draft')"
|
||||
groups="account.group_account_invoice" data-hotkey="w"/>
|
||||
<button string="Request Cancel"
|
||||
name="button_request_cancel"
|
||||
type="object"
|
||||
groups="account.group_account_invoice"
|
||||
invisible="state != 'in_process' or not move_id or not need_cancel_request"
|
||||
data-hotkey="w"/>
|
||||
<button name="mark_as_sent" string="Mark as Sent" type="object" data-hotkey="v"
|
||||
invisible="state != 'in_process' or is_sent or payment_method_code != 'manual'"/>
|
||||
<button name="unmark_as_sent" string="Unmark as Sent" type="object" data-hotkey="k"
|
||||
invisible="state != 'in_process' or not is_sent or payment_method_code != 'manual'"/>
|
||||
<button name="action_cancel" string="Cancel" type="object"
|
||||
attrs="{'invisible': [('state', '!=', 'draft')]}" data-hotkey="z"/>
|
||||
<button name="mark_as_sent" string="Mark as Sent" type="object" data-hotkey="q"
|
||||
attrs="{'invisible': ['|', '|', ('state', '!=', 'posted'), ('is_move_sent', '=', True), ('payment_method_code', '!=', 'manual')]}"/>
|
||||
<button name="unmark_as_sent" string="Unmark as Sent" type="object" data-hotkey="k"
|
||||
attrs="{'invisible': ['|', '|', ('state', '!=', 'posted'), ('is_move_sent', '=', False), ('payment_method_code', '!=', 'manual')]}"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,posted"/>
|
||||
invisible="not id or not (state == 'draft' or (state == 'in_process' and is_sent))" data-hotkey="x"/>
|
||||
<field name="state" widget="statusbar" statusbar_visible="draft,in_process,paid"/>
|
||||
</header>
|
||||
<div class="alert alert-info text-center" role="alert" attrs="{'invisible': ['|','|',('paired_internal_transfer_payment_id','!=',False),('is_internal_transfer','=',False),('state','!=','draft')]}">
|
||||
A second payment will be created automatically in the destination journal.
|
||||
</div>
|
||||
<div class="alert alert-warning text-center" role="alert" attrs="{
|
||||
'invisible': ['|', '|', ('is_internal_transfer','=',False), ('require_partner_bank_account', '=', False), ('partner_bank_id', '!=', False)]}">
|
||||
The selected payment method requires a bank account but none is set on
|
||||
<button class="oe_link alert-link" type="object" name="action_open_destination_journal" style="padding: 0; vertical-align: baseline;">the destination journal</button>.
|
||||
<div class="alert alert-warning mb-2" role="alert" invisible="not duplicate_payment_ids or state!='draft'">
|
||||
<span>This payment has the same partner, amount and date as </span>
|
||||
<field name="duplicate_payment_ids" widget="x2many_buttons" string="Duplicated Payments"/>
|
||||
</div>
|
||||
<sheet>
|
||||
<!-- Invisible fields -->
|
||||
<field name="id" invisible="1"/>
|
||||
<field name="is_move_sent" invisible="1"/>
|
||||
<field name="is_sent" invisible="1"/>
|
||||
<field name="need_cancel_request" invisible="1"/>
|
||||
<field name="is_reconciled" invisible="1"/>
|
||||
<field name="is_matched" invisible="1"/>
|
||||
<field name="payment_method_code" invisible="1"/>
|
||||
|
|
@ -181,25 +178,25 @@
|
|||
<field name="require_partner_bank_account" invisible="1"/>
|
||||
<field name="available_payment_method_line_ids" invisible="1"/>
|
||||
<field name="available_partner_bank_ids" invisible="1"/>
|
||||
<field name="suitable_journal_ids" invisible="1"/>
|
||||
<!-- <field name="suitable_journal_ids" invisible="1"/> -->
|
||||
<field name="country_code" invisible="1"/>
|
||||
<field name="partner_type" invisible="1"/>
|
||||
<field name="posted_before" invisible="1"/>
|
||||
<field name="reconciled_invoices_type" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="paired_internal_transfer_payment_id" invisible="1"/>
|
||||
<field name="available_journal_ids" invisible="1"/>
|
||||
<field name="currency_id" invisible="1"/>
|
||||
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<!-- Invoice stat button -->
|
||||
<button name="button_open_invoices" type="object"
|
||||
class="oe_stat_button" icon="fa-bars"
|
||||
attrs="{'invisible': [('reconciled_invoices_count','=', 0)]}">
|
||||
invisible="reconciled_invoices_count == 0">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<span class="o_stat_text">
|
||||
<field name="reconciled_invoices_count"/>
|
||||
<span attrs="{'invisible': [('reconciled_invoices_type', '!=', 'invoice')]}"> Invoice</span>
|
||||
<span attrs="{'invisible': [('reconciled_invoices_type', '=', 'invoice')]}"> Credit Note</span>
|
||||
<span invisible="reconciled_invoices_type != 'invoice'"> Invoice</span>
|
||||
<span invisible="reconciled_invoices_type == 'invoice'"> Credit Note</span>
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
|
|
@ -207,7 +204,7 @@
|
|||
<!-- Bill stat button -->
|
||||
<button name="button_open_bills" type="object"
|
||||
class="oe_stat_button" icon="fa-bars"
|
||||
attrs="{'invisible': [('reconciled_bills_count','=', 0)]}">
|
||||
invisible="reconciled_bills_count == 0">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<span class="o_stat_text">
|
||||
<field name="reconciled_bills_count"/>
|
||||
|
|
@ -219,10 +216,10 @@
|
|||
<!-- Statement stat button -->
|
||||
<button name="button_open_statement_lines" type="object"
|
||||
class="oe_stat_button" icon="fa-bars"
|
||||
attrs="{'invisible': [('reconciled_statement_lines_count','=', 0)]}">
|
||||
invisible="reconciled_statement_lines_count == 0">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<field name="reconciled_statement_lines_count"/>
|
||||
<span> Transaction</span>
|
||||
<span class="o_stat_text">Transaction</span>
|
||||
</div>
|
||||
</button>
|
||||
|
||||
|
|
@ -231,6 +228,7 @@
|
|||
type="object"
|
||||
class="oe_stat_button"
|
||||
icon="fa-bars"
|
||||
invisible="not move_id"
|
||||
groups="account.group_account_user,account.group_account_readonly">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_text">Journal Entry</span>
|
||||
|
|
@ -239,91 +237,82 @@
|
|||
</div>
|
||||
|
||||
<widget name="web_ribbon" text="Invoicing App Legacy"
|
||||
bg_color="bg-info"
|
||||
attrs="{'invisible': [('state', '!=', 'invoicing_legacy')]}"
|
||||
tooltip="This payment has been generated through the Invoicing app, before installing Accounting. It has been disabled by the 'Invoicing Switch Threshold Date' setting so that it does not impact your accounting."
|
||||
/>
|
||||
bg_color="text-bg-info"
|
||||
invisible="state != 'invoicing_legacy'"
|
||||
tooltip="This payment has been generated through the Invoicing app, before installing Accounting. It has been disabled by the 'Invoicing Switch Threshold Date' setting so that it does not impact your accounting."/>
|
||||
|
||||
<div class="oe_title">
|
||||
<h1 attrs="{'invisible': [('state', '!=', 'draft')]}"><span>Draft</span></h1>
|
||||
<h1 attrs="{'invisible': [('state', '=', 'draft')]}"><field name="name" readonly="1"/></h1>
|
||||
<h1 invisible="state != 'draft'"><span>Draft</span></h1>
|
||||
<h1 invisible="state == 'draft'"><field name="name" readonly="1"/></h1>
|
||||
</div>
|
||||
|
||||
<group>
|
||||
<group name="main_group">
|
||||
<group name="group1">
|
||||
<field name="is_internal_transfer" attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
<field name="payment_type" widget="radio" options="{'horizontal': True}"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
readonly="state != 'draft'"/>
|
||||
<field name="partner_id" context="{'default_is_company': True}" string="Customer"
|
||||
options="{'no_quick_create': True}"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')],
|
||||
'invisible':['|', ('partner_type','!=','customer'), ('is_internal_transfer', '=', True)]}"/>
|
||||
invisible="partner_type != 'customer'"
|
||||
readonly="state != 'draft'"/>
|
||||
<field name="partner_id" context="{'default_is_company': True}" string="Vendor"
|
||||
options="{'no_quick_create': True}"
|
||||
attrs="{'readonly':[('state', '!=', 'draft')],
|
||||
'invisible':['|', ('partner_type','!=','supplier'), ('is_internal_transfer', '=', True)]}"/>
|
||||
invisible="partner_type != 'supplier'"
|
||||
readonly="state != 'draft'"/>
|
||||
<label for="amount"/>
|
||||
<div name="amount_div" class="o_row">
|
||||
<field name="amount"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
readonly="state != 'draft'"/>
|
||||
<field name="currency_id"
|
||||
options="{'no_create': True, 'no_open': True}"
|
||||
required="1"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"
|
||||
readonly="state != 'draft'"
|
||||
groups="base.group_multi_currency"/>
|
||||
</div>
|
||||
<field name="date"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
<field name="ref" string="Memo"/>
|
||||
readonly="state != 'draft'"/>
|
||||
<field name="memo" string="Memo"/>
|
||||
</group>
|
||||
<group name="group2">
|
||||
<field name="journal_id"
|
||||
domain="[('id', 'in', available_journal_ids)]"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
<field name="payment_method_line_id" required="1" options="{'no_create': True, 'no_open': True}"
|
||||
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
|
||||
readonly="state != 'draft'"/>
|
||||
<field name="payment_method_line_id"
|
||||
context="{'hide_payment_journal_id': 1}"
|
||||
options="{'no_create': True, 'no_open': True}"
|
||||
required="1"
|
||||
readonly="state != 'draft'"/>
|
||||
|
||||
<field name="partner_bank_id" string="Customer Bank Account"
|
||||
context="{'default_partner_id': partner_id, 'default_allow_out_payment': True}"
|
||||
attrs="{
|
||||
'invisible': ['|', '|', '|', ('show_partner_bank_account', '=', False), ('partner_type','!=','customer'), ('is_internal_transfer', '=', True), ('payment_type', '=', 'inbound')],
|
||||
'required': [('require_partner_bank_account', '=', True), ('is_internal_transfer', '=', False)],
|
||||
}"/>
|
||||
context="{'default_partner_id': partner_id, 'display_account_trust': True}"
|
||||
invisible="not show_partner_bank_account or partner_type != 'customer' or payment_type == 'inbound'"
|
||||
required="require_partner_bank_account"/>
|
||||
|
||||
<field name="partner_bank_id" string="Vendor Bank Account"
|
||||
context="{'default_partner_id': partner_id, 'default_allow_out_payment': True}"
|
||||
attrs="{
|
||||
'invisible': ['|', '|', '|', ('show_partner_bank_account', '=', False), ('partner_type','!=','supplier'), ('is_internal_transfer', '=', True), ('payment_type', '=', 'inbound')],
|
||||
'required': [('require_partner_bank_account', '=', True), ('is_internal_transfer', '=', False)],
|
||||
}"/>
|
||||
context="{'default_partner_id': partner_id, 'display_account_trust': True}"
|
||||
invisible="not show_partner_bank_account or partner_type != 'supplier' or payment_type == 'inbound'"
|
||||
required="require_partner_bank_account"/>
|
||||
|
||||
<!-- This field should always be readonly but using readonly="1" overrides the other partner_bank_id
|
||||
fields readonly condition in the framework, preventing the modification of these fields -->
|
||||
<field name="partner_bank_id" string="Company Bank Account"
|
||||
context="{'default_partner_id': partner_id, 'default_allow_out_payment': True}"
|
||||
attrs="{
|
||||
'invisible': ['|', '|', ('show_partner_bank_account', '=', False), ('is_internal_transfer', '=', True), ('payment_type', '=', 'outbound')],
|
||||
'required': [('require_partner_bank_account', '=', True), ('is_internal_transfer', '=', False)],
|
||||
}"/>
|
||||
|
||||
<field name="destination_journal_id" context="{'default_partner_id': partner_id}"
|
||||
attrs="{'invisible': [('is_internal_transfer', '=', False)],
|
||||
'readonly': [('state', '!=', 'draft')], 'required': [('is_internal_transfer', '=', True),('state', '=', 'draft')]}"/>
|
||||
context="{'default_partner_id': partner_id, 'display_account_trust': True}"
|
||||
invisible="not show_partner_bank_account or payment_type == 'outbound'"
|
||||
required="require_partner_bank_account"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="qr_code" invisible="1"/>
|
||||
<div attrs="{'invisible': [('qr_code', '=', False)]}" colspan="2" class="text-center">
|
||||
<div invisible="not qr_code" colspan="2" class="text-center">
|
||||
<field name="qr_code" widget="html"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<!-- To be used in localizations requiring to add a page -->
|
||||
<notebook name="payment_notebook" colspan="2"/>
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="o_attachment_preview"/>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" groups="base.group_user"/>
|
||||
<field name="activity_ids"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -342,15 +331,24 @@
|
|||
|
||||
<!-- ACTIONS -->
|
||||
|
||||
<record id="action_account_payments" model="ir.actions.act_window">
|
||||
<record id="action_account_all_payments" model="ir.actions.act_window">
|
||||
<field name="name">Payments</field>
|
||||
<field name="res_model">account.payment</field>
|
||||
<field name="view_mode">tree,kanban,form,graph</field>
|
||||
<field name="view_mode">list,kanban,form,graph,activity</field>
|
||||
<field name="view_id" ref="view_account_payment_tree"/>
|
||||
</record>
|
||||
|
||||
<record id="action_account_payments" model="ir.actions.act_window">
|
||||
<field name="name">Customer Payments</field>
|
||||
<field name="res_model">account.payment</field>
|
||||
<field name="path">customer-payments</field>
|
||||
<field name="view_mode">list,kanban,form,graph,activity</field>
|
||||
<field name="context">{
|
||||
'default_payment_type': 'inbound',
|
||||
'default_partner_type': 'customer',
|
||||
'search_default_inbound_filter': 1,
|
||||
'default_move_journal_types': ('bank', 'cash'),
|
||||
'display_account_trust': True,
|
||||
}</field>
|
||||
<field name="view_id" ref="view_account_payment_tree"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -363,14 +361,16 @@
|
|||
</record>
|
||||
|
||||
<record id="action_account_payments_payable" model="ir.actions.act_window">
|
||||
<field name="name">Payments</field>
|
||||
<field name="name">Vendor Payments</field>
|
||||
<field name="res_model">account.payment</field>
|
||||
<field name="view_mode">tree,kanban,form,graph</field>
|
||||
<field name="path">vendor-payments</field>
|
||||
<field name="view_mode">list,kanban,form,graph,activity</field>
|
||||
<field name="context">{
|
||||
'default_payment_type': 'outbound',
|
||||
'default_partner_type': 'supplier',
|
||||
'search_default_outbound_filter': 1,
|
||||
'default_move_journal_types': ('bank', 'cash'),
|
||||
'display_account_trust': True,
|
||||
}</field>
|
||||
<field name="view_id" ref="view_account_supplier_payment_tree"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -385,8 +385,8 @@
|
|||
<record id="action_account_payments_transfer" model="ir.actions.act_window">
|
||||
<field name="name">Internal Transfers</field>
|
||||
<field name="res_model">account.payment</field>
|
||||
<field name="view_mode">tree,kanban,form,graph</field>
|
||||
<field name="context">{'default_payment_type': 'outbound', 'search_default_transfers_filter': 1}</field>
|
||||
<field name="view_mode">list,kanban,form,graph</field>
|
||||
<field name="context">{'default_payment_type': 'outbound', 'search_default_transfers_filter': 1, 'display_account_trust': True}</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="view_id" ref="view_account_supplier_payment_tree"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -398,28 +398,14 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_invoice_from_list" model="ir.actions.server">
|
||||
<field name="name">Register Payment</field>
|
||||
<field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
|
||||
<field name="model_id" ref="account.model_account_move"/>
|
||||
<field name="binding_model_id" ref="account.model_account_move"/>
|
||||
<field name="binding_view_types">list</field>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
if records:
|
||||
action = records.action_register_payment()
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Action confirm_payments for multi -->
|
||||
<record id="action_account_confirm_payments" model="ir.actions.server">
|
||||
<field name="name">Post Payments</field>
|
||||
<field name="type">ir.actions.server</field>
|
||||
<field name="state">code</field>
|
||||
<field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
|
||||
<field name="group_ids" eval="[(4, ref('account.group_account_invoice'))]"/>
|
||||
<field name="model_id" ref="account.model_account_payment"/>
|
||||
<field name="binding_model_id" ref="account.model_account_payment"/>
|
||||
<field name="binding_view_types">list</field>
|
||||
<field name="binding_view_types">list,kanban</field>
|
||||
<field name="code">
|
||||
records.action_post()
|
||||
</field>
|
||||
|
|
@ -434,13 +420,12 @@
|
|||
<field name="context" eval="{
|
||||
'mail_post_autofollow': True,
|
||||
'default_composition_mode': 'comment',
|
||||
'default_use_template': True,
|
||||
'default_template_id': ref('account.mail_template_data_payment_receipt'),
|
||||
'default_email_layout_xmlid': 'mail.mail_notification_light',
|
||||
}"/>
|
||||
<field name="binding_model_id" ref="model_account_payment"/>
|
||||
<field name="binding_view_types">form</field>
|
||||
<field name="groups_id" eval="[(4, ref('account.group_account_invoice'))]"/>
|
||||
<field name="group_ids" eval="[(4, ref('account.group_account_invoice'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="account_send_payment_receipt_by_email_action_multi" model="ir.actions.act_window">
|
||||
|
|
@ -449,15 +434,13 @@
|
|||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="context" eval="{
|
||||
'mailing_document_based': True,
|
||||
'mail_post_autofollow': True,
|
||||
'default_composition_mode': 'mass_mail',
|
||||
'default_use_template': True,
|
||||
'default_template_id': ref('account.mail_template_data_payment_receipt'),
|
||||
'default_email_layout_xmlid': 'mail.mail_notification_light',
|
||||
}"/>
|
||||
<field name="binding_model_id" ref="model_account_payment"/>
|
||||
<field name="binding_view_types">list</field>
|
||||
<field name="binding_view_types">list,kanban</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -1,25 +1,40 @@
|
|||
<odoo>
|
||||
<template id="portal_my_home_menu_invoice" name="Portal layout : invoice menu entries" inherit_id="portal.portal_breadcrumbs" priority="30">
|
||||
<xpath expr="//ol[hasclass('o_portal_submenu')]" position="inside">
|
||||
<li t-if="page_name == 'invoice'" t-attf-class="breadcrumb-item #{'active ' if not invoice else ''}">
|
||||
<li name="invoices_breadcrumb" t-if="page_name == 'invoice'" t-attf-class="breadcrumb-item #{'active ' if not invoice else ''}">
|
||||
<a t-if="invoice" t-attf-href="/my/invoices?{{ keep_query() }}">Invoices & Bills</a>
|
||||
<t t-else="">Invoices & Bills</t>
|
||||
</li>
|
||||
<li t-if="invoice" class="breadcrumb-item active">
|
||||
<t t-esc="invoice.name" t-if="invoice.name != '/'"/>
|
||||
<t t-out="invoice.name" t-if="invoice.name != '/'"/>
|
||||
<t t-else=""><em>Draft Invoice</em></t>
|
||||
</li>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="portal_my_home_invoice" name="Show Invoices & Bills" inherit_id="portal.portal_my_home" customize_show="True" priority="30">
|
||||
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
|
||||
<template id="portal_my_home_invoice" name="Invoices / Bills" inherit_id="portal.portal_my_home" customize_show="True" priority="30">
|
||||
<xpath expr="//div[hasclass('o_portal_docs')]" position="before">
|
||||
<t t-set="portal_client_category_enable" t-value="True"/>
|
||||
<t t-set="portal_vendor_category_enable" t-value="True"/>
|
||||
</xpath>
|
||||
<div id="portal_client_category" position="inside">
|
||||
<t t-call="portal.portal_docs_entry">
|
||||
<t t-set="title">Invoices & Bills</t>
|
||||
<t t-set="url" t-value="'/my/invoices'"/>
|
||||
<t t-set="icon" t-value="'/account/static/src/img/bill.svg'"/>
|
||||
<t t-set="title">Your Invoices</t>
|
||||
<t t-set="url" t-value="'/my/invoices?filterby=invoices'"/>
|
||||
<t t-set="text">Follow, download or pay your invoices</t>
|
||||
<t t-set="placeholder_count" t-value="'invoice_count'"/>
|
||||
</t>
|
||||
</xpath>
|
||||
</div>
|
||||
<div id="portal_vendor_category" position="inside">
|
||||
<t t-call="portal.portal_docs_entry">
|
||||
<t t-set="icon" t-value="'/account/static/src/img/bill.svg'"/>
|
||||
<t t-set="title">Our Invoices</t>
|
||||
<t t-set="url" t-value="'/my/invoices?filterby=bills'"/>
|
||||
<t t-set="text">Follow, download or pay our invoices</t>
|
||||
<t t-set="placeholder_count" t-value="'bill_count'"/>
|
||||
</t>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="portal_my_invoices" name="My Invoices and Payments">
|
||||
|
|
@ -30,44 +45,63 @@
|
|||
<t t-set="title">Invoices</t>
|
||||
</t>
|
||||
<t t-if="not invoices">
|
||||
<p>There are currently no invoices and payments for your account.</p>
|
||||
<p class="alert alert-warning">There are currently no invoices and payments for your account.</p>
|
||||
</t>
|
||||
<t t-if="invoices" t-call="portal.portal_table">
|
||||
<thead>
|
||||
<tr class="active">
|
||||
<th>Invoice #</th>
|
||||
<th>Invoice Date</th>
|
||||
<th class='d-none d-md-table-cell'>Due Date</th>
|
||||
<th class="text-center">Status</th>
|
||||
<th class="text-end">Amount Due</th>
|
||||
<th name="invoice_number">Invoice #</th>
|
||||
<th name="invoice_date">Invoice Date</th>
|
||||
<th name="due_date" class='d-none d-md-table-cell'>Due Date</th>
|
||||
<th name="amount_due" class="text-end pe-3">Amount Due</th>
|
||||
<th name="status">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<t t-foreach="invoices" t-as="invoice">
|
||||
<t t-foreach="invoices" t-as="invoice_data">
|
||||
<t t-set="invoice" t-value="invoice_data['invoice']"/>
|
||||
<tr>
|
||||
<td>
|
||||
<a t-att-href="invoice.get_portal_url()" t-att-title="invoice.name">
|
||||
<t t-esc="invoice.name" t-if="invoice.name != '/'"/>
|
||||
<t t-out="invoice.name" t-if="invoice.name != '/'"/>
|
||||
<em t-else="">Draft Invoice</em>
|
||||
</a>
|
||||
</td>
|
||||
<td><span t-field="invoice.invoice_date"/></td>
|
||||
<td class='d-none d-md-table-cell'><span t-field="invoice.invoice_date_due"/></td>
|
||||
<td class="tx_status text-center">
|
||||
<t t-if="invoice.state == 'posted' and invoice.payment_state not in ('in_payment', 'paid', 'reversed')">
|
||||
<span class="badge rounded-pill text-bg-info"><i class="fa fa-fw fa-clock-o" aria-label="Opened" title="Opened" role="img"></i><span class="d-none d-md-inline"> Waiting for Payment</span></span>
|
||||
<td class='d-none d-md-table-cell'
|
||||
t-att-class="'d-none d-md-table-cell text-danger' if invoice.invoice_date_due and invoice.invoice_date_due < datetime.date.today() and invoice.payment_state in ['not_paid', 'partial'] else 'd-none d-md-table-cell'">
|
||||
<span t-field="invoice.invoice_date_due"/>
|
||||
</td>
|
||||
<td name="invoice_amount" class="text-end pe-3"><span t-out="-invoice.amount_residual if invoice.move_type == 'out_refund' else invoice.amount_residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
|
||||
<td name="invoice_status">
|
||||
<t t-if="invoice.state == 'posted'" name="invoice_status_posted">
|
||||
<span t-if="invoice.currency_id.is_zero(invoice.amount_residual)"
|
||||
class="badge rounded-pill text-bg-success">
|
||||
<i class="fa fa-fw fa-check" aria-label="Paid" title="Paid" role="img"/>
|
||||
<span class="d-none d-md-inline"> Paid</span>
|
||||
</span>
|
||||
<span t-elif="invoice.payment_state == 'in_payment' and not invoice.currency_id.is_zero(invoice.amount_residual)"
|
||||
class="badge rounded-pill text-bg-info">
|
||||
<i class="fa fa-fw fa-check" aria-label="processing_payment" title="Processing Payment" role="img"/>
|
||||
<span class="d-none d-md-inline"> Processing Payment</span>
|
||||
</span>
|
||||
<span t-elif="invoice.payment_state == 'reversed'"
|
||||
class="badge rounded-pill text-bg-success">
|
||||
<i class="fa fa-fw fa-check" aria-label="Reversed" title="Reversed" role="img"/>
|
||||
<span class="d-none d-md-inline"> Reversed</span>
|
||||
</span>
|
||||
<span t-else="" class="badge rounded-pill text-bg-info" name="invoice_status_waiting_for_payment">
|
||||
<i class="fa fa-fw fa-clock-o" aria-label="Opened" title="Opened" role="img"/>
|
||||
<span class="d-none d-md-inline"> Waiting for Payment</span>
|
||||
</span>
|
||||
</t>
|
||||
<t t-if="invoice.state == 'posted' and invoice.payment_state in ('paid', 'in_payment')">
|
||||
<span class="badge rounded-pill text-bg-success"><i class="fa fa-fw fa-check" aria-label="Paid" title="Paid" role="img"></i><span class="d-none d-md-inline"> Paid</span></span>
|
||||
</t>
|
||||
<t t-if="invoice.state == 'posted' and invoice.payment_state == 'reversed'">
|
||||
<span class="badge rounded-pill text-bg-success"><i class="fa fa-fw fa-check" aria-label="Reversed" title="Reversed" role="img"></i><span class="d-none d-md-inline"> Reversed</span></span>
|
||||
</t>
|
||||
<t t-if="invoice.state == 'cancel'">
|
||||
<span class="badge rounded-pill text-bg-warning"><i class="fa fa-fw fa-remove" aria-label="Cancelled" title="Cancelled" role="img"></i><span class="d-none d-md-inline"> Cancelled</span></span>
|
||||
<t t-elif="invoice.state == 'cancel'">
|
||||
<span class="badge rounded-pill text-bg-warning">
|
||||
<i class="fa fa-fw fa-remove" aria-label="Cancelled" title="Cancelled" role="img"/>
|
||||
<span class="d-none d-md-inline"> Cancelled</span>
|
||||
</span>
|
||||
</t>
|
||||
</td>
|
||||
<td class="text-end"><span t-esc="-invoice.amount_residual if invoice.move_type == 'out_refund' else invoice.amount_residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
|
||||
</tr>
|
||||
</t>
|
||||
</tbody>
|
||||
|
|
@ -75,75 +109,141 @@
|
|||
</t>
|
||||
</template>
|
||||
|
||||
<template id="portal_invoice_page" name="Invoice Portal Template" inherit_id="portal.portal_sidebar" primary="True">
|
||||
<xpath expr="//div[hasclass('o_portal_sidebar')]" position="inside">
|
||||
<template id="portal_my_journal_mail_notifications" name="My journal email notification settings">
|
||||
<t t-call="portal.portal_layout">
|
||||
<t t-set="breadcrumbs_searchbar" t-value="True"/>
|
||||
<t t-call="portal.portal_searchbar">
|
||||
<t t-set="title">Email Notifications</t>
|
||||
</t>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h5 class="card-title">Invoice Notifications</h5>
|
||||
<p class="card-text">You can unsubscribe from emails received upon invoice sending and reception here.</p>
|
||||
<t t-if="completed">
|
||||
<div class="alert alert-success" role="alert">
|
||||
Successfully unsubscribed <t t-if="email"><strong t-out="email"/></t> from invoice notifications.
|
||||
</div>
|
||||
</t>
|
||||
<t t-elif="error">
|
||||
<div class="alert alert-danger" role="alert">
|
||||
<t t-out="error"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div t-if="email" class="alert alert-info" role="alert">
|
||||
You are about to unsubscribe <strong t-out="email"/> from invoice notifications.
|
||||
</div>
|
||||
<form method="POST">
|
||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
|
||||
<button type="submit" class="btn btn-primary">Unsubscribe</button>
|
||||
</form>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="portal_invoice_page" name="Invoice/Bill" inherit_id="portal.portal_sidebar" primary="True">
|
||||
<t t-call="portal.portal_layout" position="inside">
|
||||
<t t-set="o_portal_fullwidth_alert" groups="sales_team.group_sale_salesman,account.group_account_invoice,account.group_account_readonly">
|
||||
<t t-call="portal.portal_back_in_edit_mode">
|
||||
<t t-set="backend_url" t-value="'/web#model=%s&id=%s&action=%s&view_type=form' % (invoice._name, invoice.id, invoice.env.ref('account.action_move_out_invoice_type').id)"/>
|
||||
<t t-set="backend_url" t-value="'/odoo/action-account.action_move_out_invoice_type/%s' % invoice.id"/>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<div class="row mt16 o_portal_invoice_sidebar">
|
||||
<xpath expr="//div[hasclass('o_portal_sidebar')]" position="inside">
|
||||
<div class="row o_portal_invoice_sidebar">
|
||||
<!-- Sidebar -->
|
||||
<t t-call="portal.portal_record_sidebar">
|
||||
<t t-set="classes" t-value="'col-lg-auto d-print-none'"/>
|
||||
<t t-set="classes" t-value="'col-lg-4 col-xxl-3 d-print-none'"/>
|
||||
<t t-set="title">
|
||||
<h2 class="mb-0">
|
||||
<b t-if="invoice.amount_residual > 0" t-field="invoice.amount_residual"/>
|
||||
<b t-else="1" t-field="invoice.amount_total"/>
|
||||
<h2 class="mb-0 text-break mx-auto">
|
||||
<span t-field="invoice.amount_total"/>
|
||||
</h2>
|
||||
<div class="small" t-if="invoice.payment_state not in ('paid', 'in_payment', 'reversed') and invoice.move_type == 'out_invoice'"><i class="fa fa-clock-o"/><span class="o_portal_sidebar_timeago ml4" t-att-datetime="invoice.invoice_date_due"/></div>
|
||||
<div class="my-1 w-100" t-if="payment_state in ('not_paid', 'partial')">
|
||||
<div class="alert alert-success px-2 py-1 text-center mb-2" t-if="payment_state == 'partial'">
|
||||
Already Paid: <span t-out="amount_paid" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
|
||||
</div>
|
||||
<div t-if="payment_state == 'partial'" class="alert alert-warning px-2 py-1 text-center mb-2">
|
||||
Left to Pay:
|
||||
<span t-out="amount_due" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
|
||||
<div t-if="installment_state and is_last_installment" class="w-100 mt-2">
|
||||
<i class="fa fa-clock-o"/>
|
||||
<span class="o_portal_sidebar_timeago" t-att-datetime="due_date"/>
|
||||
</div>
|
||||
</div>
|
||||
<div t-if="installment_state == 'epd' and epd_discount_amount_currency" class="alert alert-warning px-2 py-1 text-center mb-2">
|
||||
<t t-out="epd_discount_msg"/>
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="installment_state in ('next', 'overdue') and not is_last_installment and amount_due != 0.0 and payment_state != 'in_payment'">
|
||||
<h5 name="installment_title" class="w-100 text-center mb-0">
|
||||
<t t-if="installment_state == 'next'">Next Installment</t>
|
||||
<t t-elif="installment_state == 'overdue'">Overdue</t>
|
||||
</h5>
|
||||
<h4
|
||||
name="installment_amount"
|
||||
class="mb-0 text-break w-100 text-center"
|
||||
t-out="next_amount_to_pay"
|
||||
t-options="{'widget': 'monetary', 'display_currency': currency}"
|
||||
/>
|
||||
</t>
|
||||
<div class="small w-100 text-center" t-if="payment_state in ('not_paid', 'partial') and not (is_last_installment and installment_state)">
|
||||
<i class="fa fa-clock-o"/>
|
||||
<span class="o_portal_sidebar_timeago ml4" t-att-datetime="next_due_date"/>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-set="entries">
|
||||
<ul class="list-group list-group-flush flex-wrap flex-row flex-lg-column">
|
||||
<li class="list-group-item flex-grow-1">
|
||||
<div class="o_download_pdf btn-toolbar flex-sm-nowrap">
|
||||
<div class="btn-group flex-grow-1 me-1 mb-1">
|
||||
<a class="btn btn-secondary btn-block o_download_btn" t-att-href="invoice.get_portal_url(report_type='pdf', download=True)" title="Download"><i class="fa fa-download"/> Download</a>
|
||||
</div>
|
||||
<div class="btn-group flex-grow-1 mb-1">
|
||||
<a class="btn btn-secondary btn-block o_print_btn o_portal_invoice_print" t-att-href="invoice.get_portal_url(report_type='pdf')" id="print_invoice_report" title="Print" target="_blank"><i class="fa fa-print"/> Print</a>
|
||||
</div>
|
||||
<div class="d-flex flex-column gap-4 mt-3">
|
||||
<div class="d-flex flex-column gap-2">
|
||||
<div class="o_download_pdf d-flex flex-lg-column flex-xl-row flex-wrap gap-2">
|
||||
<a class="btn btn-light o_download_btn flex-grow-1" t-att-href="invoice.get_portal_url(report_type='pdf', download=True)" title="Download" role="button">
|
||||
<i class="fa fa-download"/> Download
|
||||
</a>
|
||||
</div>
|
||||
</li>
|
||||
<li t-if="invoice.invoice_user_id" class="list-group-item flex-grow-1">
|
||||
<div class="small mb-1"><strong class="text-muted">
|
||||
<t t-if="invoice.move_type == 'out_invoice'">
|
||||
Salesperson
|
||||
</t>
|
||||
<t t-if="invoice.move_type == 'in_invoice'">
|
||||
Purchase Representative
|
||||
</t>
|
||||
</strong></div>
|
||||
<div class="row">
|
||||
<div class="col flex-grow-0 pe-2">
|
||||
<img class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(invoice.invoice_user_id.avatar_128)" alt="Contact"/>
|
||||
</div>
|
||||
<div class="col ps-0">
|
||||
<span t-field="invoice.invoice_user_id" t-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True}'/>
|
||||
<a href="#discussion" class="small"><i class="fa fa-fw fa-comments"/><b>Send message</b></a>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div t-if="invoice.invoice_user_id" class="flex-grow-1">
|
||||
<h6>
|
||||
<small class="text-muted">
|
||||
<t t-if="invoice.move_type == 'out_invoice'">
|
||||
Salesperson
|
||||
</t>
|
||||
<t t-if="invoice.move_type == 'in_invoice'">
|
||||
Purchase Representative
|
||||
</t>
|
||||
</small>
|
||||
</h6>
|
||||
<t t-call="portal.portal_my_contact">
|
||||
<t t-set="_contactAvatar" t-value="image_data_uri(invoice.invoice_user_id.avatar_128)"/>
|
||||
<t t-set="_contactName" t-value="invoice.invoice_user_id.name"/>
|
||||
<t t-set="_contactLink" t-value="True"/>
|
||||
<div t-field="invoice.invoice_user_id" t-options='{"widget": "contact", "fields": ["city", "phone"]}'/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<!-- Page Content -->
|
||||
<div id="invoice_content" class="col-12 col-lg">
|
||||
<div id="invoice_content" class="o_portal_content col-12 col-lg-8 col-xxl-9">
|
||||
<t t-if="error or warning" t-call="account.portal_invoice_error"/>
|
||||
<t t-if="success and (not error and not warning)" t-call="account.portal_invoice_success"/>
|
||||
|
||||
<div class="o_portal_html_view shadow p-3">
|
||||
<div class="o_portal_html_view position-relative bg-white shadow overflow-hidden">
|
||||
<div class="o_portal_html_loader text-center">
|
||||
<i class="fa fa-circle-o-notch fa-spin fa-2x fa-fw text-black-50"></i>
|
||||
</div>
|
||||
<iframe id="invoice_html" class="mt8 mb8" width="100%" height="100%" frameborder="0" scrolling="no" t-att-src="invoice.get_portal_url(report_type='html')"/>
|
||||
<iframe id="invoice_html" class="position-relative d-block" width="100%" height="100%" frameborder="0" scrolling="no" t-att-src="invoice.get_portal_url(report_type='html')"/>
|
||||
</div>
|
||||
<!-- chatter -->
|
||||
<div id="invoice_communication" class="mt-4">
|
||||
<h2>History</h2>
|
||||
<h3>Communication history</h3>
|
||||
<t t-call="portal.message_thread"/>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -173,7 +273,7 @@
|
|||
<!-- Get the fields set in required_fields and display them as form elements. Doesn't create the form itself. -->
|
||||
<template id="portal_invoice_required_fields_form">
|
||||
<t t-foreach="required_fields" t-as="required_field">
|
||||
<div t-attf-class="mb-3 #{error.get(required_field.name) and 'o_has_error' or ''} col-xl-6">
|
||||
<div t-attf-class="mb-3 col-xl-6">
|
||||
<!-- select by default the value passed in the data or corresponding to the "default" attribute on the field -->
|
||||
<t t-set="field_info" t-value="env[required_field.model]._fields[required_field.name]"/>
|
||||
<t t-set="default_value" t-value="extra_field_values.get(field_prefix + required_field.name) or field_info.default and field_info.default(required_field.model)"/>
|
||||
|
|
@ -189,4 +289,51 @@
|
|||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="portal_my_details" inherit_id="portal.portal_my_details">
|
||||
<div name="address_details" position="inside">
|
||||
<t t-if="len(invoice_sending_methods) > 1 and invoice_edi_format">
|
||||
<div class="col-12 d-none d-xl-block">
|
||||
<small class="form-text text-muted">
|
||||
You can choose how you want us to send your invoices, and with which electronic format.
|
||||
</small>
|
||||
</div>
|
||||
</t>
|
||||
<div t-if="len(invoice_sending_methods) > 1" class="row m-0 p-0">
|
||||
<div class="col-xl-6">
|
||||
<label class="col-form-label label-optional" for="invoice_sending_method">
|
||||
Receive invoices
|
||||
</label>
|
||||
<select name="invoice_sending_method" class="form-select">
|
||||
<option
|
||||
t-foreach="invoice_sending_methods"
|
||||
t-as="method"
|
||||
t-att-value="method"
|
||||
t-att-selected="partner_sudo.invoice_sending_method == method"
|
||||
t-out="method_value"
|
||||
/>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<t t-if="invoice_edi_formats">
|
||||
<div class="row m-0 mb-3 p-0">
|
||||
<div class="col-xl-6">
|
||||
<label class="col-form-label label-optional" for="invoice_edi_format">
|
||||
Electronic format
|
||||
</label>
|
||||
<select name="invoice_edi_format" class="form-select">
|
||||
<option value=""/>
|
||||
<option
|
||||
t-foreach="invoice_edi_formats"
|
||||
t-as="format"
|
||||
t-att-value="format"
|
||||
t-att-selected="partner_sudo.invoice_edi_format == format"
|
||||
t-out="format_value"
|
||||
/>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</template>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -2,57 +2,16 @@
|
|||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="view_account_reconcile_model_line_form" model="ir.ui.view">
|
||||
<field name="name">account.reconcile.model.line.form</field>
|
||||
<field name="model">account.reconcile.model.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<field name="model_id" invisible="1"/>
|
||||
<field name="allow_payment_tolerance" invisible="1"/>
|
||||
<field name="payment_tolerance_param" invisible="1"/>
|
||||
<field name="rule_type" invisible="1"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="account_id" options="{'no_create': True}" domain="[('company_id', '=', company_id)]"
|
||||
attrs="{'required': ['|', ('rule_type', '!=', 'invoice_matching'), '&', '&', ('rule_type', '=', 'invoice_matching'), ('allow_payment_tolerance', '=', True), ('payment_tolerance_param', '!=', 0.0)]}"/>
|
||||
<field name="amount_type"/>
|
||||
<field name="tax_ids"
|
||||
domain="[('company_id', '=', company_id)]"
|
||||
options="{'no_create': True}"
|
||||
context="{'append_type_to_tax_name': True}"
|
||||
widget="many2many_tags"/>
|
||||
<field name="show_force_tax_included" invisible="1"/>
|
||||
<field name="force_tax_included"
|
||||
attrs="{'invisible': [('show_force_tax_included', '=', False)]}" force_save="1"/>
|
||||
<field name="analytic_distribution" widget="analytic_distribution"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
options="{'account_field': 'account_id', 'business_domain': 'general'}"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="label"/>
|
||||
<label for="amount_string"/>
|
||||
<div>
|
||||
<field name="amount_string" class="oe_inline"/>
|
||||
<span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','!=','percentage')]}">%</span>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_account_reconcile_model_tree" model="ir.ui.view">
|
||||
<field name="name">account.reconcile.model.tree</field>
|
||||
<field name="name">account.reconcile.model.list</field>
|
||||
<field name="model">account.reconcile.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Bank Reconciliation Move Presets">
|
||||
<list string="Bank Reconciliation Move Presets">
|
||||
<field name="sequence" widget="handle" />
|
||||
<field name="name"/>
|
||||
<field name="rule_type"/>
|
||||
<field name="auto_reconcile"/>
|
||||
<field name="trigger"/>
|
||||
<field name="match_journal_ids" optional="hidden" widget="many2many_tags"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -61,14 +20,27 @@
|
|||
<field name="model">account.reconcile.model</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Operation Templates">
|
||||
<header>
|
||||
<button name="action_set_manual"
|
||||
type="object"
|
||||
string="Set Manual"
|
||||
invisible="trigger == 'manual'"
|
||||
class="oe_highlight"
|
||||
data-hotkey="y"/>
|
||||
<button name="action_set_auto_reconcile"
|
||||
string="Automate"
|
||||
class="oe_highlight"
|
||||
type="object"
|
||||
data-hotkey="q"
|
||||
invisible="trigger == 'auto_reconcile'"/>
|
||||
<field name="trigger" widget="statusbar"/>
|
||||
</header>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="payment_tolerance_param" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button type="object" name="action_reconcile_stat"
|
||||
<button type="object" name="action_reconcile_stat" string="Journal Entries"
|
||||
class="oe_stat_button" icon="fa-book">
|
||||
<field name="number_entries" string="Journal Entries" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="oe_title">
|
||||
|
|
@ -76,155 +48,74 @@
|
|||
<h1><field name="name" placeholder="e.g. Bank Fees"/></h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="rule_type" widget="radio"/>
|
||||
<group id="filters_left_column">
|
||||
<field name="match_journal_ids"
|
||||
placeholder="All bank & cash journals"
|
||||
widget="many2many_tags"
|
||||
options="{'no_create': True}"/>
|
||||
<field name="match_partner_ids"
|
||||
widget="many2many_tags"
|
||||
options="{'no_quick_create': True}"
|
||||
placeholder="All partners"/>
|
||||
<label for="match_amount"/>
|
||||
<div class="d-flex gap-2">
|
||||
<field name="match_amount" placeholder="Any amount"/>
|
||||
<field name="match_amount_min"
|
||||
invisible="match_amount in (False, 'lower')"
|
||||
required="match_amount"/>
|
||||
<span class="o_form_label"
|
||||
invisible="match_amount != 'between'">and</span>
|
||||
<field name="match_amount_max"
|
||||
invisible="match_amount in (False, 'greater')"
|
||||
required="match_amount == 'between'"/>
|
||||
</div>
|
||||
<label for="match_label"/>
|
||||
<div class="d-flex gap-3">
|
||||
<field name="match_label" placeholder="Any label"/>
|
||||
<field name="match_label_param"
|
||||
invisible="not match_label"
|
||||
required="match_label"
|
||||
placeholder="BRT *([\d,\.]+)"/>
|
||||
</div>
|
||||
</group>
|
||||
<group>
|
||||
<field name="auto_reconcile" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<field name="to_check" attrs="{'invisible': [('rule_type', '!=', 'writeoff_button')]}"/>
|
||||
<field name="past_months_limit" attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}"/>
|
||||
<field name="matching_order" attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}"/>
|
||||
<group id="counterpart_entry_right_column" class="col-6">
|
||||
<field name="next_activity_type_id" placeholder="Nothing to do"/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page id="conditions_tab" string="Bank Transactions Conditions">
|
||||
<group id="conditions_tab_group">
|
||||
<group id="left_column" class="col-6">
|
||||
<label for="match_journal_ids"/>
|
||||
<div>
|
||||
<field name="match_journal_ids"
|
||||
widget="many2many_tags"
|
||||
nolabel="1"
|
||||
options="{'no_create': True}"/>
|
||||
</div>
|
||||
<field name="match_nature" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<label for="match_amount" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<div class="d-flex gap-2" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}">
|
||||
<field name="match_amount"/>
|
||||
<field name="match_amount_min"
|
||||
attrs="{'invisible': [('match_amount', 'in', (False, 'lower'))], 'required': [('match_amount', '!=', False)]}"/>
|
||||
<span class="o_form_label"
|
||||
attrs="{'invisible': [('match_amount', '!=', 'between')]}">and</span>
|
||||
<field name="match_amount_max"
|
||||
attrs="{'invisible': [('match_amount', 'in', (False, 'greater'))], 'required': [('match_amount', '=', 'between')]}"/>
|
||||
</div>
|
||||
<label for="allow_payment_tolerance"
|
||||
attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}"/>
|
||||
<div class="d-flex gap-2" attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}">
|
||||
<field name="allow_payment_tolerance"/>
|
||||
<span attrs="{'invisible': [('allow_payment_tolerance', '=', False)]}" class="d-flex gap-2 w-100">
|
||||
<field name="payment_tolerance_param"/>
|
||||
<field name="payment_tolerance_type"/>
|
||||
</span>
|
||||
</div>
|
||||
<field name="match_same_currency" attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}"/>
|
||||
</group>
|
||||
<group id="right column" class="col-6">
|
||||
<span attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}"
|
||||
class="o_form_label o_td_label">Match Invoice/bill with</span>
|
||||
<div class="d-flex gap-3" attrs="{'invisible': [('rule_type', '!=', 'invoice_matching')]}">
|
||||
<label for="match_text_location_label" string="Label"/>
|
||||
<field name="match_text_location_label"/>
|
||||
<label for="match_text_location_note" string="Note"/>
|
||||
<field name="match_text_location_note"/>
|
||||
<label for="match_text_location_reference" string="Reference"/>
|
||||
<field name="match_text_location_reference"/>
|
||||
</div>
|
||||
<label for="match_label" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<div class="d-flex gap-3" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}">
|
||||
<field name="match_label"/>
|
||||
<field name="match_label_param"
|
||||
attrs="{'invisible': [('match_label', '=', False)], 'required': [('match_label', '!=', False)]}"/>
|
||||
</div>
|
||||
<label for="match_note" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<div class="d-flex gap-3" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}">
|
||||
<field name="match_note"/>
|
||||
<field name="match_note_param"
|
||||
attrs="{'invisible': [('match_note', '=', False)], 'required': [('match_note', '!=', False)]}"/>
|
||||
</div>
|
||||
<label for="match_transaction_type" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<div class="d-flex gap-3" attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}">
|
||||
<field name="match_transaction_type"/>
|
||||
<field name="match_transaction_type_param"
|
||||
attrs="{'invisible': [('match_transaction_type', '=', False)], 'required': [('match_transaction_type', '!=', False)]}"/>
|
||||
</div>
|
||||
<field name="match_partner"
|
||||
attrs="{'invisible': [('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<label for="match_partner_ids" class="ml16"
|
||||
attrs="{'invisible': ['|', ('match_partner', '=', False), ('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<field name="match_partner_ids" nolabel="1"
|
||||
widget="many2many_tags"
|
||||
options="{'no_quick_create': True}"
|
||||
attrs="{'invisible': ['|', ('match_partner', '=', False), ('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<label for="match_partner_category_ids" class="ml16"
|
||||
attrs="{'invisible': ['|', ('match_partner', '=', False), ('rule_type', '=', 'writeoff_button')]}"/>
|
||||
<field name="match_partner_category_ids" nolabel="1"
|
||||
widget="many2many_tags"
|
||||
attrs="{'invisible': ['|', ('match_partner', '=', False), ('rule_type', '=', 'writeoff_button')]}"/>
|
||||
</group>
|
||||
</group>
|
||||
<group string="Counterpart Entries" colespan="4"
|
||||
class="oe_inline"
|
||||
attrs="{'invisible': [('rule_type', '=', 'invoice_matching'), '|', ('allow_payment_tolerance', '=', False), '&', ('allow_payment_tolerance', '=', True), ('payment_tolerance_param', '=', 0.0)]}">
|
||||
<group>
|
||||
<field name="show_decimal_separator" invisible="1"/>
|
||||
<field name="decimal_separator"
|
||||
attrs="{'invisible': [('show_decimal_separator', '=', False)]}"
|
||||
groups="base.group_no_one"/>
|
||||
</group>
|
||||
<page id="counterpart_items_tab"
|
||||
string="Counterpart Items"
|
||||
name="counterpart_items">
|
||||
<group class="oe_inline">
|
||||
<field name="line_ids"
|
||||
default="{'default_model_id': self, 'default_company_id': self.company_id}"
|
||||
nolabel="1">
|
||||
<tree editable="bottom">
|
||||
<field name="show_force_tax_included" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<list editable="bottom">
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
|
||||
<field name="sequence"
|
||||
widget="handle"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="account_id"/>
|
||||
<field name="amount_type"/>
|
||||
<field name="journal_id"
|
||||
attrs="{'column_invisible': [('parent.rule_type', '!=', 'writeoff_button')]}"
|
||||
optional="hide"/>
|
||||
<field name="amount_string"/>
|
||||
<field name="tax_ids"
|
||||
widget="many2many_tags"
|
||||
optional="hide"/>
|
||||
<field name="analytic_distribution" widget="analytic_distribution"
|
||||
widget="many2many_tax_tags"
|
||||
optional="hide"
|
||||
/>
|
||||
<field name="analytic_distribution" widget="analytic_distribution" string="Analytic"
|
||||
groups="analytic.group_analytic_accounting"
|
||||
options="{'account_field': 'account_id', 'business_domain': 'general'}"/>
|
||||
<field name="force_tax_included"
|
||||
widget="boolean_toggle"
|
||||
options="{'autosave': False}"
|
||||
attrs="{'invisible': [('show_force_tax_included', '=', False)]}"
|
||||
optional="hide"/>
|
||||
<field name="label"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</group>
|
||||
</page>
|
||||
<page id="partner_tab"
|
||||
string="Partner Mapping"
|
||||
attrs="{'invisible': [('rule_type', 'not in', ('invoice_matching', 'writeoff_suggestion'))]}">
|
||||
<field name="partner_mapping_line_ids"
|
||||
nolabel="1">
|
||||
<tree editable="bottom">
|
||||
<field name="payment_ref_regex"
|
||||
attrs="{'required': [('narration_regex', '=', False)]}"/>
|
||||
<field name="narration_regex"
|
||||
attrs="{'required': [('payment_ref_regex', '=', False)]}"/>
|
||||
<field name="partner_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
|
||||
</sheet>
|
||||
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" groups="base.group_user"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -235,20 +126,15 @@
|
|||
<field name="arch" type="xml">
|
||||
<search string="Bank Reconciliation Move preset">
|
||||
<field name="name"/>
|
||||
<filter string="Matching rules" name="matching_rules" domain="[('rule_type', '=', 'invoice_matching')]"/>
|
||||
<filter string="Counterpart rules" name="counterpart_rules" domain="[('rule_type', '=', 'writeoff_suggestion')]"/>
|
||||
<filter string="Counterpart buttons" name="counterpart_buttons" domain="[('rule_type', '=', 'writeoff_button')]"/>
|
||||
<separator />
|
||||
<filter string="Auto validate" name="auto_validate" domain="[('auto_reconcile', '=', True)]"/>
|
||||
<filter string="Automated" name="auto_validate" domain="[('trigger', '=', 'auto_reconcile')]"/>
|
||||
<separator />
|
||||
<filter string="With Partner matching" name="with_partner_matching" domain="[('match_partner', '=', True)]"/>
|
||||
<filter string="With tax" name="withtax" domain="[('line_ids.tax_ids', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter name="inactive" string="Archived" domain="[('active', '=', False)]"/>
|
||||
<group expand="0" string="Group By">
|
||||
<filter string="Type" name="group_by_type" context="{'group_by': 'rule_type'}"/>
|
||||
<group>
|
||||
<filter string="Journals Availability" name="group_by_journal" context="{'group_by': 'match_journal_ids'}"/>
|
||||
<filter string="Auto-validate" name="group_by_auto_validate" context="{'group_by': 'auto_reconcile'}"/>
|
||||
<filter string="Automation" name="group_by_auto_validate" context="{'group_by': 'trigger'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
@ -257,7 +143,8 @@
|
|||
<record id="action_account_reconcile_model" model="ir.actions.act_window">
|
||||
<field name="name">Reconciliation Models</field>
|
||||
<field name="res_model">account.reconcile.model</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="path">reconciliation-models</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="search_view_id" ref="view_account_reconcile_model_search"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
|
|||
|
|
@ -3,17 +3,18 @@
|
|||
<data>
|
||||
<!-- QWeb Reports -->
|
||||
<record id="account_invoices" model="ir.actions.report">
|
||||
<field name="name">Invoices</field>
|
||||
<field name="name">Invoice PDF</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">account.report_invoice_with_payments</field>
|
||||
<field name="domain">[]</field>
|
||||
<field name="report_file">account.report_invoice_with_payments</field>
|
||||
<field name="print_report_name">object._get_report_base_filename()</field>
|
||||
<field name="attachment">object._get_report_attachment_filename()</field>
|
||||
<field name="is_invoice_report">True</field>
|
||||
<field name="print_report_name">(object._get_report_base_filename())</field>
|
||||
<field name="attachment"/>
|
||||
<field name="binding_model_id" ref="model_account_move"/>
|
||||
<field name="binding_type">report</field>
|
||||
<field name="groups_id" eval="[(4, ref('account.group_account_invoice')),
|
||||
(4, ref('account.group_account_readonly'))]"/>
|
||||
<field name="group_ids" eval="[(4, ref('account.group_account_invoice')), (4, ref('account.group_account_readonly'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="action_account_original_vendor_bill" model="ir.actions.report">
|
||||
|
|
@ -25,19 +26,20 @@
|
|||
<field name="report_file">account.report_original_vendor_bill</field>
|
||||
<field name="attachment">'original_vendor_bill.pdf'</field>
|
||||
<field name="attachment_use">True</field>
|
||||
<field name="binding_view_types">list</field>
|
||||
<field name="domain" eval="[('move_type', 'in', ('in_invoice', 'in_refund', 'in_receipt')), ('message_main_attachment_id', '!=', False)]"/>
|
||||
</record>
|
||||
|
||||
<record id="account_invoices_without_payment" model="ir.actions.report">
|
||||
<field name="name">Invoices without Payment</field>
|
||||
<field name="name">PDF without Payment</field>
|
||||
<field name="model">account.move</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">account.report_invoice</field>
|
||||
<field name="report_file">account.report_invoice</field>
|
||||
<field name="print_report_name">object._get_report_base_filename()</field>
|
||||
<field name="attachment">object._get_report_attachment_filename()</field>
|
||||
<field name="print_report_name">(object._get_report_base_filename())</field>
|
||||
<field name="attachment"/>
|
||||
<field name="binding_model_id" ref="model_account_move"/>
|
||||
<field name="binding_type">report</field>
|
||||
<field name="domain" eval="[('move_type', '!=', 'entry')]"/>
|
||||
</record>
|
||||
|
||||
<record id="action_report_payment_receipt" model="ir.actions.report">
|
||||
|
|
@ -50,12 +52,31 @@
|
|||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
<!-- The top margin on the default A4 format is way too big -->
|
||||
<record id="paperformat_euro_bank_statement" model="report.paperformat">
|
||||
<field name="name">A4 - statement</field>
|
||||
<field name="default" eval="True" />
|
||||
<field name="format">A4</field>
|
||||
<field name="page_height">0</field>
|
||||
<field name="page_width">0</field>
|
||||
<field name="orientation">Portrait</field>
|
||||
<field name="margin_top">52</field>
|
||||
<field name="margin_bottom">32</field>
|
||||
<field name="margin_left">0</field>
|
||||
<field name="margin_right">0</field>
|
||||
<field name="header_line" eval="False" />
|
||||
<field name="header_spacing">52</field>
|
||||
<field name="dpi">90</field>
|
||||
<field name="css_margins" eval="True" />
|
||||
</record>
|
||||
|
||||
<record id="action_report_account_statement" model="ir.actions.report">
|
||||
<field name="name">Statement</field>
|
||||
<field name="model">account.bank.statement</field>
|
||||
<field name="report_type">qweb-pdf</field>
|
||||
<field name="report_name">account.report_statement</field>
|
||||
<field name="report_file">account.report_statement</field>
|
||||
<field name="paperformat_id" ref="account.paperformat_euro_bank_statement"/>
|
||||
<field name="binding_type">report</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,53 +3,57 @@
|
|||
<data>
|
||||
|
||||
<record id="view_tax_tree" model="ir.ui.view">
|
||||
<field name="name">account.tax.tree</field>
|
||||
<field name="name">account.tax.list</field>
|
||||
<field name="model">account.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Tax" decoration-muted="not active">
|
||||
<list string="Account Tax" decoration-muted="not active">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="description" optional="show"/>
|
||||
<field name="type_tax_use"/>
|
||||
<field name="original_tax_ids" widget="many2many_tax_tags" optional="hide"/>
|
||||
<field name="tax_scope"/>
|
||||
<field name="description"/>
|
||||
<field name="invoice_label"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="country_id" optional="hide"/>
|
||||
<field name="active" widget="boolean_toggle"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_onboarding_tax_tree" model="ir.ui.view">
|
||||
<field name="name">account.onboarding.tax.tree</field>
|
||||
<field name="name">account.onboarding.tax.list</field>
|
||||
<field name="model">account.tax</field>
|
||||
<field name="inherit_id" ref="account.view_tax_tree" />
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//tree" position="attributes">
|
||||
<xpath expr="//list" position="attributes">
|
||||
<attribute name="default_order">active desc, type_tax_use desc, amount desc, sequence</attribute>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="tax_repartition_line_tree" model="ir.ui.view">
|
||||
<field name="name">account.tax.repartition.line.tree</field>
|
||||
<field name="name">account.tax.repartition.line.list</field>
|
||||
<field name="model">account.tax.repartition.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree editable="bottom" create="1" delete="1">
|
||||
<list editable="bottom" create="1" delete="1">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="factor_percent" attrs="{'invisible': [('repartition_type', '=', 'base')]}"/>
|
||||
<field name="factor_percent"
|
||||
invisible="repartition_type == 'base'"
|
||||
widget="account_tax_repartition_line_factor_percent"/>
|
||||
<field name="repartition_type"/>
|
||||
<field name="account_id" attrs="{'invisible': [('repartition_type', '=', 'base')]}" options="{'no_create': True}"/>
|
||||
<field name="account_id" invisible="repartition_type == 'base'" options="{'no_create': True}"/>
|
||||
<field name="tag_ids"
|
||||
widget="many2many_tags"
|
||||
options="{'no_create': True}"
|
||||
domain="tag_ids_domain"/>
|
||||
<field name="use_in_tax_closing"
|
||||
optional="hidden"
|
||||
attrs="{'invisible': [('repartition_type', '=', 'base')]}"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="tag_ids_domain" invisible="1"/>
|
||||
</tree>
|
||||
invisible="repartition_type == 'base'"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="tag_ids_domain" column_invisible="True"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -57,10 +61,27 @@
|
|||
<field name="name">account.invoice.line.tax.search</field>
|
||||
<field name="model">account.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Tax">
|
||||
<field name="display_name" string="name"/>
|
||||
<list string="Account Tax">
|
||||
<field name="display_name" string="Name"/>
|
||||
<field name="tax_scope"/>
|
||||
<field name="description"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="account_tax_fiscal_position_view_tree" model="ir.ui.view">
|
||||
<field name="name">account.fiscal.position.tax.list</field>
|
||||
<field name="model">account.tax</field>
|
||||
<field name="inherit_id" ref="account.account_tax_view_tree" />
|
||||
<field name="mode">primary</field>
|
||||
<field name="priority">20</field>
|
||||
<field name="arch" type="xml">
|
||||
<field name="display_name" position="before">
|
||||
<field name="type_tax_use" />
|
||||
</field>
|
||||
<field name="display_name" position="after">
|
||||
<field name="original_tax_ids" widget="many2many_tax_tags" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -69,22 +90,18 @@
|
|||
<field name="model">account.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<kanban class="o_kanban_mobile">
|
||||
<field name="name"/>
|
||||
<field name="type_tax_use"/>
|
||||
<field name="tax_scope"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div t-attf-class="oe_kanban_card oe_kanban_global_click">
|
||||
<div class="row mb4">
|
||||
<div class="col-6">
|
||||
<strong><span><t t-esc="record.name.value"/></span></strong>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<span class="badge rounded-pill"><t t-esc="record.type_tax_use.value"/></span>
|
||||
<span class="badge rounded-pill"><t t-esc="record.tax_scope.value"/></span>
|
||||
</div>
|
||||
<t t-name="card">
|
||||
<div class="row mb4">
|
||||
<div class="col-6">
|
||||
<field class="fw-bolder" name="name"/>
|
||||
</div>
|
||||
<div class="col-6 text-end">
|
||||
<field class="badge rounded-pill" name="type_tax_use"/>
|
||||
<field class="badge rounded-pill" name="tax_scope"/>
|
||||
</div>
|
||||
</div>
|
||||
<field class="text-muted" name="description"/>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>
|
||||
|
|
@ -96,20 +113,26 @@
|
|||
<field name="model">account.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Taxes">
|
||||
<field name="name_searchable" string="Name"/>
|
||||
<field name="name" string="Name"/>
|
||||
<field name="description"/>
|
||||
<field name="amount"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="fiscal_position_ids"/>
|
||||
<filter string="Sale" name="sale" domain="[('type_tax_use','=','sale')]" />
|
||||
<filter string="Purchase" name="purchase" domain="[('type_tax_use','=','purchase')]" />
|
||||
<separator/>
|
||||
<filter string="Services" name="service" domain="[('tax_scope','=','service')]" />
|
||||
<filter string="Goods" name="goods" domain="[('tax_scope','=','consu')]" />
|
||||
<separator/>
|
||||
<filter string="Domestic" name="domestictax" domain="[('is_domestic', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter name="active" string="Active" domain="[('active','=',True)]" help="Show active taxes"/>
|
||||
<filter name="inactive" string="Inactive" domain="[('active','=',False)]" help="Show inactive taxes"/>
|
||||
<group string="Group By">
|
||||
<group>
|
||||
<filter string="Company" name="company" domain="[]" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
|
||||
<filter string="Tax Type" name="taxapp" domain="[]" context="{'group_by':'type_tax_use'}"/>
|
||||
<filter string="Tax Scope" name="taxapp" domain="[]" context="{'group_by':'tax_scope'}"/>
|
||||
<filter string="Fiscal Position" name="groupfp" domain="[]" context="{'group_by': 'fiscal_position_ids'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
|
|
@ -120,7 +143,7 @@
|
|||
<field name="model">account.tax</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Search Taxes">
|
||||
<field name="name" filter_domain="['|', ('name','ilike',self), ('description','ilike',self)]" string="Tax"/>
|
||||
<field name="name" filter_domain="['|', '|', ('name', 'ilike', self), ('description', 'ilike', self), ('invoice_label', 'ilike', self)]" string="Tax"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
</search>
|
||||
</field>
|
||||
|
|
@ -140,58 +163,72 @@
|
|||
<field name="active" widget="boolean_toggle"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="is_used" invisible="1"/>
|
||||
<field name="type_tax_use"/>
|
||||
<field name="tax_scope"/>
|
||||
<label for="amount" attrs="{'invisible':[('amount_type','not in', ('fixed', 'percent', 'division'))]}"/>
|
||||
<div attrs="{'invisible':[('amount_type','not in', ('fixed', 'percent', 'division'))]}">
|
||||
<label for="amount" invisible="amount_type not in ('fixed', 'percent', 'division')"/>
|
||||
<div invisible="amount_type not in ('fixed', 'percent', 'division')">
|
||||
<field name="amount" class="oe_inline" nolabel="1"/>
|
||||
<span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}">%</span>
|
||||
<span class="o_form_label oe_inline" invisible="amount_type == 'fixed'">%</span>
|
||||
</div>
|
||||
<field name="fiscal_position_ids" widget="many2many_tags" placeholder="all"/>
|
||||
<field name="original_tax_ids"
|
||||
widget="many2many_tags"
|
||||
invisible="not display_alternative_taxes_field"
|
||||
options="{'no_create': True}"
|
||||
/>
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Definition" name="definition">
|
||||
<div attrs="{'invisible': [('amount_type', '=', 'group')]}">
|
||||
<group invisible="amount_type == 'group'">
|
||||
<field name="country_code" invisible="1"/>
|
||||
<group string="Distribution for Invoices">
|
||||
<group string="Distribution for Invoices" class="mw-100">
|
||||
<field name="invoice_repartition_line_ids" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
<group string="Distribution for Refunds">
|
||||
<group string="Distribution for Refunds" class="mw-100">
|
||||
<field name="refund_repartition_line_ids" nolabel="1" colspan="2"/>
|
||||
</group>
|
||||
</div>
|
||||
<field name="children_tax_ids" attrs="{'invisible':['|', ('amount_type','!=','group'), ('type_tax_use','=','none')]}" domain="[('type_tax_use','in',('none',type_tax_use)), ('amount_type','!=','group')]">
|
||||
<tree string="Children Taxes">
|
||||
</group>
|
||||
<field name="children_tax_ids" invisible="amount_type != 'group' or type_tax_use == 'none'" domain="[('type_tax_use','in',('none',type_tax_use)), ('amount_type','!=','group')]">
|
||||
<list string="Children Taxes">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="amount_type"/>
|
||||
<field name="amount"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</page>
|
||||
<page string="Advanced Options" name="advanced_options">
|
||||
<group>
|
||||
<group>
|
||||
<field name="invoice_label"/>
|
||||
<field name="description"/>
|
||||
<field name="tax_group_id" attrs="{'invisible': [('amount_type', '=', 'group')], 'required': [('amount_type', '!=', 'group')]}"/>
|
||||
<field name="analytic" attrs="{'invisible':[('amount_type','=', 'group')]}" groups="analytic.group_analytic_accounting" />
|
||||
<field name="tax_group_id" invisible="amount_type == 'group'" required="amount_type != 'group'"/>
|
||||
<field name="analytic" invisible="amount_type == 'group'" groups="analytic.group_analytic_accounting" />
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
<field name="country_id" required="True"/>
|
||||
<field name="invoice_legal_notes"/>
|
||||
</group>
|
||||
<group name="advanced_booleans">
|
||||
<field name="price_include" attrs="{'invisible':[('amount_type','=', 'group')]}" />
|
||||
<field name="include_base_amount" attrs="{'invisible':[('amount_type','=', 'group')]}" />
|
||||
<field name="price_include" invisible="1"/>
|
||||
<field name="price_include_override"
|
||||
invisible="amount_type == 'group' or has_negative_factor"
|
||||
placeholder="Default"
|
||||
/>
|
||||
<field name="include_base_amount" invisible="amount_type == 'group'"/>
|
||||
<field name="is_base_affected"
|
||||
attrs="{'invisible': ['|', ('amount_type','=', 'group'), ('price_include', '=', True)]}"
|
||||
invisible="amount_type == 'group' or price_include"
|
||||
groups="base.group_no_one"/>
|
||||
<field name="hide_tax_exigibility" invisible="1"/>
|
||||
<field name="tax_exigibility" widget="radio" attrs="{'invisible':['|', ('amount_type','=', 'group'), ('hide_tax_exigibility', '=', False)]}"/>
|
||||
<field name="cash_basis_transition_account_id" options="{'no_create': True}" attrs="{'invisible': [('tax_exigibility', '=', 'on_invoice')], 'required': [('tax_exigibility', '=', 'on_payment')]}" groups="account.group_account_readonly"/>
|
||||
<field name="tax_exigibility" widget="radio" invisible="amount_type == 'group' or not hide_tax_exigibility"/>
|
||||
<field name="cash_basis_transition_account_id" options="{'no_create': True}" invisible="tax_exigibility == 'on_invoice'" required="tax_exigibility == 'on_payment'" groups="account.group_account_readonly"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<chatter/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
|
@ -199,8 +236,8 @@
|
|||
<record id="action_tax_form" model="ir.actions.act_window">
|
||||
<field name="name">Taxes</field>
|
||||
<field name="res_model">account.tax</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="domain" eval="False"/> <!-- Force empty -->
|
||||
<field name="path">taxes</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="context">{'search_default_sale': True, 'search_default_purchase': True, 'active_test': False}</field>
|
||||
<field name="view_id" ref="view_tax_tree"/>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -217,7 +254,7 @@
|
|||
<search string="Search Group">
|
||||
<field name="name"/>
|
||||
<field name="country_id"/>
|
||||
<group string="Group By">
|
||||
<group>
|
||||
<filter string="Country" name="group_by_country" domain="[]" context="{'group_by': 'country_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
|
|
@ -225,33 +262,23 @@
|
|||
</record>
|
||||
|
||||
<record id="view_tax_group_tree" model="ir.ui.view">
|
||||
<field name="name">account.tax.group.tree</field>
|
||||
<field name="name">account.tax.group.list</field>
|
||||
<field name="model">account.tax.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Account Tax Group" editable="bottom" create="false">
|
||||
<list string="Account Tax Group" editable="bottom" open_form_view="True">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="country_id"/>
|
||||
<field name="country_code" invisible="True"/>
|
||||
<field name="company_id" column_invisible="True"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="country_code" column_invisible="True"/>
|
||||
|
||||
<!--
|
||||
'force_account_company' context key is used so that the RedirectWarning
|
||||
potentially raised during tax closing doesn't allow the user choosing
|
||||
accounts from another company in case the multicompany selector
|
||||
currently grants access to multiple companies.
|
||||
-->
|
||||
<field name="property_tax_payable_account_id"
|
||||
domain="[('company_id', '=', context['force_account_company'])] if context.get('force_account_company') else []"
|
||||
/>
|
||||
<field name="property_tax_receivable_account_id"
|
||||
domain="[('company_id', '=', context['force_account_company'])] if context.get('force_account_company') else []"
|
||||
/>
|
||||
<field name="property_advance_tax_payment_account_id"
|
||||
domain="[('company_id', '=', context['force_account_company'])] if context.get('force_account_company') else []"
|
||||
/>
|
||||
<field name="tax_payable_account_id"/>
|
||||
<field name="tax_receivable_account_id"/>
|
||||
<field name="advance_tax_payment_account_id"/>
|
||||
|
||||
<field name="preceding_subtotal" optional="hide"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -260,17 +287,20 @@
|
|||
<field name="model">account.tax.group</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Account Tax Group">
|
||||
<field name="company_id" invisible="1"/>
|
||||
<sheet>
|
||||
<group>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
<field name="country_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="sequence"/>
|
||||
<field name="pos_receipt_label" string="Label on PoS Receipts" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="property_tax_payable_account_id"/>
|
||||
<field name="property_tax_receivable_account_id"/>
|
||||
<field name="property_advance_tax_payment_account_id"/>
|
||||
<field name="tax_payable_account_id" domain="[('company_ids', '=', company_id)]"/>
|
||||
<field name="tax_receivable_account_id" domain="[('company_ids', '=', company_id)]"/>
|
||||
<field name="advance_tax_payment_account_id" domain="[('company_ids', '=', company_id)]"/>
|
||||
<field name="preceding_subtotal"/>
|
||||
</group>
|
||||
</group>
|
||||
|
|
@ -282,7 +312,7 @@
|
|||
<record id="action_tax_group" model="ir.actions.act_window">
|
||||
<field name="name">Tax Groups</field>
|
||||
<field name="res_model">account.tax.group</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="view_id" ref="view_tax_group_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
|
|||
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="view_base_document_layout" model="ir.ui.view">
|
||||
<field name="name">Document Layout</field>
|
||||
<field name="model">base.document.layout</field>
|
||||
<field name="inherit_id" ref="web.view_base_document_layout"/>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='paperformat_id']" position="after">
|
||||
<field name="from_invoice" invisible="1"/>
|
||||
<field name="vat"/>
|
||||
<field name="account_number" string="Bank Account Number" required="qr_code" placeholder="BE71096123456769"/>
|
||||
<field name="qr_code" string="QR Code" invisible="not from_invoice"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_base_document_layout_configurator" model="ir.actions.act_window">
|
||||
<field name="name">Configure your document layout</field>
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">new</field>
|
||||
<field name="res_model">base.document.layout</field>
|
||||
<field name="view_id" ref="account.view_base_document_layout"/>
|
||||
<field name="context">{"dialog_size": "extra-large"}</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<record id="ir_actions_report_form_inherit_account" model="ir.ui.view">
|
||||
<field name="name">ir.actions.report.form.inherit.account</field>
|
||||
<field name="model">ir.actions.report</field>
|
||||
<field name="inherit_id" ref="base.act_report_xml_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="paperformat_id" position="after">
|
||||
<field name="is_invoice_report" invisible="model != 'account.move'"/>
|
||||
</field>
|
||||
|
||||
<field name="report_name" position="after">
|
||||
<field name="domain"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_message_tree_audit_log" model="ir.ui.view">
|
||||
<field name="name">mail.message.list.inherit.audit.log</field>
|
||||
<field name="model">mail.message</field>
|
||||
<field name="priority">99</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<list edit="0" delete="0" create="0" action="action_open_document" type="object">
|
||||
<field name="date"/>
|
||||
<field name="author_id" widget="many2one_avatar"/>
|
||||
<field name="res_id" string="Name"/>
|
||||
<field name="account_audit_log_preview"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_message_tree_audit_log_search" model="ir.ui.view">
|
||||
<field name="name">mail.message.search</field>
|
||||
<field name="model">mail.message</field>
|
||||
<field name="priority">99</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Messages Search">
|
||||
<field name="account_audit_log_move_id"/>
|
||||
<field name="account_audit_log_account_id"/>
|
||||
<field name="account_audit_log_tax_id"/>
|
||||
<field name="account_audit_log_partner_id"/>
|
||||
<field name="account_audit_log_company_id"/>
|
||||
<field name="author_id"/>
|
||||
<field name="date"/>
|
||||
<filter string="Journal Entry" name="account_move" domain="[('model', '=', 'account.move')]"/>
|
||||
<filter string="Account" name="account_account" domain="[('model', '=', 'account.account')]"/>
|
||||
<filter string="Taxes" name="account_tax" domain="[('model', '=', 'account.tax')]"/>
|
||||
<filter string="Partners" name="res_partner" domain="[('model', '=', 'res.partner')]"/>
|
||||
<filter string="Company" name="res_company" domain="[('model', '=', 'res.company')]"/>
|
||||
<separator/>
|
||||
<field string="Field Value" name="tracking_value_ids" filter_domain="[
|
||||
'|', ('tracking_value_ids.old_value_char', 'ilike', self),
|
||||
'|', ('tracking_value_ids.new_value_char', 'ilike', self),
|
||||
'|', ('tracking_value_ids.old_value_text', 'ilike', self),
|
||||
('tracking_value_ids.new_value_text', 'ilike', self),
|
||||
]"/>
|
||||
<field string="Field" name="tracking_value_ids" filter_domain="[('tracking_value_ids.field_id', 'ilike', self)]"/>
|
||||
<separator/>
|
||||
<filter string="Update" name="update_only" domain="[('tracking_value_ids', '!=', False)]" groups="base.group_system"/>
|
||||
<filter string="Create" name="create_only" domain="[('tracking_value_ids', '=', False)]" groups="base.group_system"/>
|
||||
<filter string="Restricted" name="restricted_by_audit_trail" domain="[('account_audit_log_restricted', '=', True)]"/>
|
||||
<separator/>
|
||||
<filter name="date" string="Date" date="date"/>
|
||||
<group>
|
||||
<filter string="Date" name="group_by_date" domain="[]" context="{'group_by': 'date'}"/>
|
||||
<filter string="Updated Data" name="group_by_res_id" domain="[]" context="{'group_by': 'res_id'}"/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_audit_trail_report" model="ir.actions.act_window">
|
||||
<field name="name">Audit Trail</field>
|
||||
<field name="res_model">mail.message</field>
|
||||
<field name="view_id" ref="view_message_tree_audit_log"/>
|
||||
<field name="view_mode">list</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">This is the Audit Trail Report</p>
|
||||
</field>
|
||||
<field name="domain">[
|
||||
('message_type', '=', 'notification'),
|
||||
('model', 'in', ('account.move', 'account.account', 'account.tax', 'res.partner', 'res.company')),
|
||||
]</field>
|
||||
<field name="search_view_id" ref="view_message_tree_audit_log_search"/>
|
||||
</record>
|
||||
|
||||
<menuitem id="account_audit_trail_menu" name="Audit Trail" action="action_account_audit_trail_report" parent="account.account_logs_menu"/>
|
||||
</odoo>
|
||||
|
|
@ -7,59 +7,58 @@
|
|||
<field name="arch" type="xml">
|
||||
<form string="Fiscal Position">
|
||||
<div groups="account.group_account_manager"
|
||||
class="alert alert-info mb-0"
|
||||
class="alert alert-info"
|
||||
role="alert"
|
||||
attrs="{'invisible': [('foreign_vat_header_mode', '=', False)]}">
|
||||
|
||||
<div attrs="{'invisible': [('foreign_vat_header_mode', '!=', 'templates_found')]}">
|
||||
invisible="not foreign_vat_header_mode">
|
||||
<div invisible="foreign_vat_header_mode not in ('templates_found', 'no_template')">
|
||||
Click
|
||||
<button
|
||||
string="here"
|
||||
type="object"
|
||||
name="action_create_foreign_taxes"
|
||||
class="oe_link"
|
||||
style="padding: 0; vertical-align: baseline;"/>
|
||||
class="oe_link p-0 align-baseline"
|
||||
/>
|
||||
to create the taxes for this country.
|
||||
</div>
|
||||
|
||||
<span attrs="{'invisible': [('foreign_vat_header_mode', '!=', 'no_template')]}">
|
||||
No tax template found for this country. Please install the corresponding localization module.
|
||||
<button
|
||||
string="Install new module"
|
||||
type="action"
|
||||
name="account.open_account_charts_modules"
|
||||
class="oe_link"
|
||||
groups="base.group_system"
|
||||
style="padding: 0; vertical-align: baseline;"/>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<sheet>
|
||||
<div class="oe_button_box" name="button_box"/>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<div class="oe_button_box" name="button_box">
|
||||
<button class="oe_stat_button" name="action_open_related_taxes"
|
||||
type="object" icon="fa-bars"
|
||||
invisible="not tax_ids">
|
||||
<div class="o_stat_info">
|
||||
<span class="o_stat_text">
|
||||
Taxes
|
||||
</span>
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
<widget name="web_ribbon" title="Archived" bg_color="text-bg-danger" invisible="active"/>
|
||||
<group>
|
||||
<group>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="company_id" invisible="1"/>
|
||||
<field name="states_count" invisible="1"/>
|
||||
<field name="company_country_id" invisible="1"/>
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
<field name="foreign_vat_header_mode" invisible="1"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="auto_apply"/>
|
||||
<field name="vat_required" attrs="{'invisible': [('auto_apply', '!=', True)]}"/>
|
||||
<field name="vat_required" invisible="not auto_apply"/>
|
||||
<field name="foreign_vat"/>
|
||||
<field name="country_group_id" attrs="{'invisible': [('auto_apply', '=', False), ('foreign_vat', '=', False)], 'required': [('foreign_vat', '!=', False), ('country_id', '=', False)]}"/>
|
||||
<field name="country_group_id" invisible="not auto_apply"/>
|
||||
<field name="country_id"
|
||||
attrs="{'required': [('foreign_vat', '!=', False), ('country_group_id', '=', False)]}"
|
||||
required="foreign_vat"
|
||||
options="{'no_open': True, 'no_create': True}"/>
|
||||
<field name="state_ids" widget="many2many_tags" domain="[('country_id', '=', country_id)]"
|
||||
attrs="{'invisible': ['|', '|', '&', ('auto_apply', '!=', True), ('foreign_vat', '=', False), ('country_id', '=', False), ('states_count', '=', 0)]}"/>
|
||||
invisible="(not auto_apply and not foreign_vat) or not country_id or states_count == 0"/>
|
||||
<label for="zip_from" string="Zip Range"
|
||||
attrs="{'invisible': ['|', ('auto_apply', '!=', True), ('country_id', '=', False)]}"/>
|
||||
<div attrs="{'invisible': ['|', ('auto_apply', '!=', True), ('country_id', '=', False)]}">
|
||||
invisible="not auto_apply or not country_id"/>
|
||||
<div invisible="not auto_apply or not country_id">
|
||||
<span> From </span>
|
||||
<field name="zip_from" class="oe_inline"/>
|
||||
<div class="oe_edit_only"/>
|
||||
|
|
@ -69,44 +68,15 @@
|
|||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="tax_mapping" string="Tax Mapping">
|
||||
<field name="tax_ids" widget="one2many" nolabel="1" context="{'append_type_to_tax_name': True}">
|
||||
<tree name="tax_map_tree" string="Tax Mapping" editable="bottom" no_open="1" decoration-muted="tax_dest_id and not tax_dest_active">
|
||||
<field name="tax_dest_active" invisible="1"/>
|
||||
<field name="tax_src_id"
|
||||
domain="[
|
||||
('type_tax_use', '!=', 'none'),
|
||||
('country_id', '=', parent.company_country_id),
|
||||
'|', ('company_id', '=', False), ('company_id', '=', parent.company_id)
|
||||
]"
|
||||
context="{'append_type_to_tax_name': True}"
|
||||
/>
|
||||
|
||||
<field name="tax_dest_id"
|
||||
domain="[
|
||||
('type_tax_use', '!=', 'none'),
|
||||
('country_id', '=', parent.country_id if parent.foreign_vat else parent.company_country_id),
|
||||
'|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"
|
||||
context="{'append_type_to_tax_name': True}"
|
||||
/>
|
||||
</tree>
|
||||
<form name="tax_map_form" string="Tax Mapping">
|
||||
<group>
|
||||
<field name="tax_src_id" domain="[('type_tax_use', '!=', 'none')]" context="{'append_type_to_tax_name': True}"/>
|
||||
<field name="tax_dest_id" domain="[('type_tax_use', '!=', 'none')]" context="{'append_type_to_tax_name': True}"/>
|
||||
</group>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
<page name="account_mapping" string="Account Mapping" groups="account.group_account_readonly">
|
||||
<field name="account_ids" widget="one2many" nolabel="1">
|
||||
<tree string="Account Mapping" editable="bottom">
|
||||
<field name="account_src_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
|
||||
<field name="account_dest_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
|
||||
</tree>
|
||||
<list string="Account Mapping" editable="bottom">
|
||||
<field name="account_src_id" domain="['|', ('company_ids', '=', parent.company_id), ('account_type', '!=', 'off_balance')]"/>
|
||||
<field name="account_dest_id" domain="['|', ('company_ids', '=', parent.company_id), ('account_type', '!=', 'off_balance')]"/>
|
||||
</list>
|
||||
<form string="Account Mapping">
|
||||
<field name="account_src_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
|
||||
<field name="account_dest_id" domain="['|', ('company_id', '=', False), ('company_id', '=', parent.company_id)]"/>
|
||||
<field name="account_src_id" domain="['|', ('company_ids', '=', parent.company_id), ('account_type', '!=', 'off_balance')]"/>
|
||||
<field name="account_dest_id" domain="['|', ('company_ids', '=', parent.company_id), ('account_type', '!=', 'off_balance')]"/>
|
||||
</form>
|
||||
</field>
|
||||
</page>
|
||||
|
|
@ -123,25 +93,26 @@
|
|||
<search string="Search Fiscal Positions">
|
||||
<field name="name" string="Fiscal Position"/>
|
||||
<filter name="active" string="Archived" domain="[('active', '=', False)]"/>
|
||||
<filter name="domestic" string="Domestic" domain="[('is_domestic', '=', True)]"/>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_account_position_tree" model="ir.ui.view">
|
||||
<field name="name">account.fiscal.position.tree</field>
|
||||
<field name="name">account.fiscal.position.list</field>
|
||||
<field name="model">account.fiscal.position</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Fiscal Position">
|
||||
<list string="Fiscal Position">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" groups="base.group_multi_company" options="{'no_create': True}"/>
|
||||
</tree>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_action_supplier_bills" model="ir.actions.act_window">
|
||||
<field name="name">Vendor Bills</field>
|
||||
<field name="res_model">account.move</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="view_mode">list,form,graph</field>
|
||||
<field name="domain">[('move_type','in',('in_invoice', 'in_refund'))]</field>
|
||||
<field name="context">{'search_default_partner_id': active_id, 'default_move_type': 'in_invoice', 'default_partner_id': active_id}</field>
|
||||
<field name="help" type="html">
|
||||
|
|
@ -160,12 +131,12 @@
|
|||
<field name="name">partner.view.buttons</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form" />
|
||||
<field name="priority" eval="11"/>
|
||||
<field name="priority" eval="5"/>
|
||||
<field name="arch" type="xml">
|
||||
<div name="button_box" position="inside">
|
||||
<button type="object" class="oe_stat_button" icon="fa-pencil-square-o" name="action_view_partner_invoices"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"
|
||||
context="{'default_partner_id': active_id}">
|
||||
context="{'default_partner_id': id}">
|
||||
<div class="o_form_field o_stat_info">
|
||||
<span class="o_stat_value">
|
||||
<field name="currency_id" invisible="1"/>
|
||||
|
|
@ -180,29 +151,33 @@
|
|||
name="%(account.res_partner_action_supplier_bills)d"
|
||||
groups="account.group_account_invoice"
|
||||
icon="fa-pencil-square-o" help="Vendor Bills"
|
||||
attrs="{'invisible': [('supplier_invoice_count', '=', 0)]}"
|
||||
invisible="supplier_invoice_count == 0"
|
||||
>
|
||||
<field string="Vendor Bills" name="supplier_invoice_count" widget="statinfo"/>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<page name="internal_notes" position="inside">
|
||||
<group groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<group groups="account.group_warning_account" col="2">
|
||||
<separator string="Warning on the Invoice" colspan="2"/>
|
||||
<field name="invoice_warn" nolabel="1" colspan="2" required="1"/>
|
||||
<field name="invoice_warn_msg" placeholder="Type a message..." colspan="2" nolabel="1"
|
||||
attrs="{'required':[('invoice_warn','!=', False), ('invoice_warn','!=','no-message')], 'invisible':[('invoice_warn','in',(False,'no-message'))]}"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<field name="vat" position="before">
|
||||
<field name="partner_vat_placeholder" invisible="1"/> <!-- Needed for the placeholder widget -->
|
||||
</field>
|
||||
<field name="vat" position="attributes">
|
||||
<attribute name="options">{'placeholder_field': 'partner_vat_placeholder'}</attribute>
|
||||
</field>
|
||||
|
||||
<field name="company_registry" position="before">
|
||||
<field name="partner_company_registry_placeholder" invisible="1"/> <!-- Needed for the placeholder widget -->
|
||||
</field>
|
||||
<field name="company_registry" position="attributes">
|
||||
<attribute name="options">{'placeholder_field': 'partner_company_registry_placeholder'}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_account_fiscal_position_form" model="ir.actions.act_window">
|
||||
<field name="name">Fiscal Positions</field>
|
||||
<field name="res_model">account.fiscal.position</field>
|
||||
<field name="view_mode">tree,kanban,form</field>
|
||||
<field name="path">fiscal-positions</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="search_view_id" ref="view_account_position_filter"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
@ -221,53 +196,61 @@
|
|||
<field name="priority">2</field>
|
||||
<field name="inherit_id" ref="base.view_partner_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='company_id']" position="after">
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//sheet" position="before">
|
||||
<div groups="account.group_account_invoice,account.group_account_readonly" class="alert alert-warning" role="alert" style="margin-bottom:0px;"
|
||||
attrs="{'invisible': [('duplicated_bank_account_partners_count', '=', 0)]}">
|
||||
One or more Bank Accounts set on this partner are also used by other <bold><button class="alert-link" type="object" name="action_view_partner_with_same_bank" role="button" string="Partners" style="padding: 0;vertical-align: baseline;"/></bold>. Please make sure that this is a wanted behavior.
|
||||
<div groups="account.group_account_invoice,account.group_account_readonly" class="alert alert-warning" role="alert"
|
||||
invisible="not duplicate_bank_partner_ids">
|
||||
<span>One or more Bank Accounts set on this partner are also used by others:</span>
|
||||
<field name="duplicate_bank_partner_ids" widget="x2many_buttons" string="Partners with same bank"/>
|
||||
</div>
|
||||
</xpath>
|
||||
<page name="sales_purchases" position="after">
|
||||
<page string="Invoicing" name="accounting" attrs="{'invisible': [('is_company','=',False),('parent_id','!=',False)]}" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<field name="duplicated_bank_account_partners_count" invisible="1"/>
|
||||
<field name="show_credit_limit" invisible="1"/>
|
||||
<page string="Invoicing" name="accounting" invisible="not is_company and parent_id" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<group>
|
||||
<group string="Bank Accounts" name="banks" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<field name="bank_ids" nolabel="1" colspan="2" context="{'default_allow_out_payment': True}">
|
||||
<tree editable="bottom">
|
||||
<field name="sequence" widget="handle"/>
|
||||
<field name="bank_id"/>
|
||||
<field name="acc_number"/>
|
||||
<field name="allow_out_payment" widget="boolean_toggle" options="{'autosave': False}"/>
|
||||
<field name="acc_holder_name" invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
<button type="action" class="btn-link"
|
||||
name="%(base.action_res_partner_bank_account_form)d"
|
||||
context="{'search_default_partner_id': active_id, 'default_partner_id': active_id}"
|
||||
string="View accounts detail"
|
||||
colspan="2"
|
||||
/>
|
||||
<group string="General" name="general" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<field name="bank_ids"
|
||||
string="Bank accounts"
|
||||
context="{'default_partner_id': id}"
|
||||
domain="[('partner_id','=', id)]"
|
||||
widget="many2many_tags_banks"
|
||||
options="{'color_field': 'color', 'allow_out_payment_field': 'allow_out_payment', 'edit_tags': True}"/>
|
||||
<field name="property_account_receivable_id" required="True" groups="account.group_account_user"/>
|
||||
<field name="property_account_payable_id" required="True" groups="account.group_account_user"/>
|
||||
<field name="autopost_bills" groups="account.group_account_user"/>
|
||||
<field name="ignore_abnormal_invoice_amount" groups="base.group_no_one"/>
|
||||
<field name="ignore_abnormal_invoice_date" groups="base.group_no_one"/>
|
||||
</group>
|
||||
<group string="Accounting Entries" name="accounting_entries" groups="account.group_account_readonly">
|
||||
<field name="currency_id" invisible="1"/>
|
||||
<field name="property_account_receivable_id"/>
|
||||
<field name="property_account_payable_id"/>
|
||||
<group id="invoice_send_settings"
|
||||
string="Customer Invoices"
|
||||
groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<field name="invoice_sending_method"
|
||||
groups="base.group_no_one"
|
||||
placeholder="e-Invoicing & Email"/>
|
||||
<field name="invoice_edi_format"
|
||||
placeholder="XML format"
|
||||
groups="base.group_no_one"
|
||||
invisible="not display_invoice_edi_format"/>
|
||||
<field name="invoice_template_pdf_report_id"
|
||||
invisible="not display_invoice_template_pdf_report_id"
|
||||
options="{'no_create': True, 'no_edit': True}"/>
|
||||
</group>
|
||||
<group string="Credit Limits"
|
||||
name="credit_limits"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"
|
||||
attrs="{'invisible': [('show_credit_limit', '=', False)]}">
|
||||
invisible="not show_credit_limit">
|
||||
<field name="credit"/>
|
||||
<field name="days_sales_outstanding"/>
|
||||
<label for="use_partner_credit_limit"/>
|
||||
<div class="o_row">
|
||||
<field name="use_partner_credit_limit"/>
|
||||
<field name="credit_limit" class="oe_inline" widget="monetary" options="{'currency_field': 'currency_id'}" attrs="{'invisible': [('use_partner_credit_limit', '=', False)]}"/>
|
||||
<field name="credit_limit" class="oe_inline" widget="monetary" options="{'currency_field': 'currency_id'}" invisible="not use_partner_credit_limit"/>
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Invoicing" name="accounting_disabled" attrs="{'invisible': ['|',('is_company','=',True),('parent_id','=',False)]}" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<page string="Invoicing" name="accounting_disabled" invisible="is_company or not parent_id" groups="account.group_account_invoice,account.group_account_readonly">
|
||||
<div>
|
||||
<p>Accounting-related settings are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
|
||||
</div>
|
||||
|
|
@ -280,19 +263,42 @@
|
|||
</xpath>
|
||||
<group name="sale" position="inside">
|
||||
<field string="Payment Terms" name="property_payment_term_id" options="{'no_open': True, 'no_create': True}" groups="account.group_account_invoice,account.group_account_readonly"/>
|
||||
<field string="Payment Method"
|
||||
name="property_inbound_payment_method_line_id"
|
||||
options="{'no_open': True, 'no_create': True}"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"
|
||||
/>
|
||||
</group>
|
||||
<group name="purchase" position="inside">
|
||||
<field string="Payment Terms" name="property_supplier_payment_term_id" options="{'no_open': True, 'no_create': True}" groups="account.group_account_invoice,account.group_account_readonly"/>
|
||||
<field string="Payment Method"
|
||||
name="property_outbound_payment_method_line_id"
|
||||
options="{'no_open': True, 'no_create': True}"
|
||||
groups="account.group_account_invoice,account.group_account_readonly"
|
||||
/>
|
||||
</group>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_view_tree" model="ir.ui.view">
|
||||
<field name="name">res.partner.list.inherit.account</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_partner_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='vat']" position="after">
|
||||
<field name="invoice_sending_method" optional="hide" groups="base.group_no_one"/>
|
||||
<field name="invoice_edi_format" string="EDI Format" optional="hide" groups="base.group_no_one"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_partner_view_search" model="ir.ui.view">
|
||||
<field name="name">res.partner.search.inherit</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="inherit_id" ref="base.view_res_partner_filter"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//filter[@name='inactive']" position="before">
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
<filter string="Customer Invoices" name="customer" domain="[('customer_rank','>', 0)]"/>
|
||||
<filter string="Vendor Bills" name="supplier" domain="[('supplier_rank','>', 0)]"/>
|
||||
<separator/>
|
||||
|
|
@ -302,9 +308,9 @@
|
|||
|
||||
<record id="res_partner_action_customer" model="ir.actions.act_window">
|
||||
<field name="name">Customers</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="path">customers</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="context">{'search_default_customer': 1,'res_partner_search_mode': 'customer', 'default_is_company': True, 'default_customer_rank': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
@ -317,9 +323,9 @@
|
|||
|
||||
<record id="res_partner_action_supplier" model="ir.actions.act_window">
|
||||
<field name="name">Vendors</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="path">vendors</field>
|
||||
<field name="view_mode">list,kanban,form</field>
|
||||
<field name="context">{'search_default_supplier': 1,'res_partner_search_mode': 'supplier', 'default_is_company': True, 'default_supplier_rank': 1}</field>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
|
|
@ -329,5 +335,16 @@
|
|||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="partner_missing_account_list_view" model="ir.ui.view">
|
||||
<field name="name">res.partner.list</field>
|
||||
<field name="model">res.partner</field>
|
||||
<field name="arch" type="xml">
|
||||
<list string="Partners Missing a bank account" create="false" edit="false" delete="false"
|
||||
import="false" open_form_view="True">
|
||||
<field name="name"/>
|
||||
</list>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -1,29 +1,38 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<record id="product_template_view_tree" model="ir.ui.view">
|
||||
<field name="name">product.template.tree</field>
|
||||
<record id="product_template_list_view_sellable_inherit" model="ir.ui.view">
|
||||
<field name="name">product.template.list.sellable.inherit</field>
|
||||
<field name="model">product.template</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Products" sample="1">
|
||||
<field name="default_code"/>
|
||||
<field name="name"/>
|
||||
<field name="list_price"/>
|
||||
<field name="taxes_id" widget="many2many_tags"/>
|
||||
<field name="supplier_taxes_id" widget="many2many_tags"/>
|
||||
<field name="activity_exception_decoration" widget="activity_exception"/>
|
||||
</tree>
|
||||
</field>
|
||||
<field name="inherit_id" ref="product.product_template_list_view_sellable"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='list_price']" position="after">
|
||||
<field name="taxes_id" widget="many2many_tax_tags" context="{'search_default_domestictax': True, 'append_fields': ['company_id']}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_template_list_view_purchasable_inherit" model="ir.ui.view">
|
||||
<field name="name">product.template.list.purchasable.inherit</field>
|
||||
<field name="model">product.template</field>
|
||||
<field name="inherit_id" ref="product.product_template_list_view_purchasable"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='standard_price']" position="after">
|
||||
<field name="supplier_taxes_id" widget="many2many_tax_tags" context="{'search_default_domestictax': True, 'append_fields': ['company_id']}"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_action_sellable" model="ir.actions.act_window">
|
||||
<field name="name">Products</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">product.template</field>
|
||||
<field name="view_mode">kanban,tree,form,activity</field>
|
||||
<field name="path">customer-products</field>
|
||||
<field name="view_ids" eval="[Command.clear(),
|
||||
Command.create({'view_mode': 'kanban'}),
|
||||
Command.create({'view_mode': 'list', 'view_id': ref('account.product_template_list_view_sellable_inherit')}),
|
||||
Command.create({'view_mode': 'form'}),
|
||||
Command.create({'view_mode': 'activity'})]"/>
|
||||
<field name="context">{'search_default_filter_to_sell': 1}</field>
|
||||
<field name="view_id" ref="product_template_view_tree"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new sellable product
|
||||
|
|
@ -33,11 +42,14 @@
|
|||
|
||||
<record id="product_product_action_purchasable" model="ir.actions.act_window">
|
||||
<field name="name">Products</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">product.template</field>
|
||||
<field name="view_mode">kanban,tree,form,activity</field>
|
||||
<field name="path">vendor-products</field>
|
||||
<field name="context">{'search_default_filter_to_purchase': 1}</field>
|
||||
<field name="view_id" ref="product_template_view_tree"/>
|
||||
<field name="view_ids" eval="[Command.clear(),
|
||||
Command.create({'view_mode': 'kanban'}),
|
||||
Command.create({'view_mode': 'list', 'view_id': ref('account.product_template_list_view_purchasable_inherit')}),
|
||||
Command.create({'view_mode': 'form'}),
|
||||
Command.create({'view_mode': 'activity'})]"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new purchasable product
|
||||
|
|
@ -51,33 +63,61 @@
|
|||
<field name="priority">5</field>
|
||||
<field name="inherit_id" ref="product.product_template_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//page[@name='purchase']" position="attributes">
|
||||
<attribute name="invisible">0</attribute>
|
||||
<div name="options" position='inside'>
|
||||
<span class="d-inline-flex" invisible="type == 'combo'">
|
||||
<field name="purchase_ok"/>
|
||||
<label for="purchase_ok"/>
|
||||
</span>
|
||||
</div>
|
||||
<xpath expr="//field[@name='company_id']" position="after">
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
</xpath>
|
||||
<page name="inventory" position="after">
|
||||
<page string="Accounting" name="invoicing" groups="account.group_account_readonly,account.group_account_invoice">
|
||||
<page string="Accounting" name="invoicing" groups="account.group_account_readonly">
|
||||
<group name="properties" groups="account.group_account_readonly">
|
||||
<group string="Receivables">
|
||||
<field name="property_account_income_id"
|
||||
<group string="Cost and Revenue">
|
||||
<field name="property_account_income_id" placeholder="From Category"
|
||||
groups="account.group_account_readonly"/>
|
||||
</group>
|
||||
<group string="Payables" name="payables">
|
||||
<field name="property_account_expense_id"
|
||||
<field name="property_account_expense_id" placeholder="From Category"
|
||||
groups="account.group_account_readonly"/>
|
||||
</group>
|
||||
</group>
|
||||
<group name="accounting" groups="account.group_account_readonly,account.group_account_invoice"/>
|
||||
</page>
|
||||
</page>
|
||||
<xpath expr="//div[@name='pricing']" position="after">
|
||||
<field name="taxes_id" widget="many2many_tags" context="{'default_type_tax_use':'sale', 'search_default_sale': 1, 'search_default_service': type == 'service', 'search_default_goods': type == 'consu'}"/>
|
||||
</xpath>
|
||||
<xpath expr="//div[@name='pricing']" position="inside">
|
||||
<span class="ms-2"/><field name="tax_string"/>
|
||||
</xpath>
|
||||
<group name="bill" position="inside">
|
||||
<field name="supplier_taxes_id" widget="many2many_tags" context="{'default_type_tax_use':'purchase', 'search_default_purchase': 1, 'search_default_service': type == 'service', 'search_default_goods': type == 'consu'}"/>
|
||||
</group>
|
||||
<div name="list_price_uom" position="after">
|
||||
<label for="taxes_id" invisible="type == 'combo'"/>
|
||||
<div name="taxes_div" class="o_row" invisible="type == 'combo'">
|
||||
<field
|
||||
name="taxes_id"
|
||||
widget="many2many_tax_tags"
|
||||
class="oe_inline"
|
||||
context="{
|
||||
'default_type_tax_use': 'sale',
|
||||
'search_default_sale': 1,
|
||||
'search_default_service': type == 'service',
|
||||
'search_default_goods': type == 'consu',
|
||||
'search_default_domestictax': 1,
|
||||
'append_fields': ['company_id'],
|
||||
}"
|
||||
/>
|
||||
<field name="tax_string" class="oe_inline"/>
|
||||
</div>
|
||||
</div>
|
||||
<div name="standard_price_uom" position="after">
|
||||
<field name="supplier_taxes_id"
|
||||
invisible="not purchase_ok or type == 'combo'"
|
||||
widget="many2many_tax_tags"
|
||||
context="{
|
||||
'default_type_tax_use':'purchase',
|
||||
'search_default_purchase': 1,
|
||||
'search_default_service': type == 'service',
|
||||
'search_default_goods': type == 'consu',
|
||||
'search_default_domestictax': 1,
|
||||
'append_fields': ['company_id'],
|
||||
}"
|
||||
/>
|
||||
</div>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,31 @@
|
|||
<odoo>
|
||||
<record id="product_view_search_catalog" model="ir.ui.view">
|
||||
<field name="name">product.view.search.catalog.inherit.account</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="mode">primary</field>
|
||||
<field name="inherit_id" ref="product.product_view_search_catalog"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='product_tmpl_id']" position="after">
|
||||
<field name="seller_ids" string="Vendor"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="product_product_view_form_normalized_account" model="ir.ui.view">
|
||||
<field name="name">product.product.view.form.normalized.account.inherit</field>
|
||||
<field name="model">product.product</field>
|
||||
<field name="inherit_id" ref="product.product_product_view_form_normalized"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="list_price" position="after">
|
||||
<label for="taxes_id"/>
|
||||
<div name="tax_info" class="o_row">
|
||||
<field name="taxes_id" widget="many2many_tags"
|
||||
context="{'search_default_sale': 1}"
|
||||
options="{'create': false, 'create_edit': false}"/>
|
||||
<field name="tax_string"/>
|
||||
</div>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -10,7 +10,7 @@
|
|||
<div class="col-6">
|
||||
<t t-set="information_block">
|
||||
<div groups="account.group_delivery_invoice_address" name="shipping_address_block">
|
||||
<strong>Shipping Address:</strong>
|
||||
<strong class="d-block mt-3">Shipping Address</strong>
|
||||
<div t-field="o.partner_shipping_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
|
||||
</div>
|
||||
</t>
|
||||
|
|
@ -19,9 +19,12 @@
|
|||
<t t-set="address">
|
||||
<address class="mb-0" t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
|
||||
<div t-if="o.partner_id.vat" id="partner_vat_address_not_same_as_shipping">
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-esc="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-out="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
|
||||
</div>
|
||||
<div t-if="o.partner_id.country_code == 'MA' and o.partner_id.company_registry">
|
||||
ICE: <a t-field="o.partner_id.company_registry"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
|
|
@ -30,9 +33,12 @@
|
|||
<t t-set="address">
|
||||
<address class="mb-0" t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
|
||||
<div t-if="o.partner_id.vat" id="partner_vat_address_same_as_shipping">
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-esc="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-out="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
|
||||
</div>
|
||||
<div t-if="o.partner_id.country_code == 'MA' and o.partner_id.company_registry">
|
||||
ICE: <a t-field="o.partner_id.company_registry"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
|
|
@ -41,293 +47,618 @@
|
|||
<t t-set="address">
|
||||
<address class="mb-0" t-field="o.partner_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
|
||||
<div t-if="o.partner_id.vat" id="partner_vat_no_shipping">
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-esc="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-if="o.company_id.account_fiscal_country_id.vat_label" t-out="o.company_id.account_fiscal_country_id.vat_label" id="inv_tax_id_label"/>
|
||||
<t t-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
|
||||
</div>
|
||||
<div t-if="o.partner_id.country_code == 'MA' and o.partner_id.company_registry">
|
||||
ICE: <a t-field="o.partner_id.company_registry"/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<div class="mt-5">
|
||||
<div class="page">
|
||||
<h2>
|
||||
<span t-if="o.move_type == 'out_invoice' and o.state == 'posted'">Invoice</span>
|
||||
<span t-if="o.move_type == 'out_invoice' and o.state == 'draft'">Draft Invoice</span>
|
||||
<span t-if="o.move_type == 'out_invoice' and o.state == 'cancel'">Cancelled Invoice</span>
|
||||
<span t-if="o.move_type == 'out_refund'">Credit Note</span>
|
||||
<span t-if="o.move_type == 'in_refund'">Vendor Credit Note</span>
|
||||
<span t-if="o.move_type == 'in_invoice'">Vendor Bill</span>
|
||||
<span t-if="o.name != '/'" t-field="o.name"/>
|
||||
</h2>
|
||||
|
||||
<div id="informations" class="row mt-4 mb-4">
|
||||
<div class="col-auto col-3 mw-100 mb-2" t-if="o.invoice_date" name="invoice_date">
|
||||
<t t-if="o.move_type == 'out_invoice'"><strong>Invoice Date:</strong></t>
|
||||
<t t-elif="o.move_type == 'out_refund'"><strong>Credit Note Date:</strong></t>
|
||||
<t t-elif="o.move_type == 'out_receipt'"><strong>Receipt Date:</strong></t>
|
||||
<t t-else=""><strong>Date:</strong></t>
|
||||
<p class="m-0" t-field="o.invoice_date"/>
|
||||
<div class="clearfix invoice_main">
|
||||
<div class="page mb-4">
|
||||
<t t-set="layout_document_title">
|
||||
<t t-if="not proforma">
|
||||
<span t-if="o.move_type == 'out_invoice' and o.state == 'posted'">
|
||||
<t name="invoice_title">Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_invoice' and o.state == 'draft'">
|
||||
<t name="draft_invoice_title">Draft Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_invoice' and o.state == 'cancel'">
|
||||
<t name="cancelled_invoice_title">Cancelled Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'posted'">
|
||||
<t name="credit_note_title">Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'draft'">
|
||||
<t name="draft_credit_note_title">Draft Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'cancel'">
|
||||
<t name="cancelled_credit_note_title">Cancelled Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_refund' and not o.journal_id.is_self_billing">
|
||||
<t name="vendor_credit_note_title">Vendor Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_refund' and o.journal_id.is_self_billing">
|
||||
<t name="self_billing_credit_note_title">Self Billing Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_invoice' and not o.journal_id.is_self_billing">
|
||||
<t name="vendor_bill_title">Vendor Bill</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_invoice' and o.journal_id.is_self_billing">
|
||||
<t name="self_billing_invoice_title">Self Billing</t>
|
||||
</span>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<span t-if="o.move_type == 'out_invoice' and o.state == 'posted'">
|
||||
<t name="proforma_invoice_title">Proforma Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_invoice' and o.state == 'draft'">
|
||||
<t name="draft_proforma_invoice_title">Draft Proforma Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_invoice' and o.state == 'cancel'">
|
||||
<t name="cancelled_proforma_invoice_title">Cancelled Proforma Invoice</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'posted'">
|
||||
<t name="proforma_credit_note_title">Proforma Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'draft'">
|
||||
<t name="draft_proforma_credit_note_title">Draft Proforma Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'out_refund' and o.state == 'cancel'">
|
||||
<t name="cancelled_proforma_credit_note_title">Cancelled Proforma Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_refund'">
|
||||
<t name="proforma_vendor_credit_note_title">Proforma Vendor Credit Note</t>
|
||||
</span>
|
||||
<span t-elif="o.move_type == 'in_invoice'">
|
||||
<t name="proforma_vendor_bill_title">Proforma Vendor Bill</t>
|
||||
</span>
|
||||
</t>
|
||||
<span t-if="o.name and o.name != '/'" t-field="o.name">INV/2023/0001</span>
|
||||
</t>
|
||||
<div class="oe_structure"></div>
|
||||
<div
|
||||
id="informations" class="row mb-4"
|
||||
t-if="o.invoice_date or (o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted') or o.delivery_date or o.invoice_origin or o.partner_id.ref or o.ref or o.invoice_incoterm_id">
|
||||
<div class="col" t-if="o.invoice_date" name="invoice_date">
|
||||
<t t-if="o.move_type == 'out_invoice'"><strong>Invoice Date</strong></t>
|
||||
<t t-elif="o.move_type == 'out_refund'"><strong>Credit Note Date</strong></t>
|
||||
<t t-elif="o.move_type == 'out_receipt'"><strong>Receipt Date</strong></t>
|
||||
<t t-else=""><strong>Date</strong></t>
|
||||
<div t-field="o.invoice_date">2023-09-12</div>
|
||||
</div>
|
||||
<div class="col-auto col-3 mw-100 mb-2" t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" name="due_date">
|
||||
<strong>Due Date:</strong>
|
||||
<p class="m-0" t-field="o.invoice_date_due"/>
|
||||
<div class="col" t-if="o.invoice_date_due and o.move_type == 'out_invoice' and o.state == 'posted'" name="due_date">
|
||||
<strong>Due Date</strong>
|
||||
<div t-field="o.invoice_date_due">2023-10-31</div>
|
||||
</div>
|
||||
<div class="col-auto col-3 mw-100 mb-2" t-if="o.invoice_origin" name="origin">
|
||||
<strong>Source:</strong>
|
||||
<p class="m-0" t-field="o.invoice_origin"/>
|
||||
<div class="col" t-if="o.taxable_supply_date and o.show_taxable_supply_date" name="taxable_supply_date">
|
||||
<strong>Taxable Supply</strong>
|
||||
<div t-field="o.taxable_supply_date">2023-10-31</div>
|
||||
</div>
|
||||
<div class="col-auto col-3 mw-100 mb-2" t-if="o.partner_id.ref" name="customer_code">
|
||||
<strong>Customer Code:</strong>
|
||||
<p class="m-0" t-field="o.partner_id.ref"/>
|
||||
<div class="col" t-if="o.delivery_date" name="delivery_date">
|
||||
<strong>Delivery Date</strong>
|
||||
<div t-field="o.delivery_date">2023-09-25</div>
|
||||
</div>
|
||||
<div class="col-auto col-3 mw-100 mb-2" t-if="o.ref" name="reference">
|
||||
<strong>Reference:</strong>
|
||||
<p class="m-0" t-field="o.ref"/>
|
||||
<div class="col" t-if="o.invoice_origin" name="origin">
|
||||
<strong>Source</strong>
|
||||
<div t-field="o.invoice_origin">SO123</div>
|
||||
</div>
|
||||
<div class="col" t-if="o.partner_id.ref" name="customer_code">
|
||||
<strong>Customer Code</strong>
|
||||
<div t-field="o.partner_id.ref"/>
|
||||
</div>
|
||||
<div class="col" t-if="o.ref" name="reference">
|
||||
<strong>Reference</strong>
|
||||
<div t-field="o.ref">INV/2023/00001</div>
|
||||
</div>
|
||||
<div class="col" t-if="o.invoice_incoterm_id" name="incoterm_id">
|
||||
<strong>Incoterm</strong>
|
||||
<div t-if="o.incoterm_location">
|
||||
<span t-field="o.invoice_incoterm_id.code"/> <br/>
|
||||
<span t-field="o.incoterm_location"/>
|
||||
</div>
|
||||
<div t-else="" t-field="o.invoice_incoterm_id.code" class="m-0"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<t t-set="display_discount" t-value="any(l.discount for l in o.invoice_line_ids)"/>
|
||||
|
||||
<table class="table table-sm o_main_table table-borderless" name="invoice_line_table">
|
||||
<thead>
|
||||
<t t-set="display_taxes" t-value="any(l.tax_ids for l in o.invoice_line_ids)"/>
|
||||
<div class="oe_structure"></div>
|
||||
<t t-set="has_long_desc" t-value="any(line.name and line.name.count('\n') > 30 for line in o.invoice_line_ids if line.name)"/>
|
||||
<table class="o_has_total_table table o_main_table table-borderless mb-0" name="invoice_line_table">
|
||||
<thead t-attf-style="#{has_long_desc and 'display: table-row-group;' or ''}">
|
||||
<tr>
|
||||
<th name="th_description" class="text-start"><span>Description</span></th>
|
||||
<th name="th_quantity" class="text-end"><span>Quantity</span></th>
|
||||
<th name="th_priceunit" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Unit Price</span></th>
|
||||
<th name="th_price_unit" t-if="display_discount" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<th name="th_priceunit" t-attf-class="text-end text-nowrap {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Unit Price</span></th>
|
||||
<th name="th_discount" t-if="display_discount" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span>Disc.%</span>
|
||||
</th>
|
||||
<th name="th_taxes" t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Taxes</span></th>
|
||||
<th name="th_taxes" t-if="display_taxes" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"><span>Taxes</span></th>
|
||||
<th name="th_subtotal" class="text-end">
|
||||
<span groups="account.group_show_line_subtotals_tax_excluded">Amount</span>
|
||||
<span groups="account.group_show_line_subtotals_tax_included">Total Price</span>
|
||||
<span>Amount</span>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="invoice_tbody">
|
||||
<t t-set="current_subtotal" t-value="0"/>
|
||||
<t t-set="lines" t-value="o.invoice_line_ids.sorted(key=lambda l: (-l.sequence, l.date, l.move_name, -l.id), reverse=True)"/>
|
||||
<t t-set="lines_to_report" t-value="o._get_move_lines_to_report()"/>
|
||||
<t t-set="current_section" t-value="None"/>
|
||||
<t t-set="current_subsection" t-value="None"/>
|
||||
|
||||
<t t-foreach="lines" t-as="line">
|
||||
<t t-set="current_subtotal" t-value="current_subtotal + line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<t t-set="current_subtotal" t-value="current_subtotal + line.price_total" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
<t t-foreach="lines_to_report" t-as="line">
|
||||
<t t-set="is_note" t-value="line.display_type == 'line_note'"/>
|
||||
<t t-set="is_section" t-value="line.display_type == 'line_section'"/>
|
||||
<t t-set="is_subsection" t-value="line.display_type == 'line_subsection'"/>
|
||||
<t t-set="is_product" t-value="line.display_type == 'product'"/>
|
||||
|
||||
<tr t-att-class="'bg-200 fw-bold o_line_section' if line.display_type == 'line_section' else 'fst-italic o_line_note' if line.display_type == 'line_note' else ''">
|
||||
<t t-if="line.display_type == 'product'" name="account_invoice_line_accountable">
|
||||
<td name="account_invoice_line_name"><span t-field="line.name" t-options="{'widget': 'text'}"/></td>
|
||||
<td class="text-end">
|
||||
<span t-field="line.quantity"/>
|
||||
<span t-field="line.product_uom_id" groups="uom.group_uom"/>
|
||||
</td>
|
||||
<td t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span class="text-nowrap" t-field="line.price_unit"/>
|
||||
</td>
|
||||
<td t-if="display_discount" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span class="text-nowrap" t-field="line.discount"/>
|
||||
</td>
|
||||
<t t-set="taxes" t-value="', '.join([(tax.description or tax.name) for tax in line.tax_ids])"/>
|
||||
<td name="td_taxes" t-attf-class="text-start {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }} {{ 'text-nowrap' if len(taxes) < 10 else '' }}">
|
||||
<span t-out="taxes" id="line_tax_ids">Tax 15%</span>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap" t-field="line.price_subtotal" groups="account.group_show_line_subtotals_tax_excluded"/>
|
||||
<span class="text-nowrap" t-field="line.price_total" groups="account.group_show_line_subtotals_tax_included"/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-if="line.display_type == 'line_section'">
|
||||
<td colspan="99">
|
||||
<span t-field="line.name" t-options="{'widget': 'text'}"/>
|
||||
</td>
|
||||
<t t-set="current_section" t-value="line"/>
|
||||
<t t-set="current_subtotal" t-value="0"/>
|
||||
</t>
|
||||
<t t-if="line.display_type == 'line_note'">
|
||||
<td colspan="99">
|
||||
<span t-field="line.name" t-options="{'widget': 'text'}"/>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
<t t-if="is_section">
|
||||
<t t-set="current_section" t-value="line"/>
|
||||
<t t-set="current_subsection" t-value="None"/>
|
||||
<t t-set="line_padding" t-value="0"/>
|
||||
</t>
|
||||
<t t-elif="is_subsection">
|
||||
<t t-set="current_subsection" t-value="line"/>
|
||||
<t t-set="line_padding" t-value="3"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-set="line_padding"
|
||||
t-value="4 if current_subsection else (3 if current_section else 0)"
|
||||
/>
|
||||
</t>
|
||||
<t t-set="padding_class" t-value="line_padding and ('px-' + str(line_padding)) or ''"/>
|
||||
<t t-set="hide_details" t-value="line.collapse_composition"/>
|
||||
<t t-set="hide_prices" t-value="line.collapse_prices"/>
|
||||
|
||||
<t t-if="current_section and (line_last or lines[line_index+1].display_type == 'line_section')">
|
||||
<tr class="is-subtotal text-end">
|
||||
<td colspan="99">
|
||||
<strong class="mr16">Subtotal</strong>
|
||||
<span
|
||||
t-esc="current_subtotal"
|
||||
t-options='{"widget": "monetary", "display_currency": o.currency_id}'
|
||||
/>
|
||||
</td>
|
||||
<t t-if="not hide_details and not hide_prices">
|
||||
<tr t-att-class="
|
||||
'fw-bolder o_line_section' if is_section else
|
||||
'fw-bold o_line_subsection' if is_subsection else
|
||||
'fst-italic o_line_note' if is_note
|
||||
else ''">
|
||||
<t t-set="line_colspan" t-value="3 + (1 if display_discount else 0) + (1 if display_taxes and not line.tax_ids else 0)"/>
|
||||
<t t-if="is_product" name="account_invoice_line_accountable">
|
||||
<td name="account_invoice_line_name" t-att-class="padding_class">
|
||||
<span t-if="line.name" t-field="line.name" t-options="{'widget': 'text'}">Bacon Burger</span>
|
||||
</td>
|
||||
<td name="td_quantity" class="o_td_quantity text-end">
|
||||
<span t-field="line.quantity" class="text-nowrap">3.00</span>
|
||||
<span t-field="line.product_uom_id" groups="uom.group_uom">units</span>
|
||||
<span t-if="line.product_uom_id != line.product_id.uom_id" groups="uom.group_uom" class="text-muted small">
|
||||
<br/>
|
||||
<t t-set="product_uom_qty" t-value="line.product_uom_id._compute_quantity(line.quantity, line.product_id.uom_id)"/>
|
||||
<span t-out="product_uom_qty" t-options="{'widget': 'float', 'decimal_precision': 'Product Unit'}" data-oe-demo="3.00"/> <span t-field="line.product_id.uom_id" data-oe-demo="units"/>
|
||||
</span>
|
||||
</td>
|
||||
<td name="td_price_unit" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span t-if="not hide_prices" class="text-nowrap" t-field="line.price_unit">9.00</span>
|
||||
</td>
|
||||
<td name="td_discount" t-if="display_discount" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span class="text-nowrap" t-field="line.discount">0</span>
|
||||
</td>
|
||||
<t t-set="taxes" t-value="', '.join(tax.tax_label for tax in line.tax_ids if tax.tax_label)"/>
|
||||
<td name="td_taxes" t-if="display_taxes" t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }} {{ 'text-nowrap' if len(taxes) < 10 else '' }}">
|
||||
<span t-if="not hide_prices" t-out="taxes" id="line_tax_ids">Tax 15%</span>
|
||||
</td>
|
||||
<td name="td_subtotal" class="text-end o_price_total">
|
||||
<span t-if="not hide_prices and o.company_price_include == 'tax_excluded'" class="text-nowrap" t-field="line.price_subtotal">27.00</span>
|
||||
<span t-if="not hide_prices and o.company_price_include == 'tax_included'" class="text-nowrap" t-field="line.price_total">31.05</span>
|
||||
</td>
|
||||
</t>
|
||||
<t t-elif="line.display_type in ('line_section', 'line_subsection')">
|
||||
<t t-set="section_subtotal" t-value="line.get_section_subtotal()"/>
|
||||
<!-- For desktop -->
|
||||
<td name="line_name_td"
|
||||
t-att-colspan="(1 if is_product else line_colspan)"
|
||||
t-attf-class="{{'d-none d-md-table-cell' if report_type == 'html' else ''}} {{padding_class}}">
|
||||
<span t-if="line.name" t-field="line.name" t-options="{'widget': 'text'}">A section title</span>
|
||||
</td>
|
||||
<!-- For mobile -->
|
||||
<td colspan="2" t-attf-class="{{'d-md-none d-table-cell' if report_type == 'html' else 'd-none'}} {{padding_class}}">
|
||||
<span t-if="line.name" t-field="line.name" t-options="{'widget': 'text'}">A section title</span>
|
||||
</td>
|
||||
<td colspan="1" class="text-end o_price_total">
|
||||
<span t-out="section_subtotal" class="text-nowrap" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
|
||||
</td>
|
||||
</t>
|
||||
<t t-elif="is_note">
|
||||
<td colspan="99">
|
||||
<span t-if="line.name" t-field="line.name" t-options="{'widget': 'text'}">A note, whose content usually applies to the section or product above.</span>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-set="grouped_lines" t-value="line._get_child_lines()"/>
|
||||
<t t-foreach="grouped_lines" t-as="grouped_line">
|
||||
<t t-if="grouped_line['display_type'] == 'product'">
|
||||
<t t-set="line_colspan" t-value="1"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<t t-set="line_colspan" t-value="3 + (1 if display_discount else 0) + (1 if display_taxes and not grouped_line.get('taxes') else 0)"/>
|
||||
</t>
|
||||
<t t-if="hide_prices">
|
||||
<t t-if="grouped_line['display_type'] == 'line_section'">
|
||||
<t t-set="current_section" t-value="grouped_line"/>
|
||||
<t t-set="current_subsection" t-value="None"/>
|
||||
</t>
|
||||
<t t-if="grouped_line['display_type'] == 'line_subsection'">
|
||||
<t t-set="current_subsection" t-value="grouped_line"/>
|
||||
</t>
|
||||
<t t-set="line_padding"
|
||||
t-value="4 if current_subsection and grouped_line['display_type'] != 'line_subsection' else
|
||||
3 if current_section and grouped_line['display_type'] != 'line_section' else
|
||||
0"/>
|
||||
<t t-set="padding_class" t-value="line_padding and ('px-' + str(line_padding)) or ''"/>
|
||||
</t>
|
||||
<tr t-att-class="
|
||||
'fw-bolder o_line_section' if grouped_line.get('display_type') == 'line_section' and not hide_details else
|
||||
'fw-bold o_line_subsection' if grouped_line.get('display_type') == 'line_subsection' and not hide_details else
|
||||
''">
|
||||
<!-- For desktop -->
|
||||
<td name="account_invoice_line_name_grouped_desktop"
|
||||
t-att-colspan="line_colspan"
|
||||
t-attf-class="{{'d-none d-md-table-cell' if report_type == 'html' else ''}} {{padding_class}}">
|
||||
<span t-out="grouped_line['name']" t-options="{'widget': 'text'}">Group 1</span>
|
||||
</td>
|
||||
<!-- For mobile -->
|
||||
<td name="account_invoice_line_name_grouped"
|
||||
t-att-colspan="2 if grouped_line['display_type'] != 'product' else 1"
|
||||
t-attf-class="{{'d-md-none d-table-cell' if report_type == 'html' else 'd-none'}} {{padding_class}}">
|
||||
<span t-out="grouped_line['name']" t-options="{'widget': 'text'}">Group 1</span>
|
||||
</td>
|
||||
<td name="td_quantity_grouped"
|
||||
colspan="1"
|
||||
t-if="hide_details or (hide_prices and grouped_line['display_type'] not in ('line_section', 'line_subsection', 'line_note'))"
|
||||
class="o_td_quantity text-end">
|
||||
<!-- If line is hide composition, always show 1 unit -->
|
||||
<div t-if="hide_details">
|
||||
<span>1.00</span>
|
||||
<span groups="uom.group_uom">Units</span>
|
||||
</div>
|
||||
<!-- Else, show the line quantity -->
|
||||
<div t-if="hide_prices and grouped_line['display_type'] not in ('line_section', 'line_subsection')">
|
||||
<span t-out="grouped_line['quantity']" t-options="{'widget': 'float', 'decimal_precision': 'Product Unit'}">1.00</span>
|
||||
<t t-if="grouped_line.get('line_uom')">
|
||||
<span t-out="grouped_line['line_uom'].display_name" groups="uom.group_uom">Unit</span>
|
||||
<span t-if="grouped_line.get('product_uom') != grouped_line['line_uom']" groups="uom.group_uom" class="text-muted small">
|
||||
<br/>
|
||||
<t t-set="product_uom_qty" t-value="grouped_line['line_uom']._compute_quantity(grouped_line['quantity'], grouped_line['product_uom'])"/>
|
||||
<span t-out="product_uom_qty" t-options="{'widget': 'float', 'decimal_precision': 'Product Unit'}" data-oe-demo="3.00"/> <span t-out="grouped_line['product_uom'].display_name" data-oe-demo="units"/>
|
||||
</span>
|
||||
</t>
|
||||
</div>
|
||||
</td>
|
||||
<td name="td_price_unit_grouped"
|
||||
t-if="grouped_line['display_type'] not in ('line_section', 'line_subsection')"
|
||||
colspan="1"
|
||||
t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}">
|
||||
<span t-if="not hide_prices" t-out="grouped_line['price_subtotal']" t-options="{'widget': 'float', 'decimal_precision': 'Product Price'}" class="text-nowrap">9.00</span>
|
||||
</td>
|
||||
<td name="td_discount_grouped"
|
||||
t-if="display_discount and grouped_line['display_type'] == 'product'"
|
||||
colspan="1"
|
||||
t-attf-class="text-end {{ 'd-none d-md-table-cell' if report_type == 'html' else '' }}"/>
|
||||
<td name="td_taxes_grouped"
|
||||
colspan="1"
|
||||
t-if="display_taxes and (grouped_line['display_type'] == 'product' or grouped_line.get('taxes'))"
|
||||
t-attf-class="text-end {{'d-none d-md-table-cell' if report_type == 'html' else ''}}">
|
||||
<span t-if="grouped_line.get('taxes')" t-out="','.join(grouped_line['taxes'])" id="grouped_line_tax_ids">Tax 15%</span>
|
||||
</td>
|
||||
<td name="td_subtotal_grouped" colspan="1" class="text-end o_price_total">
|
||||
<span t-if="(grouped_line.get('display_type') in ('line_section', 'line_subsection') or hide_details) and o.company_price_include == 'tax_excluded'" class="text-nowrap" t-out="grouped_line['price_subtotal']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'>27.00</span>
|
||||
<span t-if="(grouped_line.get('display_type') in ('line_section', 'line_subsection') or hide_details) and o.company_price_include == 'tax_included'" class="text-nowrap" t-out="grouped_line['price_total']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'>31.05</span>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="overflow-hidden">
|
||||
<div id="right-elements" t-attf-class="#{'col-5 mt-5' if report_type == 'pdf' else 'col-12 col-md-5'} ms-5 d-inline-block float-end">
|
||||
<div id="total" class="clearfix row">
|
||||
<div class="ms-auto">
|
||||
<table class="o_total_table table table-borderless avoid-page-break-inside">
|
||||
|
||||
<div class="clearfix mb-4">
|
||||
<div id="total" class="row">
|
||||
<div t-attf-class="#{'col-6' if report_type != 'html' else 'col-sm-7 col-md-6'} ms-auto">
|
||||
<table class="table table-sm table-borderless" style="page-break-inside: avoid;">
|
||||
|
||||
<!--Tax totals-->
|
||||
<t t-set="tax_totals" t-value="o.tax_totals"/>
|
||||
<t t-call="account.document_tax_totals"/>
|
||||
|
||||
<!--Payments-->
|
||||
<t t-if="print_with_payments">
|
||||
<t t-if="o.payment_state != 'invoicing_legacy'">
|
||||
<t t-set="payments_vals" t-value="o.sudo().invoice_payments_widget and o.sudo().invoice_payments_widget['content'] or []"/>
|
||||
<t t-foreach="payments_vals" t-as="payment_vals">
|
||||
<tr t-if="payment_vals['is_exchange'] == 0">
|
||||
<td>
|
||||
<i class="oe_form_field text-end oe_payment_label">Paid on <t t-esc="payment_vals['date']" t-options='{"widget": "date"}'/></i>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-esc="payment_vals['amount']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- Tax totals summary (invoice currency) -->
|
||||
<t t-if="o.tax_totals" t-call="account.document_tax_totals">
|
||||
<t t-set="tax_totals" t-value="o.tax_totals"/>
|
||||
<t t-set="currency" t-value="o.currency_id"/>
|
||||
</t>
|
||||
<t t-if="len(payments_vals) > 0">
|
||||
<tr class="border-black fw-bold">
|
||||
<td>Amount Due</td>
|
||||
<td class="text-end">
|
||||
<span t-field="o.amount_residual"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!--Payments-->
|
||||
<t t-if="print_with_payments">
|
||||
<t t-if="o.payment_state != 'invoicing_legacy'">
|
||||
<t t-set="payments_vals" t-value="o.sudo().invoice_payments_widget and o.sudo().invoice_payments_widget['content'] or []"/>
|
||||
<t t-foreach="payments_vals" t-as="payment_vals">
|
||||
<tr t-if="payment_vals['is_exchange'] == 0">
|
||||
<td>
|
||||
<i class="oe_form_field text-end oe_payment_label">
|
||||
<t t-if="payment_vals['is_refund']">Reversed on </t>
|
||||
<t t-else="">Paid on </t>
|
||||
<t t-out="payment_vals['date']" t-options='{"widget": "date"}'>2021-09-19</t>
|
||||
</i>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-out="payment_vals['amount']" t-options='{"widget": "monetary", "display_currency": o.currency_id}'>20.00</span>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-if="len(payments_vals) > 0">
|
||||
<tr class="fw-bold">
|
||||
<td>Amount Due</td>
|
||||
<td class="text-end">
|
||||
<span t-field="o.amount_residual">11.05</span>
|
||||
</td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</table>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="mb-2">
|
||||
<p class="text-end lh-sm" t-if="o.company_id.display_invoice_amount_total_words">
|
||||
Total amount in words: <br/>
|
||||
<small class="text-muted lh-sm"><span t-field="o.amount_total_words">Thirty one dollar and Five cents</span></small>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<!-- Tax totals summary (company currency) -->
|
||||
<t t-if="o.tax_totals and o.tax_totals.get('display_in_company_currency')">
|
||||
<t t-set="tax_totals" t-value="o.tax_totals"/>
|
||||
<t t-call="account.document_tax_totals_company_currency_template"/>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<div class="oe_structure"/>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
<p t-if="o.move_type in ('out_invoice', 'in_refund') and o.payment_reference" name="payment_communication" class="mt-4">
|
||||
Please use the following communication for your payment : <b><span t-field="o.payment_reference"/></b>
|
||||
<t t-if="o.partner_bank_id">
|
||||
<br/>
|
||||
on this account: <span t-field="o.partner_bank_id" class="fw-bold"/>
|
||||
</t>
|
||||
</p>
|
||||
<t t-set="payment_term_details" t-value="o.payment_term_details"/>
|
||||
<div t-field="o.invoice_payment_term_id.note" name="payment_term"/>
|
||||
<t t-if="o.invoice_payment_term_id.display_on_invoice and payment_term_details">
|
||||
<div t-if='o.show_payment_term_details' id="total_payment_term_details_table" class="row">
|
||||
<div t-attf-class="#{'col-7' if report_type != 'html' else 'col-sm-7 col-md-6'} mt-2 mb-2">
|
||||
<table class="table table-sm" style="page-break-inside: avoid;">
|
||||
<th class="border-black text-start">
|
||||
Due Date
|
||||
</th>
|
||||
<th class="border-black text-end">
|
||||
Amount Due
|
||||
</th>
|
||||
<th t-if="o.show_discount_details" class="border-black text-end">
|
||||
Discount
|
||||
</th>
|
||||
<t t-foreach="payment_term_details" t-as="term">
|
||||
<tr>
|
||||
<td t-esc="term.get('date')" class="text-start"/>
|
||||
<td t-options='{"widget": "monetary", "display_currency": o.currency_id}' t-esc="term.get('amount')" class="text-end"/>
|
||||
<td t-if="term.get('discount_date')" class="text-end">
|
||||
<span t-options='{"widget": "monetary", "display_currency": o.currency_id}'
|
||||
t-esc="term.get('discount_amount_currency')"/> if paid before
|
||||
<span t-esc="term.get('discount_date')"/>
|
||||
</td>
|
||||
</tr>
|
||||
<div id="payment_term" class="clearfix mt-3">
|
||||
<div class="justify-text">
|
||||
<p t-if="not is_html_empty(o.fiscal_position_id.note)" name="note" class="mb-2">
|
||||
<span t-field="o.fiscal_position_id.note"/>
|
||||
</p>
|
||||
</div>
|
||||
<div class="justify-text">
|
||||
<p t-if="not is_html_empty(o.taxes_legal_notes)" name="taxes_legal_notes" class="mb-2">
|
||||
<span t-field="o.taxes_legal_notes"/>
|
||||
</p>
|
||||
</div>
|
||||
<t t-set="payment_term_details" t-value="o.payment_term_details"/>
|
||||
<div class="mb-3">
|
||||
<span id="payment_terms_note_id"
|
||||
t-if="o.invoice_payment_term_id.note"
|
||||
t-field="o.invoice_payment_term_id.note"
|
||||
name="payment_term">Payment within 30 calendar day</span><br/>
|
||||
<t t-if="o.invoice_payment_term_id.display_on_invoice and payment_term_details">
|
||||
<div t-if='o.show_payment_term_details' id="total_payment_term_details_table" class="row">
|
||||
<div t-attf-class="#{'col-10' if report_type != 'html' else 'col-sm-10 col-md-9'}">
|
||||
<t t-if="o._is_eligible_for_early_payment_discount(o.currency_id,o.invoice_date)">
|
||||
<!--
|
||||
This is required in stable to void breaking xpath to show_payment_term_details//td,
|
||||
which is illegal because a td cannot be alone.
|
||||
To be removed in master.
|
||||
-->
|
||||
<table class="d-none"><tbody><tr><td/></tr></tbody></table>
|
||||
<div id="early_payment_discount">
|
||||
<span t-options='{"widget": "monetary", "display_currency": o.currency_id}'
|
||||
t-out="o.invoice_payment_term_id._get_amount_due_after_discount(o.amount_total, o.amount_tax)">30.00</span> due if paid before
|
||||
<span t-out="o.invoice_payment_term_id._get_last_discount_date_formatted(o.invoice_date)">2024-01-01</span>
|
||||
</div>
|
||||
</t>
|
||||
<t t-if="len(payment_term_details) > 1" t-foreach="payment_term_details" t-as="term">
|
||||
<div>
|
||||
<span t-out="term_index + 1">1</span> - Installment of
|
||||
<t t-options='{"widget": "monetary", "display_currency": o.currency_id}' t-out="term.get('amount')" class="text-end">31.05</t>
|
||||
<span> due on </span>
|
||||
<t t-out="term.get('date')" class="text-start">2024-01-01</t>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</table>
|
||||
</div>
|
||||
<div class="mb-3" t-if="o.move_type in ('out_invoice', 'in_refund') and o.payment_reference">
|
||||
<p name="payment_communication">
|
||||
Payment Communication: <span class="fw-bold" t-field="o.payment_reference">INV/2023/00001</span>
|
||||
<t t-if="o.partner_bank_id">
|
||||
<br/> on this account: <span t-field="o.partner_bank_id" class="fw-bold"/>
|
||||
</t>
|
||||
</p>
|
||||
</div>
|
||||
<t t-set="show_qr" t-value="o.display_qr_code and o.amount_residual"/>
|
||||
<div t-if="not show_qr" name="qr_code_placeholder" class="oe_structure"></div>
|
||||
<div id="qrcode" class="d-flex mb-3 avoid-page-break-inside" t-else="">
|
||||
<div class="qrcode me-3" id="qrcode_image">
|
||||
<t t-set="qr_code_url" t-value="o._generate_qr_code(silent_errors=True)"/>
|
||||
<p t-if="qr_code_url" class="position-relative mb-0">
|
||||
<img t-att-src="qr_code_url"/>
|
||||
<img src="/account/static/src/img/Odoo_logo_O.svg"
|
||||
id="qrcode_odoo_logo"
|
||||
class="top-50 start-50 position-absolute bg-white border border-3 rounded-circle"
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
<div class="d-inline text-muted lh-sm fst-italic" id="qrcode_info" t-if="qr_code_url">
|
||||
<p>Scan this QR Code with<br/>your banking application</p>
|
||||
</div>
|
||||
</div>
|
||||
<t t-set="show_link_qr" t-value="o.display_link_qr_code and o.amount_residual"/>
|
||||
<div t-if="show_link_qr" id="payment_link_qrcode" class="d-flex mb-3 avoid-page-break-inside">
|
||||
<t t-set="portal_qr_code" t-value="o._generate_portal_payment_qr()"/>
|
||||
<div class="qrcode me-3 position-relative" id="qrcode_image">
|
||||
<a t-att-href="o._get_portal_payment_link()" target="_blank" class="top-0 start-0 position-absolute w-100 h-100 z-1" />
|
||||
<p class="position-relative mb-0">
|
||||
<img t-att-src="portal_qr_code"/>
|
||||
<img src="/account/static/src/img/Odoo_logo_O.svg"
|
||||
id="qrcode_odoo_logo"
|
||||
class="top-50 start-50 position-absolute bg-white border border-3 rounded-circle"
|
||||
/>
|
||||
</p>
|
||||
</div>
|
||||
<div class="d-inline lh-sm" id="qrcode_info" t-if="portal_qr_code">
|
||||
<p class="fw-bold mb-0">PAY IN A FLASH!</p>
|
||||
<p class="text-muted fst-italic">Scan the QR code<br/>or click to pay online</p>
|
||||
</div>
|
||||
</div>
|
||||
<!--terms and conditions-->
|
||||
<div class="text-muted mb-3" t-attf-style="#{'text-align:justify;text-justify:inter-word;' if o.company_id.terms_type != 'html' else ''}" t-if="not is_html_empty(o.narration)" name="comment">
|
||||
<span t-field="o.narration"/>
|
||||
</div>
|
||||
<div class="oe_structure"></div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
<div t-if="not is_html_empty(o.narration)" name="comment">
|
||||
<span t-field="o.narration"/>
|
||||
</div>
|
||||
<p t-if="not is_html_empty(o.fiscal_position_id.note)" name="note">
|
||||
<span t-field="o.fiscal_position_id.note"/>
|
||||
</p>
|
||||
<p t-if="o.invoice_incoterm_id" name="incoterm">
|
||||
<strong>Incoterm: </strong><span t-field="o.invoice_incoterm_id.code"/> - <span t-field="o.invoice_incoterm_id.name"/>
|
||||
</p>
|
||||
<div id="qrcode" t-if="o.display_qr_code and o.amount_residual > 0">
|
||||
<t t-set="qr_code_url" t-value="o._generate_qr_code(silent_errors=True)"/>
|
||||
<p t-if="qr_code_url">
|
||||
<strong class="text-center">Scan me with your banking app.</strong><br/><br/>
|
||||
<img class="border border-dark rounded" t-att-src="qr_code_url"/>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="document_tax_totals">
|
||||
<template id="document_tax_totals_template">
|
||||
<!--
|
||||
Generic template to display tax totals in pdf reports.
|
||||
Used by invoices, SO and PO.
|
||||
|
||||
ARGUMENTS:
|
||||
- currency: The res.currency to use.
|
||||
- tax_totals: dict in the form generated by account.move's _get_tax_totals.
|
||||
-->
|
||||
<t t-set="same_tax_base" t-value="tax_totals['same_tax_base']"/>
|
||||
<t t-foreach="tax_totals['subtotals']" t-as="subtotal">
|
||||
<tr class="border-black o_subtotal">
|
||||
<td><strong t-esc="subtotal['name']"/></td>
|
||||
|
||||
<tr t-if="subtotal['tax_groups']" class="o_subtotal">
|
||||
<td>
|
||||
<span t-out="subtotal['name']">Untaxed Amount</span>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span
|
||||
t-att-class="oe_subtotal_footer_separator"
|
||||
t-esc="subtotal['formatted_amount']"
|
||||
/>
|
||||
<span t-att-class="oe_subtotal_footer_separator"
|
||||
t-out="subtotal['base_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>27.00</span>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<t t-set="subtotal_to_show" t-value="subtotal['name']"/>
|
||||
<t t-call="account.tax_groups_totals"/>
|
||||
<t t-foreach="subtotal['tax_groups']" t-as="tax_group">
|
||||
<tr class="o_taxes">
|
||||
<t t-if="same_tax_base or tax_group['display_base_amount_currency'] is False">
|
||||
<td style="max-width: 200px;">
|
||||
<span t-out="tax_group['group_name']">Tax 15%</span>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['tax_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>1.05</span>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td>
|
||||
<span t-out="tax_group['group_name']">Tax 15%</span>
|
||||
<span> on </span>
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['display_base_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>27.00</span>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['tax_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>4.05</span>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
<t t-if="'formatted_rounding_amount' in tax_totals and tax_totals['rounding_amount'] != 0">
|
||||
<tr t-if="'cash_rounding_base_amount_currency' in tax_totals">
|
||||
<td>Rounding</td>
|
||||
<td class="text-end">
|
||||
<span t-esc="tax_totals['formatted_rounding_amount']"/>
|
||||
<span t-out="tax_totals['cash_rounding_base_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>0</span>
|
||||
</td>
|
||||
</t>
|
||||
|
||||
</tr>
|
||||
|
||||
<!--Total amount with all taxes-->
|
||||
<tr class="border-black o_total">
|
||||
<tr class="o_total">
|
||||
<td><strong>Total</strong></td>
|
||||
<td class="text-end">
|
||||
<span t-esc="tax_totals['formatted_amount_total_rounded']" t-if="'formatted_amount_total_rounded' in tax_totals"/>
|
||||
<span t-esc="tax_totals['formatted_amount_total']" t-else=""/>
|
||||
<td class="text-end">
|
||||
<strong t-out="tax_totals['total_amount_currency']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>31.05</strong>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
<template id="tax_groups_totals">
|
||||
<!--
|
||||
Generic template to display a list of tax groups with the related amounts.
|
||||
<!-- Allow edits (e.g. studio) without changing the often inherited base template -->
|
||||
<template id="document_tax_totals" inherit_id="account.document_tax_totals_template" primary="True"></template>
|
||||
|
||||
ARGUMENTS:
|
||||
- tax_totals: dict in the form generated by account.move's _get_tax_totals.
|
||||
- subtotal_to_show: The subtotal we need to render the groups from
|
||||
-->
|
||||
<t t-foreach="tax_totals['groups_by_subtotal'][subtotal_to_show]" t-as="amount_by_group">
|
||||
<tr>
|
||||
<t t-if="tax_totals['display_tax_base']">
|
||||
<td>
|
||||
<span t-esc="amount_by_group['tax_group_name']"/>
|
||||
<span t-if="not amount_by_group['hide_base_amount']" class="text-nowrap"> on
|
||||
<t t-esc="amount_by_group['formatted_tax_group_base_amount']"/>
|
||||
</span>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap" t-esc="amount_by_group['formatted_tax_group_amount']"/>
|
||||
</td>
|
||||
<template id="document_tax_totals_company_currency_template">
|
||||
<t t-set="currency" t-value="o.company_currency_id"/>
|
||||
<t t-set="same_tax_base" t-value="tax_totals['same_tax_base']"/>
|
||||
<div class="mb-2 mt-3 border p-2 avoid-page-break-inside totals_taxes_company_currency">
|
||||
<table class="o_total_table table table-borderless mb-0">
|
||||
<p class="tax_computation_company_currency">
|
||||
Taxes <span t-field="o.company_currency_id"/>
|
||||
</p>
|
||||
<t t-foreach="tax_totals['subtotals']" t-as="subtotal">
|
||||
<tr class="o_subtotal">
|
||||
<td>
|
||||
<span t-out="subtotal['name']">Untaxed amount</span>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<span t-out="subtotal['base_amount']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>27.00</span>
|
||||
</td>
|
||||
</tr>
|
||||
<t t-foreach="subtotal['tax_groups']" t-as="tax_group">
|
||||
<tr class="o_taxes">
|
||||
<t t-if="same_tax_base or tax_group['display_base_amount'] is False">
|
||||
<td>
|
||||
<span class="text-nowrap" t-out="tax_group['group_name']"/>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['tax_amount']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>31.05</span>
|
||||
</td>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td>
|
||||
<span t-out="tax_group['group_name']">Tax 15%</span>
|
||||
<span> on </span>
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['display_base_amount']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>27.00</span>
|
||||
</td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap"
|
||||
t-out="tax_group['tax_amount']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>4.05</span>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
<t t-else="">
|
||||
<td><span class="text-nowrap" t-esc="amount_by_group['tax_group_name']"/></td>
|
||||
<td class="text-end o_price_total">
|
||||
<span class="text-nowrap" t-esc="amount_by_group['formatted_tax_group_amount']" />
|
||||
<!--Total amount with all taxes-->
|
||||
<tr class="o_total">
|
||||
<td><strong>Total</strong></td>
|
||||
<td class="text-end">
|
||||
<strong t-out="tax_totals['total_amount']"
|
||||
t-options='{"widget": "monetary", "display_currency": currency}'
|
||||
>31.05</strong>
|
||||
</td>
|
||||
</t>
|
||||
</tr>
|
||||
</t>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template id="report_invoice">
|
||||
|
|
@ -335,19 +666,15 @@
|
|||
<t t-foreach="docs" t-as="o">
|
||||
<t t-set="lang" t-value="o.partner_id.lang"/>
|
||||
<t t-if="o._get_name_invoice_report() == 'account.report_invoice_document'"
|
||||
t-call="account.report_invoice_document" t-lang="lang"/>
|
||||
t-call="account.report_invoice_document"
|
||||
t-lang="lang"/>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="report_invoice_with_payments">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-set="lang" t-value="o.partner_id.lang"/>
|
||||
<t t-set="print_with_payments" t-value="True"/>
|
||||
<t t-if="o._get_name_invoice_report() == 'account.report_invoice_document'"
|
||||
t-call="account.report_invoice_document" t-lang="lang"/>
|
||||
</t>
|
||||
<t t-call="account.report_invoice">
|
||||
<t t-set="print_with_payments" t-value="True"/>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
|
|
|
|||
|
|
@ -3,44 +3,52 @@
|
|||
<template id="report_payment_receipt_document">
|
||||
<t t-call="web.external_layout">
|
||||
<t t-set="o" t-value="o.with_context(lang=lang)"/>
|
||||
<t t-set="values" t-value="o._get_payment_receipt_report_values()"/>
|
||||
<div class="page">
|
||||
<h3><strong>Payment Receipt: <span t-field="o.name"/></strong></h3>
|
||||
<h3><strong><span t-field="o.payment_receipt_title">Payment Receipt</span>: <span t-field="o.name">INV0001</span></strong></h3>
|
||||
|
||||
<div class="mb-4 mt-3">
|
||||
<div class="row">
|
||||
<div name="date" class="row">
|
||||
<div class="col-6" t-if="o.date">
|
||||
Payment Date: <span t-field="o.date"/>
|
||||
Payment Date: <span t-field="o.date">2023-01-01</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_structure"></div>
|
||||
<div class="row">
|
||||
<div class="col-6" t-if="o.partner_type">
|
||||
<t t-if="o.partner_type == 'customer'">
|
||||
Customer:
|
||||
</t>
|
||||
<t t-if="o.partner_type == 'supplier'">
|
||||
<t t-else="o.partner_type == 'supplier'">
|
||||
Vendor:
|
||||
</t><span t-field="o.partner_id"/>
|
||||
</t><span t-field="o.partner_id" data-oe-demo="Marc Demo"/>
|
||||
</div>
|
||||
<div class="col-6" t-if="o.payment_method_id">
|
||||
Payment Method: <span t-field="o.payment_method_id.name"/>
|
||||
<div name="payment_method"
|
||||
t-if="values['display_payment_method'] and o.payment_method_id"
|
||||
class="col-6">
|
||||
Payment Method: <span t-field="o.payment_method_id.name">Credit card</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="oe_structure"></div>
|
||||
<div class="row">
|
||||
<div class="col-6" t-if="o.amount">
|
||||
Payment Amount: <span t-field="o.amount" t-options="{'widget': 'monetary', 'display_currency': o.currency_id}"/>
|
||||
Payment Amount: <span t-field="o.amount" t-options="{'widget': 'monetary', 'display_currency': o.currency_id}">50 USD</span>
|
||||
</div>
|
||||
<div class="col-6" t-if="o.ref">
|
||||
Memo: <span t-field="o.ref"/>
|
||||
<div class="col-6" t-if="o.memo">
|
||||
Memo: <span t-field="o.memo">Sample Memo</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<t t-set="invoices" t-value="o.reconciled_invoice_ids or o.reconciled_bill_ids"/>
|
||||
<!-- Check if invoices include different currencies -->
|
||||
<t t-foreach="invoices" t-as="inv">
|
||||
<t t-if="any(inv.currency_id != par[2].currency_id for par in inv._get_reconciled_invoices_partials()[0])" t-set="otherCurrency" t-value="True"/>
|
||||
</t>
|
||||
|
||||
<table class="table table-sm">
|
||||
<div class="oe_structure"></div>
|
||||
<table name="invoices"
|
||||
t-if="values['display_invoices']"
|
||||
class="table table-borderless">
|
||||
<t t-set="invoices" t-value="o.reconciled_invoice_ids or o.reconciled_bill_ids"/>
|
||||
<!-- Check if invoices include different currencies -->
|
||||
<t t-foreach="invoices" t-as="inv">
|
||||
<t t-if="any(inv.currency_id != par[2].currency_id for par in inv._get_reconciled_invoices_partials()[0])" t-set="otherCurrency" t-value="True"/>
|
||||
</t>
|
||||
<thead>
|
||||
<tr>
|
||||
<th><span>Invoice Date</span></th>
|
||||
|
|
@ -56,39 +64,40 @@
|
|||
<!-- MOVE -->
|
||||
<t t-if="inv.move_type != 'entry'">
|
||||
<tr>
|
||||
<td><span t-field="inv.invoice_date"/></td>
|
||||
<td><span t-field="inv.name"/></td>
|
||||
<td><span t-field="inv.ref"/></td>
|
||||
<td><span t-field="inv.invoice_date">2023-01-01</span></td>
|
||||
<td><span t-field="inv.name">INV001</span></td>
|
||||
<td><span t-field="inv.ref" data-oe-demo="Sample Ref"/></td>
|
||||
<td t-if="otherCurrency"/>
|
||||
<td class="text-end"><span t-field="inv.amount_total"/></td>
|
||||
<td class="text-end"><span t-field="inv.amount_total">100.00 USD</span></td>
|
||||
</tr>
|
||||
<!-- PAYMENTS/REVERSALS -->
|
||||
<tr t-foreach="inv._get_reconciled_invoices_partials()[0]" t-as="par">
|
||||
<t t-set="payment" t-value="par[2]"/>
|
||||
<td><span t-field="payment.move_id.date"/></td>
|
||||
<td><span t-field="payment.move_id.name"/></td>
|
||||
<td><span t-field="payment.move_id.ref"/></td>
|
||||
<t t-set="amountPayment" t-value="-par[0].amount"/>
|
||||
<td><span t-field="payment.move_id.date">2023-01-05</span></td>
|
||||
<td><span t-field="payment.move_id.name">PAY001</span></td>
|
||||
<td><span t-field="payment.payment_id.memo" data-oe-demo="Payment Ref"/></td>
|
||||
<t t-set="amountPayment" t-value="-(par[0].debit_amount_currency if par[2].debit > 0 else par[0].credit_amount_currency)"/>
|
||||
<t t-set="amountInvoice" t-value="-par[1]"/>
|
||||
<t t-set="currencyPayment" t-value="payment.currency_id"/>
|
||||
<t t-set="currencyInvoice" t-value="inv.currency_id"/>
|
||||
<!-- Fill the column "Amount In Currency" only if necessary -->
|
||||
<td t-if="otherCurrency" class="text-end"><span t-if="currencyPayment != currencyInvoice" t-esc="amountPayment" t-options="{'widget': 'monetary', 'display_currency': currencyPayment}"/></td>
|
||||
<td class="text-end"><span t-esc="amountInvoice" t-options="{'widget': 'monetary', 'display_currency': currencyInvoice}"/></td>
|
||||
<td t-if="otherCurrency" class="text-end"><span t-if="currencyPayment != currencyInvoice" t-out="amountPayment" t-options="{'widget': 'monetary', 'display_currency': currencyPayment}">50.00 EUR</span></td>
|
||||
<td class="text-end"><span t-out="amountInvoice" t-options="{'widget': 'monetary', 'display_currency': currencyInvoice}">25.00 USD</span></td>
|
||||
</tr>
|
||||
<!-- BALANCE -->
|
||||
<tr>
|
||||
<td/>
|
||||
<td><strong>Due Amount for <span t-field="inv.name"/></strong></td>
|
||||
<td><strong>Due Amount for <span t-field="inv.name">INV001</span></strong></td>
|
||||
<td/>
|
||||
<td t-if="otherCurrency"/>
|
||||
<td class="text-end"><strong><span t-field="inv.amount_residual"/></strong></td>
|
||||
<td class="text-end"><strong><span t-field="inv.amount_residual">25.0 USD</span></strong></td>
|
||||
</tr>
|
||||
</t>
|
||||
</t>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="oe_structure"></div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +1,29 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<odoo>
|
||||
<data>
|
||||
<!-- better support for long company name -->
|
||||
<template id="report_statement_internal_layout" inherit_id="web.internal_layout" primary="True">
|
||||
<xpath expr="//div[hasclass('col-3')]" position="attributes">
|
||||
<attribute name="class">col-4</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('col-2') and hasclass('offset-2') and hasclass('text-center')]" position="attributes">
|
||||
<attribute name="class">col-4 text-center</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//div[hasclass('col-2') and hasclass('offset-3') and hasclass('text-end')]" position="attributes">
|
||||
<attribute name="class">col-2 offset-2 text-end</attribute>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="report_statement">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-call="web.internal_layout">
|
||||
<t t-call="account.report_statement_internal_layout">
|
||||
<div class="page">
|
||||
<div class="oe_structure"></div>
|
||||
<div class="border border-top-0 border-end-0 border-start-0 border-info">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<h4 class="text-end w-100">
|
||||
<h4 class="text-center w-100">
|
||||
<strong>
|
||||
<span t-if="o.journal_id.type == 'bank'">Bank Statement</span>
|
||||
<span t-else="">Cash Statement</span>
|
||||
|
|
@ -19,36 +33,36 @@
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<div class="oe_structure"></div>
|
||||
<div class="pt-2 pb-2">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="col-7">
|
||||
<h5>
|
||||
<strong>
|
||||
<span t-field="o.journal_id"/>
|
||||
<t t-if="o.journal_id.bank_account_id"> -
|
||||
<span t-field="o.journal_id.bank_account_id"/>
|
||||
</t>
|
||||
<t t-if="o.journal_id.code"> -
|
||||
<span t-field="o.journal_id.code"/>
|
||||
</t>
|
||||
<span t-out="o.journal_id.display_name">Journal Name</span>
|
||||
<span t-if="o.journal_id.bank_account_id">
|
||||
- <span t-out="o.journal_id.bank_account_id.display_name">Bank Account Name</span>
|
||||
</span>
|
||||
<span t-if="o.journal_id.code">
|
||||
- <span t-out="o.journal_id.code">12345</span>
|
||||
</span>
|
||||
</strong>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="col-5" style="text-align: end;">
|
||||
<h5>
|
||||
<strong>
|
||||
<t t-if="o.name">
|
||||
<span t-field="o.name"/>
|
||||
- </t>
|
||||
<span t-field="o.date"/>
|
||||
<span t-if="o.name">
|
||||
<span t-field="o.name">Statement Name</span>
|
||||
- </span>
|
||||
<span t-field="o.date">2023-08-15</span>
|
||||
</strong>
|
||||
</h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="oe_structure"></div>
|
||||
<table class="table table-lg m-0 table-borderless border border-end-0 border-start-0 border-info">
|
||||
<tbody>
|
||||
<tr>
|
||||
|
|
@ -60,12 +74,12 @@
|
|||
</td>
|
||||
<td class="p-0">
|
||||
<strong>
|
||||
<span t-esc="o.line_ids and o.line_ids.sorted(lambda line: line.date)[0].date" t-options='{"widget": "date"}'/>
|
||||
<span t-out="o.line_ids and o.line_ids.sorted(lambda line: line.date)[0].date" t-options='{"widget": "date"}'>2023-08-11</span>
|
||||
</strong>
|
||||
</td>
|
||||
<td class="text-end p-0">
|
||||
<strong>
|
||||
<span t-field="o.balance_start"/>
|
||||
<span t-field="o.balance_start">1000.0</span>
|
||||
</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -75,12 +89,12 @@
|
|||
</td>
|
||||
<td class="p-0">
|
||||
<strong>
|
||||
<span t-esc="o.line_ids and o.line_ids.sorted(lambda line: line.date)[-1].date" t-options='{"widget": "date"}'/>
|
||||
<span t-out="o.line_ids and o.line_ids.sorted(lambda line: line.date)[-1].date" t-options='{"widget": "date"}'>2023-08-31</span>
|
||||
</strong>
|
||||
</td>
|
||||
<td class="text-end p-0">
|
||||
<strong>
|
||||
<span t-field="o.balance_end_real"/>
|
||||
<span t-field="o.balance_end_real">1500.0</span>
|
||||
</strong>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
@ -90,34 +104,31 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="oe_structure"></div>
|
||||
<table class="table table-borderless m-0">
|
||||
<tbody>
|
||||
<tr t-foreach="o.line_ids" t-as="line" class="pb-2">
|
||||
<td class="ps-0 pe-0">
|
||||
<table class="table table-borderless">
|
||||
<tr>
|
||||
<td class="p-0 w-25">
|
||||
<span class="d-block fw-bold" t-field="line.date"/>
|
||||
</td>
|
||||
<td class="p-0">
|
||||
<span class="d-block fw-bold" t-if="line.partner_id" t-field="line.partner_id"/>
|
||||
<span class="d-block" t-if="line.partner_bank_id" t-field="line.partner_bank_id"/>
|
||||
<span class="d-block" t-if="line.payment_ref" t-field="line.payment_ref"/>
|
||||
<span class="d-block" t-if=" not is_html_empty(line.narration)" t-field="line.narration"/>
|
||||
</td>
|
||||
<td class="text-end p-0">
|
||||
<span class="d-block fw-bold" t-field="line.amount"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<tr t-foreach="o.line_ids" t-as="line">
|
||||
<td class="w-25 py-1">
|
||||
<span class="d-block fw-bold" t-field="line.date">2023-08-11</span>
|
||||
</td>
|
||||
<td class="py-1">
|
||||
<span class="d-block fw-bold" t-if="line.partner_id">
|
||||
<span t-out="line.partner_id.name">Marc Demo</span> <span t-if="line.partner_bank_id and line.partner_bank_id.partner_id != line.partner_id">(<span t-out="line.partner_bank_id.partner_id.name">Bank of odoo</span>)</span>
|
||||
</span>
|
||||
<span class="d-block" t-if="line.partner_bank_id or line.account_number" t-out="line.account_number or line.partner_bank_id.acc_number">534677881234</span>
|
||||
<span class="d-block" t-if="line.payment_ref" t-field="line.payment_ref">Payment Reference</span>
|
||||
</td>
|
||||
<td class="text-end py-1">
|
||||
<span t-att-class="'d-block fw-bold' + (' text-danger' if line.amount < 0 else '')" t-field="line.amount">100.0</span>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="oe_structure"></div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
</data>
|
||||
</odoo>
|
||||
</odoo>
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -6,15 +6,24 @@
|
|||
<field name="inherit_id" ref="base.view_company_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='country_id']" position="after">
|
||||
<field name="country_code" invisible="1"/>
|
||||
<field name="account_enabled_tax_country_ids" invisible="1"/>
|
||||
</xpath>
|
||||
<xpath expr="//sheet" position="after">
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" groups="base.group_user"/>
|
||||
<field name="message_ids"/>
|
||||
</div>
|
||||
<chatter/>
|
||||
</xpath>
|
||||
<field name="vat" position="before">
|
||||
<field name="company_vat_placeholder" invisible="1"/> <!-- Needed for the placeholder widget -->
|
||||
</field>
|
||||
<field name="vat" position="attributes">
|
||||
<attribute name="options">{'placeholder_field': 'company_vat_placeholder'}</attribute>
|
||||
</field>
|
||||
|
||||
<field name="company_registry" position="before">
|
||||
<field name="company_registry_placeholder" invisible="1"/> <!-- Needed for the placeholder widget -->
|
||||
</field>
|
||||
<field name="company_registry" position="attributes">
|
||||
<attribute name="options">{'placeholder_field': 'company_registry_placeholder'}</attribute>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
|
@ -33,4 +42,66 @@
|
|||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Onboarding -->
|
||||
<record id="res_company_form_view_onboarding" model="ir.ui.view">
|
||||
<field name="name">res.company.form.view.onboarding</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Company" duplicate="0">
|
||||
<sheet>
|
||||
<field name="logo" widget="image" class="oe_avatar"/>
|
||||
<div class="oe_title">
|
||||
<label for="name"/>
|
||||
<h1>
|
||||
<field name="name" placeholder="e.g. My Company"/>
|
||||
</h1>
|
||||
</div>
|
||||
<group>
|
||||
<group>
|
||||
<field name="vat"/>
|
||||
<label for="street" string="Address"/>
|
||||
<div class="o_address_format">
|
||||
<field name="street" placeholder="Street..." class="o_address_street"/>
|
||||
<field name="street2" placeholder="Street 2..." class="o_address_street"/>
|
||||
<field name="city" placeholder="City" class="o_address_city"/>
|
||||
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'/>
|
||||
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
|
||||
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'/>
|
||||
</div>
|
||||
<field name="company_registry"/>
|
||||
<field name="currency_id" options="{'no_create': True, 'no_open': True}" id="company_currency" context="{'active_test': False}"/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="phone" class="o_force_ltr"/>
|
||||
<field name="email"/>
|
||||
<field name="website" string="Website" widget="url" placeholder="e.g. https://www.odoo.com"/>
|
||||
</group>
|
||||
</group>
|
||||
</sheet>
|
||||
<footer>
|
||||
<button name="action_save_onboarding_company_data" string="Save"
|
||||
class="oe_highlight" type="object" data-hotkey="S" />
|
||||
<button special="cancel" data-hotkey="J" string="Discard" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_company_form_view_onboarding_sale_tax" model="ir.ui.view">
|
||||
<field name="name">res.company.form.view.onboarding.sale.tax</field>
|
||||
<field name="model">res.company</field>
|
||||
<field name="priority">1000</field>
|
||||
<field name="arch" type="xml">
|
||||
<form>
|
||||
<div class="mb16">Choose a default sales tax for your products.</div>
|
||||
<label for="account_sale_tax_id" string="Sales Tax"/>
|
||||
<field name="account_sale_tax_id" />
|
||||
<footer>
|
||||
<button string="Apply" class="btn btn-primary" type="object" name="action_save_onboarding_sale_tax" data-hotkey="q" />
|
||||
<button string="Cancel" class="btn-secondary" special="cancel" data-hotkey="x" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
</odoo>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
|
||||
<record id="country_group_form_inherit_account" model="ir.ui.view">
|
||||
<field name="name">res.country.group.form.inherit.account</field>
|
||||
<field name="model">res.country.group</field>
|
||||
<field name="inherit_id" ref="base.view_country_group_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="country_ids" position="after">
|
||||
<field name="exclude_state_ids" widget="many2many_tags" options="{'no_open': True, 'no_create': True}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
|
@ -7,15 +7,29 @@
|
|||
<field name="model">res.currency</field>
|
||||
<field name="inherit_id" ref="base.view_currency_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//sheet" position="before">
|
||||
<field name="display_rounding_warning" invisible="1"/>
|
||||
<div class="alert alert-warning" role="alert" attrs="{'invisible': [('display_rounding_warning', '=', False)]}">
|
||||
<strong>This currency has already been used to generate accounting entries.</strong> <br/>
|
||||
Changing its rounding factor now will not change the rounding made on previous entries; possibly causing an inconsistency with the new ones.
|
||||
<form position="attributes">
|
||||
<attribute name="js_class">currency_form</attribute>
|
||||
</form>
|
||||
|
||||
<xpath expr="//field[@name='decimal_places']" position="after">
|
||||
<div colspan="2" invisible="not display_rounding_warning" class="alert alert-danger" role="alert">
|
||||
<p class="m-0">
|
||||
<strong>WARNING - This change is irreversible</strong>
|
||||
</p>
|
||||
|
||||
<p class="mt-1 mb-2">
|
||||
You are changing decimals in your entire database, including invoices,
|
||||
tax amounts, accounting amounts, reports. This is probably not intended.
|
||||
</p>
|
||||
|
||||
<div>
|
||||
<field name="display_rounding_warning"
|
||||
widget="open_decimal_precision_button"/>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -8,25 +8,93 @@
|
|||
<field name="mode">primary</field>
|
||||
<field name="priority">14</field>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//sheet" position="before">
|
||||
<div class="alert alert-warning" role="alert" invisible="not duplicate_bank_partner_ids">
|
||||
<span>The Bank Account could be a duplicate of</span>
|
||||
<field name="duplicate_bank_partner_ids" widget="x2many_buttons" string="Partners with same bank"/>
|
||||
</div>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//form[@name='bank_account_form']/sheet[1]" position="after">
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<chatter/>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='acc_number']" position="attributes">
|
||||
<attribute name="readonly">lock_trust_fields</attribute>
|
||||
<attribute name="force_save">1</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='partner_id']" position="attributes">
|
||||
<attribute name="readonly">lock_trust_fields</attribute>
|
||||
<attribute name="force_save">1</attribute>
|
||||
</xpath>
|
||||
|
||||
<xpath expr="//field[@name='allow_out_payment']" position="replace">
|
||||
<field name="user_has_group_validate_bank_account" invisible="1"/>
|
||||
<field name="lock_trust_fields" invisible="1"/>
|
||||
<label for="allow_out_payment"/>
|
||||
<div class="d-flex gap-2">
|
||||
<field name="allow_out_payment" widget="boolean_toggle" options="{'autosave': False}" readonly="not user_has_group_validate_bank_account" class="w-25"/>
|
||||
<span class="d-flex gap-2 w-100">
|
||||
<span invisible="allow_out_payment" class="text-muted">Untrusted</span>
|
||||
<span invisible="not allow_out_payment" class="text-success">Trusted</span>
|
||||
</span>
|
||||
</div>
|
||||
<div invisible="allow_out_payment" colspan="2">
|
||||
<field name="has_money_transfer_warning" invisible="1"/>
|
||||
<div invisible="not has_money_transfer_warning" class="mb-1">
|
||||
<span class="text-danger">High risk</span>: <field name="money_transfer_service" nolabel="1" class="oe_inline"/> is a money transfer service and not a bank.
|
||||
Double check if the account can be trusted by calling the vendor.<br/>
|
||||
<widget name="documentation_link" path="/applications/finance/accounting/payables/pay/trusted_accounts.html" label="Check why."/>
|
||||
</div>
|
||||
<field name="has_iban_warning" invisible="1"/>
|
||||
<div invisible="not has_iban_warning">
|
||||
<span class="text-warning">Medium risk</span>: Iban <field name="sanitized_acc_number" nolabel="1" class="oe_inline fw-bold"/>
|
||||
is not from the same country as the partner (<field name="partner_country_name" nolabel="1" class="oe_inline"/>).<br/>
|
||||
<widget name="documentation_link" path="/applications/finance/accounting/payables/pay/trusted_accounts.html" label="Check why it's risky."/>
|
||||
</div>
|
||||
</div>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_new_bank_setting" model="ir.actions.server">
|
||||
<field name="name">Add a Bank Account</field>
|
||||
<field name="model_id" ref="model_res_company"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">
|
||||
action = model.setting_init_bank_account_action()
|
||||
<record id="view_partner_bank_search_inherit" model="ir.ui.view">
|
||||
<field name="name">res.partner.bank.search.inherit</field>
|
||||
<field name="model">res.partner.bank</field>
|
||||
<field name="inherit_id" ref="base.view_partner_bank_search"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//search" position="inside">
|
||||
<filter string="Trusted" name="trusted" domain="[('allow_out_payment', '=', True)]"/>
|
||||
<filter string="Untrusted" name="untrusted" domain="[('allow_out_payment', '=', False)]"/>
|
||||
<filter string="To validate" name="to_validate" domain="[('allow_out_payment', '=', False), ('related_moves', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Customers" name="customer" domain="[('partner_customer_rank','>', 0)]"/>
|
||||
<filter string="Vendors" name="supplier" domain="[('partner_supplier_rank','>', 0)]"/>
|
||||
<separator/>
|
||||
<filter string="Phishing risk: High" name="high_phishing_risk" domain="[('has_money_transfer_warning', '!=', False)]"/>
|
||||
<filter string="Phishing risk: Medium" name="medium_phishing_risk" domain="[('has_iban_warning', '!=', False)]"/>
|
||||
<separator/>
|
||||
<filter string="Created On" name="create_date" date="create_date"/>
|
||||
<group>
|
||||
<filter string="Created On" name="groupby_create_date" context="{'group_by': 'create_date'}"/>
|
||||
<filter string="Created By" name="groupby_create_by" context="{'group_by': 'create_uid'}"/>
|
||||
</group>
|
||||
</xpath>
|
||||
</field>
|
||||
<field name="groups_id" eval="[(4, ref('account.group_account_manager'))]"/>
|
||||
</record>
|
||||
|
||||
<record id="action_account_supplier_accounts" model="ir.actions.act_window">
|
||||
<field name="name">Bank Accounts</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.partner.bank</field>
|
||||
<field name="view_mode">list,form</field>
|
||||
<field name="view_id" ref="base.view_partner_bank_tree"/>
|
||||
<field name="search_view_id" ref="view_partner_bank_search_inherit"/>
|
||||
<field name="help" type="html">
|
||||
<p class="o_view_nocontent_smiling_face">
|
||||
Create a new bank account
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<template id="account.account_terms_conditions_setting_banner" name="Account Terms and Conditions Setting Banner">
|
||||
<div id="terms_conditions" t-ignore="true" class="text-center">
|
||||
<span>This is a preview of your Terms & Conditions.</span>
|
||||
<a t-att-href="backend_url"><i class="fa fa-arrow-right me-1"/>Back to settings</a>
|
||||
<a t-att-href="backend_url"><i class="oi oi-arrow-right me-1"/>Back to settings</a>
|
||||
</div>
|
||||
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
|
||||
</template>
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
<t t-call="web.frontend_layout">
|
||||
<t t-set="o_portal_fullwidth_alert" groups="account.group_account_manager">
|
||||
<t t-call="account.account_terms_conditions_setting_banner">
|
||||
<t t-set="backend_url" t-value="'/web#action=account.action_open_settings&model=res.config.settings'"/>
|
||||
<t t-set="backend_url" t-value="'/odoo/action-account.action_open_settings'"/>
|
||||
</t>
|
||||
</t>
|
||||
<div class="oe_structure" id="oe_structure_terms_conditions"/>
|
||||
|
|
@ -34,22 +34,22 @@
|
|||
The client explicitly waives its own standard terms and conditions, even if these were drawn up after these standard terms and conditions of sale. In order to be valid, any derogation must be expressly agreed to in advance in writing.
|
||||
</li>
|
||||
<li>
|
||||
Our invoices are payable within 21 working days, unless another payment timeframe is indicated on either the invoice or the order. In the event of non-payment by the due date, <t t-esc="company_name"/> reserves the right to request a fixed interest payment amounting to 10% of the sum remaining due. <t t-esc="company_name"/> will be authorized to suspend any provision of services without prior warning in the event of late payment.
|
||||
Our invoices are payable within 21 working days, unless another payment timeframe is indicated on either the invoice or the order. In the event of non-payment by the due date, <t t-out="company_name"/> reserves the right to request a fixed interest payment amounting to 10% of the sum remaining due. <t t-out="company_name"/> will be authorized to suspend any provision of services without prior warning in the event of late payment.
|
||||
</li>
|
||||
<li>
|
||||
If a payment is still outstanding more than sixty (60) days after the due payment date, <t t-esc="company_name"/> reserves the right to call on the services of a debt recovery company. All legal expenses will be payable by the client.
|
||||
If a payment is still outstanding more than sixty (60) days after the due payment date, <t t-out="company_name"/> reserves the right to call on the services of a debt recovery company. All legal expenses will be payable by the client.
|
||||
</li>
|
||||
<li>
|
||||
Certain countries apply withholding at source on the amount of invoices, in accordance with their internal legislation. Any withholding at source will be paid by the client to the tax authorities. Under no circumstances can <t t-esc="company_name"/> become involved in costs related to a country's legislation. The amount of the invoice will therefore be due to <t t-esc="company_name"/> in its entirety and does not include any costs relating to the legislation of the country in which the client is located.
|
||||
Certain countries apply withholding at source on the amount of invoices, in accordance with their internal legislation. Any withholding at source will be paid by the client to the tax authorities. Under no circumstances can <t t-out="company_name"/> become involved in costs related to a country's legislation. The amount of the invoice will therefore be due to <t t-out="company_name"/> in its entirety and does not include any costs relating to the legislation of the country in which the client is located.
|
||||
</li>
|
||||
<li>
|
||||
<t t-esc="company_name"/> undertakes to do its best to supply performant services in due time in accordance with the agreed timeframes. However, none of its obligations can be considered as being an obligation to achieve results. <t t-esc="company_name"/> cannot under any circumstances, be required by the client to appear as a third party in the context of any claim for damages filed against the client by an end consumer.
|
||||
<t t-out="company_name"/> undertakes to do its best to supply performant services in due time in accordance with the agreed timeframes. However, none of its obligations can be considered as being an obligation to achieve results. <t t-out="company_name"/> cannot under any circumstances, be required by the client to appear as a third party in the context of any claim for damages filed against the client by an end consumer.
|
||||
</li>
|
||||
<li>
|
||||
In order for it to be admissible, <t t-esc="company_name"/> must be notified of any claim by means of a letter sent by recorded delivery to its registered office within 8 days of the delivery of the goods or the provision of the services.
|
||||
In order for it to be admissible, <t t-out="company_name"/> must be notified of any claim by means of a letter sent by recorded delivery to its registered office within 8 days of the delivery of the goods or the provision of the services.
|
||||
</li>
|
||||
<li>
|
||||
All our contractual relations will be governed exclusively by <t t-esc="company_country"/> law.
|
||||
All our contractual relations will be governed exclusively by <t t-out="company_country"/> law.
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<odoo>
|
||||
<template id="tests_shared_js_python">
|
||||
<t t-call="web.frontend_layout">
|
||||
<t t-set="no_header" t-value="True"/>
|
||||
<t t-set="no_footer" t-value="True"/>
|
||||
<owl-component name="account.tests_shared_js_python" t-att-props="json.dumps(props)"/>
|
||||
</t>
|
||||
</template>
|
||||
</odoo>
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
<odoo>
|
||||
<data>
|
||||
<record id="product_uom_form_view_inherit" model="ir.ui.view">
|
||||
<field name="name">product_uom_form_view_inherit</field>
|
||||
<field name="model">uom.uom</field>
|
||||
<field name="inherit_id" ref="uom.product_uom_form_view"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='name']" position="before">
|
||||
<field name="fiscal_country_codes" invisible="1"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
Loading…
Add table
Add a link
Reference in a new issue