XH_Digital_Management/application/exec_tbl/models.py

192 lines
11 KiB
Python

from django.db import models
class CompanyOverallPerformance(models.Model):
year = models.IntegerField(verbose_name="年份")
annual_revenue = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年度营业收入")
annual_new_revenue = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年度新增收入")
annual_existing_revenue = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年度存量收入")
annual_operating_costs = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年度营业成本")
annual_expenses = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年度费用开销")
operating_profit = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="营业利润")
unfinished_annual_revenue = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年未完成收入")
daily_income_target_remaining = models.DecimalField(max_digits=15, decimal_places=2,
verbose_name="剩余日均收入目标")
class Meta:
verbose_name = "公司整体经营情况"
verbose_name_plural = "公司整体经营情况"
def __str__(self):
return f"{self.year} 年的经营情况"
class CompanyOverallIncome(models.Model):
year_month = models.CharField(max_length=7, verbose_name="年月")
current_month_income = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="当月收入")
monthly_income_target = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="月收入目标")
monthly_target_completion_rate = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="月目标完成率")
current_month_new_income = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="当月新增收入")
monthly_new_income_target = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="月新增收入目标")
monthly_new_income_completion_rate = models.DecimalField(max_digits=5, decimal_places=2,
verbose_name="月新增收入完成率")
current_month_existing_income = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="当月存量收入")
monthly_existing_income_target = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="月存量收入目标")
monthly_existing_income_completion_rate = models.DecimalField(max_digits=5, decimal_places=2,
verbose_name="月存量收入完成率")
annual_accumulated_income = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="年累计收入")
accumulated_target_completion_rate = models.DecimalField(max_digits=5, decimal_places=2,
verbose_name="累计目标完成率")
class Meta:
verbose_name = "公司整体收入情况"
verbose_name_plural = "公司整体收入情况"
def __str__(self):
return f"{self.year_month} 的收入情况"
class CompanyReceivables(models.Model):
total_receivables = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="应收账款总额")
receivables_0_3_months = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="0-3个月应收账款")
receivables_3_6_months = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="3-6个月应收账款")
receivables_6_12_months = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="6-12个月应收账款")
receivables_1_2_years = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="1-2年应收账款")
receivables_2_3_years = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="2-3年应收账款")
receivables_3_5_years = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="3-5年应收账款")
receivables_over_5_years = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="5年以上应收账款")
class Meta:
verbose_name = "公司应收账款情况"
verbose_name_plural = "公司应收账款情况"
def __str__(self):
return f"应收账款情况"
class CompanyReceivablesDetails(models.Model):
project_name = models.CharField(max_length=255, verbose_name="项目名称")
primary_department = models.CharField(max_length=255, verbose_name="一级部门")
project_manager = models.CharField(max_length=255, verbose_name="项目负责人")
outstanding_amount = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="待回款金额")
class Meta:
verbose_name = "公司应收账款明细"
verbose_name_plural = "公司应收账款明细"
def __str__(self):
return f"{self.project_name} - {self.primary_department} - {self.project_manager}"
class EmployeeStatistics(models.Model):
total_employees = models.IntegerField(verbose_name="员工总数")
new_employees_current_year = models.IntegerField(verbose_name="当年新入职员工数")
regularized_employees = models.IntegerField(verbose_name="转正人数")
probation_failed = models.IntegerField(verbose_name="试用期未通过人数")
employees_left_current_year = models.IntegerField(verbose_name="当年离职员工数")
intern_employees = models.IntegerField(verbose_name="实习人数")
part_time_employees = models.IntegerField(verbose_name="兼职人数")
class Meta:
verbose_name = "公司人员情况"
verbose_name_plural = "公司人员情况"
def __str__(self):
return f"员工总数: {self.total_employees}, 新入职: {self.new_employees_current_year}"
class EmployeePerformance(models.Model):
year = models.IntegerField(verbose_name="年份")
name = models.CharField(max_length=255, verbose_name="姓名")
department = models.CharField(max_length=255, verbose_name="一级部门")
current_year_income = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="当年收入")
income_target = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="收入目标")
income_target_completion_rate = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="收入目标完成率")
commission_paid = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="已发放提成")
accrued_amount = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="计提金额")
other_bonuses = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="其他奖金")
class Meta:
verbose_name = "公司员工业绩及提成情况"
verbose_name_plural = "公司员工业绩及提成情况"
def __str__(self):
return f"{self.year} - {self.name} ({self.department})"
def save(self, *args, **kwargs):
# 可以在此添加一些业务逻辑,如验证收入目标完成率的计算等
super().save(*args, **kwargs)
class EmployeeAttendance(models.Model):
name = models.CharField(max_length=255, verbose_name="姓名")
late = models.IntegerField(default=0, verbose_name="迟到次数")
early_departure = models.IntegerField(default=0, verbose_name="早退次数")
absenteeism = models.IntegerField(default=0, verbose_name="旷工天数")
annual_leave = models.IntegerField(default=0, verbose_name="年假天数")
personal_leave = models.IntegerField(default=0, verbose_name="事假天数")
sick_leave = models.IntegerField(default=0, verbose_name="病假天数")
other_leave = models.IntegerField(default=0, verbose_name="其他假期天数")
class Meta:
verbose_name = "公司员工出勤情况"
verbose_name_plural = "公司员工出勤情况"
def __str__(self):
return f"{self.name} - 公司员工出勤情况"
def save(self, *args, **kwargs):
# 这里可以加入特定的业务逻辑,例如校验数据的合理性等
super().save(*args, **kwargs)
class Project(models.Model):
project_id = models.AutoField(primary_key=True)
project_name = models.CharField(max_length=255, verbose_name="项目名称")
start_date = models.DateField(verbose_name="开始日期")
end_date = models.DateField(verbose_name="结束日期", null=True, blank=True)
primary_department = models.CharField(max_length=255, verbose_name="一级部门")
customer_name = models.CharField(max_length=255, verbose_name="客户名称")
province = models.CharField(max_length=255, verbose_name="")
city = models.CharField(max_length=255, verbose_name="")
district = models.CharField(max_length=255, verbose_name="区县")
project_leader = models.CharField(max_length=255, verbose_name="负责人")
project_members = models.CharField(max_length=255, verbose_name="项目组员")
project_status = models.CharField(max_length=50, choices=(
('进行中', '进行中'),
('暂停', '暂停'),
('待收款', '待收款'),
('完成', '完成')
), verbose_name="项目状态")
resource_type = models.CharField(max_length=50, choices=(
('公司', '公司'),
('个人', '个人')
), verbose_name="资源类型")
project_nature = models.CharField(max_length=50, choices=(
('新增', '新增'),
('存量', '存量'),
('新增及存量', '新增及存量'),
('老客户新业务', '老客户新业务')
), verbose_name="项目性质")
project_progress = models.CharField(max_length=255, verbose_name="项目进度")
contract_date = models.DateField(verbose_name="签约时间", null=True, blank=True)
contract_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="标的金额")
contract_rate = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="合同费率")
revenue = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="收入")
cost_rate = models.DecimalField(max_digits=5, decimal_places=2, verbose_name="成本费率")
cost = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="成本")
net_income = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="净收入")
total_amount_including_tax = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="价税合计金额")
repayment_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="回款金额")
receivable_net_income = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="应收净收入")
actual_net_income = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="实收净收入")
outstanding_net_income = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="待收净收入")
notes = models.TextField(verbose_name="备注", null=True, blank=True)
class Meta:
verbose_name = "公司项目台账"
verbose_name_plural = "公司项目台账"
def __str__(self):
return f"{self.project_name} ({self.project_status})"