/** * 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(); }
/** * 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); } }
/** * 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(); }