package com.nttdata.calender.planTimes; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.IsoFields; import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Date; import com.bmc.arsys.api.ARException; import com.bmc.thirdparty.org.springframework.cglib.core.Local; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.ChangeItem; public class PlanTimes { private RemedyJavaAPI remedyJavaAPI; private ArrayList calenderWeeks; private final String formName = "ASF:WI_TAS_Paket"; public PlanTimes(RemedyJavaAPI remedyJavaAPI) { this.remedyJavaAPI = remedyJavaAPI; this.calenderWeeks = new ArrayList<>(); } public void setPlanTimes(PlanTimesRequest req) throws ARException { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); LocalDate startDate = LocalDate.parse(req.getRenderStartDate(), formatter); LocalDate endDate = LocalDate.parse(req.getRenderEndDate(), formatter); var queryChanges = new Query.QueryBuilder(formName).addFieldId("D2", 1000000350) .addFieldId("ChangeNr", 1000000182).addFieldId("PlanTimeHours", 666000009).addFieldId("PlanTimeMinutes", 666000010).build(); while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); int startWeek = startDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); int year = startDate.get(IsoFields.WEEK_BASED_YEAR); calendarWeek.setWeek(year + "w" + startWeek); calendarWeek.setPlanTime(0); calendarWeek.setStartDate(startDate.format(formatter)); LocalDate endOfWeek = startDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); if (endOfWeek.isAfter(endDate)) endOfWeek = endDate; calendarWeek.setEndDate(endOfWeek.format(formatter)); calenderWeeks.add(calendarWeek); startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } var changesInDateRange = remedyJavaAPI.queryFieldsById( "\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" + req.getRenderEndDate() + "\"", queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { System.out.println(week.getStartDate() + " ---> " + week.getEndDate()); double planTimePerWeek = 0.0; for (var change : changesInDateRange) { LocalDate d2 = timestampToDate(change.get(queryChanges.getFieldId("D2")).toString()); LocalDate dateStart = LocalDate.parse(week.getStartDate(), formatter); LocalDate dateEnd = LocalDate.parse(week.getEndDate(), formatter); if (d2.isAfter(dateStart) && (d2.isEqual(dateEnd) || d2.isBefore(dateEnd))) { System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " _ " + new SimpleDateFormat("dd.MM.yyyy").format(d2)); var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); var ptMinutes = minutes.isEmpty() ? "00" : minutes; var ptHours = hours.isEmpty() ? "00" : hours; double planTime = convertPlanTime(ptHours, ptMinutes); planTimePerWeek += planTime; } } System.out.println(planTimePerWeek); week.setPlanTime((int) Math.ceil(planTimePerWeek)); } for (var v : calenderWeeks) System.out .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); } public double convertPlanTime(String hours, String minutes) throws ARException { double totalHours = Integer.valueOf(hours) + (Integer.valueOf(minutes) / 60.0); return totalHours; } public LocalDate timestampToDate(String timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy"); String numericPart = timestamp.replaceAll("[^\\d]", ""); long ts = Long.parseLong(numericPart); if (numericPart.length() <= 10) ts *= 1000; String date = sdf.format(new Date(ts)); return LocalDate.parse(date, formatter); } }