Skip to content

Commit 50c0542

Browse files
authored
Merge pull request #62 from gisce/poweremail_certificat_multicompany
Adaptar poweremail_signaturit a refactor y a multicompany
2 parents 2823838 + b3ea7f6 commit 50c0542

File tree

5 files changed

+57
-44
lines changed

5 files changed

+57
-44
lines changed

poweremail_signaturit/__terp__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'base',
1010
'base_extended',
1111
'poweremail_certificat',
12+
'giscedata_signatura_documents_signaturit',
1213
],
1314
"init_xml": [],
1415
"demo_xml": [],

poweremail_signaturit/poweremail_core.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,37 @@ class PoweremailCore(osv.osv):
2222

2323
_inherit = 'poweremail.core_accounts'
2424

25+
def get_signaturit_client(self, cursor, uid, poweremail_account_id, context=None):
26+
"""
27+
:param cursor:
28+
:param uid:
29+
:param poweremail_account_id: ID de poweremail.core_accounts
30+
:param context:
31+
:return: Retorna les credencials de signaturit a utilitzar per enviar el poweremail_id. Per saber quines
32+
credencials utilitzar es revisa el compte de poweremail vinculat al poweremail_id i s'obté la seva compañia.
33+
Llavors es busca la conta de signaturit donada d'alta per aquella companyia.
34+
No pot haver-hi més de un compte per companyia, per tant nomes hauria de haer-hi un resultat.
35+
"""
36+
if isinstance(poweremail_account_id, (list, tuple)):
37+
poweremail_account_id = poweremail_account_id[0]
38+
# Compatibilitat enrera: si no existeix el model "giscedata.signature.provider.account" vol dir que el
39+
# refactor de Signaturit no està instalat al ERP, per tant continuarem funcionant com abans.
40+
refactor_signaturit_disponible = self.pool.get('giscedata.signature.provider.account')
41+
if refactor_signaturit_disponible and hasattr(refactor_signaturit_disponible, "get_client"):
42+
pro_obj = self.pool.get('giscedata.signatura.process')
43+
provider = "signaturit" # De moment nomes tenim emails certificats amb signaturit
44+
company_id = 1
45+
if 'company_id' in self._columns.keys():
46+
info = self.read(cursor, uid, poweremail_account_id, ['company_id'], context=context)
47+
if info['company_id']:
48+
company_id = info['company_id'][0]
49+
signature_account_id = pro_obj.get_signature_account_id(cursor, uid, company_id, provider, context=context)
50+
client = refactor_signaturit_disponible.get_client(cursor, uid, signature_account_id, context=context)
51+
else:
52+
# Legacy, quan tots els ERPs estiguin a la v25.9 es podrar eliminar
53+
client = get_signaturit_client()
54+
return client
55+
2556
def send_mail_certificat(self, cr, uid, ids, addresses, subject='', body=None, payload=None, context=None):
2657
"""
2758
:return: 'True' si s'ha pogut enviar el email, altrament un missatge de error
@@ -36,7 +67,7 @@ def parse_body_html(pem_body_html, pem_body_text):
3667
html = html.replace('\n', '<br/>')
3768
return html
3869

39-
client = get_signaturit_client()
70+
client = self.get_signaturit_client(cr, uid, ids, context=context)
4071
if body is None:
4172
body = {}
4273
if context is None:
@@ -125,7 +156,7 @@ def get_mail_audit_trail(self, cr, uid, ids, audit_trail_id, context=None):
125156
context = {}
126157

127158
res = False
128-
client = get_signaturit_client()
159+
client = self.get_signaturit_client(cr, uid, ids, context=context)
129160
mail_json = client.get_email(audit_trail_id)
130161
certificates = []
131162
if mail_json:

poweremail_signaturit/poweremail_mailbox.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ class PoweremailMailbox(osv.osv):
4141

4242
_inherit = 'poweremail.mailbox'
4343

44+
def get_signaturit_client(self, cursor, uid, pw_id, context=None):
45+
if isinstance(pw_id, (list, tuple)):
46+
pw_id = pw_id[0]
47+
pem_account_id = self.read(cursor, uid, pw_id, ['pem_account_id'], context=context)['pem_account_id'][0]
48+
return self.pool.get("poweremail.core_accounts").get_signaturit_client(cursor, uid, pem_account_id, context=context)
49+
4450
def update_poweremail_certificate(
4551
self, cursor, uid, pe_id, final_certificat_state, context=None):
4652
if context is None:
@@ -54,7 +60,7 @@ def update_poweremail_certificate(
5460
poweremail_info = cursor.dictfetchone()
5561
except LockNotAvailable:
5662
return False
57-
client = get_signaturit_client()
63+
client = self.get_signaturit_client(cursor, uid, pe_id, context=context)
5864
res = client.get_email(poweremail_info['certificat_signature_id'])
5965
if "id" not in res:
6066
return False

poweremail_signaturit/tests/__init__.py

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,11 @@
1414

1515
class TestPoweremailSignaturit(testing.OOTestCaseWithCursor):
1616

17-
signaturit_sandbox_token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
18-
19-
def get_sandbox_client(self):
20-
client = SignaturitClient(self.signaturit_sandbox_token, False)
21-
return client
22-
23-
def test_POST_email_simple(self):
24-
cursor = self.cursor
25-
uid = self.uid
26-
pool = self.openerp.pool
27-
#client = self.get_sandbox_client()
28-
29-
# He comentat el test per no fer una crida sempre que es facin els tests, pero ho deixo per veure com es pot cridar la api
30-
31-
# res = client.create_email(
32-
# files=[],
33-
# recipients=[{'name': 'Eduard', 'email': 'eberloso@gisce.net'}],
34-
# subject="Email Certificat Simple",
35-
# body="Aixo es un email <b>certificat</b>",
36-
# params={'type': "open_email"}
37-
# )
38-
# self.assertTrue(res['id'])
39-
# self.assertEqual(res['certificates'][0]['status'], u'in_queue')
40-
# self.assertEqual(res['certificates'][0]['name'], u'Eduard')
41-
# self.assertEqual(res['certificates'][0]['email'], u'eberloso@gisce.net')
42-
4317
@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.get_email")
44-
@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
45-
def test_update_poweremail_certificat_state(self, mocked_get_signaturit_client, mocked):
18+
def test_update_poweremail_certificat_state(self, mocked):
4619
cursor = self.cursor
4720
uid = self.uid
4821
pool = self.openerp.pool
49-
client = self.get_sandbox_client()
50-
config['signaturit_token'] = 'RANDOM_RANDOM'
51-
mocked_get_signaturit_client.return_value = client
5222

5323
poweracc_o = pool.get("poweremail.core_accounts")
5424
poweremail_o = pool.get("poweremail.mailbox")
@@ -108,17 +78,13 @@ def test_update_poweremail_certificat_state(self, mocked_get_signaturit_client,
10878
self.assertEqual(poweremail_o.read(cursor, uid, pwid, ['certificat_state'])['certificat_state'], "document_opened")
10979

11080
@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.create_email")
111-
@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
112-
def test_send_mail_certificat_fails_and_returns_false(self, mocked_get_signaturit_client, mock_create_email):
81+
def test_send_mail_certificat_fails_and_returns_false(self, mock_create_email):
11382
cursor = self.cursor
11483
uid = self.uid
11584
pool = self.openerp.pool
11685
poweracc_o = pool.get("poweremail.core_accounts")
11786
poweremail_o = pool.get("poweremail.mailbox")
11887

119-
client = self.get_sandbox_client()
120-
mocked_get_signaturit_client.return_value = client
121-
12288
ids = [
12389
poweracc_o.create(cursor, uid, {
12490
'email_id': "algunmail@gisce.net",
@@ -148,20 +114,18 @@ def test_send_mail_certificat_fails_and_returns_false(self, mocked_get_signaturi
148114
)
149115
self.assertFalse(res)
150116

151-
@mock.patch("poweremail_signaturit.poweremail_core.get_signaturit_client")
152117
@mock.patch("signaturit_sdk.signaturit_client.SignaturitClient.create_email")
153-
def test_send_mail_certificat_ok_and_returns_true(self, mocked_create_email, mocked_get_signaturit_client):
118+
def test_send_mail_certificat_ok_and_returns_true(self, mocked_create_email):
154119
cursor = self.cursor
155120
uid = self.uid
156121
pool = self.openerp.pool
157122
poweracc_o = pool.get("poweremail.core_accounts")
158123
poweremail_o = pool.get("poweremail.mailbox")
159124

160-
client = self.get_sandbox_client()
161-
mocked_get_signaturit_client.return_value = client
162125
# Per evitar anar enviant emails, fem un mock id espres validem que es crida com esperem
163126
mocked_create_email.return_value = {'id': "123456789"}
164127

128+
compte_signaturit_company_1 = pool.get("ir.model.data").get_object_reference(cursor, uid, "giscedata_signatura_documents_signaturit", "giscedata_signature_provider_account_0001")[1]
165129
ids = [
166130
poweracc_o.create(cursor, uid, {
167131
'email_id': "algunmail@gisce.net",
@@ -195,3 +159,14 @@ def test_send_mail_certificat_ok_and_returns_true(self, mocked_create_email, moc
195159
body=body['html'],
196160
params={'type': "open_document", "recipients": {}}
197161
)
162+
# Si feia el mock de les dos coses alhora no ho sabia fer funcionar be perque un mock crida l'altre i es feia un lio
163+
with mock.patch('giscedata_signatura_documents_signaturit.giscedata_signature_providers.GiscedataSignatureProviderAccount.get_client') as mocked_get_client:
164+
poweracc_o.send_mail_certificat(
165+
cursor, uid, ids, addresses, subject=subject, body=body, payload=payload, context=context
166+
)
167+
mocked_get_client.assert_called_with(
168+
cursor,
169+
uid,
170+
compte_signaturit_company_1,
171+
context={'poweremail_id': pwid}
172+
)

poweremail_signaturit/tests/test_download_audit_trail.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def test_download_email_audit_trail(self):
2828
'poweremail_signaturit', 'tests', 'fixtures', 'test_certified_email_audit_trail.pdf'
2929
)
3030
fake_certificate = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
31-
with mock.patch('poweremail_signaturit.poweremail_core.get_signaturit_client') as mock_client:
31+
with mock.patch('poweremail_signaturit.poweremail_core.PoweremailCore.get_signaturit_client') as mock_client:
3232
mock_client.return_value = mock.MagicMock()
3333
with open(file_path, 'rb') as f:
3434
mock_client.return_value.download_email_audit_trail.return_value = final_expected_file = f.read()

0 commit comments

Comments
 (0)