<?php
require_once 'inc/usuario.php';
require_once 'connect.php';
require_once 'inc/messages.php';

$id_status_pedido=1;
$id_usuario      =1;
$st_ativo        =1;
$id_unidade = 1;
$id_new_ped = 0;


/* unidade selecionada pelo usuário */
if(isset($_SESSION[SESSION_USER_NAME])){
  $id_usuario = $_SESSION[SESSION_USER_NAME]['id'];
  $id_unidade = $_SESSION[SESSION_USER_NAME]['unidade'];
}

// retorna array com lista, ou false se deu erro
function pedidos_venda_getAll() {
  global $conexao;
  $sql = 'select * from erpc_pedidos_venda where st_ativo=?';
  $values[] = '1';
  $result = _prepareAndQuery($sql, $values);
  return $result;
}

// retorna array associativo com objeto, ou false se deu erro/não encontrar
function pedidos_venda_getById($id, $id_saida) {
  global $conexao;
  //$sql = 'select * from erpc_pedidos_venda where id=? and st_ativo=1';
  $sql = 'select v.*, ds.ds_status_proc, ds.ds_xml, ds.cd_status_nfe, ds.ds_status_nfe
          from   erpc_pedidos_venda v
          left join   erpc_pedidos_venda_liberados  l  on v.id =l.id_pedido_original
          left join   erpc_pedidos_documentos_saida pd on l.id =pd.id_pedido_liberados
          left join   erpc_documentos_saida         ds on pd.id_documento_saida = ds.id
          where  v.st_ativo=1 and v.id=?';

  $values[] = $id;

  if($id_saida!=""){
    $sql .= " and ds.id=?";
    $values[] = $id_saida;
  }
  $result = _prepareAndQuery($sql, $values);
  if ($result !== false) {
    if (count($result) === 1) {
      $result = $result[0];
      $itens = pedidos_venda_item_getById($id);
      // se não tiver itens, cria um array vazio
      if ($itens === false) {
        $result = false;
        addError('Erro ao carregar os itens');
      } else {
        $result['itens'] = $itens;
        // já formato os campos aqui? por hora sim...
        foreach($result as $k => $v) {
          $result[$k] = sgcws_format_field($k, $v);
        }
      }
    } else {
      $result = false;
      addError('Id não encontrado');
    }
  }
  return $result;
}

// retorna array associativo com objeto, ou false se deu erro/não encontrar
function pedidos_venda_item_getById($id_pai) {
  global $conexao;
  $sql = 'select i.*, p.ds_produto, 0 as nr_saldo_estoque
  from erpc_pedidos_itens i
  left join erpc_produtos p on i.id_produto = p.id where id_pedido=?';
  $values[] = $id_pai;
  $result = _prepareAndQuery($sql, $values);
  return $result;
}

