Example usage for java.math MathContext MathContext

List of usage examples for java.math MathContext MathContext

Introduction

In this page you can find the example usage for java.math MathContext MathContext.

Prototype

public MathContext(int setPrecision, RoundingMode setRoundingMode) 

Source Link

Document

Constructs a new MathContext with a specified precision and rounding mode.

Usage

From source file:mx.edu.um.mateo.activos.dao.impl.ActivoDaoHibernate.java

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)/*from   w  w w.  j a  va 2  s. c  om*/
public Map<String, Object> depreciacionMensualPorCentroDeCostoDetalle(Map<String, Object> params) {
    MathContext mc = new MathContext(16, RoundingMode.HALF_UP);
    Map<String, BigDecimal> totales = new HashMap<>();
    totales.put("ACUMULADA", BigDecimal.ZERO);
    totales.put("MENSUAL", BigDecimal.ZERO);
    totales.put("ANUAL", BigDecimal.ZERO);
    totales.put("NETO", BigDecimal.ZERO);
    Usuario usuario = (Usuario) params.get("usuario");
    String centroCostoId = (String) params.get("centroCostoId");
    Date fecha = (Date) params.get("fecha");
    CCostoPK ccostoPK = new CCostoPK(usuario.getEjercicio(), centroCostoId);
    CentroCosto centroCosto = (CentroCosto) currentSession().get(CentroCosto.class, ccostoPK);
    params.put("centroCosto", centroCosto);
    Criteria criteria = currentSession().createCriteria(Activo.class);
    criteria.add(Restrictions.eq("empresa.id", usuario.getEmpresa().getId()));
    criteria.add(Restrictions.eq("centroCosto.id.ejercicio.id.idEjercicio",
            usuario.getEjercicio().getId().getIdEjercicio()));
    criteria.add(Restrictions.eq("centroCosto.id.ejercicio.id.organizacion.id",
            usuario.getEjercicio().getId().getOrganizacion().getId()));
    criteria.add(Restrictions.eq("centroCosto.id.idCosto", centroCostoId));
    criteria.add(Restrictions.le("fechaCompra", fecha));
    criteria.add(Restrictions.isNull("fechaReubicado"));
    List<Activo> activos = criteria.list();
    for (Activo activo : activos) {
        log.trace("Depreciando activo {}", activo.getId());
        activo = this.deprecia(activo, fecha);

        this.depreciacionMensualPorCentroDeCostoDetalle(activo, mc, totales);
    }

    // busca reubicados
    Query query = currentSession().createQuery(
            "select a from ReubicacionActivo ra inner join ra.activo a where ra.empresa.id = :empresaId and (ra.centroCosto.id.idCosto = :centroCostoId or ra.centroCostoAnterior.id.idCosto = :centroCostoId) and a.fechaCompra < :fecha group by a");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setString("centroCostoId", centroCostoId);
    query.setDate("fecha", fecha);
    List<Activo> reubicados = query.list();
    for (Activo activo : reubicados) {
        log.trace("Depreciando reubicado {}", activo.getId());
        query = currentSession().createQuery(
                "select r from ReubicacionActivo r where r.activo.id = :activoId order by r.fecha");
        query.setLong("activoId", activo.getId());
        List<ReubicacionActivo> reubicaciones = query.list();
        Date fechaAnterior = null;
        boolean bandera1 = true;
        for (ReubicacionActivo reubicacion : reubicaciones) {
            boolean seDeprecio = false;
            if (reubicacion.getFecha().before(fecha)
                    && reubicacion.getCentroCostoAnterior().getId().getIdCosto().equals(centroCostoId)) {
                if (fechaAnterior != null) {
                    activo.setFechaCompra(fechaAnterior);
                }
                activo.setCentroCosto(reubicacion.getCentroCostoAnterior());
                this.deprecia(activo, reubicacion.getFecha());
                activos.add(activo);
                seDeprecio = true;
            } else if (reubicacion.getCentroCostoAnterior().getId().getIdCosto().equals(centroCostoId)) {
                if (fechaAnterior != null) {
                    activo.setFechaCompra(fechaAnterior);
                }
                activo.setCentroCosto(reubicacion.getCentroCostoAnterior());
                this.deprecia(activo, fecha);
                activos.add(activo);
                seDeprecio = true;
                bandera1 = false;
            } else {
                activo.setCentroCosto(reubicacion.getCentroCostoAnterior());
            }
            fechaAnterior = reubicacion.getFecha();

            if (seDeprecio) {
                this.depreciacionMensualPorCentroDeCostoDetalle(activo, mc, totales);
            }
        }

        if (bandera1 && activo.getCentroCosto().getId().getIdCosto().equals(centroCostoId)) {
            activo.setFechaCompra(activo.getFechaReubicado());
            this.deprecia(activo, fecha);
            this.depreciacionMensualPorCentroDeCostoDetalle(activo, mc, totales);
            activos.add(activo);
        }

    }
    params.put("activos", activos);
    params.put("totales", totales);
    return params;
}

