Créé en 2020 et modifié le 18 May 2021

Créé en 2020 et modifié le 18 May 2021

Réservation d’une chambre

 

 

 

 

Intro

  • réaliser le diagramme de déploiement  de l’application

 

Partie 1 – disponibilités

Livrable gitlab : otelo/mission6/…

  • vérifier que la clef étrangère catégorie de la table chambre s’appelle categorie_id
  • afficher les chambres d’une catégorie
class Chambre extends Model{
  public function categorie(){
    return $this->belongsTo('App\Categorie');
  }
}

class Categorie extends Model{
  public function chambres(){
  return $this->hasMany('App\Chambre');
}



dans controleur

$categorie = Categorie::where('id',3)->->firstOrFail();
//obtention des chambres
$chambres=$categorie ->chambres();
//renvoie vers vue puis foreach ou dd($categorie ->chambres())

//obtention de la categorie d'une chambre 
//$chambre = Chambre::where('id',1)->firstOrFail(); 
//$cat=$chambre->categorie;
  • réaliser l’URI GET disponibilites qui renvoie la liste des chambres disponibles selon la date de debut, la date de fin et la catégorie en JSON.
public function dispo()
    {
        $chambres = DB::select('select chambre.id, nbCouchage, porte, etage,libelle ,baignoire from chambre inner join categories on chambre.categorie_id = categories.id
        where chambre.categorie_id=? and       
       chambre.id not in (select reservation.idChambre from reservation where
               dateD<? or dateF>?)', [3,'2021-03-03', '2021-03-01'] );
         
       // return view('chambres',['chambres' => $chambres]);
       return response()->json($chambres);


    }
  • Chaque ligne devra faire apparaître le prix de base par jour et la description de la chambre. cf note pour réaliser obtenir toutes les chambre d’une catégorie

Partie 2 – recherche

Livrable gitlab : otelo/mission6/…

  • réaliser le formulaire de recherche d’une chambre selon la date de début, la date de fin et la catégorie de la chambre.
  • afficher la réponse. Chaque ligne devra faire apparaître le prix de base par jour  et la description de la chambre.

Partie 3 – réservation

Livrable gitlab : otelo/mission6/…

  • permettre la réservation d’une chambre et l’enregistrer en base de données

@create (formulaire de création)

@[email protected]
   $chambres = chambres ();
  return view('reservation.create', ['chambres ' => $chambres ]);



Route::get('reservation/new',[ReservationController::class, 'create'] )->name('reservation.create');


@reservation/create.blade.php
   @foreach($chambres as $chambre)

@store  (réception du formulaire create)

Route::post('reservation/store', [ReservationController::class, 'store'])->name('reservation.store');

@[email protected]

$reservation=new Reservation();
$reservation->description= $request->input('description');
$reservation->save();

return redirect()->route('zaza')->with('success','réservation enregistrée');;
@chambre/index.blade.php
  {{$reservation->title}}

 

 

 

Note :

@index

@[email protected]
   $chambres= Chambre::findAll();
  return view('chambre.index', ['chambres' => $chambres]);


Route::get('/chambres', [ReservationController::class, 'index'])->name('chambre.index');


@chambre/index.blade.php
  @foreach($categories as $categorie)

@create

@[email protected]
   $categories = Categories:all();
  return view('chambre.create', ['categories ' => $categories ]);


Route::get('chambre/new', [ReservationController::class, 'create'])->name('chambre.create');


@chambre/create.blade.php
   @foreach($categories as $categorie)

@store et Stockage d’image (réception du formulaire create)

input du formulaire pour le stockage d’image, ne pas oublier enctype au form

@chambre/create.blade.php

<form action="#" method="POST" enctype="multipart/form-data">
  <input type="file" name="image"/>
</form>

 

Route::post('chambre/store', [ReservationController::class, 'store'])->name('chambre.store');

 

Lien symbolique entre dossier storage et dossier public du site pour que les images soient accessibles publiquement

php artisan storage:link
php artisan cache:clear

 

@[email protected]

$chambre=new Chambre();
$chambre->description= $request->input('description');


$image= $request->file("image");
$imageFullName = $image->getClientOriginalName();
//dd($imageFullName);
$imageName= pathinfo($imageFullName, PATHINFO_FILENAME);
//dd($imageName);
$imageExtension= $image->getClientOriginalExtension();
//dd($imageExtension);
$file = time() . '_' . $imageName . '.' .  $imageExtension;

$image->storeAs('public/chambres/',$file);
$chambre->image = $file;
$chambre->save();

return redirect()->route('zaza')->with('success','chambre enregitrée');

 

@chambre/index.blade.php
<img class="mon-image"
     src="/storage/chambres/{{$chambre->image}}"
     alt="{{$chambre->title}}">

 

@edit

@chambre/index.blade.php
 <a href="{{route('chambre.edit', $chambre->id)}}">


@[email protected]
  $chambre= Chambre::find($id);
  return view('chambre.edit', ['chambre' => $chambre]);


Route::get('chambre/{id}/edit', [ReservationController::class, 'edit'])->name('chambre.edit');


@chambre/edit.blade.php
  {{$chambre->title}}



@update et Stockage d’image (réception du formulaire edit)

Route::put('chambre/{id}/update', [ReservationController::class, 'update'])->name('chambre.update');


@chambre/edit.blade.php
    <form action="{{route('chambre.update', $chambre->id)}} method="POST"
    @csrf
    @method("PUT")


@[email protected] 
  $chambre= Chambre::find($id); 
  $chambre->title()=$request->input('title');
  //...
  if($request->file('image'){
      $image= $request->file("image"); 
      $imageFullName = $image->getClientOriginalName(); 
      $imageName= pathinfo($imageFullName, PATHINFO_FILENAME); 
      $file = time() . '_' . $imageName . '.' . $imageExtension; $image-     >storeAs('public/chambres/',$file); 
      $chambre->image = $file;
  
  }

  $chambre->save();
  return redirect()->route('chambre.index');

@destroy

Route::delete('chambre/{id}/destroy', [ReservationController::class, 'destroy'])->name('chambre.destroy');


@lien de suppression
<a href="{{route('chambre.destroy', $chambre->id)}}"></a>


@[email protected]
  $chambre= Chambre::find($id); 
  $chambre->delete();
  return redirect()->route('chambre.index')->with('success','chambre supprimée');

 

Variable d’environnement

env('DB_DATABASE')