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
"""
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)
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._get_invoice_adhesion()
if not invoice_adhesion:
raise UserError(
"Pas de facture associée à cette adhésion !"
)
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
83
84
85
86
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)
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()
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
# Email
def get_recipients_adhesion(self):
"""
Get recipients for email adhesion
:return:
"""
recipient_ids = self.director_ids or self
res = ','.join(map(lambda x: str(x), recipient_ids.ids))
return res
@api.multi
def send_mail_adhesion(self):
"""
Send mail adhésion to coop
:return:
"""
self.ensure_one()
template_id = self.env.ref(
'cgscop_alfresco_adhesion.email_template_adhesion')
ir_model_data = self.env['ir.model.data']
try:
compose_form_id = ir_model_data.get_object_reference(
'mail', 'email_compose_message_wizard_form')[1]
except ValueError:
compose_form_id = False
ctx = {
'default_model': 'res.partner',
'default_res_id': self.id,
'default_use_template': True,
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
'default_template_id': template_id.id,
'default_composition_mode': 'comment',
}
return {
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'form',
'res_model': 'mail.compose.message',
'views': [(compose_form_id, 'form')],
'view_id': compose_form_id,
'target': 'new',
'context': ctx,
}
# ------------------------------------------------------
# Override Alfodoo
# ------------------------------------------------------
def _get_invoice_adhesion(self):
"""
:return: Dernière facture de la coop avec article adhésion
"""
invoice = False
invoice_line_ids = self.env['account.invoice.line'].search([
('partner_id', '=', self.id),
('product_id', '=', self.env.user.company_id.product_adhesion_id.id),
])
if invoice_line_ids:
invoice_ids = invoice_line_ids.mapped('invoice_id')
if invoice_ids:
invoice = invoice_ids.sorted(key='create_date')[-1]
return invoice
# ------------------------------------------------------
# Override Alfodoo
# ------------------------------------------------------
def _create_folder_adhesion(self, backend):
"""
Récupère ou crée le répertoire Adhésions s'il n'existe pas
: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_button(self):
"""
Inherit button to send mail
"""
super(ScopAlfrescoAdhesionPartner, self).scop_valid_cg_button()
@api.multi
def scop_valid_cg(self):
"""
Inherit function to :
- generate files on Alfresco
"""
super(ScopAlfrescoAdhesionPartner, self).scop_valid_cg()
self.generate_alfresco_file()
@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()