Initial commit: Accounting packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:47 +02:00
commit 4ef34c2317
2661 changed files with 1709616 additions and 0 deletions

View file

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="account_tag_view_form" model="ir.ui.view">
<field name="name">Tags</field>
<field name="model">account.account.tag</field>
<field name="arch" type="xml">
<form string="Tags">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<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')]}"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="account_tag_view_tree" model="ir.ui.view">
<field name="name">Tags</field>
<field name="model">account.account.tag</field>
<field name="arch" type="xml">
<tree string="Tags">
<field name="name"/>
<field name="applicability"/>
<field name="country_id" />
</tree>
</field>
</record>
<record id="account_tag_view_search" model="ir.ui.view">
<field name="name">account.tag.view.search</field>
<field name="model">account.account.tag</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
<separator/>
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_account_form" model="ir.ui.view">
<field name="name">account.account.form</field>
<field name="model">account.account</field>
<field name="arch" type="xml">
<form string="Account">
<sheet>
<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)]}">
<div class="o_stat_info">
<span class="o_stat_value">
<field name="related_taxes_amount"/>
</span>
<span class="o_stat_text">
Taxes
</span>
</div>
</button>
<button class="oe_stat_button" name="account.action_move_line_select"
type="action" icon="fa-bars">
<div class="o_stat_info">
<span class="o_stat_value">
<field name="current_balance"/>
</span>
<span class="o_stat_text">
Balance
</span>
</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"/>
<div>
<field name="name"
placeholder="e.g. Current Assets"
style="width:80% !important;"/>
</div>
</div>
</div>
<field name="company_id" invisible="1"/>
</h1>
</div>
<notebook>
<page name="accounting" string="Accounting">
<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="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"/>
</group>
</group>
</page>
</notebook>
</sheet>
<!-- Chatter -->
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="view_account_list" model="ir.ui.view">
<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"/>
<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="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>
</record>
<record id="view_account_account_kanban" model="ir.ui.view">
<field name="name">account.account.kanban</field>
<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>
</div>
<div>
<strong>Type: </strong><t t-esc="record.account_type.value"/>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_account_search" model="ir.ui.view">
<field name="name">account.account.search</field>
<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"/>
<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')]"/>
<filter string="Assets" name="assetsacc" domain="[('internal_group','=', 'asset')]"/>
<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')]"/>
<separator/>
<filter string="Account with Entries" name="used" domain="[('used', '=', True)]"/>
<filter string="Active Account" name="activeacc" domain="[('deprecated', '=', False)]"/>
<separator/>
<field name="account_type"/>
<group expand="0" string="Group By">
<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>
</search>
</field>
</record>
<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="search_view_id" ref="view_account_search"/>
<field name="view_id" ref="view_account_list"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Add a new account
</p><p>
An account is part of a ledger allowing your company
to register all kinds of debit and credit transactions.
Companies present their annual accounts in two main parts: the
balance sheet and the income statement (profit and loss
account). The annual accounts of a company are required by law
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>
<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="state">code</field>
<field name="code">
action = model.action_duplicate_accounts()
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="account_analytic_account_view_form_inherit" model="ir.ui.view">
<field name="name">account.analytic.account.form.inherit</field>
<field name="model">account.analytic.account</field>
<field name="inherit_id" ref="analytic.view_account_analytic_account_form"/>
<field eval="9" name="priority"/>
<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)]}">
<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)]}">
<field string="Vendor Bills" name="vendor_bill_count" widget="statinfo"/>
</button>
</div>
</field>
</record>
<record id="account_analytic_account_view_list_inherit" model="ir.ui.view">
<field name="name">account.analytic.account.list.inherit</field>
<field name="model">account.analytic.account</field>
<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>
</field>
<field name="credit" position="attributes">
<attribute name="invisible">False</attribute>
</field>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<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="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"/>
</xpath>
<xpath expr="//field[@name='company_id']" position="before">
<field name="product_id" optional="show"/>
<field name="product_categ_id" optional="hide"/>
</xpath>
</data>
</field>
</record>
<record id="account_analytic_distribution_model_form_inherit" model="ir.ui.view">
<field name="name">account.analytic.distribution.model.inherit.form</field>
<field name="model">account.analytic.distribution.model</field>
<field name="inherit_id" ref="analytic.account_analytic_distribution_model_form_view"/>
<field name="arch" type="xml">
<data>
<xpath expr="//field[@name='partner_category_id']" position="after">
<field name="account_prefix"/>
</xpath>
<xpath expr="//field[@name='company_id']" position="before">
<field name="product_id"/>
<field name="product_categ_id"/>
</xpath>
</data>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,83 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_account_analytic_line_form_inherit_account" model="ir.ui.view">
<field name="name">account.analytic.line.form.inherit.account</field>
<field name="model">account.analytic.line</field>
<field name="inherit_id" ref="analytic.view_account_analytic_line_form"/>
<field name="arch" type="xml">
<data>
<xpath expr="//field[@name='amount']" position="after">
<field name="ref"/>
<field name="partner_id"/>
</xpath>
<xpath expr="//field[@name='product_uom_id']" position="before">
<field name="product_id"/>
</xpath>
<group name="amount" position="after">
<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)]}"/>
</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="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="general_account_id" optional="hide"/>
<field name="move_line_id" widget="line_open_move_widget" optional="hide"/>
<field name="product_id" optional="hide"/>
</xpath>
</data>
</field>
</record>
<record id="view_account_analytic_line_filter_inherit_account" model="ir.ui.view">
<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="arch" type="xml">
<data>
<xpath expr="//field[@name='date']" position="after">
<field name="product_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'}"/>
<filter string="Product" name="product" context="{'group_by':'product_id'}"/>
<filter string="Partner" name="partner" context="{'group_by':'partner_id'}"/>
</xpath>
</data>
</field>
</record>
<record id="view_account_analytic_line_pivot" model="ir.ui.view">
<field name="name">account.analytic.line.pivot</field>
<field name="model">account.analytic.line</field>
<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>
</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>
</data>
</odoo>

View file

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="account_analytic_plan_form_view_inherit_account" model="ir.ui.view">
<field name="name">account.analytic.plan.inherit.form</field>
<field name="model">account.analytic.plan</field>
<field name="inherit_id" ref="analytic.account_analytic_plan_form_view"/>
<field name="arch" type="xml">
<data>
<xpath expr="//field[@name='applicability_ids']//field[@name='business_domain']" position="after">
<field name="account_prefix"/>
<field name="product_categ_id"/>
</xpath>
</data>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_bank_statement_tree" model="ir.ui.view">
<field name="name">account.bank.statement.tree</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"
decoration-muted="not journal_id"
create="false"
string="Statements">
<field name="name"/>
<field name="date"/>
<field name="journal_id"/>
<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>
</record>
<record id="view_bank_statement_search" model="ir.ui.view">
<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"/>
<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">
<filter string="Journal" name="journal" context="{'group_by': 'journal_id'}"/>
<filter string="Date" name="date" context="{'group_by': 'date'}"/>
</group>
</search>
</field>
</record>
<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="context">{'journal_type':'bank'}</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 bank statement is a summary of all financial transactions
occurring over a given period of time on a bank 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_id" ref="view_bank_statement_tree"/>
<field name="act_window_id" ref="action_bank_statement_tree"/>
</record>
<record id="account_bank_statement_pivot" model="ir.ui.view">
<field name="name">account.bank.statement.pivot</field>
<field name="model">account.bank.statement</field>
<field name="arch" type="xml">
<pivot string="Account Statistics" sample="1">
<field name="date" type="row"/>
<field name="balance_start" type="measure"/>
<field name="balance_end" type="measure"/>
</pivot>
</field>
</record>
<record id="account_bank_statement_graph" model="ir.ui.view">
<field name="name">account.bank.statement.graph</field>
<field name="model">account.bank.statement</field>
<field name="arch" type="xml">
<graph string="Account Statistics" sample="1">
<field name="date"/>
<field name="balance_start" operator="+"/>
<field name="balance_end" operator="+"/>
</graph>
</field>
</record>
<record id="action_view_bank_statement_tree" model="ir.actions.act_window">
<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_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="context">{'journal_type':'cash'}</field>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new cash log
</p><p>
A Cash Register allows you to manage cash entries in your cash
journals. This feature provides an easy way to follow up cash
payments on a daily basis.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- Action -->
<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="help" type="html">
<p class="o_view_nocontent_smiling_face">Create the first cash rounding</p>
</field>
</record>
<!-- Views -->
<record id="rounding_form_view" model="ir.ui.view">
<field name="name">account.cash.rounding.form</field>
<field name="model">account.cash.rounding</field>
<field name="arch" type="xml">
<form string="Rounding Form">
<sheet>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" class="oe_inline"/></h1>
</div>
<group>
<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="rounding_method"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<record id="rounding_search_view" model="ir.ui.view">
<field name="name">account.cash.rounding.search</field>
<field name="model">account.cash.rounding</field>
<field name="arch" type="xml">
<search>
<field name="name"/>
</search>
</field>
</record>
<record id="rounding_tree_view" model="ir.ui.view">
<field name="name">account.cash.rounding.tree</field>
<field name="model">account.cash.rounding</field>
<field name="arch" type="xml">
<tree string="Rounding Tree">
<field name="name"/>
<field name="rounding"/>
<field name="rounding_method"/>
</tree>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,158 @@
<?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>

View file

