< ? php


if (!defined('_PS_VERSION_'))
    exit;

class Pcalcm
{
    protected const CWS = 'http://89.216.27.121:7788/CalculusWebService/';
     // protected const CWS = 'http://89.216.27.121:80/CalculusWebService/';

    protected const URL0 = 'http://89.216.27.121:7788/CalculusWebService/CalculusWebService.asmx';

    protected $wsfunkcija;

    protected $postdata;

    public function __construct($wsfunkcija = 'DatumVremeDBServera', $postdata = '')
    {
        $this->wsfunkcija = $wsfunkcija;
        $this->postdata = $postdata;
    }

    public function izvrsi_ccmetod($uarr = false)
    {
        global $env;

        $wsfunkcija = '';

        $cllc = new Callcurl(self::URL0 . '/' . $this->wsfunkcija, $this->postdata);

        $data = $cllc->call_curl($uarr = false);

        return $data;

    }

    public function xml2arr($data)
    {

        $xml = new \SimpleXMLElement($data);
        $array = json_decode(json_encode((array)$xml), TRUE);
        // print_r($array);
        return $array;

    }

} // end class Pcalcm

class Callcurl
{
    protected $url;
    protected $postdata;

    public function __construct($url, $postdata)
    {

        $this->url = $url;

        $this->postdata = $postdata;

    }

    public function call_curl($uarr = false)
    {
        global $env;

        $ch = curl_init($this->url);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $this->postdata);

        $data = curl_exec($ch);

        if ($uarr) {
            $res['data'] = $data;
            $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        }
        curl_close($ch);
        if ($uarr) {
            if (200 == $status_code) {
                $res['status_code'] = true;
            } else {
                $res['status_code'] = false;
            }
            return $res;

        } else {
            return $data;
        }

    }

} // end class Callcurl


class Presta2c extends Module
{

    public function __construct()
    {
        $this->name = 'presta2c';
        $this->tab = 'front_office_features';
        $this->version = '1.0.0';
        $this->author = 'P2C';
        $this->need_instance = 0;
        $this->secure_key = Tools::encrypt($this->name);
        $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_);
        $this->bootstrap = true;


        parent::__construct();

        $this->displayName = $this->l('P2C Orders');
        $this->description = $this->l('Getting order Details and business system update');

