@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user