summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--archaeological_operations/models.py16
-rw-r--r--archaeological_operations/templates/ishtar/sheet_operation.html8
6 files changed, 130 insertions, 13 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"))
diff --git a/archaeological_operations/models.py b/archaeological_operations/models.py
index b15dbf580..a0d0ba30b 100644
--- a/archaeological_operations/models.py
+++ b/archaeological_operations/models.py
@@ -1064,6 +1064,22 @@ class Operation(ClosedItem, BaseHistorizedItem, OwnPerms, ValueGetter,
finds__base_finds__context_record__operation=self
)
+ def get_extra_actions(self, request):
+ """
+ For sheet template
+ """
+ # url, base_text, icon, extra_text, extra css class, is a quick action
+
+ can_add_cr = self.can_do(request, 'add_contextrecord')
+ actions = []
+ if can_add_cr:
+ actions += [
+ (reverse('operation-qa-contextrecord', args=[self.pk]),
+ _(u"Add context record"), "fa fa-plus",
+ _(u"context record"), "", True),
+ ]
+ return actions
+
associated_file_short_label_lbl = _(u"Archaeological file")
full_code_patriarche_lbl = _(u"Code patriarche")
diff --git a/archaeological_operations/templates/ishtar/sheet_operation.html b/archaeological_operations/templates/ishtar/sheet_operation.html
index fb938b93f..1d699cbed 100644
--- a/archaeological_operations/templates/ishtar/sheet_operation.html
+++ b/archaeological_operations/templates/ishtar/sheet_operation.html
@@ -196,10 +196,12 @@
{% dynamic_table_document archaeologicalsites_label 'sites' 'operations' item.pk '' output %}
{% endif %}
+{% if item.grouped_parcels %}
{% trans "Associated parcels" as parcels_label %}
{% include "ishtar/blocks/window_tables/parcels.html" %}
+{% endif %}
-{% if item.administrative_act %}
+{% if item.administrative_act.count %}
<h3>{% trans "Administrative acts" %}</h3>
{% table_administrativact "" item.administrative_act.all %}
{% endif %}
@@ -209,7 +211,7 @@
{% dynamic_table_document operation_docs 'documents' 'operations' item.pk '' output %}
{% endif %}
-{% if view_own_contextrecord or view_contextrecord %}
+{% if permission_view_own_contextrecord or permission_view_contextrecord %}
{% if item.context_record.count %}
{% trans "Context records" as cr_lab %}
{% dynamic_table_document cr_lab 'context_records_for_ope' 'operation_id' item.pk 'TABLE_COLS_FOR_OPE' output %}
@@ -236,7 +238,7 @@
{% dynamic_table_document finds_docs 'documents' 'finds__base_finds__context_record__operation' item.pk '' output %}
{% endif %}
-{% if view_own_container or view_container %}
+{% if permission_view_own_container or permission_view_container %}
{% if item.containers_q.count %}
{% trans "Associated containers" as containers_lbl %}
{% dynamic_table_document containers_lbl 'containers' 'finds__base_finds__context_record__operation' item.pk '' output %}