diff --git a/__manifest__.py b/__manifest__.py index 91f457d477cb39d960b84d27da5b85616dcddc87..49dc723ce2c3c5157775e34a81bf914b98332111 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -5,13 +5,14 @@ "website": "https://le-filament.com", "version": "18.0.1.0.0", "license": "AGPL-3", - "depends": [], + "depends": ["contacts"], "data": [ "security/company_share_security.xml", "security/ir.model.access.csv", # datas # views "views/company_share_line_views.xml", + "views/res_config_settings.xml", # views menu "views/menus.xml", # wizard diff --git a/models/__init__.py b/models/__init__.py index 6671fbb34f9d3810f6ca2338ae624afa37271d91..9e555f83942e4742aaf1edf674f6260940c53e9b 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,2 +1,4 @@ from . import company_share_line from . import res_company +from . import res_config_settings +from . import res_partner diff --git a/models/company_share_line.py b/models/company_share_line.py index f1a8dc9fa0dd5b6890725cd2ff2d01616b9e79e9..9345947f32744335452dd550d06f70d41283a5ca 100644 --- a/models/company_share_line.py +++ b/models/company_share_line.py @@ -17,6 +17,7 @@ class CompanyShareLine(models.Model): share_unit_price = fields.Monetary( string="Share price", currency_field="company_currency_id", + default=lambda self: self.env.company.share_unit_price ) share_action = fields.Selection( [("purchase", "Purchase"), ("refund", "Refund")], diff --git a/models/res_company.py b/models/res_company.py index 423ab2ea2f91b466eca5e768345b6b2638b0a94b..f635dbb0b7489ce971b33d9c9d382db6e6708619 100644 --- a/models/res_company.py +++ b/models/res_company.py @@ -15,6 +15,7 @@ class ResCompany(models.Model): comodel_name="company.share.line", inverse_name="company_id", ) + share_unit_price = fields.Monetary("Valeur de la part") # ------------------------------------------------------ # Constraints diff --git a/models/res_config_settings.py b/models/res_config_settings.py new file mode 100644 index 0000000000000000000000000000000000000000..d2fa6eef0384aefd98f8e895badcfedb43d4bd8c --- /dev/null +++ b/models/res_config_settings.py @@ -0,0 +1,16 @@ +# © 2020 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 ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + share_unit_price = fields.Monetary( + string="Valeur de la part", + related="company_id.share_unit_price", + currency_field='company_currency_id', + readonly=False, + ) + company_currency_id = fields.Many2one(related="company_id.currency_id") diff --git a/models/res_partner.py b/models/res_partner.py new file mode 100644 index 0000000000000000000000000000000000000000..64111cc4a4e3a0b140368ab32b2724c5c9ff6c81 --- /dev/null +++ b/models/res_partner.py @@ -0,0 +1,49 @@ +# 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 +from odoo.exceptions import ValidationError + + +class ResPartner(models.Model): + _inherit = "res.partner" + + # ------------------------------------------------------ + # Fields declaration + # ------------------------------------------------------ + company_share_line_ids = fields.One2many( + comodel_name="company.share.line", + inverse_name="partner_id", + ) + company_share_total = fields.Float(compute="_compute_company_share_total") + + # ------------------------------------------------------ + # Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Default methods + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Computed fields / Search Fields + # ------------------------------------------------------ + def _compute_company_share_total(self): + for partner in self: + partner.company_share_total = sum(partner.company_share_line_ids.mapped("share_total_amount")) + + # ------------------------------------------------------ + # Onchange / Constraints + # ------------------------------------------------------ + + # ------------------------------------------------------ + # CRUD methods (ORM overrides) + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Actions + # ------------------------------------------------------ + + # ------------------------------------------------------ + # Business methods + # ------------------------------------------------------ diff --git a/views/menus.xml b/views/menus.xml index 34497bdd147b08c0c83099aedd285541753e7294..72578adbff8152c888745626fb5a723e6e5e0382 100644 --- a/views/menus.xml +++ b/views/menus.xml @@ -16,5 +16,13 @@ action="company_share_line_action" sequence="10" /> + <!-- Menu --> + <menuitem + id="menu_company_shares_config" + name="Paramètres" + parent="menu_company_shares_root" + action="action_company_shares_config" + sequence="100" + /> </odoo> diff --git a/views/res_config_settings.xml b/views/res_config_settings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1e0a0aeb532161e24c92c51dd4bf33664f04c16 --- /dev/null +++ b/views/res_config_settings.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8" ?> +<odoo> + <record id="res_config_settings_company_shares_view_form" model="ir.ui.view"> + <field name="name">company.shares.res.config.settings.view.inherit</field> + <field name="model">res.config.settings</field> + <field name="priority" eval="80" /> + <field name="inherit_id" ref="base.res_config_settings_view_form" /> + <field name="arch" type="xml"> + <xpath expr="//form" position="inside"> + <app + data-string="Company Shares" + string="Company Shares" + name="company_shares" + groups="company_shares.group_company_share_admin" + > + <div id="company_share"> + <block title="Configuration" name="company_share_config"> + <setting id="company_share_unit_price"> + <field name="share_unit_price" widget="monetary" /> + </setting> + </block> + </div> + </app> + </xpath> + </field> + </record> + + <record id="action_company_shares_config" model="ir.actions.act_window"> + <field name="name">Paramètres</field> + <field name="res_model">res.config.settings</field> + <field name="view_mode">form</field> + <field name="target">inline</field> + <field name="context">{'module' : 'company_shares', 'bin_size': False}</field> + </record> + +</odoo>