<?php

require_once 'connect.php';
require_once 'inc/messages.php';

class ReciboCode{

  public $nr_nota   = 0; // numero do Pedido Liberado para impressão do Recibo

  /*
  function getIdeSatCancela(){
    global $conexao;
    global $nr_nota;

    // retorna um array com os campos do select
    $sql = "select * from vw_erpc_nfccode_geraxml_cancelar where id = ?";
    $values[] = $nr_nota;
    $result = _prepareAndQuery($sql, $values);
    return $result;
  }*/

	/* Retorna uma consulta para o array */
	function getSQL($consulta){
  global  $conexao;
			    $ar_retorno = array();
			    $resultado = mysqli_query($conexao, $consulta) or die ($erro = mysqli_error($conexao));
			    	if (mysqli_num_rows($resultado)>0) {
			          while ($registro = mysqli_fetch_assoc($resultado)){
			            array_push($ar_retorno, $registro);
			          }
			    }
	 return $ar_retorno;
  }

  function getIdeSat(){
    global $conexao;

    // retorna um array com os campos do select
    $sql = "select ds_cnpj as CNPJ, ds_razao_social as signAC, '001' as numeroCaixa,
     l.id_pedido_original as nCFe, DATE_FORMAT(now(), '%Y%m%d') as dEmi, DATE_FORMAT(now(), '%h%i%s') as hEmiz,
     l.ds_mensagem_nf as dsObs
     from erpc_unidades u
     join erpc_pedidos_venda_liberados l on u.id = l.id_unidade where l.id = ?";
    $values[] = $this->nr_nota;
    $result = _prepareAndQuery($sql, $values);
    /*
    $a_item = array(
            'CNPJ'  => '23401454000170'  ,
            'signAC'=> 'SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT',
            'numeroCaixa' => '001'
            );

    $result = array($a_item);
    */
    return $result;
  }

  function getEmitente(){
    global $conexao;

	$sql = "select ds_cnpj as CNPJ, ds_ie as IE, ds_im as IM, 3 as cRegTribISSQN, 'N' as indRatISSQN,
    ds_fantasia as xFant, ds_razao_social as xNome
    from erpc_unidades u join erpc_pedidos_venda_liberados l on u.id = l.id_unidade where l.id = ?";
    $values[] = $this->nr_nota;
    $result = _prepareAndQuery($sql, $values);
    return $result;
  }

  function getEnderEmit(){
    global $conexao;

    $sql = "select ds_endereco as xLgr, ds_numero as nro,
                    ds_bairro as xBairro, m.ds_municipio as xMun, ds_cep as CEP
            from  erpc_unidades   u
            join  erpc_municipios m on u.id_municipio = m.id
            join  erpc_pedidos_venda_liberados l on u.id = l.id_unidade where l.id =?";
    $values[] = $this->nr_nota;
    $result = _prepareAndQuery($sql, $values);
    return $result;
  }

  function getCliente(){
    global $conexao;

    // echo "<br>" . $this->nr_nota;
    
    // não utilizar o execute na function padrão.!
    $sql = "CALL pr_recibo_cfe_cliente( ?)";
    $stmt = mysqli_prepare($conexao, $sql);
  	mysqli_stmt_bind_param($stmt, 's', $this->nr_nota);

  	mysqli_stmt_execute($stmt);
  	$result = mysqli_stmt_get_result($stmt);
    // $row    = mysqli_fetch_array($result, MYSQLI_NUM);
    $row    = mysqli_fetch_array($result, MYSQLI_ASSOC);
    mysqli_stmt_close($stmt);

    return array($row);
  }

  /*
  // retorna as informações do cliente
  function getEntrega() {
    global $conexao;
    global $nr_nota;

    $sql = 'select * from vw_erpc_nfccode_geraxml_entrega where nr_documento=?';
    $values[] = $nr_nota;
    $result = _prepareAndQuery($sql, $values);

    return $result;
  }*/


  // retorna os produtos da nota fiscal
  function getProdutos() {
    global $conexao;

    /* $sql = 'select * from vw_erpc_recibo_geraxml_produtos where nr_documento=?';
       $values[] = $this->nr_nota;
       $r_produtos = _prepareAndQuery($sql, $values);*/

	 $sql = "select * from vw_erpc_recibo_geraxml_produtos where nr_documento=" . $this->nr_nota;
	 $r_produtos = $this->getSQL($sql);

    for ($i=0; $i < count($r_produtos) ; $i++) {
      $p_item = $r_produtos[$i]['nItem'];

      $a_item = $this->getImpostoProduto($p_item);

      $r_produtos[$i]['imposto'] = $a_item;

    }
    return $r_produtos;
  }

