Ejemplo n.º 1
0
 /**
  * Store a newly created resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
 public function store(Request $request, DVDInfo $dvds)
 {
     $messages = ['dvd_id.required' => 'Please choose a real dvd', 'due_date.after' => 'The dvd should be due after the rental period starts'];
     $validator = Validator::make($request->all(), ['name' => 'required|min:2', 'address' => 'required|min:2', 'phone_number' => 'required', 'dvd_id' => 'required', 'start_date' => 'required|date', 'due_date' => 'required|date|after:' . $request->start_date], $messages);
     if ($validator->fails()) {
         return redirect()->back()->withErrors($validator)->withInput();
     }
     $customer = Customer::firstOrCreate(['name' => $request->name, 'address' => $request->address, 'phone_number' => $request->phone_number]);
     $dvd = $dvds->find($request->dvd_id)->getUnrented()->first();
     if (!$dvd) {
         return redirect()->back()->withInput()->withErrors(['stock' => 'The dvd seems to be out of stock']);
     }
     $input = $request->all();
     $input['customer_id'] = $customer->id;
     $rental = new Rental($input);
     $dvd->rentals()->save($rental);
     Session::flash('success', $dvd->dvd_info->title . ' rented');
     return redirect()->back();
 }
Ejemplo n.º 2
0
 /**
  * Updates the dvd record in the database
  * @param  array  $input
  * @param App\Models\DVDInfo $dvd
  */
 public function update(DVDInfo $dvd, array $input)
 {
     $dvd->fill($input);
     $dvd->save();
     if (!$dvd->dvds->isEmpty()) {
         $price = Price::firstOrCreate(['price_whole' => $input['price_whole'], 'price_cents' => $input['price_cents'], 'late_fee_whole' => $input['late_fee_whole'], 'late_fee_cents' => $input['late_fee_cents'], 'points' => $input['points']]);
         $dvd->dvds()->update(['price_id' => $price->id, 'age_restriction' => $input['age_restriction']]);
     }
     $stockChange = $dvd->totalStock() - $input['stock'];
     // Reduce stock
     if ($stockChange > 0) {
         $unrented = $dvd->getUnrented();
         $unrented = $unrented->take($stockChange);
         $ids = array_keys($unrented->getDictionary());
         DVD::destroy($ids);
     }
     //  Increase stock
     if ($stockChange < 0) {
         $newDvds = [];
         while ($stockChange < 0) {
             array_push($newDvds, new DVD(['price_id' => $price->id, 'age_restriction' => $input['age_restriction']]));
             $stockChange += 1;
         }
         $dvd->dvds()->saveMany($newDvds);
     }
 }
Ejemplo n.º 3
0
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function destroy(ImageStorage $storage, $id)
 {
     $dvd = DVDInfo::findOrFail($id);
     $storage->delete($dvd->cover_image);
     $dvd->delete();
     Session::flash('success', 'Dvd deleted');
     return redirect()->back();
 }