";
if ($this->fullErr == 1) {
print "Query: $qry
";
}
$this->endError($err, $from);
}
// Executes a query ($qry). $from is the page you are calling from - optional
function db_qry($qry, $from="") {
global $global_bd_charset;
if($global_bd_charset) mysql_query("SET NAMES '$global_bd_charset'");
$this->dbQryResult = mysql_query($qry) or $this->goError($qry, mysql_error(), $from);
// If required, write query to a log file
if ($this->keepLog == 1) {
$fp = fopen($this->logPath."mysql_db_class.log", "a+");
fputs($fp, date("r", time())." - ".$from."\n");
fputs($fp, $qry."\n");
fclose($fp);
}
$qtyLines = mysql_affected_rows();
return $qtyLines;
}
// Retorna ultimo id inserido
function get_last_id() {
$this->dbQryResult = mysql_query("SELECT LAST_INSERT_ID()");
list($last_id) = mysql_fetch_array($this->dbQryResult);
return $last_id;
}
// Returns the resultset, one row at a time in an array
function get_data() {
$this->dbResultLine = mysql_fetch_array($this->dbQryResult);
return $this->dbResultLine;
}
// Number of rows in resultset
function row_count() {
$qtyLines = mysql_num_rows($this->dbQryResult);
return $qtyLines;
}
// Array with field names of resultset
function get_fields() {
$fldList = Array();
for ($fldCntr = 0; $fldCntr < mysql_num_fields($this->dbQryResult); $fldCntr++) {
$fldList[$fldCntr] = mysql_field_name($this->dbQryResult, $fldCntr);
}
return $fldList;
}
// Retorna Linhas modificadas
function affected_rows() {
return mysql_affected_rows();
}
}
?>
/** Sanitize a string for use in an e-mail header. Prevents email injection attacks. @param string $str @return string the input will all occurances of carriage return ('\r') and new-line ('\n') removed. */
function strip_cr_lf($str) {
return str_replace("\r", '', str_replace("\n", '', $str));
}
function utf8_convert($lista = null, $acao = null)
{
if(is_array($lista)) foreach($lista as $key => $value) $lista[$key] = ($acao == "encode") ? utf8_encode($value) : utf8_decode($value);
else $lista = ($acao == "encode") ? utf8_encode($lista) : utf8_decode($lista);
return($lista);
}
function redireciona($url)
{
header("Location: $url");
echo "";
exit;
}
function ConvertResultToArray($lista = null, $first_value = null, $chave = null, $valor = null, $separador = null, $fechador = null)
{
$result = array();
//if (!$lista) return $result;
if($first_value) $result[null] = $first_value;
$valores = explode(",", $valor);
foreach($lista as $key => $obj)
{
unset($valores_carregados);
foreach($valores as $key1 => $obj1) $valores_carregados[] = $obj->$obj1;
$newvalores = implode($separador, $valores_carregados);
if($fechador) $newvalores .= $fechador;
if($chave) $result[$obj->$chave] = $newvalores;
else $result[] = $newvalores;
}
return $result;
}
function converteDataPeriodo($data = null, $tipo = null)
{
if($data)
{
list($dia, $mes, $ano) = split("-", $data);
if(!$tipo) return "$ano$mes";
elseif($tipo == 1) return "$ano-$mes-01";
elseif($tipo == 2) return "$ano$mes$dia";
}
else
return false;
}
function conveteDataPeriodoExt($data = null)
{
if($data)
{
list($dia, $mes, $ano) = split("-", $data);
if(substr($mes, 0, 1) == "0") $mes = substr($mes, 1, 1);
$mesAno = array();
$mesAno[1] = "Jan";
$mesAno[2] = "Fev";
$mesAno[3] = "Mar";
$mesAno[4] = "Abr";
$mesAno[5] = "Mai";
$mesAno[6] = "Jun";
$mesAno[7] = "Jul";
$mesAno[8] = "Ago";
$mesAno[9] = "Set";
$mesAno[10] = "Out";
$mesAno[11] = "Nov";
$mesAno[12] = "Dez";
return $mesAno[$mes]."-".substr($ano, 2, 2);
} else return false;
}
function converteTimestampToRead($data)
{
if ($data)
{
list($dt, $hr) = split(" ",$data);
list($ano, $mes, $dia) = split("-", $dt);
list($hora, $min, $sec) = split(":", $hr);
return "$dia-$mes-$ano $hora"."h".$min;
}
else
return false;
}
function converteTimestampTiraData($data)
{
if ($data)
{
list($dt, $hr) = split(" ",$data);
list($ano, $mes, $dia) = split("-", $dt);
list($hora, $min, $sec) = split(":", $hr);
return "$dia-$mes-$ano";
}
else
return false;
}
function converteDataToTimestamp($data = null)
{
if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null;
else
{
list($dt, $hr) = split(" ",$data);
list($dia, $mes, $ano) = split("-", $dt);
if($hr) list($hora, $min, $sec) = split(":", $hr);
else { $hora = 0; $min = 0; $sec = 0; }
return mktime($hora, $min, $sec, $mes, $dia, $ano);
}
}
function converteTimestampToField($data)
{
if ($data)
{
list($dt, $hr) = split(" ",$data);
list($ano, $mes, $dia) = split("-", $dt);
list($hora, $min, $sec) = split(":", $hr);
return "$dia-$mes-$ano $hora:$min:$sec";
}
else
return false;
}
function converteTimestampToMySQL($data)
{
if ($data)
{
list($dt, $hr) = split(" ",$data);
list($dia, $mes, $ano) = split("-", $dt);
list($hora, $min, $sec) = split(":", $hr);
return "$ano-$mes-$dia $hora:$min:$sec";
}
else
return false;
}
function PegaVideoID($url)
{
preg_match("/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches);
if (isset($matches[1])) $videoID = $matches[1];
else $videoID = '';
// clean video id
$videoID = preg_replace('/[^\w-_]+/', '', $videoID);
return $videoID;
}
function InverteData($data = null)
{
if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null;
$data = explode('-', $data);
$data = $data[2].'-'.$data[1].'-'.$data[0];
return $data;
}
function InverteData2($data = null)
{
if(is_null($data) || $data == NULL || $data == "00-00-0000" || $data == "0000-00-00") return null;
$data = explode('-', $data);
$data = $data[1].'-'.$data[0];
return $data;
}
function Slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
}
function FormatSize($bytes, $unit = 'auto', $precision = 2, $dec_point = '.',
$thousands_sep = ',')
{
$units = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$unit = array_search(strtolower($unit), array_map('strtolower', $units));
if ($unit === false) {
$unit = ($bytes > 0) ? floor(log($bytes, 1024)) : 0;
}
return sprintf('%s %s',
number_format(
bcdiv(strval($bytes), bcpow(1024, $unit), $precision),
($unit == 0) ? 0 : $precision,
$dec_point,
$thousands_sep
),
$units[$unit]
);
}
function NumberToMysql($numero)
{
$numero = str_replace(".", "", $numero);
$numero = str_replace(",", ".", $numero);
return $numero;
}
function ValidaSenha($senha = null)
{
//Pelo menos 1 letra, 1 numero e 1 letra maiuscula, de 6 a 10 caracteres
//if(preg_match("#.*^(?=.{6,10})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#", $senha)) return true;
//Caio em Agosto/2016 pediu para eu liberar as regras... colocarei apenas a regra do tamanho, mínimo 6 caracteres
if(preg_match("#.*^(?=.{6,10}).*$#", $senha)) return true;
else return false;
}
function ValidaUsuario($usuario = null)
{
if(preg_match('/^[a-z0-9]{6,30}$/', $usuario)) return true;
return false;
}
function ValidaString($str = null, $min = 1, $max = 10)
{
$pattern = '/^[a-z0-9]{'.$min.','.$max.'}$/';
if(preg_match($pattern, $str)) return true;
return false;
}
function isDate($date)
{
$char = strpos($date, "/")!==false?"/":"-";
$date_array = explode($char,$date);
if(count($date_array)!=3) return false;
return checkdate($date_array[1],$date_array[0],$date_array[2])?($date_array[2] . "-" . $date_array[1] . "-" . $date_array[0]):false;
}
function GeraSenha($tamanho = 8, $maiusculas = true, $numeros = true, $simbolos = false)
{
// Caracteres de cada tipo
$lmin = 'abcdefghijklmnopqrstuvwxyz';
$lmai = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$num = '1234567890';
$simb = '!@#$%*-';
// Variáveis internas
$retorno = '';
$caracteres = '';
// Agrupamos todos os caracteres que poderão ser utilizados
$caracteres .= $lmin;
if ($maiusculas) $caracteres .= $lmai;
if ($numeros) $caracteres .= $num;
if ($simbolos) $caracteres .= $simb;
// Calculamos o total de caracteres possíveis
$len = strlen($caracteres);
for ($n = 1; $n <= $tamanho; $n++) {
// Criamos um número aleatório de 1 até $len para pegar um dos caracteres
$rand = mt_rand(1, $len);
// Concatenamos um dos caracteres na variável $retorno
$retorno .= $caracteres[$rand-1];
}
return $retorno;
}
function Aborta($msg)
{
GLOBAL $objetoTelas, $msg_erro;
$msg_erro = $msg;
session_destroy();
msgSet();
$objetoTelas->error_page();
exit;
}
//Funçãozinha pro arrayfilter do $itemsel
function filtra_msg_validas($item)
{
if(isset($item) && trim($item)!=='') return($item);
}
function msgSet()
{
GLOBAL $msg_ok, $msg_erro, $msg_info;
if(session_status() == PHP_SESSION_NONE)
{
session_name("saam2");
session_start();
}
//Mensagens de OK
if(is_array($msg_ok) && count($msg_ok))
{
$msg_ok = array_filter($msg_ok, "filtra_msg_validas");
$msg_ok = implode("
", $msg_ok);
}
if($msg_ok) $_SESSION['msg_ok'] = ($_SESSION['msg_ok'] != null) ? $_SESSION['msg_ok']."
".$msg_ok : $msg_ok;
//Mensagens de ERRO
if(is_array($msg_erro) && count($msg_erro))
{
$msg_erro = array_filter($msg_erro, "filtra_msg_validas");
$msg_erro = implode("
", $msg_erro);
}
if($msg_erro) $_SESSION['msg_erro'] = ($_SESSION['msg_erro'] != null) ? $_SESSION['msg_erro']."
".$msg_erro : $msg_erro;
//Mensagens de INFO
if(is_array($msg_info) && count($msg_info))
{
$msg_info = array_filter($msg_info, "filtra_msg_validas");
$msg_info = implode("
", $msg_info);
}
if($msg_info) $_SESSION['msg_info'] = ($_SESSION['msg_info'] != null) ? $_SESSION['msg_info']."
".$msg_info : $msg_info;
}
function msgUnset()
{
$_SESSION['msg_ok'] = null;
$_SESSION['msg_erro'] = null;
$_SESSION['msg_info'] = null;
}
function MontaArvoreDir($listadiretorios = null, $diretorio = null, $pula = null, $pegoupasta = null)
{
GLOBAL $arvore;
if(!count($listadiretorios) || !$diretorio) return $arvore;
if(!$pegoupasta) $arvore['pasta'] = $diretorio;
foreach($listadiretorios as $key => $value)
{
if(is_array($value))
{
$pula++;
MontaArvoreDir($value, $diretorio."/".$value[0], $pula, 1);
$pula = 0;
}
else
{
if($pula)
{
$arvore['DIR'][$value] = CUSTOMERDIR ."/". $diretorio;
$arvore['URL'][$value] = CUSTOMERURL ."/". $diretorio;
$pula = 0;
}
else
{
$arvore['DIR'][$value] = CUSTOMERDIR ."/". $diretorio . "/". $value;
$arvore['URL'][$value] = CUSTOMERURL ."/". $diretorio . "/". $value;
}
}
}
return $arvore;
}
// Função que recebe ALLMAPEAMENTO e retorna um ARRAY com os níveis máximos de permissão do Usuário que está na sessão,
// ou seja, do usuário que está manipulando as permissões. Usado para controle de permissão de USO.
function CriaMyNiveis($allmapeamento = null)
{
$result = array();
foreach($allmapeamento as $key => $value)
{
$result[$value->id_mapeamento] = range(0, $_SESSION['my_permissao'][$value->id_mapeamento]);
}
return $result;
}
// Function for basic field validation (present and neither empty nor only white space
function IsNullOrEmptyString($str){
return (!isset($str) || trim($str)==='');
}
function CheckStringEnclosure($str, $start, $end)
{
$match = 0;
$pattern = sprintf('/%s(.+?)%s/ims',preg_quote($start, '/'), preg_quote($end, '/'));
if(preg_match($pattern, $str, $matches)) list(, $match) = $matches;
return $match;
}
function inrange($min, $number, $max)
{
if($number >= $min && $number <= $max) return true;
else return false;
}
function num_to_mysql($get_valor)
{
$source = array('.', ',');
$replace = array('', '.');
$valor = str_replace($source, $replace, $get_valor); //remove os pontos e substitui a virgula pelo ponto
return $valor; //retorna o valor formatado para gravar no banco
}
function dateDifference($date_1 , $date_2 , $differenceFormat = '%a' )
{
$datetime1 = date_create($date_1);
$datetime2 = date_create($date_2);
$interval = date_diff($datetime1, $datetime2);
return $interval->format($differenceFormat);
}
function MontaMenuDropdown($conteudo)
{
$estrutura = array();
$linhas = explode("\n",$conteudo);
$separador = "|";
$erro = 0;
$cont_menu = 0;
$cont_item = 0;
$id_anterior = null;
for($i = 0; $i <= count($linhas)-1; $i++)
{
$linhas[$i] = rtrim($linhas[$i]);
if($linhas[$i])
{
$dados = explode($separador, $linhas[$i]);
$campos = count($dados);
$id = $dados[0];
$label = $dados[1];
$icone = $dados[2];
if($campos != 3 && $campos != 5) $erro = $erro + 1;
else
{
if(!$memorizou) { $id_anterior = $id; $memorizou = 1; }
if($id != $id_anterior) { $cont_menu++; $cont_item = 0; }
$estrutura[$cont_menu][$cont_item] = array($label, $icone, $dados[3], $dados[4]);
$id_anterior = $id;
$cont_item++;
}
}
}
return $estrutura;
}
function MontaFatiaDePeriodo($time_inicial = null, $time_final = null, $fatia = null, $objeto = null, $datas_com_progresso = null, $debug = null)
{
$result = array();
if(!$time_inicial || !$time_final) return $result;
//OBJETO Projeto ou Linear, é mesmo campo para pegar:
$diabase = $objeto->diabase;
$mesbase = $objeto->it_mesbase;
//Define as fatias
$dia = (1 * 24 * 60 * 60);
$semana = (7 * 24 * 60 * 60);
$quinzena = (15 * 24 * 60 * 60);
$mes = (30 * 24 * 60 * 60);
//Pega os parametros da data inicial
$dia_inicial = date('j', $time_inicial);
$mes_inicial = date('n', $time_inicial);
$ano_inicial = date('Y', $time_inicial);
//Faz este ajuste para ignorar o horario de verão
//$time_inicial = mktime(22, 0, 0, $mes_inicial, $dia_inicial, $ano_inicial);
//Comentei esta linha acima em 15/fev/16 quando estava implementando os Resumos Gerenciais.... pois não vi sentido colocar os horários para as 22hs... depois se for o caso eu preciso pesquisas do por quê que eu havia colocado este trick no passado...
$time_inicial = mktime(0, 0, 0, $mes_inicial, $dia_inicial, $ano_inicial);
//Pega os parametros da data final
$dia_final = date('j', $time_final);
$mes_final = date('n', $time_final);
$ano_final = date('Y', $time_final);
//Faz este ajuste para ignorar o horario de verão
//$time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final);
//Comentei esta linha acima em 15/fev/16 quando estava implementando os Resumos Gerenciais.... pois não vi sentido colocar os horários para as 22hs... depois se for o caso eu preciso pesquisas do por quê que eu havia colocado este trick no passado...
$time_final = mktime(23, 59, 59, $mes_final, $dia_final, $ano_final);
if($debug) { print "OBJETO"; print_r($objeto); }
if($debug) print "FATIA: $fatia \n";
if($debug) print "TimeInicial[$time_inicial] [$dia_inicial][$mes_inicial][$ano_inicial][$hora_inicial : $minuto_inicial : $segundo_inicial]\n";
if($debug) print "TimeFinal[$time_final] [$dia_final][$mes_final][$ano_final][$hora_final : $minuto_final : $segundo_final]\n";
//Monta um array de acordo com a fatia semana, quinzenal e mensal
$time_fatia[1] = $semana;
$time_fatia[2] = $quinzena;
$time_fatia[3] = $mes;
if($debug) print "TIMEFATIA[]:\n";
if($debug) print_r($time_fatia);
if($debug) print "\n\n";
$label[1] = "semana";
$label[2] = "quinzena";
//Esse campo tem só em $projeto, então se o objeto tiver, usa, senão pega a label default
if($objeto->perlabelcont) $label[3] = $objeto->perlabelcont;
else $label[3] = "mês";
//PASSO 1 - AJUSTANDO PERIODO INICIAL E FINAL
//PASSO 1 - Faz ajustes no periodo inicial e final segundo o dia base do objeto e a fatia que foi escolhida, para assim encontrar a data inicial e final do objeto.
if($fatia == 1)
{
//#################################
//AJUSTA O PERIODO INICIAL
//Primeiro deve-se achar o primeiro domingo anterior ao time_inicial, pois este será o novo time inicial
$dia_da_semana_atual = date('w',$time_inicial);
$aux_time = $time_inicial;
while($dia_da_semana_atual != 0)
{
$aux_time = $aux_time - $dia;
$dia_da_semana_atual = date('w', $aux_time);
$time_inicial = $aux_time;
}
//#################################
//AJUSTA O PERIODO FINAL
//Pega o sábado depois da data final
$dia_da_semana_atual = date('w',$time_final);
$aux_time = $time_final;
while($dia_da_semana_atual != 6)
{
$aux_time = $aux_time + $dia;
$dia_da_semana_atual = date('w', $aux_time);
$time_final = $aux_time;
}
//#################################
}
elseif($fatia == 2)
{
//#################################
//AJUSTA O PERIODO INICIAL
//Pega o primeiro dia da quinzena
$dia_inicial = date('j', $time_inicial);
$dias_do_mes = date('t', $time_inicial);
if($dia_inicial <= 15)
{
$time_inicial = $time_inicial - ($dia_inicial * $dia) + $dia;
$quinzena_atual = 1;
}
else
{
$time_inicial = $time_inicial - (($dia_inicial - 15)*$dia) + $dia;
$quinzena_atual = 2;
}
//#################################
//AJUSTA O PERIODO FINAL
//Pega o ultimo dia da quinzena
$dia_final = date('j', $time_final);
$dias_do_mes_final = date('t', $time_final);
if($dia_final <= 15) $time_final = $time_final + ((15 - $dia_final)*$dia);
else $time_final = $time_final + (($dias_do_mes_final - $dia_final)*$dia);
//#################################
}
elseif($fatia == 3)
{
//Verifica se o objeto possui dia-base para montagem da fatia de PERIODOS
if($diabase >= 2)
{
//#################################
//AJUSTA O PERIODO INICIAL
//Se o diabase for maior que o dia inicial, então tem que voltar 1 mês nos periodos
if($diabase > $dia_inicial)
{
$ano_anterior = $ano_inicial;
$mes_anterior = $mes_inicial - 1;
if($mes_anterior == 0) { $mes_anterior = 12; $ano_anterior = $ano_anterior - 1; }
$time_inicial = mktime(22, 0, 0, $mes_anterior, $diabase, $ano_anterior); //Faz este ajuste para ignorar o horario de verão
}
else $time_inicial = mktime(22, 0, 0, $mes_inicial, $diabase, $ano_inicial); //Faz este ajuste para ignorar o horario de verão
//#################################
//AJUSTA O PERIODO FINAL
if($diabase > $dia_final)
{
$dia_final = $diabase - 1;
$time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final); //Faz este ajuste para ignorar o horario de verão
}
else
{
$dia_final = $diabase - 1;
$mes_final = $mes_final + 1;
if($mes_final == 13) { $mes_final = 1; $ano_final = $ano_final + 1; }
$time_final = mktime(22, 0, 0, $mes_final, $dia_final, $ano_final); //Faz este ajuste para ignorar o horario de verão
}
//#################################
}
else
{
//#################################
//AJUSTA O PERIODO INICIAL
$dias_do_mes = date('t', $time_inicial);
$time_inicial = $time_inicial - ($dia_inicial * $dia) + $dia;
$time_fatia[$fatia] = $dias_do_mes * $dia;
//#################################
//AJUSTA O PERIODO FINAL
$dias_do_mes_final = date('t', $time_final);
$time_final = $time_final + (($dias_do_mes_final - $dia_final)*$dia);
//#################################
}
}
if($debug)
{
print "AJUSTADOS:\n";
print "INICIO:[".date("d-m-Y H:i:s", $time_inicial)."] FIM:[".date("d-m-Y H:i:s", $time_final)."]\n";
print "Dias do Mes INI: $dias_do_mes e Dias do Mes FIM: $dias_do_mes_final\n";
print "FATIA: $fatia\r\n";
print "TIMEFATIA[FATIA]:\r\n";
print_r($time_fatia);
}
//PASSO 2 - MONTA O ARRAY DE FATIAS DE PERIODO
//PASSO 2 - Baseado no novo time_inicial e time_final, é montado um array de fatias de periodo que será utilizado pelo script.
//Monta o array de fatias
$listFatias = array();
$progrediu = 0;
$cont = 0;
$cont_tem_input = 0;
if($debug) print "\n\nENTRANDO NO LOOP PRA MONTAR A LISTA...\n\n";
$pegueimarco = 0;
for($i = $time_inicial; $i <= $time_final; $i = $i + $time_fatia[$fatia])
{
if($debug) print "NOVA INTERACAO:\n";
$mes_atual = date('m', $i);
//SE for QUINZENAL considera esta manobra
if($fatia == 2)
{
$dias_do_mes = date('t', $i);
if($debug) print "DiasDoMes[$dias_do_mes]\n";
//Se for a primeira quinzena, a fatia é 15 dias.
//Se for a segunda, é o numero de dias do mes - 15
if($quinzena_atual == 1) { $time_fatia[$fatia] = $quinzena; if($debug) print "PQ [".$quinzena/$dia."] DIAS somados...\n"; }
else { $time_fatia[$fatia] = ($dias_do_mes - 15) * $dia; if($debug) print "SQ [".(($dias_do_mes - 15) * $dia)/$dia."] DIAS somados...\n"; }
}
elseif($fatia == 3)
{
//Se o mês for JANEIRO e o diabase for maior ou igual a 29
//Pega quantos dias terá o mes de FEVEREIRO do ano corrente e usa este valor como dias_do_mes
if(date('n', $i) == 1 && $diabase >= 29)
{
//Neste caso o $i deve ser o último dia do mês que vem, fevereiro.
$auxano = date('Y', $i);
$dateToTest = $auxano."-02-01";
if($debug) print "[$dateToTest]";
$lastday = date('t',strtotime($dateToTest));
if($debug) print "[$lastday]";
$auxtime = mktime(22, 0, 0, 2, $lastday, $auxano);
if($debug) print date('d-m-Y H:m:s', $auxtime);
if($debug) print "[$i][$auxtime][$dia]";
$dias_do_mes = (($auxtime - $i)/$dia);
$time_fatia[$fatia] = $dias_do_mes * $dia + $dia;
}
elseif(!$pegueimarco && date('n', $i) == 3 && $diabase >= 29)
{
//Neste caso o $i deve ser o diabase - 1 deste mês de março
$auxano = date('Y', $i);
$auxtime = mktime(22, 0, 0, 3, ($diabase-1), $auxano);
if($debug) print date('d-m-Y H:m:s', $auxtime);
if($debug) print "[$i][$auxtime][$dia]";
$dias_do_mes = (($auxtime - $i)/$dia);
$time_fatia[$fatia] = $dias_do_mes * $dia + $dia;
$pegueimarco = 1;
}
else
{
$dias_do_mes = date('t', $i);
$time_fatia[$fatia] = $dias_do_mes * $dia;
}
}
if($debug) print "Diabase[$diabase] Mes[".date('m', $i)."] DiasDoMes[$dias_do_mes]\n";
if($debug) print "TIMEFATIA[FATIA]:\r\n";
if($debug) print_r($time_fatia);
$de_ate = "";
$de_ate->indice = $cont;
$de_ate->de_time = $i;
$de_ate->de = date('Y-m-d', $de_ate->de_time);
$de_ate->de_formatado = date('d-m-Y', $de_ate->de_time);
$de_ate->defull_formatado = date('d-m-Y H:i:s', $de_ate->de_time);
$de_ate->ate_time = $i + $time_fatia[$fatia] - $dia;
if($debug) print "ANTES ATE: ".$de_ate->ate_time."\n";
//Verifica se houve mudança de horario de verao durante este periodo
$horarioVeraoAntes = date('I', $de_ate->de_time);
$horarioVeraoDepois = date('I', $de_ate->ate_time);
if($debug) print "HVAntes: [$horarioVeraoAntes] - HVDepois: [$horarioVeraoDepois]\n";
//Se teve, então SOMA ou SUBTRAI uma hora do tempo final
$auxi = $i; //Armazena o valor original do $i porque mais abaixo ele é usado pra calcular ate_anterior. Aí ele não é afetado por este IF abaixo, se mantendo preservado.
if($horarioVeraoAntes == 1 && $horarioVeraoDepois == 0) { $de_ate->ate_time = $de_ate->ate_time + 3600; $i = $i + 3600; }
elseif($horarioVeraoAntes == 0 && $horarioVeraoDepois == 1) { $de_ate->ate_time = $de_ate->ate_time - 3600; $i = $i - 3600; }
if($debug) print "DEPOIS ATE: ".$de_ate->ate_time."\n";
$de_ate->ate = date('Y-m-d', $de_ate->ate_time);
$de_ate->ate_formatado = date('d-m-Y', $de_ate->ate_time);
$de_ate->atefull_formatado = date('d-m-Y H:i:s', $de_ate->ate_time);
$de_ate->ate_anterior = date('Y-m-d', $auxi - $dia);
$de_ate->ate_anterior_full_formatado = date('Y-m-d H:i:s', $auxi - $dia);
//Aqui acerta o mês de acordo com a referencia do periodo em "Editar Projeto"
if($diabase >= 2 && $mesbase == 1) $de_ate->label1 = labelFatia($de_ate->de_time);
elseif($diabase >= 2 && $mesbase == 2) $de_ate->label1 = labelFatia($de_ate->ate_time);
else $de_ate->label1 = labelFatia($de_ate->ate_time);
//Aqui acerta o mês de acordo com a referencia do periodo em "Editar Projeto"
if($diabase >= 2 && $mesbase == 1) $de_ate->label0 = labelFatia($de_ate->de_time, 1);
elseif($diabase >= 2 && $mesbase == 2) $de_ate->label0 = labelFatia($de_ate->ate_time, 1);
else $de_ate->label0 = labelFatia($de_ate->ate_time, 1);
//Verifica SE o periodo possui algum input de porcentagem
$de_ate->tem_input = 0;
//print "Datas com Progressos - cont[$cont]:
";
//print_r($datas_com_progresso);
foreach($datas_com_progresso as $time_periodo => $nada)
{
//print "time_periodo[$time_periodo]
";
//print "de_time:".$de_ate->de_time." - ".$de_ate->de_formatado."
";
//print "ate_time:".$de_ate->ate_time." - ".$de_ate->ate_formatado."
";
if($time_periodo >= $de_ate->de_time && $time_periodo <= $de_ate->ate_time)
{
//echo date('d-m-Y', $time_periodo);
//print " ENTROU!!
";
$de_ate->tem_input = 1;
//SE teve input, armazena o último contador com input
$progrediu = $cont+1; //20160919 - Aqui estava -1 antes... não sei porque. Mudei pra +1 porque estava posicionando errado na barra de periodos.
//print "Progrediu: $progrediu
";
}
//else print "Não Entrou!
";
}
//SE exibe contador:
$aux = $cont+1;
if($objeto->percont)
{
if($de_ate->tem_input && $objeto->it_pertipocont == '1') { $cont_tem_input++; $aux = $cont_tem_input; }
$de_ate->label2 = $label[$fatia]." ".$aux;
}
elseif($classe == "projeto") $de_ate->label2 = " ";
else $de_ate->label2 = $label[$fatia]." ".$aux;
if($debug) { print_r($de_ate); print "\n\n"; }
array_push($listFatias, $de_ate);
$cont++;
//SE for QUINZENAL considera esta manobra
if($fatia == 2)
{
//Altera a quinzena
if($quinzena_atual == 1) $quinzena_atual = 2;
else $quinzena_atual = 1;
}
}
if($debug) print "ARRAY DE FATIAS:\n";
if($debug) print_r($listFatias);
$result[] = $listFatias;
$result[] = $cont; //Último elemento, ou último período apontado
$result[] = $progrediu; //Último período com progresso
return($result);
}
function MontaFatiaDePeriodoRG($lista = null, $fatia = null, $objeto = null, $datas_com_progresso = null, $debug = null)
{
$result = array();
if(!$lista || !is_array($lista)) return $result;
//OBJETO Projeto ou Linear, é mesmo campo para pegar:
$diabase = $objeto->diabase;
$mesbase = $objeto->it_mesbase;
//Define as fatias
$dia = (1 * 24 * 60 * 60);
$semana = (7 * 24 * 60 * 60);
$quinzena = (15 * 24 * 60 * 60);
$mes = (30 * 24 * 60 * 60);
//Data Inicial:
$inicio = pegaprimeiro($lista);
$data_inicial = $lista[$inicio];
list($diai, $mesi, $anoi) = split("-", $data_inicial);
$time_inicial = mktime(0, 0, 0, $mesi, $diai, $anoi);
//Data Final:
$final = pegaultimo($lista);
$data_final = $lista[$final];
list($diaf, $mesf, $anof) = split("-", $data_final);
$time_final = mktime(23, 59, 59, $mesf, $diaf, $anof);
if($debug) { print "INICIO: $inicio - $data_inicial - $diai, $mesi, $anoi - $time_inicial
"; }
if($debug) { print "FINAL: $final - $data_final - $diaf, $mesf, $anof - $time_final
"; }
//Monta um array de acordo com a fatia semana, quinzenal e mensal
$time_fatia[1] = $semana;
$time_fatia[2] = $quinzena;
$time_fatia[3] = $mes;
$label[1] = "semana";
$label[2] = "quinzena";
//Esse campo tem só em $projeto, então se o objeto tiver, usa, senão pega a label default
if($objeto->perlabelcont) $label[3] = $objeto->perlabelcont;
else $label[3] = "mês";
//#################################
//AJUSTA O PERIODO INICIAL
$dias_do_mes = date('t', $time_inicial);
$time_inicial = $time_inicial - ($diai * $dia) + $dia;
$time_fatia[$fatia] = $dias_do_mes * $dia;
//#################################
//AJUSTA O PERIODO FINAL
$dias_do_mes_final = date('t', $time_final);
$time_final = $time_final + (($dias_do_mes_final - $diaf)*$dia);
//#################################
if($debug) print "AJUSTADOS:\n";
if($debug) print "INICIO:[".date("d-m-Y H:i:s", $time_inicial)."] FIM:[".date("d-m-Y H:i:s", $time_final)."]\n\n";
//PASSO 2 - MONTA O ARRAY DE FATIAS DE PERIODO
//PASSO 2 - Baseado no novo time_inicial e time_final, é montado um array de fatias de periodo que será utilizado pelo script.
//Monta o array de fatias
$listFatias = array();
$progrediu = 0;
$maior = 0;
$cont = 0;
$cont_tem_input = 0;
//print "";
for($i = $time_inicial; $i <= $time_final; $i = $i + $time_fatia[$fatia])
{
$mes_atual = date('m', $i);
$dias_do_mes = date('t', $i);
if($debug) print "DiasDoMes[$dias_do_mes]\n";
$time_fatia[$fatia] = $dias_do_mes * $dia;
$de_ate = "";
$de_ate->indice = $cont;
$de_ate->de_time = $i;
$de_ate->de = date('Y-m-d', $de_ate->de_time);
$de_ate->de_formatado = date('d-m-Y', $de_ate->de_time);
$de_ate->defull_formatado = date('d-m-Y H:i:s', $de_ate->de_time);
$de_ate->ate_time = $i + $time_fatia[$fatia] - $dia;
//Verifica se houve mudança de horario de verao durante este periodo
$horarioVeraoAntes = date('I', $de_ate->de_time);
$horarioVeraoDepois = date('I', $de_ate->ate_time);
if($debug) print "HVAntes: [$horarioVeraoAntes] - HVDepois: [$horarioVeraoDepois]\n";
//Se teve, então SOMA ou SUBTRAI uma hora do tempo final
$auxi = $i; //Armazena o valor original do $i porque mais abaixo ele é usado pra calcular ate_anterior. Aí ele não é afetado por este IF abaixo, se mantendo preservado.
if($horarioVeraoAntes == 1 && $horarioVeraoDepois == 0) { $de_ate->ate_time = $de_ate->ate_time + 3600; $i = $i + 3600; }
elseif($horarioVeraoAntes == 0 && $horarioVeraoDepois == 1) { $de_ate->ate_time = $de_ate->ate_time - 3600; $i = $i - 3600; }
if($debug) print "DEPOIS ATE: ".$de_ate->ate_time."\n";
$de_ate->ate = date('Y-m-d', $de_ate->ate_time);
$de_ate->ate_formatado = date('d-m-Y', $de_ate->ate_time);
$de_ate->atefull_formatado = date('d-m-Y H:i:s', $de_ate->ate_time);
$de_ate->ate_anterior = date('Y-m-d', $auxi - $dia);
$de_ate->ate_anterior_full_formatado = date('Y-m-d H:i:s', $auxi - $dia);
$de_ate->label1 = labelFatia($de_ate->ate_time);
$de_ate->periodo1 = date('Ym', $de_ate->ate_time);
//Verifica SE o periodo possui algum input de porcentagem
$de_ate->tem_input = 0;
//print_r($de_ate);
if($lista[$de_ate->periodo1]) $de_ate->tem_input = 1;
foreach($datas_com_progresso as $time_periodo => $nada)
{
$auxperiodo1 = date('Ym', $time_periodo);
//print "Testando: [$time_periodo][";
//echo date('d-m-Y', $time_periodo)." - ".date('d-m-Y', $de_ate->de_time)." - ".date('d-m-Y', $de_ate->ate_time);
//print "]
";
if($auxperiodo1 >= $de_ate->periodo1 && $auxperiodo1 <= $de_ate->periodo1)
{
//print "enquadrou
";
//SE teve input, armazena o último contador com input
$progrediu = $de_ate->periodo1; //$cont-1;
}
//print "PROGREDIU: [$progrediu]
";
}
//print "** PROGREDIU FINAL : [$progrediu] Maior: [$maior]
";
if($progrediu > $maior) $maior = $progrediu;
//print "** MAIOR FINAL : [$maior]
";
//SE exibe contador:
$aux = $cont+1;
if($objeto->percont)
{
if($de_ate->tem_input && $objeto->it_pertipocont == '1') { $cont_tem_input++; $aux = $cont_tem_input; }
$de_ate->label2 = $label[$fatia]." ".$aux;
}
elseif($classe == "projeto") $de_ate->label2 = " ";
else $de_ate->label2 = $label[$fatia]." ".$aux;
if($debug) { print_r($de_ate); print "\n\n"; }
array_push($listFatias, $de_ate);
$cont++;
}
if($debug) print "ARRAY DE FATIAS:\n";
if($debug) print_r($listFatias);
$result[] = $listFatias;
$result[] = $cont;
$result[] = $maior;
//print_r($result); print "";
return($result);
}
function CalculaEAP($id_contrato, $eap, $filhos)
{
$debug = $_GET['debug'];
if($debug) print "";
if(!$id_contrato) return false;
//Carrega os ultimos filhos
$allfilhos = ($filhos) ? $filhos : EapOperations::LoadUltimosFilhos($id_contrato, "ultimos");
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLFILHOS NO INICIO:\r\n ";
if($debug) print_r($allfilhos);
//Carrega as EAP
//$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizado($id_contrato, 0, 0, " ordem ASC ", "|---- ", "calculaeap", null, " >> ", null);
$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizadoNova($id_contrato, 0, null, " ordem ASC ", "|---- ", " >> ", "calculaeap", 0);
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLEAP NO INICIO:\r\n ";
if($debug) print_r($auxalleap);
$alleap = array();
foreach($auxalleap as $key => $value)
{
//PRIMEIRO: deve-se ZERAR os valores iniciais para as fases que não forem ultimos filhos
if(!in_array($value->id_eap, $allfilhos))
{
$value->valor_inicial = 0; $value->valor_inicial_formatado = "0,00";
// $value->valor_ajustado = 0; $value->valor_ajustado_formatado = "0,00";
$value->valor_unitario = 0; $value->valor_unitario_formatado = "0,00";
}
else
{
// if($value->valor_ajustado <= 0)
// {
// $value->valor_ajustado = $value->valor_inicial;
// $value->valor_ajustado_formatado = $value->valor_inicial_formatado;
// }
//Calcula os unitarios
$value->valor_unitario = ($value->valor_inicial > 0 && $value->qtde_inicial > 0) ? $value->valor_inicial/$value->qtde_inicial : 0;
$value->valor_unitario_formatado = number_format($value->valor_unitario, 2, ',', '.');
}
//Cria o objeto de EAP final
$alleap[$value->id_eap] = $value;
}
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLEAP COM VALORES ZERADOS PARA OS NIVEIS SUPERIORES:\r\n ";
if($debug) print_r($alleap);
//Cria o objeto do Contrato
$todo_contrato = new Eap();
$todo_contrato->id_eap = 0;
$todo_contrato->id_eap_pai = '';
$todo_contrato->valor_inicial = 0;
// $todo_contrato->valor_ajustado = 0;
$alleap[0] = $todo_contrato;
$tratados = $allfilhos;
//Agora acerta os valores de dentro pra fora
$continua = (count($allfilhos)) ? 1 : 0;
$ultima = 0;
$cont = 0;
while($continua)
{
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "NOVA INTERACAO DE WHILE:\r\n";
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLFILHOS:\r\n ";
if($debug) print_r($allfilhos);
//Auxfilhos acomoda os id_pai para a proxima interação, e assim ir subindo os valores pra cima
$auxfilhos = array();
foreach($allfilhos as $key => $id_eap)
{
$id_eap_pai = $alleap[$id_eap]->id_eap_pai;
if($debug) print "FILHA: $id_eap - PAI: $id_eap_pai\r\n";
if($debug) print "ANTES:\r\n";
if($debug) print "Valor da Filha [$id_eap]: ". $alleap[$id_eap]->valor_inicial. "\r\n";
if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor_inicial. "\r\n";
if($id_eap_pai != null)
{
$alleap[$id_eap_pai]->valor_inicial = $alleap[$id_eap_pai]->valor_inicial + $alleap[$id_eap]->valor_inicial;
// $alleap[$id_eap_pai]->valor_ajustado = $alleap[$id_eap_pai]->valor_ajustado + $alleap[$id_eap]->valor_ajustado;
if(!in_array($id_eap_pai,$auxfilhos) && !in_array($id_eap_pai,$tratados)) $auxfilhos[] = $id_eap_pai;
}
if($debug) print "DEPOIS:\r\n";
if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor_inicial. "\r\n-------\r\n";
}
//Retira os IDs repetidos do Auxfilhos
$allfilhos = array_unique($auxfilhos);
$allfilhos = array_values($allfilhos);
$tratados = array_unique(array_merge($tratados, $allfilhos));
$tratados = array_values($tratados);
if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
if($ultima == 1) $continua = 0;
if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
$qtde = count($allfilhos);
if($debug) print "QTDE[$qtde]\r\n";
if($qtde == 1) $ultima = 1;
if($debug) print "ULTIMA[$ultima]\r\n";
$cont++;
if($cont >= 3500) { print "ATENÇÃO:
O SISTEMA IDENTIFICOU UMA GRANDE QUANTIDADE DE INFORMAÇÕES PARA COMPLIAR/PROCESSAR. PODE SER QUE SEU CÁLCULO NÃO TENHA SE DADO POR COMPLETO.
VERIFIQUE A INFORMAÇÃO CALCULADA, E CASO VOCÊ TENHA NOTADO ALGUMA INCONSISTÊNCIA, POR FAVOR INFORME A URL ACIMA PARA MELHOR IDENTIFICAÇÃO DO PROBLEMA DIRETAMENTE AO DESENVOLVEDOR OU SEU SUPERIOR.
";
break; }
}
//Agora formata todos os campos
$alleap[0]->valor_inicial = 0;
// $alleap[0]->valor_ajustado = 0;
foreach($alleap as $key => $value)
{
if($key != 0 && !$value->id_eap_pai)
{
$alleap[0]->valor_inicial = $alleap[0]->valor_inicial + $value->valor_inicial;
// $alleap[0]->valor_ajustado = $alleap[0]->valor_ajustado + $value->valor_ajustado;
}
//Formatando
$alleap[$key]->valor_inicial_formatado = number_format($alleap[$key]->valor_inicial, 2, ',', '.');
$alleap[$key]->valor_inicial_arredondado = round($alleap[$key]->valor_inicial);
// $alleap[$key]->valor_ajustado_formatado = number_format($alleap[$key]->valor_ajustado, 2, ',', '.');
// $alleap[$key]->valor_ajustado_arredondado = round($alleap[$key]->valor_ajustado);
}
if($debug) print_r($alleap);
if($debug) print "";
return $alleap;
}
function CalculaEAPnoPeriodo($id_contrato, $eap, $filhos, $periodo, $allitemmedido)
{
$debug = $_GET['debug'];
if($debug) print "";
if(!$id_contrato || !$periodo) return false;
$periodo_data = formata_periodo($periodo, "-", 7);
//Carrega os ultimos filhos
$allfilhos = ($filhos) ? $filhos : EapOperations::LoadUltimosFilhos($id_contrato, "ultimos");
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLFILHOS NO INICIO:\r\n ";
if($debug) print_r($allfilhos);
//Carrega as EAP
//$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizado($id_contrato, 0, 0, " ordem ASC ", "|---- ", "calculaeap", null, " >> ", null);
$auxalleap = ($eap) ? $eap : EapOperations::LoadEapHierarquizadoNova($id_contrato, 0, $periodo, " ordem ASC ", "|---- ", " >> ", "calculaeap", 0);
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLEAP NO INICIO:\r\n ";
if($debug) print_r($auxalleap);
$alleap = array();
foreach($auxalleap as $key => $value)
{
//PRIMEIRO: deve-se ZERAR os valores iniciais para as fases que não forem ultimos filhos
if(!in_array($value->id_eap, $allfilhos))
{
$value->qtde = 0; $value->qtde_formatado = "0,00";
$value->valor = 0; $value->valor_formatado = "0,00";
$value->valor_unitario = 0; $value->valor_unitario_formatado = "0,00";
$value->qtde_medido = 0; $value->qtde_medido_formatado = "0,00";
$value->valor_medido = 0; $value->valor_medido_formatado = "0,00";
$value->qtde_saldo = 0; $value->qtde_saldo_formatado = "0,00";
$value->valor_saldo = 0; $value->valor_saldo_formatado = "0,00";
}
else
{
//Se não tem entrada pro período, então adota os valores iniciais
if(!$value->id_eapperiodo)
{
$value->qtde = $value->qtde_inicial;
$value->qtde_formatado = $value->qtde_inicial_formatado;
$value->valor = $value->valor_inicial;
$value->valor_formatado = $value->valor_inicial_formatado;
$value->valor_unitario = $value->valor_unitario_inicial;
$value->valor_unitario_formatado = $value->valor_unitario_inicial_formatado;
}
else
{
//Verifica se tem Reajuste para esta EAP, conforme o ultimo periodo reajustado (pega ultimo reajuste <= PERIODO atual)
//Se tiver, este é o $value->valor para esta EAP neste nó.
$onereajuste = ReajusteOperations::LoadReajusteNoPeriodo($value->id_eap, $periodo, 2);
$value->valor = ($onereajuste->valor) ? $onereajuste->valor : $value->valor_inicial;
$value->valor_formatado = number_format($value->valor, 2, ',', '.');
$value->qtde = ($onereajuste->qtde) ? $onereajuste->qtde : $value->qtde_inicial;
$value->qtde_formatado = number_format($value->qtde, 2, ',', '.');
//Calcula os unitarios
$value->valor_unitario = ($value->valor > 0 && $value->qtde > 0) ? $value->valor/$value->qtde : 0;
$value->valor_unitario_formatado = number_format($value->valor_unitario, 2, ',', '.');
}
//Atualiza os valores medidos
$value->qtde_medido = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->qtde_medido : 0;
$value->qtde_medido_formatado = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->qtde_medido_formatado : "0,00";
$value->valor_medido = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->valor_medido : 0;
$value->valor_medido_formatado = ($allitemmedido[$value->id_eap]) ? $allitemmedido[$value->id_eap]->valor_medido_formatado : "0,00";
//Atualiza os saldos
$value->qtde_saldo = $value->qtde - $value->qtde_medido;
$value->qtde_saldo_formatado = number_format($value->qtde_saldo, 2, ',', '.');
$value->valor_saldo = $value->valor - $value->valor_medido;
$value->valor_saldo_formatado = number_format($value->valor_saldo, 2, ',', '.');
}
//Cria o objeto de EAP final
$alleap[$value->id_eap] = $value;
}
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLEAP COM VALORES ZERADOS PARA OS NIVEIS SUPERIORES:\r\n ";
if($debug) print_r($alleap);
//Cria o objeto do Contrato
$todo_contrato = new Eap();
$todo_contrato->id_eap = 0;
$todo_contrato->id_eap_pai = '';
$todo_contrato->qtde = 0;
$todo_contrato->valor = 0;
$todo_contrato->valor_medido = 0;
$todo_contrato->valor_saldo = 0;
$alleap[0] = $todo_contrato;
$tratados = $allfilhos;
//Agora acerta os valores de dentro pra fora
$continua = (count($allfilhos)) ? 1 : 0;
$ultima = 0;
$cont = 0;
while($continua)
{
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "NOVA INTERACAO DE WHILE:\r\n";
if($debug) print "-------------------------------------------------------------\r\n";
if($debug) print "ALLFILHOS:\r\n ";
if($debug) print_r($allfilhos);
//Auxfilhos acomoda os id_pai para a proxima interação, e assim ir subindo os valores pra cima
$auxfilhos = array();
foreach($allfilhos as $key => $id_eap)
{
$id_eap_pai = $alleap[$id_eap]->id_eap_pai;
if($debug) print "FILHA: $id_eap - PAI: $id_eap_pai\r\n";
if($debug) print "ANTES:\r\n";
if($debug) print "Valor da Filha [$id_eap]: ". $alleap[$id_eap]->valor. "\r\n";
if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor. "\r\n";
if($id_eap_pai != null)
{
$alleap[$id_eap_pai]->valor = $alleap[$id_eap_pai]->valor + $alleap[$id_eap]->valor;
$alleap[$id_eap_pai]->valor_medido = $alleap[$id_eap_pai]->valor_medido + $alleap[$id_eap]->valor_medido;
$alleap[$id_eap_pai]->valor_saldo = $alleap[$id_eap_pai]->valor_saldo + $alleap[$id_eap]->valor_saldo;
if(!in_array($id_eap_pai,$auxfilhos) && !in_array($id_eap_pai,$tratados)) $auxfilhos[] = $id_eap_pai;
}
if($debug) print "DEPOIS:\r\n";
if($debug) print "Valor do Pai [$id_eap_pai]: ". $alleap[$id_eap_pai]->valor. "\r\n-------\r\n";
}
//Retira os IDs repetidos do Auxfilhos
$allfilhos = array_unique($auxfilhos);
$allfilhos = array_values($allfilhos);
$tratados = array_unique(array_merge($tratados, $allfilhos));
$tratados = array_values($tratados);
if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
if($ultima == 1) $continua = 0;
if($debug) print "ULTIMA[$ultima] CONTINUA[$continua]\r\n";
$qtde = count($allfilhos);
if($debug) print "QTDE[$qtde]\r\n";
if($qtde == 1) $ultima = 1;
if($debug) print "ULTIMA[$ultima]\r\n";
$cont++;
if($cont >= 3500)
{
//print "ATENÇÃO:
O SISTEMA IDENTIFICOU UMA GRANDE QUANTIDADE DE INFORMAÇÕES PARA COMPLIAR/PROCESSAR. PODE SER QUE SEU CÁLCULO NÃO TENHA SE DADO POR COMPLETO.
VERIFIQUE A INFORMAÇÃO CALCULADA, E CASO VOCÊ TENHA NOTADO ALGUMA INCONSISTÊNCIA, POR FAVOR INFORME A URL ACIMA PARA MELHOR IDENTIFICAÇÃO DO PROBLEMA DIRETAMENTE AO DESENVOLVEDOR OU SEU SUPERIOR.
";
break;
}
}
//Agora formata todos os campos
$alleap[0]->valor = 0;
$alleap[0]->valor_medido = 0;
$alleap[0]->valor_saldo = 0;
foreach($alleap as $key => $value)
{
if($key != 0 && !$value->id_eap_pai)
{
$alleap[0]->valor = $alleap[0]->valor + $value->valor;
$alleap[0]->valor_medido = $alleap[0]->valor_medido + $value->valor_medido;
$alleap[0]->valor_saldo = $alleap[0]->valor_saldo + $value->valor_saldo;
}
//Formatando
$alleap[$key]->valor_formatado = number_format($alleap[$key]->valor, 2, ',', '.');
$alleap[$key]->valor_arredondado = round($alleap[$key]->valor);
$alleap[$key]->valor_medido_formatado = number_format($alleap[$key]->valor_medido, 2, ',', '.');
$alleap[$key]->valor_medido_arredondado = round($alleap[$key]->valor_medido);
$alleap[$key]->valor_saldo_formatado = number_format($alleap[$key]->valor_saldo, 2, ',', '.');
$alleap[$key]->valor_saldo_arredondado = round($alleap[$key]->valor_saldo);
}
if($debug) print_r($alleap);
if($debug) print "";
return $alleap;
}
function MontaPeriodosContrato($data_ini = null, $data_fim = null, $ordem = null, $tipo_retorno = null)
{
$result = array();
//if(CHROMEDEBUG) ChromePhp::log($data_ini);
//if(CHROMEDEBUG) ChromePhp::log($data_fim);
list($anoi, $mesi, $diai) = split("-", $data_ini);
list($anof, $mesf, $diaf) = split("-", $data_fim);
$periodoini = $anoi.$mesi;
$periodofim = $anof.$mesf;
$data = $anoi."-".$mesi."-01";
while($periodofim > $periodoini)
{
list($ano, $mes, $dia) = split("-", $data);
$periodoini = $ano.$mes;
$result[strval($periodoini)] = formata_periodo($periodoini, "-", $tipo_retorno);
$date = new DateTime($ano."-".$mes."-01");
$date->add(date_interval_create_from_date_string('1 month'));
$data = $date->format('Y-m-d');
}
//if(CHROMEDEBUG) ChromePhp::log($ordem);
//if(CHROMEDEBUG) ChromePhp::log($result);
if($ordem == "desc") return array_combine(array_reverse(array_keys($result)),array_reverse(array_values($result)));
else return $result;
}
function formata_periodo($periodo = null, $separador = "-", $tipo_retorno = null)
{
$periodo = ($periodo) ? $periodo : date("Ym");
$ano = substr($periodo,0,4);
$ano2d = substr($periodo,2,2);
$mes = substr($periodo,4,2);
$lmes = ltrim($mes,'0');
$mesAno = array();
$mesAno[1] = "Janeiro";
$mesAno[2] = "Fevereiro";
$mesAno[3] = "Março";
$mesAno[4] = "Abril";
$mesAno[5] = "Maio";
$mesAno[6] = "Junho";
$mesAno[7] = "Julho";
$mesAno[8] = "Agosto";
$mesAno[9] = "Setembro";
$mesAno[10] = "Outubro";
$mesAno[11] = "Novembro";
$mesAno[12] = "Dezembro";
$mesAbr = array();
$mesAbr[1] = "JAN";
$mesAbr[2] = "FEV";
$mesAbr[3] = "MAR";
$mesAbr[4] = "ABR";
$mesAbr[5] = "MAI";
$mesAbr[6] = "JUN";
$mesAbr[7] = "JUL";
$mesAbr[8] = "AGO";
$mesAbr[9] = "SET";
$mesAbr[10] = "OUT";
$mesAbr[11] = "NOV";
$mesAbr[12] = "DEZ";
//ucfirst(strtolower($bar))
if($tipo_retorno == 1) return $mesAbr[$lmes].$separador.$ano; //ABR-2019
elseif($tipo_retorno == 2) return $mesAbr[$lmes].$separador.$ano2d; //ABR-19
elseif($tipo_retorno == 3) return $mesAno[$lmes].$separador.$ano; //Abril-2019
elseif($tipo_retorno == 4) return $mesAno[$lmes].$separador.$ano2d; //Abril-19
elseif($tipo_retorno == 5) return $mesAno[$lmes]." de ".$ano; //Abril de 2019
elseif($tipo_retorno == 6) return $mes.$separador.$ano; //04-2019
elseif($tipo_retorno == 7) return $ano.$separador.$mes.$separador."01"; //2019-04-01
else return $mesAbr[$lmes].$separador.$ano; //ABR-2019
}
function labelFatia($data, $tipo)
{
global $mesAno;
if($tipo == 1)
{
$ano = date("Y",$data);
$mes = date("m",$data);
return $ano.$mes;
}
else
{
$ano = date("y",$data);
$mes = date("n",$data);
return $mesAno[$mes].".".$ano;
}
}
function labelFatia2($anomes)
{
global $mesAno;
$ano = substr($anomes, 2, 2);
$mes = ltrim(substr($anomes, 4, 2), '0');
return $mesAno[$mes].".".$ano;
}
function pegaprimeiro($lista)
{
if(!count($lista)) return null;
reset($lista);
return key($lista);
}
function pegaultimo($lista)
{
if(!count($lista)) return null;
end($lista);
return key($lista);
}
##############################################################################
##############################################################################
## FUNCOES DO CORE DO SAS ########## ABAIXO ##################################
##############################################################################
##############################################################################
function converteData($data)
{
if ($data) {
list($ano, $mes, $dia) = split("-", $data);
return "$dia-$mes-$ano";
}
else
return false;
}
function converteData_tirahora($data)
{
if ($data) {
list($date, $time) = split(" ", $data);
list($ano, $mes, $dia) = split("-", $date);
return "$dia-$mes-$ano";
}
else
return false;
}
function converteData_numeral($data)
{
if ($data) {
list($date, $time) = split(" ", $data);
list($ano, $mes, $dia) = split("-", $date);
return "$ano$mes$dia";
}
else
return false;
}
function converteData_numeral2($data)
{
if ($data) {
list($dia, $mes, $ano) = split("-", $data);
$dia = str_pad($dia, 2, "0", STR_PAD_LEFT);
$mes = str_pad($mes, 2, "0", STR_PAD_LEFT);
return "$ano$mes$dia";
}
else
return false;
}
function saudata($formato = null)
{
$hora = date("G:i:s");
$dia = date("D");
$diaN = date("j");
$mes = date("n");
$mes0x = date("m");
$ano = date("Y");
if(($hora >= 0) AND ($hora < 12)){$saudacao = "Bom dia";}
if(($hora >= 12) AND ($hora < 18)){$saudacao = "Boa Tarde";}
if(($hora >= 18) AND ($hora < 24)){$saudacao = "Boa Noite";}
$diaSemana = array();
$diaSemana["Sun"] = "Domingo";
$diaSemana["Mon"] = "Segunda-feira";
$diaSemana["Tue"] = "Terça-feira";
$diaSemana["Wed"] = "Quarta-feira";
$diaSemana["Thu"] = "Quinta-feira";
$diaSemana["Fri"] = "Sexta-feira";
$diaSemana["Sat"] = "Sábado";
$mesAno = array();
$mesAno[1] = "Janeiro";
$mesAno[2] = "Fevereiro";
$mesAno[3] = "Março";
$mesAno[4] = "Abril";
$mesAno[5] = "Maio";
$mesAno[6] = "Junho";
$mesAno[7] = "Julho";
$mesAno[8] = "Agosto";
$mesAno[9] = "Setembro";
$mesAno[10] = "Outubro";
$mesAno[11] = "Novembro";
$mesAno[12] = "Dezembro";
$mesc = array();
$mesc[1] = "JAN";
$mesc[2] = "FEV";
$mesc[3] = "MAR";
$mesc[4] = "ABR";
$mesc[5] = "MAI";
$mesc[6] = "JUN";
$mesc[7] = "JUL";
$mesc[8] = "AGO";
$mesc[9] = "SET";
$mesc[10] = "OUT";
$mesc[11] = "NOV";
$mesc[12] = "DEZ";
if($formato == 1) return $diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano." às ".$hora;
elseif($formato == 2) return $diaN."/".$mes0x."/".$ano." - ".$hora;
elseif($formato == 3) return "São Paulo, ".$diaN." de ".$mesAno[$mes]." de ".$ano;
elseif($formato == 4) return $diaN."/".$mes0x."/".$ano;
elseif($formato == 5) return $diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano;
elseif($formato == 6) return $ano.$mes0x;
elseif($formato == 7) return $mesc[$mes]."-".$ano;
else return "".$saudacao."! ".$diaSemana[$dia].", ".$diaN." de ".$mesAno[$mes]." de ".$ano;
}
function getTimestamp()
{
$hora = date("H", time());
$min = date("i", time());
$seg = date("s", time());
$dia = date("d", time());
$mes = date("m", time());
$ano = date("Y", time());
return $ano."-".$mes."-".$dia." ".$hora.":".$min.":".$seg;
}
function dataExtenso($data)
{
list($dia, $mes, $ano) = split("-", $data);
if(substr($mes, 0, 1) == "0") $mes = substr($mes, 1, 1);
$mesAno = array();
$mesAno[1] = "Janeiro";
$mesAno[2] = "Fevereiro";
$mesAno[3] = "Março";
$mesAno[4] = "Abril";
$mesAno[5] = "Maio";
$mesAno[6] = "Junho";
$mesAno[7] = "Julho";
$mesAno[8] = "Agosto";
$mesAno[9] = "Setembro";
$mesAno[10] = "Outubro";
$mesAno[11] = "Novembro";
$mesAno[12] = "Dezembro";
return $dia." de ".$mesAno[$mes]." de ".$ano;
}
function gethoje()
{
$diaN = date("d");
$mes = date("n");
$ano = date("Y");
return $diaN."-".$mes."-".$ano;
}
function monta_infowindow($mapa = null)
{
GLOBAL $listProjeto, $listLinear, $VAR_sin;
//Verifica se o mapa é usado por projetos e quais
$string_projetosutilizam = "";
if(count($mapa->projetosutilizam))
{
if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = "corbg.";\">corbg."; color: ".$VAR_sin['PRJ']->cortxt.";\">".$VAR_sin['PRJ']->letra." ".$VAR_sin['PRJ']->sinp.":
";
foreach($mapa->projetosutilizam as $k => $v)
{
$p = $listProjeto[$v];
if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "".$p->nome;
if($p->info) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_projeto=".$p->id_projeto."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info";
$string_projetosutilizam = $string_projetosutilizam . " id_projeto."\" title=\"Progresso\"> ";
if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "
";
}
}
//Verifica se o mapa é usado por projetos lineares e quais
$string_linearesutilizam = "";
if(count($mapa->linearesutilizam))
{
if(count($mapa->linearesutilizam) > 1) $string_linearesutilizam = "corbg.";\">corbg."; color: ".$VAR_sin['LIN']->cortxt.";\">".$VAR_sin['LIN']->letra." ".$VAR_sin['LIN']->sinp.":
";
foreach($mapa->linearesutilizam as $k => $v)
{
$p = $listLinear[$v];
if(count($mapa->linearesutilizam) > 1) $string_linearesutilizam = $string_linearesutilizam . "".$p->nome;
if($p->info) $string_linearesutilizam = $string_linearesutilizam . " id_concentrador."&id_linear=".$p->id_linear."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info";
$string_linearesutilizam = $string_linearesutilizam . " id_linear."\" title=\"Progresso\"> ";
if(count($mapa->linearesutilizam)) $string_linearesutilizam = $string_linearesutilizam . "
";
}
}
$linha_divisora = ($string_projetosutilizam || $string_linearesutilizam) ? "" : "";
$conteudo = <<
$mapa->nome
$linha_divisora
$string_projetosutilizam
$string_linearesutilizam
CONTEUDO;
return($conteudo);
}
function monta_infowindow_dashboard($mapa = null)
{
GLOBAL $listProjeto, $listContratoPorProjeto, $VAR_sin;
//Verifica se o mapa é usado por projetos e quais
$string_projetosutilizam = "";
if(count($mapa->projetosutilizam))
{
//Em 9/10 Caio pediu pra tirar o indicador de P - PROJETO do mapa.
$string_projetosutilizam = "";
//if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = "corbg.";\">corbg."; color: ".$VAR_sin['PRJ']->cortxt.";\">".$VAR_sin['PRJ']->letra." ".$VAR_sin['PRJ']->sinp.":
";
foreach($mapa->projetosutilizam as $k => $v)
{
$p = $listProjeto[$v];
if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "".$p->nome;
if($p->info && !$listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_projeto=".$p->id_projeto."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info";
//elseif($listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " Info";
elseif($listContratoPorProjeto[$v]) $string_projetosutilizam = $string_projetosutilizam . " id_concentrador."&id_contrato=".$listContratoPorProjeto[$v]."\" class=\"modal-dinamico cursor-clique\" data-toggle=\"modal\" data-dynamic=\"true\">Info";
$string_projetosutilizam = $string_projetosutilizam . " id_projeto."\" title=\"Progresso\"> ";
if(count($mapa->projetosutilizam) > 1) $string_projetosutilizam = $string_projetosutilizam . "
";
}
}
$conteudo = <<
$mapa->nome
$linha_divisora
$string_projetosutilizam
CONTEUDO;
return($conteudo);
}
function check_email_address($email) {
// First, we check that there's one @ symbol, and that the lengths are right
if (!ereg("[^@]{1,64}@[^@]{1,255}", $email)) {
// Email invalid because wrong number of characters in one section, or wrong number of @ symbols.
return false;
}
// Split it into sections to make life easier
$email_array = explode("@", $email);
$local_array = explode(".", $email_array[0]);
for ($i = 0; $i < sizeof($local_array); $i++) {
if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) {
return false;
}
}
if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) { // Check if domain is IP. If not, it should be valid domain name
$domain_array = explode(".", $email_array[1]);
if (sizeof($domain_array) < 2) {
return false; // Not enough parts to domain
}
for ($i = 0; $i < sizeof($domain_array); $i++) {
if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) {
return false;
}
}
}
return true;
}
function isAlphaNumeric($checkThisString){
$result = true;
$i=0;
while($i47 && $charNum < 58) || ($charNum>64 && $charNum < 91) || ($charNum>96 && $charNum < 123)) )
$result = false;
$i++;
}
return $result;
}
//PARA USAR - SKEMA DO NEY
function base64_unserialize($str){
$ary = unserialize(stripslashes($str));
if (is_array($ary)){
foreach ($ary as $k => $v){
if (is_array(unserialize($v))){
$ritorno[$k]=base64_unserialize($v);
}else{
$ritorno[$k]=base64_decode($v);
}
}
}else{
return false;
}
return $ritorno;
}
function base64_serialize($ary){
if (is_array($ary)){
foreach ($ary as $k => $v){
if (is_array($v)){
$ritorno[$k]=base64_serialize($v);
}else{
$ritorno[$k]=base64_encode($v);
}
}
}else{
return false;
}
return serialize ($ritorno);
}
function Encripta($string) {
// 64 Chars.
$base="u1Astx8CxggMn6OpUt7WyjF4G2cZvb91klthf4RhSiRIIwH3o05mDrEaJdT0B/+0";
//a grande diferenca esta aqui, definimos uma string de 64 caracteres, que pode ser personalizada da maneira que quiserem, desde que sejam sempre 64 caracteres
$b64_str=base64_encode($string);
$i=0;
$j=0;
while ($i < strlen($b64_str)) {
if ($i==64) break;
$k[$i]=$b64_str[$i].$base[$i];
$encoded.=$k[$i];
$i++; }
return $encoded;
}
//o que a funcao fez de especial, foi encriptar em base64 e depois para cada caracter dessa encriptaçao adicion um caracter da nossa cadeia. aumentando o seu tamanho, e a sua dificuldade de perceber qual a encriptaçao feita. (visto que é nossa, é dificil alguem perceber o que fizemos com a string :)
function Decripta($string) {
$i=0;
$j=0;
while ($i < strlen($string)) {
$k[$i]=$string[$j];
$decoded.=$k[$i];
$i++;
$j=$j+2; }
$decoded=base64_decode($decoded);
return $decoded;
}
//para desencriptar basta remover os caracteres que acrescentamos à string :)
//Simples ahh?? claro que é uma encriptaçao simples, mas que serv de exemplo a inumeras maneiras que podemos fazer... nao precisamos de encriptar os caracteres todos, podemos juntar 2 a 2, 4 a 4, 2 em 2, 4 em 4, e aumentar assim a nossa segurança da string.
?>