'orders', 'title' => 'Заказы', 'id' => 'orders', 'header' => [ 'id' => 'ID', 'user_id' => 'Менеджер', 'district_id' => 'Округ', 'area_id' => 'Район', 'object_address' => 'Адрес объекта', 'object_type_id' => 'Тип объекта', 'contract_date' => 'Дата договора', 'contract_number' => 'Номер договора', 'comment' => 'Комментарий', 'installation_date' => 'Дата выхода на монтаж', 'brigadier_id' => 'Бригадир', 'order_status_id' => 'Статус', 'tg_group_name' => 'Имя группы в ТГ', 'tg_group_link' => 'Ссылка на группу в ТГ', ] ]; public function __construct() { $this->data['districts'] = District::query()->get()->pluck('name', 'id'); $this->data['areas'] = Area::query()->get()->pluck('name', 'id'); $this->data['objectTypes'] = ObjectType::query()->get()->pluck('name', 'id'); $this->data['orderStatuses'] =OrderStatus::query()->get()->pluck('name', 'id'); $this->data['brigadiers'] = Brigadier::query()->get()->pluck('name', 'id'); $this->data['users'] = User::query()->get()->pluck('name', 'id'); } /** * Display a listing of the resource. */ public function index(Request $request) { $this->data['searchFields'] = [ 'comment', 'object_address', 'tg_group_name', 'tg_group_link', 'contract_number', ]; $filters = [ 'user_id' => [ 'title' => 'Менеджер', 'values' => DBHelper::getFilters('user_id', Order::class), ], 'district_id' => [ 'title' => 'Округ', 'values' => DBHelper::getFilters('district_id', Order::class), ], 'area_id' => [ 'title' => 'Район', 'values' => DBHelper::getFilters('area_id', Order::class), ], 'object_type_id' => [ 'title' => 'Тип объекта', 'values' => DBHelper::getFilters('object_type_id', Order::class), ], 'brigadier_id' => [ 'title' => 'Бригадир', 'values' => DBHelper::getFilters('brigadier_id', Order::class), ], 'order_status_id' => [ 'title' => 'Статус', 'values' => DBHelper::getFilters('order_status_id', Order::class), ], ]; $ranges = []; $dates = []; // fill filters $this->data['filters'] = $filters; $this->data['dates'] = $dates; $this->data['ranges'] = $ranges; $q = Order::query(); // accept filters if(!empty($request->filters) && is_array($request->filters)) { foreach ($request->filters as $filterName => $filterValue) { if(!$filterValue) continue; if(Str::contains($filterName, 'price')) { $filterValue = $filterValue * 100; } if(Str::endsWith($filterName, '_from')) { if(is_string($filterValue) && DateHelper::isDate($filterValue)) { $filterValue .= ' 00:00:00'; } $q->where(Str::replace('_from', '', $filterName), '>=', $filterValue); } elseif(Str::endsWith($filterName, '_to')) { if(is_string($filterValue) && DateHelper::isDate($filterValue)) { $filterValue .= ' 23:59:59'; } $q->where(Str::replace('_to', '', $filterName), '<=', $filterValue); } else { $q->where($filterName, '=', $filterValue); } } } // accept search if(!empty($request->s)) { $s = $request->s; $searchFields = $this->data['searchFields']; $q->where(function ($query) use ($searchFields, $s) { foreach ($searchFields as $searchField) { $query->orWhere($searchField, 'LIKE', '%' . $s . '%'); } }); } // ------- setup sort and order -------------------------------------------------------------------------------- $this->data['sortBy'] = (!empty($request->sortBy)) ? Str::replace('_txt', '', $request->sortBy) // remove '_txt' fields modifier : Order::DEFAULT_SORT_BY; // check for sortBy is valid field $p = new Order(); if(!in_array($this->data['sortBy'], array_merge(['id', 'created_at'], $p->getFillable()))) { $this->data['sortBy'] = Order::DEFAULT_SORT_BY; } // set order $this->data['orderBy'] = (!empty($request->order)) ? 'desc' : 'asc'; $q->orderBy($this->data['sortBy'], $this->data['orderBy']); $this->data['orders'] = $q->paginate()->withQueryString(); return view('orders.index', $this->data); } /** * Show the form for creating a new resource. */ public function create() { return view('orders.edit', $this->data); } /** * Store a newly created resource in storage. */ public function store(StoreOrderRequest $request) { $data = $request->validated(); $products = $request->validated('products'); $quantities = $request->validated('quantity'); unset($data['products']); if(isset($data['id'])) { $order = Order::query()->where('id', $data['id'])->first(); $order->update($data); $order->refresh(); } else { $order = Order::query()->create($data); } if($products && $quantities) { $order->products()->detach(); foreach ($products as $key => $product) { if($quantities[$key] == 0) continue; $order->products()->attach($product, ['quantity' => $quantities[$key]]); } } return redirect()->route('order.index'); } /** * Display the specified resource. */ public function show(Order $order) { $this->data['order'] = $order; return view('orders.edit', $this->data); } /** * Show the form for editing the specified resource. */ public function edit(string $id) { // } /** * Update the specified resource in storage. */ public function update(Request $request, string $id) { // } /** * Remove the specified resource from storage. */ public function destroy(string $id) { // } }