diff --git a/__manifest__.py b/__manifest__.py index a7e2b0e4c2f50fbe2a57253c574362b5b1e52f86..dca11bcd475bc3ede1de33be29d1a1e30d51b867 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -1,15 +1,17 @@ { "name": "Financial - Contract", "summary": "Gestion des contrats des outils financiers", - "author": "Le Filament", + "author": "Le Filament, Odoo Community Association (OCA)", "website": "https://le-filament.com", "version": "16.0.1.0.0", "license": "AGPL-3", "depends": [ + "financial_deal_flow", "financial_partner", ], "data": [ - "security/ir.model.access.csv", + # security + # "security/ir.model.access.csv", # datas # views "views/financial_contract.xml", diff --git a/models/__init__.py b/models/__init__.py index 2bddc2e78aa96a512e3298b717abc4eeb026ae20..e4d34bb4da9ddd771434491978569b2fbac467c7 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,2 +1,4 @@ from . import financial_contract +from . import financial_deal +from . import res_company from . import res_partner diff --git a/models/financial_contract.py b/models/financial_contract.py index 5de399d115521b6fcf09f7724ba13b6393010934..cd398df363ab4ce895caee2409bd0d73ffd2cbac 100644 --- a/models/financial_contract.py +++ b/models/financial_contract.py @@ -1,49 +1,11 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, fields, models -from odoo.exceptions import UserError +from odoo import models class FinancialContract(models.Model): - _name = "financial.contract" - _inherit = ["mail.thread", "mail.activity.mixin"] - _description = "Financial Contract" - _order = "create_date" - _check_company_auto = True - _rec_names_search = ["name", "partner_id.name", "partner_id.member_number"] - - name = fields.Char("Numéro", required=True) - partner_id = fields.Many2one( - comodel_name="res.partner", - string="Coopérative", - domain="[('is_cooperative', '=', True)]", - tracking=1, - required=True, - index=True, - ) - state = fields.Selection( - [ - ("init", "Initialisation"), - ("running", "En cours"), - ("done", "Terminé"), - ("cancel", "Annulé"), - ], - string="Statut", - tracking=1, - default="init", - ) - active = fields.Boolean( - default=True, - tracking=1, - ) - description = fields.Text("Description du projet") - company_id = fields.Many2one( - comodel_name="res.company", required=True, default=lambda self: self.env.company - ) - currency_id = fields.Many2one( - comodel_name="res.currency", related="company_id.currency_id" - ) + _inherit = "financial.contract" # ------------------------------------------------------ # Computed fields / Search Fields @@ -52,13 +14,3 @@ class FinancialContract(models.Model): # ------------------------------------------------------ # CRUD (Override ORM) # ------------------------------------------------------ - def unlink(self): - """ - Restrict contract deletion depending on state - """ - for contract in self: - if contract.state != "init": - raise UserError( - _("Seuls les deals à l'état Projet peuvent être supprimés") - ) - return super().unlink() diff --git a/models/financial_deal.py b/models/financial_deal.py new file mode 100644 index 0000000000000000000000000000000000000000..6511bcd2945bbed0ee9abbe380b7c71ec2c1ede5 --- /dev/null +++ b/models/financial_deal.py @@ -0,0 +1,34 @@ +# © 2019 Le Filament (<http://www.le-filament.com>) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from odoo import _, models +from odoo.exceptions import UserError + + +class FinancialDeal(models.Model): + _inherit = "financial.deal" + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Inherit parent + # ------------------------------------------------------ + def action_stage_validated(self): + res = super().action_stage_validated() + + for contract in self.coop_contract_ids: + if not contract.company_id.contract_sequence_id: + raise UserError( + _( + f"Aucune séquence configurée pour les contrats de la société {contract.company_id.name}" + ) + ) + if not contract.number: + contract.number = contract.company_id.contract_sequence_id.next_by_id() + return res + + # ------------------------------------------------------ + # CRUD (Override ORM) + # ------------------------------------------------------ diff --git a/models/res_company.py b/models/res_company.py new file mode 100644 index 0000000000000000000000000000000000000000..cc206802dc1b719910116eac21e8c44335e5f46f --- /dev/null +++ b/models/res_company.py @@ -0,0 +1,61 @@ +# Copyright 2023- Le Filament (https://le-filament.com) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) + +from odoo import api, fields, models + + +class ResCompany(models.Model): + _inherit = "res.company" + + contract_sequence_id = fields.Many2one("ir.sequence") + + # ------------------------------------------------------ + # Fields declaration + # ------------------------------------------------------ + + # ------------------------------------------------------ + # SQL Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Default methods + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Onchange / Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD methods (ORM overrides) + # ------------------------------------------------------ + @api.model + def create(self, values): + # Crée une séquence dédiée à la société + res = super().create(values) + + res.contract_sequence_id = self.env["ir.sequence"].create( + { + "name": f"Contrats - {res.name}", + "company_id": res.id, + "number_next": 1, + "number_increment": 1, + "use_date_range": True, + "prefix": "C%(year)s%(month)s", + "padding": 4, + "implementation": "no_gap", + "code": f"financial.contract.company_{res.id}", + } + ) + return res + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Business methods + # ------------------------------------------------------ diff --git a/models/res_partner.py b/models/res_partner.py index 433e42026d4f9950ac6584069dfc076247dc8429..181200505cf92a7f04dbc631837c6c2953631224 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -45,6 +45,16 @@ class ResPartner(models.Model): # ------------------------------------------------------ # Actions # ------------------------------------------------------ + def action_view_contract(self): + self.ensure_one() + return { + "type": "ir.actions.act_window", + "name": "Contrats", + "res_model": "financial.contract", + "view_mode": "tree,form", + "domain": [("deal_type", "=", "external"), ("partner_id", "=", self.id)], + "flags": {"mode": "readonly"}, + } # ------------------------------------------------------ # Business methods diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 7f16336b4225251077227ddf1d5ee7c105c0e570..97dd8b917b8a258799a3ebf0095f13ff73d7cf68 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,2 +1 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_financial_contract,access_financial_contract,model_financial_contract,base.group_user,1,1,1,1 diff --git a/security/security_rules.xml b/security/security_rules.xml deleted file mode 100644 index 762300405cc11066d569e78555e16154d6ad2580..0000000000000000000000000000000000000000 --- a/security/security_rules.xml +++ /dev/null @@ -1,41 +0,0 @@ -<?xml version="1.0" ?> -<!-- Copyright 2022 Le Filament - License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> -<odoo> - <!-- - Category - --> -<!-- <record id="module_cgscop_category" model="ir.module.category">--> -<!-- <field name="name">CG Scop</field>--> -<!-- <field name="sequence">10</field>--> -<!-- </record>--> -<!-- <record id="module_cgscop_administration_category" model="ir.module.category">--> -<!-- <field name="name">Administration CG Scop</field>--> -<!-- <field name="parent_id" ref="cgscop_partner.module_cgscop_category" />--> -<!-- </record>--> - - <!-- - Group user - --> -<!-- <record id="group_edit_all_ur" model="res.groups">--> -<!-- <field name="name">Modification des coopératives de toutes les UR</field>--> -<!-- <field name="category_id" ref="cgscop_partner.module_cgscop_category" />--> -<!-- </record>--> - - <!-- - Group rules - --> -<!-- <record id="res_partner_rule_ur" model="ir.rule">--> -<!-- <field name="name">Modification des partenaires de mon UR</field>--> -<!-- <field name="model_id" ref="base.model_res_partner" />--> -<!-- <field--> -<!-- name="domain_force"--> -<!-- >['|',('ur_id','=',False),('ur_id','=',user.company_id.ur_id.id)]</field>--> -<!-- <field name="groups" eval="[(6, 0, [ref('base.group_user')])]" />--> -<!-- <field name="perm_read" eval="False" />--> -<!-- <field name="perm_write" eval="True" />--> -<!-- <field name="perm_create" eval="True" />--> -<!-- <field name="perm_unlink" eval="False" />--> -<!-- </record>--> - -</odoo> diff --git a/static/description/icon.png b/static/description/icon.png index d96ec15a443e96f0ace3fb5543d3a419c87c49ea..a04374ee2970f59b609e8af5a93b9f5be586ece4 100644 Binary files a/static/description/icon.png and b/static/description/icon.png differ diff --git a/views/financial_contract.xml b/views/financial_contract.xml index 52a19e26bc13a2c9ea522793070ba014f0e8b1c4..9657bf9de4f0ecab76ccc9c6f068b8127f07152a 100644 --- a/views/financial_contract.xml +++ b/views/financial_contract.xml @@ -2,107 +2,348 @@ <!-- Copyright 2024 Le Filament License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> <odoo> - <!-- Form --> - <record model="ir.ui.view" id="financial_deal_contract_view"> - <field name="name">financial.contract.form</field> + <!-- Kanban --> +<!-- <record model="ir.ui.view" id="financial_contract_kanban_view">--> +<!-- <field name="name">financial.deal.contract</field>--> +<!-- <field name="model">financial.contract</field>--> +<!-- <field name="arch" type="xml">--> +<!-- <kanban--> +<!-- default_group_by="state"--> +<!-- class="o_kanban_small_column o_opportunity_kanban"--> +<!-- archivable="false"--> +<!-- >--> +<!-- <field name="state" />--> +<!-- <field name="name" />--> +<!-- <field name="partner_id" />--> +<!-- <field name="active" />--> +<!-- <templates>--> +<!-- <t t-name="kanban-box">--> +<!-- <div class="oe_kanban_global_click">--> +<!-- <!– TODO: Ajouter css pour bandeau archivage –>--> +<!-- <!– <div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">–>--> +<!-- <!– <span class="bg-danger">Archivé</span>–>--> +<!-- <!– </div>–>--> +<!-- <div class="oe_kanban_content">--> +<!-- <div class="o_kanban_record_title">--> +<!-- <strong>--> +<!-- <field name="name" />--> +<!-- - --> +<!-- <field name="partner_id" />--> +<!-- </strong>--> +<!-- </div>--> +<!-- <div class="o_kanban_record_subtitle">--> +<!-- <!– <t t-if="record.total_amount.raw_value">–>--> +<!-- <!– <field–>--> +<!-- <!– name="total_amount"–>--> +<!-- <!– widget="monetary"–>--> +<!-- <!– options="{'currency_field': 'currency_id'}"/>–>--> +<!-- <!– </t>–>--> +<!-- </div>--> +<!-- <div class="oe_clear" />--> +<!-- </div>--> +<!-- </div>--> +<!-- </t>--> +<!-- </templates>--> +<!-- </kanban>--> +<!-- </field>--> +<!-- </record>--> + + <!-- Tree Internal --> + <record id="financial_contract_all_tree_view" model="ir.ui.view"> + <field name="name">financial.contract.all.tree</field> <field name="model">financial.contract</field> <field name="arch" type="xml"> - <form string="Contract"> - <header> - <field name="state" widget="statusbar" /> - </header> - <sheet> - <field name="active" invisible="1" /> - <widget - name="web_ribbon" - title="Archivé" - bg_color="bg-danger" - attrs="{'invisible': [('active', '=', True)]}" - /> - <h1> - <field name="name" /> - </h1> - <group> - <group string="Coopérative"> - <field - name="partner_id" - options="{'no_create': 1, 'no_edit': 1}" - /> - </group> - </group> - </sheet> - <div class="oe_chatter"> - <field name="message_follower_ids" /> - <field name="activity_ids" /> - <field name="message_ids" /> - </div> - </form> + <tree> + <field name="company_id" /> + <field name="type" /> + <field name="product_id" /> + <field name="amount" string="Montant" /> + <button + name="show_amortization" + type="object" + icon="fa-calculator" + class="btn-outline-primary" + title="Tableau d'amortissement" + attrs="{'invisible': [('type', '!=', 'loan')]}" + /> + <field name="currency_id" invisible="1" /> + </tree> </field> </record> - <!-- Tree --> - <record model="ir.ui.view" id="financial_contract_view"> - <field name="name">financial.contract.tree</field> + <!-- Tree Loan --> + <record id="financial_contract_loan_tree_view" model="ir.ui.view"> + <field name="name">financial.contract.loan.tree</field> <field name="model">financial.contract</field> <field name="arch" type="xml"> <tree> <field name="currency_id" invisible="1" /> - <field name="name" /> + <field name="type" invisible="1" /> <field name="partner_id" /> + <field name="product_id" /> <field name="state" /> -<!-- <field name="total_amount" />--> + <field name="expiration_date" /> + <field name="amount" string="Montant" /> + <field name="rate" /> + <field name="duration" /> + <field name="periodicity" /> + <field name="delay_type" /> + <field name="delay_duration" /> + <field name="payment_date" /> + <field name="first_term_date" /> + <field name="company_id" /> + <button + name="show_amortization" + type="object" + icon="fa-calculator" + class="btn-outline-primary" + title="Tableau d'amortissement" + attrs="{'invisible': [('type', '!=', 'loan')]}" + /> </tree> </field> </record> - <!-- Kanban --> - <record model="ir.ui.view" id="financial_contract_kanban_view"> - <field name="name">financial.deal.contract</field> + <!-- Tree Invest --> + <record id="financial_contract_invest_tree_view" model="ir.ui.view"> + <field name="name">financial.contract.invest.tree</field> <field name="model">financial.contract</field> <field name="arch" type="xml"> - <kanban - default_group_by="state" - class="o_kanban_small_column o_opportunity_kanban" - archivable="false" - > + <tree> + <field name="currency_id" invisible="1" /> + <field name="type" invisible="1" /> + <field name="partner_id" /> + <field name="product_id" /> <field name="state" /> - <field name="name" /> + <field name="expiration_date" /> + <field name="amount" string="Montant" /> + <field name="securities_number" /> + <field name="nominal" /> + <field name="fixed_rate" /> + <field name="performance_indicator" /> + <field name="performance_month" /> + <field name="issue_date" /> + <field name="payment_date" /> + <field name="company_id" /> + <button + name="show_amortization" + type="object" + icon="fa-calculator" + class="btn-outline-primary" + title="Tableau d'amortissement" + attrs="{'invisible': [('type', '!=', 'loan')]}" + /> + </tree> + </field> + </record> + + <!-- Tree Guarantee --> + <record id="financial_contract_guarantee_tree_view" model="ir.ui.view"> + <field name="name">financial.contract.guarantee.tree</field> + <field name="model">financial.contract</field> + <field name="arch" type="xml"> + <tree> + <field name="currency_id" invisible="1" /> + <field name="type" invisible="1" /> <field name="partner_id" /> - <field name="active" /> - <templates> - <t t-name="kanban-box"> - <div class="oe_kanban_global_click"> - <!-- TODO: Ajouter css pour bandeau archivage --> -<!-- <div class="ribbon ribbon-top-right" attrs="{'invisible': [('active', '=', True)]}">--> -<!-- <span class="bg-danger">Archivé</span>--> -<!-- </div>--> - <div class="oe_kanban_content"> - <div class="o_kanban_record_title"> - <strong><field name="name" /> - <field - name="partner_id" - /></strong> - </div> - <div class="o_kanban_record_subtitle"> -<!-- <t t-if="record.total_amount.raw_value">--> -<!-- <field--> -<!-- name="total_amount"--> -<!-- widget="monetary"--> -<!-- options="{'currency_field': 'currency_id'}"/>--> -<!-- </t>--> - </div> - <div class="oe_clear" /> - </div> - </div> - </t> - </templates> - </kanban> + <field name="product_id" /> + <field name="state" /> + <field name="expiration_date" /> + <field name="amount" string="Montant" /> + <field name="external_loan_id" /> + <field name="fmg_amount" /> + <field name="social_share_amount" /> + <field name="guarantee_rate" /> + <field name="is_counter_guarantee" /> + <field name="loan_balance" /> + <field name="guarantee_balance" /> + <field name="final_risk_guarantee" /> + <field name="payment_date" /> + <field name="company_id" /> + <button + name="show_amortization" + type="object" + icon="fa-calculator" + class="btn-outline-primary" + title="Tableau d'amortissement" + attrs="{'invisible': [('type', '!=', 'loan')]}" + /> + </tree> + </field> + </record> + <!-- Tree Partner --> + <record id="financial_contract_partner_tree_view" model="ir.ui.view"> + <field name="name">financial.contract.partner.tree</field> + <field name="model">financial.contract</field> + <field name="arch" type="xml"> + <tree> + <field name="partner_id" /> + <field name="deal_partner_id" /> + <field name="type" /> + <field name="amount" string="Montant" /> + <field name="currency_id" invisible="1" /> + <button + name="show_amortization" + type="object" + icon="fa-calculator" + class="btn-outline-primary" + title="Tableau d'amortissement" + attrs="{'invisible': [('type', '!=', 'loan')]}" + /> + </tree> </field> </record> - <!-- Action --> - <record model="ir.actions.act_window" id="financial_contract_act_window"> - <field name="name">Contrats</field> + <!-- Search --> + <record id="financial_contract_search_view" model="ir.ui.view"> + <field name="name">financial.contract.search</field> + <field name="model">financial.contract</field> + <field name="arch" type="xml"> + <search string="Contracts"> + <field name="name" /> + <!-- Filter --> + <filter name="expiration_date" date="expiration_date" /> + <filter + string="Prêt" + name="loan" + domain="[('type', '=', 'loan')]" + /> + <filter + string="Investissement" + name="invest" + domain="[('type', '=', 'invest')]" + /> + <filter + string="Garantie" + name="guarantee" + domain="[('type', '=', 'guarantee')]" + /> + <separator /> + <filter + string="Proposition" + name="proposal" + domain="[('state', '=', 'proposal')]" + /> + <filter + string="Contrat signé" + name="contract" + domain="[('state', '=', 'contract')]" + /> + <filter + string="Terminé" + name="done" + domain="[('state', '=', 'done')]" + /> + <filter + string="Annulé" + name="cancel" + domain="[('state', '=', 'cancel')]" + /> + <separator /> + <filter + string="Archivé" + name="inactive" + domain="[('active', '=', False)]" + /> + <!-- Group by --> + <group expand="0" name="group_by" string="Group By"> + <filter + name="group_partner_id" + string="Coopérative" + context="{'group_by' : 'partner_id'}" + /> + <filter + name="group_state" + string="Statut" + context="{'group_by': 'state'}" + /> + <filter + string="Type d'outil" + name="group_type" + context="{'group_by':'type'}" + /> + </group> + </search> + </field> + </record> + + <!-- Actions --> + <record model="ir.actions.act_window" id="financial_contract_all_action"> + <field name="name">Tous les contrats</field> + <field name="res_model">financial.contract</field> + <field name="view_mode">tree,form</field> +<!-- <field name="domain">[('deal_type', '=', 'internal'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field>--> + <field name="domain">[('deal_type', '=', 'internal')]</field> + </record> + <record model="ir.actions.act_window" id="financial_contract_loan_action"> + <field name="name">Prêts</field> + <field name="res_model">financial.contract</field> + <field name="view_mode">tree,form</field> + <field + name="view_ids" + eval="[(5, 0, 0), + (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_loan_tree_view')}), + ]" + /> + <field + name="domain" + >[('deal_type', '=', 'internal'), ('type', '=', 'loan'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field> + </record> + <record model="ir.actions.act_window" id="financial_contract_invest_action"> + <field name="name">Titres participatifs</field> + <field name="res_model">financial.contract</field> + <field name="view_mode">tree,form</field> + <field + name="view_ids" + eval="[(5, 0, 0), + (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_invest_tree_view')}), + ]" + /> + <field + name="domain" + >[('deal_type', '=', 'internal'), ('type', '=', 'invest'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field> + </record> + <record + model="ir.actions.act_window" + id="financial_contract_guarantee_action" + > + <field name="name">Guaranties</field> + <field name="res_model">financial.contract</field> + <field name="view_mode">tree,form</field> + <field + name="view_ids" + eval="[(5, 0, 0), + (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_guarantee_tree_view')}), + ]" + /> + <field + name="domain" + >[('deal_type', '=', 'internal'), ('type', '=', 'guarantee'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field> + </record> + <record + model="ir.actions.act_window" + id="financial_contract_guarantee_action" + > + <field name="name">Garanties</field> + <field name="res_model">financial.contract</field> + <field name="view_mode">tree,form</field> + <field + name="domain" + >[('deal_type', '=', 'internal'), ('type', '=', 'guarantee'), ('state', 'in', ['proposal', 'contract', 'done', 'cancel'])]</field> + </record> + <record + model="ir.actions.act_window" + id="financial_contract_external_action" + > + <field name="name">Contrats partenaires</field> <field name="res_model">financial.contract</field> - <field name="view_mode">kanban,tree,form</field> + <field name="view_mode">tree,form</field> + <field + name="view_ids" + eval="[(5, 0, 0), + (0, 0, {'view_mode': 'tree', 'view_id': ref('financial_contract_partner_tree_view')}), + ]" + /> + <field name="domain">[('deal_type', '=', 'external')]</field> </record> </odoo> diff --git a/views/menus.xml b/views/menus.xml index 20baa72a65209d95a12700a44ce796d4f693226f..54c4fd78310ef0d4ce77d97e34c1572df8e6c2c9 100644 --- a/views/menus.xml +++ b/views/menus.xml @@ -10,24 +10,46 @@ <!-- Menu --> <menuitem - id="menu_financial_contract" - name="Contrats" + id="menu_financial_contract_all" + name="Tous les contrats" parent="financial_contract_menu_root" - action="financial_contract_act_window" + action="financial_contract_all_action" sequence="10" /> + <menuitem + id="menu_financial_contract_loan" + name="Prêts participatifs" + parent="financial_contract_menu_root" + action="financial_contract_loan_action" + sequence="20" + /> + <menuitem + id="menu_financial_contract_invest" + name="Titres participatifs" + parent="financial_contract_menu_root" + action="financial_contract_invest_action" + sequence="30" + /> + <menuitem + id="menu_financial_contract_guarantee" + name="Garanties" + parent="financial_contract_menu_root" + action="financial_contract_guarantee_action" + sequence="40" + /> + <menuitem + id="menu_financial_contract_external" + parent="financial_contract_menu_root" + action="financial_contract_external_action" + sequence="50" + /> + <!-- Configuration --> -<!-- <menuitem--> -<!-- id="menu_financial_deal_config"--> -<!-- name="Configuration"--> -<!-- parent="financial_deal_menu_root"--> -<!-- sequence="100"--> -<!-- />--> -<!-- <menuitem--> -<!-- id="menu_financial_deal"--> -<!-- name="Partenaires financiers"--> -<!-- parent="menu_financial_deal_config"--> -<!-- action="financial_deal_partner_act_window"--> -<!-- sequence="10"--> -<!-- />--> + <menuitem + id="menu_financial_contract_configuration" + name="Configuration" + parent="financial_contract_menu_root" + sequence="100" + /> + </odoo> diff --git a/views/res_partner.xml b/views/res_partner.xml index d29e109b8992a1bc9d84486fd24643585bf6c7ba..f5e7d7756321ea442304790e717284c481009da5 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -10,11 +10,11 @@ <field name="arch" type="xml"> <xpath expr="//div[@name='button_box']" position="inside"> <button - name="%(financial_contract_act_window)d" + name="action_view_contract" class="oe_stat_button" icon="fa-file-text-o" attrs="{'invisible': [('financial_contract_count', '=', 0)]}" - type="action" + type="object" > <field name="financial_contract_count"