from django import forms from .models import * from ..org_mgnt.models import PrimaryDepartment class GroupBusinessTargetForm(forms.ModelForm): primary_department = forms.ChoiceField( choices=[('', '---------')] + [(dept.department_name, dept.department_name) for dept in PrimaryDepartment.objects.all()], widget=forms.Select(attrs={'class': 'form-control'}), label="一级部门" ) class Meta: model = GroupBusinessTarget fields = '__all__' widgets = { 'year': forms.NumberInput(attrs={'class': 'form-control'}), 'project_nature': forms.Select(attrs={'class': 'form-control'}), 'sales': forms.NumberInput(attrs={'class': 'form-control'}), 'total_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), 'new_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), 'existing_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), 'cost_limit': forms.NumberInput(attrs={'class': 'form-control'}), 'gross_profit': forms.NumberInput(attrs={'class': 'form-control'}), 'expense_limit': forms.NumberInput(attrs={'class': 'form-control'}), 'operating_profit': forms.NumberInput(attrs={'class': 'form-control'}), } def __init__(self, *args, **kwargs): super(GroupBusinessTargetForm, self).__init__(*args, **kwargs) def clean(self): cleaned_data = super().clean() primary_department = cleaned_data.get('primary_department') year = cleaned_data.get('year') project_nature = cleaned_data.get('project_nature') if primary_department and year and project_nature: if GroupBusinessTarget.objects.filter(primary_department=primary_department, year=year, project_nature=project_nature).exists(): raise forms.ValidationError("该一级部门在同一年已经有一个相同项目性质的业绩目标。") return cleaned_data class EmployeePerformanceTargetForm(forms.ModelForm): class Meta: model = EmployeePerformanceTarget fields = '__all__' widgets = { 'name': forms.TextInput(attrs={'class': 'form-control'}), 'department': forms.Select(attrs={'class': 'form-control'}), 'year': forms.NumberInput(attrs={'class': 'form-control'}), 'project_nature': forms.Select(attrs={'class': 'form-control'}), 'sales_target': forms.NumberInput(attrs={'class': 'form-control'}), 'total_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), 'new_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), 'existing_revenue_target': forms.NumberInput(attrs={'class': 'form-control'}), }