添加功能

This commit is contained in:
zhouzhou
2024-12-04 11:44:59 +08:00
parent 03e0c0964b
commit ca593a8c8f
3 changed files with 53 additions and 48 deletions
-2
View File
@@ -10,8 +10,6 @@ from . import card_approval
from . import planning_template_inherit
from . import overtime_page
from . import inherit_planning_role
from . import inherit_planning_slot_template
from . import inherit_planning_slot
from . import yuthon_shift_planning
from . import yuthon_run_planning
from . import duty_approval
@@ -9,11 +9,12 @@ class YuthonRunPlanning(models.Model):
name = fields.Char(string='排班计划名称', required=True)
illustrate = fields.Char(string='排班说明', default='默认轮排到下个月')
engineering_run_ids = fields.One2many('yuthon.engineering.run.line', 'engineering_planning_id', string='关联工程部排班明细')
high_run_ids = fields.One2many('yuthon.high.run.line', 'engineering_planning_id', string='关联工程部排班明细')
all_run_ids = fields.One2many('yuthon.all.run.line', 'engineering_planning_id', string='关联工程部排班明细')
engineering_run_ids = fields.One2many('yuthon.engineering.run.line', 'engineering_planning_id', string='关联运行班排班明细')
high_run_ids = fields.One2many('yuthon.high.run.line', 'engineering_planning_id', string='关联高压班排班明细')
all_run_ids = fields.One2many('yuthon.all.run.line', 'engineering_planning_id', string='关联综合部排班明细')
def confirm(self):
run_lines_list = [self.engineering_run_ids, self.high_run_ids, self.all_run_ids]
today = datetime.today().date()
first_day_of_month = today.replace(day=1)
if today.month < 12:
@@ -23,48 +24,59 @@ class YuthonRunPlanning(models.Model):
role_a = self.env['planning.role'].search([('name', '=', '工程部白班')], limit=1)
start_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id)]).start_time)
end_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id)]).end_time)
for employee in self.engineering_run_ids:
run = 0
for run_lines in run_lines_list:
if not run_lines:
continue
run += 1
for employee in run_lines:
current_date = first_day_of_month
while current_date <= last_day_of_month:
resource_id = employee.employee_id.resource_id
self.env['planning.slot'].create({
'resource_id': resource_id.id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day, start_time) + timedelta(hours=16),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day, end_time) + timedelta(hours=16),
'role_id': role_a.id,
'allocated_hours': 8,
})
current_date += timedelta(days=1)
if current_date > last_day_of_month:
break
role_b = self.env['planning.role'].search([('name', '=', '工程部中值夜班')], limit=1)
start_time2 = int(self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).start_time)
end_time2 = int(self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).end_time)
if run == 1:
all_slot = self.env['planning.slot'].search([('department_id.name', '=', '运行班')])
elif run == 2:
all_slot = self.env['planning.slot'].search([('department_id.name', '=', '高压班')])
elif run == 3:
all_slot = self.env['planning.slot'].search([('department_id.name', '=', '综合班')])
current_date = first_day_of_month
i = -1
while current_date <= last_day_of_month:
resource_id = employee.employee_id.resource_id
self.env['planning.slot'].create({
'resource_id': resource_id.id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day, start_time) + timedelta(hours=16),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day, end_time) + timedelta(hours=16),
'role_id': role_a.id,
'allocated_hours': 8,
})
current_date += timedelta(days=1)
if current_date > last_day_of_month:
break
role_b = self.env['planning.role'].search([('name', '=', '工程部中值夜班')], limit=1)
start_time2 = int(self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).start_time)
end_time2 = int(self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).end_time)
all_slot = self.env['planning.slot'].search([('department_id.name', '=', '运行班')])
current_date = first_day_of_month
i = -1
while current_date <= last_day_of_month:
for employee in range(0, len(self.engineering_run_ids)):
i = i + 1
slot_id = all_slot.search([('resource_id', '=', self.engineering_run_ids[employee].employee_id.resource_id.id)]).sorted('start_datetime')[i]
slot_id.sudo().write({
'template_id': self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,
start_time2) + timedelta(hours=16),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,
end_time2) + timedelta(days=1, hours=16),
'role_id': role_b.id,
'allocated_hours': 8,
})
current_date += timedelta(days=1)
if current_date > last_day_of_month:
break
for employee in range(0, len(run_lines)):
i = i + 1
slot_id = all_slot.search([('resource_id', '=', run_lines[employee].employee_id.resource_id.id)]).sorted('start_datetime')[i]
slot_id.sudo().write({
'template_id': self.env['planning.slot.template'].search([('role_id', '=', role_b.id)]).id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,
start_time2) + timedelta(hours=16),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,
end_time2) + timedelta(days=1, hours=16),
'role_id': role_b.id,
'allocated_hours': 8,
})
current_date += timedelta(days=1)
if current_date > last_day_of_month:
break
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'success',
'message': '运行班已排完',
'message': '排班安排已完成',
'sticky': False,
}
}
@@ -43,17 +43,12 @@ class YuthonShiftPlanning(models.Model):
def create_planning_slot(self, record,role,role_template,current_date):
start_hour = int(role_template.start_time)
start_minute = int(round((role_template.start_time - start_hour) * 60))
end_hour = int(role_template.end_time)
end_minute = int(round((role_template.end_time - end_hour) * 60))
start_time = current_date.replace(hour=start_hour, minute=start_minute, second=0, microsecond=0)+ timedelta(hours=16)
start_time = current_date.replace(hour=start_hour)+ timedelta(hours=16)
if role_template.end_time < role_template.start_time:
end_time = (current_date + timedelta(days=1)).replace(hour=end_hour, minute=end_minute, second=0,
microsecond=0)+ timedelta(hours=16)
end_time = current_date.replace(hour=end_hour)+ timedelta(days=1, hours=16)
else:
end_time = current_date.replace(hour=end_hour, minute=end_minute, second=0, microsecond=0)+ timedelta(hours=16)
end_time = current_date.replace(hour=end_hour)+ timedelta(hours=16)
self.env['planning.slot'].create({
'resource_id': record.employee_id.resource_id.id,
'role_id':role,