@ -0,0 +1,12 @@
<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>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_full_reconcile_form" model="ir.ui.view">
<field name="name">account.full.reconcile.form</field>
<field name="model">account.full.reconcile</field>
<field name="arch" type="xml">
<form string="Matching">
<group>
<div class="oe_title" colspan="4">
<h1><field name="name" readonly="1"/></h1>
</div>
<separator string="Matched Journal Items" colspan="4"/>
<field name="reconciled_line_ids" readonly="1" colspan="4" nolabel="1"/>
</group>
</form>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_account_group_form" model="ir.ui.view">
<field name="name">account.group.form</field>
<field name="model">account.group</field>
<field name="arch" type="xml">
<form string="Account Group">
<sheet>
<group>
<field name="name"/>
<label for="code_prefix_start" string="Code Prefix"/>
<div>
From <field name="code_prefix_start" class="oe_inline"/> to <field name="code_prefix_end" class="oe_inline"/>
</div>
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="view_account_group_search" model="ir.ui.view">
<field name="name">account.group.search</field>
<field name="model">account.group</field>
<field name="arch" type="xml">
<search string="Account groups">
<field name="name"
filter_domain="['|', ('code_prefix_start', '=like', self + '%'), ('name', 'ilike', self)]"
string="Account group"/>
</search>
</field>
</record>
<record id="view_account_group_tree" model="ir.ui.view">
<field name="name">account.group.tree</field>
<field name="model">account.group</field>
<field name="arch" type="xml">
<tree 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>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- account incoterms -->
<record id="view_incoterms_tree" model="ir.ui.view">
<field name="name">account.incoterms.tree</field>
<field name="model">account.incoterms</field>
<field name="arch" type="xml">
<tree string="Incoterms" editable="bottom">
<field name="active" invisible="1"/>
<field name="code"/>
<field colspan="4" name="name"/>
</tree>
</field>
</record>
<record id="account_incoterms_form" model="ir.ui.view">
<field name="name">account.incoterms.form</field>
<field name="model">account.incoterms</field>
<field name="arch" type="xml">
<form string="Incoterms">
<sheet>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<group>
<field name="active" invisible="1"/>
<field name="name"/>
<field name="code"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="account_incoterms_view_search" model="ir.ui.view">
<field name="name">account.incoterms.search</field>
<field name="model">account.incoterms</field>
<field name="arch" type="xml">
<search string="Incoterms">
<field name="name"/>
<separator/>
<filter string="Archived" name="inactive" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<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="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new incoterm
</p><p>
Incoterms are used to divide transaction costs and responsibilities between buyer and seller.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,389 @@
<odoo>
<record id="account_journal_dashboard_kanban_view" model="ir.ui.view">
<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">
<field name="id"/>
<field name="name"/>
<field name="type"/>
<field name="color"/>
<field name="show_on_dashboard"/>
<field name="kanban_dashboard"/>
<field name="activity_ids"/>
<field name="activity_state"/>
<field name="alias_domain"/>
<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>
</div>
<div class="container o_kanban_card_manage_pane dropdown-menu" role="menu">
<t t-call="JournalManage"/>
</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>
</div>
<div class="o_secondary" t-att-title="dashboard.title" t-if="journal_type == 'purchase' &amp;&amp; record.alias_domain.raw_value">
<field name="alias_id"/>
</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>
</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>
</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>
</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>
</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 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>
</div>
</div>
</t>
</div>
</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>
<!-- 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 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>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="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">
<div class="row" name="latest_statement">
<div class="col overflow-hidden text-start">
<span title="Latest Statement">Latest Statement</span>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="dashboard.last_balance"/></span>
</div>
</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">
<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>
</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>
</t>
</div>
<div class="col-12 col-sm-7 o_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>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="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>
<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>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="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>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="dashboard.sum_late"/></span>
</div>
</div>
<t t-if="dashboard.number_to_check > 0">
<div class="row">
<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>
</div>
<div class="col-auto text-end">
<span class="o_kanban_monetary"><t t-esc="dashboard.to_check_balance"/></span>
</div>
</div>
</t>
</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"/>
</t>
</templates>
</kanban>
</field>
</record>
<record id="open_account_journal_dashboard_kanban" model="ir.actions.act_window">
<field name="name">Accounting Dashboard</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"/>
<field name="usage">menu</field>
<field name="context">{'search_default_dashboard':1}</field>
<field name="domain">[]</field>
<field name="help" type="html">
<p class="o_view_nocontent_neutral_face">
This is the accounting dashboard
</p><p>
If you have not installed a chart of account, please install one first.<br/>
<a class="btn-link" type="action" name="%(open_account_charts_modules)d" tabindex="-1">Browse available countries.</a>
</p>
</field>
</record>
</odoo>

View file

@ -0,0 +1,283 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_account_journal_tree" model="ir.ui.view">
<field name="name">account.journal.tree</field>
<field name="model">account.journal</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<tree 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="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>
</record>
<record id="view_account_journal_form" model="ir.ui.view">
<field name="name">account.journal.form</field>
<field name="model">account.journal</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<form string="Account Journal">
<field name="company_id" invisible="1"/>
<field name="bank_statements_source" invisible="1"/>
<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}"/>
</div>
<widget name="web_ribbon" title="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
<div class="oe_title">
<label for="name"/>
<h1><field name="name" placeholder="e.g. Customer Invoices"/></h1>
</div>
<group>
<group>
<field name="active" invisible="1"/>
<field name="type"/>
</group>
<group>
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
<field name="country_code" invisible="1"/>
</group>
</group>
<notebook>
<page name="bank_account" string="Journal Entries">
<group>
<group string="Accounting Information">
<field name="default_account_type" invisible="1"/>
<label for="default_account_id" string="Bank Account"
attrs="{'invisible': [('type', '!=', 'bank')]}" groups="account.group_account_readonly"/>
<label for="default_account_id" string="Cash Account"
attrs="{'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"/>
<label for="default_account_id" string="Default Expense Account"
attrs="{'invisible': [('type', '!=', 'purchase')]}" groups="account.group_account_readonly"/>
<field name="default_account_id" nolabel="1"
attrs="{'required': ['|', '&amp;', ('id', '!=', False), ('type', 'in', ('bank', 'cash')), ('type', 'in', ('sale', 'purchase'))],
'invisible': [('type', 'in', (False, 'general'))]}"
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'))]}"
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="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')]}">
<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"/>
</group>
</group>
</page>
<page id="inbound_payment_settings" string="Incoming Payments" attrs="{'invisible': [('type', 'not in', ['cash', 'bank'])]}">
<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"/>
<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"
string="Outstanding Receipts accounts"
optional="hide"
options="{'no_quick_create': True}"
groups="account.group_account_readonly"/>
</tree>
</field>
</page>
<page id="outbound_payment_settings" string="Outgoing Payments" attrs="{'invisible': [('type', 'not in', ['cash', 'bank'])]}">
<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"/>
<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"
string="Outstanding Payments accounts"
optional="hide"
options="{'no_quick_create': True}"
groups="account.group_account_readonly"/>
</tree>
</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>
<!-- 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>
</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>
</group>
<!-- email alias end -->
<group string="Payment Communications" attrs="{'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)]}"/>
</group>
</group>
</page>
</notebook>
</sheet>
<div class="oe_chatter">
<field name="message_follower_ids"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>
</form>
</field>
</record>
<record id="account_journal_view_kanban" model="ir.ui.view">
<field name="name">account.journal.kanban</field>
<field name="model">account.journal</field>
<field name="priority">1</field>
<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>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_account_journal_search" model="ir.ui.view">
<field name="name">account.journal.search</field>
<field name="model">account.journal</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<search string="Search Account Journal">
<field name="name" string="Journal" filter_domain="['|', ('name', 'ilike', self), ('code', 'ilike', self)]"/>
<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'])]"/>
<separator/>
<filter name="inactive" string="Archived" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<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_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', '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">
<p class="o_view_nocontent_smiling_face">
Add a journal
</p><p>
A journal is used to record transactions of all accounting data
related to the day-to-day business.
</p>
</field>
</record>
<record id="view_account_journal_group_tree" model="ir.ui.view">
<field name="name">account.journal.group.tree</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"/>
<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>
</record>
<record id="view_account_journal_group_form" model="ir.ui.view">
<field name="name">account.journal.group.form</field>
<field name="model">account.journal.group</field>
<field name="priority">1</field>
<field name="arch" type="xml">
<form string="Journal Groups">
<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="sequence" groups="base.group_no_one"/>
<field name="company_id" groups="base.group_multi_company"/>
</group>
</sheet>
</form>
</field>
</record>
<record id="action_account_journal_group_list" model="ir.actions.act_window">
<field name="name">Journal Groups</field>
<field name="res_model">account.journal.group</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>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Top menu item -->
<menuitem name="Invoicing"
id="menu_finance"
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_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="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_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="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="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>
<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>
<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>
<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="menu_action_account_invoice_report_all" name="Invoice Analysis" action="action_account_invoice_report_all" sequence="1"/>
</menuitem>
<menuitem id="account_reports_legal_statements_menu" name="Statement Reports" sequence="1" groups="account.group_account_readonly"/>
</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="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>
<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>
<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>
</menuitem>
</menuitem>
</odoo>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,149 @@
<?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 &amp; 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>

View file

