Example usage for java.math RoundingMode HALF_UP

List of usage examples for java.math RoundingMode HALF_UP

Introduction

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

Prototype

RoundingMode HALF_UP

To view the source code for java.math RoundingMode HALF_UP.

Click Source Link

Document

Rounding mode to round towards "nearest neighbor" unless both neighbors are equidistant, in which case round up.

Usage

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

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)/*www. j av a  2  s  .  c om*/
public Map<String, Object> depreciacionAcumuladaPorCentroDeCostoDetalle(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.depreciacionAcumuladaPorCentroDeCostoDetalle(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.depreciacionAcumuladaPorCentroDeCostoDetalle(activo, mc, totales);
            }
        }

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

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

From source file:com.autentia.intra.bean.billing.FinancialRatioBean.java

public BigDecimal getBdtVar2() {
    try {//from  www.j av  a 2s. c o  m
        BigDecimal res = new BigDecimal(financialRatio.getBdt().doubleValue());
        res = res.divide(financialRatioCompTwo.getBdt(), 4, RoundingMode.HALF_UP);
        res = res.subtract(new BigDecimal(1));
        return res;

    } catch (Exception e) {
        return new BigDecimal(0);
    }
}

From source file:com.autentia.intra.bean.billing.FinancialRatioBean.java

public BigDecimal getBaitdVar1() {
    try {/*w  ww  .  j  a  v  a 2s.  c  o m*/
        BigDecimal res = new BigDecimal(financialRatio.getBaitd().doubleValue());
        res = res.divide(financialRatioCompOne.getBaitd(), 4, RoundingMode.HALF_UP);
        res = res.subtract(new BigDecimal(1));
        return res;

    } catch (Exception e) {
        return new BigDecimal(0);
    }
}

From source file:com.autentia.intra.bean.billing.FinancialRatioBean.java

public BigDecimal getBaitdVar2() {
    try {//from   www  .j a  v a2 s .  c o  m
        BigDecimal res = new BigDecimal(financialRatio.getBaitd().doubleValue());
        res = res.divide(financialRatioCompTwo.getBaitd(), 4, RoundingMode.HALF_UP);
        res = res.subtract(new BigDecimal(1));
        return res;

    } catch (Exception e) {
        return new BigDecimal(0);
    }
}

From source file:org.kuali.kfs.module.ar.service.impl.ContractsGrantsInvoiceCreateDocumentServiceImpl.java

/**
 * Finds the percentage that the given total is of the sum of the current expenditures of the given invoiceDetailAccountObjectCodes
 * @param invoiceDetailAccountObjectCodes a List of invoice detail account object codes to sum
 * @param total the total of all of the invoice detail account object codes for that account
 * @return the percentage of the total of the given List of invoice detail account object code current expenditures are of the given total
 *///from  w  w  w.  j a v a  2 s. c om
protected BigDecimal calculatePercentageByInvoiceDetailAccountObjectCodes(
        List<InvoiceDetailAccountObjectCode> invoiceDetailAccountObjectCodes, KualiDecimal total) {
    final KualiDecimal cumulativeExpenditureTotal = sumInvoiceDetailAccountObjectCodes(
            invoiceDetailAccountObjectCodes).getCumulativeExpenditures();
    return cumulativeExpenditureTotal.bigDecimalValue().divide(total.bigDecimalValue(), 10,
            RoundingMode.HALF_UP);
}

From source file:org.kuali.kfs.module.ar.service.impl.ContractsGrantsInvoiceCreateDocumentServiceImpl.java

/**
 * Given a Map of category keys mapping percentage values and an amount, find what amount each percentage would be
 * @param percentagesByCategory a map of category code keys mapping percentage values
 * @param amount the amount to split by percentages
 * @return a Map of amounts keyed by category codes
 *//*from   w  ww  .jav a2  s  . co m*/
protected Map<String, KualiDecimal> calculateAmountsByCategory(Map<String, BigDecimal> percentagesByCategory,
        KualiDecimal amount) {
    final BigDecimal bigDecimalAmount = amount.bigDecimalValue().setScale(2, RoundingMode.HALF_UP);
    Map<String, KualiDecimal> amountsByCategory = new HashMap<>();
    for (String categoryCode : percentagesByCategory.keySet()) {
        amountsByCategory.put(categoryCode,
                new KualiDecimal(bigDecimalAmount.multiply(percentagesByCategory.get(categoryCode))));
    }
    return amountsByCategory;
}

From source file:org.kuali.ole.select.document.service.impl.OleInvoiceServiceImpl.java

