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)