insert('plugin_materiels_equipment', $data); return $db->lastInsertRowId(); } public function edit($id, $data = []) { $db = DB::getInstance(); $db->update('plugin_materiels_equipment', $data, $db->where('id', $id)); } public function get($id) { return DB::getInstance()->first('SELECT * FROM plugin_materiels_equipment WHERE id = ?;', $id); } public function listAllByCategory() { $category = new Category; $cats = $category->listAll(); $eqmts_by_cat = array(); foreach ($cats as $cat) { $eqmts_by_cat[$cat->name] = $category->listAllEquipments($cat->id); } return $eqmts_by_cat; } 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; } 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 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; } public function GetAllListByCategory() { $eqmts_by_cat = $this->listAllByCategory(); $eqmts_owned_by_cat = array(); $eqmts_no_owned_by_cat = array(); $eqmts_just_listed_by_cat = array(); foreach ($eqmts_by_cat as $cat => $eqmts) { $eqmts_owned = array(); $eqmts_no_owned = array(); $eqmts_just_listed = array(); foreach ($eqmts as $eqmt) { $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); } } $eqmts_owned_by_cat[$cat] = $eqmts_owned; $eqmts_no_owned_by_cat[$cat] = $eqmts_no_owned; $eqmts_just_listed_by_cat[$cat] = $eqmts_just_listed; } return array( $eqmts_owned_by_cat, $eqmts_no_owned_by_cat, $eqmts_just_listed_by_cat ); } 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); } } $eqmts_available_by_cat[$cat] = $eqmts_available; } return $eqmts_available_by_cat; } }