diff --git a/.pylintrc b/.pylintrc index 0ce94edcf7f94335e23fc9f79951a895925d3c90..dc6270e15be0c08da00e768a570f27c785d8630e 100644 --- a/.pylintrc +++ b/.pylintrc @@ -73,7 +73,6 @@ enable=anomalous-backslash-in-string, invalid-commit, missing-manifest-dependency, missing-newline-extrafiles, - missing-readme, no-utf8-coding-comment, odoo-addons-relative-import, old-api7-method-defined, diff --git a/models/res_partner.py b/models/res_partner.py index 1c885e16a22d563b62f99bbd25c5a30781d0e73e..d63d2e65e91f49f79696cc472f7b30907f5b37f3 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -3,7 +3,7 @@ from datetime import datetime, timedelta -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -24,7 +24,7 @@ class ScopPartner(models.Model): ("is_company", "=", True), ("organization_subtype_id", "=", incubator_id), ] - except: + except Exception: return [("is_company", "=", True)] @api.model @@ -36,7 +36,7 @@ class ScopPartner(models.Model): ("is_company", "=", True), ("organization_subtype_id", "in", [com_id, rev_id]), ] - except: + except Exception: return [("is_company", "=", True)] # Infos générales - champs non affichés @@ -221,6 +221,14 @@ class ScopPartner(models.Model): column2="filiere_id", string="Filière", ) + is_mucs = fields.Boolean(string="Est adhérent Mucs", tracking=True) + is_mucs_update_date = fields.Date(string="Date de mise à jour", tracking=True) + is_union_sociale = fields.Boolean( + string="Est adhérent Union Sociale", tracking=True + ) + is_union_sociale_update_date = fields.Date( + string="Date de mise à jour", tracking=True + ) # Infos générales / Infos activité creation_origin_id = fields.Many2one( @@ -399,13 +407,11 @@ class ScopPartner(models.Model): revision_next_exercice = fields.Integer( "Prochain exercice révisable", compute="_compute_revision_next_exercice", - inverse="_inverse_revision_next_exercice", store=True, ) revision_next_year = fields.Integer( "Année prochaine révision", compute="_compute_revision_next_year", - inverse="_inverse_revision_next_year", store=True, ) revision_ids = fields.One2many( @@ -528,9 +534,9 @@ class ScopPartner(models.Model): if self.siret and not self.env.context.get("import_file"): siren = self.siret[:3] + " " + self.siret[3:6] + " " + self.siret[6:9] if not self.siret.isdigit(): - raise ValidationError("Ce SIRET n'est pas valide") + raise ValidationError(_("Ce SIRET n'est pas valide")) if len(self.siret) != 14: - raise ValidationError("La longueur du SIRET doit être égale à 14") + raise ValidationError(_("La longueur du SIRET doit être égale à 14")) if ( self.search_count( [ @@ -540,9 +546,9 @@ class ScopPartner(models.Model): ) > 1 ): - raise ValidationError("Ce SIREN existe déjà parmi les coopératives") + raise ValidationError(_("Ce SIREN existe déjà parmi les coopératives")) elif self.search_count([("siret", "=", self.siret)]) > 1: - raise ValidationError("Ce SIRET existe déjà") + raise ValidationError(_("Ce SIRET existe déjà")) # ------------------------------------------------------ # Actions @@ -606,7 +612,7 @@ class ScopPartner(models.Model): @api.onchange("is_seed_scop") def onchange_is_seed_scop(self): for coop in self: - if coop.is_seed_scop == True: + if coop.is_seed_scop: if coop.date_1st_sign: coop.seed_end = coop.date_1st_sign + timedelta(2556) else: @@ -630,14 +636,14 @@ class ScopPartner(models.Model): def onchange_mobile(self): if self.mobile and len(self.mobile) > 0 and len(self.mobile) < 10: raise ValidationError( - "Le numéro de téléphone doit contenir au moins 10 caractères" + _("Le numéro de téléphone doit contenir au moins 10 caractères") ) @api.onchange("phone") def onchange_phone(self): if self.phone and len(self.phone) > 0 and len(self.phone) < 10: raise ValidationError( - "Le numéro de téléphone doit contenir au moins 10 caractères" + _("Le numéro de téléphone doit contenir au moins 10 caractères") ) @api.onchange("siret") @@ -757,7 +763,7 @@ class ScopPartner(models.Model): # Hack pour notification lors de la modification du logo if "image_128" in vals: self.message_post( - body="Modification Logo", + body=_("Modification Logo"), subtype="cgscop_base.cg_values_change", ) @@ -770,9 +776,11 @@ class ScopPartner(models.Model): ): if not partner.email and not partner.phone and not partner.mobile: raise ValidationError( - "Vous devez saisir au moins un e-mail ou un téléphone\ + _( + "Vous devez saisir au moins un e-mail ou un téléphone\ pour " - + partner.name + + partner.name + ) ) # Création d'une période lors du changement de statut en Suivi @@ -875,7 +883,7 @@ class ScopPartner(models.Model): domtom = self.env.ref("cgscop_partner.domtom") if company.state_id == domtom: company.zip_departement = company.zip[:3] - except: + except Exception: company.zip_departement = company.zip[:2] else: company.zip_departement = company.zip[:2] @@ -1074,10 +1082,6 @@ class ScopPartner(models.Model): for partner in self: partner.revision_next_year = partner.revision_next_exercice + 1 - def _inverse_revision_next_year(self): - for expense in self: - return - @api.depends( "revision_type", "revision_ids", @@ -1087,7 +1091,7 @@ class ScopPartner(models.Model): def _compute_revision_next_exercice(self): for partner in self: # Si aucune périodicité de défini, on n'insiste pas - if partner.revision_type == False: + if not partner.revision_type: return # On commence par regarder si l'on a des révisions @@ -1127,10 +1131,6 @@ class ScopPartner(models.Model): # Pas de révision précédente partner.revision_next_exercice = base_rev + 2 - def _inverse_revision_next_exercice(self): - for expense in self: - return - # ------------------------------------------------------ # Button Action # ------------------------------------------------------ @@ -1268,25 +1268,29 @@ class ScopPartner(models.Model): # Affichage des coop avec filtre par défaut # ------------------------------------------------------ def show_coop(self): - - ctx = " 'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company', 'default_project_status': '6_suivi'}" + ctx = { + "default_is_company": True, + "default_is_cooperative": True, + "default_company_type": "company", + "default_project_status": "6_suivi", + } # Détermine le filtre par défaut pour l'affichage filtre = self.env.user.company_id.ur_id.partner_filter if filtre == "1": - mycontext = "{'search_default_is_adherent': True," + ctx + mycontext = ctx.update({"search_default_is_adherent": True}) elif filtre == "2": - mycontext = "{'search_default_my_ur_adherent': True," + ctx + mycontext = ctx.update({"search_default_my_ur_adherent": True}) elif filtre == "3": - mycontext = "{'search_default_is_federation_com': True," + ctx + mycontext = ctx.update({"search_default_is_federation_com": True}) elif filtre == "4": - mycontext = "{'search_default_is_federation_indus': True," + ctx + mycontext = ctx.update({"search_default_is_federation_indus": True}) elif filtre == "5": - mycontext = "{'search_default_my_is_federation_btp': True," + ctx + mycontext = ctx.update({"search_default_my_is_federation_btp": True}) elif filtre == "6": - mycontext = "{'search_default_my_is_federation_cae': True," + ctx + mycontext = ctx.update({"search_default_my_is_federation_cae": True}) else: - mycontext = "{'search_default_my_ur_adherent': True," + ctx + mycontext = ctx.update({"search_default_my_ur_adherent": True}) return { "name": "Coopératives", @@ -1320,22 +1324,19 @@ class ScopPartner(models.Model): # ------------------------------------------------------ def show_prospect(self): - ctx = " 'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company', 'default_project_status': '1_information'}" + ctx = { + "default_is_company": True, + "default_is_cooperative": True, + "default_company_type": "company", + "default_project_status": "1_information", + } # Détermine le filtre par défaut pour l'affichage filtre = self.env.user.company_id.ur_id.partner_filter - if filtre == "1": - mycontext = "{" + ctx + if filtre in ("1", "3", "4", "5", "6"): + mycontext = ctx elif filtre == "2": - mycontext = "{'search_default_my_ur': True," + ctx - elif filtre == "3": - mycontext = "{" + ctx - elif filtre == "4": - mycontext = "{" + ctx - elif filtre == "5": - mycontext = "{" + ctx - elif filtre == "6": - mycontext = "{" + ctx + mycontext = ctx.update({"search_default_my_ur": True}) else: mycontext = "{'search_default_my_ur': True," + ctx @@ -1386,24 +1387,21 @@ class ScopPartner(models.Model): # ------------------------------------------------------ def show_organisme(self): - ctx = " 'default_is_company': True, 'default_is_cooperative': True, 'default_company_type': 'company', 'default_project_status': '1_information'}" + ctx = { + "default_is_company": True, + "default_is_cooperative": True, + "default_company_type": "company", + "default_project_status": "1_information", + } # Détermine le filtre par défaut pour l'affichage filtre = self.env.user.company_id.ur_id.partner_filter - if filtre == "1": - mycontext = "{" + ctx + if filtre in ("1", "3", "4", "5", "6"): + mycontext = ctx elif filtre == "2": - mycontext = "{'search_default_my_ur_adherent': True," + ctx - elif filtre == "3": - mycontext = "{" + ctx - elif filtre == "4": - mycontext = "{" + ctx - elif filtre == "5": - mycontext = "{" + ctx - elif filtre == "6": - mycontext = "{" + ctx + mycontext = ctx.update({"search_default_my_ur_adherent": True}) else: - mycontext = "{'search_default_my_ur_adherent': True," + ctx + mycontext = ctx.update({"search_default_my_ur_adherent": True}) return { "name": "Tous les organismes", diff --git a/models/res_partner_lists.py b/models/res_partner_lists.py index 02586bddaf3cdf7e8c6f22dfa328aaa082afce62..b5fcb3e2379e63164badd7b15d9bac9f903cf311 100644 --- a/models/res_partner_lists.py +++ b/models/res_partner_lists.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -57,7 +57,9 @@ class ResPartnerCreationOrigin(models.Model): @api.constrains("parent_id") def _check_origin_recursion(self): if not self._check_recursion(): - raise ValidationError("Vous ne pouvez pas créer des origines récursives.") + raise ValidationError( + _("Vous ne pouvez pas créer des origines récursives.") + ) return True @@ -119,7 +121,7 @@ class ResPartnerOrganizationType(models.Model): @api.constrains("parent_id") def _check_origin_recursion(self): if not self._check_recursion(): - raise ValidationError("Vous ne pouvez pas créer des types récursifs.") + raise ValidationError(_("Vous ne pouvez pas créer des types récursifs.")) return True diff --git a/models/scop_partner_staff.py b/models/scop_partner_staff.py index b45c80534c6f0499d231fac320bce224072ae4c3..92aa528f63c47a9dd626a7602018f7ee69d8933f 100644 --- a/models/scop_partner_staff.py +++ b/models/scop_partner_staff.py @@ -1,7 +1,7 @@ # © 2020 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -133,7 +133,7 @@ class ScopPartnerStaff(models.Model): and not self.env.user.has_group("cgscop_partner.group_cg_administrative") ): raise ValidationError( - 'Vous ne pouvez choisir que des types "Régularisation".' + _('Vous ne pouvez choisir que des types "Régularisation".') ) # ------------------------------------------------------ @@ -157,14 +157,18 @@ class ScopPartnerStaff(models.Model): ): if self.staff_count == 0: raise ValidationError( - "La colonne Effectif (EF) doit être renseignée" - " et supérieurs à 0." + _( + "La colonne Effectif (EF) doit être renseignée" + " et supérieurs à 0." + ) ) elif self.is_partner_in_tracked_naf: if self.staff_count == 0 or self.staff_shareholder_count == 0: raise ValidationError( - "Les colonnes Effectif (EF) et Nb Sociétaires Salarié" - " doivent être renseignés et supérieurs à 0." + _( + "Les colonnes Effectif (EF) et Nb Sociétaires Salarié" + " doivent être renseignés et supérieurs à 0." + ) ) else: if ( @@ -173,8 +177,10 @@ class ScopPartnerStaff(models.Model): or self.staff_average == 0 ): raise ValidationError( - "Tous les effectifs doivent" - " être renseignés et supérieurs à 0." + _( + "Tous les effectifs doivent" + " être renseignés et supérieurs à 0." + ) ) @api.constrains("effective_date") @@ -195,7 +201,7 @@ class ScopPartnerStaff(models.Model): "questionnaire_inscription", ): raise ValidationError( - "Vous ne pouvez pas créer 2 ajustements à la même date." + _("Vous ne pouvez pas créer 2 ajustements à la même date.") ) # ------------------------------------------------------ diff --git a/models/scop_revision.py b/models/scop_revision.py index bcf1ab14a6409a09b3db9c1e53642f8fb16f3508..d63bd928ad610602f9e70df0c44d6f0d6d2f2a64 100644 --- a/models/scop_revision.py +++ b/models/scop_revision.py @@ -3,7 +3,7 @@ from datetime import date -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -51,7 +51,8 @@ class ScopRevision(models.Model): # Délégué réviseur par défaut self.delegate_id = self.partner_id.revision_person_id.id - # Dans le cas de l'UR idf on calcule une date de révision (pour éviter de saisir la date) + # Dans le cas de l'UR idf on calcule une date de révision + # (pour éviter de saisir la date) idf = self.env.ref("cgscop_partner.riga_14231").id if self.partner_id.ur_id.id == idf: if self.revision_result_year > 2000: @@ -60,7 +61,7 @@ class ScopRevision(models.Model): @api.constrains("revision_result_year") def _check_revision_result_year(self): if (self.revision_result_year > 2040) or (self.revision_result_year < 2010): - raise ValidationError("Exercice révisé invalide") + raise ValidationError(_("Exercice révisé invalide")) class ScopRevisionFormat(models.Model): diff --git a/static/src/js/activity_renderer.js b/static/src/js/activity_renderer.js index 5f26d3be4dbad2441dd5e132a4fdcea92552c5ae..47cf6146ade9567c38d6a7c5b39d18a41d9b63ed 100644 --- a/static/src/js/activity_renderer.js +++ b/static/src/js/activity_renderer.js @@ -6,6 +6,7 @@ odoo.define("cgscop_partner.ActivityRenderer", function (require) { ActivityRenderer.include({ _onResNameClicked: function (ev) { // Suppression du click sur Nom activité + ev.preventDefault(); }, }); }); diff --git a/static/src/js/kanban_renderer.js b/static/src/js/kanban_renderer.js index aa9b124bb40e4dcadd7f5bfd87b8fef70192a864..bfead757b803f4d7ad42ba590817d3c86269ec40 100644 --- a/static/src/js/kanban_renderer.js +++ b/static/src/js/kanban_renderer.js @@ -4,12 +4,12 @@ odoo.define("cgscop_partner.kanban_renderer", function (require) { var KanbanRenderer = require("web.KanbanRenderer"); KanbanRenderer.include({ - _setState: function (state) { + _setState: function () { this._super.apply(this, arguments); var arch = this.arch; if (arch.attrs.block_drag_drop_kanban) { - if (arch.attrs.block_drag_drop_kanban == "true") { + if (arch.attrs.block_drag_drop_kanban === "true") { this.columnOptions.draggable = false; } } diff --git a/static/src/js/relational_fields.js b/static/src/js/relational_fields.js index cf312cd83a8ffc0d196aa4e9ab15ac8e4fd1c4d8..d18b121eda4f8bfb67f9687132c7161afdbc1550 100644 --- a/static/src/js/relational_fields.js +++ b/static/src/js/relational_fields.js @@ -1,7 +1,6 @@ odoo.define("cgscop_partner.relational_fields", function (require) { "use strict"; - var AbstractField = require("web.AbstractField"); var relational_fields = require("web.relational_fields"); var FieldStatus = relational_fields.FieldStatus; @@ -11,7 +10,7 @@ odoo.define("cgscop_partner.relational_fields", function (require) { FieldStatus.include({ _render: function () { - var clickable_attr; + var clickable_attr = true; if (this.mode === "readonly") { clickable_attr = false; } else { diff --git a/views/assets.xml b/views/assets.xml index 47aa28d833b821566d97c9ca17c8acee711b95fa..b43d7c4c9fcc5ee2b0d38b011f9795b34c757953 100644 --- a/views/assets.xml +++ b/views/assets.xml @@ -3,7 +3,7 @@ License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). --> <odoo> - <template + <template id="cgscop_assets_backend" name="cgscop_partner_assets" inherit_id="web.assets_backend" @@ -26,7 +26,7 @@ type="text/javascript" src="/cgscop_partner/static/src/js/relational_fields.js" /> - </xpath> + </xpath> </template> <menuitem diff --git a/views/res_partner.xml b/views/res_partner.xml index effb1a00fd1079fc300e3d9ac9c1fffd620b1460..6f3f9022214d916c23063f612b99d04d12c00620 100644 --- a/views/res_partner.xml +++ b/views/res_partner.xml @@ -58,6 +58,7 @@ <field name="name">res.partner.scop.view.form</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> + <field name="priority">100</field> <field name="arch" type="xml"> <!-- Vue Partenaire et contact @@ -970,6 +971,15 @@ options="{'no_create': True}" attrs="{'invisible': [('project_status', 'in', ('1_information'))]}" /> + <br /> + <field name="is_mucs" readonly="True" /> + <field name="is_mucs_update_date" readonly="True" /> + <field name="is_union_sociale" readonly="True" /> + <field + name="is_union_sociale_update_date" + readonly="True" + /> + <field name="is_federation_com" invisible="True" /> <field name="is_federation_indus" invisible="True" /> <field diff --git a/wizard/scop_address_wizard.py b/wizard/scop_address_wizard.py index f2715ee7be10cd0546ae9c9935a65d62cf24c5c9..553840765ed82eeb1d717bd560686a708bd65aa4 100644 --- a/wizard/scop_address_wizard.py +++ b/wizard/scop_address_wizard.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -193,10 +193,13 @@ class ScopPeriodWizard(models.TransientModel): region = zip_id[0].city_id[0].state_id if partner.region and region != partner.region: raise ValidationError( - "Vous ne pouvez pas modifier l'adresse " - "dans une autre région.\n" - " - ancienne région : %s\n" - " - nouvelle région : %s" % (partner.region.name, region.name) + _( + "Vous ne pouvez pas modifier l'adresse " + "dans une autre région.\n" + " - ancienne région : %s\n" + " - nouvelle région : %s" + ) + % (partner.region.name, region.name) ) # Close previous period @@ -209,8 +212,10 @@ class ScopPeriodWizard(models.TransientModel): } else: raise ValidationError( - "La nouvelle période ne peut commencer avant la " - + "fin de la période précédente : " + _( + "La nouvelle période ne peut commencer avant la " + "fin de la période précédente : " + ) + str(previous_period.end) ) if period.start >= previous_period.start: @@ -224,8 +229,10 @@ class ScopPeriodWizard(models.TransientModel): ) else: raise ValidationError( - "La nouvelle période ne peut commencer avant la " - + "période précédente : " + _( + "La nouvelle période ne peut commencer avant la " + "période précédente : " + ) + str(previous_period.start) ) diff --git a/wizard/scop_deces_wizard.py b/wizard/scop_deces_wizard.py index f93d3c8836f812fded7787407161454065669640..e6919c9a899d79cd8adceafb10f56d85f4eca339 100644 --- a/wizard/scop_deces_wizard.py +++ b/wizard/scop_deces_wizard.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -58,8 +58,10 @@ class ScopDecesWizard(models.TransientModel): ) else: raise ValidationError( - "La date de fin doit être postèrieure à la date de " - + "début de la dernière période: " + _( + "La date de fin doit être postèrieure à la date de " + + "début de la dernière période: " + ) + str(last_period.start) ) @@ -88,8 +90,8 @@ class ScopDecesWizard(models.TransientModel): ] ) for adh in adh_period: - if adh.end == False: + if not adh.end: adh.write({"end": period.end, "end_reason_id": motif.id}) else: - raise ValidationError("Il n'existe pas de période à fermer.") + raise ValidationError(_("Il n'existe pas de période à fermer.")) diff --git a/wizard/scop_membership_out_wizard.py b/wizard/scop_membership_out_wizard.py index bdc6affcfccc0588aa7d924870f17111970da655..41e774fe9919cffe297a37e475b6de5fc6bfe393 100644 --- a/wizard/scop_membership_out_wizard.py +++ b/wizard/scop_membership_out_wizard.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -87,11 +87,15 @@ class ScopMembershipOutWizard(models.TransientModel): ) else: raise ValidationError( - "La date de fin doit être postèrieure à la date de " - + "début de la dernière période: " + _( + "La date de fin doit être postèrieure à la date de " + + "début de la dernière période: " + ) + str(last_period.start) ) else: - raise ValidationError("Il n'existe pas de période avec ce type à fermer.") + raise ValidationError( + _("Il n'existe pas de période avec ce type à fermer.") + ) return diff --git a/wizard/scop_membership_period_wizard.py b/wizard/scop_membership_period_wizard.py index b3b3e5ee532a3b1007bff03612a615256651ac92..91a9cf5ed8ac4631236a5ae1dc8daf4895e343a0 100644 --- a/wizard/scop_membership_period_wizard.py +++ b/wizard/scop_membership_period_wizard.py @@ -1,7 +1,7 @@ # © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import api, fields, models +from odoo import _, api, fields, models from odoo.exceptions import ValidationError @@ -39,7 +39,9 @@ class ScopMembershipPeriodWizard(models.TransientModel): ], limit=1, ): - raise ValidationError("Une période d'adhésion existe déjà pour ce type") + raise ValidationError( + _("Une période d'adhésion existe déjà pour ce type") + ) else: self.env["scop.membership.period"].create( { diff --git a/wizard/scop_period_wizard.py b/wizard/scop_period_wizard.py index 40eb46c628a6b75a5d2e33a22c8f96d296e9212c..6496e49705f23c34ed3891ea60e744e4e002941a 100644 --- a/wizard/scop_period_wizard.py +++ b/wizard/scop_period_wizard.py @@ -247,16 +247,6 @@ class ScopPeriodWizard(models.TransientModel): period_values.update(values) self.env["scop.period"].create(period_values) - # Gestion du cas des non coopératives adhérentes - # HS le 14/06/2021, on ne remet pas à blanc les champs liés à la vie coopérative de la société - # non_coop = self.env.ref('cgscop_partner.form_noncooperative') - # if period.cooperative_form_id == non_coop: - # partner_values.update({ - # 'creation_origin_id': None, - # 'date_1st_sign': None, - # 'first_closeout': None - # }) - # Update partner partner_values.update(values)