require_once("sqlserver.class.php");
class ODBC_SQLServer extends SQLServer
{
var $tabelas, $nometabelas, $relacionamentos;
function ODBC_SQLServer($conn, $tablenames, $relations = null)
{ //construtor
$this->conn = $conn;
$this->nometabelas = array();
$this->nometabelas = $tablenames;
$this->relacionamentos = $relations;
//die($this->odbc_conn);
$this->tabelas = array();
foreach ($this->nometabelas as $nome){
$this->tabelas[$nome] = array();
}
}
//formata a data do pt_br para ingles
function formataDataEn($dt=''){
if($dt == '') return '';
list($dia,$mes,$ano)=split("/", $dt,3);
$retorno = "".$ano."-".$mes."-".$dia;
return $retorno;
}
// formata a data do odbc pro formato brasileiro
function formataDataPt($dt=''){
if($dt == '') return '';
list($ano,$mes,$dia)=split("-", $dt,3);
$retorno = "".$dia."/".$mes."/".$ano;
return $retorno;
}
function set($tabela, $campo, $val){
if($this->checkcampo($tabela, $campo)){
$this->tabelas[$tabela][$campo] = $val;
return true;
}
else return false;
}
function checkcampo($tabela, $campo){
$this->query="SP_COLUMNS ".$tabela;
$id = $this->execute($this->conn, $this->query);
while ($linha = odbc_fetch_array($id)){
if($campo == $linha['COLUMN_NAME']){
odbc_free_result($id);
return true;
}
}
odbc_free_result($id);
return false;
}
function get($tabela, $campo){
if(isset($this->tabelas[$tabela][$campo]))
return $this->tabelas[$tabela][$campo];
else
return null;
}
function insert($tipo_func){
die("
Inserção Desabilitada");
}
function update(){
die(" Update Desabilitado!");
}
function delete($tabelas, $sql){
if($this->TestDelete()){
$this->query = "DELETE * FROM $tabelas WHERE $sql";
return $this->execute($this->conn, $this->query);
}
//die(" Deleção desabilitada!");
}
function TestDelete(){
return true;
}
function TestInsert(){
return true;
}
function TestUpdate(){
return true;
}
function reset(){
unset($this->tabelas);
// EXECUTAR ESSE CÓDIGO PARA CADA TABELA
/*if(sizeof($this->tabela)){
foreach($this->tabela as $campo => $valor){
unset($this->tabela[$campo]);
}
}*/
}
function listar($campos = "*", $usatabelas = null, $orderby = null){
$this->query = "";
$first = true;
$usada = array();
foreach($this->nometabelas as $index => $nome){
$usada[$nome] = false;
}
$usada[$this->nometabelas[0]] = true;
if($usatabelas != null)
foreach ($usatabelas as $indtab => $nometab)
$usada[$nometab] = true;
//while(list($key,$val) = each($table))
// echo "\n$key=>$val";
//die("querie".$this->query);
$tables = array();
foreach ($usada as $nometab => $val){
if($usada[$nometab]) $tables[sizeof($tables)] = $nometab;
}
if(sizeof($this->tabelas)){
foreach ($this->tabelas as $nome => $tabela) {
foreach ($tabela as $campo => $valor){
if(!is_null($this->tabelas[$nome][$campo])){
if(!empty($this->tabelas[$nome][$campo])){
if($nome != $this->nometabelas[0]){
if(!$usada[$nome]){
$usada[$nome] = true;
$tables[sizeof($tables)] = $nome;
}
}
if($first){
$first = false;
$this->query .= " WHERE $nome.$campo = '".$valor."'";
}
else
$this->query .= " AND $nome.$campo = '".$valor."'";
}
}
}
}
}
for ($i=0; $inometabelas);$i++){
for ($j=$i+1; $jnometabelas);$j++){
if($usada[$this->nometabelas[$i]] && $usada[$this->nometabelas[$j]] && $this->relacionamentos[$this->nometabelas[$i]][$this->nometabelas[$j]] != null){
$this->query .= " AND ".$this->nometabelas[$i].".".$this->relacionamentos[$this->nometabelas[$j]][$this->nometabelas[$i]]." = ".$this->nometabelas[$j].".".$this->relacionamentos[$this->nometabelas[$i]][$this->nometabelas[$j]];
}
}
}
if(!is_null($orderby))
$this->query .= " ORDER BY ".$orderby;
//echo sizeof($tables).";;";
return $this->vt_recordset($campos, $tables, $this->query);
}
/**
* retorna o contracheque do mês num vetor com a estrutura
* $vt_retorno['cadastro'][..dados..] --dados fixos
* $vt_retorno['ficha'][..contas..][..dados..] -dados que variam mensalmente (a maior parte são contas)
*
* @param string $cpf
* @param date $competencia
* @return array[][][] (3D)
*/
function gera_declaracao_rendimentos($cpf = null, $ano = null){
if(is_null($cpf) || is_null($ano))
return null;
$campos = array('PESSOAL."AREA" AS "PESSOAL.AREA"',
'PESSOAL."CCUSTO" AS "PESSOAL.CCUSTO"',
'PESSOAL."CHAPA" AS "PESSOAL.CHAPA"',
'PESSOAL."CPF" AS "PESSOAL.CPF"',
'PESSOAL."DEMISSAO" AS "PESSOAL.DEMISSAO"',
'PESSOAL."EMPRESA" AS "PESSOAL.EMPRESA"',
'PESSOAL."ID" AS "PESSOAL.ID"',
'PESSOAL."LOCAL" AS "PESSOAL.LOCAL"',
'PESSOAL."NOME" AS "PESSOAL.NOME"',
'PESSOAL."RES_BAIRRO" AS "PESSOAL.RES_BAIRRO"',
'PESSOAL."RES_CEP" AS "PESSOAL.RES_CEP"',
'PESSOAL."RES_ENDEREC" AS "PESSOAL.RES_ENDEREC"',
'EMPRESAS."DESCRICAO" AS "EMPRESAS.DESCRICAO"',
'EMPRESAS."CGC" AS "EMPRESAS.CGC"',
'EMPRESAS."ENDERECO" AS "EMPRESAS.ENDERECO"',
'EMPRESAS."END_NUMERO" AS "EMPRESAS.END_NUMERO"',
'EMPRESAS."END_COMPL" AS "EMRPESAS.END_COMPL"',
'EMPRESAS."END_BAIRRO" AS "EMPRESAS.END_BAIRRO"',
'EMPRESAS."END_CIDADE" AS "EMPRESAS.END_CIDADE"',
'EMPRESAS."END_UF" AS "EMPRESAS.END_UF"',
'EMPRESAS."NOMEPESSOA" AS "EMPRESAS.NOMEPESSOA"',
'FICHA."CONTA" AS "FICHA.CONTA"',
'FICHA."VALOR" AS "FICHA.VALOR"',
'FICHA."COMPETENCIA" AS "FICHA.COMPETENCIA"',
'CCUSTO."DESCRICAO" AS "CCUSTO.DESCRICAO"',
'CIDADES."DESCRICAO" AS "CIDADES.DESCRICAO"',
'CIDADES."ESTADO" AS "CIDADES.ESTADO"');
$tabelas = array( 'pessoal',
'ficha',
'ccusto',
'cidades',
'empresas');
$this->query = "where PESSOAL.ID = FICHA.ID
and PESSOAL.CCUSTO = CCUSTO.CODIGO
and PESSOAL.RES_CIDADE = CIDADES.CODIGO
and PESSOAL.EMPRESA = EMPRESAS.CODIGO
and ficha.conta like 'DIRF%'
and YEAR(ficha.competencia) = '$ano'
and pessoal.cpf = '$cpf'";
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}
//MODIFICADO - COLOCANDO DECLARAÇÃO DE RENDIMENTOS DE TODOS OS ANOS - ABRE
function gera_tempo_trabalho($cpf = null){
if(is_null($cpf))
return null;
$campos = array('FICHA."COMPETENCIA" AS "FICHA.COMPETENCIA"');
$tabelas = array( 'pessoal',
'ficha',
'ccusto',
'cidades',
'empresas');
$this->query = "where PESSOAL.ID = FICHA.ID
and PESSOAL.CCUSTO = CCUSTO.CODIGO
and PESSOAL.RES_CIDADE = CIDADES.CODIGO
and PESSOAL.EMPRESA = EMPRESAS.CODIGO
and ficha.conta like 'DIRF%'
and pessoal.cpf = '$cpf'
order by FICHA.COMPETENCIA";
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}
//MODIFICADO - COLOCANDO DECLARAÇÃO DE RENDIMENTOS DE TODOS OS ANOS - FECHA
//MODIFICADO - GERANDO O ABONO PECUNIÁRIO DE FÉRIAS - ABRE
function gera_abono_pecuniario_ferias($id = null, $ano = null){
if(is_null($id) || is_null($ano))
return null;
$campos = array("VALOR");
$tabelas = array("FICHA");
$datahoje = getdate();
if($ano == $datahoje['year']-1){
$this->query = "WHERE ID = $id AND CONTA = 'DIRF_ABONOFER'";
} else {
$this->query = "WHERE ID = $id AND CONTA LIKE '%ABONOCA%' AND COMPETENCIA LIKE '%".$ano."%'";
}
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}
function gera_abono_pecuniario_ferias3($id = null, $ano = null){
if(is_null($id) || is_null($ano))
return null;
$campos = array("VALOR");
$tabelas = array("FICHA");
$datahoje = getdate();
if($ano != $datahoje['year']-1){
$this->query = "WHERE ID = $id AND CONTA LIKE '%ABONO3CA%' AND COMPETENCIA LIKE '%".$ano."%'";
}
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}
//MODIFICADO - GERANDO O ABONO PECUNIÁRIO DE FÉRIAS - FECHA
//MODIFICADO - GERANDO O ABONO PECUNIÁRIO DE FÉRIAS - ABRE
/*function gera_abono_pecuniario_ferias($id = null){
if(is_null($id))
return null;
$campos = array("VALOR");
$tabelas = array("FICHA");
$this->query = "WHERE ID = $id AND CONTA = 'DIRF_ABONOFER'";
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}*/
//MODIFICADO - GERANDO O ABONO PECUNIÁRIO DE FÉRIAS - FECHA
function gera_pensionistas($id = null){
if(is_null($id))
return null;
$campos = array("NOME", "CPF");
$tabelas = array("PENSIONISTAS");
$this->query = "WHERE ID = $id";
$vt_result = $this->vt_recordset($campos, $tabelas, $this->query);
return $vt_result;
}
function gera_contracheque($cpf = null, $ano = null, $mes = null){
if(is_null($cpf) || is_null($ano) || is_null($mes))
return null;
$is_13sal = false;
if ($mes == "13a")
$mes = "6";
if ($mes == "13b")
$mes = "12";
$competencia = $ano."-".str_pad($mes, 2, '0', STR_PAD_LEFT)."-01";
$vt_retorno = array();
$vt_retorno['cadastro'] = array();
$vt_retorno['ficha'] = array();
//recuperando os dados do funcionário
$campos = array("PESSOAL.ID"
, "HORARIO.HORASMES"
, "CARGOS.DESCRICAO AS 'CARGO'"
, "FUNCAOGRAT.DESCRICAO AS 'FUNCAO'"
, "PESSOAL.CHAPA AS 'MATRICULA'"
, "ESTR_EMPR.DESCRICAO AS 'AREA'"
, "PESSOAL.NOME"
, "PESSOAL.PAG_BANCO"
, "PESSOAL.PAG_AGENCIA"
, "PESSOAL.PAG_CONTA"
, "PESSOAL.RG"
, "PESSOAL.RG_ORGAO"
, "PESSOAL.ADMISSAO"
, "PESSOAL.PIS"
, "PESSOAL.CTPS"
, "PESSOAL.CTPS_DATA"
, "PESSOAL.CTPS_SERIE"
, "PESSOAL.EMPRESA AS 'CODIGO_EMPRESA'"
, "EMPRESAS.DESCRICAO AS 'EMPRESA'");
$tables = array("HORARIO"
, "CARGOS"
, "FUNCAOGRAT"
, "ESTR_EMPR"
, "EMPRESAS"
, "PESSOAL");
$this->query = " WHERE
PESSOAL.FUNCAO = FUNCAOGRAT.CODIGO
AND HORARIO.CODIGO = PESSOAL.HORARIO
AND PESSOAL.CARGO = CARGOS.CODIGO
AND ESTR_EMPR.CODIGO = PESSOAL.AREA
AND EMPRESAS.CODIGO = PESSOAL.EMPRESA
AND EMPRESAS.DESCRICAO NOT LIKE '%INSS%'
AND PESSOAL.DEMISSAO IS NULL
AND PESSOAL.CPF = '$cpf'";
$vt_cadastro = $this->vt_recordset($campos, $tables, $this->query);
//print_r($vt_cadastro);
//die();
for($i=0; $i $val){
$vt_retorno['cadastro'][$i][$field] = $val;
}
}
unset($tables, $campos);
//recuperando as contas da ficha para o mês de competência
$campos = array("PESSOAL.ID", "FICHA.*", "CONTAS.*", "TIPO_CONTAS.DESCRICAO AS 'TIPO_CONTAS_DESCRICAO'", "PESSOAL.EMPRESA AS 'CODIGO_EMPRESA'");
$tables = array("FICHA", "CONTAS", "PESSOAL", "TIPO_CONTAS", "EMPRESAS");
$this->query = " WHERE ";
$this->query .=" CONTAS.DESCRICAO NOT LIKE '% CA'
AND FICHA.VALOR <> 0
AND CONTAS.DESCRICAO NOT LIKE '% (CA)'
AND TIPO_CONTAS.CODIGO = CONTAS.TIPO
AND CONTAS.INATIVA = 0
AND FICHA.CONTA = CONTAS.CONTA
AND FICHA.ID = PESSOAL.ID
AND PESSOAL.EMPRESA = EMPRESAS.CODIGO
AND EMPRESAS.DESCRICAO NOT LIKE '%INSS%'
AND PESSOAL.DEMISSAO IS NULL
AND PESSOAL.CPF = '$cpf'
AND DATEDIFF(DD, FICHA.COMPETENCIA, '$competencia') = 0
ORDER BY
PESSOAL.EMPRESA, TIPO_CONTAS_DESCRICAO";//MODIFICADO --> AND FICHA.CONTA = 'DIRF_ABONOFER'
$vt_ficha = array();
$vt_ficha = $this->vt_recordset($campos, $tables, $this->query);
//--tratar o vt_ficha antes de jogar no $vt_retorno
$cod_empresa = $vt_ficha[0]['CODIGO_EMPRESA'];
$vt_retorno['ficha'][0] = array();
$i = 0;
foreach ($vt_ficha as $row){
if($row['CODIGO_EMPRESA'] != $cod_empresa){
$i++;
$vt_retorno['ficha'][$i] = array();
$cod_empresa = $row['CODIGO_EMPRESA'];
}
$vt_retorno['ficha'][$i][$row['CONTA']] = array();
$vt_retorno['ficha'][$i][$row['CONTA']] = $row;
}
//print_r($vt_ficha);
unset($vt_ficha, $vt_cadastro, $campos, $tables);
return $vt_retorno;
}
function consultar() {
$this->query = "";
$first = true;
$usada = array();
foreach($this->nometabelas as $index => $nome){
$usada[$nome] = false;
}
//while(list($key,$val) = each($table))
// echo "\n$key=>$val";
//die("querie".$this->query);
$tables = array();
//$tables[0] = $this->nometabelas[0];
//$usada[$this->nometabelas[0]] = true;
if(sizeof($this->tabelas)){
foreach ($this->tabelas as $nome => $tabela) {
foreach ($tabela as $campo => $valor){
if(!is_null($this->tabelas[$nome][$campo])){
if(!empty($this->tabelas[$nome][$campo])){
if(!$usada[$nome]){
$usada[$nome] = true;
$tables[sizeof($tables)] = $nome;
}
if($first){
$first = false;
$this->query .= " WHERE $nome.$campo = '".$valor."'";
}
else
$this->query .= " AND $nome.$campo = '".$valor."'";
}
}
}
}
}
for ($i=0; $inometabelas);$i++){
for ($j=$i+1; $jnometabelas);$j++){
if($usada[$this->nometabelas[$i]] && $usada[$this->nometabelas[$j]]){
$this->query .= " AND ".$this->nometabelas[$i].".".$this->relacionamentos[$this->nometabelas[$j]][$this->nometabelas[$i]]." = ".$this->nometabelas[$j].".".$this->relacionamentos[$this->nometabelas[$i]][$this->nometabelas[$j]];
}
}
}
$qry = $this->query;
$qry2 = "";
foreach($this->nometabelas as $index => $nome){
if($usada[$nome]){
$this->query = "SP_COLUMNS $nome";
$rs = $this->execute();
while($row=odbc_fetch_array($rs)){
if($qry2 == "")
$qry2 = "$nome.".$row['COLUMN_NAME']." AS '$nome::".$row['COLUMN_NAME']."'";
else
$qry2 .= ", $nome.".$row['COLUMN_NAME']." AS '$nome::".$row['COLUMN_NAME']."'";
}
}
}
$this->query = "SELECT $qry2 FROM ";
for($i=0; $i< sizeof($tables); $i++){
$this->query .= $tables[$i];
if($i < sizeof($tables)-1) $this->query .= ",";
}
$this->query .= $qry;
//die($this->query);
$rs = $this->execute($showerror=true, $debug=true);
if($row_rs = odbc_fetch_array($rs))
$total_linhas = 1;
else
$total_linhas = 0;
$indexnomes = array_flip($this->nometabelas);
if ($total_linhas>0){
foreach ($row_rs as $campo => $valor){
$nomes = split("::", $campo);
$this->tabelas[$this->nometabelas[$indexnomes[$nomes[0]]]][$nomes[1]] = $valor;
}
$bl_aux = true;
}else $bl_aux = false;
odbc_free_result($rs);
return $bl_aux;
//die("função de consulta desabilitada.");
}
function show($tabela, $campo){
if(isset($this->tabelas[$tabela][$campo]))
return true;
else
return false;
}
}
?>