From 2b57ffeb083c373b7517d0912b9fc7c1deca2d5d Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 2 Jan 2021 21:50:10 +1100 Subject: [PATCH] Custom date picker field - Prevents picker from being "required" by the form --- InvenTree/InvenTree/fields.py | 29 +++++++++++++++++++++++++++++ InvenTree/build/forms.py | 13 ++++++------- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/InvenTree/InvenTree/fields.py b/InvenTree/InvenTree/fields.py index 884bd0c49f..b11b443645 100644 --- a/InvenTree/InvenTree/fields.py +++ b/InvenTree/InvenTree/fields.py @@ -5,10 +5,13 @@ from __future__ import unicode_literals from .validators import allowable_url_schemes +from django.utils.translation import ugettext as _ + from django.forms.fields import URLField as FormURLField from django.db import models as models from django.core import validators from django import forms + from decimal import Decimal import InvenTree.helpers @@ -31,6 +34,32 @@ class InvenTreeURLField(models.URLField): }) +class InvenTreeDatePickerFormField(forms.DateField): + """ + Custom date-picker field + """ + + def __init__(self, **kwargs): + + help_text = kwargs.get('help_text', _('Enter date')) + required = kwargs.get('required', False) + initial = kwargs.get('initial', None) + + widget = forms.DateInput( + attrs={ + 'type': 'date', + } + ) + + forms.DateField.__init__( + self, + required=required, + initial=initial, + help_text=help_text, + widget=widget + ) + + def round_decimal(value, places): """ Round value to the specified number of places. diff --git a/InvenTree/build/forms.py b/InvenTree/build/forms.py index 70deeef7b1..cd3d4bbcfb 100644 --- a/InvenTree/build/forms.py +++ b/InvenTree/build/forms.py @@ -10,6 +10,7 @@ from django import forms from InvenTree.forms import HelperForm from InvenTree.fields import RoundingDecimalFormField +from InvenTree.fields import InvenTreeDatePickerFormField from .models import Build, BuildItem, BuildOrderAttachment @@ -26,18 +27,16 @@ class EditBuildForm(HelperForm): 'batch': 'fa-layer-group', 'serial-numbers': 'fa-hashtag', 'location': 'fa-map-marker-alt', + 'target_date': 'fa-calendar-alt', } field_placeholder = { - 'reference': _('Build Order reference') + 'reference': _('Build Order reference'), + 'target_date': _('Order target date'), } - # TODO: Make this a more "presentable" date picker - # TODO: Currently does not render super nicely with crispy forms - target_date = forms.DateField( - widget=forms.DateInput( - attrs={'type': 'date'} - ) + target_date = InvenTreeDatePickerFormField( + help_text=_('Target date for build completion. Build will be overdue after this date.') ) class Meta: