Skip to content
Snippets Groups Projects
Commit ff7dbfbb authored by Benjamin - Le Filament's avatar Benjamin - Le Filament
Browse files

[update] add new table for versioning management

parent 173ed2a7
Branches
No related tags found
No related merge requests found
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
"summary": "Gestion des mise en production logicielles", "summary": "Gestion des mise en production logicielles",
"author": "Le Filament", "author": "Le Filament",
"website": "https://le-filament.com", "website": "https://le-filament.com",
"version": "14.0.1.1s.2", "version": "14.0.2.0.0",
"license": "AGPL-3", "license": "AGPL-3",
"depends": [ "depends": [
"web", "web",
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
# views # views
"views/res_partner.xml", "views/res_partner.xml",
"views/res_partner_module.xml", "views/res_partner_module.xml",
"views/res_partner_module_version.xml",
"views/res_partner_release.xml", "views/res_partner_release.xml",
"views/res_partner_release_module.xml", "views/res_partner_release_module.xml",
# views menu # views menu
......
...@@ -3,5 +3,6 @@ ...@@ -3,5 +3,6 @@
from . import res_partner from . import res_partner
from . import res_partner_module from . import res_partner_module
from . import res_partner_module_version
from . import res_partner_release from . import res_partner_release
from . import res_partner_release_module from . import res_partner_release_module
# © 2022 Le Filament (<http://www.le-filament.com>) # © 2022 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models from odoo import fields, models
...@@ -15,10 +14,9 @@ class ResPartner(models.Model): ...@@ -15,10 +14,9 @@ class ResPartner(models.Model):
release_ids = fields.One2many( release_ids = fields.One2many(
comodel_name="res.partner.release", inverse_name="partner_id", string="Releases" comodel_name="res.partner.release", inverse_name="partner_id", string="Releases"
) )
module_ids = fields.Many2many( module_version_ids = fields.One2many(
comodel_name="res.partner.module", comodel_name="res.partner.module.version",
column1="partner_id", inverse_name="partner_id",
column2="module_id",
string="Modules", string="Modules",
) )
release_share_link = fields.Char( release_share_link = fields.Char(
...@@ -53,27 +51,41 @@ class ResPartner(models.Model): ...@@ -53,27 +51,41 @@ class ResPartner(models.Model):
def retrieve_modules(self, modules): def retrieve_modules(self, modules):
existing_modules = self.env["res.partner.module"].search([]) existing_modules = self.env["res.partner.module"].search([])
ModuleVersion = self.env["res.partner.module.version"]
for partner in self: for partner in self:
for module in modules: for module in modules:
if module.get("author_type") != "odoo": if module.get("author_type") != "odoo":
# Mise à jour du module # Création du module
if module.get("name") in existing_modules.mapped("name"): if not module.get("name") in existing_modules.mapped("name"):
existing_modules.filtered( new_module = module
new_module.pop("latest_version", False)
module_id = existing_modules.create(new_module)
# Mise à jour des versions
else:
module_id = existing_modules.filtered(
lambda m: m.name == module.get("name") lambda m: m.name == module.get("name")
).update( )
module_update = ModuleVersion.search(
[
("partner_id", "=", partner.id),
("module_id", "=", module_id.id),
]
)
if module_update:
module_update.update(
{"latest_version": module.get("latest_version")}
)
else:
module_update.create(
{ {
"author": module.get("author"), "partner_id": partner.id,
"author_type": module.get("author_type"), "module_id": module_id.id,
"latest_version": module.get("latest_version"), "latest_version": module.get("latest_version"),
"partner_ids": [(4, partner.id, 0)],
} }
) )
else:
# Création du module
partner.update({"module_ids": [(0, 0, module)]})
# Check modules désinstallés # Check modules désinstallés
module_uninstalled = list( module_uninstalled = list(
set(partner.module_ids.mapped("name")) set(partner.module_version_ids.mapped("module_id.name"))
- set( - set(
map( map(
lambda m: m.get("name") lambda m: m.get("name")
...@@ -84,11 +96,10 @@ class ResPartner(models.Model): ...@@ -84,11 +96,10 @@ class ResPartner(models.Model):
) )
) )
if module_uninstalled: if module_uninstalled:
module_ids = partner.module_ids.filtered( module_ids = partner.module_version_ids.filtered(
lambda m: m.name in module_uninstalled lambda m: m.module_id.name in module_uninstalled
) )
for module in module_ids: module_ids.unlink()
partner.update({"module_ids": [(3, module.id, 0)]})
# ------------------------------------------------------ # ------------------------------------------------------
# Common function # Common function
......
...@@ -6,20 +6,18 @@ from odoo import fields, models ...@@ -6,20 +6,18 @@ from odoo import fields, models
class PartnerModule(models.Model): class PartnerModule(models.Model):
_name = "res.partner.module" _name = "res.partner.module"
_description = "Modules client" _description = "Modules Odoo"
_order = "name"
# ------------------------------------------------------ # ------------------------------------------------------
# Fields declaration # Fields declaration
# ------------------------------------------------------ # ------------------------------------------------------
name = fields.Char("Nom du module", required=True) name = fields.Char("Nom du module", required=True)
partner_ids = fields.Many2many( partner_version_ids = fields.One2many(
comodel_name="res.partner", comodel_name="res.partner.module.version",
column1="module_id", inverse_name="module_id",
column2="partner_id",
string="Clients", string="Clients",
domain=[("is_company", "=", True)],
) )
latest_version = fields.Char("Version installée")
author = fields.Char("Auteur") author = fields.Char("Auteur")
author_type = fields.Selection( author_type = fields.Selection(
[ [
...@@ -29,7 +27,6 @@ class PartnerModule(models.Model): ...@@ -29,7 +27,6 @@ class PartnerModule(models.Model):
], ],
string="Type", string="Type",
) )
active = fields.Boolean("Actif", default=True)
# ------------------------------------------------------ # ------------------------------------------------------
# SQL Constraints # SQL Constraints
......
# Copyright 2022 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 PartnerModuleVersion(models.Model):
_name = "res.partner.module.version"
_description = "Modules par client"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
partner_id = fields.Many2one(
comodel_name="res.partner",
string="Client",
domain=[("is_company", "=", True)],
required=True,
)
module_id = fields.Many2one(
comodel_name="res.partner.module",
string="Module Odoo",
required=True,
)
latest_version = fields.Char("Version installée")
# ------------------------------------------------------
# SQL Constraints
# ------------------------------------------------------
_sql_constraints = [
(
"uniq_module_partner",
"unique(partner_id, module_id)",
"Ce module existe déjà pour ce client",
),
]
# ------------------------------------------------------
# Default methods
# ------------------------------------------------------
# ------------------------------------------------------
# Computed fields / Search Fields
# ------------------------------------------------------
# ------------------------------------------------------
# Onchange / Constraints
# ------------------------------------------------------
# ------------------------------------------------------
# CRUD methods (ORM overrides)
# ------------------------------------------------------
# ------------------------------------------------------
# Actions
# ------------------------------------------------------
# ------------------------------------------------------
# Business methods
# ------------------------------------------------------
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
from odoo import fields, models from odoo import api, fields, models
class PartnerReleaseModule(models.Model): class PartnerReleaseModule(models.Model):
...@@ -59,6 +59,10 @@ class PartnerReleaseModule(models.Model): ...@@ -59,6 +59,10 @@ class PartnerReleaseModule(models.Model):
# ------------------------------------------------------ # ------------------------------------------------------
# Onchange / Constraints # Onchange / Constraints
# ------------------------------------------------------ # ------------------------------------------------------
@api.onchange("partner_id")
def _onchange_partner_id(self):
module_ids = self.partner_id.module_version_ids.mapped("module_id")
return {"domain": {"module_id": [("id", "in", module_ids.ids)]}}
# ------------------------------------------------------ # ------------------------------------------------------
# CRUD methods (ORM overrides) # CRUD methods (ORM overrides)
......
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_res_partner_release,access_res_partner_release,model_res_partner_release,base.group_user,1,1,1,1 access_res_partner_release,access_res_partner_release,model_res_partner_release,base.group_user,1,1,1,1
access_res_partner_module,access_res_partner_module,model_res_partner_module,base.group_user,1,1,1,1 access_res_partner_module,access_res_partner_module,model_res_partner_module,base.group_user,1,1,1,1
access_res_partner_module_version,access_res_partner_module_version,model_res_partner_module_version,base.group_user,1,1,1,1
access_res_partner_release_module,access_res_partner_release_module,model_res_partner_release_module,base.group_user,1,1,1,1 access_res_partner_release_module,access_res_partner_release_module,model_res_partner_release_module,base.group_user,1,1,1,1
access_multi_partner_release_wizard,access_multi_partner_release_wizard,model_multi_partner_release_wizard,base.group_user,1,1,1,1 access_multi_partner_release_wizard,access_multi_partner_release_wizard,model_multi_partner_release_wizard,base.group_user,1,1,1,1
access_multi_partner_release_line_wizard,access_multi_partner_release_line_wizard,model_multi_partner_release_line_wizard,base.group_user,1,1,1,1 access_multi_partner_release_line_wizard,access_multi_partner_release_line_wizard,model_multi_partner_release_line_wizard,base.group_user,1,1,1,1
...@@ -32,6 +32,13 @@ ...@@ -32,6 +32,13 @@
parent="res_partner_release_menu" parent="res_partner_release_menu"
sequence="30" sequence="30"
/> />
<menuitem
name="Modules par client et version"
id="res_partner_module_version_menu"
action="res_partner_module_version_act_window"
parent="res_partner_release_menu"
sequence="30"
/>
</data> </data>
</odoo> </odoo>
...@@ -23,11 +23,9 @@ ...@@ -23,11 +23,9 @@
<group> <group>
</group> </group>
</group> </group>
<field name="module_ids"> <field name="module_version_ids">
<tree editable="top"> <tree editable="top" default_order="module_id">
<field name="name" /> <field name="module_id" />
<field name="author_type" />
<field name="author" />
<field name="latest_version" /> <field name="latest_version" />
</tree> </tree>
</field> </field>
......
...@@ -10,11 +10,43 @@ ...@@ -10,11 +10,43 @@
<field name="name" /> <field name="name" />
<field name="author_type" /> <field name="author_type" />
<field name="author" /> <field name="author" />
<field name="partner_ids" />
</search> </search>
</field> </field>
</record> </record>
<!-- Form View -->
<record id="res_partner_module_form_view" model="ir.ui.view">
<field name="name">res.partner.module.form</field>
<field name="model">res.partner.module</field>
<field name="arch" type="xml">
<form string="Modules">
<sheet>
<div class="oe_title">
<h1>
<field name="name" />
</h1>
</div>
<group>
<group>
<field name="author_type" />
<field name="author" />
</group>
</group>
<field
name="partner_version_ids"
readonly="1"
default_order="partner_id"
>
<tree>
<field name="partner_id" />
<field name="latest_version" />
</tree>
</field>
</sheet>
</form>
</field>
</record>
<!-- Tree View --> <!-- Tree View -->
<record id="res_partner_module_tree_view" model="ir.ui.view"> <record id="res_partner_module_tree_view" model="ir.ui.view">
<field name="name">res.partner.module.tree</field> <field name="name">res.partner.module.tree</field>
...@@ -24,13 +56,11 @@ ...@@ -24,13 +56,11 @@
<field name="name" /> <field name="name" />
<field name="author_type" /> <field name="author_type" />
<field name="author" /> <field name="author" />
<field name="latest_version" />
<field <field
name="partner_ids" name="partner_version_ids"
options="{'no_create': 1,}" options="{'no_create': 1,}"
widget="many2many_tags" widget="many2many_tags"
/> />
<field name="active" />
</tree> </tree>
</field> </field>
</record> </record>
...@@ -40,7 +70,7 @@ ...@@ -40,7 +70,7 @@
<field name="name">Liste Modules</field> <field name="name">Liste Modules</field>
<field name="type">ir.actions.act_window</field> <field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.module</field> <field name="res_model">res.partner.module</field>
<field name="view_mode">tree</field> <field name="view_mode">tree,form</field>
</record> </record>
</data> </data>
......
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<data>
<!-- Search View -->
<record id="res_partner_module_version_search_view" model="ir.ui.view">
<field name="name">res.partner.module.version.search</field>
<field name="model">res.partner.module.version</field>
<field name="arch" type="xml">
<search string="Modules">
<field name="partner_id" />
<field name="module_id" />
<field name="latest_version" />
</search>
</field>
</record>
<!-- Tree View -->
<record id="res_partner_module_version_tree_view" model="ir.ui.view">
<field name="name">res.partner.module.version.tree</field>
<field name="model">res.partner.module.version</field>
<field name="arch" type="xml">
<tree string="Modules" editable="top">
<field name="partner_id" options="{'no_create': 1, 'no_edit': 1}" />
<field name="module_id" options="{'no_create': 1, 'no_edit': 1}" />
<field name="latest_version" />
</tree>
</field>
</record>
<!-- Action Window -->
<record
id="res_partner_module_version_act_window"
model="ir.actions.act_window"
>
<field name="name">Modules par client et version</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.module.version</field>
<field name="view_mode">tree</field>
</record>
</data>
</odoo>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment