Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nou assistent per reexportar casos swithing #520

Merged
merged 5 commits into from
Jan 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions som_switching/__terp__.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
'giscedata_atc_view.xml',
'wizard/giscedata_switching_wizard_b1.xml',
'wizard/wizard_close_obsolete_cases.xml',
'wizard/giscedata_switching_log_reexport_wizard_view.xml',
],
"active": False,
"installable": True
Expand Down
18 changes: 15 additions & 3 deletions som_switching/demo/som_switching_demo_data.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,25 @@
<field name="subtipus_id" eval="1"/>
<field name="reclamante">06</field>
<field name="agent_actual">06</field>
</record>
</record>
<record model="giscedata.switching" id="sw_001">
<field name="ref_contracte">Test</field>
<field name="data_sollicitud">2022-01-02</field>
<field name="proces_id" ref='giscedata_switching.sw_proces_r1' />
<field name="step_id" ref='giscedata_switching.sw_step_r1_01' />
<field name="company_id" ref="base.main_company"/>
</record>
</record>
<record id="base.res_partner_asus" model="res.partner">
<field name="ref">0001</field>
<field name="ref2">R1-001</field>
</record>
<record id="base.res_partner_agrolait" model="res.partner">
<field name="ref">0002</field>
<field name="ref2">R1-002</field>
</record>
<record id="base.main_partner" model="res.partner">
<field name="ref">0003</field>
<field name="ref2">R1-003</field>
</record>
</data>
</openerp>
</openerp>
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
import logging
from oopgrade.oopgrade import load_data


def up(cursor, installed_version):
if not installed_version:
return

logger = logging.getLogger('openerp.migration')

# UPATAR UN XML SENCER#
logger.info("Updating XML giscedata_switching_log_reexport_wizard_view.xml")
load_data(
cursor, 'som_switching', 'giscedata_switching_log_reexport_wizard_view.xml',
idref=None, mode='update'
)
logger.info("XMLs succesfully updated.")


def down(cursor, installed_version):
pass


migrate = up
3 changes: 2 additions & 1 deletion som_switching/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
from tests_wizard_switching_b1 import *
from tests_wizard_import_atr_and_f1 import *
from tests_unlink_atc import *
from tests_wizard_validate_d101 import *
from tests_wizard_validate_d101 import *
from tests_wizard_reexport_log import *
46 changes: 46 additions & 0 deletions som_switching/tests/tests_wizard_reexport_log.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-

from destral.transaction import Transaction
from giscedata_switching.tests.common_tests import TestSwitchingImport


class TestWizardReexportLog(TestSwitchingImport):

def setUp(self):
self.txn = Transaction().start(self.database)
self.cursor = self.txn.cursor
self.uid = self.txn.user
self.pool = self.openerp.pool
self.wiz_o = self.pool.get('wizard.giscedata.switching.log.reexport')

def tearDown(self):
self.txn.stop()

def test_wizard_reexport_files(self):
with Transaction().start(self.database) as txn:
self.switch(txn, 'comer', other_id_name='res_partner_asus')
uid = txn.user
cursor = txn.cursor
contract_id = self.get_contract_id(txn)
self.activar_polissa_CUPS(txn)
step_id = self.create_case_and_step(
cursor, uid, contract_id, 'C1', '01'
)
step_obj = self.openerp.pool.get('giscedata.switching.c1.01')
sw_obj = self.openerp.pool.get('giscedata.switching')
c101 = step_obj.browse(cursor, uid, step_id)
c1 = sw_obj.browse(cursor, uid, c101.sw_id.id)
log_obj = self.pool.get('giscedata.switching.log')
sw_obj.exportar_xml(cursor, uid, c1.id)
log_id = sorted(log_obj.search(
cursor, uid, [('request_code', '=', '202401160002')]))[-1]
log = log_obj.browse(cursor, uid, log_id)
log_obj.write(cursor, uid, [log_id], {'status': 'error'})
wiz_reexport_id = self.wiz_o.create(cursor, uid, {}, context={'active_ids': [log.id]})

self.wiz_o.reexport_files(cursor, uid, wiz_reexport_id,
context={'active_ids': [log.id]})

wiz = self.wiz_o.browse(cursor, uid, wiz_reexport_id)
self.assertEqual(wiz.state, 'end')
self.assertEqual(wiz.msg, "S'han processat 1 fitxers.\n")
3 changes: 2 additions & 1 deletion som_switching/wizard/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,5 @@
import giscedata_switching_wizard_b1
import wizard_import_atr_and_f1
import wizard_close_obsolete_cases
import wizard_validate_d101
import wizard_validate_d101
import giscedata_switching_log_reexport_wizard
113 changes: 113 additions & 0 deletions som_switching/wizard/giscedata_switching_log_reexport_wizard.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# -*- encoding: utf-8 -*-

from osv import osv, fields
from tools.translate import _
import os
from datetime import datetime
import zipfile
import base64


class WizardReexportLogAttachment(osv.osv_memory):
_name = 'wizard.giscedata.switching.log.reexport'

def _get_default_msg(self, cursor, uid, context=None):
if context is None:
context = {}
log_ids = context.get('active_ids', [])
return _(u"Es reexportaràn {} arxius".format(len(log_ids)))

