示例#1
0
 private function profileDefault($mode = 'run', $priceType = null)
 {
     if ($mode == 'info') {
         return ['name' => 'Базовый', 'description' => 'Профиль по умолчанию'];
     }
     if ($mode == 'run') {
         $offers = \app\models\Offers::find()->all();
         $arCsv = ['Название;Поставщик;Исходная цена;Посчитанная цена;Количество'];
         $providers = \app\models\Providers::find()->all();
         $arProviders = [];
         foreach ($providers as $value) {
             $arProviders[$value->id] = $value->name;
         }
         foreach ($offers as $offer) {
             $name = \app\components\Goods::getName($offer->goods_id);
             $provider = $arProviders[$offer->providers_id];
             $price = $offer->price;
             $quantity = $offer->quantity;
             //                print $name;
             $calcPrice = $price * \app\components\CalculationDiscount::calc($offer->goods_id, $offer->providers_id, $priceType);
             //                $calcPrice =  \app\components\CalculationDiscount::calc($offer);
             $arCsv[] = "{$name};{$provider};{$price};{$calcPrice};{$quantity}";
         }
         $csv = implode(chr(10), $arCsv);
         $this->_unloadStr('prise.csv', iconv('utf-8', 'windows-1251', $csv));
     }
 }
示例#2
0
 public function run()
 {
     // Ключ кеша
     $key = $this->providerId . '_' . $this->filename . '_' . filectime(Yii::$app->params['uploadFolder'] . $this->filename);
     if (Yii::$app->cache->exists($key)) {
         $arRes = Yii::$app->cache->get($key);
     } else {
         // Удалить старые предложения поставщика
         \app\models\Offers::deleteAll('providers_id = :providers_id', [':providers_id' => $this->providerId]);
         // Сохранить дату последней загрузки прайса
         $provider = \app\models\Providers::findOne($this->providerId);
         $provider->date_last_down = time();
         $provider->save();
         // Получить файл
         $arrCSV = file(Yii::$app->params['uploadFolder'] . $this->filename);
         // Обработка каждой строки файла
         $arrToAccord = [];
         foreach ($arrCSV as $k => $strCSV) {
             // Строку в массив
             $arStrCSV = str_getcsv($strCSV, ';');
             // Пропустить неполные строки
             if (strlen(trim($arStrCSV[$this->arrAccords['name']])) == 0 || strlen(trim($arStrCSV[$this->arrAccords['price']])) == 0 || strlen(trim($arStrCSV[$this->arrAccords['quantity']])) == 0) {
                 continue;
             }
             // Нормализовать массив строки от текущего поставщика
             $arResRow = $this->normalizeStrOfPrice($arStrCSV);
             // Получить тип товара
             $arResRow = $this->getGoodType($arResRow);
             if (isset($this->arrAccords['identifier'])) {
                 // Задан артикул
                 $res = $this->getAccordsByIdentifier($arResRow);
             } else {
                 // Не задан артикул
                 $res = $this->getAccordsByName($arResRow);
             }
             if ($res instanceof Accords) {
                 // Есть соответствие
                 // Пишем в таблицу предложений
                 $offer = new \app\models\Offers();
                 $offer->quantity = $arResRow['quantity'];
                 $offer->price = $arResRow['price'];
                 $offer->goods_id = $res->goods_id;
                 $offer->providers_id = $res->providers_id;
                 $offer->save();
             } else {
                 // Нет соответствия
                 // Вывести на согласование
                 $arResRow['k'] = $k;
                 $arrToAccord[$k] = $arResRow;
             }
             //                if ($k > 10)
             //                    break;
             //            break;
         }
         // Сохранить полученные данные в кеш
         $arRes = ['arrToAccord' => $arrToAccord, 'arGoodTypes' => $this->arGoodTypes, 'providerId' => $this->providerId, 'key' => $key];
         Yii::$app->cache->set($key, $arRes);
     }
     return $arRes;
 }
示例#3
0
 /**
  * Creates data provider instance with search query applied
  *
  * @param array $params
  *
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = Offers::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     $this->load($params);
     if (!$this->validate()) {
         // uncomment the following line if you do not want to return any records when validation fails
         // $query->where('0=1');
         return $dataProvider;
     }
     $query->andFilterWhere(['id' => $this->id, 'quantity' => $this->quantity, 'fix_price' => $this->fix_price, 'providers_id' => $this->providers_id, 'goods_id' => $this->goods_id, 'price' => $this->price]);
     return $dataProvider;
 }
示例#4
0
 /**
  * @return \yii\db\ActiveQuery
  */
 public function getOffers()
 {
     return $this->hasMany(Offers::className(), ['goods_id' => 'id']);
 }