Merge branch 'dev' of gitee.com:jinan-pengyusen-data/gzth into dev

# Conflicts:
#	yuthon_hr_attendance/models/hr_attendance_detail_wechat.py
This commit is contained in:
sunjie
2025-08-13 21:07:08 +08:00
15 changed files with 276 additions and 348 deletions
+16 -6
View File
@@ -340,18 +340,28 @@ class SoongWorkflowMixin(models.AbstractModel):
btn for btn in next_node.button_ids
if btn.name == '转交'
]
# 判断按钮隐藏条件 如果没有可用的就跳过
has_visible_transfer_btn = True
# 判断按钮隐藏条件 如果没有可用的就跳过(说明流程最后一步)
if not transfer_buttons:
has_visible_transfer_btn = True
else:
has_visible_transfer_btn = any(
not btn.invisible_expression or
self.search(eval(btn.invisible_expression))
for btn in transfer_buttons
)
for btn in transfer_buttons:
if btn.is_review_invisible:
domain = eval(btn.invisible_expression)
expression_result = self.search(domain)
has_self_in_result = self.id in expression_result.ids
if has_self_in_result:
has_visible_transfer_btn = True
break
else:
has_visible_transfer_btn = False
else:
has_visible_transfer_btn = True
if not has_visible_transfer_btn:
skipped_node_names.append(next_node.name)
_logger.info(f"跳过节点: {next_node.name},无可见的转交按钮")
# 更新索引
index = state_list.index(matched_key)
if index >= len(node_list):
@@ -154,6 +154,8 @@ class SoongWorkflowCommentWizard(models.TransientModel):
for record in self:
if not record.trans_link_id:
continue
available_links = self.env['trans.link'].search([])
record.invalid_link_ids = available_links[1:]
record_id = self.env[record.res_model].browse(record.res_id) if record.res_model and record.res_id else None
for link in record.trans_link_id:
employee_user_role_ids = self._get_approvers_for_link(link, record_id)
@@ -121,7 +121,7 @@ class AppletAttendance(Controller):
'缺卡'] else f'<p style="color:green">{check_out_str}</p>'
state = "no"
message = "超出范围或wifi未连接,不允许打卡"
address_ids = request.env(user=SUPERUSER_ID)["applet.address"].search([])
address_ids = request.env(user=SUPERUSER_ID)["applet.address"].search([('company_id', '=', employee_id.company_id.id)])
if kw['att_latitude'] != kw['att_longitude']:
self_address = self.get_address_from_coords(kw['att_latitude'], kw['att_longitude'])
else:
@@ -301,7 +301,7 @@ class AppletAttendance(Controller):
'checkin_type': checkin_type,
'sch_checkin_time': sch_checkin_time,
})
now_time = fields.Datetime.to_datetime(fields.Date.today()) + timedelta(hours=8, days=1)
now_time = fields.Datetime.to_datetime(fields.Date.today()) - timedelta(hours=8, days=1)
start_time = now_time - timedelta(days=2)
request.env["hr.attendance.detail"].get_hr_attendance_time(employee_id, now_time, start_time)
return_data = {'code': '200', 'message': '打卡成功'}
@@ -111,6 +111,25 @@ class HrAttendance(models.Model):
else:
record.company_id = False
def write(self, vals):
if 'check_out' in vals:
for record in self:
target_date = record.current_data
start_of_day = datetime.combine(target_date, datetime.min.time())
end_of_day = start_of_day + timedelta(days=1)
start_str = fields.Datetime.to_string(start_of_day)
end_str = fields.Datetime.to_string(end_of_day)
detail_records = self.env['hr.attendance.detail'].search([
('employee_id', '=', record.employee_id.id),
('checkin_time', '>=', start_str),
('checkin_time', '<', end_str)
])
if detail_records:
max_checkin_time = max(detail_records.mapped('checkin_time'))
vals['check_out'] = max_checkin_time
return super(HrAttendance, self).write(vals)
# @api.model
# def web_read_group(self, domain, fields, groupby, limit=None, offset=0, orderby=False, lazy=True):
# result = super().web_read_group(domain, fields, groupby, limit, offset, orderby, lazy)
@@ -113,19 +113,13 @@ class HrAttendanceDetail(models.Model):
"""同步打卡记录到hr.attendance 更新上下班打卡时间 """
checkin_date = fields.Date.from_string(record.checkin_time)
attendance = self.env['hr.attendance'].search([
('employee_id', '=', record.employee_id.id),
('employee_id.name', '=', '叶华锋'),
('current_data', '=', checkin_date)
], limit=1)
if attendance:
if not attendance.check_in:
attendance.check_in = record.checkin_time
elif not attendance.check_out:
attendance.check_out = record.checkin_time
existing_checkout = fields.Datetime.from_string(attendance.check_out)
new_checkout = fields.Datetime.from_string(record.checkin_time)
# 只在新打卡时间更晚的情况下更新
if not existing_checkout or new_checkout > existing_checkout:
attendance.check_out = record.checkin_time
attendance.check_out = record.checkin_time
# 传参按一个人打卡一次传参
+2 -2
View File
@@ -10,7 +10,7 @@
'category': 'Human Resources/Attendances',
'version': '0.1',
'license': 'LGPL-3',
'depends': ['mail', 'hr', 'soong_workflow', 'room', 'yuthon_issue'],
'depends': ['mail', 'hr', 'soong_workflow', 'room', 'yuthon_issue', 'yuthon_trade'],
'data': [
'data/official_type_data.xml',
'security/ir.model.access.csv',
@@ -23,7 +23,7 @@
'views/yuthon_official_incoming_labor_views.xml',
'views/yuthon_official_party_views.xml',
'views/yuthon_official_incoming_party_views.xml',
'views/inherit_soong_workflow_insector_views.xml',
# 'views/inherit_soong_workflow_insector_views.xml',
'views/inherit_room_booking_views.xml',
'views/inherit_issue_library_views.xml',
'views/official_menus.xml',
+124 -94
View File
@@ -1,97 +1,127 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<!-- <menuitem-->
<!-- id="official_management_menu_root"-->
<!-- name="公文管理"-->
<!-- web_icon="yuthon_official,static/description/icon.png"-->
<!-- groups="module_yuthon_official_user"-->
<!-- sequence="91"-->
<!-- action="send_receive_messages_management_action"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_my_menu"-->
<!-- parent="official_management_menu_root"-->
<!-- name="我的公文"-->
<!-- sequence="2"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_normal_management_menu"-->
<!-- parent="official_management_menu_root"-->
<!-- name="行政公文管理"-->
<!-- sequence="5"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_party_management_menu"-->
<!-- parent="official_management_menu_root"-->
<!-- name="党总支公文管理"-->
<!-- sequence="7"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_labor_management_menu"-->
<!-- parent="official_management_menu_root"-->
<!-- name="工会公文管理"-->
<!-- sequence="9"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_normal"-->
<!-- parent="yuthon_official_normal_management_menu"-->
<!-- name="行政发文"-->
<!-- action="send_receive_messages_management_action"-->
<!-- sequence="8"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_incoming_normal"-->
<!-- parent="yuthon_official_normal_management_menu"-->
<!-- name="行政收文"-->
<!-- action="yuthon_official_incoming_normal_action"-->
<!-- sequence="10"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_incoming_party"-->
<!-- parent="yuthon_official_party_management_menu"-->
<!-- name="党总支收文"-->
<!-- action="yuthon_official_incoming_party_action"-->
<!-- sequence="10"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_party"-->
<!-- parent="yuthon_official_party_management_menu"-->
<!-- name="党总支发文"-->
<!-- action="yuthon_official_party_action"-->
<!-- sequence="20"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_incoming_labor"-->
<!-- parent="yuthon_official_labor_management_menu"-->
<!-- name="工会收文"-->
<!-- action="yuthon_official_incoming_labor_action"-->
<!-- sequence="5"/>-->
<!-- <menuitem-->
<!-- id="yuthon_official_labor"-->
<!-- parent="yuthon_official_labor_management_menu"-->
<!-- name="工会发文"-->
<!-- action="yuthon_official_labor_action"-->
<!-- sequence="10"/>-->
<!-- <menuitem id="yuthon_official_setting"-->
<!-- parent="official_management_menu_root"-->
<!-- name="配置"-->
<!-- sequence="9"/>-->
<!-- <menuitem-->
<!-- id="official_management_partner_menu"-->
<!-- parent="yuthon_official_setting"-->
<!-- name="发文单位管理"-->
<!-- action="official_partner_action"-->
<!-- sequence="1"/>-->
<!-- <menuitem-->
<!-- id="official_management_type_menu"-->
<!-- parent="yuthon_official_setting"-->
<!-- name="公文类型管理"-->
<!-- action="official_type_action"-->
<!-- sequence="2"/>-->
<menuitem id="administrative_offices_root_board"
name="行政办公"
web_icon="yuthon_work_brand,static/description/administrative_offices.png"
sequence="65"/>
<menuitem
id="yuthon_official_my_menu"
parent="administrative_offices_root_board"
name="我的公文"
sequence="2"/>
<menuitem
id="yuthon_official_normal_management_menu"
parent="administrative_offices_root_board"
name="行政公文管理"
sequence="5"/>
<menuitem
id="yuthon_official_party_management_menu"
parent="administrative_offices_root_board"
name="党总支公文管理"
sequence="7"/>
<menuitem
id="yuthon_official_labor_management_menu"
parent="administrative_offices_root_board"
name="工会公文管理"
sequence="9"/>
<menuitem
id="yuthon_official_normal"
parent="yuthon_official_normal_management_menu"
name="行政发文"
action="send_receive_messages_management_action"
sequence="8"/>
<menuitem
id="yuthon_official_incoming_normal"
parent="yuthon_official_normal_management_menu"
name="行政收文"
action="yuthon_official_incoming_normal_action"
sequence="10"/>
<menuitem
id="yuthon_official_incoming_party"
parent="yuthon_official_party_management_menu"
name="党总支收文"
action="yuthon_official_incoming_party_action"
sequence="10"/>
<menuitem
id="yuthon_official_party"
parent="yuthon_official_party_management_menu"
name="党总支发文"
action="yuthon_official_party_action"
sequence="20"/>
<menuitem
id="yuthon_official_incoming_labor"
parent="yuthon_official_labor_management_menu"
name="工会收文"
action="yuthon_official_incoming_labor_action"
sequence="5"/>
<menuitem
id="yuthon_official_labor"
parent="yuthon_official_labor_management_menu"
name="工会发文"
action="yuthon_official_labor_action"
sequence="10"/>
<menuitem id="trade_project_approval_board"
name="立项"
parent="administrative_offices_root_board"
action="yuthon_trade.trade_project_approval_action"
sequence="50"/>
<menuitem id="yuthon_reward_approval_board"
name="奖励审批表"
parent="administrative_offices_root_board"
action="yuthon_trade.view_trade_reward_approval_action"
sequence="60"/>
<menuitem id="yuthon_business_approval_board"
name="业务审批"
parent="administrative_offices_root_board"
action="yuthon_trade.view_business_approval_action"
sequence="70"/>
<menuitem id="yuthon_seals_approval_board"
name="用章审批"
parent="administrative_offices_root_board"
action="yuthon_trade.view_yuthon_seals_approval_action"
sequence="80"/>
<menuitem id="parking_fee_approval_board"
name="停车票发放"
parent="administrative_offices_root_board"
action="yuthon_trade.view_parking_fee_approval_action"
sequence="85"/>
<menuitem id="yuthon_official_setting"
parent="administrative_offices_root_board"
name="配置"
sequence="99"/>
<menuitem id="official_management_partner_menu"
parent="yuthon_official_setting"
name="发文单位"
action="official_partner_action"
sequence="20"/>
<menuitem id="official_management_type_menu"
parent="yuthon_official_setting"
name="公文类型"
action="official_type_action"
sequence="30"/>
<menuitem id="seals_type_setting_board"
name="用章类型"
parent="yuthon_official_setting"
action="yuthon_trade.view_seals_type_setting_action"
sequence="50"/>
<menuitem id="yuthon_seal_scope_board"
name="用章范围"
parent="yuthon_official_setting"
action="yuthon_trade.view_seals_scope_setting_action"
sequence="60"/>
<menuitem id="yuthon_sending_unit_board"
name="发送单位"
parent="yuthon_official_setting"
action="yuthon_trade.view_sending_unit_setting_action"
sequence="70"/>
<menuitem id="project_funding_setting_board"
name="资金来源"
parent="yuthon_official_setting"
action="yuthon_trade.view_project_funding_setting_action"
sequence="90"/>
<menuitem id="project_classify_setting_board"
name="项目分类"
parent="yuthon_official_setting"
action="yuthon_trade.view_project_classify_setting_action"
sequence="100"/>
</odoo>
@@ -33,6 +33,8 @@ class PropertyEvaluationPlan(models.Model):
record.lease_form = 'sublease'
else:
record.lease_form = 'whole'
else:
record.lease_form = False
def put_assessment_approval(self):
@@ -6,7 +6,7 @@ from odoo import models, fields, api, exceptions, _
class PropertyLeaseAlter(models.Model):
_name = 'property.lease.alter'
_description = '续租审批审批'
_description = '延租审批'
_inherit = ['mail.thread.main.attachment', 'mail.activity.mixin', 'soong.workflow.mixin']
_rec_name = 'name'
@@ -42,17 +42,15 @@
</h1>
</div>
<group string="审批事项">
<field name="users_id"/>
<field name="department_id" invisible="1"/>
<field name="sincerity_gold"/>
<field name="work_end" invisible="1"/>
<field name="name" required="1"/>
<field name="reason"/>
<field name="issues_result" invisible="is_issues == False"/>
<field name="documents_ids" widget="preview_many2many"/>
</group>
<group string="个人信息">
<field name="users_id"/>
<field name="department_id" widget="ztree_select"/>
<field name="sincerity_gold"/>
</group>
<notebook>
<page string="承租方列表">
<field name="eligibility_ids">
@@ -43,15 +43,13 @@
</h1>
</div>
<group string="审批事项">
<field name="name" required="1"/>
<field name="users_id"/>
<field name="department_id" invisible="1"/>
<field name="work_end" invisible="1"/>
<field name="name" required="1"/>
<field name="reason"/>
<field name="issues_result" invisible="is_issues == False"/>
<field name="documents_ids" widget="preview_many2many"/>
</group>
<group string="个人信息">
<field name="users_id"/>
<field name="department_id" widget="ztree_select"/>
</group>
<notebook>
<page string="意向客户信息">
@@ -26,6 +26,7 @@
<group>
<group>
<field name="code"/>
<field name="work_end"/>
<field name="property_documents_ids" widget="many2many_tags">
<tree>
<field name="name"/>
@@ -316,6 +316,20 @@
</field>
</page>
</notebook>
<group col="4">
<group>
<field name="tax" readonly="1" force_save="1"/>
</group>
<group>
<field name="not_tax_amount" readonly="1" force_save="1"/>
</group>
<group>
<field name="first_year_rent" force_save="1"/>
</group>
<group>
<field name="total_contract_receivables" style="font-size: 1.2rem; font-weight: bold;"/>
</group>
</group>
<notebook>
<page string="附件">
<group col="2">
@@ -335,20 +349,6 @@
</group>
</page>
</notebook>
<group col="4">
<group>
<field name="tax" readonly="1" force_save="1"/>
</group>
<group>
<field name="not_tax_amount" readonly="1" force_save="1"/>
</group>
<group>
<field name="first_year_rent" force_save="1"/>
</group>
<group>
<field name="total_contract_receivables" style="font-size: 1.2rem; font-weight: bold;"/>
</group>
</group>
</sheet>
</form>
</field>
@@ -722,6 +722,21 @@
</field>
</page>
</notebook>
<group col="4">
<group>
<field name="tax" readonly="1" force_save="1"/>
</group>
<group>
<field name="not_tax_amount" readonly="1" force_save="1"/>
</group>
<group>
<field name="first_year_rent" force_save="1" readonly="1"/>
</group>
<group>
<field name="total_contract_receivables" style="font-size: 1.2rem; font-weight: bold;"
readonly="1"/>
</group>
</group>
<notebook>
<page string="附件">
<group col="2">
@@ -748,21 +763,6 @@
<field name="contract_date"/>
</group>
</group>
<group col="4">
<group>
<field name="tax" readonly="1" force_save="1"/>
</group>
<group>
<field name="not_tax_amount" readonly="1" force_save="1"/>
</group>
<group>
<field name="first_year_rent" force_save="1" readonly="1"/>
</group>
<group>
<field name="total_contract_receivables" style="font-size: 1.2rem; font-weight: bold;"
readonly="1"/>
</group>
</group>
</sheet>
</form>
</field>
@@ -24,132 +24,6 @@
action="yuthon_trade.view_yuthon_stack_position_action"
sequence="20"/>
<menuitem id="administrative_offices_root_board"
name="行政办公"
web_icon="yuthon_work_brand,static/description/administrative_offices.png"
sequence="65"/>
<menuitem
id="yuthon_official_my_menu"
parent="administrative_offices_root_board"
name="我的公文"
sequence="2"/>
<menuitem
id="yuthon_official_normal_management_menu"
parent="administrative_offices_root_board"
name="行政公文管理"
sequence="5"/>
<menuitem
id="yuthon_official_party_management_menu"
parent="administrative_offices_root_board"
name="党总支公文管理"
sequence="7"/>
<menuitem
id="yuthon_official_labor_management_menu"
parent="administrative_offices_root_board"
name="工会公文管理"
sequence="9"/>
<menuitem
id="yuthon_official_normal"
parent="yuthon_official_normal_management_menu"
name="行政发文"
action="yuthon_official.send_receive_messages_management_action"
sequence="8"/>
<menuitem
id="yuthon_official_incoming_normal"
parent="yuthon_official_normal_management_menu"
name="行政收文"
action="yuthon_official.yuthon_official_incoming_normal_action"
sequence="10"/>
<menuitem
id="yuthon_official_incoming_party"
parent="yuthon_official_party_management_menu"
name="党总支收文"
action="yuthon_official.yuthon_official_incoming_party_action"
sequence="10"/>
<menuitem
id="yuthon_official_party"
parent="yuthon_official_party_management_menu"
name="党总支发文"
action="yuthon_official.yuthon_official_party_action"
sequence="20"/>
<menuitem
id="yuthon_official_incoming_labor"
parent="yuthon_official_labor_management_menu"
name="工会收文"
action="yuthon_official.yuthon_official_incoming_labor_action"
sequence="5"/>
<menuitem
id="yuthon_official_labor"
parent="yuthon_official_labor_management_menu"
name="工会发文"
action="yuthon_official.yuthon_official_labor_action"
sequence="10"/>
<menuitem id="trade_project_approval_board"
name="立项"
parent="administrative_offices_root_board"
action="yuthon_trade.trade_project_approval_action"
sequence="50"/>
<menuitem id="yuthon_reward_approval_board"
name="奖励审批表"
parent="administrative_offices_root_board"
action="yuthon_trade.view_trade_reward_approval_action"
sequence="60"/>
<menuitem id="yuthon_business_approval_board"
name="业务审批"
parent="administrative_offices_root_board"
action="yuthon_trade.view_business_approval_action"
sequence="70"/>
<menuitem id="yuthon_seals_approval_board"
name="用章审批"
parent="administrative_offices_root_board"
action="yuthon_trade.view_yuthon_seals_approval_action"
sequence="80"/>
<menuitem id="parking_fee_approval_board"
name="停车票发放"
parent="administrative_offices_root_board"
action="yuthon_trade.view_parking_fee_approval_action"
sequence="85"/>
<menuitem id="yuthon_official_setting"
parent="administrative_offices_root_board"
name="配置"
sequence="99"/>
<menuitem id="official_management_partner_menu"
parent="yuthon_official_setting"
name="发文单位"
action="yuthon_official.official_partner_action"
sequence="20"/>
<menuitem id="official_management_type_menu"
parent="yuthon_official_setting"
name="公文类型"
action="yuthon_official.official_type_action"
sequence="30"/>
<menuitem id="seals_type_setting_board"
name="用章类型"
parent="yuthon_official_setting"
action="yuthon_trade.view_seals_type_setting_action"
sequence="50"/>
<menuitem id="yuthon_seal_scope_board"
name="用章范围"
parent="yuthon_official_setting"
action="yuthon_trade.view_seals_scope_setting_action"
sequence="60"/>
<menuitem id="yuthon_sending_unit_board"
name="发送单位"
parent="yuthon_official_setting"
action="yuthon_trade.view_sending_unit_setting_action"
sequence="70"/>
<menuitem id="project_funding_setting_board"
name="资金来源"
parent="yuthon_official_setting"
action="yuthon_trade.view_project_funding_setting_action"
sequence="90"/>
<menuitem id="project_classify_setting_board"
name="项目分类"
parent="yuthon_official_setting"
action="yuthon_trade.view_project_classify_setting_action"
sequence="100"/>
<menuitem id="information_root_board"
name="信息化"
web_icon="yuthon_work_brand,static/description/information.png"
+70 -70
View File
@@ -616,36 +616,11 @@
<menuitem id="holiday_manage_menu_root_board"
name="我的"
web_icon="yuthon_work_brand,static/description/holiday.png"
sequence="29"/>
<menuitem id="menu_hr_attendance_my_record_board"
name="我的考勤"
parent="holiday_manage_menu_root_board"
action="yuthon_hr_attendance.hr_attendance_action1"
sequence="5"/>
<menuitem id="menu_hr_attendance_my_abnormal_board"
name="我的异常"
parent="holiday_manage_menu_root_board"
action="yuthon_hr_attendance.hr_attendance_my_abnormal"
sequence="6"/>
<menuitem id="yuthon_vacation_reports_my"
name="我的考勤确认"
parent="holiday_manage_menu_root_board"
action="yuthon_hr_attendance.action_server_open_my_vacation_form1"
sequence="7"/>
<!-- <menuitem id="menu_hr_attendance_month_my_detail"-->
<!-- name="我的考勤确认"-->
<!-- parent="holiday_manage_menu_root_board"-->
<!-- sequence="10"-->
<!-- action="yuthon_hr_attendance.hr_attendance_month_my_detail_action"/>-->
<menuitem id="salary_view_my_payslip_board"
name="我的薪资"
parent="holiday_manage_menu_root_board"
sequence="20"
action="yuthon_salary.action_view_my_payslip"/>
<menuitem id="menu_workflow_approval_request_my"
sequence="3"/>
<menuitem id="menu_workflow_approval_request_my"
name="我的流程"
parent="holiday_manage_menu_root_board"
sequence="25"/>
sequence="1"/>
<menuitem id="menu_workflow_approval_request_new"
name="新建流程"
parent="menu_workflow_approval_request_my"
@@ -671,50 +646,75 @@
parent="menu_workflow_approval_request_my"
action="soong_workflow.soong_workflow_record_end_action"
sequence="5"/>
<menuitem id="menu_hr_attendance_approval_request_board"
name="流程"
<menuitem id="menu_hr_attendance_my_record_board"
name="我的考勤"
parent="holiday_manage_menu_root_board"
sequence="50"/>
<menuitem id="menu_hr_leave_batch_action_all_board"
name="休假申请"
parent="menu_hr_attendance_approval_request_board"
action="yuthon_holiday.hr_leave_batch_action_all"
sequence="1"/>
<menuitem id="menu_hr_attendance_overtime_board"
name="加班申请"
parent="menu_hr_attendance_approval_request_board"
sequence="2"
action="yuthon_hr_attendance.approval_request_overtime"/>
<menuitem id="menu_hr_attendance_going_board"
name="外出申请"
parent="menu_hr_attendance_approval_request_board"
sequence="3"
action="yuthon_hr_attendance.approval_request_going"/>
<menuitem id="menu_hr_attendance_duty_board"
name="值班申请"
parent="menu_hr_attendance_approval_request_board"
sequence="5"
action="yuthon_hr_attendance.approval_request_duty"/>
<menuitem id="menu_hr_attendance_leave_board"
name="调休申请"
parent="menu_hr_attendance_approval_request_board"
sequence="7"
action="yuthon_hr_attendance.approval_request_leave"/>
<menuitem id="holiday_yuthon_fixes_approval_board"
name="假期余额修正"
parent="menu_hr_attendance_approval_request_board"
action="yuthon_holiday.view_yuthon_fixes_approval_action"
action="yuthon_hr_attendance.hr_attendance_action1"
sequence="5"/>
<menuitem id="menu_hr_attendance_my_abnormal_board"
name="我的异常"
parent="holiday_manage_menu_root_board"
action="yuthon_hr_attendance.hr_attendance_my_abnormal"
sequence="6"/>
<menuitem id="yuthon_vacation_reports_my"
name="我的考勤确认"
parent="holiday_manage_menu_root_board"
action="yuthon_hr_attendance.action_server_open_my_vacation_form1"
sequence="7"/>
<menuitem id="menu_hr_attendance_remove_holiday_board"
name="销假申请"
parent="menu_hr_attendance_approval_request_board"
sequence="11"
action="yuthon_hr_attendance.approval_request_remove_holiday"/>
<menuitem id="menu_hr_attendance_remove_card_board"
name="补卡申请"
parent="menu_hr_attendance_approval_request_board"
sequence="13"
action="yuthon_hr_attendance.approval_request_card"/>
<!-- <menuitem id="menu_hr_attendance_month_my_detail"-->
<!-- name="我的考勤确认"-->
<!-- parent="holiday_manage_menu_root_board"-->
<!-- sequence="10"-->
<!-- action="yuthon_hr_attendance.hr_attendance_month_my_detail_action"/>-->
<menuitem id="salary_view_my_payslip_board"
name="我的薪资"
parent="holiday_manage_menu_root_board"
sequence="20"
action="yuthon_salary.action_view_my_payslip"/>
<!-- <menuitem id="menu_hr_attendance_approval_request_board"-->
<!-- name="流程"-->
<!-- parent="holiday_manage_menu_root_board"-->
<!-- sequence="50"/>-->
<!-- <menuitem id="menu_hr_leave_batch_action_all_board"-->
<!-- name="休假申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- action="yuthon_holiday.hr_leave_batch_action_all"-->
<!-- sequence="1"/>-->
<!-- <menuitem id="menu_hr_attendance_overtime_board"-->
<!-- name="加班申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="2"-->
<!-- action="yuthon_hr_attendance.approval_request_overtime"/>-->
<!-- <menuitem id="menu_hr_attendance_going_board"-->
<!-- name="外出申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="3"-->
<!-- action="yuthon_hr_attendance.approval_request_going"/>-->
<!-- <menuitem id="menu_hr_attendance_duty_board"-->
<!-- name="值班申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="5"-->
<!-- action="yuthon_hr_attendance.approval_request_duty"/>-->
<!-- <menuitem id="menu_hr_attendance_leave_board"-->
<!-- name="调休申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="7"-->
<!-- action="yuthon_hr_attendance.approval_request_leave"/>-->
<!-- <menuitem id="holiday_yuthon_fixes_approval_board"-->
<!-- name="假期余额修正"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- action="yuthon_holiday.view_yuthon_fixes_approval_action"-->
<!-- sequence="7"/>-->
<!-- <menuitem id="menu_hr_attendance_remove_holiday_board"-->
<!-- name="销假申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="11"-->
<!-- action="yuthon_hr_attendance.approval_request_remove_holiday"/>-->
<!-- <menuitem id="menu_hr_attendance_remove_card_board"-->
<!-- name="补卡申请"-->
<!-- parent="menu_hr_attendance_approval_request_board"-->
<!-- sequence="13"-->
<!-- action="yuthon_hr_attendance.approval_request_card"/>-->
<!-- 培训管理 -->