# © 2019 Le Filament (<http://www.le-filament.com>) # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). import dateutil.parser import pytz from odoo import models, fields, api ALFRESCO_TRACKED_FIELDS = ['name', 'id', 'siret', 'member_number'] class AlfrescoPartner(models.Model): _name = 'res.partner' _inherit = ['res.partner', 'cgscop.alfresco'] id_alfresco = fields.Char('ID Dossier Alfresco') # ------------------------------------------------------ # Fonctions héritées # ------------------------------------------------------ @api.multi def write(self, vals): """ Surcharge la fonction write() pour mettre à jour la raison sociale, le nom, le siret, l'id Odoo ou le num adhérent """ tracked_fields = self.fields_get(ALFRESCO_TRACKED_FIELDS) # Dict des valeurs initiales des champs présents dans TRACKED_FIELDS initial_values = dict( (record.id, dict( (key, getattr(record, key)) for key in tracked_fields)) for record in self.filtered('is_cooperative')) # Ecriture des nouvelles valeurs result = super(AlfrescoPartner, self).write(vals) # Dict des nouvelles valeurs new_values = dict( (record.id, dict( (key, getattr(record, key)) for key in tracked_fields)) for record in self.filtered('is_cooperative')) # Check des modifications sur les coopératives présentes dans RIGA for record in self: if record.is_cooperative and record.id_alfresco: if new_values[record.id] != initial_values[record.id]: self.alfresco_update_organism(record) return result @api.multi def unlink(self): for partner in self: if partner.id_alfresco: partner.alfresco_remove(partner.id_alfresco) # ------------------------------------------------------ # Fonction boutons # ------------------------------------------------------ def get_partner_files(self): """ Liste l'ensemble des fichiers pour un organisme La fonction fait appel à l'API Alfresco et enregistre le résultat dans un modèle Transient. L'ID user est ajouté à la table pour définir les requêtes propres à chaque user @return: ir.act.window """ if self.id_alfresco: files = self.alfresco_list_docs(self.id_alfresco).get('docs', '') else: self.id_alfresco = self.alfresco_create_organism(self) print(self.name) print(self.id_alfresco) files = self.alfresco_list_docs(self.id_alfresco).get('docs', '') uid = self.env.user.id alfresco_obj = self.env["alfresco.partner.files"] alfresco_obj.search([['user_id', '=', uid]]).unlink() for doc in files: alfresco_obj.create({ 'name': doc['name'], 'type': doc['type'], 'file_id': doc['nodeRef'].replace('workspace://SpacesStore/', ''), 'user_id': uid, 'periode': doc['periode'], 'validite': doc['validite'], 'last_modification': dateutil.parser.parse( doc['modifiedOn']).astimezone(pytz.utc), 'partner_id': self.id, }) return { "type": "ir.actions.act_window", "name": "Fichiers liés", "res_model": "alfresco.partner.files", "views": [[False, "tree"]], "search_view_id": self.env.ref( "cgscop_alfresco.alfresco_partner_files_search").id, 'context': {'search_default_group_periode': True} } # ------------------------------------------------------ # CRON # ------------------------------------------------------ def _init_alfresco_folder(self): """ Fonction pour le cron permettant de créer un dossier dans Alfresco pour l'ensemble des organismes qui n'ont pas de nodeRef """ partners = self.env['res.partner'].search([ ['is_cooperative', '=', True], ['id_alfresco', '=', False], ['membership_status', '=', "member"]]) for partner in partners: id_alfresco = partner.alfresco_create_organism(partner) partner.write({ 'id_alfresco': id_alfresco, })