From 9307604aa08b4c793cdd44b53fb8bb0ae00e4243 Mon Sep 17 00:00:00 2001 From: Erik Thuning <boooink@gmail.com> Date: Wed, 27 Jul 2022 13:53:18 +0200 Subject: [PATCH] Implemented receipts for loan extensions --- include/Cron.php | 108 ++++++++++++++++++++++++++++++++--------------- 1 file changed, 75 insertions(+), 33 deletions(-) diff --git a/include/Cron.php b/include/Cron.php index 3303ff5..80bc67a 100644 --- a/include/Cron.php +++ b/include/Cron.php @@ -19,9 +19,17 @@ class Cron { $this->strings = array( 'en' => array( 'new' => array( + 'single' => "The following loan has been registered in your name:", + 'multi' => "The following loans have been registered in your name:", 'expiry' => "expires on", 'serial' => "serial number", ), + 'extend' => array( + 'single' => "The following loan has been extended:", + 'multi' => "The following loans have been extended:", + 'expiry' => "extended to", + 'serial' => "serial number", + ), 'expiring' => array( 'single' => "The following loan expires in less than $days days:", 'multi' => "The following loans expire in less than $days days:", @@ -37,9 +45,17 @@ class Cron { ), 'sv' => array( 'new' => array( + 'single' => "Följande lån har registrerats på din användare:", + 'multi' => "Följande lån har registrerats på din användare:", 'expiry' => "går ut", 'serial' => "artikelnummer", ), + 'extend' => array( + 'single' => "Följande lån har förlängts:", + 'multi' => "Följande lån har förlängts:", + 'expiry' => "förlängt till", + 'serial' => "artikelnummer", + ), 'expiring' => array( 'single' => "Följande lån går ut om mindre än $days dagar:", 'multi' => "Följande lån går ut om mindre än $days dagar:", @@ -71,13 +87,16 @@ class Cron { $user = new User($row['user']); $since_time = $row['since_time']; - $notify_loans = array(); + $new_loans = array(); + $extended_loans = array(); foreach($user->get_loans('active') as $loan) { if($loan->get_starttime() >= $since_time) { - $notify_loans[] = $loan; + $new_loans[] = $loan; + } else if($loan->get_last_extension() >= $since_time) { + $extended_loans[] = $loan; } } - $this->send_receipt($user, $notify_loans); + $this->send_receipt($user, $new_loans, $extended_loans); $delete = prepare('delete from `pending_receipt` where `user` = ? and `send_time` < ?'); bind($delete, 'ii', $user->get_id(), $this->now->getTimestamp()); @@ -86,44 +105,70 @@ class Cron { commit_trans(); } - private function send_receipt($user, $loans) { + private function make_receipt_subject($num_new, $num_extended) { + $subject = "DSV Helpdesk: "; + $messages = array(); + if($num_new > 1) { + $messages[] = $num_new." nya"; + } else if($num_new > 0) { + $messages[] = $num_new." nytt"; + } + if($num_extended > 1) { + $messages[] = $num_extended." förlängda"; + } else if($num_extended > 0) { + $messages[] = $num_extended." förlängt"; + } + return $subject.implode(" och ", $messages)." lån"; + } + + private function send_receipt($user, $new, $extended) { $uid = $user->get_name(); $name = $this->ldap->get_firstname($uid); - $count = count($loans); - if($count > 1) { - $new_sv = "nya lån"; - $new_en = "new loans"; - $have = "have"; - } else { - $new_sv = "nytt lån"; - $new_en = "new loan"; - $have = "has"; + $new_count = count($new); + $extended_count = count($extended); + $subject = $this->make_receipt_subject($new_count, $extended_count); + + $list_sv = array(); + $list_en = array(); + if($new_count > 0) { + $list_sv[] = $this->make_notice('sv', 'new', $new); + $list_en[] = $this->make_notice('en', 'new', $new); } - $subject = "DSV Helpdesk: $count $new_sv"; + if($extended_count > 0) { + $list_sv[] = $this->make_notice('sv', 'extend', $extended); + $list_en[] = $this->make_notice('en', 'extend', $extended); + } + $list_sv = implode("\n\n", $list_sv); + $list_en = implode("\n\n", $list_en); - $intro_sv = ""; - $intro_en = "$count $new_en $have been registered to your user:"; - - $list_sv = $this->make_notice('sv', 'new', $loans); - $list_en = $this->make_notice('en', 'new', $loans); + $info_sv = array(); + $info_en = array(); + if($new_count > 0) { + $info_sv[] = "Eventuella artiklar du inte hämtat ut redan kan hämtas från Helpdesk."; + $info_en[] = "Any products you haven't already picked up can be collected from Helpdesk."; + } + $info_sv[] = "Svara på det här mailet om du har några frågor."; + $info_en[] = "Please reply to this email if you have any questions."; + $info_sv = implode(' ', $info_sv); + $info_en = implode(' ', $info_en); $message = <<<EOF Hej $name! -Det här är ett automatiskt meddelande om att $count $new_sv har registrerats på din användare: +Det här är ett automatiskt meddelande från Helpdesk. $list_sv -Eventuella artiklar du inte hämtat ut redan kan hämtas från Helpdesk. Svara på det här mailet om du har några frågor. +$info_sv ---- -This is an automated message to inform you that $count $new_en $have been registered in your name: +This is an automated message from Helpdesk. $list_en -Any products you haven't already picked up can be collected from Helpdesk. Please reply to this email if you have any questions. +$info_en Mvh DSV Helpdesk @@ -158,18 +203,18 @@ EOF; } } - private function make_subject($num_expiring, $num_expired) { + private function make_reminder_subject($num_expiring, $num_expired) { $subject = "DSV Helpdesk: "; $messages = array(); if($num_expiring > 0) { - $messages[] = $num_expiring." utgående lån"; + $messages[] = $num_expiring." utgående"; } if($num_expired > 1) { - $messages[] = $num_expired." försenade lån"; + $messages[] = $num_expired." försenade"; } elseif($num_expired > 0) { - $messages[] = $num_expired." försenat lån"; + $messages[] = $num_expired." försenat"; } - return $subject.implode(" och ", $messages); + return $subject.implode(" och ", $messages)." lån"; } private function make_notice($lang, $type, $list) { @@ -197,10 +242,6 @@ EOF; ." $serial, ".$strings['expiry']." $endtime"; } - if($type === 'new') { - return implode("\n", $lines); - } - $msg = $strings['single']; if(count($list) > 1) { $msg = $strings['multi']; @@ -244,7 +285,8 @@ EOF; $overdue_count = count($overdue); $total = $expiring_count + $overdue_count; - $subject = $this->make_subject($expiring_count, $overdue_count); + $subject = $this->make_reminder_subject($expiring_count, + $overdue_count); $info_sv = array(); $info_en = array();