%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/shop.varak.net/import/
Upload File :
Create Path :
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";
    }
}

Zerion Mini Shell 1.0