summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2018-01-15 18:34:54 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2018-01-15 18:34:54 +0100
commita33ee7dac0ee1f1c561664598eddfdfa3d2e9314 (patch)
tree0b0e03536d5e20e14a13d7805ce1e75f1fca04ea
parent72b51a6558b78717c2fb55aba03abe2c8bbd9f72 (diff)
downloadIshtar-a33ee7dac0ee1f1c561664598eddfdfa3d2e9314.tar.bz2
Ishtar-a33ee7dac0ee1f1c561664598eddfdfa3d2e9314.zip
UI: adapt each form to use the new date widget. Force localization of format.
-rw-r--r--archaeological_context_records/forms.py9
-rw-r--r--archaeological_files/forms.py19
-rw-r--r--archaeological_files_pdl/forms.py15
-rw-r--r--archaeological_finds/forms.py15
-rw-r--r--archaeological_finds/forms_treatments.py37
-rw-r--r--archaeological_operations/forms.py34
-rw-r--r--archaeological_warehouse/forms.py3
-rw-r--r--bootstrap_datepicker/widgets.py31
-rw-r--r--ishtar_common/context_processors.py7
-rw-r--r--ishtar_common/forms.py41
-rw-r--r--ishtar_common/forms_common.py9
-rw-r--r--ishtar_common/templates/base.html3
-rw-r--r--ishtar_common/widgets.py41
13 files changed, 126 insertions, 138 deletions
diff --git a/archaeological_context_records/forms.py b/archaeological_context_records/forms.py
index d90f698dd..ea47be311 100644
--- a/archaeological_context_records/forms.py
+++ b/archaeological_context_records/forms.py
@@ -35,10 +35,11 @@ from archaeological_operations.models import Period, Parcel, Operation, \
import models
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
from archaeological_operations.widgets import OAWidget
from ishtar_common.forms import FinalForm, FormSet, \
reverse_lazy, get_form_selection, TableSelect, ManageOldType, CustomForm,\
- FieldType
+ FieldType, IshtarForm
from ishtar_common.forms_common import get_town_field, SourceSelect
from archaeological_operations.forms import OperationSelect, ParcelField,\
RecordRelationsForm as OpeRecordRelationsForm, RecordRelationsFormSetBase
@@ -132,7 +133,7 @@ class RecordFormSelection(forms.Form):
return cleaned_data
-class RecordFormGeneral(CustomForm, ManageOldType, forms.Form):
+class RecordFormGeneral(CustomForm, ManageOldType):
form_label = _("General")
form_admin_name = _(u"Context record - 020 - General")
form_slug = "contextrecord-020-general"
@@ -163,9 +164,9 @@ class RecordFormGeneral(CustomForm, ManageOldType, forms.Form):
unit = forms.ChoiceField(label=_(u"Context record type"), required=False,
choices=[])
opening_date = forms.DateField(label=_(u"Opening date"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
closing_date = forms.DateField(label=_(u"Closing date"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
documentation = forms.MultipleChoiceField(
label=_("Documentation"), choices=[], required=False,
widget=forms.CheckboxSelectMultiple)
diff --git a/archaeological_files/forms.py b/archaeological_files/forms.py
index ee5815506..d72791ac0 100644
--- a/archaeological_files/forms.py
+++ b/archaeological_files/forms.py
@@ -37,12 +37,13 @@ from archaeological_operations.models import ActType, AdministrativeAct, \
import models
from ishtar_common.forms import FinalForm, get_now, reverse_lazy, TableSelect, \
- ManageOldType, CustomForm, FieldType
+ ManageOldType, CustomForm, FieldType, IshtarForm
from ishtar_common.forms_common import get_town_field
from archaeological_operations.forms import AdministrativeActOpeForm, \
AdministrativeActOpeFormSelection, \
ParcelField, SLICING, AdministrativeActModifForm, ParcelForm, ParcelFormSet
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
class FileSelect(TableSelect):
@@ -145,7 +146,7 @@ DATE_SOURCE = (('creation', _(u"Creation date")),
("reception", _(u"Reception date")))
-class DashboardForm(forms.Form):
+class DashboardForm(IshtarForm):
slicing = forms.ChoiceField(
label=_("Slicing"), choices=SLICING, required=False)
department_detail = forms.BooleanField(
@@ -157,9 +158,9 @@ class DashboardForm(forms.Form):
saisine_type = forms.ChoiceField(
label=_("Saisine type"), choices=[], required=False)
after = forms.DateField(
- label=_(u"Date after"), widget=widgets.JQueryDate, required=False)
+ label=_(u"Date after"), widget=DatePicker, required=False)
before = forms.DateField(
- label=_(u"Date before"), widget=widgets.JQueryDate, required=False)
+ label=_(u"Date before"), widget=DatePicker, required=False)
def __init__(self, *args, **kwargs):
if 'prefix' not in kwargs:
@@ -195,7 +196,7 @@ class DashboardForm(forms.Form):
return fltr
-class FileFormGeneral(ManageOldType, forms.Form):
+class FileFormGeneral(ManageOldType):
form_label = _("General")
associated_models = {'in_charge': Person,
'related_file': models.File,
@@ -219,7 +220,7 @@ class FileFormGeneral(ManageOldType, forms.Form):
label=_(u"Other reference"), max_length=60, required=False)
name = forms.CharField(label=_(u"Name"), required=False, max_length=100)
creation_date = forms.DateField(label=_(u"Creation date"),
- initial=get_now, widget=widgets.JQueryDate)
+ initial=get_now, widget=DatePicker)
file_type = forms.ChoiceField(label=_("File type"), choices=[])
related_file = forms.IntegerField(
label=_("Related file"), required=False,
@@ -323,7 +324,7 @@ class FileFormPreventive(ManageOldType, forms.Form):
saisine_type = forms.ChoiceField(label=_(u"Saisine type"),
choices=[])
reception_date = forms.DateField(
- label=_(u"Reception date"), initial=get_now, widget=widgets.JQueryDate)
+ label=_(u"Reception date"), initial=get_now, widget=DatePicker)
def __init__(self, *args, **kwargs):
super(FileFormPreventive, self).__init__(*args, **kwargs)
@@ -445,9 +446,9 @@ class AdministrativeActFileSelect(TableSelect):
max_length=300)
signature_date_after = forms.DateField(
- label=_(u"Signature date after"), widget=widgets.JQueryDate)
+ label=_(u"Signature date after"), widget=DatePicker)
signature_date_before = forms.DateField(
- label=_(u"Signature date before"), widget=widgets.JQueryDate)
+ label=_(u"Signature date before"), widget=DatePicker)
associated_file__name = forms.CharField(
label=_(u"File name"), max_length=200)
associated_file__general_contractor = forms.IntegerField(
diff --git a/archaeological_files_pdl/forms.py b/archaeological_files_pdl/forms.py
index bc9b0c1e6..14cb0e4d9 100644
--- a/archaeological_files_pdl/forms.py
+++ b/archaeological_files_pdl/forms.py
@@ -30,12 +30,13 @@ from ishtar_common.models import Person, Town, Department, valid_id, \
from archaeological_files import models
from ishtar_common.forms import get_now, reverse_lazy, ManageOldType, \
- CustomForm, FieldType
+ CustomForm, FieldType, IshtarForm
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
-class FileFormGeneral(CustomForm, ManageOldType, forms.Form):
+class FileFormGeneral(CustomForm, ManageOldType):
form_label = _("General")
form_admin_name = _(u"Archaeological file - 010 - General")
form_slug = "file-010-general"
@@ -46,9 +47,9 @@ class FileFormGeneral(CustomForm, ManageOldType, forms.Form):
validators=[validators.MinValueValidator(1000),
validators.MaxValueValidator(2100)])
creation_date = forms.DateField(label=_(u"Creation date"),
- initial=get_now, widget=widgets.JQueryDate)
+ initial=get_now, widget=DatePicker)
reception_date = forms.DateField(
- label=_(u"Reception date"), initial=get_now, widget=widgets.JQueryDate)
+ label=_(u"Reception date"), initial=get_now, widget=DatePicker)
TYPES = [
FieldType('file_type', models.FileType),
@@ -403,7 +404,7 @@ class FileFormPlanningService(CustomForm, forms.Form):
)
-class FileFormInstruction(CustomForm, forms.Form):
+class FileFormInstruction(CustomForm, IshtarForm):
form_label = u"Instruction SRA"
form_admin_name = _("Archaeological file - 050 - Instruction")
form_slug = "file-050-instruction"
@@ -428,7 +429,7 @@ class FileFormInstruction(CustomForm, forms.Form):
validators=[valid_id(models.File)])
comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea,
required=False)
- instruction_deadline = forms.DateField(widget=widgets.JQueryDate,
+ instruction_deadline = forms.DateField(widget=DatePicker,
required=False)
year = forms.IntegerField(label=_("Year"),
validators=[validators.MinValueValidator(1000),
@@ -436,7 +437,7 @@ class FileFormInstruction(CustomForm, forms.Form):
numeric_reference = forms.IntegerField(label=_("Numeric reference"),
required=False)
numeric_reference_is_readonly = True
- end_date = forms.DateField(widget=widgets.JQueryDate, required=False)
+ end_date = forms.DateField(widget=DatePicker, required=False)
def __init__(self, *args, **kwargs):
c_year = datetime.date.today().year
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py
index 001c10052..458a3baa8 100644
--- a/archaeological_finds/forms.py
+++ b/archaeological_finds/forms.py
@@ -41,11 +41,12 @@ import models
from ishtar_common.forms import FormSet, FloatField, \
get_form_selection, reverse_lazy, TableSelect, get_now, FinalForm, \
- ManageOldType, FieldType
+ ManageOldType, FieldType, IshtarForm
from ishtar_common.forms_common import get_town_field, SourceSelect, CustomForm
from ishtar_common.utils import convert_coordinates_to_point
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
from archaeological_operations.widgets import OAWidget
from archaeological_warehouse.models import Warehouse
@@ -126,7 +127,7 @@ class RecordFormSelection(CustomForm, forms.Form):
cr.operation.pk)
-class FindForm(CustomForm, ManageOldType, forms.Form):
+class FindForm(CustomForm, ManageOldType):
file_upload = True
form_label = _("Find")
form_admin_name = _(u"Find - 020 - General")
@@ -147,7 +148,7 @@ class FindForm(CustomForm, ManageOldType, forms.Form):
description = forms.CharField(label=_("Description"),
widget=forms.Textarea, required=False)
get_first_base_find__discovery_date = forms.DateField(
- label=_(u"Discovery date"), widget=widgets.JQueryDate, required=False)
+ label=_(u"Discovery date"), widget=DatePicker, required=False)
get_first_base_find__batch = forms.ChoiceField(
label=_(u"Batch/object"), choices=[],
required=False)
@@ -196,7 +197,7 @@ class FindForm(CustomForm, ManageOldType, forms.Form):
mark = forms.CharField(label=_(u"Mark"), required=False)
checked = forms.ChoiceField(label=_(u"Check"))
check_date = forms.DateField(
- initial=get_now, label=_(u"Check date"), widget=widgets.JQueryDate)
+ initial=get_now, label=_(u"Check date"), widget=DatePicker)
comment = forms.CharField(label=_(u"Comment"), required=False,
widget=forms.Textarea)
dating_comment = forms.CharField(
@@ -268,7 +269,7 @@ class FindForm(CustomForm, ManageOldType, forms.Form):
return self.cleaned_data
-class PreservationForm(CustomForm, ManageOldType, forms.Form):
+class PreservationForm(CustomForm, ManageOldType):
form_label = _("Preservation")
form_admin_name = _(u"Find - 030 - Preservation")
form_slug = "find-030-preservation"
@@ -295,7 +296,7 @@ class PreservationForm(CustomForm, ManageOldType, forms.Form):
choices=[], required=False)
insurance_value = FloatField(label=_(u"Insurance value"), required=False)
appraisal_date = forms.DateField(
- label=_(u"Appraisal date"), widget=widgets.JQueryDate, required=False)
+ label=_(u"Appraisal date"), widget=DatePicker, required=False)
conservatory_comment = forms.CharField(
label=_(u"Conservatory comment"), required=False,
widget=forms.Textarea)
@@ -729,7 +730,7 @@ class NewFindBasketForm(forms.ModelForm):
return super(NewFindBasketForm, self).save(commit)
-class SelectFindBasketForm(forms.Form):
+class SelectFindBasketForm(IshtarForm):
form_label = _(u"Basket")
associated_models = {'basket': models.FindBasket}
need_user_for_initialization = True
diff --git a/archaeological_finds/forms_treatments.py b/archaeological_finds/forms_treatments.py
index a1cb4a8b5..47826390f 100644
--- a/archaeological_finds/forms_treatments.py
+++ b/archaeological_finds/forms_treatments.py
@@ -37,10 +37,11 @@ from archaeological_operations.forms import AdministrativeActOpeForm, \
AdministrativeActOpeFormSelection, AdministrativeActModifForm
from ishtar_common.forms import reverse_lazy, TableSelect, FinalForm, \
- ManageOldType, get_form_selection, CustomForm, FieldType
+ ManageOldType, get_form_selection, CustomForm, FieldType, IshtarForm
from ishtar_common.forms_common import SourceSelect
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
logger = logging.getLogger(__name__)
@@ -75,7 +76,7 @@ class TreatmentFormSelection(forms.Form):
validators=[valid_id(models.Treatment)])
-class BaseTreatmentForm(CustomForm, ManageOldType, forms.Form):
+class BaseTreatmentForm(CustomForm, ManageOldType):
form_label = _(u"Base treatment")
form_admin_name = _(u"Treatment - 020 - General")
form_slug = "treatment-020-general"
@@ -137,9 +138,9 @@ class BaseTreatmentForm(CustomForm, ManageOldType, forms.Form):
comment = forms.CharField(label=_(u"Comment"),
widget=forms.Textarea, required=False)
start_date = forms.DateField(label=_(u"Start date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
end_date = forms.DateField(label=_(u"Closing date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
estimated_cost = forms.FloatField(label=_(u"Estimated cost ({currency})"),
required=False)
quoted_cost = forms.FloatField(label=_(u"Quoted cost ({currency})"),
@@ -287,7 +288,7 @@ SLICING = (("month", _(u"months")), ('year', _(u"years")),)
DATE_SOURCE = (("start", _(u"Start date")), ("end", _(u"Closing date")),)
-class DashboardForm(forms.Form):
+class DashboardForm(IshtarForm):
slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,
required=False)
date_source = forms.ChoiceField(
@@ -295,9 +296,9 @@ class DashboardForm(forms.Form):
treatment_type = forms.ChoiceField(label=_("Treatment type"), choices=[],
required=False)
after = forms.DateField(label=_(u"Date after"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
before = forms.DateField(label=_(u"Date before"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
def __init__(self, *args, **kwargs):
if 'prefix' not in kwargs:
@@ -338,9 +339,9 @@ class AdministrativeActTreatmentSelect(TableSelect):
max_length=300)
signature_date_after = forms.DateField(
- label=_(u"Signature date after"), widget=widgets.JQueryDate)
+ label=_(u"Signature date after"), widget=DatePicker)
signature_date_before = forms.DateField(
- label=_(u"Signature date before"), widget=widgets.JQueryDate)
+ label=_(u"Signature date before"), widget=DatePicker)
treatment__name = forms.CharField(
label=_(u"Treatment name"), max_length=200)
treatment__year = forms.IntegerField(label=_(u"Treatment year"))
@@ -441,7 +442,7 @@ class TreatmentFileFormSelection(forms.Form):
validators=[valid_id(models.TreatmentFile)])
-class TreatmentFileForm(ManageOldType, forms.Form):
+class TreatmentFileForm(ManageOldType):
form_label = _(u"Treatment request")
base_models = ['treatment_type_type']
associated_models = {
@@ -482,13 +483,13 @@ class TreatmentFileForm(ManageOldType, forms.Form):
comment = forms.CharField(label=_(u"Comment"),
widget=forms.Textarea, required=False)
creation_date = forms.DateField(label=_(u"Start date"), required=False,
- widget=widgets.JQueryDate,
+ widget=DatePicker,
initial=lambda: datetime.datetime.now())
reception_date = forms.DateField(
- label=_(u"Reception date"), required=False, widget=widgets.JQueryDate,
+ label=_(u"Reception date"), required=False, widget=DatePicker,
initial=lambda: datetime.datetime.now())
end_date = forms.DateField(label=_(u"Closing date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
def __init__(self, *args, **kwargs):
user = kwargs.pop('user')
@@ -542,7 +543,7 @@ DATE_SOURCE_FILE = (
("end", _(u"Closing date")),)
-class DashboardTreatmentFileForm(forms.Form):
+class DashboardTreatmentFileForm(IshtarForm):
slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,
required=False)
date_source = forms.ChoiceField(
@@ -550,9 +551,9 @@ class DashboardTreatmentFileForm(forms.Form):
treatmentfile_type = forms.ChoiceField(label=_("Treatment request type"),
choices=[], required=False)
after = forms.DateField(label=_(u"Date after"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
before = forms.DateField(label=_(u"Date before"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
def __init__(self, *args, **kwargs):
if 'prefix' not in kwargs:
@@ -591,9 +592,9 @@ class AdministrativeActTreatmentFileSelect(TableSelect):
max_length=300)
signature_date_after = forms.DateField(
- label=_(u"Signature date after"), widget=widgets.JQueryDate)
+ label=_(u"Signature date after"), widget=DatePicker)
signature_date_before = forms.DateField(
- label=_(u"Signature date before"), widget=widgets.JQueryDate)
+ label=_(u"Signature date before"), widget=DatePicker)
treatment_file__name = forms.CharField(
label=_(u"Treatment request name"), max_length=200)
treatment_file__year = forms.IntegerField(
diff --git a/archaeological_operations/forms.py b/archaeological_operations/forms.py
index 2b6e2773e..00b99ea2b 100644
--- a/archaeological_operations/forms.py
+++ b/archaeological_operations/forms.py
@@ -529,11 +529,11 @@ class OperationSelect(TableSelect):
start_before = forms.DateField(label=_(u"Started before"),
widget=DatePicker)
start_after = forms.DateField(label=_(u"Started after"),
- widget=widgets.JQueryDate)
+ widget=DatePicker)
end_before = forms.DateField(label=_(u"Ended before"),
- widget=widgets.JQueryDate)
+ widget=DatePicker)
end_after = forms.DateField(label=_(u"Ended after"),
- widget=widgets.JQueryDate)
+ widget=DatePicker)
relation_types = forms.MultipleChoiceField(
label=_(u"Search within relations"), choices=[],
widget=forms.CheckboxSelectMultiple)
@@ -565,15 +565,15 @@ class OperationSelect(TableSelect):
associated_model=Person),
validators=[valid_id(Person)])
documentation_deadline_before = forms.DateField(
- label=_(u"Documentation deadline before"), widget=widgets.JQueryDate)
+ label=_(u"Documentation deadline before"), widget=DatePicker)
documentation_deadline_after = forms.DateField(
- label=_(u"Documentation deadline after"), widget=widgets.JQueryDate)
+ label=_(u"Documentation deadline after"), widget=DatePicker)
documentation_received = forms.NullBooleanField(
label=_(u"Documentation received"))
finds_deadline_before = forms.DateField(
- label=_(u"Finds deadline before"), widget=widgets.JQueryDate)
+ label=_(u"Finds deadline before"), widget=DatePicker)
finds_deadline_after = forms.DateField(
- label=_(u"Finds deadline after"), widget=widgets.JQueryDate)
+ label=_(u"Finds deadline after"), widget=DatePicker)
finds_received = forms.NullBooleanField(
label=_(u"Finds received"))
@@ -693,7 +693,7 @@ PREVENTIVE_RESARCH = (('all', _('All')),
('research', _(u"Research")),)
-class DashboardForm(forms.Form):
+class DashboardForm(IshtarForm):
slicing = forms.ChoiceField(label=_("Slicing"), choices=SLICING,
required=False)
department_detail = forms.BooleanField(
@@ -708,9 +708,9 @@ class DashboardForm(forms.Form):
operator = forms.ChoiceField(label=_("Operator"), choices=[],
required=False)
after = forms.DateField(label=_(u"Date after"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
before = forms.DateField(label=_(u"Date before"),
- widget=widgets.JQueryDate, required=False)
+ widget=DatePicker, required=False)
with_report = forms.BooleanField(label=_("With reports"), required=False)
with_finds = forms.BooleanField(label=_("With finds"), required=False)
@@ -833,18 +833,18 @@ class OperationFormGeneral(CustomForm, ManageOldType):
validators=[validators.MinValueValidator(0),
validators.MaxValueValidator(999999999)])
start_date = forms.DateField(
- label=_(u"Start date"), required=False, widget=widgets.JQueryDate)
+ label=_(u"Start date"), required=False, widget=DatePicker)
excavation_end_date = forms.DateField(
label=_(u"Excavation end date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
report_delivery_date = forms.DateField(
label=_(u"Report delivery date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
report_processing = forms.ChoiceField(label=_(u"Report processing"),
choices=[], required=False)
if settings.COUNTRY == 'fr':
cira_date = forms.DateField(label=u"Date avis CIRA", required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
negative_result = forms.NullBooleanField(
required=False, label=u"Résultat considéré comme négatif")
cira_rapporteur = forms.IntegerField(
@@ -861,12 +861,12 @@ class OperationFormGeneral(CustomForm, ManageOldType):
validators=[valid_id(Person)], required=False)
documentation_deadline = forms.DateField(
label=_(u"Deadline for submission of the documentation"),
- required=False, widget=widgets.JQueryDate)
+ required=False, widget=DatePicker)
documentation_received = forms.NullBooleanField(
required=False, label=_(u"Documentation received"))
finds_deadline = forms.DateField(
label=_(u"Deadline for submission of the finds"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
finds_received = forms.NullBooleanField(
required=False, label=_(u"Finds received"))
@@ -1422,7 +1422,7 @@ class AdministrativeActOpeForm(CustomForm, ManageOldType):
act_object = forms.CharField(label=_(u"Object"), max_length=300,
widget=forms.Textarea, required=False)
signature_date = forms.DateField(
- label=_(u"Signature date"), initial=get_now, widget=widgets.JQueryDate)
+ label=_(u"Signature date"), initial=get_now, widget=DatePicker)
if settings.COUNTRY == 'fr':
ref_sra = forms.CharField(label=u"Autre référence", max_length=15,
required=False)
diff --git a/archaeological_warehouse/forms.py b/archaeological_warehouse/forms.py
index da0c1c195..973da2014 100644
--- a/archaeological_warehouse/forms.py
+++ b/archaeological_warehouse/forms.py
@@ -29,6 +29,7 @@ from ishtar_common.models import Person, valid_id
from archaeological_finds.models import TreatmentType, FindBasket
import models
from ishtar_common import widgets
+from bootstrap_datepicker.widgets import DatePicker
from ishtar_common.forms import name_validator, reverse_lazy, \
get_form_selection, TableSelect, ManageOldType, FinalForm, FormSet, \
CustomForm, FieldType
@@ -279,7 +280,7 @@ class BasePackagingForm(SelectFindBasketForm):
associated_model=Person, new=True),
validators=[valid_id(Person)])
start_date = forms.DateField(
- label=_(u"Date"), required=False, widget=widgets.JQueryDate)
+ label=_(u"Date"), required=False, widget=DatePicker)
class FindPackagingFormSelection(FindMultipleFormSelection):
diff --git a/bootstrap_datepicker/widgets.py b/bootstrap_datepicker/widgets.py
index e21d11939..85a651efc 100644
--- a/bootstrap_datepicker/widgets.py
+++ b/bootstrap_datepicker/widgets.py
@@ -86,7 +86,8 @@ class DatePicker(DateTimeInput):
})(window);
</script>'''
- def __init__(self, attrs=None, format=None, options=None, div_attrs=None, icon_attrs=None):
+ def __init__(self, attrs=None, format=None, options=None, div_attrs=None,
+ icon_attrs=None):
if not icon_attrs:
icon_attrs = {'class': 'fa fa-calendar fa-2'}
if not div_attrs:
@@ -99,12 +100,10 @@ class DatePicker(DateTimeInput):
self.div_attrs = div_attrs and div_attrs.copy() or {}
self.icon_attrs = icon_attrs and icon_attrs.copy() or {}
self.picker_id = self.div_attrs.get('id') or None
- if options is False: # datepicker will not be initalized when options is False
- self.options = False
- else:
- self.options = options and options.copy() or {}
- if format and not self.options.get('format') and not self.attrs.get('date-format'):
- self.options['format'] = self.conv_datetime_format_py2js(format)
+ self.options = options and options.copy() or {}
+ if format and not self.options.get('format') and not self.attrs.get(
+ 'date-format'):
+ self.options['format'] = self.conv_datetime_format_py2js(format)
def render(self, name, value, attrs=None):
if value is None:
@@ -116,18 +115,20 @@ class DatePicker(DateTimeInput):
if value != '':
# Only add the 'value' attribute if a value is non-empty.
input_attrs['value'] = force_text(self._format_value(value))
- input_attrs = {key: conditional_escape(val) for key, val in input_attrs.items()}
+ input_attrs = {key: conditional_escape(val)
+ for key, val in input_attrs.items()}
if not self.picker_id:
- self.picker_id = (input_attrs.get('id', '') + '_pickers').replace(' ', '_')
+ self.picker_id = (input_attrs.get('id', '') + '_pickers'
+ ).replace(' ', '_')
self.div_attrs['id'] = self.picker_id
picker_id = conditional_escape(self.picker_id)
- div_attrs = {key: conditional_escape(val) for key, val in self.div_attrs.items()}
- icon_attrs = {key: conditional_escape(val) for key, val in self.icon_attrs.items()}
+ div_attrs = {key: conditional_escape(val)
+ for key, val in self.div_attrs.items()}
+ icon_attrs = {key: conditional_escape(val)
+ for key, val in self.icon_attrs.items()}
html = self.html_template % dict(div_attrs=flatatt(div_attrs),
input_attrs=flatatt(input_attrs),
icon_attrs=flatatt(icon_attrs))
- if self.options:
- js = self.js_template % dict(picker_id=picker_id, options=json_dumps(self.options or {}))
- else:
- js = ''
+ js = self.js_template % dict(picker_id=picker_id,
+ options=json_dumps(self.options or {}))
return mark_safe(force_text(html + js))
diff --git a/ishtar_common/context_processors.py b/ishtar_common/context_processors.py
index 911a28e33..ff97079d5 100644
--- a/ishtar_common/context_processors.py
+++ b/ishtar_common/context_processors.py
@@ -57,7 +57,12 @@ def get_base_context(request):
dct['JQUERY_UI_URL'] = settings.JQUERY_UI_URL
dct['COUNTRY'] = settings.COUNTRY
dct['VERSION'] = __version__
- dct['EXTRA_MEDIA'] = DatePicker().media
+ medias = [DatePicker().media]
+ dct['EXTRA_CSS'] = ""
+ dct['EXTRA_JS'] = ""
+ for media in medias:
+ dct['EXTRA_CSS'] += "\n" + "\n".join(media.render_css())
+ dct['EXTRA_JS'] += "\n" + "\n".join(media.render_js())
if settings.EXTRA_VERSION:
dct['VERSION'] += "-" + unicode(settings.EXTRA_VERSION)
profile = get_current_profile()
diff --git a/ishtar_common/forms.py b/ishtar_common/forms.py
index b31a3143f..a92aef548 100644
--- a/ishtar_common/forms.py
+++ b/ishtar_common/forms.py
@@ -28,10 +28,11 @@ from django import forms
from django.core.urlresolvers import reverse
from django.core import validators
from django.forms.formsets import BaseFormSet, DELETION_FIELD_NAME
-from django.utils import formats
+from django.utils import formats, translation
from django.utils.functional import lazy
from django.utils.translation import ugettext_lazy as _
+from bootstrap_datepicker.widgets import DatePicker
import models
import widgets
from ishtar_common.utils import MultiValueDict
@@ -241,7 +242,31 @@ class FormSet(CustomForm, BaseFormSet):
form.fields[DELETION_FIELD_NAME].widget = widgets.DeleteWidget()
-class TableSelect(forms.Form):
+DATE_FORMAT = {
+ 'fr': "dd/mm/yyyy",
+ 'en': "yyyy/mm/dd",
+}
+
+
+class IshtarForm(forms.Form):
+ def __init__(self, *args, **kwargs):
+ super(IshtarForm, self).__init__(*args, **kwargs)
+ for k in self.fields:
+ cls = 'form-control'
+ if 'class' in self.fields[k].widget.attrs:
+ cls = self.fields[k].widget.attrs['class'] + " " + cls
+ self.fields[k].widget.attrs['class'] = cls
+ widget = self.fields[k].widget
+ if not isinstance(widget, DatePicker):
+ continue
+ lang = translation.get_language()
+ if lang in DATE_FORMAT:
+ widget.options['format'] = DATE_FORMAT[lang]
+ if 'autoclose' not in widget.options:
+ widget.options['autoclose'] = 'true'
+
+
+class TableSelect(IshtarForm):
def __init__(self, *args, **kwargs):
super(TableSelect, self).__init__(*args, **kwargs)
# no field is required for search
@@ -267,7 +292,7 @@ def get_now():
class ClosingDateFormSelection(forms.Form):
form_label = _("Closing date")
end_date = forms.DateField(label=_(u"Closing date"),
- widget=widgets.JQueryDate)
+ widget=DatePicker)
def __init__(self, *args, **kwargs):
if 'initial' not in kwargs:
@@ -339,16 +364,6 @@ def get_data_from_formset(data):
return values
-class IshtarForm(forms.Form):
- def __init__(self, *args, **kwargs):
- super(IshtarForm, self).__init__(*args, **kwargs)
- for k in self.fields:
- cls = 'form-control'
- if 'class' in self.fields[k].widget.attrs:
- cls = self.fields[k].widget.attrs['class'] + " " + cls
- self.fields[k].widget.attrs['class'] = cls
-
-
class FieldType(object):
def __init__(self, key, model, is_multiple=False, extra_args=None):
self.key = key
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 4edb22c18..708e246b2 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -33,6 +33,7 @@ from django.utils.translation import ugettext_lazy as _
import models
import widgets
+from bootstrap_datepicker.widgets import DatePicker
from ishtar_common.templatetags.link_to_window import link_to_window
from forms import FinalForm, FormSet, reverse_lazy, name_validator, \
TableSelect, ManageOldType, CustomForm, FieldType
@@ -863,7 +864,7 @@ class MergeOrganizationForm(MergeForm):
######################
# Sources management #
######################
-class SourceForm(CustomForm, ManageOldType, forms.Form):
+class SourceForm(CustomForm, ManageOldType):
form_label = _(u"Documentation informations")
form_admin_name = _("Source - General")
form_slug = "source-general"
@@ -882,12 +883,12 @@ class SourceForm(CustomForm, ManageOldType, forms.Form):
associated_url = forms.URLField(
required=False, label=_(u"Numerical ressource (web address)"))
receipt_date = forms.DateField(label=_(u"Receipt date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
creation_date = forms.DateField(label=_(u"Creation date"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
receipt_date_in_documentation = forms.DateField(
label=_(u"Receipt date in documentation"), required=False,
- widget=widgets.JQueryDate)
+ widget=DatePicker)
comment = forms.CharField(label=_(u"Comment"), widget=forms.Textarea,
required=False)
description = forms.CharField(label=_(u"Description"),
diff --git a/ishtar_common/templates/base.html b/ishtar_common/templates/base.html
index 5171af374..329198be7 100644
--- a/ishtar_common/templates/base.html
+++ b/ishtar_common/templates/base.html
@@ -22,6 +22,7 @@
<script language="javascript" type="text/javascript" src="{{STATIC_URL}}js/ishtar.js?ver={{VERSION}}"></script>
<script language="javascript" type="text/javascript"
src="{{STATIC_URL}}datatables/i18n/{{LANGUAGE_CODE}}.js?ver={{VERSION}}"></script>
+ {{EXTRA_JS|safe}}
<script type='text/javascript'>
var shortcut_url = '{% url "shortcut-menu" %}';
var get_file_url = '{% url "get-file-shortcut" %}';
@@ -44,8 +45,8 @@
<link rel="stylesheet" href="{{STATIC_URL}}datatables/dataTables.bootstrap4.min.css?ver={{VERSION}}">
<link rel="stylesheet" href="{{STATIC_URL}}media/styles.css?ver={{VERSION}}">
{% for url_css in JQGRID_CSS %}<link rel="stylesheet" href="{{url_css}}?ver={{VERSION}}">{% endfor %}
+ {{EXTRA_CSS|safe}}
{% endcompress %}
- {{EXTRA_MEDIA}}
{% block extra_head %}
{% endblock %}
{% comment %}{% if raw_css %}<style media="screen" type="text/css">
diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py
index c34642cf1..e5cb35db4 100644
--- a/ishtar_common/widgets.py
+++ b/ishtar_common/widgets.py
@@ -284,47 +284,6 @@ if settings.SURFACE_UNIT == 'square-metre':
AreaWidget = SquareMeterWidget
-class JQueryDate(forms.TextInput):
- def __init__(self, *args, **kwargs):
- super(JQueryDate, self).__init__(*args, **kwargs)
- if 'class' not in self.attrs:
- self.attrs['class'] = ''
- self.attrs['class'] = 'date-pickup'
-
- def render(self, name, value, attrs=None, renderer=None):
- if value:
- value = unicode(value)
- # very specific...
- if settings.COUNTRY == 'fr' and value and '/' in value:
- values = value.split('/')
- if len(values) == 3:
- value = "%s-%s-%s" % (values[2], values[1], values[0])
- if not attrs:
- attrs = {}
- attrs['autocomplete'] = 'off'
- rendered = super(JQueryDate, self).render(name, value, attrs)
- # use window.onload to be sure that datepicker don't interfere
- # with autocomplete fields
- var_name = name.replace('-', '_')
- rendered += """
-<script type="text/javascript"><!--//
- function load_jquerydate_%(var_name)s(){
- $(".date-pickup").datepicker($.datepicker.regional["%(country)s"]);
- var val = $("#id_%(name)s").val();
- if(val){
- var dt = $.datepicker.parseDate('yy-mm-dd', val);
- val = $.datepicker.formatDate(
- $.datepicker.regional["%(country)s"]['dateFormat'],
- dt);
- $("#id_%(name)s").val(val);
- }
- }
- $(window).load(load_jquerydate_%(var_name)s);
-//--></script>
-""" % {"name": name, "var_name": var_name, "country": settings.COUNTRY}
- return rendered
-
-
class JQueryAutoComplete(forms.TextInput):
def __init__(self, source, associated_model=None, options=None, attrs=None,
new=False, url_new='', multiple=False, limit=None,