From source file:org.mifosplatform.portfolio.loanaccount.domain.Loan.java

private void regenerateRepaymentSchedule(final LoanScheduleGeneratorFactory loanScheduleFactory,
        final ApplicationCurrency applicationCurrency, final LocalDate calculatedRepaymentsStartingFromDate,
        final boolean isHolidayEnabled, final List<Holiday> holidays, final WorkingDays workingDays) {

    final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod();
    final LoanScheduleGenerator loanScheduleGenerator = loanScheduleFactory.create(interestMethod);

    final RoundingMode roundingMode = RoundingMode.HALF_EVEN;
    final MathContext mc = new MathContext(8, roundingMode);

    final Integer loanTermFrequency = this.termFrequency;
    final PeriodFrequencyType loanTermPeriodFrequencyType = PeriodFrequencyType
            .fromInt(this.termPeriodFrequencyType);
    final LoanApplicationTerms loanApplicationTerms = LoanApplicationTerms.assembleFrom(applicationCurrency,
            loanTermFrequency, loanTermPeriodFrequencyType, getDisbursementDate(),
            getExpectedFirstRepaymentOnDate(), calculatedRepaymentsStartingFromDate, getInArrearsTolerance(),
            this.loanRepaymentScheduleDetail);

    final LoanScheduleModel loanSchedule = loanScheduleGenerator.generate(mc, applicationCurrency,
            loanApplicationTerms, this.charges, isHolidayEnabled, holidays, workingDays);

    updateLoanSchedule(loanSchedule);/*from w w w .j ava 2 s .  c  o m*/
}

