%PDF- %PDF-
| Direktori : /mnt/tnb2/git/import-prestashop/ |
| Current File : //mnt/tnb2/git/import-prestashop/Pemik.php |
<?php
/**
* Created by PhpStorm.
* User: Ludek
* Date: 7. 10. 2016
* Time: 13:40
*/
class Pemik extends Nakladatel
{
public $ceny = array();
public $nacetl;
public $zanryPrevod = array();
public $zakazaneKateg = array();
public $pocitadloKolikZpracuji;
// public $AlbatrosNakladatele = array("26737515", "64797724", "28377141", "27411826", "65410602");
public function __construct()
{
// Nacti veci z PEMIKU a rozbal je
// system("/bin/bash import/pemik.sh");
// $urlKatalog = "http://www.pemic-books.cz/PemicCatalog/Default.aspx?guid=68C310F5-3C1E-4A7C-A58E-ACEE81A29662&file=catalogue_full";
// $souborKatalog = "Catalogue_full_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.zip";
$urlKatalog = "http://www.pemic-books.cz/PemicCatalog/Default.aspx?guid=68C310F5-3C1E-4A7C-A58E-ACEE81A29662&file=catalogue";
$souborKatalog = "Catalogue_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.zip";
$urlCeny = "http://www.pemic-books.cz/PemicCatalog/Default.aspx?guid=68C310F5-3C1E-4A7C-A58E-ACEE81A29662&file=price";
$souborCeny = "Price_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.zip";
$this->nacetl = True;
$this->NactiARozbal($urlKatalog,$souborKatalog);
$this->NactiARozbal($urlCeny,$souborCeny);
}
function NactiARozbal($url,$soubor)
{
if($this->downloadZipFile($url, $soubor))
echo "nacetl $soubor \n";
$path = "/tmp";
$zip = new ZipArchive;
$res = $zip->open($soubor);
if ($res === TRUE)
{
$zip->extractTo($path);
$zip->close();
echo "povedlo se $soubor rozbalit do $path \n";
}
else
{
system("unzip $path/$soubor", $returnValue);
if($returnValue)
{
echo "Nemohu otevrit soubor $soubor \n";
$this->nacetl = false;
}
}
}
function zpracujData()
{
$nazev = "/www/varak.net/shop.varak.net/import/vstupy/Pemik_".date("Ymd").".txt";
$katalog = "/tmp/Catalogue_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt";
// $katalog = "/tmp/Catalogue_full_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt";
copy($katalog, $nazev);
// if (!$this->nacetl)
// $katalog = "https://shop.varak.net/import/Catalogue_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt";
// return;
$this->nactiZanry();
$this->nactiCeny();
$this->pocitadloKolikZpracuji = 0;
if (($handle = fopen($katalog, "r")) !== FALSE)
// if (($handle = fopen('import/Catalogue_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt', "r")) !== FALSE)
{
while (($kniha = fgetcsv($handle, 0, ",", '"')) !== FALSE)
{
/* 0 - "SORTKOD",1 - "SORTNAZEV",2 - "SORTZKNAZEV",3 - "SORTPODNAZEV",4 - "EDICE",5 - "SORTAUTOR",6 - "DOSTUPNOST",7 - "DATPLVYD",
8 -"RMVYDANI",9 - "RMDOTISK",10 - "SORTJAZYK",11 - "SORTZNACKA",12 - "VYROBCE",13 - "VYROBCEICO",14 - "SORTDRUH",15 - "SKUPKOD",
16 - "SKUPNAZEV",17 - "VAZBA",18 - "EAN",19 - "ISBN",20 - "POCSTRAN",21 - "POCKSBAL",22 - "VYSKA",23 - "SIRKA",24 - "TLOUSTKA",
25 - "HMOTNOST",26 - "ANOTACE",27 - "PICTURE",28 - "PICTURE_SMALL",29 - "SORTAUTOR2",30 - "SORT_FORMA" */
if ($kniha[12]=="EUROMEDIA GROUP a.s." or $kniha[0]=="SORTKOD") continue; // Euromedia - nezpracovavat, nebo prvni radek nezpracovavat
if ((string)$kniha[6]=="R") continue; // Nedostupne - nezpracovavat
if ((string)$kniha[10]=="SK" or (string)$kniha[10]=="EN" or (string)$kniha[10]=="FR" or (string)$kniha[10]=="ES")
continue; // Slovensko - nezpracovavat
$rok = floatval(substr((string)$kniha[8],0,4));
$rokDotisk = floatval(substr((string)$kniha[9],0,4));
if ($rokDotisk > $rok) $rok = $rokDotisk;
if (((string)$kniha[15]=="02030000" or (string)$kniha[15]=="02060000" or (string)$kniha[15]=="02060000") and $rok <> 2019)
continue; // Kalendare jine nez pristi rok nezpracovavat
if($rok < 2015) continue; // starsi 2016 - nezpracovavat
if(in_array((string)$kniha[14], $this->zakazaneKateg))
continue; // Je v zakazanych kategoriich - nezpracovavat
$ean = (string)$kniha[18];
$cena = $this->zjistiCenu($ean);
// if ($cena <= 59) continue;
$kniha[1] = iconv('CP1250', 'utf-8', $kniha[1]); // sortnazev
$kniha[2] = iconv('CP1250','utf-8', $kniha[2]); // sortzknazev
$kniha[3] = iconv('CP1250','utf-8', $kniha[3]); // sortpodnazev
$kniha[4] = iconv('CP1250','utf-8', $kniha[4]); // edice
$kniha[5] = iconv('CP1250','utf-8', $kniha[5]); // sortautor
$kniha[11] = iconv('CP1250','utf-8', $kniha[11]); // sortznacka
$kniha[12] = iconv('CP1250','utf-8', $kniha[12]); // vyrobce
$kniha[16] = iconv('CP1250','utf-8', $kniha[16]); // skupnazev
$kniha[17] = iconv('CP1250','utf-8', $kniha[17]); // vazba
$kniha[29] = iconv('CP1250','utf-8', $kniha[29]); // sortautor2
$this->zpracujTitul($kniha);
if ($this->pocitadloKolikZpracuji > 1) break;
}
fclose($handle);
}
}
function zpracujTitul($kniha)
{
$kdeDostupne = "P";
$dataKnihyImport = array();
$id = (string)$kniha[0];
$ean = (string)$kniha[18];
if (!isset($this->ceny[$id]))
return;
$cena = $this->ceny[$id];
$dph = substr((string)$cena[2],0,2);
$kodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
$akcecena = floatval($cena[3]) / (1+(floatval($dph)/100));
$prodcena = floatval($cena[0]) / (1+(floatval($dph)/100));
if ($prodcena == 0)
return;
$knizka = null;
$prestaId = $this->eanToId($ean);
if(!$prestaId)
{
// Nova kniha
$update = false;
$knizka = new Kniha(false);
}
else if(strstr($prestaId->importId, 'pemik-'))
{
// Update
$update = true;
// $knizka = new Kniha($prestaId->id);
}
else return;
/* Nastav data knihy
0 - "SORTKOD",1 - "SORTNAZEV",2 - "SORTZKNAZEV",3 - "SORTPODNAZEV",4 - "EDICE",5 - "SORTAUTOR",6 - "DOSTUPNOST",7 - "DATPLVYD",
8 -"RMVYDANI",9 - "RMDOTISK",10 - "SORTJAZYK",11 - "SORTZNACKA",12 - "VYROBCE",13 - "VYROBCEICO",14 - "SORTDRUH",15 - "SKUPKOD",
16 - "SKUPNAZEV",17 - "VAZBA",18 - "EAN",19 - "ISBN",20 - "POCSTRAN",21 - "POCKSBAL",22 - "VYSKA",23 - "SIRKA",24 - "TLOUSTKA",
25 - "HMOTNOST",26 - "ANOTACE",27 - "PICTURE",28 - "PICTURE_SMALL",29 - "SORTAUTOR2",30 - "SORT_FORMA" */
$dataKnihyImport['importId'] = "pemik-" . $id;
$dataKnihyImport['active'] = 1;
$nazev = trim((string)$kniha[1]);
$dataKnihyImport['name'] = $nazev;
$dataKnihyImport['meta_title'] = $nazev;
$dataKnihyImport['width'] = (int)$kniha[23];
$dataKnihyImport['height'] = (int)$kniha[22];
$dataKnihyImport['depth'] = (int)$kniha[24];
$dataKnihyImport['weight'] = (double)$kniha[25] / 1000;
$dataKnihyImport['meta_description'] = trim((string)$kniha[19]); // ISBN
$dataKnihyImport['binding'] = trim((string)$kniha[17]);
$dataKnihyImport['pages'] = (int)$kniha[20];
$dataKnihyImport['author'] = trim((string)$kniha[5]);
$dataKnihyImport['publisher'] = trim((string)$kniha[12]);
$dataKnihyImport['ean'] = $ean;
$dataKnihyImport['meta_keywords'] = (string)$kniha[15];
$dataKnihyImport['image_link'] = (string)$kniha[27];
$dataKnihyImport['Kde_dostupne'] = "P";
if ($akcecena < $prodcena and $akcecena <> 0)
{
if (!$update)
$knizka->nastavAkci();
$prodcena = $akcecena;
}
$nakcen = round($prodcena/(1+(floatval($cena[1])/100)),2);
$dataKnihyImport['wholesale_price'] = $nakcen;
$dataKnihyImport['id_tax_rules_group'] = $kodDPH;
$dataKnihyImport['price'] = $prodcena;
// dostupnost, novinka, dotisk
$datumVydani = substr((string)$kniha[7],0,10);
if (substr($datumVydani,0,4) == "1900")
if (substr((string)$kniha[8],0,4)<>"" and substr((string)$kniha[8],0,4)<>"0000")
if (substr((string)$kniha[8],4,2) <> "")
$datumVydani = substr((string)$kniha[8],0,4) . "-" . substr((string)$kniha[8],4,2) . "-01";
else
$datumVydani = substr((string)$kniha[8],0,4) . "-01-01";
else
$datumVydani = "1990-01-01";
$textDostupnosti = "NEDOSTUPNÉ";
$dostupnost = (string)$kniha[6];
if ($dostupnost == "S" or (string)$kniha[6]=="Z")
$textDostupnosti = "Skladem u dodavatele";
if ($dostupnost == "N" or (string)$kniha[6]=="n")
$textDostupnosti = "Novinka";
if ($dostupnost == "D")
$textDostupnosti = "Připravovaný Dotisk";
if ($dostupnost == "Z")
$textDostupnosti = "Zajišťujeme u nakladatele";
if ($dostupnost == "R")
$textDostupnosti = "NEDOSTUPNÉ";
$den = floatval(strftime("%d", time()));
$mesic = floatval(strftime("%m", time()));
$rok = floatval(strftime("%Y", time()));
$dnesniDatum = $rok * 10000 + $mesic * 100 + $den;
// echo $den . " - den " . $mesic . " - mesic " . $rok . " - rok \n";
$datumDostupnosti = $datumVydani;
$datumDotisku = substr((string)$kniha[9],0,8);
if ($dostupnost == "D" and $datumDotisku <> "")
{
if (substr($datumDotisku,6,1) <> "")
$datumDotisku = substr($datumDotisku,0,4) . "-" . substr((string)$kniha[9],4,2) . "-" . substr((string)$kniha[9],6,2);
elseif (substr($datumDotisku,4,1) <> "")
$datumDotisku = substr($datumDotisku,0,4) . "-" . substr((string)$kniha[9],4,2) . "-28";
else
$datumDotisku = substr($datumDotisku,0,4) . "-12-20";
$denDotisku = floatval(substr($datumDotisku,8,2));
$mesicDotisku = floatval(substr($datumDotisku,5,2));
$rokDotisku = floatval(substr($datumDotisku,0,4));
$datumDotiskuKPorovnani = $rokDotisku * 10000 + $mesicDotisku * 100 + $denDotisku;
/* if ($datumDotiskuKPorovnani < $dnesniDatum)
{
$datumDostupnosti = $datumDotisku;
if ($dostupnost == "D")
{
$textDostupnosti = "NEDOSTUPNÉ";
}
}
*/
}
if ($dostupnost == "D")
$datumDostupnosti = $datumDotisku;
$dataKnihyImport['published'] = $datumVydani;
$dataKnihyImport['available_later'] = $textDostupnosti;
$dataKnihyImport['available_date'] = $datumDostupnosti;
// nacist a nastavit kategorii
$kodZanru = (string)$kniha[15];
$nacteneZanry = array();
if (isset($this->zanryPrevod[$kodZanru]))
{
$zanrMonami = $this->zanryPrevod[$kodZanru];
$zanryVRadku = explode("/", $zanrMonami);
foreach($zanryVRadku as $z1)
{
$nacteneZanry[] = $z1;
}
}
$dataKnihyImport['genres'] = $nacteneZanry;
// anotace
$anotace = "";
if ((string)$kniha[26] <> "")
{
$anotace = file_get_contents((string)$kniha[26]);
if ((string)$kniha[16]<> "")
$anotace = $kniha[16] . " - " . trim($anotace);
if ((string)$kniha[5] <> "")
$anotace = trim($anotace) . " / " . $kniha[5];
}
$dataKnihyImport['description'] = $anotace;
$necoNesedi = False;
if (!$update)
{
$knizka->nastavDataImportu($dataKnihyImport);
$knizka->uloz();
}
else // update zapisem polozek primo na SQL server
{
$dataKnihySQL = $this->nactiDataSQL($ean);
if (!$dataKnihySQL)
{
echo "nemohu nacist data o knize ze serveru " . $ean . " \n";
$this->pocitadloKolikZpracuji++;
return;
}
// print_r ($dataKnihySQL);
$necoNesedi = $this->PorovnejAZapisPamametryKnihy($dataKnihyImport,$dataKnihySQL);
}
if (!$update or $necoNesedi)
{
$this->pocitadloKolikZpracuji++;
echo (string)$this->pocitadloKolikZpracuji . " " . date('Y-m-d h:i:s') . " " . $nazev . " -ean- " . $ean . " -dph- " . $dph . " -kod- " . $kodDPH . " -datadph- " .$dataKnihyImport['id_tax_rules_group'] . " -- \n";
}
}
function nactiCeny()
{
$ceny = "/tmp/Price_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt";
$nazev = "/www/varak.net/shop.varak.net/import/vstupy/Pemik_ceny_".date("Ymd").".txt";
copy($ceny, $nazev);
if (($handle = fopen('/tmp/Price_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt', "r")) !== FALSE)
{
while (($radek = fgetcsv($handle, 0, ",", '"')) !== FALSE)
{
/* 0 - "SORTKOD",1 - "EAN",2 - "PARTNERKOD",3 - "PRODCENA",4 - "MENA",5 - "RABAT",6 - "PLATNOSTOD",7 - "PLATNOSTDO",
8 -"AKCECENA",9 - "AKCNIRABAT",10 - "AKCEOD",11 - "AKCEDO",12 - "DPH",13 - "PREDBEYNACENA",14 - "SORTFORMA",15 - "MOC" */
$cena = array((string)$radek[3], (string)$radek[5], (string)$radek[12], (string)$radek[8]);
// prodcena, rabat, dph, akcnirabat
$this->ceny[(string)$radek[0]]=$cena;
}
fclose($handle);
}
}
function nactiZanry()
{
if (($handle = fopen(__DIR__ . '/genrespem.csv', 'r')) !== FALSE)
{
while (($radek = fgetcsv($handle, 0, ";")) !== FALSE)
{
if ((string)$radek[1] == "NE")
$this->zakazaneKateg[]=(string)$radek[0];
else
$this->zanryPrevod[(string)$radek[0]] = (string)$radek[1];
}
fclose($handle);
}
}
function nactiCenyEan()
{
if (($handle = fopen('/tmp/Price_68C310F5-3C1E-4A7C-A58E-ACEE81A29662.txt', "r")) !== FALSE)
{
while (($radek = fgetcsv($handle, 0, ",", '"')) !== FALSE)
{
/* 0 - "SORTKOD",1 - "EAN",2 - "PARTNERKOD",3 - "PRODCENA",4 - "MENA",5 - "RABAT",6 - "PLATNOSTOD",7 - "PLATNOSTDO",
8 -"AKCECENA",9 - "AKCNIRABAT",10 - "AKCEOD",11 - "AKCEDO",12 - "DPH",13 - "PREDBEYNACENA",14 - "SORTFORMA",15 - "MOC" */
$cena = array((string)$radek[3], (string)$radek[5], (string)$radek[12], (string)$radek[8]);
// prodcena, rabat, dph, akcnirabat
$this->ceny[(string)$radek[1]]=$cena;
}
fclose($handle);
}
}
function opravdph()
{
$this->nactiCenyEan();
foreach ($this->ceny as $ean => $cena)
{
$kodDPH = $this->ZjistiKodDPH($ean);
if ($kodDPH == 3)
{
$dph = substr((string)$cena[2],0,2);
$novyKodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
$updateData = array('id_tax_rules_group' => $novyKodDPH);
dibi::update("ps_product", $updateData)->where("id_product = %i", $this->idKnihy)->execute();
dibi::update("ps_product_shop", $updateData)->where("id_product = %i", $this->idKnihy)->execute();
}
}
return;
}
}