Added HotelManager Availability page
This commit is contained in:
parent
2f3925dd95
commit
abc00dcca2
5 changed files with 199 additions and 4 deletions
|
@ -85,7 +85,36 @@ if ($_SESSION['USER']->isLoggedIn() && $_SESSION['USER']->getType() == 'Accomoda
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'date':
|
case 'date':
|
||||||
require_once(VIEW_PATH . $path[1] . '_' . $path[0] . '.php');
|
if ($_SESSION['USER']->getAccomodationId()) {
|
||||||
|
$allRange = AccomodationLoad::getByAccomodationId($_SESSION['USER']->getAccomodationId());
|
||||||
|
/*
|
||||||
|
* Formulaire POST
|
||||||
|
*/
|
||||||
|
$filteredPost = [];
|
||||||
|
forEach($_POST as $key=>$value){
|
||||||
|
$parts = explode('-', $key);
|
||||||
|
$last = array_pop($parts);
|
||||||
|
$parts = array(implode('-', $parts), $last);
|
||||||
|
if(array_key_exists($parts[0],$allRange)){
|
||||||
|
/*
|
||||||
|
* Update count
|
||||||
|
*/
|
||||||
|
$col = $parts[1];
|
||||||
|
if(in_array($col, ['beds','rooms'])){
|
||||||
|
$filteredPost[$parts[0]][$col] = (int)$value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(count($filteredPost) > 0){
|
||||||
|
AccomodationLoad::setAccomodationLoad($_SESSION['USER']->getAccomodationId(), $filteredPost);
|
||||||
|
$allRange = AccomodationLoad::getByAccomodationId($_SESSION['USER']->getAccomodationId());
|
||||||
|
}
|
||||||
|
|
||||||
|
$accomodation = Accomodation::fetchByUser($_SESSION['USER']);
|
||||||
|
require_once(VIEW_PATH . $path[1] . '_' . $path[0] . '.php');
|
||||||
|
} else {
|
||||||
|
redirect();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
redirect();
|
redirect();
|
||||||
|
|
122
models/AccomodationLoad.php
Normal file
122
models/AccomodationLoad.php
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
class AccomodationLoad extends Model
|
||||||
|
{
|
||||||
|
private $data;
|
||||||
|
|
||||||
|
public function __construct($data = null)
|
||||||
|
{
|
||||||
|
parent::__construct();
|
||||||
|
$_col = get_class()::getColumns();
|
||||||
|
if($data !== null){
|
||||||
|
forEach($data as $key=>$value){
|
||||||
|
if(!key_exists($key, $_col)){
|
||||||
|
throw new Exception('Invalid data entry');
|
||||||
|
}else{
|
||||||
|
$this->data[$key] = $value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Getters
|
||||||
|
*/
|
||||||
|
public function getAccomodationId(): string
|
||||||
|
{
|
||||||
|
if(isset($this->data['AccomodationId']))
|
||||||
|
return $this->data['AccomodationId'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public function getDate(): string
|
||||||
|
{
|
||||||
|
if(isset($this->data['date']))
|
||||||
|
return $this->data['date'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public function getBedCount(): string
|
||||||
|
{
|
||||||
|
if(isset($this->data['beds']))
|
||||||
|
return $this->data['beds'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
public function getRoomCount(): string
|
||||||
|
{
|
||||||
|
if(isset($this->data['rooms']))
|
||||||
|
return $this->data['rooms'];
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getByAccomodationId($AccomodationId)
|
||||||
|
{
|
||||||
|
$output = AccomodationLoad::getRange();
|
||||||
|
$data = AccomodationLoad::fetch(array(['AccomodationId','=', $AccomodationId]));
|
||||||
|
forEach($data as $acomLoad){
|
||||||
|
if(key_exists($acomLoad->getDate(),$output)){
|
||||||
|
$output[$acomLoad->getDate()] = ["beds" => (int)$acomLoad->getBedCount(), "rooms" => (int)$acomLoad->getRoomCount()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Setters
|
||||||
|
*/
|
||||||
|
public static function setAccomodationLoad($AccomodationId, $data)
|
||||||
|
{
|
||||||
|
$toUpdate = [];
|
||||||
|
$toInsert = [];
|
||||||
|
$currentDBs = [];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get in DBs
|
||||||
|
*/
|
||||||
|
$ranges = AccomodationLoad::getRange();
|
||||||
|
$dataLoad = AccomodationLoad::fetch(array(['AccomodationId','=', $AccomodationId]));
|
||||||
|
forEach($dataLoad as $acomLoad){
|
||||||
|
if(key_exists($acomLoad->getDate(),$ranges)){
|
||||||
|
$currentDBs[$acomLoad->getDate()] = ["beds" => (int)$acomLoad->getBedCount(), "rooms" => (int)$acomLoad->getRoomCount()];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fill Update/Insert List
|
||||||
|
*/
|
||||||
|
forEach($data as $date=>$updatedValue){
|
||||||
|
if(key_exists($date, $currentDBs)){
|
||||||
|
$toUpdate[$date] = $updatedValue;
|
||||||
|
}
|
||||||
|
$toInsert[$date] = $updatedValue;
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
* Building Queries
|
||||||
|
*/
|
||||||
|
// Delete the UpdateList
|
||||||
|
$q_delete = 'DELETE FROM AccomodationLoad WHERE AccomodationId = ' .(int)$AccomodationId. ' AND date IN (' .join(', ', array_map(function ($i){ return "'" . $i . "'"; },array_keys($toUpdate))). ')';
|
||||||
|
// Insert the Items
|
||||||
|
$q_insert = 'INSERT INTO AccomodationLoad VALUES ' . str_replace('%AccomodationId%' , $AccomodationId, join(', ', array_map(function ($i){ return "(" . $i . ")"; },array_map(function ($i,$toInsert){ return "%AccomodationId% , '" . $i . "', " .$toInsert['beds']. ", " . $toInsert['rooms'];},array_keys($toInsert),$toInsert))));
|
||||||
|
if(count($toUpdate) > 0){
|
||||||
|
$q = AccomodationLoad::$db->prepare($q_delete);
|
||||||
|
$q->execute();
|
||||||
|
}
|
||||||
|
if(count($toInsert) > 0){
|
||||||
|
$q = AccomodationLoad::$db->prepare($q_insert);
|
||||||
|
return($q->execute() == true);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function getRange(){
|
||||||
|
$dates = [date_create("2021-05-11"), date_create("2021-05-23")];
|
||||||
|
$output = [];
|
||||||
|
$period = new DatePeriod(
|
||||||
|
$dates[0],
|
||||||
|
new DateInterval('P1D'),
|
||||||
|
$dates[1]
|
||||||
|
);
|
||||||
|
foreach ($period as $key => $value) {
|
||||||
|
$output[$value->format('Y-m-d')] = ["beds" => 0, "rooms" => 0];
|
||||||
|
}
|
||||||
|
return $output;
|
||||||
|
}
|
||||||
|
}
|
|
@ -26,6 +26,15 @@ function redirect($route = WEBSITE_DEFAULT_PATH){
|
||||||
/*
|
/*
|
||||||
* Front-end render
|
* Front-end render
|
||||||
*/
|
*/
|
||||||
|
# Date
|
||||||
|
function dateToFrench($date, $format)
|
||||||
|
{
|
||||||
|
$english_days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');
|
||||||
|
$french_days = array('lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimanche');
|
||||||
|
$english_months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
|
||||||
|
$french_months = array('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre');
|
||||||
|
return str_replace($english_months, $french_months, str_replace($english_days, $french_days, date($format, strtotime($date) ) ) );
|
||||||
|
}
|
||||||
# Assets path generator
|
# Assets path generator
|
||||||
function assetsPath($path, $level = 0){
|
function assetsPath($path, $level = 0){
|
||||||
return str_repeat('../', $level) . $path;
|
return str_repeat('../', $level) . $path;
|
||||||
|
|
|
@ -2,8 +2,43 @@
|
||||||
require_once('template/head.php');
|
require_once('template/head.php');
|
||||||
?>
|
?>
|
||||||
<div class="container-fluid section">
|
<div class="container-fluid section">
|
||||||
<form action="">
|
<form action="" method="POST">
|
||||||
|
<div class="card border border-dark mb-3">
|
||||||
|
<div class="card-body text-dark">
|
||||||
|
<h3 class="card-title">Gestion des disponibilités de "<?= $accomodation->getName() ?>"</h3>
|
||||||
|
<div style="margin: auto;">
|
||||||
|
<?php
|
||||||
|
$rowCount = 0;
|
||||||
|
$maxPerRow = 4;
|
||||||
|
$mdCalc = ceil(12 / $maxPerRow);
|
||||||
|
foreach ($allRange as $date => $vol) {
|
||||||
|
if ($rowCount == 0) {
|
||||||
|
echo '<div class="row" style="padding-top: 15px">';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<div class="col-md-<?= $mdCalc ?>">
|
||||||
|
<label for="<?= $date; ?>"><?=dateToFrench($date, "j F Y");?></label>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<span class="input-group-text" id="lit<?= $date; ?>">Nb de Lits</span>
|
||||||
|
<input type="text" class="form-control" placeholder="0" aria-label="lit<?= $date; ?>" name="<?= $date; ?>-beds" value="<?=$vol['beds']?>">
|
||||||
|
</div>
|
||||||
|
<div class="input-group mb-3">
|
||||||
|
<span class="input-group-text" id="<?= $date; ?>">Nb de Chambres</span>
|
||||||
|
<input type="text" class="form-control" placeholder="0" aria-label="<?= $date; ?>" name="<?= $date; ?>-rooms" value="<?=$vol['rooms']?>">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
$rowCount++;
|
||||||
|
if ($rowCount == $maxPerRow) {
|
||||||
|
echo '</div>';
|
||||||
|
$rowCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn-success"><h1>VALIDER</h1></button>
|
||||||
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<?php
|
<?php
|
||||||
|
|
|
@ -25,7 +25,7 @@ require_once('template/head.php');
|
||||||
<td><?=htmlspecialchars($hotel->getAddress()) . ', ' . $hotel->getPostalCode() ?></td>
|
<td><?=htmlspecialchars($hotel->getAddress()) . ', ' . $hotel->getPostalCode() ?></td>
|
||||||
<td><?=htmlspecialchars($hotel->getType())?></td>
|
<td><?=htmlspecialchars($hotel->getType())?></td>
|
||||||
<td><?=$hotel->getServices() ? htmlspecialchars(join(',',$hotel->getServices())) : "Aucun" ?></td>
|
<td><?=$hotel->getServices() ? htmlspecialchars(join(',',$hotel->getServices())) : "Aucun" ?></td>
|
||||||
<td>0</td>
|
<td><?=count(AccomodationReservation::fetchByAccomodationId($hotel->getId()))?></td>
|
||||||
<td><a href="<?=genURL('manager/' . $hotel->getId() . '/view')?>" class="btn btn-primary">Editer une reservation</a></td>
|
<td><a href="<?=genURL('manager/' . $hotel->getId() . '/view')?>" class="btn btn-primary">Editer une reservation</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<?php
|
<?php
|
||||||
|
|
Reference in a new issue