Viewing file: ItemController.php (7.59 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
namespace App\Http\Controllers;
use App\Models\Item; use App\Models\OrderDetails; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Log;
class ItemController extends Controller {
public function index() { $data['items'] = auth()->user()->items; $data['restaurants'] = auth()->user()->active_restaurants; $data['categories'] = auth()->user()->active_categories; $data['taxes'] = auth()->user()->active_taxes;
$data['extend_message'] = ''; return view('item.index', $data); }
public function create() { $data['restaurants'] = auth()->user()->active_restaurants; $data['categories'] = auth()->user()->active_categories; $data['taxes'] = auth()->user()->active_taxes;
$data['extend_message'] = '';
$user = auth()->user(); if ($user->type != 'admin') { $userPlan = isset($user->current_plans[0]) ? $user->current_plans[0] : ''; if ($userPlan) { $userItems = $user->items()->count(); if ((!$userPlan || $userItems >= $userPlan->item_limit) && $userPlan->item_unlimited != 'yes') { $data['extend_message'] = trans('layout.item_extends'); } } else { return redirect()->route('plan.list')->withErrors(['failed' => trans('layout.message.plan_update_first')]); } } return view('item.create', $data); }
public function store(Request $request) {
if(env('APP_DEMO')){ return redirect()->back()->withErrors(['msg' => trans('layout.app_demo_message')]); }
$request->validate([ "restaurant_id" => "required", "category_id" => "required", "name" => "required|max:191", "price" => "required | numeric|gt:-1", "discount_to" => "in:everyone,premium", "discount" => "numeric|gt:-1", "discount_type" => "in:flat,percent", "status" => "required|in:active,inactive", "extra_title" => "nullable|array", "extra_title.*" => "nullable|string|max:255",
"extra_price" => "nullable|array", "extra_price.*" => "nullable|numeric|min:0",
"extra_status" => "nullable|array", "extra_status.*" => "nullable|in:active,inactive", ]);
$user = auth()->user();
if ($user->type != 'admin') { $userPlan = isset($user->current_plans[0]) ? $user->current_plans[0] : ''; if ($userPlan) { $userItems = $user->items()->count(); if ((!$userPlan || $userItems >= $userPlan->item_limit) && $userPlan->item_unlimited != 'yes') { return redirect()->back()->withErrors(['msg' => trans('layout.item_extends')]); } } else { return redirect()->route('plan.list')->withErrors(['failed' => trans('layout.message.plan_update_first')]); } }
if ($request->hasFile('item_image')) { $file = $request->file('item_image'); $imageName = time() . '.' . $file->extension(); $file->move(public_path('/uploads'), $imageName); $request['image'] = $imageName; }
DB::beginTransaction(); try { $item = $user->items()->create($request->all());
if ($request->extra_title && $request->extra_title[0] != null) { $item->extras()->createMany(collect($request->extra_title)->map(function ($day, $key) use ($request) { if ($request->extra_title[$key] && isset($request->extra_price[$key]) && $request->extra_status[$key]) { return [ 'title' => $request->extra_title[$key], 'price' => $request->extra_price[$key], 'status' => $request->extra_status[$key], ]; }
})->toArray()); } DB::commit(); return redirect()->route('item.index')->with('success', trans('layout.message.item_create')); } catch (\Exception $ex) { DB::rollBack(); }
}
public function edit(Item $item) { $data['item'] = $item; $data['restaurants'] = auth()->user()->active_restaurants; $data['categories'] = auth()->user()->active_categories; $data['taxes'] = auth()->user()->active_taxes; return view('item.edit', $data); }
public function update(Request $request, Item $item) { if(env('APP_DEMO')){ return redirect()->back()->withErrors(['msg' => trans('layout.app_demo_message')]); } $request->validate([ "restaurant_id" => "required", "category_id" => "required", "name" => "required|max:191", "price" => "required | numeric|gt:-1", "discount_to" => "in:everyone,premium", "discount" => "numeric|gt:-1", "discount_type" => "in:flat,percent", "status" => "required|in:active,inactive", 'item_image' => 'image', 'extra_price.*' => 'numeric|min:0', 'extra_status.*' => 'in:active,inactive', ]);
if ($request->hasFile('item_image')) {
$this->deleteItemImage($item); $file = $request->file('item_image'); $imageName = time() . '.' . $file->extension(); $file->move(public_path('/uploads'), $imageName); $request['image'] = $imageName; }
DB::beginTransaction(); try { $item->update($request->all());
if ($request->extra_title) { $extraData = []; $i = 0; foreach ($request->extra_title as $key => $extra) { if ($request->extra_title[$key] && $request->extra_price[$key] && $request->extra_status[$key]) { $extraData[$i]['title'] = $request->extra_title[$key]; $extraData[$i]['price'] = $request->extra_price[$key]; $extraData[$i]['status'] = $request->extra_status[$key]; $i++; } } $item->extras()->delete(); $item->extras()->createMany($extraData); } else { $item->extras()->delete(); } DB::commit(); return redirect()->route('item.index')->with('success', trans('layout.message.item_update')); } catch (\Exception $ex) { DB::rollBack(); Log::error($ex->getMessage()); return redirect()->route('item.index')->withErrors(['msg' => trans('layout.message.update_failed')]); } }
public function destroy(Item $item) { if(env('APP_DEMO')){ return redirect()->back()->withErrors(['msg' => trans('layout.app_demo_message')]); } $order_details = OrderDetails::where('item_id', $item->id)->first(); if ($order_details) return redirect()->back()->withErrors(['msg' => trans('layout.message.item_not_delete')]);
$this->deleteItemImage($item);
$item->delete(); return redirect()->back()->with('success', trans('layout.message.item_delete')); }
function deleteItemImage(Item $item) { if ($item->image) { $fileN = public_path('uploads') . '/' . $item->image; if (File::exists($fileN)) unlink($fileN); } }
}
|