def _create_working_directory(self, cursor, uid, ids, context=None):
"""
Creates the working directory and returns it's name
"""
temporal_folder_name = '/tmp/wizard_reexportar_log_{}'.format(
datetime.strftime(datetime.today(), '%Y%m%d%H%M%S.%f'))
os.makedirs(temporal_folder_name)
return temporal_folder_name

def _zip_xml_files(self, cursor, uid, ids, folder, generated_files):
zip_path = "{}/{}".format(folder, 'casos_exportats.zip')
with zipfile.ZipFile(zip_path, mode='w', compression=zipfile.ZIP_DEFLATED) as zf:
for file in generated_files:
zf.writestr(file[0], file[1])

return zip_path

def reexport_files(self, cursor, uid, ids, context=None):
if context is None:
context = {}
if not isinstance(ids, list):
ids = [ids]
wizard = self.browse(cursor, uid, ids[0], context=context)
log_ids = context.get('active_ids', False)

if not log_ids:
raise osv.except_osv('Error', _('No s\'han seleccionat ids'))
log_obj = self.pool.get('giscedata.switching.log')
sw_obj = self.pool.get('giscedata.switching')
step_obj = self.pool.get('giscedata.switching.step')
proces_obj = self.pool.get('giscedata.switching.proces')

context.update({
'update_logs': True
})
failed_files = []
log_vals = log_obj.read(cursor, uid, log_ids, [
'pas', 'proces', 'request_code', 'cups_text'])
generated_files = []
for log in log_vals:
sw_id = sw_obj.search(cursor, uid, [('codi_sollicitud', '=', log['request_code'])])
if not sw_id:
failed_files.append(
(log['cups_text'], ("No s'ha trobat un cas amb aquest codi de ",
"solicitud {}".format(log['request_code']))))
continue
proces_id = proces_obj.search(cursor, uid, [('name', '=', log['proces'])])
pas_obj = self.pool.get('giscedata.switching.{}.{}'.format(
log['proces'].lower(), log['pas']))
pas_id = pas_obj.search(cursor, uid, [('sw_id', '=', sw_id)])
try:
step_id = step_obj.search(cursor, uid,
[('name', '=', log['pas']),
('proces_id', '=', proces_id[0])])
xml = sw_obj.exportar_xml(
cursor, uid, sw_id[0], step_id[0], pas_id[0], context=context)
generated_files.append(xml)
except Exception as e:
e_string = str(e)
if not e_string:
e_string = e.value
failed_files.append((log['cups_text'], e_string))
info = _(u"S'han processat {} fitxers.\n".format(len(log_vals)))
if failed_files:
info += _(u"S'han produït els següents errors en els arxius exportats:\n")
for failed_f in failed_files:
info += _(u"\t- CUPS {} -> Error: {}\n".format(failed_f[0], failed_f[1]))

folder = self._create_working_directory(cursor, uid, ids)
zip_file = self._zip_xml_files(cursor, uid, ids, folder, generated_files)
f = open(zip_file, 'rb')
out = f.read()
f.close()

wizard.write({
'report': base64.encodestring(out),
'filename': zip_file.split('/')[-1],
})
wizard.write({'state': 'end', 'msg': info}, context=context)

_columns = {
'state': fields.selection([('init', 'Init'), ('end', 'End')], 'State'),
'msg': fields.text('Missatge'),
'report': fields.binary('Fichero a descargar'),
'filename': fields.char('Nombre fichero exportado', size=256),
}

_defaults = {
'state': lambda *a: 'init',
'msg': _get_default_msg,
}


WizardReexportLogAttachment()
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<record id="view_wizard_giscedata_switching_log_reexport_form" model="ir.ui.view">
<field name="name">wizard.giscedata.switching.log.reexport.form</field>
<field name="model">wizard.giscedata.switching.log.reexport</field>
<field name="type">form</field>
<field name="arch" type="xml">
<form string="Reexportar fitxers dels logs">
<field name="state" invisible="1"/>
<field name="filename" invisible="1"/>
<field name="msg" nolabel="1" readonly="1" height="200" width="800"/>
<group col="2" colspan="8" attrs="{'invisible': [('state', '!=', 'init')]}">
<button string="Cancel·lar" special="cancel" icon="gtk-close" colspan="1"/>
<button string="Reexportar fitxers" name="reexport_files" type="object" icon="gtk-go-forward" colspan="1" />
</group>
<group attrs="{'invisible': [('state', '=', 'init')]}">
<field name="report" width="200" filename="filename_report"/>
<button string="Tancar" special="cancel" icon="gtk-close" colspan="1"/>
</group>
</form>
</field>
</record>
<record id="action_wizard_giscedata_switching_log_reexport" model="ir.actions.act_window">
<field name="name">Reexportar fitxer adjunts</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">wizard.giscedata.switching.log.reexport</field>
<field name="view_type">form</field>
<field name="view_mode">form</field>
<field name="view_id" ref="view_wizard_giscedata_switching_log_reexport_form"/>
<field name="target">new</field>
</record>
<record id="value_wizard_giscedata_switching_log_reexport" model="ir.values">
<field name="object" eval="1"/>
<field name="name">Reexportar fitxers adjunts</field>
<field name="key2">client_action_multi</field>
<field name="key">action</field>
<field name="model">giscedata.switching.log</field>
<field name="value" eval="'ir.actions.act_window,'+str(ref('action_wizard_giscedata_switching_log_reexport'))" />
</record>
</data>
</openerp>