From 0f6de68c68fc6ae67e19304b0f894fb3902dad8b Mon Sep 17 00:00:00 2001
From: benjamin <benjamin@le-filament.com>
Date: Wed, 21 Jul 2021 17:42:17 +0200
Subject: [PATCH] [update] alfresco errors on write & unlink

---
 models/res_partner.py | 41 ++++++++++++++++++++++++++++++-----------
 1 file changed, 30 insertions(+), 11 deletions(-)

diff --git a/models/res_partner.py b/models/res_partner.py
index 7bed4c5..4bfbf2e 100644
--- a/models/res_partner.py
+++ b/models/res_partner.py
@@ -1,9 +1,15 @@
 # Copyright 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
+import logging
+
 from odoo import api, models
-from odoo.exceptions import UserError
+from odoo.exceptions import UserError, ValidationError
 from odoo.addons.cmis_field import fields
+from cmislib.exceptions import ContentAlreadyExistsException, \
+    ObjectNotFoundException, UpdateConflictException, InvalidArgumentException
+
+_logger = logging.getLogger(__name__)
 
 ALFRESCO_TRACKED_FIELDS = ['name', 'id', 'siret', 'member_number', 'ur_id']
 
@@ -73,22 +79,35 @@ class AlfodooResPartner(models.Model):
         for record in self:
             if record.is_cooperative and record.partner_cmis_folder:
                 if is_alfresco_field:
-                    backend = self._fields['partner_cmis_folder']
-                    properties = self._get_folder_properties(
-                        record, backend).get(record.id)
-                    if vals.get('name', False):
-                        properties.update({'cmis:name': record.name})
-                    folder = backend.get_cmis_object(record)
-                    folder.updateProperties(properties)
+                    try:
+                        backend = self._fields['partner_cmis_folder']
+                        properties = self._get_folder_properties(
+                            record, backend).get(record.id)
+                        if vals.get('name', False):
+                            properties.update({'cmis:name': record.name})
+                        folder = backend.get_cmis_object(record)
+                        folder.updateProperties(properties)
+                    except (ContentAlreadyExistsException, ObjectNotFoundException,
+                            UpdateConflictException, InvalidArgumentException) as e:
+                        _logger.error(e)
+                        raise ValidationError("""Erreur de mise à jour Alfresco :
+                            - Code : %s
+                            - Url : %s
+                            - Détail : %s""" % (e.status, e.url, e.details))
+                    except Exception as e:
+                        raise ValidationError(e)
         return result
 
     @api.multi
     def unlink(self):
         for partner in self:
             if partner.partner_cmis_folder:
-                backend = self._fields['partner_cmis_folder']
-                folder = backend.get_cmis_object(partner)
-                folder.delete()
+                try:
+                    backend = self._fields['partner_cmis_folder']
+                    folder = backend.get_cmis_object(partner)
+                    folder.delete()
+                except Exception as e:
+                    _logger.error(e)
                 partner.partner_cmis_folder = False
 
         return super(AlfodooResPartner, self).unlink()
-- 
GitLab