/**
  * Добавление продукта
  */
 public function testAttachProduct()
 {
     /**
      * @var $purchase_model \App\Models\PurchaseModel
      */
     $purchase_model = \App\Models\PurchaseModel::find(self::$purchase_id);
     $this->assertInstanceOf('\\App\\Models\\PurchaseModel', $purchase_model);
     $products_count = rand(2, 5);
     $products_models_arr = \App\BusinessLogic\Models\Product::take($products_count)->get();
     //$this->assertEquals(count($products_models_arr), $products_count);
     $products_appended_ids_arr = [];
     foreach ($products_models_arr as $product_model) {
         $product_appended = $purchase_model->appendProduct($product_model);
         $this->assertTrue($product_appended);
         $products_appended_ids_arr[] = $product_model->id;
     }
     $products_in_purchase_arr = \DB::table($purchase_model->products()->getTable())->where('purchase_id', '=', $purchase_model->id)->get(['product_id']);
     $this->assertNotEmpty($products_in_purchase_arr);
     $products_in_purchase_ids_arr = [];
     foreach ($products_in_purchase_arr as $product_in_purchase_obj) {
         $products_in_purchase_ids_arr[] = $product_in_purchase_obj->product_id;
     }
     foreach ($products_appended_ids_arr as $product_appended_id) {
         $this->assertContains($product_appended_id, $products_in_purchase_ids_arr);
     }
     self::$products_appended_ids_arr = $products_appended_ids_arr;
 }
 /**
  * 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;
 }
 /**
  * Загрузка картинки
  */
 public function testLoadImage()
 {
     $product_model = \App\BusinessLogic\Models\Product::first();
     if (!$product_model) {
         return;
     }
     \Session::start();
     $this->call('POST', $this->getFullUrl('/seller/media/upload'), ['product_id' => $product_model->id, '_token' => \Session::token()], [], ['files' => new UploadedFile(base_path() . '/storage/app/media/test.jpg', 'test.jpg')]);
     //echo "\n1.", csrf_token(), "\n2.", Session::token(), "\n";
     //$this->assertEquals($response->getStatusCode(), 200);
     //\Storage::put('test.log', $response->getContent());
     //file_put_contents('/var/www/jp.appros.ru/public/test.php', json_encode($response->original));
     $this->assertResponseOk();
     //var_dump( $response->getContent() );
 }
 /**
  * Изменение продукта
  * @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]);
 }
Example #7
0
 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];
 }