diff --git a/__manifest__.py b/__manifest__.py index 260d55a887ba5f5558502c068ea972b88e51ae3f..f40cf05d17dbb6994252a55c1808bb29ff29411b 100644 --- a/__manifest__.py +++ b/__manifest__.py @@ -8,6 +8,7 @@ "depends": ["oacc", "api_enedis_acc", "queue_job"], "data": [ "security/ir.model.access.csv", + "security/security.xml", # datas # wizard "wizard/acc_repartition_keys_file_wizard_views.xml", diff --git a/models/acc_operation.py b/models/acc_operation.py index 1b699411cd5b8c1b3dacdc219f6e906fe65c6bab..6c372a849d6b097c5fe121f4acf57ecc212afb53 100644 --- a/models/acc_operation.py +++ b/models/acc_operation.py @@ -12,6 +12,19 @@ from odoo.exceptions import UserError, ValidationError from odoo.addons.api_connector.tools.date_utils import utc_to_local +def get_algo_description(algo): + desc = { + "prorata": "La clé de répartition est calculée automatiquement chaque mois," + " au prorata de la consommation de chacun des consommateurs.", + "static": "La clé de répartition est calculée automatiquement chaque mois, " + "en fonction des coefficients de répartition communiqués " + "initialement à Enedis.", + "dyn_perso_send": "", + "dyn_perso_compute": "", + } + + return desc.get(algo, f"Pas de descritpion associée a {algo}") + class AccOperation(models.Model): _inherit = ["acc.operation"] @@ -23,7 +36,7 @@ class AccOperation(models.Model): inverse_name="operation_id", string="keys files repartition", required=False, - groups="oacc.group_operation_superadmin", + groups="oacc.group_operation_admin", ) repartition_keys_id = fields.One2many( @@ -31,7 +44,7 @@ class AccOperation(models.Model): inverse_name="operation_id", string="Repartition key", required=False, - groups="oacc.group_operation_superadmin", + groups="oacc.group_operation_admin", ) acc_priority_group_ids = fields.One2many( @@ -55,8 +68,7 @@ class AccOperation(models.Model): algo_description = fields.Text( string="Description de l algorithme", - default="La clé de répartition est calculée automatiquement chaque mois, " - "au prorata de la consommation de chacun des consommateurs", + default="", ) # ------------------------------------------------------ @@ -156,22 +168,18 @@ class AccOperation(models.Model): @api.onchange("type_algo") def on_change_algo(self): - desc = { - "prorata": "La clé de répartition est calculée automatiquement chaque mois," - " au prorata de la consommation de chacun des consommateurs.", - "static": "La clé de répartition est calculée automatiquement chaque mois, " - "en fonction des coefficients de répartition communiqués " - "initialement à Enedis.", - "dyn_perso_send": "", - "dyn_perso_compute": "", - } - self.algo_description = desc.get(self.type_algo) + self.algo_description = get_algo_description(self.type_algo) # ------------------------------------------------------ # CRUD methods (ORM overrides) # ------------------------------------------------------ + def write(self, vals): + if vals.get("type_algo"): + vals.update({'algo_description': get_algo_description(vals.get("type_algo"))}) + res = super().write(vals) + return res # ------------------------------------------------------ # Actions # ------------------------------------------------------ @@ -331,3 +339,4 @@ class AccOperation(models.Model): "date_send": datetime.now(), } ) + diff --git a/models/acc_priority_group.py b/models/acc_priority_group.py index 7f8b139761e7dd3ef363072207abca982006c6eb..2e62f7ba62371d6227d006b79459219ece9cc3e7 100644 --- a/models/acc_priority_group.py +++ b/models/acc_priority_group.py @@ -27,7 +27,7 @@ class AccPriorityGroup(models.Model): acc_priority_group_counter_ids = fields.One2many( comodel_name="acc.priority.group.counter", inverse_name="acc_priority_group_id", - string="Affectation de compteur par groupe de priorité", + string="Affectation de compteur par groupes de priorité", required=True, ) @@ -49,6 +49,7 @@ class AccPriorityGroup(models.Model): for prio_group in self: prio_group.display_name = f"Priorité {str(prio_group.sequence)}" + def _compute_counter_datas(self): for priority in self: priority.counter_datas = ( @@ -64,13 +65,19 @@ class AccPriorityGroup(models.Model): # ------------------------------------------------------ # Onchange / Constraints # ------------------------------------------------------ - @api.onchange("sequence") - def on_change_algo(self): - self._compute_display_name() # ------------------------------------------------------ # CRUD methods (ORM overrides) # ------------------------------------------------------ + def write(self, vals): + seq = vals.get("sequence") + if seq is not None: + vals["sequence"] = seq + 1 + res = super().write(vals) + + return res + + @api.model def unlink(self, _id): self = self.env["acc.priority.group"].browse(_id) @@ -78,7 +85,7 @@ class AccPriorityGroup(models.Model): existing_groups = self.env["acc.priority.group"].search( [("acc_operation_id", "=", current_operation_id), ("id", "!=", _id)] ) - seq = 1 + seq = 0 for group in existing_groups: group.sequence = seq seq += 1 @@ -101,7 +108,7 @@ class AccPriorityGroup(models.Model): res = super().create(vals_list) if existing_groups: - res.sequence = max(existing_groups.mapped("sequence")) + 1 + res.sequence = max(existing_groups.mapped("sequence")) return res counters_to_affect = self.env["acc.counter"].search( @@ -120,6 +127,7 @@ class AccPriorityGroup(models.Model): "counter_owner": counter.partner_id.name, } ) + return res # ------------------------------------------------------ diff --git a/models/acc_priority_group_counter.py b/models/acc_priority_group_counter.py index a7575036357d4d0a49c73639578e4737f3ace0a7..c278219f7eef758bb1480bdc801c562b6dc54a70 100644 --- a/models/acc_priority_group_counter.py +++ b/models/acc_priority_group_counter.py @@ -4,7 +4,7 @@ from odoo.osv import expression class AccPriorityGroupCounter(models.Model): _name = "acc.priority.group.counter" - _description = "Clé de répartition par groupe de priorité" + _description = "Clé de répartition par groupes de priorité" _rec_name = "acc_counter_id" # ------------------------------------------------------ diff --git a/models/acc_repartition_keys_file.py b/models/acc_repartition_keys_file.py index 8cc99ef602552d5b6b548a3a7ecb8cb17d289708..3ed261ab73094ff4d0112884949c8ff4801e495d 100644 --- a/models/acc_repartition_keys_file.py +++ b/models/acc_repartition_keys_file.py @@ -3,7 +3,7 @@ from odoo import fields, models class AccRepartitionKeysFile(models.Model): _name = "acc.repartition.keys.file" - _description = "clés de repartition" + _description = "Fichier de clés de repartition" _order = "date_send DESC, id DESC" # ------------------------------------------------------ diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv index 01de11f6c621533d85fc6fa0b821c0f03c799a9c..e054e7bd0f07485ad86f887f647bac9ac3d0269d 100644 --- a/security/ir.model.access.csv +++ b/security/ir.model.access.csv @@ -5,7 +5,7 @@ id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink "access_acc_priority_group_counter_operation_superadmin","acc_priority_group_counter group_operation_superadmin","model_acc_priority_group_counter","oacc.group_operation_superadmin",1,1,1,1 "access_acc_priority_group_operation_superadmin","acc_priority_group group_operation_superadmin","model_acc_priority_group","oacc.group_operation_superadmin",1,1,1,1 "access_acc_repartition_counter_group_operation_superadmin","acc_repartition_counter group_operation_superadmin","model_acc_repartition_counter","oacc.group_operation_superadmin",1,1,1,1 -"access_acc_repartition_keys_compute_wizard_group_operation_superadmin","acc_repartition_keys_compute_wizard group_operation_superadmin","model_acc_repartition_keys_compute_wizard","oacc.group_operation_admin",1,1,1,1 +"access_acc_repartition_keys_compute_wizard_group_operation_superadmin","acc_repartition_keys_compute_wizard group_operation_superadmin","model_acc_repartition_keys_compute_wizard","oacc.group_operation_superadmin",1,1,1,1 "access_acc_priority_group_counter_operation_admin","acc_priority_group_counter group_operation_admin","model_acc_priority_group_counter","oacc.group_operation_admin",1,1,1,1 "access_acc_priority_group_operation_admin","acc_priority_group group_operation_admin","model_acc_priority_group","oacc.group_operation_admin",1,1,1,1 diff --git a/security/security.xml b/security/security.xml new file mode 100644 index 0000000000000000000000000000000000000000..57a539b5b3ed4d03485f0f35a15b47519d060fb6 --- /dev/null +++ b/security/security.xml @@ -0,0 +1,87 @@ +<?xml version="1.0" encoding="utf-8" ?> +<!-- Copyright 2021- Le Filament (https://le-filament.com) + License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> +<odoo> + + <record id="acc_priority_group_admin_rule" model="ir.rule"> + <field name="name">Groupes de priorité</field> + <field ref="model_acc_priority_group" name="model_id" /> + <field + name="domain_force" + >[('acc_operation_id', 'in', list(user.commercial_partner_id.acc_operation_admin_ids.ids))]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_admin'))]" /> + </record> + + <record id="acc_priority_group_superadmin_rule" model="ir.rule"> + <field name="name">Groupes de priorité</field> + <field ref="model_acc_priority_group" name="model_id" /> + <field name="domain_force">[(1, '=', 1)]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_superadmin'))]" /> + </record> + + <record id="acc_priority_group_counter_admin_rule" model="ir.rule"> + <field name="name">Compteur pour repartition</field> + <field ref="model_acc_priority_group_counter" name="model_id" /> + <field + name="domain_force" + >[('acc_operation_id', 'in', list(user.commercial_partner_id.acc_operation_admin_ids.ids))]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_admin'))]" /> + </record> + + <record id="acc_priority_group_counter_superadmin_rule" model="ir.rule"> + <field name="name">Compteur pour repartition</field> + <field ref="model_acc_priority_group_counter" name="model_id" /> + <field name="domain_force">[(1, '=', 1)]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_superadmin'))]" /> + </record> + + <record id="acc_repartition_counter_admin_rule" model="ir.rule"> + <field name="name">Clés de repartition par compteur</field> + <field ref="model_acc_repartition_counter" name="model_id" /> + <field + name="domain_force" + >[('acc_operation_id', 'in', list(user.commercial_partner_id.acc_operation_admin_ids.ids))]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_admin'))]" /> + </record> + + <record id="acc_repartition_counter_superadmin_rule" model="ir.rule"> + <field name="name">Clés de repartition par compteur</field> + <field ref="model_acc_repartition_counter" name="model_id" /> + <field name="domain_force">[(1, '=', 1)]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_superadmin'))]" /> + </record> + + <record id="acc_repartition_keys_admin_rule" model="ir.rule"> + <field name="name">Ensemble des clés par operation</field> + <field ref="model_acc_repartition_keys" name="model_id" /> + <field + name="domain_force" + >[('operation_id', 'in', list(user.commercial_partner_id.acc_operation_admin_ids.ids))]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_admin'))]" /> + </record> + + <record id="acc_repartition_keys_superadmin_rule" model="ir.rule"> + <field name="name">Ensemble des clés par operation</field> + <field ref="model_acc_repartition_keys" name="model_id" /> + <field name="domain_force">[(1, '=', 1)]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_superadmin'))]" /> + </record> + + <record id="acc_repartition_keys_file_admin_rule" model="ir.rule"> + <field name="name">Fichier de clés de repartition</field> + <field ref="model_acc_repartition_keys_file" name="model_id" /> + <field + name="domain_force" + >[('operation_id', 'in', list(user.commercial_partner_id.acc_operation_admin_ids.ids))]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_admin'))]" /> + </record> + + <record id="acc_repartition_keys_file_superadmin_rule" model="ir.rule"> + <field name="name">Fichier de clés de repartition</field> + <field ref="model_acc_repartition_keys_file" name="model_id" /> + <field name="domain_force">[(1, '=', 1)]</field> + <field name="groups" eval="[(4, ref('oacc.group_operation_superadmin'))]" /> + </record> + + +</odoo> diff --git a/static/src/js/kanban_button.js b/static/src/js/kanban_button.js index b1f668a77b60d7b896e94a1d423f497d5a61f8d0..4de64cee5b89baecae9ed6fd663a0d185a1f3dbe 100644 --- a/static/src/js/kanban_button.js +++ b/static/src/js/kanban_button.js @@ -7,7 +7,6 @@ export class PriorityGroupKanbanController extends KanbanController { super.setup(); } CreatePriorityGroupClick() { - console.log(this.props.context); this.actionService.doAction({ type: "ir.actions.act_window", res_model: "acc.priority.group", @@ -18,9 +17,15 @@ export class PriorityGroupKanbanController extends KanbanController { target: "new", res_id: false, context: this.props.context || {}, + }, + { + onClose: function () { + location.reload() + } }); } } + registry.category("views").add("button_in_kanban", { ...kanbanView, Controller: PriorityGroupKanbanController, diff --git a/views/acc_operation_views.xml b/views/acc_operation_views.xml index a9f6e52a9683621cc621957b6554b1725b0bdce1..16f635bda41485adaacd2c9eef5c23befe1d044f 100644 --- a/views/acc_operation_views.xml +++ b/views/acc_operation_views.xml @@ -22,7 +22,7 @@ type="action" name="%(oacc_repartition_keys.acc_repartition_keys_compute_wizard_action)d" class="btn-primary" - attrs="{'invisible': [('type_algo', 'in', ['prorata', 'static'])]}" + attrs="{'invisible': [('type_algo', 'in', ['prorata', 'static', 'dyn_perso_send'])]}" groups="oacc.group_operation_superadmin" /> @@ -40,7 +40,7 @@ string="Importer un fichier de clés" type="action" name="%(oacc_repartition_keys.acc_repartition_keys_file_wizard_action)d" - class="btn-primary" + class="btn-primary mb-3" attrs="{'invisible': [('type_algo', 'not in', ['dyn_perso_send'])]}" groups="oacc.group_operation_admin" /> @@ -54,6 +54,7 @@ filename="filename" readonly="1" string="Fichier chargé" + groups="oacc.group_operation_admin" /> </tree> </field> diff --git a/views/acc_priority_group_counter_views.xml b/views/acc_priority_group_counter_views.xml index 246eec47dda447148edf9feab05e96c53b44a13d..5bf60f294bc1d5bc358a6bf4668d1e2f251a4e74 100644 --- a/views/acc_priority_group_counter_views.xml +++ b/views/acc_priority_group_counter_views.xml @@ -1,9 +1,11 @@ <?xml version="1.0" encoding="utf-8" ?> <odoo> <record id="acc_priority_group_counter_act_window" model="ir.actions.act_window"> - <field name="name">Clé de répartition par groupe de priorité</field> + <field name="name">Clé de répartition par groupes de priorité</field> <field name="res_model">acc.priority.group.counter</field> <field name="view_mode">kanban</field> + <field name="domain">[("acc_operation_id", "=", active_id)]</field> + <field name="context">{"default_acc_operation_id": active_id}</field> </record> <record id="acc_operation_priority_group_counter_form" model="ir.ui.view"> diff --git a/views/menu_views.xml b/views/menu_views.xml index 3bc4ea9f143543817d847b1a23be57c1d2e3cda2..a6d202a9bbc839830ab2604945071b3bc0be9413 100644 --- a/views/menu_views.xml +++ b/views/menu_views.xml @@ -9,13 +9,7 @@ sequence="15" groups="oacc.group_operation_superadmin" /> -<!-- <menuitem--> -<!-- id="menu_send_key"--> -<!-- parent="menu_repartition_principal"--> -<!-- name="Clés envoyées"--> -<!-- sequence="30"--> -<!-- action="oacc_repartition_keys.acc_keys_repartition_file_action"--> -<!-- />--> + <menuitem id="menu_computed_key" parent="menu_repartition_principal"