diff --git a/models/res_partner.py b/models/res_partner.py index 361280c6cdd286310f346890130fa739c7822ce2..4604a60007d28800b9a9105df83b13931598fdf7 100644 --- a/models/res_partner.py +++ b/models/res_partner.py @@ -3,7 +3,8 @@ from pytz import timezone -from odoo import fields, models +from odoo import _, fields, models +from odoo.exceptions import UserError class ScopAlfrescoAdhesionPartner(models.Model): @@ -90,20 +91,67 @@ class ScopAlfrescoAdhesionPartner(models.Model): # ------------------------------------------------------ # Business method # ------------------------------------------------------ - def get_compulsory_docs(self): + def get_compulsory_docs(self, type_process): domain = [ ("coop_type_id", "=", self.cooperative_form_id.id), ("is_compulsory", "=", True), + ("type_process", "=", type_process), ] - # Si la coop est en projet de création - if self.project_status == "3_accompagnement": - domain += [("type_process", "=", "project")] - # Si la coop est en phase d'adhésion - if self.membership_status == "adhesion": - domain += [("type_process", "=", "adhesion")] return self.env["scop.adhesion.file"].search(domain) + def scop_check_docs(self, type_process, error_type=""): + """ + Return error message for mandatory documents + :param str type_process: scop.adhesion.file type_process + :param str error_type: scop.adhesion.file type_process + """ + errors = str() + compulsory_docs = self.get_compulsory_docs(type_process) + loaded_docs = self.compulsory_doc_cmis_query() + + errors_complete_docs = self.check_compulsory_docs( + compulsory_docs, loaded_docs) + if errors_complete_docs: + errors_str = str() + for error in errors_complete_docs: + errors_str += "<li>" + error + "</li>" + errors += ( + "<hr/><strong>Documents manquants :</strong><ul>" + errors_str + "</ul>" + ) + # Si des erreurs remplir les logs avec la liste des documents manquants + if errors: + local_tz = timezone("Europe/Paris") + utc_tz = timezone("UTC") + log_date = utc_tz.localize( + fields.Datetime.now()).astimezone(local_tz).strftime("%d/%m/%Y %-H:%M") + self.list_logs = "<strong>%s</strong> %s %s" % ( + log_date, error_type, errors + ) + else: + self.list_logs = False + + def check_compulsory_docs(self, compulsory_docs, loaded_docs): + """ + Override function to check docs with cmis query + :param obj compulsory_docs: scop.adhesion.file object + :param list loaded_docs: cmis query response + @returns list: list of missing mandatory documents + """ + errors = list() + + compulsory_docs_list = compulsory_docs.mapped( + lambda d: {"name": d.name, "metadata": d.type_doc} + ) + loaded_docs_list = list( + map(lambda d: d.properties.get("crm:type"), loaded_docs) + ) + for mandatory_doc in compulsory_docs_list: + if mandatory_doc.get("metadata") not in loaded_docs_list: + errors.append(mandatory_doc.get("name")) + + return errors + # ------------------------------------------------------ # Override parent # ------------------------------------------------------ @@ -172,23 +220,50 @@ class ScopAlfrescoAdhesionPartner(models.Model): return res - def check_compulsory_docs(self): + def scop_suivi_adhesion(self): """ - Override function to check docs with cmis query - :return: + Inherit parent to check documents """ - errors = list() - compulsory_docs = self.get_compulsory_docs() - loaded_docs = self.env["scop.adhesion.file"].compulsory_doc_cmis_query(self) + # vérification des documents obligatoires + self.scop_check_docs("project", "Impossible de créer la coopérative") - compulsory_docs_list = compulsory_docs.mapped( - lambda d: {"name": d.name, "metadata": d.type_doc} - ) - loaded_docs_list = list( - map(lambda d: d.properties.get("crm:type"), loaded_docs) + return super(ScopAlfrescoAdhesionPartner, self).scop_suivi_adhesion() + + def scop_sumbit_cg(self): + """ + Inherit parent to check documents + """ + res = super(ScopAlfrescoAdhesionPartner, self).scop_sumbit_cg() + # vérification des documents obligatoires + self.scop_check_docs( + "adhesion", "Impossible de transmettre le dossier d'adhésion" ) - for mandatory_doc in compulsory_docs_list: - if mandatory_doc.get("metadata") not in loaded_docs_list: - errors.append(mandatory_doc.get("name")) + return res - return errors + # ------------------------------------------------------ + # Alfresco method + # ------------------------------------------------------ + def compulsory_doc_cmis_query(self): + self.ensure_one() + backend = self.env["cmis.backend"].search([]) + backend.ensure_one() + cmis_client = backend.get_cmis_client() + query = ( + """ + SELECT * FROM crm:document as d + JOIN crm:organisme as o ON d.cmis:objectId = o.cmis:objectId + WHERE o.crm:id = '%s'""" + % self.id + ) + try: + doc = cmis_client.getDefaultRepository().query(query) + result = doc.getResults() + return result + except Exception as e: + raise UserError( + _( + "Impossible de vérifier les documents d'adhésion" + " dans Alfresco : %s" + ) + % e + ) diff --git a/models/scop_adhesion_file.py b/models/scop_adhesion_file.py index 3005cbe3dfc625fe9f06dc52ed4a1600b7b796ea..62fd4e2637d670a7f00b79197d09f6bb3b944590 100644 --- a/models/scop_adhesion_file.py +++ b/models/scop_adhesion_file.py @@ -1,7 +1,7 @@ # © 2021 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). -from odoo import _, exceptions, fields, models +from odoo import fields, models class ScopAdhesionFiles(models.Model): @@ -9,30 +9,3 @@ class ScopAdhesionFiles(models.Model): _description = "Documents pour adhésion des coops" type_doc = fields.Char("Méta : Type") - - # ------------------------------------------------------ - # Business method - # ------------------------------------------------------ - def compulsory_doc_cmis_query(self, partner): - backend = self.env["cmis.backend"].search([]) - backend.ensure_one() - cmis_client = backend.get_cmis_client() - query = ( - """ - SELECT * FROM crm:document as d - JOIN crm:organisme as o ON d.cmis:objectId = o.cmis:objectId - WHERE o.crm:id = '%s'""" - % partner.id - ) - try: - doc = cmis_client.getDefaultRepository().query(query) - result = doc.getResults() - return result - except Exception as e: - raise exceptions.UserError( - _( - "Impossible de vérifier les documents d'adhésion" - " dans Alfresco : %s" - ) - % e - )