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(
'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 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 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();