diff options
Diffstat (limited to 'archaeological_operations/forms.py')
-rw-r--r-- | archaeological_operations/forms.py | 135 |
1 files changed, 130 insertions, 5 deletions
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py index 18534fe9d..d665fc779 100644 --- a/archaeological_operations/forms.py +++ b/archaeological_operations/forms.py @@ -41,7 +41,7 @@ from ishtar_common import widgets from ishtar_common.forms import FinalForm, FormSet, get_now, \ reverse_lazy, TableSelect, get_data_from_formset, QAForm, CustomFormSearch,\ ManageOldType, IshtarForm, CustomForm, FieldType, FormHeader, \ - HistorySelect, LockForm, MultiSearchForm + DocumentItemSelect, LockForm, MultiSearchForm from ishtar_common.forms_common import TownFormSet, get_town_field, TownForm from ishtar_common.models import valid_id, valid_ids, Person, Town, \ DocumentTemplate, Organization, get_current_profile, \ @@ -472,7 +472,7 @@ RecordRelationsFormSet.form_admin_name = _(u"Operation - 080 - Relations") RecordRelationsFormSet.form_slug = "operation-080-relations" -class OperationSelect(HistorySelect): +class OperationSelect(DocumentItemSelect): _model = models.Operation form_admin_name = _(u"Operation - 001 - Search") form_slug = "operation-001-search" @@ -604,6 +604,7 @@ class OperationFormSelection(LockForm, CustomFormSearch): SEARCH_AND_SELECT = True form_label = _(u"Operation search") associated_models = {'pk': models.Operation} + extra_form_modals = ["person", "organization"] currents = {'pk': models.Operation} pk = forms.IntegerField( label="", required=False, @@ -617,6 +618,7 @@ class OperationFormSelection(LockForm, CustomFormSearch): class OperationFormMultiSelection(LockForm, MultiSearchForm): form_label = _(u"Operation search") associated_models = {'pks': models.Operation} + extra_form_modals = ["person", "organization"] pk_key = 'pks' pk = forms.CharField( label="", required=False, @@ -1365,7 +1367,7 @@ class OperationDeletionForm(FinalForm): ######### -class SiteSelect(HistorySelect): +class SiteSelect(DocumentItemSelect): _model = models.ArchaeologicalSite form_admin_name = _(u"Archaeological site - 001 - Search") form_slug = "archaeological_site-001-search" @@ -1848,22 +1850,32 @@ class AdministrativeActRegisterFormSelection(IshtarForm): class QAOperationFormMulti(QAForm): - form_admin_name = _(u"Operation - Quick action - Modify") + form_admin_name = _("Operation - Quick action - Modify") form_slug = "operation-quickaction-modify" base_models = ['qa_operation_type'] associated_models = { 'qa_operation_type': models.OperationType, - 'qa_towns': Town + 'qa_towns': Town, + 'qa_operator': Organization, } MULTI = True REPLACE_FIELDS = [ 'qa_operation_type', + 'qa_operator', ] qa_operation_type = forms.ChoiceField( label=_(u"Operation type"), required=False ) qa_towns = get_town_field(required=False) + qa_operator = forms.IntegerField( + label=_("Operator"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-organization', + args=[organization_type_pk_lazy('operator')]), + limit={'organization_type': organization_type_pk_lazy('operator')}, + associated_model=Organization, new=True), + validators=[valid_id(Organization)], required=False) TYPES = [ FieldType('qa_operation_type', models.OperationType), @@ -1876,3 +1888,116 @@ class QAOperationFormMulti(QAForm): return "" return value + def _get_qa_operator(self, value): + try: + value = Organization.objects.get(pk=value).cached_label + except Organization.DoesNotExist: + return "" + return value + + +class QAOperationDuplicateForm(IshtarForm): + qa_code_patriarche = forms.CharField( + max_length=500, widget=OAWidget, label=_("Code PATRIARCHE"), + required=False) + qa_year = forms.IntegerField(label=_("Year"), required=False, + validators=[validators.MinValueValidator(1000), + validators.MaxValueValidator(2100)]) + qa_common_name = forms.CharField(label=_("Generic name"), required=False, + max_length=500, widget=forms.Textarea) + qa_operation_type = forms.ChoiceField(label=_("Operation type"), choices=[]) + + TYPES = [ + FieldType('qa_operation_type', models.OperationType), + ] + + def __init__(self, *args, **kwargs): + self.user = None + if 'user' in kwargs: + self.user = kwargs.pop('user') + if hasattr(self.user, 'ishtaruser'): + self.user = self.user.ishtaruser + self.operation = kwargs.pop('items')[0] + super(QAOperationDuplicateForm, self).__init__(*args, **kwargs) + + self.fields['qa_year'].initial = self.operation.year + self.fields['qa_common_name'].initial = self.operation.common_name + + self.fields["qa_operation_type"].initial = \ + self.operation.operation_type.pk + + def clean_qa_code_patriarche(self): + code = self.cleaned_data['qa_code_patriarche'] + if models.Operation.objects \ + .filter(code_patriarche=code).count(): + raise forms.ValidationError(_("This code already exists.")) + return code + + def save(self): + data = {"operation_code": None} + for k in ("code_patriarche", "common_name", "year"): + data[k] = self.cleaned_data.get("qa_" + k, None) + try: + data["operation_type"] = models.OperationType.objects.get( + pk=self.cleaned_data["qa_operation_type"], available=True + ) + except models.OperationType.DoesNotExist: + return + operation = self.operation.duplicate(self.user, data=data) + # clear associated sites + operation.archaeological_sites.clear() + operation.skip_history_when_saving = True + operation._cached_label_checked = False + operation._search_updated = False + operation._no_move = True + operation.save() # regen of labels + return operation + + +class QAArchaeologicalSiteDuplicateForm(IshtarForm): + qa_reference = forms.CharField(label=_("Reference"), max_length=200) + qa_name = forms.CharField(label=_("Name"), max_length=200, required=False) + + def __init__(self, *args, **kwargs): + self.user = None + if 'user' in kwargs: + self.user = kwargs.pop('user') + if hasattr(self.user, 'ishtaruser'): + self.user = self.user.ishtaruser + self.site = kwargs.pop('items')[0] + super(QAArchaeologicalSiteDuplicateForm, self).__init__(*args, **kwargs) + + self.fields['qa_reference'].initial = ( + self.site.reference or "") + str(_(" - duplicate")) + self.fields['qa_name'].initial = self.site.name + + def clean_qa_reference(self): + reference = self.cleaned_data['qa_reference'] + if models.ArchaeologicalSite.objects \ + .filter(reference=reference).count(): + raise forms.ValidationError(_("This reference already exists.")) + return reference + + def save(self): + data = {} + for k in ("name", "reference"): + data[k] = self.cleaned_data.get("qa_" + k, None) + return self.site.duplicate(self.user, data=data) + + +class QAArchaeologicalSiteFormMulti(QAForm): + form_admin_name = _("Archaeological files - Quick action - Modify") + form_slug = "archaeological_site-quickaction-modify" + associated_models = { + 'qa_towns': Town, + } + + MULTI = True + qa_towns = get_town_field(required=False) + + def _get_qa_towns(self, value): + try: + value = Town.objects.get(pk=value).cached_label + except Town.DoesNotExist: + return "" + return value |