ChangeCalendar/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java

111 lines
4.7 KiB
Java

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<CalendarWeek> 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);
}
}