summaryrefslogtreecommitdiff
path: root/archaeological_finds
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_finds')
-rw-r--r--archaeological_finds/forms.py5
-rw-r--r--archaeological_finds/forms_treatments.py84
-rw-r--r--archaeological_finds/templates/ishtar/forms/qa_find_treatment.html65
-rw-r--r--archaeological_finds/urls.py4
-rw-r--r--archaeological_finds/views.py23
5 files changed, 175 insertions, 6 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index da3682d0d..af3c5356f 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -43,7 +43,7 @@ from archaeological_finds.forms_treatments import TreatmentSelect, \
AdministrativeActTreatmentFileFormSelection, \
AdministrativeActTreatmentFileModifForm, \
DashboardForm as DashboardTreatmentForm, \
- DashboardTreatmentFileForm
+ DashboardTreatmentFileForm, QAFindTreatmentForm
from archaeological_operations.models import Period, ArchaeologicalSite, \
RelationType as OpeRelationType
from archaeological_operations.widgets import OAWidget
@@ -79,7 +79,8 @@ __all__ = [
'check_treatment', 'ResultFindForm', 'ResultFindFormSet',
'FindDeletionForm', 'UpstreamFindFormSelection', 'NewFindBasketForm',
'SelectFindBasketForm', 'DeleteFindBasketForm', 'FindBasketAddItemForm',
- 'QAFindFormSingle', 'QAFindFormMulti', 'QAFindBasketForm'
+ 'QAFindFormSingle', 'QAFindFormMulti', 'QAFindBasketForm',
+ 'QAFindTreatmentForm'
]
logger = logging.getLogger(__name__)
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py
index 11cfd3173..364c22ed6 100644
--- a/archaeological_finds/forms_treatments.py
+++ b/archaeological_finds/forms_treatments.py
@@ -280,6 +280,89 @@ class TreatmentDeletionForm(FinalForm):
confirm_end_msg = _(u"Would you like to delete this treatment?")
+class QAFindTreatmentForm(IshtarForm):
+ container = forms.IntegerField(
+ label=_(u"Container"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-container'),
+ associated_model=Container, new=True),
+ validators=[valid_id(Container)])
+ create_treatment = forms.BooleanField(
+ label=_(u"Create a treatment"), required=False)
+ year = forms.IntegerField(
+ label=_("Year"), initial=lambda: datetime.datetime.now().year,
+ validators=[validators.MinValueValidator(1000),
+ validators.MaxValueValidator(2100)], required=False)
+ start_date = forms.DateField(label=_(u"Precise date"), required=False,
+ widget=DatePicker)
+ person = forms.IntegerField(
+ label=_(u"Responsible"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-person'), associated_model=Person,
+ new=True),
+ validators=[valid_id(Person)], required=False)
+ organization = forms.IntegerField(
+ label=_(u"Organization"),
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy('autocomplete-organization'),
+ associated_model=Organization, new=True),
+ validators=[valid_id(Organization)], 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.items = kwargs.pop('items')
+
+ super(QAFindTreatmentForm, self).__init__(*args, **kwargs)
+ if not self.user:
+ return
+
+ q = Person.objects.filter(ishtaruser__pk=self.user.pk)
+ if q.count():
+ person = q.all()[0]
+ self.fields['person'].initial = person.pk
+
+ def clean(self):
+ if not self.cleaned_data['create_treatment']:
+ return self.cleaned_data
+
+ year = self.cleaned_data['year']
+ if not year:
+ if self.cleaned_data['start_date']:
+ self.cleaned_data['year'] = self.cleaned_data['start_date'].year
+ else:
+ raise forms.ValidationError(_(u"At least a year is required."))
+ return self.cleaned_data
+
+ def save(self, items, user):
+ container = Container.objects.get(pk=self.cleaned_data['container'])
+ if self.cleaned_data['create_treatment']:
+ packaging, created = models.TreatmentType.objects.get_or_create(
+ label=u"Conditionnement",
+ txt_idx='packaging'
+ )
+ t = models.Treatment.objects.create(
+ container=container,
+ year=self.cleaned_data['year'],
+ start_date=self.cleaned_data['start_date'],
+ location=container.location,
+ person_id=self.cleaned_data['person'],
+ organization_id=self.cleaned_data['organization'],
+ history_modifier=user
+ )
+ t.treatment_types.add(packaging)
+ t.save(items=items)
+ return
+ for find in items:
+ if find.container == container:
+ continue
+ find.container = container
+ find.save()
+
+
SLICING = (("month", _(u"months")), ('year', _(u"years")),)
DATE_SOURCE = (("start", _(u"Start date")), ("end", _(u"Closing date")),)
@@ -545,6 +628,7 @@ class TreatmentFileDeletionForm(FinalForm):
confirm_msg = _(u"Are you sure you want to delete this treatment request?")
confirm_end_msg = _(u"Would you like to delete this treatment request?")
+
DATE_SOURCE_FILE = (
("creation", _(u"Creation date")),
("reception", _(u"Reception date")),
diff --git a/archaeological_finds/templates/ishtar/forms/qa_find_treatment.html b/archaeological_finds/templates/ishtar/forms/qa_find_treatment.html
new file mode 100644
index 000000000..07f633848
--- /dev/null
+++ b/archaeological_finds/templates/ishtar/forms/qa_find_treatment.html
@@ -0,0 +1,65 @@
+{% 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 "Finds" %}</h4>
+ <ul>{% for item in items %}
+ <li>{{item}}</li>{% endfor %}
+ </ul>
+
+ <h4>{% trans "Packaging" %}</h4>
+ {% for hidden in form.hidden_fields %}
+ {{hidden}}
+ {% if hidden.errors %}<div class="invalid-feedback">
+ {{ hidden.errors }}
+ </div>{% endif %}
+ {% endfor %}
+ <div class="form-row">
+ {% with form.container as field %}
+ {% include "blocks/bs_field_snippet.html" %}
+ {% endwith %}
+ </div>
+
+ <div class="form-row">
+ <input type="checkbox" name="create_treatment"
+ id="create-choice">&nbsp;
+ <label for="create-choice">
+ {% trans "Associate a treatment to this operation" %}
+ </label>
+ </div>
+ <div id="new-treatment">
+ {% for field in form %}
+ {% if field.name != 'container' and field.name != 'create_treatment' %}
+ {% if forloop.counter0|divisibleby:2 %}
+ <div class="form-row">{% endif %}
+ {% include "blocks/bs_field_snippet.html" %}
+ {% if not forloop.counter0|divisibleby:2 %}
+ </div>{% endif %}
+ {% endif %}
+ {% endfor %}
+ </div>
+{% endblock %}
+
+{% block js %}
+var update_form_display = function(){
+ if ($("#create-choice:checked").length){
+ $("#new-treatment").show();
+ } else {
+ $("#new-treatment").hide();
+ }
+}
+
+$(document).ready(function(){
+ $("#create-choice").click(update_form_display);
+ update_form_display();
+});
+
+{% endblock %}
+
+
diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py
index 85a395db2..9c55818d9 100644
--- a/archaeological_finds/urls.py
+++ b/archaeological_finds/urls.py
@@ -81,12 +81,12 @@ urlpatterns = [
name='find-qa-bulk-update-confirm', kwargs={"confirm": True}),
url(r'^find-qa-basket/(?P<pks>[0-9-]+)?/$',
check_rights(['change_find', 'change_own_find'])(
- views.QAFindBasketForm.as_view()),
+ views.QAFindBasketFormView.as_view()),
name='find-qa-basket'),
url(r'^find-qa-packaging/(?P<pks>[0-9-]+)?/$',
check_rights(['change_warehouse'])(
- views.FindBasketAddItemView.as_view()),
+ views.QAFindTreatmentFormView.as_view()),
name='find-qa-packaging'),
diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py
index fd041b511..30a382e2c 100644
--- a/archaeological_finds/views.py
+++ b/archaeological_finds/views.py
@@ -601,7 +601,7 @@ class QAFindForm(QAItemEditForm):
form_class = QAFindFormMulti
-class QAFindBasketForm(QAItemForm):
+class QAFindBasketFormView(QAItemForm):
template_name = 'ishtar/forms/qa_find_basket.html'
model = models.Find
form_class = QAFindBasketForm
@@ -612,10 +612,29 @@ class QAFindBasketForm(QAItemForm):
return models.Find.QUICK_ACTIONS[1]
def get_form_kwargs(self):
- kwargs = super(QAFindBasketForm, self).get_form_kwargs()
+ kwargs = super(QAFindBasketFormView, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs
def form_valid(self, form):
form.save(self.items)
return HttpResponseRedirect(reverse("success"))
+
+
+class QAFindTreatmentFormView(QAItemForm):
+ template_name = 'ishtar/forms/qa_find_treatment.html'
+ model = models.Find
+ form_class = QAFindTreatmentForm
+ page_name = _(u"Packaging")
+
+ def get_quick_action(self):
+ return models.Find.QUICK_ACTIONS[2]
+
+ def get_form_kwargs(self):
+ kwargs = super(QAFindTreatmentFormView, self).get_form_kwargs()
+ kwargs['user'] = self.request.user
+ return kwargs
+
+ def form_valid(self, form):
+ form.save(self.items, self.request.user)
+ return HttpResponseRedirect(reverse("success"))