110 lines
3.2 KiB
PHP
110 lines
3.2 KiB
PHP
<?php
|
|
class Service {
|
|
private $id = 0;
|
|
private $product = 0;
|
|
private $starttime = 0;
|
|
private $returntime = null;
|
|
|
|
public static function create_service($product) {
|
|
$status = $product->get_status();
|
|
if($status != 'available') {
|
|
$emsg = '';
|
|
$prod_id = $product->get_id();
|
|
switch($status) {
|
|
case 'on_loan':
|
|
case 'overdue':
|
|
$loan_id = $product->get_active_loan()->get_id();
|
|
$emsg = "Product $prod_id has an active ";
|
|
$emsg .= "loan (id $loan_id).";
|
|
break;
|
|
case 'discarded':
|
|
$emsg = "Product $prod_id has been discarded.";
|
|
break;
|
|
case 'service':
|
|
$service_id = $product->get_active_service()->get_id();
|
|
$emsg = "Product $prod_id is on service "
|
|
."(id $service_id) already.";
|
|
break;
|
|
}
|
|
throw new Exception($emsg);
|
|
}
|
|
$now = time();
|
|
$insert = prepare('insert into
|
|
`service`(`product`, `starttime`)
|
|
values (?, ?)');
|
|
bind($insert, 'ii', $product->get_id(), $now);
|
|
execute($insert);
|
|
$service_id = $insert->insert_id;
|
|
return new Loan($service_id);
|
|
}
|
|
|
|
public function __construct($id) {
|
|
$search = prepare('select `id` from `service`
|
|
where `id`=?');
|
|
bind($search, 'i', $id);
|
|
execute($search);
|
|
$result = result_single($search);
|
|
if($result === null) {
|
|
throw new Exception('Service does not exist.');
|
|
}
|
|
$this->id = $result['id'];
|
|
$this->update_fields();
|
|
}
|
|
|
|
private function update_fields() {
|
|
$get = prepare('select * from `service` where `id`=?');
|
|
bind($get, 'i', $this->id);
|
|
execute($get);
|
|
$loan = result_single($get);
|
|
$this->product = $loan['product'];
|
|
$this->starttime = $loan['starttime'];
|
|
$this->returntime = $loan['returntime'];
|
|
}
|
|
|
|
public function get_id() {
|
|
return $this->id;
|
|
}
|
|
|
|
public function get_user() {
|
|
return 'Service';
|
|
}
|
|
|
|
public function get_product() {
|
|
return new Product($this->product);
|
|
}
|
|
|
|
public function get_duration($format = true) {
|
|
$style = function($time) {
|
|
return $time;
|
|
};
|
|
if($format) {
|
|
$style = function($time) {
|
|
if($time) {
|
|
return gmdate('Y-m-d', $time);
|
|
}
|
|
return $time;
|
|
};
|
|
}
|
|
return array('start' => $style($this->starttime),
|
|
'end' => '',
|
|
'return' => $style($this->returntime));
|
|
}
|
|
|
|
public function is_active() {
|
|
if($this->returntime === null) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function end() {
|
|
$now = time();
|
|
$query = prepare('update `service` set `returntime`=? where `id`=?');
|
|
bind($query, 'ii', $now, $this->id);
|
|
execute($query);
|
|
$this->returntime = $now;
|
|
return true;
|
|
}
|
|
}
|
|
?>
|