From 9f6989156777d5016aa66c95c499282b9eab612a Mon Sep 17 00:00:00 2001 From: julio Date: Mon, 26 Oct 2015 17:51:30 +0000 Subject: [PATCH] bug #6669 git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@49449 d1611594-4594-4d17-8e1d-87c2c4800839 --- .../ventaboletos/dao/ComissaoDAO.java | 2 +- .../dao/hibernate/ComissaoHibernateDAO.java | 5 +- .../exception/ComissaoException.java | 31 +++++ .../service/CalculoComissaoService.java | 3 +- .../impl/CalculoComissaoServiceImpl.java | 122 ++++++++---------- .../vo/comissao/ComissaoReceita.java | 36 ++---- .../vo/comissao/RegistroCalculo.java | 9 ++ 7 files changed, 113 insertions(+), 95 deletions(-) create mode 100644 src/com/rjconsultores/ventaboletos/exception/ComissaoException.java diff --git a/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java b/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java index a65c5e9c2..bab74f710 100644 --- a/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/ComissaoDAO.java @@ -10,6 +10,6 @@ public interface ComissaoDAO extends GenericDAO { public List buscarReceitasComissoes(Integer puntoVentaId, Integer empresaId, Date periodo); - public List buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, Date periodo); + public List buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, String competencia); } diff --git a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java index 78d506ea1..b1e5d9bf4 100644 --- a/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java +++ b/src/com/rjconsultores/ventaboletos/dao/hibernate/ComissaoHibernateDAO.java @@ -16,7 +16,6 @@ import org.springframework.stereotype.Repository; import com.rjconsultores.ventaboletos.dao.ComissaoDAO; import com.rjconsultores.ventaboletos.entidad.Comissao; -import com.rjconsultores.ventaboletos.utilerias.DateUtil; import com.rjconsultores.ventaboletos.vo.comissao.BoletoComissao; @Repository("comissaoHibernateDAO") @@ -87,7 +86,7 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO @SuppressWarnings("unchecked") @Override - public List buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, Date periodo) { + public List buscaComissaoVigencia(Integer puntoVentaId, Integer empresaId, String competencia) { StringBuilder hql = new StringBuilder(); hql.append(" from Comissao c "); @@ -97,7 +96,7 @@ public class ComissaoHibernateDAO extends GenericHibernateDAO hql.append(" AND c.competencia = :periodo "); Query query = getSession().createQuery(hql.toString()); - query.setString("periodo", DateUtil.getStringDate(periodo, "MM/yyyy")); + query.setString("periodo", competencia); query.setInteger("puntoventaId", puntoVentaId); query.setInteger("empresaId", empresaId); diff --git a/src/com/rjconsultores/ventaboletos/exception/ComissaoException.java b/src/com/rjconsultores/ventaboletos/exception/ComissaoException.java new file mode 100644 index 000000000..7c6c372a4 --- /dev/null +++ b/src/com/rjconsultores/ventaboletos/exception/ComissaoException.java @@ -0,0 +1,31 @@ +package com.rjconsultores.ventaboletos.exception; + +import java.text.MessageFormat; + +import org.zkoss.util.resource.Labels; + +public class ComissaoException extends Exception { + + private static final long serialVersionUID = 1L; + + /** + * + * @param message + * - La clave del archivo de traducción + */ + public ComissaoException(String message) { + super(Labels.getLabel(message)); + } + + /** + * + * @param message- + * La clave del archivo de traducción + * @param oMsg + * - Los parametros de la mensage + */ + public ComissaoException(String message, Object oMsg) { + super(new MessageFormat(Labels.getLabel(message)).format(oMsg)); + } + +} diff --git a/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java b/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java index 87082f0cb..bc91d3810 100644 --- a/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java +++ b/src/com/rjconsultores/ventaboletos/service/CalculoComissaoService.java @@ -2,12 +2,13 @@ package com.rjconsultores.ventaboletos.service; import java.util.Date; +import com.rjconsultores.ventaboletos.exception.ComissaoException; import com.rjconsultores.ventaboletos.vo.comissao.RegistroCalculo; public interface CalculoComissaoService { public RegistroCalculo relatorioCalculoComissao(Integer puntoVentId, Integer empresaId, Date periodo); - public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo); + public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException; } diff --git a/src/com/rjconsultores/ventaboletos/service/impl/CalculoComissaoServiceImpl.java b/src/com/rjconsultores/ventaboletos/service/impl/CalculoComissaoServiceImpl.java index 7af3b3844..e48592d2d 100644 --- a/src/com/rjconsultores/ventaboletos/service/impl/CalculoComissaoServiceImpl.java +++ b/src/com/rjconsultores/ventaboletos/service/impl/CalculoComissaoServiceImpl.java @@ -21,6 +21,7 @@ import com.rjconsultores.ventaboletos.entidad.DescontoComissao; import com.rjconsultores.ventaboletos.entidad.PtovtaComissao; import com.rjconsultores.ventaboletos.entidad.PtovtaComissao.Receita; import com.rjconsultores.ventaboletos.enums.IndStatusBoleto; +import com.rjconsultores.ventaboletos.exception.ComissaoException; import com.rjconsultores.ventaboletos.service.CalculoComissaoService; import com.rjconsultores.ventaboletos.service.ComissaoService; import com.rjconsultores.ventaboletos.service.DescontoComissaoService; @@ -31,7 +32,6 @@ import com.rjconsultores.ventaboletos.vo.comissao.BoletoComissao; import com.rjconsultores.ventaboletos.vo.comissao.ComissaoDesconto; import com.rjconsultores.ventaboletos.vo.comissao.ComissaoDesconto.TipoDesconto; import com.rjconsultores.ventaboletos.vo.comissao.ComissaoReceita; -import com.rjconsultores.ventaboletos.vo.comissao.ComissaoReceita.TipoIcms; import com.rjconsultores.ventaboletos.vo.comissao.RegistroCalculo; @Service("calculoComissaoService") @@ -53,16 +53,16 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { private DescontoComissaoService descontoComissaoService; @Override - public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) { + public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException { - List comissoes = comissaoDAO.buscaComissaoVigencia(puntoVentaId, empresaId, periodo); + String competencia = DateUtil.getStringDate(periodo, "MM/yyyy"); + List comissoes = comissaoDAO.buscaComissaoVigencia(puntoVentaId, empresaId, competencia); if (comissoes.isEmpty()) { RegistroCalculo rc = realizarCalculoComissao(puntoVentaId, empresaId, periodo); Comissao comissao = new Comissao(); - String competencia = DateUtil.getStringDate(periodo, "MM/yyyy"); comissao.setCompetencia(competencia); comissao.setDataPagamento(Calendar.getInstance().getTime()); @@ -74,6 +74,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { comissao.setEntregasPassagem(rc.getComissaoEntregaPassagem()); comissao.setReceitaExcessobagagem(rc.getComissaoExcessoBagagem()); comissao.setReceitaSeguroopcional(rc.getComissaoSegOpcional()); + comissao.setRoyaties(rc.getRoyaties()); comissao.setIssRetido(rc.getRetidoISS()); comissao.setBonificacaoMetas(rc.getComissaoBonificaoMetas()); @@ -84,9 +85,8 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { comissao = comissaoService.suscribir(comissao); } else { - + throw new ComissaoException("busquedaCalculoComissaoController.registro.exception"); } - } @Override @@ -94,18 +94,11 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { return realizarCalculoComissao(puntoVentaId, empresaId, periodo); } - private BigDecimal calculoComisssaoBPR(boolean isAltaTemporada, boolean isReceitaLiquida, PtovtaComissao ptovtaComissao, ComissaoReceita cr) { + private BigDecimal calculoComisssaoBPR(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, ComissaoReceita cr) { // Comissão BPR = Receita Comissão * (% Com BPR) BigDecimal bpr = BigDecimal.ZERO; BigDecimal receitaBPR = cr.getReceitaBPR().add(cr.getReceitaGAP()); - if (isReceitaLiquida) { - for (TipoIcms tipoIcms : cr.getDescontosIcms()) { - if (tipoIcms.equals(TipoIcms.BPR) || tipoIcms.equals(TipoIcms.GAP)) - receitaBPR = receitaBPR.add(tipoIcms.getValor().negate()); - } - } - if (isAltaTemporada) { bpr = receitaBPR.multiply(ptovtaComissao.getPassagemAlta().divide(CEM)); } else { @@ -115,18 +108,11 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { return bpr; } - private BigDecimal calculoEntregaPassagem(boolean isAltaTemporada, boolean isReceitaLiquida, PtovtaComissao ptovtaComissao, ComissaoReceita cr) { + private BigDecimal calculoEntregaPassagem(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, ComissaoReceita cr) { // EntregaPassagem (Internet/Venda Impressão Posterior/Outros) BigDecimal entregaPassagem = BigDecimal.ZERO; BigDecimal receitaEntrega = cr.getGapImpressa().add(cr.getInternet()); - if (isReceitaLiquida) { - for (TipoIcms tipoIcms : cr.getDescontosIcms()) { - if (tipoIcms.equals(TipoIcms.INTERNET) || tipoIcms.equals(TipoIcms.GAP_IMPRESSA)) - receitaEntrega = receitaEntrega.add(tipoIcms.getValor().negate()); - } - } - if (ptovtaComissao.getInddescontoporc()) { entregaPassagem = receitaEntrega.multiply(ptovtaComissao.getDesconto().divide(CEM)); } else { @@ -161,6 +147,18 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { return segOpcional; } + private BigDecimal calculoOutros(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, ComissaoReceita cr) { + + // Comissão Seg. Opcional = Receita Seguro Opcional * (% Com. Seg. Pol) + BigDecimal outros = BigDecimal.ZERO; + if (isAltaTemporada) { + outros = cr.getReceitaSeguroOutros().multiply(ptovtaComissao.getOutrosAlta().divide(CEM)); + } else { + outros = cr.getReceitaSeguroOutros().multiply(ptovtaComissao.getOutrosBaixa().divide(CEM)); + } + return outros; + } + private Map calculoDescontos(Integer puntoVentaId, Integer empresaId, Date periodo, PtovtaComissao ptovtaComissao) { List lsDescontos = new ArrayList(); @@ -216,6 +214,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { BigDecimal comissaoExcessoBagagem = BigDecimal.ZERO; BigDecimal comissaoSegOpcional = BigDecimal.ZERO; BigDecimal comissaoEntregaPassagem = BigDecimal.ZERO; + BigDecimal comissaoOutros = BigDecimal.ZERO; BigDecimal receitaTotal = BigDecimal.ZERO; @@ -225,26 +224,13 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { // Inicialmente só será validado os calculos de comissão em baixa temporada boolean isAltaTemporada = false; - // Receita Total -- bruta/liquida - abatimento do valor do icms - boolean isReceitaLiquida = false; - Receita receita = Receita.getByValor(ptovtaComissao.getReceita()); - if (receita.equals(Receita.RECEITALIQUIDA)) { - isReceitaLiquida = true; - receitaTotal = receitaTotal.add(cr.getReceitaBPR()).add(cr.getGapImpressa()).add(cr.getInternet()).add(cr.getReceitaGAP()); + receitaTotal = receitaTotal.add(cr.getReceitaComissao()); - for (TipoIcms tipoIcms : cr.getDescontosIcms()) { - receitaTotal = receitaTotal.add(tipoIcms.getValor().negate()); - } - - } else if (receita.equals(Receita.RECEITABRUTA)) { - receitaTotal = receitaTotal.add(cr.getReceitaBPR()).add(cr.getGapImpressa()).add(cr.getInternet()).add(cr.getReceitaGAP()); - } - - BigDecimal bpr = calculoComisssaoBPR(isAltaTemporada, isReceitaLiquida, ptovtaComissao, cr); + BigDecimal bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, cr); cr.setComissaoBPRDiaria(bpr); comissaoBPR = comissaoBPR.add(bpr); - BigDecimal entregaPassagem = calculoEntregaPassagem(isAltaTemporada, isReceitaLiquida, ptovtaComissao, cr); + BigDecimal entregaPassagem = calculoEntregaPassagem(isAltaTemporada, ptovtaComissao, cr); cr.setComissaoEntregaPassagemDiaria(entregaPassagem); comissaoEntregaPassagem = comissaoEntregaPassagem.add(entregaPassagem); @@ -256,6 +242,10 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { cr.setComissaoSegOpcionalDiaria(segOpcional); comissaoSegOpcional = comissaoSegOpcional.add(segOpcional); + BigDecimal outros = calculoOutros(isAltaTemporada, ptovtaComissao, cr); + cr.setComissaoOutrosDiaria(outros); + comissaoOutros = comissaoOutros.add(outros); + } rc.setLsReceitas(receitas); @@ -264,6 +254,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { rc.setComissaoExcessoBagagem(comissaoExcessoBagagem); rc.setComissaoSegOpcional(comissaoSegOpcional); rc.setComissaoEntregaPassagem(comissaoEntregaPassagem); + rc.setComissaoOutros(comissaoOutros); // Descontos (Fixos e Eventuais) Map respDescontos = calculoDescontos(puntoVentaId, empresaId, periodo, ptovtaComissao); @@ -287,9 +278,10 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { // Comissão à pagar = Comissão BPR + Comissão Excesso Bagagem + Comissão Seg. Opcional + Bonificação Metas + Internet(EntregaPassagem) BigDecimal comissaoPagar = BigDecimal.ZERO; comissaoPagar = comissaoPagar.add(comissaoBPR).add(comissaoExcessoBagagem).add(comissaoSegOpcional); - comissaoPagar = comissaoPagar.add(comissaoEntregaPassagem).add(comissaoBonificaoMetas); + comissaoPagar = comissaoPagar.add(comissaoEntregaPassagem).add(comissaoOutros); + comissaoPagar = comissaoPagar.add(comissaoBonificaoMetas); - // Descontos // - Descontos (Fixos e Eventuais) - Royaties - ISS retido + // - Descontos (Fixos e Eventuais) - Royaties - ISS retido comissaoPagar = comissaoPagar.add(rc.getDescontos().negate()).add(royaties.negate()).add(issRetido.negate()); rc.setComissaoPagar(comissaoPagar); @@ -329,7 +321,12 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { BigDecimal gapImpressa = BigDecimal.ZERO; int contImpressa = 0; - List descontosIcms = new ArrayList(); + // Receita Total -- bruta/liquida - abatimento do valor do icms + boolean isReceitaLiquida = false; + Receita receita = Receita.getByValor(ptovtaComissao.getReceita()); + if (receita.equals(Receita.RECEITALIQUIDA)) { + isReceitaLiquida = true; + } for (BoletoComissao rcc : list) { @@ -372,15 +369,21 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { receitaDevItem = receitaDevItem.add(rcc.getPedagio()); } + // Calculo de ICMS sobre o valor do bilhete + if (isReceitaLiquida) { + BigDecimal icsm = BigDecimal.ZERO; + icsm = receitaItem.multiply(rcc.getIcmsBase().divide(CEM)); + receitaItem = receitaItem.add(icsm.negate()); + + BigDecimal icsmDev = BigDecimal.ZERO; + icsmDev = receitaDevItem.multiply(rcc.getIcmsBase().divide(CEM)); + receitaDevItem = receitaDevItem.add(icsmDev.negate()); + + } + // Boletos impressos no punto venta if (statusBoleto.equals(IndStatusBoleto.E)) { contImpressa++; - - // Calculo de ICMS sobre o valor do bilhete - TipoIcms icms = TipoIcms.GAP_IMPRESSA; - icms.setValor(receitaItem.multiply(rcc.getIcmsBase().divide(CEM))); - descontosIcms.add(icms); - gapImpressa = gapImpressa.add(receitaItem); } else { @@ -392,32 +395,15 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { // Receita GAP if (rcc.getTipoVenta().equals(Constantes.TPV_BOLETO_REMOTO.intValue())) { - - // Calculo de ICMS sobre o valor do bilhete - TipoIcms icms = TipoIcms.GAP; - icms.setValor(receitaItem.multiply(rcc.getIcmsBase().divide(CEM))); - descontosIcms.add(icms); - receitaGAP = receitaGAP.add(receitaItem); } // Internet else if (rcc.getTipoVenta().equals(Constantes.TPV_POR_INTERNET.intValue())) { - - // Calculo de ICMS sobre o valor do bilhete - TipoIcms icms = TipoIcms.INTERNET; - icms.setValor(receitaItem.multiply(rcc.getIcmsBase().divide(CEM))); - descontosIcms.add(icms); - internet = internet.add(receitaItem); } // Receita BPR else { - // Calculo de ICMS sobre o valor do bilhete - TipoIcms icms = TipoIcms.BPR; - icms.setValor(receitaItem.multiply(rcc.getIcmsBase().divide(CEM))); - descontosIcms.add(icms); - receitaBPR = receitaBPR.add(receitaItem); } } @@ -472,15 +458,15 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService { cr.setReceitaExcessoBagagem(receitaExcessoBagagem); cr.setReceitaGAP(receitaGAP); cr.setReceitaSeguroOpcional(receitaSeguroOpcional); + cr.setReceitaSeguroOutros(receitaSeguroOutros); cr.setInternet(internet); cr.setGapImpressa(gapImpressa); cr.setContImpressa(contImpressa); - // cr.setCancelamentoICMS(cancelamentoICMS); - // cr.setReceitaICMS(receitaICMS); - - // Receita Comissão = Receita BPR + Receita GAP - GapImpressa - Internet - Cancelados - Devoluções Origem - Cancelados GAP - Devoluções GAP Origem - Devoluções - Devoluções GAP + // Receita Comissão = Receita BPR + Receita GAP + // - GapImpressa - Internet + // - Cancelados - Devoluções Origem - Cancelados GAP - Devoluções GAP Origem - Devoluções - Devoluções GAP receitaComissao = receitaComissao.add(receitaBPR).add(receitaGAP); receitaComissao = receitaComissao.add(gapImpressa.negate()).add(internet.negate()).add(cancelados.negate()); receitaComissao = receitaComissao.add(devolvidosOrigem.negate()).add(devolvidos.negate()).add(canceladosGAP.negate()); diff --git a/src/com/rjconsultores/ventaboletos/vo/comissao/ComissaoReceita.java b/src/com/rjconsultores/ventaboletos/vo/comissao/ComissaoReceita.java index ce656933c..712c530aa 100644 --- a/src/com/rjconsultores/ventaboletos/vo/comissao/ComissaoReceita.java +++ b/src/com/rjconsultores/ventaboletos/vo/comissao/ComissaoReceita.java @@ -2,25 +2,9 @@ package com.rjconsultores.ventaboletos.vo.comissao; import java.math.BigDecimal; import java.util.Date; -import java.util.List; public class ComissaoReceita { - public enum TipoIcms { - BPR, GAP, GAP_IMPRESSA, INTERNET; - - private BigDecimal valor; - - public BigDecimal getValor() { - return valor; - } - - public void setValor(BigDecimal valor) { - this.valor = valor; - } - - } - private Date data; private BigDecimal receitaComissao; private BigDecimal receitaBPR; @@ -35,14 +19,14 @@ public class ComissaoReceita { private BigDecimal devolucoesOrigemGAP; private BigDecimal receitaExcessoBagagem; private BigDecimal receitaSeguroOpcional; + private BigDecimal receitaSeguroOutros; private Integer contImpressa; private BigDecimal comissaoBPRDiaria; private BigDecimal comissaoExcessoBagagemDiaria; private BigDecimal comissaoSegOpcionalDiaria; private BigDecimal comissaoEntregaPassagemDiaria; - - List descontosIcms; + private BigDecimal comissaoOutrosDiaria; public Date getData() { return data; @@ -196,12 +180,20 @@ public class ComissaoReceita { this.comissaoEntregaPassagemDiaria = comissaoEntregaPassagemDiaria; } - public List getDescontosIcms() { - return descontosIcms; + public BigDecimal getReceitaSeguroOutros() { + return receitaSeguroOutros; } - public void setDescontosIcms(List descontosIcms) { - this.descontosIcms = descontosIcms; + public void setReceitaSeguroOutros(BigDecimal receitaSeguroOutros) { + this.receitaSeguroOutros = receitaSeguroOutros; + } + + public BigDecimal getComissaoOutrosDiaria() { + return comissaoOutrosDiaria; + } + + public void setComissaoOutrosDiaria(BigDecimal comissaoOutrosDiaria) { + this.comissaoOutrosDiaria = comissaoOutrosDiaria; } @Override diff --git a/src/com/rjconsultores/ventaboletos/vo/comissao/RegistroCalculo.java b/src/com/rjconsultores/ventaboletos/vo/comissao/RegistroCalculo.java index 0042a969a..70a072c8d 100644 --- a/src/com/rjconsultores/ventaboletos/vo/comissao/RegistroCalculo.java +++ b/src/com/rjconsultores/ventaboletos/vo/comissao/RegistroCalculo.java @@ -10,6 +10,7 @@ public class RegistroCalculo { private BigDecimal comissaoSegOpcional; private BigDecimal comissaoExcessoBagagem; private BigDecimal comissaoEntregaPassagem; + private BigDecimal comissaoOutros; // private BigDecimal bonificacao; private BigDecimal comissaoBonificaoMetas; @@ -109,6 +110,14 @@ public class RegistroCalculo { this.lsReceitas = lsReceitas; } + public BigDecimal getComissaoOutros() { + return comissaoOutros; + } + + public void setComissaoOutros(BigDecimal comissaoOutros) { + this.comissaoOutros = comissaoOutros; + } + @Override public String toString() { return "RegistroCalculo [comissaoPagar=" + comissaoPagar + ", comissaoBPR=" + comissaoBPR + ", comissaoSegOpcional=" + comissaoSegOpcional + ", comissaoExcessoBagagem=" + comissaoExcessoBagagem + ", comissaoEntregaPassagem=" + comissaoEntregaPassagem + ", comissaoBonificaoMetas=" + comissaoBonificaoMetas + ", royaties=" + royaties + ", retidoISS=" + retidoISS + ", descontos=" + descontos + ", lsDescontos=" + lsDescontos + ", lsReceitas=" + lsReceitas + "]";