Implemented receipts for loan extensions

This commit is contained in:
Erik Thuning 2022-07-27 13:53:18 +02:00
parent 1b8c2e1e18
commit 9307604aa0

@ -19,9 +19,17 @@ class Cron {
$this->strings = array( $this->strings = array(
'en' => array( 'en' => array(
'new' => 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", 'expiry' => "expires on",
'serial' => "serial number", '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( 'expiring' => array(
'single' => "The following loan expires in less than $days days:", 'single' => "The following loan expires in less than $days days:",
'multi' => "The following loans expire in less than $days days:", 'multi' => "The following loans expire in less than $days days:",
@ -37,9 +45,17 @@ class Cron {
), ),
'sv' => array( 'sv' => array(
'new' => 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", 'expiry' => "går ut",
'serial' => "artikelnummer", '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( 'expiring' => array(
'single' => "Följande lån går ut om mindre än $days dagar:", '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:", 'multi' => "Följande lån går ut om mindre än $days dagar:",
@ -71,13 +87,16 @@ class Cron {
$user = new User($row['user']); $user = new User($row['user']);
$since_time = $row['since_time']; $since_time = $row['since_time'];
$notify_loans = array(); $new_loans = array();
$extended_loans = array();
foreach($user->get_loans('active') as $loan) { foreach($user->get_loans('active') as $loan) {
if($loan->get_starttime() >= $since_time) { 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` $delete = prepare('delete from `pending_receipt`
where `user` = ? and `send_time` < ?'); where `user` = ? and `send_time` < ?');
bind($delete, 'ii', $user->get_id(), $this->now->getTimestamp()); bind($delete, 'ii', $user->get_id(), $this->now->getTimestamp());
@ -86,44 +105,70 @@ class Cron {
commit_trans(); 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(); $uid = $user->get_name();
$name = $this->ldap->get_firstname($uid); $name = $this->ldap->get_firstname($uid);
$count = count($loans); $new_count = count($new);
if($count > 1) { $extended_count = count($extended);
$new_sv = "nya lån"; $subject = $this->make_receipt_subject($new_count, $extended_count);
$new_en = "new loans";
$have = "have"; $list_sv = array();
} else { $list_en = array();
$new_sv = "nytt lån"; if($new_count > 0) {
$new_en = "new loan"; $list_sv[] = $this->make_notice('sv', 'new', $new);
$have = "has"; $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 = ""; $info_sv = array();
$intro_en = "$count $new_en $have been registered to your user:"; $info_en = array();
if($new_count > 0) {
$list_sv = $this->make_notice('sv', 'new', $loans); $info_sv[] = "Eventuella artiklar du inte hämtat ut redan kan hämtas från Helpdesk.";
$list_en = $this->make_notice('en', 'new', $loans); $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 $message = <<<EOF
Hej $name! Hej $name!
Det här är ett automatiskt meddelande om att $count $new_sv har registrerats din användare: Det här är ett automatiskt meddelande från Helpdesk.
$list_sv $list_sv
Eventuella artiklar du inte hämtat ut redan kan hämtas från Helpdesk. Svara 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 $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 Mvh
DSV Helpdesk 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: "; $subject = "DSV Helpdesk: ";
$messages = array(); $messages = array();
if($num_expiring > 0) { if($num_expiring > 0) {
$messages[] = $num_expiring." utgående lån"; $messages[] = $num_expiring." utgående";
} }
if($num_expired > 1) { if($num_expired > 1) {
$messages[] = $num_expired." försenade lån"; $messages[] = $num_expired." försenade";
} elseif($num_expired > 0) { } 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) { private function make_notice($lang, $type, $list) {
@ -197,10 +242,6 @@ EOF;
." $serial, ".$strings['expiry']." $endtime"; ." $serial, ".$strings['expiry']." $endtime";
} }
if($type === 'new') {
return implode("\n", $lines);
}
$msg = $strings['single']; $msg = $strings['single'];
if(count($list) > 1) { if(count($list) > 1) {
$msg = $strings['multi']; $msg = $strings['multi'];
@ -244,7 +285,8 @@ EOF;
$overdue_count = count($overdue); $overdue_count = count($overdue);
$total = $expiring_count + $overdue_count; $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_sv = array();
$info_en = array(); $info_en = array();