%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/Albatros.php

<?php

/**
 * Created by PhpStorm.
 * User: Ludek
 * Date: 19. 10. 2016
 * Time: 15:19
 */
class Albatros extends Nakladatel
{
    public $zanryPrevod = array();
    public $pocitadloKolikZpracuji;

    /* Popis struktury souboru s položkami obchodu
.    NAME - název titulu
.    EAN - EAN kód
    TYPE - druh titulu
    SUBTITLE - podtitul
.    VAT - sazba DPH
.    PRICEVAT - doporučená cena
.    AVAILABILITY - dostupnost (1 = skladem)
    AVAILABILITY_DETAIL - skladová zásoba (ks)
.    AUTHOR - autor
.    DATEEXP - datum vydání (rrrr-mm-dd)
.    ANNOTATION - krátká anotace
.    PUBLISHING - nakladatelství
    IMAGE - cesta k obrázku
.    IMAGE_LARGE - cesta k obrázku s vyšším rozlišením
.    PAGES - počet stran
.    BOOKBINDING - vazba
.    DIMENSION - rozměry
    RELEASE – pořadí vydání v nakladatelství
    EDITION - edice vydání
.    LANGUAGE - jazyk vydání
.    GENRE - žánr
.    REPRINTING_DATE - datum dotisku
    */
    public function __construct($timestamp)
    {
        // Nacti veci z Albatrosu
    }

    function zpracujData()
    {
        $this->nactiZanry();
        $this->pocitadloKolikZpracuji = 0;

        $tituly = simplexml_load_file('https://www.distri.cz/XmlFeed/Full/fa9ea46195214f0d89a61002dd0404b4');       // Novinky
        $nazev = "/www/varak.net/shop.varak.net/import/vstupy/Albatros_".date("Ymd").".xml";
        file_put_contents($nazev, $tituly->asXML());

        foreach ($tituly->ITEM as $titul)
        {
            $this->zpracujTitul($titul);
//            if ($this->pocitadloKolikZpracuji > 3)
//                break;
        }
        echo " Zpracoval celkem " . (string)$this->pocitadloKolikZpracuji . " " . date('Y-m-d h:i:s') . " \n";
    }

