/**
  * Возвращает текущую максимальную цену
  * @return float
  */
 public function getCurrentMaxPrice()
 {
     $current_max_pricing_grid_column_id = $this->purchase->getCurrentMaxPricingGridColumnId();
     $price_obj = \DB::table('prices')->where('product_id', '=', $this->getProduct()->id)->where('column_id', '=', $current_max_pricing_grid_column_id)->first();
     if (!$price_obj) {
         \App\Helpers\Assistant::exception("Не указана цена для продукта {$this->getProduct()->id} в колонке {$current_max_pricing_grid_column_id}");
         return 0;
     }
     return $price_obj->price;
 }
 /**
  * Возвращает модели ценовых колонок в порядке роста цен, предварительно проверив корректность ценовых диапазонов
  * @return array
  * @throws \Exception
  */
 public function columns()
 {
     $columns_models = $this->hasMany('\\App\\Models\\PricingGridColumnModel', 'pricing_grid_id')->orderBy('min_sum');
     if (!$columns_models->count()) {
         return [];
     }
     $columns_models_arr = [];
     $last_max_sum = 0;
     foreach ($columns_models->get() as $column_model) {
         $current_min_sum = doubleval($column_model->min_sum);
         $current_max_sum = doubleval($column_model->max_sum);
         if ($current_min_sum >= $current_max_sum) {
             \App\Helpers\Assistant::exception('Неверные значения цен (>=) в колонке ID#' . $column_model->id . ' для ценовой сетки ID#' . $this->id);
         }
         if ($current_min_sum != $last_max_sum) {
             //    \App\Helpers\Assistant::exception('Неверные значения цен (!=) в колонке ID#' . $column_model->id . ' для ценовой сетки ID#' . $this->id);
         }
         $last_max_sum = $current_max_sum;
         $columns_models_arr[] = $column_model;
     }
     return $columns_models_arr;
 }
Example #3
0
 /**
  * Возвращает текущую максимальную цену
  * @param $purchase_id
  * @return float
  * @throws \Exception
  */
 public function getCurrentMaxPriceForPurchase($purchase_id)
 {
     $purchase = \App\BusinessLogic\Models\Purchase::find($purchase_id);
     \App\Helpers\Assistant::assertModel($purchase);
     $current_max_pricing_grid_column_id = $purchase->getCurrentMaxPricingGridColumnId();
     $price_obj = \DB::table('prices')->where('product_id', '=', $this->id)->where('column_id', '=', $current_max_pricing_grid_column_id)->first();
     if (!$price_obj) {
         \App\Helpers\Assistant::exception("Не указана цена для продукта {$this->id} в колонке {$current_max_pricing_grid_column_id}");
         return 0;
     }
     return doubleval($price_obj->price);
 }
 /**
  * Вычисляет текущую максимальную колонку и общую сумму заказов
  */
 protected function calculateCurrentMaxPricingGridColumnIdAndOrdersTotalSum()
 {
     $orders_total_sum_matrix = $this->getOrdersTotalSumMatrix();
     $pricing_grid_columns_models_arr = $this->getPricingGridColumns()->get();
     if (!$pricing_grid_columns_models_arr) {
         \App\Helpers\Assistant::exception("Не назначено ни одной ценовой колонки для закупки {$this->id}");
     }
     /**
      * @var $pricing_grid_column_model \App\Models\PricingGridColumnModel
      */
     foreach ($pricing_grid_columns_models_arr as $pricing_grid_column_model) {
         if ($pricing_grid_column_model->maxSumInclusive()) {
             if ($orders_total_sum_matrix[$pricing_grid_column_model->id] > $pricing_grid_column_model->maxSum()) {
                 continue;
             }
         } else {
             if ($orders_total_sum_matrix[$pricing_grid_column_model->id] >= $pricing_grid_column_model->maxSum()) {
                 continue;
             }
         }
         $this->current_max_pricing_grid_column_id = $pricing_grid_column_model->id;
         $this->orders_total_sum = $orders_total_sum_matrix[$pricing_grid_column_model->id];
         break;
     }
 }