public OleInvoiceDocument populateInvoiceFromPurchaseOrders(OleInvoiceDocument invoiceDocument,
        HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList) {
    LOG.debug("Inside populateInvoiceFromPurchaseOrders method ");
    List<OleInvoiceItem> items = new ArrayList<>();
    if (expiredOrClosedAccountList == null) {
        expiredOrClosedAccountList = new HashMap<>();
    }/*  w w w.j  a  v a2 s  .  c om*/

    List<OleInvoiceItem> invoiceItemList = new ArrayList<>();
    OleInvoiceItem oleInvoiceItem;

    for (int count = 0; count < invoiceDocument.getItems().size(); count++) {
        OleInvoiceItem invoiceditem = (OleInvoiceItem) invoiceDocument.getItems().get(count);
        if (!(invoiceditem.getItemType().getItemTypeCode().equals("ITEM"))) {
            invoiceItemList.add(invoiceditem);
        }
    }
    invoiceDocument.setItems(invoiceItemList);
    if (invoiceDocument.getPurchaseOrderDocuments() != null
            && invoiceDocument.getPurchaseOrderDocuments().size() > 0) {
        for (OleInvoiceItem invoiceItem : (List<OleInvoiceItem>) invoiceDocument.getItems()) {
            if (invoiceItem.getItemType().isAdditionalChargeIndicator()
                    && invoiceItem.getItemUnitPrice() != null)
                invoiceItem.setPurchaseOrderIdentifier(
                        invoiceDocument.getPurchaseOrderDocuments().get(0).getPurapDocumentIdentifier());
        }
    }

    for (OlePurchaseOrderDocument po : invoiceDocument.getPurchaseOrderDocuments()) {
        /* if(this.encumberedItemExistsForInvoicing(po))
         {*/
        for (OlePurchaseOrderItem poi : (List<OlePurchaseOrderItem>) po.getItems()) {
            // check to make sure it's eligible for payment (i.e. active and has encumbrance available
            //if (this.poItemEligibleForAp(invoiceDocument, poi)) {
            if (poi.isItemForInvoice()) {
                OleInvoiceItem invoiceItem = new OleInvoiceItem(poi, invoiceDocument,
                        expiredOrClosedAccountList);

                invoiceItem.setClosePurchaseOrderIndicator(po.isClosePO());
                invoiceItem.setReopenPurchaseOrderIndicator(po.getIsReOpenPO());
                PurchasingCapitalAssetItem purchasingCAMSItem = po
                        .getPurchasingCapitalAssetItemByItemIdentifier(poi.getItemIdentifier());
                if (purchasingCAMSItem != null) {
                    invoiceItem.setCapitalAssetTransactionTypeCode(
                            purchasingCAMSItem.getCapitalAssetTransactionTypeCode());
                }
                invoiceItem.setUseTaxIndicator(po.isUseTaxIndicator());
                invoiceItem.setPurchaseOrderIdentifier(po.getPurapDocumentIdentifier());
                invoiceItem.setPostingYear(po.getPostingYear());
                invoiceItem.setAccountsPayablePurchasingDocumentLinkIdentifier(
                        po.getAccountsPayablePurchasingDocumentLinkIdentifier());
                // copy usetaxitems over
                invoiceItem.getUseTaxItems().clear();
                for (PurApItemUseTax useTax : poi.getUseTaxItems()) {
                    invoiceItem.getUseTaxItems().add(useTax);
                }
                invoiceDocument.getItems().add(invoiceItem);
                if (LOG.isDebugEnabled()) {
                    LOG.debug("Size**********************" + invoiceDocument.getItems().size());
                }
            }

            //}
        }
        //}
        invoiceDocument.setInvoicePayDate(
                calculatePayDate(invoiceDocument.getInvoiceDate(), invoiceDocument.getVendorPaymentTerms()));
        invoiceDocument
                .setTotalDollarAmount(invoiceDocument.getTotalDollarAmount().add(po.getTotalDollarAmount()));

        if (invoiceDocument.getInvoiceTypeHdnId() != null && !invoiceDocument.getInvoiceTypeHdnId().isEmpty()) {
            invoiceDocument.setInvoiceTypeId(Integer.valueOf(invoiceDocument.getInvoiceTypeHdnId()));
        }
        if (invoiceDocument.getPaymentMethodIdentifier() != null
                && !invoiceDocument.getPaymentMethodIdentifier().isEmpty()) {
            invoiceDocument.setPaymentMethodId(Integer.valueOf(invoiceDocument.getPaymentMethodIdentifier()));
        }
        if (invoiceDocument.getInvoiceSubTypeHdnId() != null
                && !invoiceDocument.getInvoiceSubTypeHdnId().isEmpty()) {
            invoiceDocument.setInvoiceSubTypeId(Integer.valueOf(invoiceDocument.getInvoiceSubTypeHdnId()));
        }

        if (invoiceDocument.getInvoiceAmount() != null && !invoiceDocument.getInvoiceAmount().isEmpty()) {
            invoiceDocument.setVendorInvoiceAmount(new KualiDecimal(invoiceDocument.getInvoiceAmount()));
        }

        if (invoiceDocument.getForeignInvoiceAmount() != null
                && !invoiceDocument.getForeignInvoiceAmount().isEmpty()) {
            invoiceDocument.setForeignVendorInvoiceAmount(
                    new KualiDecimal(invoiceDocument.getForeignInvoiceAmount()).bigDecimalValue());
            if (StringUtils.isNotBlank(invoiceDocument.getInvoiceCurrencyType())) {
                if (StringUtils.isNotBlank(invoiceDocument.getInvoiceCurrencyExchangeRate())) {
                    try {
                        Double.parseDouble(invoiceDocument.getInvoiceCurrencyExchangeRate());
                        invoiceDocument.setVendorInvoiceAmount(
                                new KualiDecimal(invoiceDocument.getForeignVendorInvoiceAmount().divide(
                                        new BigDecimal(invoiceDocument.getInvoiceCurrencyExchangeRate()), 4,
                                        RoundingMode.HALF_UP)));
                    } catch (NumberFormatException nfe) {
                        throw new RuntimeException("Invalid Exchange Rate", nfe);
                    }
                } else {
                    BigDecimal exchangeRate = getExchangeRate(invoiceDocument.getInvoiceCurrencyType())
                            .getExchangeRate();
                    invoiceDocument.setVendorInvoiceAmount(new KualiDecimal(invoiceDocument
                            .getForeignVendorInvoiceAmount().divide(exchangeRate, 4, RoundingMode.HALF_UP)));
                }
            }
        }

        Bank defaultBank = SpringContext.getBean(BankService.class)
                .getDefaultBankByDocType(invoiceDocument.getClass());
        if (defaultBank != null) {
            invoiceDocument.setBankCode(defaultBank.getBankCode());
            invoiceDocument.setBank(defaultBank);
        }
    }

    invoiceDocument.setInvoicePayDate(
            this.calculatePayDate(invoiceDocument.getInvoiceDate(), invoiceDocument.getVendorPaymentTerms()));

    /* invoice total */

    BigDecimal addChargeItem = BigDecimal.ZERO;
    List<OleInvoiceItem> item = invoiceDocument.getItems();
    for (OleInvoiceItem invoiceditem : item) {
        if (invoiceditem.getItemType().isAdditionalChargeIndicator()
                && invoiceditem.getExtendedPrice() != null) {
            addChargeItem = addChargeItem.add(invoiceditem.getExtendedPrice().bigDecimalValue());
        }
    }
    if (invoiceDocument.getTotalDollarAmount() != null) {
        invoiceDocument.setInvoiceItemTotal(
                invoiceDocument.getTotalDollarAmount().subtract(new KualiDecimal(addChargeItem)).toString());
        invoiceDocument.setDocumentTotalAmount(invoiceDocument.getTotalDollarAmount().toString());
    }
    /* invoice total */

    // add missing below the line
    //getPurapService().addBelowLineItems(invoiceDocument);
    //invoiceDocument.setAccountsPayablePurchasingDocumentLinkIdentifier(po.getAccountsPayablePurchasingDocumentLinkIdentifier());

    //fix up below the line items
    //getInvoiceService().removeIneligibleAdditionalCharges(invoiceDocument);
    LOG.debug("Leaving populateInvoiceFromPurchaseOrders method ");
    return invoiceDocument;
}

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

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)//  w  w w  . j a v a2s. c  o m
public Map<String, Object> depreciacionMensualPorCentroDeCosto(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("total", BigDecimal.ZERO);
        tiposDeActivoMap.put((String) tipoActivo.get("cuenta"), tipoActivo);
    }
    Map<String, Object> totalCC = new HashMap<>();
    totalCC.put("nombre", "");
    totalCC.put("cuenta", "TOTAL");
    totalCC.put("id", 0);
    totalCC.put("total", BigDecimal.ZERO);
    tiposDeActivo.add(totalCC);
    tiposDeActivoMap.put("TOTAL", totalCC);
    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.depreciacionMensualPorCentroDeCosto(activo, mc, mapa1, tiposDeActivo, tiposDeActivoMap);
    }

    // busca reubicados
    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) {
        log.trace("Depreciando activo {}", 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) {
            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.depreciacionMensualPorCentroDeCosto(activo, mc, mapa1, tiposDeActivo, tiposDeActivoMap);
        }

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

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

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

From source file:org.kuali.kfs.module.ar.service.impl.ContractsGrantsInvoiceCreateDocumentServiceImpl.java

/**
 * Splits an amount evenly over the given List of invoice detail account object codes
 * @param invoiceDetailAccountObjectCodes a List of invoice detail account object codes to divvy an amount equally among
 * @param amount the amount to divvy/*w w w . j  a v a 2s . c  o m*/
 */
protected void splitOutRedistribution(List<InvoiceDetailAccountObjectCode> invoiceDetailAccountObjectCodes,
        KualiDecimal amount) {
    final KualiDecimal amountEach = new KualiDecimal(amount.bigDecimalValue()
            .divide(new BigDecimal(invoiceDetailAccountObjectCodes.size()), 2, RoundingMode.HALF_UP));
    for (InvoiceDetailAccountObjectCode invoiceDetailAccountObjectCode : invoiceDetailAccountObjectCodes) {
        invoiceDetailAccountObjectCode.setCurrentExpenditures(amountEach);
    }
}

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

@Override
@SuppressWarnings("unchecked")
@Transactional(readOnly = true)/*from ww w .j  ava2 s  .  c o  m*/
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;
}