@ -0,0 +1,115 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_payment_term_search" model="ir.ui.view">
<field name="name">account.payment.term.search</field>
<field name="model">account.payment.term</field>
<field name="arch" type="xml">
<search string="Payment Terms">
<field name="name" string="Payment Terms"/>
<field name="active"/>
<separator/>
<filter name="archived" string="Archived" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="view_payment_term_tree" model="ir.ui.view">
<field name="name">account.payment.term.tree</field>
<field name="model">account.payment.term</field>
<field name="arch" type="xml">
<tree string="Payment Terms">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
<record id="view_payment_term_form" model="ir.ui.view">
<field name="name">account.payment.term.form</field>
<field name="model">account.payment.term</field>
<field name="arch" type="xml">
<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)]}"/>
</div>
</sheet>
</form>
</field>
</record>
<record id="view_account_payment_term_kanban" model="ir.ui.view">
<field name="name">account.payment.term.kanban</field>
<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>
</templates>
</kanban>
</field>
</record>
<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="search_view_id" ref="view_payment_term_search"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,463 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- VIEWS -->
<record id="view_account_payment_tree" model="ir.ui.view">
<field name="name">account.payment.tree</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'">
<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="name"/>
<field name="journal_id"/>
<field name="payment_method_line_id"/>
<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_company_currency_signed" widget="monetary" string="Amount" sum="Total"/>
<field name="state" widget="badge" decoration-info="state == 'draft'" decoration-success="state == 'posted'"/>
</tree>
</field>
</record>
<record id="view_account_supplier_payment_tree" model="ir.ui.view">
<field name="name">account.supplier.payment.tree</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_tree"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<field name="partner_id" position="attributes">
<attribute name="string">Vendor</attribute>
</field>
</field>
</record>
<record id="view_account_various_payment_tree" model="ir.ui.view">
<field name="name">account.supplier.payment.tree</field>
<field name="model">account.payment</field>
<field name="inherit_id" ref="account.view_account_payment_tree"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<field name="partner_id" position="attributes">
<attribute name="string">Partner</attribute>
</field>
</field>
</record>
<record id="view_account_payment_kanban" model="ir.ui.view">
<field name="name">account.payment.kanban</field>
<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"/>
<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>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_account_payment_search" model="ir.ui.view">
<field name="name">account.payment.search</field>
<field name="model">account.payment</field>
<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)]"/>
<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)]"/>
<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)]"/>
<separator/>
<filter string="Draft" name="state_draft" domain="[('state', '=', 'draft')]"/>
<filter string="Posted" name="state_posted" domain="[('state', '=', 'posted')]"/>
<separator/>
<filter string="Sent" name="state_sent" domain="[('is_move_sent', '=', True)]"/>
<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="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'}"/>
<filter string="Payment Date" name="groupby_date" domain="[]" context="{'group_by': 'date'}"/>
<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="Late Activities" name="activities_overdue"
domain="[('my_activity_date_deadline', '&lt;', context_today().strftime('%Y-%m-%d'))]"
help="Show all records which has next action date is before today"/>
<filter invisible="1" string="Today Activities" name="activities_today"
domain="[('my_activity_date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter invisible="1" string="Future Activities" name="activities_upcoming_all"
domain="[('my_activity_date_deadline', '&gt;', context_today().strftime('%Y-%m-%d'))]"/>
</search>
</field>
</record>
<record id="view_account_payment_form" model="ir.ui.view">
<field name="name">account.payment.form</field>
<field name="model">account.payment</field>
<field name="arch" type="xml">
<form string="Register Payment">
<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'))]}"
groups="account.group_account_invoice" data-hotkey="w"/>
<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"/>
</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>
<sheet>
<!-- Invisible fields -->
<field name="id" invisible="1"/>
<field name="is_move_sent" invisible="1"/>
<field name="is_reconciled" invisible="1"/>
<field name="is_matched" invisible="1"/>
<field name="payment_method_code" invisible="1"/>
<field name="show_partner_bank_account" invisible="1"/>
<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="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"/>
<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)]}">
<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>
</div>
</button>
<!-- Bill stat button -->
<button name="button_open_bills" type="object"
class="oe_stat_button" icon="fa-bars"
attrs="{'invisible': [('reconciled_bills_count','=', 0)]}">
<div class="o_form_field o_stat_info">
<span class="o_stat_text">
<field name="reconciled_bills_count"/>
<span> Bill</span>
</span>
</div>
</button>
<!-- 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)]}">
<div class="o_form_field o_stat_info">
<field name="reconciled_statement_lines_count"/>
<span> Transaction</span>
</div>
</button>
<!-- Journal Entry button -->
<button name="button_open_journal_entry"
type="object"
class="oe_stat_button"
icon="fa-bars"
groups="account.group_account_user,account.group_account_readonly">
<div class="o_stat_info">
<span class="o_stat_text">Journal Entry</span>
</div>
</button>
</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."
/>
<div class="oe_title">
<h1 attrs="{'invisible': [('state', '!=', 'draft')]}"><span>Draft</span></h1>
<h1 attrs="{'invisible': [('state', '=', 'draft')]}"><field name="name" readonly="1"/></h1>
</div>
<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')]}"/>
<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)]}"/>
<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)]}"/>
<label for="amount"/>
<div name="amount_div" class="o_row">
<field name="amount"
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="currency_id"
options="{'no_create': True, 'no_open': True}"
required="1"
attrs="{'readonly': [('state', '!=', 'draft')]}"
groups="base.group_multi_currency"/>
</div>
<field name="date"
attrs="{'readonly': [('state', '!=', 'draft')]}"/>
<field name="ref" 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')]}"/>
<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)],
}"/>
<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)],
}"/>
<!-- 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')]}"/>
</group>
<group>
<field name="qr_code" invisible="1"/>
<div attrs="{'invisible': [('qr_code', '=', False)]}" colspan="2" class="text-center">
<field name="qr_code" widget="html"/>
</div>
</group>
</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>
</form>
</field>
</record>
<record id="view_account_payment_graph" model="ir.ui.view">
<field name="name">account.payment.graph</field>
<field name="model">account.payment</field>
<field name="arch" type="xml">
<graph string="Invoices" sample="1">
<field name="payment_type"/>
<field name="journal_id"/>
<field name="amount" type="measure"/>
</graph>
</field>
</record>
<!-- ACTIONS -->
<record id="action_account_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="context">{
'default_payment_type': 'inbound',
'default_partner_type': 'customer',
'search_default_inbound_filter': 1,
'default_move_journal_types': ('bank', 'cash'),
}</field>
<field name="view_id" ref="view_account_payment_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Register a payment
</p><p>
Payments are used to register liquidity movements. You can process those payments by your own means or by using installed facilities.
</p>
</field>
</record>
<record id="action_account_payments_payable" 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="context">{
'default_payment_type': 'outbound',
'default_partner_type': 'supplier',
'search_default_outbound_filter': 1,
'default_move_journal_types': ('bank', 'cash'),
}</field>
<field name="view_id" ref="view_account_supplier_payment_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Register a payment
</p><p>
Payments are used to register liquidity movements. You can process those payments by your own means or by using installed facilities.
</p>
</field>
</record>
<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="domain">[]</field>
<field name="view_id" ref="view_account_supplier_payment_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Register a payment
</p><p>
Payments are used to register liquidity movements. You can process those payments by your own means or by using installed facilities.
</p>
</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="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="code">
records.action_post()
</field>
</record>
</data>
<data noupdate="1">
<record id="account_send_payment_receipt_by_email_action" model="ir.actions.act_window">
<field name="name">Send receipt by email</field>
<field name="res_model">mail.compose.message</field>
<field name="view_mode">form</field>
<field name="target">new</field>
<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'))]"/>
</record>
<record id="account_send_payment_receipt_by_email_action_multi" model="ir.actions.act_window">
<field name="name">Send receipts by email</field>
<field name="res_model">mail.compose.message</field>
<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>
</record>
</data>
</odoo>

View file

