From 4e9e5b93af0bac7343e37854402112dfef8c0fe4 Mon Sep 17 00:00:00 2001
From: Erik Thuning <boooink@gmail.com>
Date: Wed, 27 Jul 2022 11:04:09 +0200
Subject: [PATCH] Added a function to get the latest loan extension. Broke
 receipt queueing into a function. Changed $this->id to $this->get_id() for
 the sake of consistency.

---
 include/Loan.php | 61 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 43 insertions(+), 18 deletions(-)

diff --git a/include/Loan.php b/include/Loan.php
index cb7f0ae..2640d73 100644
--- a/include/Loan.php
+++ b/include/Loan.php
@@ -13,19 +13,7 @@ class Loan extends Event {
         bind($insert, 'iii', $event_id, $user->get_id(), strtotime($endtime));
         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);
-        }
+        $loan->queue_receipt($user);
         commit_trans();
         return $loan;
     }
@@ -45,13 +33,28 @@ class Loan extends Event {
     protected function update_fields() {
         parent::update_fields();
         $get = prepare('select * from `loan` where `event`=?');
-        bind($get, 'i', $this->id);
+        bind($get, 'i', $this->get_id());
         execute($get);
         $loan = result_single($get);
         $this->user = $loan['user'];
         $this->endtime = $loan['endtime'];
     }
 
+    protected function queue_receipt($user) {
+        $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);
+        }
+    }
+
     public function get_user() {
         return new User($this->user);
     }
@@ -61,18 +64,40 @@ class Loan extends Event {
     }
 
     public function extend($time) {
+        $oldend = $this->get_endtime();
+        $now = time();
         $ts = strtotime($time . ' 13:00');
-        $query = prepare('update `loan` set `endtime`=? where `event`=?');
-        bind($query, 'ii', $ts, $this->id);
-        execute($query);
+
+        begin_trans();
+        $extend = prepare('update `loan` set `endtime`=? where `event`=?');
+        bind($extend, 'ii', $ts, $this->get_id());
+        execute($extend);
+
+        $log = prepare('insert into `loan_extension`
+                            (`loan`, `extend_time`, `old_end`, `new_end`)
+                            values (?, ?, ?, ?)');
+        bind($log, 'iiii', $this->get_id(), $now, $oldend, $ts);
+        execute($log);
+
+        $this->queue_receipt($this->get_user());
+
         $this->endtime = $ts;
+        commit_trans();
         return true;
     }
 
+    public function get_last_extension() {
+        $select = prepare('select max(`extend_time`) as `extend_time`
+                           from `loan_extension` where `loan`=?');
+        bind($select, 'i', $this->get_id());
+        execute($select);
+        return result_single($select)['max(`extend_time`)'];
+    }
+
     public function end() {
         $now = time();
         $query = prepare('update `event` set `returntime`=? where `id`=?');
-        bind($query, 'ii', $now, $this->id);
+        bind($query, 'ii', $now, $this->get_id());
         execute($query);
         $this->returntime = $now;
         return true;