@@ -58,7 +58,7 @@ class BusController(Controller):
|
||||
if employee_id:
|
||||
request.env(user=SUPERUSER_ID)["hr.attendance.detail"].create({
|
||||
'employee_id': employee_id.id, # 员工
|
||||
'checkin_time': fields.Datetime.now(), # 打卡时间
|
||||
'checkin_time': fields.Datetime.now(),
|
||||
'source': 'iot', # 打卡来源
|
||||
'attendance_iot_id': attendance_iot_id.id, # 打卡设备
|
||||
})
|
||||
|
||||
@@ -126,49 +126,41 @@ class SoongWorkflowNode(models.Model):
|
||||
@api.onchange("is_end")
|
||||
def onchange_is_end(self):
|
||||
for record in self:
|
||||
current_buttons = record.button_ids
|
||||
if record.is_end:
|
||||
record.use_custom_colors = True
|
||||
record.bg_color = END_BG_COLOR_1
|
||||
record.res_bg_color = END_BG_COLOR_1
|
||||
sequence = max([r.sequence for r in record.button_ids] if record.button_ids else [1])
|
||||
record.button_ids = [
|
||||
(0, 0, {
|
||||
end_btns = current_buttons.filtered(lambda r: r.name == _("结束"))
|
||||
archive_btns = current_buttons.filtered(lambda r: r.name == _("归档"))
|
||||
remove_commands = [(3, btn.id) for btn in end_btns + archive_btns]
|
||||
sequence = max([r.sequence for r in current_buttons] if current_buttons else [1])
|
||||
add_end = (0, 0, {
|
||||
"name": _("结束"),
|
||||
# "workflow_id": record.workflow_id.ids[0] if record.workflow_id.ids else None,
|
||||
"node_id": record.id,
|
||||
"sequence": sequence + 1,
|
||||
"action_type": "end",
|
||||
"btn_hide": False, # 对所有人显示
|
||||
"has_comment": False, # 对所有人显示
|
||||
"btn_hide": False,
|
||||
"has_comment": False,
|
||||
"review_type": "end",
|
||||
}),
|
||||
]
|
||||
})
|
||||
add_archive = (0, 0, {
|
||||
"name": _("归档"),
|
||||
"node_id": record.id,
|
||||
"sequence": sequence + 2,
|
||||
"action_type": "code",
|
||||
"btn_hide": False,
|
||||
"has_comment": False,
|
||||
})
|
||||
record.button_ids = remove_commands + [add_end, add_archive]
|
||||
|
||||
else:
|
||||
record.use_custom_colors = True
|
||||
record.bg_color = DEFAULT_BG_COLOR
|
||||
record.res_bg_color = DEFAULT_BG_COLOR
|
||||
remove_ids = record.button_ids.filtered(lambda r: r.name in ["结束"])
|
||||
record.button_ids = [(3, remove_id.id) for remove_id in remove_ids]
|
||||
|
||||
@api.onchange("is_archive")
|
||||
def onchange_is_archive(self):
|
||||
for record in self:
|
||||
if record.is_archive:
|
||||
sequence = max([r.sequence for r in record.button_ids] if record.button_ids else [1])
|
||||
record.button_ids = [
|
||||
(0, 0, {
|
||||
"name": _('归档'),
|
||||
"node_id": record.id,
|
||||
"sequence": sequence + 1,
|
||||
"action_type": "code",
|
||||
"btn_hide": False,
|
||||
"has_comment": False,
|
||||
}),
|
||||
]
|
||||
else:
|
||||
remove_ids = record.button_ids.filtered(lambda r: r.name in ["归档"])
|
||||
record.button_ids = [(3, remove_id.id) for remove_id in remove_ids]
|
||||
|
||||
end_btns = current_buttons.filtered(lambda r: r.name == _("结束"))
|
||||
archive_btns = current_buttons.filtered(lambda r: r.name == _("归档"))
|
||||
record.button_ids = [(3, btn.id) for btn in end_btns + archive_btns]
|
||||
|
||||
@api.onchange("is_confirm")
|
||||
def onchange_is_confirm(self):
|
||||
|
||||
@@ -67,7 +67,7 @@ class SoongWorkflowRecord(models.Model):
|
||||
done_by = fields.Many2one(comodel_name="res.users", string="发起人")
|
||||
active = fields.Boolean(string="归档", default=True)
|
||||
is_manager = fields.Boolean(string="是否管理员", compute='_compute_is_manager')
|
||||
soong_state = fields.Selection([('to_do', '待办'), ('done', '已办'), ('active', '已归档')], string="流程状态", default="to_do")
|
||||
soong_state = fields.Selection([('to_do', '待办'), ('done', '已办'),('to_active', '待归档'), ('active', '已归档')], string="流程状态", default="to_do")
|
||||
member_of_department = fields.Boolean("是否是本部门数据", compute='_compute_part_of_department',
|
||||
search='_search_part_of_department')
|
||||
|
||||
|
||||
@@ -456,10 +456,10 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
fields.Datetime.now() + timedelta(
|
||||
hours=8)),
|
||||
url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
target_logs = next_node_log_records.filtered(lambda l: l.done_by.id == employee.user_id.id)
|
||||
if target_logs:
|
||||
target_logs.msg_id = msg_id
|
||||
# msg_id = result_data[-1]['msgid']
|
||||
# target_logs = next_node_log_records.filtered(lambda l: l.done_by.id == employee.user_id.id)
|
||||
# if target_logs:
|
||||
# target_logs.msg_id = msg_id
|
||||
|
||||
else: # 串审模式 (沿用原有逻辑)
|
||||
# 查找下一个节点
|
||||
@@ -606,6 +606,12 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
# if not record_id.log_ids2.search([('approval_state', '=', '0')]) or record_id.log_ids2:
|
||||
last_log = record_id.log_ids[-1] if record_id.log_ids else None
|
||||
if last_log:
|
||||
applicant = None
|
||||
for field_name in ['user_id', 'users_id']:
|
||||
if hasattr(record_id, field_name):
|
||||
applicant = getattr(record_id, field_name)
|
||||
if applicant:
|
||||
break
|
||||
same_name_logs = record_id.log_ids.filtered(
|
||||
lambda log: log.name == last_log.name and log.node_btn_name == '4' and log.id != last_log.id
|
||||
)
|
||||
@@ -622,19 +628,23 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
if workflow_record:
|
||||
workflow_record.write({
|
||||
'approve_state': 'end',
|
||||
'employee_ids': False,
|
||||
'employee_ids': applicant.id,
|
||||
'soong_state': 'to_active',
|
||||
'node_id': False,
|
||||
})
|
||||
record_id.work_end = True
|
||||
else:
|
||||
self.env['soong.workflow.record'].search([
|
||||
('code', '=', record_id.code)
|
||||
]).write({
|
||||
'approve_state': 'end',
|
||||
'employee_ids': False,
|
||||
'node_id': False,
|
||||
self.sudo().env["soong.workflow.log"].create({
|
||||
"code": self.code,
|
||||
"model": self.res_model,
|
||||
"res_id": self.res_id,
|
||||
"workflow_id": self.node_btn_id.workflow_id.id,
|
||||
"lase_click_date": fields.Datetime.now(),
|
||||
"done_by": applicant.id,
|
||||
"approval_state": "0",
|
||||
"commit":'待归档',
|
||||
"node_btn_id": self.node_btn_id.id,
|
||||
})
|
||||
record_id.work_end = True
|
||||
|
||||
# 给申请人发消息
|
||||
biz_record = self.env[self.res_model].browse(self.res_id)
|
||||
if hasattr(biz_record, 'user_id') and biz_record.user_id:
|
||||
@@ -697,8 +707,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"node_btn_name": "0",
|
||||
})
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description, description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
log_id.msg_id = msg_id
|
||||
# msg_id = result_data[-1]['msgid']
|
||||
# log_id.msg_id = msg_id
|
||||
for emp in self.dep_manager_employee_ids:
|
||||
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.dep_manager_employee_ids if employee.user_id]
|
||||
next_node_id = record_id.workflow_id.node_ids.search([('name', '=', '承办'), ('workflow_id', '=', record_id.workflow_id.id)])
|
||||
@@ -712,8 +722,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"node_btn_name": "4",
|
||||
})
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id=emp.wecom_userid, title=record_id._description + "承办", description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
log_id.msg_id = msg_id
|
||||
# msg_id = result_data[-1]['msgid']
|
||||
# log_id.msg_id = msg_id
|
||||
for employee in self.circulated_employee_ids:
|
||||
workflow_record_id.users_ids = [(4, employee.user_id.id) for employee in self.circulated_employee_ids if employee.user_id]
|
||||
record_id = self.env[self.res_model].search([('id', '=', self.res_id)])
|
||||
@@ -737,8 +747,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
"approval_state": "0",
|
||||
})
|
||||
result_data = self.sudo().env["wecom.apps"].sync_send_message_textcard(category='oa', user_id='18562027762', title=record_id._description + "传阅/抄送",description=description, url=url, btntxt="查看详情")
|
||||
msg_id = result_data[-1]['msgid']
|
||||
log2_id.msg_id = msg_id
|
||||
# msg_id = result_data[-1]['msgid']
|
||||
# log2_id.msg_id = msg_id
|
||||
workflow_record_id.employee_ids = self.dep_manager_employee_ids + self.employee_ids + self.circulated_employee_ids
|
||||
record_id.log_ids[-1].write({"comment": self.comment, "approval_state": "2", "lase_click_date": fields.Datetime.now()})
|
||||
if self.node_btn_name == "收回":
|
||||
@@ -767,7 +777,10 @@ class SoongWorkflowCommentWizard(models.TransientModel):
|
||||
|
||||
if self.node_btn_name == '归档':
|
||||
workflow_record_id = self.env['soong.workflow.record'].search([('code', '=', record_id.code)])
|
||||
workflow_record_id.write({'soong_state': 'active'})
|
||||
workflow_record_id.write({'soong_state': 'active',
|
||||
'employee_ids':False
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
if self.node_btn_name != "收回":
|
||||
|
||||
@@ -414,6 +414,10 @@ class HrAttendanceDetail(models.Model):
|
||||
start_datetime = datetime.combine(date, datetime.min.time()).replace(
|
||||
hour=start_hour, minute=start_minute, second=0, microsecond=0
|
||||
) - timedelta(hours=8)
|
||||
if template.planning_name == '厨卫(集团本部)':
|
||||
start_datetime = datetime.combine(date, datetime.min.time()).replace(
|
||||
hour=start_hour, minute=start_minute, second=0, microsecond=0
|
||||
) - timedelta(hours=6)
|
||||
if template.day2 == '次日':
|
||||
end_datetime = datetime.combine(date, datetime.min.time()).replace(
|
||||
hour=end_hour, minute=end_minute, second=0, microsecond=0
|
||||
|
||||
@@ -81,6 +81,7 @@ class YuthonOfficial(models.Model):
|
||||
sub_id = self.env['yuthon.sub.enterprises'].create({
|
||||
'name': self.name,
|
||||
'users_id': self.users_id.id,
|
||||
'state': '申请人',
|
||||
'code': self.env['ir.sequence'].next_by_code('sub_enterprises_code'),
|
||||
'official_partner_id': official_partner_id.id,
|
||||
'issuance_process_id': self.id,
|
||||
|
||||
Reference in New Issue
Block a user