@ -0,0 +1,192 @@
<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 ''}">
<a t-if="invoice" t-attf-href="/my/invoices?{{ keep_query() }}">Invoices &amp; Bills</a>
<t t-else="">Invoices &amp; Bills</t>
</li>
<li t-if="invoice" class="breadcrumb-item active">
<t t-esc="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 &amp; Bills" inherit_id="portal.portal_my_home" customize_show="True" priority="30">
<xpath expr="//div[hasclass('o_portal_docs')]" position="inside">
<t t-call="portal.portal_docs_entry">
<t t-set="title">Invoices &amp; Bills</t>
<t t-set="url" t-value="'/my/invoices'"/>
<t t-set="placeholder_count" t-value="'invoice_count'"/>
</t>
</xpath>
</template>
<template id="portal_my_invoices" name="My Invoices and Payments">
<t t-call="portal.portal_layout">
<t t-set="breadcrumbs_searchbar" t-value="True"/>
<t t-call="portal.portal_searchbar">
<t t-set="title">Invoices</t>
</t>
<t t-if="not invoices">
<p>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>
</tr>
</thead>
<tbody>
<t t-foreach="invoices" t-as="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 != '/'"/>
<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>
</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>
</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>
</t>
</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">
<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&amp;id=%s&amp;action=%s&amp;view_type=form' % (invoice._name, invoice.id, invoice.env.ref('account.action_move_out_invoice_type').id)"/>
</t>
</t>
<div class="row mt16 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="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>
<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>
</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>
</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>
</t>
</t>
<!-- Page Content -->
<div id="invoice_content" class="col-12 col-lg">
<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_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')"/>
</div>
<!-- chatter -->
<div id="invoice_communication" class="mt-4">
<h2>History</h2>
<t t-call="portal.message_thread"/>
</div>
</div>
</div>
</xpath>
</template>
<template id="portal_invoice_error" name="Invoice error/warning display">
<div class="row mr16">
<div t-attf-class="'col-lg-12 mr16 ml16 alert alert-dismissable' #{'alert-danger' if error else 'alert-warning'}" role="alert">
<a href="#" class="close" data-bs-dismiss="alert" aria-label="close" title="close">×</a>
<t t-if="error == 'generic'" name="generic">
There was an error processing this page.
</t>
</div>
</div>
</template>
<template id="portal_invoice_success" name="Invoice success display">
<div class="row mr16">
<div class="col-lg-12 mr16 ml16 alert alert-dismissable alert-success" role="status">
<a href="#" class="close" data-bs-dismiss="alert" aria-label="close" title="close">×</a>
</div>
</div>
</template>
<!-- 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">
<!-- 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)"/>
<t t-if="required_field.ttype == 'selection'">
<label class="col-form-label" t-att-for="field_prefix + required_field.name"><t t-out="required_field.field_description"/></label>
<select class="form-select" t-att-name="field_prefix + required_field.name" required="required">
<option t-att-selected="not default_value" disabled="disabled" value=""><t t-out="'Select the %s ...' % required_field.field_description.lower()"/></option>
<t t-foreach="required_field.selection_ids" t-as="selection">
<option t-att-selected="default_value and default_value == selection.value" t-att-value="selection.value"><t t-out="selection.name"/></option>
</t>
</select>
</t>
</div>
</t>
</template>
</odoo>

View file