From source file:mx.edu.um.mateo.activos.dao.impl.ActivoDaoHibernate.java

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)//ww  w .j  a v a 2 s . c  o m
public Map<String, Object> depreciacionAcumuladaPorTipoActivo(Map<String, Object> params) {
    Usuario usuario = (Usuario) params.get("usuario");
    Query tiposDeActivoQuery = currentSession().createQuery(
            "select new map(ta.nombre as nombre, ta.cuenta.id.idCtaMayor as cuenta, ta.id as id) from TipoActivo ta where ta.cuenta.id.ejercicio.id.idEjercicio = :ejercicioId and ta.cuenta.id.ejercicio.id.organizacion.id = :organizacionId order by ta.cuenta.id.idCtaMayor");
    tiposDeActivoQuery.setString("ejercicioId", usuario.getEjercicio().getId().getIdEjercicio());
    tiposDeActivoQuery.setLong("organizacionId", usuario.getEjercicio().getId().getOrganizacion().getId());
    List<Map<String, Object>> tiposDeActivo = tiposDeActivoQuery.list();
    Map<String, Map<String, Object>> tiposDeActivoMap = new HashMap<>();
    for (Map<String, Object> tipoActivo : tiposDeActivo) {
        tipoActivo.put("ACUMULADA", BigDecimal.ZERO);
        tipoActivo.put("MENSUAL", BigDecimal.ZERO);
        tiposDeActivoMap.put((String) tipoActivo.get("cuenta"), tipoActivo);
    }
    log.trace("TiposDeActivoMap: {}", tiposDeActivoMap);

    params.put("tiposDeActivo", tiposDeActivo);

    Map<String, BigDecimal> totales = new HashMap<>();
    totales.put("ACUMULADA", BigDecimal.ZERO);
    totales.put("MENSUAL", BigDecimal.ZERO);

    Date fecha = (Date) params.get("fecha");

    MathContext mc = new MathContext(16, RoundingMode.HALF_UP);
    Query query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) from Activo a inner join a.tipoActivo where a.empresa.id = :empresaId and a.fechaCompra <= :fecha");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha);
    List<Activo> activos = query.list();
    for (Activo activo : activos) {
        log.trace("Depreciando activo {}", activo.getId());
        activo = this.deprecia(activo, fecha);

        Map<String, Object> tipoActivo = (Map<String, Object>) tiposDeActivoMap
                .get(activo.getTipoActivoCuenta());
        BigDecimal acumulada = (BigDecimal) tipoActivo.get("ACUMULADA");
        acumulada = acumulada.add(activo.getDepreciacionAcumulada(), mc);
        tipoActivo.put("ACUMULADA", acumulada);

        BigDecimal totalAcumulada = (BigDecimal) totales.get("ACUMULADA");
        totalAcumulada = totalAcumulada.add(activo.getDepreciacionAcumulada(), mc);
        totales.put("ACUMULADA", totalAcumulada);

        BigDecimal mensual = (BigDecimal) tipoActivo.get("MENSUAL");
        mensual = mensual.add(activo.getDepreciacionMensual(), mc);
        tipoActivo.put("MENSUAL", mensual);

        BigDecimal totalMensual = (BigDecimal) totales.get("MENSUAL");
        totalMensual = totalMensual.add(activo.getDepreciacionMensual(), mc);
        totales.put("MENSUAL", totalMensual);
    }

    if (log.isTraceEnabled()) {
        for (Map<String, Object> tipoActivo : tiposDeActivo) {
            log.trace("TipoActivo: {} : {} : {}", new Object[] { tipoActivo.get("nombre"),
                    tipoActivo.get("ACUMULADA"), tipoActivo.get("MENSUAL") });
        }

        log.trace("Totales: {}", totales);
    }

    params.put("totales", totales);

    return params;
}

From source file:mx.edu.um.mateo.activos.dao.impl.ActivoDaoHibernate.java

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)/* www . j av a2 s. c om*/
public Map<String, Object> depreciacionAcumuladaPorTipoActivoDetalle(Map<String, Object> params) {
    MathContext mc = new MathContext(16, RoundingMode.HALF_UP);
    Map<String, BigDecimal> totales = new HashMap<>();
    totales.put("ACUMULADA", BigDecimal.ZERO);
    totales.put("MENSUAL", BigDecimal.ZERO);
    totales.put("ANUAL", BigDecimal.ZERO);
    totales.put("NETO", BigDecimal.ZERO);
    Usuario usuario = (Usuario) params.get("usuario");
    String tipoActivoId = (String) params.get("tipoActivoId");
    Date fecha = (Date) params.get("fecha");
    Query query = currentSession().createQuery(
            "select ta from TipoActivo ta where ta.cuenta.id.idCtaMayor = :tipoActivoId and ta.cuenta.id.ejercicio.id.idEjercicio = :ejercicioId and ta.cuenta.id.ejercicio.id.organizacion.id = :organizacionId");
    query.setString("tipoActivoId", tipoActivoId);
    query.setString("ejercicioId", usuario.getEjercicio().getId().getIdEjercicio());
    query.setLong("organizacionId", usuario.getEjercicio().getId().getOrganizacion().getId());
    TipoActivo tipoActivo = (TipoActivo) query.uniqueResult();
    if (tipoActivo != null) {
        params.put("tipoActivo", tipoActivo);
        Criteria criteria = currentSession().createCriteria(Activo.class);
        criteria.add(Restrictions.eq("empresa.id", usuario.getEmpresa().getId()));
        criteria.add(Restrictions.eq("tipoActivo.id", tipoActivo.getId()));
        criteria.add(Restrictions.le("fechaCompra", fecha));
        List<Activo> activos = criteria.list();
        for (Activo activo : activos) {
            log.trace("Depreciando activo {}", activo.getId());
            activo = this.deprecia(activo, fecha);

            BigDecimal total = totales.get("ACUMULADA");
            total = total.add(activo.getDepreciacionAcumulada(), mc);
            totales.put("ACUMULADA", total);

            total = totales.get("MENSUAL");
            total = total.add(activo.getDepreciacionMensual(), mc);
            totales.put("MENSUAL", total);

            total = totales.get("ANUAL");
            total = total.add(activo.getDepreciacionAnual(), mc);
            totales.put("ANUAL", total);

            total = totales.get("NETO");
            total = total.add(activo.getValorNeto(), mc);
            totales.put("NETO", total);
        }
        params.put("activos", activos);
        params.put("totales", totales);

    }
    return params;
}

