195 lines
9.1 KiB
Python
195 lines
9.1 KiB
Python
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
|