diff --git a/beesdoo_shift/models/attendance_sheet.py b/beesdoo_shift/models/attendance_sheet.py index 8239343..9f3f108 100644 --- a/beesdoo_shift/models/attendance_sheet.py +++ b/beesdoo_shift/models/attendance_sheet.py @@ -545,7 +545,7 @@ class AttendanceSheet(models.Model): % expected_shift.worker_id.name ) - # open a validation wizard if not admin + # Open a validation wizard only if not admin if self.env.user.has_group("beesdoo_shift.group_cooperative_admin"): self._validate(self.env.user.partner_id) return diff --git a/beesdoo_shift/views/attendance_sheet.xml b/beesdoo_shift/views/attendance_sheet.xml index 2900323..579b076 100644 --- a/beesdoo_shift/views/attendance_sheet.xml +++ b/beesdoo_shift/views/attendance_sheet.xml @@ -136,6 +136,9 @@ diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.py b/beesdoo_shift/wizard/validate_attendance_sheet.py index b28e6ed..24f2189 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.py +++ b/beesdoo_shift/wizard/validate_attendance_sheet.py @@ -9,6 +9,14 @@ class ValidateAttendanceSheet(models.TransientModel): Useless for users in group_cooperative_admin""" _inherit = ["barcodes.barcode_events_mixin"] + @api.multi + def _get_active_sheet(self): + sheet_id = self._context.get("active_id") + sheet_model = self._context.get("active_model") + + if sheet_id and sheet_model: + return self.env[sheet_model].browse(sheet_id) + def _get_card_support_setting(self): return ( self.env["ir.config_parameter"].get_param( @@ -18,40 +26,57 @@ class ValidateAttendanceSheet(models.TransientModel): ) @api.multi - def _default_annotation(self): + def _get_warning_regular_workers(self): """ - The annotation is pre-filled with a warning message - if a regular worker is added and should have been expected. + A warning is shown if some regular workers were not expected + but should be doing their regular shifts. This warning is added + to sheet's annotation at validation. """ - - sheet_id = self._context.get("active_id") - sheet_model = self._context.get("active_model") - sheet = self.env[sheet_model].browse(sheet_id) + sheet = self._get_active_sheet() warning_message = "" + if sheet: + for added_shift in sheet.added_shift_ids: + is_regular_worker = added_shift.worker_id.working_mode == "regular" + is_compensation = added_shift.is_compensation - for added_shift in sheet.added_shift_ids: - is_regular_worker = added_shift.worker_id.working_mode == "regular" - is_compensation = added_shift.is_compensation - - if is_regular_worker and not is_compensation: - warning_message += ( - _( - "Warning : %s attended its shift as a normal one but was not expected. " - "Something may be wrong in his/her personnal informations.\n\n" + if is_regular_worker and not is_compensation: + warning_message += ( + _( + "\n%s attended its shift as a normal one but was not expected. " + "Something may be wrong in his/her personnal informations.\n" + ) + % added_shift.worker_id.name ) - % added_shift.worker_id.name - ) return warning_message + @api.multi + def _get_default_annotation(self): + if self._get_active_sheet(): + return self._get_active_sheet().annotation + + @api.multi + def _get_default_feedback(self): + if self._get_active_sheet(): + return self._get_active_sheet().feedback + + @api.multi + def _get_default_worker_nb_feedback(self): + if self._get_active_sheet(): + return self._get_active_sheet().worker_nb_feedback + card_support = fields.Boolean(default=_get_card_support_setting) - user_id = fields.Many2one("res.users", string="Login") + login = fields.Char(string="Login") password = fields.Char(string="Password") barcode = fields.Char(string="Barcode") + warning_regular_workers = fields.Text("Warning", + default=_get_warning_regular_workers, + help="Is any regular worker doing its regular shift as an added one ?" + ) annotation = fields.Text( "Important information requiring permanent member assistance", - default=_default_annotation, + default=_get_default_annotation, ) - feedback = fields.Text("General feedback") + feedback = fields.Text("General feedback", default=_get_default_feedback) worker_nb_feedback = fields.Selection( [ ("not_enough", "Not enough"), @@ -59,17 +84,27 @@ class ValidateAttendanceSheet(models.TransientModel): ("too_many", "Too many"), ], string="Number of workers", + default=_get_default_worker_nb_feedback, required=True, ) def on_barcode_scanned(self, barcode): self.barcode = barcode + @api.multi + def save(self): + """ + Save modifications onto attendance sheet. + """ + sheet = self._get_active_sheet() + + sheet.annotation = self.annotation + sheet.feedback = self.feedback + sheet.worker_nb_feedback = self.worker_nb_feedback + @api.multi def validate_sheet(self): - sheet_id = self._context.get("active_id") - sheet_model = self._context.get("active_model") - sheet = self.env[sheet_model].browse(sheet_id) + sheet = self._get_active_sheet() if self.card_support: # Login with barcode @@ -81,10 +116,11 @@ class ValidateAttendanceSheet(models.TransientModel): partner = card[0].partner_id else: # Login with credentials - if not self.user_id: - raise UserError(_("Please enter an user name.")) - self.user_id.sudo(self.user_id.id).check_credentials(self.password) - partner = self.user_id.partner_id + if not self.login: + raise UserError(_("Please enter your login.")) + user = self.env["res.users"].search([("login", "=", self.login)]) + user.sudo(user.id).check_credentials(self.password) + partner = user.partner_id is_admin = partner.user_ids.has_group( "beesdoo_shift.group_cooperative_admin" @@ -96,9 +132,7 @@ class ValidateAttendanceSheet(models.TransientModel): "Only super-cooperators and administrators can validate attendance sheets." ) ) - if self.annotation: - sheet.annotation += self.annotation - if sheet.feedback: - sheet.feedback += self.feedback - sheet.worker_nb_feedback = self.worker_nb_feedback + + self.annotation += self.warning_regular_workers + self.save() sheet._validate(partner or self.env.user.partner_id) diff --git a/beesdoo_shift/wizard/validate_attendance_sheet.xml b/beesdoo_shift/wizard/validate_attendance_sheet.xml index 1d8a1c0..9396da3 100644 --- a/beesdoo_shift/wizard/validate_attendance_sheet.xml +++ b/beesdoo_shift/wizard/validate_attendance_sheet.xml @@ -6,22 +6,23 @@