diff options
Diffstat (limited to 'archaeological_context_records')
4 files changed, 109 insertions, 10 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py index a4577df40..8bd3db9f5 100644 --- a/archaeological_context_records/forms.py +++ b/archaeological_context_records/forms.py @@ -28,7 +28,13 @@ from django.core import validators from django.forms.formsets import formset_factory from django.utils.translation import ugettext_lazy as _ -import models +from ishtar_common.models import valid_id, IshtarSiteProfile, Town +from archaeological_context_records import models + +from ishtar_common.forms import FinalForm, FormSet, \ + reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm, \ + FieldType, CustomFormSearch, IshtarForm +from ishtar_common.forms_common import get_town_field from archaeological_operations.forms import OperationSelect, ParcelField, \ RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase from archaeological_operations.models import Period, Parcel, Operation, \ @@ -36,11 +42,6 @@ from archaeological_operations.models import Period, Parcel, Operation, \ from archaeological_operations.widgets import OAWidget from bootstrap_datepicker.widgets import DatePicker from ishtar_common import widgets -from ishtar_common.forms import FinalForm, FormSet, \ - reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm, \ - FieldType, CustomFormSearch -from ishtar_common.forms_common import get_town_field -from ishtar_common.models import valid_id, IshtarSiteProfile, Town class OperationFormSelection(CustomForm, forms.Form): @@ -154,6 +155,8 @@ class RecordFormGeneral(CustomForm, ManageOldType): ) label = forms.CharField(label=_(u"ID"), validators=[validators.MaxLengthValidator(200)]) + unit = forms.ChoiceField(label=_(u"Context record type"), required=False, + choices=[]) description = forms.CharField(label=_(u"Description"), widget=forms.Textarea, required=False) comment = forms.CharField(label=_(u"General comment"), @@ -167,8 +170,6 @@ class RecordFormGeneral(CustomForm, ManageOldType): depth = forms.FloatField(label=_(u"Depth (m)"), required=False) depth_of_appearance = forms.FloatField( label=_(u"Depth of appearance (m)"), required=False) - unit = forms.ChoiceField(label=_(u"Context record type"), required=False, - choices=[]) opening_date = forms.DateField(label=_(u"Opening date"), widget=DatePicker, required=False) closing_date = forms.DateField(label=_(u"Closing date"), @@ -374,3 +375,46 @@ class RecordDeletionForm(FinalForm): confirm_msg = " " confirm_end_msg = _(u"Would you like to delete this context record?") + +class QAOperationCR(IshtarForm): + town = forms.ChoiceField(label=_(u"Town"), choices=[]) + archaeological_site = forms.ChoiceField( + label=" ", choices=[], required=False, + help_text=_(u"Only the items associated to the operation can be " + u"selected.") + ) + label = forms.CharField(label=_(u"ID"), + validators=[validators.MaxLengthValidator(200)]) + unit = forms.ChoiceField(label=_(u"Context record type"), required=False, + choices=[]) + + TYPES = [ + FieldType('unit', models.Unit), + ] + + def __init__(self, *args, **kwargs): + self.items = kwargs.pop('items') + super(QAOperationCR, self).__init__(*args, **kwargs) + site_label = IshtarSiteProfile.get_default_site_label() + self.fields['archaeological_site'].label = site_label + self.fields['archaeological_site'].choices = [('', '--')] + + if not self.items: + return + operation = self.items[0] + self.fields['town'].choices = [(t.pk, unicode(t)) + for t in operation.towns.all()] + self.fields['archaeological_site'].choices += [ + (site.pk, unicode(site)) + for site in operation.archaeological_sites.all() + ] + + def save(self, items): + operation = items[0] + cr = models.ContextRecord.objects.create( + town_id=self.cleaned_data['town'], operation=operation, + archaeological_site_id= + self.cleaned_data['archaeological_site'] or None, + label=self.cleaned_data['label'], + unit_id=self.cleaned_data['unit'] or None + ) diff --git a/archaeological_context_records/templates/ishtar/forms/qa_operation_contextrecord.html b/archaeological_context_records/templates/ishtar/forms/qa_operation_contextrecord.html new file mode 100644 index 000000000..c782832ff --- /dev/null +++ b/archaeological_context_records/templates/ishtar/forms/qa_operation_contextrecord.html @@ -0,0 +1,28 @@ +{% extends "ishtar/forms/qa_base.html" %} +{% load i18n inline_formset table_form %} + +{% block main_form %} +{% if form.non_field_errors %} +<div class="alert alert-danger" role="alert"> + {{form.non_field_errors}} +</div> +{% endif %} + +<h4>{% trans "Quick add context record" %}</h4> + +{% for hidden in form.hidden_fields %}{{hidden}} +{% if hidden.errors %}<div class="invalid-feedback"> + {{ hidden.errors }} +</div>{% endif %} +{% endfor %} +{% with force_large_col=True %}{% for field in form %} +<div class="form-row"> + {% include "blocks/bs_field_snippet.html" %} +</div> +{% endfor %}{% endwith %} + +<div class="alert alert-info"> + {% trans "To put more information to the context record use the full form on the top menu: \"Context record > Add\"." %} +</div> +{% endblock %} + diff --git a/archaeological_context_records/urls.py b/archaeological_context_records/urls.py index c05cff87e..175c87482 100644 --- a/archaeological_context_records/urls.py +++ b/archaeological_context_records/urls.py @@ -82,4 +82,10 @@ urlpatterns = [ url(r'get-contextrecordrelationdetail/(?P<type>.+)?$', views.get_contextrecordrelationdetail, name='get-contextrecordrelationdetail'), + + url(r'^operation-qa-contextrecord/(?P<pks>[0-9]+)/$', + check_rights(['add_contextrecord', 'add_own_contextrecord'])( + views.QAOperationContextRecordView.as_view()), + name='operation-qa-contextrecord'), + ] diff --git a/archaeological_context_records/views.py b/archaeological_context_records/views.py index 771a2ed71..6a01a48f0 100644 --- a/archaeological_context_records/views.py +++ b/archaeological_context_records/views.py @@ -26,11 +26,15 @@ from django.shortcuts import redirect from django.utils.translation import ugettext_lazy as _ from django.views.generic import RedirectView +from ishtar_common.models import QuickAction +from archaeological_operations.models import Operation from archaeological_context_records import models + from archaeological_operations.views import site_extra_context from archaeological_context_records import forms from ishtar_common.utils import put_session_message -from ishtar_common.views import IshtarMixin, LoginRequiredMixin + +from ishtar_common.views import IshtarMixin, LoginRequiredMixin, QAItemForm from ishtar_common.views_item import display_item, get_item, show_item, \ revert_item from archaeological_context_records import wizards @@ -171,4 +175,21 @@ class GenerateRelationImage(IshtarMixin, LoginRequiredMixin, RedirectView): except models.ContextRecord.DoesNotExist: raise Http404() self.context_record.generate_relation_image() - return super(GenerateRelationImage, self).get(request, *args, **kwargs)
\ No newline at end of file + return super(GenerateRelationImage, self).get(request, *args, **kwargs) + + +class QAOperationContextRecordView(QAItemForm): + template_name = 'ishtar/forms/qa_operation_contextrecord.html' + model = Operation + form_class = forms.QAOperationCR + page_name = _(u"Context record") + + def get_quick_action(self): + return QuickAction( + url="operation-qa-contextrecord", icon_class="fa fa-plus", + text=_(u"Add context record"), target="one", + rights=['add_contextrecord', 'add_own_contextrecord']) + + def form_valid(self, form): + form.save(self.items) + return HttpResponseRedirect(reverse("success")) |