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
@Transactional(readOnly = true)//from  w ww  .j  a  va  2 s  .c  o  m
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:org.kuali.coeus.s2sgen.impl.budget.S2SBudgetCalculatorServiceImpl.java

/**
 * /*from w ww. j  ava 2 s  . c o  m*/
 * This method computes the CompensationInfo for given person, {@link org.kuali.coeus.common.budget.api.period.BudgetPeriodContract} and Proposal Numnber
 * 
 * @param keyPerson id of the proposal person.
 * @param budgetPeriod given BudgetPeriod.
 * @param proposalNumber propsal number.
 * 
 * @return {@link CompensationDto} corresponding to the personId,budgetPeriod and proposalNumber.
 */
protected CompensationDto getCompensation(KeyPersonDto keyPerson, BudgetPeriodContract budgetPeriod,
        String proposalNumber, BudgetContract budget) {
    CompensationDto compensationInfo = new CompensationDto();
    BigDecimal summerMonths = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal academicMonths = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    BigDecimal calendarMonths = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    ScaleTwoDecimal totalSal = ScaleTwoDecimal.ZERO;
    ScaleTwoDecimal fringe = ScaleTwoDecimal.ZERO;
    ScaleTwoDecimal baseAmount = ScaleTwoDecimal.ZERO;
    ScaleTwoDecimal totalSalCostSharing = ScaleTwoDecimal.ZERO;
    ScaleTwoDecimal fringeCostSharing = ScaleTwoDecimal.ZERO;
    BigDecimal numberOfMonths = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
    String budgetCatagoryCodePersonnel = s2SConfigurationService
            .getValueAsString(ConfigurationConstants.S2SBUDGET_BUDGET_CATEGORY_CODE_PERSONNEL);

    for (BudgetLineItemContract lineItem : budgetPeriod.getBudgetLineItems()) {

        for (BudgetPersonnelDetailsContract personDetails : lineItem.getBudgetPersonnelDetailsList()) {
            if (keyPersonEqualsBudgetPerson(keyPerson, personDetails)) {
                numberOfMonths = s2SDateTimeService
                        .getNumberOfMonths(personDetails.getStartDate(), personDetails.getEndDate())
                        .bigDecimalValue();
                if (personDetails.getPeriodTypeCode().equals(s2SConfigurationService
                        .getValueAsString(ConfigurationConstants.S2SBUDGET_PERIOD_TYPE_ACADEMIC_MONTHS))) {
                    if (lineItem.getSubmitCostSharingFlag()) {
                        academicMonths = academicMonths.add(personDetails.getPercentEffort().bigDecimalValue()
                                .multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                    } else {
                        academicMonths = academicMonths.add(personDetails.getPercentCharged().bigDecimalValue()
                                .multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                    }
                } else if (personDetails.getPeriodTypeCode().equals(s2SConfigurationService
                        .getValueAsString(ConfigurationConstants.S2SBUDGET_PERIOD_TYPE_SUMMER_MONTHS))) {
                    if (lineItem.getSubmitCostSharingFlag()) {
                        summerMonths = summerMonths.add(personDetails.getPercentEffort().bigDecimalValue()
                                .multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                    } else {
                        summerMonths = summerMonths.add(personDetails.getPercentCharged().bigDecimalValue()
                                .multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                    }
                } else {
                    if (StringUtils.isNotBlank(personDetails.getBudgetPerson().getTbnId())) {
                        if (lineItem.getBudgetCategory().getCode().equals(budgetCatagoryCodePersonnel)) {
                            if (lineItem.getSubmitCostSharingFlag()) {
                                calendarMonths = calendarMonths.add(personDetails.getPercentEffort()
                                        .bigDecimalValue().multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                            } else {
                                calendarMonths = calendarMonths.add(personDetails.getPercentCharged()
                                        .bigDecimalValue().multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                            }
                        }
                    } else {
                        if (lineItem.getSubmitCostSharingFlag()) {
                            calendarMonths = calendarMonths.add(personDetails.getPercentEffort()
                                    .bigDecimalValue().multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                        } else {
                            calendarMonths = calendarMonths.add(personDetails.getPercentCharged()
                                    .bigDecimalValue().multiply(numberOfMonths).multiply(POINT_ZERO_ONE));
                        }
                    }
                }
                if (StringUtils.isNotBlank(personDetails.getBudgetPerson().getTbnId())) {
                    if (lineItem.getBudgetCategory().getCode().equals(budgetCatagoryCodePersonnel)) {
                        totalSal = totalSal.add(personDetails.getSalaryRequested());
                    }
                } else {
                    totalSal = totalSal.add(personDetails.getSalaryRequested());
                }
                if (canBudgetLineItemCostSharingInclude(budget, lineItem)) {
                    if (StringUtils.isNotBlank(personDetails.getBudgetPerson().getTbnId())) {
                        if (lineItem.getBudgetCategory().getCode().equals(budgetCatagoryCodePersonnel)) {
                            totalSalCostSharing = totalSalCostSharing.add(personDetails.getCostSharingAmount());
                        }
                    } else {
                        totalSalCostSharing = totalSalCostSharing.add(personDetails.getCostSharingAmount());
                    }
                }
                for (BudgetPersonnelCalculatedAmountContract personCalculatedAmt : personDetails
                        .getBudgetPersonnelCalculatedAmounts()) {
                    if ((personCalculatedAmt.getRateClass().getRateClassType().getCode()
                            .equals(s2SConfigurationService.getValueAsString(
                                    ConfigurationConstants.S2SBUDGET_RATE_CLASS_TYPE_EMPLOYEE_BENEFITS))
                            && !personCalculatedAmt.getRateTypeCode()
                                    .equals(s2SConfigurationService.getValueAsString(
                                            ConfigurationConstants.S2SBUDGET_RATE_TYPE_SUPPORT_STAFF_SALARIES)))
                            || (personCalculatedAmt.getRateClass().getRateClassType().getCode()
                                    .equals(s2SConfigurationService.getValueAsString(
                                            ConfigurationConstants.S2SBUDGET_RATE_CLASS_TYPE_VACATION))
                                    && !personCalculatedAmt.getRateTypeCode()
                                            .equals(s2SConfigurationService.getValueAsString(
                                                    ConfigurationConstants.S2SBUDGET_RATE_TYPE_ADMINISTRATIVE_SALARIES)))) {
                        if (StringUtils.isNotBlank(personDetails.getBudgetPerson().getTbnId())) {
                            if (lineItem.getBudgetCategory().getCode().equals(budgetCatagoryCodePersonnel)) {
                                fringe = fringe.add(personCalculatedAmt.getCalculatedCost());
                            }
                        } else {
                            fringe = fringe.add(personCalculatedAmt.getCalculatedCost());
                        }
                        if (canBudgetLineItemCostSharingInclude(budget, lineItem)) {
                            if (StringUtils.isNotBlank(personDetails.getBudgetPerson().getTbnId())) {
                                if (lineItem.getBudgetCategory().getCode()
                                        .equals(budgetCatagoryCodePersonnel)) {
                                    fringeCostSharing = fringeCostSharing
                                            .add(personCalculatedAmt.getCalculatedCostSharing());
                                }
                            } else {
                                fringeCostSharing = fringeCostSharing
                                        .add(personCalculatedAmt.getCalculatedCostSharing());
                            }
                        }
                    }
                }
                BudgetPersonContract budgetPerson = personDetails.getBudgetPerson();
                if (budgetPerson != null) {
                    baseAmount = budgetPerson.getCalculationBase();
                    // baseAmount must be set to the first record value in
                    // case
                    // the execution doesnt enter the if condition below
                    String apptTypeCode = budgetPerson.getAppointmentType().getCode();
                    if (!apptTypeCode.equals(s2SConfigurationService
                            .getValueAsString(ConfigurationConstants.S2SBUDGET_APPOINTMENT_TYPE_SUM_EMPLOYEE))
                            && !apptTypeCode.equals(s2SConfigurationService.getValueAsString(
                                    ConfigurationConstants.S2SBUDGET_APPOINTMENT_TYPE_TMP_EMPLOYEE))) {
                        baseAmount = budgetPerson.getCalculationBase();
                    }
                }
            }

        }
    }
    compensationInfo.setAcademicMonths(new ScaleTwoDecimal(academicMonths));
    compensationInfo.setCalendarMonths(new ScaleTwoDecimal(calendarMonths));
    compensationInfo.setSummerMonths(new ScaleTwoDecimal(summerMonths));
    compensationInfo.setRequestedSalary(totalSal);
    compensationInfo.setBaseSalary(baseAmount);
    compensationInfo.setCostSharingAmount(totalSalCostSharing);
    compensationInfo.setFringe(fringe);
    compensationInfo.setFundsRequested(totalSal.add(fringe));
    compensationInfo.setFringeCostSharing(fringeCostSharing);
    compensationInfo.setNonFundsRequested(totalSalCostSharing.add(fringeCostSharing));
    return compensationInfo;
}

From source file:org.wso2.carbon.apimgt.impl.utils.APIUtil.java

/**
 * This method used to get API from governance artifact specific to copyAPI
 *
 * @param artifact API artifact//w  w w. j a  va  2  s. com
 * @param registry Registry
 * @return API
 * @throws APIManagementException if failed to get API from artifact
 */
public static API getAPI(GovernanceArtifact artifact, Registry registry, APIIdentifier oldId, String oldContext)
        throws APIManagementException {

    API api;
    try {
        String providerName = artifact.getAttribute(APIConstants.API_OVERVIEW_PROVIDER);
        String apiName = artifact.getAttribute(APIConstants.API_OVERVIEW_NAME);
        String apiVersion = artifact.getAttribute(APIConstants.API_OVERVIEW_VERSION);
        api = new API(new APIIdentifier(providerName, apiName, apiVersion));
        int apiId = ApiMgtDAO.getInstance().getAPIID(oldId, null);
        if (apiId == -1) {
            return null;
        }
        // set rating
        String artifactPath = GovernanceUtils.getArtifactPath(registry, artifact.getId());
        BigDecimal bigDecimal = BigDecimal.valueOf(registry.getAverageRating(artifactPath));
        BigDecimal res = bigDecimal.setScale(1, RoundingMode.HALF_UP);
        api.setRating(res.floatValue());
        //set description
        api.setDescription(artifact.getAttribute(APIConstants.API_OVERVIEW_DESCRIPTION));
        //set last access time
        api.setLastUpdated(registry.get(artifactPath).getLastModified());
        //set uuid
        api.setUUID(artifact.getId());
        // set url
        api.setStatus(getApiStatus(artifact.getAttribute(APIConstants.API_OVERVIEW_STATUS)));
        api.setThumbnailUrl(artifact.getAttribute(APIConstants.API_OVERVIEW_THUMBNAIL_URL));
        api.setWsdlUrl(artifact.getAttribute(APIConstants.API_OVERVIEW_WSDL));
        api.setWadlUrl(artifact.getAttribute(APIConstants.API_OVERVIEW_WADL));
        api.setTechnicalOwner(artifact.getAttribute(APIConstants.API_OVERVIEW_TEC_OWNER));
        api.setTechnicalOwnerEmail(artifact.getAttribute(APIConstants.API_OVERVIEW_TEC_OWNER_EMAIL));
        api.setBusinessOwner(artifact.getAttribute(APIConstants.API_OVERVIEW_BUSS_OWNER));
        api.setBusinessOwnerEmail(artifact.getAttribute(APIConstants.API_OVERVIEW_BUSS_OWNER_EMAIL));
        api.setEndpointSecured(
                Boolean.parseBoolean(artifact.getAttribute(APIConstants.API_OVERVIEW_ENDPOINT_SECURED)));
        api.setEndpointAuthDigest(
                Boolean.parseBoolean(artifact.getAttribute(APIConstants.API_OVERVIEW_ENDPOINT_AUTH_DIGEST)));
        api.setEndpointUTUsername(artifact.getAttribute(APIConstants.API_OVERVIEW_ENDPOINT_USERNAME));
        api.setEndpointUTPassword(artifact.getAttribute(APIConstants.API_OVERVIEW_ENDPOINT_PASSWORD));
        api.setTransports(artifact.getAttribute(APIConstants.API_OVERVIEW_TRANSPORTS));

        api.setEndpointConfig(artifact.getAttribute(APIConstants.API_OVERVIEW_ENDPOINT_CONFIG));

        api.setRedirectURL(artifact.getAttribute(APIConstants.API_OVERVIEW_REDIRECT_URL));
        api.setApiOwner(artifact.getAttribute(APIConstants.API_OVERVIEW_OWNER));
        api.setAdvertiseOnly(
                Boolean.parseBoolean(artifact.getAttribute(APIConstants.API_OVERVIEW_ADVERTISE_ONLY)));

        api.setSubscriptionAvailability(
                artifact.getAttribute(APIConstants.API_OVERVIEW_SUBSCRIPTION_AVAILABILITY));
        api.setSubscriptionAvailableTenants(
                artifact.getAttribute(APIConstants.API_OVERVIEW_SUBSCRIPTION_AVAILABLE_TENANTS));

        api.setResponseCache(artifact.getAttribute(APIConstants.API_OVERVIEW_RESPONSE_CACHING));
        api.setImplementation(artifact.getAttribute(APIConstants.PROTOTYPE_OVERVIEW_IMPLEMENTATION));
        api.setVisibility(artifact.getAttribute(APIConstants.API_OVERVIEW_VISIBILITY));

        String tenantDomainName = MultitenantUtils.getTenantDomain(replaceEmailDomainBack(providerName));
        int tenantId = ServiceReferenceHolder.getInstance().getRealmService().getTenantManager()
                .getTenantId(tenantDomainName);

        boolean isGlobalThrottlingEnabled = APIUtil.isAdvanceThrottlingEnabled();

        if (isGlobalThrottlingEnabled) {
            String apiLevelTier = ApiMgtDAO.getInstance().getAPILevelTier(apiId);
            api.setApiLevelPolicy(apiLevelTier);
        }

        String tiers = artifact.getAttribute(APIConstants.API_OVERVIEW_TIER);
        Map<String, Tier> definedTiers = getTiers(tenantId);
        Set<Tier> availableTier = getAvailableTiers(definedTiers, tiers, apiName);
        api.addAvailableTiers(availableTier);

        api.setContext(artifact.getAttribute(APIConstants.API_OVERVIEW_CONTEXT));
        api.setContextTemplate(artifact.getAttribute(APIConstants.API_OVERVIEW_CONTEXT_TEMPLATE));
        api.setLatest(Boolean.parseBoolean(artifact.getAttribute(APIConstants.API_OVERVIEW_IS_LATEST)));
        ArrayList<URITemplate> urlPatternsList;

        Set<Scope> scopes = ApiMgtDAO.getInstance().getAPIScopes(oldId);
        api.setScopes(scopes);

        HashMap<String, String> resourceScopes;
        resourceScopes = ApiMgtDAO.getInstance().getResourceToScopeMapping(oldId);

        urlPatternsList = ApiMgtDAO.getInstance().getAllURITemplates(oldContext, oldId.getVersion());
        Set<URITemplate> uriTemplates = new HashSet<URITemplate>(urlPatternsList);

        for (URITemplate uriTemplate : uriTemplates) {
            uriTemplate.setResourceURI(api.getUrl());
            uriTemplate.setResourceSandboxURI(api.getSandboxUrl());
            String resourceScopeKey = APIUtil.getResourceKey(oldContext, oldId.getVersion(),
                    uriTemplate.getUriTemplate(), uriTemplate.getHTTPVerb());
            uriTemplate.setScope(findScopeByKey(scopes, resourceScopes.get(resourceScopeKey)));

        }
        api.setUriTemplates(uriTemplates);

        Set<String> tags = new HashSet<String>();
        Tag[] tag = registry.getTags(artifactPath);
        for (Tag tag1 : tag) {
            tags.add(tag1.getTagName());
        }
        api.addTags(tags);
        api.setLastUpdated(registry.get(artifactPath).getLastModified());
        api.setAsDefaultVersion(
                Boolean.parseBoolean(artifact.getAttribute(APIConstants.API_OVERVIEW_IS_DEFAULT_VERSION)));

        String environments = artifact.getAttribute(APIConstants.API_OVERVIEW_ENVIRONMENTS);
        api.setEnvironments(extractEnvironmentsForAPI(environments));
        api.setCorsConfiguration(getCorsConfigurationFromArtifact(artifact));

    } catch (GovernanceException e) {
        String msg = "Failed to get API fro artifact ";
        throw new APIManagementException(msg, e);
    } catch (RegistryException e) {
        String msg = "Failed to get LastAccess time or Rating";
        throw new APIManagementException(msg, e);
    } catch (UserStoreException e) {
        String msg = "Failed to get User Realm of API Provider";
        throw new APIManagementException(msg, e);
    }
    return api;
}

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

/**
 * This method prepares the warning message for the Invoice Document based on the Invoice Amount
 * and the Grand Total/*from w w w. ja v a  2s .  c o m*/
 */
public String createInvoiceNoMatchQuestionText(OleInvoiceDocument invoiceDocument) {

    String questionText = null;
    StringBuffer questionTextBuffer = new StringBuffer("");
    if (invoiceDocument.getInvoiceAmount() != null && invoiceDocument.getInvoicedGrandTotal() != null) {
        KualiDecimal invoiceAmount = new KualiDecimal(invoiceDocument.getInvoiceAmount());
        KualiDecimal invoiceGrandTotal = new KualiDecimal(invoiceDocument.getInvoicedGrandTotal());
        if (!invoiceAmount.equals(invoiceGrandTotal)) {
            questionText = SpringContext.getBean(ConfigurationService.class)
                    .getPropertyValueAsString(PurapKeyConstants.AP_QUESTION_CONFIRM_INVOICE_MISMATCH);
            questionText = StringUtils.replace(questionText, "{0}", "");
            //String questionText = super.createInvoiceNoMatchQuestionText(invoiceDocument);

            CurrencyFormatter cf = new CurrencyFormatter();
            //PaymentRequestDocument preq = (PaymentRequestDocument) invoiceDocument;

            questionTextBuffer.append(questionText);
            if (StringUtils.isNotBlank(invoiceDocument.getInvoiceCurrencyType())) {
                String currencyType = getCurrencyType(invoiceDocument.getInvoiceCurrencyType());
                if (StringUtils.isNotBlank(currencyType)) {
                    if (!currencyType.equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)
                            && invoiceDocument.getForeignVendorInvoiceAmount() != null) {
                        if (StringUtils.isNotBlank(invoiceDocument.getInvoiceCurrencyExchangeRate())) {
                            try {
                                Double.parseDouble(invoiceDocument.getInvoiceCurrencyExchangeRate());
                            } catch (NumberFormatException nfe) {
                                throw new RuntimeException("Invalid Exchange Rate", nfe);
                            }
                            invoiceDocument.setVendorInvoiceAmount(
                                    new KualiDecimal(invoiceDocument.getForeignVendorInvoiceAmount().divide(
                                            new BigDecimal(invoiceDocument.getInvoiceCurrencyExchangeRate()), 4,
                                            RoundingMode.HALF_UP)));
                        } else {
                            BigDecimal exchangeRate = getExchangeRate(invoiceDocument.getInvoiceCurrencyType())
                                    .getExchangeRate();
                            invoiceDocument.setVendorInvoiceAmount(
                                    new KualiDecimal(invoiceDocument.getForeignVendorInvoiceAmount()
                                            .divide(exchangeRate, 4, RoundingMode.HALF_UP)));
                        }
                    }
                }

            }
            questionTextBuffer.append("[br][br][b]Summary Detail Below:[b][br][br][table questionTable]");
            questionTextBuffer.append("[tr][td leftTd]Vendor Invoice Amount :[/td][td rightTd]"
                    + (String) cf.format(invoiceDocument.getVendorInvoiceAmount()) + "[/td][/tr]");
            questionTextBuffer
                    .append("[tr][td leftTd]Invoice Total Prior to Additional Charges:[/td][td rightTd]"
                            + (String) cf.format(new KualiDecimal(invoiceDocument.getInvoicedItemTotal()))
                            + "[/td][/tr]");

            //only add this line if payment request has a discount
            if (invoiceDocument.isDiscount()) {
                questionTextBuffer.append("[tr][td leftTd]Total Before Discount:[/td][td rightTd]"
                        + (String) cf.format(invoiceDocument.getGrandPreTaxTotalExcludingDiscount())
                        + "[/td][/tr]");
            }

            //if sales tax is enabled, show additional summary lines
            boolean salesTaxInd = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(
                    OleParameterConstants.PURCHASING_DOCUMENT.class,
                    PurapParameterConstants.ENABLE_SALES_TAX_IND);
            if (salesTaxInd) {
                questionTextBuffer.append("[tr][td leftTd]Grand Total Prior to Tax:[/td][td rightTd]"
                        + (String) cf.format(invoiceDocument.getGrandPreTaxTotal()) + "[/td][/tr]");
                questionTextBuffer.append("[tr][td leftTd]Grand Total Tax:[/td][td rightTd]"
                        + (String) cf.format(invoiceDocument.getGrandTaxAmount()) + "[/td][/tr]");
            }

            questionTextBuffer.append("[tr][td leftTd]Grand Total:[/td][td rightTd]"
                    + (String) cf.format(new KualiDecimal(invoiceDocument.getInvoicedGrandTotal()))
                    + "[/td][/tr]");

            if (StringUtils.isNotBlank(invoiceDocument.getInvoiceCurrencyType())) {
                String currencyType = getCurrencyType(invoiceDocument.getInvoiceCurrencyType());
                if (StringUtils.isNotBlank(currencyType)) {
                    if (!currencyType.equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)) {
                        questionTextBuffer.append("[tr][td] [/td][/tr]");
                        questionTextBuffer
                                .append("[tr][td leftTd]Foreign Vendor Invoice Amount :[/td][td rightTd]"
                                        + (String) cf.format(new KualiDecimal(
                                                invoiceDocument.getForeignVendorInvoiceAmount()))
                                        + "[/td][/tr]");
                        questionTextBuffer.append(
                                "[tr][td leftTd]Foreign Invoice Total Prior to Additional Charges:[/td][td rightTd]"
                                        + (String) cf.format(
                                                new KualiDecimal(invoiceDocument.getInvoicedForeignItemTotal()))
                                        + "[/td][/tr]");
                        questionTextBuffer.append("[tr][td leftTd]Foreign Grand Total:[/td][td rightTd]"
                                + (String) cf.format(
                                        new KualiDecimal(invoiceDocument.getInvoicedForeignGrandTotal()))
                                + "[/td][/tr]");
                    }
                }
            }
            questionTextBuffer.append("[/table]");
        }
    }

    return questionTextBuffer.toString();

}

From source file:org.mifos.application.servicefacade.LoanAccountServiceFacadeWebTier.java

private String computeDiffBetweenCumulativeAndInstallment(DateTime dateOfCashFlow, BigDecimal cashflow,
        LoanScheduleDto loanScheduleDto) {
    BigDecimal totalInstallmentForMonth = cumulativeTotalForMonth(dateOfCashFlow, loanScheduleDto);
    return String.valueOf(cashflow.subtract(totalInstallmentForMonth)
            .setScale(AccountingRules.getDigitsAfterDecimal(), RoundingMode.HALF_UP));
}

From source file:org.mifos.application.servicefacade.LoanAccountServiceFacadeWebTier.java

private String computeDiffBetweenCumulativeAndInstallmentPercent(DateTime dateOfCashFlow, BigDecimal cashflow,
        LoanScheduleDto loanScheduleDto) {
    BigDecimal totalInstallmentForMonth = cumulativeTotalForMonth(dateOfCashFlow, loanScheduleDto);
    String value;//from  ww  w  . ja  v  a2 s . c o m
    if (cashflow.doubleValue() != 0) {
        value = String.valueOf(totalInstallmentForMonth.multiply(BigDecimal.valueOf(100)).divide(cashflow,
                AccountingRules.getDigitsAfterDecimal(), RoundingMode.HALF_UP));
    } else {
        value = "Infinity";
    }
    return value;
}

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

private void checkForForeignCurrency(OleInvoiceRecord oleInvoiceRecord) {
    if (!StringUtils.isBlank(oleInvoiceRecord.getCurrencyType())) {
        if (!oleInvoiceRecord.getCurrencyType().equalsIgnoreCase(OleSelectConstant.CURRENCY_TYPE_NAME)) {
            if (oleInvoiceRecord.getForeignListPrice() != null
                    && !oleInvoiceRecord.getForeignListPrice().isEmpty()
                    && oleInvoiceRecord.getInvoiceCurrencyExchangeRate() != null
                    && !oleInvoiceRecord.getInvoiceCurrencyExchangeRate().isEmpty()) {
                oleInvoiceRecord.setListPrice((new BigDecimal(oleInvoiceRecord.getForeignListPrice()).divide(
                        new BigDecimal(oleInvoiceRecord.getInvoiceCurrencyExchangeRate()), 4,
                        RoundingMode.HALF_UP)).toString());
            }/*from w w w  .  j  a va 2s  . com*/
        }
    }
}

From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java

@TransactionAttribute(TransactionAttributeType.NEVER)
public KapazitaetsvorschauDto getKapazitaetsvorschau(TheClientDto theClientDto) throws EJBExceptionLP {
    KapazitaetsvorschauDto kapDto = null;
    Session session = null;/*ww  w . j  av a 2s  .c om*/
    try {

        // ------------------------------------------------------------------
        // -----
        // Benoetigte Parameter holen
        // ------------------------------------------------------------------
        // -----
        // Default Sicht nach Wochen
        // final int iSicht = FertigungFac.KAPAZITAETSVORSCHAU_NACH_WOCHEN;
        // Anzahl der angezeigten Vatergruppen. Alles andere wird nach
        // "Sonstige" verdichtet
        final ParametermandantDto parameterAnzahlGruppen = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ANZAHL_GRUPPEN);
        final int iParamAnzahlGruppen = (Integer) parameterAnzahlGruppen.getCWertAsObject();
        // Angezeigter Zeitraum = Anzahl der Spalten
        final ParametermandantDto parameterZeitraum = getParameterFac().getMandantparameter(
                theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG,
                ParameterFac.PARAMETER_FERTIGUNG_KAPAZITAETSVORSCHAU_ZEITRAUM);
        final int iParamZeitraum = (Integer) parameterZeitraum.getCWertAsObject();

        // ------------------------------------------------------------------
        // -----
        // Hibernate-Session erstellen
        // ------------------------------------------------------------------
        // -----
        SessionFactory factory = FLRSessionFactory.getFactory();
        session = factory.openSession();
        // ------------------------------------------------------------------
        // -----
        // Artikel- / Maschinen-Vatergruppen holen
        // ------------------------------------------------------------------
        // -----
        // Alle Artikel-Vatergruppen
        Criteria cArtikelVatergruppen = session.createCriteria(FLRArtikelgruppe.class);
        cArtikelVatergruppen.add(Restrictions.isNull(ArtikelFac.FLR_ARTIKELGRUPPE_FLRARTIKELGRUPPE));
        List<?> listArtikelgruppen = cArtikelVatergruppen.list();
        // Alle Maschinen-Vatergruppen
        Criteria cMaschinengruppen = session.createCriteria(FLRMaschinengruppe.class);
        List<?> listMaschinengruppen = cMaschinengruppen.list();
        // ------------------------------------------------------------------
        // -----
        // Anzahl der sub-Diagramme bestimmen
        // das ist grundsaetzlich (iParamAnzahlGruppen + 1) x 2 ...
        // (Anzahl d. anzuzeigenden Vatergruppen + Sonstige) f. AZ und
        // Maschinen
        // wenn es weniger Vatergruppen als anzuzeigende gibt, reduziert
        // sich das aber
        // Gibt es keine Vatergruppe, wird daher alles nach "Sonstige"
        // verdichtet
        // ------------------------------------------------------------------
        // -----
        final int iAnzuzeigendeArtikelgruppen = Math.min(iParamAnzahlGruppen, listArtikelgruppen.size());

        final int iAnzuzeigendeMaschinengruppen = Math.min(iParamAnzahlGruppen, listMaschinengruppen.size());

        final int iAnzahlZeilen = iAnzuzeigendeArtikelgruppen + 1 + iAnzuzeigendeMaschinengruppen + 1;

        // ------------------------------------------------------------------
        // -----
        // Dto initialisieren
        // ------------------------------------------------------------------
        // -----
        kapDto = new KapazitaetsvorschauDto(iAnzahlZeilen, iParamZeitraum);
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der x-Achse ermitteln. das sind die Kalenderwochen
        // ------------------------------------------------------------------
        // -----
        HashMap<Integer, Integer> hmKWIndizes = new HashMap<Integer, Integer>();

        String[] kw = new String[iParamZeitraum];
        GregorianCalendar gc = new GregorianCalendar();
        for (int i = 0; i < kw.length; i++) {
            int iKw = gc.get(GregorianCalendar.WEEK_OF_YEAR);
            kw[i] = "" + iKw;
            kapDto.setISpaltenueberschrift(i, kw[i]);
            hmKWIndizes.put(gc.get(GregorianCalendar.WEEK_OF_YEAR), i);
            gc.setTimeInMillis(gc.getTimeInMillis() + 7 * 24 * 60 * 60 * 1000); // 1 Woche dazu
        }
        // ------------------------------------------------------------------
        // -----
        // Beschriftung der y-Achse ermitteln. das sind die Namen der
        // Vatergruppen bzw. 2 x "Sonstige".
        // Weiters werden die Indizes im Daten-Array fuer die jeweiligen
        // Gruppen festgelegt.
        // ------------------------------------------------------------------
        // -----
        String sSonstige = getTextRespectUISpr("lp.sonstige", theClientDto.getMandant(),
                theClientDto.getLocUi());

        HashMap<Integer, Integer> hmArtikelGruppenIndizes = new HashMap<Integer, Integer>();
        HashMap<Integer, Integer> hmMaschinenGruppenIndizes = new HashMap<Integer, Integer>();

        // zuerst die Artikelvatergruppen
        for (int i = 0; i < iAnzuzeigendeArtikelgruppen; i++) {
            FLRArtikelgruppe item = (FLRArtikelgruppe) listArtikelgruppen.get(i);
            kapDto.setIZeilenueberschrift(i, item.getC_nr());
            hmArtikelGruppenIndizes.put(item.getI_id(), i);
        }
        // Dann Sonstige Artikelgruppen
        final int indexSonstigeArtikelGruppen = iAnzuzeigendeArtikelgruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeArtikelGruppen, sSonstige);
        // Maschinengruppen
        for (int i = 0; i < iAnzuzeigendeMaschinengruppen; i++) {
            FLRMaschinengruppe item = (FLRMaschinengruppe) listMaschinengruppen.get(i);
            int index = iAnzuzeigendeArtikelgruppen + 1 + i;
            kapDto.setIZeilenueberschrift(index, item.getC_bez());
            hmMaschinenGruppenIndizes.put(item.getI_id(), index);
        }
        // zuletzt Sonstige Maschinengruppen
        final int indexSonstigeMaschinenGruppen = iAnzuzeigendeArtikelgruppen + 1
                + iAnzuzeigendeMaschinengruppen;
        kapDto.setIZeilenueberschrift(indexSonstigeMaschinenGruppen, sSonstige);

        // ------------------------------------------------------------------
        // -----
        // Lose holen
        // ------------------------------------------------------------------
        // -----
        Criteria cLose = session.createCriteria(FLRLos.class);
        // Filter nach Mandant
        cLose.add(Restrictions.eq(FertigungFac.FLR_LOS_MANDANT_C_NR, theClientDto.getMandant()));
        // Alle Stati ausser Erledigt, Gestoppt, Storniert
        Collection<String> cLoseStati = new LinkedList<String>();
        cLoseStati.add(FertigungFac.STATUS_ERLEDIGT);
        cLoseStati.add(FertigungFac.STATUS_GESTOPPT);
        cLoseStati.add(FertigungFac.STATUS_STORNIERT);
        cLose.add(Restrictions.not(Restrictions.in(FertigungFac.FLR_LOS_STATUS_C_NR, cLoseStati)));
        List<?> listLose = cLose.list();
        // ------------------------------------------------------------------
        // -----
        // Auswertungszeitraum und verfuegbare Kapazitaeten ermitteln
        // ------------------------------------------------------------------
        // -----

        // 3 Monate in die zukunft
        Calendar c = Calendar.getInstance();
        c.setTimeInMillis(System.currentTimeMillis());
        c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 3);
        java.util.Date dMax = Helper.cutDate(new java.sql.Date(c.getTimeInMillis()));

        java.sql.Timestamp tVon = Helper.cutTimestamp(new java.sql.Timestamp(System.currentTimeMillis()));
        java.sql.Timestamp tBis = Helper.cutTimestamp(new java.sql.Timestamp(dMax.getTime()));
        // Verfuegbare Zeiten holen
        SollverfuegbarkeitDto[] oVerfuegbar = getZeiterfassungFac().getVerfuegbareSollzeit(tVon, tBis,
                theClientDto);
        // diese nun aufteilen
        for (int i = 0; i < oVerfuegbar.length; i++) {
            SollverfuegbarkeitDto svDto = oVerfuegbar[i];
            // "normale" AZ
            if (svDto.isBMannarbeitszeit()) {
                // die sind einer Artikelgruppe zugeordnet
                if (svDto.getIGruppeid() != null) {
                    Integer iZeile = hmArtikelGruppenIndizes.get(svDto.getIGruppeid());
                    // ist das eine sichtbare Gruppe
                    if (iZeile != null) {
                        for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                    // wenn nicht, dann zu den sonstigen
                    else {
                        for (int iSpalte = 0; iSpalte < kapDto
                                .getDetails()[indexSonstigeArtikelGruppen].length; iSpalte++) {
                            // mal 5 Tage
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iSpalte,
                                    svDto.getNSollstunden().multiply(new BigDecimal(5)));
                        }
                    }
                }
                // Rest = Sonstige Artikelgruppen
                else {
                    if (svDto.getTDatum() != null) {
                        // Die KW dieses Datums ermitteln, damit das
                        // zugeordnet werden kann
                        GregorianCalendar gcSV = new GregorianCalendar();
                        gcSV.setTime(svDto.getTDatum());
                        int kwSV = gcSV.get(Calendar.WEEK_OF_YEAR);
                        Integer iIndexDerKW = hmKWIndizes.get(kwSV);
                        if (iIndexDerKW != null) {
                            // Hier nicht mit 5 multiplizieren, da es fuer
                            // jeden Tag einen eigenen Eintrag gibt
                            kapDto.addBdVerfuegbareStunden(indexSonstigeArtikelGruppen, iIndexDerKW,
                                    svDto.getNSollstunden());
                        } else {
                            // diese KW wird nicht mehr angezeigt - brauch
                            // ich nicht einrechnen
                        }
                    }
                }
            }
            // Maschinenzeit - die Verfuegbarkeit ist jeden Tag gleich
            else {
                Integer iZeile = hmMaschinenGruppenIndizes.get(svDto.getIGruppeid());
                // ist das eine sichtbare Gruppe
                if (iZeile != null) {
                    for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(iZeile, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
                // wenn nicht, dann zu den sonstigen
                else {
                    for (int iSpalte = 0; iSpalte < kapDto
                            .getDetails()[indexSonstigeMaschinenGruppen].length; iSpalte++) {
                        // mal 5 Tage
                        kapDto.addBdVerfuegbareStunden(indexSonstigeMaschinenGruppen, iSpalte,
                                svDto.getNSollstunden().multiply(new BigDecimal(5)));
                    }
                }
            }
        }
        // ------------------------------------------------------------------
        // -----
        // Offene Zeiten ermitteln
        // ------------------------------------------------------------------
        // -----
        for (Iterator<?> iter = listLose.iterator(); iter.hasNext();) {
            FLRLos los = (FLRLos) iter.next();
            // Offene Menge ermitteln
            BigDecimal bdOffen = los.getN_losgroesse();
            for (Iterator<?> iterAblieferung = los.getAblieferungset().iterator(); iterAblieferung.hasNext();) {
                FLRLosablieferung item = (FLRLosablieferung) iterAblieferung.next();
                bdOffen = bdOffen.subtract(item.getN_menge());
            }
            // nur Lose mit tatsaechlich offener Menge>0
            if (bdOffen.compareTo(new BigDecimal(0)) > 0) {
                // Faktor zur Berechnung der offenen Zeiten = offene Menge /
                // Losgroesse. 2 Nachkommastellen sollten reichen.
                BigDecimal bdFaktor = bdOffen.divide(los.getN_losgroesse(), 2, BigDecimal.ROUND_HALF_EVEN);
                // Arbeitsplan holen
                Criteria cLosAZ = session.createCriteria(FLRLossollarbeitsplan.class);
                cLosAZ.add(Restrictions.eq(FertigungFac.FLR_LOSSOLLARBEITSPLAN_LOS_I_ID, los.getI_id()));
                List<?> listLosAZ = cLosAZ.list();
                // fuer alle Taetigkeiten
                for (Iterator<?> iterAZ = listLosAZ.iterator(); iterAZ.hasNext();) {
                    FLRLossollarbeitsplan losAZ = (FLRLossollarbeitsplan) iterAZ.next();
                    BigDecimal bdOffeneStunden = losAZ.getN_gesamtzeit().multiply(bdFaktor);
                    // ------------------------------------------------------
                    // -----------------
                    // Index der Gruppe bestimmen, der ich das zuordnen muss
                    // ------------------------------------------------------
                    // -----------------
                    int iZeilenIndex;
                    // 1. nach Maschinengruppe
                    // 2. nach Artikelgruppe der Taetigkeit
                    FLRMaschine flrMaschine = losAZ.getFlrmaschine();
                    Integer iMaschinengruppeIId = null;
                    Integer iArtikelgruppeIId = null;
                    if (flrMaschine != null) {
                        FLRMaschinengruppe flrMaschinengruppe = flrMaschine.getFlrmaschinengruppe();
                        if (flrMaschinengruppe != null) {
                            // Wenn diese Maschinengruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmMaschinenGruppenIndizes.get(flrMaschinengruppe.getI_id());
                            iMaschinengruppeIId = flrMaschinengruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeMaschinenGruppen;
                            }
                        }
                        // Maschinen ohne Maschinengruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeMaschinenGruppen;
                        }
                    } else {
                        FLRArtikel flrArtikel = losAZ.getFlrartikel();
                        FLRArtikelgruppe flrArtikelgruppe = flrArtikel.getFlrartikelgruppe();
                        if (flrArtikelgruppe != null) {
                            // Wenn diese Artikelgruppe dargestellt wird,
                            // dann kommt hier der index raus.
                            Integer i = hmArtikelGruppenIndizes.get(flrArtikelgruppe.getI_id());
                            iArtikelgruppeIId = flrArtikelgruppe.getI_id();
                            if (i != null) {
                                iZeilenIndex = i;
                            }
                            // wenn nicht -> sonstige.
                            else {
                                iZeilenIndex = indexSonstigeArtikelGruppen;
                            }
                        }
                        // Taetigkeiten ohne Artikelgruppe werden nach
                        // "Sonstige" verdichtet.
                        else {
                            iZeilenIndex = indexSonstigeArtikelGruppen;
                        }
                    }
                    // ------------------------------------------------------
                    // -----------------
                    // Jetzt hab ich die Gruppe, der ich das zuordnen muss
                    // nun muss die Zeit aufgeteilt werden
                    // ------------------------------------------------------
                    // -----------------
                    java.util.Date tLosStarttermin = los.getT_produktionsbeginn();
                    java.util.Date tLosEndetermin = los.getT_produktionsende();
                    // beide Termine duerfen nicht vor heute liegen
                    if (tLosStarttermin.before(getDate())) {
                        tLosStarttermin = getDate();
                    }
                    if (tLosEndetermin.before(getDate())) {
                        tLosEndetermin = getDate();
                    }
                    // Anzahl der betroffenen Kalenderwochen bestimmen
                    GregorianCalendar gcStart = new GregorianCalendar();
                    gcStart.setTime(tLosStarttermin);
                    GregorianCalendar gcEnde = new GregorianCalendar();
                    gcEnde.setTime(tLosEndetermin);
                    int iStartKW = gcStart.get(Calendar.WEEK_OF_YEAR);
                    int iEndeKW = gcEnde.get(Calendar.WEEK_OF_YEAR);
                    int iAnzahlKW = 1 + iEndeKW - iStartKW;
                    // nun auf die Wochen aufteilen
                    BigDecimal bdOffeneStundenJeWoche = bdOffeneStunden;

                    if (iAnzahlKW > 0) {
                        bdOffeneStundenJeWoche = bdOffeneStunden.divide(new BigDecimal(iAnzahlKW), 2,
                                RoundingMode.HALF_UP);
                    }

                    for (int iAktuelleKW = iStartKW; iAktuelleKW <= iEndeKW; iAktuelleKW++) {
                        Integer indexDerKW = hmKWIndizes.get(iAktuelleKW);
                        // wird diese Woche auch angezeigt?
                        if (indexDerKW != null) {
                            KapazitaetsvorschauDetailDto detailDto = new KapazitaetsvorschauDetailDto();
                            detailDto.setArtikelgruppeIId(iArtikelgruppeIId);
                            detailDto.setArtikelIIdTaetigkeit(losAZ.getFlrartikel().getI_id());
                            detailDto.setBdDauer(bdOffeneStundenJeWoche);
                            detailDto.setLosIId(los.getI_id());
                            detailDto.setLossollarbeitsplanIId(losAZ.getI_id());
                            detailDto.setMaschinengruppeIId(iMaschinengruppeIId);
                            kapDto.addDetail(iZeilenIndex, indexDerKW, detailDto);
                        }
                    }
                }
            }
        }

        // ------------------------------------------------------------------
        // -----
        // Diagramm aus den Daten erstellen
        // ------------------------------------------------------------------
        // -----
        SymbolAxis xAchse = new SymbolAxis("KW", kw);
        CombinedDomainXYPlot plot = new CombinedDomainXYPlot(xAchse);
        for (int iZeile = 0; iZeile < kapDto.getDetails().length; iZeile++) {
            XYSeries datenZeile = new XYSeries(kapDto.getIZeilenueberschrift(iZeile));
            // Balkenfarben festlegen ( >100% = rot, sonst hellgrau)
            // fuer jede zeile und jede spalte
            Paint[][] paints = new Paint[1][kapDto.getDetails()[iZeile].length];
            for (int iSpalte = 0; iSpalte < kapDto.getDetails()[iZeile].length; iSpalte++) {
                BigDecimal bdVerfuegbar = kapDto.getBdVerfuegbareStunden()[iZeile][iSpalte];
                BigDecimal bdBenoetigt = new BigDecimal(0);
                // Benoetigte Zeit jet Gruppe je Woche ermitteln
                for (Iterator<?> iter = kapDto.getDetails()[iZeile][iSpalte].iterator(); iter.hasNext();) {
                    KapazitaetsvorschauDetailDto item = (KapazitaetsvorschauDetailDto) iter.next();
                    bdBenoetigt = bdBenoetigt.add(item.getBdDauer());
                }
                BigDecimal value = new BigDecimal(0);
                if (bdVerfuegbar.compareTo(new BigDecimal(0)) > 0) {
                    value = (bdBenoetigt.multiply(new BigDecimal(100))).divide(bdVerfuegbar, 4,
                            BigDecimal.ROUND_HALF_EVEN);
                    if (value.doubleValue() > 100.0) {
                        paints[0][iSpalte] = Color.red;
                    } else {
                        paints[0][iSpalte] = Color.lightGray;
                    }
                }
                // tage ohne Verfuegbarkeit mach ich 100% und weisz
                else {
                    value = new BigDecimal(100.0);
                    // Wochen ohne Kapazitaet aber mit geplanter Zeit
                    if (bdBenoetigt.compareTo(new BigDecimal(0)) > 0) {
                        paints[0][iSpalte] = Color.MAGENTA;
                    }
                    // Wenn nichts verfuegbar aber auch nichts benoetigt ->
                    // weiss
                    else {
                        paints[0][iSpalte] = Color.white;
                    }
                }
                XYDataItem data = new XYDataItem(iSpalte, value.doubleValue());
                datenZeile.add(data);
            }
            // Zur Collection
            XYSeriesCollection xyDataset = new XYSeriesCollection();
            xyDataset.addSeries(datenZeile);

            // subplot erstellen
            XYItemRenderer renderer1 = new CustomXYBarRenderer(paints);

            // renderer1.setItemLabelsVisible(true);
            // Legende nicht anzeigen
            renderer1.setBaseSeriesVisibleInLegend(false);
            NumberAxis zeilenAchse = new NumberAxis(kapDto.getIZeilenueberschrift(iZeile));
            // Beschriftung der Y-Achse um 90 grad drehen
            zeilenAchse.setLabelAngle(Math.PI / 2.0);
            zeilenAchse.setAutoRange(true);
            XYPlot subplot1 = new XYPlot(xyDataset, null, zeilenAchse, renderer1);
            subplot1.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT);
            // Markierung bei 100%
            final Marker target = new ValueMarker(100.0);
            target.setPaint(Color.darkGray);
            // target.setLabel("100 %"); // Label
            // target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
            // target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
            subplot1.addRangeMarker(target);

            plot.add(subplot1); // plot.add(subplot1, 1);
        }
        JFreeChart lStackedBarChart = new JFreeChart(plot);

        kapDto.setJfcKapazitaetsvorschau(lStackedBarChart);
    } catch (RemoteException ex) {
        throwEJBExceptionLPRespectOld(ex);
    } finally {
        if (session != null) {
            session.close();
        }
    }
    return kapDto;
}