public function validaDatasMovimentacao($dados) { $dataSaida = DateUtil::criarDataHora($dados['dataSaida'], $dados['horaSaida']); $dataRetorno = DateUtil::criarDataHora($dados['dataRetorno'], $dados['horaRetorno']); //Caso seja alteração (terá um id) não compara com o próprio registro $id = $dados['id'] ? $dados['id'] : 0; $qb = $this->createQueryBuilder('m')->where('m.placaVeiculo = :placaVeiculo')->andWhere("m.id != :id ")->andWhere("\n :dataSaida between m.dataSaida and m.dataRetorno\n or\n :dataRetorno between m.dataSaida and m.dataRetorno\n ")->setParameter('placaVeiculo', $dados[placaVeiculo])->setParameter('dataSaida', $dataSaida)->setParameter('dataRetorno', $dataRetorno)->setParameter('id', $id); $trechos = $qb->getQuery()->getResult(); return $trechos; }
public function alterarOcorrencia($dados) { try { $this->validarOcorrencia($dados); $this->em->beginTransaction(); $ocorrencia = $this->em->find("Frota\\Model\\Entity\\Ocorrencia", $dados['id']); $ocorrencia->setVeiculo($this->em->getReference("Frota\\Model\\Entity\\Veiculo", $dados['placaVeiculo'])); $ocorrencia->setHodometro($dados['hodometro']); $ocorrencia->setMatriculaResponsavel($this->em->getReference("Frota\\Model\\Entity\\Motorista", $dados['motorista'])); $ocorrencia->setData(DateUtil::criarDataHora($dados['data'], $dados['hora'])); $ocorrencia->setLocal($dados['local']); $ocorrencia->setObservacao($dados['observacao']); if ($dados['usaEcoFrotas']) { $ocorrencia->setCnpj($dados['cnpj']); $ocorrencia->setCartao($dados['cartao']); $ocorrencia->setFatura($dados['fatura']); $ocorrencia->setTransacao($dados['transacao']); } else { $ocorrencia->setCnpj(null); $ocorrencia->setCartao(null); $ocorrencia->setFatura(null); $ocorrencia->setTransacao(null); } $ocorrencia->setLotacao($this->em->getReference("Frota\\Model\\Entity\\Lotacao", $dados['lotacao']['codigo'])); // $ocorrencia->setItens(null); $this->em->persist($ocorrencia); $this->em->flush(); //Remove os antigos itens da ocorrencia foreach ($ocorrencia->getItens() as $item) { $this->em->remove($item); } $this->em->flush(); //Inclui os itens da ocorrencia foreach ($dados['itens'] as $itemOcorrencia) { $item = new ItemOcorrenciaEntity($itemOcorrencia); $item->setTipoItemOcorrencia($this->em->getReference("Frota\\Model\\Entity\\TipoItemOcorrencia", $itemOcorrencia['tipoItemOcorrencia']['id'])); $item->setQuantidade($itemOcorrencia['quantidade']); $item->setValorTotal($itemOcorrencia['valorTotal']); $item->setValorServico($itemOcorrencia['valorServico']); $item->setOcorrencia($ocorrencia); $this->em->persist($item); } $this->em->persist($ocorrencia); $this->em->flush(); $this->em->commit(); } catch (Exception $exc) { if ($this->em->getConnection()->isTransactionActive()) { $this->em->rollback(); } throw $exc; } return $ocorrencia; }
public function validarMovimentacao($dados) { if (!$dados['placaVeiculo']) { throw new ValidacaoException('Veículo não informado!'); } if (!$dados['dataSolicitacao']) { throw new ValidacaoException('Data da Solicitação não informada!'); } else { try { $dataSolicitacao = DateUtil::criarData($dados['dataSolicitacao']); if (!$dataSolicitacao) { throw new ValidacaoException('Data da Solicitação inválida!'); } } catch (Exception $ex) { throw new ValidacaoException('Data da Solicitação inválida!'); } } if (!$dados['horaSolicitacao']) { throw new ValidacaoException('Hora da solicitação não informada!'); } if (!$dados['itinerario']) { throw new ValidacaoException('Itinerário não informado!'); } if (!$dados['dataSaida']) { throw new ValidacaoException('Data de Saída não informada!'); } else { try { $dataSaida = DateUtil::criarData($dados['dataSaida']); if (!$dataSaida) { throw new ValidacaoException('Data de Saída inválida!'); } } catch (Exception $ex) { throw new ValidacaoException('Data de Saída inválida!'); } } if (!$dados['horaSaida']) { throw new ValidacaoException('Hora da saída não informada!'); } if (!$dados['dataRetorno']) { throw new ValidacaoException('Data de Retorno não informada!'); } else { try { $dataRetorno = DateUtil::criarData($dados['dataRetorno']); if (!$dataRetorno) { throw new ValidacaoException('Data de Retorno inválida!'); } } catch (Exception $ex) { throw new ValidacaoException('Data de Retorno inválida!'); } } if (!$dados['horaRetorno']) { throw new ValidacaoException('Hora do retorno não informada!'); } if (DateUtil::criarDataHora($dados['dataSolicitacao'], $dados['horaSolicitacao']) > DateUtil::criarDataHora($dados['dataSaida'], $dados['horaSaida'])) { throw new ValidacaoException('A Data de Solicitação deve ser igual ou anterior à Data de Saída!'); } if (DateUtil::criarDataHora($dados['dataRetorno'], $dados['horaRetorno']) < DateUtil::criarDataHora($dados['dataSaida'], $dados['horaSaida'])) { throw new ValidacaoException('A Data de Retorno deve ser igual ou posterior à Data de Saída!'); } if (DateUtil::criarDataHora($dados['dataSolicitacao'], $dados['horaSolicitacao']) > DateUtil::criarDataHora($dados['dataRetorno'], $dados['horaRetorno'])) { throw new ValidacaoException('A Data de Solicitação deve ser igual ou anterior à Data de Retorno!'); } if (!$dados['hodometroSaida']) { throw new ValidacaoException('Hodômetro de Saída não informado!'); } if (!$dados['hodometroRetorno']) { throw new ValidacaoException('Hodômetro de Retorno não informado!'); } if ($dados['hodometroRetorno'] <= $dados['hodometroSaida']) { throw new ValidacaoException('A marcação do Hodômetro de Retorno deve ser maior que a do Hodômetro de Saída!'); } if (!$dados['combustivelInicial']) { throw new ValidacaoException('Combustível inicial não informado!'); } if (!$dados['solicitante']) { throw new ValidacaoException('Solicitante não informado!'); } if (!$dados['motorista']) { throw new ValidacaoException('Motorista não informado!'); } if (!$dados['passageiros'] && !$dados['outrosPassageiros']) { throw new ValidacaoException('Nenhum passageiro informado!'); } if ($this->getRepository()->validaDatasMovimentacao($dados)) { throw new ValidacaoException('Existe uma movimentação para o veículo no período informado!'); } if ($this->getRepository()->validaHodometrosMovimentacao($dados)) { throw new ValidacaoException('Existe uma movimentação para o veículo neste intervalo dos hodômetros!'); } }