Skip to content

Commit ee991c0

Browse files
authored
Merge pull request #520 from Som-Energia/NEW_wizar_reexport_sw_log
Nou assistent per reexportar casos swithing
2 parents 580622a + 0e66455 commit ee991c0

8 files changed

+246
-5
lines changed

som_switching/__terp__.py

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
'giscedata_atc_view.xml',
4646
'wizard/giscedata_switching_wizard_b1.xml',
4747
'wizard/wizard_close_obsolete_cases.xml',
48+
'wizard/giscedata_switching_log_reexport_wizard_view.xml',
4849
],
4950
"active": False,
5051
"installable": True

som_switching/demo/som_switching_demo_data.xml

+15-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,25 @@
99
<field name="subtipus_id" eval="1"/>
1010
<field name="reclamante">06</field>
1111
<field name="agent_actual">06</field>
12-
</record>
12+
</record>
1313
<record model="giscedata.switching" id="sw_001">
1414
<field name="ref_contracte">Test</field>
1515
<field name="data_sollicitud">2022-01-02</field>
1616
<field name="proces_id" ref='giscedata_switching.sw_proces_r1' />
1717
<field name="step_id" ref='giscedata_switching.sw_step_r1_01' />
1818
<field name="company_id" ref="base.main_company"/>
19-
</record>
19+
</record>
20+
<record id="base.res_partner_asus" model="res.partner">
21+
<field name="ref">0001</field>
22+
<field name="ref2">R1-001</field>
23+
</record>
24+
<record id="base.res_partner_agrolait" model="res.partner">
25+
<field name="ref">0002</field>
26+
<field name="ref2">R1-002</field>
27+
</record>
28+
<record id="base.main_partner" model="res.partner">
29+
<field name="ref">0003</field>
30+
<field name="ref2">R1-003</field>
31+
</record>
2032
</data>
21-
</openerp>
33+
</openerp>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# -*- coding: utf-8 -*-
2+
import logging
3+
from oopgrade.oopgrade import load_data
4+
5+
6+
def up(cursor, installed_version):
7+
if not installed_version:
8+
return
9+
10+
logger = logging.getLogger('openerp.migration')
11+
12+
# UPATAR UN XML SENCER#
13+
logger.info("Updating XML giscedata_switching_log_reexport_wizard_view.xml")
14+
load_data(
15+
cursor, 'som_switching', 'giscedata_switching_log_reexport_wizard_view.xml',
16+
idref=None, mode='update'
17+
)
18+
logger.info("XMLs succesfully updated.")
19+
20+
21+
def down(cursor, installed_version):
22+
pass
23+
24+
25+
migrate = up

som_switching/tests/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@
88
from tests_wizard_switching_b1 import *
99
from tests_wizard_import_atr_and_f1 import *
1010
from tests_unlink_atc import *
11-
from tests_wizard_validate_d101 import *
11+
from tests_wizard_validate_d101 import *
12+
from tests_wizard_reexport_log import *
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- coding: utf-8 -*-
2+
3+
from destral.transaction import Transaction
4+
from giscedata_switching.tests.common_tests import TestSwitchingImport
5+
6+
7+
class TestWizardReexportLog(TestSwitchingImport):
8+
9+
def setUp(self):
10+
self.txn = Transaction().start(self.database)
11+
self.cursor = self.txn.cursor
12+
self.uid = self.txn.user
13+
self.pool = self.openerp.pool
14+
self.wiz_o = self.pool.get('wizard.giscedata.switching.log.reexport')
15+
16+
def tearDown(self):
17+
self.txn.stop()
18+
19+
def test_wizard_reexport_files(self):
20+
with Transaction().start(self.database) as txn:
21+
self.switch(txn, 'comer', other_id_name='res_partner_asus')
22+
uid = txn.user
23+
cursor = txn.cursor
24+
contract_id = self.get_contract_id(txn)
25+
self.activar_polissa_CUPS(txn)
26+
step_id = self.create_case_and_step(
27+
cursor, uid, contract_id, 'C1', '01'
28+
)
29+
step_obj = self.openerp.pool.get('giscedata.switching.c1.01')
30+
sw_obj = self.openerp.pool.get('giscedata.switching')
31+
c101 = step_obj.browse(cursor, uid, step_id)
32+
c1 = sw_obj.browse(cursor, uid, c101.sw_id.id)
33+
log_obj = self.pool.get('giscedata.switching.log')
34+
sw_obj.exportar_xml(cursor, uid, c1.id)
35+
log_id = sorted(log_obj.search(
36+
cursor, uid, [('request_code', '=', '202401160002')]))[-1]
37+
log = log_obj.browse(cursor, uid, log_id)
38+
log_obj.write(cursor, uid, [log_id], {'status': 'error'})
39+
wiz_reexport_id = self.wiz_o.create(cursor, uid, {}, context={'active_ids': [log.id]})
40+
41+
self.wiz_o.reexport_files(cursor, uid, wiz_reexport_id,
42+
context={'active_ids': [log.id]})
43+
44+
wiz = self.wiz_o.browse(cursor, uid, wiz_reexport_id)
45+
self.assertEqual(wiz.state, 'end')
46+
self.assertEqual(wiz.msg, "S'han processat 1 fitxers.\n")