    function zpracujTitul($titul)
    {
        $ean = (string)$titul->EAN;
        if  ($ean == "")
            return;                 // neimportovat, nema ean

        // vazba, vylouceni zakazanych druhu, muze byt i vice vazeb u jednoho zbozi
        $vazba = $titul->BOOKBINDING;

        $jazyk = $titul->LANGUAGE;
        if ($jazyk <> "čeština" and $jazyk <> "angličtina")        // zpracovat pouze CZE a eng
            return;
        $dostupnost = $titul->AVAILABILITY;
        $datumDotisku = $titul->REPRINTING_DATE;
        $dnesniDatum = time();
        $vydaniTimestamp = strtotime($datumDotisku);
        if ($vydaniTimestamp + 30*24*60*60 < $dnesniDatum)
            $datumDotisku = "";                 // reprinting date uz bylo

        if ($dostupnost <> 1 and $datumDotisku == "")
            return;                                     // nezpracovavat nedostupne

        $datumVydani = $titul->DATEEXP;
        $vydaniTimestamp = strtotime($datumVydani);
        $dnesniDatum = time();
        if ($datumVydani == "")
            $datumVydani = $datumDotisku;
        if($vydaniTimestamp < $dnesniDatum-60*24*60*60 or $datumVydani == "")  // Timestamp z http://www.unixtimestamp.com/index.php
            return;

//      nacist a nastavit kategorii
        $kodZanru = $titul->GENRE;
        $zanryVRadkuAlbatros = explode(",", $kodZanru);
        $nacteneZanry = array();
        $zanrMonami = "";
        foreach($zanryVRadkuAlbatros as $zanrAlbatros)
        {
            $zanrAlbatros = trim($zanrAlbatros);
            if ($zanrAlbatros == "love story" or $zanrAlbatros == "vzdělání" or $zanrAlbatros == "tablety")
                continue;                                       // preskoci zanr za carkou
            if ($zanrAlbatros == "romantika")
                $zanrAlbatros = "romantika, love story";
            if ($zanrAlbatros == "poznání")
                $zanrAlbatros = "poznání, vzdělání";
            if ($zanrAlbatros == "mobily")
                $zanrAlbatros = "mobily, tablety";
            if (array_key_exists($zanrAlbatros, $this->zanryPrevod))
                $zanrMonami = $this->zanryPrevod[$zanrAlbatros];
            $zanryVRadku = explode("/", $zanrMonami);
            foreach($zanryVRadku as $z1)
            {
                if (! in_array($z1, $nacteneZanry))
                    $nacteneZanry[] = $z1;
            }
        }
//        echo $kodZanru . " - kod z xml - " . $zanrMonami . " monami - " . $zanrAlbatros . " Alba \n";
//        print_r($nacteneZanry);

        $knizka = null;
        $prestaId = $this->eanToId($ean);
        if(!$prestaId)
        {
            // Nova kniha
            $update = false;
            $knizka = new Kniha(false);
        }
        elseif(strstr($prestaId->importId, 'alba-'))
        {
            // Update
            $update = True;
//            $knizka = new Kniha($prestaId->id);
        }
        else
            return;

        // Nastav data knihy

        $nazev = trim((string)$titul->NAME);
        $rozmer = (string)$titul->DIMENSION;
        $sirka = substr($rozmer,0,3);
        $vyska = substr($rozmer,6,3);
        $isbn = substr($ean,0,3) . "-" . substr($ean,3,2) . "-" . substr($ean,5,3) . "-" . substr($ean,8,4) . "-" . substr($ean,12,1);
        $dataKnihyImport['name'] = $nazev;
        $dataKnihyImport['meta_title'] = $nazev;
        $dataKnihyImport['author'] = (string)$titul->AUTHOR;
        $procen = intval((string)$titul->PRICEVAT)/(1+intval(substr((string)$titul->VAT,0,2))/100);
        $dataKnihyImport['price'] = $procen;
        $dph = substr((string)$titul->VAT,0,2);
        $kodDPH = $dph == '10' ? 5 : ($dph == '21' ? 1 : ($dph == '15' ? 2 : 3));
        $nakcen = sprintf("%0.2f", $procen / 1.3);
        $dataKnihyImport['id_tax_rules_group'] = $kodDPH;
        $nakcen = sprintf("%0.2f", ((double)$titul->{'dpc-aktualni'}) * (100 - ((double)$titul->rabat)) / 100);
        $dataKnihyImport['wholesale_price'] = $nakcen;
        $dataKnihyImport['width'] = (int)$sirka;
        $dataKnihyImport['height'] = (int)$vyska;
        $dataKnihyImport['depth'] = 0;
        $dataKnihyImport['weight'] = 0;
        $dataKnihyImport['meta_description'] = $isbn;
        $dataKnihyImport['binding'] = $vazba;
        $dataKnihyImport['pages'] = (int)$titul->PAGES;
        $dataKnihyImport['publisher'] = trim((string)$titul->PUBLISHING);
        $dataKnihyImport['ean'] = $ean;
        $dataKnihyImport['importId'] = "alba-".$ean;
        $dataKnihyImport['active'] = 1;
        $dataKnihyImport['meta_keywords'] = "";
        $dataKnihyImport['genres'] = $nacteneZanry;
        $dataKnihyImport['Kde_dostupne'] = "A";

        if ($kodZanru <> "")
            $anotace = (string)$kodZanru . " - " . (string)$titul->ANNOTATION;
        else
            $anotace = (string)$titul->ANNOTATION;
        if ((string)$titul->AUTHOR <> "")
            $anotace = $anotace . " / " . $titul->AUTHOR;
        $dataKnihyImport['description'] = $anotace;

// dostupnost, novinka, dotisk

        if ($dostupnost <> "")
            if ($dostupnost = 1)
                $textDostupnosti = 'Skladem u dodavatele';
            if ($datumDotisku <> "")
                $textDostupnosti = 'Dotisk - Novinka';

        if ($datumVydani <> "")
            $dataKnihyImport['published'] = $datumVydani;
        $dataKnihyImport['available_later'] = $textDostupnosti;
        $dataKnihyImport['available_date'] = $datumDotisku;

        $url = (string)$titul->IMAGE_LARGE;
        if ($url <> "")
            $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__ . '/genresalb.csv', 'r')) !== FALSE)
        {
            while (($radek = fgetcsv($handle, 0, ";")) !== FALSE)
            {
                $zanr =  iconv('CP1250', 'utf-8', (string)$radek[3]);
                $this->zanryPrevod[$zanr] = (string)$radek[4];
            }
            fclose($handle);
//            print_r($this->zanryPrevod);
        }
    }

    function zpracujDostupnost()
    {
        $this->pocitadloKolikZpracuji = 0;
        $kdeDostupne = "A";
        $tituly = simplexml_load_file('https://www.distri.cz/XmlFeed/Compact/fa9ea46195214f0d89a61002dd0404b4');       // Dostupnost
        $nazev = "/www/varak.net/shop.varak.net/import/vstupy/Albatros_d_".date("Ymd").".xml";
        file_put_contents($nazev, $tituly->asXML());
        if($tituly === false)
            echo "Nemohu nacist soubor z Albatrosu \n";
        else
        {
            foreach ($tituly->ITEM as $titul)
            {
                $ean = (string)$titul->EAN;
                if  ($ean == "")
                    continue;                 // neimportovat, nema ean

                $hodnotyDostupnosti = $this->zjistiDostupnost($ean);
                if (!$hodnotyDostupnosti)
                    continue;                // neni v eshopu

                $dostupnost = (string)$titul->AVAILABILITY;
                if ($dostupnost == "1")
                    $textDostupnosti = 'Skladem u dodavatele';
                elseif ($dostupnost == "0")
                    $textDostupnosti = 'NEDOSTUPNÉ';
                else
                    continue;

//                $textDostupnosti = 'Dotisk - Novinka';

                if ($hodnotyDostupnosti->available_later == "Dotisk - Novinka" and $dostupnost == "0")
                    continue;               // Novinka, ktera jeste neni dostupna

                if ($ean == "8594063858453")
                    echo "dostupnost v souboru: $textDostupnosti , stav dostupnosti na eshopu: $hodnotyDostupnosti->available_later , kde dostupne soubor: $kdeDostupne , kde dostupne na eshopu: $hodnotyDostupnosti->Kde_dostupne \n";
                if ($textDostupnosti <> trim($hodnotyDostupnosti->available_later) and ($kdeDostupne == $hodnotyDostupnosti->Kde_dostupne or $hodnotyDostupnosti->Kde_dostupne == "N" or $hodnotyDostupnosti->Kde_dostupne == "0" or $textDostupnosti <> 'NEDOSTUPNÉ'))
                {
                    $this->pocitadloKolikZpracuji++;
//                if (!($this->pocitadloKolikZpracuji % 10))                              // Hlaska pouze kazde desate vety
                    echo 'A ' . $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();
                }

                $cena = $this->zjistiCenu($ean);                // doplni cenu a aktivuje polozku
                if ($cena == 0)
                {
                    $novaCena = floatval((string)$titul->PRICEVAT);
                    $sazbaDph = floatval(substr((string)$titul->DPH,0,2));
                    $aktivni = 1;
                    if ($sazbaDph == 10)
                        $dph = 5;
                    elseif ($sazbaDph == 21)
                        $dph = 1;
                    elseif ($sazbaDph == 15)
                        $dph = 2;
                    else
                        $dph = 3;
                    if ($novaCena < 10)
                        continue;                   // neimportovat, male polozky

                    $updateData = array(
                        'price' => $novaCena,
                        'id_tax_rules_group' => $dph,
                        'active' => $aktivni
                    );
                    dibi::update("ps_product", $updateData)->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
                    dibi::update("ps_product_shop", $updateData)->where("id_product = %i", $hodnotyDostupnosti->idKnihy)->execute();
                }
            }
            echo $this->pocitadloKolikZpracuji . " celkovy pocet zapsanych zmen \n";
        }
    }
}

Zerion Mini Shell 1.0