Skip to content

Commit

Permalink
allow ; as separator
Browse files Browse the repository at this point in the history
  • Loading branch information
pauboixsom committed Feb 14, 2022
1 parent bc1f264 commit f7b1241
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 8 deletions.
73 changes: 73 additions & 0 deletions som_infoenergia/tests/test_wizards.py
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,79 @@ def test_create_enviaments_from_csv__massive_extra_info(self, mock_create):

wiz_obj.create_from_file(self.cursor, self.uid, [wiz_id], context=ctx)

mock_create.assert_called_with(self.cursor, self.uid, lot_enviament_id, [pol_id_2, pol_id_3],
{'from_model': 'polissa_id', 'extra_text': {'0002': {'k': '234', 'extra_info': 'Info 1'},
'0003': {'k': '213', 'extra_info': 'Info 2'}}})
wiz_info = wiz_obj.read(self.cursor, self.uid, [wiz_id], ['info'])[0]['info']
self.assertEqual(wiz_info, "Es crearan els enviaments de 2 pòlisses en segon pla")

@mock.patch('som_infoenergia.som_infoenergia_lot.SomInfoenergiaLotEnviament.create_enviaments_from_object_list')
def test_create_enviaments_from_csv__massive_extra_info_without_header(self, mock_create):
wiz_obj = self.openerp.pool.get('wizard.create.enviaments.from.csv')
imd_obj = self.openerp.pool.get('ir.model.data')
pol_obj = self.openerp.pool.get('giscedata.polissa')
lot_env_obj = self.openerp.pool.get('som.infoenergia.lot.enviament')
env_obj = self.openerp.pool.get('som.enviament.massiu')
lot_enviament_id = imd_obj.get_object_reference(
self.cursor, self.uid, 'som_infoenergia', 'lot_enviament_0002'
)[1]
pol_id_2 = imd_obj.get_object_reference(
self.cursor, self.uid, 'giscedata_polissa', 'polissa_0002'
)[1]
pol_id_3 = imd_obj.get_object_reference(
self.cursor, self.uid, 'giscedata_polissa', 'polissa_0003'
)[1]
pol_name_2 = pol_obj.read(self.cursor, self.uid, pol_id_2, ['name'])['name']
pol_name_3 = pol_obj.read(self.cursor, self.uid, pol_id_3, ['name'])['name']
csv_content = "{},Info 1,234\n{},Info 2,213".format(pol_name_2, pol_name_3)
encoded_csv = base64.b64encode(csv_content)
vals = {
'csv_file': encoded_csv,
}

ctx = {
'active_id': lot_enviament_id, 'active_ids': [lot_enviament_id],
}
wiz_id = wiz_obj.create(self.cursor, self.uid, vals, context=ctx)

wiz_obj.create_from_file(self.cursor, self.uid, [wiz_id], context=ctx)

mock_create.assert_called_with(self.cursor, self.uid, lot_enviament_id, [pol_id_2, pol_id_3],
{'from_model': 'polissa_id'})
wiz_info = wiz_obj.read(self.cursor, self.uid, [wiz_id], ['info'])[0]['info']
self.assertEqual(wiz_info, "Es crearan els enviaments de 2 pòlisses en segon pla")

