daniel.zauli 2016-11-01 12:39:24 +00:00
parent 02e940f183
commit 5c2b83e93f
4 changed files with 39 additions and 25 deletions

View File

@ -8,7 +8,7 @@ import com.rjconsultores.ventaboletos.entidad.Ruta;
public interface CalcularPeajeDAO {
public List<Object> buscarCasetasPeajeWithinTramo(Ruta ruta);
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao);
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao, boolean usaICMS);
public List<Ruta> buscarRutaWithCasetaPeajeFromOrgao(OrgaoConcedente oc);
}

View File

@ -130,7 +130,7 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
}
// pra cada ruta obter as combinacoes de tramos, cada tramo com sua lista de casetaPeaje
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao) {
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao, boolean usaICMS) {
List<PeajeVO> peajes = new ArrayList<PeajeVO>();
orgao = orgaoConcedenteService.obtenerID(orgao.getOrgaoConcedenteId());
List<ClasseIndicePeaje> classeIndicePeajes = orgao.getClassesIndicePeaje();
@ -138,7 +138,7 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
List<Object> lsObj = buscarCasetasPeajeWithinTramo(ruta);
if (null != lsObj) {
for (Object arrObj : lsObj) {
peajes.add(PeajeVO.create(ruta, orgao, (Object[]) arrObj, classeIndicePeajes));
peajes.add(PeajeVO.create(ruta, orgao, (Object[]) arrObj, classeIndicePeajes, usaICMS));
}
}
}
@ -179,12 +179,14 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
ids.add(p.casetaPeajeId);
}
Query query = getSession()
.createQuery("select c from CasetaPeaje c where c.casetaPeajeId in (:ids) ");
query.setParameterList("ids", ids);
if(!ids.isEmpty()){
Query query = getSession()
.createQuery("select c from CasetaPeaje c where c.casetaPeajeId in (:ids) ");
query.setParameterList("ids", ids);
for (CasetaPeaje c : (List<CasetaPeaje>) query.list()) {
casetas.put(c.getCasetaPeajeId(), c);
for (CasetaPeaje c : (List<CasetaPeaje>) query.list()) {
casetas.put(c.getCasetaPeajeId(), c);
}
}
return casetas;
@ -303,7 +305,7 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
// ((importe * rutaCantEixos) / (indice * rutaCantAsientos)) / ( 1 - icms)
private static BigDecimal calculateImportePeajeANTT(BigDecimal importe, BigDecimal icms,
BigDecimal indice, BigDecimal rutaCantEixos, BigDecimal rutaCantAsientos) {
BigDecimal indice, BigDecimal rutaCantEixos, BigDecimal rutaCantAsientos, boolean usaICMS) {
if (ApplicationProperties.getInstance().calculoPeajeReunidasANTT()) {
// (importe * rutaCantEixos) / (indice)
@ -311,31 +313,43 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
.divide(indice, HIGH_PRECISION, RoundingMode.HALF_UP);
}
else {
return importe.multiply(rutaCantEixos)
.divide(indice.multiply(rutaCantAsientos), HIGH_PRECISION, RoundingMode.HALF_UP)
.divide(BigDecimal.ONE.subtract(icms), HIGH_PRECISION, RoundingMode.HALF_UP);
if(!usaICMS){
return importe.multiply(rutaCantEixos)
.divide(indice.multiply(rutaCantAsientos), HIGH_PRECISION, RoundingMode.HALF_UP);
}else{
return importe.multiply(rutaCantEixos)
.divide(indice.multiply(rutaCantAsientos), HIGH_PRECISION, RoundingMode.HALF_UP)
.divide(BigDecimal.ONE.subtract(icms), HIGH_PRECISION, RoundingMode.HALF_UP);
}
}
}
// ((importe * rutaCantEixos) / (indice)) / ( 1 - icms)
private static BigDecimal calculateImportePeajeARTESP(BigDecimal importe, BigDecimal icms,
BigDecimal indice, BigDecimal rutaCantEixos) {
return importe.multiply(rutaCantEixos)
.divide(indice, HIGH_PRECISION, RoundingMode.HALF_UP)
.divide(BigDecimal.ONE.subtract(icms), HIGH_PRECISION, RoundingMode.HALF_UP);
BigDecimal indice, BigDecimal rutaCantEixos, boolean usaICMS) {
if(!usaICMS){
return importe.multiply(rutaCantEixos)
.divide(indice, HIGH_PRECISION, RoundingMode.HALF_UP);
}else{
return importe.multiply(rutaCantEixos)
.divide(indice, HIGH_PRECISION, RoundingMode.HALF_UP)
.divide(BigDecimal.ONE.subtract(icms), HIGH_PRECISION, RoundingMode.HALF_UP);
}
}
private static BigDecimal calculateImportePeaje(Ruta ruta, OrgaoConcedente orgao, Object[] obj, BigDecimal indicePeaje) {
private static BigDecimal calculateImportePeaje(Ruta ruta, OrgaoConcedente orgao, Object[] obj, BigDecimal indicePeaje, boolean usaICMS) {
BigDecimal rutaCantEixos = getCantEixos(ruta);
BigDecimal indice = indicePeaje;
BigDecimal importe = getImporte(ruta, obj);
BigDecimal icms = getIcms(ruta, obj);
BigDecimal icms = usaICMS ? getIcms(ruta, obj) : null;
if (Constantes.ORGAOS_CONCEDENTES_CALCULO_ARTESP.contains(orgao.getOrgaoConcedenteId())) {
return calculateImportePeajeARTESP(importe, icms, indice, rutaCantEixos);
return calculateImportePeajeARTESP(importe, icms, indice, rutaCantEixos, usaICMS);
}
if (Constantes.ORGAOS_CONCEDENTES_CALCULO_ANTT.contains(orgao.getOrgaoConcedenteId())) {
return calculateImportePeajeANTT(importe, icms, indice, rutaCantEixos, getRutaCantAsientos(ruta));
return calculateImportePeajeANTT(importe, icms, indice, rutaCantEixos, getRutaCantAsientos(ruta), usaICMS);
}
return BigDecimal.ZERO; // TODO throw an exception? como calcular quando é outro orgao concendente?
@ -353,7 +367,7 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
}
private static PeajeVO create(Ruta ruta, OrgaoConcedente orgao,
Object[] obj, List<ClasseIndicePeaje> lsClasseIndicePeaje) {
Object[] obj, List<ClasseIndicePeaje> lsClasseIndicePeaje, boolean usaICMS) {
PeajeVO pvo = new PeajeVO();
@ -365,7 +379,7 @@ public class CalcularPeajeHibernateDAO extends GenericHibernateDAO<String, Strin
pvo.orgaoId = orgao.getOrgaoConcedenteId();
pvo.casetaPeajeId = Integer.parseInt(obj[20].toString());
pvo.indicePeaje = getIndicePeaje(ruta.getClaseServicio(), orgao, lsClasseIndicePeaje);
pvo.importePeaje = calculateImportePeaje(ruta, orgao, obj, pvo.indicePeaje);
pvo.importePeaje = calculateImportePeaje(ruta, orgao, obj, pvo.indicePeaje, usaICMS);
pvo.activo = 1;
pvo.fecmodif = new Date();

View File

@ -8,5 +8,5 @@ import com.rjconsultores.ventaboletos.entidad.Ruta;
public interface CalcularPeajeService {
public List<Object> buscarCasetasPeajeWithinTramo(Ruta ruta);
public List<Ruta> buscarRutaWithCasetaPeajeFromOrgao(OrgaoConcedente oc);
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao);
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao, boolean usaICMS);
}

View File

@ -30,7 +30,7 @@ public class CalcularPeajeServiceImpl implements CalcularPeajeService{
@Override
@Transactional(rollbackFor = BusinessException.class)
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao){
return calcularPeajeDAO.gerarSQLInserirPeajes(lsRuta, orgao);
public int[] gerarSQLInserirPeajes(List<Ruta> lsRuta, OrgaoConcedente orgao, boolean usaICMS){
return calcularPeajeDAO.gerarSQLInserirPeajes(lsRuta, orgao, usaICMS);
}
}