class ReminderForm(forms.Form): name = forms.CharField() hour = forms.TimeField() repeat = forms.IntegerField()
class QuestionnairePublicationForm(forms.ModelForm): """ Форма для публикации теста. """ open_date = forms.CharField(label=_('Дата начала'), required=False) open_time = forms.TimeField(label=_('Время начала'), required=False, localize=True) close_date = forms.CharField(label=_('Дата конца'), required=False) close_time = forms.TimeField(label=_('Время конца'), required=False, localize=True) user_id = None class Meta: model = Questionnaire fields = ['groups', 'show_result'] labels = { 'groups': _('Группы'), 'show_result': _('Показать результат пользователю') } def __init__(self, *args, **kwargs): if 'user_id' in kwargs: self.user_id = kwargs.pop('user_id') super(QuestionnairePublicationForm, self).__init__(*args, **kwargs) # инициализация списка групп # if self.user_id is not None: # HRUser = get_user_model() # hr_user = HRUser.objects.get(id=self.user_id) # self.fields['groups'].queryset = hr_user.departaments.all() # инициализация даты и времени if self.instance: open_datetime = self.instance.open_datetime close_datetime = self.instance.close_datetime with QuestionnairePublicationForm.rus_locale(): pattern_date = '%b %d, %Y' pattern_time = '%H:%M' if open_datetime is not None: open_datetime = open_datetime.astimezone( timezone.get_current_timezone()) self.fields['open_date'].initial = open_datetime.strftime( pattern_date).title() self.fields['open_time'].initial = open_datetime.strftime( pattern_time).title() if close_datetime is not None: close_datetime = close_datetime.astimezone( timezone.get_current_timezone()) self.fields[ 'close_date'].initial = close_datetime.strftime( pattern_date).title() self.fields[ 'close_time'].initial = close_datetime.strftime( pattern_time).title() @staticmethod @contextmanager def rus_locale(): """ Устанавливает русскую локаль в контекст. """ saved = locale.setlocale(locale.LC_ALL) try: yield locale.setlocale(locale.LC_ALL, 'ru_RU') finally: locale.setlocale(locale.LC_ALL, saved) def clean(self): """ Проверяет форму на правильность. """ cleaned_data = super(QuestionnairePublicationForm, self).clean() # проверка дат pattern = '%b %d, %Y' open_date = self.cleaned_data['open_date'] close_date = self.cleaned_data['close_date'] # парсинг с локалью with QuestionnairePublicationForm.rus_locale(): # парсинг начала if open_date: try: open_date = datetime.strptime(open_date, pattern) except ValueError: raise ValidationError( _('Не правильный формат даты: ') + open_date) # парсинг конца if close_date: try: close_date = datetime.strptime(close_date, pattern) except ValueError: raise ValidationError( _('Не правильный формат даты: ') + close_date) if open_date and close_date and open_date > close_date: raise ValidationError(_('Дата начала позже даты конца')) open_date = open_date if open_date else None close_date = close_date if close_date else None open_time = self.cleaned_data['open_time'] close_time = self.cleaned_data['close_time'] # дата и время if (open_date is None) ^ (open_time is None): raise ValidationError( _('Дата и время начала заполнены не до конца')) else: # заполнена дата начала if open_date is None and open_time is None: open_datetime = None else: open_datetime = datetime.combine(open_date, open_time) if (close_date is None) ^ (close_time is None): raise ValidationError( _('Дата и время конца заполнены не до конца')) else: # заполнена дата конца if close_date is None and close_time is None: close_datetime = None else: close_datetime = datetime.combine(close_date, close_time) if open_datetime is not None and close_datetime is not None and open_datetime >= close_datetime: raise ValidationError( _('Время и дата начала позже времени и даты конца или совпадает' )) self.cleaned_data['open_datetime_clean'] = open_datetime self.cleaned_data['close_datetime_clean'] = close_datetime def save(self, commit=True): """ Сохраняет данные в БД. """ questionnaire = super(QuestionnairePublicationForm, self).save(commit=False) open_datetime = self.cleaned_data['open_datetime_clean'] close_datetime = self.cleaned_data['close_datetime_clean'] questionnaire.open_datetime = open_datetime questionnaire.close_datetime = close_datetime if commit: questionnaire.save() return questionnaire
class BusinessLocationAdminForm(forms.ModelForm): class Meta: model = BusinessLocation fields = '__all__' about = forms.Textarea() location_field = forms.CharField(max_length=255) mon_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) mon_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) tue_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) tue_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) wed_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) wed_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) thu_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) thu_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) fri_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) fri_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) sat_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) sat_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) sun_open = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) sun_close = forms.TimeField(widget=AdminTimeWidget(format='%I:%M %p'), input_formats=('%I:%M %p', ), required=False) def __init__(self, *args, **kwargs): super(BusinessLocationAdminForm, self).__init__(*args, **kwargs) self.fields['location_email'].required = True self.fields['phone'].required = True self.fields['location_field'].required = False
class BookingForm(forms.Form): doctorText = forms.CharField() date = forms.DateField(initial = datetime.date.today) date.widget.attrs = time = forms.TimeField()
class AddSchedule(forms.Form): """ The form is used to placement or pbi schedule. @variables: time - time of placement activity ctc - salary company_name - name of company placement_type - placement type (placement/pbi) location - location of company description - description of company placement_date - date of placement activity """ time = forms.TimeField( label='time', widget=forms.widgets.TimeInput(attrs={ 'type': "time", 'value': "00:00", 'min': "0:00", 'max': "24:00" })) ctc = forms.DecimalField(label="ctc", widget=forms.NumberInput(attrs={ 'min': 0, 'step': 0.25 })) company_name = forms.CharField(widget=forms.TextInput( attrs={ 'max_length': 100, 'class': 'field', 'list': 'company_dropdown1', 'id': 'company_input' }), label="company_name") placement_type = forms.ChoiceField( widget=forms.Select(attrs={'style': "height:45px"}), label="placement_type", choices=Constants.PLACEMENT_TYPE) location = forms.CharField(widget=forms.TextInput(attrs={ 'max_length': 100, 'class': 'field' }), label="location") description = forms.CharField(widget=forms.Textarea(attrs={ 'max_length': 1000, 'class': 'form-control' }), label="description", required=False) attached_file = forms.FileField(required=False) placement_date = forms.DateField( label='placement_date', widget=forms.DateInput(attrs={'class': 'datepicker'})) def clean_ctc(self): ctc = self.cleaned_data['ctc'] # print('form validation \n\n\n\n', ctc) if ctc <= 0: raise forms.ValidationError("CTC must be positive value") return ctc def clean_company_name(self): company_name = self.cleaned_data['company_name'] # print('form validation \n\n\n\n', ctc) if NotifyStudent.objects.filter(company_name=company_name): raise forms.ValidationError("company_name must be unique") return company_name
class InserirNovaOrdemForm(forms.ModelForm): cliente = forms.ModelChoiceField( label='Cliente', queryset=models.NovoCliente.objects.all(), widget=forms.Select(attrs={ 'class': 'form-control', 'placeholder': 'Cliente' })) tipoDeAtendimento = forms.ChoiceField( label='Tipo de atendimento', choices=STATUS_ATENDIMENTO, widget=forms.Select(attrs={ 'class': 'form-control', 'placeholder': 'Tipo de Atendimento' })) responsavel = forms.CharField( label='Responsavel', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Responsavel' })) analista = forms.CharField( label='Analista', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Analista' })) solicitante = forms.CharField( label='Solicitante', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Solicitante' })) dataAtendimento = forms.DateField( label='Data de atendimento', widget=forms.DateInput(attrs={ 'class': 'form-control', 'placeholder': 'Data de atendimento' })) hora_entrada = forms.TimeField( label='Hora de entrada', widget=forms.TimeInput(attrs={ 'class': 'form-control', 'placeholder': 'Hora de entrada' })) hora_saida = forms.TimeField( label='Hora de saida', widget=forms.TimeInput(attrs={ 'class': 'form-control', 'placeholder': 'Hora de saida' })) translado = forms.CharField( label='Translado', widget=forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'Translado' })) descritivo = forms.CharField( label='Descritivo', widget=forms.Textarea(attrs={ 'class': 'form-control', 'placeholder': 'Descritivo' })) class Meta: model = models.OrdemServico exclude = ['usuario'] fields = [ 'cliente', 'tipoDeAtendimento', 'responsavel', 'analista', 'solicitante', 'dataAtendimento', 'hora_entrada', 'hora_saida', 'translado', 'descritivo' ]
class TimeFieldForm(forms.Form): """Test form for TimePicker widget.""" time_field = forms.TimeField(widget=TimePicker)
class UsualForm(forms.Form): """по умолчанию эти две настройки (почти) нормально работают только в .as_table() но если форму вывожу в шаблон поэлементно - то в нужном месте можно вставить item.css_classes и тогда в этом месте будут классы в соответсвии с этими настройками""" error_css_class = "error123" # работает в контейнере required_css_class = "field123" # работает в элементе booleanfield = forms.BooleanField(required=False, label="BooleanField") charfield = forms.CharField( max_length=5, label="CharField", required=True, widget=forms.TextInput(attrs={'class': 'anna'})) YEAR_IN_SCHOOL_CHOICES = [ ('FR', 'Freshman'), ('SO', 'Sophomore'), ('JR', 'Junior'), ('SR', 'Senior'), ('GR', 'Graduate'), ] choicefield = forms.ChoiceField(choices=YEAR_IN_SCHOOL_CHOICES, label="ChoiceField") typedchoicefield = forms.TypedChoiceField(choices=YEAR_IN_SCHOOL_CHOICES, coerce=str, label="TypedChoiceField") datefield = forms.DateField(initial=timezone.now, label="DateField") datetimefield = forms.DateTimeField(initial=timezone.now, label="DateTimeField") decimalfield = forms.DecimalField( required=True, max_digits=4, decimal_places=2, label='DecimalField', error_messages={'max_digits': 'Слишком много цифр!'}) durationfield = forms.DurationField(required=False, label="") emailfield = forms.EmailField(required=False, label="DurationField") # filefield = forms.FileField(label="FileField") # filepathfield = forms.FilePathField(label="FilePathField") floatfield = forms.FloatField(required=False, label="FloatField") # imagefield = forms.ImageField(label="ImageField") integerfield = forms.IntegerField(required=False, label="IntegerField") genericipaddresfield = forms.GenericIPAddressField( required=False, label="GenericIPAddressField") multiplechoicefield = forms.MultipleChoiceField( choices=YEAR_IN_SCHOOL_CHOICES, required=False, label="MultipleChoiceField") typedmultiplechoicefield = forms.TypedMultipleChoiceField( choices=YEAR_IN_SCHOOL_CHOICES, required=False, coerce=str, label="TypedMultipleChoiceField") nullbooleanfield = forms.NullBooleanField(label="NullBooleanField") # regexfield = forms.RegexField(label="RegexField") slugfield = forms.SlugField(required=False, allow_unicode=True, label="SlugField") timefield = forms.TimeField(initial=timezone.now, label="TimeField") urlfield = forms.URLField(required=False, label="URLField") uuidfield = forms.UUIDField(required=False, label="UUIDField") # Достаточно сложные встроенные классы Field combofield = forms.ComboField( help_text='валидируется по нескольким полям', required=False, label="ComboField", fields=[forms.CharField(max_length=10), forms.EmailField()]) # multivaluefield = forms.MultiValueField(label="MultiValueField") splitdatetimefield = forms.SplitDateTimeField(initial=timezone.now, label="SplitDateTimeField")
class MultipleOccurrenceForm(forms.Form): """ Complex occurrences form """ # frequency ## hour starting_hour = forms.TimeField(label='Horaire de début', initial='14:00', widget=TimeWidget(options={ 'pickerPosition': 'top-left', 'minuteStep': 15, }, bootstrap_version=3)) ending_hour = forms.TimeField(required=True, label='Horaire de fin', initial='22:30', widget=TimeWidget(options={ 'pickerPosition': 'top-left', 'minuteStep': 15, }, bootstrap_version=3)) ## date options start_day = forms.DateField(required=True, label='A partir du', initial=date.today, widget=DateWidget(options={ 'todayHighlight': True, 'weekStart': 1, 'pickerPosition': 'top-left' }, usel10n=True, bootstrap_version=3)) end_day = forms.DateField(required=True, label='Jusqu\'au', initial=date(date.today().year, 12, 31), widget=DateWidget(options={ 'todayHighlight': True, 'weekStart': 1, 'pickerPosition': 'top-left' }, usel10n=True, bootstrap_version=3)) ### weekly options week_days = MultipleIntegerField(WEEKDAY_LONG, label='Jours de la semaine', widget=forms.CheckboxSelectMultiple) # --------------------------------------------------------------------------- def __init__(self, *args, **kws): """ :param args: :param kws: :return: prefilling widget with current time. (not ultra useful) """ super(MultipleOccurrenceForm, self).__init__(*args, **kws) dtstart = self.initial.get('dtstart', None) if dtstart: dtstart = dtstart.replace( minute=((dtstart.minute // MINUTES_INTERVAL) * MINUTES_INTERVAL), second=0, microsecond=0) self.initial.setdefault('start_day', dtstart) self.initial.setdefault('week_days', '%d' % dtstart.isoweekday()) # --------------------------------------------------------------------------- def clean(self): cleaned_data = super(MultipleOccurrenceForm, self).clean() starting_hour = cleaned_data['starting_hour'] ending_hour = cleaned_data['ending_hour'] start_day = cleaned_data['start_day'] end_day = cleaned_data['end_day'] if starting_hour and ending_hour: if starting_hour > ending_hour: raise forms.ValidationError( "Verifier que les heures correspondent") if start_day and end_day: if start_day > end_day or start_day < date.today(): raise forms.ValidationError( "Verifier que les dates correspondent") # pas de test si un événement est créé aujourd'hui mais à une heure déjà passée self.cleaned_data['first_day_start_time'] = datetime.combine( start_day, starting_hour) self.cleaned_data['first_day_end_time'] = datetime.combine( start_day, ending_hour) return self.cleaned_data # --------------------------------------------------------------------------- def save(self, event): params = self._build_rrule_params() event.add_occurrences(self.cleaned_data['first_day_start_time'], self.cleaned_data['first_day_end_time'], is_multiple=True, **params) return event # --------------------------------------------------------------------------- def _build_rrule_params(self): data = self.cleaned_data params = dict( until=data['end_day'], byweekday=data['week_days'], interval=1, freq=rrule.WEEKLY, ) return params
class EventsForm(forms.ModelForm): eventid = forms.CharField( max_length=15, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Event id" })) eventdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "event date" })) eventtime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "event date" })) username = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "User Name" })) category = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Category" })) doorname = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Door Name" })) cardnumber = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card Number" })) event = forms.CharField(max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Event" })) action = forms.CharField(max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Action" })) zonename = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Action" })) class Meta: model = Events exclude = ['search_string'] def save(self, commit=True): event = super(EventsForm, self).save(commit=False) event.search_string = event.eventid + " " + event.username + " " + event.category + " " + event.doorname event.save() return event
class ControllersForm(forms.ModelForm): controller_name = forms.CharField( max_length=25, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Controller Name" })) controllerid = forms.CharField( max_length=15, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Controller ID" })) ipaddress = forms.CharField( max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "IP Address" })) serial_number = forms.CharField( max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Serial Number" })) name = forms.CharField(max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Name" })) doorcurrentstatus = forms.CharField( max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Door Current Status" })) doorlastopeneddate = forms.DateField( required=False, widget=forms.DateInput( attrs={ "class": "form-control datepicker", 'placeholder': "Door last oppened date" })) doorlastopenedtime = forms.TimeField( required=False, widget=forms.TextInput( attrs={ "class": "form-control timepicker", 'placeholder': "Door last oppened time" })) doorlastcloseddate = forms.DateField( required=False, widget=forms.DateInput( attrs={ "class": "form-control datepicker", 'placeholder': "Door last closed date" })) doorlastclosedtime = forms.TimeField( required=False, widget=forms.TextInput( attrs={ "class": "form-control timepicker", 'placeholder': "Door last closed time" })) card_1_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 1 name" })) card_1_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) card_1_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Card 1 last date" })) card_1_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Card 1 last time" })) card_1_lastuser = forms.CharField( max_length=30, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 1 last user" })) card_1_lastcard = forms.CharField( max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 1 last card" })) card_2_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 2 name" })) card_2_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) card_2_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Card 2 last date" })) card_2_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Card 2 last time" })) card_2_lastuser = forms.CharField( max_length=30, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 2 last user" })) card_2_lastcard = forms.CharField( max_length=15, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Card 2 last card" })) input_1_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 1 name" })) input_1_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) input_1_status = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 1 status" })) input_1_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Input 1 last date" })) input_1_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Input 1 last time" })) input_1_laststate = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 1 laststate" })) input_2_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 2 name" })) input_2_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) input_2_status = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 2 status" })) input_2_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Input 2 last date" })) input_2_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Input 2 last time" })) input_2_laststate = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 2 laststate" })) input_3_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 3 name" })) input_3_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) input_3_status = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 3 status" })) input_3_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Input 3 last date" })) input_3_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Input 3 last time" })) input_3_laststate = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 3 laststate" })) input_4_name = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 4 name" })) input_4_type = forms.ChoiceField( choices=alarm_input_choices, widget=forms.Select(attrs={"class": "form-control"})) input_4_status = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 4 status" })) input_4_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Input 4 last date" })) input_4_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Input 4 last time" })) input_4_laststate = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': "Input 4 laststate" })) controller_alarm_laststate = forms.CharField( max_length=25, required=False, widget=forms.TextInput(attrs={ "class": "form-control", 'placeholder': 'Controller Alarm Last State' })) controller_alarm_lastdate = forms.DateField( required=False, widget=forms.DateInput(attrs={ "class": "form-control datepicker", 'placeholder': "Date Last Tripped" })) controller_alarm_lasttime = forms.TimeField( required=False, widget=forms.TextInput(attrs={ "class": "form-control timepicker", 'placeholder': "Time Last Tripped" })) class Meta: model = Controllers exclude = ['search_string'] def save(self, commit=True): controller = super(ControllersForm, self).save(commit=False) controller.search_string = controller.controller_name + " " + controller.card_1_name + " " + controller.card_1_type + " " + controller.card_2_name + " " + controller.card_2_type + " " + controller.input_1_name + " " + controller.input_1_type + " " + controller.input_2_name + " " + controller.input_2_type + " " + controller.input_3_name + " " + controller.input_3_type + " " + controller.input_3_name + " " + controller.input_4_type + " " + controller.input_4_name controller.save() return controller
class HappyHourForm(forms.ModelForm): weekdays = WeekdayField() from_hour = forms.TimeField() to_hour = forms.TimeField() class Meta: model = HappyHour exclude = ("shops", ) def __init__(self, *args, **kwargs): self.request = kwargs.pop("request") self.shop = get_shop(self.request) super(HappyHourForm, self).__init__(*args, **kwargs) if self.instance.pk: self.fields["discounts"] = Select2MultipleField( label=_("Product Discounts"), help_text=_("Select discounts for this happy hour."), model=Discount, required=False) initial_discounts = (self.instance.discounts.all() if self.instance.pk else []) self.fields["discounts"].initial = initial_discounts self.fields["discounts"].widget.choices = [ (discount.pk, force_text(discount)) for discount in initial_discounts ] if self.instance.pk: weekdays, from_hour, to_hour = _get_initial_data_for_time_ranges( self.instance) if weekdays and from_hour and to_hour: self.fields["weekdays"].initial = weekdays self.fields["from_hour"].initial = from_hour self.fields["to_hour"].initial = to_hour # Since we touch these views in init we need to reset some # widgets and help texts after setting the initial values. self.fields["from_hour"].widget = TimeInput() self.fields["to_hour"].widget = TimeInput() help_texts = [ ("from_hour", _("12pm is considered noon and 12am as midnight. Start hour is included to the discount." )), ("to_hour", _("12pm is considered noon and 12am as midnight. End hours is included to the discount." )), ("weekdays", _("Weekdays the happy hour is active.")) ] for field, help_text in help_texts: self.fields[field].help_text = help_text def save(self, commit=True): with transaction.atomic(): instance = super(HappyHourForm, self).save(commit) instance.shops = [self.shop] data = self.cleaned_data if "discounts" in self.fields: data = self.cleaned_data discount_ids = data.get("discounts", []) instance.discounts = Discount.objects.filter( shops=self.shop, id__in=discount_ids) instance.time_ranges.all().delete() weekdays = data["weekdays"] from_hour = data["from_hour"] to_hour = data["to_hour"] _create_time_ranges_from_data(instance, weekdays, from_hour, to_hour) return instance
class ExtractForm(forms.Form): valid_from_date = forms.DateField( required=False, label="date from", help_text="The date configuration is valid from.", widget=forms.widgets.DateInput( attrs={ "type": "date", "class": "form-control", "aria-describedby": "date-from-help", }), ) valid_from_time = forms.TimeField( required=False, label="time from", # initial="00:00:00", help_text= "The time configuration is valid from. If not provided, will be set to 00:00", widget=forms.widgets.TimeInput( attrs={ "type": "time", "class": "form-control", "aria-describedby": "time-from-help", }), ) valid_to_date = forms.DateField( required=False, label="date to", help_text="The date configuration is valid to.", widget=forms.widgets.DateInput( attrs={ "type": "date", "class": "form-control", "aria-describedby": "date-to-help", }), ) valid_to_time = forms.TimeField( required=False, label="time to", # initial="00:00:00", help_text= "The time configuration is valid to. If not provided, will be set to 23:59", widget=forms.widgets.TimeInput( attrs={ "type": "time", "class": "form-control", "aria-describedby": "time-to-help", }), ) version = forms.IntegerField( required=False, label="version", help_text="The version of the configuration.", initial=1, min_value=1, widget=forms.widgets.NumberInput( attrs={ "type": "number", "class": "form-control", "aria-describedby": "version-help", }), ) run = forms.IntegerField( required=False, label="run id", help_text="The run id to extract validity dates from", min_value=0, widget=forms.widgets.NumberInput( attrs={ "type": "number", "class": "form-control", "aria-describedby": "run-help", }), ) filename = forms.CharField( required=False, label="run file name", help_text="The name of run file to extract validity dates from", widget=forms.widgets.TextInput( attrs={ "type": "text", "class": "form-control", "aria-describedby": "filename-help", }), ) SEARCH_CHOICES = (("dates", "dates"), ("runs", "runs")) search_option = forms.ChoiceField( required=True, choices=SEARCH_CHOICES, widget=forms.widgets.RadioSelect(attrs={ "type": "radio", }), ) def clean(self): cleaned_data = super(ExtractForm, self).clean() valid_from_date = cleaned_data.get("valid_from_date") valid_from_time = cleaned_data.get("valid_from_time") valid_to_date = cleaned_data.get("valid_to_date") valid_to_time = cleaned_data.get("valid_to_time") search_dates = cleaned_data.get("search_option") == "dates" search_runs = not search_dates if search_dates and valid_from_time and not valid_from_date: raise ValidationError( "The date the configuration is valid from is required if the relevant time is specified." ) if search_dates and valid_to_time and not valid_to_date: raise ValidationError( "The date the configuration is valid to is required if the relevant time is specified." ) if search_dates and ((valid_from_date and not valid_to_date) or (valid_to_date and not valid_from_date)): raise ValidationError( "If any of the validity dates is specified, then another one must be given too." ) if search_dates and valid_from_date and valid_to_date: if valid_from_time: self.cleaned_data["valid_from"] = datetime.datetime.combine( valid_from_date, valid_from_time) else: self.cleaned_data["valid_from"] = datetime.datetime.combine( valid_from_date, time(hour=0, minute=0, second=0)) if valid_to_time: self.cleaned_data["valid_to"] = datetime.datetime.combine( valid_to_date, valid_to_time) else: self.cleaned_data["valid_to"] = datetime.datetime.combine( valid_to_date, time(hour=23, minute=59, second=59)) return self.cleaned_data elif search_runs: run = cleaned_data.get("run") filename = cleaned_data.get("filename") if not run and not filename: raise ValidationError( "Either run id or filename must be specified if the validity dates are omitted." ) return self.cleaned_data raise ValidationError("No valid search options were provided.")
class EstacionamientoExtendedForm(forms.Form): def clean(self): cleaned_data = super(EstacionamientoExtendedForm, self).clean() puestosLivianos = cleaned_data.get("puestosLivianos") puestosPesados = cleaned_data.get("puestosPesados") puestosMotos = cleaned_data.get("puestosMotos") if puestosLivianos and puestosPesados and puestosMotos: # Only do something if both fields are valid so far. if (puestosLivianos + puestosPesados + puestosMotos <= 0): raise forms.ValidationError( "Debe haber al menos un puesto en el estacionamiento") puestosLivianos = forms.IntegerField( required=True, min_value=0, label='Número de Puestos', widget=forms.NumberInput( attrs={ 'class': 'form-control', 'placeholder': 'Número de Puestos livianos', 'min': "0", 'pattern': '^[0-9]+', 'message': 'La entrada debe ser un número entero no negativo.' })) puestosPesados = forms.IntegerField( required=True, min_value=0, label='Número de Puestos', widget=forms.NumberInput( attrs={ 'class': 'form-control', 'placeholder': 'Número de Puestos pesados', 'min': "0", 'pattern': '^[0-9]+', 'message': 'La entrada debe ser un número entero no negativo.' })) puestosMotos = forms.IntegerField( required=True, min_value=0, label='Número de Puestos para Motos', widget=forms.NumberInput( attrs={ 'class': 'form-control', 'placeholder': 'Número de Puestos Motos', 'min': "0", 'pattern': '^[0-9]+', 'message': 'La entrada debe ser un número entero no negativo.' })) puestosDiscapacitados = forms.IntegerField( required=True, min_value=0, label='Número de Puestos para Discapacitados', widget=forms.NumberInput( attrs={ 'class': 'form-control', 'placeholder': 'Número de Puestos Discapacitados', 'min': "0", 'pattern': '^[0-9]+', 'message': 'La entrada debe ser un número entero no negativo.' })) horarioin = forms.TimeField( required=True, label='Horario Apertura', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Apertura', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) horarioout = forms.TimeField( required=True, label='Horario Cierre', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Cierre', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) choices_esquema = [('TarifaHora', 'Por hora'), ('TarifaMinuto', 'Por minuto'), ('TarifaHorayFraccion', 'Por hora y fracción'), ('TarifaHoraPico', 'Diferenciada por horario pico'), ('TarifaFinDeSemana', 'Diferenciada para fines de semana')] esquema = forms.ChoiceField( required=True, choices=choices_esquema, widget=forms.Select(attrs={'class': 'form-control'})) #Inicio de la hora pico, día no feriado inicioTarifa2 = forms.TimeField( required=False, label='Inicio Horario Especial', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Pico Inicio', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) #Fin de la hora pico, día no feriado finTarifa2 = forms.TimeField( required=False, label='Fin Horario Especial', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Pico Fin ', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) choices_esquema_feriado = [ ('TarifaHora', 'Por hora en los Dias feriado'), ('TarifaMinuto', 'Por minuto en los Dias feriado'), ('TarifaHorayFraccion', 'Por hora y fracción en los Dias feriado'), ('TarifaHoraPico', 'Diferenciada por horario pico en los Dias feriado'), ('TarifaFinDeSemana', 'Diferenciada para fines de semana en los Dias feriado') ] esquemaFeriado = forms.ChoiceField( required=True, choices=choices_esquema_feriado, widget=forms.Select(attrs={'class': 'form-control'})) #Inicio de la hora pico, día feriado inicioTarifaFeriado2 = forms.TimeField( required=False, label='Inicio Horario Especial', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Pico Inicio para los Dias Feriados', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) #Fin de la hora pico, día no feriado finTarifaFeriado2 = forms.TimeField( required=False, label='Fin Horario Especial', widget=forms.TextInput( attrs={ 'class': 'form-control', 'placeholder': 'Horario Pico Fin para los Dias Feriados', 'pattern': '^([0-1]?[0-9]|2[0-3]):[0-5][0-9]', 'message': 'La entrada debe ser una hora válida.' })) horizonte = forms.IntegerField( required=True, label="Horizonte de reservacion", widget=forms.NumberInput( attrs={ 'class': 'form-control', 'placeholder': 'Horizonte', 'min': "1", 'max': "999", 'pattern': '^[0-9]+', 'message': 'La entrada debe ser un número entero no negativo.' })) choices_frontera = [ ('PrecioTarifaMasTiempo', 'Cálculo de la frontera por tarifa con más tiempo'), ('PrecioTarifaMasCara', 'Cálculo de la frontera usando la tarifa más cara'), ('PrecioProporcional', 'Cálculo de la frontera de manera proporcional'), ] fronteraTarifa = forms.ChoiceField( required=True, choices=choices_frontera, widget=forms.Select(attrs={'class': 'form-control'}))
class WeatherMeasurementForm(forms.Form): """ Form to download weather measurements """ def __init__(self, *args, **kwargs): super(WeatherMeasurementForm, self).__init__(*args, **kwargs) if MeasuringDevice.objects.filter( type='S').exists() & WeatherMeasurement.objects.exists(): firstdate = WeatherMeasurement.objects.values_list( 'date', flat=True).order_by('date').first() self.fields['start_date_weather'].initial = firstdate self.fields['end_date_weather'].initial = date.today() measuring_device_values = [ (device.id, device) for device in MeasuringDevice.objects.all() if device.type == 'S' ] self.fields[ 'measuring_device_weather'].choices = measuring_device_values self.fields['measuring_device_weather'].initial = [ c[0] for c in measuring_device_values ] YEARS = range(date.today().year - 10, date.today().year + 1) start_date_weather = forms.DateField(label='Start date', widget=SelectDateWidget(years=YEARS)) end_date_weather = forms.DateField(label='End date', widget=SelectDateWidget(years=YEARS)) start_time_weather = forms.TimeField(label='Start time', widget=SelectTimeWidget(), initial=time(0, 0, 0, 0)) end_time_weather = forms.TimeField(label='End time', widget=SelectTimeWidget(), initial=time(23, 59, 59)) measuring_device_weather = forms.ChoiceField(label='Device') fields_values = [('temperature', 'Temperature (C)'), ('humidity', 'Humidity (%)'), ('dew_point', 'Dew point (C)'), ('wind_speed', 'Wind speed (m/s)'), ('wind_direction', 'Wind direction (deg)'), ('pressure', 'Pressure (hPa)'), ('rainfall_rate', 'Rainfall rate (mm/hr)'), ('solar_radiation', 'Solar radiation (W/m2)'), ('uv_index', 'UV Index')] fields_weather = forms.MultipleChoiceField( fields_values, label='Fields', widget=ColumnCheckboxSelectMultiple(columns=1, css_class="inner-table-1"), initial=[c[0] for c in fields_values]) def clean(self): """ Adding check on the dates and the number of rows to the data cleaning """ cleaned_data = super(WeatherMeasurementForm, self).clean() start_date = cleaned_data.get("start_date_weather") end_date = cleaned_data.get("end_date_weather") start_time = cleaned_data.get("start_time_weather") end_time = cleaned_data.get("end_time_weather") measuring_device = cleaned_data.get("measuring_device_weather") err = False if start_date is not None and end_date is not None and start_time is not None and end_time is not None: if end_date < start_date: err = True raise forms.ValidationError( "End date must be after start date.") if end_time < start_time: err = True raise forms.ValidationError( "End time must be after start time.") else: err = True if not err: nbRes = WeatherMeasurement.objects.filter( date__gte=start_date, date__lte=end_date, time__gte=start_time, time__lte=end_time, device__in=measuring_device).count() if nbRes < 1: raise forms.ValidationError("No entry in the database.") if nbRes > 50000: raise forms.ValidationError( "Max. number of entries (50'000) reached.") return cleaned_data
class MultipleDateSingleOccurrenceForm(forms.Form): """ A simple form for adding and updating single Occurrence attributes # put request to true """ # ========================================================================== date = forms.DateField( required=True, #initial=date.today, label='Date', widget=DateWidget(options={ 'todayHighlight': True, 'weekStart': 1, 'pickerPosition': 'top-left' }, usel10n=True, bootstrap_version=3)) start_time = forms.TimeField( required=True, #initial='14:00', label='Horaire de début', widget=TimeWidget(options={ 'pickerPosition': 'top-left', 'minuteStep': 15, }, bootstrap_version=3)) end_time = forms.TimeField( required=True, #initial='22:30', label='Horaire de fin', widget=TimeWidget(options={ 'pickerPosition': 'top-left', 'minuteStep': 15, }, bootstrap_version=3)) def clean(self): """ :return: validation error if start_time or end_time in the past concatenate date and hour to give start and end datetime """ cleaned_data = super(MultipleDateSingleOccurrenceForm, self).clean() start_time = datetime.combine(cleaned_data.get('date'), cleaned_data.get('start_time')) now = datetime.now() if start_time < now: raise forms.ValidationError("Verifier que la date correspond") if cleaned_data.get('end_time') is not None: end_time = datetime.combine(cleaned_data.get('date'), cleaned_data.get('end_time')) if start_time > end_time or end_time < now: raise forms.ValidationError( "Verifier que les heures correspondent") return self.cleaned_data def save(self, event): """ :param event: :return: end_time = start_time + 1h if end_time is None """ start_time = datetime.combine(self.cleaned_data.get('date'), self.cleaned_data.get('start_time')) if self.cleaned_data.get('end_time') is not None: end_time = datetime.combine(self.cleaned_data.get('date'), self.cleaned_data.get('end_time')) else: end_time = start_time + timedelta(hours=1) event.add_occurrences( start_time, end_time, is_multiple=False, ) return event
def __init__(self, last_added, *args, **kwargs): super(EditAddedDatesForm, self).__init__(*args, **kwargs) i = 1 for date in last_added: self.fields['id_%s' % i] = forms.CharField( label="Id", initial=date.id, widget=forms.TextInput( attrs={ 'readonly': 'True', 'hidden': 'hidden', 'class': 'edit_dates_field_id' })) self.fields['date_%s' % i] = forms.DateField( label="Data", initial=date.date, input_formats='%Y-%m-%d', widget=forms.DateInput(attrs={ 'readonly': 'True', 'class': 'edit_dates_field_date' })) self.fields['begin_%s' % i] = forms.TimeField( label="Od", initial=date.begin, input_formats='%H:%M:%S', widget=forms.TextInput( attrs={'class': 'edit_dates_field_begin'})) self.fields['end_%s' % i] = forms.TimeField( label="Do", initial=date.end, input_formats='%H:%M:%S', widget=forms.TextInput( attrs={'class': 'edit_dates_field_end'})) self.fields['dentist_%s' % i] = forms.CharField( label="Dentysta", initial=date.dentist, widget=forms.TextInput(attrs={ 'readonly': 'True', 'class': 'edit_dates_field_dentist' })) self.fields['dental_office_%s' % i] = forms.CharField( label="Gabinet", initial=date.dental_office, widget=forms.TextInput( attrs={ 'readonly': 'True', 'class': 'edit_dates_field_dental_office' })) self.fields['room_%s' % i] = forms.CharField( label="Pokój", initial=date.room, widget=forms.TextInput(attrs={ 'class': 'edit_dates_field_room', 'maxlength': '5' })) i += 1 self.fields['number_of_fields'] = forms.CharField( label="Liczba dat", initial=i - 1, widget=forms.TextInput( attrs={ 'readonly': 'True', 'hidden': 'hidden', 'class': 'edit_dates_field_number' }))
class AcompanhamentoDiarioSearchForm(forms.Form): data_inicio = forms.DateField(input_formats='%Y-%m-%d') hora_inicio = forms.TimeField(input_formats='%H:%M') data_fim = forms.DateField(input_formats='%Y-%m-%d') hora_fim = forms.TimeField(input_formats='%H:%M')
class BaseEventForm(RecursionForm, InviteEventForm): start_date = forms.DateField(widget=calendar_widget) start_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats) check_whole_day = forms.BooleanField(initial=False, required=False, label=_("All day")) end_date = forms.DateField(required=False, widget=calendar_widget) end_time = forms.TimeField(required=False, widget=time_widget, help_text='ex: 10:30AM', input_formats=valid_time_formats) end_recurring_period = forms.DateField(required=False) priority = forms.ChoiceField(widget=forms.RadioSelect(), choices=EVENT_PRIORITY, initial="2", label=_('Priority')) category = forms.ChoiceField(widget=forms.RadioSelect(), choices=EVENT_CATEGORY, initial="2", label=_('Category')) honeypot = forms.CharField(required=False, label=_('If you enter anything in this field '\ 'your comment will be treated as spam')) def __init__(self, *args, **kwargs): super(BaseEventForm, self).__init__(*args, **kwargs) self.fields.keyOrder = [ 'start_date', 'start_time', 'check_whole_day', 'end_date', 'end_time', 'invite', 'min_number_guests', 'max_number_guests', 'close', 'add_recursion', 'recursion_frequency', 'end_recurring_period', 'recursion_count', 'recursion_byweekday', 'recursion_bymonthday', 'priority', 'category', 'honeypot' ] self.fields['check_whole_day'].widget.attrs['class'] = 'times' self.fields['end_recurring_period'].widget.attrs['class'] = 'recursion' def clean_start_time(self): """cleaning the start time""" start_time = self.cleaned_data['start_time'] start_date = self.cleaned_data['start_date'] if start_time is not None: start = datetime.datetime.combine(start_date, start_time) else: start = datetime.datetime.combine(start_date, datetime.time()) return start def clean_end_time(self): try: start_value = self.cleaned_data['start_time'] except: start_value = None if start_value is None: raise forms.ValidationError(_("start time is required.")) end_time = self.cleaned_data['end_time'] end_date = self.cleaned_data['end_date'] if end_date: if end_time is not None: end_value = datetime.datetime.combine(end_date, end_time) else: end_value = datetime.datetime.combine(end_date, datetime.time()) else: end_value = None if end_value: if end_value < start_value: raise forms.ValidationError( _("The end time must be later than start time.")) check_value = self.cleaned_data["check_whole_day"] if check_value and check_value is True: if end_value: if end_value >= start_value: return datetime.datetime(end_value.year, end_value.month, end_value.day, 23, 59, 59) return datetime.datetime(start_value.year, start_value.month, start_value.day, 23, 59, 59) if end_value: return end_value else: return start_value
class EventNameSearchForm(forms.Form): venue_name = forms.CharField(required=True) event_date = forms.DateField(required=True) event_time = forms.TimeField(required=True, input_formats=('%I:%M', ))
class RequestForm(forms.Form): error_css_class = 'error' required_css_class = 'required' real_name = forms.CharField( label='Full Name', widget=forms.TextInput(attrs={'placeholder': 'Oski Bear'}), min_length=3, ) contact_email = forms.EmailField( label='Contact email', validators=[wrap_validator(ocflib.misc.validators.valid_email)], widget=forms.EmailInput(attrs={'placeholder': '*****@*****.**'}), ) verify_contact_email = forms.EmailField( label='Confirm contact email', validators=[wrap_validator(ocflib.misc.validators.valid_email)], widget=forms.EmailInput(attrs={'placeholder': '*****@*****.**'}), ) group = forms.CharField( label='Group', widget=forms.TextInput( attrs={'placeholder': 'Open Computing Facility'}), min_length=3, ) reason = forms.CharField( label='Reason for reservation', widget=forms.Textarea(attrs={'placeholder': ''}), ) date = forms.DateField( label='Date of reservation (yyyy-mm-dd)', widget=forms.DateInput( attrs={'placeholder': datetime.now().strftime('%Y-%m-%d')}), ) starttime = forms.TimeField( label='Starting time of reservation (24 hour, i.e. 20:00)', ) endtime = forms.TimeField( label='Ending time of reservation (24 hour, i.e. 22:00)', ) disclaimer_agreement = forms.BooleanField( label='I agree with the above statement.', error_messages={ 'required': 'You must agree to our policies.', }, ) def clean_verify_(self): email = self.cleaned_data.get('contact_email') verify_contact_email = self.cleaned_data.get('verify_contact_email') if email != verify_contact_email: raise forms.ValidationError("Your emails don't match.") return verify_contact_email
def crear_campo(forma, label, grupo, ver_como, regular=''): forma = Tipo.FORMAS[forma][1] if forma == 'Binario': field = forms.CharField( label=label, widget=forms.Textarea(), required=False, ) field.widget = forms.TextInput(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Decimal': field = forms.FloatField( label=label, required=False, ) field.widget = forms.TextInput(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Entero': field = forms.IntegerField( label=label, required=False, ) field.widget = forms.TextInput(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Cadena': field = forms.CharField( label=label, required=False, ) field.widget = forms.TextInput(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Parrafo': field = forms.CharField( label=label, required=False, ) field.widget = forms.Textarea(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Fecha': field = forms.DateField( label=label, required=False, ) field.widget = widgets.AdminDateWiget(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Hora': field = forms.TimeField( label=label, required=False, ) field.widget = forms.AdminTimeWiget(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Fecha/Hora': field = forms.DateTimeField( label=label, required=False, ) field.widget = forms.AdminSplitDateTimeWiget(attrs={ "group": grupo, "ver": ver_como }) elif forma == 'Opciones': options = regular.replace('(', '').replace(')', '').split('|') CHOICES = ((i, options[i]) for i in range(len(options))) field = forms.IntegerField(label=label, choices=CHOICES) elif forma == 'Referencia': response = urllib.urlopen(regular) options = json.loads(response.read()) CHOICES = ((o.id, o.value) for io in options) field = forms.IntegerField(label=label, choices=CHOICES) #end if return field
def field(self): from wagtail.wagtailadmin.widgets import AdminTimeInput field_kwargs = {'widget': AdminTimeInput} field_kwargs.update(self.field_options) return forms.TimeField(**field_kwargs)
def __init__(self, *args, **kwargs): fields = ( forms.TimeField(), forms.TimeField()) super().__init__(fields, *args, **kwargs)
class EditTasksForm(forms.Form): date = forms.TimeField(label=_('Date'), required=True) start_time = forms.TimeField(label=_('Start time'), required=True) end_time = forms.TimeField(label=_('End time'), required=True) name = forms.CharField(label=_('Name'), max_length=30, required=True) description = forms.CharField(label=_('Description'), max_length=30, required=False, widget=forms.Textarea)
def __init__(self, *args, **kwargs): fields = ( forms.TimeField(), forms.TimeField(), ) super(TimeRangeField, self).__init__(fields, *args, **kwargs)
class RangeBookingForm(forms.Form): def __init__(self, *args, **kwargs): self._room = kwargs.pop('room', None) super().__init__(*args, **kwargs) fromDate = forms.DateField(label='ตั้งแต่', widget=DateInput, required=True) toDate = forms.DateField(label='จนถึง', widget=DateInput, required=True) fromTime = forms.TimeField(label='จองเวลา', widget=TimeInput, required=True) toTime = forms.TimeField(label='ถึงเวลา', widget=TimeInput, required=True) description = forms.CharField(label='เหตุผลในการจอง', widget=forms.Textarea, required=True) fromDate.widget.attrs.update({ 'class': 'form-control', 'max': '3000-12-31' }) toDate.widget.attrs.update({'class': 'form-control', 'max': '3000-12-31'}) fromTime.widget.attrs.update({'class': 'form-control'}) toTime.widget.attrs.update({'class': 'form-control'}) description.widget.attrs.update({'class': 'form-control'}) def clean(self): cleaned_data = super().clean() allBookingList = Booking_list.objects.filter(room_id__id=self._room) fromDate = cleaned_data.get('fromDate') toDate = cleaned_data.get('toDate') fromTime = cleaned_data.get('fromTime') toTime = cleaned_data.get('toTime') state = 1 # date-error if fromDate > toDate: errorMsg = 'วันที่ไม่ถูกต้อง' self.add_error('fromDate', errorMsg) print('date-error') #time-error if fromTime > toTime: errorMsg = 'เวลาไม่ถูกต้อง' self.add_error('fromTime', errorMsg) print('Time-error') delta = toDate - fromDate # as timedelta for i in range(delta.days + 1): day = fromDate + timedelta(days=i) for each in allBookingList: if (Booking.objects.get(id=each.booking_id.id).st == '2' and (fromTime >= each.start_time and fromTime <= each.end_time) or (toTime >= each.start_time and toTime <= each.end_time)) and each.bookdate == day: state = 0 break # room already booked if state == 0: errorMsg = 'มีห้องในช่วงถูกจองไปแล้ว' self.add_error('fromDate', errorMsg) print('มีห้องในช่วงถูกจองไปแล้ว') # room already booked room = Room.objects.get(id=self._room) if not (fromTime >= room.start_time and toTime <= room.end_time): errorMsg = 'เวลาที่จองไม่อยู่ในเวลาให้บริการของห้อง' self.add_error('fromDate', errorMsg) print('เวลาที่จองไม่อยู่ในเวลาให้บริการของห้อง')
class TimeSheetForm(forms.ModelForm): class Meta: model = TimeSheet my_supervisor = forms.ModelChoiceField(queryset=Contact.objects.all(), required=False) date = forms.DateField(input_formats=settings.DATE_INPUT_FORMATS, validators=settings.DATE_VALIDATORS) time_in = forms.TimeField(widget=forms.TextInput( attrs={'class': 'timecard-datefield'})) time_lunch = forms.TimeField(widget=forms.TextInput( attrs={'class': 'timecard-datefield'})) time_lunch_return = forms.TimeField(widget=forms.TextInput( attrs={'class': 'timecard-datefield'})) time_out = forms.TimeField(widget=forms.TextInput( attrs={'class': 'timecard-datefield'})) performance = forms.ModelChoiceField( queryset=TimeSheetPerformanceChoice.objects.all(), required=False, widget=forms.Select(attrs={'class': 'timecard-performance'})) edit = forms.BooleanField(required=False) def set_supers(self, qs): self.fields["my_supervisor"].queryset = qs def clean(self): cleaned_data = self.cleaned_data time_in = cleaned_data.get("time_in") time_lunch = cleaned_data.get("time_lunch") time_lunch_return = cleaned_data.get("time_lunch_return") time_out = cleaned_data.get("time_out") # validate max hours try: hours = time_lunch.hour - time_in.hour mins = time_lunch.minute - time_in.minute hours += time_out.hour - time_lunch_return.hour mins += time_out.minute - time_lunch_return.minute hours += mins / Decimal(60) except: raise forms.ValidationError( "You must fill out time in and time out.") if hours > settings.MAX_HOURS_DAY: raise forms.ValidationError("Only " + unicode(settings.MAX_HOURS_DAY) + " hours are allowed in one day.") elif hours <= 0: raise forms.ValidationError("You cannot have negative hours!") # validate time in and out if time_lunch_return < time_lunch: raise forms.ValidationError( "Cannot return from lunch before leaving for lunch.") if time_in > time_out: raise forms.ValidationError( "Cannot leave before starting. Check your times.") #Don't allow two in the same day. ts = TimeSheet.objects.filter(date=cleaned_data.get('date'), student=cleaned_data.get('student')) if ts.count() > 0 and not cleaned_data.get('edit'): conf, created = Configuration.objects.get_or_create( name="Allow multiple time sheets in one day") if created: conf.help_text = "True\nFalse" conf.save() if conf.value == "False": txt = "Cannot submit two time sheets in one day.\n Please edit an existings time sheet if you've" + \ " made a mistake. Approved time sheets may only be edited by a supervisor or cwsp staff." raise forms.ValidationError(txt) # Always return the full collection of cleaned data. return cleaned_data
def __init__(self, *args, **kwargs): """ Takes two additional keyword arguments: :param cartpos: The cart position the form should be for :param event: The event this belongs to """ cartpos = self.cartpos = kwargs.pop('cartpos', None) orderpos = self.orderpos = kwargs.pop('orderpos', None) pos = cartpos or orderpos item = pos.item questions = pos.item.questions_to_ask event = kwargs.pop('event') self.all_optional = kwargs.pop('all_optional', False) super().__init__(*args, **kwargs) if item.admission and event.settings.attendee_names_asked: self.fields['attendee_name_parts'] = NamePartsFormField( max_length=255, required=event.settings.attendee_names_required, scheme=event.settings.name_scheme, titles=event.settings.name_scheme_titles, label=_('Attendee name'), initial=(cartpos.attendee_name_parts if cartpos else orderpos.attendee_name_parts), ) if item.admission and event.settings.attendee_emails_asked: self.fields['attendee_email'] = forms.EmailField( required=event.settings.attendee_emails_required, label=_('Attendee email'), initial=(cartpos.attendee_email if cartpos else orderpos.attendee_email)) for q in questions: # Do we already have an answer? Provide it as the initial value answers = [a for a in pos.answerlist if a.question_id == q.id] if answers: initial = answers[0] else: initial = None tz = pytz.timezone(event.settings.timezone) help_text = rich_text(q.help_text) label = escape(q.question) # django-bootstrap3 calls mark_safe required = q.required and not self.all_optional if q.type == Question.TYPE_BOOLEAN: if q.required: # For some reason, django-bootstrap3 does not set the required attribute # itself. widget = forms.CheckboxInput( attrs={'required': 'required'}) else: widget = forms.CheckboxInput() if initial: initialbool = (initial.answer == "True") else: initialbool = False field = forms.BooleanField( label=label, required=required, help_text=help_text, initial=initialbool, widget=widget, ) elif q.type == Question.TYPE_NUMBER: field = forms.DecimalField( label=label, required=required, help_text=q.help_text, initial=initial.answer if initial else None, min_value=Decimal('0.00'), ) elif q.type == Question.TYPE_STRING: field = forms.CharField( label=label, required=required, help_text=help_text, initial=initial.answer if initial else None, ) elif q.type == Question.TYPE_TEXT: field = forms.CharField( label=label, required=required, help_text=help_text, widget=forms.Textarea, initial=initial.answer if initial else None, ) elif q.type == Question.TYPE_COUNTRYCODE: field = CountryField().formfield( label=label, required=required, help_text=help_text, widget=forms.Select, empty_label='', initial=initial.answer if initial else None, ) elif q.type == Question.TYPE_CHOICE: field = forms.ModelChoiceField( queryset=q.options, label=label, required=required, help_text=help_text, widget=forms.Select, to_field_name='identifier', empty_label='', initial=initial.options.first() if initial else None, ) elif q.type == Question.TYPE_CHOICE_MULTIPLE: field = forms.ModelMultipleChoiceField( queryset=q.options, label=label, required=required, help_text=help_text, to_field_name='identifier', widget=forms.CheckboxSelectMultiple, initial=initial.options.all() if initial else None, ) elif q.type == Question.TYPE_FILE: field = forms.FileField( label=label, required=required, help_text=help_text, initial=initial.file if initial else None, widget=UploadedFileWidget(position=pos, event=event, answer=initial), ) elif q.type == Question.TYPE_DATE: field = forms.DateField( label=label, required=required, help_text=help_text, initial=dateutil.parser.parse(initial.answer).date() if initial and initial.answer else None, widget=DatePickerWidget(), ) elif q.type == Question.TYPE_TIME: field = forms.TimeField( label=label, required=required, help_text=help_text, initial=dateutil.parser.parse(initial.answer).time() if initial and initial.answer else None, widget=TimePickerWidget( time_format=get_format_without_seconds( 'TIME_INPUT_FORMATS')), ) elif q.type == Question.TYPE_DATETIME: field = SplitDateTimeField( label=label, required=required, help_text=help_text, initial=dateutil.parser.parse( initial.answer).astimezone(tz) if initial and initial.answer else None, widget=SplitDateTimePickerWidget( time_format=get_format_without_seconds( 'TIME_INPUT_FORMATS')), ) field.question = q if answers: # Cache the answer object for later use field.answer = answers[0] if q.dependency_question_id: field.widget.attrs[ 'data-question-dependency'] = q.dependency_question_id field.widget.attrs[ 'data-question-dependency-values'] = escapejson_attr( json.dumps(q.dependency_values)) if q.type != 'M': field.widget.attrs[ 'required'] = q.required and not self.all_optional field._required = q.required and not self.all_optional field.required = False self.fields['question_%s' % q.id] = field responses = question_form_fields.send(sender=event, position=pos) data = pos.meta_info_data for r, response in sorted(responses, key=lambda r: str(r[0])): for key, value in response.items(): # We need to be this explicit, since OrderedDict.update does not retain ordering self.fields[key] = value value.initial = data.get('question_form_data', {}).get(key)
from django import forms from .models import Booking import datetime test = for doctorText = forms.CharField() date = forms.DateField(initial = datetime.date.today) date.widget.attrs = {'class': 'd'} time = forms.TimeField()