2021-06-05 00:30:48 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Garradin\Plugin\Materiels;
|
|
|
|
|
|
|
|
use Garradin\DB;
|
2021-06-06 18:41:59 +02:00
|
|
|
use Garradin\Plugin\Materiels\Category;
|
2021-06-05 00:30:48 +02:00
|
|
|
|
|
|
|
class Equipment
|
|
|
|
{
|
2021-06-05 11:04:30 +02:00
|
|
|
public function add($data = [])
|
|
|
|
{
|
|
|
|
$db = DB::getInstance();
|
|
|
|
$db->insert('plugin_materiels_equipment', $data);
|
|
|
|
return $db->lastInsertRowId();
|
|
|
|
}
|
2021-06-05 13:08:55 +02:00
|
|
|
|
2021-06-05 16:45:03 +02:00
|
|
|
public function edit($id, $data = [])
|
|
|
|
{
|
|
|
|
$db = DB::getInstance();
|
|
|
|
$db->update('plugin_materiels_equipment', $data, $db->where('id', $id));
|
|
|
|
}
|
|
|
|
|
2021-06-05 13:52:32 +02:00
|
|
|
public function get($id)
|
|
|
|
{
|
|
|
|
return DB::getInstance()->first('SELECT * FROM plugin_materiels_equipment WHERE id = ?;', $id);
|
|
|
|
}
|
|
|
|
|
2021-06-06 18:41:59 +02:00
|
|
|
public function listAllByCategory()
|
|
|
|
{
|
2021-06-07 18:30:20 +02:00
|
|
|
$category = new Category;
|
|
|
|
$cats = $category->listAll();
|
2021-06-06 18:41:59 +02:00
|
|
|
$eqmts_by_cat = array();
|
|
|
|
foreach ($cats as $cat) {
|
2021-06-07 18:30:20 +02:00
|
|
|
$eqmts_by_cat[$cat->name] = $category->listAllEquipments($cat->id);
|
2021-06-06 18:41:59 +02:00
|
|
|
}
|
|
|
|
return $eqmts_by_cat;
|
|
|
|
}
|
2021-06-07 18:30:20 +02:00
|
|
|
|
|
|
|
public function CalculateStock($id)
|
|
|
|
{
|
|
|
|
$entries = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_entry WHERE kind IN (
|
|
|
|
'Achat', 'Don', 'Récupération') AND equipment_id = ?;", $id);
|
|
|
|
$outputs = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_output WHERE kind IN (
|
|
|
|
'Vente', 'Don', 'Besoin', 'Autre (perte, vol, ...)') AND equipment_id = ?;", $id);
|
|
|
|
return $entries - $outputs;
|
|
|
|
}
|
|
|
|
|
2021-06-08 00:23:17 +02:00
|
|
|
public function CalculateOutOfStock($id)
|
|
|
|
{
|
|
|
|
$entries = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_entry WHERE kind = 'Retour de location / prêt' AND equipment_id = ?;", $id);
|
|
|
|
$outputs = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_output WHERE kind = 'Location / Prêt' AND equipment_id = ?;", $id);
|
|
|
|
return $outputs - $entries;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function CalculateNoOwned($id)
|
|
|
|
{
|
|
|
|
$entries = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_entry WHERE kind = 'Location / Prêt' AND equipment_id = ?;", $id);
|
|
|
|
$outputs = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_output WHERE kind = 'Retour de location / prêt' AND equipment_id = ?;", $id);
|
|
|
|
return $entries - $outputs;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function GetAllListByCategory()
|
2021-06-07 18:30:20 +02:00
|
|
|
{
|
|
|
|
$eqmts_by_cat = $this->listAllByCategory();
|
|
|
|
$eqmts_owned_by_cat = array();
|
2021-06-08 00:23:17 +02:00
|
|
|
$eqmts_no_owned_by_cat = array();
|
|
|
|
$eqmts_just_listed_by_cat = array();
|
2021-06-07 18:30:20 +02:00
|
|
|
foreach ($eqmts_by_cat as $cat => $eqmts) {
|
|
|
|
$eqmts_owned = array();
|
2021-06-08 00:23:17 +02:00
|
|
|
$eqmts_no_owned = array();
|
|
|
|
$eqmts_just_listed = array();
|
2021-06-07 18:30:20 +02:00
|
|
|
foreach ($eqmts as $eqmt) {
|
2021-06-08 00:23:17 +02:00
|
|
|
$stock = $this->CalculateStock($eqmt->id);
|
|
|
|
if ($stock) {
|
|
|
|
$eqmt->stock = $stock;
|
|
|
|
$out_of_stock = $this->CalculateOutOfStock($eqmt->id);
|
|
|
|
if ($out_of_stock) {
|
|
|
|
$eqmt->out_of_stock = $out_of_stock;
|
|
|
|
} else {
|
|
|
|
$eqmt->out_of_stock = 0;
|
|
|
|
}
|
|
|
|
array_push($eqmts_owned, $eqmt);
|
|
|
|
}
|
|
|
|
$no_owned = $this->CalculateNoOwned($eqmt->id);
|
|
|
|
if ($no_owned) {
|
|
|
|
$eqmt->no_owned = $no_owned;
|
|
|
|
array_push($eqmts_no_owned, $eqmt);
|
|
|
|
}
|
|
|
|
if ($stock + $no_owned == 0) {
|
|
|
|
array_push($eqmts_just_listed, $eqmt);
|
|
|
|
}
|
2021-06-07 18:30:20 +02:00
|
|
|
}
|
|
|
|
$eqmts_owned_by_cat[$cat] = $eqmts_owned;
|
2021-06-08 00:23:17 +02:00
|
|
|
$eqmts_no_owned_by_cat[$cat] = $eqmts_no_owned;
|
|
|
|
$eqmts_just_listed_by_cat[$cat] = $eqmts_just_listed;
|
2021-06-07 18:30:20 +02:00
|
|
|
}
|
2021-06-08 00:23:17 +02:00
|
|
|
return array(
|
|
|
|
$eqmts_owned_by_cat, $eqmts_no_owned_by_cat,
|
|
|
|
$eqmts_just_listed_by_cat
|
|
|
|
);
|
2021-06-07 18:30:20 +02:00
|
|
|
}
|
2021-06-09 17:58:48 +02:00
|
|
|
|
2021-06-10 00:05:45 +02:00
|
|
|
public function CalculateAvailable($id)
|
|
|
|
{
|
|
|
|
$entries = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_entry WHERE kind IN (
|
|
|
|
'Achat', 'Don', 'Récupération',
|
|
|
|
'Retour de location / prêt') AND equipment_id = ?;", $id);
|
|
|
|
$outputs = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_output WHERE kind IN (
|
|
|
|
'Vente', 'Don', 'Besoin', 'Autre (perte, vol, ...)',
|
|
|
|
'Location / Prêt') AND equipment_id = ?;", $id);
|
|
|
|
return $entries - $outputs;
|
|
|
|
}
|
|
|
|
|
2021-06-09 17:58:48 +02:00
|
|
|
public function GetAvailableListByCategory()
|
|
|
|
{
|
|
|
|
$eqmts_by_cat = $this->listAllByCategory();
|
|
|
|
$eqmts_available_by_cat = array();
|
|
|
|
foreach ($eqmts_by_cat as $cat => $eqmts) {
|
|
|
|
$eqmts_available = array();
|
|
|
|
foreach ($eqmts as $eqmt) {
|
|
|
|
$available = $this->CalculateAvailable($eqmt->id);
|
|
|
|
if ($available) {
|
|
|
|
$eqmt->available = $available;
|
|
|
|
array_push($eqmts_available, $eqmt);
|
|
|
|
}
|
|
|
|
}
|
2021-06-10 15:17:54 +02:00
|
|
|
if ($eqmts_available) {
|
|
|
|
$eqmts_available_by_cat[$cat] = $eqmts_available;
|
|
|
|
}
|
2021-06-09 17:58:48 +02:00
|
|
|
}
|
|
|
|
return $eqmts_available_by_cat;
|
|
|
|
}
|
2021-06-10 15:17:54 +02:00
|
|
|
|
|
|
|
public function CalculateAvailableByDate($id, $date)
|
|
|
|
{
|
|
|
|
$entries = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_entry WHERE kind IN (
|
|
|
|
'Achat', 'Don', 'Récupération',
|
|
|
|
'Retour de location / prêt') AND equipment_id = '{$id}' AND entry_date <= '{$date}';");
|
|
|
|
$outputs = DB::getInstance()->firstColumn(
|
|
|
|
"SELECT sum(equipment_number) FROM plugin_materiels_output WHERE kind IN (
|
|
|
|
'Vente', 'Don', 'Besoin', 'Autre (perte, vol, ...)',
|
|
|
|
'Location / Prêt') AND equipment_id = '{$id}' AND output_date <= '{$date}';");
|
|
|
|
return $entries - $outputs;
|
|
|
|
}
|
2021-06-05 00:30:48 +02:00
|
|
|
}
|