// insere novo
function pedidos_venda_insert($pedidos_venda, &$error=null) {
  global $conexao;
  global $id_status_pedido;
  global $id_usuario;
  global $st_ativo;

  // capturando os valores padrões
  $pedidos_venda['id_status_pedido'] = $id_status_pedido;
  $pedidos_venda['id_usuario'] = $id_usuario;
  $pedidos_venda['st_ativo']=$st_ativo;

  /*
  echo "<br>Exibindo o pedido a inserir:::";
  echo "<pre>";
  print_r($pedidos_venda);
  echo "</pre>";
  exit;*/
  

  $ok = false;
  $sql = 'insert into erpc_pedidos_venda '; 
  
  $campos = array( 'fl_pedido_orcamento', 'id_tipo_pedido_nf', 'fl_recalcula_vencto', 'id_tabela_precos', 'id_cliente', 'id_transportadora', 'id_condicao_pagamento', 'id_plano_contas', 'id_vendedor1', 'nr_perc_comissao1', 'nr_perc_emissao1', 'nr_perc_baixa1', 'id_vendedor2', 'nr_perc_comissao2', 'nr_perc_emissao2', 'nr_perc_baixa2', 'id_vendedor3', 'nr_perc_comissao3', 'nr_perc_emissao3', 'nr_perc_baixa3', 'ds_mensagem_nf', 'id_mensagem_padrao1', 'id_mensagem_padrao2', 'id_mensagem_padrao3', 'id_mensagem_padrao4', 'id_mensagem_padrao5', 'ds_codigo_antt', 'ds_placa_veiculo', 'ds_uf_placa_veiculo','vl_total_produtos', 'vl_frete', 'vl_desconto', 'vl_despesas', 'vl_impostos', 'vl_total_pedido', 'vl_total_frete_despesas', 'id_status_pedido', 'id_forma_pagamento', 'id_usuario', 'id_unidade', 'st_ativo', 'qt_volumes', 'ds_especie', 'ds_marca', 'nr_volumes', 'nr_peso_liquido', 'nr_peso_bruto', 'nr_lacres', 'ds_modelo_frete', 'vl_servico', 
    'vl_pagamento', 'id_adquirente');
  /*
  $campos = array( 'fl_pedido_orcamento', 'id_tipo_pedido_nf', 'fl_recalcula_vencto', 'id_tabela_precos', 'id_cliente', 'id_transportadora', 'id_condicao_pagamento', 'id_plano_contas', 'id_vendedor1', 'nr_perc_comissao1', 'nr_perc_emissao1', 'nr_perc_baixa1', 'id_vendedor2', 'nr_perc_comissao2', 'nr_perc_emissao2', 'nr_perc_baixa2', 'id_vendedor3', 'nr_perc_comissao3', 'nr_perc_emissao3', 'nr_perc_baixa3', 'ds_mensagem_nf', 'id_mensagem_padrao1', 'id_mensagem_padrao2', 'id_mensagem_padrao3', 'id_mensagem_padrao4', 'id_mensagem_padrao5', 'ds_codigo_antt', 'ds_placa_veiculo', 'ds_uf_placa_veiculo', 'vl_total_produtos', 'vl_frete', 'vl_desconto', 'vl_despesas', 'vl_impostos', 'vl_total_pedido', 'vl_total_frete_despesas', 'id_status_pedido', 'id_forma_pagamento', 'id_usuario', 'id_unidade', 'st_ativo', 'qt_volumes', 'ds_especie', 'ds_marca', 'nr_volumes', 'nr_peso_liquido', 'nr_peso_bruto', 'nr_lacres', 'ds_modelo_frete', 'vl_servico', 
    'vl_pagamento', 'dh_criacao');
  */
  $values = array();
  foreach($campos as $campo) {
    $values[] = $pedidos_venda[$campo];
  }


  $sql.= '(' . implode(',', $campos) . ') values (' . trim(str_repeat('?,', count($values)), ',') . ')';
  $ok = _prepareAndExecute($sql, $values, $error);

  if ($ok !== false) {
    $id_new_ped = mysqli_insert_id($conexao);
    $pedidos_venda['id'] = $id_new_ped;
    $ok = pedidos_venda_item_insert($pedidos_venda, $error);
    $ok = pedidos_venda_formas_insert($pedidos_venda, $error);

    $sql_update_hora = "update erpc_pedidos_venda set dh_criacao = NOW() where id =  '$pedidos_venda[id]' ";
    mysqli_query($conexao, $sql_update_hora);

    addMessage('Pedido inserido com sucesso Número: ' . $pedidos_venda['id']);
    //addMessage('update: ' . $sql_update_hora);
  }
  return $ok;
}




// insere novo item
function pedidos_venda_item_insert($pedidos_venda, &$error=null) {
  global $conexao;
  global $id_usuario;

  $ok = false;
  $itens = $pedidos_venda['itens'];
  $pedidos_venda['id_usuario'] = $id_usuario;

  if (count($itens) > 0) {
    $sql = 'insert into erpc_pedidos_itens ';
    $campos = array( 'id_pedido', 'id_produto', 'id_tipo_movimentacao', 'id_unidade_medida', 'nr_quantidade', 'vl_unitario', 'vl_desconto_produto', 'nr_perc_ipi', 'nr_perc_icms', 'vl_ipi', 'vl_icms');

    $sql .= '(' . implode(',', $campos) . ') values ';
    $sql .= '(' . trim(str_repeat('?,', count($campos)), ',') . ')';
    $values = array();
    foreach($itens as $item) {
      if (!empty($item['id_produto'])) {
        $item['id_pedido'] = $pedidos_venda['id'];
        foreach($campos as $campo) {
          if($campo=='st_ativo'){
            $values[] = 1;
          }else{
            $values[] = $item[$campo];
          }
        }
      }
    }

    // remove última ','
    if (empty($values)) {
      // nada para inserir
      $ok = true;
    } else {
      $ok = _prepareAndExecute($sql, $values, $error, true);
      // $error .= "<br>" . $sql;
      if(!$ok){
        addError($error);
      }
    }
  } else {
      // nada para inserir
      $ok = true;
  }
  return $ok;
}


