Newer
Older
# © 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)
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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)
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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):
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
"""
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([
('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()