%PDF- %PDF-
Direktori : /home/waritko/import-presta/ |
Current File : //home/waritko/import-presta/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("/www/varak.net/shop.varak.net/import/vstupy/Kosmas_".date("Ymd").".xml"); // $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 > 3000) 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; } if($url =="") return; // nema obrazek, neimportovat // 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"; } }