Skip to content
Extraits de code Groupes Projets
Valider e6d16a0b rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament Validation de Rémi - Le Filament
Parcourir les fichiers

[update] add new table for versioning management

parent 236a9647
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -3,7 +3,7 @@
"summary": "Gestion des mise en production logicielles",
"author": "Le Filament",
"website": "https://le-filament.com",
"version": "16.0.1.0.1",
"version": "16.0.2.0.0",
"license": "AGPL-3",
"depends": [
"web",
......@@ -21,6 +21,7 @@
# views
"views/res_partner.xml",
"views/res_partner_module.xml",
"views/res_partner_module_version.xml",
"views/res_partner_release.xml",
"views/res_partner_release_module.xml",
# views menu
......
from . import res_partner
from . import res_partner_module
from . import res_partner_module_version
from . import res_partner_release
from . import res_partner_release_module
# 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
......@@ -15,10 +14,9 @@ class ResPartner(models.Model):
release_ids = fields.One2many(
comodel_name="res.partner.release", inverse_name="partner_id", string="Releases"
)
module_ids = fields.Many2many(
comodel_name="res.partner.module",
column1="partner_id",
column2="module_id",
module_version_ids = fields.One2many(
comodel_name="res.partner.module.version",
inverse_name="partner_id",
string="Modules",
)
release_share_link = fields.Char(
......@@ -53,27 +51,41 @@ class ResPartner(models.Model):
def retrieve_modules(self, modules):
existing_modules = self.env["res.partner.module"].search([])
ModuleVersion = self.env["res.partner.module.version"]
for partner in self:
for module in modules:
if module.get("author_type") != "odoo":
# Mise à jour du module
if module.get("name") in existing_modules.mapped("name"):
existing_modules.filtered(
# Création du module
if not module.get("name") in existing_modules.mapped("name"):
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")
).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"),
"author_type": module.get("author_type"),
"partner_id": partner.id,
"module_id": module_id.id,
"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
module_uninstalled = list(
set(partner.module_ids.mapped("name"))
set(partner.module_version_ids.mapped("module_id.name"))
- set(
map(
lambda m: m.get("name")
......@@ -84,11 +96,10 @@ class ResPartner(models.Model):
)
)
if module_uninstalled:
module_ids = partner.module_ids.filtered(
lambda m: m.name in module_uninstalled
module_ids = partner.module_version_ids.filtered(
lambda m: m.module_id.name in module_uninstalled
)
for module in module_ids:
partner.update({"module_ids": [(3, module.id, 0)]})
module_ids.unlink()
# ------------------------------------------------------
# Common function
......
......@@ -6,20 +6,18 @@ from odoo import fields, models
class PartnerModule(models.Model):
_name = "res.partner.module"
_description = "Modules client"
_description = "Modules Odoo"
_order = "name"
# ------------------------------------------------------
# Fields declaration
# ------------------------------------------------------
name = fields.Char("Nom du module", required=True)
partner_ids = fields.Many2many(
comodel_name="res.partner",
column1="module_id",
column2="partner_id",
partner_version_ids = fields.One2many(
comodel_name="res.partner.module.version",
inverse_name="module_id",
string="Clients",
domain=[("is_company", "=", True)],
)
latest_version = fields.Char("Version installée")
author = fields.Char("Auteur")
author_type = fields.Selection(
[
......@@ -29,7 +27,6 @@ class PartnerModule(models.Model):
],
string="Type",
)
active = fields.Boolean("Actif", default=True)
# ------------------------------------------------------
# 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 @@
# 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):
......@@ -59,6 +59,10 @@ class PartnerReleaseModule(models.Model):
# ------------------------------------------------------
# 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)
......
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_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_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
......@@ -30,4 +30,13 @@
parent="res_partner_release_menu"
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"
/>
</odoo>
......@@ -21,11 +21,9 @@
<group>
</group>
</group>
<field name="module_ids">
<tree editable="top">
<field name="name" />
<field name="author_type" />
<field name="author" />
<field name="module_version_ids">
<tree editable="top" default_order="module_id">
<field name="module_id" />
<field name="latest_version" />
</tree>
</field>
......
......@@ -2,6 +2,7 @@
<!-- Copyright 2022 Le Filament (<https://le-filament.com>)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<<<<<<< HEAD
<!-- Search View -->
<record id="res_partner_module_search_view" model="ir.ui.view">
<field name="name">res.partner.module.search</field>
......@@ -11,11 +12,43 @@
<field name="name" />
<field name="author_type" />
<field name="author" />
<field name="partner_ids" />
</search>
</field>
</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 -->
<record id="res_partner_module_tree_view" model="ir.ui.view">
<field name="name">res.partner.module.tree</field>
......@@ -25,13 +58,11 @@
<field name="name" />
<field name="author_type" />
<field name="author" />
<field name="latest_version" />
<field
name="partner_ids"
name="partner_version_ids"
options="{'no_create': 1,}"
widget="many2many_tags"
/>
<field name="active" />
</tree>
</field>
</record>
......@@ -41,7 +72,7 @@
<field name="name">Liste Modules</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner.module</field>
<field name="view_mode">tree</field>
<field name="view_mode">tree,form</field>
</record>
</odoo>
<?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% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter