package br.com.centralit.citcorpore.integracao; import java.util.ArrayList; import java.util.Collection; import java.util.List; import br.com.centralit.citcorpore.bean.DespesaViagemDTO; import br.com.citframework.dto.IDto; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.integracao.Condition; import br.com.citframework.integracao.CrudDaoDefaultImpl; import br.com.citframework.integracao.Field; import br.com.citframework.integracao.Order; import br.com.citframework.util.Constantes; @SuppressWarnings({"rawtypes","unchecked"}) public class DespesaViagemDAO extends CrudDaoDefaultImpl { public DespesaViagemDAO(){ super(Constantes.getValue("DATABASE_ALIAS"), null); } @Override public Collection find(IDto obj) throws PersistenceException { return null; } @Override public String getTableName() { return this.getOwner() + "despesaviagem"; } @Override public Collection list() throws PersistenceException { return null; } @Override public Class getBean() { return DespesaViagemDTO.class; } @Override public Collection<Field> getFields() { Collection<Field> listFields = new ArrayList<>(); listFields.add(new Field("iddespesaviagem" ,"idDespesaViagem", true, true, false, false)); listFields.add(new Field("datainicio" ,"dataInicio", false, false, false, false)); listFields.add(new Field("datafim" ,"dataFim", false, false, false, false)); listFields.add(new Field("idroteiro" ,"idRoteiro", false, false, false, false)); listFields.add(new Field("idtipo" ,"idTipo", false, false, false, false)); listFields.add(new Field("idparceiro" ,"idFornecedor", false, false, false, false)); listFields.add(new Field("valor" ,"valor", false, false, false, false)); listFields.add(new Field("validade" ,"validade", false, false, false, false)); listFields.add(new Field("original" ,"original", false, false, false, false)); listFields.add(new Field("idsolicitacaoservico" ,"idSolicitacaoServico", false, false, false, false)); listFields.add(new Field("prestacaocontas" ,"prestacaoContas", false, false, false, false)); listFields.add(new Field("situacao" ,"situacao", false, false, false, false)); listFields.add(new Field("quantidade" ,"quantidade", false, false, false, false)); listFields.add(new Field("datahoracompra" ,"dataHoraCompra", false, false, false, false)); listFields.add(new Field("idresponsavelcompra" ,"idResponsavelCompra", false, false, false, false)); listFields.add(new Field("idmoeda" ,"idMoeda", false, false, false, false)); listFields.add(new Field("idformapagamento" ,"idFormaPagamento", false, false, false, false)); listFields.add(new Field("observacoes" ,"observacoes", false, false, false, false)); return listFields; } /** * Retorna a despesa do integrante com o idroteiro passado * * @param idSolicitacaoServico * @return * @throws Exception * @author renato.jesus */ public Collection<DespesaViagemDTO> findDespesaViagemByIdRoteiro(Integer idroteiro) throws PersistenceException { List condicao = new ArrayList(); List result = new ArrayList<DespesaViagemDTO>(); List ordenacao= new ArrayList(); condicao.add(new Condition("idRoteiro", "=", idroteiro)); ordenacao.add(new Order("idDespesaViagem")); result = (List) super.findByCondition(condicao, ordenacao); if(result != null && !result.isEmpty()) { return result; } return null; } /** * Retorna a despesa do integrante com o idroteiro passado * * @param idSolicitacaoServico * @return * @throws Exception * @author renato.jesus */ public Collection<DespesaViagemDTO> findDespesaViagemByIdSolicitacao(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); List ordenacao = new ArrayList(); List result = new ArrayList<DespesaViagemDTO>(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition("dataFim", "is", null)); ordenacao.add(new Order("validade")); result = (List) super.findByCondition(condicao, ordenacao); if(result != null && !result.isEmpty()) { return result; } return null; } /** * Retorna a despesa do integrante com o idroteiro e se permite ('S') ou n�o adiantamento ('N') * * @param idRoteiro * @param permiteAdiantamento * @return * @throws Exception * @author renato.jesus */ public Collection<DespesaViagemDTO> findDespesaViagemByIdRoteiroAndPermiteAdiantamento(Integer idRoteiro, String permiteAdiantamento) throws PersistenceException { ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = (ArrayList) this.getFields(); StringBuilder sql = new StringBuilder(); sql.append("SELECT despesaviagem.* FROM "); sql.append("despesaviagem "); sql.append("LEFT JOIN tipomovimfinanceiraviagem "); sql.append("ON despesaviagem.idtipo=tipomovimfinanceiraviagem.idtipomovimfinanceiraviagem "); sql.append("WHERE despesaviagem.idroteiro=? "); sql.append("AND tipomovimfinanceiraviagem.permiteadiantamento=? "); parametros.add(idRoteiro); parametros.add(permiteAdiantamento); list = this.execSQL(sql.toString(), parametros.toArray()); return listConvertion(DespesaViagemDTO.class, list, fields); } /** * Busca o valor total da viagem pelo idsolicitacao, e calculado todo o valor desde os itens originais at� os de remarca��o * * @param idSolicitacao * @return * @throws Exception */ public Double buscaValorTotalViagem(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); Collection<DespesaViagemDTO> result = new ArrayList<DespesaViagemDTO>(); Double valorTotal = 0.0; condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); result = super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { for(DespesaViagemDTO dto: result){ valorTotal = (dto.getValor()*dto.getQuantidade()) + valorTotal; } } return valorTotal; } public Double buscaValorTotalViagemAtivo(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); Collection<DespesaViagemDTO> result = new ArrayList<DespesaViagemDTO>(); Double valorTotal = 0.0; condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition("dataFim", "is", null)); result = super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { for(DespesaViagemDTO dto: result){ valorTotal = (dto.getValor()*dto.getQuantidade()) + valorTotal; } } return valorTotal; } public Double buscaValorTotalViagemInativo(Integer idSolicitacao) throws PersistenceException { List condicao = new ArrayList(); Collection<DespesaViagemDTO> result = new ArrayList<DespesaViagemDTO>(); Double valorTotal = 0.0; condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition("dataFim", "is not", null)); result = super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { for(DespesaViagemDTO dto: result){ valorTotal = (dto.getValor()*dto.getQuantidade()) + valorTotal; } } return valorTotal; } /** * Busca o valor de historico da viagem, � calculado apenas o valor dos itens originais * * @param idSolicitacao * @return * @throws Exception */ public Double buscaValorViagemHistorico(Integer idSolicitacao) throws PersistenceException { Collection<DespesaViagemDTO> result = new ArrayList<DespesaViagemDTO>(); Double valorTotal = 0.0; ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = (ArrayList) this.getFields(); StringBuilder sql = new StringBuilder(); sql.append("select despesaviagem.* from despesaviagem where idsolicitacaoservico=? and (situacao<>'Remarcacao' or situacao is null);"); parametros.add(idSolicitacao); list = this.execSQL(sql.toString(), parametros.toArray()); result = listConvertion(DespesaViagemDTO.class, list, fields); if(result != null && !result.isEmpty()) { for(DespesaViagemDTO dto: result){ valorTotal = (dto.getValor()*dto.getQuantidade()) + valorTotal; } } return valorTotal; } /** * Lista todos os itens ligado ao idsolicitacao e idroteiro passado * * @param idSolicitacao * @param idRoteiro * @return * @throws Exception */ public Collection<DespesaViagemDTO> listaItensCompra(Integer idSolicitacao, Integer idRoteiro) throws PersistenceException { List condicao = new ArrayList(); Collection<DespesaViagemDTO> result = new ArrayList<DespesaViagemDTO>(); condicao.add(new Condition("idSolicitacaoServico", "=", idSolicitacao)); condicao.add(new Condition("idRoteiro", "=", idRoteiro)); result = super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { return result; } return null; } /** * Retorna a despesa com datafim null do integrante com o idroteiro passado * * @param idSolicitacaoServico * @return * @throws Exception * @author thiago.borges */ public Collection<DespesaViagemDTO> findDespesasAtivasViagemByIdRoteiro(Integer idroteiro) throws PersistenceException { List condicao = new ArrayList(); List result = new ArrayList<DespesaViagemDTO>(); condicao.add(new Condition("idRoteiro", "=", idroteiro)); condicao.add(new Condition("dataFim", "is", null)); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { return result; } return null; } /** * Retorna todas as despesas relacionadas ao roteiro passado * * @param idRoteiro * @return * @throws Exception * @author thiago.borges */ public Collection<DespesaViagemDTO> findTodasDespesasViagemByIdRoteiro(Integer idroteiro) throws PersistenceException { List condicao = new ArrayList(); List result = new ArrayList<DespesaViagemDTO>(); condicao.add(new Condition("idRoteiro", "=", idroteiro)); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { return result; } return null; } /** * TODO Este metodo esta em desuso, pode ser removido na proxima vers�o */ public Collection<DespesaViagemDTO> findHitoricoDespesaViagemByIdRoteiro(Integer idroteiro) throws PersistenceException { List condicao = new ArrayList(); List result = new ArrayList<DespesaViagemDTO>(); condicao.add(new Condition("idRoteiro", "=", idroteiro)); condicao.add(new Condition("dataFim", "is not", null)); result = (List) super.findByCondition(condicao, null); if(result != null && !result.isEmpty()) { return result; } return null; } /** * Retorna o valor total apenas dos itens que exigem presta��o de contas * * @param idSolicitacao * @param idEmpregado * @return * @throws Exception */ public Double getTotalDespesaViagemPrestacaoContas(Integer idSolicitacao, Integer idEmpregado) throws PersistenceException { ArrayList parametros = new ArrayList(); List list = new ArrayList(); List fields = (ArrayList) this.getFields(); Double valorTotal = 0.0; StringBuilder sql = new StringBuilder(); sql.append("SELECT despesaviagem.* FROM "); sql.append("despesaviagem "); sql.append("LEFT JOIN tipomovimfinanceiraviagem "); sql.append("ON despesaviagem.idtipo=tipomovimfinanceiraviagem.idtipomovimfinanceiraviagem "); sql.append("LEFT JOIN integranteviagem "); sql.append("ON integranteviagem.idempregado=? "); sql.append("LEFT JOIN roteiroviagem "); sql.append("ON integranteviagem.idintegranteviagem=roteiroviagem.idintegrante "); sql.append("WHERE despesaviagem.idsolicitacaoservico=? "); sql.append("AND despesaviagem.idroteiro=roteiroviagem.idroteiroviagem "); sql.append("AND tipomovimfinanceiraviagem.exigeprestacaoconta='S'"); parametros.add(idEmpregado); parametros.add(idSolicitacao); list = this.execSQL(sql.toString(), parametros.toArray()); Collection<DespesaViagemDTO> colDespesaViagem = listConvertion(DespesaViagemDTO.class, list, fields); if(colDespesaViagem != null && !colDespesaViagem.isEmpty()) { for(DespesaViagemDTO despesaViagemDTO : colDespesaViagem){ valorTotal = (despesaViagemDTO.getValor()*despesaViagemDTO.getQuantidade()) + valorTotal; } } return valorTotal; } }