From source file:mx.edu.um.mateo.activos.dao.impl.ActivoDaoHibernate.java

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)// w  w w  .  j  a  va2s  .  co m
public Map<String, Object> reporteDIA(Integer anio, Usuario usuario) {
    Map<String, Object> resultado = new HashMap<>();
    Calendar fecha = Calendar.getInstance();
    fecha.setTimeInMillis(0);
    fecha.set(Calendar.DAY_OF_YEAR, 1);
    fecha.set(Calendar.YEAR, anio);
    fecha.set(Calendar.HOUR_OF_DAY, 0);

    Calendar fecha2 = Calendar.getInstance();
    fecha2.setTime(fecha.getTime());
    fecha2.add(Calendar.YEAR, 1);
    log.debug("Armando reporte dia de {} a {}", fecha, fecha2);

    MathContext mc = new MathContext(16, RoundingMode.HALF_UP);
    Map<String, Map<String, Object>> grupos = new TreeMap<>();
    BigDecimal totalCosto = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalCompras = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalBajas = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal costoFinal = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalDepreciacionAcumulada = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalComprasAcumuladas = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalBajasAcumuladas = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal totalDepreciacionFinal = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal valorNeto = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);

    Criteria criteria = currentSession().createCriteria(TipoActivo.class);
    criteria.add(Restrictions.eq("empresa.id", usuario.getEmpresa().getId()));
    List<TipoActivo> tiposDeActivo = criteria.list();
    for (TipoActivo tipoActivo : tiposDeActivo) {
        Map<String, Object> ta = new HashMap<>();
        ta.put("cuenta", tipoActivo.getCuenta().getId().getIdCtaMayor());
        ta.put("nombre", tipoActivo.getNombre());
        ta.put("costo", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("compras", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("bajas", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("costoFinal", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("depreciacionAcumulada", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("comprasAcumuladas", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("bajasAcumuladas", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("depreciacionFinal", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        ta.put("valorNeto", BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP));
        grupos.put(tipoActivo.getCuenta().getId().getIdCtaMayor(), ta);
    }

    log.debug("Activos");
    Query query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) "
                    + "from Activo a inner join a.tipoActivo " + "where a.empresa.id = :empresaId "
                    + "and a.fechaCompra <= :fecha " + "and (a.inactivo = false or a.fechaInactivo > :fecha)");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha.getTime());
    for (Activo activo : (List<Activo>) query.list()) {
        activo = this.deprecia(activo, fecha.getTime());
        Map<String, Object> ta = grupos.get(activo.getTipoActivoCuenta());
        BigDecimal costo = (BigDecimal) ta.get("costo");
        costo = costo.add(activo.getMoi(), mc);
        ta.put("costo", costo);

        BigDecimal depreciacionAcumulada = (BigDecimal) ta.get("depreciacionAcumulada");
        depreciacionAcumulada = depreciacionAcumulada.add(activo.getDepreciacionAcumulada(), mc);
        ta.put("depreciacionAcumulada", depreciacionAcumulada);

        totalCosto = totalCosto.add(activo.getMoi());
        totalDepreciacionAcumulada = totalDepreciacionAcumulada.add(activo.getDepreciacionAcumulada(), mc);

        activo = this.deprecia(activo, fecha2.getTime());
        BigDecimal depreciacionFinal = (BigDecimal) ta.get("depreciacionFinal");
        depreciacionFinal = depreciacionFinal.add(activo.getDepreciacionAcumulada(), mc);
        ta.put("depreciacionFinal", depreciacionFinal);

        totalDepreciacionFinal = totalDepreciacionFinal.add(activo.getDepreciacionAcumulada(), mc);
    }

    // Compras
    query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) "
                    + "from Activo a inner join a.tipoActivo " + "where a.empresa.id = :empresaId "
                    + "and a.fechaCompra between :fecha and :fecha2 "
                    + "and (a.inactivo = false or a.fechaInactivo > :fecha)");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha.getTime());
    query.setDate("fecha2", fecha2.getTime());
    for (Activo activo : (List<Activo>) query.list()) {
        activo = this.deprecia(activo, fecha.getTime());
        Map<String, Object> ta = grupos.get(activo.getTipoActivoCuenta());
        BigDecimal compras = (BigDecimal) ta.get("compras");
        compras = compras.add(activo.getMoi(), mc);
        ta.put("compras", compras);
        totalCompras = totalCompras.add(activo.getMoi(), mc);

        activo = this.deprecia(activo, fecha2.getTime());
        BigDecimal comprasAcumuladas = (BigDecimal) ta.get("comprasAcumuladas");
        comprasAcumuladas = comprasAcumuladas.add(activo.getDepreciacionAcumulada(), mc);
        ta.put("comprasAcumuladas", comprasAcumuladas);

        totalComprasAcumuladas = totalComprasAcumuladas.add(activo.getDepreciacionAcumulada(), mc);
        totalDepreciacionFinal = totalDepreciacionFinal.add(activo.getDepreciacionAcumulada(), mc);
    }

    // Bajas
    query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) "
                    + "from Activo a inner join a.tipoActivo " + "where a.empresa.id = :empresaId "
                    + "and a.inactivo = true and a.fechaInactivo between :fecha and :fecha2");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha.getTime());
    query.setDate("fecha2", fecha2.getTime());
    for (Activo activo : (List<Activo>) query.list()) {
        activo = this.deprecia(activo, fecha.getTime());
        Map<String, Object> ta = grupos.get(activo.getTipoActivoCuenta());
        BigDecimal bajas = (BigDecimal) ta.get("bajas");
        bajas = bajas.add(activo.getMoi(), mc);
        ta.put("bajas", bajas);

        BigDecimal bajasAcumuladas = (BigDecimal) ta.get("bajasAcumuladas");
        bajasAcumuladas = bajasAcumuladas.add(activo.getDepreciacionAcumulada(), mc);
        ta.put("bajasAcumuladas", bajasAcumuladas);

        totalBajas = totalBajas.add(activo.getMoi(), mc);
        totalBajasAcumuladas = totalBajasAcumuladas.add(activo.getDepreciacionAcumulada(), mc);
    }

    for (TipoActivo tipoActivo : tiposDeActivo) {
        Map<String, Object> grupo = grupos.get(tipoActivo.getCuenta().getId().getIdCtaMayor());
        BigDecimal costo = (BigDecimal) grupo.get("costo");
        BigDecimal compras = (BigDecimal) grupo.get("compras");
        BigDecimal bajas = (BigDecimal) grupo.get("bajas");
        BigDecimal grupoCostoFinal = costo.add(compras.subtract(bajas, mc), mc);
        grupo.put("costoFinal", grupoCostoFinal);
        costoFinal = costoFinal.add(grupoCostoFinal, mc);

        BigDecimal depreciacionFinal = (BigDecimal) grupo.get("depreciacionFinal");
        BigDecimal depreciacionAcumulada = (BigDecimal) grupo.get("depreciacionAcumulada");
        grupo.put("comprasAcumuladas", depreciacionFinal.subtract(depreciacionAcumulada, mc));
        totalComprasAcumuladas = totalDepreciacionFinal.subtract(totalDepreciacionAcumulada, mc);

        BigDecimal grupoValorNeto = grupoCostoFinal.subtract(depreciacionFinal, mc);
        grupo.put("valorNeto", grupoValorNeto);
        valorNeto = valorNeto.add(grupoValorNeto, mc);
        log.debug("{} : {} : {} : {} : {}", new Object[] { tipoActivo.getNombre(), costoFinal,
                depreciacionFinal, grupoValorNeto, valorNeto });
    }

    resultado.put("lista", grupos.values());
    resultado.put("totalCosto", totalCosto);
    resultado.put("totalCompras", totalCompras);
    resultado.put("totalBajas", totalBajas);
    resultado.put("costoFinal", costoFinal);
    resultado.put("totalDepreciacionAcumulada", totalDepreciacionAcumulada);
    resultado.put("totalComprasAcumuladas", totalComprasAcumuladas);
    resultado.put("totalBajasAcumuladas", totalBajasAcumuladas);
    resultado.put("totalDepreciacionFinal", totalDepreciacionFinal);
    resultado.put("valorNeto", valorNeto);
    return resultado;
}

