241 lines
6.6 KiB
PHP
241 lines
6.6 KiB
PHP
<?php
|
|
|
|
class smImportCsvFull {
|
|
|
|
protected $handle = null;
|
|
|
|
protected $item_per_step = 20;
|
|
|
|
protected $msg = '';
|
|
|
|
public function import($step) {
|
|
$this->handle = fopen(sfConfig::get('sf_cache_dir').'/import_custom.csv', 'r+');
|
|
fseek($this->handle, $step);
|
|
|
|
$this->readData($step);
|
|
|
|
$pos = ftell($this->handle);
|
|
fclose($this->handle);
|
|
return $pos;
|
|
}
|
|
|
|
public function readData($step = 0) {
|
|
$items_read = 0;
|
|
while (!feof($this->handle) && $items_read < $this->item_per_step) {
|
|
$data = fgetcsv($this->handle, null, "\t", '"');
|
|
|
|
if ($items_read == 0 && $step == 0 && $data[0] != 'symbol' && $data[3] != 'name')
|
|
throw new Exception('Nieprawidłowy format pliku.', 1);
|
|
|
|
$this->processData($data);
|
|
$items_read++;
|
|
}
|
|
}
|
|
|
|
public function processData($data) {
|
|
foreach ($data as $key => $value)
|
|
$nD[$key] = trim(iconv('windows-1250','UTF-8',$value));
|
|
$data = $nD;
|
|
|
|
if ($data[0] == '' || $data[0] == 'symbol')
|
|
return false;
|
|
|
|
$code = iconv('windows-1250','UTF-8', $data[0]);
|
|
|
|
$c = new Criteria();
|
|
$c->add(ProductPeer::CODE, $code);
|
|
$p = ProductPeer::doSelectOne($c);
|
|
if (!is_object($p)) {
|
|
$p = new Product();
|
|
$p->setCode($code);
|
|
}
|
|
|
|
$p->setOptName($data[3]);
|
|
|
|
$p->setWeight(str_replace("," , ".", $data[5]));
|
|
|
|
$p->setActive($data[6]);
|
|
|
|
$ct = new Criteria();
|
|
$ct->add(TaxPeer::VAT, 23);
|
|
$tax = TaxPeer::doSelectOne($ct);
|
|
if(!is_object($tax)) {
|
|
$tax = new Tax();
|
|
$tax->setVat(23);
|
|
$tax->setVatName('23%');
|
|
$tax->save();
|
|
}
|
|
$p->setTax($tax);
|
|
$p->setOptVat(23);
|
|
$p->setCulture('pl_PL');
|
|
|
|
|
|
$p->setPriceNetto(str_replace("," , ".", $data[10]));
|
|
$p->setPriceBrutto(str_replace("," , ".", $data[11]));
|
|
|
|
$p->setWholesaleANetto(0.00);
|
|
$p->setWholesaleABrutto(0.00);
|
|
|
|
if (!empty($data[24]))
|
|
{
|
|
$cm = new Criteria();
|
|
|
|
$cm->add(ProducerI18nPeer::NAME, $data[24]);
|
|
|
|
$cm->add(ProducerI18nPeer::CULTURE, 'pl_PL');
|
|
|
|
$producer = ProducerPeer::doSelectWithI18n($c);
|
|
|
|
if (!is_object($producer))
|
|
{
|
|
$producer = new Producer();
|
|
|
|
$producer->setCulture('pl_PL');
|
|
|
|
$producer->setName($data[24]);
|
|
|
|
$producer->save();
|
|
}
|
|
}
|
|
|
|
$p->setProducer($producer);
|
|
|
|
$p->setStock(str_replace("," , ".", $data[12]));
|
|
|
|
$p->setUom($data[19]);
|
|
|
|
$p->setManCode($data[20]);
|
|
|
|
$p->setExecutionTime(str_replace("'" , "", $data[21]));
|
|
|
|
$p->setShortDescription(str_replace( '\n', '', $data[29]));
|
|
|
|
$p->setDescription(str_replace( '\n', '', $data[30]));
|
|
|
|
if ($data[22] == 1)
|
|
{
|
|
$this->addProductToGroupType($p, 'SALES');
|
|
}
|
|
|
|
if ($data[23] == 1)
|
|
{
|
|
$this->addProductToGroupType($p, 'MAIN_PAGE');
|
|
}
|
|
|
|
if ($data[25] == 1)
|
|
{
|
|
$this->addProductToGroupType($p, 'RECOMMEND');
|
|
}
|
|
|
|
if ($data[26] == 1)
|
|
{
|
|
$this->addProductToGroupType($p, 'NEW');
|
|
}
|
|
|
|
if ($data[27] == 1)
|
|
{
|
|
$this->addProductToGroupType($p, 'PROMOTION');
|
|
}
|
|
|
|
if ($data[42] && $data[43] && $data[44])
|
|
{
|
|
$php = new ProductHasPositioning();
|
|
|
|
$php->setCulture('pl_PL');
|
|
|
|
$php->setTitle($data[44]);
|
|
|
|
$php->setKeywords($data[43]);
|
|
|
|
$php->setDescription($data[42]);
|
|
|
|
$p->addProductHasPositioning($php);
|
|
}
|
|
|
|
$images = explode( ',', $data[15] );
|
|
|
|
foreach ($images as $image) {
|
|
|
|
if ($image === $data[16]) {
|
|
|
|
$this->addImage($p, 'http://vulcania.pl/img/72171/'.$image, true);
|
|
|
|
} else {
|
|
|
|
$this->addImage($p, 'http://vulcania.pl/img/72171/'.$image);
|
|
}
|
|
|
|
}
|
|
|
|
$p->save();
|
|
|
|
return true;
|
|
}
|
|
|
|
protected function addImage($p, $imageFilename, $default = false) {
|
|
|
|
$fileInfo = pathinfo($imageFilename);
|
|
if (!empty($imageFilename) && !empty($fileInfo['extension'])) {
|
|
$c = new Criteria();
|
|
$c->add(sfAssetPeer::FILENAME, $fileInfo['basename']);
|
|
$sfAsset = sfAssetPeer::doSelectOne($c);
|
|
|
|
if (!is_object($sfAsset)) {
|
|
$b = new sfWebBrowser(array(), 'sfCurlAdapter', array('ssl_verify' => false));
|
|
$b->get($imageFilename);
|
|
$image = $b->getResponseText();
|
|
|
|
$input_file = sfConfig::get('sf_upload_dir').DIRECTORY_SEPARATOR.'assets'.DIRECTORY_SEPARATOR.$fileInfo['basename'];
|
|
file_put_contents($input_file, $image);
|
|
|
|
$asset = new ProductHasSfAsset();
|
|
$asset->setProductId($p->getId());
|
|
$asset->createAsset($fileInfo['basename'], $input_file, ProductHasSfAssetPeer::IMAGE_FOLDER, $fileInfo['basename']);
|
|
if ($default == true) $asset->setIsDefault(true);
|
|
$asset->save();
|
|
} else {
|
|
$c = new Criteria();
|
|
$c->add(ProductHasSfAssetPeer::SF_ASSET_ID, $sfAsset->getId());
|
|
$c->add(ProductHasSfAssetPeer::PRODUCT_ID, $p->getId());
|
|
if (!ProductHasSfAssetPeer::doCount($c)) {
|
|
$asset = new ProductHasSfAsset();
|
|
$asset->setProductId($p->getId());
|
|
$asset->setSfAssetId($sfAsset->getId());
|
|
if ($default == true) $asset->setIsDefault(true);
|
|
$asset->save();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected function getProductGroupByType($type)
|
|
{
|
|
$c = new Criteria();
|
|
|
|
$c->add(ProductGroupPeer::PRODUCT_GROUP, $type);
|
|
|
|
return ProductGroupPeer::doSelectOne($c);
|
|
}
|
|
|
|
protected function addProductToGroupType($p, $group_type)
|
|
{
|
|
$product_group = $this->getProductGroupByType($group_type);
|
|
|
|
$product_group_has_product = new ProductGroupHasProduct();
|
|
|
|
$product_group_has_product->setProduct($p);
|
|
|
|
$product_group_has_product->setProductGroup($product_group);
|
|
|
|
$p->addProductGroupHasProduct($product_group_has_product);
|
|
}
|
|
|
|
public function close() {
|
|
|
|
}
|
|
|
|
public function getMessage() {
|
|
return $this->msg;
|
|
}
|
|
|
|
} |