<?php

/*
 *
 * Class: iapiQueryEnvelope
 * 
 * Klasa koja sadrzi definiciji upita API funkciji. 
 *  
 */ 

include_once ('iapi_query_class.php');

class iapiQueryEnvelope extends iapiQuery {
  	public $req_id = '';			// id upita (generise klijent, server vraca ovaj id u odgovoru)
    public $session_id = '';		// id sesije (generise server a klijent u svakom sledecem upitu koristi taj id)
    							// sesija se kreira prvim pristupom apiju a zavrsava odjavom ili neaktivnoscu
    public $instance_id = '';		// id instance upita (generise server a klijent u svakom sledecem upitu koristi taj id)
								// instanca upita se kreira prvim pokretanjem odredjene opcije a prestaje zatvaranjem sesije
								// instanca omogucava da se ista opcija pokrene vise puta sa razlictim parametreima a da
								// se moze kesirati
    public $encoding = '';			// enkoding koji se koristi u poruci, primenjuje se na data properti
    public $app_option = '';		// oznaka api opcije kojoj se salje upit
    public $data = '';				// parametri koji se salju api opciji 
    public $username = '';			// username korisnika na klijentu
    public $password = '';			// lozinka
    public $client_id = '';		// id klijenta (oznaka klijentskog programa)
    public $client_version = CLIENT_VERSION;	// verzija klijenta
    public $api_version = API_VERSION;		// verzija apija koji klijent razume
    public $poslovna_godina = '';	// poslovna godina
    public $job = '';				// oznaka job-a 
    public $pozicija = '';			// oznaka pozicije
    public $checksum = '';			// checksum poruke
    
    public function __construct($pAppOption) {
        parent::__construct();
        $this->app_option = $pAppOption;            
        $this->req_id = md5($this->app_option . time());
        $this->data = $this->getParams();         
    }
    
    public function getClassName() {
        return "TAPIQueryEnvelope";
    }    
    
    public function getParams() {
        $mParamsClassFile = 'infoapi/iapi_query_' . strtolower ($this->app_option) . '_params_class.php';
        
        
        
        if (file_exists($mParamsClassFile)) {
            include_once ($mParamsClassFile );
            $mParamsClass = 'iapiQuery' . strtolower ($this->app_option) . 'Params';    
        } else {
            include_once ('iapi_query_generic_params_class.php');
            $mParamsClass = 'iapiQueryGenericParams';
        }
        $mParamsObj = new $mParamsClass;
        
        return $mParamsObj;
    }
    
    public function Prepare() {        
        if (method_exists ($this->data, 'Prepare')) {            
            $this->data->Prepare();
        }        
    }    

    /*
     * toString()
     * 
     * Vraca serijalizovan objekat
     * 
     */
    public function toString() {
        $this->SetChecksum();
        return parent::toString();
    }
    
    
    public function SetChecksum()  {

      $this->client_id = CLIENT_ID;
      $this->data = $this->data->toString();

      $mCheckSumData = $this->data . $this->req_id;    

      $mpk = CLIENT_PK;
      if (! empty ($mpk)) {
        $mCheckSumData = $mCheckSumData . $mpk;
      }

      $this->checksum = strtoupper (MD5 ($mCheckSumData));
      
//echo "<pre>";    
//print_r ($this);
//echo "</pre>";
     
    }    

    
}

?>