from django import forms from django.db.models import Sum from django.db.models.signals import post_delete from .models import * from ..org_mgnt.models import PrimaryDepartment # 项目台账-业务人员 class ProjectLedgerForm(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 = ProjectLedger exclude = ['resource_type', 'project_nature', 'project_progress', 'contract_date', 'contract_amount', 'contract_rate', 'revenue', 'cost_rate', 'cost', 'net_income', 'total_amount_including_tax', 'repayment_amount', 'receivable_net_income', 'actual_net_income', 'outstanding_net_income', 'notes', 'project_leader'] widgets = { 'project_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '项目名称'}), 'start_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), 'project_approval_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), 'end_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), 'customer_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '客户名称'}), 'province': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '省'}), 'city': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '市'}), 'district': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '县'}), 'project_members': forms.Textarea(attrs={'class': 'form-control', 'placeholder': '项目组员'}), 'project_status': forms.Select(attrs={'class': 'form-control'}), } def __init__(self, *args, **kwargs): super(ProjectLedgerForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False # 项目台账-管理人员 class ProjectLedgerManagementForm(forms.ModelForm): class Meta: model = ProjectLedger exclude = ['project_name', 'primary_department', 'start_date', 'project_approval_date', 'end_date', 'customer_name', 'province', 'city', 'district', 'project_leader', 'project_members', 'total_amount_including_tax', 'repayment_amount', 'receivable_net_income', 'actual_net_income', 'outstanding_net_income', 'net_income'] widgets = { 'project_status': forms.Select(attrs={'class': 'form-control'}), 'resource_type': forms.Select(attrs={'class': 'form-control'}), 'project_nature': forms.Select(attrs={'class': 'form-control'}), 'project_progress': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '项目进度'}), 'contract_date': forms.DateInput(attrs={'class': 'form-control', 'type': 'date'}), 'contract_amount': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '标的金额(元)'}), 'contract_rate': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '合同费率'}), 'revenue': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '收入(元)'}), 'cost_rate': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '成本费率(%)'}), 'cost': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '成本(元)'}), # 'net_income': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '净收入(元)'}), 'notes': forms.Textarea(attrs={'class': 'form-control', 'placeholder': '备注'}) } def __init__(self, *args, **kwargs): super(ProjectLedgerManagementForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False @receiver(post_save, sender='fac_mgnt.InvoiceRecord') @receiver(post_delete, sender='fac_mgnt.InvoiceRecord') @receiver(post_save, sender='fac_mgnt.RepaymentRecord') @receiver(post_delete, sender='fac_mgnt.RepaymentRecord') def update_project_ledger_totals(sender, instance, **kwargs): project_ledger = instance.project_name InvoiceRecord = apps.get_model('fac_mgnt', 'InvoiceRecord') RepaymentRecord = apps.get_model('fac_mgnt', 'RepaymentRecord') total_amount = InvoiceRecord.objects.filter(project_name=project_ledger).aggregate(Sum('total_amount'))[ 'total_amount__sum'] or 0.00 repayment_amount = RepaymentRecord.objects.filter(project_name=project_ledger).aggregate(Sum('repayment_amount'))[ 'repayment_amount__sum'] or 0.00 project_ledger.total_amount_including_tax = total_amount project_ledger.repayment_amount = repayment_amount project_ledger.calculate_receivable_net_income() project_ledger.calculate_actual_net_income() project_ledger.calculate_outstanding_net_income() project_ledger.save( update_fields=['total_amount_including_tax', 'repayment_amount', 'receivable_net_income', 'actual_net_income', 'outstanding_net_income']) # 项目人员结算表 class EmployeeProjectIncomeSettlementForm(forms.ModelForm): class Meta: model = EmployeeProjectIncomeSettlement fields = '__all__' widgets = { 'project_name': forms.Select(attrs={'class': 'form-control'}), 'year_month': forms.DateInput(attrs={'class': 'form-control', 'type': 'month'}), 'total_amount_including_tax': forms.NumberInput( attrs={'class': 'form-control', 'placeholder': '价税合计金额(元)'}), 'name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '姓名'}), 'contribution_rate': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '贡献率'}), 'sales_income': forms.NumberInput(attrs={'class': 'form-control', 'placeholder': '销售收入(元)'}), } def __init__(self, *args, **kwargs): super(EmployeeProjectIncomeSettlementForm, self).__init__(*args, **kwargs) self.fields['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="一级部门") for field_name in self.fields: self.fields[field_name].required = False # 项目问题记录 class ProjectIssuesLogForm(forms.ModelForm): class Meta: model = ProjectIssuesLog fields = '__all__' widgets = { 'record_date': forms.DateTimeInput(attrs={'class': 'form-control', 'type': 'datetime-local'}), 'description': forms.Textarea(attrs={'class': 'form-control', 'placeholder': '问题描述'}), 'handler': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '经办人'}), 'reference': forms.Textarea(attrs={'class': 'form-control', 'placeholder': '参考依据'}), 'solution': forms.Textarea(attrs={'class': 'form-control', 'placeholder': '解决方案'}), 'decision_maker': forms.TextInput(attrs={'class': 'form-control', 'placeholder': '决策人'}), 'status': forms.Select(attrs={'class': 'form-control'}), } def __init__(self, *args, **kwargs): super(ProjectIssuesLogForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False class ChildProjectLedgerAForm(forms.ModelForm): class Meta: model = ChildProjectLedgerA fields = '__all__' def __init__(self, *args, **kwargs): super(ChildProjectLedgerAForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False class ChildProjectLedgerBForm(forms.ModelForm): class Meta: model = ChildProjectLedgerB fields = '__all__' def __init__(self, *args, **kwargs): super(ChildProjectLedgerBForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False class ChildProjectLedgerCForm(forms.ModelForm): class Meta: model = ChildProjectLedgerC fields = '__all__' def __init__(self, *args, **kwargs): super(ChildProjectLedgerCForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False class ChildProjectLedgerDForm(forms.ModelForm): class Meta: model = ChildProjectLedgerD fields = '__all__' def __init__(self, *args, **kwargs): super(ChildProjectLedgerDForm, self).__init__(*args, **kwargs) for field_name in self.fields: self.fields[field_name].required = False