From source file:mx.edu.um.mateo.activos.dao.impl.ActivoDaoHibernate.java

@Override
@Transactional(readOnly = true)//from ww w . j  a  va  2s.c  om
public Map<String, Object> concentradoDepreciacionPorCentroDeCosto(Map<String, Object> params) {
    Usuario usuario = (Usuario) params.get("usuario");
    Query tiposDeActivoQuery = currentSession().createQuery(
            "select new map(ta.nombre as nombre, ta.cuenta.id.idCtaMayor as cuenta, ta.id as id) from TipoActivo ta where ta.cuenta.id.ejercicio.id.idEjercicio = :ejercicioId and ta.cuenta.id.ejercicio.id.organizacion.id = :organizacionId order by ta.cuenta.id.idCtaMayor");
    tiposDeActivoQuery.setString("ejercicioId", usuario.getEjercicio().getId().getIdEjercicio());
    tiposDeActivoQuery.setLong("organizacionId", usuario.getEjercicio().getId().getOrganizacion().getId());
    List<Map<String, Object>> tiposDeActivo = new ArrayList<>();
    Map<String, Object> totalCC = new HashMap<>();
    totalCC.put("nombre", "");
    totalCC.put("cuenta", "TOTAL");
    totalCC.put("id", 0);
    totalCC.put("acumulada", BigDecimal.ZERO);
    totalCC.put("mensual", BigDecimal.ZERO);
    totalCC.put("anual", BigDecimal.ZERO);
    totalCC.put("valorNeto", BigDecimal.ZERO);
    totalCC.put("costo", BigDecimal.ZERO);
    tiposDeActivo.add(totalCC);
    tiposDeActivo.addAll(tiposDeActivoQuery.list());
    Map<String, Map<String, Object>> tiposDeActivoMap = new HashMap<>();
    tiposDeActivoMap.put("TOTAL", totalCC);
    for (Map<String, Object> tipoActivo : tiposDeActivo) {
        if (!tipoActivo.get("cuenta").equals("TOTAL")) {
            tipoActivo.put("acumulada", BigDecimal.ZERO);
            tipoActivo.put("mensual", BigDecimal.ZERO);
            tipoActivo.put("anual", BigDecimal.ZERO);
            tipoActivo.put("valorNeto", BigDecimal.ZERO);
            tipoActivo.put("costo", BigDecimal.ZERO);
            tiposDeActivoMap.put((String) tipoActivo.get("cuenta"), tipoActivo);
        }
    }
    params.put("tiposDeActivo", tiposDeActivo);

    Date fecha = (Date) params.get("fecha");

    MathContext mc = new MathContext(16, RoundingMode.HALF_UP);
    Map<String, Map<String, Object>> mapa1 = new TreeMap<>();
    Query query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) from Activo a inner join a.tipoActivo where a.empresa.id = :empresaId and a.fechaCompra <= :fecha and a.fechaReubicado is null");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha);
    List<Activo> activos = query.list();
    for (Activo activo : activos) {
        log.trace("Depreciando activo {}", activo.getId());
        activo = this.deprecia(activo, fecha);

        this.concentradoDepreciacionPorCentroDeCosto(activo, mc, mapa1, tiposDeActivo, tiposDeActivoMap);
    }

    query = currentSession().createQuery(
            "select new Activo(a.id, a.version, a.moi, a.fechaCompra, a.tipoActivo.porciento, a.tipoActivo.vidaUtil, a.inactivo, a.fechaInactivo, a.fechaReubicado, a.tipoActivo.cuenta.id.idCtaMayor, a.centroCosto.id.idCosto, a.centroCosto.nombre) from Activo a inner join a.tipoActivo where a.empresa.id = :empresaId and a.fechaCompra <= :fecha and a.fechaReubicado != null");
    query.setLong("empresaId", usuario.getEmpresa().getId());
    query.setDate("fecha", fecha);
    activos = query.list();
    for (Activo activo : activos) {
        query = currentSession().createQuery(
                "select r from ReubicacionActivo r where r.activo.id = :activoId order by r.fecha");
        query.setLong("activoId", activo.getId());
        List<ReubicacionActivo> reubicaciones = query.list();
        Date fechaAnterior = null;
        boolean bandera1 = true;
        for (ReubicacionActivo reubicacion : reubicaciones) {
            if (reubicacion.getFecha().before(fecha)) {
                activo.setCentroCosto(reubicacion.getCentroCostoAnterior());
                if (fechaAnterior != null) {
                    activo.setFechaCompra(fechaAnterior);
                }
                this.deprecia(activo, reubicacion.getFecha());
                fechaAnterior = reubicacion.getFecha();
            } else {
                if (fechaAnterior != null) {
                    activo.setFechaCompra(fechaAnterior);
                }
                activo.setCentroCosto(reubicacion.getCentroCostoAnterior());
                this.deprecia(activo, fecha);
                bandera1 = false;
            }

            this.concentradoDepreciacionPorCentroDeCosto(activo, mc, mapa1, tiposDeActivo, tiposDeActivoMap);
        }

        if (bandera1) {
            activo.setFechaCompra(activo.getFechaReubicado());
            this.deprecia(activo, fecha);
            this.concentradoDepreciacionPorCentroDeCosto(activo, mc, mapa1, tiposDeActivo, tiposDeActivoMap);
        }
    }

    if (log.isTraceEnabled()) {
        for (Map<String, Object> centroCosto : mapa1.values()) {
            log.trace("CentroCosto: {} : {} : {}", new Object[] { centroCosto.get("cuenta"),
                    centroCosto.get("nombre"), centroCosto.get("totales") });
        }
        log.trace("TiposDeActivo: {}", tiposDeActivo);
    }

    params.put("centrosDeCosto", mapa1.values());
    return params;
}

