37680-vm/core/forms.py
2026-01-21 23:28:14 +00:00

82 lines
3.4 KiB
Python

from django import forms
from .models import Company, JobStatus, RequiredFolder, Job, JobFile
class CompanyForm(forms.ModelForm):
class Meta:
model = Company
fields = ['name', 'is_uprn_required']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'e.g. Acme Repairs Ltd'}),
'is_uprn_required': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
}
class JobStatusForm(forms.ModelForm):
class Meta:
model = JobStatus
fields = ['name', 'is_starting_status']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Status Name'}),
'is_starting_status': forms.CheckboxInput(attrs={'class': 'form-check-input'}),
}
class RequiredFolderForm(forms.ModelForm):
class Meta:
model = RequiredFolder
fields = ['name']
widgets = {
'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Folder Name (e.g. Photos)'}),
}
class JobForm(forms.ModelForm):
class Meta:
model = Job
fields = ['job_ref', 'uprn', 'address_line_1', 'address_line_2', 'address_line_3', 'postcode', 'description', 'action', 'notes', 'status']
widgets = {
'job_ref': forms.TextInput(attrs={'class': 'form-control'}),
'uprn': forms.TextInput(attrs={'class': 'form-control'}),
'address_line_1': forms.TextInput(attrs={'class': 'form-control'}),
'address_line_2': forms.TextInput(attrs={'class': 'form-control'}),
'address_line_3': forms.TextInput(attrs={'class': 'form-control'}),
'postcode': forms.TextInput(attrs={'class': 'form-control'}),
'description': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
'action': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
'notes': forms.Textarea(attrs={'class': 'form-control', 'rows': 3}),
'status': forms.Select(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
company = kwargs.pop('company', None)
super().__init__(*args, **kwargs)
if company:
self.fields['status'].queryset = JobStatus.objects.filter(company=company)
# Set initial status to starting status if creating new job
if not self.instance.pk:
starting_status = JobStatus.objects.filter(company=company, is_starting_status=True).first()
if starting_status:
self.fields['status'].initial = starting_status
if company.is_uprn_required:
self.fields['uprn'].required = True
else:
self.fields['uprn'].required = False
def clean_uprn(self):
uprn = self.cleaned_data.get('uprn')
if not uprn:
return None
return uprn
class JobFileForm(forms.ModelForm):
class Meta:
model = JobFile
fields = ['file']
widgets = {
'file': forms.ClearableFileInput(attrs={'class': 'form-control'}),
}
class ImportJobsForm(forms.Form):
file = forms.FileField(label="Excel/CSV File", widget=forms.ClearableFileInput(attrs={'class': 'form-control'}))
class InviteUserForm(forms.Form):
email = forms.EmailField(label="User Email", widget=forms.EmailInput(attrs={'class': 'form-control', 'placeholder': 'email@example.com'}))