Skip to content
Snippets Groups Projects
res_partner.py 5.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • jordan's avatar
    jordan committed
    # © 2021 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    import base64
    
    from odoo import models, api
    from odoo import fields as odooFields
    from odoo.addons.cmis_field import fields
    from odoo.exceptions import UserError
    
    
    class ScopAlfrescoAdhesionPartner(models.Model):
        _inherit = 'res.partner'
    
        alfresco_invoice_adhesion_file = odooFields.Char("Facture d'adhésion")
        alfresco_report_adhesion_file = odooFields.Char("Courrier d'adhésion")
        adhesion_cmis_folder = fields.CmisFolder(
            allow_create=True,
            allow_delete=False,
        )
    
        # ------------------------------------------------------
        # Actions
        # ------------------------------------------------------
        @api.multi
        def generate_alfresco_file(self, invoice_id):
            """
                Ajoute un fichier sur la GED Alfresco
                @return: fonction get_partner_files() de res.partner
            """
            # Get proof folder nodeRef
            backend = self.env['cmis.backend'].search([], limit=1)
    
            # Create folder adhesion if needed
    
            self._create_folder_adhesion(backend)
    
    jordan's avatar
    jordan committed
            path_proj = backend.get_cmis_repository(). \
                getFolder(self.adhesion_cmis_folder).getPaths()
    
            path_n0 = path_proj
            path = '/'.join(path_n0)
            cmis_obj = backend.get_folder_by_path(path)
    
            ###
            # Invoice adhesion attachment
            invoice_adhesion = self.env['account.invoice'].browse(invoice_id)
            invoice_adhesion = self.env.ref('account.account_invoices').\
                render_qweb_pdf(invoice_adhesion.id)[0]
            invoice_adhesion = base64.b64encode(invoice_adhesion)
    
            name = 'Facture adhésion'
    
            invoice_adhesion_attachment = self.env['ir.attachment'].create({
                'name': name,
                'type': 'binary',
                'datas': invoice_adhesion,
                'datas_fname': name + '.pdf',
                'store_fname': name,
                'res_model': self._name,
                'res_id': self.id,
                'mimetype': 'application/pdf'
            })
            if not invoice_adhesion_attachment:
                raise UserError(
                    "Erreur lors de la génération de la facture pour Alfresco")
    
            content_type = invoice_adhesion_attachment.mimetype
    
            file_invoice_adhesion = cmis_obj.createDocument(
                name=invoice_adhesion_attachment.name,
                properties={},
                contentFile=base64.b64decode(invoice_adhesion_attachment.datas),
                contentType=content_type
            )
            self.alfresco_invoice_adhesion_file = \
                file_invoice_adhesion.getObjectId()
    
            ###
            # Report adhesion attachment
            report_adhesion = self.env.ref(
                'cgscop_adhesion.cgscop_adhesion_report'). \
                render_qweb_pdf(self.id)[0]
            report_adhesion = base64.b64encode(report_adhesion)
    
    
            name = "Courrier ahdésion"
    
    jordan's avatar
    jordan committed
    
            report_adhesion_attachment = self.env['ir.attachment'].create({
                'name': name,
                'type': 'binary',
                'datas': report_adhesion,
                'datas_fname': name + '.pdf',
                'store_fname': name,
                'res_model': self._name,
                'res_id': self.id,
                'mimetype': 'application/pdf'
            })
            if not report_adhesion_attachment:
                raise UserError(
                    "Erreur lors de la génération du courrier d'adhésion "
                    "pour Alfresco")
    
            content_type = report_adhesion_attachment.mimetype
    
            file_report_adhesion = cmis_obj.createDocument(
                name=report_adhesion_attachment.name,
                properties={},
                contentFile=base64.b64decode(report_adhesion_attachment.datas),
                contentType=content_type
            )
            self.alfresco_report_adhesion_file = \
                file_report_adhesion.getObjectId()
    
        # ------------------------------------------------------
        # Override Alfodoo
        # ------------------------------------------------------
    
        def _create_folder_adhesion(self, backend):
    
    jordan's avatar
    jordan committed
            """
            Récupère ou crée le répertoire Adhésions s'il n'existe pas
            :param records: lm records
            :param backend: lm backend
            :return: lm_cmis_folder objectId
            """
            # Check de si le répertoire existe
            for partner in self:
                # Si le répertoire parent n'existe pas on le crée
                if not partner.partner_cmis_folder:
                    partner.create_cmis_folder()
                # Récupération du path parent
                parent_path = backend.get_cmis_repository().\
                    getFolder(partner.partner_cmis_folder).getPaths()
                path_parts = parent_path + ['Adhésion']
                path = '/'.join(path_parts)
                # Création ou récupération du répertoire partner
                partner.adhesion_cmis_folder = backend.get_folder_by_path(path)
    
        # ------------------------------------------------------
        # Override parent
        # ------------------------------------------------------
        @api.multi
        def scop_valid_cg(self):
            """
            Inherit function to :
            - generate files on Alfresco
            """
            res = super(ScopAlfrescoAdhesionPartner, self).scop_valid_cg()
            invoice_adhesion_id = res['invoice_adhesion']
            self.generate_alfresco_file(invoice_adhesion_id.id)
            return res
    
    
        @api.multi
        def check_compulsory_docs(self):
            """
            Override function to check docs with cmis query
            :return:
            """
            errors = ''
            compulsory_docs = self.env['scop.adhesion.file'].search([
    
    jordan's avatar
    jordan committed
                ('coop_type_id', '=', self.cooperative_form_id.id),
    
                ('is_compulsory', '=', True)
            ])
            loaded_docs = self.env['scop.adhesion.file'].\
                compulsory_doc_cmis_query(self)
            # TODO : Check diff between compulsory docs and loaded docs
            if errors:
                res = '---\n Documents manquants :\n' + errors
                return res
            else:
                return str()