diff --git a/src/com/rjconsultores/ventaboletos/constantes/Constantes.java b/src/com/rjconsultores/ventaboletos/constantes/Constantes.java index abbfc4de7..5dff1b97a 100644 --- a/src/com/rjconsultores/ventaboletos/constantes/Constantes.java +++ b/src/com/rjconsultores/ventaboletos/constantes/Constantes.java @@ -14,6 +14,7 @@ public class Constantes { public static final Long FORMA_PAGO_DEBITO = new Long(3); public static final Long FORMA_PAGO_GERACAO_OCD = new Long(35); public static final Long FORMA_PAGO_TROCA_PASSAGEM = new Long(10); + public static final Long FORMA_PAGO_ORDEN_SERVICIO = new Long(11); public static final Long MVO_CANCEL_CANCELACION = new Long(31); public static final Long MVO_CANCEL_DEVOLUCAO = new Long(32); diff --git a/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java b/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java index 45cbbfa00..a0aa274b6 100644 --- a/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java @@ -2,6 +2,7 @@ package com.rjconsultores.ventaboletos.dao; import java.util.Date; import java.util.List; +import java.util.Map; import com.rjconsultores.ventaboletos.entidad.Comissao; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; @@ -14,8 +15,10 @@ public interface ComissaoDAO extends GenericDAO { public Comissao buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, String competencia); - public List buscaHistoricoComissao(Integer puntoVentaId, Integer empresaId, Date periodoInicio, Date periodoFim); + public List buscaHistoricoComissao(Map parametros); public List buscaPuntoVentasEmpresaComComissaoParametrizada(Integer empresaId); + public Comissao buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal); + } diff --git a/src/com/rjconsultores/ventaboletos/dao/ConferenciaComissaoDAO.java b/src/com/rjconsultores/ventaboletos/dao/ConferenciaComissaoDAO.java index a2ecb66f8..d57edb871 100644 --- a/src/com/rjconsultores/ventaboletos/dao/ConferenciaComissaoDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/ConferenciaComissaoDAO.java @@ -59,5 +59,7 @@ public interface ConferenciaComissaoDAO extends GenericDAO { public boolean isConferidoVenta(BoletoComissao boletoComissao); public void borrarLogConferenciaTransacaoId(Long transacaoId) throws BusinessException; + + public boolean isConferenciaCompetenciaEncerrada(Date dataInicial, Date dataFinal, Empresa empresa, PuntoVenta puntoVenta) throws BusinessException; } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java index bc5152609..4e129e58c 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java @@ -1,8 +1,10 @@ package com.rjconsultores.ventaboletos.dao.hibernate; -import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import org.hibernate.Query; import org.hibernate.SessionFactory; @@ -116,10 +118,10 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO } @Override - public List buscaHistoricoComissao(Integer puntoVentaId, Integer empresaId, Date periodoInicio, Date periodoFim) { + public List buscaHistoricoComissao(Map parametros) { - String competenciaInicio = DateUtil.getStringDate(periodoInicio, "MM/yyyy"); - String competenciaFim = DateUtil.getStringDate(periodoFim, "MM/yyyy"); + /*String competenciaInicio = DateUtil.getStringDate(periodoInicio, "MM/yyyy"); + String competenciaFim = DateUtil.getStringDate(periodoFim, "MM/yyyy");*/ StringBuilder sql = new StringBuilder(); sql.append("SELECT c.competencia AS competencia, pv.nombpuntoventa, pv.numpuntoventa, "); @@ -144,11 +146,8 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO sql.append(" ul.nombusuario AS usuarioLancamento, "); sql.append(" e.nombempresa, e.cnpj, "); sql.append(" pa.numagencia as agencia, pa.numconta || '-' || pa.digito as conta, if.nome as banco, "); - sql.append(" ci.nombciudad as cidade, pv.descCorreo, pv.razonsocial, pv.numdocpuntoventa as cnpjPuntoventa "); - /* - private String sigla; - private String nome; - */ + sql.append(" ci.nombciudad as cidade, pv.descCorreo, pv.razonsocial, pv.numdocpuntoventa as cnpjPuntoventa, "); + sql.append(" c.data_inicial as dataInicial, c.data_final as dataFinal "); sql.append("FROM comissao c "); sql.append("JOIN punto_venta pv on pv.puntoventa_id = c.puntoventa_id "); sql.append("JOIN empresa e on e.empresa_id = c.empresa_id "); @@ -158,14 +157,31 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO sql.append("LEFT JOIN ciudad ci on ci.ciudad_id = co.ciudad_id "); sql.append("LEFT JOIN usuario up ON up.usuario_id = c.usuariopagamento_id "); sql.append("LEFT JOIN usuario ul ON ul.usuario_id = c.usuario_id "); - sql.append("WHERE c.activo = 1 "); - sql.append(" AND c.empresa_id = :empresaId "); - sql.append(" AND TO_DATE(c.competencia,'MM/YYYY') BETWEEN TO_DATE(:periodoInicio,'MM/YYYY') and TO_DATE(:periodoFim,'MM/YYYY') "); + sql.append("WHERE c.activo = 1 "); - if(puntoVentaId != null) { + if(parametros.containsKey("empresaId")) { + sql.append(" AND c.empresa_id = :empresaId "); + } + + if(parametros.containsKey("competenciaInicial") && parametros.containsKey("competenciaFinal")) { + sql.append(" AND TO_DATE(c.competencia,'MM/YYYY') BETWEEN TO_DATE(:competenciaInicial,'MM/YYYY') and TO_DATE(:competenciaFinal,'MM/YYYY') "); + } + + if(parametros.containsKey("dataInicial") && parametros.containsKey("dataFinal")) { + sql.append(" AND ((TO_DATE(:dataInicial,'dd/mm/yyyy') between c.data_inicial and c.data_final) OR (TO_DATE(:dataFinal,'dd/mm/yyyy') between c.data_inicial and c.data_final)) "); + } + + if(parametros.containsKey("puntoventaId")) { sql.append(" AND c.puntoventa_id = :puntoventaId "); } - sql.append("ORDER BY pv.nombpuntoventa, TO_DATE(c.competencia,'MM/YYYY') "); + + if(parametros.containsKey("competenciaInicio") && parametros.containsKey("competenciaFim")) { + sql.append("ORDER BY pv.nombpuntoventa, TO_DATE(c.competencia,'MM/YYYY') "); + } + + if(parametros.containsKey("dataInicial") && parametros.containsKey("dataFinal")) { + sql.append("ORDER BY pv.nombpuntoventa, c.data_inicial "); + } Query query = getSession().createSQLQuery(sql.toString()) .addScalar("competencia", StringType.INSTANCE) @@ -199,15 +215,11 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO .addScalar("devolvidos", BigDecimalType.INSTANCE) .addScalar("receitaBrutaExcessoBagagem", BigDecimalType.INSTANCE) .addScalar("receitaBrutaSeguroopcional", BigDecimalType.INSTANCE) + .addScalar("dataInicial", DateType.INSTANCE) + .addScalar("dataFinal", DateType.INSTANCE) .setResultTransformer(new AliasToBeanResultTransformer(HistoricoComissao.class)); - - query.setString("periodoInicio", competenciaInicio); - query.setString("periodoFim", competenciaFim); - query.setInteger("empresaId", empresaId); - - if(puntoVentaId != null) { - query.setInteger("puntoventaId", puntoVentaId); - } + + setParametros(query, parametros); return query.list(); } @@ -228,4 +240,35 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO return qr.list(); } + @Override + public Comissao buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal) { + StringBuilder hql = new StringBuilder(); + hql.append(" from Comissao c "); + hql.append(" where c.activo = 1 "); + hql.append(" AND c.puntoVenta.puntoventaId = :puntoventaId "); + hql.append(" AND c.empresaId = :empresaId "); + hql.append(" AND ((TO_DATE(:dataInicial,'dd/mm/yyyy') between c.dataInicial and c.dataFinal) OR (TO_DATE(:dataFinal,'dd/mm/yyyy') between c.dataInicial and c.dataFinal))"); + + Query query = getSession().createQuery(hql.toString()); + query.setString("dataInicial", DateUtil.getStringDate(dataInicial, "dd/MM/yyyy")); + query.setString("dataFinal", DateUtil.getStringDate(dataFinal, "dd/MM/yyyy")); + query.setInteger("puntoventaId", puntoVentaId); + query.setInteger("empresaId", empresaId); + + return (Comissao) query.uniqueResult(); + } + + @SuppressWarnings("rawtypes") + private void setParametros(Query qr, Map parametros) { + for (Entry parametro : parametros.entrySet()) { + if (parametro.getValue() instanceof Collection) { + qr.setParameterList(parametro.getKey(), (Collection) parametro.getValue()); + } else if (parametro.getValue() instanceof List) { + qr.setParameterList(parametro.getKey(), (List) parametro.getValue()); + } else { + qr.setParameter(parametro.getKey(), parametro.getValue()); + } + } + } + } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoReceitaHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoReceitaHibernateDAO.java index 12e85699a..0b0570668 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoReceitaHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoReceitaHibernateDAO.java @@ -11,6 +11,7 @@ import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.ComissaoReceitaDAO; import com.rjconsultores.ventaboletos.entidad.ComissaoReceita; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; @Repository("comissaoReceitaHibernateDAO") public class ComissaoReceitaHibernateDAO extends GenericHibernateDAO implements ComissaoReceitaDAO { @@ -28,12 +29,12 @@ public class ComissaoReceitaHibernateDAO extends GenericHibernateDAO lsConferencias = new ArrayList(); carregarPuntoVentas(lsConferencias, competencia, empresa, puntoVenta, dataMovimento); - carregarConferenciasRegistradas(lsConferencias, competencia, empresa, puntoVenta, dataMovimento, null); + carregarConferenciasRegistradas(lsConferencias, competencia, empresa, puntoVenta, dataMovimento, null, null, null); carregarMovimentoVendas(con, lsConferencias, competencia, empresa, puntoVenta, dataMovimento, null, null); carregarDiasSemMovimento(lsConferencias, competencia, empresa, puntoVenta, dataMovimento); @@ -120,7 +120,7 @@ public class ConferenciaComissaoHibernateDAO extends GenericHibernateDAO lsConferencias, - String competencia, Empresa empresa, PuntoVenta puntoVenta, Date dataMovimento, Map parametros) throws BusinessException { + String competencia, Empresa empresa, PuntoVenta puntoVenta, Date dataMovimento, Date dataInicial, Date dataFinal, Map parametros) throws BusinessException { try { if (parametros == null) { - parametros = carregarParametros(null, null, competencia, empresa, puntoVenta, dataMovimento, false); + parametros = carregarParametros(dataInicial, dataFinal, competencia, empresa, puntoVenta, dataMovimento, false); } StringBuilder sQuery = new StringBuilder("SELECT co FROM Conferencia co "); sQuery.append("JOIN co.empresa em ") @@ -224,8 +224,8 @@ public class ConferenciaComissaoHibernateDAO extends GenericHibernateDAO parametros = carregarParametros(null, null, conferencia.getCompetencia(), conferencia.getEmpresa(), + Map parametros = carregarParametros(conferencia.getDataInicial(), conferencia.getDataFinal(), conferencia.getCompetencia(), conferencia.getEmpresa(), conferencia.getPuntoVenta(), conferencia.getDatamovimento(), true); StringBuilder sQuery = new StringBuilder() .append("SELECT EE.BOLETO_ID AS \"boletoId\", EE.EVENTOEXTRA_ID AS \"eventoextraId\", EE.NUMDOCUMENTO AS \"numdocumento\", ") @@ -826,7 +826,7 @@ public class ConferenciaComissaoHibernateDAO extends GenericHibernateDAO parametros = carregarParametros(null, null, conferencia.getCompetencia(), conferencia.getEmpresa(), + Map parametros = carregarParametros(conferencia.getDataInicial(), conferencia.getDataFinal(), conferencia.getCompetencia(), conferencia.getEmpresa(), conferencia.getPuntoVenta(), conferencia.getDatamovimento(), true); StringBuilder sQuery = new StringBuilder() @@ -1210,7 +1210,7 @@ public class ConferenciaComissaoHibernateDAO extends GenericHibernateDAO lsConferencias = new ArrayList(); - carregarConferenciasRegistradas(lsConferencias, competencia, empresa, puntoVenta, null, null); + carregarConferenciasRegistradas(lsConferencias, competencia, empresa, puntoVenta, null, null, null, null); carregarDiasSemMovimento(lsConferencias, competencia, empresa, puntoVenta, null); for (ConferenciaComissaoVO conferenciaComissao : lsConferencias) { @@ -1344,4 +1344,31 @@ public class ConferenciaComissaoHibernateDAO extends GenericHibernateDAO lsConferencias = new ArrayList(); + + String competencia = DateUtil.getStringDate(dataInicial, "MM/yyyy"); + + carregarConferenciasRegistradas(lsConferencias, competencia, empresa, puntoVenta, null, dataInicial, dataFinal, null); + carregarDiasSemMovimento(lsConferencias, competencia, empresa, puntoVenta, null); + + for (ConferenciaComissaoVO conferenciaComissao : lsConferencias) { + for (DiaConferenciaComissaoVO diaConferenciaComissao : conferenciaComissao.getDias()) { + if (DateUtil.compareOnlyDate(diaConferenciaComissao.getData(), dataInicial) >= 0 && + DateUtil.compareOnlyDate(diaConferenciaComissao.getData(), dataFinal) <= 0 && + !diaConferenciaComissao.getIndsemmovimento() && !diaConferenciaComissao.getIndconferido()) { + return false; + } + } + } + + return true; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); + } + } + } diff --git a/src/com/rjconsultores/ventaboletos/entidad/Comissao.java b/src/com/rjconsultores/ventaboletos/entidad/Comissao.java index 5992003c8..d77534cef 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Comissao.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Comissao.java @@ -83,6 +83,14 @@ public class Comissao implements Serializable { @Column(name = "RECEITA_BRUTA_SEGUROOPCIONAL") private BigDecimal receitaBrutaSeguroopcional; + @Column(name = "DATA_INICIAL") + @Temporal(TemporalType.DATE) + private Date dataInicial; + + @Column(name = "DATA_FINAL") + @Temporal(TemporalType.DATE) + private Date dataFinal; + public Comissao() { super(); setComissaoBpr(BigDecimal.ZERO); @@ -293,4 +301,20 @@ public class Comissao implements Serializable { this.receitaBrutaSeguroopcional = receitaBrutaSeguroopcional; } + public Date getDataInicial() { + return dataInicial; + } + + public void setDataInicial(Date dataInicial) { + this.dataInicial = dataInicial; + } + + public Date getDataFinal() { + return dataFinal; + } + + public void setDataFinal(Date dataFinal) { + this.dataFinal = dataFinal; + } + } diff --git a/src/com/rjconsultores/ventaboletos/entidad/Conferencia.java b/src/com/rjconsultores/ventaboletos/entidad/Conferencia.java index db413dac0..d92453ac9 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/Conferencia.java +++ b/src/com/rjconsultores/ventaboletos/entidad/Conferencia.java @@ -88,6 +88,12 @@ public class Conferencia implements Serializable { @Transient private String competencia; + @Transient + private Date dataInicial; + + @Transient + private Date dataFinal; + public Conferencia() { super(); this.indboletogerado = Boolean.FALSE; @@ -264,4 +270,20 @@ public class Conferencia implements Serializable { this.competencia = competencia; } + public Date getDataInicial() { + return dataInicial; + } + + public void setDataInicial(Date dataInicial) { + this.dataInicial = dataInicial; + } + + public Date getDataFinal() { + return dataFinal; + } + + public void setDataFinal(Date dataFinal) { + this.dataFinal = dataFinal; + } + } diff --git a/src/com/rjconsultores/ventaboletos/entidad/PtovtaComissao.java b/src/com/rjconsultores/ventaboletos/entidad/PtovtaComissao.java index 74a2e9f0a..5eb6134f1 100644 --- a/src/com/rjconsultores/ventaboletos/entidad/PtovtaComissao.java +++ b/src/com/rjconsultores/ventaboletos/entidad/PtovtaComissao.java @@ -116,6 +116,9 @@ public class PtovtaComissao implements Serializable { @Column(name = "VALOR_IMPRESSAO_GAP") private BigDecimal valorImpressaoGap; + + @Column(name = "VALOR_IMPRESSAO_GAP_ALTA") + private BigDecimal valorImpressaoGapAlta; @JoinColumn(name = "PUNTOVENTA_ID", referencedColumnName = "PUNTOVENTA_ID") @ManyToOne @@ -131,6 +134,9 @@ public class PtovtaComissao implements Serializable { @Column(name = "INDBILHETESDEVCANORIGEM") private Boolean indbilhetesdevcanorigem; + @Column(name = "INDPAGACOMISSAOBILHETEOS") + private Boolean indPagaComissaoBilheteOS; + public PtovtaComissao() { super(); this.tarifaDev = Boolean.TRUE; @@ -491,4 +497,20 @@ public class PtovtaComissao implements Serializable { public void setIndbilhetesdevcanorigem(Boolean indbilhetesdevcanorigem) { this.indbilhetesdevcanorigem = indbilhetesdevcanorigem; } + + public BigDecimal getValorImpressaoGapAlta() { + return valorImpressaoGapAlta; + } + + public void setValorImpressaoGapAlta(BigDecimal valorImpressaoGapAlta) { + this.valorImpressaoGapAlta = valorImpressaoGapAlta; + } + + public Boolean getIndPagaComissaoBilheteOS() { + return indPagaComissaoBilheteOS; + } + + public void setIndPagaComissaoBilheteOS(Boolean indPagaComissaoBilheteOS) { + this.indPagaComissaoBilheteOS = indPagaComissaoBilheteOS; + } } diff --git a/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java b/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java index 40ce7005e..9fd384d05 100644 --- a/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java +++ b/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java @@ -16,13 +16,26 @@ public interface CalculoComissaoService { public void registrarCalculoComissao(PuntoVenta puntoVenta, Empresa empresa, Date periodo, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException; - public void cancelarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException; + public void cancelarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException, BusinessException; - public List relatorioCalculoComissao(Integer empresaId, Date periodo, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException; + /** + * Relatorio Analitico da comissao + * @param empresaId + * @param competencia - Informe o competencia se o calculo da comissão for por mês + * @param dataInicial - Informe a data inicial se o calculo da comissao for por periodo + * @param dataFinal - Informe a data final se o calculo da comissao for por periodo + * @param usuarioId + * @param isRetencaoDiaria + * @param isRefazerCalculo + * @return + * @throws ComissaoException + * @throws BusinessException + */ + public List relatorioCalculoComissao(Integer empresaId, Date competencia, Date dataInicial, Date dataFinal, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException; public void registrarCalculoComissao(Empresa empresa, Date periodo, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException; - public void cancelarCalculoComissao(Integer empresaId, Date periodo) throws ComissaoException; + public void cancelarCalculoComissao(Integer empresaId, Date periodo) throws ComissaoException, BusinessException; public List relatorioReciboComissao(Integer puntoVentaId, Integer empresaId, String competencia) throws ComissaoException; @@ -32,4 +45,81 @@ public interface CalculoComissaoService { public void retencaoAutomaticaComissao(); + public RegistroCalculo realizarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo, Boolean isRetencaoDiaria, Integer usuarioId, Boolean isRefazerCalculo) throws ComissaoException, BusinessException; + + /** + * Relatorio de comissão por data inicial e data final + * @param puntoVentaId + * @param empresaId + * @param usuarioId + * @param isRetencaoDiaria + * @param isRefazerCalculo + * @param dataInicial + * @param dataFinal + * @return + * @throws ComissaoException + * @throws BusinessException + */ + public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException; + + /** + * Registra a comissão por periodo + * @param puntoVenta + * @param empresa + * @param ignorarComissaoGerada + * @param usuarioId + * @param isRetencaoDiaria + * @param isRefazerCalculo + * @param dataInicial + * @param dataFinal + * @throws ComissaoException + */ + public void registrarCalculoComissaoPeriodo(PuntoVenta puntoVenta, Empresa empresa, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException; + + /** + * Registra a comissão por periodo para todos os pontos de venda + * @param puntoVenta + * @param empresa + * @param ignorarComissaoGerada + * @param usuarioId + * @param isRetencaoDiaria + * @param isRefazerCalculo + * @param dataInicial + * @param dataFinal + * @throws ComissaoException + */ + public void registrarCalculoComissaoPeriodo(Empresa empresa, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException; + + /** + * Cancela o calculo de comissao por periodo + * @param puntoVentaId + * @param empresaId + * @param dataInicial + * @param dataFinal + * @throws ComissaoException + * @throws BusinessException + */ + public void cancelarCalculoComissaoPeriodo(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException; + + /** + * Cancela o calculo de comissao por periodo para todas as agencas + * @param empresaId + * @param dataInicial + * @param dataFinal + * @throws ComissaoException + * @throws BusinessException + */ + public void cancelarCalculoComissaoPeriodo(Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException; + + /** + * Recupera o historico de comissão por periodo + * @param puntoVentaId + * @param empresaId + * @param dataInicial + * @param dataFinal + * @return + * @throws ComissaoException + */ + public List relatorioReciboComissao(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException; + } diff --git a/src/com/rjconsultores/ventaboletos/service/ConferenciaComissaoService.java b/src/com/rjconsultores/ventaboletos/service/ConferenciaComissaoService.java index cb12fb3c3..ee5c65d31 100644 --- a/src/com/rjconsultores/ventaboletos/service/ConferenciaComissaoService.java +++ b/src/com/rjconsultores/ventaboletos/service/ConferenciaComissaoService.java @@ -91,5 +91,7 @@ public interface ConferenciaComissaoService extends GenericService calculoDescontos(Integer puntoVentaId, Integer empresaId, Date periodo, PtovtaComissao ptovtaComissao) { + private Map calculoDescontos(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal, PtovtaComissao ptovtaComissao) { List lsDescontos = new ArrayList(); BigDecimal valorDescontoTotal = BigDecimal.ZERO; - Date inicioPeriodo = DateUtil.inicioFechaPeriodoMeses(periodo); - Date fimPeriodo = DateUtil.fimFechaPeriodoMeses(periodo); - List itensDescontos = descontoComissaoService.buscaDescontoComissaoPeriodo(puntoVentaId, empresaId, inicioPeriodo, fimPeriodo); + List itensDescontos = descontoComissaoService.buscaDescontoComissaoPeriodo(puntoVentaId, empresaId, dataInicial, dataFinal); for (DescontoComissao dc : itensDescontos) { @@ -313,63 +370,86 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { return respDescontos; } + @Override public RegistroCalculo realizarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo, Boolean isRetencaoDiaria, Integer usuarioId, Boolean isRefazerCalculo) throws ComissaoException, BusinessException { - PtovtaComissao ptovtaComissao = ptovtaComissaoService.buscarPuntaVentaEmpresa(puntoVentaId, empresaId); - if (ptovtaComissao != null && (ptovtaComissao.getIndretercomissao() == null || !ptovtaComissao.getIndretercomissao())) { + Conferencia conferencia = new Conferencia(); + conferencia.setPuntoVenta(new PuntoVenta(puntoVentaId)); + conferencia.setEmpresa(new Empresa(empresaId)); - //Abate no valor da comissão bpr as saídas de caixa - boolean consideraBilhetesDevolvidosEmOutraAgencia = (ptovtaComissao.getIndbilhetesdevcanorigem() == null)?false:ptovtaComissao.getIndbilhetesdevcanorigem(); - - Conferencia conferencia = new Conferencia(); - conferencia.setPuntoVenta(new PuntoVenta(puntoVentaId)); - conferencia.setEmpresa(new Empresa(empresaId)); - - Calendar calendario = Calendar.getInstance(); - calendario.setTime(periodo); - int diaInicial = -1; - int diaFinal = -1; - int mes = calendario.get(Calendar.MONTH); - int ano = calendario.get(Calendar.YEAR); - - if(isRetencaoDiaria) { - conferencia.setDatamovimento(periodo); - diaInicial = calendario.get(Calendar.DAY_OF_MONTH); - diaFinal = calendario.get(Calendar.DAY_OF_MONTH); - } else { - conferencia.setCompetencia(DateUtil.getStringDate(periodo, "MM/yyyy")); - diaInicial = calendario.getActualMinimum(Calendar.DAY_OF_MONTH); - diaFinal = calendario.getActualMaximum(Calendar.DAY_OF_MONTH); - } - - Date dataInicial = getDate(diaInicial, mes, ano); - Date dataFinal = getDate(diaFinal, mes, ano); - - List receitas = null; - - if(isRefazerCalculo) { - comissaoReceitaService.limparComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal); - List receitasBoleto = conferenciaComissaoDAO.carregarBilhetesComissao(conferencia, true, consideraBilhetesDevolvidosEmOutraAgencia); - log.info("Total de bilhetes: " + receitasBoleto.size()); - List eventosFinanceirosVOs = conferenciaComissaoDAO.carregarEventosFinanceiros(conferencia); - log.info("Total de eventos extras: " + eventosFinanceirosVOs.size()); - receitas = calculaReceitaComissao(empresaId, ptovtaComissao, receitasBoleto, diaInicial, diaFinal, mes, ano, eventosFinanceirosVOs); - reterComissaoReceitaDiaria(empresaId, puntoVentaId, usuarioId, receitas); - } else { - receitas = recuperarComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal); - } - - if(!isRetencaoDiaria) { - return calcularRegistroCalculo(ptovtaComissao, puntoVentaId, empresaId, periodo, receitas); - } + Calendar calendario = Calendar.getInstance(); + calendario.setTime(periodo); + int diaInicial = -1; + int diaFinal = -1; + int mes = calendario.get(Calendar.MONTH); + int ano = calendario.get(Calendar.YEAR); + + if(isRetencaoDiaria) { + conferencia.setDatamovimento(periodo); + diaInicial = calendario.get(Calendar.DAY_OF_MONTH); + diaFinal = calendario.get(Calendar.DAY_OF_MONTH); } else { - if(ptovtaComissao != null && ptovtaComissao.getIndretercomissao() != null && ptovtaComissao.getIndretercomissao()) { - throw new ComissaoException("busquedaCalculoComissaoController.PtovtaComissaoReterComissao.exception", null, ptovtaComissao.getDescComissaoId() != null ? ptovtaComissao.getPuntoventaId().getNombpuntoventa() : ""); - } else if(!isRefazerCalculo) { - throw new ComissaoException("busquedaCalculoComissaoController.PtovtaComissao.exception"); - } + conferencia.setCompetencia(DateUtil.getStringDate(periodo, "MM/yyyy")); + diaInicial = calendario.getActualMinimum(Calendar.DAY_OF_MONTH); + diaFinal = calendario.getActualMaximum(Calendar.DAY_OF_MONTH); } + + Date dataInicial = getDate(diaInicial, mes, ano); + Date dataFinal = getDate(diaFinal, mes, ano); + + return realizarCalculoComissao(puntoVentaId, empresaId, usuarioId, isRefazerCalculo, conferencia, dataInicial, dataFinal, isRetencaoDiaria); + + } + /** + * Realiza calculo da comissao + * @param puntoVentaId + * @param empresaId + * @param usuarioId + * @param isRefazerCalculo + * @param conferencia + * @param dataInicial + * @param dataFinal + * @param isRetencaoDiaria + * @return + * @throws BusinessException + */ + private RegistroCalculo realizarCalculoComissao(Integer puntoVentaId, Integer empresaId, Integer usuarioId, Boolean isRefazerCalculo, Conferencia conferencia, Date dataInicial, Date dataFinal, boolean isRetencaoDiaria) throws BusinessException { + try { + PtovtaComissao ptovtaComissao = ptovtaComissaoService.buscarPuntaVentaEmpresa(puntoVentaId, empresaId); + if (ptovtaComissao != null && (ptovtaComissao.getIndretercomissao() == null || !ptovtaComissao.getIndretercomissao())) { + //Abate no valor da comissão bpr as saídas de caixa + boolean consideraBilhetesDevolvidosEmOutraAgencia = (ptovtaComissao.getIndbilhetesdevcanorigem() == null)?false:ptovtaComissao.getIndbilhetesdevcanorigem(); + + List receitas = null; + if(isRefazerCalculo) { + comissaoReceitaService.limparComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal); + List receitasBoleto = conferenciaComissaoDAO.carregarBilhetesComissao(conferencia, true, consideraBilhetesDevolvidosEmOutraAgencia); + log.info("Total de bilhetes: " + receitasBoleto.size()); + List eventosFinanceirosVOs = conferenciaComissaoDAO.carregarEventosFinanceiros(conferencia); + log.info("Total de eventos extras: " + eventosFinanceirosVOs.size()); + receitas = calculaReceitaComissao(empresaId, ptovtaComissao, receitasBoleto, eventosFinanceirosVOs, dataInicial, dataFinal); + reterComissaoReceitaDiaria(empresaId, puntoVentaId, usuarioId, receitas); + } else { + receitas = recuperarComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal); + } + + if(!isRetencaoDiaria) { + return calcularRegistroCalculo(ptovtaComissao, puntoVentaId, empresaId, dataInicial, dataFinal, receitas); + } + } else { + if(ptovtaComissao != null && ptovtaComissao.getIndretercomissao() != null && ptovtaComissao.getIndretercomissao()) { + throw new ComissaoException("busquedaCalculoComissaoController.PtovtaComissaoReterComissao.exception", null, ptovtaComissao.getDescComissaoId() != null ? ptovtaComissao.getPuntoventaId().getNombpuntoventa() : ""); + } else if(!isRefazerCalculo) { + throw new ComissaoException("busquedaCalculoComissaoController.PtovtaComissao.exception"); + } + } + + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); + } + return null; } @@ -394,13 +474,14 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { * @param ptovtaComissao * @param puntoVentaId * @param empresaId - * @param periodo + * @param dataInicial + * @param dataFinal * @param receitas * @return * @throws BusinessException */ @SuppressWarnings("unchecked") - private RegistroCalculo calcularRegistroCalculo(PtovtaComissao ptovtaComissao, Integer puntoVentaId, Integer empresaId, Date periodo, List receitas) throws BusinessException { + private RegistroCalculo calcularRegistroCalculo(PtovtaComissao ptovtaComissao, Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal, List receitas) throws BusinessException { try { RegistroCalculo rc = new RegistroCalculo(); rc.setNombpuntoventa(ptovtaComissao.getPuntoventaId().getNombpuntoventa()); @@ -433,7 +514,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { rc.setComissaoOutros(comissaoOutros); // Descontos (Fixos e Eventuais) - Map respDescontos = calculoDescontos(puntoVentaId, empresaId, periodo, ptovtaComissao); + Map respDescontos = calculoDescontos(puntoVentaId, empresaId, dataInicial, dataFinal, ptovtaComissao); rc.setDescontos((BigDecimal) respDescontos.get("VALOR_DESCONTOS")); rc.setLsDescontos((List) respDescontos.get("LISTA_DESCONTOS")); @@ -523,10 +604,22 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { return false; } - private List calculaReceitaComissao(Integer empresaId, PtovtaComissao ptovtaComissao, List receitasBoleto, Integer diaInicial, Integer diaFinal, Integer mes, Integer ano, List eventosFinanceirosVOs) { + private List calculaReceitaComissao(Integer empresaId, PtovtaComissao ptovtaComissao, List receitasBoleto, List eventosFinanceirosVOs, Date dataInicial, Date dataFinal) { + + Calendar cDataInicial = Calendar.getInstance(); + cDataInicial.setTime(dataInicial); + Integer diaInicial = cDataInicial.get(Calendar.DAY_OF_MONTH); + + Calendar cDataFinal = Calendar.getInstance(); + cDataFinal.setTime(dataInicial); + Integer diaFinal = cDataFinal.get(Calendar.DAY_OF_MONTH); + + Integer mes = cDataInicial.get(Calendar.MONTH); + Integer ano = cDataInicial.get(Calendar.YEAR); List impostos = empresaImpostoService.buscarEmpresaImposto(empresaId); boolean isConsideraBilhetesDevolvidosEmOutraAgencia = ptovtaComissao.getIndbilhetesdevcanorigem() == null ? false : ptovtaComissao.getIndbilhetesdevcanorigem(); + boolean isPagaComissaoBilheteOrdemServico = ptovtaComissao.getIndPagaComissaoBilheteOS() != null ? ptovtaComissao.getIndPagaComissaoBilheteOS() : false; List receitas = new ArrayList(); for (int dia = diaInicial; dia <= diaFinal; dia++) { @@ -577,8 +670,16 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { } /* Calculando comissão para os boletos */ - for (BoletoComissao rcc : list) { + + /* + * Mantis #12391 + * Verifica se a agencia paga comissão para bilhete de ordem de servico, + * caso não faça pagamento, o bilhete é ignorado */ + if(!isPagaComissaoBilheteOrdemServico && isBilheteOrdemServico(rcc)) { + continue; + } + boolean isAltaTemporada = validaAltaTemporada(impostos, mes, rcc.getEstadoId()); IndStatusBoleto statusBoleto = IndStatusBoleto.valueOf(rcc.getIndstatusboleto()); @@ -642,10 +743,10 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { // Calculo de ICMS sobre o valor do bilhete if (isReceitaLiquida) { - BigDecimal icms = MoneyHelper.multiplicar(receitaItem, MoneyHelper.dividir(rcc.getIcmsBase(), CEM)); + BigDecimal icms = MoneyHelper.multiplicar(receitaItem, MoneyHelper.dividir(rcc.getIcmsBase() != null ? rcc.getIcmsBase() : BigDecimal.ZERO, CEM)); receitaItem = MoneyHelper.subtrair(receitaItem, icms); - BigDecimal icmsDev = MoneyHelper.multiplicar(receitaDevItem, MoneyHelper.dividir(rcc.getIcmsBase(), CEM)); + BigDecimal icmsDev = MoneyHelper.multiplicar(receitaDevItem, MoneyHelper.dividir(rcc.getIcmsBase() != null ? rcc.getIcmsBase() : BigDecimal.ZERO, CEM)); receitaDevItem = MoneyHelper.subtrair(receitaDevItem,icmsDev); } @@ -854,6 +955,21 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { } + /** + * Verifica se o bilhete possui forma de pagamento Orden de Serviço + * Mantis #12391 + * @param rcc + * @return + */ + private boolean isBilheteOrdemServico(BoletoComissao rcc) { + for (FormapagoVO formapago : rcc.getFormapagos()) { + if(formapago.getFormapagoId() == Constantes.FORMA_PAGO_ORDEN_SERVICIO.intValue()) { + return true; + } + } + return false; + } + private List verificaEventoFinanceiroProDia(List eventosFinanceirosVOs, Date dataRegistro) { List aux = new ArrayList(); if(eventosFinanceirosVOs != null) { @@ -879,13 +995,22 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { } @Override - public List relatorioCalculoComissao(Integer empresaId, Date periodo, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException { + public List relatorioCalculoComissao(Integer empresaId, Date competencia, Date dataInicial, Date dataFinal, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException { List registrosCalculo = new ArrayList(); List puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId); Empresa empresa = empresaService.obtenerID(empresaId); - boolean indExibeComissaoZeradaAgencia = empresa.getIndExibeComissaoZeradaAgencia() != null ? empresa.getIndExibeComissaoZeradaAgencia() : false; + boolean indExibeComissaoZeradaAgencia = empresa.getIndExibeComissaoZeradaAgencia() != null ? empresa.getIndExibeComissaoZeradaAgencia() : false; for (PuntoVenta puntoVenta : puntoventas) { - RegistroCalculo registroCalculo = relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, periodo, usuarioId, isRetencaoDiaria, isRefazerCalculo); + RegistroCalculo registroCalculo = null; + if(competencia != null) { + registroCalculo = relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, competencia, usuarioId, isRetencaoDiaria, isRefazerCalculo); + } else if(dataInicial != null && dataFinal != null) { + registroCalculo = relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, usuarioId, isRetencaoDiaria, isRefazerCalculo, dataInicial, dataFinal); + } + + if(registroCalculo == null) { + continue; + } /* * Caso parametro de não exibir as agencias com comissão zerada esteja ativado @@ -897,13 +1022,17 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { registrosCalculo.add(registroCalculo); } } + ordernarResultado(registrosCalculo); + return registrosCalculo; + } + + private void ordernarResultado(List registrosCalculo) { Collections.sort(registrosCalculo, new Comparator() { @Override public int compare(RegistroCalculo o1, RegistroCalculo o2) { return o1.getNombpuntoventa().compareToIgnoreCase(o2.getNombpuntoventa()); } }); - return registrosCalculo; } private void totalizarRegistroCalculo(RegistroCalculo registroCalculo, boolean indExibeComissaoZeradaAgencia) { @@ -948,17 +1077,40 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { } @Override - public void cancelarCalculoComissao(Integer empresaId, Date periodo) throws ComissaoException { - List puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId); - for (PuntoVenta puntoVenta : puntoventas) { - cancelarCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, periodo); + public void cancelarCalculoComissao(Integer empresaId, Date periodo) throws ComissaoException, BusinessException { + try { + List puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId); + for (PuntoVenta puntoVenta : puntoventas) { + try { + cancelarCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, periodo); + } catch (ComissaoException e) { + /* Ignora a comissa quando o cancelamento é feito para todas as agencias */ + } catch (Exception e) { + throw e; + } + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); } } @Override public List relatorioReciboComissao(Integer puntoVentaId, Integer empresaId, String competencia) throws ComissaoException { try { - return comissaoDAO.buscaHistoricoComissao(puntoVentaId, empresaId, DateUtil.getDateFromString(competencia, "MM/yyyy"), DateUtil.getDateFromString(competencia, "MM/yyyy")); + Map parametros = new HashMap(); + if(StringUtils.isNotBlank(competencia)) { + parametros.put("competenciaInicial", competencia); + parametros.put("competenciaFinal", competencia); + } + if(puntoVentaId != null && puntoVentaId > -1) { + parametros.put("puntoventaId", puntoVentaId); + } + if(empresaId != null) { + parametros.put("empresaId", empresaId); + } + + return comissaoDAO.buscaHistoricoComissao(parametros); } catch (Exception e) { log.error(e.getMessage(), e); throw new ComissaoException(e.getMessage(), e); @@ -997,15 +1149,33 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { mail.setSmtpUser(constante.getValorconstante()); } - String assunto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.assunto", new String[] {historicoComissao.getCompetencia()}); - mail.setSubject(assunto); + String assunto = null; + String texto = null; + String nomeArquivo = null; + if(StringUtils.isNotBlank(historicoComissao.getCompetencia())) { + assunto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.assunto", new String[] {Labels.getLabel("busquedaImportacionFiscalController.lbCompetencia.label"), historicoComissao.getCompetencia()}); + texto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.texto", new String[] {Labels.getLabel("busquedaImportacionFiscalController.lbCompetencia.label"), historicoComissao.getCompetencia()}); + nomeArquivo = historicoComissao.getCompetencia(); + } else if(historicoComissao.getDataInicial() != null && historicoComissao.getDataFinal() != null){ + StringBuilder sDatas = new StringBuilder(); + sDatas.append(DateUtil.getStringDate(historicoComissao.getDataInicial(), "dd/MM/yyyy")) + .append(" ") + .append(Labels.getLabel("lb.ate")) + .append(" ") + .append(DateUtil.getStringDate(historicoComissao.getDataFinal(), "dd/MM/yyyy")); + assunto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.assunto", new String[] {"Periodo", sDatas.toString()}); + texto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.texto", new String[] {"Periodo", sDatas.toString()}); + nomeArquivo = sDatas.toString().replaceAll(" ", "_"); + } - String texto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.texto", new String[] {historicoComissao.getCompetencia()}); + mail.setSubject(assunto); mail.setText(texto); ByteArrayOutputStream baos = new ByteArrayOutputStream(recibo.length); baos.write(recibo, 0, recibo.length); - mail.addAnexo(Labels.getLabel("busquedaCalculoComissaoController.recibo.email.nomeAnexo", new String[] {historicoComissao.getCompetencia()}).concat(".pdf"), baos, MimeType.PDF); + + + mail.addAnexo(Labels.getLabel("busquedaCalculoComissaoController.recibo.email.nomeAnexo", new String[] {nomeArquivo}).concat(".pdf"), baos, MimeType.PDF); mail.send(); } @@ -1073,4 +1243,134 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { } } + @Override + public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException { + Conferencia conferencia = new Conferencia(); + conferencia.setPuntoVenta(new PuntoVenta(puntoVentaId)); + conferencia.setEmpresa(new Empresa(empresaId)); + conferencia.setDataInicial(dataInicial); + conferencia.setDataFinal(dataFinal); + + return realizarCalculoComissao(puntoVentaId, empresaId, usuarioId, isRefazerCalculo, conferencia, dataInicial, dataFinal, false); + } + + @Override + public void registrarCalculoComissaoPeriodo(PuntoVenta puntoVenta, Empresa empresa, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException { + + try { + + if (validaPeriodo(dataInicial, dataFinal)) { + + if(isRetencaoDiaria || conferenciaComissaoService.isConferenciaCompetenciaEncerrada(dataInicial, dataFinal, empresa, puntoVenta)) { + Comissao comissaoCadastrada = comissaoDAO.buscaComissaoVigencia(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), dataInicial, dataFinal); + if (comissaoCadastrada == null) { + + Conferencia conferencia = new Conferencia(); + conferencia.setPuntoVenta(puntoVenta); + conferencia.setEmpresa(empresa); + conferencia.setDataInicial(dataInicial); + conferencia.setDataFinal(dataFinal); + + RegistroCalculo rc = realizarCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), usuarioId, isRefazerCalculo, conferencia, dataInicial, dataFinal, isRetencaoDiaria); + + gravarComissao(puntoVenta, empresa, rc, null, dataInicial, dataFinal); + } else if(!ignorarComissaoGerada){ + StringBuilder sDatas = new StringBuilder(); + sDatas.append(DateUtil.getStringDate(comissaoCadastrada.getDataInicial(), "dd/MM/yyyy")) + .append(" ") + .append(Labels.getLabel("lb.ate")) + .append(" ") + .append(DateUtil.getStringDate(comissaoCadastrada.getDataFinal(), "dd/MM/yyyy")); + throw new ComissaoException("busquedaCalculoComissaoController.registroPeriodo.exception", null, comissaoCadastrada.getPuntoVenta().getNombpuntoventa(), sDatas.toString()); + } + } else { + StringBuilder sDatas = new StringBuilder(); + sDatas.append(DateUtil.getStringDate(dataInicial, "dd/MM/yyyy")) + .append(" ") + .append(Labels.getLabel("lb.ate")) + .append(" ") + .append(DateUtil.getStringDate(dataFinal, "dd/MM/yyyy")); + throw new ComissaoException("busquedaCalculoComissaoController.conferenciaNaoEncerradaPeriodo.exception", null, puntoVenta.getNombpuntoventa(), sDatas.toString()); + } + } else { + throw new ComissaoException("busquedaCalculoComissaoController.periodo.exception"); + } + + } catch (ComissaoException e) { + log.error(e.getMessage(), e); + throw e; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ComissaoException(e.getMessage(), e); + } + } + + @Override + public void registrarCalculoComissaoPeriodo(Empresa empresa, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo, Date dataInicial, Date dataFinal) throws ComissaoException { + List puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresa.getEmpresaId()); + for (PuntoVenta puntoVenta : puntoventas) { + registrarCalculoComissaoPeriodo(puntoVenta, empresa, ignorarComissaoGerada, usuarioId, isRetencaoDiaria, isRefazerCalculo, dataInicial, dataFinal); + } + } + + @Override + public void cancelarCalculoComissaoPeriodo(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException { + try { + Comissao comissao = comissaoDAO.buscaComissaoVigencia(puntoVentaId, empresaId, dataInicial, dataFinal); + if (comissao != null) { + comissaoService.borrar(comissao); + } else { + throw new ComissaoException("busquedaCalculoComissaoController.comissao.exception"); + } + } catch (ComissaoException e) { + log.error(e.getMessage(), e); + throw e; + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); + } + } + + @Override + public void cancelarCalculoComissaoPeriodo(Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException, BusinessException { + try { + List puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId); + for (PuntoVenta puntoVenta : puntoventas) { + try { + cancelarCalculoComissaoPeriodo(puntoVenta.getPuntoventaId(), empresaId, dataInicial, dataFinal); + } catch (ComissaoException e) { + } catch (Exception e) { + throw e; + } + } + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new BusinessException(e.getMessage(), e); + } + } + + @Override + public List relatorioReciboComissao(Integer puntoVentaId, Integer empresaId, Date dataInicial, Date dataFinal) throws ComissaoException { + try { + Map parametros = new HashMap(); + if(dataInicial != null) { + parametros.put("dataInicial", DateUtil.getStringDate(dataInicial, "dd/MM/yyyy")); + } + if(dataFinal != null) { + parametros.put("dataFinal", DateUtil.getStringDate(dataFinal, "dd/MM/yyyy")); + } + if(puntoVentaId != null && puntoVentaId > -1) { + parametros.put("puntoventaId", puntoVentaId); + } + if(empresaId != null) { + parametros.put("empresaId", empresaId); + } + + return comissaoDAO.buscaHistoricoComissao(parametros); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new ComissaoException(e.getMessage(), e); + } + } + } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ComissaoServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ComissaoServiceImpl.java index 3de199b74..a997f97c4 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/ComissaoServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/ComissaoServiceImpl.java @@ -2,7 +2,9 @@ package com.rjconsultores.ventaboletos.service.impl; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,6 +14,7 @@ import com.rjconsultores.ventaboletos.dao.ComissaoDAO; import com.rjconsultores.ventaboletos.entidad.Comissao; import com.rjconsultores.ventaboletos.entidad.PuntoVenta; import com.rjconsultores.ventaboletos.service.ComissaoService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.vo.comissao.HistoricoComissao; @@ -62,7 +65,16 @@ public class ComissaoServiceImpl implements ComissaoService { @Override public List buscaHistoricoComissao(Integer puntoVentaId, Integer empresaId, Date periodoInicio, Date periodoFim) { - return comissaoDAO.buscaHistoricoComissao(puntoVentaId, empresaId, periodoInicio, periodoFim); + String competenciaInicial = DateUtil.getStringDate(periodoInicio, "MM/yyyy"); + String competenciaFinal = DateUtil.getStringDate(periodoInicio, "MM/yyyy"); + + Map parametros = new HashMap(); + parametros.put("competenciaInicial", competenciaInicial); + parametros.put("competenciaFinal", competenciaFinal); + parametros.put("puntoventaId", puntoVentaId); + parametros.put("empresaId", empresaId); + + return comissaoDAO.buscaHistoricoComissao(parametros); } @Override diff --git a/src/com/rjconsultores/ventaboletos/service/impl/ConferenciaComissaoServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/ConferenciaComissaoServiceImpl.java index aace40ae1..610793c00 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/ConferenciaComissaoServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/ConferenciaComissaoServiceImpl.java @@ -982,4 +982,9 @@ public class ConferenciaComissaoServiceImpl implements ConferenciaComissaoServic conferenciaComissaoDAO.borrarLogConferenciaTransacaoId(transacaoId); } + @Override + public boolean isConferenciaCompetenciaEncerrada(Date dataInicial, Date dataFinal, Empresa empresa, PuntoVenta puntoVenta) throws BusinessException { + return conferenciaComissaoDAO.isConferenciaCompetenciaEncerrada(dataInicial, dataFinal, empresa, puntoVenta); + } + } diff --git a/src/com/rjconsultores/ventaboletos/utilerias/ApplicationProperties.java b/src/com/rjconsultores/ventaboletos/utilerias/ApplicationProperties.java index 499c8e354..ca0de8136 100644 --- a/src/com/rjconsultores/ventaboletos/utilerias/ApplicationProperties.java +++ b/src/com/rjconsultores/ventaboletos/utilerias/ApplicationProperties.java @@ -284,4 +284,9 @@ public class ApplicationProperties { String property = p.getProperty("taxasLinhaTxtDownloadVisible", "0"); return property.equals("1"); } + + public boolean isPermiteCalculoComissaoPeriodo() { + String property = p.getProperty("permiteCalculoComissaoPeriodo", "0"); + return property.equals("1"); + } } diff --git a/src/com/rjconsultores/ventaboletos/vo/comissao/HistoricoComissao.java b/src/com/rjconsultores/ventaboletos/vo/comissao/HistoricoComissao.java index 4522466bc..85b6e0bad 100644 --- a/src/com/rjconsultores/ventaboletos/vo/comissao/HistoricoComissao.java +++ b/src/com/rjconsultores/ventaboletos/vo/comissao/HistoricoComissao.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.text.NumberFormat; import java.text.ParseException; +import org.apache.commons.lang.StringUtils; import org.brazilutils.text.RealToWords; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -181,9 +182,15 @@ public class HistoricoComissao extends Comissao { public String getTexto1() { try { - return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto1", - new String[]{DateUtil.getStringDate(DateUtil.getDataInicialCompetencia(getCompetencia()), "dd/MM/yyyy"), - DateUtil.getStringDate(DateUtil.getDataFinalCompetencia(getCompetencia()), "dd/MM/yyyy")}); + if(StringUtils.isNotBlank(getCompetencia())) { + return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto1", + new String[]{DateUtil.getStringDate(DateUtil.getDataInicialCompetencia(getCompetencia()), "dd/MM/yyyy"), + DateUtil.getStringDate(DateUtil.getDataFinalCompetencia(getCompetencia()), "dd/MM/yyyy")}); + } else { + return Labels.getLabel("busquedaCalculoComissaoController.recibo.texto1", + new String[]{DateUtil.getStringDate(getDataInicial(), "dd/MM/yyyy"), + DateUtil.getStringDate(getDataFinal(), "dd/MM/yyyy")}); + } } catch (ParseException e) { log.error(e.getMessage(), e); }