som_switching/wizard/__init__.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@
1010
import giscedata_switching_wizard_b1
1111
import wizard_import_atr_and_f1
1212
import wizard_close_obsolete_cases
13-
import wizard_validate_d101
13+
import wizard_validate_d101
14+
import giscedata_switching_log_reexport_wizard
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# -*- encoding: utf-8 -*-
2+
3+
from osv import osv, fields
4+
from tools.translate import _
5+
import os
6+
from datetime import datetime
7+
import zipfile
8+
import base64
9+
10+
11+
class WizardReexportLogAttachment(osv.osv_memory):
12+
_name = 'wizard.giscedata.switching.log.reexport'
13+
14+
def _get_default_msg(self, cursor, uid, context=None):
15+
if context is None:
16+
context = {}
17+
log_ids = context.get('active_ids', [])
18+
return _(u"Es reexportaràn {} arxius".format(len(log_ids)))
19+
20+
def _create_working_directory(self, cursor, uid, ids, context=None):
21+
"""
22+
Creates the working directory and returns it's name
23+
"""
24+
temporal_folder_name = '/tmp/wizard_reexportar_log_{}'.format(
25+
datetime.strftime(datetime.today(), '%Y%m%d%H%M%S.%f'))
26+
os.makedirs(temporal_folder_name)
27+
return temporal_folder_name
28+
29+
def _zip_xml_files(self, cursor, uid, ids, folder, generated_files):
30+
zip_path = "{}/{}".format(folder, 'casos_exportats.zip')
31+
with zipfile.ZipFile(zip_path, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
32+
for file in generated_files:
33+
zf.writestr(file[0], file[1])
34+
35+
return zip_path
36+
37+
def reexport_files(self, cursor, uid, ids, context=None):
38+
if context is None:
39+
context = {}
40+
if not isinstance(ids, list):
41+
ids = [ids]
42+
wizard = self.browse(cursor, uid, ids[0], context=context)
43+
log_ids = context.get('active_ids', False)
44+
45+
if not log_ids:
46+
raise osv.except_osv('Error', _('No s\'han seleccionat ids'))
47+
log_obj = self.pool.get('giscedata.switching.log')
48+
sw_obj = self.pool.get('giscedata.switching')
49+
step_obj = self.pool.get('giscedata.switching.step')
50+
proces_obj = self.pool.get('giscedata.switching.proces')
51+
52+
context.update({
53+
'update_logs': True
54+
})
55+
failed_files = []
56+
log_vals = log_obj.read(cursor, uid, log_ids, [
57+
'pas', 'proces', 'request_code', 'cups_text'])
58+
generated_files = []
59+
for log in log_vals:
60+
sw_id = sw_obj.search(cursor, uid, [('codi_sollicitud', '=', log['request_code'])])
61+
if not sw_id:
62+
failed_files.append(
63+
(log['cups_text'], ("No s'ha trobat un cas amb aquest codi de ",
64+
"solicitud {}".format(log['request_code']))))
65+
continue
66+
proces_id = proces_obj.search(cursor, uid, [('name', '=', log['proces'])])
67+
pas_obj = self.pool.get('giscedata.switching.{}.{}'.format(
68+
log['proces'].lower(), log['pas']))
69+
pas_id = pas_obj.search(cursor, uid, [('sw_id', '=', sw_id)])
70+
try:
71+
step_id = step_obj.search(cursor, uid,
72+
[('name', '=', log['pas']),
73+
('proces_id', '=', proces_id[0])])
74+
xml = sw_obj.exportar_xml(
75+
cursor, uid, sw_id[0], step_id[0], pas_id[0], context=context)
76+
generated_files.append(xml)
77+
except Exception as e:
78+
e_string = str(e)
79+
if not e_string:
80+
e_string = e.value
81+
failed_files.append((log['cups_text'], e_string))
82+
info = _(u"S'han processat {} fitxers.\n".format(len(log_vals)))
83+
if failed_files:
84+
info += _(u"S'han produït els següents errors en els arxius exportats:\n")
85+
for failed_f in failed_files:
86+
info += _(u"\t- CUPS {} -> Error: {}\n".format(failed_f[0], failed_f[1]))
87+
88+
folder = self._create_working_directory(cursor, uid, ids)
89+
zip_file = self._zip_xml_files(cursor, uid, ids, folder, generated_files)
90+
f = open(zip_file, 'rb')
91+
out = f.read()
92+
f.close()
93+
94+
wizard.write({
95+
'report': base64.encodestring(out),
96+
'filename': zip_file.split('/')[-1],
97+
})
98+
wizard.write({'state': 'end', 'msg': info}, context=context)
99+
100+
_columns = {
101+
'state': fields.selection([('init', 'Init'), ('end', 'End')], 'State'),
102+
'msg': fields.text('Missatge'),
103+
'report': fields.binary('Fichero a descargar'),
104+
'filename': fields.char('Nombre fichero exportado', size=256),
105+
}
106+
107+
_defaults = {
108+
'state': lambda *a: 'init',
109+
'msg': _get_default_msg,
110+
}
111+
112+
113+
WizardReexportLogAttachment()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<openerp>
3+
<data>
4+
<record id="view_wizard_giscedata_switching_log_reexport_form" model="ir.ui.view">
5+
<field name="name">wizard.giscedata.switching.log.reexport.form</field>
6+
<field name="model">wizard.giscedata.switching.log.reexport</field>
7+
<field name="type">form</field>
8+
<field name="arch" type="xml">
9+
<form string="Reexportar fitxers dels logs">
10+
<field name="state" invisible="1"/>
11+
<field name="filename" invisible="1"/>
12+
<field name="msg" nolabel="1" readonly="1" height="200" width="800"/>
13+
<group col="2" colspan="8" attrs="{'invisible': [('state', '!=', 'init')]}">
14+
<button string="Cancel·lar" special="cancel" icon="gtk-close" colspan="1"/>
15+
<button string="Reexportar fitxers" name="reexport_files" type="object" icon="gtk-go-forward" colspan="1" />
16+
</group>
17+
<group attrs="{'invisible': [('state', '=', 'init')]}">
18+
<field name="report" width="200" filename="filename_report"/>
19+
<button string="Tancar" special="cancel" icon="gtk-close" colspan="1"/>
20+
</group>
21+
</form>
22+
</field>
23+
</record>
24+
<record id="action_wizard_giscedata_switching_log_reexport" model="ir.actions.act_window">
25+
<field name="name">Reexportar fitxer adjunts</field>
26+
<field name="type">ir.actions.act_window</field>
27+
<field name="res_model">wizard.giscedata.switching.log.reexport</field>
28+
<field name="view_type">form</field>
29+
<field name="view_mode">form</field>
30+
<field name="view_id" ref="view_wizard_giscedata_switching_log_reexport_form"/>
31+
<field name="target">new</field>
32+
</record>
33+
<record id="value_wizard_giscedata_switching_log_reexport" model="ir.values">
34+
<field name="object" eval="1"/>
35+
<field name="name">Reexportar fitxers adjunts</field>
36+
<field name="key2">client_action_multi</field>
37+
<field name="key">action</field>
38+
<field name="model">giscedata.switching.log</field>
39+
<field name="value" eval="'ir.actions.act_window,'+str(ref('action_wizard_giscedata_switching_log_reexport'))" />
40+
</record>
41+
</data>
42+
</openerp>

0 commit comments

Comments
 (0)