  // retorna os impostos do produto do cupom
  function getImpostoProduto($p_item_liberado) {
    global $conexao;

    /*$sql = 'select * from vw_erpc_recibo_geraxml_prod_imposto where nItem=? order by 2';
    $values[] = $p_item_liberado;
    $result = _prepareAndQuery($sql, $values);

		// echo "valor:" . htmlentities($result[0]['valor']);
		*/
		$sql = "select * from vw_erpc_recibo_geraxml_prod_imposto where nItem=" . $p_item_liberado . " order by 2";
		$result = $this->getSQL($sql);

		return $result;
  }


  // retorna os impostos do produto do cupom
  function getTotalCupom() { 
    global $conexao;

	/*
    $sql = 'select * from vw_erpc_recibo_geraxml_totais where nr_documento=?';
    $values[] = $this->nr_nota;

    $result = _prepareAndQuery($sql, $values);
    return $result;
	*/
	$sql = "select * from vw_erpc_recibo_geraxml_totais where nr_documento=" . $this->nr_nota . " order by 1, cmp";
	$result = $this->getSQL($sql);
	return $result;
  }

  // atualiza o BD na tabela cancelamento de venda
  function bd_UpdateStatusCfeCancela($dados_cancela, $resposta){
    global $conexao;

    $pi_id_documento = $dados_cancela['id_documento'];
    $pi_chave        = $dados_cancela['chave'];
    $pi_nr_cupom_original = $dados_cancela['nr_cupom_original'];
    $pi_vl_total_cfe      = $dados_cancela['vl_total_cfe'];
    $pi_dadosCancelamento = $dados_cancela['dadosCancelamento'];

    $pi_dadosCancelamento = chr(34) . addslashes( $pi_dadosCancelamento) . chr(34);

    // echo "<br>testando a resposta:{" . substr($resposta, 0, 1) . "}";

    if(substr($resposta, 0, 1)=="1"){
      /*
      $sql = "insert into erpc_cancelamento_cfe(id_documento_saida, id_status_cancela, nr_extrato, ds_cpf_cnpj,
      vl_total_cupom, nr_sat, ds_chave_original, ds_xml_cancelado, cd_status_canc, ds_status_canc, id_usuario)
      values( ?,?,?,?,?,?,?,?,?,?,?)";*/
      $sql = "update erpc_documentos_saida set id_status_transmissao = ?, ds_chave = ?, ds_xml = ?,
      cd_status_nfe = ?, ds_status_nfe = ?, id_usuario = ? where id = ?";

      $values = array();
      array_push($values, 5);
      array_push($values, "$pi_chave");
      array_push($values, $pi_dadosCancelamento);
      array_push($values, "07000");
      array_push($values, $resposta);
      array_push($values, $this->id_usuario);
      array_push($values, "$pi_id_documento");

      $ok = _prepareAndExecute($sql, $values);

    /*
    echo "<br>SQL| $sql";
    $stmt = mysqli_prepare($conexao, $sql) or die(mysqli_error($conexao) . '<br />' . $sql);
    $ok   = mysqli_stmt_execute($stmt) or die(mysqli_error($conexao));
    */
    }
  }