@mock.patch('som_infoenergia.som_infoenergia_lot.SomInfoenergiaLotEnviament.create_enviaments_from_object_list')
def test_create_enviaments_from_csv__massive_extra_info_with_semicolon(self, mock_create):
wiz_obj = self.openerp.pool.get('wizard.create.enviaments.from.csv')
imd_obj = self.openerp.pool.get('ir.model.data')
pol_obj = self.openerp.pool.get('giscedata.polissa')
lot_env_obj = self.openerp.pool.get('som.infoenergia.lot.enviament')
env_obj = self.openerp.pool.get('som.enviament.massiu')
lot_enviament_id = imd_obj.get_object_reference(
self.cursor, self.uid, 'som_infoenergia', 'lot_enviament_0002'
)[1]
pol_id_2 = imd_obj.get_object_reference(
self.cursor, self.uid, 'giscedata_polissa', 'polissa_0002'
)[1]
pol_id_3 = imd_obj.get_object_reference(
self.cursor, self.uid, 'giscedata_polissa', 'polissa_0003'
)[1]
pol_name_2 = pol_obj.read(self.cursor, self.uid, pol_id_2, ['name'])['name']
pol_name_3 = pol_obj.read(self.cursor, self.uid, pol_id_3, ['name'])['name']
csv_content = "polissa;extra_info;k\n{};Info 1;234\n{};Info 2;213".format(pol_name_2, pol_name_3)
encoded_csv = base64.b64encode(csv_content)
vals = {
'csv_file': encoded_csv,
}

ctx = {
'active_id': lot_enviament_id, 'active_ids': [lot_enviament_id],
}
wiz_id = wiz_obj.create(self.cursor, self.uid, vals, context=ctx)

wiz_obj.create_from_file(self.cursor, self.uid, [wiz_id], context=ctx)

mock_create.assert_called_with(self.cursor, self.uid, lot_enviament_id, [pol_id_2, pol_id_3],
{'from_model': 'polissa_id', 'extra_text': {'0002': {'k': '234', 'extra_info': 'Info 1'},
'0003': {'k': '213', 'extra_info': 'Info 2'}}})
Expand Down
23 changes: 15 additions & 8 deletions som_infoenergia/wizard/wizard_create_enviaments_from_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
class WizardCancelFromCSV(osv.osv_memory):
_name = 'wizard.create.enviaments.from.csv'
_columns = {
'name': fields.char('Filename', size=256),
'csv_file': fields.binary('CSV File', required=True, help=_(u"Número de pòlissa de les pòlisses de les quals se'n vol crear un enviament")),
'name': fields.char(_(u'Nom del fitxer'), size=256),
'csv_file': fields.binary(_(u'Fitxer CSV'), required=True, help=_(u"Número de pòlissa de les pòlisses de les quals se'n vol crear un enviament")),
'state': fields.selection(STATES, _(u'Estat del wizard de crear enviaments des de CSV')),
'info': fields.text(_('Informació'), help=_(u"Només es creen enviaments de pòlisses Activa=Si"), size=256, readonly=True),
'info': fields.text(_(u'Informació'), help=_(u"Només es creen enviaments de pòlisses Activa=Si"), size=256, readonly=True),
}
_defaults = {
'state': 'init',
Expand All @@ -36,29 +36,36 @@ def create_from_file(self, cursor, uid, ids, context=None):
linies= list(reader)
n_linies = len(linies)
start = 0
header = []
if n_linies>0 and not linies[0][0].isdigit():
header = linies[0]
if ';' in linies[0][0]:
header = linies[0][0].split(';')
else:
header = linies[0]
start=1

pol_list= []
result = {}
for line in linies[start:]:
if ';' in line[0]:
line = line[0].split(';')
pol_list.append(line[0])
if not header:
continue
i = 1
result_extra_info = {}
for column in line[1:]:
result_extra_info[header[i]] = column #TODO header without value
result_extra_info[header[i]] = column
i += 1
if result_extra_info:
result[line[0]] = result_extra_info
pol_list.append(line[0])
if result:
vals['extra_text'] = result
#pol_list = [pol for pol in result.keys()]

lot_id = context.get('active_id', [])
pol_ids = pol_obj.search(cursor, uid, [('name','in', pol_list)])
lot_obj.create_enviaments_from_object_list(cursor, uid, lot_id, pol_ids, vals)
msg = "Es crearan els enviaments de {} pòlisses en segon pla".format(len(pol_ids))
msg = _(u"Es crearan els enviaments de {} pòlisses en segon pla".format(len(pol_ids)))
wiz.write({'state': "finished", 'info': msg})
return True

Expand Down

0 comments on commit f7b1241

Please sign in to comment.