diff options
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 |
commit | a33ee7dac0ee1f1c561664598eddfdfa3d2e9314 (patch) | |
tree | 0b0e03536d5e20e14a13d7805ce1e75f1fca04ea | |
parent | 72b51a6558b78717c2fb55aba03abe2c8bbd9f72 (diff) | |
download | Ishtar-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.py | 9 | ||||
-rw-r--r-- | archaeological_files/forms.py | 19 | ||||
-rw-r--r-- | archaeological_files_pdl/forms.py | 15 | ||||
-rw-r--r-- | archaeological_finds/forms.py | 15 | ||||
-rw-r--r-- | archaeological_finds/forms_treatments.py | 37 | ||||
-rw-r--r-- | archaeological_operations/forms.py | 34 | ||||
-rw-r--r-- | archaeological_warehouse/forms.py | 3 | ||||
-rw-r--r-- | bootstrap_datepicker/widgets.py | 31 | ||||
-rw-r--r-- | ishtar_common/context_processors.py | 7 | ||||
-rw-r--r-- | ishtar_common/forms.py | 41 | ||||
-rw-r--r-- | ishtar_common/forms_common.py | 9 | ||||
-rw-r--r-- | ishtar_common/templates/base.html | 3 | ||||
-rw-r--r-- | ishtar_common/widgets.py | 41 |
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, |