fixes bug #6669
git-svn-id: http://desenvolvimento.rjconsultores.com.br/repositorio/sco/AdmVenta/Model/trunk/modelWeb@49494 d1611594-4594-4d17-8e1d-87c2c4800839master
parent
bc5faa20b2
commit
542f2c9369
|
@ -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)");
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue