with = ['file'/*, 'price', 'default', 'sub'*/]; // $this->with = []; parent::__construct(Product::class, $this->with, ['*'], null, null, ['title']); } public function tableProduct(Request $request) { $data = $request->all(); if (isset($data["select"]) && is_null($data["select"])){ $data["select"] = []; } if (is_null($this->query)){ $query_table = $this->model::with($this->with); //*******کداضافه شده // ->where('active', '<=', now()) // فیلتر محصولات فعال // ->get(); //********* }else{ $query_table = $this->query; // $query_table = $query_table->where('active', '<=', now()); } TableEngine::create($query_table, $data) ->initSearch($this->search) ->select($this->select) ->export($query_table); $query_table['auto_open_at'] = Product::selectRaw( 'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_open_at)))) as avg_time' )->value('avg_time'); $query_table['auto_close_at'] = Product::selectRaw( 'SEC_TO_TIME(AVG(TIME_TO_SEC(TIME(auto_close_at)))) as avg_time' )->value('avg_time'); // $query_table['11'] = $avgDuration; // $query_table['11'] = Product::avg('auto_open_at'); // $query_table['112'] = Product::avg('auto_close_at'); return $query_table; } public function editProducts(Request $request) { if (isset($request->auto_open_at, $request->auto_close_at)) { Product::query()->update([ 'auto_open_at' => $request->auto_open_at, 'auto_close_at' => $request->auto_close_at, ]); return response()->json(['message' => 'Products updated successfully.']); } return response()->json(['error' => 'auto_open_at and auto_close_at must be set'], 400); } public function store(Request $request) { $data = $this->filterProductData($request->all()); $product = Product::create($data); return $this->resultCreate($product->id); } public function update(Request $request, $id) { // return 1; $data = $this->filterProductData($request->all()); if (isset($data["price"])){ $data["reading_method"] = null; if (Product::hasPriceOffsetColumn()) { $data['price_offset_percent'] = 0; } } if (isset($data["auto_close_at"]) and isset($data["auto_close_at"])){ if ($data["auto_close_at"] == $data["auto_open_at"]){ unset($data["auto_open_at"]); unset($data["auto_close_at"]); } } // return $data['price']; // if(!isset($data['default'])){ // throw new UnprocessableEntityHttpException('مقادیر اعتبارات را وارد کنید'); // } // $data['auto_open_at'] = Carbon::parse($data['auto_open_at'])->format('Y-m-d H:i:s'); // $data['auto_close_at'] = Carbon::parse($data['auto_close_at'])->format('Y-m-d H:i:s'); $product = Product::findOrFail($id); $oldOffsetPercent = (float) ($product->price_offset_percent ?? 0); if ( Product::hasPriceOffsetColumn() && $product->reading_method && array_key_exists('price_offset_percent', $data) ) { ProductPriceService::reapplyOffsetPercent( $product, (float) $data['price_offset_percent'], $oldOffsetPercent ); unset($data['price'], $data['price_profit']); } $product->update($data); return response()->json(true); } public function destroy($id) { Product::findOrFail($id)->delete(); return response()->json(true); } public function listProduct() { // $this->getPrice(); // $this->auto_close_open(); $products = Product::with(['file'])->where('active', 1)->get(); if (Product::hasPriceOffsetColumn() && str_contains(request()->path(), '/customer/')) { $products->each->makeHidden(['price_offset_percent']); } return response()->json($products); } public function getPrice() { // $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json(); // $RPrices = Http::get('https://pricing.liman.gold/pricingApi', [])->json(); // $RPrices =Http::timeout(40)->get('http://212.23.201.173:8381/price_list', [])->json(); $RPrices = Http::timeout(40)->get('http://109.122.246.48:4949/api/free', [])->json(); // try{ // $cooper =Http::timeout(40)->get('https://www.livedata.ir/main/static/p.json', [])->json(); // if(isset($cooper['s_301006']) && isset($cooper['s_200103'])){ // $CP = (($cooper['s_301006']/1000000)*$cooper['s_200103'])*10; //// Cnt::where('key', 'cu_price') // } // }catch (\Exception $e){} $config = app(ConfigService::class); $mainProductId = Cnt::where('key', 'main_product')->value('value'); $hasExtremeKeys = Setting::whereIn('key', ['up_price', 'down_price'])->count() === 2; $products = Product::with([])->whereNotNull('reading_method')->get(); foreach ($products as $product) { $collection = collect($RPrices); $RPrice = $collection->firstWhere('key', $product->reading_method); if (!empty($RPrice)) { // foreach ($RPrices as $RPrice) { // if ($product->reading_method == $RPrice['name']) { if ($RPrice['name'] == 'TGJU فلز مس') { $copper = $RPrice['price'] + $RPrice['profit']; } if ($RPrice['name'] == 'TGJU دلار') { $dollar = $RPrice['price'] + $RPrice['profit']; } if ($RPrice['name'] == 'گلد دات ای از آبشده - رسمی - نقد فردا') { $RPrice['price'] = $RPrice['price'] / 4.3318; } ProductPriceService::syncFromReference( $product, (int) $RPrice['price'], (int) ($RPrice['profit'] ?? 0) ); $productPrice = (float) ProductPriceService::adjustedTotal( (int) $RPrice['price'], (int) ($RPrice['profit'] ?? 0), ProductPriceService::offsetPercent($product) ); if ( $hasExtremeKeys && $mainProductId && (int) $product->id === (int) $mainProductId ) { $config->trackDailyPriceExtreme($productPrice); } if ($product->bubble == 1) { $ReportController = new ReportController(); $liquidGold = $ReportController->lastPrice(); $p = Product::find($product->id); $p->amount = $RPrice['price'] / $liquidGold['price']; $p->save(); } } } if (isset($copper) && isset($dollar)) { $cp = (int) round(($copper / 1000000) * $dollar); $copperProducts = Product::where('metal_id', 3)->get(); foreach ($copperProducts as $copperProduct) { ProductPriceService::syncFromReference($copperProduct, $cp, 0); } Product::where('metal_id', 3)->update([ 'updated_at' => \Carbon\Carbon::now()->format('Y-m-d H:i:s'), ]); if ( $hasExtremeKeys && $mainProductId && Product::where('id', $mainProductId)->where('metal_id', 3)->exists() ) { $mainCopper = Product::find($mainProductId); $extremePrice = $mainCopper ? (float) ($mainCopper->price + ($mainCopper->price_profit ?? 0)) : (float) $cp; $config->trackDailyPriceExtreme($extremePrice); } } return response()->json(true); } public function auto_close_open() { $products = Product::with([])->get(); $current_time = now()->format('H:i:s'); foreach ($products as $product) { $show = ($current_time >= $product->auto_open_at && $current_time <= $product->auto_close_at); Product::where('id', $product->id)->update([ 'show' => $show, ]); } return response()->json(true); } public function getProduct($id) { $product = Product::with($this->with)->where('id', $id)->first(); return response()->json($product); } /** * @param $id * @return \Illuminate\Http\JsonResponse */ public function hide($id) { $query = Product::findOrFail($id); $query->update([ 'show' => !$query->show ]); return response()->json(true); } public function openSell($id) { return $this->toggleBooleanStatus($id, 'open_sell'); } public function openBuy($id) { return $this->toggleBooleanStatus($id, 'open_buy'); } public function auto_buy($id) { return $this->toggleBooleanStatus($id, 'auto_buy'); } public function auto_sell($id) { return $this->toggleBooleanStatus($id, 'auto_sell'); } private function toggleBooleanStatus($id, $field) { $product = Product::findOrFail($id); $product->$field = !$product->$field; $product->save(); if (!$product->open_buy and !$product->open_sell) { $product->show = false; $product->active = false; } else { $product->show = true; $product->active = true; } $product->save(); return response()->json($product->$field); } public function auto_group($action, $method) { // Define valid actions and methods $validActions = ['sell' => 'auto_sell', 'buy' => 'auto_buy', 'all' => ['auto_buy', 'auto_sell']]; $validMethods = ['true' => 1, 'false' => 0]; // Validate action and method if (!isset($validActions[$action]) || !array_key_exists($method, $validMethods)) { return response()->json(['error' => 'Invalid action or method'], 400); } // Get fields to update and value to set $fields = $validActions[$action]; $value = $validMethods[$method]; // Update products Product::query()->update(array_fill_keys((array)$fields, $value)); return response()->json(true); } public function updatePrice(Request $request){ } private function filterProductData(array $data): array { if (!Product::hasPriceOffsetColumn()) { unset($data['price_offset_percent']); } return $data; } }