From f7f95504d2dd822c5134fa9327a425d41cec13ee Mon Sep 17 00:00:00 2001 From: Karnovsky A Date: Tue, 14 Jun 2016 16:13:48 +0300 Subject: [PATCH] - --- common/modules/product/models/Import.php | 534 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/modules/product/models/ProductVariantTypeSearch.php | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ common/modules/product/models/import.php | 535 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 3 files changed, 604 insertions(+), 535 deletions(-) create mode 100644 common/modules/product/models/Import.php create mode 100644 common/modules/product/models/ProductVariantTypeSearch.php delete mode 100644 common/modules/product/models/import.php diff --git a/common/modules/product/models/Import.php b/common/modules/product/models/Import.php new file mode 100644 index 0000000..abbbc56 --- /dev/null +++ b/common/modules/product/models/Import.php @@ -0,0 +1,534 @@ + 'csv'], + ]; + } + + /** + * @inheritdoc + */ + public function attributeLabels() + { + return [ + 'file' => Yii::t('product', 'File'), + ]; + } + + public function getType() { + if (!$this->type) { + $this->type = 'products'; + } + return $this->type; + } + + public function goPrices($from = 0, $limit = null) { + set_time_limit(0); + $new_products = $linked_products = 0; + + if ( !($handle = $this->getProductsFile('uploadFilePrices')) ) { + $this->errors[] = 'File not found'; + return FALSE; + } + + $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); + if ($from) { + fseek($handle, $from); + } + + $j = 0; + + $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices'), null, null, null, 1000000))); + + while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE && (empty($limit) || $j++ < $limit)) + { + foreach ($data as &$value) + { + if (!$is_utf) { + $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); + } + $value = trim ($value); + } + + // данные строк + $modification_code = @$data[0]; + $price = floatval(@$data[1]); + $price_promo = floatval(@$data[2]); + $count = intval(@$data[3]); + $city_name = @$data[4]; + $product_title = @$data[5]; + + if (empty ($modification_code)) { + continue; + } + // товары в пути + if (empty ($city_name)) + { +// $this->saveNotFoundRecord ( +// [$modification_code, $product_title], +// Yii::getAlias('@uploadFilePricesAway') +// ); + + $this->output[] = 'Товар '. $product_title . ' в пути'; + + continue; + } + + if ( ($productVariant = ProductVariant::find()->filterWhere(['sku' => $modification_code])->one()) === null ) { + // 'Нет даной модификации в базе'; +// $this->saveNotFoundRecord ( +// [$modification_code, $product_title], +// Yii::getAlias('@uploadFilePricesNoVariant') +// ); + + $this->output[] = 'Для товара '. $product_title . ' не найдено соотвествие'; + + continue; + } + + + $quantity = 0; + + // ===== Set stock ==== + if ( $city_name ) { + if ( ($stock = Stock::find()->filterWhere(['ilike', 'name', trim($city_name)])->one()) === null ) { + // Create stock + $stock = new Stock(); + $stock->name = trim($city_name); + $stock->save(); + } + + $productVariant->stocks[$stock->stock_id] = $count; + $quantity = $quantity + $count; + } + + if ($price_promo) { + $productVariant->price_old = $price; + $productVariant->price = $price_promo; + } else { + $productVariant->price = $price; + $productVariant->price_old = $price_promo; + } + + $productVariant->stock = $quantity; + + $productVariant->save(); + + $this->output[] = 'Товар '. $product_title .' успешно сохранен'; + } + + $result = [ + 'end' => feof($handle), + 'from' => ftell($handle), + 'totalsize' => $filesize, + 'items' => $this->output, + + ]; + + fclose ($handle); + + if ($result['end']) { + unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); + } + + return $result; + } + + public function goProducts($from = 0, $limit = null) { + set_time_limit(0); + $new_products = $linked_products = 0; + + if ( !($handle = $this->getProductsFile('uploadFileProducts')) ) { + $this->errors[] = 'File not found'; + return FALSE; + } + + $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); + + if ($from) { + fseek($handle, $from); + } + + $j = 0; + + $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'), null, null, null, 1000000))); + + $result_items = []; + + while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE && (empty($limit) || $j++ < $limit)) + { + foreach ($data as &$value) + { + if (!$is_utf) { + $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); + } + $value = trim ($value); + } + + // будет всегда 19 элементов + for ($i = 0; $i <= 18; $i++) + { + if (! isset ($data[$i])) + { + $data[$i] = null; + } + } + + // 1 Группа (категория) + $catalog_name = $data[0]; + if (empty ($catalog_name)) + { + $result_items[] = "Не указана категория (строка $j)"; + continue; + } + + // 2 Бренд + $brand_name = $data[1]; + if (empty ($brand_name)) + { + $result_items[] = "Не указан бренд (строка $j)"; + continue; + } + + // 3 Название товара + $product_name = $data[2]; + if (empty ($product_name)) + { + $result_items[] = "Не указано наименование товара (строка $j)"; + continue; + } + + // 4 Описание Укр + $product_body_uk = $data[3]; + + // 5 Описание Рус + $product_body_ru = $data[4]; + + // 6 Фильтр (через запятую) + $filters = explode (',', $data[5]); + + // 7 Доп фильтр через запятую + $filters_extra = explode (',', $data[6]); + + // 8 Пол череззапятую (мужской, женский, детский, унисекс) + $gender = explode (',', $data[7]); + + // 9 Год + $years = explode (',', $data[8]); + + // 11 Цена акция + $product_cost_old = floatval($data[10]); + + // 10 Цена + if ($product_cost_old) { + $product_cost_old = floatval($data[9]); + $product_cost = floatval($data[10]); + } + + // 12 Акция + $product_akciya = (bool)$data[11]; + + // 13 Сопуд. Тов. + $similar = explode (',', $data[12]); + + // 14 Новинки + $product_new = (bool)$data[13]; + + // 15 Топ продаж + $product_top = (bool)$data[14]; + + // 16 Сетка Характеристик + $feature = explode ('=', $data[15]); + + // 17 ВИДЕО КОД + $product_video = $data[16]; + + // 18 Галлерея фото + if (trim($data[17])) { + $fotos = explode (',', trim($data[17])); + } + + // 19 Штрих код товара. + // расшифровал - это модификации товара! + + $product_image = explode ('=', $data[18]); + $product_image = @$product_image[3]; + + if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { + $_product = new Product(); + } + + $is_new_product = empty($_product->product_id); + + // ==== Set category ==== + if ( ($category = CategoryName::find()->filterWhere(['ilike', 'value', trim($catalog_name)])->one()) === null ) { + // Create category + $category = new Category(); + $category->name = trim($catalog_name); + $category->save(); + } + $_product->categories = [$category->category_id]; + + // ===== Set brand ==== + if ( $brand_name ) { + if ( ($brand = BrandName::find()->filterWhere(['ilike', 'value', trim($brand_name)])->one()) !== null ) { + $_product->brand_id = $brand->brand_id; + } else { + // Create brand + $brand = new Brand(); + $brand->name = trim($brand_name); + $brand->save(); + $_product->brand_id = $brand->brand_id; + } + } + + $_product->name = $product_name; + $_product->video = $product_video; + $_product->description = $product_body_ru; + $_product->is_top = $product_top; + $_product->akciya = $product_akciya; + $_product->is_new = $product_new; + + if (!$_product->save()) { + $result_items[] = 'Product #'. $_product->name .' not saved' . " (строка $j)"; + continue; + } + + if (!empty($fotos)) { + foreach($fotos as $foto) { + $source_image = Yii::getAlias('@uploadDir') . '/product_images/'. urlencode($foto); + + if (file_exists($source_image)) { + if (($productImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $foto])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null) { + copy($source_image, Yii::getAlias('@productsDir') . "/" . $foto); + $productImage = new ProductImage(); + $productImage->product_id = $_product->product_id; + $productImage->image = $foto; + $productImage->save(); + } + } + } + } + + // нужно для проставления характеристик относящихся к модификациям + $MOD_ARRAY = []; + + for ($i = 18; $i < count ($data); $i ++) + { + if (! empty ($data[$i])) + { + $mod_arr = explode ('=', $data[$i]); + $mod_art = $mod_arr[0]; + $mod_size = $mod_arr[1]; + $mod_color = $mod_arr[2]; + $mod_image = $mod_arr[3]; + $mod_cost = floatval($product_cost); + $mod_old_cost = floatval($product_cost_old); + + // Check product variant + if ( ($_productVariant = ProductVariant::find()->andFilterWhere(['ilike', 'sku', $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { + $_productVariant = new ProductVariant(); + $_productVariant->product_id = $_product->product_id; + } + $_productVariant->product_unit_id = 1; + + $_productVariant->sku = $mod_art; + $_productVariant->price = $mod_cost; + $_productVariant->price_old = $mod_old_cost; + $_productVariant->stock = 1; + + $product_variant_type_name = ''; + if (! empty ($mod_color)) { + $product_variant_type_name = 'Цвет'; + $_productVariant->name = $mod_color; + } + elseif (! empty ($mod_size)) { + $product_variant_type_name = 'Размер'; + $_productVariant->name = $mod_size; + } + + // ===== Set variant type ==== + if ( $product_variant_type_name ) { + if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; + } else { + $product_variant_type = new ProductVariantType(); + $product_variant_type->name = $product_variant_type_name; + $product_variant_type->save(); + $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; + } + } + $_productVariant->save(false); + + $MOD_ARRAY[] = $_productVariant->product_variant_id; + + if ($mod_image) { + $source_image = Yii::getAlias('@uploadDir') . '/product_images/'. urlencode($mod_image); + if (file_exists($source_image)) { + if (($variantImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { + copy($source_image, Yii::getAlias('@productsDir') . "/" . $mod_image); + $variantImage = new ProductImage(); + $variantImage->product_id = $_product->product_id; + $variantImage->product_variant_id = $_productVariant->product_variant_id; + $variantImage->image = $mod_image; + $variantImage->save(); + } + } + } + } + } + + $options = []; + + if (! empty ($filters)) { + // Set Naznachenie (tax_group_id = 20) + foreach($filters as $filter) { + $filter = trim($filter); + if (!$filter) { + continue; + } + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_TARGET])->one()) === null ) { + // Create option + $option = new TaxOption(); + $option->tax_group_id = 20; + $option->save(); + + $value = new TaxValueString(); + $value->tax_option_id = $option->tax_option_id; + $value->value = $filter; + $value->save(); + + $option->default_value = $value->tax_value_id; + $option->save(); + } + $options[] = $value->tax_option_id; + } + } + + if (! empty ($years)) { + // Set God (tax_group_id = 21) + foreach($years as $filter) { + $filter = trim($filter); + if (!$filter) { + continue; + } + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_YEAR])->one()) === null ) { + // Create option + $option = new TaxOption(); + $option->tax_group_id = 21; + $option->save(); + + $value = new TaxValueString(); + $value->tax_option_id = $option->tax_option_id; + $value->value = $filter; + $value->save(); + + $option->default_value = $value->tax_value_id; + $option->save(); + } + $options[] = $value->tax_option_id; + } + } + + if (! empty ($gender)) { + // Set Pol (tax_group_id = 22) + foreach($gender as $filter) { + $filter = trim($filter); + if (!$filter) { + continue; + } + if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_SEX])->one()) === null ) { + // Create option + $option = new TaxOption(); + $option->tax_group_id = 22; + $option->save(); + + $value = new TaxValueString(); + $value->tax_option_id = $option->tax_option_id; + $value->value = $filter; + $value->save(); + + $option->default_value = $value->tax_value_id; + $option->save(); + } + $options[] = $value->tax_option_id; + } + } + + if (!empty($options)) { + $_product->options = $options; + } + + $_product->save(); + + $result_items[] = "Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")" . " (строка $j)"; + } + + $result = [ + 'end' => feof($handle), + 'from' => ftell($handle), + 'totalsize' => $filesize, + 'items' => $result_items, + + ]; + + fclose ($handle); + + if ($result['end']) { + unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); + } + + return $result; + } + + private function getProductsFile($file_type) { + $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@'. $file_type); + if (!is_file($filename)) { + $this->errors[] = "File $filename not found"; + return FALSE; + } + return fopen ($filename, 'r'); + } + + private function saveNotFoundRecord (array $line, $filename) + { + $str = implode (';', $line)."\n"; + $str = iconv ("UTF-8//TRANSLIT//IGNORE", "windows-1251", $str); + + $fg = fopen (Yii::getAlias('@uploadDir') .'/'. $filename, 'a+'); + fputs ($fg, $str); + fclose ($fg); + } +} \ No newline at end of file diff --git a/common/modules/product/models/ProductVariantTypeSearch.php b/common/modules/product/models/ProductVariantTypeSearch.php new file mode 100644 index 0000000..c4804b4 --- /dev/null +++ b/common/modules/product/models/ProductVariantTypeSearch.php @@ -0,0 +1,70 @@ + $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; + } + + // grid filtering conditions + $query->andFilterWhere([ + 'product_variant_type_id' => $this->product_variant_type_id, + ]); + + $query->andFilterWhere(['like', 'name', $this->name]) + ->andFilterWhere(['like', 'name2', $this->name2]); + + return $dataProvider; + } +} diff --git a/common/modules/product/models/import.php b/common/modules/product/models/import.php deleted file mode 100644 index a3c3a7a..0000000 --- a/common/modules/product/models/import.php +++ /dev/null @@ -1,535 +0,0 @@ - 'csv'], - ]; - } - - /** - * @inheritdoc - */ - public function attributeLabels() - { - return [ - 'file' => Yii::t('product', 'File'), - ]; - } - - public function getType() { - if (!$this->type) { - $this->type = 'products'; - } - return $this->type; - } - - public function goPrices($from = 0, $limit = null) { - set_time_limit(0); - $new_products = $linked_products = 0; - - if ( !($handle = $this->getProductsFile('uploadFilePrices')) ) { - $this->errors[] = 'File not found'; - return FALSE; - } - - $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); - - if ($from) { - fseek($handle, $from); - } - - $j = 0; - - $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices'), null, null, null, 1000000))); - - while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE && (empty($limit) || $j++ < $limit)) - { - foreach ($data as &$value) - { - if (!$is_utf) { - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); - } - $value = trim ($value); - } - - // данные строк - $modification_code = @$data[0]; - $price = floatval(@$data[1]); - $price_promo = floatval(@$data[2]); - $count = intval(@$data[3]); - $city_name = @$data[4]; - $product_title = @$data[5]; - - if (empty ($modification_code)) { - continue; - } - // товары в пути - if (empty ($city_name)) - { - $this->saveNotFoundRecord ( - [$modification_code, $product_title], - Yii::getAlias('@uploadFilePricesAway') - ); - - $this->output[] = 'Товар '. $product_title . ' в пути'; - - continue; - } - - if ( ($productVariant = ProductVariant::find()->filterWhere(['sku' => trim($modification_code)])->one()) === null ) { - // 'Нет даной модификации в базе'; - $this->saveNotFoundRecord ( - [$modification_code, $product_title], - Yii::getAlias('@uploadFilePricesNoVariant') - ); - - $this->output[] = 'Для товара '. $product_title . ' не найдено соотвествие'; - - continue; - } - - $quantity = 0; - - // ===== Set stock ==== - if ( $city_name ) { - if ( ($stock = Stock::find()->filterWhere(['ilike', 'name', trim($city_name)])->one()) === null ) { - // Create stock - $stock = new Stock(); - $stock->name = trim($city_name); - $stock->save(); - } - - $productVariant->stocks[$stock->stock_id] = $count; - $quantity = $quantity + $count; - } - - if ($price_promo) { - $productVariant->price_old = $price; - $productVariant->price = $price_promo; - } else { - $productVariant->price = $price; - $productVariant->price_old = $price_promo; - } - - $productVariant->stock = $quantity; - - $productVariant->save(); - - $this->output[] = 'Товар '. $product_title .' успешно сохранен'; - } - - $result = [ - 'end' => feof($handle), - 'from' => ftell($handle), - 'totalsize' => $filesize, - 'items' => $this->output, - - ]; - - fclose ($handle); - - if ($result['end']) { - unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFilePrices')); - $this->output[] = 'Импорт цен успешно завершен!'; - } - - return $result; - } - - public function goProducts($from = 0, $limit = null) { - set_time_limit(0); - $new_products = $linked_products = 0; - - if ( !($handle = $this->getProductsFile('uploadFileProducts')) ) { - $this->errors[] = 'File not found'; - return FALSE; - } - - $filesize = filesize(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); - - if ($from) { - fseek($handle, $from); - } - - $j = 0; - - $is_utf = (preg_match('//u', file_get_contents(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts'), null, null, null, 1000000))); - - $result_items = []; - - while (($data = fgetcsv ($handle, 10000, ";")) !== FALSE && (empty($limit) || $j++ < $limit)) - { - foreach ($data as &$value) - { - if (!$is_utf) { - $value = iconv ('windows-1251', "UTF-8//TRANSLIT//IGNORE", $value); - } - $value = trim ($value); - } - - // будет всегда 19 элементов - for ($i = 0; $i <= 18; $i++) - { - if (! isset ($data[$i])) - { - $data[$i] = null; - } - } - - // 1 Группа (категория) - $catalog_name = $data[0]; - if (empty ($catalog_name)) - { - $result_items[] = "Не указана категория (строка $j)"; - continue; - } - - // 2 Бренд - $brand_name = $data[1]; - if (empty ($brand_name)) - { - $result_items[] = "Не указан бренд (строка $j)"; - continue; - } - - // 3 Название товара - $product_name = $data[2]; - if (empty ($product_name)) - { - $result_items[] = "Не указано наименование товара (строка $j)"; - continue; - } - - // 4 Описание Укр - $product_body_uk = $data[3]; - - // 5 Описание Рус - $product_body_ru = $data[4]; - - // 6 Фильтр (через запятую) - $filters = explode (',', $data[5]); - - // 7 Доп фильтр через запятую - $filters_extra = explode (',', $data[6]); - - // 8 Пол череззапятую (мужской, женский, детский, унисекс) - $gender = explode (',', $data[7]); - - // 9 Год - $years = explode (',', $data[8]); - - // 11 Цена акция - $product_cost_old = floatval($data[10]); - - // 10 Цена - if ($product_cost_old) { - $product_cost_old = floatval($data[9]); - $product_cost = floatval($data[10]); - } - - // 12 Акция - $product_akciya = (bool)$data[11]; - - // 13 Сопуд. Тов. - $similar = explode (',', $data[12]); - - // 14 Новинки - $product_new = (bool)$data[13]; - - // 15 Топ продаж - $product_top = (bool)$data[14]; - - // 16 Сетка Характеристик - $feature = explode ('=', $data[15]); - - // 17 ВИДЕО КОД - $product_video = $data[16]; - - // 18 Галлерея фото - if (trim($data[17])) { - $fotos = explode (',', trim($data[17])); - } - - // 19 Штрих код товара. - // расшифровал - это модификации товара! - - $product_image = explode ('=', $data[18]); - $product_image = @$product_image[3]; - - if ( ($_product = Product::find()->filterWhere(['ilike', 'name', trim($product_name)])->one()) === null ) { - $_product = new Product(); - } - - $is_new_product = empty($_product->product_id); - - // ==== Set category ==== - if ( ($category = CategoryName::find()->filterWhere(['ilike', 'value', trim($catalog_name)])->one()) === null ) { - // Create category - $category = new Category(); - $category->name = trim($catalog_name); - $category->save(); - } - $_product->categories = [$category->category_id]; - - // ===== Set brand ==== - if ( $brand_name ) { - if ( ($brand = BrandName::find()->filterWhere(['ilike', 'value', trim($brand_name)])->one()) !== null ) { - $_product->brand_id = $brand->brand_id; - } else { - // Create brand - $brand = new Brand(); - $brand->name = trim($brand_name); - $brand->save(); - $_product->brand_id = $brand->brand_id; - } - } - - $_product->name = $product_name; - $_product->video = $product_video; - $_product->description = $product_body_ru; - $_product->is_top = $product_top; - $_product->akciya = $product_akciya; - $_product->is_new = $product_new; - - if (!$_product->save()) { - $result_items[] = 'Product #'. $_product->name .' not saved' . " (строка $j)"; - continue; - } - - if (!empty($fotos)) { - foreach($fotos as $foto) { - $source_image = Yii::getAlias('@uploadDir') . '/product_images/'. urlencode($foto); - - if (file_exists($source_image)) { - if (($productImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $foto])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null) { - copy($source_image, Yii::getAlias('@productsDir') . "/" . $foto); - $productImage = new ProductImage(); - $productImage->product_id = $_product->product_id; - $productImage->image = $foto; - $productImage->save(); - } - } - } - } - - // нужно для проставления характеристик относящихся к модификациям - $MOD_ARRAY = []; - - for ($i = 18; $i < count ($data); $i ++) - { - if (! empty ($data[$i])) - { - $mod_arr = explode ('=', $data[$i]); - $mod_art = $mod_arr[0]; - $mod_size = $mod_arr[1]; - $mod_color = $mod_arr[2]; - $mod_image = $mod_arr[3]; - $mod_cost = floatval($product_cost); - $mod_old_cost = floatval($product_cost_old); - - // Check product variant - if ( ($_productVariant = ProductVariant::find()->andFilterWhere(['ilike', 'sku', $mod_art])->andFilterWhere(['product_id' => $_product->product_id])->one()) === null ) { - $_productVariant = new ProductVariant(); - $_productVariant->product_id = $_product->product_id; - } - $_productVariant->product_unit_id = 1; - - $_productVariant->sku = $mod_art; - $_productVariant->price = $mod_cost; - $_productVariant->price_old = $mod_old_cost; - $_productVariant->stock = 1; - - $product_variant_type_name = ''; - if (! empty ($mod_color)) { - $product_variant_type_name = 'Цвет'; - $_productVariant->name = $mod_color; - } - elseif (! empty ($mod_size)) { - $product_variant_type_name = 'Размер'; - $_productVariant->name = $mod_size; - } - - // ===== Set variant type ==== - if ( $product_variant_type_name ) { - if ( ($product_variant_type = ProductVariantType::find()->filterWhere(['ilike', 'name', $product_variant_type_name])->one()) !== null ) { - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; - } else { - $product_variant_type = new ProductVariantType(); - $product_variant_type->name = $product_variant_type_name; - $product_variant_type->save(); - $_productVariant->product_variant_type_id = $product_variant_type->product_variant_type_id; - } - } - $_productVariant->save(false); - - $MOD_ARRAY[] = $_productVariant->product_variant_id; - - if ($mod_image) { - $source_image = Yii::getAlias('@uploadDir') . '/product_images/'. urlencode($mod_image); - if (file_exists($source_image)) { - if (($variantImage = ProductImage::find()->andFilterWhere(['ilike', 'image', $mod_image])->andFilterWhere(['product_variant_id' => $_productVariant->product_variant_id])->one()) === null) { - copy($source_image, Yii::getAlias('@productsDir') . "/" . $mod_image); - $variantImage = new ProductImage(); - $variantImage->product_id = $_product->product_id; - $variantImage->product_variant_id = $_productVariant->product_variant_id; - $variantImage->image = $mod_image; - $variantImage->save(); - } - } - } - } - } - - $options = []; - - if (! empty ($filters)) { - // Set Naznachenie (tax_group_id = 20) - foreach($filters as $filter) { - $filter = trim($filter); - if (!$filter) { - continue; - } - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_TARGET])->one()) === null ) { - // Create option - $option = new TaxOption(); - $option->tax_group_id = 20; - $option->save(); - - $value = new TaxValueString(); - $value->tax_option_id = $option->tax_option_id; - $value->value = $filter; - $value->save(); - - $option->default_value = $value->tax_value_id; - $option->save(); - } - $options[] = $value->tax_option_id; - } - } - - if (! empty ($years)) { - // Set God (tax_group_id = 21) - foreach($years as $filter) { - $filter = trim($filter); - if (!$filter) { - continue; - } - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_YEAR])->one()) === null ) { - // Create option - $option = new TaxOption(); - $option->tax_group_id = 21; - $option->save(); - - $value = new TaxValueString(); - $value->tax_option_id = $option->tax_option_id; - $value->value = $filter; - $value->save(); - - $option->default_value = $value->tax_value_id; - $option->save(); - } - $options[] = $value->tax_option_id; - } - } - - if (! empty ($gender)) { - // Set Pol (tax_group_id = 22) - foreach($gender as $filter) { - $filter = trim($filter); - if (!$filter) { - continue; - } - if ( ($value = TaxValueString::find()->innerJoinWith('taxOption')->andFilterWhere(['ilike', 'value', $filter])->andFilterWhere(['tax_option.tax_group_id' => ProductHelper::PRODUCT_TAX_GROUP_ID_SEX])->one()) === null ) { - // Create option - $option = new TaxOption(); - $option->tax_group_id = 22; - $option->save(); - - $value = new TaxValueString(); - $value->tax_option_id = $option->tax_option_id; - $value->value = $filter; - $value->save(); - - $option->default_value = $value->tax_value_id; - $option->save(); - } - $options[] = $value->tax_option_id; - } - } - - if (!empty($options)) { - $_product->options = $options; - } - - $_product->save(); - - $result_items[] = "Product {$_product->name} #{$_product->product_id} saved (". ($is_new_product ? 'new product' : 'exists product') .")" . " (строка $j)"; - } - - $result = [ - 'end' => feof($handle), - 'from' => ftell($handle), - 'totalsize' => $filesize, - 'items' => $result_items, - - ]; - - fclose ($handle); - - if ($result['end']) { - unlink(Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@uploadFileProducts')); - } - - return $result; - } - - private function getProductsFile($file_type) { - $filename = Yii::getAlias('@uploadDir') .'/'. Yii::getAlias('@'. $file_type); - if (!is_file($filename)) { - $this->errors[] = "File $filename not found"; - return FALSE; - } - return fopen ($filename, 'r'); - } - - private function saveNotFoundRecord (array $line, $filename) - { - $str = implode (';', $line)."\n"; - $str = iconv ("UTF-8//TRANSLIT//IGNORE", "windows-1251", $str); - - $fg = fopen (Yii::getAlias('@uploadDir') .'/'. $filename, 'a+'); - fputs ($fg, $str); - fclose ($fg); - } -} \ No newline at end of file -- libgit2 0.21.4