List of usage examples for java.math BigDecimal subtract
public BigDecimal subtract(BigDecimal subtrahend)
From source file:org.egov.wtms.service.es.WaterChargeCollectionDocService.java
/** * Prepares Collection Table Data//from w ww . j a v a 2 s. c o m * * @param collectionDetailsRequest * @return List */ public List<WaterChargeDashBoardResponse> getResponseTableData( final WaterChargeDashBoardRequest collectionDetailsRequest) { final List<WaterChargeDashBoardResponse> collIndDataList = new ArrayList<>(); Date fromDate; Date toDate; String name; WaterChargeDashBoardResponse collIndData; BigDecimal cytdDmd; BigDecimal performance; BigDecimal balance; BigDecimal variance; String aggregationField = WaterTaxConstants.REGIONNAMEAGGREGATIONFIELD; Map<String, BillCollectorIndex> wardWiseBillCollectors = new HashMap<>(); final CFinancialYear financialYear = cFinancialYearService.getCurrentFinancialYear(); /** * Select the grouping based on the type parameter, by default the * grouping is done based on Regions. If type is region, group by * Region, if type is district, group by District, if type is ulb, group * by ULB */ if (StringUtils.isNotBlank(collectionDetailsRequest.getType())) if (collectionDetailsRequest.getType().equalsIgnoreCase(DASHBOARD_GROUPING_REGIONWISE)) aggregationField = WaterTaxConstants.REGIONNAMEAGGREGATIONFIELD; else if (collectionDetailsRequest.getType().equalsIgnoreCase(DASHBOARD_GROUPING_DISTRICTWISE)) aggregationField = WaterTaxConstants.DISTRICTNAMEAGGREGATIONFIELD; else if (collectionDetailsRequest.getType().equalsIgnoreCase(DASHBOARD_GROUPING_ULBWISE)) aggregationField = WaterTaxConstants.CITYNAMEAGGREGATIONFIELD; else if (collectionDetailsRequest.getType().equalsIgnoreCase(DASHBOARD_GROUPING_GRADEWISE)) aggregationField = WaterTaxConstants.CITYGRADEAGGREGATIONFIELD; else if (collectionDetailsRequest.getType().equalsIgnoreCase(DASHBOARD_GROUPING_WARDWISE) || collectionDetailsRequest.getType() .equalsIgnoreCase(PropertyTaxConstants.DASHBOARD_GROUPING_BILLCOLLECTORWISE)) aggregationField = WaterTaxConstants.REVENUEWARDAGGREGATIONFIELD; /** * As per Elastic Search functionality, to get the total collections * between 2 dates, add a day to the endDate and fetch the results For * Current day's collection if dates are sent in the request, consider * the toDate, else take date range between current date +1 day */ if (StringUtils.isNotBlank(collectionDetailsRequest.getFromDate()) && StringUtils.isNotBlank(collectionDetailsRequest.getToDate())) { fromDate = DateUtils.getDate(collectionDetailsRequest.getToDate(), DATE_FORMAT_YYYYMMDD); toDate = org.apache.commons.lang3.time.DateUtils .addDays(DateUtils.getDate(collectionDetailsRequest.getToDate(), DATE_FORMAT_YYYYMMDD), 1); } else { fromDate = new Date(); toDate = org.apache.commons.lang3.time.DateUtils.addDays(new Date(), 1); } Long startTime = System.currentTimeMillis(); // For today collection final Map<String, BigDecimal> todayCollMap = getCollectionAndDemandValues(collectionDetailsRequest, fromDate, toDate, WaterTaxConstants.COLLECTION_INDEX_NAME, TOTAL_AMOUNT, aggregationField); /** * For collection and demand between the date ranges if dates are sent * in the request, consider fromDate and toDate+1 , else calculate from * current year start date till current date+1 day */ if (StringUtils.isNotBlank(collectionDetailsRequest.getFromDate()) && StringUtils.isNotBlank(collectionDetailsRequest.getToDate())) { fromDate = DateUtils.getDate(collectionDetailsRequest.getFromDate(), DATE_FORMAT_YYYYMMDD); toDate = org.apache.commons.lang3.time.DateUtils .addDays(DateUtils.getDate(collectionDetailsRequest.getToDate(), DATE_FORMAT_YYYYMMDD), 1); } else { fromDate = DateUtils.startOfDay(financialYear.getStartingDate()); toDate = org.apache.commons.lang3.time.DateUtils.addDays(new Date(), 1); } final int noOfMonths = DateUtils.noOfMonthsBetween(fromDate, toDate) + 1; final Map<String, BigDecimal> cytdCollMap = getCollectionAndDemandValues(collectionDetailsRequest, fromDate, toDate, COLLECTION_INDEX_NAME, TOTAL_AMOUNT, aggregationField); // For total demand final Map<String, BigDecimal> totalDemandMap = getCollectionAndDemandValues(collectionDetailsRequest, fromDate, toDate, WaterTaxConstants.WATER_TAX_INDEX_NAME, WaterTaxConstants.WATERCHARGETOTALDEMAND, aggregationField); // For current year demand final Map<String, BigDecimal> currYrTotalDemandMap = getCollectionAndDemandValues(collectionDetailsRequest, fromDate, toDate, WaterTaxConstants.WATER_TAX_INDEX_NAME, WaterTaxConstants.WATERCHARGETOTALDEMAND, aggregationField); // For last year's till today's date collections final Map<String, BigDecimal> lytdCollMap = getCollectionAndDemandValues(collectionDetailsRequest, org.apache.commons.lang3.time.DateUtils.addYears(fromDate, -1), org.apache.commons.lang3.time.DateUtils.addYears(toDate, -1), WaterTaxConstants.COLLECTION_INDEX_NAME, TOTAL_AMOUNT, aggregationField); if (DASHBOARD_GROUPING_WARDWISE.equalsIgnoreCase(collectionDetailsRequest.getType())) wardWiseBillCollectors = getWardWiseBillCollectors(collectionDetailsRequest); Long timeTaken = System.currentTimeMillis() - startTime; if (LOGGER.isDebugEnabled()) LOGGER.debug("Time taken by getCollectionAndDemandValues() is (millisecs) : " + timeTaken); startTime = System.currentTimeMillis(); for (final Map.Entry<String, BigDecimal> entry : cytdCollMap.entrySet()) { collIndData = new WaterChargeDashBoardResponse(); name = entry.getKey(); if (aggregationField.equals(WaterTaxConstants.REGIONNAMEAGGREGATIONFIELD)) collIndData.setRegionName(name); else if (aggregationField.equals(WaterTaxConstants.DISTRICTNAMEAGGREGATIONFIELD)) { collIndData.setRegionName(collectionDetailsRequest.getRegionName()); collIndData.setDistrictName(name); } else if (WaterTaxConstants.CITYNAMEAGGREGATIONFIELD.equals(aggregationField)) { collIndData.setUlbName(name); collIndData.setDistrictName(collectionDetailsRequest.getDistrictName()); collIndData.setUlbGrade(collectionDetailsRequest.getUlbGrade()); } else if (aggregationField.equals(WaterTaxConstants.CITYGRADEAGGREGATIONFIELD)) collIndData.setUlbGrade(name); else if (WaterTaxConstants.REVENUEWARDAGGREGATIONFIELD.equals(aggregationField)) collIndData.setWardName(name); if (DASHBOARD_GROUPING_WARDWISE.equalsIgnoreCase(collectionDetailsRequest.getType()) && !wardWiseBillCollectors.isEmpty()) collIndData.setBillCollector(wardWiseBillCollectors.get(name) == null ? StringUtils.EMPTY : wardWiseBillCollectors.get(name).getBillCollector()); collIndData.setTodayColl(todayCollMap.get(name) == null ? BigDecimal.ZERO : todayCollMap.get(name)); collIndData.setCurrentYearTillDateColl(entry.getValue()); // Proportional Demand = (totalDemand/12)*noOfmonths final BigDecimal currentYearTotalDemand = currYrTotalDemandMap.get(name) == null ? BigDecimal.valueOf(0) : currYrTotalDemandMap.get(name); cytdDmd = currentYearTotalDemand.divide(BigDecimal.valueOf(12), BigDecimal.ROUND_HALF_UP) .multiply(BigDecimal.valueOf(noOfMonths)); collIndData.setCurrentYearTillDateDmd(cytdDmd); if (cytdDmd != BigDecimal.valueOf(0)) { balance = cytdDmd.subtract(collIndData.getCurrentYearTillDateColl()); performance = collIndData.getCurrentYearTillDateColl().multiply(WaterTaxConstants.BIGDECIMAL_100) .divide(cytdDmd, 1, BigDecimal.ROUND_HALF_UP); collIndData.setPerformance(performance); collIndData.setCurrentYearTillDateBalDmd(balance); } collIndData.setTotalDmd(totalDemandMap.get(name) == null ? BigDecimal.ZERO : totalDemandMap.get(name)); collIndData.setLastYearTillDateColl( lytdCollMap.get(name) == null ? BigDecimal.ZERO : lytdCollMap.get(name)); // variance = ((currentYearCollection - // lastYearCollection)*100)/lastYearCollection if (collIndData.getLastYearTillDateColl().compareTo(BigDecimal.ZERO) == 0) variance = WaterTaxConstants.BIGDECIMAL_100; else variance = collIndData.getCurrentYearTillDateColl().subtract(collIndData.getLastYearTillDateColl()) .multiply(WaterTaxConstants.BIGDECIMAL_100) .divide(collIndData.getLastYearTillDateColl(), 1, BigDecimal.ROUND_HALF_UP); collIndData.setLastYearVar(variance); collIndDataList.add(collIndData); } timeTaken = System.currentTimeMillis() - startTime; if (LOGGER.isDebugEnabled()) LOGGER.debug("Time taken for setting values in getResponseTableData() is (millisecs): " + timeTaken); return collIndDataList; }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
public void aendereLosgroesse(Integer losIId, Integer neueLosgroesse, boolean bUeberzaehligesMaterialZurueckgeben, TheClientDto theClientDto) { LosDto losDto = losFindByPrimaryKey(losIId); if (losDto.getStatusCNr().equals(FertigungFac.STATUS_AUSGEGEBEN) || losDto.getStatusCNr().equals(FertigungFac.STATUS_IN_PRODUKTION) || losDto.getStatusCNr().equals(FertigungFac.STATUS_GESTOPPT) || losDto.getStatusCNr().equals(FertigungFac.STATUS_TEILERLEDIGT)) { if (!losDto.getNLosgroesse().equals(new BigDecimal(neueLosgroesse))) { BigDecimal bdErledigte = getErledigteMenge(losDto.getIId(), theClientDto); if (bdErledigte.doubleValue() > neueLosgroesse.doubleValue()) { throw new EJBExceptionLP( EJBExceptionLP.FEHLER_FERTIGUNG_AENDERUNG_LOGROESSE_ZUVIELEABLIEFERUNGEN, new Exception("bdErledigte.doubleValue()>neueLosgroesse.doubleValue()")); }/* w ww .j av a 2 s .co m*/ Los los = em.find(Los.class, losDto.getIId()); los.setNLosgroesse(new BigDecimal(neueLosgroesse)); em.merge(los); em.flush(); // Material LossollmaterialDto[] dtos = lossollmaterialFindByLosIId(losIId); for (int i = 0; i < dtos.length; i++) { LossollmaterialDto dto = dtos[i]; // Sollmengen aendern BigDecimal sollsatzgroesse = dto.getNMenge().divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); dto.setNMenge( Helper.rundeKaufmaennisch(sollsatzgroesse.multiply(new BigDecimal(neueLosgroesse)), 3)); updateLossollmaterial(dto, theClientDto); // Wenn kleiner je nach parameter // bUeberzaehligesMaterialZurueckgeben material // zurueckbuchen if (neueLosgroesse.doubleValue() < losDto.getNLosgroesse().doubleValue() && bUeberzaehligesMaterialZurueckgeben == true) { BigDecimal bdAusgegeben = getAusgegebeneMenge(dto.getIId(), null, theClientDto); BigDecimal diff = bdAusgegeben.subtract(dto.getNMenge()); if (diff.doubleValue() > 0) { LosistmaterialDto[] dtosLosist = losistmaterialFindByLossollmaterialIId(dto.getIId()); for (int j = 0; j < dtosLosist.length; j++) { if (diff.doubleValue() > 0) { BigDecimal istmenge = dtosLosist[j].getNMenge(); BigDecimal bdMengeNeu = null; if (diff.doubleValue() > istmenge.doubleValue()) { bdMengeNeu = new BigDecimal(0); diff = diff.subtract(istmenge); } else { bdMengeNeu = istmenge.subtract(diff); diff = new BigDecimal(0); } updateLosistmaterialMenge(dtosLosist[j].getIId(), bdMengeNeu, theClientDto); } } } } // Fehlmengen aktualisieren try { getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, dto.getIId(), false, theClientDto); } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } } // Arbeitsplan LossollarbeitsplanDto[] arbeitsplan = lossollarbeitsplanFindByLosIId(losIId); for (int i = 0; i < arbeitsplan.length; i++) { LossollarbeitsplanDto dto = arbeitsplan[i]; // Gesamtzeit wird austomatisch aktualisiert updateLossollarbeitsplan(dto, theClientDto); } } } else { if (losDto.getStatusCNr().equals(FertigungFac.STATUS_STORNIERT)) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_STORNIERT, new Exception("los " + losDto.getCNr() + " ist storniert")); } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT)) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_BEREITS_ERLEDIGT, new Exception("los " + losDto.getCNr() + " ist bereits erledigt")); } else if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ANGELEGT)) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER_FERTIGUNG_DAS_LOS_IST_NOCH_NICHT_AUSGEGEBEN, new Exception("los " + losDto.getCNr() + " ist noch nicht ausgegeben")); } } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
private void bucheNegativesollmengenAufLager(LosDto losDto, BigDecimal bdGesamtAbgeliefert, TheClientDto theClientDto) {//from w w w . j av a 2 s . c o m Query query = em.createNamedQuery("LossollmaterialfindByLosIId"); query.setParameter(1, losDto.getIId()); Collection<?> cl = query.getResultList(); LossollmaterialDto[] sollmat = assembleLossollmaterialDtos(cl); Integer lagerIId = null; ParametermandantDto parametermandantDto; try { parametermandantDto = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_NEGATIVE_SOLLMENGEN_BUCHEN_AUF_ZIELLAGER); if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) { lagerIId = losDto.getLagerIIdZiel(); } else { // Laeger des Loses LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(losDto.getIId()); lagerIId = laeger[0].getLagerIId(); } } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } for (int i = 0; i < sollmat.length; i++) { LossollmaterialDto sollmatZeile = sollmat[i]; if (sollmatZeile.getNMenge().doubleValue() < 0) { // Sollsatzgroesse BigDecimal ssg = sollmatZeile.getNMenge().abs().divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); BigDecimal soll = bdGesamtAbgeliefert.multiply(ssg); BigDecimal ausgegeben = getAusgegebeneMenge(sollmatZeile.getIId(), null, theClientDto).abs(); BigDecimal mengeNeu = soll.subtract(ausgegeben); if (mengeNeu.doubleValue() > 0) { LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(lagerIId); istmat.setLossollmaterialIId(sollmat[i].getIId()); istmat.setNMenge(mengeNeu.abs()); istmat.setBAbgang(Helper.boolean2Short(false)); createLosistmaterial(istmat, null, theClientDto); } } } }
From source file:org.egov.ptis.service.es.CollectionIndexElasticSearchService.java
private void setTableValuesForBillCollector(CollTableData collTableData, Entry<String, List<CollTableData>> entry, String aggregationLevel) { BigDecimal currDayColl = BigDecimal.ZERO; BigDecimal cytdColl = BigDecimal.ZERO; BigDecimal lytdColl = BigDecimal.ZERO; BigDecimal cytdDmd = BigDecimal.ZERO; BigDecimal performance;//from w w w . j a v a2s. co m BigDecimal totalDmd = BigDecimal.ZERO; BigDecimal variance; BigDecimal cyArrearColl = BigDecimal.ZERO; BigDecimal cyCurrentColl = BigDecimal.ZERO; BigDecimal cyPenaltyColl = BigDecimal.ZERO; BigDecimal cyRebate = BigDecimal.ZERO; BigDecimal cyAdvance = BigDecimal.ZERO; BigDecimal lyArrearColl = BigDecimal.ZERO; BigDecimal lyCurrentColl = BigDecimal.ZERO; BigDecimal lyPenaltyColl = BigDecimal.ZERO; BigDecimal lyRebate = BigDecimal.ZERO; BigDecimal lyAdvance = BigDecimal.ZERO; BigDecimal arrearDmd = BigDecimal.ZERO; BigDecimal currentDmd = BigDecimal.ZERO; BigDecimal proportionalArrearDmd = BigDecimal.ZERO; BigDecimal proportionalCurrentDmd = BigDecimal.ZERO; BigDecimal dayTargetDmd = BigDecimal.ZERO; BigDecimal lyTodayColl = BigDecimal.ZERO; BigDecimal totalAssessments = BigDecimal.ZERO; BigDecimal arrearInterestDemand = BigDecimal.ZERO; BigDecimal currentInterestDemand = BigDecimal.ZERO; BigDecimal lyTotalArrearColl = BigDecimal.ZERO; BigDecimal lyTotalCurrentColl = BigDecimal.ZERO; BigDecimal lyTotalPenaltyColl = BigDecimal.ZERO; BigDecimal lyTotalRebate = BigDecimal.ZERO; BigDecimal lyTotalAdvance = BigDecimal.ZERO; BigDecimal lyTotalColl = BigDecimal.ZERO; String[] userNameNumberArr = entry.getKey().split("~"); for (CollTableData tableData : entry.getValue()) { currDayColl = currDayColl .add(tableData.getTodayColl() == null ? BigDecimal.ZERO : tableData.getTodayColl()); cytdColl = cytdColl.add(tableData.getCytdColl() == null ? BigDecimal.ZERO : tableData.getCytdColl()); cytdDmd = cytdDmd.add(tableData.getCytdDmd() == null ? BigDecimal.ZERO : tableData.getCytdDmd()); totalDmd = totalDmd.add(tableData.getTotalDmd() == null ? BigDecimal.ZERO : tableData.getTotalDmd()); lytdColl = lytdColl.add(tableData.getLytdColl() == null ? BigDecimal.ZERO : tableData.getLytdColl()); lyTotalColl = lyTotalColl .add(tableData.getLyTotalColl() == null ? BigDecimal.ZERO : tableData.getLyTotalColl()); cyArrearColl = cyArrearColl .add(tableData.getCyArrearColl() == null ? BigDecimal.ZERO : tableData.getCyArrearColl()); cyCurrentColl = cyCurrentColl .add(tableData.getCyCurrentColl() == null ? BigDecimal.ZERO : tableData.getCyCurrentColl()); cyPenaltyColl = cyPenaltyColl .add(tableData.getCyPenaltyColl() == null ? BigDecimal.ZERO : tableData.getCyPenaltyColl()); cyRebate = cyRebate.add(tableData.getCyRebate() == null ? BigDecimal.ZERO : tableData.getCyRebate()); cyAdvance = cyAdvance .add(tableData.getCyAdvanceColl() == null ? BigDecimal.ZERO : tableData.getCyAdvanceColl()); lyArrearColl = lyArrearColl .add(tableData.getLyArrearColl() == null ? BigDecimal.ZERO : tableData.getLyArrearColl()); lyCurrentColl = lyCurrentColl .add(tableData.getLyCurrentColl() == null ? BigDecimal.ZERO : tableData.getLyCurrentColl()); lyPenaltyColl = lyPenaltyColl .add(tableData.getLyPenaltyColl() == null ? BigDecimal.ZERO : tableData.getLyPenaltyColl()); lyRebate = lyRebate.add(tableData.getLyRebate() == null ? BigDecimal.ZERO : tableData.getLyRebate()); lyAdvance = lyAdvance .add(tableData.getLyAdvanceColl() == null ? BigDecimal.ZERO : tableData.getLyAdvanceColl()); lyTotalArrearColl = lyTotalArrearColl.add(tableData.getLyTotalArrearsColl() == null ? BigDecimal.ZERO : tableData.getLyTotalArrearsColl()); lyTotalCurrentColl = lyTotalCurrentColl.add(tableData.getLyTotalCurrentColl() == null ? BigDecimal.ZERO : tableData.getLyTotalCurrentColl()); lyTotalPenaltyColl = lyTotalPenaltyColl.add(tableData.getLyTotalPenaltyColl() == null ? BigDecimal.ZERO : tableData.getLyTotalPenaltyColl()); lyTotalRebate = lyTotalRebate .add(tableData.getLyTotalRebate() == null ? BigDecimal.ZERO : tableData.getLyTotalRebate()); lyTotalAdvance = lyTotalAdvance.add(tableData.getLyTotalAdvanceColl() == null ? BigDecimal.ZERO : tableData.getLyTotalAdvanceColl()); arrearDmd = arrearDmd .add(tableData.getArrearDemand() == null ? BigDecimal.ZERO : tableData.getArrearDemand()); currentDmd = currentDmd .add(tableData.getCurrentDemand() == null ? BigDecimal.ZERO : tableData.getCurrentDemand()); proportionalArrearDmd = proportionalArrearDmd .add(tableData.getProportionalArrearDemand() == null ? BigDecimal.ZERO : tableData.getProportionalArrearDemand()); proportionalCurrentDmd = proportionalCurrentDmd .add(tableData.getProportionalCurrentDemand() == null ? BigDecimal.ZERO : tableData.getProportionalCurrentDemand()); dayTargetDmd = dayTargetDmd .add(tableData.getDayTargetDemand() == null ? BigDecimal.ZERO : tableData.getDayTargetDemand()); lyTodayColl = lyTodayColl .add(tableData.getLyTodayColl() == null ? BigDecimal.ZERO : tableData.getLyTodayColl()); totalAssessments = totalAssessments.add(tableData.getTotalAssessments()); arrearInterestDemand = arrearInterestDemand .add(tableData.getArrearInterestDemand() == null ? BigDecimal.ZERO : tableData.getArrearInterestDemand()); currentInterestDemand = currentInterestDemand .add(tableData.getCurrentInterestDemand() == null ? BigDecimal.ZERO : tableData.getCurrentInterestDemand()); } if (DASHBOARD_GROUPING_BILLCOLLECTORWISE.equalsIgnoreCase(aggregationLevel)) { collTableData.setBillCollector(userNameNumberArr[0]); collTableData.setBillCollMobNo(userNameNumberArr.length > 1 ? userNameNumberArr[1] : StringUtils.EMPTY); } else if (DASHBOARD_GROUPING_REVENUEINSPECTORWISE.equalsIgnoreCase(aggregationLevel)) { collTableData.setRevenueInspector(userNameNumberArr[0]); collTableData .setRevInspectorMobNo(userNameNumberArr.length > 1 ? userNameNumberArr[1] : StringUtils.EMPTY); } else if (DASHBOARD_GROUPING_REVENUEOFFICERWISE.equalsIgnoreCase(aggregationLevel)) { collTableData.setRevenueOfficer(userNameNumberArr[0]); collTableData .setRevOfficerMobNo(userNameNumberArr.length > 1 ? userNameNumberArr[1] : StringUtils.EMPTY); } collTableData.setTodayColl(currDayColl); collTableData.setCytdColl(cytdColl); collTableData.setCytdDmd(cytdDmd); collTableData.setCytdBalDmd(cytdDmd.subtract(cytdColl)); collTableData.setTotalDmd(totalDmd); collTableData.setLytdColl(lytdColl); setCurrYearTillDateCollBreakUpForTableData(collTableData, cyArrearColl, cyCurrentColl, cyPenaltyColl, cyRebate, cyAdvance); setLastYearTillDateCollBreakUpForTableData(collTableData, lyArrearColl, lyCurrentColl, lyPenaltyColl, lyRebate, lyAdvance); setLastFinYearCollBreakUpForTableData(collTableData, lyTotalArrearColl, lyTotalCurrentColl, lyTotalPenaltyColl, lyTotalRebate, lyTotalAdvance); collTableData.setArrearDemand(arrearDmd); collTableData.setCurrentDemand(currentDmd); collTableData.setProportionalArrearDemand(proportionalArrearDmd); collTableData.setProportionalCurrentDemand(proportionalCurrentDmd); collTableData.setDayTargetDemand(dayTargetDmd); collTableData.setLyTodayColl(lyTodayColl); collTableData.setArrearInterestDemand(arrearInterestDemand); collTableData.setCurrentInterestDemand(currentInterestDemand); collTableData.setTotalAssessments(totalAssessments); if (cytdDmd != BigDecimal.valueOf(0)) { performance = (collTableData.getCytdColl().multiply(PropertyTaxConstants.BIGDECIMAL_100)) .divide(cytdDmd, 1, BigDecimal.ROUND_HALF_UP); collTableData.setPerformance(performance); } if (collTableData.getLytdColl().compareTo(BigDecimal.ZERO) == 0) variance = PropertyTaxConstants.BIGDECIMAL_100; else variance = ((collTableData.getCytdColl().subtract(collTableData.getLytdColl())) .multiply(PropertyTaxConstants.BIGDECIMAL_100)).divide(collTableData.getLytdColl(), 1, BigDecimal.ROUND_HALF_UP); collTableData.setLyVar(variance); }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
public void bucheMaterialAufLos(LosDto losDto, BigDecimal menge, boolean bHandausgabe, boolean bNurFehlmengenAnlegenUndReservierungenLoeschen, boolean bUnterstuecklistenAbbuchen, TheClientDto theClientDto, ArrayList<BucheSerienChnrAufLosDto> bucheSerienChnrAufLosDtos, boolean throwExceptionWhenCreate) { try {//from w w w. j a v a2 s . co m Query query = em.createNamedQuery("LossollmaterialfindByLosIId"); query.setParameter(1, losDto.getIId()); Collection<?> cl = query.getResultList(); // if (cl.isEmpty()) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, null); // } LossollmaterialDto[] sollmat = assembleLossollmaterialDtos(cl); LosablieferungDto[] dtos = losablieferungFindByLosIId(losDto.getIId(), false, theClientDto); BigDecimal bdBereitsabgeliefert = new BigDecimal(0); for (int i = 0; i < dtos.length; i++) { bdBereitsabgeliefert = bdBereitsabgeliefert.add(dtos[i].getNMenge()); } // PJ18216 boolean bNichtLagerbewSofortAusgeben = false; try { ParametermandantDto parameterM = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_NICHT_LAGERBEWIRTSCHAFTETE_SOFORT_AUSGEBEN); bNichtLagerbewSofortAusgeben = ((Boolean) parameterM.getCWertAsObject()).booleanValue(); } catch (RemoteException ex) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex); } // Laeger des Loses LoslagerentnahmeDto[] laeger = loslagerentnahmeFindByLosIId(losDto.getIId()); // nun vom lager abbuchen for (int i = 0; i < sollmat.length; i++) { ArtikelDto artikelDto = getArtikelFac().artikelFindByPrimaryKey(sollmat[i].getArtikelIId(), theClientDto); // seriennummerntragende werden jetzt gar nicht gebucht if (!bNurFehlmengenAnlegenUndReservierungenLoeschen) { if (!bHandausgabe || (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true)) { // PJ18216 if (bHandausgabe == true && bNichtLagerbewSofortAusgeben == true) { if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) { continue; } } StuecklisteDto stuecklisteDto = getStuecklisteFac() .stuecklisteFindByMandantCNrArtikelIIdOhneExc(artikelDto.getIId(), theClientDto); if (bUnterstuecklistenAbbuchen == false && stuecklisteDto != null) { } else { BigDecimal bdAbzubuchendeMenge = new BigDecimal(0.0000); if (menge == null) { bdAbzubuchendeMenge = sollmat[i].getNMenge(); } else { if (losDto.getNLosgroesse().doubleValue() != 0) { BigDecimal sollsatzGroesse = sollmat[i].getNMenge() .divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); sollsatzGroesse = Helper.rundeKaufmaennisch(sollsatzGroesse, 3); BigDecimal bdBereitsausgegeben = getAusgegebeneMenge(sollmat[i].getIId(), null, theClientDto); BigDecimal bdGesamtmenge = Helper.rundeKaufmaennisch( bdBereitsabgeliefert.add(menge).multiply(sollsatzGroesse), 4); if (bdGesamtmenge.subtract(bdBereitsausgegeben).doubleValue() > 0) { bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben); } else { if (bdGesamtmenge.doubleValue() < 0) { bdAbzubuchendeMenge = bdGesamtmenge.subtract(bdBereitsausgegeben).abs(); } } } } // wg. PJ 15370 if (sollmat[i].getNMenge().doubleValue() > 0) { if (!Helper.short2boolean(artikelDto.getBSeriennrtragend()) && !Helper.short2boolean(artikelDto.getBChargennrtragend())) { for (int j = 0; j < laeger.length; j++) { // wenn noch was abzubuchen ist (Menge > // 0) if (bdAbzubuchendeMenge.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdLagerstand = null; if (Helper.short2boolean(artikelDto.getBLagerbewirtschaftet())) { // PJ18290 boolean bImmerAusreichendVerfuegbar = false; try { ParametermandantDto parameterM = getParameterFac() .getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_ARTIKEL, ParameterFac.PARAMETER_LAGER_IMMER_AUSREICHEND_VERFUEGBAR); bImmerAusreichendVerfuegbar = ((Boolean) parameterM .getCWertAsObject()).booleanValue(); } catch (RemoteException ex) { throw new EJBExceptionLP(EJBExceptionLP.FEHLER, ex); } if (bImmerAusreichendVerfuegbar == true) { bdLagerstand = new BigDecimal(999999999); } else { bdLagerstand = getLagerFac().getLagerstand(artikelDto.getIId(), laeger[j].getLagerIId(), theClientDto); } } else { bdLagerstand = new BigDecimal(999999999); } // wenn ein lagerstand da ist if (bdLagerstand.compareTo(new BigDecimal(0)) == 1) { BigDecimal bdMengeVonLager; if (bdLagerstand.compareTo(bdAbzubuchendeMenge) == 1) { // wenn mehr als ausreichend // auf // lager bdMengeVonLager = bdAbzubuchendeMenge; } else { // dann nur den lagerstand // entnehmen bdMengeVonLager = bdLagerstand; } LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(laeger[j].getLagerIId()); istmat.setLossollmaterialIId(sollmat[i].getIId()); istmat.setNMenge(bdMengeVonLager); if (sollmat[i].getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, null, theClientDto); // menge reduzieren bdAbzubuchendeMenge = bdAbzubuchendeMenge.subtract(bdMengeVonLager); } } } } else { if (bucheSerienChnrAufLosDtos != null) { for (int j = 0; j < bucheSerienChnrAufLosDtos.size(); j++) { BucheSerienChnrAufLosDto dtoTemp = bucheSerienChnrAufLosDtos.get(j); if (dtoTemp.getLossollmaterialIId().equals(sollmat[i].getIId())) { LosistmaterialDto istmat = new LosistmaterialDto(); istmat.setLagerIId(dtoTemp.getLagerIId()); istmat.setLossollmaterialIId(dtoTemp.getLossollmaterialIId()); istmat.setNMenge(dtoTemp.getNMenge()); if (sollmat[i].getNMenge().doubleValue() > 0) { istmat.setBAbgang(Helper.boolean2Short(true)); } else { istmat.setBAbgang(Helper.boolean2Short(false)); } // ist-wert anlegen und // lagerbuchung // durchfuehren createLosistmaterial(istmat, dtoTemp.getCSeriennrChargennr(), theClientDto); } } } } } } } } // Reservierung loeschen removeReservierung(artikelDto, sollmat[i].getIId()); // Fehlmenge anlegen getFehlmengeFac().aktualisiereFehlmenge(LocaleFac.BELEGART_LOS, sollmat[i].getIId(), throwExceptionWhenCreate, theClientDto); } } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FIND, ex); // } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
@TransactionAttribute(TransactionAttributeType.NEVER) public ArrayList<LosAusAuftragDto> vorschlagMitUnterlosenAusAuftrag(Integer auftragIId, TheClientDto theClientDto) {/*from w w w .ja va 2 s .c om*/ ArrayList<LosAusAuftragDto> losDtos = new ArrayList<LosAusAuftragDto>(); try { ParametermandantDto parameterVorlaufzeit = getParameterFac().getMandantparameter( theClientDto.getSMandantenwaehrung(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_DEFAULT_VORLAUFZEIT_INTERNEBESTELLUNG); int iVorlaufzeit = (Integer) parameterVorlaufzeit.getCWertAsObject(); Integer stdFertigungsgruppeIId = null; FertigungsgruppeDto[] fertigungsgruppeDtos = getStuecklisteFac() .fertigungsgruppeFindByMandantCNr(theClientDto.getMandant(), theClientDto); if (fertigungsgruppeDtos.length > 0) { stdFertigungsgruppeIId = fertigungsgruppeDtos[0].getIId(); } AuftragDto auftragDto = getAuftragFac().auftragFindByPrimaryKey(auftragIId); int iLieferdauerKunde = getKundeFac() .kundeFindByPrimaryKey(auftragDto.getKundeIIdAuftragsadresse(), theClientDto).getILieferdauer(); if (auftragDto.getAuftragstatusCNr().equals(LocaleFac.STATUS_ANGELEGT) || auftragDto.getAuftragstatusCNr().equals(LocaleFac.STATUS_OFFEN) || auftragDto.getAuftragstatusCNr().equals(LocaleFac.STATUS_TEILERLEDIGT)) { AuftragpositionDto[] dtos = getAuftragpositionFac().auftragpositionFindByAuftrag(auftragIId); for (int i = 0; i < dtos.length; i++) { ArrayList<LosAusAuftragDto> losDtosPosition = new ArrayList<LosAusAuftragDto>(); if (dtos[i].getPositionsartCNr().equals(AuftragServiceFac.AUFTRAGPOSITIONART_HANDEINGABE)) { Timestamp tAuftragsliefertermin = dtos[i].getTUebersteuerbarerLiefertermin(); if (tAuftragsliefertermin == null) { tAuftragsliefertermin = auftragDto.getDLiefertermin(); } Timestamp tEnde = Helper.addiereTageZuTimestamp(tAuftragsliefertermin, -iLieferdauerKunde); Timestamp tBeginn = Helper.addiereTageZuTimestamp(tEnde, -iVorlaufzeit); LosAusAuftragDto laDto = new LosAusAuftragDto(); if (tBeginn.before(Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())))) { laDto.setBDatumVerschoben(true); tBeginn = Helper.cutTimestamp(new Timestamp(System.currentTimeMillis())); tEnde = Helper.addiereTageZuTimestamp(tBeginn, iVorlaufzeit); } LosDto losDto = new LosDto(); losDto.setAuftragIId(auftragIId); losDto.setAuftragpositionIId(dtos[i].getIId()); losDto.setTProduktionsbeginn(new java.sql.Date(tBeginn.getTime())); losDto.setTProduktionsende(new java.sql.Date(tEnde.getTime())); losDto.setLagerIIdZiel(getLagerFac().getHauptlagerDesMandanten(theClientDto).getIId()); losDto.setFertigungsgruppeIId(stdFertigungsgruppeIId); losDto.setNLosgroesse(dtos[i].getNMenge()); losDto.setKostenstelleIId(auftragDto.getKostenstelleIId()); losDto.setCProjekt(dtos[i].getCBez()); laDto.setLosDto(losDto); laDto.setAuftragpositionDto(dtos[i]); laDto.setAuftragspositionsnummer( getAuftragpositionFac().getPositionNummer(dtos[i].getIId())); losDtos.add(laDto); } else { // SP1107 Setartikelkopf ignorieren Session session = null; SessionFactory factory = FLRSessionFactory.getFactory(); session = factory.openSession(); Criteria crit = session.createCriteria(FLRAuftragposition.class); crit.add(Restrictions.eq("position_i_id_artikelset", dtos[i].getIId())); int iZeilen = crit.list().size(); session.close(); if (iZeilen > 0) { continue; } StuecklisteDto stuecklisteDto = getStuecklisteFac() .stuecklisteFindByMandantCNrArtikelIIdOhneExc(dtos[i].getArtikelIId(), theClientDto); if (stuecklisteDto != null) { if (dtos[i].getNMenge() != null && dtos[i].getNMenge().doubleValue() > 0) { Timestamp tAuftragsliefertermin = dtos[i].getTUebersteuerbarerLiefertermin(); if (tAuftragsliefertermin == null) { tAuftragsliefertermin = auftragDto.getDLiefertermin(); } Timestamp tEnde = Helper.addiereTageZuTimestamp(tAuftragsliefertermin, -iLieferdauerKunde); Timestamp tBeginn = tEnde; if (stuecklisteDto.getNDefaultdurchlaufzeit() != null) { tBeginn = Helper.addiereTageZuTimestamp(tEnde, -stuecklisteDto.getNDefaultdurchlaufzeit().intValue()); } LosAusAuftragDto laDto = new LosAusAuftragDto(); LosDto losDto = new LosDto(); losDto.setAuftragIId(auftragIId); losDto.setAuftragpositionIId(dtos[i].getIId()); losDto.setTProduktionsbeginn(new java.sql.Date(tBeginn.getTime())); losDto.setTProduktionsende(new java.sql.Date(tEnde.getTime())); losDto.setStuecklisteIId(stuecklisteDto.getIId()); losDto.setLagerIIdZiel(stuecklisteDto.getLagerIIdZiellager()); losDto.setCProjekt(auftragDto.getCBezProjektbezeichnung()); losDto.setFertigungsgruppeIId(stuecklisteDto.getFertigungsgruppeIId()); losDto.setNLosgroesse(dtos[i].getNMenge()); losDto.setKostenstelleIId(auftragDto.getKostenstelleIId()); laDto.setLosDto(losDto); laDto.setAuftragpositionDto(dtos[i]); laDto.setAuftragspositionsnummer( getAuftragpositionFac().getPositionNummer(dtos[i].getIId())); laDto.setFehlmengen(getFehlmengeFac().getAnzahlFehlmengeEinesArtikels( stuecklisteDto.getArtikelIId(), theClientDto)); ArtikelreservierungDto eigeneReservierungDto = getReservierungFac() .artikelreservierungFindByBelegartCNrBelegartPositionIIdOhneExc( LocaleFac.BELEGART_AUFTRAG, dtos[i].getIId()); BigDecimal reservierungen = getReservierungFac() .getAnzahlReservierungen(stuecklisteDto.getArtikelIId(), theClientDto); if (eigeneReservierungDto != null && eigeneReservierungDto.getNMenge() != null) { if (reservierungen.subtract(eigeneReservierungDto.getNMenge()) .doubleValue() < 0) { reservierungen = new BigDecimal(0); } else { reservierungen = reservierungen.subtract(eigeneReservierungDto.getNMenge()); } } laDto.setReservierungen(reservierungen); BigDecimal lagerstand = new BigDecimal(0); LagerDto[] allelaegerDtos = getLagerFac() .lagerFindByMandantCNr(theClientDto.getMandant()); for (int j = 0; j < allelaegerDtos.length; j++) { if (Helper.short2boolean(allelaegerDtos[j].getBInternebestellung())) { lagerstand = lagerstand .add(getLagerFac().getLagerstand(stuecklisteDto.getArtikelIId(), allelaegerDtos[j].getIId(), theClientDto)); } } laDto.setLagerstand(lagerstand); laDto.setOffeneFertigungsmenge(getFertigungFac() .getAnzahlInFertigung(stuecklisteDto.getArtikelIId(), theClientDto)); losDtosPosition.add(laDto); ArrayList<?> stuecklisteAufegloest = getStuecklisteFac() .getStrukturDatenEinerStueckliste(stuecklisteDto.getIId(), theClientDto, StuecklisteReportFac.REPORT_STUECKLISTE_OPTION_SORTIERUNG_ARTIKELNR, 0, null, false, true, dtos[i].getNMenge(), null, true); for (int j = 0; j < stuecklisteAufegloest.size(); j++) { StuecklisteMitStrukturDto strukt = (StuecklisteMitStrukturDto) stuecklisteAufegloest .get(j); if (strukt.getStuecklistepositionDto() != null && strukt.getStuecklistepositionDto().getArtikelIId() != null) { losDtosPosition = holeAlleMoeglichenUnterloseEinerStueckliste( strukt.getStuecklistepositionDto().getArtikelIId(), strukt.getStuecklistepositionDto().getNZielmenge(), iVorlaufzeit, tBeginn, losDtosPosition, auftragDto, dtos[i].getNMenge(), theClientDto); } } // Wenn Termin vor Heute, dann aauf nach Heute // verschieben java.sql.Date fruehesterProduktionsbeginnVorHeute = Helper .cutDate(new java.sql.Date(System.currentTimeMillis())); for (int k = 0; k < losDtosPosition.size(); k++) { if (losDtosPosition.get(k).getLosDto().getTProduktionsbeginn() .before(fruehesterProduktionsbeginnVorHeute)) { fruehesterProduktionsbeginnVorHeute = losDtosPosition.get(k).getLosDto() .getTProduktionsbeginn(); } } int iDiffTage = Helper.getDifferenzInTagen(fruehesterProduktionsbeginnVorHeute, new java.sql.Date(System.currentTimeMillis())); if (iDiffTage > 0) { for (int k = 0; k < losDtosPosition.size(); k++) { losDtosPosition.get(k).getLosDto() .setTProduktionsbeginn(Helper.addiereTageZuDatum( losDtosPosition.get(k).getLosDto().getTProduktionsbeginn(), iDiffTage)); losDtosPosition.get(k).getLosDto() .setTProduktionsende(Helper.addiereTageZuDatum( losDtosPosition.get(k).getLosDto().getTProduktionsende(), iDiffTage)); losDtosPosition.get(k).setBDatumVerschoben(true); } } for (int k = 0; k < losDtosPosition.size(); k++) { losDtos.add(losDtosPosition.get(k)); } } } } } } } catch (RemoteException e) { throwEJBExceptionLPRespectOld(e); } return losDtos; }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
@TransactionTimeout(1000) public void aktualisiereNachtraeglichPreiseAllerLosablieferungen(Integer losIId, TheClientDto theClientDto, boolean bNurLetztenMaterialwertNeuBerechnen) throws EJBExceptionLP { LosDto losDto = losFindByPrimaryKey(losIId); try {//from www. j a va 2s . c om ParametermandantDto parametermandantDto = getParameterFac().getMandantparameter( theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_ISTZEITEN_GLEICH_SOLLZEITEN); boolean bSollGleichIstzeiten = false; if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) { bSollGleichIstzeiten = true; } // AZ-Werte aktualisieren if (bSollGleichIstzeiten) { aktualisiereAZAllerLosablieferungenWennSollIstGleichIst(losIId, theClientDto); } else { aktualisiereAZAllerLosablieferungen(losIId, theClientDto); } // Preise berechnen: // -------------------------------------------------------------- // --------- // 1. der inklusive aller bisherigen ablieferungen erledigte // Materialwert if (bNurLetztenMaterialwertNeuBerechnen == false) { materialwertAllerLosablieferungenNeuBerechnen(losDto, theClientDto); } // PJ 14807 boolean bAblieferpreisIstDurchschnitspreis = false; ParametermandantDto parameter = getParameterFac().getMandantparameter(theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_ABLIEFERUNGSPREIS_IST_DURCHSCHNITTSPREIS); bAblieferpreisIstDurchschnitspreis = ((Boolean) parameter.getCWertAsObject()); BigDecimal bdMaterialwertGesamt = getErledigterMaterialwertNEU(losDto, theClientDto); // -------------------------------------------------------------- // --------- // nun der detaillierte Arbeitszeitwert (mit Beruecksichtigung // der Unterlose) // 1. der inklusive aller bisherigen ablieferungen erledigte // Arbeitszeitwert BigDecimal bdArbeitszeitwertAusUnterlosenGesamt = getErledigterArbeitszeitwertAusUnterlosen(losDto, theClientDto); // PJ14807 BigDecimal bdAzWertDurchschnitt = new BigDecimal(0); BigDecimal bdMatWertDurchschnitt = new BigDecimal(0); if (bAblieferpreisIstDurchschnitspreis == true) { BigDecimal bdGesamtkosten = new BigDecimal(0); // Maschinenzeiten AuftragzeitenDto[] zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges(losIId, null, null, null, theClientDto); for (int j = 0; j < zeitenMaschine.length; j++) { bdGesamtkosten = bdGesamtkosten.add(zeitenMaschine[j].getBdKosten()); } // "normale" Zeiten AuftragzeitenDto[] zeitenMann = getZeiterfassungFac().getAllZeitenEinesBeleges( LocaleFac.BELEGART_LOS, losIId, null, null, null, null, false, false, theClientDto); for (int j = 0; j < zeitenMann.length; j++) { bdGesamtkosten = bdGesamtkosten.add(zeitenMann[j].getBdKosten()); } bdGesamtkosten = bdGesamtkosten.add(bdArbeitszeitwertAusUnterlosenGesamt); BigDecimal bdAbgeliefertGesamt = getErledigteMenge(losDto.getIId(), theClientDto); if (bdAbgeliefertGesamt.doubleValue() > 0) { bdAzWertDurchschnitt = bdGesamtkosten.divide(bdAbgeliefertGesamt, 4, BigDecimal.ROUND_HALF_EVEN); bdMatWertDurchschnitt = bdMaterialwertGesamt.divide(bdAbgeliefertGesamt, 4, BigDecimal.ROUND_HALF_EVEN); } } Query query = em.createNamedQuery("LosablieferungfindByLosIId"); query.setParameter(1, losIId); Collection<?> losablieferungs = query.getResultList(); LosablieferungDto[] losabDtos = assembleLosablieferungDtosOhneSnrs(losablieferungs); for (Iterator<?> iter = losablieferungs.iterator(); iter.hasNext();) { Losablieferung losablieferung = (Losablieferung) iter.next(); // 2. bisher erledigte duerfen aber nicht mehr beruecksichtigt // werden -> subtrahieren // Diese werden durch die "Assemblierung" neu geladen (es // koennten sich Werte geaendert haben), das Find faellt aber // weg BigDecimal bdMaterialwert = bdMaterialwertGesamt; if (bAblieferpreisIstDurchschnitspreis == false) { if (bNurLetztenMaterialwertNeuBerechnen == true && iter.hasNext() == false) { // Ausser die betroffene Ablieferung selbst for (int i = 0; i < losabDtos.length; i++) { if (!losablieferung.getIId().equals(losabDtos[i].getIId())) { bdMaterialwert = bdMaterialwert.subtract( losabDtos[i].getNMaterialwert().multiply(losabDtos[i].getNMenge())); } } // 3. Nach Division durch die Menge der neuen // Ablieferung // hab // ich den Einzelwert losablieferung.setNMaterialwert( bdMaterialwert.divide(losablieferung.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN)); } // ---------------------------------------------------------- // ---- // --------- // Gestehungspreis: ist die Summe aus Materialwert und // Arbeitszeitwert losablieferung.setNGestehungspreis( losablieferung.getNMaterialwert().add(losablieferung.getNArbeitszeitwert())); BigDecimal bdArbeitszeitwertAusUnterlosen = bdArbeitszeitwertAusUnterlosenGesamt; // 2. bisher erledigte duerfen aber nicht mehr // beruecksichtigt // werden -> subtrahieren for (int i = 0; i < losabDtos.length; i++) { if (!losablieferung.getIId().equals(losabDtos[i].getIId())) { bdArbeitszeitwertAusUnterlosen = bdArbeitszeitwertAusUnterlosen.subtract(losabDtos[i] .getNArbeitszeitwertdetailliert().multiply(losabDtos[i].getNMenge())); } } // 3. Nach Division durch die Menge der neuen Ablieferung // hab // ich den Einzelwert BigDecimal bdAZWertAusUnterlosen = bdArbeitszeitwertAusUnterlosen .divide(losablieferung.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN); // 4. Dazu kommt noch der AZ-Wert aus diesem Los losablieferung.setNArbeitszeitwertdetailliert( bdAZWertAusUnterlosen.add(losablieferung.getNArbeitszeitwert())); // ---------------------------------------------------------- // ---- // --------- // nun der detaillierte Materialwert // der ist einfach die Differenz zwischen Gestehungspreis // und // Detailliertem Arbeitszeitwert losablieferung.setNMaterialwertdetailliert(losablieferung.getNGestehungspreis() .subtract(losablieferung.getNArbeitszeitwertdetailliert())); } else { losablieferung.setNMaterialwertdetailliert(bdMatWertDurchschnitt); losablieferung.setNMaterialwert(bdMatWertDurchschnitt); losablieferung.setNArbeitszeitwertdetailliert(bdAzWertDurchschnitt); losablieferung.setNArbeitszeitwert(bdAzWertDurchschnitt); losablieferung.setNGestehungspreis(bdMatWertDurchschnitt.add(bdAzWertDurchschnitt)); } // speichern if (bNurLetztenMaterialwertNeuBerechnen == false || (bNurLetztenMaterialwertNeuBerechnen == true && iter.hasNext() == false)) { losablieferung.setTAendern(losablieferung.getTAendern()); losablieferung.setBGestehungspreisneuberechnen(Helper.boolean2Short(false)); LosablieferungDto loaDot = assembleLosablieferungDto(losablieferung); // auch in Lagerbewegung aendern bucheLosAblieferungAufLager(loaDot, losDto, theClientDto); } } } catch (RemoteException ex1) { throwEJBExceptionLPRespectOld(ex1); } // catch (FinderException ex) { // throw new EJBExceptionLP(EJBExceptionLP.FEHLER_BEI_FINDBYPRIMARYKEY, // ex); // } }
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;/*from w ww . jav a 2 s .co m*/ 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; }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
/** * Ist-Arbeitszeit fuer eine Ablieferung pro abgelieferter Einheit * bestimmen./* w w w . ja v a2s . c o m*/ * * @param losablieferungIId * Integer * @param bWertOderZeit * boolean fuer Wert = true, fuer Zeit = false * @param theClientDto * String * @return BigDecimal * @throws EJBExceptionLP */ private BigDecimal getErledigteArbeitszeitEinerLosablieferung(Integer losablieferungIId, boolean bWertOderZeit, boolean bMitMaschinenZeit, TheClientDto theClientDto, boolean bRekursiv) throws EJBExceptionLP { BigDecimal bdErgebnis = new BigDecimal(0); LosablieferungDto losablieferungDto = losablieferungFindByPrimaryKey(losablieferungIId, false, theClientDto); try { // Alle Ablieferungen auf dieses Los aufsteigend nach datum sortiert LosablieferungDto[] abl = losablieferungFindByLosIId(losablieferungDto.getLosIId(), false, theClientDto); // Rueckwaertsschleife, da die werte der vorgaenger berechnet werden // muessen (rekursiv) for (int i = abl.length - 1; i > 0; i--) { // wenn ich die aktuelle gefunden hab, subtrahier ich den wert // des vorgaengers if (abl[i].getIId().equals(losablieferungIId)) { bdErgebnis = bdErgebnis.subtract(getErledigteArbeitszeitEinerLosablieferung(abl[i - 1].getIId(), bWertOderZeit, bMitMaschinenZeit, theClientDto, true).multiply(abl[i - 1].getNMenge())); break; } } // ------------------------------------------------------------------ // ---- BigDecimal summeAblieferungen = new BigDecimal(0); // Sollsatzfaktor bestimmen BigDecimal bdErledigt = new BigDecimal(0); for (int i = 0; i < abl.length; i++) { summeAblieferungen = summeAblieferungen.add(abl[i].getNMenge()); if (!abl[i].getTAendern().after(losablieferungDto.getTAendern())) { bdErledigt = bdErledigt.add(abl[i].getNMenge()); } } LosDto losDto = losFindByPrimaryKey(losablieferungDto.getLosIId()); // Wenn Los ueberliefert oder Erledigt, dann zaehlen alle Zeidaten // zum Arbeitszeitwert boolean bAlleZeitenZaehlenFuerArbeitswert = false; if (summeAblieferungen.doubleValue() >= losDto.getNLosgroesse().doubleValue() || losDto.getStatusCNr().equals(LocaleFac.STATUS_ERLEDIGT)) { if (bRekursiv == false) { bAlleZeitenZaehlenFuerArbeitswert = true; } } BigDecimal bdFaktor = bdErledigt.divide(losDto.getNLosgroesse(), 10, BigDecimal.ROUND_HALF_EVEN); // ------------------------------------------------------------------ // ---- // Sollzeiten LossollarbeitsplanDto[] soll = getFertigungFac() .lossollarbeitsplanFindByLosIId(losablieferungDto.getLosIId()); // Sollzeiten nach Artikel verdichten und mit Sollsatzfaktor // multiplizieren HashMap<Integer, BigDecimal> listSollVerdichtet = new HashMap<Integer, BigDecimal>(); for (int i = 0; i < soll.length; i++) { BigDecimal bdBisher = listSollVerdichtet.get(soll[i].getArtikelIIdTaetigkeit()); if (bdBisher == null) { listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(), soll[i].getNGesamtzeit().multiply(bdFaktor)); } else { listSollVerdichtet.put(soll[i].getArtikelIIdTaetigkeit(), bdBisher.add(soll[i].getNGesamtzeit().multiply(bdFaktor))); } } // ------------------------------------------------------------------ // ---- // gebuchte Zeiten holen ParametermandantDto parametermandantDto = getParameterFac().getMandantparameter( theClientDto.getMandant(), ParameterFac.KATEGORIE_FERTIGUNG, ParameterFac.PARAMETER_ISTZEITEN_GLEICH_SOLLZEITEN); boolean bSollGleichIstzeiten = false; if (((java.lang.Boolean) parametermandantDto.getCWertAsObject()).booleanValue() == true) { bSollGleichIstzeiten = true; } // Maschinenzeiten AuftragzeitenDto[] zeitenMaschine = null; AuftragzeitenDto[] zeiten = null; if (bSollGleichIstzeiten == false) { // Maschinenzeiten zeitenMaschine = getZeiterfassungFac().getAllMaschinenzeitenEinesBeleges( losablieferungDto.getLosIId(), null, null, null, theClientDto); // "normale" Zeiten zeiten = getZeiterfassungFac().getAllZeitenEinesBeleges(LocaleFac.BELEGART_LOS, losablieferungDto.getLosIId(), null, null, null, null, false, false, theClientDto); } else { zeiten = new AuftragzeitenDto[listSollVerdichtet.size()]; zeitenMaschine = new AuftragzeitenDto[0]; bAlleZeitenZaehlenFuerArbeitswert = true; int row = 0; for (Iterator<?> iter = listSollVerdichtet.keySet().iterator(); iter.hasNext();) { Integer artikelIId = (Integer) iter.next(); BigDecimal gesamtzeit = listSollVerdichtet.get(artikelIId); AuftragzeitenDto az = new AuftragzeitenDto(); az.setArtikelIId(artikelIId); az.setDdDauer(new Double(gesamtzeit.doubleValue())); BigDecimal bdPreis = getLagerFac() .getGemittelterGestehungspreisAllerLaegerEinesMandanten(artikelIId, theClientDto); az.setBdKosten(gesamtzeit.multiply(bdPreis)); zeiten[row] = az; row++; } } // ------------------------------------------------------------------ // ---- // relevante Ist-Zeiten nach Ident verdichten HashMap<Integer, BigDecimal> listIstWert = new HashMap<Integer, BigDecimal>(); HashMap<Integer, BigDecimal> listIstZeit = new HashMap<Integer, BigDecimal>(); if (bMitMaschinenZeit) { for (int i = 0; i < zeitenMaschine.length; i++) { // Wenn vor der Ablieferung gebucht, dann addieren if ((zeitenMaschine[i].getTsEnde() != null && zeitenMaschine[i].getTsEnde().before(losablieferungDto.getTAendern())) || bAlleZeitenZaehlenFuerArbeitswert == true) { BigDecimal bdBisherWert = listIstWert.get(zeitenMaschine[i].getArtikelIId()); BigDecimal bdBisherZeit = listIstZeit.get(zeitenMaschine[i].getArtikelIId()); if (bdBisherWert == null) { listIstWert.put(zeitenMaschine[i].getArtikelIId(), zeitenMaschine[i].getBdKosten()); listIstZeit.put(zeitenMaschine[i].getArtikelIId(), new BigDecimal(zeitenMaschine[i].getDdDauer())); } else { listIstWert.put(zeitenMaschine[i].getArtikelIId(), bdBisherWert.add(zeitenMaschine[i].getBdKosten())); listIstZeit.put(zeitenMaschine[i].getArtikelIId(), bdBisherZeit.add(new BigDecimal(zeitenMaschine[i].getDdDauer()))); } } } } // "normale" Zeiten for (int i = 0; i < zeiten.length; i++) { // Wenn vor der Ablieferung gebucht, dann addieren if ((zeiten[i].getTsEnde() != null && zeiten[i].getTsEnde().before(losablieferungDto.getTAendern())) || bAlleZeitenZaehlenFuerArbeitswert == true) { BigDecimal bdBisherWert = listIstWert.get(zeiten[i].getArtikelIId()); BigDecimal bdBisherZeit = listIstZeit.get(zeiten[i].getArtikelIId()); if (bdBisherWert == null) { listIstWert.put(zeiten[i].getArtikelIId(), zeiten[i].getBdKosten()); listIstZeit.put(zeiten[i].getArtikelIId(), new BigDecimal(zeiten[i].getDdDauer())); } else { listIstWert.put(zeiten[i].getArtikelIId(), bdBisherWert.add(zeiten[i].getBdKosten())); listIstZeit.put(zeiten[i].getArtikelIId(), bdBisherZeit.add(new BigDecimal(zeiten[i].getDdDauer()))); } } } // ------------------------------------------------------------------ // ---- for (Iterator<?> iter = listIstZeit.keySet().iterator(); iter.hasNext();) { Integer artikelIId = (Integer) iter.next(); // Wenn das Los erledigt ist, dann zaehlen alle if (losDto.getStatusCNr().equals(FertigungFac.STATUS_ERLEDIGT) || (bdErledigt.doubleValue() >= losDto.getNLosgroesse().doubleValue())) { if (bWertOderZeit) { bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId)); } else { bdErgebnis = bdErgebnis.add(listIstZeit.get(artikelIId)); } } // nicht vollstaendig erledigte Lose kriegen hoechstens die // anhand sollsatzgroesse errechnete zeit else { BigDecimal bdIstZeit = listIstZeit.get(artikelIId); BigDecimal bdSollZeit = listSollVerdichtet.get(artikelIId); if (bdSollZeit == null) { // nothing here // Taetigkeiten, die im Sollarbeitsplan nicht enthalten // waren, werden hier noch nicht gezaehlt } else { // Ist liegt unter Soll -> ganzer Wert bzw. Zeit if (bdSollZeit.compareTo(bdIstZeit) >= 0) { if (bWertOderZeit) { bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId)); } else { bdErgebnis = bdErgebnis.add(listIstZeit.get(artikelIId)); } } // Sollsatzzeit ueberschritten else { if (bWertOderZeit) { bdErgebnis = bdErgebnis.add(listIstWert.get(artikelIId).multiply(bdSollZeit) .divide(bdIstZeit, 4, BigDecimal.ROUND_HALF_EVEN)); } else { bdErgebnis = bdErgebnis.add(bdSollZeit); } } } } } } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); } if (losablieferungDto.getNMenge().doubleValue() != 0) { return bdErgebnis.divide(losablieferungDto.getNMenge(), 4, BigDecimal.ROUND_HALF_EVEN); } else { return new BigDecimal(0); } }
From source file:com.lp.server.fertigung.ejbfac.FertigungFacBean.java
public BigDecimal getAusgegebeneMenge(Integer lossollmaterialIId, java.sql.Timestamp tsStichtag, TheClientDto theClientDto) throws EJBExceptionLP { try {// w w w . j a va2 s .co m BigDecimal bdMenge = new BigDecimal(0); SessionFactory factory = FLRSessionFactory.getFactory(); Session session = factory.openSession(); String query = "SELECT li.i_id,li.b_abgang FROM FLRLosistmaterial li WHERE li.lossollmaterial_i_id=" + lossollmaterialIId; org.hibernate.Query qResult = session.createQuery(query); List<?> results = qResult.list(); Iterator<?> resultListIterator = results.iterator(); while (resultListIterator.hasNext()) { Object[] o = (Object[]) resultListIterator.next(); BigDecimal bdAusgegeben = getLagerFac().getMengeEinerBelegposition(LocaleFac.BELEGART_LOS, (Integer) o[0], tsStichtag); if (Helper.short2boolean((Short) o[1]) == true) { bdMenge = bdMenge.add(bdAusgegeben); } else { bdMenge = bdMenge.subtract(bdAusgegeben); } } /* * LosistmaterialDto[] losist = * losistmaterialFindByLossollmaterialIId(lossollmaterialIId); for * (int i = 0; i < losist.length; i++) { BigDecimal bdAusgegeben = * getLagerFac() .getMengeEinerBelegposition(LocaleFac.BELEGART_LOS, * losist[i].getIId(), tsStichtag); if * (Helper.short2boolean(losist[i].getBAbgang()) == true) { bdMenge * = bdMenge.add(bdAusgegeben); } else { bdMenge = * bdMenge.subtract(bdAusgegeben); } } */ return bdMenge; } catch (RemoteException ex) { throwEJBExceptionLPRespectOld(ex); return null; } }