From source file:com.gst.portfolio.loanaccount.domain.Loan.java

public LoanScheduleModel regenerateScheduleModel(final ScheduleGeneratorDTO scheduleGeneratorDTO) {

    final RoundingMode roundingMode = MoneyHelper.getRoundingMode();
    final MathContext mc = new MathContext(8, roundingMode);

    final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod();
    final LoanApplicationTerms loanApplicationTerms = constructLoanApplicationTerms(scheduleGeneratorDTO);

    final LoanScheduleGenerator loanScheduleGenerator = scheduleGeneratorDTO.getLoanScheduleFactory()
            .create(interestMethod);/* ww w .ja  v  a  2  s  .  c o  m*/
    final LoanScheduleModel loanSchedule = loanScheduleGenerator.generate(mc, loanApplicationTerms, charges(),
            scheduleGeneratorDTO.getHolidayDetailDTO());
    return loanSchedule;
}

From source file:atlas.kingj.roi.FrmMain.java

public static String getSignificant(double value, int sigFigs) {
    MathContext mc = new MathContext(sigFigs, RoundingMode.DOWN);
    BigDecimal bigDecimal = new BigDecimal(value, mc);
    return bigDecimal.toPlainString();
}

From source file:org.apache.fineract.portfolio.loanaccount.domain.Loan.java

