From 3efb918708078c0f482ab5335cef669f96c1045c Mon Sep 17 00:00:00 2001 From: Elouan Le Bars Date: Thu, 13 Feb 2020 16:25:30 +0100 Subject: [PATCH] [ADD] b_shift : wizard for generation of missing attendance sheets --- beesdoo_shift/__manifest__.py | 1 + beesdoo_shift/models/attendance_sheet.py | 1 - .../views/res_config_settings_view.xml | 7 +++ beesdoo_shift/wizard/__init__.py | 1 + .../generate_missing_attendance_sheets.py | 57 +++++++++++++++++++ .../generate_missing_attendance_sheets.xml | 35 ++++++++++++ 6 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 beesdoo_shift/wizard/generate_missing_attendance_sheets.py create mode 100644 beesdoo_shift/wizard/generate_missing_attendance_sheets.xml diff --git a/beesdoo_shift/__manifest__.py b/beesdoo_shift/__manifest__.py index a14dcfa..e6fb1fe 100644 --- a/beesdoo_shift/__manifest__.py +++ b/beesdoo_shift/__manifest__.py @@ -37,6 +37,7 @@ "wizard/extension.xml", "wizard/holiday.xml", "wizard/temporary_exemption.xml", + "wizard/generate_missing_attendance_sheets.xml", ], 'demo': [ "demo/workers.xml", diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 85bebda..64869a3 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -597,7 +597,6 @@ class AttendanceSheet(models.Model): defined from corresponding CRON time interval. """ - time_ranges = set() tasks = self.env["beesdoo.shift.shift"] sheets = self.env["beesdoo.shift.sheet"] current_time = datetime.now() diff --git a/beesdoo_shift/views/res_config_settings_view.xml b/beesdoo_shift/views/res_config_settings_view.xml index a715521..55ed7df 100644 --- a/beesdoo_shift/views/res_config_settings_view.xml +++ b/beesdoo_shift/views/res_config_settings_view.xml @@ -96,6 +96,13 @@ sequence="21" /> + + + Generate missing past attendance sheets + beesdoo.shift.generate_missing_attendance_sheets + form + + Day Number beesdoo.shift.daynumber diff --git a/beesdoo_shift/wizard/__init__.py b/beesdoo_shift/wizard/__init__.py index ea73734..f2f6720 100644 --- a/beesdoo_shift/wizard/__init__.py +++ b/beesdoo_shift/wizard/__init__.py @@ -6,3 +6,4 @@ from . import extension from . import holiday from . import temporary_exemption from . import validate_attendance_sheet +from . import generate_missing_attendance_sheets diff --git a/beesdoo_shift/wizard/generate_missing_attendance_sheets.py b/beesdoo_shift/wizard/generate_missing_attendance_sheets.py new file mode 100644 index 0000000..8954945 --- /dev/null +++ b/beesdoo_shift/wizard/generate_missing_attendance_sheets.py @@ -0,0 +1,57 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError, ValidationError + +from datetime import datetime + + +class GenerateMissingAttendanceSheets(models.TransientModel): + """ + Generate missing past sheets + """ + + _name = "beesdoo.shift.generate_missing_attendance_sheets" + + date_start = fields.Datetime("Start date", required=True) + date_end = fields.Datetime("End date", required=True) + + @api.multi + def generate_missing_attendance_sheets(self): + self.ensure_one() + tasks = self.env["beesdoo.shift.shift"] + sheets = self.env["beesdoo.shift.sheet"] + + tasks = tasks.search( + [ + ("start_time", ">", self.date_start), + ("start_time", "<", self.date_end), + ] + ) + + # We should not loop on task with same start_time and end_time + # To improve performances + for task in tasks: + start_time = task.start_time + end_time = task.end_time + sheet = sheets.search( + [("start_time", "=", start_time), ("end_time", "=", end_time),] + ) + + if not sheet: + sheets |= sheets.create( + {"start_time": start_time, "end_time": end_time} + ) + + return { + "name": _("Generated Missing Sheets"), + "type": "ir.actions.act_window", + "view_type": "form", + "view_mode": "tree,form", + "res_model": "beesdoo.shift.sheet", + "target": "current", + "domain": [("id", "in", sheets.ids)], + } + + @api.constrains("date_start", "date_end") + def constrains_dates(self): + if self.date_start > datetime.now() or self.date_end > datetime.now(): + raise UserError(_("Only past attendance sheets can be generated")) diff --git a/beesdoo_shift/wizard/generate_missing_attendance_sheets.xml b/beesdoo_shift/wizard/generate_missing_attendance_sheets.xml new file mode 100644 index 0000000..a37fdae --- /dev/null +++ b/beesdoo_shift/wizard/generate_missing_attendance_sheets.xml @@ -0,0 +1,35 @@ + + + Generate Missing Attendance Sheets + beesdoo.shift.generate_missing_attendance_sheets + +
+ + +
+
+
+
+
+ + + + +