<?php

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

// retorna array com lista, ou false se deu erro
function lancamento_inventario_getAll() {
  global $conexao;
  $sql = 'select * from erpc_lancamento_inventario 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 lancamento_inventario_getById($id) {
  global $conexao;
  $sql = 'select le.*, dtl.ds_tipo_local from erpc_lancamento_inventario le join erpc_dom_tipo_local dtl on (dtl.id=le.id_tipo_local) where le.id=? and le.st_ativo=1';
  $values[] = $id;
  $result = _prepareAndQuery($sql, $values);
  if ($result !== false) {
    if (count($result) === 1) {
      $result = $result[0];
      $itens = local_enderecos_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 local_enderecos_getById($id_pai) {
  global $conexao;
  $sql = 'select * from erpc_local_enderecos where id_lancamento_inventario=?';
  $values[] = $id_pai;
  $result = _prepareAndQuery($sql, $values);
  return $result;
}

// insere novo
function lancamento_inventario_insert($lancamento_inventario, &$error=null) {
  global $conexao;


  $dt = new DateTime();
  $lancamento_inventario['dh_alteracao'] = $dt->format('Y-m-d H:i:s');
  $lancamento_inventario['dt_entrada'] = $dt->format('Y-m-d');

  $itens = $lancamento_inventario['itens'];

  // print_r($lancamento_inventario);
  // exit;

  foreach($itens as $item) {
    $ok = lancamento_inventario_item($item, $lancamento_inventario, $error);
    // if ($ok && $error === null) {
    //   addMessage('Inserido com sucesso');
    // }
  }
  // exit;
  return $ok;
}

// insere novo item
function lancamento_inventario_item($item, $lancamento_inventario, &$error=null) {

  global $conexao;

  // print_r($item);
  // return;

  $ok = false;
  $sql = 'insert into erpc_saldos_enderecar ';
  $campos = array('ds_documento', 'id_produto', 'vl_saldo_enderecar', 'dh_alteracao', 'dt_entrada', 'id_usuario', 'id_local_estoque', 'st_ativo');
  $sql .= '(' . implode(',', $campos) . ') values ';
  $sql .= '(' . trim(str_repeat('?,', count($campos)), ',') . ')';
  $values = array();
  $values[] = $lancamento_inventario['ds_documento'];
  $values[] = $item['id_produto'];
  $values[] = $item['vl_saldo_enderecar'];
  $values[] = $lancamento_inventario['dh_alteracao'];
  $values[] = $lancamento_inventario['dt_entrada'];
  $values[] = $lancamento_inventario['id_usuario'];
  $values[] = $lancamento_inventario['id_local_estoque'];
  $values[]= $lancamento_inventario['st_ativo'];
  
  // print_r($lancamento_inventario);
  // print_r($values);
  // return;
  // remove última ','
  if (empty($values)) {
    $ok = true;
  } else {
    $ok = _prepareAndExecute($sql, $values, $error, true);
  }
 
  return $ok;
}

// atualiza o objeto passado no bd
function lancamento_inventario_update($lancamento_inventario) {
  global $conexao;

  $dt = new DateTime();
  $lancamento_inventario['dh_alteracao'] = $dt->format('Y-m-d H:i:s');

  $ok = false;
  $sql = 'update erpc_lancamento_inventario set ';
  $campos = array('id_tipo_local', 'ds_local', 'dh_alteracao', 'id_usuario', 'st_ativo');
  $values = array();
  foreach($campos as $campo) {
    $sql .= $campo . '=?,';
    $values[] = $lancamento_inventario[$campo];
  }

  $sql = trim($sql, ',');
  $sql .= ' where id = ?';
  $values[] = $lancamento_inventario['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    $ok = local_enderecos_update($lancamento_inventario);
    if ($ok !== false) {
      addMessage('Atualizado com sucesso');
    }
  }
  return $ok;
}

function lancamento_inventario_alterar_status($lancamento_inventario) {

  $itens = $lancamento_inventario['itens'];
  if (count($itens) > 0) {
      foreach($itens as $item) {
        $sql = 'select * from erpc_produtos_saldos where id_produto = ? and id_local = ?';
        $values = array();
        $values[] = $item['id'];
        $values[] = $lancamento_inventario['id'];
        $result = _prepareAndQuery($sql, $values);
        if (count($result) === 1) {
          $ok = produtos_saldo_update($item, $lancamento_inventario['id']);
        }else{
          if($item['st_bloq'] == 1){
            $ok = produtos_saldo_insert($item,  $lancamento_inventario['id']);
          }
        }     
      }
  } 
  addMessage('Bloqueados com sucesso');
  return $ok;
}

function produtos_saldo_insert($item, $id_local){
  $sql = 'insert into erpc_produtos_saldos ';
    $campos = array('id_produto', 'id_local', 'st_bloq');
    $sql .= '(' . implode(',', $campos) . ') values ';
    $sql .= '(' . trim(str_repeat('?,', count($campos)), ',') . ')';
    $values = array();
    $values[] = $item['id'];
    $values[] = $id_local;
    $values[] = $item['st_bloq'];
    $ok = _prepareAndExecute($sql, $values, $error, true);
    return $ok;
}

function produtos_saldo_update($item, $id_local){
  $bloq = isset($item['st_bloq']) ? '1' : '0';
  $sql = 'update erpc_code.erpc_produtos_saldos set st_bloq = ' . $bloq . ' WHERE id_produto = ? and id_local = ?';
  $values[] = $item['id'];
  $values[] = $id_local;
  echo 'update';
  $ok = _prepareAndExecute($sql, $values);
}

// atualiza os itens do objeto passado no bd, apaga tudo e insere de novo
function local_enderecos_update($lancamento_inventario) {
  global $conexao;
  $ok = false;
  $sql = 'delete from erpc_local_enderecos where id_lancamento_inventario=?';
  $values = array($lancamento_inventario['id']);
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    $ok = local_enderecos_insert($lancamento_inventario);
  }
  return $ok;
}

function lancamento_inventario_delete($lancamento_inventario) {
  global $conexao;
  $ok = false;
  
  $sql = 'update erpc_lancamento_inventario set st_ativo = 0, id_usuario = ?, dh_alteracao = ?';
  
  $dt = new DateTime();
  $user = getLoggedUser();
  $values = array($user['id'],$dt->format('Y-m-d H:i:s'), $lancamento_inventario['id']);
  $sql .= ' where id = ?';
  
  $values[] = $lancamento_inventario['id'];
  $ok = _prepareAndExecute($sql, $values);

  if ($ok !== false) {
    $ok = local_enderecos_delete($lancamento_inventario);
  }
  if ($ok !== false) {
    addMessage('Removido com sucesso');
  }
  return $ok;
}

function local_enderecos_delete($lancamento_inventario) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_local_enderecos set st_ativo = 0 where id_lancamento_inventario = ?';
  
  $values = array($lancamento_inventario['id']);
  $ok = _prepareAndExecute($sql, $values);
  return $ok;
}

function lancamento_inventario_create() {
  $user = getLoggedUser();
  $dt = new DateTime();

  $lancamento_inventario = array(
    'id' => '',
    'ds_documento' => '',
    'dh_alteracao' => $dt->format('Y-m-d H:i:s'),
    'id_local_estoque' => '',
    'dt_entrada' => $dt->format('Y-m-d'),
    'id_usuario' => $user['id'],
    'st_ativo' => '1',
    'itens' => array(),
  );
  return $lancamento_inventario;
}