private LoanScheduleDTO getRecalculatedSchedule(final ScheduleGeneratorDTO generatorDTO) {

    if (!this.repaymentScheduleDetail().isInterestRecalculationEnabled() || isNpa || !isOpen()) {
        return null;
    }//from  w w  w .ja va 2 s . co  m
    final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod();
    final LoanScheduleGenerator loanScheduleGenerator = generatorDTO.getLoanScheduleFactory()
            .create(interestMethod);

    final RoundingMode roundingMode = MoneyHelper.getRoundingMode();
    final MathContext mc = new MathContext(8, roundingMode);

    final LoanApplicationTerms loanApplicationTerms = constructLoanApplicationTerms(generatorDTO);

    final LoanRepaymentScheduleTransactionProcessor loanRepaymentScheduleTransactionProcessor = this.transactionProcessorFactory
            .determineProcessor(this.transactionProcessingStrategy);

    return loanScheduleGenerator.rescheduleNextInstallments(mc, loanApplicationTerms, charges(),
            generatorDTO.getHolidayDetailDTO(), retreiveListOfTransactionsPostDisbursementExcludeAccruals(),
            loanRepaymentScheduleTransactionProcessor, repaymentScheduleInstallments,
            generatorDTO.getRecalculateFrom());
}

From source file:org.apache.fineract.portfolio.loanaccount.domain.Loan.java

