service = $service; } /** * Display a listing of the resource. */ public function index(): View { $suppliers = Supplier::orderBy('name')->get(['id', 'name'])->toArray(); $profitCenters = ProfitCenter::orderBy('name')->get(['id', 'name'])->toArray(); $productGroups = ProductGroup::orderBy('name')->get(['id', 'name'])->toArray(); $producer = Producer::orderBy('name')->get(['id', 'name'])->toArray(); DB::statement("SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));"); $hooreycaNames = Product::orderBy('buyerProductName')->where('buyerProductName', '!=', '')->groupBy('buyerProductName')->get(['id', 'buyerProductName as name'])->toArray(); DB::statement("SET sql_mode=(SELECT CONCAT(@@sql_mode, ',ONLY_FULL_GROUP_BY'));"); // dd($hooreycaNames); // dd(json_encode($service->getAvailableFilters())); return view('admin.product.index')->with( [ 'suppliers' => $suppliers, 'profitCenters' => $profitCenters, 'productGroups' => $productGroups, 'producer' => $producer, 'hooreycaNames' => $hooreycaNames, 'testMode' => $this->testMode, 'init' => (bool) \request()->get('init', true), // 'formUUID'=>\Str::uuid(), // 'availableFilters'=>json_encode(['Product'=>['suppliers','date','dateFrom','dateTo','productGroups','products','hooreycaNames','producers']]), 'availableFilters'=>json_encode(['Product'=>['suppliers','productGroups','products','hooreycaNames','producers','specialOffer']]), ] ); $retData = []; // $retData['testMode']=($this->testMode)?'true':'false'; $retData['testMode'] = $this->testMode; $retData['init'] = (bool) \request()->get('init', true); return view('admin.product.index')->with($retData); /* $ProductGroup=new \App\Models\ProductGroup(); $productGroupArray=$ProductGroup->allWithParents(2); return view('admin.product.edit')->with( ['productGroup'=>$productGroupArray, 'productUnit'=>ProductUnitEnum::getValues(), 'producer'=>[ ['id'=>11,'name'=>'Voyagex'], ['id'=>12,'name'=>'Győri előre'], ['id'=>13,'name'=>'Elmar'], ['id'=>14,'name'=>'Gramellini'], ] ]); */ } /** * Show the form for creating a new resource. */ public function create(): Response|JsonResponse { return response()->noContent(); } /** * Store a newly created resource in storage. */ public function store(Request $request): Response|JsonResponse { $ret = ['status' => 'ok', 'message' => 'Product save successfully!']; return \response()->json($ret); // return \response(json_encode(['status'=>'ok','message'=>'Product save successfully!']),200); } /** * Display the specified resource. */ public function show(int $ProductId): Response|JsonResponse { return response('ez show'); } /** * Show the form for editing the specified resource. * * @param int $ProductId */ public function prof_flag($str) { global $prof_timing, $prof_names; $prof_timing[] = microtime(true); $prof_names[] = $str; } // Call this when you're done and want to see the results public function prof_print() { global $prof_timing, $prof_names; $size = count($prof_timing); if ($size == 0) { return; } for ($i = 0; $i < $size - 1; $i++) { echo "{$prof_names[$i]}
"; echo sprintf('   %f
', $prof_timing[$i + 1] - $prof_timing[$i]); } echo "{$prof_names[$size - 1]}
"; } public function edit(int $ProductId): View { // $this->prof_flag('Start'); $ProductGroup = new \App\Models\ProductGroup; // @todo:too slow, change other methode $productGroupArray = $ProductGroup->allWithParents(3); $Product = Product::with(['Supplier', 'Producer', 'ProductGroup', 'picture', 'specification'])->find($ProductId); $Product->setAttributePrice(); // $this->prof_flag(__LINE__); $Producer = []; foreach (Producer::orderBy('name')->get() as $producer) { $Producer[] = ['id' => $producer->id, 'name' => $producer->name]; } // $this->prof_flag(__LINE__); if (! \request()->ajax()) { // $this->prof_print(); dd($productGroupArray, $Product, $Product->toArray()); } // return view('admin.product.edit')->with( ['Product' => $Product, 'productGroup' => $productGroupArray, 'productUnit' => BasicUnitEnum::getValues(), 'sellerUnit' => ProductUnitEnum::getValues(), // 'productUnit'=>ProductUnitEnum::getValues(), 'producer' => $Producer, ]); } /** * Update the specified resource in storage. * */ public function update(Request $request, int $ProductId): Response|JsonResponse { // $Product=Product::with(['Supplier','Producer','ProductGroup','picture','specification'])->find($ProductId); // dd($request->all(),$ProductId); $validated = $request->validate([ 'name' => 'required|string|max:255', 'supplierId' => 'required|integer|exists:suppliers,id', 'producer' => 'required|exists:producers,id', 'packaging' => 'required|numeric|min:0', 'unitValue' => 'required|numeric|min:0', 'productUnit' => 'required|string|in:'.implode(',', BasicUnitEnum::getValues()), 'sellerUnit' => 'required|string|in:'.implode(',', ProductUnitEnum::getValues()), 'unitMultiplier' => 'required|numeric|min:0', 'amountUnit' => 'required|string|in:'.implode(',', ProductUnitEnum::getValues()), 'vat' => 'required|numeric|min:0', 'supplierProductNumber' => 'nullable|string|max:255', 'buyerProductName'=>'required|string|max:255', 'productGroup' => 'required|exists:product_groups,id', 'hooreycaId' => 'nullable|string|max:255', 'HooreycaUnit' => 'nullable|string|max:255', 'HooreycaMultiplier' => 'nullable|numeric|min:0', 'note' => 'nullable|string', 'canSee' => 'boolean', 'krel' => 'boolean', 'specialOffer' => 'boolean', 'price' => 'required|numeric|min:0', ]); // $request->merge(['canSee'=>$request->has('canSee')]); // $request->merge(['krel'=>$request->has('krel')]); // $request->merge(['specialOffer'=>$request->has('specialOffer')]); $validated['producer_id'] = $validated['producer'][0]; unset($validated['producer']); $validated['product_group_id'] = $validated['productGroup'][0]; unset($validated['productGroup']); $validated['note'] = str_replace("\r\n", "\n", $validated['note']); // dd($validated,$request->all()); $ret = []; if (! $this->service->update($ProductId, $validated)) { if ($this->service->hasError()) { $ret['success'] = false; $ret['errors'] = $this->service->getError(); } return \response()->json($ret)->setStatusCode(422); } if (! $this->service->updatePrice($ProductId, $validated['price'])) { if ($this->service->hasError()) { $ret['success'] = false; $ret['errors'] = $this->service->getError(); } return \response()->json($ret)->setStatusCode(422); } /**@todo: save picture, specification, price * save picture * save specification */ $ret = ['status' => 'ok', 'message' => 'Product save successfully!']; $ret['success'] = true; return \response()->json($ret); } /** * Remove the specified resource from storage. */ public function destroy(int $ProductId): Response|JsonResponse { // return response()->noContent(); } public function getDataTableContent(Request $request): JsonResponse { $searchParameter = json_decode($request->input('ajaxData'), true); $Product = Product::with(['Supplier', 'Producer', 'ProductGroup']); if ($request->input('search.value')) { $Product->where('name', 'like', '%'.$request->input('search.value').'%'); } if (isset($searchParameter['products[]'])) { if (! is_array($searchParameter['products[]'])) { $searchParameter['products[]'] = [$searchParameter['products[]']]; } $Product->whereIn('name', $searchParameter['products[]']); } if (isset($searchParameter['hooreycaNames[]'])) { if (! is_array($searchParameter['hooreycaNames[]'])) { $searchParameter['hooreycaNames[]'] = [$searchParameter['hooreycaNames[]']]; } $Product->whereIn('buyerProductName', $searchParameter['hooreycaNames[]']); } if (isset($searchParameter['producers[]'])) { if (! is_array($searchParameter['producers[]'])) { $searchParameter['producers[]'] = [$searchParameter['producers[]']]; } $Product->whereIn('producer_id', $searchParameter['producers[]']); } if (isset($searchParameter['suppliers[]'])) { if (! is_array($searchParameter['suppliers[]'])) { $searchParameter['suppliers[]'] = [$searchParameter['suppliers[]']]; } $Product->whereIn('supplier_id', $searchParameter['suppliers[]']); } if (isset($searchParameter['productGroups[]'])) { if (! is_array($searchParameter['productGroups[]'])) { $searchParameter['productGroups[]'] = [$searchParameter['productGroups[]']]; } foreach ($searchParameter['productGroups[]'] as $productGroupId) { $productGroup = ProductGroup::find($productGroupId); // $children=$productGroup->getChildNodesArray($productGroup); $nodeDepth = ProductGroup::where('id', $productGroupId)->withDepth()->first()->depth; if ($nodeDepth == 2) { $childrenId = $productGroup->descendants()->withDepth()->having('depth', '=', $nodeDepth + 1)->get()->pluck('id'); // $searchParameter['productGroups[]']=array_merge($searchParameter['productGroups[]'],$childrenId->toArray()); } // dd($productGroupId,$nodeDepth,$children); } $Product->whereIn('product_group_id', $searchParameter['productGroups[]']); } // Akciós szűrő (specialOffer): '1' = Igen, '0' = Nem, '' vagy hiányzik = Mindegy if(isset($searchParameter['specialOffer']) && $searchParameter['specialOffer'] !== ''){ $val = $searchParameter['specialOffer'] == '1' ? 1 : 0; $Product->where('specialOffer', $val); } // Csak az utolsó (legfrissebb) aktív árlistában szereplő termékek szűrő // Per supplier: a legfrissebb, de még ma előtti available dátumú árlista az érvényes if (isset($searchParameter['onlyActivePriceList']) && $searchParameter['onlyActivePriceList'] == '1') { $today = \Carbon\Carbon::today()->format('Y-m-d'); $latestPriceListIds = DB::table('price_lists as pl') ->joinSub( DB::table('price_lists') ->where('available', '<=', $today) ->whereNull('deleted_at') ->select('supplier_id', DB::raw('MAX(available) as max_available')) ->groupBy('supplier_id'), 'latest', function ($join) { $join->on('pl.supplier_id', '=', 'latest.supplier_id') ->on('pl.available', '=', 'latest.max_available'); } ) ->whereNull('pl.deleted_at') ->pluck('pl.id'); $Product->whereHas('PriceList', function ($query) use ($latestPriceListIds) { $query->whereIn('price_lists.id', $latestPriceListIds); }); } if (! $request->ajax()) { // dd($searchParameter,$Product->toSql(), $request->input()); } // dd($request->input('order.0.dir')); if ($request->input('order.0')) { // dd($request->input('order.0')); $pointer = $request->input('order.0.column'); $orderName = $request->input('columns')[$pointer]['data']; $orderDirection = $request->input('order.0.dir'); $Product->orderBy($orderName, $orderDirection); } // if($request->get('search.value')) $count = $Product->count('id'); $Product->limit($request->get('length')); $Product->offset($request->get('start')); $ProductDD = $Product->toSql(); // dd($request->all(),$ProductDD); // $ProductDD=$Product->get()->first()->LastPrice; $ret = [ 'draw' => $request->get('draw'), 'recordsTotal' => Product::count(), 'recordsFiltered' => $count, 'data' => [], ]; if (! $request->ajax()) { // dd($Product->get()->toArray() ); } foreach ($Product->get() as $item) { $data['id'] = $item->id; $data['name'] = $item->name; $data['buyerProductName'] = $item->buyerProductName; $data['hooreycaId'] = $item->hooreycaId; $data['productGroup'] = $item->ProductGroup->name; if (isset($item->Supplier->name)) { $data['supplierName'] = $item->Supplier->name; } else { $data['supplierName'] = '-'; } if (is_numeric($item->Price())) { $data['price'] = $item->Price(); } else { $data['price'] = '-'; } $data['created_at'] = formatterDateTime($item->created_at); $ret['data'][] = $data; } $ProductDD = $ret['data']; if (! $request->ajax()) { dd($searchParameter, getSql($Product), $request->input(), $ret['data']); } return \response()->json($ret); dd($request->all(), $ProductDD); } }