diff --git a/yuthon_hr_attendance/models/inherit_hr_employee.py b/yuthon_hr_attendance/models/inherit_hr_employee.py index b826f38f7..23c968e45 100644 --- a/yuthon_hr_attendance/models/inherit_hr_employee.py +++ b/yuthon_hr_attendance/models/inherit_hr_employee.py @@ -11,11 +11,15 @@ class YuthonHrEmployee(models.Model): def _compute_user_roles(self): group_mapping = { '运行班排班计划管理员': 'group_property_run_admin', + '运行班:用户':'group_property_run_user', '高压班排班计划管理员': 'group_property_hv_admin', + '高压班:用户': 'group_property_hv_user', '综合班排班计划管理员': 'group_property_integrated_admin', - '班组A排班计划管理员': 'group_property_class_a_admin', - '班组B排班计划管理员': 'group_property_class_b_admin', - '班组C排班计划管理员': 'group_property_class_c_admin', + '综合班:用户': 'group_property_integrated_user', + '保安部排班计划管理员': 'group_property_class_a_admin', + '保安部:用户': 'group_property_security_user', + '联安粮库排班计划管理员': 'group_property_grain_depot_admin', + '联安粮库:用户':'group_property_grain_depot_user', } old_users_ids = self.user_role_ids for employee in self: diff --git a/yuthon_hr_attendance/models/inherit_planning_role.py b/yuthon_hr_attendance/models/inherit_planning_role.py index 9773d2773..1152bbad4 100644 --- a/yuthon_hr_attendance/models/inherit_planning_role.py +++ b/yuthon_hr_attendance/models/inherit_planning_role.py @@ -36,12 +36,11 @@ class InheritPlanningSlot(models.Model): _inherit = 'planning.slot' department_id = fields.Many2one('hr.department', string="部门") + display_sequence = fields.Integer(string=" ") @api.depends('start_datetime', 'end_datetime', 'template_id') def _compute_display_name(self): for slot in self: - start_str = (slot.start_datetime + timedelta(hours=8)).strftime("%Y/%m/%d %H:%M") if slot.start_datetime else "" - end_str = (slot.end_datetime + timedelta(hours=8)).strftime("%Y/%m/%d %H:%M") if slot.end_datetime else "" planning_name = slot.template_id.planning_name if slot.template_id and slot.template_id.planning_name else "" - slot.display_name = f"{start_str}-{end_str}-{planning_name}" + slot.display_name = f"{planning_name}" diff --git a/yuthon_hr_attendance/models/yuthon_duty_plan.py b/yuthon_hr_attendance/models/yuthon_duty_plan.py index 798d82a0f..c0e97382d 100644 --- a/yuthon_hr_attendance/models/yuthon_duty_plan.py +++ b/yuthon_hr_attendance/models/yuthon_duty_plan.py @@ -19,11 +19,6 @@ class YuthonDutyPlan(models.Model): ('5', '五月'), ('6', '六月'), ('7', '七月'), ('8', '八月'), ('9', '九月'), ('10', '十月'), ('11', '十一月'), ('12', '十二月')], string='选择月份', default=lambda self: self._get_default_month()) - # default = lambda self: self._default_month() - # @api.model - # def _default_month(self): - # current_month = datetime.now().strftime('%B') - # return current_month def auto_duty_plan(self, next_date=False): selected_month = int(self.select_time) @@ -33,14 +28,14 @@ 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) + last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1) else: next_month = (selected_month % 12) + 1 next_year = year + (1 if next_month == 1 else 0) first_day_of_month = datetime(next_year, next_month, 1) 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) + last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1) 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)]) @@ -71,7 +66,7 @@ class YuthonDutyPlan(models.Model): if zu == len(self.plan_line_ids): zu = 0 for employee in self.plan_line_ids[zu].employee_ids: - employee_id = self.env['planning.slot'].search([('resource_id', '=', employee.resource_id.id)]).sorted('start_datetime') + employee_id = self.env['planning.slot'].search([('resource_id', '=', employee.resource_id.id),('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_day_of_month)]).sorted('start_datetime') if i < len(employee_id): start_hour2 = int(role_template_b.start_time) end_hour2 = int(role_template_b.end_time) diff --git a/yuthon_hr_attendance/models/yuthon_run_planning.py b/yuthon_hr_attendance/models/yuthon_run_planning.py index d4f3090ab..8d03c9d79 100644 --- a/yuthon_hr_attendance/models/yuthon_run_planning.py +++ b/yuthon_hr_attendance/models/yuthon_run_planning.py @@ -25,17 +25,17 @@ class YuthonRunPlanning(models.Model): year = datetime.now().year if not next_date: first_day_of_month = datetime(year, selected_month, 1) - # 计算结束日期(下个月的第一天) + # 计算结束日期(当月的最后一天) 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) + next_year = year + (1 if next_month == 1 else 0) + last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1) else: next_month = (selected_month % 12) + 1 next_year = year + (1 if next_month == 1 else 0) first_day_of_month = datetime(next_year, next_month, 1) 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) + last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1) 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) @@ -57,13 +57,13 @@ class YuthonRunPlanning(models.Model): break start_time2 = int(self.env['planning.slot.template'].search([('planning_name', '=', '中夜'), ('role_id', '=', role_a.id)]).start_time) end_time2 = int(self.env['planning.slot.template'].search([('planning_name', '=', '中夜'), ('role_id', '=', role_a.id)]).end_time) - all_slot = self.env['planning.slot'].search([('department_id.name', '=', '运行班')]) current_date = first_day_of_month + all_slot = self.env['planning.slot'].search([('department_id.name', '=', '运行班'), ('start_datetime', '>=', first_day_of_month), ('start_datetime', '<=', last_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') + 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') if i < 31: slot_id[i].write({ 'template_id': self.env['planning.slot.template'].search([('role_id', '=', role_a.id), ('planning_name', '=', '中夜')]).id, @@ -104,6 +104,7 @@ class YuthonRunPlanning(models.Model): 'resource_id': resource_id.id, 'start_datetime': datetime(current_date.year, current_date.month, current_date.day,start_time) + timedelta(hours=16)- timedelta(days=1), 'end_datetime': datetime(current_date.year, current_date.month, current_date.day,end_time) + timedelta(hours=16)- timedelta(days=1), + 'display_sequence': employee.sequence, 'role_id': role_a.id, 'allocated_hours': 8, }) @@ -128,14 +129,14 @@ 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) + last_day_of_month = datetime(next_year, next_month, 1) - timedelta(days=1) else: next_month = (selected_month % 12) + 1 next_year = year + (1 if next_month == 1 else 0) first_day_of_month = datetime(next_year, next_month, 1) 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) + last_day_of_month = datetime(next_next_year, next_next_month, 1) - timedelta(days=1) 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) @@ -157,15 +158,13 @@ class YuthonRunPlanning(models.Model): break start_time2 = int(self.env['planning.slot.template'].search( [('planning_name', '=', '中夜'), ('role_id', '=', role_a.id)]).start_time) end_time2 = int(self.env['planning.slot.template'].search([('planning_name', '=', '中夜'), ('role_id', '=', role_a.id)]).end_time) - all_slot = self.env['planning.slot'].search([('department_id.name', '=', '高压班')]) current_date = first_day_of_month + all_slot = self.env['planning.slot'].search([('department_id.name', '=', '高压班'), ('start_datetime', '>=', first_day_of_month),('start_datetime', '<=', last_day_of_month)]) i = -1 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.high_run_ids[employee].employee_id.resource_id.id)]).sorted( - 'start_datetime') + 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') if i < 31: slot_id[i].write({ 'template_id': self.env['planning.slot.template'].search( @@ -205,14 +204,14 @@ 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) + last_day_of_month = datetime(next_year, next_month, 1)- timedelta(days=1) else: next_month = (selected_month % 12) + 1 next_year = year + (1 if next_month == 1 else 0) first_day_of_month = datetime(next_year, next_month, 1) 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) + last_day_of_month = datetime(next_next_year, next_next_month, 1)- timedelta(days=1) role_a = self.env['planning.role'].search([('name', '=', '工程部')], limit=1) start_time = int(self.env['planning.slot.template'].search( @@ -240,15 +239,15 @@ class YuthonRunPlanning(models.Model): end_time2 = int(self.env['planning.slot.template'].search( [('planning_name', '=', '中夜'), ('role_id', '=', role_a.id)]).end_time) - all_slot = self.env['planning.slot'].search([('department_id.name', '=', '综合班')]) current_date = first_day_of_month + all_slot = self.env['planning.slot'].search( + [('department_id.name', '=', '综合班'), ('start_datetime', '>=', first_day_of_month), + ('start_datetime', '<=', last_day_of_month)]) i = -1 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.all_run_ids[employee].employee_id.resource_id.id)]).sorted( - 'start_datetime') + 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') if i < 31: slot_id[i].write({ 'template_id': self.env['planning.slot.template'].search( diff --git a/yuthon_hr_attendance/views/go_approval.xml b/yuthon_hr_attendance/views/go_approval.xml index c86f27bef..7fed44dc2 100644 --- a/yuthon_hr_attendance/views/go_approval.xml +++ b/yuthon_hr_attendance/views/go_approval.xml @@ -29,10 +29,10 @@ - - + + diff --git a/yuthon_hr_attendance/views/yuthon_run_planning_views.xml b/yuthon_hr_attendance/views/yuthon_run_planning_views.xml index cc6090006..748127b53 100644 --- a/yuthon_hr_attendance/views/yuthon_run_planning_views.xml +++ b/yuthon_hr_attendance/views/yuthon_run_planning_views.xml @@ -31,7 +31,7 @@ - + @@ -40,7 +40,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -121,7 +121,7 @@ - + diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py index 3cc7116b4..e3c66f7cf 100644 --- a/yuthon_property/models/yuthon_property.py +++ b/yuthon_property/models/yuthon_property.py @@ -10,7 +10,7 @@ class YuthonProperty(models.Model): name = fields.Char(string="资产名称") referred = fields.Char(string="简称") - premises = fields.Char(string="楼盘") + premises = fields.Char(string="楼盘小区") units = fields.Char(string="单元") house_type_id = fields.Many2one('yuthon.resource.house.type', string="户型") property_room = fields.Text(string="区") @@ -28,7 +28,6 @@ class YuthonProperty(models.Model): is_done_split = fields.Boolean(string="已拆分") is_done_merge = fields.Boolean(string="已合并") - abbreviation = fields.Char(string="简称") property_floor = fields.Integer(string="楼层") property_orientation = fields.Selection([('north', '东'), ('south', '南'), ('east', '西'), ('west', '北')], string="朝向") @@ -39,20 +38,21 @@ class YuthonProperty(models.Model): state = fields.Selection([('to', '待评估'), ('done', '已评估'), ('ing', '评估中'), ('ing_handover', '移交中'), ('done_handover', '已移交'), ('filing', '备案中'), ('net', '挂网'), ('signing', '签约中'), - ('signed', '已备案'), ('leased', '已出租'), ('idle', '闲置')], string='状态', default='to') + ('signed', '已备案'), ('leased', '已租'), ('idle', '空置'), ('no_lease','不可租')], string='资产目前状态', default='to') is_meter = fields.Boolean(string="水表") + live_room = fields.Many2one('yuthon.live.room', string="居住用房") is_electricity_meter = fields.Boolean(string="电表") - yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtj', '天城投建')], string='所属公司') + yuthon_company = fields.Selection([('thtz', '天河投资'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtj', '天投城建')], string='所属公司') admin_id = fields.Many2one('res.users', string="管理员") - purpose_id = fields.Many2one('yuthon.resource.purpose', string="资产用途") - mgmt_type_id = fields.Many2one('yuthon.resource.management.type', string="管理类型") + purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型") + mgmt_type_id = fields.Many2one('yuthon.resource.management.type', 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.Char(string="片区") - asset_type_id = fields.Many2one('yuthon.resource.type', string="资产类型") + property_precinct = fields.Char(string="所属片区") + asset_type_id = fields.Many2one('yuthon.resource.type', string="出租类型") is_hvac = fields.Boolean(string="使用中央空调") is_handle_land = fields.Boolean(string="办理土地有偿使用手续") property_use_id = fields.Integer(string="物业用途ID") @@ -69,8 +69,8 @@ class YuthonProperty(models.Model): end_date = fields.Date(string="失效日期") lessee_id = fields.Many2one('yuthon.property.lessee', string='承租方') manage_standard = fields.Char(string="物业管理费标准") - title_address = fields.Char(string="产权地址") - rental_address = fields.Char(string="出租地址") + title_address = fields.Text(string="产权地址") + rental_address = fields.Text(string="出租地址") ame = fields.Char(string='标题') decoration_type = fields.Selection([('blank', '毛坯'), ('hardcover', '精装'), ('brands', '简装'), ('rsz', '豪装')], string="装修类型") @@ -303,7 +303,7 @@ class ManageInformationLine(models.Model): _description = '管理信息明细行' yuthon_property_id = fields.Many2one('yuthon.property', string="关联物业信息") - purpose_id = fields.Many2one('yuthon.resource.purpose', string="资产用途") + purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型") precinct = fields.Char(string="片区") admin_id = fields.Many2one('res.users', string="管理员") yuthon_company = fields.Selection([('thtz', '天河投资集团'), ('thwg', '天河物管'), ('thlc', '天河粮储'), ('thtj', '天城投建')], string="所属公司") diff --git a/yuthon_property/models/yuthon_resource_mgmt_config.py b/yuthon_property/models/yuthon_resource_mgmt_config.py index 8bc408625..00fe6cf8a 100644 --- a/yuthon_property/models/yuthon_resource_mgmt_config.py +++ b/yuthon_property/models/yuthon_resource_mgmt_config.py @@ -25,9 +25,9 @@ class YuthonResourcePurpose(models.Model): class YuthonResourceManagementType(models.Model): _name = 'yuthon.resource.management.type' - _description = '管理类型' + _description = '权属类型' - name = fields.Char(string="管理类型") + name = fields.Char(string="权属类型") class YuthonResourceBillingType(models.Model): @@ -55,3 +55,9 @@ class YuthonRentalPurposes(models.Model): _description = '出租用途' name = fields.Char(string="出租用途") + +class YuthonLiveRoom(models.Model): + _name = 'yuthon.live.room' + _description = '居住用房' + + name = fields.Char(string="居住用房") diff --git a/yuthon_property/security/ir.model.access.csv b/yuthon_property/security/ir.model.access.csv index 7c00fef8d..29fe8da90 100644 --- a/yuthon_property/security/ir.model.access.csv +++ b/yuthon_property/security/ir.model.access.csv @@ -43,4 +43,5 @@ access_property_check_stairs,property_check_stairs,model_property_check_stairs,b access_property_meter_reading,property_meter_reading,model_property_meter_reading,base.group_user,1,1,1,1 access_property_message_fee,property_message_fee,model_property_message_fee,base.group_user,1,1,1,1 access_yuthon_penalty_setting,yuthon_penalty_setting,model_yuthon_penalty_setting,base.group_user,1,1,1,1 -access_yuthon_tariff_setting,yuthon_tariff_setting,model_yuthon_tariff_setting,base.group_user,1,1,1,1 \ No newline at end of file +access_yuthon_tariff_setting,yuthon_tariff_setting,model_yuthon_tariff_setting,base.group_user,1,1,1,1 +access_yuthon_live_room,yuthon_live_room,model_yuthon_live_room,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 17871af57..1ffda78a9 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -301,7 +301,7 @@ sequence="50"/> - @@ -309,9 +309,10 @@ action="yuthon_resource_house_type_action" sequence="20"/> + - @@ -323,6 +324,8 @@ action="yuthon_property_tariff_action" sequence="35"/> + diff --git a/yuthon_property/views/yuthon_property_views.xml b/yuthon_property/views/yuthon_property_views.xml index 9ef7e53bb..be77d39fd 100644 --- a/yuthon_property/views/yuthon_property_views.xml +++ b/yuthon_property/views/yuthon_property_views.xml @@ -49,8 +49,9 @@ - + + @@ -188,7 +189,7 @@ - + diff --git a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml index 87e0c101c..b9f983569 100644 --- a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml +++ b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml @@ -11,7 +11,7 @@ - 资产类型 + 出租类型 yuthon.resource.type tree @@ -56,7 +56,7 @@ - 管理类型 + 权属类型 yuthon.resource.management.type tree @@ -118,4 +118,18 @@ yuthon.rental.purpose tree + + yuthon.live.room.tree + yuthon.live.room + + + + + + + + 居住用房配置 + yuthon.live.room + tree + diff --git a/yuthon_property_approval/models/property_evaluate_application.py b/yuthon_property_approval/models/property_evaluate_application.py index dea392ccc..b366fee4d 100644 --- a/yuthon_property_approval/models/property_evaluate_application.py +++ b/yuthon_property_approval/models/property_evaluate_application.py @@ -50,7 +50,7 @@ class EvaluateApplicationLine(models.Model): owner_id = fields.Many2one('yuthon.owner.message', string="权属人") assessment_category = fields.Selection([('rent_money', '租金'), ('value', '价值')], string="评估类别") registered_use = fields.Char(string='证载用途') - purpose_id = fields.Many2one('yuthon.resource.purpose', string="资产用途") + purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型") rental_conditions = fields.Text(string='出租条件') current_status = fields.Date(string='现状(合同到期日)') evaluation_area = fields.Float(string='评估面积(m²)') diff --git a/yuthon_property_approval/models/property_information.py b/yuthon_property_approval/models/property_information.py index eeb2d1c2f..a2cc0f935 100644 --- a/yuthon_property_approval/models/property_information.py +++ b/yuthon_property_approval/models/property_information.py @@ -22,6 +22,6 @@ class PropertyInformation(models.Model): admin_id = fields.Many2one('res.users', string="管理员") precinct = fields.Char(string="片区") address = fields.Text(string="物业地址") - management_type = fields.Char(string="管理类型") + management_type = fields.Char(string="权属类型") property_id = fields.Char(string="物业ID") diff --git a/yuthon_property_approval/models/property_management.py b/yuthon_property_approval/models/property_management.py index 9727bb29e..5d34f6eae 100644 --- a/yuthon_property_approval/models/property_management.py +++ b/yuthon_property_approval/models/property_management.py @@ -29,7 +29,7 @@ class PropertyInformationDetailLines(models.Model): new_company = fields.Char(string="新公司") new_admin = fields.Char(string="新管理员") new_precincts = fields.Char(string="新片区") - new_management_type = fields.Char(string="新管理类型") + new_management_type = fields.Char(string="新权属类型") diff --git a/yuthon_property_approval/models/property_record.py b/yuthon_property_approval/models/property_record.py index 2ed337688..c0eb2e8a5 100644 --- a/yuthon_property_approval/models/property_record.py +++ b/yuthon_property_approval/models/property_record.py @@ -29,7 +29,7 @@ class EvaluatedApplicationLine(models.Model): owner_id = fields.Many2one('yuthon.owner.message', string="权属人") assessment_category = fields.Selection([('rent_money', '租金'), ('value', '价值')], string="评估类别") registered_use = fields.Char(string='证载用途') - purpose_id = fields.Many2one('yuthon.resource.purpose', string="资产用途") + purpose_id = fields.Many2one('yuthon.resource.purpose', string="管理类型") rental_conditions = fields.Text(string='出租条件') current_status = fields.Date(string='现状(合同到期日)') evaluation_area = fields.Float(string='评估面积(m²)') diff --git a/yuthon_work_brand/static/description/planning.png b/yuthon_work_brand/static/description/planning.png new file mode 100644 index 000000000..7c0d47263 Binary files /dev/null and b/yuthon_work_brand/static/description/planning.png differ diff --git a/yuthon_work_brand/views/attendance_menu.xml b/yuthon_work_brand/views/attendance_menu.xml index e47bc0940..bc65d6a0f 100644 --- a/yuthon_work_brand/views/attendance_menu.xml +++ b/yuthon_work_brand/views/attendance_menu.xml @@ -20,126 +20,6 @@ parent="hr_attendance_root_board" action="yuthon_hr_attendance.view_action_card_remind" sequence="3"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file