public LoanRepaymentScheduleInstallment fetchPrepaymentDetail(final ScheduleGeneratorDTO scheduleGeneratorDTO,
        final LocalDate onDate) {
    LoanRepaymentScheduleInstallment installment = null;

    if (this.loanRepaymentScheduleDetail.isInterestRecalculationEnabled()) {
        final RoundingMode roundingMode = MoneyHelper.getRoundingMode();
        final MathContext mc = new MathContext(8, roundingMode);

        final InterestMethod interestMethod = this.loanRepaymentScheduleDetail.getInterestMethod();
        final LoanApplicationTerms loanApplicationTerms = constructLoanApplicationTerms(scheduleGeneratorDTO);

        final LoanScheduleGenerator loanScheduleGenerator = scheduleGeneratorDTO.getLoanScheduleFactory()
                .create(interestMethod);
        final LoanRepaymentScheduleTransactionProcessor loanRepaymentScheduleTransactionProcessor = this.transactionProcessorFactory
                .determineProcessor(this.transactionProcessingStrategy);
        installment = loanScheduleGenerator.calculatePrepaymentAmount(getCurrency(), onDate,
                loanApplicationTerms, mc, charges(), scheduleGeneratorDTO.getHolidayDetailDTO(),
                retreiveListOfTransactionsPostDisbursementExcludeAccruals(),
                loanRepaymentScheduleTransactionProcessor, this.fetchRepaymentScheduleInstallments());
    } else {//from  w  w w  .j  ava2 s . co m
        installment = this.getTotalOutstandingOnLoan();
    }
    return installment;
}