XH_Digital_Management/application/pjt_mgnt/forms.py

195 lines
9.1 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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