Skip to content
Extraits de code Groupes Projets
res_partner.py 4,69 ko
Newer Older
  • Learn to ignore specific revisions
  • # © 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'
    
    Benjamin's avatar
    Benjamin a validé
        _inherit = ['res.partner', 'cgscop.alfresco']
    
    
        id_alfresco = fields.Char('ID Dossier Alfresco')
    
    
        # ------------------------------------------------------
        # Fonctions héritées
        # ------------------------------------------------------
        @api.model
        def create(self, vals):
            """ Crée automatiquement un répertoire Alfresco
            lors de la création d'un organisme
            """
            partner = super(AlfrescoPartner, self).create(vals)
            if partner.is_cooperative and not partner.id_alfresco:
                id_alfresco = self.alfresco_create_organism(partner)
                partner.write({
                    'id_alfresco': id_alfresco,
                })
            return partner
    
        @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)
                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]])
            for partner in partners:
                id_alfresco = partner.alfresco_create_organism(partner)
                partner.write({
                    'id_alfresco': id_alfresco,
                })