192 lines
11 KiB
Python
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})"
|