Merge pull request !925 from 李鹏宇/dev
This commit is contained in:
李鹏宇
2024-12-26 02:54:29 +00:00
committed by Gitee
15 changed files with 145 additions and 81 deletions
@@ -145,6 +145,8 @@ patch(PlanningGanttRenderer.prototype, {
display_name: {},
start_time: {},
end_time: {},
end_time2: {},
day2: {},
},
},
}
@@ -181,8 +183,10 @@ patch(PlanningGanttRenderer.prototype, {
const groupSlotTemplate = slotTemplateData[group.id];
group.start_time = groupSlotTemplate?.start_time || 0;
group.end_time = groupSlotTemplate?.end_time || 0;
group.end_time2 = groupSlotTemplate?.end_time2 || 0;
group.day2 = groupSlotTemplate?.day2 || '';
// 拼接显示信息
group.ganttLegend = `${groupSlotTemplate.display_name} : ${floatToTime(group.start_time)} - ${floatToTime(group.end_time)}`;
group.ganttLegend = `${groupSlotTemplate.display_name} : ${floatToTime(group.start_time)} - ${floatToTime(group.day2)} ${floatToTime(group.end_time2)}`;
});
},
-1
View File
@@ -16,7 +16,6 @@
'soong_workflow', 'yuthon_issue', 'planning', 'calendar', 'web_gantt', 'yuthon_wechat'],
'data': [
'security/ir.model.access.csv',
'security/attendance_security_group.xml',
'data/hr_attendance_time.xml',
'data/attendance_code_data.xml',
'data/attendance_role_groups_data.xml',
@@ -30,6 +30,8 @@ class PlanningSlotTemplate(models.Model):
_inherit = 'planning.slot.template'
department_id = fields.Many2one('hr.department', string="部门")
day2 = fields.Char(string="次日")
end_time2 = fields.Float(string="显示时间")
class InheritPlanningSlot(models.Model):
@@ -34,7 +34,6 @@ class PlanningTemplate(models.Model):
end_time = time(hour=int(rec.end_time), minute=round(math.modf(rec.end_time)[0] / (1 / 60.0)))
# 计算结束日期
end_datetime = start_datetime + timedelta(hours=rec.duration)
# 检查是否跨日
is_next_day = end_datetime.date() > start_datetime.date()
if is_next_day:
@@ -51,11 +50,18 @@ class PlanningTemplate(models.Model):
duration_days = math.ceil((end_datetime - start_datetime).total_seconds() / (3600 * 24))
return duration_days, timedelta(hours=end_datetime.hour, minutes=end_datetime.minute).total_seconds() / 3600
@api.depends("planning_name")
def _compute_display_name(self):
super()._compute_display_name()
for record in self:
record.display_name = f"{record.role_id.name}-{record.planning_name}"
# @api.depends("planning_name")
# def _compute_display_name(self):
# super()._compute_display_name()
# for record in self:
# if record.planning_name and record.role_id:
# record.display_name = f"{record.role_id.name}-{record.planning_name}"
# elif record.planning_name:
# record.display_name = record.planning_name
# elif record.role_id:
# record.display_name = record.role_id.name
# else:
# record.display_name = "Unknown"
class Planning(models.Model):
@@ -29,6 +29,13 @@ class YuthonDutyPlan(models.Model):
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '综合班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
else:
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
@@ -36,6 +43,13 @@ class YuthonDutyPlan(models.Model):
next_next_month = (next_month % 12) + 1
next_next_year = next_year + (1 if next_next_month == 1 else 0)
last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('role_id.name', '=', '联安粮库'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
role_a = self.env['planning.role'].search([('name', '=', '联安粮库')], limit=1)
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '白班'), ('role_id', '=', role_a.id)])
@@ -29,6 +29,13 @@ class YuthonRunPlanning(models.Model):
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '运行班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
else:
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
@@ -36,6 +43,13 @@ class YuthonRunPlanning(models.Model):
next_next_month = (next_month % 12) + 1
next_next_year = next_year + (1 if next_next_month == 1 else 0)
last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '运行班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
start_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).start_time)
@@ -68,7 +82,7 @@ class YuthonRunPlanning(models.Model):
slot_id[i].write({
'template_id': self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
'role_id': role_a.id,
'allocated_hours': 8,
})
@@ -130,6 +144,13 @@ class YuthonRunPlanning(models.Model):
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '高压班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
else:
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
@@ -137,7 +158,13 @@ class YuthonRunPlanning(models.Model):
next_next_month = (next_month % 12) + 1
next_next_year = next_year + (1 if next_next_month == 1 else 0)
last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '高压班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
start_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).start_time)
end_time = int(self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '白班')]).end_time)
@@ -164,13 +191,13 @@ class YuthonRunPlanning(models.Model):
while current_date <= last_day_of_month:
for employee in range(0, len(self.high_run_ids)):
i = i + 1
slot_id = all_slot.search([('resource_id', '=', self.engineering_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
slot_id = all_slot.search([('resource_id', '=', self.high_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
if i < 31:
slot_id[i].write({
'template_id': self.env['planning.slot.template'].search(
[('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
'role_id': role_a.id,
'allocated_hours': 8,
})
@@ -205,6 +232,13 @@ class YuthonRunPlanning(models.Model):
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '综合班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
else:
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
@@ -212,6 +246,13 @@ class YuthonRunPlanning(models.Model):
next_next_month = (next_month % 12) + 1
next_next_year = next_year + (1 if next_next_month == 1 else 0)
last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1)
existing_slots = self.env['planning.slot'].search([
('department_id.name', '=', '综合班'),
('start_datetime', '>=', first_day_of_month),
('start_datetime', '<=', last_day_of_month),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1)
start_time = int(self.env['planning.slot.template'].search(
@@ -247,13 +288,13 @@ class YuthonRunPlanning(models.Model):
while current_date <= last_day_of_month:
for employee in range(0, len(self.all_run_ids)):
i = i + 1
slot_id = all_slot.search([('resource_id', '=', self.engineering_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
slot_id = all_slot.search([('resource_id', '=', self.all_run_ids[employee].employee_id.resource_id.id), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime')
if i < 31:
slot_id[i].write({
'template_id': self.env['planning.slot.template'].search(
[('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id,
'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time2) + timedelta(hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(days=1, hours=16) - timedelta(days=1),
'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time2) + timedelta(hours=16) - timedelta(days=1),
'role_id': role_a.id,
'allocated_hours': 8,
})
@@ -1,6 +1,6 @@
from odoo import api, fields, models, tools, _
from datetime import datetime, time, timedelta
from odoo.exceptions import UserError, ValidationError
class YuthonShiftPlanning(models.Model):
_name = 'yuthon.shift.planning'
@@ -28,6 +28,13 @@ class YuthonShiftPlanning(models.Model):
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0) # 如果是12月,年份加1
end_date = datetime(next_year, next_month, 1)
existing_slots = self.env['planning.slot'].search([
('role_id.name', '=', '保安部'),
('start_datetime', '>=', start_date),
('start_datetime', '<=', end_date),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
else:
next_month = (selected_month % 12) + 1
next_year = year + (1 if next_month == 1 else 0)
@@ -35,9 +42,15 @@ class YuthonShiftPlanning(models.Model):
next_next_month = (next_month % 12) + 1
next_next_year = next_year + (1 if next_next_month == 1 else 0)
end_date = datetime(next_next_year, next_next_month, 1)
existing_slots = self.env['planning.slot'].search([
('role_id.name', '=', '保安部'),
('start_datetime', '>=', start_date),
('start_datetime', '<=', end_date),
])
if len(existing_slots) > 0:
raise UserError(f"该月已经有排程,请选择其他时间。")
role_a = self.env['planning.role'].search([('name', '=', '保安部')], limit=1)
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '白班'), ('role_id', '=', role_a.id)])
role_template_a = self.env['planning.slot.template'].search([('planning_name', '=', '早班'), ('role_id', '=', role_a.id)])
role_template_b = self.env['planning.slot.template'].search([('planning_name', '=', '中班'), ('role_id', '=', role_a.id)])
role_template_c = self.env['planning.slot.template'].search([('planning_name', '=', '夜班'), ('role_id', '=', role_a.id)])
role = [role_template_a, role_template_b, role_template_c]
@@ -116,8 +129,12 @@ class YuthonShiftPlanning(models.Model):
if resource_id in ever_holidays and current_weekday in ever_holidays[resource_id]:
pass
else:
self.create_planning_slot(record, role_a, role_item, current_date) # 确保这个方法存在
self.create_planning_slot(record, role_a, role_item, current_date)
current_date += timedelta(days=1)
if current_date >= end_date:
break
if current_date >= end_date:
break
# 为白班员工创建排班
create_shifts_for_group(self.planning_ever_white_ids, role[0])
# 为中班员工创建排班
@@ -1,34 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<data>
<record id="module_category_attendance" model="ir.module.category">
<field name="name">行政考勤组</field>
</record>
<record id="group_hr_attendance_user" model="res.groups">
<field name="name">行政考勤用户</field>
<field name="category_id" ref="module_hr_attendance"/>
</record>
<record id="group_hr_attendance_leader_leader1" model="res.groups">
<field name="name">行政考勤天河投资领导</field>
<field name="category_id" ref="module_hr_attendance"/>
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
</record>
<record id="group_hr_attendance_leader_leader2" model="res.groups">
<field name="name">行政考勤天河物管领导</field>
<field name="category_id" ref="module_hr_attendance"/>
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
</record>
<record id="group_hr_attendance_leader_leader3" model="res.groups">
<field name="name">行政考勤天河粮储领导</field>
<field name="category_id" ref="module_hr_attendance"/>
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user'))]"/>
</record>
<record id="group_hr_attendance_leader_manager" model="res.groups">
<field name="name">行政考勤管理员</field>
<field name="category_id" ref="module_hr_attendance"/>
<field name="implied_ids" eval="[(4, ref('group_hr_attendance_user')), (4, ref('group_hr_attendance_leader_leader1')),
(4, ref('group_hr_attendance_leader_leader2')), (4, ref('group_hr_attendance_leader_leader3'))]"/>
<field name="users" eval="[(4, ref('base.user_admin'))]"/>
</record>
</data>
</odoo>
@@ -8,11 +8,10 @@
<select id="selectTemplate" class="form-select" t-on-change="onTemplateChange">
<t t-foreach="props.slotTemplate.templateList" t-as="template" t-key="template.id">
<option t-att-value="template.id">
<t t-esc="template.name"/>
<t t-esc="template.planing_name"/>
</option>
</t>
</select>
</div>
</div>
<t t-if="props.button or props.delButton">
@@ -8,7 +8,9 @@
<field name="planning_name" string="名称"/>
</xpath>
<xpath expr="//field[@name='role_id']" position="after">
<field name="department_id" string="部门"/>
<field name="department_id"/>
<field name="end_time2"/>
<field name="day2"/>
<field name="color" widget="color_picker" optional="show"/>
</xpath>
</field>
@@ -19,7 +21,9 @@
<field name="inherit_id" ref="planning.planning_slot_template_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='role_id']" position="after">
<field name="department_id" string="部门"/>
<field name="department_id"/>
<field name="end_time2"/>
<field name="day2"/>
<field name="color" widget="color_picker" optional="show"/>
</xpath>
<xpath expr="//label[@for='start_time']" position="before">
@@ -109,6 +109,6 @@
<field name="res_model">planning.slot</field>
<field name="view_mode">gantt,calendar,tree,form,kanban,pivot,graph</field>
<field name="context">{'planning_expand_resource': 1, 'planning_expand_role': 1}</field>
<field name="domain">[('department_id.name','=', '客服中心')]</field>
<field name="domain">[('department_id.name','=', '客户部')]</field>
</record>
</odoo>
+29 -9
View File
@@ -47,17 +47,14 @@ class YuthonProperty(models.Model):
live_room = fields.Many2one('yuthon.live.room', string="居住用房")
is_electricity_meter = fields.Boolean(string="电表")
electricity_id = fields.Many2one('yuthon.electricity.setting', string="电费标准配置")
admin_id = fields.Many2one('hr.employee', string="管理员")
yuthon_company = fields.Selection([('thtz', '天河投资'), ('thwg', '天河物管'),
('thlc', '天河粮储'), ('ttcj', '天投城建'), ('fz', '房总')], string="所属公司")
tenure_type = fields.Selection([('dai', '代管'), ('zi', '自营')], string="权属类型")
admin_id = fields.Many2one('res.users', string="管理员")
purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型")
is_confirm_authorization = fields.Boolean(string="确权")
owner_id = fields.Many2one('yuthon.owner.message', string="权属人")
property_card = fields.Html(string="产权证")
life_timer = fields.Datetime(string="使用时间")
property_use_time = fields.Selection([('a', '70年'), ('b', '40年')], string="使用年限")
property_precinct = fields.Many2one('yuthon.precinct.message', string="所属片区")
precinct_id = fields.Many2one('yuthon.precinct.message',string="所属片区")
asset_type_id = fields.Many2one('yuthon.resource.type', string="出租类型")
is_hvac = fields.Boolean(string="使用中央空调")
is_handle_land = fields.Boolean(string="办理土地有偿使用手续")
@@ -90,6 +87,29 @@ class YuthonProperty(models.Model):
property_merge_approval_id = fields.Many2one('yuthon.property', string='关联物业信息')
manage_fee_line_ids = fields.One2many('manage.information.fee.line', 'yuthon_property_id', string='关联管理费明细行')
@api.onchange('title_information_ids')
def _onchange_title_information_ids(self):
for rec in self:
title_info_records = rec.title_information_ids
if title_info_records:
latest_record_id = sorted(title_info_records, key=lambda x: x.start_time, reverse=True)[0]
rec.write({
'equity_area':latest_record_id.equity_area,
'management_area': latest_record_id.management_area,
'building_area':latest_record_id.building_area
})
@api.onchange('manage_information_ids')
def _onchange_manage_information_ids(self):
for rec in self:
manage_information_ids = rec.manage_information_ids
if manage_information_ids:
latest_record_id = sorted(manage_information_ids, key=lambda x: x.start_time, reverse=True)[0]
rec.write({
'precinct_id': latest_record_id.precinct_id.id,
'admin_id': latest_record_id.admin_id.id
})
@api.onchange('building_area')
def _onchange_building_area(self):
for rec in self:
@@ -301,7 +321,7 @@ class TitleInformationLine(models.Model):
rent_area = fields.Float(string="可租面积")
owner = fields.Many2one('yuthon.owner.message',string="权属人")
title_certificate = fields.Char(string="产权证号")
start_time = fields.Date(string="生效日期")
start_time = fields.Date(string="生效日期", default=fields.Date.today)
end_date = fields.Date(string="失效日期")
@@ -311,10 +331,10 @@ class ManageInformationLine(models.Model):
yuthon_property_id = fields.Many2one('yuthon.property', string="关联物业信息")
purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型")
precinct = fields.Char(string="片区")
admin_id = fields.Many2one('hr.employee', string="管理员")
precinct_id = fields.Many2one('yuthon.precinct.message',string="所属片区")
admin_id = fields.Many2one('res.users', string="管理员")
yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtj', '天城投建')], string="所属公司")
start_time = fields.Date(string="生效日期")
start_time = fields.Date(string="生效日期", default=fields.Date.today)
end_date = fields.Date(string="失效日期")
@@ -86,8 +86,6 @@
<field name="building_area"/>
</group>
<group string="管理信息">
<field name="yuthon_company"/>
<field name="tenure_type"/>
<field name="property_precinct"/>
<field name="admin_id"/>
</group>
@@ -113,8 +111,10 @@
<tree editable="bottom">
<field name="yuthon_property_id" column_invisible="1"/>
<field name="purpose_id"/>
<field name="precinct"/>
<field name="precinct_id"/>
<field name="admin_id"/>
<field name="start_time"/>
<field name="end_date"/>
</tree>
</field>
</page>
@@ -209,15 +209,14 @@
<search>
<field name="name" string="资产名称"/>
<field name="owner_id" string="负责人"/>
<field name="property_precinct" string="片区"/>
<field name="precinct_id" string="片区"/>
<group expand="0">
<filter name="group_statu" string="物业状态" context="{'group_by': 'state'}"/>
<filter name="group_purpose" string="资产用途" context="{'group_by': 'purpose_id'}"/>
</group>
<searchpanel>
<field name="yuthon_company" string="所属公司" enable_counters="1"/>
<field name="tenure_type" string="权属类型" enable_counters="1"/>
<field name="property_precinct" string="所属片区" enable_counters="1"/>
<field name="precinct_id" string="所属片区" enable_counters="1"/>
<field name="title_address" string="产权地址" enable_counters="1"/>
</searchpanel>
</search>
</field>
+1 -1
View File
@@ -64,7 +64,7 @@ msgstr "会议管理"
#: model:ir.ui.menu,name:purchase.menu_purchase_root
#, python-format
msgid "Purchase"
msgstr "办公用品管理"
msgstr "采购"
#. module: fleet
#. odoo-javascript
@@ -4,37 +4,31 @@
<menuitem id="hr_attendance_root_board"
name="考勤管理"
web_icon="yuthon_work_brand,static/description/attendance.png"
groups="yuthon_hr_attendance. group_hr_attendance_user"
sequence="7"/>
<menuitem id="menu_hr_attendance_my_record_board"
name="我的考勤"
parent="hr_attendance_root_board"
action="yuthon_hr_attendance.hr_attendance_action1"
groups="yuthon_hr_attendance. group_hr_attendance_user"
sequence="1"/>
<menuitem id="menu_hr_attendance_is_abnormal_board"
name="我的异常"
parent="hr_attendance_root_board"
action="yuthon_hr_attendance.hr_attendance_action_is_abnormal"
groups=" group_hr_attendance_user"
sequence="2"/>
<menuitem id="menu_hr_attendance_tt_record_board"
name="天河投资"
parent="hr_attendance_root_board"
action="yuthon_hr_attendance.action_attendance_yuthon_company_form1"
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader1"
sequence="3"/>
<menuitem id="menu_hr_attendance_lc_record_board"
name="天河粮储"
parent="hr_attendance_root_board"
action="yuthon_hr_attendance.action_attendance_yuthon_company_form2"
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader2"
sequence="5"/>
<menuitem id="menu_hr_attendance_wg_record_board"
name="天河物管"
parent="hr_attendance_root_board"
action="yuthon_hr_attendance.action_attendance_yuthon_company_form3"
groups="yuthon_hr_attendance.group_hr_attendance_leader_leader3"
sequence="7"/>
<!-- 计划相关 -->
@@ -90,7 +84,6 @@
<menuitem id="attendance_resources_setting_root_board"
name="配置"
parent="hr_attendance_root_board"
groups="yuthon_hr_attendance.group_hr_attendance_leader_manager"
sequence="99"/>
<menuitem id="menu_hr_attendance_work_board"
name="考勤时间表"