package br.com.ec.repository.jpa;
import java.util.Date;
import java.util.List;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.springframework.stereotype.Repository;
import br.com.ec.core.consulta.ParametrosConsulta;
import br.com.ec.core.util.VerificadorUtil;
import br.com.ec.domain.dto.FormaPagamentoDTO;
import br.com.ec.domain.dto.ParcelaDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaLancamentosDTO;
import br.com.ec.domain.dto.consulta.ParametrosConsultaParcelasDTO;
import br.com.ec.domain.model.FormaPagamento;
import br.com.ec.domain.model.Parcela;
import br.com.ec.repository.ParcelaRepository;
import br.com.ec.repository.SistemaAbstractRepository;
@Repository
public class ParcelaRepositoryJpaImpl
extends SistemaAbstractRepository
<Parcela
> implements ParcelaRepository
{
@
Override
protected String getColunaOrdenadora
() {
return "sequencial";
}
@
Override
protected void setarStringParametrosConsulta
(StringBuilder sql, ParametrosConsulta
<Parcela
> parametrosConsulta
) {
if (VerificadorUtil.
naoEstaNulo(parametrosConsulta
)) {
if (VerificadorUtil.
naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getVigencia())) {
if (((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getVigencia().
getSequencial().
equals(new Long(-
1))) {
sql.
append("AND e.conta.vigencia IS NULL ");
} else {
sql.
append("AND e.conta.vigencia.sequencial = :sequencialVigencia ");
}
}
if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
) parametrosConsulta
).
getCentroDeCustos())) {
if (((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getCentroDeCustos().
getSequencial().
equals(new Long(-
1))) {
sql.
append("AND e.conta.loja IS NULL ");
} else {
sql.
append("AND e.conta.loja.sequencial = :sequencialCentroDeCustos ");
}
}
if (VerificadorUtil.
naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getIndicadorDre())) {
sql.
append("AND e.conta.categoria.indicadorDRE.codigo = :codigoIndicadorDre ");
} else if (((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getPagamentoRealizado()) {
if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataInicialDoPeriodo()) &&
VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataFinalDoPeriodo())) {
sql.
append("AND e.dataPagamento is not null ");
sql.
append("AND e.dataPagamento >= :dataInicial AND e.dataPagamento <= :dataFinal ");
}
} else {
sql.
append("AND e.dataPagamento is null ");
if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataVencimento())) {
sql.
append("AND e.dataVencimento = :dataVencimento ");
}
/*
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoFormaDePagamento())) {
if (((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoFormaDePagamento().equals(TipoCartao.DEBITO.getValor())) {
sql.append("AND e.conta.formaDePagamento.formaPagamento.codigo = 2 ");
} else if (((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoFormaDePagamento().equals(TipoCartao.CREDITO.getValor())) {
sql.append("AND e.conta.formaDePagamento.formaPagamento.codigo in (3, 4, 5, 7, 8, 9, 10, 11, 12, 13) ");
}
}
*/
}
/*
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getContaBancaria())) {
sql.append("AND e.contaBancaria.sequencial = :sequencialContaBancaria ");
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoBusca())) {
if (((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoBusca().equals("R")) {
sql.append("AND e.conta.tipoConta = 'R' ");
}
if (((ParametrosConsultaLancamentosDTO)parametrosConsulta).getTipoBusca().equals("P")) {
sql.append("AND e.conta.tipoConta = 'P' ");
}
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getCategoria())) {
sql.append("AND e.conta.categoria.sequencial = :sequencialCategoria ");
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getFavorecido())) {
sql.append("AND e.conta.pessoa.sequencial = :sequencialPessoa ");
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getFavorecido())) {
sql.append("AND e.conta.pessoa.sequencial = :sequencialPessoa ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getObservacao())) {
sql.append("AND upper(e.observacao) like upper(:observacao) ");
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getOficial())) {
if (((ParametrosConsultaLancamentosDTO)parametrosConsulta).getOficial()) {
sql.append("AND e.indicadorOficial IS TRUE ");
} else {
sql.append("AND e.indicadorOficial IS FALSE ");
}
}
*/
}
}
@
Override
protected void setarQueryParametrosConsulta
(Query query, ParametrosConsulta
<Parcela
> parametrosConsulta
) {
if (VerificadorUtil.
naoEstaNulo(parametrosConsulta
)) {
if (VerificadorUtil.
naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getVigencia())) {
if (!((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getVigencia().
getSequencial().
equals(new Long(-
1))) {
query.
setParameter("sequencialVigencia",
((ParametrosConsultaLancamentosDTO
) parametrosConsulta
).
getVigencia().
getSequencial());
}
}
if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
) parametrosConsulta
).
getCentroDeCustos())) {
if (!((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getCentroDeCustos().
getSequencial().
equals(new Long(-
1))) {
query.
setParameter("sequencialCentroDeCustos",
((ParametrosConsultaLancamentosDTO
) parametrosConsulta
).
getCentroDeCustos().
getSequencial());
}
}
if (VerificadorUtil.
naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getIndicadorDre())) {
query.
setParameter("codigoIndicadorDre",
((ParametrosConsultaLancamentosDTO
) parametrosConsulta
).
getIndicadorDre().
getCodigo());
}
if (((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getPagamentoRealizado()) {
if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataInicialDoPeriodo()) &&
VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataFinalDoPeriodo())) {
query.
setParameter("dataInicial",
((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataInicialDoPeriodo());
query.
setParameter("dataFinal",
((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataFinalDoPeriodo());
}
} else if (VerificadorUtil.
naoEstaNulo(((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataVencimento())) {
query.
setParameter("dataVencimento",
((ParametrosConsultaLancamentosDTO
)parametrosConsulta
).
getDataVencimento());
}
}
/*
if (VerificadorUtil.naoEstaNulo(parametrosConsulta)) {
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getContaBancaria())) {
query.setParameter("sequencialContaBancaria", ((ParametrosConsultaLancamentosDTO)parametrosConsulta).getContaBancaria().getSequencial());
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getCategoria())) {
query.setParameter("sequencialCategoria", ((ParametrosConsultaLancamentosDTO) parametrosConsulta).getCategoria().getSequencial());
}
if (VerificadorUtil.naoEstaNulo(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getFavorecido())) {
query.setParameter("sequencialPessoa", ((ParametrosConsultaLancamentosDTO) parametrosConsulta).getFavorecido().getSequencial());
}
if (VerificadorUtil.naoEstaNuloOuVazio(((ParametrosConsultaLancamentosDTO)parametrosConsulta).getObservacao())) {
query.setParameter("observacao", "%" + ((ParametrosConsultaLancamentosDTO) parametrosConsulta).getObservacao() + "%");
}
}
*/
}
@
Override
protected void setarStringParametrosConsultar
(StringBuilder sql, Parcela parcela
) {
/*
if (VerificadorUtil.naoEstaNulo(parcela)) {
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getConta())) {
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getConta().getSequencial())) {
sql.append("AND e.conta.sequencial = :sequencialConta ");
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getIndicadorAtivo())) {
sql.append("AND e.indicadorAtivo = :indicadorAtivo ");
}
}
*/
}
@
Override
protected void setarQueryParametrosConsultar
(Query query, Parcela parcela
) {
/*
if (VerificadorUtil.naoEstaNulo(parcela)) {
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getConta())) {
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getConta().getSequencial())) {
query.setParameter("sequencialConta", parcela.getConta().getSequencial());
}
}
if (VerificadorUtil.naoEstaNuloOuVazio(parcela.getIndicadorAtivo())) {
query.setParameter("indicadorAtivo", parcela.getIndicadorAtivo());
}
}
*/
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(ParametrosConsultaParcelasDTO parametrosConsultaParcelasDTO
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_COMPLETA_DTO);
sql.
append(") FROM Parcela e ");
sql.
append("WHERE e.indicadorAtivo is true ");
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getTipoBusca())) {
sql.
append("AND e.conta.tipoConta = :tipoConta ");
}
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getSequencialCategoria())) {
sql.
append("AND e.conta.categoria.sequencial = :sequencialCategoria ");
}
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getSequencialContaBancaria())) {
sql.
append("AND e.contaBancaria.sequencial = :sequencialContaBancaria ");
}
if (parametrosConsultaParcelasDTO.
getPagamentoRealizado()) {
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getDataInicial()) &&
VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getDataFinal())) {
sql.
append("AND e.dataPagamento is not null ");
sql.
append("AND e.dataPagamento >= :dataInicial AND e.dataPagamento <= :dataFinal ");
}
}
sql.
append("ORDER BY e.dataVencimento ");
try {
TypedQuery
<ParcelaDTO
> query = getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class);
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getTipoBusca())) {
query.
setParameter("tipoConta", parametrosConsultaParcelasDTO.
getTipoBusca());
}
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getSequencialCategoria())) {
query.
setParameter("sequencialCategoria", parametrosConsultaParcelasDTO.
getSequencialCategoria());
}
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getSequencialContaBancaria())) {
query.
setParameter("sequencialContaBancaria", parametrosConsultaParcelasDTO.
getSequencialContaBancaria());
}
if (parametrosConsultaParcelasDTO.
getPagamentoRealizado()) {
if (VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getDataInicial()) &&
VerificadorUtil.
naoEstaNulo(parametrosConsultaParcelasDTO.
getDataFinal())) {
query.
setParameter("dataInicial", parametrosConsultaParcelasDTO.
getDataInicial());
query.
setParameter("dataFinal", parametrosConsultaParcelasDTO.
getDataFinal());
}
}
return query.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_SEM_CATEGORIA_DTO);
sql.
append(") FROM Parcela e ");
sql.
append("WHERE e.contaBancaria.sequencial = :sequencialContaBancaria ");
sql.
append("AND e.dataVencimento = :dataVencimento ");
sql.
append("AND (e.dataPagamento is null OR e.dataPagamento = :dataVencimento) ");
sql.
append(setarParametrosFormasDePagamento
("e", formasDePagamento
));
sql.
append("AND e.indicadorAtivo is true ");
sql.
append("ORDER BY e.dataVencimento ");
try {
return getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class)
.
setParameter("sequencialContaBancaria", sequencialContaBancaria
)
.
setParameter("dataVencimento", dataRecebimento
)
.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(Long sequencialContaBancaria,
Date dataRecebimentoInicial,
Date dataRecebimentoFinal,
List<FormaPagamentoDTO
> formasDePagamento
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_SEM_CATEGORIA_DTO);
sql.
append(") FROM Parcela e ");
sql.
append("WHERE e.contaBancaria.sequencial = :sequencialContaBancaria ");
sql.
append("AND e.dataVencimento >= :dataRecebimentoInicial AND e.dataVencimento <= :dataRecebimentoFinal ");
sql.
append("AND (e.dataPagamento is null OR ");
sql.
append("(e.dataPagamento >= :dataRecebimentoInicial AND e.dataPagamento <= :dataRecebimentoFinal)) ");
sql.
append(setarParametrosFormasDePagamento
("e", formasDePagamento
));
sql.
append("AND e.indicadorAtivo is true ");
sql.
append("ORDER BY e.dataVencimento ");
try {
return getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class)
.
setParameter("sequencialContaBancaria", sequencialContaBancaria
)
.
setParameter("dataRecebimentoInicial", dataRecebimentoInicial
)
.
setParameter("dataRecebimentoFinal", dataRecebimentoFinal
)
.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelas
(String sqlConsulta
) {
try {
return getEntityManager
().
createQuery(sqlConsulta, ParcelaDTO.
class).
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelasAReceber
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_SEM_CATEGORIA_DTO);
sql.
append(") FROM Parcela e ");
sql.
append("WHERE e.contaBancaria.sequencial = :sequencialContaBancaria ");
sql.
append("AND e.dataVencimento = :dataVencimento ");
sql.
append(setarParametrosFormasDePagamento
("e", formasDePagamento
));
sql.
append("AND e.dataPagamento is null ");
sql.
append("AND e.indicadorAtivo is true ");
sql.
append("ORDER BY e.dataVencimento ");
try {
return getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class)
.
setParameter("sequencialContaBancaria", sequencialContaBancaria
)
.
setParameter("dataVencimento", dataRecebimento
)
.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelasRecebidas
(Long sequencialContaBancaria,
Date dataRecebimento,
List<FormaPagamentoDTO
> formasDePagamento
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_SEM_CATEGORIA_DTO);
sql.
append(") FROM Parcela e ");
sql.
append("WHERE e.contaBancaria.sequencial = :sequencialContaBancaria ");
sql.
append("AND e.dataPagamento = :dataPagamento ");
sql.
append("AND e.indicadorAtivo is true ");
sql.
append(setarParametrosFormasDePagamento
("e", formasDePagamento
));
sql.
append("ORDER BY e.dataVencimento ");
try {
return getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class)
.
setParameter("sequencialContaBancaria", sequencialContaBancaria
)
.
setParameter("dataPagamento", dataRecebimento
)
.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelasDaPessoaEeCategoriaEeVigencia
(Long sequencialPessoa,
Long sequencialCategoria,
Long sequencialVigencia
) {
try {
StringBuilder jpql =
new StringBuilder();
jpql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
jpql.
append(ParcelaDTO.
CONSULTA_SIMPLES_DTO);
// jpql.append("SELECT new br.com.ec.domain.dto.ParcelaDTO(p.sequencial, p.valor, p.dataPagamento, p.dataVencimento) ");
jpql.
append(") FROM Parcela e " );
jpql.
append("WHERE e.conta.pessoa.sequencial = :sequencialPessoa " );
jpql.
append("AND e.conta.categoria.sequencial = :sequencialCategoria " );
jpql.
append("AND e.conta.vigencia.sequencial = :sequencialVigencia " );
return getEntityManager
().
createQuery(jpql.
toString(), br.
com.
ec.
domain.
dto.
ParcelaDTO.
class)
.
setParameter("sequencialPessoa", sequencialPessoa
)
.
setParameter("sequencialCategoria", sequencialCategoria
)
.
setParameter("sequencialVigencia", sequencialVigencia
)
.
getResultList();
} catch (NoResultException e
) {
return null;
}
}
private String setarParametrosFormasDePagamento
(String nomeTabela,
List<FormaPagamentoDTO
> formasPagamento
) {
StringBuilder sql =
new StringBuilder();
if (VerificadorUtil.
isListaComElementos(formasPagamento
)) {
sql.
append("AND ");
sql.
append(nomeTabela
);
sql.
append(".formaPagamento.codigo IN (");
for (FormaPagamentoDTO formaPagamento : formasPagamento
) {
sql.
append(formaPagamento.
getCodigo() +
",");
}
sql.
append(") ");
}
return sql.
toString().
replace(",)",
")");
}
@
Override
public void conciliarParcelas
(Date dataConciliacao,
List<ParcelaDTO
> parcelasSelecionadas
) {
StringBuilder sql =
new StringBuilder();
sql.
append("UPDATE Parcela parcela SET parcela.dataPagamento = :dataPagamento, parcela.indicadorConciliado = true ");
sql.
append("WHERE parcela.sequencial IN (");
StringBuilder sqlParcelas =
new StringBuilder("");
for (ParcelaDTO parcelaDTO : parcelasSelecionadas
) {
sqlParcelas.
append(parcelaDTO.
getSequencial() +
",");
}
sqlParcelas.
append(") ");
sql.
append(sqlParcelas.
toString().
replace(",)",
")"));
try {
getEntityManager
().
createQuery(sql.
toString())
.
setParameter("dataPagamento", dataConciliacao
)
.
executeUpdate();
getEntityManager
().
flush();
} catch(Exception ex
) {
ex.
printStackTrace();
}
}
@
Override
public void alterarObservacao
(Long sequencial,
String observacao
) {
StringBuilder sql =
new StringBuilder();
sql.
append("UPDATE Parcela p SET p.observacao = :observacao ");
sql.
append("WHERE p.sequencial = :sequencial ");
try {
getEntityManager
().
createQuery(sql.
toString())
.
setParameter("sequencial", sequencial
)
.
setParameter("observacao", observacao
)
.
executeUpdate();
getEntityManager
().
flush();
} catch(Exception ex
) {
ex.
printStackTrace();
}
}
@
Override
public Double obterValorPassandoParametrosConsulta
(ParametrosConsulta
<Parcela
> parametrosConsulta
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT DISTINCT SUM(e.valor) FROM Parcela e ");
sql.
append("WHERE e.indicadorAtivo is true ");
try {
setarStringParametrosConsulta
(sql, parametrosConsulta
);
TypedQuery
<Double> query = getEntityManager
().
createQuery(sql.
toString(),
Double.
class);
setarQueryParametrosConsulta
(query, parametrosConsulta
);
return query.
getSingleResult();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public List<ParcelaDTO
> consultarParcelasPassandoParametrosConsulta
(ParametrosConsulta
<Parcela
> parametrosConsulta
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT new br.com.ec.domain.dto.ParcelaDTO(");
sql.
append(ParcelaDTO.
CONSULTA_COMPLETA_DTO);
sql.
append(") FROM Parcela e ");
// sql.append("SELECT DISTINCT SUM(e.valor) FROM Parcela e ");
sql.
append("WHERE e.indicadorAtivo is true ");
try {
setarStringParametrosConsulta
(sql, parametrosConsulta
);
TypedQuery
<ParcelaDTO
> query = getEntityManager
().
createQuery(sql.
toString(), ParcelaDTO.
class);
setarQueryParametrosConsulta
(query, parametrosConsulta
);
return query.
getResultList();
} catch(Exception ex
) {
ex.
printStackTrace();
return null;
}
}
@
Override
public Boolean verificarPossuiParcelaEmAberta
(Long sequencialConta,
Long sequencialVenda
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT COUNT(p) FROM Parcela p WHERE p.dataPagamento is null AND p.indicadorAtivo = true ");
if (VerificadorUtil.
naoEstaNulo(sequencialConta
)) {
sql.
append("AND p.conta.sequencial = :sequencialConta ");
}
if (VerificadorUtil.
naoEstaNulo(sequencialVenda
)) {
sql.
append("AND p.conta.venda.sequencial = :sequencialVenda ");
}
TypedQuery
<Long> query = getEntityManager
().
createQuery(sql.
toString(),
Long.
class);
if (VerificadorUtil.
naoEstaNulo(sequencialConta
)) {
query.
setParameter("sequencialConta", sequencialConta
);
}
if (VerificadorUtil.
naoEstaNulo(sequencialVenda
)) {
query.
setParameter("sequencialVenda", sequencialVenda
);
}
return query.
getSingleResult().
intValue() > 0;
}
@
Override
public List<Parcela
> consultarParcelasDaConta
(Long sequencialConta
) {
StringBuilder sql =
new StringBuilder();
sql.
append("SELECT p FROM Parcela p WHERE p.indicadorAtivo = true ");
sql.
append("AND p.conta.sequencial = :sequencialConta ");
return getEntityManager
().
createQuery(sql.
toString(), Parcela.
class).
setParameter("sequencialConta", sequencialConta
).
getResultList();
}
@
Override
public void atualizarValorParcela
(ParcelaDTO parcelaDTO
) {
StringBuilder sql =
new StringBuilder();
sql.
append("UPDATE Parcela parcela SET parcela.valor = :valorNovo ");
sql.
append("WHERE parcela.sequencial = :sequencialParcela ");
try {
getEntityManager
().
createQuery(sql.
toString())
.
setParameter("sequencialParcela", parcelaDTO.
getSequencial())
.
setParameter("valorNovo", parcelaDTO.
getValor())
.
executeUpdate();
getEntityManager
().
flush();
} catch(Exception ex
) {
ex.
printStackTrace();
}
}
@
Override
public void atualizarCentroDeCustos
(Long sequencialConta,
Long sequencialCentroDeCustos
) {
StringBuilder sql =
new StringBuilder();
sql.
append("UPDATE Conta c SET c.loja.sequencial = :sequencialCentroDeCustos ");
sql.
append("WHERE c.sequencial = :sequencialConta ");
try {
getEntityManager
().
createQuery(sql.
toString())
.
setParameter("sequencialCentroDeCustos", sequencialCentroDeCustos
)
.
setParameter("sequencialConta", sequencialConta
)
.
executeUpdate();
getEntityManager
().
flush();
} catch(Exception ex
) {
ex.
printStackTrace();
}
}
@
Override
public void efetivarConciliacaoAntecipacao
(String sqlAtualizacaoParcelas
) {
try {
getEntityManager
().
createNativeQuery(sqlAtualizacaoParcelas
).
executeUpdate();
getEntityManager
().
flush();
} catch(Exception ex
) {
ex.
printStackTrace();
}
}
/*
@Override
public List<Parcela> consultarParcelas(ParametrosConsultaLancamentosDTO parametrosConsulta) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT p FROM Parcela p ");
sql.append("WHERE ((p.dataPagamento IS NOT NULL AND p.dataPagamento >= :dataInicial AND p.dataPagamento <= :dataFinal) ");
sql.append("OR (p.dataPagamento IS NULL AND p.dataVencimento <= :dataFinal)) ");
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoBusca())) {
sql.append("AND p.conta.tipoConta = :tipoConta ");
}
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCentroDeCustos())) {
if (parametrosConsulta.getCentroDeCustos().getSequencial().equals(new Long(-1))) {
sql.append("AND p.conta.loja IS NULL ");
} else {
sql.append("AND p.conta.loja.sequencial = :sequencialCentroDeCustos ");
}
}
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoria())) {
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoria().getSequencial())) {
sql.append("AND p.conta.categoria.sequencial = :sequencialCategoria ");
} else {
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoriaPai().getSequencial())) {
sql.append("AND p.conta.categoria.sequencial = :sequencialCategoriaPai ");
} else {
sql.append("AND p.conta.categoria IS NULL ");
}
}
}
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getOficial())) {
if (parametrosConsulta.getOficial()) {
sql.append("AND p.indicadorOficial IS TRUE ");
} else {
sql.append("AND p.indicadorOficial IS FALSE ");
}
}
sql.append("ORDER BY p.dataVencimento ");
try {
TypedQuery<Parcela> query = getEntityManager().createQuery(sql.toString(), Parcela.class)
.setParameter("dataInicial", parametrosConsulta.getDataInicial())
.setParameter("dataFinal", parametrosConsulta.getDataFinal());
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getTipoBusca())) {
query.setParameter("tipoConta", parametrosConsulta.getTipoBusca());
}
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCentroDeCustos())) {
if (!parametrosConsulta.getCentroDeCustos().getSequencial().equals(new Long(-1))) {
query.setParameter("sequencialCentroDeCustos", parametrosConsulta.getCentroDeCustos().getSequencial());
}
}
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoria())) {
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoria().getSequencial())) {
query.setParameter("sequencialCategoria", parametrosConsulta.getCategoria().getSequencial());
} else {
if (VerificadorUtil.naoEstaNulo(parametrosConsulta.getCategoriaPai().getSequencial())) {
query.setParameter("sequencialCategoriaPai", parametrosConsulta.getCategoriaPai().getSequencial());
}
}
}
return query.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Parcela> consultarParcelasAVencer(Conta conta) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT p FROM Parcela p ");
sql.append("WHERE p.conta.sequencial = :sequencialConta ");
sql.append("AND p.dataPagamento is null ");
sql.append("ORDER BY p.sequencial ");
try {
return getEntityManager().createQuery(sql.toString(), Parcela.class)
.setParameter("sequencialConta", conta.getSequencial())
.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Parcela> consultarParcelasRecebidas(Date dataRecebimento, TipoCartao tipoCartao) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT p FROM Parcela p ");
sql.append("WHERE p.dataVencimento = :dataVencimento ");
sql.append("AND p.observacao like UPPER(:observacao) ");
sql.append("AND p.dataPagamento is not null ");
sql.append("ORDER BY p.dataVencimento ");
try {
return getEntityManager().createQuery(sql.toString(), Parcela.class)
.setParameter("dataVencimento", dataRecebimento)
.setParameter("observacao", StringUtil.setarUpperCase("%" + tipoCartao.getDescricao() + "%"))
.getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Parcela> consultarPassandoParametrosConsulta(ParametrosConsulta<Parcela> parametrosConsulta,
Integer primeiroRegistro, Integer tamanhoPagina, String sortField, String sortOrder,
Map<String, Object> filters) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT DISTINCT e FROM Parcela e ");
sql.append("WHERE e.indicadorAtivo is true ");
try {
setarStringParametrosConsulta(sql, parametrosConsulta);
sql.append("ORDER BY " + ((ParametrosConsultaLancamentosDTO)parametrosConsulta).getOrdenacao());
TypedQuery<Parcela> query = getEntityManager().createQuery(sql.toString(), Parcela.class);
setarQueryParametrosConsulta(query, parametrosConsulta);
return query.setFirstResult(primeiroRegistro).setMaxResults(tamanhoPagina).getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public List<Parcela> consultarParcelasDaVenda(Long sequencialVenda) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT p FROM Parcela p ");
sql.append("WHERE p.conta.venda.sequencial = :sequencialVenda ");
sql.append("ORDER BY p.dataVencimento ");
try {
return getEntityManager().createQuery(sql.toString(), Parcela.class).setParameter("sequencialVenda", sequencialVenda).getResultList();
} catch(Exception ex) {
ex.printStackTrace();
return null;
}
}
@Override
public Boolean verificarPossuiParcelaAbertaParaPagamento(Conta conta) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(p) FROM Parcela p WHERE p.dataPagamento is null AND p.indicadorAtivo = true ");
sql.append("AND p.conta.sequencial = :sequencialConta ");
TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
query.setParameter("sequencialConta", conta.getSequencial());
return query.getSingleResult().intValue()>0;
}
@Override
public Boolean verificarPossuiParcela(Venda venda) {
StringBuilder sql = new StringBuilder();
sql.append("SELECT COUNT(p) FROM Parcela p WHERE p.indicadorAtivo = true ");
sql.append("AND p.conta.venda.sequencial = :sequencialVenda ");
TypedQuery<Long> query = getEntityManager().createQuery(sql.toString(), Long.class);
query.setParameter("sequencialVenda", venda.getSequencial());
return query.getSingleResult().intValue()>0;
}
*/
}