  // atualiza o bd de acordo com o array objeto
    function bd_UpdateStatusNfc($dados_retorno, $xml_original) {
    global $conexao;
    $ok = false;

    $id_status = '1';
    $ds_status = $dados_retorno['mensagem']; // em caso de erro, salvar mensagem comple

    // grava o status da gravação no BD para prosseguir com as operaçoes
    $sql = "update erpc_documentos_saida set ds_modelo=59";

    $xml_original = addslashes("<?xml version='1.0' encoding='UTF-8'?>" . $xml_original);

    // Transmitido com sucesso com alerta ou rejeição
    if($dados_retorno['EEEEE']=='06000'){
      $ds_chave      = $dados_retorno['chaveConsulta'];
      $cd_status_nfe = '06000';
      $ds_status_nfe = 'Autorizado:Emitido com sucesso + Notas';
      $ds_tmp_xml    = $dados_retorno['ArquivoCFeBase64'];
      $ds_qrcode     = $dados_retorno['assinaturaQRCODE'];

      $nr_cupom = substr($ds_chave, 34, 6);

      // decodifica a strinf do XML final
      if($ds_tmp_xml!==""){
        $ds_xml = base64_decode($ds_tmp_xml);

        /* faz a copia do cupom para diretorio
        $myfile = fopen("xml/$ds_chave.xml", "w+") or die("Unable to open file!");
        //header( 'Content-type: text/xml' ); preg_replace("/(\t+)/", "", $r_xml)
        fwrite($myfile, $ds_xml);
        fclose($myfile);*/

        $ds_xml = addslashes($ds_xml);
      }

      $sql .= " , id_status_xml_interno =1";
      $sql .= " , id_status_transmissao =4";
      $sql .= " , ds_numnf ='$nr_cupom'";
      $sql .= " , ds_chave ='$ds_chave'";
      $sql .= " , ds_xml   ='$ds_xml'";
      $sql .= " , ds_qrcode='$ds_qrcode'";

    }else{ // erro na transmissão ou erro no XML
      $cd_status_nfe = $dados_retorno['EEEEE'];
      $ds_status_nfe = $ds_status;

      $sql .= " , id_status_xml_interno =2";
      $sql .= " , ds_status_proc='$ds_status'";
      $sql .= " , ds_xml ='$xml_original'";
    }

    // campos comuns aos 2 updates
    $sql .= " , cd_status_nfe ='$cd_status_nfe'";
    $sql .= " , ds_status_nfe ='$ds_status_nfe'";
    $sql .= " where id='$this->nr_nota'";

    if($sql!=""){
      $stmt = mysqli_prepare($conexao, $sql) or die(mysqli_error($conexao) . '<br />' . $sql);
      $ok   = mysqli_stmt_execute($stmt) or die(mysqli_error($conexao));
    }
    return $ok;
  }

  // método para atualizar o número do recibo
  function bd_updateRecibo($p_resp){
    global $conexao;
    $ok = false;

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

	$bStat  = $p_resp['bStat'];
    $cStat  = $p_resp['cStat'];
    $xMotivo= $p_resp['xMotivo'];
    $nRec   = $p_resp['nRec'];

    $sql = "update erpc_documentos_saida set id_status_transmissao=3, cd_status_nfe='$cStat', ds_status_nfe='$xMotivo', ds_recibo_sefaz='$nRec' where id=$nr_nota";
    if($sql!=""){
      $stmt = mysqli_prepare($conexao, $sql) or die(mysqli_error($conexao) . '<br />' . $sql);
      $ok   = mysqli_stmt_execute($stmt) or die(mysqli_error($conexao));
    }

    /*
	if ($ok !== false) {
      addError('Atualizado com sucesso');
    }*/
    return $ok;
  }

  function bd_updateStatusSefaz($p_resp){
    global $conexao;
    global $nr_nota;
    $ok = false;
  	$ds_status_proc = '';

  	// percorre o array de status de processamento na Sefaz
  	foreach($p_resp as $key => $value){
  		$ds_status_proc .= "$value;";
  	}

      $sql = "update erpc_documentos_saida set ds_status_proc=" . chr(34) . htmlspecialchars($ds_status_proc) . chr(34) .  " where id=$nr_nota";
      if($sql!=""){
        $stmt = mysqli_prepare($conexao, $sql) or die(mysqli_error($conexao) . '<br />' . $sql);
        $ok   = mysqli_stmt_execute($stmt) or die(mysqli_error($conexao));
      }
      return $ok;
  }

  // Status de Processamento Interno
  function bd_updateStatusProc($p_xml, $p_msg){
    global $conexao;
    global $nr_nota;
    $ok = false;
  	$ds_status_proc = '';

  	// percorre o array de status de processamento na Sefaz
  	foreach($p_msg as $key => $value){
  		$ds_status_proc .= "$value;";
  	}

    if($p_xml==""){
      $p_xml='0';
    }

    /*
    addMessage("is_status_xm_interno = $p_xml");

    $sql = "update erpc_documentos_saida set id_status_xml_interno=$p_xml, ds_status_proc=" . chr(34) . htmlspecialchars($ds_status_proc) . chr(34) .  " where id=$nr_nota";
    if($sql!=""){
      $stmt = mysqli_prepare($conexao, $sql) or die(mysqli_error($conexao) . '<br />' . $sql);
      $ok   = mysqli_stmt_execute($stmt) or die(mysqli_error($conexao));
    }*/
    $ok = false;
    $sql = 'update erpc_documentos_saida set id_status_xml_interno=?, ds_status_proc=? where id=?';
    //$values = array($tabela_preco['id']);
    $values = array($p_xml, $ds_status_proc, $nr_nota);
    $ok = _prepareAndExecute($sql, $values);

    return $ok;
  }

}

?>