        $this->confirmUninstall = $this->l('Are you sure you want to uninstall?');

    }

    public function install()
    {

        if (!parent::install() ||
            !$this->registerHook('header') ||
            !$this->registerHook('invoice') ||
            !$this->registerHook('OrderConfirmation')

        )
            return false;

        return true;
    }

    public function uninstall()
    {
        if (!parent::uninstall()
        )
            return false;
        return true;
    }

    public function getContent()
    {
        $output = null;

        $output .= 'Your your configuration data here';

        if (Tools::isSubmit('submit' . $this->name)) {

            //here is actions for save configuration options
            // we don't need it for our example.

        }

        return $output;
    }

    // getting data from BO orders page
    public function hookDisplayInvoice()
    {
        $this->context->smarty->assign(array(
            'id_order' => $id_order
        ));

        return $this->display(__FILE__, 'templates/hook/p2c_invoice.tpl');

    }

    /**
     * getting data from order confirmation
     *
     *
     *
     */
    public function hookDisplayOrderConfirmation($params)
    {
        set_time_limit(0);

        $logfile = fopen(dirname(__FILE__) . '/p2c_log', "a+");
        // $logfile = fopen(dirname(__FILE__).'/data.txt', "w");

        $log_p2c = false; // Nema logovanja p2c
        $log_p2c = true; // Loguje se p2c

        $message_mail = '';

        $tmp_date = date('dmY'); // tmpcde, 17062023

        // $randparam = rand(100, 900);
        // $randparam2 = rand(100000, 900000);

        $wss_str = ''; // Podaci koji se snimaju u log fajl

        $id_order = (int)Tools::getValue('id_order');

        $order = $params['order'];

        $currency = $params['currency'];

        // ///////////////////////////////
        // Niz proizvoda iz PrestaShop-a
        $products = $order->getProducts();
        // ///////////////////////////////

        $customer_message = $order->getFirstMessage();

        $id_cart = (int)$params['order']->id_cart;

        // $komintent['reference'] šifra koju dodeljuje PrestaShop - ALFANUMERIČKA
        // ParitetIsporuke u Calculus-u
        // $paritetisporuke = (int)$params['order']->reference;
        // $paritetisporuke = (int)$order->reference;
        $paritetisporuke = (string)$params['order']->reference; 

        // ------------------------------------
        // ------------------------------------
        // Podaci komintenta iz porudžbine $komintent niz 
        // ------------------------------------
        $komintent = array();
        $komintent['id_cart'] = (int)$params['order']->id_cart;
        $komintent['total_shipping'] = (int)$params['order']->total_shipping;

        // $komintent['cookie'] = print_r($params['cookie'], true);
        $komintent['is_guest'] = (int)$params['cookie']->is_guest;
        $komintent['id_guest'] = (int)$params['cookie']->id_guest;
        $komintent['id_customer'] = (int)$params['cookie']->id_customer;
        $komintent['customer_firstname'] = filter_var($params['cookie']->customer_firstname, FILTER_SANITIZE_STRING);
        $komintent['customer_lastname'] = filter_var($params['cookie']->customer_lastname, FILTER_SANITIZE_STRING);
        $komintent['email'] = filter_var($params['cookie']->email, FILTER_SANITIZE_EMAIL);
        $komintent['date_add'] = filter_var($params['cookie']->date_add, FILTER_SANITIZE_STRING);
        // ------------------------------------
        $addressobj = new Address(intval($params['cart']->id_address_delivery));
        $komintent['company'] = (string)filter_var($addressobj->company, FILTER_SANITIZE_STRING);
        $komintent['address1'] = (string)filter_var($addressobj->address1, FILTER_SANITIZE_STRING);
        $komintent['vat_number'] = (int)$addressobj->vat_number;
        $komintent['postcode'] = (string)filter_var($addressobj->postcode, FILTER_SANITIZE_STRING);
        $komintent['country'] = (string)filter_var($addressobj->country, FILTER_SANITIZE_STRING);
        $komintent['city'] = (string)filter_var($addressobj->city, FILTER_SANITIZE_STRING);
        $komintent['phone'] = (string)filter_var($addressobj->phone, FILTER_SANITIZE_STRING);


        $pib = (int)$komintent['vat_number'];

        $napomena = ''; // $napomena za metodu UbaciZagDok
        $napomena01 = '';
        $product_name01 = '';
        // Ako nije unet PIB smatra se da je fizičko lice

        $napomena = $customer_message;

        $wss_str .= "\n\n" . __LINE__ . ' customer_message ' . $customer_message;
        $wss_str .= "\n\n" . __LINE__ . ' napomena1 ' . $napomena;

        if (!empty($pib)) {
            // Firma, proverava da li postoji u kalkulusu
            $wsfunkcija12 = 'PodaciKomitenta';
            $postdata12 = "sifra=&naziv=&pib=$pib&ID=&email=&tel=&pf=&uslov=";
            $pccm12 = new Pcalcm($wsfunkcija12, $postdata12);
            $data12 = $pccm12->izvrsi_ccmetod();
            $xml12 = str_replace(' xmlns="http://tempuri.org/"', '', $data12);
            $dom = new DomDocument();
            $dom->loadXML($xml12);
            $xpath = new DomXPath($dom);

            $p_sifra = (int)$xpath->query("//sifra")->item(0)->nodeValue;

            if (!empty($p_sifra)) {
                // ///////////////////////////////////////////
                // 
                // Komitent postoji u kalkulusu - PREUZETI PODATKE
                // 
                // ///////////////////////////////////////////
                $komitent = $p_sifra;

                // ------------------------------------
                // Podaci komintenta iz Calculus-a 
                // ------------------------------------
                $komintent['email'] = filter_var((string)$xpath->query("//email")->item(0)->nodeValue, FILTER_SANITIZE_EMAIL);
                $komintent['company'] = filter_var((string)$xpath->query("//interninaziv")->item(0)->nodeValue, FILTER_SANITIZE_STRING);
                $komintent['address1'] = filter_var((string)$xpath->query("//adresa")->item(0)->nodeValue, FILTER_SANITIZE_STRING);
                $komintent['postcode'] = filter_var((string)$xpath->query("//postanskibroj")->item(0)->nodeValue, FILTER_SANITIZE_STRING);
                $komintent['country'] = filter_var((string)$xpath->query("//drzava")->item(0)->nodeValue, FILTER_SANITIZE_STRING);
                $komintent['city'] = filter_var((string)$xpath->query("//mesto")->item(0)->nodeValue, FILTER_SANITIZE_STRING);
                $komintent['phone'] = filter_var((string)$xpath->query("//tel")->item(0)->nodeValue, FILTER_SANITIZE_STRING);



                $wss_str .= "\n\n" . __LINE__ . ' PodaciKomitenta-Komintent sifra ' . $p_sifra;
                $wss_str .= "\n\n" . __LINE__ . ' PodaciKomitenta- komitent ' . $komitent;
                $wss_str .= "\n\n" . __LINE__ . ' postdata12 ' . $postdata12;
                $wss_str .= "\n\n" . __LINE__ . ' data12 ' . $data12;

            } else {
                // Komintent ne postoji - snimiti u Calculus
                $wsfunkcija8 = 'UbaciKomitenta';
                $pravnofizicko = 'P';
                $postdata8 = 'sifra=&naziv=' . $komintent['company'] . '&pib=' . $komintent['vat_number'] . '&adresa=' . $komintent['address1'] . '&postbr=' . $komintent['postcode'] . '&mesto=' . $komintent['city'] . '&tel=' . $komintent['phone'] . '&fax=&mail=' . $komintent['email'] . '&tekuci=&rabatk=&rabatd=&rokplacanjakupcu=&pravnofizicko=' . $pravnofizicko;

                $pccm8 = new Pcalcm($wsfunkcija8, $postdata8);
                $data8 = $pccm8->izvrsi_ccmetod();
                $xml8 = str_replace(' xmlns="http://tempuri.org/"', '', $data8);

                $dom = new DomDocument();
                $dom->loadXML($xml8);
                $xpath = new DomXPath($dom);
                // Metoda UbaciKomitenta vraca ID novog komitenta
                $p_komintent8 = (int)$xpath->query("//string")->item(0)->nodeValue;

                $wss_str .= __LINE__ . ' PodaciKomitenta-postdata8 ' . $postdata8;
                $wss_str .= __LINE__ . ' PodaciKomitenta-Komintent sifra ' . $p_sifra;
                $wss_str .= "\n\n" . __LINE__ . ' UbaciKomitenta - ID ' . $p_komintent8;

                // NOVI KOD ZA PREUZIMANJE SIFE MALOPRE UBACENOG KOMITENTA - PREKONTROLISATI SAV KOD U VEZI OVOGA
                $wsfunkcija22 = 'PodaciKomitenta';
                $postdata22 = 'sifra=&naziv=&pib=' . $komintent['vat_number'] . '&ID=&email=&tel=&pf=&uslov=';
                $pccm22 = new Pcalcm($wsfunkcija22, $postdata22);
                $data22 = $pccm22->izvrsi_ccmetod();
                $xml22 = str_replace(' xmlns="http://tempuri.org/"', '', $data22);
                $dom = new DomDocument();
                $dom->loadXML($xml22);
                $xpath = new DomXPath($dom);

                // sifra
                $komitent = (int)$xpath->query("//sifra")->item(0)->nodeValue;

                $wss_str .= "\n\n" . __LINE__ . ' postdata22 ' . $postdata22;
                $wss_str .= "\n\n" . __LINE__ . ' data22 ' . $data22;
                $wss_str .= "\n\n" . __LINE__ . ' PodaciKomitenta- komitent ' . $komitent;
                // $komitent = $tmpsifra; // sifra

            } // end if (!empty($p_sifra)) {}

        } else {
            // Nema pib pa se evidentira kao fizicko lice
            $napomena01 = ", ".$komintent['customer_firstname'] . ', ' . $komintent['customer_lastname'] . ', ' . $komintent['company'] . ', ' . $komintent['address1'] . ', ' . $komintent['postcode'] . ', ' . $komintent['city'] . ', ' . $komintent['phone'] . ', ' . $komintent['email'] . ', '; // $napomena za metodu UbaciZagDok
            $napomena .= filter_var(trim($napomena01), FILTER_SANITIZE_ADD_SLASHES); // $napomena za metodu UbaciZagDok

            $wss_str .= "\n\n" . __LINE__ . ' napomena2 ' . $napomena;

            $komitent = '0003'; // ako je fizičko lice
        } // end if(!empty($pib)) {}

        // ------------------------------------
        // Ubacivanje zaglavlja dokumenta
        // ------------------------------------
        $wsfunkcija6 = 'UbaciZagDok'; // KONTROLA: PodaciDokumenata
        $vrstadokumenta = 'PFIP';
        $datum = date('Y-m-d');
        $magacin = 'MP1'; // PROBATI I IP
        $kreator = 'MP1'; //
        $valuta = 'DIN'; //
        $tarifa = ''; // NOVI ARGUMENT MOGUCE
        // $napomena je definisana iznad
        $wss_str .= "\n\n" . __LINE__ . ' napomena3 ' . $napomena;
        $postdata6 = "vrstadokumenta=$vrstadokumenta&datum=$datum&komitent=$komitent&magacin=$magacin&kreator=$kreator&agent=&datumprometa=&valuta=$valuta&valutaplacanja=&ekstdok1=&ekstdok2=&ekstdok3=&status=&prokmag=&prokknj=&zavrsen=&statusdok=&napomena=$napomena&nacinisporuke=&poslat=&delbroj=&magacioner=&poslao=&porn=&poug=&nacpl=&idloyaltykartice=&vasaref=&nasaref=&veza=&sadrzaj=&tarifa=$tarifa&statusumag=";
        $pccm6 = new Pcalcm($wsfunkcija6, $postdata6);
        $data6 = $pccm6->izvrsi_ccmetod();

        $xml6 = str_replace(' xmlns="http://tempuri.org/"', '', $data6);
        $dom = new DomDocument();
        $dom->loadXML($xml6);
        $xpath = new DomXPath($dom);
        $dok_id = $xpath->query("//string")->item(0)->nodeValue;
        $wss_str .= "\n\n" . __LINE__ . ' UbaciZagDok-dok_id-1- ' . $dok_id;
        $wss_str .= "\n\n" . __LINE__ . ' UbaciZagDok-postdata6 ' . $postdata6;
        $wss_str .= "\n\n" . __LINE__ . ' UbaciZagDok-data6 ' . $data6;

        $wss_str .= "\n\n" . __LINE__ . ' UbaciZagDok - dok_id, ovaj dokument pronaći uz pomoć metode PodaciDokumenata.';

        // Kontrola može korišćenjem dok_id na Metodi:
        // http://89.216.27.121:7788/CalculusWebService/CalculusWebService.asmx?op=PodaciDokumenata

        if($komintent['total_shipping'] > 0) {
            // 2. Ubaci stavku dokumenta - 'UbaciStavDok';
            // Ubaciti u Calculus 9999 proizvod tj. troškovi isporuke
            // Troškovi isporuke u PrestaShop-u
            // U Calculus-u artikal 9999

            $wsfunkcija24 = 'UbaciStavDok'; // KONTROLA: PodaciStavkiDokumenta
            $kljucdok = $dok_id; // '75746';
            $magacin = 'IP'; //
            $artusl = 'U'; // 'U' ArtUsl - da li (A)rtikal ili (U)sluga

            // $sifartusl = $product_reference;
            $sifartusl = '9999';

            $nazartusl = ''; // (ne)obavezno - MORA ILI OVO ILI sifartusl
            $kolicina = '1';
            // if ($id_tax_rules_group == '1') {
                // $tarifa = 'PDV1'; // to je 20%
            // } else if ($id_tax_rules_group == '2') {
                //$tarifa = 'PDV2'; // to je 10%
            // }
            $tarifa = 'PDV1'; // to je 10%
            // $vpcena = $price;
            // $vpcena = (string)$komintent['total_shipping'];
            $mpcena = (string)$komintent['total_shipping'];
            // $postdata24 = "kljucdok=$kljucdok&magacin=$magacin&artusl=$artusl&sifartusl=$sifartusl&nazartusl=&tarifa=$tarifa&kolicina=$kolicina&poruceno=&nabcena=&vpcena=&mpcena=$mpcena&popust=&poulazu=&kb=&napomena=&rabatk=&popustk=&lomk=&rabatd=&popustd=&lomd=&cenovniksk=&zaproizvod=";
            // Linija 434: NOVI KOD - ZAMENA
            $analitickisifra = '001'; // <-- PROVERITE I UNESITE ISPRAVNU VREDNOST!
            $postdata24 = "kljucdok=$kljucdok&magacin=$magacin&artusl=$artusl&sifartusl=$sifartusl&nazartusl=&tarifa=$tarifa&kolicina=$kolicina&poruceno=&nabcena=&vpcena=&mpcena=$mpcena&popust=&poulazu=&kb=&napomena=&rabatk=&popustk=&lomk=&rabatd=&popustd=&lomd=&cenovniksk=&zaproizvod=&analitickisifra=$analitickisifra";
            
            $pccm24 = new Pcalcm($wsfunkcija24, $postdata24);
            $data24 = $pccm24->izvrsi_ccmetod();

            //  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:nil="true"
            $xml24 = str_replace(array(' xmlns:xsd="http://tempuri.org/"', ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"', ' xsi:nil="true"'), '', $data24);
            $dom = new DomDocument();
            $dom->loadXML($xml24);
            $xpath = new DomXPath($dom);
            $st_id = $xpath->query("//string")->item(0)->nodeValue;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-st_id-0 ' . $st_id;

            $arr24 = $pccm24->xml2arr($data24);
            $st_id = $arr24[0];
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-A9999-st_id ' . $st_id;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-A9999-postdata24 ' . $postdata24;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-A9999-data24 ' . $data24;
            $wss_str .= "\n\n" . __LINE__ . ' OBRISATI KADA SE st_id SREDI: UbaciZagDok - xml2arr-data24 ' . htmlspecialchars($data24); // tmpcde

        }

        // //////////////////////////////////////////////////
        // Proizvodi narudžbine iz PrestaShop-a $products niz
        // //////////////////////////////////////////////////
        $pr_ref = '';
        $i = 0;
        $nproducts = array();
        foreach ($products as $product) {

            $id_order = (int)$product['id_order'];
            $id_order_detail = (int)$product['id_order_detail'];
            $product_quantity = (int)$product['product_quantity'];
            $id_product = (int)$product['id_product'];
            $id_tax_rules_group = (int)$product['id_tax_rules_group'];
            $product_ean13 = (int)$product['product_ean13'];
            // $price = (int)$product['price'];

            $sql = 'SELECT `unit_price_tax_incl`
            FROM `' . _DB_PREFIX_ . 'order_detail` WHERE id_order = ' . (int) $id_order . ' AND product_id = ' . (int)$id_product;
             $wss_str .= "\n\n" . __LINE__ . ' '.$sql;

            $price = Db::getInstance()->getValue($sql);

            $product_name = (string)filter_var($product['product_name'], FILTER_SANITIZE_STRING | FILTER_SANITIZE_MAGIC_QUOTES);

            $id_shop_default = (int)$product['id_shop_default'];

            // /////////////////////////////////
            // product_reference iz PrestaShop-a
            // Ovaj podatak je iz Calculus-a - proizvod postoji u njemu
            $product_reference = (string)filter_var($product['product_reference'], FILTER_SANITIZE_STRING | FILTER_SANITIZE_MAGIC_QUOTES);
            // /////////////////////////////////

            $nproducts[$i]['id_order'] = $id_order;
            $nproducts[$i]['id_order_detail'] = $id_order_detail;
            $nproducts[$i]['product_quantity'] = $product_quantity;
            $nproducts[$i]['id_product'] = $id_product;
            $nproducts[$i]['id_tax_rules_group'] = $id_tax_rules_group;
            $nproducts[$i]['product_ean13'] = $product_ean13;
            $nproducts[$i]['price'] = $price;
            $nproducts[$i]['product_name'] = $product_name;
            $nproducts[$i]['id_shop_default'] = $id_shop_default;
            $nproducts[$i]['product_reference'] = $product_reference;

            $wss_str .= "\n\n" . __LINE__ . ' product_reference2 ' . $product_reference;
            $wss_str .= "\n\n" . __LINE__ . ' id_tax_rules_group ' . $id_tax_rules_group;

            // /////////////////////////////////////////
            // 1.3 Ne postoji artikal u Calculus-u - pocetak
            // ubaciti artikal - 'UbaciArtUsl'
            // /////////////////////////////////////////
            if ($product_reference == 'NULL' or empty($product_reference)) {

                $wss_str .= "\n\n" . __LINE__ . ' UBACIVANJE-U-CC.';

                // if ($pr_ref == '' OR 1) { - ISKOMENTARISAN JE USLOV

                // ///////////////////////////
                // Uzimanje naredne sifre pocetak
                // ///////////////////////////
                $wsfunkcija21 = 'PodaciArtikla'; // Vrati

                $uslov = "(artikal.sifra=(select max(a.sifra) from dba.artikal a where a.tip='A'))";

                $postdata21 = "grupa=&sifra=&naziv=&barkod=&serbr=&nazivsvojstva=&vredsvoj=&sort=&uslov=$uslov&jezik=";

                $wss_str .= "\n\n" . __LINE__ . ' postdata21 ' . $postdata21;

                $pccm21 = new Pcalcm($wsfunkcija21, $postdata21);

                $data21 = $pccm21->izvrsi_ccmetod();

                $wss_str .= "\n\n" . __LINE__ . ' PodaciArtikla-postdata21 ' . $postdata21;
                $wss_str .= "\n\n" . __LINE__ . ' PodaciArtikla-data21 ' . $data21;

                $xml21 = str_replace(' xmlns="http://tempuri.org/"', '', $data21);
                $xml21 = str_replace('&', 'and', $xml21);
                $dom = new DomDocument();
                $dom->loadXML($xml21);
                $xpath = new DomXPath($dom);

                $entries21 = $xpath->query("//Table");

                if (!is_array($entries21) or empty($entries21)) {
                    $i = 0;

                    $max = 0;
                    $max_int = 0;
                    $sifra_int = 0;
                    $max_airtikal_id = 0;
                    foreach ($entries21 as $entry) {

                        // artikalID
                        $key0 = 'artikalID';
                        $node = $xpath->query($key0, $entry); // returns a DOMNodeList
                        $artikal_id = $node->item(0)->nodeValue;

                        // sifra
                        $key1 = 'sifra';
                        $node = $xpath->query($key1, $entry); // returns a DOMNodeList
                        $sifra = $node->item(0)->nodeValue;

                        $sifra_int = intval($sifra);
                        // $sifra_int_str .= $sifra_int.','; // tmpcde
                        if ($max < $sifra_int) {
                            $max = $sifra;
                            $max_int = $sifra_int;
                            $max_airtikal_id = $artikal_id;
                        }
                        $i++;
                    } // end foreach ($entries21 as $entry) {}

                    // $product_reference = str_pad($max_int+1, 6, '0', STR_PAD_LEFT);
                    $pr_ref = str_pad($max_int + 1, 6, '0', STR_PAD_LEFT);

                    $wss_str .= "\n\n" . __LINE__ . ' max ' . $max . "\n";
                    $wss_str .= "\n\n" . __LINE__ . ' max_int ' . $max_int . "\n";
                    $wss_str .= "\n\n" . __LINE__ . ' max_airtikal_id ' . $max_airtikal_id . "\n";

                    if($max_airtikal_id == 0) {
                        $message_mail .= "\n\n".__LINE__.' Max artikal id je dobijena vrednost 0.';
                    }

                }
                // ///////////////////////////
                // Uzimanje naredne sifre kraj
                // ///////////////////////////

                $product_reference = $pr_ref;

                // /////////////////////////////
                // Ubacivanje artikla u Calculus
                // /////////////////////////////
                $wsfunkcija11 = 'UbaciArtUsl';

                $product_name01 = filter_var(trim($product_name), FILTER_SANITIZE_ADD_SLASHES);
                
                $postd11 = array(
                    'tip' => 'A', // (A)rtikal/(U)sluga
                    'sifra' => $product_reference,
                    'naziv' => $product_name01,
                    'jdm' => 'kom', // oznaka jedinice mere
                    'nazivukasi' => $product_name01,
                    'IDgrupe' => '',
                    'mptarifa' => 'PDV1',
                    'vptarifa' => 'PDV1',
                    'opis' => '',
                    'proizvodjac' => '',
                    'uvoznik' => ''
                );

                $postdata11 = http_build_query($postd11);

                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl ne moze da se snimi bar kod i nekad ova metoda vrati gresku'; // tmpcde
                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl-postdata11 ' . $postdata11;

                $pccm11 = new Pcalcm($wsfunkcija11, $postdata11);
                $data11 = $pccm11->izvrsi_ccmetod();
                $data11 = str_replace(array('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"', 'xsi:nil="true"', 'xmlns="http://tempuri.org/"'), '', $data11);        

                $xml11 = $data11;
                $dom = new DomDocument();
                $dom->loadXML($xml11);
                $xpath = new DomXPath($dom);
                $p_artikla11 = $xpath->query("//string")->item(0)->nodeValue;
                if(!is_int($p_artikla11)) {
                    $message_mail .= "\n\n" . __LINE__ . ' Sistem nije vratio id posle metode UbaciArtUsl: '.$data11;
                }
                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl-p_artikla11 ' . $p_artikla11;
                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl-postdata11 ' . $postdata11;
                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl-data11 ' . $data11;
                $wss_str .= "\n\n" . __LINE__ . ' UbaciArtUsl-p_artikla11 naci ovaj artikal preko podatka sifra u PodaciArtikla';

                $wss_str .= "\n\n" . __LINE__ . ' IZVRŠENO-UbaciArtUsl ';


                if(!empty($product_ean13)) {

                    // /////////////////////////////
                    // Upis barkoda
                    // /////////////////////////////
                    $wsfunkcija22 = 'UbaciBarkodArtUsl';
                    $idartusl = $p_artikla11; // ID artikla
                    $barkod = $product_ean13;
                    $postdata22 = "IDArtUsl=$idartusl&BarKod=$barkod"; 

                    $pccm22 = new Pcalcm($wsfunkcija22, $postdata22);
                    $data22 = $pccm22->izvrsi_ccmetod();

                    $data22 = str_replace(array('xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"', 'xsi:nil="true"', 'xmlns="http://tempuri.org/"'), '', $data22);        

                    $xml22 = $data22;        

                    $dom = new DomDocument();
                    $dom->loadXML($xml22);
                    $xpath = new DomXPath($dom);
                    // Metoda UbaciBarkodArtUsl vraca barkod ID
                    $barkod_id22 = (int) $xpath->query("//string")->item(0)->nodeValue;

                    $wss_str .= "\n\n".__LINE__.' UbaciBarkodArtUsl - postdata22 '.$postdata22;
                    $wss_str .= "\n\n".__LINE__.' UbaciBarkodArtUsl - data22 '.$data22;
                    $wss_str .= "\n\n".__LINE__.' UbaciBarkodArtUsl - barkod-ID '.$barkod_id22;
                } // end if(!empty($product_ean13)) {}

                // ///////////////////////////////////////////////////////
                // Azuriranje sifre tj. reference proizvoda u PrestaShop-u
                // ///////////////////////////////////////////////////////
                $query_ref = "UPDATE `" . _DB_PREFIX_ . "product` SET reference='$product_reference' WHERE id_product = '$id_product' LIMIT 1";
                // tmpcde iskljuceno - azurira bazu sajta
                Db::getInstance()->Execute($query_ref);

                // } else { // tmpcde - obrisati else
                //     $wss_str .= "\n\n" . __LINE__ . ' POSTOJI-U-CC.';
                // }  // end if ($pr_ref == '' OR 1) {} - ISKOMENTARISAN JE USLOV 

                $wss_str .= "\n\n" . __LINE__ . ' product_reference3 ' . $product_reference;


            } else {
                $wss_str .= "\n\n" . __LINE__ . ' $product_reference IMA VREDNOST.';
            } // end if ($product_reference == 'NULL' or empty($product_reference)) {}


            // Ubacivanje podatka ParitetIsporuke
            // $paritetisporuke šifra koju dodeljuje PrestaShop - ALFANUMERIČKA
            // ParitetIsporuke u Calculus-u
            $wsfunkcija23 = 'AzurDetaljIsporuke';
            $kljuc = $dok_id;
            $rokisporuke=2;


            $postdata23 = "kljuc=$kljuc&ojkom=&skenpocetakmag=&skenzavrsetakmag=&vremeskenvozac=&pibkomitenta=&naruke=&telkomitenta=&mestokomitenta=&adresakomitenta=&mestoisporuke=&adresaisporuke=&nacinisporuke=&paritetisporuke=$paritetisporuke&objekatugovora=&predmetugovora=&rokisporuke=$rokisporuke&datumrokaisporuke=&punaadresaprimaoca=&punaadresaisporuke=&vozacradnik=&brojrataugovora=&vozacime=&vozacbrlk=&voziloregbroj=&tipkoleta=&brojkoleta=&netomasa=&brutomasa=&tippalete=&brojpaleta=&treciucesniknaziv=&treciucesnikmesto=&treciucesnikadresa=&treciucesnikpib=&treciucesnikdostavnica=&primalacrobe=&dokokretotpad=&brojknjcar=&emailzaslanje=&predvidjenidatumotpreme=&kurirskasluzba=";
            $pccm23 = new Pcalcm($wsfunkcija23, $postdata23);
            $data23 = $pccm23->izvrsi_ccmetod();

            $data23 = str_replace(array('xmlns="http://tempuri.org/"', 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"', 'xsi:nil="true"'), '', $data23);
            $xml23 = $data23;

            $dom = new DomDocument();
            $dom->loadXML($xml23);
            $xpath = new DomXPath($dom);
            $dok_id = $xpath->query("//string")->item(0)->nodeValue;
            $wss_str .= "\n\n" . __LINE__ . ' AzurDetaljIsporuke-dok_id-0 ' . $dok_id;
            $wss_str .= "\n\n" . __LINE__ . ' AzurDetaljIsporuke-postdata23 ' . $postdata23;
            $wss_str .= "\n\n" . __LINE__ . ' AzurDetaljIsporuke-data23 ' . $data23;
            $wss_str .= "\n\n" . __LINE__ . ' AzurDetaljIsporuke - dok_id, ovaj dokument pronaći uz pomoć metode PodaciDokumenata.';



            // /////////////////////////////////////////
            // 1.3 Ne postoji artikal u Calculus-u - kraj
            // ubaciti artikal - 'UbaciArtUsl'
            // /////////////////////////////////////////


            // /////////////////////////////////////////
            // 2. Ubaci stavku dokumenta - 'UbaciStavDok';
            // /////////////////////////////////////////

            $wsfunkcija10 = 'UbaciStavDok'; // KONTROLA: PodaciStavkiDokumenta
            $kljucdok = $dok_id; // '75746';
            $magacin = 'IP'; //
            $artusl = 'A'; // 'U' ArtUsl - da li (A)rtikal ili (U)sluga

            $sifartusl = $product_reference;

            $nazartusl = ''; // (ne)obavezno - MORA ILI OVO ILI sifartusl
            
            $kolicina = $product_quantity;
            if ($id_tax_rules_group == '1') {
                $tarifa = 'PDV1'; // to je 20%
            } else if ($id_tax_rules_group == '2') {
                $tarifa = 'PDV2'; // to je 10%
            }
            $mpcena = $price;

            $wss_str .= "\n\n" . __LINE__ . ' UbaciZagDok-dok_id-2- ' . $dok_id;
            
            //$postdata10 = "kljucdok=$kljucdok&magacin=$magacin&artusl=$artusl&sifartusl=$sifartusl&nazartusl=&tarifa=$tarifa&kolicina=$kolicina&poruceno=&nabcena=&vpcena=&mpcena=$mpcena&popust=&poulazu=&kb=&napomena=&rabatk=&popustk=&lomk=&rabatd=&popustd=&lomd=&cenovniksk=&zaproizvod=";
            
            // Linija 737: NOVI KOD - ZAMENA
            $analitickisifra = '001'; // <-- PROVERITE I UNESITE ISPRAVNU VREDNOST!
            $postdata10 = "kljucdok=$kljucdok&magacin=$magacin&artusl=$artusl&sifartusl=$sifartusl&nazartusl=&tarifa=$tarifa&kolicina=$kolicina&poruceno=&nabcena=&vpcena=&mpcena=$mpcena&popust=&poulazu=&kb=&napomena=&rabatk=&popustk=&lomk=&rabatd=&popustd=&lomd=&cenovniksk=&zaproizvod=&analitickisifra=$analitickisifra";
            
            // tmpcde
            // $postdata10 = "kljucdok=$kljucdok&magacin=$magacin&artusl=$artusl&sifartusl=$sifartusl&nazartusl=nazivAU&tarifa=$tarifa&kolicina=$kolicina&poruceno=&nabcena=17503.920000&vpcena=17503.920000&mpcena=$mpcena&popust=3&poulazu=&kb=&napomena=&rabatk=1&popustk=1&lomk=1&rabatd=1&popustd=1&lomd=1&cenovniksk=&zaproizvod=";

            $pccm10 = new Pcalcm($wsfunkcija10, $postdata10);
            $data10 = $pccm10->izvrsi_ccmetod();
            $data10 = str_replace(array('xmlns="http://tempuri.org/"', 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"', 'xsi:nil="true"'), '', $data10);

            $xml10 = $data10;
            $dom = new DomDocument();
            $dom->loadXML($xml10);
            $xpath = new DomXPath($dom);
            $st_id = $xpath->query("//string")->item(0)->nodeValue;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-st_id-0 ' . $st_id;

            $arr10 = $pccm10->xml2arr($data10);
            $st_id = $arr10[0];
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-st_id ' . $st_id;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-postdata10 ' . $postdata10;
            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-data10 ' . $data10;
            $wss_str .= "\n\n" . __LINE__ . ' OBRISATI KADA SE st_id SREDI: UbaciZagDok - xml2arr-data10 ' . htmlspecialchars($data10); // tmpcde

            $wss_str .= "\n\n" . __LINE__ . ' UbaciStavDok-st_id metoda za prikaz ove stavke PodaciStavkeDokumenta';

            $i++;
        } //  end foreach ($products as $product) {}

        $ccdproducts3 = $products;
        $ccdproducts = array_shift($products);

        $data = array(
            'ccdkomintent' => $komintent,
            'ccdnproducts' => $nproducts,
        );

        $data2 = $data;

        $data_str = print_r($data2, true) . "\n\n";

        // Logovanje u zavisnosti od promenjive $log_p2c
        if ($log_p2c) {
            // $data_str = $customer_message; //'order params1 '.print_r($params, true);
            fwrite($logfile, $data_str);
        }

        // ========================================
        // WEB SERVICE START

        $pccm2 = new Pcalcm('DatumVremeDBServera', '');
        $data2 = $pccm2->izvrsi_ccmetod();

        $xml2 = str_replace(' xmlns="http://tempuri.org/"', '', $data2);
        $dom = new DomDocument();
        $dom->loadXML($xml2);
        $xpath = new DomXPath($dom);

        $datum_vreme_db = $xpath->query("//string")->item(0)->nodeValue;

        $wss_str .= "\n\n" . __LINE__ . ' DatumVremeDBServera datum_vreme_db-0 ' . $datum_vreme_db;

        $wss_str .= "\n\n" . '-TMPCDE-$message_mail-' . $message_mail . "\n\n";
        $wss_str .= "\n\n" . '------------------------------' . "\n\n";

        // Logovanje u zavisnosti od promenjive $log_p2c
        if ($log_p2c) {
            // $wss_str = $customer_message; // 'order params2 '.print_r($params, true);
            fwrite($logfile, $wss_str);
        }
        // WEB SERVICE END
        // =========================================


        // =========================================
        // Prikaz podataka na strani
        $data_str .= "\n\n" . __LINE__ . '-dvws-' . htmlspecialchars($arr[0]);
        $data_str .= "\n\n" . __LINE__ . '-wss_str-' . $wss_str;

        $this->context->smarty->assign(array(
            'id_order' => $id_order,
            // 'id_product' =>$tmp_id_product,
            'id_product' => $data_str,
        ));

        return $this->display(__FILE__, 'templates/hook/p2c_orderconfirmation.tpl');
        // return $this->display(__FILE__, 'presta2c/templates/hook/p2c_orderconfirmation.tpl');
    }

}

?>