package br.com.centralit.citcorpore.integracao;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import br.com.centralit.citcorpore.bean.FaturaDTO;
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;
public class FaturaDao extends CrudDaoDefaultImpl {
public FaturaDao() {
super(Constantes.getValue("DATABASE_ALIAS"), null);
}
public Collection<Field> getFields() {
Collection<Field> listFields = new ArrayList<>();
listFields.add(new Field("idFatura" ,"idFatura", true, true, false, false));
listFields.add(new Field("idContrato" ,"idContrato", false, false, false, false));
listFields.add(new Field("dataInicial" ,"dataInicial", false, false, false, false));
listFields.add(new Field("dataFinal" ,"dataFinal", false, false, false, false));
listFields.add(new Field("descricaoFatura" ,"descricaoFatura", false, false, false, false));
listFields.add(new Field("valorCotacaoMoeda" ,"valorCotacaoMoeda", false, false, false, false));
listFields.add(new Field("dataCriacao" ,"dataCriacao", false, false, false, false));
listFields.add(new Field("dataUltModificacao" ,"dataUltModificacao", false, false, false, false));
listFields.add(new Field("valorPrevistoSomaOS" ,"valorPrevistoSomaOS", false, false, false, false));
listFields.add(new Field("valorSomaGlosasOS" ,"valorSomaGlosasOS", false, false, false, false));
listFields.add(new Field("valorExecutadoSomaOS" ,"valorExecutadoSomaOS", false, false, false, false));
listFields.add(new Field("observacao" ,"observacao", false, false, false, false));
listFields.add(new Field("aprovacaoGestor" ,"aprovacaoGestor", false, false, false, false));
listFields.add(new Field("aprovacaoFiscal" ,"aprovacaoFiscal", false, false, false, false));
listFields.add(new Field("saldoPrevisto" ,"saldoPrevisto", false, false, false, false));
listFields.add(new Field("situacaoFatura" ,"situacaoFatura", false, false, false, false));
return listFields;
}
public String getTableName() {
return this.getOwner() + "Fatura";
}
public Collection list() throws PersistenceException {
return null;
}
public Class getBean() {
return FaturaDTO.class;
}
public Collection find(IDto arg0) throws PersistenceException {
return null;
}
public Collection findByIdContrato(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
List ordenacao = new ArrayList();
condicao.add(new Condition("idContrato", "=", parm));
ordenacao.add(new Order("idGlosaOS"));
return super.findByCondition(condicao, ordenacao);
}
public void deleteByIdContrato(Integer parm) throws PersistenceException {
List condicao = new ArrayList();
condicao.add(new Condition("idContrato", "=", parm));
super.deleteByCondition(condicao);
}
public Collection findByIdContratoAndPeriodoAndSituacao(Integer idContrato, Date dataInicio, Date dataFim, String[] situacao) throws PersistenceException {
List lstParametros = new ArrayList();
String sql = "SELECT idFatura, descricaoFatura, dataInicial, dataFinal, valorCotacaoMoeda, dataCriacao, situacaoFatura, valorPrevistoSomaOS, valorSomaGlosasOS, valorExecutadoSomaOS, ";
sql = sql + " (SELECT COUNT(*) FROM FaturaOS fatOs WHERE fatOs.idFatura = F.idFatura) AS qtdeOS ";
sql = sql + " FROM " + this.getTableName() + " F ";
sql = sql + "WHERE idContrato = ? ";
lstParametros.add(idContrato);
if (situacao != null || (dataInicio != null || dataFim != null)){
if (dataInicio != null && dataFim != null){
sql = sql + "AND ";
sql = sql + " (dataInicial BETWEEN ? AND ?) ";
lstParametros.add(dataInicio);
lstParametros.add(dataFim);
}else{
if (dataInicio != null){
sql = sql + "AND ";
sql = sql + " (dataInicial = ?) ";
lstParametros.add(dataInicio);
}
if (dataFim != null){
sql = sql + "AND ";
sql = sql + " (dataFinal = ?) ";
lstParametros.add(dataFim);
}
}
if (situacao != null){
sql = sql + "AND ";
sql = sql + " (situacaoFatura IN (";
String strSqlAux = "";
for(int i = 0; i < situacao.length; i++){
if (!strSqlAux.equalsIgnoreCase("")){
strSqlAux = strSqlAux + ",";
}
strSqlAux = strSqlAux + "'" + situacao[i] + "'";
}
sql = sql + strSqlAux;
sql = sql + ")) ";
}
}
sql = sql + "ORDER BY dataInicial, dataFinal, idFatura ";
Object[] parametros = lstParametros.toArray();
List lstDados = super.execSQL(sql, parametros);
List fields = new ArrayList();
fields.add("idFatura");
fields.add("descricaoFatura");
fields.add("dataInicial");
fields.add("dataFinal");
fields.add("valorCotacaoMoeda");
fields.add("dataCriacao");
fields.add("situacaoFatura");
fields.add("valorPrevistoSomaOS");
fields.add("valorSomaGlosasOS");
fields.add("valorExecutadoSomaOS");
fields.add("qtdeOS");
return super.listConvertion(FaturaDTO.class, lstDados, fields);
}
public void updateSituacao(Integer idFatura, String situacao, String aprovacaoGestor, String aprovacaoFiscal) throws PersistenceException {
FaturaDTO faturaDto = new FaturaDTO();
faturaDto.setIdFatura(idFatura);
faturaDto.setSituacaoFatura(situacao);
faturaDto.setAprovacaoGestor(aprovacaoGestor);
faturaDto.setAprovacaoFiscal(aprovacaoFiscal);
super.updateNotNull(faturaDto);
}
}