// insere as multiplas formas de pagamento
    function pedidos_venda_formas_insert($pedidos_venda, &$error=null) {
      global $conexao;
      global $id_usuario;

      $ok = false;
      $formas = $pedidos_venda['formas'];

      if (count($formas) > 0) {
        $sql = 'insert into erpc_pedido_forma_pagamento ';
        $campos = array( 'id_pedido', 'id_forma_pagamento', 'vl_pagamento', 'id_bandeira');
        $sql .= '(' . implode(',', $campos) . ') values ';
        $sql .= '(' . trim(str_repeat('?,', count($campos)), ',') . ')';
        $values = array();
        
        foreach($formas as $key => $item) {
            $nr_pedido          = $pedidos_venda['id'];
            $id_forma_pagamento = $key;
            $vl_pagamento       = $item['vl_pagamento'];
            $id_adquirente      = null;
            
            if(isset($item['id_adquirente'])){
              $id_adquirente = $item['id_adquirente'];
            }

            array_push($values, $nr_pedido);
            array_push($values, $id_forma_pagamento); 
            array_push($values, $vl_pagamento);
            array_push($values, $id_adquirente);

            /*
            foreach($campos as $campo) {
              if($campo=='st_ativo'){
                $values[] = 1;
              }else{
                $values[] = $item[$campo];
              }
            }
            */
        }

        // remove última ','
        if (empty($values)) {
          // nada para inserir
          $ok = true;
        } else {
          
          $ok = _prepareAndExecute($sql, $values, $error, true);
          // $error .= "<br>" . $sql;
          if(!$ok){
            addError($error);
          }
        }
      } else {
          // nada para inserir
          $ok = true;
      }
      return $ok;
    }


// atualiza o objeto passado no bd
function pedidos_venda_update($pedidos_venda) {
  global $conexao;
  $ok = false;

  //print_r($pedidos_venda);
  //exit;

  $sql = 'update erpc_pedidos_venda set ';
  $campos = array( 'fl_pedido_orcamento', 'id_tipo_pedido_nf', 'fl_recalcula_vencto', 'id_tabela_precos', 'id_cliente', 'id_transportadora', 'id_condicao_pagamento', 'id_forma_pagamento', 'ds_especie', 'ds_modelo_frete', 'id_plano_contas', 'id_vendedor1', 'nr_perc_comissao1', 'nr_perc_emissao1', 'nr_perc_baixa1', 'id_vendedor2', 'nr_perc_comissao2', 'nr_perc_emissao2', 'nr_perc_baixa2', 'id_vendedor3', 'nr_perc_comissao3', 'nr_perc_emissao3', 'nr_perc_baixa3', 'ds_mensagem_nf', 'id_mensagem_padrao1', 'id_mensagem_padrao2', 'id_mensagem_padrao3', 'id_mensagem_padrao4', 'id_mensagem_padrao5', 'ds_codigo_antt', 'ds_placa_veiculo', 'ds_uf_placa_veiculo', 'vl_servico', 'ds_marca', 'nr_volumes', 'nr_peso_liquido', 'nr_peso_bruto', 'nr_lacres', 'vl_total_produtos', 'vl_frete', 'vl_desconto', 'vl_despesas', 'vl_impostos', 'vl_total_pedido', 'vl_total_frete_despesas', 'id_status_pedido', 'id_usuario', 'st_ativo');

  $values = array();
  foreach($campos as $campo) {
    $sql .= $campo . '=?,';
    $values[] = $pedidos_venda[$campo];
  }
  $sql = trim($sql, ',');
  $sql .= ' where id = ?';
  $values[] = $pedidos_venda['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    $ok = pedidos_venda_item_update($pedidos_venda);
    if ($ok !== false) {
      addMessage('Atualizado com sucesso');
    }
  }
  return $ok;
}

