/** * Display a listing of the resource. * * @return Response */ public function index() { $search_query = \Input::get('q'); $matches_ids = []; if ($search_query) { $sphinx = \Sphinx\SphinxClient::create(); $sphinx->setServer('127.0.0.1', 3312); $sphinx->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_ANY); $sphinx->setSortMode(\Sphinx\SphinxClient::SPH_SORT_RELEVANCE); $sphinx->setFieldWeights(array('name' => 20, 'description' => 10)); $sphinx->addQuery($search_query, '*'); $res = $sphinx->runQueries(); if (!$res or !array_key_exists('matches', $res[0])) { return []; } $matches_ids = array_keys($res[0]['matches']); } $products_in_purchases_arr = \DB::table('products_in_purchase')->select('*')->take(10); if (!empty($matches_ids)) { $products_in_purchases_arr = $products_in_purchases_arr->whereIn('product_id', $matches_ids); } $products_in_purchases_arr = $products_in_purchases_arr->get(); if (empty($products_in_purchases_arr)) { return []; } $products_ins_arr = []; foreach ($products_in_purchases_arr as $product_in_purchase_mix) { $product = \App\BusinessLogic\Models\Product::find($product_in_purchase_mix->product_id); $purchase = \App\BusinessLogic\Models\Purchase::find($product_in_purchase_mix->purchase_id); $products_ins_arr[$product_in_purchase_mix->purchase_id . '_' . $product_in_purchase_mix->product_id] = json_decode(new \App\BusinessLogic\ProductInPurchase($product, $purchase)); } return $products_ins_arr; }
/** * Изменение продукта * @param $product_id * @param array $fields * @return mixed */ public function updateProduct($product_id, array $fields) { $validator = \Validator::make($fields, ['name' => 'required|max:255', 'description' => 'max:5000']); if ($validator->fails()) { return $validator->errors(); } // TODO: сделать проверку прав на изменение продукта $product = \App\BusinessLogic\Models\Product::find($product_id); if (!$product) { return ['Product not found']; } $product->name = $fields['name']; $product->description = $fields['description']; $product->save(); return $product; }
public function getProductsInPurchases() { $filter = \Input::get('filter', []); $search_query = ''; $category_id = 0; if (array_key_exists('query', $filter)) { $search_query = trim($filter['query']); } if (array_key_exists('category', $filter)) { $category_id = intval($filter['category']); } $matches_ids = []; if ($category_id) { $products_ids_arr = \App\Helpers\ProjectHelper::getProductsIdsArrByTagId($category_id); $matches_ids = array_merge($matches_ids, $products_ids_arr); } if ($search_query) { $sphinx = \Sphinx\SphinxClient::create(); $sphinx->setServer('127.0.0.1', 3312); $sphinx->setMatchMode(\Sphinx\SphinxClient::SPH_MATCH_ANY); $sphinx->setSortMode(\Sphinx\SphinxClient::SPH_SORT_RELEVANCE); $sphinx->setFieldWeights(array('name' => 20, 'description' => 10)); $sphinx->addQuery($search_query, '*'); $res = $sphinx->runQueries(); if (!$res or !array_key_exists('matches', $res[0])) { return []; } $matches_ids = array_merge($matches_ids, array_keys($res[0]['matches'])); } $products_in_purchases_query = \DB::table('products_in_purchase')->select('*'); if (!empty($matches_ids)) { $products_in_purchases_query = $products_in_purchases_query->whereIn('product_id', $matches_ids); } $products_in_purchases_arr = $products_in_purchases_query->take(12)->get(); if (empty($products_in_purchases_arr)) { return []; } $products_arr = []; foreach ($products_in_purchases_arr as $product_in_purchase_mix) { $product = \App\BusinessLogic\Models\Product::find($product_in_purchase_mix->product_id); $purchase = \App\BusinessLogic\Models\Purchase::find($product_in_purchase_mix->purchase_id); $products_arr[] = new ProductInPurchase($product, $purchase); } return $products_arr; }
public function getProduct($alias = null) { if (empty($alias)) { return response(view('errors.product_404'), 404); } $product_id = \App\Helpers\PurchaseHelper::getProductIdByAlias($alias); $product_model = \App\BusinessLogic\Models\Product::find($product_id); \App\Helpers\Assistant::assertModel($product_model); $purchase_id = \App\Helpers\PurchaseHelper::getPurchaseIdByAlias($alias); $purchase_model = \App\BusinessLogic\Models\Purchase::find($purchase_id); \App\Helpers\Assistant::assertModel($purchase_model); //$product_in_purchase = \App\Models\ProductInPurchaseModel::findByProductIdAndByPurchaseId($product_id, $purchase_id); $product_in_purchase = new \App\Services\BusinessLogic\Models\ProductInPurchase($product_model, $purchase_model); // \App\Models\AttendanceCounterModel::enrol($product_in_purchase->id, \App\Models\AttendanceCounterModel::TARGET_TYPE_PRODUCT_IN_PURCHASE); if (!$product_model or !$purchase_model) { return response(view('errors.product_404'), 404); } return view('product.card', ['product_in_purchase' => $product_in_purchase]); }
public function save(array $options = []) { $order_id = $this->id; //$old_amount = $this->getOriginal('amount'); /** * @var $product \App\BusinessLogic\Models\Product */ $product = \App\BusinessLogic\Models\Product::find($this->product_id); \App\Helpers\Assistant::assertModel($product); $current_max_price_for_purchase = $product->getCurrentMaxPriceForPurchase($this->purchase_id); $sum = $current_max_price_for_purchase * $this->amount; \App\ActionLog::action('ORDER.SAVE.BEFORE_TRANSACTION', ['order_id' => $order_id, 'current_max_price_for_purchase' => $current_max_price_for_purchase, 'purchase_id' => $this->purchase_id, 'product_id' => $this->product_id, 'amount' => $this->amount, 'sum' => $sum]); // Начало транзакции БД \DB::beginTransaction(); parent::save($options); if ($order_id) { $current_payment_transaction = $this->getCurrentPaymentTransaction(); $current_payment_transaction->unblocking(); } $this->moneyBlocking($sum); \DB::commit(); // Окончание транзакции БД \App\ActionLog::action('ORDER.SAVE.AFTER_TRANSACTION', ['order_id' => $order_id, 'current_max_price_for_purchase' => $current_max_price_for_purchase, 'purchase_id' => $this->purchase_id, 'product_id' => $this->product_id, 'amount' => $this->amount, 'sum' => $sum]); }
/** * Возвращает коллекцию данных для построения "Таблицы цен" * @param $product_id * @param $purchase_id * @return array */ public static function getPricingGridMixForProduct($product_id, $purchase_id) { /** * @var $product \App\BusinessLogic\Models\Product * @var $purchase \App\Models\PurchaseModel */ $product = \App\BusinessLogic\Models\Product::find($product_id); $purchase = \App\Models\PurchaseModel::find($purchase_id); $pricing_grid_columns = $purchase->getPricingGridColumns()->get(); $columns_ids_arr = []; foreach ($pricing_grid_columns as $column) { $columns_ids_arr[] = $column->id; } $product_prices = $product->prices($columns_ids_arr); $product_prices_unsorted = []; foreach ($product_prices as $product_price) { $product_prices_unsorted[$product_price->column_id] = $product_price->price; } $rows = []; foreach ($pricing_grid_columns as $column) { $rows[] = ['title' => $column->column_title, 'expiry_date' => date('d.m.Y H:i'), 'price' => $product_prices_unsorted[$column->id]]; } return $rows; }
/** * Возвращает структуру цен по ценовым колонкам для продукта * @deprecated * @param $product_id * @return array */ public function getPricingGridMixForProduct($product_id) { $headers = []; $prices = []; $pricing_grid_id = $this->pricing_grid->id; /** * TODO: здень неправильно запрашивается ценовая колонка, нужно определять еще саму закупку */ $pricing_grid_columns = \App\Models\PricingGridColumnModel::where('pricing_grid_id', '=', $pricing_grid_id)->orderBy('min_sum')->get(); $columns_ids_arr = []; foreach ($pricing_grid_columns as $column) { $headers[] = $column->column_title; $columns_ids_arr[] = $column->id; } /** * TODO: здень нужно выбирать только продукт для данной закупки, т.е. \App\Models\ProductInPurchaseModel, через $this->products() */ $product = \App\BusinessLogic\Models\Product::find($product_id); $product_prices = $product->prices($columns_ids_arr); $product_prices_unsorted = []; foreach ($product_prices as $product_price) { $product_prices_unsorted[$product_price->column_id] = $product_price->price; } foreach ($pricing_grid_columns as $column) { $prices[] = $product_prices_unsorted[$column->id]; } return ['headers' => $headers, 'prices' => $prices]; }