summaryrefslogtreecommitdiff
path: root/ishtar_common/forms_common.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/forms_common.py')
-rw-r--r--ishtar_common/forms_common.py61
1 files changed, 56 insertions, 5 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index d2011338b..1b59206a6 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -37,9 +37,7 @@ from django.contrib.auth.forms import UsernameField, \
AuthenticationForm as AuthAuthenticationForm, \
PasswordChangeForm as AuthPasswordChangeForm, \
SetPasswordForm as AuthSetPasswordForm
-from django.contrib.contenttypes.models import ContentType
from django.core import validators
-from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
from django.core.files import File
from django.core.validators import MaxValueValidator, MinValueValidator
@@ -51,6 +49,7 @@ from django.utils.safestring import mark_safe
from django.utils.translation import ugettext_lazy as _, pgettext
from . import models, models_rest
+from .models_imports import FORMATER_WIDGETS_DCT
from . import widgets
from bootstrap_datepicker.widgets import DatePicker
from ishtar_common.templatetags.link_to_window import simple_link_to_window
@@ -65,8 +64,6 @@ from .forms import (
FieldType,
FormHeader,
FormSetWithDeleteSwitches,
- BSForm,
- get_data_from_formset,
file_size_validator,
HistorySelect,
CustomFormSearch,
@@ -462,7 +459,7 @@ class NewImportGISForm(BaseImportForm):
def save(self, user, commit=True):
self.instance.user = user
- item = super(NewImportGISForm, self).save(commit)
+ item = super().save(commit)
return item
@@ -625,6 +622,60 @@ class TargetKeyForm(forms.ModelForm):
self.instance.save()
+class PreImportForm(IshtarForm):
+ def __init__(self, *args, **kwargs):
+ self.HEADERS = {}
+ self.import_item = kwargs.pop("import_item")
+ super().__init__(*args, **kwargs)
+ readonly = self.import_item.state not in ("C", "AP", "A")
+
+ for column in self.column_query.order_by("col_number"):
+ q = column.targets
+ if not q.count():
+ continue
+ target = q.all()[0]
+ field_name, widget_name = FORMATER_WIDGETS_DCT[target.formater_type.formater_type]
+ attrs = {
+ "label": column.label,
+ "required": column.required,
+ }
+ q = models.ImportColumnValue.objects.filter(column=column,
+ import_item=self.import_item)
+ if q.count():
+ attrs["initial"] = q.all()[0].value
+ if column.description:
+ attrs["help_text"] = column.description
+ if widget_name:
+ attrs["widget"] = getattr(forms, widget_name)
+ key = f"col_{- column.col_number}"
+ self.fields[key] = getattr(forms, field_name)(
+ **attrs
+ )
+ if readonly:
+ self.fields[key].widget.attrs["readonly"] = True
+ if not self.HEADERS:
+ self.HEADERS[key] = FormHeader(self.import_item)
+ if self.import_item.importer_type.pre_import_message:
+ self.HEADERS[key].help_message = self.import_item.importer_type.pre_import_message
+
+ @property
+ def column_query(self):
+ return self.import_item.importer_type.columns.filter(col_number__lte=0)
+
+ def save(self):
+ for column in self.column_query.all():
+ key = f"col_{-column.col_number}"
+ if key not in self.cleaned_data:
+ continue
+ col_value, __ = models.ImportColumnValue.objects.get_or_create(
+ column=column,
+ import_item=self.import_item
+ )
+ col_value.value = self.cleaned_data[key]
+ col_value.save()
+ return self.import_item
+
+
class TargetKeyFormset(BaseModelFormSet):
def __init__(self, *args, **kwargs):
self.user = kwargs.pop("user")