Skip to content
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
11 changes: 9 additions & 2 deletions dynamic_csv_importer/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,10 @@ Já na segunda tabela é onde será configurado os dados da importação.
Caso tenha selecionado um arquivo por engano, é possivel trocar o arquivo sem
ter que fechar e abrir o wizard novamente.

O campo **Criar objeto caso não for encontrado** é para casos onde não há registros
no sistema com os dados informados nas linhas selecionadas como **Identificador**.
Nesses casos, um registro será criado, com os atributos passados como identificadores.

### Tabela de Importação ###

Cada linha dessa tabela é uma coluna do arquivo .csv importado. Logo, se o arquivo
Expand Down Expand Up @@ -80,11 +84,14 @@ Exemplo:
Se a linha 'name' for selecionada como identificadora, na hora de importar, o
sistema irá procurar pro um registro do modelo selecionado que tenha o nome
igual ao valor passado no arquivo .csv.
Caso nenhum registro for encontrado, um registro será criado, com o atributo
passado como identificador.
**PS: É altamente recomendável selecionar a opção _Campo não nulo_ nesses campos!**
Isso porque não é possivel, e também faz pouco sentido atualizar/criar/identificar
qualquer objeto com valor nulo.

**Campo não nulo?**: As linhas que tiverem essa opção selecionada não poderão ter
valores vazios. Caso tenha, será mostrado na tela as linhas que tiveram problemas.
É altamente recomendado que selecione essa opção em linhas com informações importantes,
como linhas identificadoras.

**Criar caso não encontrar?**: Essa opção permite que o usuário crie um
registro com o valor passado caso ele não exista no sistema.
Expand Down
25 changes: 24 additions & 1 deletion dynamic_csv_importer/wizard/dynamic_csv_importer.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,19 @@ class DynamicCsvImport(models.TransientModel):
csv_quote_char = fields.Char(
string=u'Quotation Char', size=3, default='"')

table_html = fields.Html(readonly=True)
table_html = fields.Html(readonly="1")
coluna_ids = fields.One2many(
'dynamic.import.line', 'importer_id', string="Columns")

import_success = fields.Boolean(default=False)

create_if_not_found = fields.Boolean(
default=False, string="Create model object if not found?")

warnings = fields.Text(string='Warnings', readonly="1")

has_warning = fields.Boolean(default=False)

@api.onchange('csv_file', 'has_quote_char', 'csv_quote_char',
'model_id', 'csv_delimiter')
def _onchange_csv_file(self):
Expand Down Expand Up @@ -97,9 +104,12 @@ def action_import(self):
continue
lista.append((object_ids, vals, line))

# TODO: criar um arquivo .csv com as linhas que deram errado para
# facilitar o processo.
if errors:
raise UserError(errors)

warnings = ""
for item in lista:
object_ids = item[0]
vals = item[1]
Expand All @@ -108,6 +118,17 @@ def action_import(self):
for obj in object_ids:
obj.write(vals)
else:
if not self.create_if_not_found:
for ident_line in identification_lines:
if line[ident_line.name]:
warnings += ident_line.name + ': ' + \
line[ident_line.name] + _(' not found.\
Line ignored. \n')
else:
warnings += ident_line.name + _(' has no value.\
Line ignored. \n')
continue

ident_vals, error = self._prepare_vals(
line, identification_lines, obj_dict, has_match_obj=False)

Expand All @@ -127,6 +148,8 @@ def action_import(self):
raise UserError(res['messages'][0]['message'])
self.import_success = True

self.warnings = warnings

# Maintaining wizard open
return {
"type": "set_scrollTop",
Expand Down
4 changes: 4 additions & 0 deletions dynamic_csv_importer/wizard/dynamic_csv_importer_view.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
</group>
<group>
<field name="extra" />
<field name="create_if_not_found" />
</group>
</group>
<group attrs="{'invisible': ['|', ('extra', '=', False), ('import_success', '=', True)]}">
Expand Down Expand Up @@ -58,6 +59,9 @@
</div>
</div>
</group>
<group attrs="{'invisible': [('warnings', '=', False)]}">
<field name="warnings" />
</group>
<footer attrs="{'invisible': [('import_success', '=', True)]}">
<button name="action_import" string="Import" type="object" default_focus="1" class="oe_highlight"/>
<button string="Cancel" class="oe_link" special="cancel" />
Expand Down