AdmMono/src/com/rjconsultores/ventaboletos/service/impl/CalculoComissaoServiceImpl....

1012 lines
46 KiB
Java
Raw Blame History

package com.rjconsultores.ventaboletos.service.impl;
import java.io.ByteArrayOutputStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.BooleanUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.zkoss.util.resource.Labels;
import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.constantes.TipoEventoExtra;
import com.rjconsultores.ventaboletos.dao.ComissaoDAO;
import com.rjconsultores.ventaboletos.dao.ConferenciaComissaoDAO;
import com.rjconsultores.ventaboletos.entidad.Comissao;
import com.rjconsultores.ventaboletos.entidad.Conferencia;
import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.entidad.DescontoComissao;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EmpresaImposto;
import com.rjconsultores.ventaboletos.entidad.PtovtaComissao;
import com.rjconsultores.ventaboletos.entidad.PtovtaComissao.Receita;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.enums.IndStatusBoleto;
import com.rjconsultores.ventaboletos.enums.MimeType;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.exception.ComissaoException;
import com.rjconsultores.ventaboletos.service.CalculoComissaoService;
import com.rjconsultores.ventaboletos.service.ComissaoReceitaService;
import com.rjconsultores.ventaboletos.service.ComissaoService;
import com.rjconsultores.ventaboletos.service.ConferenciaComissaoService;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.DescontoComissaoService;
import com.rjconsultores.ventaboletos.service.EmpresaImpostoService;
import com.rjconsultores.ventaboletos.service.PtovtaComissaoService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.MoneyHelper;
import com.rjconsultores.ventaboletos.utilerias.SendMail;
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.EventosFinanceirosVO;
import com.rjconsultores.ventaboletos.vo.comissao.HistoricoComissao;
import com.rjconsultores.ventaboletos.vo.comissao.RegistroCalculo;
@Service("calculoComissaoService")
public class CalculoComissaoServiceImpl implements CalculoComissaoService {
private static final Logger log = LoggerFactory.getLogger(CalculoComissaoServiceImpl.class);
private static final BigDecimal CEM = BigDecimal.TEN.multiply(BigDecimal.TEN);
@Autowired
private PtovtaComissaoService ptovtaComissaoService;
@Autowired
private EmpresaImpostoService empresaImpostoService;
@Autowired
private ComissaoService comissaoService;
@Autowired
private ComissaoDAO comissaoDAO;
@Autowired
private ConferenciaComissaoDAO conferenciaComissaoDAO;
@Autowired
private ConferenciaComissaoService conferenciaComissaoService;
@Autowired
private DescontoComissaoService descontoComissaoService;
@Autowired
private ConstanteService constanteService;
@Autowired
private ComissaoReceitaService comissaoReceitaService;
public boolean validaCompetencia(Date periodo) {
Calendar calendario = Calendar.getInstance();
calendario.setTime(periodo);
int mes = calendario.get(Calendar.MONTH) + 1;
int ano = calendario.get(Calendar.YEAR);
Calendar now = Calendar.getInstance();
int mesNow = now.get(Calendar.MONTH) + 1;
int anoNow = now.get(Calendar.YEAR);
if (anoNow == ano) {
if (mesNow > mes) {
return true;
}
} else if (anoNow > ano) {
return true;
}
return false;
}
@Override
@Transactional
public void registrarCalculoComissao(PuntoVenta puntoVenta, Empresa empresa, Date periodo, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException {
try {
if (validaCompetencia(periodo)) {
String competencia = DateUtil.getStringDate(periodo, "MM/yyyy");
if(isRetencaoDiaria || conferenciaComissaoService.isConferenciaCompetenciaEncerrada(competencia, empresa, puntoVenta)) {
Comissao comissaoCadastrada = comissaoDAO.buscaComissaoVigencia(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), competencia);
if (comissaoCadastrada == null) {
RegistroCalculo rc = realizarCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), periodo, isRetencaoDiaria, usuarioId, isRefazerCalculo);
Comissao comissao = new Comissao();
comissao.setCompetencia(competencia);
comissao.setEmpresaId(empresa.getEmpresaId());
comissao.setPuntoVenta(puntoVenta);
comissao.setBonificacaoMetas(rc.getComissaoBonificaoMetas());
comissao.setComissaoBpr(rc.getComissaoBPR());
comissao.setEntregasPassagem(rc.getComissaoEntregaPassagem());
comissao.setReceitaExcessobagagem(rc.getComissaoExcessoBagagem());
comissao.setReceitaSeguroopcional(rc.getComissaoSegOpcional());
comissao.setReceitaOutros(rc.getComissaoOutros());
comissao.setRoyaties(rc.getRoyaties());
comissao.setIssRetido(rc.getRetidoISS());
comissao.setIndPago(false);
comissao.setUsuarioPagamentoId(null);
comissao.setDataPagamento(null);
comissao.setDescontosEventuais(BigDecimal.ZERO);
comissao.setDescontosFixos(BigDecimal.ZERO);
for (ComissaoDesconto cd : rc.getLsDescontos()) {
if (cd.getTipo().equals(TipoDesconto.EVENTUAL)) {
comissao.setDescontosEventuais(cd.getValorDesconto());
} else if (cd.getTipo().equals(TipoDesconto.FIXO)) {
comissao.setDescontosFixos(cd.getValorDesconto());
}
}
for (ComissaoReceita comissaoReceita : rc.getLsReceitas()) {
comissao.setReceitaBPR(MoneyHelper.somar(comissao.getReceitaBPR(), comissaoReceita.getReceitaBPR(), 2));
comissao.setDevolvidos(MoneyHelper.somar(comissao.getDevolvidos(), comissaoReceita.getDevolvidosRelatorio(), 2));
comissao.setDevolvidos(MoneyHelper.somar(comissao.getDevolvidos(), comissaoReceita.getDevolvidosGAPRelatorio(), 2));
comissao.setDevolvidos(MoneyHelper.somar(comissao.getDevolvidos(), comissaoReceita.getCancelados(), 2));
comissao.setDevolvidos(MoneyHelper.somar(comissao.getDevolvidos(), comissaoReceita.getCanceladosGAP(), 2));
comissao.setDevolvidos(MoneyHelper.somar(comissao.getDevolvidos(), comissaoReceita.getCanceladosGAP(), 2));
comissao.setReceitaBrutaExcessoBagagem(MoneyHelper.somar(comissao.getReceitaBrutaExcessoBagagem(), comissaoReceita.getReceitaExcessoBagagem(), 2));
comissao.setReceitaBrutaSeguroopcional(MoneyHelper.somar(comissao.getReceitaBrutaSeguroopcional(), comissaoReceita.getReceitaSeguroOpcional(), 2));
}
comissao = comissaoService.suscribir(comissao);
} else if(!ignorarComissaoGerada){
throw new ComissaoException("busquedaCalculoComissaoController.registro.exception", null, comissaoCadastrada.getPuntoVenta().getNombpuntoventa());
}
} else {
throw new ComissaoException("busquedaCalculoComissaoController.conferenciaNaoEncerrada.exception", null, puntoVenta.getNombpuntoventa());
}
} else {
throw new ComissaoException("busquedaCalculoComissaoController.competencia.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 cancelarCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo) throws ComissaoException {
String competencia = DateUtil.getStringDate(periodo, "MM/yyyy");
Comissao comissao = comissaoDAO.buscaComissaoVigencia(puntoVentaId, empresaId, competencia);
if (comissao != null) {
comissaoService.borrar(comissao);
} else {
throw new ComissaoException("busquedaCalculoComissaoController.comissao.exception");
}
}
@Override
@Transactional
public RegistroCalculo relatorioCalculoComissao(Integer puntoVentaId, Integer empresaId, Date periodo, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException {
return realizarCalculoComissao(puntoVentaId, empresaId, periodo, isRetencaoDiaria, usuarioId, isRefazerCalculo);
}
private BigDecimal calculoComisssaoBPR(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, BigDecimal bpr, BigDecimal gap) {
// Comiss<73>o BPR = Receita Comiss<73>o * (% Com BPR)
BigDecimal recbpr = BigDecimal.ZERO;
BigDecimal receitaBPR = MoneyHelper.somar(bpr, gap, 2);
if (isAltaTemporada) {
recbpr = MoneyHelper.multiplicar(receitaBPR, MoneyHelper.dividir( ptovtaComissao.getPassagemAlta() != null ? ptovtaComissao.getPassagemAlta() : BigDecimal.ZERO,CEM,4), 4);
} else {
recbpr = MoneyHelper.multiplicar(receitaBPR, MoneyHelper.dividir( ptovtaComissao.getPassagemBaixa() != null ? ptovtaComissao.getPassagemBaixa() : BigDecimal.ZERO,CEM,4), 4);
}
return recbpr;
}
private BigDecimal calculoEntregaPassagem(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, BigDecimal gapImpressa, BigDecimal internet, int contImpressa) {
// EntregaPassagem (Internet/Venda Impress<73>o Posterior/Outros)
BigDecimal entregaPassagem = BigDecimal.ZERO;
BigDecimal receitaEntrega = MoneyHelper.somar(gapImpressa, internet, 2);
if(ptovtaComissao.getValorImpressaoGap() != null) {
if (BooleanUtils.toBoolean(ptovtaComissao.getIndimpressaogapporc())) {
entregaPassagem = MoneyHelper.multiplicar(receitaEntrega, ptovtaComissao.getValorImpressaoGap() != null ? MoneyHelper.dividir(ptovtaComissao.getValorImpressaoGap(),CEM,4) : BigDecimal.ZERO, 4);
} else {
entregaPassagem = ptovtaComissao.getValorImpressaoGap() != null ? MoneyHelper.multiplicar(ptovtaComissao.getValorImpressaoGap(),new BigDecimal(contImpressa), 2) : BigDecimal.ZERO;
}
}
return entregaPassagem;
}
private BigDecimal calculoExcessoBagagem(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, BigDecimal excBag) {
// Comiss<73>o Excesso = Receita Excesso Bagagem * (% Com. Exc. Bag)
BigDecimal excessoBagagem = BigDecimal.ZERO;
if (isAltaTemporada) {
excessoBagagem = MoneyHelper.multiplicar(excBag, ptovtaComissao.getExcessoAlta() != null ? MoneyHelper.dividir(ptovtaComissao.getExcessoAlta(), CEM, 4) : BigDecimal.ZERO, 4);
} else {
excessoBagagem = MoneyHelper.multiplicar(excBag, ptovtaComissao.getExcessoBaixa() != null ? MoneyHelper.dividir(ptovtaComissao.getExcessoBaixa(), CEM, 4) : BigDecimal.ZERO, 4);
}
return excessoBagagem;
}
private BigDecimal calculoSeguroOpcional(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, BigDecimal segOpcional) {
// Comiss<73>o Seg. Opcional = Receita Seguro Opcional * (% Com. Seg. Pol)
BigDecimal recsegOpcional = BigDecimal.ZERO;
if (isAltaTemporada) {
recsegOpcional = MoneyHelper.multiplicar(segOpcional, ptovtaComissao.getSeguroAlta() != null ? MoneyHelper.dividir(ptovtaComissao.getSeguroAlta(), CEM, 4) : BigDecimal.ZERO, 4);
} else {
recsegOpcional = MoneyHelper.multiplicar(segOpcional, ptovtaComissao.getSeguroBaixa() != null ? MoneyHelper.dividir(ptovtaComissao.getSeguroBaixa(), CEM, 4) : BigDecimal.ZERO, 4);
}
return recsegOpcional;
}
private BigDecimal calculoOutros(boolean isAltaTemporada, PtovtaComissao ptovtaComissao, BigDecimal outros) {
// Comiss<73>o Seg. Opcional = Receita Seguro Opcional * (% Com. Seg. Pol)
BigDecimal recoutros = BigDecimal.ZERO;
if (isAltaTemporada) {
recoutros = MoneyHelper.multiplicar(outros, ptovtaComissao.getOutrosAlta() != null ? MoneyHelper.dividir(ptovtaComissao.getOutrosAlta(), CEM, 4) : BigDecimal.ZERO, 4);
} else {
recoutros = MoneyHelper.multiplicar(outros, ptovtaComissao.getOutrosBaixa() != null ? MoneyHelper.dividir(ptovtaComissao.getOutrosBaixa(), CEM, 4) : BigDecimal.ZERO, 4);
}
return recoutros;
}
private Map<String, Object> calculoDescontos(Integer puntoVentaId, Integer empresaId, Date periodo, PtovtaComissao ptovtaComissao) {
List<ComissaoDesconto> lsDescontos = new ArrayList<ComissaoDesconto>();
BigDecimal valorDescontoTotal = BigDecimal.ZERO;
Date inicioPeriodo = DateUtil.inicioFechaPeriodoMeses(periodo);
Date fimPeriodo = DateUtil.fimFechaPeriodoMeses(periodo);
List<DescontoComissao> itensDescontos = descontoComissaoService.buscaDescontoComissaoPeriodo(puntoVentaId, empresaId, inicioPeriodo, fimPeriodo);
for (DescontoComissao dc : itensDescontos) {
BigDecimal valorDesconto = dc.getPreco();
valorDescontoTotal = MoneyHelper.somar(valorDescontoTotal, valorDesconto, 2);
ComissaoDesconto desconto = new ComissaoDesconto();
if (dc.getDatafinal() == null) {
desconto.setTipo(TipoDesconto.FIXO);
} else {
desconto.setTipo(TipoDesconto.EVENTUAL);
}
desconto.setNomeDesconto(dc.getItemDesconto().getNomitemdesconto());
desconto.setValorDesconto(valorDesconto);
lsDescontos.add(desconto);
}
Map<String, Object> respDescontos = new HashMap<String, Object>();
respDescontos.put("LISTA_DESCONTOS", lsDescontos);
respDescontos.put("VALOR_DESCONTOS", valorDescontoTotal);
return respDescontos;
}
@Transactional
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())) {
//Abate no valor da comiss<73>o bpr as sa<73>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<ComissaoReceita> receitas = null;
if(isRefazerCalculo) {
comissaoReceitaService.limparComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal);
List<BoletoComissao> receitasBoleto = conferenciaComissaoDAO.carregarBilhetesComissao(conferencia, true, consideraBilhetesDevolvidosEmOutraAgencia);
log.info("Total de bilhetes: " + receitasBoleto.size());
List<EventosFinanceirosVO> 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);
}
} 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");
}
}
return null;
}
private List<ComissaoReceita> recuperarComissaoReceita(Integer empresaId, Integer puntoVentaId, Date dataInicial, Date dataFinal) {
return comissaoReceitaService.recuperarComissaoReceita(empresaId, puntoVentaId, dataInicial, dataFinal);
}
/**
* Retem dados para calculo da comissao
* @param empresaId
* @param puntoVentaId
* @param usuarioId
* @param receitas
* @throws BusinessException
*/
private void reterComissaoReceitaDiaria(Integer empresaId, Integer puntoVentaId, Integer usuarioId, List<ComissaoReceita> receitas) throws BusinessException {
comissaoReceitaService.reterComissaoReceitaDiaria(empresaId, puntoVentaId, usuarioId, receitas);
}
/**
* Carrega os dados de registro de calculo, conforme receitas
* @param ptovtaComissao
* @param puntoVentaId
* @param empresaId
* @param periodo
* @param receitas
* @return
* @throws BusinessException
*/
@SuppressWarnings("unchecked")
private RegistroCalculo calcularRegistroCalculo(PtovtaComissao ptovtaComissao, Integer puntoVentaId, Integer empresaId, Date periodo, List<ComissaoReceita> receitas) throws BusinessException {
try {
RegistroCalculo rc = new RegistroCalculo();
rc.setNombpuntoventa(ptovtaComissao.getPuntoventaId().getNombpuntoventa());
rc.setNumPuntoVenta(ptovtaComissao.getPuntoventaId().getNumPuntoVenta());
BigDecimal comissaoBPR = BigDecimal.ZERO;
BigDecimal comissaoExcessoBagagem = BigDecimal.ZERO;
BigDecimal comissaoSegOpcional = BigDecimal.ZERO;
BigDecimal comissaoEntregaPassagem = BigDecimal.ZERO;
BigDecimal comissaoOutros = BigDecimal.ZERO;
BigDecimal receitaTotal = BigDecimal.ZERO;
BigDecimal comissaoTotal = BigDecimal.ZERO;
for (ComissaoReceita cr : receitas) {
receitaTotal = MoneyHelper.somar(receitaTotal, cr.getReceitaComissao());
comissaoBPR = MoneyHelper.somar(comissaoBPR, cr.getComissaoBPRDiaria());
comissaoEntregaPassagem = MoneyHelper.somar(comissaoEntregaPassagem, cr.getComissaoEntregaPassagemDiaria());
comissaoExcessoBagagem = MoneyHelper.somar(comissaoExcessoBagagem, cr.getComissaoExcessoBagagemDiaria());
comissaoSegOpcional = MoneyHelper.somar(comissaoSegOpcional, cr.getComissaoSegOpcionalDiaria());
comissaoOutros = MoneyHelper.somar(comissaoOutros, cr.getComissaoOutrosDiaria());
comissaoTotal = MoneyHelper.somar(comissaoTotal, cr.getTotalComissao());
}
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<63><61>o Metas - Meta = Eh o valor estipulado de receita dentro do periodo que a agencia deve alcan<61>ar. - Bonifica<63><61>o = Eh uma porcentagem paga encima da comissao, por alcan<61>ar a meta.
*/
BigDecimal comissaoBonificaoMetas = BigDecimal.ZERO;
rc.setComissaoBonificaoMetas(comissaoBonificaoMetas);
// Royaties
BigDecimal royaties = BigDecimal.ZERO;
if(ptovtaComissao.getRoyalties() != null) {
royaties = MoneyHelper.multiplicar(receitaTotal, MoneyHelper.dividir(ptovtaComissao.getRoyalties(), CEM));
}
rc.setRoyaties(royaties);
// ISS retido
BigDecimal issRetido = BigDecimal.ZERO;
if(ptovtaComissao.getIssretido() != null) {
issRetido = MoneyHelper.multiplicar(comissaoTotal, MoneyHelper.dividir(ptovtaComissao.getIssretido(), CEM));
}
rc.setRetidoISS(issRetido);
// Comiss<73>o <20> pagar = Comiss<73>o BPR + Comiss<73>o Excesso Bagagem + Comiss<73>o Seg. Opcional + Bonifica<63><61>o Metas + Internet(EntregaPassagem)
BigDecimal comissaoPagar = BigDecimal.ZERO;
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoBPR);
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoExcessoBagagem);
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoSegOpcional);
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoEntregaPassagem);
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoOutros);
comissaoPagar = MoneyHelper.somar(comissaoPagar,comissaoBonificaoMetas);
// - Descontos (Fixos e Eventuais) - Royaties - ISS retido
comissaoPagar = MoneyHelper.subtrair(comissaoPagar,rc.getDescontos());
comissaoPagar = MoneyHelper.subtrair(comissaoPagar,royaties);
comissaoPagar = MoneyHelper.subtrair(comissaoPagar,issRetido);
rc.setComissaoPagar(comissaoPagar);
return rc;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BusinessException(e.getMessage(), e);
}
}
private boolean validaAltaTemporada(List<EmpresaImposto> impostos, Integer mes, Integer estadoId) {
if(impostos != null && mes != null && estadoId != null) {
for (EmpresaImposto ei : impostos) {
if(ei.getEstado() != null) {
if (ei.getEstado().getEstadoId().equals(estadoId)) {
switch (mes) {
case Calendar.JANUARY:
return ei.getIndJaneiro() == null ? false : ei.getIndJaneiro();
case Calendar.FEBRUARY:
return ei.getIndFevereiro() == null ? false : ei.getIndFevereiro();
case Calendar.MARCH:
return ei.getIndMarco() == null ? false : ei.getIndMarco();
case Calendar.APRIL:
return ei.getIndAbril() == null ? false : ei.getIndAbril();
case Calendar.MAY:
return ei.getIndMaio() == null ? false : ei.getIndMaio();
case Calendar.JUNE:
return ei.getIndJunho() == null ? false : ei.getIndJunho();
case Calendar.JULY:
return ei.getIndJulho() == null ? false : ei.getIndJulho();
case Calendar.AUGUST:
return ei.getIndAgosto() == null ? false : ei.getIndAgosto();
case Calendar.SEPTEMBER:
return ei.getIndSetembro() == null ? false : ei.getIndSetembro();
case Calendar.OCTOBER:
return ei.getIndOutubro() == null ? false : ei.getIndOutubro();
case Calendar.NOVEMBER:
return ei.getIndNovembro() == null ? false : ei.getIndNovembro();
case Calendar.DECEMBER:
return ei.getIndDezembro() == null ? false : ei.getIndDezembro();
default:
break;
}
}
}
}
}
return false;
}
private List<ComissaoReceita> calculaReceitaComissao(Integer empresaId, PtovtaComissao ptovtaComissao, List<BoletoComissao> receitasBoleto, Integer diaInicial, Integer diaFinal, Integer mes, Integer ano, List<EventosFinanceirosVO> eventosFinanceirosVOs) {
List<EmpresaImposto> impostos = empresaImpostoService.buscarEmpresaImposto(empresaId);
boolean isConsideraBilhetesDevolvidosEmOutraAgencia = ptovtaComissao.getIndbilhetesdevcanorigem() == null ? false : ptovtaComissao.getIndbilhetesdevcanorigem();
List<ComissaoReceita> receitas = new ArrayList<ComissaoReceita>();
for (int dia = diaInicial; dia <= diaFinal; dia++) {
Calendar cDataRegistro = Calendar.getInstance();
cDataRegistro.set(Calendar.DAY_OF_MONTH, dia);
cDataRegistro.set(Calendar.MONTH, mes);
cDataRegistro.set(Calendar.YEAR, ano);
Date dataRegistro = DateUtil.normalizarToFecha(cDataRegistro.getTime());
List<BoletoComissao> list = verificaCalculoComissaoProDia(receitasBoleto, dataRegistro);
ComissaoReceita cr = new ComissaoReceita();
cr.setData(dataRegistro);
BigDecimal receitaComissao = BigDecimal.ZERO;
BigDecimal receitaBPR = BigDecimal.ZERO;
BigDecimal receitaGAP = BigDecimal.ZERO;
BigDecimal internet = BigDecimal.ZERO;
BigDecimal receitaExcessoBagagem = BigDecimal.ZERO;
BigDecimal receitaSeguroOpcional = BigDecimal.ZERO;
BigDecimal receitaSeguroOutros = BigDecimal.ZERO;
BigDecimal cancelados = BigDecimal.ZERO;
BigDecimal canceladosOrigem = BigDecimal.ZERO;
BigDecimal devolvidos = BigDecimal.ZERO;
BigDecimal devolvidosOrigem = BigDecimal.ZERO;
BigDecimal canceladosGAP = BigDecimal.ZERO;
BigDecimal canceladosGAPOrigem = BigDecimal.ZERO;
BigDecimal devolvidosGAP = BigDecimal.ZERO;
BigDecimal devolvidosGAPOrigem = BigDecimal.ZERO;
BigDecimal gapImpressa = BigDecimal.ZERO;
int contImpressa = 0;
BigDecimal comissaoBPR = BigDecimal.ZERO;
BigDecimal comissaoExcessoBagagem = BigDecimal.ZERO;
BigDecimal comissaoSegOpcional = BigDecimal.ZERO;
BigDecimal comissaoEntregaPassagem = BigDecimal.ZERO;
BigDecimal comissaoOutros = BigDecimal.ZERO;
// 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;
}
/* Calculando comiss<73>o para os boletos */
for (BoletoComissao rcc : list) {
boolean isAltaTemporada = validaAltaTemporada(impostos, mes, rcc.getEstadoId());
IndStatusBoleto statusBoleto = IndStatusBoleto.valueOf(rcc.getIndstatusboleto());
boolean isSaidaCaixa = rcc.getMotivoCancelacionId() != null;
boolean isEntregaPassagem = statusBoleto.equals(IndStatusBoleto.E) && (rcc.getMotivoCancelacionId() == null);
if(rcc.isMotivocancelacionTransferido() || rcc.isMotivocancelacionQuitacaoOcd()) {
continue;
}
BigDecimal receitaItem = BigDecimal.ZERO;
BigDecimal receitaDevItem = BigDecimal.ZERO;
if (!isSaidaCaixa){
// Totais
if (BooleanUtils.toBoolean(ptovtaComissao.getTarifaReceita())) {
receitaItem = MoneyHelper.somar(receitaItem, rcc.getValorpagado());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getTaxaReceita())) {
receitaItem = MoneyHelper.somar(receitaItem, rcc.getEmbarque());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getSeguroReceita())) {
receitaItem = MoneyHelper.somar(receitaItem, rcc.getSeguro());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getPedagioReceita())) {
receitaItem = MoneyHelper.somar(receitaItem, rcc.getPedagio());
}
}
if (isSaidaCaixa){
// Totais de Devolu<6C><75>o / Cancelamento
if (BooleanUtils.toBoolean(ptovtaComissao.getTarifaDev())) {
receitaDevItem = MoneyHelper.somar(receitaDevItem, rcc.getValorpagado());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getTaxaDev())) {
receitaDevItem = MoneyHelper.somar(receitaDevItem, rcc.getEmbarque());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getSeguroDev())) {
receitaDevItem = MoneyHelper.somar(receitaDevItem, rcc.getSeguro());
}
if (BooleanUtils.toBoolean(ptovtaComissao.getPedagioDev())) {
receitaDevItem = MoneyHelper.somar(receitaDevItem, rcc.getPedagio());
}
}
// Calculo de ICMS sobre o valor do bilhete
if (isReceitaLiquida) {
BigDecimal icms = MoneyHelper.multiplicar(receitaItem, MoneyHelper.dividir(rcc.getIcmsBase(), CEM));
receitaItem = MoneyHelper.subtrair(receitaItem, icms);
BigDecimal icmsDev = MoneyHelper.multiplicar(receitaDevItem, MoneyHelper.dividir(rcc.getIcmsBase(), CEM));
receitaDevItem = MoneyHelper.subtrair(receitaDevItem,icmsDev);
}
BigDecimal bpr = BigDecimal.ZERO;
// Boletos impressos no punto venta
if (isEntregaPassagem) {
contImpressa++;
gapImpressa = MoneyHelper.somar(gapImpressa, receitaItem);
BigDecimal entregaPassagem = calculoEntregaPassagem(isAltaTemporada, ptovtaComissao, receitaItem, BigDecimal.ZERO, 1);
comissaoEntregaPassagem = MoneyHelper.somar(comissaoEntregaPassagem, entregaPassagem, 4);
} else {
// Receita GAP
if (rcc.getTipoVenta().equals(Constantes.TPV_BOLETO_REMOTO.intValue())) {
receitaGAP = MoneyHelper.somar(receitaGAP, receitaItem);
bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, BigDecimal.ZERO, receitaItem);
comissaoBPR = MoneyHelper.somar(comissaoBPR, bpr, 4);
}
// Internet
else if (rcc.getTipoVenta().equals(Constantes.TPV_POR_INTERNET.intValue())) {
internet = MoneyHelper.somar(internet, receitaItem);
}
// Receita BPR
else {
receitaBPR = MoneyHelper.somar(receitaBPR, receitaItem);
bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, receitaItem, BigDecimal.ZERO);
comissaoBPR = MoneyHelper.somar(comissaoBPR, bpr, 4);
}
}
if (isSaidaCaixa) {
// Devolu<6C><75>o Receita
if (rcc.isMotivocancelacionDevolvido() || rcc.isMotivocancelacionGeracaoOcd() || rcc.isMotivocancelacionTrocado() || rcc.isMotivocancelacionQuitacaoOcd()) {
// Devolu<6C><75>o Receita GAP
if (rcc.getTipoVenta().equals(Constantes.TPV_BOLETO_REMOTO.intValue())) {
// Impresso Venta de otro punto venta
if (!rcc.getPtoVtaOrigem()) {
devolvidosGAPOrigem = MoneyHelper.somar(devolvidosGAPOrigem, receitaDevItem);
}
/*
* Adiciona o valor nos devolvidos caso o bilhete seja do proprio ponto de venda,
* ou caso o parametro de considerar cancelamento/devolu<6C><75>o no ponto de venda onde
* foi feita a opera<72><61>o esteja desmarcado
* Mantis #11015
*/
if(rcc.getPtoVtaOrigem() || !isConsideraBilhetesDevolvidosEmOutraAgencia) {
devolvidosGAP = MoneyHelper.somar(devolvidosGAP, receitaDevItem);
}
} else {
// Impresso Venta de otro punto venta
if (!rcc.getPtoVtaOrigem()) {
devolvidosOrigem = MoneyHelper.somar(devolvidosOrigem, receitaDevItem);
}
/*
* Adiciona o valor nos devolvidos caso o bilhete seja do proprio ponto de venda,
* ou caso o parametro de considerar cancelamento/devolu<6C><75>o no ponto de venda onde
* foi feita a opera<72><61>o esteja desmarcado
* Mantis #11015
*/
if(rcc.getPtoVtaOrigem() || !isConsideraBilhetesDevolvidosEmOutraAgencia) {
devolvidos = MoneyHelper.somar(devolvidos, receitaDevItem);
}
}
}
// Cancelamento Receita
else {
// Cancelamento Receita GAP
if (rcc.getTipoVenta().equals(Constantes.TPV_BOLETO_REMOTO.intValue())) {
if (!rcc.getPtoVtaOrigem()) {
canceladosGAPOrigem = MoneyHelper.somar(canceladosGAPOrigem, receitaDevItem);
}
/*
* Adiciona o valor nos devolvidos caso o bilhete seja do proprio ponto de venda,
* ou caso o parametro de considerar cancelamento/devolu<6C><75>o no ponto de venda onde
* foi feita a opera<72><61>o esteja desmarcado
* Mantis #11015
*/
if(rcc.getPtoVtaOrigem() || !isConsideraBilhetesDevolvidosEmOutraAgencia) {
canceladosGAP = MoneyHelper.somar(canceladosGAP, receitaDevItem);
}
} else {
if (!rcc.getPtoVtaOrigem()) {
canceladosOrigem = MoneyHelper.somar(canceladosOrigem, receitaDevItem);
}
/*
* Adiciona o valor nos devolvidos caso o bilhete seja do proprio ponto de venda,
* ou caso o parametro de considerar cancelamento/devolu<6C><75>o no ponto de venda onde
* foi feita a opera<72><61>o esteja desmarcado
* Mantis #11015
*/
if(rcc.getPtoVtaOrigem() || !isConsideraBilhetesDevolvidosEmOutraAgencia) {
cancelados = MoneyHelper.somar(cancelados, receitaDevItem);
}
}
}
/*
* Calcula a comiss<73>o caso o bilhete seja do proprio ponto de venda,
* ou caso o parametro de considerar cancelamento/devolu<6C><75>o no ponto de venda onde
* foi feita a opera<72><61>o esteja desmarcado
* Mantis #11015
*/
if(rcc.getPtoVtaOrigem() || !isConsideraBilhetesDevolvidosEmOutraAgencia) {
bpr = calculoComisssaoBPR(isAltaTemporada, ptovtaComissao, receitaDevItem, BigDecimal.ZERO);
comissaoBPR = MoneyHelper.subtrair(comissaoBPR, bpr, 4);
}
}
/*log.info("---------");
log.info("Total Bilhete: " + rcc.getTotal());
log.info("PtoVtaOrigem: " + rcc.getPtoVtaOrigem());
log.info("Status: " + rcc.getIndstatusboleto());
log.info("receitaItem: " + receitaItem);
log.info("receitaDevItem: " + receitaDevItem);
log.info("comissaoBPRItem: " + bpr);
log.info("receitaGAP: " + receitaGAP);
log.info("receitaBPR: " + receitaBPR);
log.info("ComissaoBPR: " + comissaoBPR);
log.info("cancelados: " + cancelados);
log.info("canceladosOrigem: " + canceladosOrigem);
log.info("devolvidos: " + devolvidos);
log.info("devolvidosOrigem: " + devolvidosOrigem);
log.info("canceladosGAP: " + canceladosGAP);
log.info("canceladosGAPOrigem: " + canceladosGAPOrigem);
log.info("devolvidosGAP: " + devolvidosGAP);
log.info("devolvidosGAPOrigem: " + devolvidosGAPOrigem);*/
}
/* Calculando comiss<73>o para os eventos extras */
List<EventosFinanceirosVO> listEventosFinanceiros = verificaEventoFinanceiroProDia(eventosFinanceirosVOs, dataRegistro);
for (EventosFinanceirosVO eventosFinanceiros : listEventosFinanceiros) {
boolean isAltaTemporada = validaAltaTemporada(impostos, mes, eventosFinanceiros.getEstadoId());
if(TipoEventoExtra.EXCESSO_BAGAGEM.toString().equals(eventosFinanceiros.getCvetipoevento())) {
receitaExcessoBagagem = MoneyHelper.somar(receitaExcessoBagagem, eventosFinanceiros.getImpingreso());
BigDecimal excessoBagagem = calculoExcessoBagagem(isAltaTemporada, ptovtaComissao, eventosFinanceiros.getImpingreso());
comissaoExcessoBagagem = MoneyHelper.somar(comissaoExcessoBagagem, excessoBagagem, 4);
} else if(TipoEventoExtra.SEGURO_OPCIONAL.toString().equals(eventosFinanceiros.getCvetipoevento())) {
receitaSeguroOpcional = MoneyHelper.somar(receitaSeguroOpcional, eventosFinanceiros.getImpingreso());
BigDecimal segOpcional = calculoSeguroOpcional(isAltaTemporada, ptovtaComissao, eventosFinanceiros.getImpingreso());
comissaoSegOpcional = MoneyHelper.somar(comissaoSegOpcional, segOpcional, 4);
} else {
receitaSeguroOutros = MoneyHelper.somar(receitaSeguroOutros, eventosFinanceiros.getImpingreso());
BigDecimal outros = calculoOutros(isAltaTemporada, ptovtaComissao, eventosFinanceiros.getImpingreso());
comissaoOutros = MoneyHelper.somar(comissaoOutros, outros, 4);
}
}
cr.setCancelados(cancelados);
cr.setCanceladosGAP(canceladosGAP);
cr.setDevolvidos(devolvidos);
cr.setDevolvidosGAP(devolvidosGAP);
cr.setDevolucoesOrigem(devolvidosOrigem);
cr.setDevolucoesOrigemGAP(devolvidosGAPOrigem);
cr.setReceitaBPR(receitaBPR);
cr.setReceitaExcessoBagagem(receitaExcessoBagagem);
cr.setReceitaGAP(receitaGAP);
cr.setReceitaSeguroOpcional(receitaSeguroOpcional);
cr.setReceitaSeguroOutros(receitaSeguroOutros);
cr.setInternet(internet);
cr.setGapImpressa(gapImpressa);
cr.setContImpressa(contImpressa);
// Receita Comiss<73>o = Receita BPR + Receita GAP - Cancelados - Cancelados GAP - Devolu<6C><75>es - Devolu<6C><75>es GAP
receitaComissao = MoneyHelper.somar(receitaComissao,receitaBPR);
receitaComissao = MoneyHelper.somar(receitaComissao,receitaGAP);
receitaComissao = MoneyHelper.subtrair(receitaComissao,cancelados);
receitaComissao = MoneyHelper.subtrair(receitaComissao,devolvidos);
receitaComissao = MoneyHelper.subtrair(receitaComissao,devolvidosGAP);
receitaComissao = MoneyHelper.subtrair(receitaComissao,canceladosGAP);
cr.setReceitaComissao(receitaComissao);
cr.setComissaoBPRDiaria(comissaoBPR);
cr.setComissaoEntregaPassagemDiaria(comissaoEntregaPassagem);
cr.setComissaoExcessoBagagemDiaria(comissaoExcessoBagagem);
cr.setComissaoSegOpcionalDiaria(comissaoSegOpcional);
cr.setComissaoOutrosDiaria(comissaoOutros);
receitas.add(cr);
}
return receitas;
}
private List<EventosFinanceirosVO> verificaEventoFinanceiroProDia(List<EventosFinanceirosVO> eventosFinanceirosVOs, Date dataRegistro) {
List<EventosFinanceirosVO> aux = new ArrayList<EventosFinanceirosVO>();
if(eventosFinanceirosVOs != null) {
for (EventosFinanceirosVO rcc : eventosFinanceirosVOs) {
if(rcc.getFeccorte() != null) {
if (DateUtil.compareOnlyDate(rcc.getFeccorte(), dataRegistro) == 0) {
aux.add(rcc);
}
}
}
}
return aux;
}
private List<BoletoComissao> verificaCalculoComissaoProDia(List<BoletoComissao> list, Date dataRegistro) {
List<BoletoComissao> aux = new ArrayList<BoletoComissao>();
for (BoletoComissao rcc : list) {
if (DateUtil.compareOnlyDate(rcc.getFeccorte(), dataRegistro) == 0) {
aux.add(rcc);
}
}
return aux;
}
@Override
public List<RegistroCalculo> relatorioCalculoComissao(Integer empresaId, Date periodo, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException, BusinessException {
List<RegistroCalculo> registrosCalculo = new ArrayList<RegistroCalculo>();
List<PuntoVenta> puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId);
for (PuntoVenta puntoVenta : puntoventas) {
RegistroCalculo registroCalculo = relatorioCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, periodo, usuarioId, isRetencaoDiaria, isRefazerCalculo);
totalizarRegistroCalculo(registroCalculo);
registrosCalculo.add(registroCalculo);
}
Collections.sort(registrosCalculo, new Comparator<RegistroCalculo>() {
@Override
public int compare(RegistroCalculo o1, RegistroCalculo o2) {
return o1.getNombpuntoventa().compareToIgnoreCase(o2.getNombpuntoventa());
}
});
return registrosCalculo;
}
private void totalizarRegistroCalculo(RegistroCalculo registroCalculo) {
ComissaoReceita comissaoReceitaTotal = new ComissaoReceita();
for (ComissaoReceita comissaoReceita : registroCalculo.getLsReceitas()) {
comissaoReceitaTotal.setReceitaComissao(comissaoReceitaTotal.getReceitaComissao().add(comissaoReceita.getReceitaComissao()));
comissaoReceitaTotal.setReceitaBPR(comissaoReceitaTotal.getReceitaBPR().add(comissaoReceita.getReceitaBPR()));
comissaoReceitaTotal.setReceitaGAP(comissaoReceitaTotal.getReceitaGAP().add(comissaoReceita.getReceitaGAP()));
comissaoReceitaTotal.setGapImpressa(comissaoReceitaTotal.getGapImpressa().add(comissaoReceita.getGapImpressa()));
comissaoReceitaTotal.setInternet(comissaoReceitaTotal.getInternet().add(comissaoReceita.getInternet()));
comissaoReceitaTotal.setCancelados(comissaoReceitaTotal.getCancelados().add(comissaoReceita.getCancelados()));
comissaoReceitaTotal.setCanceladosGAP(comissaoReceitaTotal.getCanceladosGAP().add(comissaoReceita.getCanceladosGAP()));
comissaoReceitaTotal.setDevolvidos(comissaoReceitaTotal.getDevolvidos().add(comissaoReceita.getDevolvidos()));
comissaoReceitaTotal.setDevolvidosGAP(comissaoReceitaTotal.getDevolvidosGAP().add(comissaoReceita.getDevolvidosGAP()));
comissaoReceitaTotal.setDevolucoesOrigem(comissaoReceitaTotal.getDevolucoesOrigem().add(comissaoReceita.getDevolucoesOrigem()));
comissaoReceitaTotal.setDevolucoesOrigemGAP(comissaoReceitaTotal.getDevolucoesOrigemGAP().add(comissaoReceita.getDevolucoesOrigemGAP()));
comissaoReceitaTotal.setReceitaExcessoBagagem(comissaoReceitaTotal.getReceitaExcessoBagagem().add(comissaoReceita.getReceitaExcessoBagagem()));
comissaoReceitaTotal.setReceitaSeguroOpcional(comissaoReceitaTotal.getReceitaSeguroOpcional().add(comissaoReceita.getReceitaSeguroOpcional()));
comissaoReceitaTotal.setReceitaSeguroOutros(comissaoReceitaTotal.getReceitaSeguroOutros().add(comissaoReceita.getReceitaSeguroOutros()));
comissaoReceitaTotal.setContImpressa(comissaoReceitaTotal.getContImpressa() + comissaoReceita.getContImpressa());
comissaoReceitaTotal.setComissaoBPRDiaria(comissaoReceitaTotal.getComissaoBPRDiaria().add(comissaoReceita.getComissaoBPRDiaria()));
comissaoReceitaTotal.setComissaoExcessoBagagemDiaria(comissaoReceitaTotal.getComissaoExcessoBagagemDiaria().add(comissaoReceita.getComissaoExcessoBagagemDiaria()));
comissaoReceitaTotal.setComissaoSegOpcionalDiaria(comissaoReceitaTotal.getComissaoSegOpcionalDiaria().add(comissaoReceita.getComissaoSegOpcionalDiaria()));
comissaoReceitaTotal.setComissaoEntregaPassagemDiaria(comissaoReceitaTotal.getComissaoEntregaPassagemDiaria().add(comissaoReceita.getComissaoEntregaPassagemDiaria()));
comissaoReceitaTotal.setComissaoOutrosDiaria(comissaoReceitaTotal.getComissaoOutrosDiaria().add(comissaoReceita.getComissaoOutrosDiaria()));
}
registroCalculo.getLsReceitas().clear();
registroCalculo.getLsReceitas().add(comissaoReceitaTotal);
}
@Override
@Transactional
public void registrarCalculoComissao(Empresa empresa, Date periodo, boolean ignorarComissaoGerada, Integer usuarioId, Boolean isRetencaoDiaria, Boolean isRefazerCalculo) throws ComissaoException {
List<PuntoVenta> puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresa.getEmpresaId());
for (PuntoVenta puntoVenta : puntoventas) {
registrarCalculoComissao(puntoVenta, empresa, periodo, ignorarComissaoGerada, usuarioId, isRetencaoDiaria, isRefazerCalculo);
}
}
@Override
@Transactional
public void cancelarCalculoComissao(Integer empresaId, Date periodo) throws ComissaoException {
List<PuntoVenta> puntoventas = comissaoDAO.buscaPuntoVentasEmpresaComComissaoParametrizada(empresaId);
for (PuntoVenta puntoVenta : puntoventas) {
cancelarCalculoComissao(puntoVenta.getPuntoventaId(), empresaId, periodo);
}
}
@Override
public List<HistoricoComissao> 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"));
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ComissaoException(e.getMessage(), e);
}
}
@Override
public void enviarEmailReciboComissao(HistoricoComissao historicoComissao, byte[] recibo) {
try {
if(StringUtils.isNotBlank(historicoComissao.getDescCorreo())) {
SendMail mail = new SendMail();
mail.setEmailToCO(historicoComissao.getDescCorreo());
Constante constante = constanteService.buscarPorNomeConstante("SMTP_COMISSAO_EMAIL");
if(constante != null) {
mail.setEmailFrom(constante.getValorconstante());
}
constante = constanteService.buscarPorNomeConstante("SMTP_COMISSAO_HOST");
if(constante != null) {
mail.setSmtpHost(constante.getValorconstante());
}
constante = constanteService.buscarPorNomeConstante("SMTP_COMISSAO_PASS");
if(constante != null) {
mail.setSmtpPassword(constante.getValorconstante());
}
constante = constanteService.buscarPorNomeConstante("SMTP_COMISSAO_PORT");
if(constante != null) {
mail.setSmtpPort(constante.getValorconstante());
}
constante = constanteService.buscarPorNomeConstante("SMTP_COMISSAO_USER");
if(constante != null) {
mail.setSmtpUser(constante.getValorconstante());
}
String assunto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.assunto", new String[] {historicoComissao.getCompetencia()});
mail.setSubject(assunto);
String texto = Labels.getLabel("busquedaCalculoComissaoController.recibo.email.texto", new String[] {historicoComissao.getCompetencia()});
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.send();
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
}
private Date getDate(int dia, int mes, int ano) {
Calendar cData = Calendar.getInstance();
cData.set(Calendar.DAY_OF_MONTH, dia);
cData.set(Calendar.MONTH, mes);
cData.set(Calendar.YEAR, ano);
return DateUtil.normalizarToFecha(cData.getTime());
}
@Override
@Transactional
public void registrarCalculoComissao(PuntoVenta puntoVenta, Empresa empresa, Date dataInicial, Date dataFinal, Integer usuarioId) throws ComissaoException, BusinessException {
try {
Calendar cDataAtual = Calendar.getInstance();
cDataAtual.setTime(dataInicial);
while(DateUtil.compareOnlyDate(cDataAtual.getTime(), dataFinal) <= 0) {
realizarCalculoComissao(puntoVenta.getPuntoventaId(), empresa.getEmpresaId(), cDataAtual.getTime(), true, usuarioId, true);
cDataAtual.add(Calendar.DAY_OF_MONTH, 1);
}
} catch (ComissaoException e) {
log.error(e.getMessage(), e);
throw e;
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new BusinessException(e.getMessage(), e);
}
}
}