# © 2019 Le Filament (<http://www.le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

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')

    # ------------------------------------------------------
    # Override ORM
    # ------------------------------------------------------
    @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)
            return super(AlfrescoPartner, self).unlink()