diff --git a/yuthon_hr_attendance/views/yuthon_duty_setting_views.xml b/yuthon_duty_plan/views/yuthon_duty_setting_views.xml
similarity index 100%
rename from yuthon_hr_attendance/views/yuthon_duty_setting_views.xml
rename to yuthon_duty_plan/views/yuthon_duty_setting_views.xml
diff --git a/yuthon_hr_attendance/views/yuthon_duty_summary_views.xml b/yuthon_duty_plan/views/yuthon_duty_summary_views.xml
similarity index 89%
rename from yuthon_hr_attendance/views/yuthon_duty_summary_views.xml
rename to yuthon_duty_plan/views/yuthon_duty_summary_views.xml
index b11ee116b..aa50097db 100644
--- a/yuthon_hr_attendance/views/yuthon_duty_summary_views.xml
+++ b/yuthon_duty_plan/views/yuthon_duty_summary_views.xml
@@ -23,8 +23,8 @@
值班汇总打印
yuthon.duty.summary
qweb-pdf
- yuthon_hr_attendance.yuthon_duty_summary_report_template
- yuthon_hr_attendance.yuthon_duty_summary_report_template
+ yuthon_duty_plan.yuthon_duty_summary_report_template
+ yuthon_duty_plan.yuthon_duty_summary_report_template
'%s-值班汇总'%
report
diff --git a/yuthon_hr_attendance/views/yuthon_shift_approval_views.xml b/yuthon_duty_plan/views/yuthon_shift_approval_views.xml
similarity index 100%
rename from yuthon_hr_attendance/views/yuthon_shift_approval_views.xml
rename to yuthon_duty_plan/views/yuthon_shift_approval_views.xml
diff --git a/yuthon_hr_attendance/wizard/__init__.py b/yuthon_duty_plan/wizard/__init__.py
similarity index 100%
rename from yuthon_hr_attendance/wizard/__init__.py
rename to yuthon_duty_plan/wizard/__init__.py
diff --git a/yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard.py b/yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard.py
similarity index 83%
rename from yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard.py
rename to yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard.py
index aa9a7993c..28f7e973e 100644
--- a/yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard.py
+++ b/yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard.py
@@ -3,11 +3,12 @@ from odoo.exceptions import ValidationError, UserError
from datetime import date, timedelta
import random
+
class YuthonDutyArrangementWizard(models.TransientModel):
_name = 'yuthon.duty.arrangement.wizard'
_description = '自动安排值班弹窗'
- number_personnel = fields.Integer(string='人数')
+ number_personnel = fields.Integer(string='人数', help="多少人一循环")
remake = fields.Text(string='备注', default='一次只能排当月的,注意会清空当月数据随机生成。')
def confirm(self):
@@ -27,7 +28,7 @@ class YuthonDutyArrangementWizard(models.TransientModel):
]).unlink()
today = date.today()
next_month = (today.replace(day=1) + timedelta(days=32)).replace(day=1)
- current_date = today
+ current_date = today
while current_date < next_month:
for employee in selected_people:
self.env['yuthon.duty.arrangement'].create({
@@ -37,6 +38,14 @@ class YuthonDutyArrangementWizard(models.TransientModel):
})
current_date += timedelta(days=1)
+ tree_id = self.env.ref("yuthon_duty_plan.view_yuthon_duty_arrangement_tree").id
+ return {
+ "type": "ir.actions.act_window",
+ "name": "值班安排",
+ "res_model": "yuthon.duty.arrangement",
+ "views": [[tree_id, "tree"]],
+ }
+
@api.model
def action_hr_employee(self):
return {
diff --git a/yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard_views.xml b/yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard_views.xml
similarity index 90%
rename from yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard_views.xml
rename to yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard_views.xml
index 851b93773..05b2ee850 100644
--- a/yuthon_hr_attendance/wizard/yuthon_duty_arrangement_wizard_views.xml
+++ b/yuthon_duty_plan/wizard/yuthon_duty_arrangement_wizard_views.xml
@@ -18,7 +18,7 @@
自动安排
-
+
code
action = model.action_hr_employee()
diff --git a/yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard.py b/yuthon_duty_plan/wizard/yuthon_duty_summary_wizard.py
similarity index 99%
rename from yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard.py
rename to yuthon_duty_plan/wizard/yuthon_duty_summary_wizard.py
index 64978ea21..f7e37de40 100644
--- a/yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard.py
+++ b/yuthon_duty_plan/wizard/yuthon_duty_summary_wizard.py
@@ -3,6 +3,7 @@ from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, tools, _
from datetime import date, timedelta, datetime
+
class YuthonDutySummaryWizard(models.TransientModel):
_name = 'yuthon.duty.summary.wizard'
_description = '值班汇总计算'
diff --git a/yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard_views.xml b/yuthon_duty_plan/wizard/yuthon_duty_summary_wizard_views.xml
similarity index 91%
rename from yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard_views.xml
rename to yuthon_duty_plan/wizard/yuthon_duty_summary_wizard_views.xml
index 338525c16..c3d65ed1f 100644
--- a/yuthon_hr_attendance/wizard/yuthon_duty_summary_wizard_views.xml
+++ b/yuthon_duty_plan/wizard/yuthon_duty_summary_wizard_views.xml
@@ -17,7 +17,7 @@
值班汇总计算
-
+
code
action = model.action_duty_summary_wizard()
diff --git a/yuthon_hr_attendance/__init__.py b/yuthon_hr_attendance/__init__.py
index 1f4530082..c3d410ea1 100644
--- a/yuthon_hr_attendance/__init__.py
+++ b/yuthon_hr_attendance/__init__.py
@@ -2,4 +2,3 @@
from . import models
from . import controllers
-from . import wizard
diff --git a/yuthon_hr_attendance/__manifest__.py b/yuthon_hr_attendance/__manifest__.py
index 261754fbd..2c5f646d8 100644
--- a/yuthon_hr_attendance/__manifest__.py
+++ b/yuthon_hr_attendance/__manifest__.py
@@ -16,45 +16,26 @@
'soong_workflow', 'yuthon_issue', 'planning', 'calendar'],
'data': [
'security/ir.model.access.csv',
- # 'security/approval_attendance.xml',
'data/attendance_code_data.xml',
'data/attendance_time_data.xml',
- 'data/arrangement_time_data.xml',
- # 'views/inherit_hr_employee_views.xml',
'views/hr_attendance_views.xml',
'views/resource_calendar_leaves_views.xml',
- 'views/yuthon_adjustments_approval_views.xml',
- 'views/yuthon_duty_arrangement_views.xml',
'views/inherit_planning_role_views.xml',
'views/inherit_planning_slot_views.xml',
'views/inherit_planning_slot_template_views.xml',
'views/yuthon_shift_planning_views.xml',
- 'views/yuthon_duty_summary_views.xml',
'views/yuthon_hv_planning_views.xml',
'views/yuthon_overall_planning_views.xml',
'views/yuthon_run_planning_views.xml',
- 'views/yuthon_duty_setting_views.xml',
- 'views/yuthon_shift_approval_views.xml',
- 'views/yuthon_abnormal_setting_views.xml',
- 'views/yuthon_duty_plan_views.xml',
- 'views/yuthon_abnormal_approval_views.xml',
- # 'views/attendance_iot_datas.xml',
- # 'views/attendance_iot_manager_views.xml',
- # 'views/attendance_iot_views.xml',
- # 'views/attendance_iot_datas.xml',
'views/overtime_approval.xml',
'views/go_approval.xml',
- 'views/duty_approval.xml',
'views/leave_approval.xml',
'views/overtime_page_views.xml',
'views/remove_holiday_approval.xml',
'views/card_approval.xml',
'views/attendance_scheme.xml',
+ 'views/duty_approval.xml',
'views/all_attendance_menu.xml',
- # 'views/attendance_iot_datas.xml',
- 'wizard/yuthon_duty_arrangement_wizard_views.xml',
- 'wizard/yuthon_duty_summary_wizard_views.xml',
- # 'wizard/attendance_iot_manager_wizard_views.xml',
],
'assets': {
'web.assets_backend': [
diff --git a/yuthon_hr_attendance/controllers/__init__.py b/yuthon_hr_attendance/controllers/__init__.py
index e3dc04172..e3629bb33 100644
--- a/yuthon_hr_attendance/controllers/__init__.py
+++ b/yuthon_hr_attendance/controllers/__init__.py
@@ -1,7 +1,5 @@
# -*- coding: utf-8 -*-
-# from . import kaoqin_test
-# from . import http
from . import attendance_banner_route
diff --git a/yuthon_hr_attendance/controllers/http.py b/yuthon_hr_attendance/controllers/http.py
deleted file mode 100644
index 095f5b69e..000000000
--- a/yuthon_hr_attendance/controllers/http.py
+++ /dev/null
@@ -1,19 +0,0 @@
-from odoo.http import JsonRPCDispatcher
-
-
-# class CustomJsonRPCDispatcher(JsonRPCDispatcher):
-# """
-# 继承odoo底层源码http.py
-# 因为odoo本身会给对应的接口请求进行自动包装,通过判断做设备区分
-# """
- # def _response(self, result=None, error=None):
- # if 'api/v1' in self.request.httprequest.headers.environ.get('PATH_INFO'):
- # return self.request.make_json_response(result)
- # response = {'jsonrpc': '2.0', 'id': self.request_id}
- # if error is not None:
- # response['error'] = error
- # if result is not None:
- # response['result'] = result
- # return self.request.make_json_response(response)
-
-
diff --git a/yuthon_hr_attendance/controllers/kaoqin_test.py b/yuthon_hr_attendance/controllers/kaoqin_test.py
deleted file mode 100644
index 3b4d45953..000000000
--- a/yuthon_hr_attendance/controllers/kaoqin_test.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from odoo.http import Controller, request, route
-from datetime import datetime
-from odoo import models, fields, api, http, SUPERUSER_ID, _
-
-
-# class BusController(Controller):
-# def get_equipment_company(self, sn):
-# sn_address = {
-# 'RLM-00111018': '地址1',
-# }
-# return sn_address[sn]
-
- # @route('/api/v1/record/face', methods=['POST'], type='json', auth='none', csrf=False)
- # def get_model_definitions(self):
- # """
- # 用户通过考勤机识别,写入考勤数据
- # :return:
- # """
- # data = request.httprequest.json['logs'][0]
- # user_name = data.get('user_name')
- # employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('name', '=', user_name)])
- # request.env(user=SUPERUSER_ID)["hr.attendance"].create({
- # 'employee_id': employee_id.id,
- # 'check_in': datetime.strptime(data.get('recog_time'), '%Y-%m-%d %H:%M:%S')
- # })
- # print("---------------------------------------------测试成功---------------------------------------")
- # return {"Result": 0, "Msg": "添加成功"}
-
- # @route('/api/v1/user/inf_photo', methods=['POST'], type='json', auth='public')
- # def get_model_definitions(self):
- # name = request.jsonrequest.get('sn') # 姓名
- # phone = request.jsonrequest.get('content') # 电话
- # print(name, phone)
- # return {
- # "Result": 0,
- # "Msg": "更新成功"
- # }
- #
- # # 员工识别接口
- # @route('/api/v1/stranger', methods=['POST'], type='json', auth='none')
- # def get_model_definitions(self):
- # data = request.httprequest.json.get('logs')[0]
- # user_name = data['user_name']
- # request.env["hr.employee"].create({
- # 'name': user_name + 'stranger',
- # })
- # print("---------------------------------------------测试成功---------------------------------------")
- # return {
- # "Result": 0,
- # "Msg": "更新成功"
- # }
-
- # @route('/api/v1/addFace', methods=['POST'], type='json', auth='none', csrf=False)
- # def get_model_kaoqin(self):
- # """
- # 获取用户录入考勤机数据,和系统内用户绑定关联
- # :return:
- # """
- # data = request.httprequest.json
- # user_name = data.get('name')
- # # validity_period = datetime.strptime(data.get('validity_period'), '%Y-%m-%d').date()
- # employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('name', '=', user_name)])
- # attendance_iot = request.env(user=SUPERUSER_ID)["attendance.iot.manager"]
- # if not attendance_iot.search([('employee_id', '=', employee_id.id), ('attendance_number', '=', data.get('sn'))]):
- # employee_id.write({
- # 'image_1920': data.get('photo'),
- # })
- # attendance_iot.create({
- # 'data_selection': "api",
- # 'attendance_number': data.get('sn'),
- # 'attendance_address': self.get_equipment_company(data.get('sn')),
- # 'employee_id': employee_id.id,
- # })
- # print("---------------------------------------------测试成功---------------------------------------")
- # return {"Result": 0, "Msg": "添加成功"}
-
- # @route('/api/v1/record/face', methods=['POST'], type='json', auth='none', csrf=False)
- # def get_model_identify(self):
- # """
- # 获取上传识别成功记录
- # :return:
- # """
- # data = request.httprequest.json
- # user_name = data.get('logs').get('user_id')
- # employee_id = request.env(user=SUPERUSER_ID)["hr.employee"].search([('user_id', '=', user_name.id)])
- # attendance_iot = request.env(user=SUPERUSER_ID)["attendance.iot.datas"]
- # if not attendance_iot.search(
- # [('employee_id', '=', employee_id.id), ('attendance_number', '=', data.get('sn'))]):
- # attendance_iot.create({
- # 'attendance_number': data.get('sn'),
- # 'attendance_date': data.get('logs').get('recog_time'),
- # 'employee_id': employee_id.id,
- # })
- # print("---------------------------------------------测试成功---------------------------------------")
- # return {"Result": 0, "Msg": "添加成功"}
diff --git a/yuthon_hr_attendance/models/__init__.py b/yuthon_hr_attendance/models/__init__.py
index cd1f5fb31..2b4d058a7 100644
--- a/yuthon_hr_attendance/models/__init__.py
+++ b/yuthon_hr_attendance/models/__init__.py
@@ -1,38 +1,19 @@
# -*- coding: utf-8 -*-
-
-# 硬件相关
-# from . import attendance_iot
-# from . import attendance_iot_manager
-# from . import attendance_iot_datas
-# access_attendance_iot_manager,attendance_iot_manager,model_attendance_iot_manager,base.group_user,1,1,1,1
-# access_attendance_iot_manager_wizard,attendance_iot_manager_wizard,model_attendance_iot_manager_wizard,base.group_user,1,1,1,1
-# access_attendance_iot_datas,attendance_iot_datas,model_attendance_iot_datas,base.group_user,1,1,1,1
-# access_attendance_iot,attendance_iot,model_attendance_iot,base.group_user,1,1,1,1
-# from . import hr_employee
-
from . import attendance_scheme
from . import hr_attendance
from . import resource_calendar_leaves
from . import overtime_approval
from . import go_approval
-from . import duty_approval
from . import leave_approval
from . import remove_holiday_approval
from . import card_approval
from . import planning_template_inherit
from . import overtime_page
from . import inherit_planning_role
-from . import yuthon_duty_summary
-from . import yuthon_adjustments_approval
-from . import yuthon_duty_arrangement
-from . import yuthon_duty_setting
-from . import yuthon_abnormal_approval
-from . import yuthon_shift_approval
-from . import yuthon_abnormal_setting
-from . import yuthon_duty_plan
from . import inherit_planning_slot_template
from . import inherit_planning_slot
from . import yuthon_shift_planning
from . import yuthon_hv_planning
from . import yuthon_overall_planning
from . import yuthon_run_planning
+from . import duty_approval
diff --git a/yuthon_hr_attendance/models/yuthon_duty_plan.py b/yuthon_hr_attendance/models/yuthon_duty_plan.py
deleted file mode 100644
index 865fd4873..000000000
--- a/yuthon_hr_attendance/models/yuthon_duty_plan.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from odoo import api, fields, models, tools, _
-from datetime import datetime, time, timedelta,date
-from odoo.exceptions import UserError
-
-
-class YuthonDutyPlan(models.Model):
- _name = 'yuthon.duty.plan'
- _description = '值班计划'
-
- name = fields.Char(string='计划名称', required=True)
- start_index_time = fields.Date(string='生效时间', default=fields.Date.today())
- end_index_time = fields.Date(string='失效时间')
- is_enable = fields.Boolean(string="启用", default=True)
- plan_line_ids = fields.One2many('duty.plan.line', 'duty_plan_id', string='关联计划明细')
-
-
-class DutyPlanLine(models.Model):
- _name = 'duty.plan.line'
- _description = '值班计划明细行'
- _order = 'sequence asc'
-
- duty_plan_id = fields.Many2one('yuthon.duty.plan', string='关联计划名称')
- sequence = fields.Integer(string='序号')
- employee_id = fields.Many2one('hr.employee', string='员工',
- domain=lambda self: [('department_id.name', '=', '仓储组')])
\ No newline at end of file
diff --git a/yuthon_hr_attendance/security/ir.model.access.csv b/yuthon_hr_attendance/security/ir.model.access.csv
index 72c994dfc..ea9af534b 100644
--- a/yuthon_hr_attendance/security/ir.model.access.csv
+++ b/yuthon_hr_attendance/security/ir.model.access.csv
@@ -2,25 +2,12 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_resource_calendar_holiday,resource.calendar.holiday,model_resource_calendar_holiday,base.group_user,1,1,1,1
access_overtime_approval,overtime.approval,model_overtime_approval,base.group_user,1,1,1,1
access_go_approval,go.approval,model_go_approval,base.group_user,1,1,1,1
-access_duty_approval,duty.approval,model_duty_approval,base.group_user,1,1,1,1
access_remove_holiday_approval,remove.holiday.approval,model_remove_holiday_approval,base.group_user,1,1,1,1
access_card_approval,card.approval,model_card_approval,base.group_user,1,1,1,1
access_attendance_scheme,attendance_scheme,model_attendance_scheme,base.group_user,1,1,1,1
access_go_approvals_line,go.approvals.line,model_go_approvals_line,base.group_user,1,1,1,1
access_overtime_user_line,overtime.user.line,model_overtime_user_line,base.group_user,1,1,1,1
-access_duty_approval_line,duty.approval.line,model_duty_approval_line,base.group_user,1,1,1,1
access_overtime_page,overtime.page,model_overtime_page,base.group_user,1,1,1,1
-access_yuthon_duty_summary,yuthon.duty.summary,model_yuthon_duty_summary,base.group_user,1,1,1,1
-access_yuthon_adjustments_approval,yuthon.adjustments.approval,model_yuthon_adjustments_approval,base.group_user,1,1,1,1
-access_yuthon_duty_arrangement,yuthon.duty.arrangement,model_yuthon_duty_arrangement,base.group_user,1,1,1,1
-access_yuthon_duty_setting,yuthon.duty.setting,model_yuthon_duty_setting,base.group_user,1,1,1,1
-access_yuthon_duty_arrangement_wizard,yuthon.duty.arrangement.wizard,model_yuthon_duty_arrangement_wizard,base.group_user,1,1,1,1
-access_yuthon_duty_summary_wizard,yuthon.duty.summary.wizard,model_yuthon_duty_summary_wizard,base.group_user,1,1,1,1
-access_yuthon_abnormal_approval,yuthon.abnormal.approval,model_yuthon_abnormal_approval,base.group_user,1,1,1,1
-access_yuthon_shift_approval,yuthon.shift.approval,model_yuthon_shift_approval,base.group_user,1,1,1,
-access_yuthon_abnormal_setting,yuthon.abnormal.setting,model_yuthon_abnormal_setting,base.group_user,1,1,1,1
-access_yuthon_duty_plan,yuthon.duty.plan,model_yuthon_duty_plan,base.group_user,1,1,1,1
-access_duty_plan_line,duty.plan.line,model_duty_plan_line,base.group_user,1,1,1,1
access_yuthon_shift_planning,yuthon.shift.planning,model_yuthon_shift_planning,base.group_user,1,1,1,1
access_yuthon_shift_planning_a_line,yuthon.shift.planning.a.line,model_yuthon_shift_planning_a_line,base.group_user,1,1,1,1
access_yuthon_shift_planning_b_line,yuthon.shift.planning.b.line,model_yuthon_shift_planning_b_line,base.group_user,1,1,1,1
@@ -30,4 +17,5 @@ access_yuthon_engineering_hv_line,yuthon.engineering.hv.line,model_yuthon_engine
access_yuthon_yuthon_overall_planning,yuthon.overall.planning,model_yuthon_overall_planning,base.group_user,1,1,1,1
access_yuthon_engineering_overall_planning,engineering.overall.planning,model_yuthon_engineering_overall_planning,base.group_user,1,1,1,1
access_yuthon_run_planning,yuthon.run.planning,model_yuthon_run_planning,base.group_user,1,1,1,1
-access_yuthon_engineering_run_line,engineering.run.line,model_yuthon_engineering_run_line,base.group_user,1,1,1,1
\ No newline at end of file
+access_yuthon_engineering_run_line,engineering.run.line,model_yuthon_engineering_run_line,base.group_user,1,1,1,1
+access_duty_approval,duty.approval,model_duty_approval,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/yuthon_hr_attendance/views/all_attendance_menu.xml b/yuthon_hr_attendance/views/all_attendance_menu.xml
index afb0059f1..4ebdd5c8c 100644
--- a/yuthon_hr_attendance/views/all_attendance_menu.xml
+++ b/yuthon_hr_attendance/views/all_attendance_menu.xml
@@ -10,20 +10,10 @@
parent="menu_hr_attendance_approval_request" sequence="3" action="approval_request_overtime"/>
-
-
-
-
-
-
-
-
-
diff --git a/yuthon_hr_attendance/views/duty_approval.xml b/yuthon_hr_attendance/views/duty_approval.xml
index 73e2b7526..4eca2ffd0 100644
--- a/yuthon_hr_attendance/views/duty_approval.xml
+++ b/yuthon_hr_attendance/views/duty_approval.xml
@@ -1,4 +1,3 @@
-
diff --git a/yuthon_property/models/property_assess.py b/yuthon_property/models/property_assess.py
index 66dac3515..145c2a37c 100644
--- a/yuthon_property/models/property_assess.py
+++ b/yuthon_property/models/property_assess.py
@@ -2,19 +2,22 @@ from odoo import models, fields, api
class PropertyAssess(models.Model):
- _name = 'property.assess'
+ _name = 'property.assess'
+
+ name = fields.Char(string="Name")
- name = fields.Char(string="Name")
class PropertyAssessLine(models.Model):
- _name = 'property.assess.line'
+ _name = 'property.assess.line'
+
class PropertyProspectiveCcustomers(models.Model):
- _name = 'property.prospective.customers'
+ _name = 'property.prospective.customers'
class PropertyType(models.Model):
- _name = 'property.type'
+ _name = 'property.type'
+
class PropertyProspectiveCustomers(models.Model):
- _name = 'property.prospective.customers'
\ No newline at end of file
+ _name = 'property.prospective.customers'
diff --git a/yuthon_will_task/models/yuthon_will_task.py b/yuthon_will_task/models/yuthon_will_task.py
index 017393532..3b3e4557f 100644
--- a/yuthon_will_task/models/yuthon_will_task.py
+++ b/yuthon_will_task/models/yuthon_will_task.py
@@ -62,7 +62,7 @@ class YuthonWillTask(models.Model):
raise UserError("请同步{}的企业微信".format(employee_id.name))
url = "https://oa.thtzjt.com/mail/view?model={}&res_id={}".format(self._name, self.id)
self.sudo().env["wecom.apps"].sync_send_message_textcard(category='task', user_id=employee_id.wecom_userid,
- title="日程事项提醒", description="事项名称: " + self.task_content + '\t' + self.start_time,
+ title="日程事项提醒", description="事项名称: " + self.task_content + '\t' + str(self.start_time),
url=url, btntxt="详细信息")
for record in self:
partner_ids = record.employee_ids.user_id.partner_id.ids
diff --git a/yuthon_work_brand/__manifest__.py b/yuthon_work_brand/__manifest__.py
index b6d93b611..96ca82207 100644
--- a/yuthon_work_brand/__manifest__.py
+++ b/yuthon_work_brand/__manifest__.py
@@ -10,6 +10,7 @@
'payment', 'purchase', 'stock',
'resource', 'yuthon_hr_employee_approval',
'planning', 'ks_dashboard_ninja',
+ 'yuthon_duty_plan',
],
'data': [
'security/ir.model.access.csv',
diff --git a/yuthon_work_brand/views/attendance_menu.xml b/yuthon_work_brand/views/attendance_menu.xml
index a63183abb..49c3efe37 100644
--- a/yuthon_work_brand/views/attendance_menu.xml
+++ b/yuthon_work_brand/views/attendance_menu.xml
@@ -215,6 +215,7 @@
parent="hr_attendance_record_root_board"
action="yuthon_hr_attendance.action_attendance_yuthon_company_form3"
sequence="7"/>
+
+ action="yuthon_duty_plan.view_yuthon_adjustments_approval_action"/>
+ action="yuthon_duty_plan.view_yuthon_abnormal_approval_action"/>
+ action="yuthon_duty_plan.view_yuthon_shift_approval_action"/>
+ action="yuthon_duty_plan.action_yuthon_duty_setting"/>
+ action="yuthon_duty_plan.view_yuthon_abnormal_setting_action"/>
+
-
+
+
+