julio 2015-10-27 17:18:54 +00:00
parent bc5faa20b2
commit 542f2c9369
3 changed files with 97 additions and 86 deletions

View File

@ -13,7 +13,7 @@ import com.rjconsultores.ventaboletos.dao.DescontoComissaoDAO;
import com.rjconsultores.ventaboletos.entidad.DescontoComissao; import com.rjconsultores.ventaboletos.entidad.DescontoComissao;
@Repository("descontoComissaoDAO") @Repository("descontoComissaoDAO")
public class DescontoComissaoHibernateDAO extends GenericHibernateDAO<DescontoComissao, Long>implements DescontoComissaoDAO { public class DescontoComissaoHibernateDAO extends GenericHibernateDAO<DescontoComissao, Long> implements DescontoComissaoDAO {
@Autowired @Autowired
public DescontoComissaoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) { public DescontoComissaoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
@ -26,7 +26,8 @@ public class DescontoComissaoHibernateDAO extends GenericHibernateDAO<DescontoCo
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
sql.append("from DescontoComissao dc "); sql.append("from DescontoComissao dc ");
sql.append("where dc.puntoVenta.puntoventaId = :puntoventaId "); sql.append("where activo = 1 ");
sql.append(" and dc.puntoVenta.puntoventaId = :puntoventaId ");
sql.append(" and dc.empresa.empresaId = :empresaId "); sql.append(" and dc.empresa.empresaId = :empresaId ");
sql.append(" and dc.datainicial >= :datainicial "); sql.append(" and dc.datainicial >= :datainicial ");
sql.append(" and (dc.datafinal <= :datafinal or dc.datafinal is null)"); sql.append(" and (dc.datafinal <= :datafinal or dc.datafinal is null)");

View File

@ -7,7 +7,7 @@ import com.rjconsultores.ventaboletos.vo.comissao.RegistroCalculo;
public interface CalculoComissaoService { public interface CalculoComissaoService {
public RegistroCalculo relatorioCalculoComissao(Integer puntoVentId, Integer empresaId, Date periodo); public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException;
public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException; public void registrarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException;

View File

@ -9,6 +9,7 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang.BooleanUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -119,7 +120,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService {
} }
@Override @Override
public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) { public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException {
return realizarCalculoComissao(puntoVentaId, empresaId, periodo); return realizarCalculoComissao(puntoVentaId, empresaId, periodo);
} }
@ -142,7 +143,7 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService {
// EntregaPassagem (Internet/Venda Impressão Posterior/Outros) // EntregaPassagem (Internet/Venda Impressão Posterior/Outros)
BigDecimal entregaPassagem = BigDecimal.ZERO; BigDecimal entregaPassagem = BigDecimal.ZERO;
BigDecimal receitaEntrega = cr.getGapImpressa().add(cr.getInternet()); BigDecimal receitaEntrega = cr.getGapImpressa().add(cr.getInternet());
if (ptovtaComissao.getIndimpressaogapporc()) { if (BooleanUtils.toBoolean(ptovtaComissao.getIndimpressaogapporc())) {
entregaPassagem = receitaEntrega.multiply(ptovtaComissao.getValorImpressaoGap().divide(CEM)); entregaPassagem = receitaEntrega.multiply(ptovtaComissao.getValorImpressaoGap().divide(CEM));
} else { } else {
entregaPassagem = ptovtaComissao.getValorImpressaoGap().multiply(new BigDecimal(cr.getContImpressa())); entregaPassagem = ptovtaComissao.getValorImpressaoGap().multiply(new BigDecimal(cr.getContImpressa()));
@ -222,99 +223,108 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public RegistroCalculo realizarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) { public RegistroCalculo realizarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException {
PtovtaComissao ptovtaComissao = ptovtaComissaoService.buscarPuntaVentaEmpresa(puntoVentaId, empresaId); PtovtaComissao ptovtaComissao = ptovtaComissaoService.buscarPuntaVentaEmpresa(puntoVentaId, empresaId);
if (ptovtaComissao != null) {
List<BoletoComissao> receitasBoleto = comissaoDAO.buscarReceitasComissoes(puntoVentaId, empresaId, periodo); List<BoletoComissao> receitasBoleto = comissaoDAO.buscarReceitasComissoes(puntoVentaId, empresaId, periodo);
Calendar calendario = Calendar.getInstance(); Calendar calendario = Calendar.getInstance();
calendario.setTime(periodo); calendario.setTime(periodo);
int ultimodia = calendario.getActualMaximum(Calendar.DAY_OF_MONTH); int ultimodia = calendario.getActualMaximum(Calendar.DAY_OF_MONTH);
int mes = calendario.get(Calendar.MONTH) + 1; int mes = calendario.get(Calendar.MONTH) + 1;
int ano = calendario.get(Calendar.YEAR); int ano = calendario.get(Calendar.YEAR);
List<ComissaoReceita> receitas = calculaReceitaComissao(ptovtaComissao, receitasBoleto, ultimodia, mes, ano); List<ComissaoReceita> receitas = calculaReceitaComissao(ptovtaComissao, receitasBoleto, ultimodia, mes, ano);
RegistroCalculo rc = new RegistroCalculo(); RegistroCalculo rc = new RegistroCalculo();
BigDecimal comissaoBPR = BigDecimal.ZERO; BigDecimal comissaoBPR = BigDecimal.ZERO;
BigDecimal comissaoExcessoBagagem = BigDecimal.ZERO; BigDecimal comissaoExcessoBagagem = BigDecimal.ZERO;
BigDecimal comissaoSegOpcional = BigDecimal.ZERO; BigDecimal comissaoSegOpcional = BigDecimal.ZERO;
BigDecimal comissaoEntregaPassagem = BigDecimal.ZERO; BigDecimal comissaoEntregaPassagem = BigDecimal.ZERO;
BigDecimal comissaoOutros = BigDecimal.ZERO; BigDecimal comissaoOutros = BigDecimal.ZERO;
BigDecimal receitaTotal = BigDecimal.ZERO; BigDecimal receitaTotal = BigDecimal.ZERO;
for (ComissaoReceita cr : receitas) { for (ComissaoReceita cr : receitas) {
// Está parte esta encapsulada, posteriormente será implementada a validação de alta e baixa temporada // Está parte esta encapsulada, posteriormente será implementada a validação de alta e baixa temporada
// Inicialmente só será validado os calculos de comissão em baixa temporada // Inicialmente só será validado os calculos de comissão em baixa temporada
boolean isAltaTemporada = false; boolean isAltaTemporada = false;
receitaTotal = receitaTotal.add(cr.getReceitaComissao()); receitaTotal = receitaTotal.add(cr.getReceitaComissao());
BigDecimal bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, cr); BigDecimal bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, cr);
cr.setComissaoBPRDiaria(bpr); cr.setComissaoBPRDiaria(bpr);
comissaoBPR = comissaoBPR.add(bpr); comissaoBPR = comissaoBPR.add(bpr);
BigDecimal entregaPassagem = calculoEntregaPassagem(isAltaTemporada, ptovtaComissao, cr); BigDecimal entregaPassagem = calculoEntregaPassagem(isAltaTemporada, ptovtaComissao, cr);
cr.setComissaoEntregaPassagemDiaria(entregaPassagem); cr.setComissaoEntregaPassagemDiaria(entregaPassagem);
comissaoEntregaPassagem = comissaoEntregaPassagem.add(entregaPassagem); comissaoEntregaPassagem = comissaoEntregaPassagem.add(entregaPassagem);
BigDecimal excessoBagagem = calculoExcessoBagagem(isAltaTemporada, ptovtaComissao, cr); BigDecimal excessoBagagem = calculoExcessoBagagem(isAltaTemporada, ptovtaComissao, cr);
cr.setComissaoExcessoBagagemDiaria(excessoBagagem); cr.setComissaoExcessoBagagemDiaria(excessoBagagem);
comissaoExcessoBagagem = comissaoExcessoBagagem.add(excessoBagagem); comissaoExcessoBagagem = comissaoExcessoBagagem.add(excessoBagagem);
BigDecimal segOpcional = calculoSeguroOpcional(isAltaTemporada, ptovtaComissao, cr); BigDecimal segOpcional = calculoSeguroOpcional(isAltaTemporada, ptovtaComissao, cr);
cr.setComissaoSegOpcionalDiaria(segOpcional); cr.setComissaoSegOpcionalDiaria(segOpcional);
comissaoSegOpcional = comissaoSegOpcional.add(segOpcional); comissaoSegOpcional = comissaoSegOpcional.add(segOpcional);
BigDecimal outros = calculoOutros(isAltaTemporada, ptovtaComissao, cr); BigDecimal outros = calculoOutros(isAltaTemporada, ptovtaComissao, cr);
cr.setComissaoOutrosDiaria(outros); cr.setComissaoOutrosDiaria(outros);
comissaoOutros = comissaoOutros.add(outros); comissaoOutros = comissaoOutros.add(outros);
}
rc.setLsReceitas(receitas);
rc.setComissaoBPR(comissaoBPR);
rc.setComissaoExcessoBagagem(comissaoExcessoBagagem);
rc.setComissaoSegOpcional(comissaoSegOpcional);
rc.setComissaoEntregaPassagem(comissaoEntregaPassagem);
rc.setComissaoOutros(comissaoOutros);
// Descontos (Fixos e Eventuais)
Map<String, Object> respDescontos = calculoDescontos(puntoVentaId, empresaId, periodo, ptovtaComissao);
rc.setDescontos((BigDecimal) respDescontos.get("VALOR_DESCONTOS"));
rc.setLsDescontos((List<ComissaoDesconto>) respDescontos.get("LISTA_DESCONTOS"));
/**
* Bonificação Metas
* - Meta = Eh o valor estipulado de receita dentro do periodo que a agencia deve alcançar.
* - Bonificação = Eh uma porcentagem paga encima da comissao, por alcançar a meta.
*/
BigDecimal comissaoBonificaoMetas = BigDecimal.ZERO;
rc.setComissaoBonificaoMetas(comissaoBonificaoMetas);
// Royaties
BigDecimal royaties = BigDecimal.ZERO;
royaties = receitaTotal.multiply(ptovtaComissao.getRoyalties().divide(CEM));
rc.setRoyaties(royaties);
// ISS retido
BigDecimal issRetido = BigDecimal.ZERO;
issRetido = receitaTotal.multiply(ptovtaComissao.getIssretido().divide(CEM));
rc.setRetidoISS(issRetido);
// 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(comissaoOutros);
comissaoPagar = comissaoPagar.add(comissaoBonificaoMetas);
// - Descontos (Fixos e Eventuais) - Royaties - ISS retido
comissaoPagar = comissaoPagar.add(rc.getDescontos().negate()).add(royaties.negate()).add(issRetido.negate());
rc.setComissaoPagar(comissaoPagar);
return rc;
} else {
throw new ComissaoException("busquedaCalculoComissaoController.PtovtaComissao.exception");
} }
rc.setLsReceitas(receitas);
rc.setComissaoBPR(comissaoBPR);
rc.setComissaoExcessoBagagem(comissaoExcessoBagagem);
rc.setComissaoSegOpcional(comissaoSegOpcional);
rc.setComissaoEntregaPassagem(comissaoEntregaPassagem);
rc.setComissaoOutros(comissaoOutros);
// Descontos (Fixos e Eventuais)
Map<String, Object> respDescontos = calculoDescontos(puntoVentaId, empresaId, periodo, ptovtaComissao);
rc.setDescontos((BigDecimal) respDescontos.get("VALOR_DESCONTOS"));
rc.setLsDescontos((List<ComissaoDesconto>) respDescontos.get("LISTA_DESCONTOS"));
// Bonificação Metas
BigDecimal comissaoBonificaoMetas = BigDecimal.ZERO;
rc.setComissaoBonificaoMetas(comissaoBonificaoMetas);
// Royaties
BigDecimal royaties = BigDecimal.ZERO;
royaties = receitaTotal.multiply(ptovtaComissao.getRoyalties().divide(CEM));
rc.setRoyaties(royaties);
// ISS retido
BigDecimal issRetido = BigDecimal.ZERO;
issRetido = receitaTotal.multiply(ptovtaComissao.getIssretido().divide(CEM));
rc.setRetidoISS(issRetido);
// 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(comissaoOutros);
comissaoPagar = comissaoPagar.add(comissaoBonificaoMetas);
// - Descontos (Fixos e Eventuais) - Royaties - ISS retido
comissaoPagar = comissaoPagar.add(rc.getDescontos().negate()).add(royaties.negate()).add(issRetido.negate());
rc.setComissaoPagar(comissaoPagar);
return rc;
} }
private List<ComissaoReceita> calculaReceitaComissao(PtovtaComissao ptovtaComissao, List<BoletoComissao> receitasBoleto, Integer ultimodia, Integer mes, Integer ano) { private List<ComissaoReceita> calculaReceitaComissao(PtovtaComissao ptovtaComissao, List<BoletoComissao> receitasBoleto, Integer ultimodia, Integer mes, Integer ano) {
@ -365,36 +375,36 @@ public class CalculoComissaoServiceImpl implements CalculoComissaoService {
BigDecimal receitaDevItem = BigDecimal.ZERO; BigDecimal receitaDevItem = BigDecimal.ZERO;
// Totais // Totais
if (ptovtaComissao.getTarifaReceita()) { if (BooleanUtils.toBoolean(ptovtaComissao.getTarifaReceita())) {
receitaItem = receitaItem.add(rcc.getValorpagado()); receitaItem = receitaItem.add(rcc.getValorpagado());
} }
if (ptovtaComissao.getTaxaReceita()) { if (BooleanUtils.toBoolean(ptovtaComissao.getTaxaReceita())) {
receitaItem = receitaItem.add(rcc.getEmbarque()); receitaItem = receitaItem.add(rcc.getEmbarque());
} }
if (ptovtaComissao.getSeguroReceita()) { if (BooleanUtils.toBoolean(ptovtaComissao.getSeguroReceita())) {
receitaItem = receitaItem.add(rcc.getSeguro()); receitaItem = receitaItem.add(rcc.getSeguro());
} }
if (ptovtaComissao.getPedagioReceita()) { if (BooleanUtils.toBoolean(ptovtaComissao.getPedagioReceita())) {
receitaItem = receitaItem.add(rcc.getPedagio()); receitaItem = receitaItem.add(rcc.getPedagio());
} }
// Totais de Devolução / Cancelamento // Totais de Devolução / Cancelamento
if (ptovtaComissao.getTarifaDev()) { if (BooleanUtils.toBoolean(ptovtaComissao.getTarifaDev())) {
receitaDevItem = receitaDevItem.add(rcc.getValorpagado()); receitaDevItem = receitaDevItem.add(rcc.getValorpagado());
} }
if (ptovtaComissao.getTaxaDev()) { if (BooleanUtils.toBoolean(ptovtaComissao.getTaxaDev())) {
receitaDevItem = receitaDevItem.add(rcc.getEmbarque()); receitaDevItem = receitaDevItem.add(rcc.getEmbarque());
} }
if (ptovtaComissao.getSeguroDev()) { if (BooleanUtils.toBoolean(ptovtaComissao.getSeguroDev())) {
receitaDevItem = receitaDevItem.add(rcc.getSeguro()); receitaDevItem = receitaDevItem.add(rcc.getSeguro());
} }
if (ptovtaComissao.getPedagioDev()) { if (BooleanUtils.toBoolean(ptovtaComissao.getPedagioDev())) {
receitaDevItem = receitaDevItem.add(rcc.getPedagio()); receitaDevItem = receitaDevItem.add(rcc.getPedagio());
} }