170 lines
9.8 KiB
Python
170 lines
9.8 KiB
Python
import os
|
||
import django
|
||
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'XH_Digital_Management.settings')
|
||
django.setup()
|
||
|
||
|
||
from django.db.models import Sum, F, Value, DecimalField
|
||
from django.db.models.functions import Coalesce
|
||
from application.fac_mgnt.models import *
|
||
from application.perf_mgnt.models import *
|
||
from application.pjt_mgnt.models import *
|
||
|
||
|
||
def calculate_annual_business_targets(year, primary_department):
|
||
"""
|
||
视图数据-你们负责人查看数据-年度总体经营目标
|
||
字段:
|
||
年份
|
||
年度营业收入(万元)(=28.21价税合计金额按一级部门和年份筛选完后的累计值)及完成率(=前一个数据/1.5收入总目标)【项目台账-价税合计金额, 集团经营目标-收入总目标】
|
||
年度新增收入(万元)(=28.21价税合计金额按一级部门、年份、性质筛选完后的累计值)及完成率(=前一个数据/1.6新增收入目标)【项目台账-价税合计金额, 集团经营目标-新增收入总目标】
|
||
年度存量收入(万元) (=28.21价税合计金额按一级部门、年份、性质筛选完后的累计值)及完成率(=前一个数据/1.7存量收入目标)【项目台账-价税合计金额, 集团经营目标-存量收入目标】
|
||
年度营业成本(万元) (=28.21价税合计金额累计-28.23应收净收入累计)及占用率(=前一个数据/1.8成本限额)【项目台账-价税合计金额,项目台账-应收净收入, 集团经营目标-存量收入目标, 集团经营目标表-成本限额 】
|
||
年度费用开销(万元) (=19.10费用金额累计+18.7全勤奖+18.8午餐津贴+18.9其他货币性福利+18.12实发工资+18.13公司承担社保+18.14公司承担公积金)及占用率(=前一个数据/1.10费用限额)【报销明细-费用金额 ,人工费用明细-全勤奖、午餐津贴、其他货币型福利、实发工资、公司承担社保、公司承担公积金, 集团经营目标-费用限额 】
|
||
营业利润(万元) (=年度营业收入-年度营业成本-年度费用开销-开票税金(=25.12税额按部门按年累计*1.12(1.12是一个固定的数值)))【回款记录-不含税金额】
|
||
"""
|
||
annual_revenue = ProjectLedger.objects.filter(
|
||
primary_department=primary_department,
|
||
contract_date__year=year
|
||
).aggregate(total_amount=Coalesce(Sum('total_amount_including_tax', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))['total_amount'] / 10000 # 转换为万元
|
||
|
||
revenue_target = GroupBusinessTarget.objects.filter(
|
||
primary_department=primary_department,
|
||
year=year
|
||
).aggregate(total_revenue_target=Coalesce(Sum('total_revenue_target', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))[
|
||
'total_revenue_target'] / 10000 # 转换为万元
|
||
|
||
revenue_completion_rate = annual_revenue / revenue_target if revenue_target != 0 else 0
|
||
|
||
# 年度新增收入(万元)及完成率
|
||
annual_new_revenue = ProjectLedger.objects.filter(
|
||
primary_department=primary_department,
|
||
contract_date__year=year,
|
||
project_nature='新增'
|
||
).aggregate(total_amount=Coalesce(Sum('total_amount_including_tax', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))['total_amount'] / 10000 # 转换为万元
|
||
|
||
new_revenue_target = GroupBusinessTarget.objects.filter(
|
||
primary_department=primary_department,
|
||
year=year
|
||
).aggregate(new_revenue_target=Coalesce(Sum('new_revenue_target', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))[
|
||
'new_revenue_target'] / 10000 # 转换为万元
|
||
|
||
new_revenue_completion_rate = annual_new_revenue / new_revenue_target if new_revenue_target != 0 else 0
|
||
|
||
# 年度存量收入(万元)及完成率
|
||
annual_existing_revenue = ProjectLedger.objects.filter(
|
||
primary_department=primary_department,
|
||
contract_date__year=year,
|
||
project_nature='存量'
|
||
).aggregate(total_amount=Coalesce(Sum('total_amount_including_tax', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))['total_amount'] / 10000 # 转换为万元
|
||
|
||
existing_revenue_target = GroupBusinessTarget.objects.filter(
|
||
primary_department=primary_department,
|
||
year=year
|
||
).aggregate(existing_revenue_target=Coalesce(Sum('existing_revenue_target', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))[
|
||
'existing_revenue_target'] / 10000 # 转换为万元
|
||
|
||
existing_revenue_completion_rate = annual_existing_revenue / existing_revenue_target if existing_revenue_target != 0 else 0
|
||
|
||
# 年度营业成本(万元)及占用率
|
||
total_amount = ProjectLedger.objects.filter(
|
||
primary_department=primary_department,
|
||
contract_date__year=year
|
||
).aggregate(total_amount=Coalesce(Sum('total_amount_including_tax', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))['total_amount'] / 10000 # 转换为万元
|
||
|
||
receivable_net_income = ProjectLedger.objects.filter(
|
||
primary_department=primary_department,
|
||
contract_date__year=year
|
||
).aggregate(receivable_net_income=Coalesce(Sum('receivable_net_income', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))[
|
||
'receivable_net_income'] / 10000 # 转换为万元
|
||
|
||
annual_cost = total_amount - receivable_net_income
|
||
|
||
cost_limit = GroupBusinessTarget.objects.filter(
|
||
primary_department=primary_department,
|
||
year=year
|
||
).aggregate(
|
||
cost_limit=Coalesce(Sum('cost_limit', output_field=DecimalField()), Value(0, output_field=DecimalField())))[
|
||
'cost_limit'] / 10000 # 转换为万元
|
||
|
||
cost_occupancy_rate = annual_cost / cost_limit if cost_limit != 0 else 0
|
||
|
||
# 年度费用开销(万元)及占用率
|
||
reimbursement_amount = ReimbursementDetail.objects.filter(
|
||
primary_department=primary_department,
|
||
year_month__year=year
|
||
).aggregate(
|
||
total_amount=Coalesce(Sum('amount', output_field=DecimalField()), Value(0, output_field=DecimalField())))[
|
||
'total_amount'] / 10000 # 转换为万元
|
||
|
||
labor_cost_details = LaborCostDetail.objects.filter(
|
||
primary_department=primary_department,
|
||
year_month__year=year
|
||
).aggregate(
|
||
total_attendance_reward=Coalesce(Sum('attendance_reward', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
total_lunch_allowance=Coalesce(Sum('lunch_allowance', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
total_other_monetary_benefits=Coalesce(Sum('other_monetary_benefits', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
total_net_salary=Coalesce(Sum('net_salary', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
total_employer_social_security=Coalesce(Sum('employer_social_security', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
total_employer_housing_fund=Coalesce(Sum('employer_housing_fund', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())),
|
||
)
|
||
|
||
annual_expense = reimbursement_amount + labor_cost_details['total_attendance_reward'] / 10000 + \
|
||
labor_cost_details['total_lunch_allowance'] / 10000 + \
|
||
labor_cost_details['total_other_monetary_benefits'] / 10000 + \
|
||
labor_cost_details['total_net_salary'] / 10000 + \
|
||
labor_cost_details['total_employer_social_security'] / 10000 + \
|
||
labor_cost_details['total_employer_housing_fund'] / 10000 # 转换为万元
|
||
|
||
expense_limit = GroupBusinessTarget.objects.filter(
|
||
primary_department=primary_department,
|
||
year=year
|
||
).aggregate(expense_limit=Coalesce(Sum('expense_limit', output_field=DecimalField()),
|
||
Value(0, output_field=DecimalField())))['expense_limit'] / 10000 # 转换为万元
|
||
|
||
expense_occupancy_rate = annual_expense / expense_limit if expense_limit != 0 else 0
|
||
|
||
# 营业利润(万元)
|
||
tax_amount = TaxRecord.objects.filter(
|
||
tax_entity=primary_department,
|
||
year=year
|
||
).aggregate(
|
||
tax_amount=Coalesce(Sum('tax_amount', output_field=DecimalField()), Value(0, output_field=DecimalField())))[
|
||
'tax_amount'] * 1.12 / 10000 # 转换为万元
|
||
|
||
operating_profit = annual_revenue - annual_cost - annual_expense - tax_amount
|
||
|
||
return {
|
||
'year': year,
|
||
'primary_department': primary_department,
|
||
'annual_revenue': annual_revenue,
|
||
'revenue_completion_rate': revenue_completion_rate,
|
||
'annual_new_revenue': annual_new_revenue,
|
||
'new_revenue_completion_rate': new_revenue_completion_rate,
|
||
'annual_existing_revenue': annual_existing_revenue,
|
||
'existing_revenue_completion_rate': existing_revenue_completion_rate,
|
||
'annual_cost': annual_cost,
|
||
'cost_occupancy_rate': cost_occupancy_rate,
|
||
'annual_expense': annual_expense,
|
||
'expense_occupancy_rate': expense_occupancy_rate,
|
||
'operating_profit': operating_profit
|
||
}
|
||
|
||
data = calculate_annual_business_targets(2023, '星河')
|
||
print(data)
|