<?php
error_reporting(E_ALL);
ini_set('display_errors', 'On');

// Banco de Dados
require_once 'connect.php';
require_once 'messages.php';
require_once "orcamento_class.php";
require_once "Xml.Class.php";

/*
$ReciboCode = new ReciboCode();
$xml     = new Xml();
*/

class ReciboXmlVenda{

  private $set_msg = array();
  private $id_documento=0;
  private $s_trib_federal = 0;
  private $s_trib_estadual= 0;
  private $s_trib_municipal=0;
  private $p_ds_chave_ibpt = '';

  private $documentos_emitente = array();
  private $documentos_saida   = array();
  private $documentos_cliente = array();
  private $documentos_produto = array();


  public function __construct(){

	$this->xml = new Xml();
	$this->ReciboCode= new ReciboCode();
    $this->xml->openTag("CFe");
    $this->xml->openTag('infCFe versaoDadosEnt="0.07"');
  }

  // retorna as informações do emitente
  function getSQLtoTag($p_tag_sql, $p_tag_name) {
    global $conexao;

    // cria uma tag e transforma o resultado do array para um XML
    //Abrindo a Tag de Resposta
	$this->xml->openTag($p_tag_name);
    foreach ($p_tag_sql as $key => $value) {
      if($key!='nr_documento'){
        $this->xml->addTag($key, $value);
      }
    }

    // fecha a tag e retorna o resultado
    $this->xml->closeTag($p_tag_name);
    return $this->xml;
    }


  // inclui o emitente no xml
  function getEmitenteToTag($p_emitente, $p_enderemit){
    global $conexao;

      $this->xml->openTag('emit');

      $this->xml->addTag('CNPJ' , $p_emitente[0]['CNPJ']);
      $this->xml->addTag('xNome', $p_emitente[0]['xNome']);
      $this->xml->addTag('xFant', $p_emitente[0]['xFant']);

      // dados do produto
      $this->xml->openTag('enderEmit');
      $this->xml->addTag('xLgr'   , $p_enderemit[0]['xLgr']);
      $this->xml->addTag('nro'    , $p_enderemit[0]['nro']);
      $this->xml->addTag('xBairro', $p_enderemit[0]['xBairro']);
      $this->xml->addTag('xMun'   , $p_enderemit[0]['xMun']);
      $this->xml->addTag('CEP'    , $p_enderemit[0]['CEP']);
      $this->xml->closeTag("enderEmit");

      $this->xml->addTag('IE', $p_emitente[0]['IE']);
      $this->xml->addTag('IM', $p_emitente[0]['IM']);
      $this->xml->addTag('cRegTrib', $p_emitente[0]['cRegTribISSQN']);
      $this->xml->addTag('cRegTribISSQN', $p_emitente[0]['cRegTribISSQN']);
      $this->xml->addTag('indRatISSQN', $p_emitente[0]['indRatISSQN']);

      $this->xml->closeTag('emit');
  }

  // inclui o produto no Xml
  function getProdutoToTag($p_produtos){
    global $conexao;

    for ($i=0; $i < count($p_produtos) ; $i++) {
      $p_nr_item  = $i +1;
      $p_id_item  = $p_produtos[$i]['nItem']; // ID do Item Liberado, só usado para join do imposto.

      $p_tag_name = 'det nItem="' . $p_nr_item . '"';
      $this->xml->openTag($p_tag_name);

      // dados do produto
      $this->xml->openTag('prod');
      $this->xml->addTag('cProd', $p_produtos[$i]['cProd']);
      $this->xml->addTag('xProd', $p_produtos[$i]['xProd']);
      $this->xml->addTag('NCM'  , $p_produtos[$i]['NCM']);
      $this->xml->addTag('CFOP' , $p_produtos[$i]['CFOP']);
      $this->xml->addTag('uCom' , $p_produtos[$i]['uCom']);
      $this->xml->addTag('qCom'  , number_format($p_produtos[$i]['qCom'],4));
      $this->xml->addTag('vUnCom', $p_produtos[$i]['vUnCom']);
      $this->xml->addTag('indRegra', $p_produtos[$i]['indRegra']);
      $this->xml->addTag('vDesc', $p_produtos[$i]['vDesc']);
      $this->xml->closeTag('prod');

      // dados dos impostos do produtos ICMS, PIS e Cofins
      $p_impostos = $p_produtos[$i]['imposto'];
      $this->xml->openTag('imposto');
      for($x=0; $x< count($p_impostos); $x++){
        $p_tipo = $p_impostos[$x]['tipo'];
        $p_valor= $p_impostos[$x]['valor'];
        $this->xml->addTag($p_tipo, $p_valor);
      }
      $this->xml->closeTag('imposto');
      $this->xml->closeTag('det');

      // acumulador de valores para lei 12741/2012
      $vl_produto = $p_produtos[$i]['vProd'];
      $vl_federal = $p_produtos[$i]['vTribFed'];
      $vl_estadual= $p_produtos[$i]['vTribEst'];
      $vl_municipal=$p_produtos[$i]['vTribMun'];

      $this->s_trib_federal   += ($vl_federal  * $vl_produto);
      $this->s_trib_estadual  += ($vl_estadual * $vl_produto);
      $this->s_trib_municipal += ($vl_municipal* $vl_produto);

      $this->p_ds_chave_ibpt = $p_produtos[$i]['ds_chave_ibpt'];
    }
  }

