!5192 添加功能

Merge pull request !5192 from 李鹏宇/zhou
This commit is contained in:
李鹏宇
2025-09-17 06:40:58 +00:00
committed by Gitee
3 changed files with 22 additions and 37 deletions
@@ -31,6 +31,7 @@ class OvertimeApprovals(models.Model):
duration = fields.Float(string="时长", compute='_compute_duration', store=True, help="如果时长大于8则按8小时算")
overtime_hours = fields.Float(string="本月加班时长")
start_time = fields.Datetime(string="开始时间")
attendance_id = fields.Many2one('hr.attendance', string="当天考勤")
start_week = fields.Char(string="星期", compute='_compute_weekday')
end_time = fields.Datetime(string="结束时间")
end_week = fields.Char(string="星期", compute='_compute_weekday')
@@ -52,12 +53,10 @@ class OvertimeApprovals(models.Model):
def open_record(self):
if self.start_time and self.end_time and self.employee_ids:
start_date = fields.Date.to_date(self.start_time)
end_date = fields.Date.to_date(self.end_time)
# 构建 domain 查询条件
domain = [
('employee_id.user_id', 'in', self.employee_ids.user_id.ids),
('current_data', '>=', fields.Datetime.to_datetime(start_date)),
('current_data', '<=', fields.Datetime.to_datetime(end_date)),
('current_data', '=', fields.Datetime.to_datetime(start_date)),
]
return {
'name': '考勤记录',
@@ -67,6 +66,16 @@ class OvertimeApprovals(models.Model):
'domain': domain,
}
@api.onchange('users_id', 'start_time')
def _onchange_att(self):
if self.users_id and self.start_time:
attendance = self.env['hr.attendance'].search([
('employee_id.user_id', '=', self.users_id.id),
('current_data', '=', self.start_time.date()),
])
if attendance:
self.attendance_id = attendance.id
@api.depends('users_id')
def _compute_is_thwg(self):
for rec in self:
@@ -74,13 +83,18 @@ class OvertimeApprovals(models.Model):
rec.is_thwg = rec.users_id.company_id.name == '天河物管'
@api.depends('start_time', 'end_time')
@api.depends('start_time', 'end_time', 'attendance_id')
def _compute_duration(self):
for rec in self:
rec.duration = 0.0
if not (rec.start_time and rec.end_time):
continue
total_seconds = (rec.end_time - rec.start_time).total_seconds()
if rec.attendance_id.shift_id:
rel_end_time = rec.attendance_id.shift_id.end_datetime + timedelta(hours=8)
else:
rel_end_time = rec.start_time.replace(hour=18, minute=0, second=0, microsecond=0)
end_time = rec.end_time + timedelta(hours=8)
total_seconds = (end_time - rel_end_time).total_seconds()
original_hours = total_seconds / 3600
# 加班起步一小时
if original_hours < 1.0:
@@ -136,37 +150,6 @@ class OvertimeApprovals(models.Model):
'approval_date': fields.Datetime.now(),
})
@api.onchange('overtime_department_id')
def onchange_overtime_users(self):
users_data_list = []
default_datetime = datetime.combine(datetime.now().date(), time(hour=17, minute=30)) - timedelta(hours=8),
users_list = []
for user in self.overtime_user_ids:
users_list.append(user.user_id.id)
for over in self:
if not over.overtime_department_id:
if over.users_id.id not in users_list:
users_data_list.append((0, 0, {
'overtime_approval_id': over.id,
'user_id': over.users_id.id,
'start_time': default_datetime[0],
'type_overtime': 'work',
'compensation_mode': 'salary',
}))
else:
employee_ids = self.env['hr.employee'].search(
[('department_id', '=', self.overtime_department_id.id)])
for user in employee_ids:
if user.user_id.id not in users_list:
users_data_list.append((0, 0, {
'overtime_approval_id': over.id,
'user_id': user.user_id.id,
'start_time': default_datetime[0],
'type_overtime': 'work',
'compensation_mode': 'salary',
}))
over.overtime_user_ids = users_data_list
@api.onchange('company_id')
def onchange_company(self):
for record in self:
@@ -88,6 +88,7 @@
<field name="duration"/>
<field name="employee_ids" widget="many2many_tags" options="{'no_create': True}"/>
<field name="department_id" invisible="1"/>
<field name="attendance_id" invisible="1"/>
<field name="is_thwg" invisible="1"/>
<field name="overtime_hours" readonly="1"/>
<field name="meal" required="1" invisible="is_thwg"/>
@@ -196,7 +196,7 @@ class PropertyRentalWizard(models.Model):
date_str = f"{date_field_year_month}-{start_day}"
start_date = datetime.strptime(date_str, "%Y-%m-%d")
# 当期应收日期
if start_year_month <= date_field_year_month < end_year_month:
if start_year_month <= date_field_year_month <= end_year_month:
self.create_rent_list(record, rent_id, rent_amount, start_date, multiplier)
self.create_management_list(record, start_date)
@@ -219,6 +219,7 @@ class PropertyRentalWizard(models.Model):
records = self.env['property.lease.contract'].search([
('actual_start_time', '<=', last_day),
('actual_end_time', '>=', first_day),
('contract_code', '=', '租(2022)N01号')
])
for record in records:
date_data = {