public function updateTotals(Profissional $pProf, Registro $pRegistro) { try { // atualiza os totais $oRegistro = new Registro(); $oRegistro = $this->getByDate($pProf, $pRegistro->getData()); $t = 0; switch ($oRegistro->getFlag()) { case 6: // entrada manhã + saída manhã $s = $oRegistro->getEntradaManha(); $e = $oRegistro->getSaidaManha(); $t = Data::getTimeDifference($s, $e); $t = Data::timeToDecimal($t); break; case 18: // entrada manhã + saída tarde $s = $oRegistro->getEntradaManha(); $e = $oRegistro->getSaidaTarde(); $t = Data::getTimeDifference($s, $e); $t = Data::timeToDecimal($t); break; case 24: // entrada tarde + saída tarde $s = $oRegistro->getEntradaTarde(); $e = $oRegistro->getSaidaTarde(); $t = Data::getTimeDifference($s, $e); $t = Data::timeToDecimal($t); break; case 30: // tudo $s = $oRegistro->getEntradaManha(); $e = $oRegistro->getSaidaManha(); $t1 = Data::getTimeDifference($s, $e); $t1 = Data::timeToDecimal($t1); $s = $oRegistro->getEntradaTarde(); $e = $oRegistro->getSaidaTarde(); $t2 = Data::getTimeDifference($s, $e); $t2 = Data::timeToDecimal($t2); $t = $t1 + $t2; break; } $oPeriodo = new Periodo(); $oPeriodo->setInicial($oRegistro->getData()); $oPeriodo->setFinal($oRegistro->getData()); $vTrabalhar = $pProf->getHorasTrabalharNoPeriodo($oPeriodo); $vSaldo = $t - $vTrabalhar; $t100 = 0; $t50 = 0; //se tiver saldo e o dia for s�bado, � hora extra a 50% //se for domingo ou feriado, � hora extra a 100% $vData = new DateTime($oRegistro->getData()); if ($vSaldo > 0) { switch (Data::getTipoDia($vData)) { case "Domingo": $t100 = $vSaldo; break; case "Feriado": $t100 = $vSaldo; break; default: $t50 = $vSaldo; break; } } $sql = "UPDATE hor_frequencia SET total = {$t} , h_50 = {$t50}, h_100 = {$t100}\n WHERE data = '{$vData->format("Y-m-d")}' AND cod_prof_funcao = {$pProf->getCodProfFuncao()};"; parent::executar($sql); } catch (Exception $e) { throw new Exception($e->getMessage()); } }
public function podeClicar(Profissional $pProf, Registro $pRegistro) { $pData = new DateTime($pRegistro->getData()); /** return true; // checa se o ponto est� bloqueado // caso positivo, n�o pode clicar $sql = "SELECT locked " . "FROM hor_frequencia " . "WHERE data = '" . $pData->format("Y-m-d") . "' " . "AND cod_prof_funcao = " . $pCodProfFuncao . ";"; $rs = $this->obterRecordSet($sql); if($rs[0]["locked"]) { return false; } **/ // checa se o profissional est� na lista de programa��o $sql = "SELECT entrada, saida " . "FROM hor_autorizacoes " . "WHERE cod_prof_funcao = {$pCodProfFuncao} " . "AND '" . $pData->format("Y-m-d") . "' >= inicio " . "AND '" . $pData->format("Y-m-d") . "' <= fim " . "ORDER BY data ASC;"; $rs = $this->obterRecordSet($sql); if ($rs) { if ($pTurno == "entrada" || $pTurno == "retorno") { if ($pHora >= $rs[0][$pTurno]) { return true; } } else { if ($pTurno == "almoco" || $pTurno == "saida") { if ($pHora <= $rs[0][$pTurno]) { return true; } } } } // proibe clicagem final de semana e feriado $vArray = array("Sábado", "Domingo", "Feriado"); if (in_array(Data::getTipoDia($pData), $vArray)) { return false; } // checa se está clicando dentro da faixa permitida $oHorarioPadrao = new HorarioPadrao($pProf->getCodProfFuncao(), $pData->format("w")); switch ($pRegistro->getCampo()) { case "entrada": $hora = Data::addHoras($oHorarioPadrao->getToleranciaAntes(), $oHorarioPadrao->getEntrada()); if ($pRegistro->getHora() < $hora) { return false; } break; case "almoco": die($oHorarioPadrao->getToleranciaAntes()); if ($pRegistro->getHora() > $oHorarioPadrao->getAlmoco()) { return false; } break; case "retorno": if ($pRegistro->getHora() < $oHorarioPadrao->getRetorno()) { return false; } break; case "saida": $hora = Data::addHoras($oHorarioPadrao->getToleranciaDepois(), $oHorarioPadrao->getSaida()); echo "pode clicar até: {$hora}<br>"; echo "clicando: {$pRegistro->getHora()}<br>"; if ($pRegistro->getHora() > $hora) { return false; } break; } return true; }