diff --git a/dynamic_csv_importer/README.md b/dynamic_csv_importer/README.md
index b2384363..fe046dd5 100644
--- a/dynamic_csv_importer/README.md
+++ b/dynamic_csv_importer/README.md
@@ -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
@@ -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.
diff --git a/dynamic_csv_importer/wizard/dynamic_csv_importer.py b/dynamic_csv_importer/wizard/dynamic_csv_importer.py
index 4bf4b4db..322c7c80 100644
--- a/dynamic_csv_importer/wizard/dynamic_csv_importer.py
+++ b/dynamic_csv_importer/wizard/dynamic_csv_importer.py
@@ -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):
@@ -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]
@@ -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)
@@ -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",
diff --git a/dynamic_csv_importer/wizard/dynamic_csv_importer_view.xml b/dynamic_csv_importer/wizard/dynamic_csv_importer_view.xml
index 1421454b..c5e10fe2 100644
--- a/dynamic_csv_importer/wizard/dynamic_csv_importer_view.xml
+++ b/dynamic_csv_importer/wizard/dynamic_csv_importer_view.xml
@@ -13,6 +13,7 @@
+
@@ -58,6 +59,9 @@
+
+
+