diff options
Diffstat (limited to 'ishtar_common')
23 files changed, 139 insertions, 524 deletions
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py index d66d6d4cc..cb007442e 100644 --- a/ishtar_common/forms.py +++ b/ishtar_common/forms.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2011 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -101,6 +101,10 @@ class FormSet(BaseFormSet): form.fields[DELETION_FIELD_NAME].label = '' form.fields[DELETION_FIELD_NAME].widget = widgets.DeleteWidget() +class TableSelect(forms.Form): + def get_input_ids(self): + return self.fields.keys() + def get_now(): format = formats.get_format('DATE_INPUT_FORMATS')[0] value = datetime.datetime.now().strftime(format) diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 34a930e36..52fcfc97a 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -37,7 +37,7 @@ from django.utils.translation import ugettext_lazy as _ import models import widgets -from forms import FinalForm, FormSet, reverse_lazy, name_validator +from forms import FinalForm, FormSet, reverse_lazy, name_validator, TableSelect def get_town_field(label=_(u"Town"), required=True): help_text = _(u"<p>Type name, department code and/or postal code of the " @@ -234,7 +234,7 @@ class SourceForm(forms.Form): super(SourceForm, self).__init__(*args, **kwargs) self.fields['source_type'].choices = models.SourceType.get_types() -class SourceSelect(forms.Form): +class SourceSelect(TableSelect): authors = forms.IntegerField( widget=widgets.JQueryAutoComplete("/" + settings.URL_PATH + \ 'autocomplete-author', associated_model=models.Author), diff --git a/ishtar_common/models.py b/ishtar_common/models.py index e5d966bf9..fd5bb5871 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -451,6 +451,7 @@ class Dashboard: operation_mode_pk = self.get_mode(dict(zip(operations, operation_numbers))) if operation_mode_pk: + from archaeological_operations.models import Operation self.operation_mode = unicode(Operation.objects.get( pk=operation_mode_pk)) diff --git a/ishtar_common/static/media/style.css b/ishtar_common/static/media/style.css index 2aa673b51..fe078fa3c 100644 --- a/ishtar_common/static/media/style.css +++ b/ishtar_common/static/media/style.css @@ -528,3 +528,19 @@ a.remove{ border:1px solid; } +.form table.inline-table th{ + text-align:center; + font-weight:bold; +} + +.form table.inline-table td{ + text-align:center; +} + +.inline-table input[type=text]{ + width:60px; +} + +.widget-parcel{ + width:60px; +} diff --git a/ishtar_common/templates/form_snippet.html b/ishtar_common/templates/blocks/form_snippet.html index 2f841e078..2f841e078 100644 --- a/ishtar_common/templates/form_snippet.html +++ b/ishtar_common/templates/blocks/form_snippet.html diff --git a/ishtar_common/templates/blocks/inline_formset.html b/ishtar_common/templates/blocks/inline_formset.html new file mode 100644 index 000000000..e36405118 --- /dev/null +++ b/ishtar_common/templates/blocks/inline_formset.html @@ -0,0 +1,25 @@ +{% load i18n %} + {% if extra_formset.non_form_errors %}<div class='errors'>{{extra_formset.non_form_errors.as_ul}}</div>{% endif %} + {% if header %}<table class='inline-table'> + <caption>{% trans caption %}</caption> + {% endif %}{% for frm in formset%}{% if header %}<thead> + <tr>{% for field in frm.visible_fields%} + <th>{{field.label}}</th>{%endfor%} + </tr> + </thead>{% endif %} + {% if forloop.first and not skip %}<tbody>{%endif%} + {% if not skip or not forloop.first %}<tr>{% endif %}{% for field in frm.visible_fields %} + <td> + {% if field.errors %}<div class='errors'>{{ field.errors.as_ul }}</div>{% endif %} + {{ field }} + {# Include the hidden fields in the form #} + {% if forloop.first %} + {{ formset.management_form }} + {% for hidden in frm.hidden_fields %} + {{ hidden }} + {% endfor %} + {% endif %} + </td>{% endfor %} + {% if not skip or not forloop.last %}</tr>{% endif %}{%endfor%} + {% if not skip %}</tbody>{% endif %}{% if header %} + </table>{% endif %} diff --git a/ishtar_common/templates/sheet.html b/ishtar_common/templates/ishtar/sheet.html index 5608a684f..5608a684f 100644 --- a/ishtar_common/templates/sheet.html +++ b/ishtar_common/templates/ishtar/sheet.html diff --git a/ishtar_common/templates/ishtar/wizard/default_wizard.html b/ishtar_common/templates/ishtar/wizard/default_wizard.html index e2abc80b6..b56324a78 100644 --- a/ishtar_common/templates/ishtar/wizard/default_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/default_wizard.html @@ -6,6 +6,7 @@ {{form.media}} {% endblock %} {% block content %} +{% block wizard_head %} <h2>{{wizard_label}}</h2> <form action="." method="post" name='wizard'>{% csrf_token %} <ul id='form_path'> @@ -17,6 +18,8 @@ <li>» <button name="form_prev_step" value="{{forloop.counter|add:previous_step_counter}}">{{step.form_label}}</button></li> {% endfor %} </ul> +{% endblock %} +{% block wizard_form %} <div class='form'> {% if reminder %}<div class='reminder'>{{ reminder }}</div>{%endif%} {{ wizard.form.media }} @@ -43,3 +46,4 @@ </div> </form> {% endblock %} +{% endblock %} diff --git a/ishtar_common/templates/ishtar/wizard/parcels_wizard.html b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html new file mode 100644 index 000000000..94e9820ab --- /dev/null +++ b/ishtar_common/templates/ishtar/wizard/parcels_wizard.html @@ -0,0 +1,28 @@ +{% extends "ishtar/wizard/default_wizard.html" %} +{% load i18n range inline_formset %} +{% block extra_head %} +{{wizard.form.media}} +{% endblock %} +{% block wizard_form %} +<div class='form'> +{% if reminder %}<div class='reminder'>{{ reminder }}</div>{%endif%} +{{ wizard.form.media }} +{{ wizard.management_form }} + {{ wizard.form.management_form }} +<div class='top_button'><input type="submit" id="submit_form" value="{% trans "Validate" %}"/></div> + {%if wizard.form.non_form_errors%} +<table class='formset'> +<tr class='error'><th colspan='2'>{{wizard.form.non_form_errors}}</th></tr> +</table>{%endif%} +<table class='inline-table'> + <tr>{% for field in wizard.form.forms.0 %}<th>{{ field.label_tag }}</th>{% endfor %}</tr> + {% inline_formset 'Parcels' wizard.form.forms False %} +</table> +<p><button name="formset_modify" value="{{wizard.steps.current}}">{% trans "Add/Modify" %}</button></p> +<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" /> +{{ previous_fields|safe }} +<input type="submit" id="submit_form" name='validate' value="{% trans "Validate" %}"/> +{% if next_steps %}<input type="submit" id="submit_end_form" name='validate_and_end' value="{% trans "Validate and end" %}"/>{% endif %} +</div> +</form> +{% endblock %} diff --git a/ishtar_common/templates/ishtar/wizard/towns_wizard.html b/ishtar_common/templates/ishtar/wizard/towns_wizard.html index cd40e6049..cc3487df3 100644 --- a/ishtar_common/templates/ishtar/wizard/towns_wizard.html +++ b/ishtar_common/templates/ishtar/wizard/towns_wizard.html @@ -4,15 +4,7 @@ {% block extra_head %} {{wizard.form.media}} {% endblock %} -{% block content %} -<h2>{{wizard_label}}</h2> -<form action="." method="post" name='wizard'>{% csrf_token %} -<ul id='form_path'> -{% for step in previous_steps %} - <li>» <button name="form_prev_step" value="{{forloop.counter0}}">{{step.form_label}}</button></li> -{% endfor %} - <li class='current'>» <a href='#'>{{current_step.form_label}}</a></li> -</ul> +{% block wizard_form %} <div class='form'> {% if TOWNS %} {% if wizard.form.forms %} diff --git a/ishtar_common/templates/sheet_contextrecord.html b/ishtar_common/templates/sheet_contextrecord.html deleted file mode 100644 index 806b06288..000000000 --- a/ishtar_common/templates/sheet_contextrecord.html +++ /dev/null @@ -1,135 +0,0 @@ -{% extends "sheet.html" %} -{% load i18n %} -{% block content %} -<div class='tool'>{%trans "Export as:"%} <a href='{% url show-file item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-file item.pk "pdf" %}'>{%trans "PDF file"%}</a></div> - -<h3>{% trans "Context Record"%}</h3> - -{% if item.operation.code_patriarche %} -<p><label>{%trans "Complete ID:"%}</label> -{% else %} -<p class='alert'><label>{%trans "Patriarche OA code not yet recorded!"%}</label></p> -<p><label>{%trans "Temporary ID:"%}</label> -{%endif%} -<span class='value'>{{item.full_label}}</span></p> -{%if item.unit %} -<p><label>{% trans "Type:" %}</label> <span class='value'>{{ item.unit }}</span></p> -{%endif%} -<p><label>{% trans "Chronology:" %}</label> <span class='value'>{{ item.datings.all|join:", " }}</span></p> -<p><label>{% trans "Place:" %}</label> <span class='value'>{{ item.parcel.town }}</span></p> -<p><label>{% trans "Parcel:" %}</label> <span class='value'>{{ item.parcel.short_label }}</span></p> - -{% if item.description or item.lenght or item.width or item.depth %} -<h3>{% trans "Description"%}</h3> - -<p><label>{% trans "Description:" %}</label> <span class='value'>{{ item.description }}</span></p> -{% if item.lenght %}<p><label>{% trans "Length (cm):" %}</label> <span class='value'>{{ item.length }}</span></p>{%endif%} -{% if item.width %}<p><label>{% trans "Width (cm):" %}</label> <span class='value'>{{ item.width }}</span></p>{%endif%} -{% if item.depth %}<p><label>{% trans "Depth (cm):" %}</label> <span class='value'>{{ item.depth }}</span></p>{%endif%} -{% endif %} - -{% if item.activity or item.identification or item.interpretation %} -<h3>{% trans "Interpretation"%}</h3> - -{% if item.activity %}<p><label>{% trans "Activity:" %}</label> <span class='value'>{{ item.activity }}</span></p>{%endif%} -{% if item.identification %}<p><label>{% trans "Identification:" %}</label> <span class='value'>{{ item.identification }}</span></p>{%endif%} -{% if item.interpretation %}<p><label>{% trans "Interpretation:" %}</label> <span class='value'>{{ item.interpretation }}</span></p>{%endif%} -{% endif %} - -{% if item.taq or item.taq_estimated or item.tpq or item.tpq_estimated %} -<h3>{% trans "Datations"%}</h3> -{% if item.taq %}<p><label>{% trans "TAQ:" %}</label> <span class='value'>{{ item.taq }}</span></p>{%endif%} -{% if item.taq_estimated %}<p><label>{% trans "TAQ estimated:" %}</label> <span class='value'>{{ item.taq_estimated }}</span></p>{%endif%} -{% if item.tpq %}<p><label>{% trans "TPQ:" %}</label> <span class='value'>{{ item.tpq }}</span></p>{%endif%} -{% if item.tpq_estimated %}<p><label>{% trans "TPQ estimated:" %}</label> <span class='value'>{{ item.tpq_estimated }}</span></p>{%endif%} -{%endif%} - -{% if item.operation %} -<h3>{% trans "Operation resume"%}</h3> -<p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.operation.year }}</span></p> -<p><label>{%trans "Numerical reference:"%}</label> <span class='value'>{{ item.operation.operation_code }}</span></p> -{% if item.operation.code_patriarche %} -<p><label>{%trans "Patriarche OA code:"%}</label> -<span class='value'>{{ item.operation.code_patriarche }}</span></p> -{% else %}<p class='alert'><label>{%trans "Patriarche OA code not yet recorded!"%}</label></p> -{%endif%} -{#<p><label>{%trans "Operation's name:"%}</label><span class='value'>{{ item.operation.internal_reference }}</span></p>#} -<p><label>{%trans "Head scientist:"%}</label> -<span class='value'>{{ item.operation.in_charge.full_label }}</span></p> -<p><label>{%trans "State:"%}</label> -{% if item.operation.is_active %} -<span class='value'>{%trans "Active file"%}</span></p> -{% else %} -<span class='value'>{%trans "Closed operation"%}</span></p> -<p><label>{%trans "Closing date:"%}</label> <span class='value'>{{ item.operation.closing.date }} -<strong>{%trans "by" %}</strong> {{ item.operation.closing.user }}</span></p> -{% endif %} -<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.operation.operation_type }}</span></p> -<p><label>{%trans "Remains:"%}</label> <span class='value'>{{ item.operation.remains.all|join:", " }}</span></p> -<p><label>{%trans "Periods:"%}</label> <span class='value'>{{ item.operation.periods.all|join:", " }}</span></p> -{% if item.operation.comment %}<p><label>{%trans "Comment:"%}</label> <span class='value'>{{ item.operation.comment }}</span></p>{%endif%} -<h3>{% trans "Localisation"%}</h3> -<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.operation.towns.all|join:", " }}</span></p> -<p><label>{%trans "Related operation:"%}</label> -<span class='value'><a href="#" onclick='load_window("{% url show-operation item.operation.pk ''%}");'>{{ item.operation }}</a></span></p> -{# TODO: Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related operation #} -{% else %}<p class='alert'><label>{%trans "No operation linked to this context unit!"%}</label></p> -{% endif %} - -<table> - <caption>{%trans "Documents"%}</caption> - <tr> - <th>{% trans "Title" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Authors" %}</th> - {#<th>{% trans "Localisation" %}</th>#} - </tr> - {% for doc in item.source.all %} - <tr> - <td class='string'>{{ doc.title }}</td> - <td class='string'>{{doc.source_type}}</td> - <td class='string'>{{ doc.authors.all|join:", " }}</td> - {#<td>{{ doc.localisation }}</td>#} - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No document associated to this context record" %}</td></tr> - {% endfor %} -</table> - -<table> - <caption>{%trans "Finds"%}</caption> - <tr> - <th>{% trans "Find" %}</th> - <th>{% trans "Material type" %}</th> - <th>{% trans "Context record" %}</th> - <th>{% trans "Periods" %}</th> - <th>{% trans "Description" %}</th> - <th>{% trans "Weight" %}</th> - <th>{% trans "Numbers" %}</th> - <th>{% trans "Parcel" %}</th> - <th class='link'> </th> - </tr> - {% for find in item.base_finds.all %} - <tr> - <td>{{ find.full_label }}</td> -{# Displayed as (Patriarche operation code)-(Record unit label)-(Finds label). #} -{# or displayed as (Year)-(index)-(Record unit label)-(Finds label). #} - <td>{{ find.material_type_label }}</td> -{# Displayed as (Patriarche operation code)-(Record unit label)-(material code)-(Finds label indexed by material type). #} -{# or displayed as (Year)-(index)-(Record unit label)-(material code)-(Finds label indexed by material type) #} - - <td class='string'>{{find.context_record}}</td> - <td>{{ find.get_last_find.dating}}</td>{# TODO .all|join:", " ? #} - <td>{{ find.get_last_find.description }}</td> - <td>{{ find.get_last_find.weight }}</td> - <td>{{ find.get_last_find.item_number }}</td> - <td>{{ item.context_record.parcel.short_label }}</td> - <td class='link'><a href="#">{% trans "Details" %}</a></td> - {#<a href="#" onclick='load_window("{% url show-find find.pk%}");'>{%trans "Details"%}</a></td>#} - </tr> - {% empty %} - <tr><td colspan="9" class='no_items'>{% trans "No find associated to this context record" %}</td></tr> - {% endfor %} -</table> - -{% endblock %} diff --git a/ishtar_common/templates/sheet_contextrecord_window.html b/ishtar_common/templates/sheet_contextrecord_window.html deleted file mode 100644 index 7ff65d1e7..000000000 --- a/ishtar_common/templates/sheet_contextrecord_window.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "sheet_contextrecord.html" %} -{% block main_head %}{%endblock%} -{% block main_foot %}{%endblock%} diff --git a/ishtar_common/templates/sheet_file.html b/ishtar_common/templates/sheet_file.html deleted file mode 100644 index 88ef1b3a2..000000000 --- a/ishtar_common/templates/sheet_file.html +++ /dev/null @@ -1,132 +0,0 @@ -{% extends "sheet.html" %} -{% load i18n %} -{% block content %} -{% if previous or next %} -<div class='tool'> -{%if previous%} -<a href="#" onclick='load_window("{% url show-historized-file item.pk previous|date:"c"%}");$("#{{window_id}}").hide();return false;'>{%trans "Previous version"%} ({{previous}})</a> -{% endif %} -{% if previous and next %} - {% endif %} -{%if next%} -<a href="#" onclick='if(confirm("{%trans "Are you sure to rollback to this version?"%}")){load_url("{% url revert-file item.pk item.history_date|date:"c"%}");closeAllWindows();load_window("{% url show-file item.pk None %}");}'>Rollback</a> - -<a href="#" onclick='load_window("{% url show-historized-file item.pk next|date:"c" %}");$("#{{window_id}}").hide();return false;'>{%trans "Next version"%} ({{next}})</a> -{% endif %} -</div> -{% endif %} -<div class='tool'>{%trans "Export as:"%} <a href='{% url show-file item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-file item.pk "pdf" %}'>{%trans "PDF file"%}</a></div> -<h3>{% trans "General"%}</h3> -<p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.year }}</span></p> -<p><label>{%trans "Numerical reference:"%}</label> <span class='value'>{{ item.numeric_reference }}</span></p> - -<p><label>{%trans "File's name:"%}</label> <span class='value'>{{ item.internal_reference }}</span></p> - -<p><label>{%trans "Edition date:"%}</label> <span class='value'>{{ item.history_date }}</span></p> <!-- date = now --> -{% if item.reception_date %}<p><label>{%trans "Reception date:"%}</label> <span class='value'>{{ item.reception_date }}</span></p>{% endif %} -<p><label>{%trans "Creation date:"%}</label> <span class='value'>{{ item.creation_date }}</span></p> -{% comment %} -{% if item.deadline_date and not item.acts %} - <p><label>{%trans "Deadline:"%}</label> <span class='value'>{% item.deadline_date %}</span></p> <!-- calculated deadline for some preventive files , see saisine_type, not displayed if an act as been send --> -{% endif %} -{% endcomment %} - -<p><label>{%trans "In charge:"%}</label> <span class='value'>{{ item.in_charge.full_label }}</span></p> -<p><label>{%trans "State:"%}</label> <span class='value'>{% if item.is_active %}{%trans "Active file"%}</span></p> -{% else %}{%trans "Closed file"%}</span></p> -<p><label>{%trans "Closing date:"%}</label> <span class='value'>{{ item.closing.date }} <strong>{%trans "by" %}</strong> {{ item.closing.user }}</span></p> -{% endif %} - -<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.file_type }}</span></p> - -{% if item.related_file %}<p><label>{%trans "Related file:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-file item.related_file.pk ''%}")'>{{ item.related_file }}</a></span></p>{% endif %} <!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related file --> -{% if item.comment %}<p><label>{%trans "Comment:"%}</label> <span class='value'>{{ item.comment }}</span></p>{%endif%} - -<h3>{% trans "Localisation"%}</h3> -<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p> - -<p><label>{%trans "Main address:"%}</label> <span class='value'>{{ item.address }}</span></p> -{% if item.address_complement %}<p><label>{%trans "Complement:"%}</label> <span class='value'>{{ item.address_complement }}</span></p>{%endif%} -{% if item.postal_code %}<p><label>{%trans "Postal code:"%}</label> <span class='value'>{{ item.postal_code }}</span></p>{%endif%} - -<p><label>{%trans "Surface:"%}</label>{% if item.total_surface %} <span class='value'>{{ item.total_surface }} m<sup>2</sup> ({{ item.total_surface_ha }} ha)</span>{%endif%}</p> - - - -{% if item.is_preventive %} -<h3>{% trans "Preventive archaelogical file"%}</h3> -<p><label>{%trans "Planed surface:"%}</label> <span class='value'>{{ item.total_developed_surface }} m<sup>2</sup> ({{ item.total_developed_surface_ha }} ha)</span></p> -<p><label>{%trans "Saisine type:"%}</label> <span class='value'>{{ item.saisine_type }}</span></p> -{% if item.town_planning_service %}<p><label>{%trans "Town planning service:"%}</label> <span class='value'>{{ item.town_planning_service }}</span></p>{% endif %} -{% if item.permit_type %}<p><label>{%trans "Permit type:"%}</label> <span class='value'>{{ item.permit_type }}</span></p>{% endif %} -{% if item.permit_reference %}<p><label>{%trans "Permit reference:"%}</label> <span class='value'>{{ item.permit_reference }}</span></p>{% endif %} -{% if item.general_contractor.attached_to %}<p><label>{%trans "General contractor organisation:"%}</label> <span class='value'>{{ item.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city --> -{% if item.general_contractor %}<p><label>{%trans "General contractor:"%}</label> <span class='value'>{{ item.general_contractor.full_label }}</span></p>{% endif %} -{% endif %} - -<table> - <caption>{%trans "Admninistrative acts"%}</caption> - <tr> - <th>{% trans "Year" %}</th> - <th>{% trans "Reference" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Date" %}</th> - </tr> - {% for act in item.administrative_act.all %} - <tr> - <td>{{act.signature_date.year}}</td> - <td>{{act.ref_sra}}</td> - <td class='string'>{{act.act_type}}</td> - <td>{{act.signature_date}}</td> - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No administrative act associated to this archaelogical file" %}</td></tr> - {% endfor %} -</table> - -<table> - <caption>{%trans "Associated operations"%}</caption> - <tr> - <th>{% trans "Year" %}</th> - <th>{% trans "Reference" %}</th> - <th>Code Patriarche</th> - <th>{% trans "Type" %}</th> - <th>{% trans "In charge" %}</th> - <th>{% trans "Start date" %}</th> - <th>{% trans "Excavation end date" %}</th> - <th class='link'> </th> - </tr> - {% for operation in item.operations.all %} - <tr> - <td>{{operation.year}}</td> - <td>{{operation.operation_code}}</td> - <td>{{operation.code_patriarche|default:""}}</td> - <td class='string'>{{operation.operation_type}}</td> - <td class='string'>{{operation.in_charge|default:""}}</td> - <td>{{operation.start_date|default:""}}</td> - <td>{{operation.excavation_end_date|default:""}}</td> - <td class='link'><a href="#" onclick='load_window("{%url show-operation operation.pk ''%}")'>{% trans "Details" %}</a></td> - </tr> - {% empty %} - <tr><td colspan="8" class='no_items'>{% trans "No operation associated to this archaelogical file" %}</td></tr> - {% endfor %} -</table> - -<table> - <caption>{%trans "Admninistrative acts linked to associated operations"%}</caption> - <tr> - <th>{% trans "Year" %}</th> - <th>{% trans "Reference" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Date" %}</th> - </tr> - {% for act in item.operation_acts %} - <tr> - <td>{{act.signature_date.year}}</td> - <td>{{act.ref_sra}}</td> - <td class='string'>{{act.act_type}}</td> - <td>{{act.signature_date}}</td> - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No administrative act linked to operations" %}</td></tr> - {% endfor %} -</table> -{% endblock %} diff --git a/ishtar_common/templates/sheet_file_pdf.html b/ishtar_common/templates/sheet_file_pdf.html deleted file mode 100644 index 3c77c75f8..000000000 --- a/ishtar_common/templates/sheet_file_pdf.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "sheet_file.html" %} -{% block css_head %} -<link rel="stylesheet" href="{{MEDIA_URL}}/media/style_basic.css" /> -{% endblock %} -{% block main_head %} -{{ block.super }} -<div id="pdfheader"> -Ishtar – {{APP_NAME}} – {{item}} -</div> -{% endblock %} -{%block head_sheet%}{%endblock%} -{%block main_foot%} -<div id="pdffooter"> -– <pdf:pagenumber/> – -</div> -</body> -</html> -{%endblock%} diff --git a/ishtar_common/templates/sheet_file_window.html b/ishtar_common/templates/sheet_file_window.html deleted file mode 100644 index e9debdd0d..000000000 --- a/ishtar_common/templates/sheet_file_window.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "sheet_file.html" %} -{% block main_head %}{%endblock%} -{% block main_foot %}{%endblock%} diff --git a/ishtar_common/templates/sheet_operation.html b/ishtar_common/templates/sheet_operation.html deleted file mode 100644 index 7b161f641..000000000 --- a/ishtar_common/templates/sheet_operation.html +++ /dev/null @@ -1,183 +0,0 @@ -{% extends "sheet.html" %} -{% load i18n %} -{% block content %} -<div class='tool'>{%trans "Export as:"%} <a href='{% url show-operation item.pk "odt" %}'>{%trans "OpenOffice.org file"%}</a>, <a href='{% url show-operation item.pk "pdf" %}'>{%trans "PDF file"%}</a></div> -<h3>{% trans "General"%}</h3> -<p><label>{%trans "Year:"%}</label> <span class='value'>{{ item.year }}</span></p> -{% if item.operation.operation_code %}<p><label>{%trans "Numerical reference:"%}</label> <span class='value'>{{ item.operation_code }}</span></p>{% endif %} - -{% if item.code_patriarche %}<p><label>{%trans "Patriarche OA code:"%}</label> <span class='value'>{{ item.code_patriarche }}</span></p>{%else%} -<p class='alert'>{%trans "Patriarche OA code not yet recorded!"%}</p>{%endif%} - -{#<p><label>{%trans "Operation's name:"%}</label> <span class='value'>{{ item.internal_reference }}</span></p>#} - -<p><label>{%trans "Edition date:"%}</label> <span class='value'>{{ item.history.all.0.history_date }}</span></p> <!-- date = now --> - -{% if item.start_date %}<p><label>{%trans "Begining date:"%}</label> <span class='value'>{{ item.start_date }}</span></p> -<p><label>{%trans "Excavation end date:"%}</label> <span class='value'>{{ item.excavation_end_date|default:"-" }}</span></p> -{%endif%} -{% if item.in_charge %}<p><label>{%trans "Head scientist:"%}</label> <span class='value'>{{ item.in_charge.full_label }}</span></p>{%endif%} -<p><label>{%trans "State:"%}</label> <span class='value'>{% if item.is_active %}{%trans "Active file"%}</span></p> -{% else %}{%trans "Closed operation"%}</span></p> -<p><label>{%trans "Closing date:"%}</label> <span class='value'>{{ item.closing.date }} <strong>{%trans "by" %}</strong> {{ item.closing.user }}</span></p> -{% endif %} -<p><label>{%trans "Type:"%}</label> <span class='value'>{{ item.operation_type }}</span></p> -{% if item.surface %}<p><label>{%trans "Surface:"%}</label> <span class='value'>{{ item.surface }} m<sup>2</sup> ({{ item.surface_ha }} ha)</span></p>{% endif %} -{% if item.cost %}<p><label>{%trans "Cost:"%}</label> <span class='value'>{{ item.cost }} €{% if item.cost_by_m2 %}, ({{ item.cost_by_m2 }} €/m<sup>2</sup>){%endif%}</span></p>{%endif%} -{% if item.duration %}<p><label>{%trans "Duration:"%}</label> <span class='value'>{{ item.duration }} {%trans "Day"%}s</span></p>{%endif%} - -<p><label>{%trans "Remains:"%}</label> <span class='value'>{{ item.remains.all|join:", " }}</span></p> -<p><label>{%trans "Periods:"%}</label> <span class='value'>{{ item.periods.all|join:", " }}</span></p> - -{% if item.associated_file %} -<p><label>{%trans "Associated file:"%}</label> <span class='value'><a href='#' onclick='load_window("{% url show-file item.associated_file.pk ''%}")'>{{ item.associated_file }}</a></span></p><!-- Displayed as Year/index/Commune/Common_name This should be a link to the file sheet of the related file --> -{% if item.associated_file.is_preventive %} -{#{% if item.operator_reference_code %}<p><label>{%trans "Operator's reference code:"%}</label> <span class='value'>{{ item.operator_reference_code }}</span></p>{% endif %}#} -{% if item.associated_file.town_planning_service %}<p><label>{%trans "Town planning service:"%}</label> <span class='value'>{{ item.associated_file.town_planning_service }}</span></p>{% endif %} -{% if item.associated_file.permit_type %}<p><label>{%trans "Permit type:"%}</label> <span class='value'>{{ item.associated_file.permit_type }}</span></p>{% endif %} -{% if item.associated_file.permit_reference %}<p><label>{%trans "Permit reference:"%}</label> <span class='value'>{{ item.associated_file.permit_reference }}</span></p>{% endif %} -{% if item.associated_file.general_contractor.attached_to %}<p><label>{%trans "General contractor organisation:"%}</label> <span class='value'>{{ item.associated_file.general_contractor.attached_to }}</span></p>{% endif %} <!-- Contractor's organisation displayed as concat of Name/Adress/postal_code/city --> -{% if item.associated_file.general_contractor %}<p><label>{%trans "General contractor:"%}</label> <span class='value'>{{ item.associated_file.general_contractor.full_label }}</span></p>{% endif %} -{% endif %} -{% endif %} - -{% if item.comment %}<p><label>{%trans "Comment:"%}</label> <span class='value'>{{ item.comment }}</span></p>{%endif%} - -<h3>{% trans "Localisation"%}</h3> -<p><label>{%trans "Towns:"%}</label> <span class='value'>{{ item.towns.all|join:", " }}</span></p> - -<p><label>{%trans "Main address:"%}</label> <span class='value'>{{ item.associated_file.address }}</span></p> -{% if item.associated_file.address_complement %}<p><label>{%trans "Complement:"%}</label> <span class='value'>{{ item.associated_file.address_complement }}</span></p>{%endif%} -{% if item.associated_file.postal_code %}<p><label>{%trans "Postal code:"%}</label> <span class='value'>{{ item.associated_file.postal_code }}</span></p>{%endif%} - -{% comment %} -<p><label>{%trans "Lambert X:"%}</label> <span class='value'>{{ item.lambert_x }}</span></p> -<p><label>{%trans "Lambert Y:"%}</label> <span class='value'>{{ item.lambert_y }}</span></p> -<p><label>{%trans "Altitude (m NGF):"%}</label> <span class='value'>{{ item.altitude }}</span></p> -{% endcomment %} -<table> - <caption>{%trans "Associated parcels"%}</caption> - <tr> - <th>{% trans "Commune" %}</th> - <th>{% trans "Year" %}</th> - <th>{% trans "Section" %}</th> - <th>{% trans "Parcel" %}</th> - {#<th>{% trans "Owner" %}</th>#} - </tr> - {% for parcel in item.parcels.all %} - <tr> - <td class='string'>{{parcel.town}}</td> - <td>{{parcel.year}}</td> - <td>{{parcel.section}}</td> - <td>{{parcel.parcel_number}}</td> - {#<td class='string'>{{operation.parcel.owner}}</td>#} - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No parcel associated to this operation" %}</td></tr> - {% endfor %} -</table> - -<table> - <caption>{%trans "Admninistrative acts"%}</caption> - <tr> - <th>{% trans "Year" %}</th> - <th>{% trans "Reference" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Date" %}</th> - </tr> - {% for act in item.administrative_act.all %} - <tr> - <td>{{act.signature_date.year}}</td> - <td>{{act.ref_sra}}</td> - <td class='string'>{{act.act_type}}</td> - <td class="string">{{act.signature_date}}</td> - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No acts associated to this operation" %}</td></tr> - {% endfor %} -</table> - -<h3>{% trans "Scientific documentation"%}</h3> -<table> - <caption>{%trans "Documents"%}</caption> - <tr> - <th>{% trans "Title" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Authors" %}</th> - {#<th>{% trans "Localisation" %}</th>#} - </tr> - {% for doc in item.source.all %} - <tr> - <td class='string'>{{ doc.title }}</td> - <td class='string'>{{doc.source_type}}</td> - <td class='string'>{{ doc.authors.all|join:", " }}</td> - {#<td>{{ doc.localisation }}</td>#} - </tr> - {% empty %} - <tr><td colspan="4" class='no_items'>{% trans "No scientific document associated to this operation" %}</td></tr> - {% endfor %} -</table> - -<table> - <caption>{%trans "Context records"%}</caption> - <tr> - <th>{% trans "ID" %}</th> - <th>{% trans "Type" %}</th> - <th>{% trans "Chronology" %}</th> - <th>{% trans "Description" %}</th> - <th>{% trans "Parcel" %}</th> - <th class='link'> </th> - </tr> - {% for context_record in item.context_record.all %} - <tr> - <td class='string'>{{ context_record.label }}</td> - <td class='string'>{{context_record.unit|default:""}}</td> - <td class='string'>{{ context_record.datings.all|join:", " }}</td>{# periods ?#} - <td class='string'>{{ context_record.description }}</td> - <td class='string'>{{ context_record.parcel.section }} - {{context_record.parcel.parcel_number}}</td> - <td class='link'><a href="#" onclick='load_window("{%url show-contextrecord context_record.pk ''%}")'>{% trans "Details" %}</a></td> - </tr> - {% empty %} - <tr><td colspan="6" class='no_items'>{% trans "No context record associated to this operation" %}</td></tr> - {% endfor %} -</table> -<div class='table'> -<table> - <caption>{%trans "Finds"%}</caption> - <tr> - <th>{% trans "Find" %}</th> - <th>{% trans "Material type" %}</th> - <th>{% trans "Context record" %}</th> - <th>{% trans "Periods" %}</th> - <th>{% trans "Description" %}</th> - <th>{% trans "Weight" %}</th> - <th>{% trans "Numbers" %}</th> - <th>{% trans "Parcel" %}</th> - <th class='link'> </th> - </tr> - {% for context_record in item.context_record.all %} - {% for find in context_record.base_finds.all %} - <tr> - <td class="ref">{{ find.full_label }}</td> -{# Displayed as (Patriarche operation code)-(Record unit label)-(Finds label). #} -{# or displayed as (Year)-(index)-(Record unit label)-(Finds label). #} - <td class="ref">{{ find.material_type_label }}</td> - <td>{{find.context_record.label}}</td> - <td class='string'>{{ find.get_last_find.dating}}</td>{# TODO .all|join:", " ? #} - <td class='string'>{{ find.get_last_find.description }}</td> - <td>{{ find.get_last_find.weight }}</td> - <td>{{ find.get_last_find.item_number }}</td> - <td class="ref">{{ context_record.parcel.short_label }}</td> - <td class='link'><a href="#">{% trans "Details" %}</a></td> - {#<a href="#" onclick='load_window("{% url show-find find.pk%}");'>{%trans "Details"%}</a></td>#} - </tr> - {% empty %} - <tr><td colspan="9" class='no_items'>{% trans "No find associated to context record" %} {{context_record.short_label}}</td></tr> - {% endfor %} - {% empty %} - <tr><td colspan="9" class='no_items'>{% trans "No find associated to parcel" %} {{parcel.short_label}} {% trans "(no context record)" %}</td></tr> - {% endfor %} -</table> -</div> - -{% endblock %} diff --git a/ishtar_common/templates/sheet_operation_pdf.html b/ishtar_common/templates/sheet_operation_pdf.html deleted file mode 100644 index 3397d5f43..000000000 --- a/ishtar_common/templates/sheet_operation_pdf.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends "sheet_operation.html" %} -{% block css_head %} -<link rel="stylesheet" href="{{MEDIA_URL}}/media/style_basic.css" /> -{% endblock %} -{% block main_head %} -{{ block.super }} -<div id="pdfheader"> -Ishtar – {{APP_NAME}} – {{item}} -</div> -{% endblock %} -{%block head_sheet%}{%endblock%} -{%block main_foot%} -<div id="pdffooter"> -– <pdf:pagenumber/> – -</div> -</body> -</html> -{%endblock%} diff --git a/ishtar_common/templates/sheet_operation_window.html b/ishtar_common/templates/sheet_operation_window.html deleted file mode 100644 index 9c595a1e9..000000000 --- a/ishtar_common/templates/sheet_operation_window.html +++ /dev/null @@ -1,3 +0,0 @@ -{% extends "sheet_operation.html" %} -{% block main_head %}{%endblock%} -{% block main_foot %}{%endblock%} diff --git a/ishtar_common/templatetags/inline_formset.py b/ishtar_common/templatetags/inline_formset.py new file mode 100644 index 000000000..c3220f207 --- /dev/null +++ b/ishtar_common/templatetags/inline_formset.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from django import template +from django.utils.translation import ugettext as _ +import re + +register = template.Library() + +@register.inclusion_tag('blocks/inline_formset.html') +def inline_formset(caption, formset, header=True, skip=False): + u""" + Render a formset as an inline table. + For i18n of the caption be carreful to add manualy the caption label to + the translated fields + """ + return {'caption':caption, 'formset':formset, 'header':header, 'skip':skip} + diff --git a/ishtar_common/templatetags/table_form.py b/ishtar_common/templatetags/table_form.py index 7adb54d65..0ab49d93f 100644 --- a/ishtar_common/templatetags/table_form.py +++ b/ishtar_common/templatetags/table_form.py @@ -5,6 +5,6 @@ from django.template import Library register = Library() -@register.inclusion_tag('form_snippet.html') +@register.inclusion_tag('blocks/form_snippet.html') def table_form(form): return {'form': form} diff --git a/ishtar_common/views.py b/ishtar_common/views.py index 4a1a656d9..641ca8046 100644 --- a/ishtar_common/views.py +++ b/ishtar_common/views.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -170,10 +170,10 @@ def format_val(val): return unicode(val) HIERARCHIC_LEVELS = 5 -HIERARCHIC_FIELDS = ['period', 'unit', 'material_type'] +HIERARCHIC_FIELDS = ['periods', 'period', 'unit', 'material_type'] PRIVATE_FIELDS = ('id', 'history_modifier', 'order') def get_item(model, func_name, default_name, extra_request_keys=[], - base_request={}, bool_fields=[]): + base_request={}, bool_fields=[], dated_fields=[]): """ Generic treatment of tables """ @@ -213,7 +213,18 @@ def get_item(model, func_name, default_name, extra_request_keys=[], dct.pop(k) else: dct[k] = dct[k] == u"2" and True or False - + for k in dated_fields: + if k in dct: + if not dct[k]: + dct.pop(k) + try: + items = dct[k].split('/') + assert len(items) == 3 + dct[k] = datetime.date(*map(lambda x: int(x), + reversed(items)) + ).strftime('%Y-%m-%d') + except AssertionError: + dct.pop(k) # manage hierarchic conditions or_reqs = [] for req in dct.copy(): @@ -373,7 +384,7 @@ def show_item(model, name): n.strftime('%Y%m%d-%H%M%S')) if doc_type == "odt" and settings.XHTML2ODT_PATH and \ settings.ODT_TEMPLATE: - tpl = loader.get_template('sheet_%s.html' % name) + tpl = loader.get_template('ishtar/sheet_%s.html' % name) content = tpl.render(context_instance) try: tidy_options = dict(output_xhtml=1, add_xml_decl=1, indent=1, @@ -413,7 +424,7 @@ def show_item(model, name): response.write(odtfile) return response elif doc_type == 'pdf': - tpl = loader.get_template('sheet_%s_pdf.html' % name) + tpl = loader.get_template('ishtar/sheet_%s_pdf.html' % name) content = tpl.render(context_instance) result = StringIO.StringIO() html = content.encode('utf-8') @@ -427,7 +438,7 @@ def show_item(model, name): return response return HttpResponse(content, content_type="application/xhtml") else: - tpl = loader.get_template('sheet_%s_window.html' % name) + tpl = loader.get_template('ishtar/sheet_%s_window.html' % name) content = tpl.render(context_instance) return HttpResponse(content, content_type="application/xhtml") return func diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index ecc48a1e8..06d6f20f0 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -206,7 +206,7 @@ class JQueryJqGrid(forms.RadioSelect): self.source_full = source_full
def render(self, name, value=None, attrs=None):
- t = loader.get_template('form_snippet.html')
+ t = loader.get_template('blocks/form_snippet.html')
rendered = t.render(Context({'form':self.form}))
rendered += u"\n</table>\n"\
u"<button id='search_%s' class='submit'>%s</button>" % (
@@ -219,8 +219,8 @@ class JQueryJqGrid(forms.RadioSelect): rendered += "\n<h4>%s</h4>\n" % unicode(_("Search and select an item"))
extra_cols = []
col_names, col_idx = [], []
- for k in self.form.fields:
- field = self.form.fields[k]
+ for k in self.form.get_input_ids():
+ #field = self.form.fields[k]
col_idx.append(u'"%s"' % k)
for field_name in getattr(self.associated_model, self.table_cols):
field = self.associated_model
@@ -292,7 +292,7 @@ class JQueryJqGrid(forms.RadioSelect): }
}
var mygrid = jQuery("#grid_%(name)s");
- var url = "%(source)s?submited=1&" + data;
+ var url = "%(source)s?submited=1&" + data;
mygrid.setGridParam({url:url});
mygrid.trigger("reloadGrid");
return false;
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py index 8b6e1a50d..e421c25dd 100644 --- a/ishtar_common/wizards.py +++ b/ishtar_common/wizards.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -# Copyright (C) 2010-2012 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +# Copyright (C) 2010-2013 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -461,15 +461,26 @@ class Wizard(NamedUrlWizardView): k = u'-'.join(items) data[k] = data.pop(key)[0] # get a form key - base_key = form.form.base_fields.keys()[0] - init = self.get_form_initial(step) + frm = form.form + if callable(frm): + frm = frm() + base_key = frm.base_fields.keys()[-1] + init = self.get_form_initial(step, data=data) total_field = len([key for key in data.keys() if base_key in key.split('-') and data[key]]) - if init and not to_delete: + if init and not to_delete and ( + not hasattr(self, 'form_initialized') or + not self.form_initialized): total_field = max((total_field, len(init))) data[step + u'-INITIAL_FORMS'] = unicode(total_field) data[step + u'-TOTAL_FORMS'] = unicode(total_field + 1) + # update initialization + if request.POST and init and hasattr(self, 'form_initialized') \ + and self.form_initialized: + for k in init[0]: + data[step + '-' + unicode(total_field) + '-' + k] = \ + init[0][k] data = data or None form = super(Wizard, self).get_form(step, data, files) return form @@ -561,7 +572,7 @@ class Wizard(NamedUrlWizardView): pass return current_obj - def get_form_initial(self, step): + def get_form_initial(self, step, data=None): current_obj = self.get_current_object() current_step = self.steps.current request = self.request |
