Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 10fe9f21df82150a2fc4cf15d47cb9e84b201c8c
  • 14.0 par défaut
  • 12.0 protégée
  • 13.0
4 résultats

scop_cotisation_cg.py

Blame
  • hr_expense.py 5,37 Kio
    # Copyright 2020 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, fields
    from odoo.exceptions import UserError, ValidationError
    from cmislib.exceptions import ContentAlreadyExistsException, \
        ObjectNotFoundException, UpdateConflictException, InvalidArgumentException
    
    _logger = logging.getLogger(__name__)
    
    ALFRESCO_TRACKED_FIELDS = ['type_convention_id', 'date', 'employee_id']
    
    
    class AdefpatHrExpense(models.Model):
        _inherit = 'hr.expense'
    
        proof_file = fields.Char("Justificatif")
        proof_file_timesheet = fields.Char("Justificatif", related='timesheet_id.proof_file')
    
        # ------------------------------------------------------
        # Override ORM
        # ------------------------------------------------------
        @api.multi
        def write(self, vals):
            """ Surcharge la fonction write() pour mettre à jour
            le type de convention, la date et l'utilisateur
            """
            # Ecriture des nouvelles valeurs
            result = super(AdefpatHrExpense, self).write(vals)
            change_fields = vals.keys()
            # check intersection
            is_alfresco_field = [
                value for value in change_fields if value in ALFRESCO_TRACKED_FIELDS]
    
            # Check des modifications sur les coopératives présentes dans RIGA
            for record in self:
                if record.proof_file:
                    if is_alfresco_field:
                        try:
                            properties = self.get_file_properties()
                            backend = self.env['cmis.backend'].search([], limit=1)
                            file = backend.get_cmis_repository().getObject(
                                self.proof_file
                            )
                            file.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 espense in self:
                if espense.proof_file:
                    raise UserError(
                        "Un document est attaché à cette note de frais, "
                        "veuillez le supprimer avant de supprimer la note de frais.")
            return super(AdefpatHrExpense, self).unlink()
    
        # ------------------------------------------------------
        # Button Function
        # ------------------------------------------------------
        @api.multi
        def get_content_details_url(self):
            # TODO: Refaire la fonction sans le type CMIS Folder
            """
            Ouvre une nouvelle fenêtre avec le fichier
            :return: ir.actions.act_url
            """
            backend = self.env['cmis.backend'].search([], limit=1)
            for expense in self:
                if expense.proof_file:
                    properties = backend.get_cmis_repository().getFolder(
                        expense.proof_file).getProperties()
                    url = backend.get_content_details_url_from_props(properties)
                    return {
                        'type': 'ir.actions.act_url',
                        'url': url,
                        'target': 'new',
                    }\
    
        @api.multi
        def get_content_details_url_timesheet(self):
            # TODO: Refaire la fonction sans le type CMIS Folder
            """
            Ouvre une nouvelle fenêtre avec le fichier
            :return: ir.actions.act_url
            """
            backend = self.env['cmis.backend'].search([], limit=1)
            for expense in self:
                if expense.proof_file_timesheet:
                    properties = backend.get_cmis_repository().getFolder(
                        expense.proof_file_timesheet).getProperties()
                    url = backend.get_content_details_url_from_props(properties)
                    return {
                        'type': 'ir.actions.act_url',
                        'url': url,
                        'target': 'new',
                    }
    
        def delete_file(self):
            backend = self.env['cmis.backend'].search([], limit=1)
            try:
                file = backend.get_cmis_repository().getObject(
                    self.proof_file
                )
                file.delete()
                self.proof_file = False
            except Exception as e:
                self.proof_file = False
                # raise UserError(json.loads(e.details).get('message'))
    
        # ------------------------------------------------------
        # Common Function
        # ------------------------------------------------------
        def get_file_properties(self):
            # TODO: Renvoyer les propriétés Alfresco
            """
            Ajoute les propriétés au dossier lors de la création dans Alfresco
            """
            return {
                'cmis:secondaryObjectTypeIds': ['P:adefpat:justificatif'],
                'adefpat:justificatifDate': fields.Datetime.to_datetime(self.date).isoformat(),
                'adefpat:justificatifTypeConvention': self.type_convention_id.name if self.type_convention_id.name else '',
                'adefpat:justificatifUtilisateurs': self.employee_id.user_id.login
            }