From d71b27b78b29a2ed725a6e631bf8085bde257f18 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sat, 7 Sep 2019 00:41:48 +0200 Subject: Shifts: Save time as worklog if past shift gets deleted --- includes/controller/shifts_controller.php | 1 + includes/model/Shifts_model.php | 2 +- includes/model/UserWorkLog_model.php | 35 +++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) (limited to 'includes') diff --git a/includes/controller/shifts_controller.php b/includes/controller/shifts_controller.php index caf124ba..a4d44151 100644 --- a/includes/controller/shifts_controller.php +++ b/includes/controller/shifts_controller.php @@ -220,6 +220,7 @@ function shift_delete_controller() // Schicht löschen bestätigt if ($request->hasPostData('delete')) { + UserWorkLog_from_shift($shift_id); Shift_delete($shift_id); engelsystem_log( diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 6bb17cf2..2408eb49 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -508,8 +508,8 @@ function Shift_delete_by_psid($shift_psid) */ function Shift_delete($shift_id) { - DB::delete('DELETE FROM `Shifts` WHERE `SID`=?', [$shift_id]); mail_shift_delete(Shift($shift_id)); + DB::delete('DELETE FROM `Shifts` WHERE `SID`=?', [$shift_id]); } /** diff --git a/includes/model/UserWorkLog_model.php b/includes/model/UserWorkLog_model.php index 7b766c5e..c450d901 100644 --- a/includes/model/UserWorkLog_model.php +++ b/includes/model/UserWorkLog_model.php @@ -121,6 +121,41 @@ function UserWorkLog_create($userWorkLog) return $result; } +/** + * @param array|int $shift + */ +function UserWorkLog_from_shift($shift) +{ + $shift = is_array($shift) ? $shift : Shift($shift); + + if ($shift['start'] > time()) { + return; + } + + $room = Room($shift['RID']); + foreach ($shift['ShiftEntry'] as $entry) { + if ($entry['freeloaded']) { + continue; + } + $type = AngelType($entry['TID']); + + UserWorkLog_create([ + 'user_id' => $entry['UID'], + 'work_timestamp' => $shift['start'], + 'work_hours' => ($shift['end'] - $shift['start']) / 60 / 60, + 'comment' => sprintf( + '%s (%s as %s) in %s, %s-%s', + $shift['name'], + $shift['title'], + $type['name'], + $room['Name'], + Carbon::createFromTimestamp($shift['start'])->format(__('m/d/Y h:i a')), + Carbon::createFromTimestamp($shift['end'])->format(__('m/d/Y h:i a')) + ), + ]); + } +} + /** * New user work log entry * -- cgit v1.2.3-54-g00ecf From 85e440339267859f9d3f70183c32f9443ca9a27a Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sat, 7 Sep 2019 01:44:15 +0200 Subject: Rooms: Save times as Worklog and notify on room deletion --- includes/model/Shifts_model.php | 7 +++++-- includes/pages/admin_rooms.php | 9 ++++++++- 2 files changed, 13 insertions(+), 3 deletions(-) (limited to 'includes') diff --git a/includes/model/Shifts_model.php b/includes/model/Shifts_model.php index 2408eb49..01295fbc 100644 --- a/includes/model/Shifts_model.php +++ b/includes/model/Shifts_model.php @@ -80,12 +80,15 @@ function Shifts_from_frab() } /** - * @param array $room + * @param array|int $room * @return array[] */ function Shifts_by_room($room) { - return DB::select('SELECT * FROM `Shifts` WHERE `RID`=? ORDER BY `start`', [$room['RID']]); + return DB::select( + 'SELECT * FROM `Shifts` WHERE `RID`=? ORDER BY `start`', + [is_array($room) ? $room['RID'] : $room] + ); } /** diff --git a/includes/pages/admin_rooms.php b/includes/pages/admin_rooms.php index bc0eb651..c55eb227 100644 --- a/includes/pages/admin_rooms.php +++ b/includes/pages/admin_rooms.php @@ -179,9 +179,16 @@ function admin_rooms() ]); } elseif ($request->input('show') == 'delete') { if ($request->hasPostData('ack')) { + $shifts = Shifts_by_room($room_id); + foreach ($shifts as $shift) { + $shift = Shift($shift['SID']); + + UserWorkLog_from_shift($shift); + mail_shift_delete($shift); + } + Room_delete($room_id); - engelsystem_log('Room deleted: ' . $name); success(sprintf(__('Room %s deleted.'), $name)); redirect(page_link_to('admin_rooms')); } -- cgit v1.2.3-54-g00ecf From c5dd21cbd6d0d8f3fe8e003e6b75b3b46a54fa00 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Wed, 18 Sep 2019 04:38:49 +0200 Subject: Deleted shift: Added message about worklog entry --- includes/mailer/shifts_mailer.php | 7 ++++++- resources/lang/de_DE/default.mo | Bin 46206 -> 46468 bytes resources/lang/de_DE/default.po | 3 +++ 3 files changed, 9 insertions(+), 1 deletion(-) (limited to 'includes') diff --git a/includes/mailer/shifts_mailer.php b/includes/mailer/shifts_mailer.php index 37b26838..b496a007 100644 --- a/includes/mailer/shifts_mailer.php +++ b/includes/mailer/shifts_mailer.php @@ -94,7 +94,12 @@ function mail_shift_delete($shift) foreach ($users as $user) { $user = (new User())->forceFill($user); if ($user->settings->email_shiftinfo) { - engelsystem_email_to_user($user, __('Your Shift was deleted'), $message, true); + $userMessage = $message; + if ($shift['start'] < time() && !$user['freeloaded']) { + $userMessage .= "\n" . __('Since the deleted shift was already done, we added a worklog entry instead, to keep your work hours correct.') . "\n"; + } + + engelsystem_email_to_user($user, __('Your Shift was deleted'), $userMessage, true); } } } diff --git a/resources/lang/de_DE/default.mo b/resources/lang/de_DE/default.mo index fb93d590..be387d9c 100644 Binary files a/resources/lang/de_DE/default.mo and b/resources/lang/de_DE/default.mo differ diff --git a/resources/lang/de_DE/default.po b/resources/lang/de_DE/default.po index 091e1114..3c1e0d15 100644 --- a/resources/lang/de_DE/default.po +++ b/resources/lang/de_DE/default.po @@ -674,6 +674,9 @@ msgstr "Eine deiner Schichten wurde gelöscht:" msgid "Your Shift was deleted" msgstr "Deine Schicht wurde gelöscht" +msgid "Since the deleted shift was already done, we added a worklog entry instead, to keep your work hours correct." +msgstr "Da die gelöschte Schicht bereits vergangen ist, haben wir einen entsprechenden Arbeitseinsatz hinzugefügt." + #: includes/mailer/shifts_mailer.php:114 msgid "You have been assigned to a Shift:" msgstr "Du wurdest in eine Schicht eingetragen:" -- cgit v1.2.3-54-g00ecf From 4154e97f3ffa6ecbbf8f6228599742cd23001f95 Mon Sep 17 00:00:00 2001 From: Igor Scheller Date: Sun, 13 Oct 2019 20:28:34 +0200 Subject: Deleted shift: Multiply with night shifts multiplier for worklog entry --- includes/model/UserWorkLog_model.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) (limited to 'includes') diff --git a/includes/model/UserWorkLog_model.php b/includes/model/UserWorkLog_model.php index c450d901..cc7686cf 100644 --- a/includes/model/UserWorkLog_model.php +++ b/includes/model/UserWorkLog_model.php @@ -127,6 +127,7 @@ function UserWorkLog_create($userWorkLog) function UserWorkLog_from_shift($shift) { $shift = is_array($shift) ? $shift : Shift($shift); + $nightShifts = config('night_shifts'); if ($shift['start'] > time()) { return; @@ -137,12 +138,26 @@ function UserWorkLog_from_shift($shift) if ($entry['freeloaded']) { continue; } + $type = AngelType($entry['TID']); + $nightShiftMultiplier = 1; + $shiftStart = Carbon::createFromTimestamp($shift['start']); + $shiftEnd = Carbon::createFromTimestamp($shift['end']); + if ( + $nightShifts['enabled'] + && ( + $shiftStart->hour >= $nightShifts['start'] && $shiftStart->hour < $nightShifts['end'] + || $shiftEnd->hour >= $nightShifts['start'] && $shiftEnd->hour < $nightShifts['end'] + ) + ) { + $nightShiftMultiplier = $nightShifts['multiplier']; + } + UserWorkLog_create([ 'user_id' => $entry['UID'], 'work_timestamp' => $shift['start'], - 'work_hours' => ($shift['end'] - $shift['start']) / 60 / 60, + 'work_hours' => (($shift['end'] - $shift['start']) / 60 / 60) * $nightShiftMultiplier, 'comment' => sprintf( '%s (%s as %s) in %s, %s-%s', $shift['name'], -- cgit v1.2.3-54-g00ecf