162 lines
5.6 KiB
Python
162 lines
5.6 KiB
Python
"""
|
|
Forms for Organizations app
|
|
"""
|
|
from django import forms
|
|
from .models import Department, Hospital, Organization, Patient, Staff
|
|
|
|
|
|
class StaffForm(forms.ModelForm):
|
|
"""Form for creating and updating Staff"""
|
|
|
|
class Meta:
|
|
model = Staff
|
|
fields = [
|
|
'first_name', 'last_name', 'first_name_ar', 'last_name_ar',
|
|
'staff_type', 'job_title', 'license_number', 'specialization',
|
|
'employee_id', 'email', 'hospital', 'department', 'status'
|
|
]
|
|
widgets = {
|
|
'first_name': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter first name'
|
|
}),
|
|
'last_name': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter last name'
|
|
}),
|
|
'first_name_ar': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'الاسم الأول',
|
|
'dir': 'rtl'
|
|
}),
|
|
'last_name_ar': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'اسم العائلة',
|
|
'dir': 'rtl'
|
|
}),
|
|
'staff_type': forms.Select(attrs={
|
|
'class': 'form-select'
|
|
}),
|
|
'job_title': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter job title'
|
|
}),
|
|
'license_number': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter license number'
|
|
}),
|
|
'specialization': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter specialization'
|
|
}),
|
|
'employee_id': forms.TextInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter employee ID'
|
|
}),
|
|
'email': forms.EmailInput(attrs={
|
|
'class': 'form-control',
|
|
'placeholder': 'Enter email address'
|
|
}),
|
|
'hospital': forms.Select(attrs={
|
|
'class': 'form-select'
|
|
}),
|
|
'department': forms.Select(attrs={
|
|
'class': 'form-select'
|
|
}),
|
|
'status': forms.Select(attrs={
|
|
'class': 'form-select'
|
|
}),
|
|
}
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
user = kwargs.pop('user', None)
|
|
super().__init__(*args, **kwargs)
|
|
|
|
# Filter hospitals based on user role
|
|
if user and not user.is_px_admin() and user.hospital:
|
|
self.fields['hospital'].queryset = Hospital.objects.filter(id=user.hospital.id)
|
|
self.fields['hospital'].initial = user.hospital
|
|
self.fields['hospital'].widget.attrs['readonly'] = True
|
|
|
|
# Filter departments based on selected hospital
|
|
if self.instance and self.instance.pk:
|
|
# Updating existing staff - filter by their hospital
|
|
if self.instance.hospital:
|
|
self.fields['department'].queryset = Department.objects.filter(hospital=self.instance.hospital)
|
|
else:
|
|
self.fields['department'].queryset = Department.objects.none()
|
|
elif user and user.hospital:
|
|
# Creating new staff - filter by user's hospital
|
|
self.fields['department'].queryset = Department.objects.filter(hospital=user.hospital)
|
|
else:
|
|
self.fields['department'].queryset = Department.objects.none()
|
|
|
|
def clean_employee_id(self):
|
|
"""Validate that employee_id is unique"""
|
|
employee_id = self.cleaned_data.get('employee_id')
|
|
|
|
# Skip validation if this is an update and employee_id hasn't changed
|
|
if self.instance.pk and self.instance.employee_id == employee_id:
|
|
return employee_id
|
|
|
|
# Check if employee_id already exists
|
|
if Staff.objects.filter(employee_id=employee_id).exists():
|
|
raise forms.ValidationError("A staff member with this Employee ID already exists.")
|
|
|
|
return employee_id
|
|
|
|
def clean_email(self):
|
|
"""Clean email field"""
|
|
email = self.cleaned_data.get('email')
|
|
if email:
|
|
return email.lower().strip()
|
|
return email
|
|
|
|
|
|
class OrganizationForm(forms.ModelForm):
|
|
"""Form for creating and updating Organization"""
|
|
|
|
class Meta:
|
|
model = Organization
|
|
fields = [
|
|
'name', 'name_ar', 'code', 'address', 'city',
|
|
'phone', 'email', 'website', 'license_number', 'status', 'logo'
|
|
]
|
|
|
|
|
|
class HospitalForm(forms.ModelForm):
|
|
"""Form for creating and updating Hospital"""
|
|
|
|
class Meta:
|
|
model = Hospital
|
|
fields = [
|
|
'organization', 'name', 'name_ar', 'code',
|
|
'address', 'city', 'phone', 'email',
|
|
'license_number', 'capacity', 'status'
|
|
]
|
|
|
|
|
|
class DepartmentForm(forms.ModelForm):
|
|
"""Form for creating and updating Department"""
|
|
|
|
class Meta:
|
|
model = Department
|
|
fields = [
|
|
'hospital', 'name', 'name_ar', 'code',
|
|
'parent', 'manager', 'phone', 'email',
|
|
'location', 'status'
|
|
]
|
|
|
|
|
|
class PatientForm(forms.ModelForm):
|
|
"""Form for creating and updating Patient"""
|
|
|
|
class Meta:
|
|
model = Patient
|
|
fields = [
|
|
'mrn', 'national_id', 'first_name', 'last_name',
|
|
'first_name_ar', 'last_name_ar', 'date_of_birth',
|
|
'gender', 'phone', 'email', 'address', 'city',
|
|
'primary_hospital', 'status'
|
|
]
|