Files
company_site/company_site/financial/forms.py

90 lines
3.8 KiB
Python

import datetime
from django import forms
from django.forms import ModelForm
from .models import Employee, Contract, ChargeNumber, TimeCardCell, AddressModel
class NewEmployeeForm(ModelForm):
first_name = forms.CharField(max_length=30, required=False, label="First Name")
last_name = forms.CharField(max_length=30, required=False, label="Last Name")
address_1 = forms.CharField(max_length=128, label="Address Line 1")
address_2 = forms.CharField(max_length=128, required=False, label="Address Line 2")
city = forms.CharField(max_length=64, label="City")
state = forms.CharField(max_length=2, label="State (e.g. NY)")
zip_code = forms.CharField(max_length=5, label="ZIP Code")
class Meta:
model = Employee
fields = ["user", "manager", "phoneNumber", "slary"]
def save(self, commit=True):
employee = super().save(commit=False)
if self.cleaned_data.get('first_name') or self.cleaned_data.get('last_name'):
if self.cleaned_data.get('first_name'):
employee.user.first_name = self.cleaned_data.get('first_name')
if self.cleaned_data.get('last_name'):
employee.user.last_name = self.cleaned_data.get('last_name')
employee.user.save()
address = AddressModel.objects.create(
address_1=self.cleaned_data['address_1'],
address_2=self.cleaned_data['address_2'],
city=self.cleaned_data['city'],
state=self.cleaned_data['state'],
zip_code=self.cleaned_data['zip_code'],
)
employee.primaryAddress = address
employee.workAddress = address
if commit:
employee.save()
return employee
class EmployeeForm(ModelForm):
class Meta:
model = Employee
fields = ["user", "manager", "primaryAddress", "workAddress", "phoneNumber", "slary"]
class ContractForm(ModelForm):
class Meta:
model = Contract
fields = ["contract_type","name","proposed_amount","baseline_amount","funded_amount","budget_hours","baseline_start","baseline_end"]
class ChargeNumberForm(ModelForm):
class Meta:
model = ChargeNumber
fields = ["charge_number_type","amount", "start_date","end_date"]
class TimeLogForm(ModelForm):
start_time = forms.TimeField(required=False, widget=forms.TimeInput(attrs={'type': 'time'}))
end_time = forms.TimeField(required=False, widget=forms.TimeInput(attrs={'type': 'time'}))
hour = forms.FloatField(required=False, label="Duration (hours)")
date = forms.DateField(initial=datetime.date.today, widget=forms.DateInput(attrs={'type': 'date'}))
class Meta:
model = TimeCardCell
fields = ["contract", "date", "start_time", "end_time", "hour"]
def clean(self):
cleaned_data = super().clean()
start = cleaned_data.get('start_time')
end = cleaned_data.get('end_time')
duration = cleaned_data.get('hour')
if start and end:
dt_start = datetime.datetime.combine(datetime.date.today(), start)
dt_end = datetime.datetime.combine(datetime.date.today(), end)
diff = (dt_end - dt_start).total_seconds() / 3600.0
if diff < 0:
diff += 24.0
cleaned_data['hour'] = round(diff, 2)
elif start and duration:
dt_start = datetime.datetime.combine(datetime.date.today(), start)
dt_end = dt_start + datetime.timedelta(hours=duration)
cleaned_data['end_time'] = (dt_end).time()
elif not duration and not (start and end):
raise forms.ValidationError("You must provide either (Start Time and End Time) OR (Start Time and Duration) OR (Duration).")
if not cleaned_data.get('hour') and duration:
cleaned_data['hour'] = duration
return cleaned_data