diff --git a/__manifest__.py b/__manifest__.py index 40f00ec5d909315d8bedb2a95c724fa1f542397b..2f2258d69ca26995363e55a18000a8b6f320d57e 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -17,9 +17,9 @@ "views/financial_contract.xml", "views/financial_external_guarantee.xml", "views/financial_funding.xml", + "views/financial_product_category.xml", "views/financial_product_template.xml", "views/financial_suspensive_condition.xml", - "views/res_partner.xml", # views menu "views/menus.xml", # wizard @@ -31,6 +31,7 @@ "web.assets_tests": [], "web.assets_qweb": [], }, + "application": True, "installable": True, "auto_install": False, } diff --git a/models/__init__.py b/models/__init__.py index da59c1d0124ce75869afd443f6ccc77c26c079d7..ef7ca807b4ba9cf45cb8163d98ce09bde83e1924 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,10 +1,8 @@ -from . import financial_contract_mixin from . import financial_contract from . import financial_contract_suspensive_condition from . import financial_external_guarantee from . import financial_funding +from . import financial_product_category from . import financial_product_suspensive_condition from . import financial_product_template from . import financial_suspensive_condition -from . import res_company -from . import res_partner diff --git a/models/financial_contract.py b/models/financial_contract.py index 435e0682c5eab04f83e52361911d65573ae419f7..db60f305fe57a10767a8d202015968a709c9f7ef 100644 --- a/models/financial_contract.py +++ b/models/financial_contract.py @@ -5,18 +5,43 @@ from odoo import _, api, fields, models from odoo.exceptions import AccessError, UserError -class FinancialContract(models.Model): +class FinancialContract(models.AbstractModel): _name = "financial.contract" _description = "Financial Contract" - _inherit = ["financial.contract.mixin"] _order = "create_date desc" - tool = fields.Selection( - [], - string="Outil", + name = fields.Char(compute="_compute_name") + number = fields.Char("Numéro", readonly=True) + partner_id = fields.Many2one( + comodel_name="res.partner", + string="Client", required=True, ) - tool_id = fields.Many2oneReference("ID Outil", model_field="tool", required=True,) + active = fields.Boolean( + default=True, + ) + amount = fields.Monetary("Montant") + company_id = fields.Many2one( + comodel_name="res.company", + string="Société", + default=lambda self: self.env.company, + ) + currency_id = fields.Many2one( + comodel_name="res.currency", related="company_id.currency_id" + ) + comment = fields.Text("Commentaire") + expiration_date = fields.Date("Date d'expiration") + + guarantee_id = fields.Many2one( + comodel_name="financial.external.guarantee", + string="Garantie", + ondelete="restrict", + ) + funding_id = fields.Many2one( + comodel_name="financial.funding", + string="Fonds financeur", + ondelete="restrict", + ) state = fields.Selection( [ ("init", "Initialisation"), @@ -39,41 +64,18 @@ class FinancialContract(models.Model): for contract in self: if contract.state in ["proposal", "contract", "done", "cancel"]: if contract.company_id not in self.env.user.company_ids: - raise AccessError(_( - "vous n'êtes pas autorisé à modifier ce contrat" - )) + raise AccessError( + _("Vous n'êtes pas autorisé à modifier ce contrat.") + ) # ------------------------------------------------------ # Computed fields / Search Fields # ------------------------------------------------------ - @api.depends("tool", "tool_id") - def _compute_contract_fields(self): + def _compute_name(self): for contract in self: - contract_id = contract._get_tool_object() - if contract_id: - contract.company_id = contract_id.company_id - contract.product_id = contract_id.product_id - contract.amount = contract_id.amount - - @api.depends("product_id") - def _compute_suspensive_condition_ids(self): - for contract in self: - # contract.suspensive_condition_ids.unlink() - condition_to_create = [(5, 0, 0)] - if contract.product_id: - for condition in self.product_id.suspensive_condition_ids: - condition_to_create.append( - ( - 0, - None, - { - "condition_id": condition.id, - "condition_comment": condition.condition_comment, - }, - ) - ) - if condition_to_create: - contract.update({"suspensive_condition_ids": condition_to_create}) + contract.name = ( + f"{contract.number or '#'} - " f"{contract.partner_id.name} " + ) # ------------------------------------------------------ # Onchange @@ -86,6 +88,16 @@ 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() # ------------------------------------------------------ # Override ORM @@ -94,6 +106,3 @@ class FinancialContract(models.Model): # ------------------------------------------------------ # Business functions # ------------------------------------------------------ - def _get_tool_object(self): - self.ensure_one() - return self.env[self.tool].browse(self.tool_id) if self.tool else False diff --git a/models/financial_contract_mixin.py b/models/financial_contract_mixin.py deleted file mode 100644 index 4349bb324a0b8478d54490490bcb778242faf0a2..0000000000000000000000000000000000000000 --- a/models/financial_contract_mixin.py +++ /dev/null @@ -1,148 +0,0 @@ -# © 2024 Le Filament (<http://www.le-filament.com>) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from odoo import _, api, fields, models -from odoo.exceptions import AccessError, UserError - - -class FinancialContractMixin(models.AbstractModel): - _name = "financial.contract.mixin" - _inherit = ["mail.thread", "mail.activity.mixin"] - _description = "Financial Contract Mixin" - - name = fields.Char(compute="_compute_name") - number = fields.Char("Numéro", readonly=True) - partner_id = fields.Many2one( - comodel_name="res.partner", - string="Client", - required=True, - ) - product_id = fields.Many2one( - comodel_name="financial.product.template", - string="Gamme", - ) - active = fields.Boolean( - default=True, - tracking=1, - ) - amount = fields.Monetary("Montant") - company_id = fields.Many2one( - comodel_name="res.company", - string="Société", - default=lambda self: self.env.company, - ) - currency_id = fields.Many2one( - comodel_name="res.currency", compute="_compute_currency_id" - ) - suspensive_condition_ids = fields.One2many( - comodel_name="financial.contract.suspensive.condition", - inverse_name="contract_id", - string="Conditions suspensives", - compute="_compute_suspensive_condition_ids", - store=True, - readonly=False, - ) - comment = fields.Text("Commentaire") - expiration_date = fields.Date("Date d'expiration") - - guarantee_id = fields.Many2one( - comodel_name="financial.external.guarantee", - string="Garantie", - ondelete="restrict", - ) - funding_id = fields.Many2one( - comodel_name="financial.funding", - string="Fonds financeur", - ondelete="restrict", - ) - - # ------------------------------------------------------ - # Constrains - # ------------------------------------------------------ - @api.constrains("state", "company_id") - def _check_user_company(self): - for contract in self: - if contract.state in ["proposal", "contract", "done", "cancel"]: - if contract.company_id not in self.env.user.company_ids: - raise AccessError(_( - "vous n'êtes pas autorisé à modifier ce contrat" - )) - - # ------------------------------------------------------ - # Computed fields / Search Fields - # ------------------------------------------------------ - def _compute_currency_id(self): - for contract in self: - contract.currency_id = self.env.company.currency_id - - def _compute_name(self): - for contract in self: - contract.name = ( - f"{contract.number or '#'} - " - f"{contract.partner_id.name} " - ) - - @api.depends("product_id") - def _compute_suspensive_condition_ids(self): - for contract in self: - # contract.suspensive_condition_ids.unlink() - condition_to_create = [(5, 0, 0)] - if contract.product_id: - for condition in self.product_id.suspensive_condition_ids: - condition_to_create.append( - ( - 0, - None, - { - "condition_id": condition.id, - "condition_comment": condition.condition_comment, - }, - ) - ) - if condition_to_create: - contract.update({"suspensive_condition_ids": condition_to_create}) - - # ------------------------------------------------------ - # Onchange - # ------------------------------------------------------ - - # ------------------------------------------------------ - # Actions - # ------------------------------------------------------ - - # ------------------------------------------------------ - # CRUD (Override ORM) - # ------------------------------------------------------ - @api.model_create_multi - def create(self, vals): - tools = super().write(vals) - for tool in tools: - contract = self.env["financial.contract"].create({ - "tool": self._name, - "tool_id": tool.id, - }) - tool.contract_id = contract.id - return tools - - 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() - - # ------------------------------------------------------ - # Override ORM - # ------------------------------------------------------ - def unlink(self): - if self.contract_id: - self.contract_id.unlink() - return super().unlink() - - # ------------------------------------------------------ - # Business functions - # ------------------------------------------------------ diff --git a/models/financial_contract_suspensive_condition.py b/models/financial_contract_suspensive_condition.py index aef984e5034e3b772367c56a21fbfa62e5531b1a..25ef8276a0c5f641614beae80e61c08f42c11238 100644 --- a/models/financial_contract_suspensive_condition.py +++ b/models/financial_contract_suspensive_condition.py @@ -1,10 +1,10 @@ -# © 2019 Le Filament (<http://www.le-filament.com>) +# © 2024 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 -class FinancialContractSuspensiveCondition(models.Model): +class FinancialContractSuspensiveCondition(models.AbstractModel): _name = "financial.contract.suspensive.condition" _description = "Financial contract suspensive condition" diff --git a/models/financial_funding.py b/models/financial_funding.py index 626a778381f0fca3aae4a5cf4c7976d7bfbee5f8..d3bed48faa48443ea52386cdede762455d4aad6c 100644 --- a/models/financial_funding.py +++ b/models/financial_funding.py @@ -1,4 +1,4 @@ -# © 2019 Le Filament (<http://www.le-filament.com>) +# © 2024 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 diff --git a/models/financial_product_category.py b/models/financial_product_category.py new file mode 100644 index 0000000000000000000000000000000000000000..67d842137d2211f922d9c928f7f072c3494b3568 --- /dev/null +++ b/models/financial_product_category.py @@ -0,0 +1,46 @@ +# © 2024 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 + + +class FinancialProductTemplate(models.Model): + _name = "financial.product.category" + _description = "Financial product category" + + name = fields.Char("Nom de la gamme", required=True) + active = fields.Boolean( + default=True, + ) + company_id = fields.Many2one( + comodel_name="res.company", + string="Société", + change_default=True, + required=True, + readonly=True, + default=lambda self: self.env.company, + ) + + # ------------------------------------------------------ + # Constrains functions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Override ORM + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD (Override ORM) + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Business functions + # ------------------------------------------------------ diff --git a/models/financial_product_suspensive_condition.py b/models/financial_product_suspensive_condition.py index 8bb32bb7965424d5dd2f5d10d474e519a2cdac19..f28ba3b333ff5b0404cc4a7039678d614101ebab 100644 --- a/models/financial_product_suspensive_condition.py +++ b/models/financial_product_suspensive_condition.py @@ -1,10 +1,10 @@ -# © 2019 Le Filament (<http://www.le-filament.com>) +# © 2024 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 -class FinancialProductSuspensiveCondition(models.Model): +class FinancialProductSuspensiveCondition(models.AbstractModel): _name = "financial.product.suspensive.condition" _description = "Financial product suspensive condition" diff --git a/models/financial_product_template.py b/models/financial_product_template.py index 8e7e7f76edeca3c44cf157905cc5aa8d141a0180..234207db3c846652ff658496af5be0cbd3300b66 100644 --- a/models/financial_product_template.py +++ b/models/financial_product_template.py @@ -5,28 +5,22 @@ from odoo import _, api, fields, models from odoo.exceptions import UserError -class FinancialProductTemplate(models.Model): +class FinancialProductTemplate(models.AbstractModel): _name = "financial.product.template" - _inherit = ["mail.thread", "mail.activity.mixin",] _description = "Financial product template" name = fields.Char(required=True) + category_id = fields.Many2one( + comodel_name="financial.product.category", + string="Nom de la gamme", + required=True, + ondelete="restrict", + ) active = fields.Boolean( default=True, tracking=1, ) - tool = fields.Selection( - [], - string="Type d'outil", - required=True, - ) - tool_id = fields.Many2oneReference("ID Outil", model_field="tool", required=True,) description = fields.Text() - suspensive_condition_ids = fields.One2many( - comodel_name="financial.product.suspensive.condition", - inverse_name="product_id", - string="Conditions suspensives", - ) company_id = fields.Many2one( comodel_name="res.company", string="Société", @@ -38,10 +32,23 @@ class FinancialProductTemplate(models.Model): currency_id = fields.Many2one( comodel_name="res.currency", related="company_id.currency_id" ) + date_start = fields.Date("Début de validité") + date_end = fields.Date("Fin de validité") # ------------------------------------------------------ # Constrains functions # ------------------------------------------------------ + @api.constrains("date_start", "date_end") + def _check_date_validity(self): + for product in self: + if ( + product.date_start + and product.date_end + and product.date_end <= product.date_start + ): + raise UserError( + _("La date de fin doit être supérieure à la date de début") + ) # ------------------------------------------------------ # Computed fields / Search Fields @@ -58,22 +65,6 @@ class FinancialProductTemplate(models.Model): # ------------------------------------------------------ # CRUD (Override ORM) # ------------------------------------------------------ - def unlink(self): - """ - Restrict product deletion if used in - """ - for product in self: - contract_ids = self.env["financial.contract"].search( - [("product_id", "=", product.id)] - ) - if contract_ids: - raise UserError( - _( - "Ce produit est utilisé dans un ou plusieurs dossiers, il n'est " - "pas possible de le supprimer. Il peut être archivé." - ) - ) - return super().unlink() # ------------------------------------------------------ # Business functions diff --git a/models/financial_suspensive_condition.py b/models/financial_suspensive_condition.py index 4d8938da80d7dad755ef21d26247203ebfda68d9..271cfc33d73b39528d764d94eb1e26789ba2d17a 100644 --- a/models/financial_suspensive_condition.py +++ b/models/financial_suspensive_condition.py @@ -1,4 +1,4 @@ -# © 2019 Le Filament (<http://www.le-filament.com>) +# © 2024 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 diff --git a/models/res_company.py b/models/res_company.py deleted file mode 100644 index ddd669ab0d6d103b8eab30e44bdde145ffb95cd1..0000000000000000000000000000000000000000 --- a/models/res_company.py +++ /dev/null @@ -1,61 +0,0 @@ -# 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 Financiers - {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 deleted file mode 100644 index f1dce52cef536ece85e2a960bdf4cd37b1f4413f..0000000000000000000000000000000000000000 --- a/models/res_partner.py +++ /dev/null @@ -1,61 +0,0 @@ -# Copyright 2023- Le Filament (https://le-filament.com) -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) - -from odoo import fields, models - - -class ResPartner(models.Model): - _inherit = "res.partner" - - # ------------------------------------------------------ - # Fields declaration - # ------------------------------------------------------ - financial_contract_ids = fields.One2many( - comodel_name="financial.contract", - inverse_name="partner_id", - string="Contrats", - ) - financial_contract_count = fields.Integer( - compute="_compute_financial_contract_count" - ) - - # ------------------------------------------------------ - # SQL Constraints - # ------------------------------------------------------ - - # ------------------------------------------------------ - # Default methods - # ------------------------------------------------------ - - # ------------------------------------------------------ - # Computed fields / Search Fields - # ------------------------------------------------------ - def _compute_financial_contract_count(self): - for partner in self: - partner.financial_contract_count = partner.financial_contract_ids.__len__() - - # ------------------------------------------------------ - # Onchange / Constraints - # ------------------------------------------------------ - - # ------------------------------------------------------ - # CRUD methods (ORM overrides) - # ------------------------------------------------------ - - # ------------------------------------------------------ - # 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": [("partner_id", "=", self.id)], - "flags": {"mode": "readonly"}, - } - - # ------------------------------------------------------ - # Business methods - # ------------------------------------------------------ diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 865ccf0306db6237c0f248cc41a7bc54b5b664e1..d0323612ba6d75db8bce5f617a0f2c092a5ce66d 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -1,6 +1,8 @@ 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,group_financial_user,1,1,1,1 access_financial_contract_suspensive_condition,access_financial_contract_suspensive_condition,model_financial_contract_suspensive_condition,group_financial_user,1,1,1,1 +access_financial_product_category,access_financial_product_category,model_financial_product_category,group_financial_user,1,0,0,0 +access_financial_product_category_admin,access_financial_product_category_admin,model_financial_product_category,group_financial_admin,1,1,1,1 access_financial_product_template,access_financial_product_template,model_financial_product_template,group_financial_user,1,0,0,0 access_financial_product_template_admin,access_financial_product_template_admin,model_financial_product_template,group_financial_admin,1,1,1,1 access_financial_product_suspensive_condition,access_financial_product_suspensive_condition,model_financial_product_suspensive_condition,group_financial_user,1,0,0,0 diff --git a/security/security_rules.xml b/security/security_rules.xml index e53a19aab842a087ed6844ed2fee133252dcb8d4..81210a6e326834fe14b931e9be17abbcdbcf5eda 100644 --- a/security/security_rules.xml +++ b/security/security_rules.xml @@ -26,6 +26,36 @@ <!-- Group rules --> + <record id="financial_product_category_multi_company_rule" model="ir.rule"> + <field name="name">Financial Product Category Multi Company</field> + <field name="model_id" ref="model_financial_product_category" /> + <field + name="domain_force" + >[('company_id', 'in', company_ids + [False])]</field> + <field + name="groups" + eval="[(6, 0, [ref('financial_contract.group_financial_user')])]" + /> + <field name="perm_read" eval="False" /> + <field name="perm_write" eval="True" /> + <field name="perm_create" eval="True" /> + <field name="perm_unlink" eval="True" /> + </record> + <record id="financial_product_template_multi_company_rule" model="ir.rule"> + <field name="name">Financial Product Template Multi Company</field> + <field name="model_id" ref="model_financial_product_template" /> + <field + name="domain_force" + >[('company_id', 'in', company_ids + [False])]</field> + <field + name="groups" + eval="[(6, 0, [ref('financial_contract.group_financial_user')])]" + /> + <field name="perm_read" eval="False" /> + <field name="perm_write" eval="True" /> + <field name="perm_create" eval="True" /> + <field name="perm_unlink" eval="True" /> + </record> <record id="financial_contract_multi_company_rule" model="ir.rule"> <field name="name">Financial Contract Multi Company</field> <field name="model_id" ref="model_financial_contract" /> diff --git a/views/financial_contract.xml b/views/financial_contract.xml index 427a35f063543c89303a0159375de14c4368e602..200d258a7c031b25036b9086efb88d54eecb9933 100644 --- a/views/financial_contract.xml +++ b/views/financial_contract.xml @@ -5,17 +5,16 @@ <field name="name">financial.contract.tree</field> <field name="model">financial.contract</field> <field name="arch" type="xml"> - <tree> + <tree create="0" edit="0" delete="0"> <field name="partner_id" /> - <field name="tool" /> - <field name="product_id" /> <field name="amount" string="Montant" /> <field name="company_id" /> <field name="currency_id" invisible="1" /> </tree> </field> </record> - <!-- From --> + + <!-- Form --> <record id="financial_contract_form_view" model="ir.ui.view"> <field name="name">financial.contract.form</field> <field name="model">financial.contract</field> @@ -24,29 +23,25 @@ <sheet> <group> <group> - <field name="partner_id" /> - <field name="tool" /> - <field name="product_id" /> - </group> - <group> - <field name="amount" string="Montant" /> - <field name="company_id" /> + <field + name="partner_id" + options="{'no_create': 1}" + /> + <field + name="company_id" + options="{'no_create': 1}" + /> <field name="currency_id" invisible="1" /> + <field name="amount" string="Montant emprunté" /> </group> </group> <separator string="Description" /> <field name="comment" /> - <separator string="Conditions suspensives" /> - <field name="suspensive_condition_ids" /> </sheet> - <div class="oe_chatter"> - <field name="message_follower_ids" /> - <field name="activity_ids" /> - <field name="message_ids" /> - </div> </form> </field> </record> + <!-- Search --> <record id="financial_contract_search_view" model="ir.ui.view"> <field name="name">financial.contract.search</field> @@ -95,22 +90,8 @@ string="Statut" context="{'group_by': 'state'}" /> - <filter - string="Type d'outil" - name="group_toll" - context="{'group_by':'tool'}" - /> </group> </search> </field> </record> - <!-- - Actions - --> - <!-- All --> - <record model="ir.actions.act_window" id="financial_contract_action"> - <field name="name">Tous les contrats</field> - <field name="res_model">financial.contract</field> - <field name="view_mode">tree,form</field> - </record> </odoo> diff --git a/views/financial_product_category.xml b/views/financial_product_category.xml new file mode 100644 index 0000000000000000000000000000000000000000..02ce8a91e30d5a818b25b60484b3c9a2d7674db2 --- /dev/null +++ b/views/financial_product_category.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" ?> +<!-- Copyright 2024 Le Filament + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> +<odoo> + <!-- Search --> + <record model="ir.ui.view" id="financial_product_category_search_view"> + <field name="name">financial.product.category.search</field> + <field name="model">financial.product.category</field> + <field name="arch" type="xml"> + <search> + <field name="name" /> + <filter + string="Archivé" + name="inactive" + domain="[('active','=',False)]" + /> + <filter + string="Tous" + name="all" + domain="['|', ('active','=',False), ('active','=',True)]" + /> + </search> + </field> + </record> + + <!-- Tree --> + <record model="ir.ui.view" id="financial_product_category_tree_view"> + <field name="name">financial.product.category.tree</field> + <field name="model">financial.product.category</field> + <field name="arch" type="xml"> + <tree> + <field name="name" /> + <field name="active" invisible="1" /> + <field name="company_id" /> + </tree> + </field> + </record> + + <!-- Form --> + <record model="ir.ui.view" id="financial_product_category_form_view"> + <field name="name">financial.product.category.form</field> + <field name="model">financial.product.category</field> + <field name="arch" type="xml"> + <form> + <sheet> + <field name="active" invisible="1" /> + <widget + name="web_ribbon" + title="Archived" + bg_color="bg-danger" + attrs="{'invisible': [('active', '=', True)]}" + /> + <!-- Title --> + <div class="oe_title"> + <label for="name" string="Nom" /> + <h1> + <field + name="name" + default_focus="1" + placeholder="Nom du produit" + /> + </h1> + </div> + <group> + <group> + <field name="company_id" /> + </group> + </group> +<!-- <separator string="Produits" />--> +<!-- <field name="product_ids" readonly="1" />--> + </sheet> + </form> + </field> + </record> + + <!-- Action --> + <record + model="ir.actions.act_window" + id="financial_product_category_act_window" + > + <field name="name">Gammes de produits</field> + <field name="res_model">financial.product.category</field> + <field name="view_mode">tree,form</field> + </record> +</odoo> diff --git a/views/financial_product_template.xml b/views/financial_product_template.xml index df38fddc8ef1f9f2cde90c533c97d81b101e1d02..ba95a6e420c016c415a5ebfd061c8797e4dee1de 100644 --- a/views/financial_product_template.xml +++ b/views/financial_product_template.xml @@ -1,13 +1,15 @@ <?xml version="1.0" encoding="utf-8" ?> <odoo> -<!-- Tree --> + <!-- Tree --> <record id="financial_product_template_tree_view" model="ir.ui.view"> <field name="name">financial.product.template.tree</field> <field name="model">financial.product.template</field> <field name="arch" type="xml"> - <tree> + <tree create="0" edit="0" delete="0"> <field name="name" /> - <field name="tool" /> + <field name="category_id" /> + <field name="date_start" /> + <field name="date_end" /> <field name="company_id" options="{'no_create': 1, 'no_edit': 1}" @@ -23,6 +25,7 @@ <field name="model">financial.product.template</field> <field name="arch" type="xml"> <form> + <header /> <sheet> <field name="active" invisible="1" /> <widget @@ -38,14 +41,19 @@ <field name="name" default_focus="1" - placeholder="Nom de la gamme" + placeholder="Nom du produit" /> </h1> </div> <!-- Product Type --> <group> <group> - <field name="tool" widget="radio" /> + <field + name="category_id" + options="{'no_create': 1, 'no_edit': 1}" + /> + <field name="date_start" /> + <field name="date_end" /> </group> <group> <field @@ -60,43 +68,10 @@ <page string="Description" name="description"> <field name="description" /> </page> - <page - string="Conditions suspensives" - name="suspensive_condition" - > - <field - name="suspensive_condition_ids" - context="{'default_product_id': active_id}" - > - <tree editable="top"> - <field name="product_id" invisible="1" /> - <field - name="condition_id" - options="{'no_create': 1, 'no_edit': 1}" - /> - <field name="condition_comment" /> - </tree> - </field> - </page> </notebook> </sheet> - <div class="oe_chatter"> - <field name="message_follower_ids" /> - <field name="activity_ids" /> - <field name="message_ids" /> - </div> </form> </field> </record> - <!-- Action --> - <record - model="ir.actions.act_window" - id="financial_product_template_act_window" - > - <field name="name">Catalogue</field> - <field name="res_model">financial.product.template</field> - <field name="view_mode">tree,form</field> - </record> - </odoo> diff --git a/views/menus.xml b/views/menus.xml index 08209bb4e03b4f3f63823910f6a0b06aaaea671e..79804ef4b7256107ac3c913f90346223a5e96149 100644 --- a/views/menus.xml +++ b/views/menus.xml @@ -9,18 +9,10 @@ /> <!-- Menu --> - <menuitem - id="menu_financial_contract_all" - name="Tous les contrats" - parent="financial_contract_menu_root" - action="financial_contract_action" - sequence="10" - /> <menuitem id="menu_financial_product_template" name="Catalogue" parent="financial_contract_menu_root" - action="financial_product_template_act_window" sequence="100" /> @@ -31,6 +23,13 @@ parent="financial_contract_menu_root" sequence="100" /> + <menuitem + id="menu_financial_product_category" + name="Gammes de produits" + parent="menu_financial_contract_configuration" + action="financial_product_category_act_window" + sequence="10" + /> <menuitem id="menu_financial_suspensive_condition" name="Conditions suspensives" @@ -53,6 +52,4 @@ sequence="40" /> - - </odoo> diff --git a/views/res_partner.xml b/views/res_partner.xml deleted file mode 100644 index 6af34ad0612178a804549d3ec7e7eb8731605500..0000000000000000000000000000000000000000 --- a/views/res_partner.xml +++ /dev/null @@ -1,34 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!-- Copyright 2023- Le Filament (https://le-filament.com) - License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> -<odoo> - <!-- Form View --> - <record id="res_partner_financial_contract_form" model="ir.ui.view"> - <field name="name">res.partner.financial.contract.form</field> - <field name="model">res.partner</field> - <field name="inherit_id" ref="base.view_partner_form" /> - <field name="arch" type="xml"> - <xpath expr="//div[@name='button_box']" position="inside"> - <button - name="action_view_contract" - class="oe_stat_button" - icon="fa-file-text-o" - attrs="{'invisible': [('financial_contract_count', '=', 0)]}" - type="object" - > - <field - name="financial_contract_count" - widget="statinfo" - string="Contrat(s)" - /> - </button> - </xpath> - <xpath expr="//notebook" position="inside"> - <page name="contracts" string="Contracts"> - <field name="financial_contract_ids" readonly="1" /> - </page> - </xpath> - </field> - </record> - -</odoo>