@ -0,0 +1,273 @@
<?xml version="1.0" encoding="utf-8"?>
<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'), '&amp;', '&amp;', ('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="model">account.reconcile.model</field>
<field name="arch" type="xml">
<tree string="Bank Reconciliation Move Presets">
<field name="sequence" widget="handle" />
<field name="name"/>
<field name="rule_type"/>
<field name="auto_reconcile"/>
<field name="match_journal_ids" optional="hidden" widget="many2many_tags"/>
</tree>
</field>
</record>
<record id="view_account_reconcile_model_form" model="ir.ui.view">
<field name="name">account.reconcile.model.form</field>
<field name="model">account.reconcile.model</field>
<field name="arch" type="xml">
<form string="Operation Templates">
<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"
class="oe_stat_button" icon="fa-book">
<field name="number_entries" string="Journal Entries" widget="statinfo"/>
</button>
</div>
<div class="oe_title">
<label for="name" placeholder="Model Name"/>
<h1><field name="name" placeholder="e.g. Bank Fees"/></h1>
</div>
<group>
<group>
<field name="rule_type" widget="radio"/>
</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>
</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), '&amp;', ('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>
<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"/>
<field name="sequence"
widget="handle"/>
<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"
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>
</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>
</form>
</field>
</record>
<record id="view_account_reconcile_model_search" model="ir.ui.view">
<field name="name">account.reconcile.model.search</field>
<field name="model">account.reconcile.model</field>
<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)]"/>
<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'}"/>
<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'}"/>
</group>
</search>
</field>
</record>
<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="search_view_id" ref="view_account_reconcile_model_search"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new reconciliation model
</p><p>
Those can be used to quickly create a journal items when reconciling
a bank statement or an account.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<!-- QWeb Reports -->
<record id="account_invoices" model="ir.actions.report">
<field name="name">Invoices</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="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="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'))]"/>
</record>
<record id="action_account_original_vendor_bill" model="ir.actions.report">
<field name="name">Original Bills</field>
<field name="model">account.move</field>
<field name="binding_model_id" ref="model_account_move"/>
<field name="report_type">qweb-pdf</field>
<field name="report_name">account.report_original_vendor_bill</field>
<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>
</record>
<record id="account_invoices_without_payment" model="ir.actions.report">
<field name="name">Invoices 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="binding_model_id" ref="model_account_move"/>
<field name="binding_type">report</field>
</record>
<record id="action_report_payment_receipt" model="ir.actions.report">
<field name="name">Payment Receipt</field>
<field name="model">account.payment</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">account.report_payment_receipt</field>
<field name="report_file">account.report_payment_receipt</field>
<field name="binding_model_id" ref="model_account_payment"/>
<field name="binding_type">report</field>
</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="binding_type">report</field>
</record>
<record id="action_report_account_hash_integrity" model="ir.actions.report">
<field name="name">Hash integrity result PDF</field>
<field name="model">res.company</field>
<field name="report_type">qweb-pdf</field>
<field name="report_name">account.report_hash_integrity</field>
<field name="report_file">account.report_hash_integrity</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,295 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_tax_tree" model="ir.ui.view">
<field name="name">account.tax.tree</field>
<field name="model">account.tax</field>
<field name="arch" type="xml">
<tree string="Account Tax" decoration-muted="not active">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="type_tax_use"/>
<field name="tax_scope"/>
<field name="description"/>
<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>
</field>
</record>
<record id="view_onboarding_tax_tree" model="ir.ui.view">
<field name="name">account.onboarding.tax.tree</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">
<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="model">account.tax.repartition.line</field>
<field name="arch" type="xml">
<tree editable="bottom" create="1" delete="1">
<field name="sequence" widget="handle"/>
<field name="factor_percent" attrs="{'invisible': [('repartition_type', '=', 'base')]}"/>
<field name="repartition_type"/>
<field name="account_id" attrs="{'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>
</field>
</record>
<record id="account_tax_view_tree" model="ir.ui.view">
<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"/>
<field name="description"/>
</tree>
</field>
</record>
<record id="view_tax_kanban" model="ir.ui.view">
<field name="name">account.tax.kanban</field>
<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>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="view_account_tax_search" model="ir.ui.view">
<field name="name">account.tax.search</field>
<field name="model">account.tax</field>
<field name="arch" type="xml">
<search string="Search Taxes">
<field name="name_searchable" string="Name"/>
<field name="company_id" groups="base.group_multi_company"/>
<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 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">
<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'}"/>
</group>
</search>
</field>
</record>
<record id="account_tax_view_search" model="ir.ui.view">
<field name="name">account.tax.search.filters</field>
<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="company_id" groups="base.group_multi_company"/>
</search>
</field>
</record>
<record id="view_tax_form" model="ir.ui.view">
<field name="name">account.tax.form</field>
<field name="model">account.tax</field>
<field name="arch" type="xml">
<form string="Account Tax">
<field name="company_id" invisible="1"/>
<sheet>
<group>
<group>
<field name="name"/>
<field name="amount_type"/>
<field name="active" widget="boolean_toggle"/>
</group>
<group>
<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'))]}">
<field name="amount" class="oe_inline" nolabel="1"/>
<span class="o_form_label oe_inline" attrs="{'invisible':[('amount_type','=','fixed')]}">%</span>
</div>
</group>
</group>
<notebook>
<page string="Definition" name="definition">
<div attrs="{'invisible': [('amount_type', '=', 'group')]}">
<field name="country_code" invisible="1"/>
<group string="Distribution for Invoices">
<field name="invoice_repartition_line_ids" nolabel="1" colspan="2"/>
</group>
<group string="Distribution for Refunds">
<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">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="amount_type"/>
<field name="amount"/>
</tree>
</field>
</page>
<page string="Advanced Options" name="advanced_options">
<group>
<group>
<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="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
<field name="country_id" required="True"/>
</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="is_base_affected"
attrs="{'invisible': ['|', ('amount_type','=', 'group'), ('price_include', '=', True)]}"
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"/>
</group>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<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="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">
<p class="o_view_nocontent_smiling_face">
Create a new tax
</p>
</field>
</record>
<record id="account_tax_group_view_search" model="ir.ui.view">
<field name="name">account.tax.group.search.filters</field>
<field name="model">account.tax.group</field>
<field name="arch" type="xml">
<search string="Search Group">
<field name="name"/>
<field name="country_id"/>
<group string="Group By">
<filter string="Country" name="group_by_country" domain="[]" context="{'group_by': 'country_id'}"/>
</group>
</search>
</field>
</record>
<record id="view_tax_group_tree" model="ir.ui.view">
<field name="name">account.tax.group.tree</field>
<field name="model">account.tax.group</field>
<field name="arch" type="xml">
<tree string="Account Tax Group" editable="bottom" create="false">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="country_id"/>
<field name="country_code" 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="preceding_subtotal" optional="hide"/>
</tree>
</field>
</record>
<record id="view_tax_group_form" model="ir.ui.view">
<field name="name">account.tax.group.form</field>
<field name="model">account.tax.group</field>
<field name="arch" type="xml">
<form string="Account Tax Group">
<sheet>
<group>
<group>
<field name="name"/>
<field name="country_id"/>
<field name="sequence"/>
</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="preceding_subtotal"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
<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_id" ref="view_tax_group_tree"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new tax group
</p>
</field>
</record>
</data>
</odoo>

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,16 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<record id="digest_digest_view_form" model="ir.ui.view">
<field name="name">digest.digest.view.form.inherit.account.account</field>
<field name="model">digest.digest</field>
<field name="priority">30</field>
<field name="inherit_id" ref="digest.digest_digest_view_form"/>
<field name="arch" type="xml">
<xpath expr="//group[@name='kpis']/group[last()]" position="before">
<group name="kpi_account" string="Invoicing" groups="account.group_account_manager">
<field name="kpi_account_total_revenue"/>
</group>
</xpath>
</field>
</record>
</odoo>

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_module_filter_inherit_account" model="ir.ui.view">
<field name="name">ir.module.module.list.inherit.account</field>
<field name="model">ir.module.module</field>
<field name="inherit_id" ref="base.view_module_filter"/>
<field name="mode">primary</field>
<field name="arch" type="xml">
<xpath expr="//searchpanel" position="replace">
<!-- Hide the search panel -->
</xpath>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,333 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_account_position_form" model="ir.ui.view">
<field name="name">account.fiscal.position.form</field>
<field name="model">account.fiscal.position</field>
<field name="arch" type="xml">
<form string="Fiscal Position">
<div groups="account.group_account_manager"
class="alert alert-info mb-0"
role="alert"
attrs="{'invisible': [('foreign_vat_header_mode', '=', False)]}">
<div attrs="{'invisible': [('foreign_vat_header_mode', '!=', 'templates_found')]}">
Click
<button
string="here"
type="object"
name="action_create_foreign_taxes"
class="oe_link"
style="padding: 0; vertical-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)]}"/>
<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="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="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_id"
attrs="{'required': [('foreign_vat', '!=', False), ('country_group_id', '=', False)]}"
options="{'no_open': True, 'no_create': True}"/>
<field name="state_ids" widget="many2many_tags" domain="[('country_id', '=', country_id)]"
attrs="{'invisible': ['|', '|', '&amp;', ('auto_apply', '!=', True), ('foreign_vat', '=', False), ('country_id', '=', False), ('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)]}">
<span> From </span>
<field name="zip_from" class="oe_inline"/>
<div class="oe_edit_only"/>
<span> To </span>
<field name="zip_to" class="oe_inline"/>
</div>
</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>
<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)]"/>
</form>
</field>
</page>
</notebook>
<field name="note" class="oe-bordered-editor" placeholder="Legal Notes..."/>
</sheet>
</form>
</field>
</record>
<record id="view_account_position_filter" model="ir.ui.view">
<field name="name">account.fiscal.position.filter</field>
<field name="model">account.fiscal.position</field>
<field name="arch" type="xml">
<search string="Search Fiscal Positions">
<field name="name" string="Fiscal Position"/>
<filter name="active" string="Archived" domain="[('active', '=', False)]"/>
</search>
</field>
</record>
<record id="view_account_position_tree" model="ir.ui.view">
<field name="name">account.fiscal.position.tree</field>
<field name="model">account.fiscal.position</field>
<field name="arch" type="xml">
<tree 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>
</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="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">
<p class="o_view_nocontent_smiling_face">
Record a new vendor bill
</p><p>
Vendors bills can be pre-generated based on purchase
orders or receipts. This allows you to control bills
you receive from your vendor according to the draft
document in Odoo.
</p>
</field>
</record>
<record model="ir.ui.view" id="partner_view_buttons">
<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="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}">
<div class="o_form_field o_stat_info">
<span class="o_stat_value">
<field name="currency_id" invisible="1"/>
<field name="total_invoiced" widget='monetary' options="{'currency_field': 'currency_id'}"/>
</span>
<span class="o_stat_text">Invoiced</span>
</div>
</button>
<button
class="oe_stat_button"
type="action"
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)]}"
>
<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>
</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="search_view_id" ref="view_account_position_filter"/>
<field name="help" type="html">
<p class="o_view_nocontent_smiling_face">
Create a new fiscal position
</p>
</field>
</record>
<!--
Partners Extension
-->
<record id="view_partner_property_form" model="ir.ui.view">
<field name="name">res.partner.property.form.inherit</field>
<field name="model">res.partner</field>
<field name="priority">2</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<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>
</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"/>
<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>
<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>
<group string="Credit Limits"
name="credit_limits"
groups="account.group_account_invoice,account.group_account_readonly"
attrs="{'invisible': [('show_credit_limit', '=', False)]}">
<field name="credit"/>
<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)]}"/>
</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">
<div>
<p>Accounting-related settings are managed on <button name="open_commercial_entity" type="object" string="the parent company" class="oe_link"/></p>
</div>
</page>
</page>
<xpath expr="//group[@name='misc']" position="before">
<group string="Fiscal Information" name="fiscal_information" priority="5" groups="account.group_account_invoice,account.group_account_readonly">
<field name="property_account_position_id" options="{'no_create': True, 'no_open': True}"/>
</group>
</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"/>
</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"/>
</group>
</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">
<filter string="Customer Invoices" name="customer" domain="[('customer_rank','>', 0)]"/>
<filter string="Vendor Bills" name="supplier" domain="[('supplier_rank','>', 0)]"/>
<separator/>
</xpath>
</field>
</record>
<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="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">
Create a new customer in your address book
</p><p>
Odoo helps you easily track all activities related to a customer.
</p>
</field>
</record>
<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="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">
Create a new supplier in your address book
</p><p>
Odoo helps you easily track all activities related to a supplier.
</p>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,100 @@
<?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>
<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>
</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="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
</p>
</field>
</record>
<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="context">{'search_default_filter_to_purchase': 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 purchasable product
</p>
</field>
</record>
<record id="product_template_form_view" model="ir.ui.view">
<field name="name">product.template.form.inherit</field>
<field name="model">product.template</field>
<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>
</xpath>
<page name="inventory" position="after">
<page string="Accounting" name="invoicing" groups="account.group_account_readonly,account.group_account_invoice">
<group name="properties" groups="account.group_account_readonly">
<group string="Receivables">
<field name="property_account_income_id"
groups="account.group_account_readonly"/>
</group>
<group string="Payables" name="payables">
<field name="property_account_expense_id"
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>
</field>
</record>
<record id="view_category_property_form" model="ir.ui.view">
<field name="name">product.category.property.form.inherit</field>
<field name="model">product.category</field>
<field name="inherit_id" ref="product.product_category_form_view"/>
<field name="arch" type="xml">
<group name="first" position="after">
<group name="account_property" >
<group string="Account Properties" groups="account.group_account_readonly">
<field name="property_account_income_categ_id"/>
<field name="property_account_expense_categ_id"/>
</group>
</group>
</group>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,365 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_invoice_document">
<t t-call="web.external_layout">
<t t-set="o" t-value="o.with_context(lang=lang)" />
<t t-set="forced_vat" t-value="o.fiscal_position_id.foreign_vat"/> <!-- So that it appears in the footer of the report instead of the company VAT if it's set -->
<div class="row">
<t t-if="o.partner_shipping_id and (o.partner_shipping_id != o.partner_id)">
<div class="col-6">
<t t-set="information_block">
<div groups="account.group_delivery_invoice_address" name="shipping_address_block">
<strong>Shipping Address:</strong>
<div t-field="o.partner_shipping_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
</div>
</t>
</div>
<div class="col-6" name="address_not_same_as_shipping">
<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-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
</div>
</t>
</div>
</t>
<t t-elif="o.partner_shipping_id and (o.partner_shipping_id == o.partner_id)">
<div class="offset-col-6 col-6" name="address_same_as_shipping">
<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-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
</div>
</t>
</div>
</t>
<t t-else="">
<div class="offset-col-6 col-6" name="no_shipping">
<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-else="">Tax ID</t>: <span t-field="o.partner_id.vat"/>
</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>
<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>
<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>
<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>
<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>
</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>
<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 '' }}">
<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_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>
</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-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"/>
<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) &lt; 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="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>
</tr>
</t>
</t>
</tbody>
</table>
<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>
</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>
</t>
</t>
</t>
</table>
</div>
</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>
</t>
</table>
</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">
<!--
Generic template to display tax totals in pdf reports.
Used by invoices, SO and PO.
ARGUMENTS:
- tax_totals: dict in the form generated by account.move's _get_tax_totals.
-->
<t t-foreach="tax_totals['subtotals']" t-as="subtotal">
<tr class="border-black o_subtotal">
<td><strong t-esc="subtotal['name']"/></td>
<td class="text-end">
<span
t-att-class="oe_subtotal_footer_separator"
t-esc="subtotal['formatted_amount']"
/>
</td>
</tr>
<t t-set="subtotal_to_show" t-value="subtotal['name']"/>
<t t-call="account.tax_groups_totals"/>
</t>
<t t-if="'formatted_rounding_amount' in tax_totals and tax_totals['rounding_amount'] != 0">
<td>Rounding</td>
<td class="text-end">
<span t-esc="tax_totals['formatted_rounding_amount']"/>
</td>
</t>
<!--Total amount with all taxes-->
<tr class="border-black 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>
</tr>
</template>
<template id="tax_groups_totals">
<!--
Generic template to display a list of tax groups with the related amounts.
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>
</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']" />
</td>
</t>
</tr>
</t>
</template>
<template id="report_invoice">
<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-if="o._get_name_invoice_report() == 'account.report_invoice_document'"
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>
</template>
<!--We need to create the following empty report template for the action report
"action_account_original_vendor_bill" to work. The action is merging the
original vendor bill(s) that were used to create the vendor bill(s) into one PDF. -->
<template id="report_original_vendor_bill">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<div class="article" t-att-data-oe-model="o and o._name" t-att-data-oe-id="o and o.id" t-att-data-oe-lang="o and o.env.context.get('lang')"></div>
</t>
</t>
</template>
</data>
</odoo>

