%PDF- %PDF-
| Direktori : /www/varak.net/shop.varak.net/import/ |
| Current File : /www/varak.net/shop.varak.net/import/Kosmas.php |
<?php
/**
* Created by PhpStorm.
* User: Ludek
* Date: 11. 10. 2016
* Time: 8:46
*/
class Kosmas extends Nakladatel
{
public $zanryPrevod = array();
public $pocitadloKolikZpracuji;
public $typProduktu = array(
"BA"=>"kniha, vazba není určena","BB"=>"kniha, šitá vazba","BC"=>"kniha, brožovaná vazba","BD"=>"kniha, vázaná vazba",
"BE"=>"kniha, kroužková vazba","BF"=>"kniha, lístková vazba","BO"=>"kniha, sešitová vazba","AB"=>"NE - magnetofonová kazeta",
"AC"=>"CD","AI"=>"DVD","AE"=>"NE - LP, SP","CA"=>"mapa","DB"=>"NE - CD-ROM","PC"=>"kalendář","PD"=>"NE - hrací karty",
"VJ"=>"NE - VHS kazeta","ZE"=>"NE - hry"); // pole vazeb knih a typu produktu
public function __construct()
{
// URL: https://firma.kosmas.cz/export_download.asp?verze=1.1&typ=xml&what=novinky&kod=T7263
// Nacti veci z Kosmasu a rozbal je
}
function zpracujData()
{
$this->nactiZanry();
$this->pocitadloKolikZpracuji = 0;
// $tituly = simplexml_load_file('https://firma.kosmas.cz/export_download.asp?verze=1.1&typ=xml&kod=T7263'); // Aktualni data vse
$tituly = simplexml_load_file('https://firma.kosmas.cz/export_download.asp?verze=1.1&typ=xml&what=novinky&kod=T7263'); // Novinky
// $tituly = simplexml_load_file(__DIR__ . "/import/kosmas.xml"); // cely
$nazev = "/www/varak.net/shop.varak.net/import/vstupy/Kosmas_".date("Ymd").".xml";
file_put_contents($nazev, $tituly->asXML());
foreach ($tituly->Product as $titul)
{
$this->zpracujTitul($titul);
// if ($this->pocitadloKolikZpracuji > 5)
// break;
}
echo " Zpracoval celkem: " . (string)$this->pocitadloKolikZpracuji . " " . date('Y-m-d h:i:s') . " \n";
}
function zpracujTitul($titul)
{
$ean = "";
$isbn = "";
$textDostupnosti = "";
$dostupnost = "";
$datumDostupnosti = "";
$datumVydani = "";
$textAutora = '';
$pocetStran = 0;
$nakladatel = "";
$anotace = "";
$mnozNaSklade = 0;
$url = "";
$dph = "";
$prodejniCena = 0;
foreach($titul->ProductIdentifier as $identifikace)
{
if((string)$identifikace->ProductIDType == "01")
$id = (string)$identifikace->IDValue;
if((string)$identifikace->ProductIDType == "02")
$isbn = (string)$identifikace->IDValue;
if((string)$identifikace->ProductIDType == "03")
$ean = (string)$identifikace->IDValue;
}
if ($ean == "")
return; // neimportovat, nema ean
// if ($ean <> "9788025722442") return;
// vazba, vylouceni zakazanych druhu, muze byt i vice vazeb u jednoho zbozi
$vazba = "";
if(isset($titul->ContainedItem))
foreach ($titul->ContainedItem->ProductForm as $formy)
{
$forma = (string)$titul->ContainedItem->ProductForm;
if ($forma <> "")
$vazba=$this->typProduktu[$forma];
if (substr($vazba,0,2)=="NE") // zakazane typy produktu
return;
}
else
{
$forma = (string)$titul->ProductForm;
if ($forma <> "")
$vazba=$this->typProduktu[$forma];
if (substr($vazba,0,2)=="NE") // zakazane typy produktu
return;
}
$jazyk = (string)$titul->Language->LanguageCode;
if ($jazyk <> "cze" and $jazyk <> "eng") // zpracovat pouze CZE a eng
return;
$stavVydani = (string)$titul->PublishingStatus;
if ($stavVydani == "08") // nezpracovat tituly, ktere neni mozne objednat
return;
if(isset($titul->SupplyDetail->ProductAvailability))
{
$datumDostupnosti = (string)($titul->SupplyDetail->ExpectedShipDate);
if ($datumDostupnosti <> "")
$datumDostupnosti = substr($datumDostupnosti,0,4) . "-" . substr($datumDostupnosti,4,2) . "-" . substr($datumDostupnosti,6,2);
$dostupnost = (string)$titul->SupplyDetail->ProductAvailability;
}
// if ($dostupnost == "40") // nezpracovavat nedostupne tituly
// return;
if(isset($titul->SupplyDetail->Stock))
$mnozNaSklade = ($titul->SupplyDetail->Stock->OnHand);
if(isset($titul->PublicationDate))
$datumVydani = (string)($titul->PublicationDate);
/* else
// return;
if (substr($datumVydani,0,4) <> '2017')
return;
nacist a nastavit kategorii */
$nacteneZanry = array();
if (isset($titul->Subject->SubjectCode))
{
foreach($titul->Subject->SubjectCode as $nactenyZanr)
{
$kodZanru = (string)$nactenyZanr;
if ($kodZanru == "397")
return; // neimportovat zanr 397
$zanrMonami = $this->zanryPrevod[$kodZanru];
$zanryVRadku = explode("/", $zanrMonami);
foreach($zanryVRadku as $z1)
{
if (! in_array($z1, $nacteneZanry))
$nacteneZanry[] = $z1;
}
// echo (string)$zanrMonami . " ; ";
}
}
$knizka = null;
$prestaId = $this->eanToId($ean);
if(!$prestaId)
{
// Nova kniha
$update = false;
$knizka = new Kniha(false);
}
elseif(strstr($prestaId->importId, 'KOS'))
{
// Update
$update = true;
// $knizka = new Kniha($prestaId->id);
}
else
return;
// Nastav data knihy
$nazev = (string)$titul->Title->TitleText;
foreach($titul->Contributor as $autor)
{
if((string)$autor->ContributorRole == "A01")
$textAutora .= ($textAutora != '' ? "; " : "") . (string)$autor->PersonName;
}
if (isset ($titul->NumberOfPages))
$pocetStran = $titul->NumberOfPages;
if ($datumVydani <> "")
$datumVydani = substr($datumVydani,0,4) . "-" . substr($datumVydani,4,2) . "-" . substr($datumVydani,6,2);
if (isset ($titul->Publisher->Publishername))
$nakladatel = (string)$titul->Publisher->Publishername;
if (isset ($titul->OtherText->Text))
{
$anotace = (string)$titul->OtherText->Text;
if ($textAutora <> "")
$anotace = $anotace . " / " . $textAutora;
}
if (isset ($titul->SupplyDetail->Price->TaxableAmount1))
{
$prodejniCena = intval((string)$titul->SupplyDetail->Price->TaxableAmount1);
$dph = (string)$titul->SupplyDetail->Price->TaxRatePercent1;
}
$kodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
$nakcen = sprintf("%0.2f", $prodejniCena / 1.3);
// dostupnost, novinka, dotisk
if ($dostupnost <> "")
if ($dostupnost == "21")
$textDostupnosti = 'Skladem u dodavatele';
elseif ($dostupnost == "33")
$textDostupnosti = 'Dotisk - Novinka';
else
$textDostupnosti = 'NEDOSTUPNÉ';
if ($stavVydani == "02") // novinka
$textDostupnosti = 'Připravovaná Novinka';
if(isset($titul->Reissue))
{
$datumPredpoklad = (string)$titul->Reissue->ReissueDate;
$datumPredpoklad = substr($datumPredpoklad,0,4) . "-" . substr($datumPredpoklad,4,2) . "-" . substr($datumPredpoklad,4,6);
$datumVydani = $datumPredpoklad;
$textDostupnosti = 'Připravovaný Dotisk';
}
else
$textDostupnosti = 'NEDOSTUPNÉ';
foreach($titul->MediaFile as $obrazek)
{
if((string)$obrazek->MediaFileTypeCode == "04")
$url = (string)$obrazek->MediaFileLink;
}
// Uloz knizku
$dataKnihyImport['name'] = $nazev;
$dataKnihyImport['meta_title'] = $nazev;
if ($textAutora <> "" or !$update)
$dataKnihyImport['author'] = $textAutora;
if ($prodejniCena <> 0 or !$update)
{
$dataKnihyImport['price'] = $prodejniCena;
$dataKnihyImport['id_tax_rules_group'] = $kodDPH;
$dataKnihyImport['wholesale_price'] = $nakcen;
}
if ($isbn <> "" or !$update)
$dataKnihyImport['meta_description'] = $isbn;
if ($vazba <> "" or !$update)
$dataKnihyImport['binding'] = $vazba;
if ((int)$pocetStran <> 0 or !$update)
$dataKnihyImport['pages'] = (int)$pocetStran;
if ($nakladatel <> 0 or !$update)
$dataKnihyImport['publisher'] = $nakladatel;
if ($ean <> "" or !$update)
$dataKnihyImport['ean'] = $ean;
$dataKnihyImport['importId'] = $id;
$dataKnihyImport['Kde_dostupne'] = "K";
$dataKnihyImport['active'] = 1;
if (!$update)
{
$dataKnihyImport['meta_keywords'] = "";
$dataKnihyImport['width'] = 0;
$dataKnihyImport['height'] = 0;
$dataKnihyImport['depth'] = 0;
$dataKnihyImport['weight'] = 0;
}
$dataKnihyImport['genres'] = $nacteneZanry;
if ($anotace <> "" or !$update)
$dataKnihyImport['description'] = $anotace;
if ($textDostupnosti <> "" or !$update)
$dataKnihyImport['available_later'] = $textDostupnosti;
if ($datumVydani <> "" or !$update)
$dataKnihyImport['published'] = $datumVydani;
if ($datumDostupnosti <> "")
$dataKnihyImport['available_date'] = $datumDostupnosti;
if ($mnozNaSklade <> 0)
$dataKnihyImport['available_date'] = $datumVydani;
if ($url <> "" or !$update)
$dataKnihyImport['image_link'] = $url;
$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 . " ----- \n";
}
}
function nactiZanry()
{
if (($handle = fopen(__DIR__ . '/genreskos.csv', 'r')) !== FALSE)
{
while (($radek = fgetcsv($handle, 0, ";")) !== FALSE)
{
$this->zanryPrevod[(string)$radek[0]] = (string)$radek[1];
}
fclose($handle);
}
}
function zpracujDostupnost()
{
$this->pocitadloKolikZpracuji = 0;
$kdeDostupne = "K";
$tituly = simplexml_load_file('https://firma.kosmas.cz/export_download.asp?typ=avail_xml&kod=T7263');
$nazev = "/www/varak.net/shop.varak.net/import/vstupy/Kosmas_d_".date("Ymd").".xml";
file_put_contents($nazev, $tituly->asXML());
foreach ($tituly->Product as $titul)
{
$ean = "";
foreach($titul->ProductIdentifier as $identifikace)
{
if((string)$identifikace->ProductIDType == "03")
$ean = (string)$identifikace->IDValue;
}
if ($ean == "")
continue; // neimportovat, nema ean
$hodnotyDostupnosti = $this->zjistiDostupnost($ean);
if (!$hodnotyDostupnosti)
continue; // neni v eshopu
$datumVydani = "";
$datumDostupnosti = "";
$mnozNaSklade = 0;
if(isset($titul->SupplyDetail->Stock))
$mnozNaSklade = ($titul->SupplyDetail->Stock->OnHand);
$stavVydani = "08";
if(isset($titul->PublishingStatus))
$stavVydani = (string)$titul->PublishingStatus;
if(isset($titul->PublicationDate))
{
$datumVydani = (string)($titul->PublicationDate);
$datumVydani = substr($datumVydani,0,4) . "-" . substr($datumVydani,4,2) . "-" . substr($datumVydani,6,2);
}
if (isset($titul->SupplyDetail->ExpectedShipDate))
{
$datumDostupnosti = (string)($titul->SupplyDetail->ExpectedShipDate);
$datumDostupnosti = substr($datumDostupnosti,0,4) . "-" . substr($datumDostupnosti,4,2) . "-" . substr($datumDostupnosti,6,2);
}
if(isset($titul->SupplyDetail->ProductAvailability))
$dostupnost = (string)$titul->SupplyDetail->ProductAvailability;
else
continue;
if ($dostupnost == "21")
$textDostupnosti = 'Skladem u dodavatele';
elseif ($dostupnost == "33")
$textDostupnosti = 'Dotisk - Novinka';
else
$textDostupnosti = 'NEDOSTUPNÉ';
if ($stavVydani == "02") // novinka
$textDostupnosti = 'Připravovaná Novinka';
if(isset($titul->Reissue))
{
$datumDostupnosti = (string)$titul->Reissue->ReissueDate;
$datumDostupnosti = substr($datumDostupnosti,0,4) . "-" . substr($datumDostupnosti,4,2) . "-" . substr($datumDostupnosti,6,2);
$textDostupnosti = 'Připravovaný Dotisk';
};
if ($mnozNaSklade <> 0)
$datumDostupnosti = $datumVydani;
if ($textDostupnosti <> trim($hodnotyDostupnosti->available_later) and ($kdeDostupne == $hodnotyDostupnosti->Kde_dostupne or $hodnotyDostupnosti->Kde_dostupne == "N" or $textDostupnosti <> 'NEDOSTUPNÉ'))
{
$this->pocitadloKolikZpracuji++;
// if (!($this->pocitadloKolikZpracuji % 10)) // Hlaska pouze kazde desate vety
echo 'K ' . $this->pocitadloKolikZpracuji . "zapsat novou dostupnost pro: " . $ean . " - stavajici: $hodnotyDostupnosti->available_later nova: $textDostupnosti \n";
dibi::update("ps_product_lang", array('available_later' => $textDostupnosti, 'Kde_dostupne' => $kdeDostupne))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
}
if ($datumDostupnosti <> "" and $datumDostupnosti <> $hodnotyDostupnosti->available_date)
{
dibi::update("ps_product", array('available_date' => $datumDostupnosti))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
dibi::update("ps_product_shop", array('available_date' => $datumDostupnosti))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
}
if ($datumVydani <> "" and $datumVydani <> $hodnotyDostupnosti->published)
{
dibi::update("ps_product", array('published' => $datumVydani))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
dibi::update("ps_product_shop", array('published' => $datumVydani))->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
}
}
echo $this->pocitadloKolikZpracuji . "Celkovy pocet zapsanych zmen dostupnosti \n";
}
}