  function getTotaisTotTag($p_totais){
    /* Edival 02/03/2017 Antigo, captura dos tributos através do produto/ncm/tributos
    global $conexao;

    $p_total_icms = round($p_totais[0]['vl_total_icms'], 4);
    $p_total_fede = round($p_totais[0]['vl_total_fede'], 4);
    $p_total_pedido= round($p_totais[0]['vl_total_pedido'], 4);

    $p_perc_aliq_icms = ($p_total_icms / $p_total_pedido)*100;
    $p_perc_aliq_fede = ($p_total_fede / $p_total_pedido)*100;

    $p_total_impostos = $p_total_icms + $p_total_fede;

    $p_mensagem = "Val. Aprox. Tributos: Federais R$ $p_total_fede ($p_perc_aliq_fede%) Estaduais R$ $p_total_icms ($p_perc_aliq_icms%) Municipais R$0,00 (0,00%) Fonte: IBPT Chave: 5oi7eW Versao: 15.2.A";
    */

    $p_cd_mp = $p_totais[0]['cMP'];
    $p_vl_mp = $p_totais[0]['vMP'];

    $this->s_trib_federal  = round($this->s_trib_federal  , 2);
    $this->s_trib_estadual = round($this->s_trib_estadual , 2);
    $this->s_trib_municipal= round($this->s_trib_municipal, 2);

    $p_total_impostos = round($this->s_trib_federal + $this->s_trib_estadual + $this->s_trib_municipal, 2);
    $p_mensagem = "Val. Aprox. Tributos: Federais R$ {$this->s_trib_federal} Estaduais R$ {$this->s_trib_estadual} Municipais R$ {$this->s_trib_municipal} Fonte: IBPT {$this->p_ds_chave_ibpt} (Conforme Lei Fed.12.741/2012)";

    $this->xml->openTag("total");
    $this->xml->addTag("vCFeLei12741", $p_total_impostos);
    $this->xml->closeTag("total");

    $this->xml->openTag("pgto");
    $this->xml->openTag("MP");
    $this->xml->addTag("cMP", $p_cd_mp);
    $this->xml->addTag("vMP", $p_vl_mp);
    $this->xml->closeTag("MP");
    $this->xml->closeTag("pgto");

    $this->xml->openTag("infAdic");
    $this->xml->addTag("infCpl", $p_mensagem);
    $this->xml->closeTag("infAdic");
    }



  /* função que verifica se todos os dados do cupom estão OK ! */
    function getDados($id_pedido_liberado){

      $r_getDados = true;
	  $this->id_documento=$id_pedido_liberado;
	  // $ReciboCode->setNrNota($id_documento);

	  $this->ReciboCode->nr_nota= $id_pedido_liberado;
      $sql_ide      = $this->ReciboCode->getIdeSat();
      $sql_emitente = $this->ReciboCode->getEmitente();
      $sql_enderemit= $this->ReciboCode->getEnderEmit();
      $sql_cliente  = $this->ReciboCode->getCliente();
      // $sql_entrega = $ReciboCode->getEntrega();
      $sql_produto = $this->ReciboCode->getProdutos();
      $sql_totais  = $this->ReciboCode->getTotalCupom();

      /*
      echo "<pre>";
      print_r($sql_produto);
      echo "</pre>";
      exit;*/


      $xml_ide = $this->getSQLtoTag($sql_ide[0],"ide");
      //$xml_emi = $this->getSQLtoTag($sql_emitente[0], "emit");
      $xml_emi = $this->getEmitenteToTag($sql_emitente, $sql_enderemit);

      $xml_cli = $this->getSQLtoTag($sql_cliente[0] , "dest");
      // $xml_entrega  = $this->getSQLtoTag($sql_entrega[0] , "entrega");
	  $xml_pro = $this->getProdutoToTag($sql_produto);

	  $xml_tot = $this->getTotaisTotTag($sql_totais);

      $this->xml->closeTag("infCFe");
      $this->xml->closeTag("CFe");


	  /*
		$myfile = fopen("xml/xml_ide.xml", "w+") or die("Unable to open file!");
		// header( 'Content-type: text/xml' ); preg_replace("/(\t+)/", "", $r_xml)
		fwrite($myfile, $this->xml);
		fclose($myfile);
		exit;*/

      /*
      $xml2 = new SimpleXMLElement('<xml/>');
      $xml2 = new SimpleXMLElement($xml);
      Header('Content-type: text/xml');
      print($xml2->asXML());


      $sql_emitente = $NfcCode->getEmitente();
      $xml_emitente = $this->getSQLtoTag($sql_emitente[0], 'emit');

      $sql_
      echo '<pre>', htmlentities($xml), '</pre>';

      echo '<pre>', htmlentities($xml), '</pre>';
      exit;*/
      return $this->xml;
    }





    // Cálculo do IVA-ST ou MVA-ST
    function nfc_CalculaSt($p_mva_orig, $p_aliq_inter, $p_aliq_intra){
      // IVA-ST ajustado = [(1+IVA-ST original) x (1 - ALQ inter) / (1- ALQ intra)] -1, onde:
      echo "<br>p_mva_orig => $p_mva_orig";
      echo "<br>p_aliq_inter => $p_aliq_inter";
      echo "<br>p_aliq_intra => $p_aliq_intra";
      echo "<br>";

      $get_ret = 0;
      $get_ret = number_format((1 + ($p_mva_orig / 100)) * (1 - $p_aliq_inter / 100) / (1- $p_aliq_intra / 100) -1, 4, '.', ',');
      return  $get_ret;
    }

}

?>