View file

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="report_payment_receipt_document">
<t t-call="web.external_layout">
<t t-set="o" t-value="o.with_context(lang=lang)"/>
<div class="page">
<h3><strong>Payment Receipt: <span t-field="o.name"/></strong></h3>
<div class="mb-4 mt-3">
<div class="row">
<div class="col-6" t-if="o.date">
Payment Date: <span t-field="o.date"/>
</div>
</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'">
Vendor:
</t><span t-field="o.partner_id"/>
</div>
<div class="col-6" t-if="o.payment_method_id">
Payment Method: <span t-field="o.payment_method_id.name"/>
</div>
</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}"/>
</div>
<div class="col-6" t-if="o.ref">
Memo: <span t-field="o.ref"/>
</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">
<thead>
<tr>
<th><span>Invoice Date</span></th>
<th><span>Invoice Number</span></th>
<th><span>Reference</span></th>
<!-- Add a column if there are different currencies -->
<th t-if="otherCurrency" class="text-end"><span>Amount In Currency</span></th>
<th class="text-end"><span>Amount</span></th>
</tr>
</thead>
<tbody>
<t t-foreach="invoices" t-as="inv">
<!-- 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 t-if="otherCurrency"/>
<td class="text-end"><span t-field="inv.amount_total"/></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"/>
<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>
</tr>
<!-- BALANCE -->
<tr>
<td/>
<td><strong>Due Amount for <span t-field="inv.name"/></strong></td>
<td/>
<td t-if="otherCurrency"/>
<td class="text-end"><strong><span t-field="inv.amount_residual"/></strong></td>
</tr>
</t>
</t>
</tbody>
</table>
</div>
</t>
</template>
<template id="report_payment_receipt">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-set="lang" t-value="o.partner_id.lang or o.company_id.partner_id.lang"/>
<t t-call="account.report_payment_receipt_document" t-lang="lang"/>
</t>
</t>
</template>
</odoo>

View file

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="report_statement">
<t t-call="web.html_container">
<t t-foreach="docs" t-as="o">
<t t-call="web.internal_layout">
<div class="page">
<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">
<strong>
<span t-if="o.journal_id.type == 'bank'">Bank Statement</span>
<span t-else="">Cash Statement</span>
</strong>
</h4>
</div>
</div>
</div>
<div class="pt-2 pb-2">
<div class="row">
<div class="col-12">
<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>
</strong>
</h5>
</div>
</div>
<div class="row">
<div class="col-12">
<h5>
<strong>
<t t-if="o.name">
<span t-field="o.name"/>
- </t>
<span t-field="o.date"/>
</strong>
</h5>
</div>
</div>
</div>
<table class="table table-lg m-0 table-borderless border border-end-0 border-start-0 border-info">
<tbody>
<tr>
<td class="pt-2 pb-2 ps-0 pe-0">
<table class="table table-borderless m-0">
<tr>
<td class="p-0 w-25">
<strong>Starting Balance</strong>
</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"}'/>
</strong>
</td>
<td class="text-end p-0">
<strong>
<span t-field="o.balance_start"/>
</strong>
</td>
</tr>
<tr>
<td class="p-0 w-25">
<strong>Ending Balance</strong>
</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"}'/>
</strong>
</td>
<td class="text-end p-0">
<strong>
<span t-field="o.balance_end_real"/>
</strong>
</td>
</tr>
</table>
</td>
</tr>
</tbody>
</table>
<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>
</td>
</tr>
</tbody>
</table>
</div>
</t>
</t>
</t>
</template>
</data>
</odoo>

View file

@ -0,0 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_company_form" model="ir.ui.view">
<field name="name">res.company.form.inherit.account</field>
<field name="model">res.company</field>
<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>
</xpath>
</field>
</record>
<record id="res_company_view_form_terms" model="ir.ui.view">
<field name="name">res.company.view.form.terms</field>
<field name="model">res.company</field>
<field name="priority">1000</field>
<field name="arch" type="xml">
<form>
<field name="invoice_terms_html" class="oe_account_terms" nolabel="1"/>
<footer>
<button string="Save" special="save" class="btn-primary"/>
<button string="Discard" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>

View file

