!2175 添加功能

Merge pull request !2175 from dev_zhou
This commit is contained in:
李鹏宇
2025-03-29 12:09:25 +00:00
committed by Gitee
4 changed files with 75 additions and 34 deletions
@@ -540,6 +540,16 @@ class HrAttendance(models.Model):
# ])
# if attendance:
# attendance.write({'shift_id': slot.shift_id.id})
def update_attendance(self):
start_time = datetime(2025, 3, 18, 14, 48, 0)
end_time = datetime(2025, 3, 18, 14, 48, 59)
attendance_records = self.env['hr.attendance'].search([
('check_in', '>=', start_time),
('check_in', '<=', end_time)
])
if attendance_records:
for attendance_record in attendance_records:
attendance_record.write({'check_in': False})
class card_remind_form(models.Model):
_name = 'card.remind.form'
@@ -65,8 +65,6 @@
<field name="res_model">hr.attendance</field>
<field name="view_mode">tree,form,search</field>
<field name="domain">[('employee_id.user_id', '=', uid)]</field>
<field name="view_ids" eval="[(5, 0, 0),
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_attendance_going_tree2')})]"/>
</record>
<record id="action_attendance_yuthon_company_form" model="ir.actions.act_window">
<field name="name">考勤记录</field>
@@ -162,6 +162,7 @@ class HrAttendanceMonthWizard(models.TransientModel):
wizard.search_attendance_month()
def get_leave_and_overtime_info(self, employee_id):
calendar_leaves = self.env['resource.calendar.leaves'].search([])
leave_types = {
'年假': 'annual_leave',
'事假': 'unpaid_leave',
@@ -204,28 +205,58 @@ class HrAttendanceMonthWizard(models.TransientModel):
leave_end = leave.date_to.date()
start_in_month = max(leave_start, date_from)
end_in_month = min(leave_end, date_to)
# 判断是否跨月
is_cross_month = leave_start.year != leave_end.year or leave_start.month != leave_end.month
if is_cross_month:
if leave_start.year == year and leave_start.month == month:
# 请假开始在当前月,如 2 月 16 号开始,2 月取 2 月底减去 16
days_in_month = (date(year, month + 1, 1) - leave_start).days if month < 12 else (date(year + 1, 1, 1) - leave_start).days
leave_days[leave_type] = days_in_month
elif leave_end.year == year and leave_end.month == month:
# 请假结束在当前月,如 5 月 6 号结束,5 月取 6 天
days_in_month = (leave_end - date(year, month, 1)).days + 1
leave_days[leave_type] = days_in_month
if holiday_status_id.type_of_work == '0':
if leave_start.year == year and leave_start.month == month:
# 请假开始在当前月,如 2 月 16 号开始,2 月取 2 月底减去 16
days_in_month = (date(year, month + 1, 1) - leave_start).days if month < 12 else (date(year + 1, 1, 1) - leave_start).days
leave_days[leave_type] = days_in_month
elif leave_end.year == year and leave_end.month == month:
# 请假结束在当前月,如 5 月 6 号结束,5 月取 6 天
days_in_month = (leave_end - date(year, month, 1)).days + 1
leave_days[leave_type] = days_in_month
else:
# 正常情况,计算当前月内的天数
days_in_month = (end_in_month - start_in_month).days
leave_days[leave_type] = days_in_month
else:
# 正常情况,计算当前月内的天数
days_in_month = (end_in_month - start_in_month).days
leave_days[leave_type] = days_in_month
if leave_start.year == year and leave_start.month == month:
start_date = leave_start
if leave_end.year == year and leave_end.month == month:
end_date = leave_end
else:
end_date = date(year, month + 1, 1) if month < 12 else date(year + 1, 1, 1)
end_date = end_date - datetime.timedelta(days=1) # 取到当月最后一天
elif leave_end.year == year and leave_end.month == month:
start_date = date(year, month, 1)
end_date = leave_end
else:
start_date = start_in_month
end_date = end_in_month
admin_id = self.env['hr.employee'].search([("name", "=", '李园')])
leave = self.env['hr.leave'].sudo().create({
'employee_id': admin_id.id,
'holiday_status_id': holiday_status_id.id,
'request_date_from': start_date,
'request_date_to': end_date,
'state': 'confirm',
})
leave_days[leave_type] = leave.number_of_days
for calendar in calendar_leaves:
shift_days = calendar.shift_replacement_day.split(',') if calendar.shift_replacement_day else []
for day_str in shift_days:
day = datetime.datetime.strptime(day_str, '%m月%d日')
day = day.replace(year=start_date.year).date()
if start_date <= day <= end_date:
leave_days[leave_type] = leave.number_of_days + 1
leave.unlink()
else:
for leave in leave_records:
total_days += leave.number_of_days_display
leave_days[leave_type] = total_days
employee = self.env['hr.employee'].browse(employee_id)
all_overtime_hours = employee.all_overtime_hours
attendance_detail = self.env['hr.attendance.month.detail'].search([
@@ -134,25 +134,27 @@
</group>
</xpath>
<xpath expr="//page[@name='public']//group[@name='departure']" position="after">
<group string="工资计算" col="2">
<group>
<field name="salary_group_id"/>
<field name="last_year_salary"/>
<field name="social_base_on"/>
<field name="social_base_off"/>
<field name="medical_insurance_base"/>
<field name="pension_insurance_base"/>
<field name="work_injury_insurance_base"/>
<field name="housing_fund_base"/>
<field name="last_month_base_salary_deduction"/>
<field name="last_month_performance_deduction"/>
<field name="last_month_commuting_deduction"/>
<field name="is_salary"/>
<field name="last_attendance"/>
</group>
<group>
<button name="put_holiday_return" string="详情" type="object" class="oe_highlight"/>
</group>
<group string="工资计算">
<field name="salary_group_id"/>
<field name="last_year_salary"/>
<field name="social_base_on"/>
<field name="social_base_off"/>
<field name="medical_insurance_base"/>
<field name="pension_insurance_base"/>
<field name="work_injury_insurance_base"/>
<field name="housing_fund_base"/>
</group>
<group col="2">
<group>
<field name="last_month_base_salary_deduction"/>
<field name="last_month_performance_deduction"/>
<field name="last_month_commuting_deduction"/>
<field name="is_salary"/>
<field name="last_attendance"/>
</group>
<group>
<button name="put_holiday_return" string="详情" type="object" class="oe_highlight"/>
</group>
</group>
<group name="overtime" string="加班" col="2">
<group>