添加功能
This commit is contained in:
@@ -42,7 +42,7 @@ class OvertimeApprovals(models.Model):
|
||||
rest_start_time = fields.Datetime(string="休息开始时间")
|
||||
rest_end_time = fields.Datetime(string="休息结束时间")
|
||||
end_week = fields.Char(string="星期", compute='_compute_weekday')
|
||||
type_overtime = fields.Selection([('work', '工作日加班'), ('weekend', '周末加班'), ('holiday', '节假日加班')],
|
||||
type_overtime = fields.Selection([('work', '工作日加班'), ('weekend', '公休日加班'), ('holiday', '法定日加班')],
|
||||
string="加班类型", compute="_compute_overtime_type", store=True)
|
||||
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
|
||||
default='normal')
|
||||
@@ -422,31 +422,47 @@ class OvertimeApprovals(models.Model):
|
||||
@api.depends('start_time', 'end_time')
|
||||
def _compute_overtime_type(self):
|
||||
for record in self:
|
||||
current_date = datetime.today()
|
||||
if record.start_time and record.end_time:
|
||||
if record.start_time > record.end_time:
|
||||
raise UserError("开始时间不能晚于结束时间")
|
||||
start_date = fields.Datetime.from_string(record.start_time)
|
||||
end_date = fields.Datetime.from_string(record.end_time)
|
||||
current_year = (fields.Date.today() + timedelta(hours=8)).year
|
||||
query_start = datetime(current_year, 1, 1, 0, 0, 0) - timedelta(hours=8)
|
||||
query_end = datetime(current_year, 12, 31, 23, 59, 59) - timedelta(hours=8)
|
||||
public_holidays = self.env['resource.calendar.leaves'].search([("calendar_id.name", "=", "行政考勤工作日"),
|
||||
("date_from", ">=", query_start),
|
||||
("date_from", "<=", query_end)])
|
||||
for holiday in public_holidays:
|
||||
holiday_start = fields.Datetime.from_string(holiday.date_from)
|
||||
holiday_end = fields.Datetime.from_string(holiday.date_to)
|
||||
if start_date <= holiday_end and end_date >= holiday_start:
|
||||
record.type_overtime = 'holiday'
|
||||
break
|
||||
start_date = record.start_time.date()
|
||||
current_year = current_date.year
|
||||
original_year_start = datetime(current_year, 1, 1, 0, 0, 0)
|
||||
original_year_end = datetime(current_year, 12, 31, 23, 59, 59)
|
||||
query_start = original_year_start - timedelta(hours=8)
|
||||
query_end = original_year_end - timedelta(hours=8)
|
||||
calendar_leaves = self.env['resource.calendar.leaves'].sudo().search([
|
||||
("calendar_id.name", "=", "行政考勤工作日"),
|
||||
("date_from", ">=", query_start),
|
||||
("date_from", "<=", query_end)
|
||||
])
|
||||
holidays_set = set()
|
||||
shift_days_set = set()
|
||||
statutory_set = set()
|
||||
for leave in calendar_leaves:
|
||||
if leave.holidays:
|
||||
statutory_set.update(leave.holidays.split(','))
|
||||
if leave.alternate_rest_day:
|
||||
holidays_set.update(leave.alternate_rest_day.split(','))
|
||||
if leave.shift_replacement_day:
|
||||
shift_days_set.update(leave.shift_replacement_day.split(','))
|
||||
date_str = start_date.strftime('%m月%d日')
|
||||
date_str = self.remove_leading_zero(date_str)
|
||||
is_weekend = start_date.weekday() in [5, 6]
|
||||
if date_str in statutory_set:
|
||||
record.type_overtime = 'holiday'
|
||||
elif date_str in holidays_set or is_weekend:
|
||||
record.type_overtime = 'weekend'
|
||||
else:
|
||||
if start_date.weekday() < 5 and end_date.weekday() < 5: # Not Saturday or Sunday
|
||||
record.type_overtime = 'work'
|
||||
elif start_date.weekday() >= 5 or end_date.weekday() >= 5: # Saturday or Sunday
|
||||
record.type_overtime = 'weekend'
|
||||
else:
|
||||
record.type_overtime = False
|
||||
record.type_overtime = 'work'
|
||||
|
||||
def remove_leading_zero(self, date_str):
|
||||
month, day = date_str.split('月')
|
||||
month = month.lstrip('0')
|
||||
day = day.rstrip('日')
|
||||
day = day.lstrip('0')
|
||||
return f'{month}月{day}日'
|
||||
|
||||
class OvertimeUserLine(models.Model):
|
||||
_name = 'overtime.user.line'
|
||||
|
||||
Reference in New Issue
Block a user