from django import forms from django.contrib.auth.models import Group, User from django.urls import reverse_lazy from django.utils.text import format_lazy from django.utils.translation import gettext_lazy as _ from crispy_forms.helper import FormHelper from crispy_forms.layout import HTML, Layout, Fieldset, ButtonHolder, Submit from financial_settlement.models import FinStatement from users.models import Note class FinStatementForm(forms.ModelForm): start_date = forms.DateTimeField(input_formats=['%d-%m-%Y'], widget=forms.DateTimeInput(format='%d-%m-%Y', attrs={'class': 'form-control'})) end_date = forms.DateTimeField(input_formats=['%d-%m-%Y'], widget=forms.DateTimeInput( format='%d-%m-%Y', attrs={'class': 'form-control'})) user = forms.ModelChoiceField(queryset=User.objects.all(), label=_('Użytkownik')) is_active = forms.CheckboxInput() class Meta: model = FinStatement fields = [ 'statement_id', 'title', 'start_date', 'end_date', 'payment', 'last_statement_payment', 'price_per_unified_frame', 'user', 'is_active' ] def __init__(self, *args, instance, **kwargs): super().__init__(*args, instance=instance, **kwargs) self.helper = FormHelper() self.helper.layout = Layout( Fieldset('', 'statement_id', 'title', 'start_date', 'end_date', 'payment', 'price_per_unified_frame', 'last_statement_payment', 'user', 'is_active'), ButtonHolder( Submit('submit', _('Zapisz'), css_class='btn btn-sm btn-success'), HTML(format_lazy('<a class="btn btn-sm btn-light" href="{}">{}</a>', reverse_lazy('financial_settlement:statement_list'), _('Wróć'))), ), ) for field in ['statement_id', 'title', 'start_date', 'end_date', 'payment', 'price_per_unified_frame', 'user']: self.fields[field].required = True if instance.pk: self.initial['user'] = instance.user self.initial['is_active'] = instance.is_active else: self.initial['is_active'] = False def save(self, commit=True): instance = super().save(commit=commit) return instance