diff --git a/yuthon_hr_attendance/__manifest__.py b/yuthon_hr_attendance/__manifest__.py index 44d5b403e..0da7f5b45 100644 --- a/yuthon_hr_attendance/__manifest__.py +++ b/yuthon_hr_attendance/__manifest__.py @@ -89,6 +89,8 @@ 'yuthon_hr_attendance/static/src/css/*.css', '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', + 'yuthon_hr_attendance/static/src/xml/button_vacation_put.xml', 'yuthon_hr_attendance/static/src/planning_gantt/planning_gantt_controller.xml', ], }, diff --git a/yuthon_hr_attendance/models/yuthon_vacation_reports.py b/yuthon_hr_attendance/models/yuthon_vacation_reports.py index 9780b365e..18659319c 100644 --- a/yuthon_hr_attendance/models/yuthon_vacation_reports.py +++ b/yuthon_hr_attendance/models/yuthon_vacation_reports.py @@ -72,14 +72,14 @@ class YuthonVacationReports(models.Model): vacation_state = fields.Selection( selection=[ - ('unconfirmed', "未确认"), + ('not_sent', "未发送"), ('confirmed', "已确认"), - ('pending', "待定"), + ('pending', "待确认"), ], string="状态", readonly=True, copy=False, index=True, tracking=3, - default='unconfirmed') + default='not_sent') @api.constrains('employee_id', 'vacation_date') def _check_duplicate_monthly_record(self): @@ -630,7 +630,7 @@ class YuthonVacationReports(models.Model): current_date = fields.Date.today() vacation_ids = self.env["yuthon.vacation.reports"].search([ ('vacation_date', '=', current_date.replace(day=1)), - ('vacation_state', '=', 'unconfirmed') + ('vacation_state', '!=', 'confirmed') ]) for rec in vacation_ids: month_start = current_date.replace(day=1) diff --git a/yuthon_hr_attendance/static/src/js/button_vacation_put.js b/yuthon_hr_attendance/static/src/js/button_vacation_put.js new file mode 100644 index 000000000..a545b4b9a --- /dev/null +++ b/yuthon_hr_attendance/static/src/js/button_vacation_put.js @@ -0,0 +1,42 @@ +/** @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 CustomAttendanceVacationPutController extends ListController { + setup() { + super.setup(); + } + + openVacationPutWizard() { + this.actionService.doAction({ + type: 'ir.actions.act_window', + res_model: 'vacation.put.wizard', + name: '批量发送确认弹窗', + view_mode: 'form', + view_type: 'form', + views: [[false, 'form']], + target: 'new', // 以弹窗形式打开 + context: {}, + }); + } + + openVacationConfirmWizard(){ + this.actionService.doAction({ + type: 'ir.actions.act_window', + res_model: 'vacation.confirm.wizard', + name: '批量确认弹窗', + view_mode: 'form', + view_type: 'form', + views: [[false, 'form']], + target: 'new', // 以弹窗形式打开 + context: {}, + }); + } +} + +registry.category("views").add("custom_vacation_put_button", { + ...listView, + Controller: CustomAttendanceVacationPutController, + buttonTemplate: "vacation_put_module.ListView.Buttons", +}); \ No newline at end of file diff --git a/yuthon_hr_attendance/static/src/xml/button_vacation_put.xml b/yuthon_hr_attendance/static/src/xml/button_vacation_put.xml new file mode 100644 index 000000000..828a3c312 --- /dev/null +++ b/yuthon_hr_attendance/static/src/xml/button_vacation_put.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml index 936468742..3d443c7ed 100644 --- a/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml +++ b/yuthon_hr_attendance/views/yuthon_vacation_reports_views.xml @@ -4,11 +4,7 @@ yuthon.vacation.reports.tree yuthon.vacation.reports - -
-
+ diff --git a/yuthon_hr_attendance/wizard/vacation_confirm_wizard.py b/yuthon_hr_attendance/wizard/vacation_confirm_wizard.py index f4f9ecc2f..79280f140 100644 --- a/yuthon_hr_attendance/wizard/vacation_confirm_wizard.py +++ b/yuthon_hr_attendance/wizard/vacation_confirm_wizard.py @@ -1,5 +1,8 @@ # -*- coding: utf-8 -*- import calendar + +from dateutil.relativedelta import relativedelta + from odoo import models, api, fields, _ from odoo.tools.float_utils import float_round from odoo.exceptions import ValidationError, UserError @@ -12,8 +15,15 @@ class VacationConfirmWizard(models.TransientModel): _name = 'vacation.confirm.wizard' _description = '批量确认弹窗' + company_id = fields.Many2one('res.company', string='公司', default=lambda self: self.env.user.company_id) + def action_confirm(self): - reports = self.env["yuthon.vacation.reports"].search([('vacation_state', '=', 'unconfirmed')]) + today = date.today() + vacation_date = (today - relativedelta(months=1)).replace(day=1) + reports = self.env["yuthon.vacation.reports"].search([('vacation_state', '=', 'pending'), + ('vacation_date', '=', vacation_date), + ('company_id', '=', self.company_id.id) + ]) for rec in reports: - rec.vacation_state = 'confirmed' + rec.vacation_state = 'pending' rec.automatic_confirmation() diff --git a/yuthon_hr_attendance/wizard/vacation_confirm_wizard_views.xml b/yuthon_hr_attendance/wizard/vacation_confirm_wizard_views.xml index 34a916fb4..ad9d08483 100644 --- a/yuthon_hr_attendance/wizard/vacation_confirm_wizard_views.xml +++ b/yuthon_hr_attendance/wizard/vacation_confirm_wizard_views.xml @@ -8,6 +8,9 @@
确认要批量确认吗?
+ + +