@@ -95,6 +95,8 @@
|
||||
'yuthon_hr_attendance/static/src/xml/button_detail_wechat.xml',
|
||||
'yuthon_hr_attendance/static/src/components/*/*.xml',
|
||||
'yuthon_hr_attendance/static/src/css/*.css',
|
||||
'yuthon_hr_attendance/static/src/js/button_vacation_confirm.js',
|
||||
'yuthon_hr_attendance/static/src/xml/button_vacation_confirm.xml',
|
||||
'yuthon_hr_attendance/static/src/js/planning_gantt_renderer.js',
|
||||
'yuthon_hr_attendance/static/src/xml/planning_gantt_renderer.xml',
|
||||
'yuthon_hr_attendance/static/src/js/button_vacation_put.js',
|
||||
|
||||
@@ -219,9 +219,14 @@ class OvertimeApprovals(models.Model):
|
||||
if company_id:
|
||||
company = self.env['res.company'].browse(company_id)
|
||||
if company.name == '天河物管':
|
||||
if vals.get('duration'):
|
||||
if (vals['duration']) % 1 != 0.5:
|
||||
raise ValidationError("时长不对!请重新编辑")
|
||||
duration = vals.get('duration')
|
||||
if duration is None:
|
||||
raise ValidationError("时长不能为空!请填写有效的加班时长")
|
||||
if duration < 1:
|
||||
raise ValidationError(f"时长不能小于1!当前填写的是{duration},请重新编辑")
|
||||
if (duration * 2) % 1 != 0:
|
||||
raise ValidationError(
|
||||
f"时长格式错误!请填写1、1.5、2、2.5...等以0.5递增的数值,当前填写的是{duration}")
|
||||
return super(OvertimeApprovals, self).create(vals_list)
|
||||
|
||||
@api.onchange('is_issues')
|
||||
|
||||
@@ -12,6 +12,7 @@ class InheritHrLeave(models.Model):
|
||||
caption = fields.Char(string="标题", compute="_compute_application_reason")
|
||||
employee_id = fields.Many2one('hr.employee', string="发起人")
|
||||
leave_stats = fields.Char(string="请假统计", compute="_compute_leave_stats")
|
||||
is_filing = fields.Boolean(string="归档")
|
||||
application_reason = fields.Char(string="申请原因", compute="_compute_application_reason")
|
||||
|
||||
@api.depends('batch_id', 'hour_batch_id')
|
||||
|
||||
@@ -85,7 +85,7 @@ class YuthonVacationReports(models.Model):
|
||||
|
||||
attendance_message_log_ids = fields.One2many('attendance.message.log', 'vacation_id')
|
||||
admin_confirms = fields.Boolean(string="是否管理员确认")
|
||||
|
||||
is_filing = fields.Boolean(string="归档")
|
||||
vacation_state = fields.Selection(
|
||||
selection=[
|
||||
('not_sent', "未发送"),
|
||||
@@ -986,7 +986,7 @@ class VacationOverline(models.Model):
|
||||
carry_forward_quantity = fields.Float(string="结转时长")
|
||||
validity = fields.Char(string="有效期")
|
||||
carry_result = fields.Selection([('success', '成功'), ('failed', '失败')], string="结转结果")
|
||||
is_active = fields.Boolean(string="归档")
|
||||
is_filing = fields.Boolean(string="归档")
|
||||
carry_forward_state = fields.Selection([('pending', '待结转'),('completed', '已结转'), ('partial', '部分结转')
|
||||
],string='结转状态',
|
||||
default='pending',
|
||||
@@ -994,7 +994,28 @@ class VacationOverline(models.Model):
|
||||
remaining_quantity = fields.Float(string='剩余数', compute="_compute_remaining_quantity", store=True)
|
||||
|
||||
def confirm(self):
|
||||
pass
|
||||
domain = [
|
||||
'|',
|
||||
['is_initial_number', '=', True],
|
||||
'&',
|
||||
['is_initial_number', '=', False],
|
||||
'&',
|
||||
['update_type', '=', 'add'],
|
||||
'&',
|
||||
['workflow_record_id', '!=', False],
|
||||
'!',
|
||||
'&',
|
||||
['start_time', '>=', '2025-12-01 00:00:00'],
|
||||
['start_time', '<', '2026-01-01 00:00:00']
|
||||
]
|
||||
filtered_records = self.search(domain)
|
||||
if not filtered_records:
|
||||
return
|
||||
records_to_update = filtered_records.filtered(
|
||||
lambda r: fields.float_compare(r.total, r.carry_forward_quantity) == 0
|
||||
)
|
||||
if records_to_update:
|
||||
records_to_update.write({'is_filing': True})
|
||||
|
||||
def update_line(self):
|
||||
over_ids = self.env["vacation.over.line"].browse(
|
||||
@@ -1181,9 +1202,15 @@ class VacationMealLine(models.Model):
|
||||
_description = '误餐明细'
|
||||
|
||||
vacation_id = fields.Many2one('yuthon.vacation.reports', string='关联假期额度记录')
|
||||
employee_id = fields.Many2one('hr.employee', string='员工')
|
||||
is_filing = fields.Boolean(string="归档")
|
||||
employee_id = fields.Many2one('hr.employee', string='员工', compute='_compute_employee_id', store=True)
|
||||
department_id = fields.Many2one('hr.department', related='employee_id.department_id', string="部门", store=True)
|
||||
company_id = fields.Many2one('res.company', related='employee_id.company_id', string="公司", store=True)
|
||||
workflow_record_id = fields.Many2one('soong.workflow.record', string='流程')
|
||||
vacation_date = fields.Date(related='vacation_id.vacation_date', string='误餐日期')
|
||||
update_type= fields.Selection([('add', '增加'), ('reduce', '减少')], string='更新类型')
|
||||
meal_name = fields.Char(string="标题", compute="_compute_overtime", store=True)
|
||||
start_date = fields.Date(string="日期", compute="_compute_overtime", store=True)
|
||||
update_date = fields.Date(string='更新时间')
|
||||
update_lines = fields.Float(string='更新额度')
|
||||
is_soon = fields.Boolean(string="流程修改")
|
||||
@@ -1194,6 +1221,39 @@ class VacationMealLine(models.Model):
|
||||
text = fields.Text(string='备注')
|
||||
is_confirm = fields.Boolean(string="是否确认")
|
||||
|
||||
def update_line(self):
|
||||
meal_ids = self.env["vacation.meal.line"].browse(
|
||||
self._context.get('active_ids', self._context.get('active_id')))
|
||||
for rec in meal_ids:
|
||||
rec._compute_employee_id()
|
||||
rec._compute_overtime()
|
||||
|
||||
@api.depends('workflow_record_id')
|
||||
def _compute_overtime(self):
|
||||
for rec in self:
|
||||
rec.start_date = False
|
||||
res_model = rec.workflow_record_id.res_model
|
||||
res_id = rec.workflow_record_id.res_id
|
||||
if res_model and res_id and res_model in self.env:
|
||||
if res_model == 'overtime.approval':
|
||||
overtime_id = rec.env[res_model].search([('id', '=', res_id)], limit=1)
|
||||
if overtime_id:
|
||||
rec.start_date = overtime_id.start_time.date() or ''
|
||||
else:
|
||||
go_approval_id = rec.env[res_model].search([('id', '=', res_id)], limit=1)
|
||||
if go_approval_id:
|
||||
rec.start_date = go_approval_id.date_start.date() or ''
|
||||
rec.meal_name = rec.workflow_record_id.name or ''
|
||||
|
||||
|
||||
@api.depends('vacation_id')
|
||||
def _compute_employee_id(self):
|
||||
for rec in self:
|
||||
if rec.vacation_id:
|
||||
rec.employee_id = rec.vacation_id.employee_id.id
|
||||
elif not rec.employee_id:
|
||||
rec.employee_id = False
|
||||
|
||||
def action_void(self):
|
||||
self.is_void = True
|
||||
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/** @odoo-module */
|
||||
import { ListController } from "@web/views/list/list_controller";
|
||||
import { registry } from '@web/core/registry';
|
||||
import { listView } from '@web/views/list/list_view';
|
||||
|
||||
export class CustomAttendanceVacationConfirmController extends ListController {
|
||||
setup() {
|
||||
super.setup();
|
||||
}
|
||||
async openConfirm() {
|
||||
await this.model.orm.call(
|
||||
'vacation.over.line',
|
||||
'confirm',
|
||||
[]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
registry.category("views").add("custom_vacation_confirm_button", {
|
||||
...listView,
|
||||
Controller: CustomAttendanceVacationConfirmController,
|
||||
buttonTemplate: "vacation_confirm_module.ListView.Buttons",
|
||||
});
|
||||
@@ -9,6 +9,19 @@ export class CustomAttendanceVacationPutController extends ListController {
|
||||
|
||||
}
|
||||
openHrLeaveWizard() {
|
||||
const now = new Date();
|
||||
const lastMonthYear = now.getMonth() === 0 ? now.getFullYear() - 1 : now.getFullYear();
|
||||
const lastMonth = now.getMonth() === 0 ? 11 : now.getMonth() - 1;
|
||||
const lastMonthFirstDay = new Date(lastMonthYear, lastMonth, 1);
|
||||
const currentMonthFirstDay = new Date(now.getFullYear(), now.getMonth(), 1);
|
||||
const formatDate = (date) => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day} 00:00:00`;
|
||||
};
|
||||
const lastMonthStart = formatDate(lastMonthFirstDay);
|
||||
const lastMonthEnd = formatDate(currentMonthFirstDay);
|
||||
this.actionService.doAction({
|
||||
type: 'ir.actions.act_window',
|
||||
res_model: 'hr.leave',
|
||||
@@ -18,6 +31,11 @@ export class CustomAttendanceVacationPutController extends ListController {
|
||||
views: [[false, 'tree']],
|
||||
target: 'new', // 弹窗形式打开
|
||||
context: {'tree_view_ref': "yuthon_hr_attendance.view_hr_leave_statement_tree"},
|
||||
domain: [
|
||||
'&',
|
||||
['date_from', '>=', lastMonthStart],
|
||||
['date_from', '<', lastMonthEnd]
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
@@ -33,17 +51,14 @@ export class CustomAttendanceVacationPutController extends ListController {
|
||||
context: {'tree_view_ref': "yuthon_hr_attendance.view_yuthon_vacation_overtime_briefly_tree"},
|
||||
domain: [
|
||||
'|',
|
||||
// 条件1:is_initial_number=true → 无视时间,直接显示
|
||||
['is_initial_number', '=', true],
|
||||
// 条件组2:is_initial_number=false + add + workflow_record_id≠空 + 非12月
|
||||
'&', // 且:作用于「条件2」和「运算符&的结果」
|
||||
'&',
|
||||
['is_initial_number', '=', false],
|
||||
'&', // 且:作用于「条件3」和「运算符&的结果」
|
||||
'&',
|
||||
['update_type', '=', 'add'],
|
||||
'&', // 且:作用于「条件4」和「运算符!的结果」
|
||||
'&',
|
||||
['workflow_record_id', '!=', false],
|
||||
// 时间过滤:只作用于第二类记录
|
||||
'!', // 取反:不是2025年12月
|
||||
'!',
|
||||
'&',
|
||||
['start_time', '>=', '2025-12-01 00:00:00'],
|
||||
['start_time', '<', '2026-01-01 00:00:00']
|
||||
@@ -52,16 +67,35 @@ export class CustomAttendanceVacationPutController extends ListController {
|
||||
}
|
||||
|
||||
openYuthonVacationWizard() {
|
||||
const now = new Date();
|
||||
const lastMonthYear = now.getMonth() === 0 ? now.getFullYear() - 1 : now.getFullYear();
|
||||
const lastMonth = now.getMonth() === 0 ? 11 : now.getMonth() - 1;
|
||||
const lastMonthFirstDay = new Date(lastMonthYear, lastMonth, 1);
|
||||
const currentMonthFirstDay = new Date(now.getFullYear(), now.getMonth(), 1);
|
||||
const formatDate = (date) => {
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day} 00:00:00`;
|
||||
};
|
||||
const lastMonthStart = formatDate(lastMonthFirstDay);
|
||||
const lastMonthEnd = formatDate(currentMonthFirstDay);
|
||||
this.actionService.doAction({
|
||||
type: 'ir.actions.act_window',
|
||||
res_model: 'yuthon.vacation.reports',
|
||||
res_model: 'vacation.meal.line',
|
||||
name: '误餐情况',
|
||||
view_mode: 'tree',
|
||||
view_type: 'form',
|
||||
views: [[false, 'tree']],
|
||||
target: 'new',
|
||||
context: {'tree_view_ref': "yuthon_hr_attendance.view_yuthon_vacation_meal_tree"},
|
||||
domain: [['meal_fee', '!=', 0]]
|
||||
context: {'tree_view_ref': "yuthon_hr_attendance.view_vacation_meal_line_tree",
|
||||
'group_by': ['employee_id'],
|
||||
},
|
||||
domain: [
|
||||
'&',
|
||||
['start_date', '>=', lastMonthStart],
|
||||
['start_date', '<', lastMonthEnd]
|
||||
],
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<templates>
|
||||
<t t-name="vacation_confirm_module.ListView.Buttons" t-inherit="web.ListView.Buttons">
|
||||
<xpath expr="//div[hasclass('o_list_buttons')]" position="after">
|
||||
<button type="button" class="btn btn-primary" style="margin-left: 10px;" t-on-click="openConfirm">
|
||||
确认
|
||||
</button>
|
||||
</xpath>
|
||||
</t>
|
||||
</templates>
|
||||
@@ -4,17 +4,18 @@
|
||||
<field name="name">hr.leave.statement.tree</field>
|
||||
<field name="model">hr.leave</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="请假情况" editable="bottom" limit="15">
|
||||
<tree string="请假情况" editable="bottom" limit="15" create="false" delete="false">
|
||||
<field name="caption"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="employee_company_id"/>
|
||||
<field name="holiday_status_id"/>
|
||||
<field name="date_from"/>
|
||||
<field name="date_from" groups="base.group_system"/>
|
||||
<field name="date_to"/>
|
||||
<field name="number_of_days" string="请假时长(天)"/>
|
||||
<field name="leave_stats"/>
|
||||
<field name="application_reason"/>
|
||||
<field name="state"/>
|
||||
<field name="is_filing" column_invisibe="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -40,6 +41,16 @@
|
||||
<field name="name">请假情况</field>
|
||||
<field name="res_model">hr.leave</field>
|
||||
<field name="view_mode">tree,search</field>
|
||||
<field name="domain">[('is_filing','=', False)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_id" ref="view_hr_leave_statement_tree"/>
|
||||
<field name="search_view_id" ref="view_hr_leave_statement_search"/>
|
||||
</record>
|
||||
<record id="view_yuthon_holiday_statement_active_action" model="ir.actions.act_window">
|
||||
<field name="name">请假归档</field>
|
||||
<field name="res_model">hr.leave</field>
|
||||
<field name="view_mode">tree,search</field>
|
||||
<field name="domain">[('is_filing','=', True)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_id" ref="view_hr_leave_statement_tree"/>
|
||||
<field name="search_view_id" ref="view_hr_leave_statement_search"/>
|
||||
|
||||
@@ -1,15 +1,36 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<record id="view_yuthon_vacation_meal_tree" model="ir.ui.view">
|
||||
<field name="name">yuthon.vacation.reports.tree</field>
|
||||
<field name="model">yuthon.vacation.reports</field>
|
||||
<record id="view_vacation_meal_line_tree" model="ir.ui.view">
|
||||
<field name="name">vacation.meal.line.tree</field>
|
||||
<field name="model">vacation.meal.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="误餐情况">
|
||||
<tree string="误餐情况" create="false" delete="false">
|
||||
<field name="employee_id"/>
|
||||
<field name="meal_fee"/>
|
||||
<field name="meal_name"/>
|
||||
<field name="start_date" column_invisible="1"/>
|
||||
<field name="update_lines"/>
|
||||
<field name="is_filing" column_invisible="1"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_meal_search" model="ir.ui.view">
|
||||
<field name="name">vacation.meal.line.search</field>
|
||||
<field name="model">vacation.meal.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="误餐情况">
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
<filter string="员工" name="group_by_employee_id" domain="[]" context="{'group_by': 'employee_id'}"/>
|
||||
<filter name="now_month" string="当月" domain="[('vacation_date', '>=', (context_today() + relativedelta(day=1)).strftime('%Y-%m-%d')),
|
||||
('vacation_date', '<', (context_today() + relativedelta(months=+1, day=1)).strftime('%Y-%m-%d'))]"/>
|
||||
<header_search class="header-search-inline">
|
||||
<field name="vacation_date"/>
|
||||
<field name="employee_id"/>
|
||||
<field name="department_id"/>
|
||||
</header_search>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_reports_tree" model="ir.ui.view">
|
||||
<field name="name">yuthon.vacation.reports.tree</field>
|
||||
<field name="model">yuthon.vacation.reports</field>
|
||||
@@ -518,7 +539,7 @@
|
||||
<field name="name">vacation.over.line.overtime.briefly.tree</field>
|
||||
<field name="model">vacation.over.line</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="加班情况弹窗" editable="bottom">
|
||||
<tree string="加班情况弹窗" editable="bottom" js_class="custom_vacation_confirm_button" create="0">
|
||||
<field name="employee_id"/>
|
||||
<field name="last_balance" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user"/>
|
||||
<field name="valid_date" groups="yuthon_salary.group_lc_user,yuthon_salary.group_wg_user"/>
|
||||
@@ -526,6 +547,7 @@
|
||||
<field name="public_holidays"/>
|
||||
<field name="total"/>
|
||||
<field name="carry_forward_quantity"/>
|
||||
<field name="carry_forward_date"/>
|
||||
<field name="remaining_quantity"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -540,7 +562,7 @@
|
||||
<field name="department_id"/>
|
||||
<field name="carry_forward_quantity"/>
|
||||
<field name="carry_forward_date"/>
|
||||
<field name="is_active"/>
|
||||
<field name="is_filing" column_invisible="1"/>
|
||||
<field name="carry_result"/>
|
||||
</tree>
|
||||
</field>
|
||||
@@ -588,7 +610,7 @@
|
||||
<field name="name">加班情况</field>
|
||||
<field name="res_model">vacation.over.line</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">['|', ('workflow_record_id','!=', False), ('is_initial_number', '=', True), ('update_type', '=', 'add')]</field>
|
||||
<field name="domain">['|', ('workflow_record_id','!=', False), ('is_initial_number', '=', True), ('update_type', '=', 'add'), ('is_filing','=', False)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_id" ref="view_yuthon_vacation_overtime_tree"/>
|
||||
<field name="search_view_id" ref="view_yuthon_vacation_overtime_search"/>
|
||||
@@ -597,7 +619,7 @@
|
||||
<field name="name">加班情况(归档)</field>
|
||||
<field name="res_model">vacation.over.line</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">['|', ('workflow_record_id','!=', False), ('is_initial_number', '=', True), ('update_type', '=', 'add'), ('is_active', '=', True)]</field>
|
||||
<field name="domain">['|', ('workflow_record_id','!=', False), ('is_initial_number', '=', True), ('update_type', '=', 'add'), ('is_filing','=', True)]</field>
|
||||
<field name="context">{'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_id" ref="view_yuthon_vacation_overtime_active_tree"/>
|
||||
<field name="search_view_id" ref="view_yuthon_vacation_overtime_search"/>
|
||||
@@ -611,18 +633,46 @@
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_meal_action" model="ir.actions.act_window">
|
||||
<field name="name">误餐情况</field>
|
||||
<field name="res_model">yuthon.vacation.reports</field>
|
||||
<field name="res_model">vacation.meal.line</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">[('meal_fee', '!=', 0)]</field>
|
||||
<field name="domain">[('is_filing','=', False)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="search_view_id" ref="view_yuthon_vacation_reports_search"/>
|
||||
<field name="search_view_id" ref="view_yuthon_vacation_meal_search"/>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_yuthon_vacation_meal_tree')}),]"/>
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_vacation_meal_line_tree')}),]"/>
|
||||
</record>
|
||||
<record id="update_vacation_meal_line" model="ir.actions.server">
|
||||
<field name="name">触发计算逻辑</field>
|
||||
<field name="model_id" ref="yuthon_hr_attendance.model_vacation_meal_line"/>
|
||||
<field name="binding_model_id" ref="yuthon_hr_attendance.model_vacation_meal_line"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.update_line()</field>
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_meal_active_action" model="ir.actions.act_window">
|
||||
<field name="name">误餐归档</field>
|
||||
<field name="res_model">vacation.meal.line</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">[('is_filing','=', True)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="search_view_id" ref="view_yuthon_vacation_meal_search"/>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_vacation_meal_line_tree')}),]"/>
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_reports_action" model="ir.actions.act_window">
|
||||
<field name="name">考勤确认单台账</field>
|
||||
<field name="res_model">yuthon.vacation.reports</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('is_filing','=', False)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_yuthon_vacation_reports_tree')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('yuthon_hr_attendance.view_yuthon_vacation_reports_form')})]"/>
|
||||
</record>
|
||||
<record id="view_yuthon_vacation_reports_active_action" model="ir.actions.act_window">
|
||||
<field name="name">考勤确认单归档</field>
|
||||
<field name="res_model">yuthon.vacation.reports</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="domain">[('is_filing','=', True)]</field>
|
||||
<field name="context">{'search_default_now_month': 1, 'search_default_group_by_employee_id':1}</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('yuthon_hr_attendance.view_yuthon_vacation_reports_tree')}),
|
||||
|
||||
@@ -711,6 +711,35 @@
|
||||
action="yuthon_performance.yuthon_employee_approval_action1"
|
||||
sequence="7"/>
|
||||
|
||||
<menuitem id="yuthon_vacation_active_menu"
|
||||
parent="human_resources_menu_root_board"
|
||||
name="归档"
|
||||
sequence="99"/>
|
||||
<menuitem id="yuthon_vacation_report_active_menu"
|
||||
parent="yuthon_vacation_active_menu"
|
||||
name="考勤确认单归档"
|
||||
action="yuthon_hr_attendance.view_yuthon_vacation_reports_active_action"
|
||||
sequence="1"
|
||||
/>
|
||||
<menuitem id="yuthon_holiday_active_menu"
|
||||
parent="yuthon_vacation_active_menu"
|
||||
name="请假归档"
|
||||
action="yuthon_hr_attendance.view_yuthon_holiday_statement_active_action"
|
||||
sequence="10"
|
||||
/>
|
||||
<menuitem id="yuthon_overtime_active_menu"
|
||||
parent="yuthon_vacation_active_menu"
|
||||
name="加班归档"
|
||||
action="yuthon_hr_attendance.action_overtime_approval_active_report"
|
||||
sequence="20"
|
||||
/>
|
||||
<menuitem id="yuthon_menu_active_menu"
|
||||
parent="yuthon_vacation_active_menu"
|
||||
name="误餐归档"
|
||||
action="yuthon_hr_attendance.view_yuthon_vacation_meal_active_action"
|
||||
sequence="30"
|
||||
/>
|
||||
|
||||
<!--我的-->
|
||||
<menuitem id="holiday_manage_menu_root_board" name="我的" web_icon="yuthon_work_brand,static/description/holiday.png" sequence="3">
|
||||
<menuitem id="menu_workflow_approval_request_new" name="新建流程" action="soong_workflow.action_kklw_workflow_approval_request" sequence="5"/>
|
||||
|
||||
Reference in New Issue
Block a user