@ -0,0 +1,716 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="open_account_charts_modules" model="ir.actions.act_window">
<field name="name">Chart Templates</field>
<field name="res_model">ir.module.module</field>
<field name="view_mode">kanban,tree,form</field>
<field name="context" eval="{
'search_default_category_id': ref('base.module_category_accounting_localizations_account_charts'),
'searchpanel_default_category_id': ref('base.module_category_accounting_localizations_account_charts'),
}"/>
<field name="search_view_id" ref="view_module_filter_inherit_account"/>
</record>
<record id="res_config_settings_view_form" model="ir.ui.view">
<field name="name">res.config.settings.view.form.inherit.account</field>
<field name="model">res.config.settings</field>
<field name="priority" eval="40"/>
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[hasclass('settings')]" position="inside">
<field name="country_code" invisible="1" groups="account.group_account_manager"/>
<div class="app_settings_block" data-string="Invoicing" string="Invoicing" data-key="account" groups="account.group_account_manager">
<field name="has_chart_of_accounts" invisible="1"/>
<field name="has_accounting_entries" invisible="1"/>
<h2 attrs="{'invisible': [('has_accounting_entries','!=',False)]}">Fiscal Localization</h2>
<div class="row mt16 o_settings_container" name="fiscal_localization_setting_container" attrs="{'invisible': [('has_accounting_entries','!=',False)]}">
<div class="col-12 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Fiscal Localization</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Taxes, fiscal positions, chart of accounts &amp; legal statements for your country
</div>
<div class="content-group">
<div class="row mt16">
<label for="chart_template_id" string="Package" class="col-2 o_light_label"/>
<field name="chart_template_id" options="{'no_open': True, 'no_create': True}"/>
</div>
<div class="mt8">
<button name="%(account.open_account_charts_modules)d" icon="fa-arrow-right" type="action" string="Install More Packages" discard="0" class="btn-link"/>
</div>
</div>
</div>
</div>
</div>
<h2>Taxes</h2>
<div class="row mt16 o_settings_container" name="default_taxes_setting_container">
<div class="col-12 col-lg-6 o_setting_box"
id="default_taxes"
title="These taxes are set in any new product created.">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Default Taxes</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Default taxes applied to local transactions
</div>
<div class="content-group">
<div class="row mt16">
<label string="Sales Tax" for="sale_tax_id" class="col-lg-3 o_light_label"/>
<field name="sale_tax_id" domain="[('type_tax_use', 'in', ('sale', 'all')), ('company_id', '=', company_id)]"/>
</div>
<div class="row">
<label string="Purchase Tax" for="purchase_tax_id" class="col-lg-3 o_light_label"/>
<field name="purchase_tax_id" domain="[('type_tax_use', 'in', ('purchase', 'all')), ('company_id', '=', company_id)]"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="rounding_method" title="A rounding per line is advised if your prices are tax-included. That way, the sum of line subtotals equals the total with taxes.">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Rounding Method</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
How total tax amount is computed in orders and invoices
</div>
<div class="content-group">
<field name="tax_calculation_rounding_method" class="o_light_label mt16" widget="radio"/>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Cash Discount Tax Reduction</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
<div class="text-muted">
When will the tax be reduced when offering a cash discount
</div>
<div class="content-group">
<field name="early_pay_discount_computation"/>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="taxcloud_settings">
<div class="o_setting_left_pane">
<field name="module_account_taxcloud" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" name="account_taxcloud_right_pane">
<label for="module_account_taxcloud" string="TaxCloud"/>
<div class="text-muted">
Compute tax rates based on U.S. ZIP codes
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="eu_service" title="If you sell goods and services to customers in a foreign EU country, you must charge VAT based on the delivery address. This rule applies regardless of where you are located.">
<div class="o_setting_left_pane">
<field name="module_l10n_eu_oss"/>
</div>
<div class="o_setting_right_pane" name="l10n_eu_oss_right_pane">
<label for="module_l10n_eu_oss"/>
<a href="https://www.odoo.com/documentation/16.0/applications/finance/accounting/taxation/taxes/eu_distance_selling.html" title="Documentation" class="o_doc_link" target="_blank"></a>
<div class="text-muted">
Apply VAT of the EU country to which goods and services are delivered.
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="tax_exigibility"
title="Select this if the taxes should use cash basis, which will create an entry for such taxes on a given account during reconciliation.">
<div class="o_setting_left_pane">
<field name="tax_exigibility"/>
</div>
<div class="o_setting_right_pane">
<label for="tax_exigibility"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Allow to configure taxes using cash basis
</div>
<div class="content-group" attrs="{'invisible': [('tax_exigibility', '=', False)]}" groups="account.group_account_user">
<div class="row mt16">
<label for="tax_cash_basis_journal_id" class="col-lg-3 o_light_label"/>
<field name="tax_cash_basis_journal_id"/>
</div>
<div class="row mt16">
<label for="account_cash_basis_base_account_id" class="col-lg-3 o_light_label"/>
<field name="account_cash_basis_base_account_id"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="tax_fiscal_country_234">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Fiscal Country</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." role="img" aria-label="Values set here are company-specific." groups="base.group_multi_company"/>
<div class="text-muted">
Domestic country of your accounting
</div>
<div class="text-muted">
<field name="account_fiscal_country_id" options="{'no_create': True, 'no_open': True}"/>
</div>
</div>
</div>
</div>
<h2>Currencies</h2>
<div class="row mt16 o_settings_container" name="main_currency_setting_container">
<div class="col-12 col-lg-6 o_setting_box" id="main_currency">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Main Currency</span>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Main currency of your company
</div>
<div class="content-group">
<div class="row mt16">
<label for="currency_id" class="col-lg-3 o_light_label"/>
<field name="currency_id" options="{'no_create_edit': True, 'no_open': True}" context="{'active_test': False}"/>
<field name="group_multi_currency" invisible="1"/>
</div>
<div class="mt8">
<button type="action" name="%(base.action_currency_form)d" string="Currencies" class="btn-link" icon="fa-arrow-right"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="update_exchange_rates"
attrs="{'invisible': [('group_multi_currency', '=', False)]}">
<div class="o_setting_left_pane">
<field name="module_currency_rate_live" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_currency_rate_live"/>
<div class="text-muted" id="update_currency_live">
Update exchange rates automatically
</div>
</div>
</div>
</div>
<h2>Customer Invoices</h2>
<div class="row mt16 o_settings_container" id="invoicing_settings">
<div class="col-12 col-lg-6 o_setting_box" id="default_setting_options">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<span class="o_form_label">Default Sending Options</span>
<div class="text-muted">
Those options will be selected by default when clicking "Send &amp; Print" on invoices
</div>
<div class="mt16">
<div class="content-group" id="send_default">
<div>
<field name="invoice_is_print"/>
<label for="invoice_is_print"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific."/>
</div>
<div>
<field name="invoice_is_email"/>
<label for="invoice_is_email"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific."/>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="send_invoices_followups">
<div class="o_setting_left_pane">
<field name="module_snailmail_account"/>
</div>
<div class="o_setting_right_pane" id="snailmail_settings">
<label for="module_snailmail_account"/>
<div class="text-muted">
Send invoices and payment follow-ups by post
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="invoice_delivery_addresses">
<div class="o_setting_left_pane">
<field name="group_sale_delivery_address"/>
</div>
<div class="o_setting_right_pane">
<label for="group_sale_delivery_address"/>
<a href="https://www.odoo.com/documentation/16.0/applications/sales/sales/send_quotations/different_addresses.html" title="Documentation" class="o_doc_link" target="_blank"></a>
<div class="text-muted">
Select specific invoice and delivery addresses
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="line_subtotals">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<label for="show_line_subtotals_tax_selection"/>
<div class="text-muted">
Line subtotals tax display
</div>
<div class="mt16">
<field name="show_line_subtotals_tax_selection" class="o_light_label" widget="radio"/>
<field name="group_show_line_subtotals_tax_excluded" invisible="1"/>
<field name="group_show_line_subtotals_tax_included" invisible="1"/>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="get_invoice_warnings">
<div class="o_setting_left_pane">
<field name="group_warning_account"/>
</div>
<div class="o_setting_right_pane">
<label for="group_warning_account" string="Warnings"/>
<div class="text-muted">
Get warnings when invoicing specific customers
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="smallest_coinage_currency">
<div class="o_setting_left_pane">
<field name="group_cash_rounding"/>
</div>
<div class="o_setting_right_pane">
<label for="group_cash_rounding"/>
<div class="text-muted">
Define the smallest coinage of the currency used to pay by cash
</div>
<div class="mt8">
<button name="%(account.rounding_list_action)d" icon="fa-arrow-right"
type="action" string="Cash Roundings" class="btn-link"
attrs="{'invisible': [('group_cash_rounding', '=', False)]}"/>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box" id="intrastat_statistics">
<div class="o_setting_left_pane">
<field name="module_account_intrastat" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" name="intrastat_right_pane">
<label for="module_account_intrastat"/>
<div class="text-muted">
Collect information and produce statistics on the trade in goods in Europe with intrastat
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="default_incoterm">
<div class="o_setting_left_pane"/>
<div class="o_setting_right_pane">
<span class="o_form_label">Default Incoterm</span>
<div class="text-muted">
Default Incoterm of your company
</div>
<div class="text-muted">
<field name="incoterm_id"/>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box" id="show_sale_receipts">
<div class="o_setting_left_pane">
<field name="group_show_sale_receipts"/>
</div>
<div class="o_setting_right_pane" name="show_sale_receipts_right_pane">
<label for="group_show_sale_receipts"/>
<div class="text-muted">
Activate to create sale receipt
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="use_invoice_terms">
<div class="o_setting_left_pane">
<field name="use_invoice_terms"/>
</div>
<div class="o_setting_right_pane">
<label for="use_invoice_terms"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Add your terms &amp; conditions at the bottom of invoices/orders/quotations
</div>
<div class="content-group" attrs="{'invisible': [('use_invoice_terms','=',False)]}">
<div class="mt16">
<field name="terms_type" class="o_light_label" widget="radio"/>
<div>
<field name="invoice_terms"
attrs="{'invisible': [('terms_type', '=', 'html')]}"
class="oe_account_terms mt-5 w-100"
placeholder="Insert your terms &amp; conditions here..."/>
</div>
<div class="mt8" attrs="{'invisible': [('terms_type', '!=', 'html')]}">
<button name="action_update_terms" icon="fa-arrow-right" type="object" string="Update Terms" class="btn-link"/>
</div>
<field name="preview_ready" invisible="1"/>
<div class="mt4 ms-1" attrs="{'invisible': [('preview_ready', '=', False)]}">
<a class="btn-link" href="/terms" role="button">
<i class="fa fa-arrow-right"></i>
Preview
</a>
</div>
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="account_use_credit_limit"/>
</div>
<div class="o_setting_right_pane">
<label for="account_use_credit_limit"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." role="img"/>
<div class="text-muted">
Trigger alerts when creating Invoices and Sales Orders for Partners with a Total Receivable amount exceeding a limit.
<br/><small>Set a value greater than 0.0 to activate a credit limit check</small>
</div>
<div class="content-group mt-2" attrs="{'invisible': [('account_use_credit_limit', '=', False)]}">
<div class="row">
<label for="account_default_credit_limit" class="col-lg-4 o_light_label"/>
<field name="account_default_credit_limit"/>
</div>
</div>
</div>
</div>
</div>
<h2>Customer Payments</h2>
<div class="row mt16 o_settings_container" id="pay_invoice_online_setting_container">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
<field name="module_account_payment"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_payment"/>
<div class="text-muted">
Let your customers pay their invoices online
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="account_batch_payment">
<div class="o_setting_left_pane">
<field name="module_account_batch_payment" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_batch_payment" string="Batch Payments"/>
<div class="text-muted">
Group payments into a single batch to ease the reconciliation process
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="collect_customer_payment"
title="If you check this box, you will be able to collect payments using SEPA Direct Debit mandates.">
<div class="o_setting_left_pane">
<field name="module_account_sepa_direct_debit" class="oe_inline" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" name="sepa_direct_debit_right_pane">
<label string="SEPA Direct Debit (SDD)" for="module_account_sepa_direct_debit"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Collect customer payments in one-click using Euro SEPA Service
</div>
<div class="content-group" attrs="{'invisible': [('module_account_sepa_direct_debit', '=', False)]}">
<div class="text-warning mt16 mb4">
Save this page and come back here to set up the feature.
</div>
</div>
</div>
</div>
<div class="col-xs-12 col-md-6 o_setting_box"
id="qr_code_invoices"
title="Add a QR-code to your invoices so that your customers can pay instantly with their mobile banking application.">
<div class="o_setting_left_pane">
<field name="qr_code" class="oe_inline"/>
</div>
<div class="o_setting_right_pane" name="qr_code_right_pane">
<label string="QR Codes" for="qr_code"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Add a payment QR-code to your invoices
</div>
</div>
</div>
</div>
<h2>Vendor Bills</h2>
<div class="row mt16 o_settings_container" id="account_vendor_bills">
<div class="col-xs-12 col-md-6 o_setting_box" id="show_purchase_receipts">
<div class="o_setting_left_pane">
<field name="group_show_purchase_receipts"/>
</div>
<div class="o_setting_right_pane" name="show_purchase_receipts_right_pane">
<label for="group_show_purchase_receipts"/>
<div class="text-muted">
Activate to create purchase receipt
</div>
</div>
</div>
</div>
<h2>Vendor Payments</h2>
<div class="row mt16 o_settings_container" id="print_vendor_checks_setting_container">
<div class="col-12 col-lg-6 o_setting_box" id="print_checks" groups="account.group_account_user">
<div class="o_setting_left_pane">
<field name="module_account_check_printing"/>
</div>
<div class="o_setting_right_pane">
<label string="Checks" for="module_account_check_printing"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted" id="print_bills_payment">
Print checks to pay your vendors
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="sepa_payments"
title="If you check this box, you will be able to register your payment using SEPA.">
<div class="o_setting_left_pane">
<field name="module_account_sepa" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" name="sepa_right_pane">
<label for="module_account_sepa"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Pay your bills in one-click using Euro SEPA Service
</div>
</div>
</div>
</div>
<h2>Digitization</h2>
<div class="row mt16 o_settings_container" id="account_digitalization">
<div class="col-12 col-lg-6 o_setting_box" id="account_ocr_settings">
<div class="o_setting_left_pane">
<field name="module_account_invoice_extract" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" id="digitalizeocr">
<label for="module_account_invoice_extract"/>
<div class="text-muted">
Digitize your PDF or scanned documents with OCR and Artificial Intelligence
</div>
<div id="msg_invoice_extract" class="content-group" attrs="{'invisible': [('module_account_invoice_extract', '=', False)]}">
<div class="text-warning mt16 mb4">
Save this page and come back here to set up the feature.
</div>
</div>
</div>
</div>
</div>
<t groups="account.group_account_user">
<h2>Default Accounts</h2>
<div class="row mt16 o_settings_container" id="default_accounts">
<div class="col-12 col-lg-6 o_setting_box"
attrs="{'invisible': [('group_multi_currency', '=', False)]}">
<div class="o_setting_left_pane"></div>
<div class="o_setting_right_pane">
<div class="content-group">
<div>
<span class="o_form_label">Post Exchange difference entries in:</span>
</div>
<div class="row mt8">
<label for="currency_exchange_journal_id" class="col-lg-4 o_light_label" string="Journal" />
<field name="currency_exchange_journal_id"/>
</div>
<div class="row mt8">
<label for="income_currency_exchange_account_id" class="col-lg-4 o_light_label"/>
<field name="income_currency_exchange_account_id"/>
</div>
<div class="row mt8">
<label for="expense_currency_exchange_account_id" class="col-lg-4 o_light_label"/>
<field name="expense_currency_exchange_account_id"/>
</div>
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_panel"></div>
<div class="o_setting_right_pane">
<span class="o_form_label">The following default accounts are used with certain features.</span>
<div class="content-group">
<div class="row mt8">
<label for="account_journal_suspense_account_id" class="col-lg-5 o_light_label"/>
<field name="account_journal_suspense_account_id"/>
</div>
<div class="row mt8">
<label for="account_journal_payment_debit_account_id" class="col-lg-5 o_light_label"/>
<field name="account_journal_payment_debit_account_id"/>
</div>
<div class="row mt8">
<label for="account_journal_payment_credit_account_id" class="col-lg-5 o_light_label"/>
<field name="account_journal_payment_credit_account_id"/>
</div>
<div class="row mt8">
<label for="transfer_account_id" class="col-lg-5 o_light_label"/>
<field name="transfer_account_id"/>
</div>
<div class="row mt8">
<label for="account_journal_early_pay_discount_gain_account_id" class="col-lg-5 o_light_label"/>
<field name="account_journal_early_pay_discount_gain_account_id"/>
</div>
<div class="row mt8">
<label for="account_journal_early_pay_discount_loss_account_id" class="col-lg-5 o_light_label"/>
<field name="account_journal_early_pay_discount_loss_account_id"/>
</div>
</div>
</div>
</div>
</div>
</t>
<t groups="account.group_account_user">
<h2>Bank &amp; Cash</h2>
<div class="row mt16 o_settings_container" id="bank_cash">
<div class="col-12 col-lg-6 o_setting_box"
id="import_bank_statements_csv"
title="Once installed, set 'Bank Feeds' to 'File Import' in bank account settings.This adds a button to import from the Accounting dashboard.">
<div class="o_setting_left_pane">
<field name="module_account_bank_statement_import_csv" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_bank_statement_import_csv" string="CSV Import"/>
<div class="text-muted">
Import your bank statements in CSV
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" title="Once installed, set 'Bank Feeds' to 'File Import' in bank account settings.This adds a button to import from the Accounting dashboard.">
<div class="o_setting_left_pane">
<field name="module_account_bank_statement_import_qif" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_bank_statement_import_qif" string="QIF Import"/>
<div class="text-muted">
Import your bank statements in QIF
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" title="Once installed, set 'Bank Feeds' to 'File Import' in bank account settings.This adds a button to import from the Accounting dashboard.">
<div class="o_setting_left_pane">
<field name="module_account_bank_statement_import_ofx" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_bank_statement_import_ofx" string="OFX Import"/>
<div class="text-muted">
Import your bank statements in OFX
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box"
id="import_bank_statement_camt"
title="Once installed, set 'Bank Feeds' to 'File Import' in bank account settings.This adds a button to import from the Accounting dashboard.">
<div class="o_setting_left_pane">
<field name="module_account_bank_statement_import_camt" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_bank_statement_import_camt" string="CAMT Import"/>
<div class="text-muted">
Import your bank statements in CAMT.053
</div>
</div>
</div>
</div>
</t>
<t groups="account.group_account_user">
<h2>Fiscal Periods</h2>
<div class="row mt16 o_settings_container" id="accounting_reports">
<div class="col-12 col-lg-6 o_setting_box" id="fiscalyear" invisible="1" groups="account.group_account_user"/>
<div class="col-12 col-lg-6 o_setting_box" id="dynamic_report" invisible="1" groups="account.group_account_user">
<div class="o_setting_left_pane">
<field name="module_account_reports" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane">
<label for="module_account_reports"/>
<div class="text-muted" id="account_reports">
Navigate easily through reports and see what is behind the numbers
</div>
</div>
</div>
</div>
</t>
<h2>Analytics</h2>
<div class="row mt16 o_settings_container" id="analytic">
<div class="col-12 col-lg-6 o_setting_box"
id="track_costs_revenues"
title="Allows you to use the analytic accounting."
groups="account.group_account_user">
<div class="o_setting_left_pane">
<field name="group_analytic_accounting"/>
</div>
<div class="o_setting_right_pane">
<label for="group_analytic_accounting"/>
<div class="text-muted">
Track costs &amp; revenues by project, department, etc
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="account_budget" title="This allows accountants to manage analytic and crossovered budgets. Once the master budgets and the budgets are defined, the project managers can set the planned amount on each analytic account." groups="account.group_account_user">
<div class="o_setting_left_pane">
<field name="module_account_budget" widget="upgrade_boolean"/>
</div>
<div class="o_setting_right_pane" id="budget_management">
<label for="module_account_budget"/>
<div class="text-muted">
Use budgets to compare actual with expected revenues and costs
</div>
</div>
</div>
<div class="col-12 col-lg-6 o_setting_box" id="monitor_product_margins">
<div class="o_setting_left_pane">
<field name="module_product_margin"/>
</div>
<div class="o_setting_right_pane">
<label for="module_product_margin" string="Margin Analysis"/>
<div class="text-muted">
Monitor your product margins from invoices
</div>
</div>
</div>
</div>
<h2>Storno Accounting</h2>
<div class="row mt16 o_settings_container" id="storno">
<div class="col-12 col-lg-6 o_setting_box"
id="enable_storno_accounting"
title="Allows you to use Storno accounting.">
<div class="o_setting_left_pane">
<field name="account_storno"/>
</div>
<div class="o_setting_right_pane">
<label for="account_storno"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div class="text-muted">
Use Storno accounting
</div>
</div>
</div>
</div>
<h2>Accounting Firms mode</h2>
<div class="row mt16 o_settings_container" id="quick_edit_mode">
<div class="col-12 col-lg-12 o_setting_box">
<div class="text-muted">
<p style="margin-bottom: 0">Accounting firm mode will change invoice/bill encoding:</p>
<p style="margin-bottom: 0"> - The document's sequence becomes editable on all documents.</p>
<p style="margin-bottom: 0"> - A new field « Total (tax inc.) » to speed up and control the encoding by automating line creation with the right account &amp; tax.</p>
<p style="margin-bottom: 0"> - A default Customer Invoice / Vendor Bill date will be suggested.</p>
</div>
<div class="o_setting_right_pane mt16">
<label for="quick_edit_mode"/>
<span class="fa fa-lg fa-building-o" title="Values set here are company-specific." aria-label="Values set here are company-specific." groups="base.group_multi_company" role="img"/>
<div>
<field name="quick_edit_mode" placeholder="Disabled"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="action_account_config" model="ir.actions.act_window">
<field name="name">Settings</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.config.settings</field>
<field name="view_mode">form</field>
<field name="target">inline</field>
<field name="context">{'module' : 'account', 'bin_size': False}</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="res_currency_form_inherit" model="ir.ui.view">
<field name="name">res.currency.form.inherit</field>
<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.
</div>
</xpath>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<record id="view_partner_bank_form_inherit_account" model="ir.ui.view">
<field name="name">res.partner.bank.form.inherit.account</field>
<field name="model">res.partner.bank</field>
<field name="inherit_id" ref="base.view_partner_bank_form"/>
<field name="mode">primary</field>
<field name="priority">14</field>
<field name="arch" type="xml">
<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"/>
</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()
</field>
<field name="groups_id" eval="[(4, ref('account.group_account_manager'))]"/>
</record>
</data>
</odoo>

View file

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<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 &amp; Conditions.</span>
<a t-att-href="backend_url"><i class="fa fa-arrow-right me-1"/>Back to settings</a>
</div>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</template>
<template id="account_terms_conditions_page" name="Terms &amp; Conditions">
<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&amp;model=res.config.settings'"/>
</t>
</t>
<div class="oe_structure" id="oe_structure_terms_conditions"/>
<div class="container oe_website_terms_conditions">
<div id="o_terms_conditions">
<div t-field="company.invoice_terms_html"/>
</div>
</div>
</t>
</template>
<template id="account_default_terms_and_conditions">
<div>
<h1>STANDARD TERMS AND CONDITIONS OF SALE</h1>
<p>You should update this document to reflect your T&amp;C.</p>
<p>Below text serves as a suggestion and doesnt engage Odoo S.A. responsibility.</p>
<ol>
<li>
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.
</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.
</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.
</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.
</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.
</li>
<li>
All our contractual relations will be governed exclusively by <t t-esc="company_country"/> law.
</li>
</ol>
</div>
</template>
</odoo>