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})"