Initial implementation of loan receipts
This commit is contained in:
parent
04af074849
commit
311402e1b8
105
include/Cron.php
105
include/Cron.php
@ -18,6 +18,10 @@ class Cron {
|
|||||||
$days = $this->warn_time->d;
|
$days = $this->warn_time->d;
|
||||||
$this->strings = array(
|
$this->strings = array(
|
||||||
'en' => array(
|
'en' => array(
|
||||||
|
'new' => array(
|
||||||
|
'expiry' => "expires on",
|
||||||
|
'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:",
|
||||||
@ -32,6 +36,10 @@ class Cron {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
'sv' => array(
|
'sv' => array(
|
||||||
|
'new' => array(
|
||||||
|
'expiry' => "går ut",
|
||||||
|
'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:",
|
||||||
@ -49,6 +57,81 @@ class Cron {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function run() {
|
public function run() {
|
||||||
|
$this->run_receipts();
|
||||||
|
$this->run_reminders();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function run_receipts() {
|
||||||
|
begin_trans();
|
||||||
|
$get = prepare('select * from `pending_receipt`
|
||||||
|
where `send_time` < ?');
|
||||||
|
bind($get, 'i', $this->now->getTimestamp());
|
||||||
|
execute($get);
|
||||||
|
foreach(result_list($get) as $row) {
|
||||||
|
$user = new User($row['user']);
|
||||||
|
$since_time = $row['since_time'];
|
||||||
|
|
||||||
|
$notify_loans = array();
|
||||||
|
foreach($user->get_loans('active') as $loan) {
|
||||||
|
if($loan->get_starttime() >= $since_time) {
|
||||||
|
$notify_loans[] = $loan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->send_receipt($user, $loans);
|
||||||
|
$delete = prepare('delete from `pending_receipt`
|
||||||
|
where `user = ? and `send_time` < ?');
|
||||||
|
bind($delete, 'ii', $user->get_id(), $this->now->getTimestamp());
|
||||||
|
execute($delete);
|
||||||
|
}
|
||||||
|
commit_trans();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function send_receipt($user, $loans) {
|
||||||
|
$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";
|
||||||
|
}
|
||||||
|
$subject = "DSV Helpdesk: $count $new_sv";
|
||||||
|
|
||||||
|
$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);
|
||||||
|
|
||||||
|
$message = <<<EOF
|
||||||
|
Hej $name!
|
||||||
|
|
||||||
|
Det här är ett automatiskt meddelande om att $count $new_sv har registrerats på din användare:
|
||||||
|
|
||||||
|
$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.
|
||||||
|
|
||||||
|
----
|
||||||
|
|
||||||
|
This is an automated message to inform you that $count $new_en $have been registered in your name:
|
||||||
|
|
||||||
|
$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.
|
||||||
|
|
||||||
|
Mvh
|
||||||
|
DSV Helpdesk
|
||||||
|
helpdesk@dsv.su.se
|
||||||
|
08 - 16 16 48
|
||||||
|
|
||||||
|
EOF;
|
||||||
|
$this->send_email($uid, $subject, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function run_reminders() {
|
||||||
$lastrun = $this->kvs->get_value('lastrun', 0);
|
$lastrun = $this->kvs->get_value('lastrun', 0);
|
||||||
$nextrun = $this->now
|
$nextrun = $this->now
|
||||||
->setTimestamp($lastrun)
|
->setTimestamp($lastrun)
|
||||||
@ -99,11 +182,6 @@ class Cron {
|
|||||||
}
|
}
|
||||||
$strings = $strings[$type];
|
$strings = $strings[$type];
|
||||||
|
|
||||||
$msg = $strings['single'];
|
|
||||||
if(count($list) > 1) {
|
|
||||||
$msg = $strings['multi'];
|
|
||||||
}
|
|
||||||
|
|
||||||
$lines = array();
|
$lines = array();
|
||||||
foreach($list as $loan) {
|
foreach($list as $loan) {
|
||||||
$product = $loan->get_product();
|
$product = $loan->get_product();
|
||||||
@ -115,6 +193,15 @@ class Cron {
|
|||||||
$lines[] = "$brand $name, ".$strings['serial']
|
$lines[] = "$brand $name, ".$strings['serial']
|
||||||
." $serial, ".$strings['expiry']." $endtime";
|
." $serial, ".$strings['expiry']." $endtime";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($type === 'new') {
|
||||||
|
return implode("\n", $lines);
|
||||||
|
}
|
||||||
|
|
||||||
|
$msg = $strings['single'];
|
||||||
|
if(count($list) > 1) {
|
||||||
|
$msg = $strings['multi'];
|
||||||
|
}
|
||||||
return $msg."\n\n".implode("\n", $lines);
|
return $msg."\n\n".implode("\n", $lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,6 +282,10 @@ helpdesk@dsv.su.se
|
|||||||
08 - 16 16 48
|
08 - 16 16 48
|
||||||
|
|
||||||
EOF;
|
EOF;
|
||||||
|
$this->send_email($uid, $subject, $message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function send_email($uid, $subject, $message) {
|
||||||
try {
|
try {
|
||||||
mb_send_mail($this->ldap->get_user_email($uid),
|
mb_send_mail($this->ldap->get_user_email($uid),
|
||||||
$subject,
|
$subject,
|
||||||
@ -203,8 +294,8 @@ EOF;
|
|||||||
} catch(Exception $e) {
|
} catch(Exception $e) {
|
||||||
error_log($e->message);
|
error_log($e->message);
|
||||||
mb_send_mail($this->error,
|
mb_send_mail($this->error,
|
||||||
"Kunde inte skicka påminnelse",
|
"Kunde inte skicka mail",
|
||||||
"Påminnelse kunde inte skickas till ".$uid);
|
"Mail kunde inte skickas till ".$uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,8 +12,22 @@ class Loan extends Event {
|
|||||||
$endtime .= '13:00';
|
$endtime .= '13:00';
|
||||||
bind($insert, 'iii', $event_id, $user->get_id(), strtotime($endtime));
|
bind($insert, 'iii', $event_id, $user->get_id(), strtotime($endtime));
|
||||||
execute($insert);
|
execute($insert);
|
||||||
|
$loan = new Loan($event_id);
|
||||||
|
|
||||||
|
$now = time();
|
||||||
|
$pending = prepare('select * from `pending_receipt` where `user` = ?
|
||||||
|
and `since_time` < ? and `send_time` > ?');
|
||||||
|
bind($pending, 'iii', $user->get_id(), $now, $now);
|
||||||
|
execute($pending);
|
||||||
|
if(result_single($pending) === null) {
|
||||||
|
$add = prepare('insert into `pending_receipt`
|
||||||
|
(`user`, `since_time`, `send_time`)
|
||||||
|
values(?, ?, ?)');
|
||||||
|
bind($add, 'iii', $user->get_id(), $now, $now + 3600);
|
||||||
|
execute($add);
|
||||||
|
}
|
||||||
commit_trans();
|
commit_trans();
|
||||||
return new Loan($event_id);
|
return $loan;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __construct($id) {
|
public function __construct($id) {
|
||||||
|
9
pending_receipts.sql
Normal file
9
pending_receipts.sql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
create table `pending_receipt` (
|
||||||
|
`user` bigint(20) not null,
|
||||||
|
primary key (`user`),
|
||||||
|
constraint `pr_f_user`
|
||||||
|
foreign key(`user`) references `user`(`id`),
|
||||||
|
`send_time` bigint(20) not null,
|
||||||
|
`since_time` bigint(20) not null
|
||||||
|
) character set utf8mb4,
|
||||||
|
collate utf8mb4_unicode_ci;
|
Loading…
x
Reference in New Issue
Block a user