// atualiza os itens do objeto passado no bd, apaga tudo e insere de novo
function pedidos_venda_item_update($pedidos_venda) {
  global $conexao;
  $ok = false;
  $sql = 'delete from erpc_pedidos_itens where id_pedido=?';
  $values = array($pedidos_venda['id']);
  $ok = _prepareAndExecute($sql, $values);
  $sql_fk0 = 'SET foreign_key_checks = 0';
  $sql_fk1 = 'SET foreign_key_checks = 1';
  if ($ok !== false) {
    mysqli_query($conexao, $sql_fk0);
    $ok = pedidos_venda_item_insert($pedidos_venda);
    mysqli_query($conexao, $sql_fk1);
  }
  return $ok;
}

function pedidos_venda_delete($pedidos_venda) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_pedidos_venda set st_ativo = 0';
  $values = array();
  $sql .= ' where id = ?';
  $values[] = $pedidos_venda['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok) {
    $ok = pedidos_venda_item_delete($pedidos_venda);
  }
  if ($ok !== false) {
    addMessage('Removido com sucesso');
  }
  return $ok;
}

function pedidos_venda_item_delete($pedidos_venda) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_pedidos_itens set st_ativo = 0 where id_pedido=?';
  $values = array($pedidos_venda['id']);
  $ok = _prepareAndExecute($sql, $values);
  return $ok;
}

function pedidos_venda_create() {
  global $id_unidade;
  $pedidos_venda = array(
    'id' => '',
    'fl_pedido_orcamento' => '',
    'id_tipo_pedido_nf' => '',
    'fl_recalcula_vencto' => '',
    'id_tabela_precos' => '',
    'id_cliente' => '',
    'id_transportadora'=> '',
    'id_condicao_pagamento' => '',
    'id_plano_contas' => '',
    'id_forma_pagamento' => '',
    'id_unidade' => $id_unidade,

    /* ABA COMISSAO */
    'id_vendedor1' => '',
    'ds_nome_vendedor1' => '',
    'nr_perc_comissao1' => '',
    'nr_perc_emissao1' => '',
    'nr_perc_baixa1' => '',
    'id_vendedor2' => '',
    'ds_nome_vendedor2'=> '',
    'nr_perc_comissao2' => '',
    'nr_perc_emissao2' => '',
    'nr_perc_baixa2' => '',
    'id_vendedor3' => '',
    'ds_nome_vendedor3'=> '',
    'nr_perc_comissao3' => '',
    'nr_perc_emissao3' => '',
    'nr_perc_baixa3' => '',

    /* ABA MENSAGEM */
    'ds_mensagem_nf' => '',
    'id_mensagem_padrao1' => '',
    'id_mensagem_padrao2' => '',
    'id_mensagem_padrao3' => '',
    'id_mensagem_padrao4' => '',
    'id_mensagem_padrao5' => '',

    /* ABA VEICULO */
    'ds_codigo_antt' => '',
    'ds_placa_veiculo' => '',
    'ds_uf_placa_veiculo' => '',
    'qt_volumes'  => '0',
    'ds_especie'  => '',
    'ds_marca'    => '',
    'nr_volumes'  => '0',
    'nr_peso_liquido' => '0',
    'nr_peso_bruto'   => '0',
    'nr_lacres'  => '',


    /* ABA TOTAIS E DESPESAS */
    'vl_total_produtos' => '',
    'vl_desconto' => '',
    'vl_frete' => '',
    'vl_despesas' => '',
    'vl_impostos' => '',
    'vl_total_pedido' => '',
    'vl_total_frete_despesas' => '',

    /* CAMPOS SOMENTE PARA EXIBIÇÃO */
    'vl_total_frete' => '0,00',
    'vl_total_despesas' => '0,00',
    'vl_total_descontos' => '0,00',
    'vl_total_impostos' => '0,00',

    /* STATUS E ITENS */
    'ds_status_proc' => '',
    'id_status_pedido' => 1,
    'id_usuario' => 1,
    'st_ativo' => 1 ,
    'itens' => array(),
    'formas'=> array()
  );
  return $pedidos_venda;
}

function pedidos_venda_item_create() {
  $pedidos_venda = array(
    'id' => '',
    'id_pedido' => '',
    'id_produto' => '',
    'ds_produto' => '',
    'id_unidade_medida' => '',
    'nr_quantidade' => '',
    'vl_unitario' => '',
    'nr_perc_ipi' => '',
    'nr_perc_icms' => '',
    'vl_ipi' => '',
    'vl_icms' => '',
    'id_tipo_movimentacao' => '',
    'vl_desconto_produto' => '',
    'nr_saldo_estoque' => '',
    'st_ativo' => '',
  );

  return $pedidos_venda;
}
