summaryrefslogtreecommitdiff
path: root/archaeological_context_records
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-12-03 17:14:13 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-12-03 17:14:41 +0100
commit1ec422545704e35f9a1fe2eaa5f974cc82d5179f (patch)
treeaeef3e6775cadaff9b948aa142dfdac39d250859 /archaeological_context_records
parentc79ec86652742f9e98df25c3ef187d0022aa5a5b (diff)
downloadIshtar-1ec422545704e35f9a1fe2eaa5f974cc82d5179f.tar.bz2
Ishtar-1ec422545704e35f9a1fe2eaa5f974cc82d5179f.zip
Sheet operation QA: add context record
Diffstat (limited to 'archaeological_context_records')
-rw-r--r--archaeological_context_records/forms.py60
-rw-r--r--archaeological_context_records/templates/ishtar/forms/qa_operation_contextrecord.html28
-rw-r--r--archaeological_context_records/urls.py6
-rw-r--r--archaeological_context_records/views.py25
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"))