From dc886de835bc782e83490cc6a1f96e102611ecda Mon Sep 17 00:00:00 2001 From: benjamin <benjamin@le-filament.com> Date: Mon, 10 Mar 2025 12:50:34 +0100 Subject: [PATCH] [ADD] share price --- __manifest__.py | 3 ++- models/__init__.py | 2 ++ models/company_share_line.py | 1 + models/res_company.py | 1 + models/res_config_settings.py | 16 ++++++++++++ models/res_partner.py | 49 +++++++++++++++++++++++++++++++++++ views/menus.xml | 8 ++++++ views/res_config_settings.xml | 36 +++++++++++++++++++++++++ 8 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 models/res_config_settings.py create mode 100644 models/res_partner.py create mode 100644 views/res_config_settings.xml diff --git a/__manifest__.py b/__manifest__.py index 91f457d..49dc723 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 6671fbb..9e555f8 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 f1a8dc9..9345947 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 423ab2e..f635dbb 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 0000000..d2fa6ee --- /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 0000000..64111cc --- /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 34497bd..72578ad 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 0000000..b1e0a0a --- /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> -- GitLab