From 7c3d7a5652b9bb7433a386ab83f92ceaf3018c20 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Wed, 14 Jun 2023 16:26:38 +0200 Subject: [PATCH 01/25] created response and request classes --- .../calender/api/KalenderRestController.java | 7 +++ .../calender/planTimes/PlanTimesRequest.java | 35 ++++++++++++ .../calender/planTimes/PlanTimesResponse.java | 54 +++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java create mode 100644 backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index bc19dbf..1e8eecd 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -31,6 +31,7 @@ import com.nttdata.calender.implementer.ImplementerGetResponse; import com.nttdata.calender.implementer.ImplementerUpdateRequest; import com.nttdata.calender.packageType.PackageItems; import com.nttdata.calender.packageType.PackageType; +import com.nttdata.calender.planTimes.PlanTimesRequest; import com.nttdata.calender.states.State; import com.nttdata.calender.states.StateChange; import com.nttdata.calender.states.StateChangeRequest; @@ -112,6 +113,12 @@ public class KalenderRestController { return urlConstructor.construct(javaAPI); } + @CrossOrigin("*") + @GetMapping("/api/getPlanTimes") + public Object getPlanTimes(@RequestBody PlanTimesRequest request) { + return null; + } + /** * * Handles a GET request to retrieve the user's support group. diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java new file mode 100644 index 0000000..d608c8a --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java @@ -0,0 +1,35 @@ +package com.nttdata.calender.planTimes; + +import java.util.ArrayList; + +import com.nttdata.calender.changes.query.Filter; + +public class PlanTimesRequest { + private ArrayList filter; + private String renderStartDate; + private String renderEndDate; + + public ArrayList getFilter() { + return filter; + } + + public void setFilter(ArrayList filter) { + this.filter = filter; + } + + public String getRenderStartDate() { + return renderStartDate; + } + + public void setRenderStartDate(String renderStartDate) { + this.renderStartDate = renderStartDate; + } + + public String getRenderEndDate() { + return renderEndDate; + } + + public void setRenderEndDate(String renderEndDate) { + this.renderEndDate = renderEndDate; + } +} diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java new file mode 100644 index 0000000..bea597f --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java @@ -0,0 +1,54 @@ +package com.nttdata.calender.planTimes; + +import java.util.List; + +public class PlanTimesResponse { + private List calendarWeeks; + + public List getCalendarWeeks() { + return calendarWeeks; + } + + public void setCalendarWeeks(List calendarWeeks) { + this.calendarWeeks = calendarWeeks; + } + + public static class CalendarWeek { + private String week; + private int planTime; + private String startDate; + private String endDate; + + public String getWeek() { + return week; + } + + public void setWeek(String week) { + this.week = week; + } + + public int getPlanTime() { + return planTime; + } + + public void setPlanTime(int planTime) { + this.planTime = planTime; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + } +} From 051924cd953dc50368ba8e59e6b9f1a548e39fb7 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Wed, 14 Jun 2023 16:57:29 +0200 Subject: [PATCH 02/25] tests --- .../calender/api/KalenderRestController.java | 3 ++ .../calender/planTimes/CalendarWeek.java | 40 ++++++++++++++ .../nttdata/calender/planTimes/PlanTimes.java | 22 ++++++++ .../calender/planTimes/PlanTimesResponse.java | 54 ------------------- 4 files changed, 65 insertions(+), 54 deletions(-) create mode 100644 backend/src/main/java/com/nttdata/calender/planTimes/CalendarWeek.java create mode 100644 backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java delete mode 100644 backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 1e8eecd..61955b9 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -31,6 +31,7 @@ import com.nttdata.calender.implementer.ImplementerGetResponse; import com.nttdata.calender.implementer.ImplementerUpdateRequest; import com.nttdata.calender.packageType.PackageItems; import com.nttdata.calender.packageType.PackageType; +import com.nttdata.calender.planTimes.PlanTimes; import com.nttdata.calender.planTimes.PlanTimesRequest; import com.nttdata.calender.states.State; import com.nttdata.calender.states.StateChange; @@ -116,6 +117,8 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") public Object getPlanTimes(@RequestBody PlanTimesRequest request) { + PlanTimes pt = new PlanTimes(javaAPI); + pt.setPlanTimes(); return null; } diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/CalendarWeek.java b/backend/src/main/java/com/nttdata/calender/planTimes/CalendarWeek.java new file mode 100644 index 0000000..f099ff3 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/planTimes/CalendarWeek.java @@ -0,0 +1,40 @@ +package com.nttdata.calender.planTimes; + +public class CalendarWeek { + private String week; + private int planTime; + private String startDate; + private String endDate; + + public String getWeek() { + return week; + } + + public void setWeek(String week) { + this.week = week; + } + + public int getPlanTime() { + return planTime; + } + + public void setPlanTime(int planTime) { + this.planTime = planTime; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } +} diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java new file mode 100644 index 0000000..1e2fc5f --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -0,0 +1,22 @@ +package com.nttdata.calender.planTimes; + +import java.util.ArrayList; + +import com.nttdata.calender.api.RemedyJavaAPI; + +public class PlanTimes { + private RemedyJavaAPI remedyJavaAPI; + private ArrayList calenderWeeks; + + public PlanTimes(RemedyJavaAPI remedyJavaAPI) { + this.remedyJavaAPI = remedyJavaAPI; + this.calenderWeeks = new ArrayList<>(); + } + + public void setPlanTimes() { + PlanTimesRequest req = new PlanTimesRequest(); + System.out.println("filter: " + req.getFilter()); + System.out.println("startDate: " + req.getRenderStartDate()); + System.out.println("endDate: " + req.getRenderEndDate()); + } +} diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java deleted file mode 100644 index bea597f..0000000 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesResponse.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.nttdata.calender.planTimes; - -import java.util.List; - -public class PlanTimesResponse { - private List calendarWeeks; - - public List getCalendarWeeks() { - return calendarWeeks; - } - - public void setCalendarWeeks(List calendarWeeks) { - this.calendarWeeks = calendarWeeks; - } - - public static class CalendarWeek { - private String week; - private int planTime; - private String startDate; - private String endDate; - - public String getWeek() { - return week; - } - - public void setWeek(String week) { - this.week = week; - } - - public int getPlanTime() { - return planTime; - } - - public void setPlanTime(int planTime) { - this.planTime = planTime; - } - - public String getStartDate() { - return startDate; - } - - public void setStartDate(String startDate) { - this.startDate = startDate; - } - - public String getEndDate() { - return endDate; - } - - public void setEndDate(String endDate) { - this.endDate = endDate; - } - } -} From 21065b2eac4d19832f5cfd0300bc92d3888cef37 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Wed, 14 Jun 2023 17:01:18 +0200 Subject: [PATCH 03/25] request test --- .../java/com/nttdata/calender/api/KalenderRestController.java | 4 ++-- .../main/java/com/nttdata/calender/planTimes/PlanTimes.java | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 61955b9..6e4e477 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -117,8 +117,8 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") public Object getPlanTimes(@RequestBody PlanTimesRequest request) { - PlanTimes pt = new PlanTimes(javaAPI); - pt.setPlanTimes(); + PlanTimes p = new PlanTimes(javaAPI); + p.setPlanTimes(request); return null; } diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 1e2fc5f..c363ea7 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -13,8 +13,7 @@ public class PlanTimes { this.calenderWeeks = new ArrayList<>(); } - public void setPlanTimes() { - PlanTimesRequest req = new PlanTimesRequest(); + public void setPlanTimes(PlanTimesRequest req) { System.out.println("filter: " + req.getFilter()); System.out.println("startDate: " + req.getRenderStartDate()); System.out.println("endDate: " + req.getRenderEndDate()); From 95d46b5ffce42e9b380392f15ab9e268f38f0ff1 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Wed, 14 Jun 2023 17:10:29 +0200 Subject: [PATCH 04/25] getting week of calendar --- .../com/nttdata/calender/planTimes/PlanTimes.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index c363ea7..04f6a48 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -1,5 +1,8 @@ package com.nttdata.calender.planTimes; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.temporal.IsoFields; import java.util.ArrayList; import com.nttdata.calender.api.RemedyJavaAPI; @@ -15,7 +18,13 @@ public class PlanTimes { public void setPlanTimes(PlanTimesRequest req) { System.out.println("filter: " + req.getFilter()); - System.out.println("startDate: " + req.getRenderStartDate()); + + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + LocalDate date = LocalDate.parse(req.getRenderStartDate(), formatter); + int weekOfYear = date.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); + + System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), date.getYear(), weekOfYear); + System.out.println("endDate: " + req.getRenderEndDate()); } } From e73222d3ce6484109aa99d6fba7e57808adec0bc Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 09:22:46 +0200 Subject: [PATCH 05/25] query --- .../nttdata/calender/planTimes/PlanTimes.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 04f6a48..ccb3453 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -5,6 +5,8 @@ import java.time.format.DateTimeFormatter; import java.time.temporal.IsoFields; import java.util.ArrayList; +import com.bmc.arsys.api.ARException; +import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; public class PlanTimes { @@ -16,14 +18,22 @@ public class PlanTimes { this.calenderWeeks = new ArrayList<>(); } - public void setPlanTimes(PlanTimesRequest req) { + public void setPlanTimes(PlanTimesRequest req) throws ARException { System.out.println("filter: " + req.getFilter()); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); - LocalDate date = LocalDate.parse(req.getRenderStartDate(), formatter); - int weekOfYear = date.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); + LocalDate startDate = LocalDate.parse(req.getRenderStartDate(), formatter); + LocalDate endDate = LocalDate.parse(req.getRenderEndDate(), formatter); + int startWeek = startDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); + int endWeek = endDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); - System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), date.getYear(), weekOfYear); + System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), startDate.getYear(), startWeek); + System.out.printf("endDate: %s (%dw%d)%n", req.getRenderEndDate(), endDate.getYear(), endWeek); + + var queryChanges = new Query.QueryBuilder("ASF:WI_TAS_Paket").addFieldId("D2", 1000000350).build(); + + var changes = remedyJavaAPI.queryFieldsById("", queryChanges.getFieldIds(), queryChanges.getFormName(), null, 0, 0); + for (var c : changes) System.out.println(c); System.out.println("endDate: " + req.getRenderEndDate()); } From 9142a1e5e835ea2480bd2530da5eb1cb757e9794 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 10:20:00 +0200 Subject: [PATCH 06/25] add calenderweek to arraylist per week --- .../nttdata/calender/planTimes/PlanTimes.java | 62 ++++++++++++++++--- 1 file changed, 55 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index ccb3453..2401654 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -1,13 +1,19 @@ 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.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; +import com.nttdata.calender.changes.ChangeItem; public class PlanTimes { private RemedyJavaAPI remedyJavaAPI; @@ -24,17 +30,59 @@ public class PlanTimes { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); LocalDate startDate = LocalDate.parse(req.getRenderStartDate(), formatter); LocalDate endDate = LocalDate.parse(req.getRenderEndDate(), formatter); - int startWeek = startDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); + int endWeek = endDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); + /* + * System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), + * startDate.getYear(), startWeek); + * System.out.printf("endDate: %s (%dw%d)%n", req.getRenderEndDate(), + * endDate.getYear(), endWeek); + */ + var queryChanges = new Query.QueryBuilder("ASF:WI_TAS_Paket").addFieldId("D2", 1000000350) + .addFieldId("ChangeNr", 1000000182).build(); - System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), startDate.getYear(), startWeek); - System.out.printf("endDate: %s (%dw%d)%n", req.getRenderEndDate(), endDate.getYear(), endWeek); + var changes = remedyJavaAPI.queryFieldsById("", queryChanges.getFieldIds(), queryChanges.getFormName(), null, 0, + 0); - var queryChanges = new Query.QueryBuilder("ASF:WI_TAS_Paket").addFieldId("D2", 1000000350).build(); + /* + * for (var c : changes) { + * var date = timestampToDate(c.get(queryChanges.getFieldId("D2")).toString()); + * System.out.println(c.get(queryChanges.getFieldId("ChangeNr")) + " -> " + + * date); + * } + */ - var changes = remedyJavaAPI.queryFieldsById("", queryChanges.getFieldIds(), queryChanges.getFormName(), null, 0, 0); - for (var c : changes) System.out.println(c); + while (!startDate.isAfter(endDate)) { + CalendarWeek calendarWeek = new CalendarWeek(); - System.out.println("endDate: " + req.getRenderEndDate()); + 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)); + } + + for (var v : calenderWeeks) System.out.println(v); + } + + public String timestampToDate(String timestamp) { + 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 date; } } From 76a365fdd92bcf0dd4d9120c5b243abd89f19fed Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 10:36:43 +0200 Subject: [PATCH 07/25] test fetch changes per week --- .../nttdata/calender/planTimes/PlanTimes.java | 34 ++++++++++++------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 2401654..3cdc1f5 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -18,6 +18,7 @@ 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; @@ -38,20 +39,9 @@ public class PlanTimes { * System.out.printf("endDate: %s (%dw%d)%n", req.getRenderEndDate(), * endDate.getYear(), endWeek); */ - var queryChanges = new Query.QueryBuilder("ASF:WI_TAS_Paket").addFieldId("D2", 1000000350) + var queryChanges = new Query.QueryBuilder(formName).addFieldId("D2", 1000000350) .addFieldId("ChangeNr", 1000000182).build(); - var changes = remedyJavaAPI.queryFieldsById("", queryChanges.getFieldIds(), queryChanges.getFormName(), null, 0, - 0); - - /* - * for (var c : changes) { - * var date = timestampToDate(c.get(queryChanges.getFieldId("D2")).toString()); - * System.out.println(c.get(queryChanges.getFieldId("ChangeNr")) + " -> " + - * date); - * } - */ - while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); @@ -71,7 +61,25 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } - for (var v : calenderWeeks) System.out.println(v); + for (var week : calenderWeeks) { + var changesInWeek = remedyJavaAPI.queryFieldsById("\"Geplantes Startdatum\" > \"" + week.getStartDate() + "\" AND \"Geplantes Startdatum\" <= \"" + + week.getEndDate() + "\"", queryChanges.getFieldIds(), formName, null, 0, 0); + + for (var v : changesInWeek) { + System.out.println(v); + } + } + /* + * for (var c : changes) { + * var date = timestampToDate(c.get(queryChanges.getFieldId("D2")).toString()); + * System.out.println(c.get(queryChanges.getFieldId("ChangeNr")) + " -> " + + * date); + * } + */ + for (var v : calenderWeeks) { + System.out + .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); + } } public String timestampToDate(String timestamp) { From 218e0087c96083181db8793f235f27ba5bd0651b Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 11:01:23 +0200 Subject: [PATCH 08/25] fixed query --- .../calender/api/KalenderRestController.java | 2 +- .../com/nttdata/calender/planTimes/PlanTimes.java | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 6e4e477..dbf7c97 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -116,7 +116,7 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") - public Object getPlanTimes(@RequestBody PlanTimesRequest request) { + public Object getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); return null; diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 3cdc1f5..4e2842d 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -61,13 +61,16 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } - for (var week : calenderWeeks) { - var changesInWeek = remedyJavaAPI.queryFieldsById("\"Geplantes Startdatum\" > \"" + week.getStartDate() + "\" AND \"Geplantes Startdatum\" <= \"" - + week.getEndDate() + "\"", queryChanges.getFieldIds(), formName, null, 0, 0); + System.out.println(remedyJavaAPI.getFieldDatabaseName(formName, 1000000350)); + + var changesInDateRange = remedyJavaAPI.queryFieldsById("\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" + + req.getRenderEndDate() + "\"", queryChanges.getFieldIds(), formName, null, 0, 20); - for (var v : changesInWeek) { - System.out.println(v); - } + + for (var c : changesInDateRange) System.out.println(c); + + for (var week : calenderWeeks) { + } /* * for (var c : changes) { From e424a133c47ff1e90cd85778e69b4095d29a9e93 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 11:16:06 +0200 Subject: [PATCH 09/25] clean up, check if date between week range --- .../nttdata/calender/planTimes/PlanTimes.java | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 4e2842d..93e114e 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -11,6 +11,7 @@ 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; @@ -26,19 +27,10 @@ public class PlanTimes { } public void setPlanTimes(PlanTimesRequest req) throws ARException { - System.out.println("filter: " + req.getFilter()); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); LocalDate startDate = LocalDate.parse(req.getRenderStartDate(), formatter); LocalDate endDate = LocalDate.parse(req.getRenderEndDate(), formatter); - int endWeek = endDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); - /* - * System.out.printf("startDate: %s (%dw%d)%n", req.getRenderStartDate(), - * startDate.getYear(), startWeek); - * System.out.printf("endDate: %s (%dw%d)%n", req.getRenderEndDate(), - * endDate.getYear(), endWeek); - */ var queryChanges = new Query.QueryBuilder(formName).addFieldId("D2", 1000000350) .addFieldId("ChangeNr", 1000000182).build(); @@ -61,31 +53,31 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } - System.out.println(remedyJavaAPI.getFieldDatabaseName(formName, 1000000350)); - - var changesInDateRange = remedyJavaAPI.queryFieldsById("\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" - + req.getRenderEndDate() + "\"", queryChanges.getFieldIds(), formName, null, 0, 20); + var changesInDateRange = remedyJavaAPI.queryFieldsById( + "\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" + + req.getRenderEndDate() + "\"", + queryChanges.getFieldIds(), formName, null, 0, 0); - - for (var c : changesInDateRange) System.out.println(c); - for (var week : calenderWeeks) { - - } - /* - * for (var c : changes) { - * var date = timestampToDate(c.get(queryChanges.getFieldId("D2")).toString()); - * System.out.println(c.get(queryChanges.getFieldId("ChangeNr")) + " -> " + - * date); - * } - */ - for (var v : calenderWeeks) { - System.out - .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); + System.out.println(week.getStartDate() + " ---> " + week.getEndDate()); + 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(d2); + } + } } + + for (var v : calenderWeeks) + System.out.println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); + } - public String timestampToDate(String timestamp) { + 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); @@ -94,6 +86,6 @@ public class PlanTimes { ts *= 1000; String date = sdf.format(new Date(ts)); - return date; + return LocalDate.parse(date, formatter); } } From 533e01724b19cfdb80c47e181b48954e73e7b9cd Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 11:42:20 +0200 Subject: [PATCH 10/25] last push --- .../com/nttdata/calender/planTimes/PlanTimes.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 93e114e..eb316a1 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -60,20 +60,25 @@ public class PlanTimes { 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(d2); + System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " _ " + + new SimpleDateFormat("dd.MM.yyyy").format(d2)); + + planTimePerWeek += change.get(endDate) } } } - for (var v : calenderWeeks) - System.out.println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); - + for (var v : calenderWeeks) + System.out + .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); + } public LocalDate timestampToDate(String timestamp) { From ca9af38d11349807f78173c2065b08611bfc3aab Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 11:56:38 +0200 Subject: [PATCH 11/25] plantime sum per week --- .../nttdata/calender/planTimes/PlanTimes.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index eb316a1..9d3dc08 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -32,7 +32,7 @@ public class PlanTimes { LocalDate endDate = LocalDate.parse(req.getRenderEndDate(), formatter); var queryChanges = new Query.QueryBuilder(formName).addFieldId("D2", 1000000350) - .addFieldId("ChangeNr", 1000000182).build(); + .addFieldId("ChangeNr", 1000000182).addFieldId("PlanTimeHours", 666000009).addFieldId("PlanTimeMinutes", 666000010).build(); while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); @@ -70,9 +70,18 @@ public class PlanTimes { System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " _ " + new SimpleDateFormat("dd.MM.yyyy").format(d2)); - planTimePerWeek += change.get(endDate) + 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) @@ -81,6 +90,11 @@ public class PlanTimes { } + 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"); From b72aa7196bcbd885bb57e23ac7d0b97969e22035 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 13:52:31 +0200 Subject: [PATCH 12/25] plantime calculation per week done --- .../nttdata/calender/planTimes/PlanTimes.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 9d3dc08..6320436 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -9,6 +9,7 @@ import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Date; +import java.util.Objects; import com.bmc.arsys.api.ARException; import com.bmc.thirdparty.org.springframework.cglib.core.Local; @@ -67,21 +68,21 @@ public class PlanTimes { 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; + + var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); + var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - double planTime = convertPlanTime(ptHours, ptMinutes); + var plantime = convertPlanTime(hours, minutes); + + System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " - " + + d2 + " | " + minutes + ":" + hours + " (" + plantime + ")"); + + planTimePerWeek += plantime; - planTimePerWeek += planTime; } } - System.out.println(planTimePerWeek); week.setPlanTime((int) Math.ceil(planTimePerWeek)); + System.out.println("Total Plantime : " + (int) Math.ceil(planTimePerWeek)); } for (var v : calenderWeeks) @@ -91,9 +92,14 @@ public class PlanTimes { } public double convertPlanTime(String hours, String minutes) throws ARException { - double totalHours = Integer.valueOf(hours) + (Integer.valueOf(minutes) / 60.0); + double mins = 0.0; + double hrs = 0.0; + if (minutes != null) mins = (Double.valueOf(minutes) / 60.0); + if (hours != null) Double.valueOf(hours); + double totalHours = hrs + mins; return totalHours; - } +} + public LocalDate timestampToDate(String timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); From 35ad8a4decf797ba38265fe58cdf4f139c006551 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 14:08:18 +0200 Subject: [PATCH 13/25] getter for planTimes --- .../com/nttdata/calender/planTimes/PlanTimes.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 6320436..ec92e3f 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -60,7 +60,7 @@ public class PlanTimes { queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { - System.out.println(week.getStartDate() + " ---> " + week.getEndDate()); + System.out.println(week.getStartDate() + " -> " + week.getEndDate()); double planTimePerWeek = 0.0; for (var change : changesInDateRange) { LocalDate d2 = timestampToDate(change.get(queryChanges.getFieldId("D2")).toString()); @@ -72,7 +72,7 @@ public class PlanTimes { var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - var plantime = convertPlanTime(hours, minutes); + double plantime = convertPlanTime(hours, minutes); System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " - " + d2 + " | " + minutes + ":" + hours + " (" + plantime + ")"); @@ -82,9 +82,10 @@ public class PlanTimes { } } week.setPlanTime((int) Math.ceil(planTimePerWeek)); - System.out.println("Total Plantime : " + (int) Math.ceil(planTimePerWeek)); + System.out.println("Total Plantime : " + (int) Math.ceil(planTimePerWeek) + "\n"); } + System.out.println("Calendar Weeks:\n"); for (var v : calenderWeeks) System.out .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); @@ -113,4 +114,8 @@ public class PlanTimes { String date = sdf.format(new Date(ts)); return LocalDate.parse(date, formatter); } + + public ArrayList getPlanTimes() { + return this.calenderWeeks; + } } From 2a512abf8c19711708acee5857f9104ea4938225 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 14:11:27 +0200 Subject: [PATCH 14/25] GET handler method --- .../com/nttdata/calender/api/KalenderRestController.java | 5 +++-- .../main/java/com/nttdata/calender/planTimes/PlanTimes.java | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index dbf7c97..9100df9 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -31,6 +31,7 @@ import com.nttdata.calender.implementer.ImplementerGetResponse; import com.nttdata.calender.implementer.ImplementerUpdateRequest; import com.nttdata.calender.packageType.PackageItems; import com.nttdata.calender.packageType.PackageType; +import com.nttdata.calender.planTimes.CalendarWeek; import com.nttdata.calender.planTimes.PlanTimes; import com.nttdata.calender.planTimes.PlanTimesRequest; import com.nttdata.calender.states.State; @@ -116,10 +117,10 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") - public Object getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { + public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); - return null; + return p.getPlanTimes(); } /** diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index ec92e3f..ff7cdf9 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -87,8 +87,7 @@ public class PlanTimes { System.out.println("Calendar Weeks:\n"); for (var v : calenderWeeks) - System.out - .println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); + System.out.println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); } From facfc1e360c1dadbf9bf145b8a571de8af7021f1 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 14:19:31 +0200 Subject: [PATCH 15/25] plantimes finished --- .../nttdata/calender/planTimes/PlanTimes.java | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index ff7cdf9..77aa53d 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -45,7 +45,7 @@ public class PlanTimes { calendarWeek.setPlanTime(0); calendarWeek.setStartDate(startDate.format(formatter)); - LocalDate endOfWeek = startDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); + LocalDate endOfWeek = startDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); if (endOfWeek.isAfter(endDate)) endOfWeek = endDate; calendarWeek.setEndDate(endOfWeek.format(formatter)); @@ -60,7 +60,6 @@ public class PlanTimes { 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()); @@ -68,27 +67,14 @@ public class PlanTimes { LocalDate dateEnd = LocalDate.parse(week.getEndDate(), formatter); if (d2.isAfter(dateStart) && (d2.isEqual(dateEnd) || d2.isBefore(dateEnd))) { - var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - double plantime = convertPlanTime(hours, minutes); - - System.out.println(change.get(queryChanges.getFieldId("ChangeNr")).toString() + " - " - + d2 + " | " + minutes + ":" + hours + " (" + plantime + ")"); - planTimePerWeek += plantime; - } } week.setPlanTime((int) Math.ceil(planTimePerWeek)); - System.out.println("Total Plantime : " + (int) Math.ceil(planTimePerWeek) + "\n"); } - - System.out.println("Calendar Weeks:\n"); - for (var v : calenderWeeks) - System.out.println(v.getWeek() + " - " + v.getPlanTime() + " - " + v.getStartDate() + " - " + v.getEndDate()); - } public double convertPlanTime(String hours, String minutes) throws ARException { From 9f76c8c9f2b07cb72c243e63c42c37a887af8271 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 14:51:10 +0200 Subject: [PATCH 16/25] formatted start week --- .../main/java/com/nttdata/calender/planTimes/PlanTimes.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index ff7cdf9..e1e57fd 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -40,8 +40,9 @@ public class PlanTimes { int startWeek = startDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR); int year = startDate.get(IsoFields.WEEK_BASED_YEAR); + String formattedStartWeek = String.format("%02d", startWeek); - calendarWeek.setWeek(year + "w" + startWeek); + calendarWeek.setWeek(year + "w" + formattedStartWeek); calendarWeek.setPlanTime(0); calendarWeek.setStartDate(startDate.format(formatter)); From ce8790490ef15d4a13acb0c79c3004fd6273f303 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 15:59:11 +0200 Subject: [PATCH 17/25] qualifier? --- .../nttdata/calender/planTimes/PlanTimes.java | 32 ++-- .../calender/planTimes/PlanTimesRequest.java | 141 ++++++++++++++++++ 2 files changed, 158 insertions(+), 15 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 3b1f823..e74a908 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -5,17 +5,14 @@ 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 java.util.Objects; 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; +import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; public class PlanTimes { private RemedyJavaAPI remedyJavaAPI; @@ -27,13 +24,14 @@ public class PlanTimes { this.calenderWeeks = new ArrayList<>(); } - public void setPlanTimes(PlanTimesRequest req) throws ARException { + public void setPlanTimes(PlanTimesRequest req) throws ARException, ValidationError { 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(); + .addFieldId("ChangeNr", 1000000182).addFieldId("PlanTimeHours", 666000009) + .addFieldId("PlanTimeMinutes", 666000010).build(); while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); @@ -55,9 +53,12 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } - var changesInDateRange = remedyJavaAPI.queryFieldsById( + var qualifier = req.constructQualifier(queryChanges, "\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" + req.getRenderEndDate() + "\"", + remedyJavaAPI); + + var changesInDateRange = remedyJavaAPI.queryFieldsById(qualifier, queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { @@ -68,10 +69,10 @@ public class PlanTimes { LocalDate dateEnd = LocalDate.parse(week.getEndDate(), formatter); if (d2.isAfter(dateStart) && (d2.isEqual(dateEnd) || d2.isBefore(dateEnd))) { - var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); - var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - double plantime = convertPlanTime(hours, minutes); - planTimePerWeek += plantime; + var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); + var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); + double plantime = convertPlanTime(hours, minutes); + planTimePerWeek += plantime; } } week.setPlanTime((int) Math.ceil(planTimePerWeek)); @@ -81,12 +82,13 @@ public class PlanTimes { public double convertPlanTime(String hours, String minutes) throws ARException { double mins = 0.0; double hrs = 0.0; - if (minutes != null) mins = (Double.valueOf(minutes) / 60.0); - if (hours != null) Double.valueOf(hours); + if (minutes != null) + mins = (Double.valueOf(minutes) / 60.0); + if (hours != null) + Double.valueOf(hours); double totalHours = hrs + mins; return totalHours; -} - + } public LocalDate timestampToDate(String timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java index d608c8a..dfdcd22 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java @@ -1,8 +1,15 @@ package com.nttdata.calender.planTimes; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; import java.util.ArrayList; +import com.bmc.arsys.api.ARException; +import com.nttdata.calender.api.Query; +import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.query.Filter; +import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; public class PlanTimesRequest { private ArrayList filter; @@ -32,4 +39,138 @@ public class PlanTimesRequest { public void setRenderEndDate(String renderEndDate) { this.renderEndDate = renderEndDate; } + + /** + * Constructs and returns a qualifier based on the filters defined in the object + * and the given Query object. + * + * @param query the Query object containing form and field information + * @param api the RemedyJavaAPI object used for accessing the AR System API + * @return a String representing the constructed qualifier + * @throws ARException if an error occurs while constructing the qualifier + * or an invalid filter is provided + * @throws ValidationError if the fields inside the filter are empty or an + * invalid inner filter argument is provided + */ + public String constructQualifier(Query query, String qualstr, RemedyJavaAPI api) throws ARException, ValidationError { + var qualifier = ""; + + if (this.filter == null) { + return qualifier; + } + + for (int i = 0; i < this.filter.size(); i++) { + var current_filter = this.filter.get(i); + var column = current_filter.getColumn(); + var criterias = current_filter.getCriteria(); + + if (column.isEmpty() || criterias.length <= 0) { + throw new ValidationError("Fields inside filter empty"); + } + var inner_qualifier = ""; + + if (column.equals("D2")) { + var dateQualifier = constructDateQualifier(current_filter, column, query, api); + qualifier = "(" + dateQualifier + ")"; + } else { + column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); + + var inner_filter = "\'" + column + "\' "; + var inner_concat = " OR "; + var inner_criteria_prefix = ""; + + switch (current_filter.getFilter()) { + case "equals": + inner_filter += "= "; + break; + case "contains": + inner_filter += "LIKE "; + inner_concat = " AND "; + inner_criteria_prefix = "%"; + break; + default: + throw new ValidationError("Invalid inner filter argument"); + } + + for (int j = 0; j < criterias.length; j++) { + criterias[j] = inner_criteria_prefix + criterias[j] + inner_criteria_prefix; + inner_qualifier += "(" + inner_filter + "\"" + criterias[j] + "\")"; + if (j < criterias.length - 1) { + inner_qualifier += inner_concat; + } + } + qualifier += "(" + inner_qualifier + ")"; + } + + if (i < filter.size() - 1) { + qualifier += " AND "; + } + + } + + return qualifier; + } + + /** + * Constructs and returns a date qualifier for the given filter, column, query, + * and API. + * Throws a ValidationError if the date filter does not contain two date + * elements. + * + * @param current_filter the current filter to construct the date qualifier for + * @param column the column to apply the date qualifier on + * @param query the query object + * @param api the RemedyJavaAPI object + * @return the constructed date qualifier as a string + * @throws ValidationError if the date filter does not contain two date elements + * @throws ARException if an AR exception occurs + */ + private String constructDateQualifier(Filter current_filter, String column, Query query, RemedyJavaAPI api) + throws ValidationError, ARException { + if (current_filter.getCriteria().length != 2) { + throw new ValidationError("Date Filter does not contain 2 date elements"); + } + var startFrom = current_filter.getCriteria()[0]; + var startTo = current_filter.getCriteria()[1]; + var startFromFormatted = convertDate(startFrom); + var startToFormatted = convertDate(startTo); + var qualifier = ""; + + var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); + + // Same day changes need to startFrom=day and startTo=day+24h 60m 60s + if (startFromFormatted.equals(startToFormatted)) { + startToFormatted = "\' < (\"" + startToFormatted + "\"" + " + (24 * (60 * 60)))"; + } else + startToFormatted = "\' <= \"" + startToFormatted + "\""; + + qualifier += "\'" + dateColumn + "\' >= \"" + startFromFormatted + "\" AND "; + qualifier += "\'" + dateColumn + startToFormatted; + return qualifier; + } + + /** + * Converts the provided date string into a Remedy-specific date format and + * returns it. + * Throws a ValidationError if the provided date format cannot be parsed into + * the Remedy-specific date format. + * + * @param date the date string to convert + * @return the converted date string in Remedy-specific format + * @throws ValidationError if the provided date format cannot be parsed into the + * Remedy-specific date format + */ + private String convertDate(String date) throws ValidationError { + String inputFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + String outputFormat = "dd/MM/yyyy"; + + var parsed = ""; + try { + LocalDateTime parser = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(inputFormat)); + parsed = parser.format(DateTimeFormatter.ofPattern(outputFormat)); + } catch (DateTimeParseException e) { + throw new ValidationError("Provided date format cannot be parsed into Remedy specific date format"); + } + return parsed; + } } From 48f343c09a7978a51d8dcfa513e826ece3fd9bdc Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 16:00:55 +0200 Subject: [PATCH 18/25] fix --- .../java/com/nttdata/calender/api/KalenderRestController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 9100df9..e17c2f6 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -117,7 +117,7 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") - public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { + public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException, ValidationError { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); return p.getPlanTimes(); From b4e6181cc00df1176d7d4514b9ae321f26c8157c Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Thu, 15 Jun 2023 16:04:06 +0200 Subject: [PATCH 19/25] reset --- .../calender/api/KalenderRestController.java | 2 +- .../nttdata/calender/planTimes/PlanTimes.java | 32 ++-- .../calender/planTimes/PlanTimesRequest.java | 141 ------------------ 3 files changed, 16 insertions(+), 159 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index e17c2f6..9100df9 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -117,7 +117,7 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") - public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException, ValidationError { + public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); return p.getPlanTimes(); diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index e74a908..3b1f823 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -5,14 +5,17 @@ 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 java.util.Objects; 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.errorhandling.ErrorTypes.ValidationError; +import com.nttdata.calender.changes.ChangeItem; public class PlanTimes { private RemedyJavaAPI remedyJavaAPI; @@ -24,14 +27,13 @@ public class PlanTimes { this.calenderWeeks = new ArrayList<>(); } - public void setPlanTimes(PlanTimesRequest req) throws ARException, ValidationError { + 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(); + .addFieldId("ChangeNr", 1000000182).addFieldId("PlanTimeHours", 666000009).addFieldId("PlanTimeMinutes", 666000010).build(); while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); @@ -53,12 +55,9 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } - var qualifier = req.constructQualifier(queryChanges, + var changesInDateRange = remedyJavaAPI.queryFieldsById( "\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" + req.getRenderEndDate() + "\"", - remedyJavaAPI); - - var changesInDateRange = remedyJavaAPI.queryFieldsById(qualifier, queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { @@ -69,10 +68,10 @@ public class PlanTimes { LocalDate dateEnd = LocalDate.parse(week.getEndDate(), formatter); if (d2.isAfter(dateStart) && (d2.isEqual(dateEnd) || d2.isBefore(dateEnd))) { - var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); - var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - double plantime = convertPlanTime(hours, minutes); - planTimePerWeek += plantime; + var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); + var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); + double plantime = convertPlanTime(hours, minutes); + planTimePerWeek += plantime; } } week.setPlanTime((int) Math.ceil(planTimePerWeek)); @@ -82,13 +81,12 @@ public class PlanTimes { public double convertPlanTime(String hours, String minutes) throws ARException { double mins = 0.0; double hrs = 0.0; - if (minutes != null) - mins = (Double.valueOf(minutes) / 60.0); - if (hours != null) - Double.valueOf(hours); + if (minutes != null) mins = (Double.valueOf(minutes) / 60.0); + if (hours != null) Double.valueOf(hours); double totalHours = hrs + mins; return totalHours; - } +} + public LocalDate timestampToDate(String timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java index dfdcd22..d608c8a 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java @@ -1,15 +1,8 @@ package com.nttdata.calender.planTimes; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; import java.util.ArrayList; -import com.bmc.arsys.api.ARException; -import com.nttdata.calender.api.Query; -import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.query.Filter; -import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; public class PlanTimesRequest { private ArrayList filter; @@ -39,138 +32,4 @@ public class PlanTimesRequest { public void setRenderEndDate(String renderEndDate) { this.renderEndDate = renderEndDate; } - - /** - * Constructs and returns a qualifier based on the filters defined in the object - * and the given Query object. - * - * @param query the Query object containing form and field information - * @param api the RemedyJavaAPI object used for accessing the AR System API - * @return a String representing the constructed qualifier - * @throws ARException if an error occurs while constructing the qualifier - * or an invalid filter is provided - * @throws ValidationError if the fields inside the filter are empty or an - * invalid inner filter argument is provided - */ - public String constructQualifier(Query query, String qualstr, RemedyJavaAPI api) throws ARException, ValidationError { - var qualifier = ""; - - if (this.filter == null) { - return qualifier; - } - - for (int i = 0; i < this.filter.size(); i++) { - var current_filter = this.filter.get(i); - var column = current_filter.getColumn(); - var criterias = current_filter.getCriteria(); - - if (column.isEmpty() || criterias.length <= 0) { - throw new ValidationError("Fields inside filter empty"); - } - var inner_qualifier = ""; - - if (column.equals("D2")) { - var dateQualifier = constructDateQualifier(current_filter, column, query, api); - qualifier = "(" + dateQualifier + ")"; - } else { - column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); - - var inner_filter = "\'" + column + "\' "; - var inner_concat = " OR "; - var inner_criteria_prefix = ""; - - switch (current_filter.getFilter()) { - case "equals": - inner_filter += "= "; - break; - case "contains": - inner_filter += "LIKE "; - inner_concat = " AND "; - inner_criteria_prefix = "%"; - break; - default: - throw new ValidationError("Invalid inner filter argument"); - } - - for (int j = 0; j < criterias.length; j++) { - criterias[j] = inner_criteria_prefix + criterias[j] + inner_criteria_prefix; - inner_qualifier += "(" + inner_filter + "\"" + criterias[j] + "\")"; - if (j < criterias.length - 1) { - inner_qualifier += inner_concat; - } - } - qualifier += "(" + inner_qualifier + ")"; - } - - if (i < filter.size() - 1) { - qualifier += " AND "; - } - - } - - return qualifier; - } - - /** - * Constructs and returns a date qualifier for the given filter, column, query, - * and API. - * Throws a ValidationError if the date filter does not contain two date - * elements. - * - * @param current_filter the current filter to construct the date qualifier for - * @param column the column to apply the date qualifier on - * @param query the query object - * @param api the RemedyJavaAPI object - * @return the constructed date qualifier as a string - * @throws ValidationError if the date filter does not contain two date elements - * @throws ARException if an AR exception occurs - */ - private String constructDateQualifier(Filter current_filter, String column, Query query, RemedyJavaAPI api) - throws ValidationError, ARException { - if (current_filter.getCriteria().length != 2) { - throw new ValidationError("Date Filter does not contain 2 date elements"); - } - var startFrom = current_filter.getCriteria()[0]; - var startTo = current_filter.getCriteria()[1]; - var startFromFormatted = convertDate(startFrom); - var startToFormatted = convertDate(startTo); - var qualifier = ""; - - var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); - - // Same day changes need to startFrom=day and startTo=day+24h 60m 60s - if (startFromFormatted.equals(startToFormatted)) { - startToFormatted = "\' < (\"" + startToFormatted + "\"" + " + (24 * (60 * 60)))"; - } else - startToFormatted = "\' <= \"" + startToFormatted + "\""; - - qualifier += "\'" + dateColumn + "\' >= \"" + startFromFormatted + "\" AND "; - qualifier += "\'" + dateColumn + startToFormatted; - return qualifier; - } - - /** - * Converts the provided date string into a Remedy-specific date format and - * returns it. - * Throws a ValidationError if the provided date format cannot be parsed into - * the Remedy-specific date format. - * - * @param date the date string to convert - * @return the converted date string in Remedy-specific format - * @throws ValidationError if the provided date format cannot be parsed into the - * Remedy-specific date format - */ - private String convertDate(String date) throws ValidationError { - String inputFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - String outputFormat = "dd/MM/yyyy"; - - var parsed = ""; - try { - LocalDateTime parser = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(inputFormat)); - parsed = parser.format(DateTimeFormatter.ofPattern(outputFormat)); - } catch (DateTimeParseException e) { - throw new ValidationError("Provided date format cannot be parsed into Remedy specific date format"); - } - return parsed; - } } From ef1f5bf401c184b35466688274a586e7da99cf99 Mon Sep 17 00:00:00 2001 From: Julius Sula Date: Mon, 19 Jun 2023 16:01:45 +0200 Subject: [PATCH 20/25] reusable filter --- .../calender/api/KalenderRestController.java | 2 +- .../com/nttdata/calender/changes/Change.java | 17 +- .../calender/changes/ChangeRequest.java | 153 +------------- .../calender/changes/query/Filter.java | 195 +++++++++++++----- .../calender/changes/query/FilterElement.java | 72 +++++++ .../nttdata/calender/planTimes/PlanTimes.java | 28 +-- .../calender/planTimes/PlanTimesRequest.java | 8 +- 7 files changed, 255 insertions(+), 220 deletions(-) create mode 100644 backend/src/main/java/com/nttdata/calender/changes/query/FilterElement.java diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index 9100df9..e17c2f6 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -117,7 +117,7 @@ public class KalenderRestController { @CrossOrigin("*") @GetMapping("/api/getPlanTimes") - public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException { + public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException, ValidationError { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); return p.getPlanTimes(); diff --git a/backend/src/main/java/com/nttdata/calender/changes/Change.java b/backend/src/main/java/com/nttdata/calender/changes/Change.java index 68ac7fd..b9c4d07 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/Change.java +++ b/backend/src/main/java/com/nttdata/calender/changes/Change.java @@ -16,7 +16,7 @@ import com.bmc.arsys.api.Timestamp; import com.bmc.arsys.api.Value; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; -import com.nttdata.calender.changes.query.Filter; +import com.nttdata.calender.changes.query.FilterElement; import com.nttdata.calender.errorhandling.ErrorTypes.NotFoundError; import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; @@ -81,7 +81,8 @@ public class Change { var peopleFullName = processPeopleInfo(request); - var qualifier = request.constructQualifier(queryChange, api); + var filter = request.getFilter(); + var qualifier = filter.constructQualifier(queryChange, api); SortInfo sort = request.constructSortInfo(queryChange); var entries = api.queryFieldsById(qualifier, this.queryChange.getFieldIds(), @@ -139,8 +140,10 @@ public class Change { // state)); change.setPackageName(queryPackageName(getValueStringByID(entry, "PackageType").toString())); - var ptMinutes = getValueStringByID(entry, "PlanTimeMinutes").isEmpty() ? "00" : getValueStringByID(entry, "PlanTimeMinutes"); - var ptHours = getValueStringByID(entry, "PlanTimeHours").isEmpty() ? "00" : getValueStringByID(entry, "PlanTimeHours"); + var ptMinutes = getValueStringByID(entry, "PlanTimeMinutes").isEmpty() ? "00" + : getValueStringByID(entry, "PlanTimeMinutes"); + var ptHours = getValueStringByID(entry, "PlanTimeHours").isEmpty() ? "00" + : getValueStringByID(entry, "PlanTimeHours"); change.setPlanTime(convertPlanTime(ptHours, ptMinutes)); change.setPackageName(queryPackageName(getValueStringByID(entry, "PackageType").toString())); @@ -183,15 +186,15 @@ public class Change { throw new NotFoundError("No supportGroups associated to the loginId "); } request.addFilter( - new Filter("SupportGroupId", "equals", peopleSupportGroup)); + new FilterElement("SupportGroupId", "equals", peopleSupportGroup)); return peopleInfos.get(0).get(queryPerson.getFieldId("FullName")).toString(); } /** - * Converts the planned time which is passed in hours and minutes to total hours + * Converts the planned time which is passed in hours and minutes to total hours * - * @param hours the hours as a String + * @param hours the hours as a String * @param minutes the minutes as a String * @return the hours and minutes as total hours * @throws ARException diff --git a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java index 421ad5f..1dd82d8 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java +++ b/backend/src/main/java/com/nttdata/calender/changes/ChangeRequest.java @@ -10,6 +10,7 @@ import com.bmc.arsys.api.SortInfo; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.query.Filter; +import com.nttdata.calender.changes.query.FilterElement; import com.nttdata.calender.changes.query.Sort; import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; @@ -21,7 +22,7 @@ import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; public class ChangeRequest { private int sliceStart; private int sliceEnd; - private ArrayList filter; + private Filter filter; private Sort sort; /** @@ -63,19 +64,21 @@ public class ChangeRequest { /** * Returns the array of filter criteria. * - * @return an array of {@link Filter} objects representing the filter criteria. + * @return an array of {@link FilterElement} objects representing the filter + * criteria. */ - public ArrayList getFilter() { + public Filter getFilter() { return this.filter; } /** * Sets the array of filter criteria. * - * @param filter an array of {@link Filter} objects representing the filter + * @param filter an array of {@link FilterElement} objects representing the + * filter * criteria. */ - public void setFilter(ArrayList filter) { + public void setFilter(Filter filter) { this.filter = filter; } @@ -102,11 +105,11 @@ public class ChangeRequest { * * @param filter the filter to add */ - public void addFilter(Filter filter) { + public void addFilter(FilterElement filter) { if (this.filter == null) { - this.filter = new ArrayList(); + this.filter = new Filter(); } - this.filter.add(filter); + this.filter.addFilter(filter); } /** @@ -125,138 +128,4 @@ public class ChangeRequest { } return null; } - - /** - * Constructs and returns a qualifier based on the filters defined in the object - * and the given Query object. - * - * @param query the Query object containing form and field information - * @param api the RemedyJavaAPI object used for accessing the AR System API - * @return a String representing the constructed qualifier - * @throws ARException if an error occurs while constructing the qualifier - * or an invalid filter is provided - * @throws ValidationError if the fields inside the filter are empty or an - * invalid inner filter argument is provided - */ - public String constructQualifier(Query query, RemedyJavaAPI api) throws ARException, ValidationError { - var qualifier = ""; - - if (this.filter == null) { - return qualifier; - } - - for (int i = 0; i < this.filter.size(); i++) { - var current_filter = this.filter.get(i); - var column = current_filter.getColumn(); - var criterias = current_filter.getCriteria(); - - if (column.isEmpty() || criterias.length <= 0) { - throw new ValidationError("Fields inside filter empty"); - } - var inner_qualifier = ""; - - if (column.equals("D2")) { - var dateQualifier = constructDateQualifier(current_filter, column, query, api); - qualifier = "(" + dateQualifier + ")"; - } else { - column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); - - var inner_filter = "\'" + column + "\' "; - var inner_concat = " OR "; - var inner_criteria_prefix = ""; - - switch (current_filter.getFilter()) { - case "equals": - inner_filter += "= "; - break; - case "contains": - inner_filter += "LIKE "; - inner_concat = " AND "; - inner_criteria_prefix = "%"; - break; - default: - throw new ValidationError("Invalid inner filter argument"); - } - - for (int j = 0; j < criterias.length; j++) { - criterias[j] = inner_criteria_prefix + criterias[j] + inner_criteria_prefix; - inner_qualifier += "(" + inner_filter + "\"" + criterias[j] + "\")"; - if (j < criterias.length - 1) { - inner_qualifier += inner_concat; - } - } - qualifier += "(" + inner_qualifier + ")"; - } - - if (i < filter.size() - 1) { - qualifier += " AND "; - } - - } - - return qualifier; - } - - /** - * Constructs and returns a date qualifier for the given filter, column, query, - * and API. - * Throws a ValidationError if the date filter does not contain two date - * elements. - * - * @param current_filter the current filter to construct the date qualifier for - * @param column the column to apply the date qualifier on - * @param query the query object - * @param api the RemedyJavaAPI object - * @return the constructed date qualifier as a string - * @throws ValidationError if the date filter does not contain two date elements - * @throws ARException if an AR exception occurs - */ - private String constructDateQualifier(Filter current_filter, String column, Query query, RemedyJavaAPI api) - throws ValidationError, ARException { - if (current_filter.getCriteria().length != 2) { - throw new ValidationError("Date Filter does not contain 2 date elements"); - } - var startFrom = current_filter.getCriteria()[0]; - var startTo = current_filter.getCriteria()[1]; - var startFromFormatted = convertDate(startFrom); - var startToFormatted = convertDate(startTo); - var qualifier = ""; - - var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); - - // Same day changes need to startFrom=day and startTo=day+24h 60m 60s - if (startFromFormatted.equals(startToFormatted)) { - startToFormatted = "\' < (\"" + startToFormatted + "\"" + " + (24 * (60 * 60)))"; - } else - startToFormatted = "\' <= \"" + startToFormatted + "\""; - - qualifier += "\'" + dateColumn + "\' >= \"" + startFromFormatted + "\" AND "; - qualifier += "\'" + dateColumn + startToFormatted; - return qualifier; - } - - /** - * Converts the provided date string into a Remedy-specific date format and - * returns it. - * Throws a ValidationError if the provided date format cannot be parsed into - * the Remedy-specific date format. - * - * @param date the date string to convert - * @return the converted date string in Remedy-specific format - * @throws ValidationError if the provided date format cannot be parsed into the - * Remedy-specific date format - */ - private String convertDate(String date) throws ValidationError { - String inputFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; - String outputFormat = "dd/MM/yyyy"; - - var parsed = ""; - try { - LocalDateTime parser = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(inputFormat)); - parsed = parser.format(DateTimeFormatter.ofPattern(outputFormat)); - } catch (DateTimeParseException e) { - throw new ValidationError("Provided date format cannot be parsed into Remedy specific date format"); - } - return parsed; - } } diff --git a/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java b/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java index 6f85879..2ea44d9 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java +++ b/backend/src/main/java/com/nttdata/calender/changes/query/Filter.java @@ -1,72 +1,161 @@ package com.nttdata.calender.changes.query; -import com.nttdata.calender.changes.Change; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.ArrayList; + +import com.bmc.arsys.api.ARException; +import com.nttdata.calender.api.Query; +import com.nttdata.calender.api.RemedyJavaAPI; +import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; -/** - * Defines the filter objects used in the retrieval of {@link Change}. - */ public class Filter { - private String column; - private String filter; - private String[] criteria; + private ArrayList filter; - public Filter(String column, String filter, String[] criteria) { - this.column = column; - this.filter = filter; - this.criteria = criteria; + /** + * Adds a filter to the list of filters. + * + * @param filter the filter to add + */ + public void addFilter(FilterElement filter) { + if (this.filter == null) { + this.filter = new ArrayList(); + } + this.filter.add(filter); } /** - * Returns column of {@link Filter} - * - * @return the column + * Constructs and returns a qualifier based on the filters defined in the object + * and the given Query object. + * + * @param query the Query object containing form and field information + * @param api the RemedyJavaAPI object used for accessing the AR System API + * @return a String representing the constructed qualifier + * @throws ARException if an error occurs while constructing the qualifier + * or an invalid filter is provided + * @throws ValidationError if the fields inside the filter are empty or an + * invalid inner filter argument is provided */ - public String getColumn() { - return this.column; + public String constructQualifier(Query query, RemedyJavaAPI api) throws ARException, ValidationError { + var qualifier = ""; + + if (this.filter == null) { + return qualifier; + } + + for (int i = 0; i < this.filter.size(); i++) { + var current_filter = this.filter.get(i); + var column = current_filter.getColumn(); + var criterias = current_filter.getCriteria(); + + if (column.isEmpty() || criterias.length <= 0) { + throw new ValidationError("Fields inside filter empty"); + } + var inner_qualifier = ""; + + if (column.equals("D2")) { + var dateQualifier = constructDateQualifier(current_filter, column, query, api); + qualifier = "(" + dateQualifier + ")"; + } else { + column = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); + + var inner_filter = "\'" + column + "\' "; + var inner_concat = " OR "; + var inner_criteria_prefix = ""; + + switch (current_filter.getFilter()) { + case "equals": + inner_filter += "= "; + break; + case "contains": + inner_filter += "LIKE "; + inner_concat = " AND "; + inner_criteria_prefix = "%"; + break; + default: + throw new ValidationError("Invalid inner filter argument"); + } + + for (int j = 0; j < criterias.length; j++) { + criterias[j] = inner_criteria_prefix + criterias[j] + inner_criteria_prefix; + inner_qualifier += "(" + inner_filter + "\"" + criterias[j] + "\")"; + if (j < criterias.length - 1) { + inner_qualifier += inner_concat; + } + } + qualifier += "(" + inner_qualifier + ")"; + } + + if (i < filter.size() - 1) { + qualifier += " AND "; + } + + } + + return qualifier; } /** - * Sets column of {@link Filter} - * - * @param column the column to set + * Constructs and returns a date qualifier for the given filter, column, query, + * and API. + * Throws a ValidationError if the date filter does not contain two date + * elements. + * + * @param current_filter the current filter to construct the date qualifier for + * @param column the column to apply the date qualifier on + * @param query the query object + * @param api the RemedyJavaAPI object + * @return the constructed date qualifier as a string + * @throws ValidationError if the date filter does not contain two date elements + * @throws ARException if an AR exception occurs */ - public void setColumn(String column) { - this.column = column; + private String constructDateQualifier(FilterElement current_filter, String column, Query query, RemedyJavaAPI api) + throws ValidationError, ARException { + if (current_filter.getCriteria().length != 2) { + throw new ValidationError("Date Filter does not contain 2 date elements"); + } + var startFrom = current_filter.getCriteria()[0]; + var startTo = current_filter.getCriteria()[1]; + var startFromFormatted = convertDate(startFrom); + var startToFormatted = convertDate(startTo); + var qualifier = ""; + + var dateColumn = api.getFieldDatabaseName(query.getFormName(), query.getFieldId(column)); + + // Same day changes need to startFrom=day and startTo=day+24h 60m 60s + if (startFromFormatted.equals(startToFormatted)) { + startToFormatted = "\' < (\"" + startToFormatted + "\"" + " + (24 * (60 * 60)))"; + } else + startToFormatted = "\' <= \"" + startToFormatted + "\""; + + qualifier += "\'" + dateColumn + "\' >= \"" + startFromFormatted + "\" AND "; + qualifier += "\'" + dateColumn + startToFormatted; + return qualifier; } /** - * Returns filter of {@link Filter} - * - * @return the filter + * Converts the provided date string into a Remedy-specific date format and + * returns it. + * Throws a ValidationError if the provided date format cannot be parsed into + * the Remedy-specific date format. + * + * @param date the date string to convert + * @return the converted date string in Remedy-specific format + * @throws ValidationError if the provided date format cannot be parsed into the + * Remedy-specific date format */ - public String getFilter() { - return this.filter; - } + private String convertDate(String date) throws ValidationError { + String inputFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + String outputFormat = "dd/MM/yyyy"; - /** - * Sets filter of {@link Filter} - * - * @param filter the filter to set - */ - public void setFilter(String filter) { - this.filter = filter; + var parsed = ""; + try { + LocalDateTime parser = LocalDateTime.parse(date, DateTimeFormatter.ofPattern(inputFormat)); + parsed = parser.format(DateTimeFormatter.ofPattern(outputFormat)); + } catch (DateTimeParseException e) { + throw new ValidationError("Provided date format cannot be parsed into Remedy specific date format"); + } + return parsed; } - - /** - * Returns the criterias of {@link Filter}. - * - * @return the criteria - */ - public String[] getCriteria() { - return this.criteria; - } - - /** - * Sets the criteria of the {@link Filter}. - * - * @param criteria the criteria to set - */ - public void setCriteria(String[] criteria) { - this.criteria = criteria; - } -} \ No newline at end of file +} diff --git a/backend/src/main/java/com/nttdata/calender/changes/query/FilterElement.java b/backend/src/main/java/com/nttdata/calender/changes/query/FilterElement.java new file mode 100644 index 0000000..1f18e6a --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/changes/query/FilterElement.java @@ -0,0 +1,72 @@ +package com.nttdata.calender.changes.query; + +import com.nttdata.calender.changes.Change; + +/** + * Defines the filter objects used in the retrieval of {@link Change}. + */ +public class FilterElement { + private String column; + private String filter; + private String[] criteria; + + public FilterElement(String column, String filter, String[] criteria) { + this.column = column; + this.filter = filter; + this.criteria = criteria; + } + + /** + * Returns column of {@link FilterElement} + * + * @return the column + */ + public String getColumn() { + return this.column; + } + + /** + * Sets column of {@link FilterElement} + * + * @param column the column to set + */ + public void setColumn(String column) { + this.column = column; + } + + /** + * Returns filter of {@link FilterElement} + * + * @return the filter + */ + public String getFilter() { + return this.filter; + } + + /** + * Sets filter of {@link FilterElement} + * + * @param filter the filter to set + */ + public void setFilter(String filter) { + this.filter = filter; + } + + /** + * Returns the criterias of {@link FilterElement}. + * + * @return the criteria + */ + public String[] getCriteria() { + return this.criteria; + } + + /** + * Sets the criteria of the {@link FilterElement}. + * + * @param criteria the criteria to set + */ + public void setCriteria(String[] criteria) { + this.criteria = criteria; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 3b1f823..96a48ce 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -16,6 +16,7 @@ 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; +import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; public class PlanTimes { private RemedyJavaAPI remedyJavaAPI; @@ -27,13 +28,14 @@ public class PlanTimes { this.calenderWeeks = new ArrayList<>(); } - public void setPlanTimes(PlanTimesRequest req) throws ARException { + public void setPlanTimes(PlanTimesRequest req) throws ARException, ValidationError { 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(); + .addFieldId("ChangeNr", 1000000182).addFieldId("PlanTimeHours", 666000009) + .addFieldId("PlanTimeMinutes", 666000010).build(); while (!startDate.isAfter(endDate)) { CalendarWeek calendarWeek = new CalendarWeek(); @@ -55,9 +57,10 @@ public class PlanTimes { startDate = startDate.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); } + var filter = req.getFilter(); + var qual = filter.constructQualifier(null, remedyJavaAPI); var changesInDateRange = remedyJavaAPI.queryFieldsById( - "\'Scheduled Start Date\' > \"" + req.getRenderStartDate() + "\" AND \'Scheduled Start Date\' <= \"" - + req.getRenderEndDate() + "\"", + qual, queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { @@ -68,10 +71,10 @@ public class PlanTimes { LocalDate dateEnd = LocalDate.parse(week.getEndDate(), formatter); if (d2.isAfter(dateStart) && (d2.isEqual(dateEnd) || d2.isBefore(dateEnd))) { - var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); - var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); - double plantime = convertPlanTime(hours, minutes); - planTimePerWeek += plantime; + var minutes = change.get(queryChanges.getFieldId("PlanTimeMinutes")).toString(); + var hours = change.get(queryChanges.getFieldId("PlanTimeHours")).toString(); + double plantime = convertPlanTime(hours, minutes); + planTimePerWeek += plantime; } } week.setPlanTime((int) Math.ceil(planTimePerWeek)); @@ -81,12 +84,13 @@ public class PlanTimes { public double convertPlanTime(String hours, String minutes) throws ARException { double mins = 0.0; double hrs = 0.0; - if (minutes != null) mins = (Double.valueOf(minutes) / 60.0); - if (hours != null) Double.valueOf(hours); + if (minutes != null) + mins = (Double.valueOf(minutes) / 60.0); + if (hours != null) + Double.valueOf(hours); double totalHours = hrs + mins; return totalHours; -} - + } public LocalDate timestampToDate(String timestamp) { DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy"); diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java index d608c8a..618fa27 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimesRequest.java @@ -1,19 +1,17 @@ package com.nttdata.calender.planTimes; -import java.util.ArrayList; - import com.nttdata.calender.changes.query.Filter; public class PlanTimesRequest { - private ArrayList filter; + private Filter filter; private String renderStartDate; private String renderEndDate; - public ArrayList getFilter() { + public Filter getFilter() { return filter; } - public void setFilter(ArrayList filter) { + public void setFilter(Filter filter) { this.filter = filter; } From d0c88f2f0c46bcf6e6a505c97949c1e51dac7178 Mon Sep 17 00:00:00 2001 From: Said Gedik Date: Mon, 19 Jun 2023 16:32:03 +0200 Subject: [PATCH 21/25] changed start and end to whole week --- .../com/nttdata/calender/planTimes/PlanTimes.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 96a48ce..879dd8f 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -44,13 +44,12 @@ public class PlanTimes { int year = startDate.get(IsoFields.WEEK_BASED_YEAR); String formattedStartWeek = String.format("%02d", startWeek); + LocalDate startOfWeek = startDate.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + LocalDate endOfWeek = startDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + calendarWeek.setWeek(year + "w" + formattedStartWeek); calendarWeek.setPlanTime(0); - calendarWeek.setStartDate(startDate.format(formatter)); - - LocalDate endOfWeek = startDate.with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); - if (endOfWeek.isAfter(endDate)) - endOfWeek = endDate; + calendarWeek.setStartDate(startOfWeek.format(formatter)); calendarWeek.setEndDate(endOfWeek.format(formatter)); calenderWeeks.add(calendarWeek); @@ -59,9 +58,7 @@ public class PlanTimes { var filter = req.getFilter(); var qual = filter.constructQualifier(null, remedyJavaAPI); - var changesInDateRange = remedyJavaAPI.queryFieldsById( - qual, - queryChanges.getFieldIds(), formName, null, 0, 0); + var changesInDateRange = remedyJavaAPI.queryFieldsById(qual, queryChanges.getFieldIds(), formName, null, 0, 0); for (var week : calenderWeeks) { double planTimePerWeek = 0.0; From 36f8490e85937ab1187e57416e2a8808b4b59b81 Mon Sep 17 00:00:00 2001 From: manueltauber Date: Tue, 20 Jun 2023 12:20:06 +0200 Subject: [PATCH 22/25] planTimesMergingPreperations --- .../calender/api/KalenderRestController.java | 2 +- frontend/src/app/data.service.ts | 20 +++++++++++++++++-- frontend/src/main.ts | 2 +- frontend/src/ntt-gantt/ntt-gantt.component.ts | 4 +++- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java index e17c2f6..d3387e3 100644 --- a/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java +++ b/backend/src/main/java/com/nttdata/calender/api/KalenderRestController.java @@ -116,7 +116,7 @@ public class KalenderRestController { } @CrossOrigin("*") - @GetMapping("/api/getPlanTimes") + @PostMapping("/api/fetchPlanTimes") public ArrayList getPlanTimes(@RequestBody PlanTimesRequest request) throws ARException, ValidationError { PlanTimes p = new PlanTimes(javaAPI); p.setPlanTimes(request); diff --git a/frontend/src/app/data.service.ts b/frontend/src/app/data.service.ts index 7d5d3e1..d60cff5 100644 --- a/frontend/src/app/data.service.ts +++ b/frontend/src/app/data.service.ts @@ -200,7 +200,21 @@ export class DataService { return promise; } - + public async fetchPlanTimes(filters: any, renderStartDate: Date, renderEndtDate: Date){ + const promise = new Promise(resolve=>{ + let obj = {filters : filters, renderStartDate : renderStartDate, renderEndDate: renderEndtDate }; + let stringyfiedData = JSON.stringify(obj); + let dataJson = JSON.parse(stringyfiedData) as typeof stringyfiedData; + console.log(dataJson); + let res : any[] = []; + this.http.post('http://localhost:8080/api/fetchPlanTimes', dataJson) + .subscribe((response: any)=>{ + console.log(response); + resolve(res); + }) + }) + return promise; + } public async fetchImplementers(change: any){ const promise = new Promise(resolve=>{ @@ -244,12 +258,14 @@ export class DataService { * @returns promise for the fetched Changes Array */ public async fetchChanges(reqestParams: any = null){ + + // let filter = {'filterElement': [reqestParams]}; let stringyfiedData = JSON.stringify(reqestParams); let dataJson = JSON.parse(stringyfiedData) as typeof stringyfiedData; const promise = new Promise(resolve=>{ let first : boolean = true; let res : any[] = []; - //console.log(dataJson); + console.log(dataJson); this.http.post('http://localhost:8080/api/getChanges', dataJson) .subscribe((response:any)=>{ //console.log(response); diff --git a/frontend/src/main.ts b/frontend/src/main.ts index 61c6cc9..93f6f62 100644 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -3,7 +3,7 @@ import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import {registerLicense} from '@syncfusion/ej2-base' import { AppModule } from './app/app.module'; import { environment } from './environments/environment'; -registerLicense("ORg4AjUWIQA/Gnt2VVhjQlFaclhJXGFWfVJpTGpQdk5xdV9DaVZUTWY/P1ZhSXxRd0djW39ZdXZRRWNfUkQ="); +registerLicense("Mgo+DSMBaFt+QHJqVk1nQ1BBaV1CX2BZeVl1TWlceE4BCV5EYF5SRHBdQl1mSn5XcEVkXH0=;Mgo+DSMBPh8sVXJ1S0R+X1pDaV5HQmFJfFBmQmlad1R1c0U3HVdTRHRcQlthSX5WdUVnX39Xc3Y=;ORg4AjUWIQA/Gnt2VFhiQlJPcUBDWHxLflF1VWRTfFZ6cVJWESFaRnZdQV1lS35Tc0ZjXXlfcXVX;MjQ3MjE3NEAzMjMxMmUzMDJlMzBFaEtQQXlZRHpObnNVVWpaRXFlcmpVV1VxeTJsR1Eva2tKeE9KUUhjWjhJPQ==;MjQ3MjE3NUAzMjMxMmUzMDJlMzBialU5SlJFbDRnMHNnYitHSE5JNkQzNFdYdXluUXl6OXBoRk5uVTZRTnBRPQ==;NRAiBiAaIQQuGjN/V0d+Xk9HfVhdXGZWfFN0RnNedV14flBBcC0sT3RfQF5jT3xTdkBgWXtYcXNTRA==;MjQ3MjE3N0AzMjMxMmUzMDJlMzBXdnU5YjR3cHNpQlkrMHZNaWNKaE9VOUY0RkVMYjhQTGx5WVp6bGhVYUxRPQ==;MjQ3MjE3OEAzMjMxMmUzMDJlMzBhV09DN3NabFRmSWtkWGFmUDNmaXU1WGYyanhuRUJZci9pZ0VoTytBTkdrPQ==;Mgo+DSMBMAY9C3t2VFhiQlJPcUBDWHxLflF1VWRTfFZ6cVJWESFaRnZdQV1lS35Tc0ZjXXlceHRX;MjQ3MjE4MEAzMjMxMmUzMDJlMzBqcFdzc1ZRMFNQTVVZRms0eVZOejBvTUpnOG9tbXdlVUdlTFlUSjhFNTFZPQ==;MjQ3MjE4MUAzMjMxMmUzMDJlMzBPMHBQNW5ieGsyV21SVDNySktEbjdkWHhUYUJZN0xHdUZmWGhROTRJeWY0PQ==;MjQ3MjE4MkAzMjMxMmUzMDJlMzBXdnU5YjR3cHNpQlkrMHZNaWNKaE9VOUY0RkVMYjhQTGx5WVp6bGhVYUxRPQ=="); if (environment.production) { enableProdMode(); } diff --git a/frontend/src/ntt-gantt/ntt-gantt.component.ts b/frontend/src/ntt-gantt/ntt-gantt.component.ts index 27fea8a..8a56078 100644 --- a/frontend/src/ntt-gantt/ntt-gantt.component.ts +++ b/frontend/src/ntt-gantt/ntt-gantt.component.ts @@ -274,6 +274,7 @@ public logg(args){ this.inputForTimeline = [this.splitterSettings, this.projectStartDate, this.projectEndDate]; }); }); + this.dataService.fetchPlanTimes({'filterElement': this.filters}, this.projectStartDate, this.projectEndDate); @@ -1054,7 +1055,8 @@ public logg(args){ { 'sliceStart': this.sliceStart, 'sliceEnd': this.sliceEnd, - filter: this.filterEnabled ? this.filters : [{column: "SupportGroup", filter: "equals", criteria: [this.userSupportGroup]}], + + filter: this.filterEnabled ? this.filters : {filterElement: [{column: "SupportGroup", filter: "equals", criteria: [this.userSupportGroup]}]}, sort: this.sortEnabled ? this.sort : { 'column': 'ChangeNr',         'mode': 'asc' From bb924bd10fcb7010cbe6f5794ca4e60d2f5e1ad3 Mon Sep 17 00:00:00 2001 From: Julius Sula Date: Tue, 20 Jun 2023 12:56:08 +0200 Subject: [PATCH 23/25] dateConvert --- .../com/nttdata/calender/DateConverter.java | 38 +++++++++++++++++++ .../com/nttdata/calender/changes/Change.java | 33 +++++++--------- .../nttdata/calender/planTimes/PlanTimes.java | 6 ++- 3 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 backend/src/main/java/com/nttdata/calender/DateConverter.java diff --git a/backend/src/main/java/com/nttdata/calender/DateConverter.java b/backend/src/main/java/com/nttdata/calender/DateConverter.java new file mode 100644 index 0000000..3d23ff6 --- /dev/null +++ b/backend/src/main/java/com/nttdata/calender/DateConverter.java @@ -0,0 +1,38 @@ +package com.nttdata.calender; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.TimeZone; + +import com.bmc.arsys.api.Timestamp; +import com.nttdata.calender.errorhandling.ErrorTypes.ValidationError; + +public class DateConverter { + + final String DATEFORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; + + public LocalDate convertDateTime(String timestamp) throws ValidationError { + try { + System.out.println(timestamp); + LocalDate date = LocalDate.parse(timestamp, DateTimeFormatter.ofPattern(DATEFORMAT)); + return date; + } catch (DateTimeParseException e) { + throw new ValidationError("Incorrect dateformat in request"); + } + } + + public Timestamp convertTimestamp(String timestamp) throws ValidationError { + SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT); + sdf.setTimeZone(TimeZone.getTimeZone("GMT")); + try { + Timestamp ts = new Timestamp(sdf.parse(timestamp)); + return ts; + } catch (ParseException e) { + throw new ValidationError("Incorrect dateformat in request"); + } + } +} diff --git a/backend/src/main/java/com/nttdata/calender/changes/Change.java b/backend/src/main/java/com/nttdata/calender/changes/Change.java index b9c4d07..12ed06c 100644 --- a/backend/src/main/java/com/nttdata/calender/changes/Change.java +++ b/backend/src/main/java/com/nttdata/calender/changes/Change.java @@ -14,6 +14,7 @@ import com.bmc.arsys.api.Entry; import com.bmc.arsys.api.SortInfo; import com.bmc.arsys.api.Timestamp; import com.bmc.arsys.api.Value; +import com.nttdata.calender.DateConverter; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.query.FilterElement; @@ -360,30 +361,24 @@ public class Change { public void modifyTimestamp(ChangeUpdateRequest request) throws ARException, ValidationError { String entryId = request.getResourceId(); String d2 = request.getD2(); + var dateConverter = new DateConverter(); int state = request.getState(); String changeNr = request.getChangeNr(); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSS'Z'"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT")); + var ts = dateConverter.convertTimestamp(d2); + if (state == 0) { + Query query = new Query.QueryBuilder("ASF:WI_TAS_Paket") + .addFieldValue("d2", 1000000350, new Value(ts)).build(); + api.modifyEntry(entryId, query); + } else { + Query queryInfrastructureChange = new Query.QueryBuilder("CHG:Infrastructure Change") + .addFieldValue("d2", 1000000350, new Value(ts)).build(); - try { - Timestamp ts = new Timestamp(sdf.parse(d2)); - if (state == 0) { - Query query = new Query.QueryBuilder("ASF:WI_TAS_Paket") - .addFieldValue("d2", 1000000350, new Value(ts)).build(); - api.modifyEntry(entryId, query); - } else { - Query queryInfrastructureChange = new Query.QueryBuilder("CHG:Infrastructure Change") - .addFieldValue("d2", 1000000350, new Value(ts)).build(); + var change = api.queryFieldsById("\'Infrastructure Change ID\' = \"" + changeNr + "\"", + queryInfrastructureChange.getFieldIds(), + queryInfrastructureChange.getFormName(), null, 0, 0); - var change = api.queryFieldsById("\'Infrastructure Change ID\' = \"" + changeNr + "\"", - queryInfrastructureChange.getFieldIds(), - queryInfrastructureChange.getFormName(), null, 0, 0); - - api.modifyEntry(change.get(0).getEntryId(), queryInfrastructureChange); - } - } catch (ParseException e) { - throw new ValidationError("Incorrect dateformat in request"); + api.modifyEntry(change.get(0).getEntryId(), queryInfrastructureChange); } } diff --git a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java index 879dd8f..ea3f875 100644 --- a/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java +++ b/backend/src/main/java/com/nttdata/calender/planTimes/PlanTimes.java @@ -13,6 +13,7 @@ import java.util.Objects; import com.bmc.arsys.api.ARException; import com.bmc.thirdparty.org.springframework.cglib.core.Local; +import com.nttdata.calender.DateConverter; import com.nttdata.calender.api.Query; import com.nttdata.calender.api.RemedyJavaAPI; import com.nttdata.calender.changes.ChangeItem; @@ -29,9 +30,10 @@ public class PlanTimes { } public void setPlanTimes(PlanTimesRequest req) throws ARException, ValidationError { + var dateConverter = new DateConverter(); + var startDate = dateConverter.convertDateTime(req.getRenderStartDate()); + var endDate = dateConverter.convertDateTime(req.getRenderEndDate()); 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) From 9edb886ce73bc4999d1ded371d44412eb2e97a50 Mon Sep 17 00:00:00 2001 From: manueltauber Date: Tue, 20 Jun 2023 13:18:29 +0200 Subject: [PATCH 24/25] premerge --- frontend/src/app/data.service.ts | 8 +++++--- frontend/src/ntt-gantt/ntt-gantt.component.ts | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/data.service.ts b/frontend/src/app/data.service.ts index d60cff5..bfac142 100644 --- a/frontend/src/app/data.service.ts +++ b/frontend/src/app/data.service.ts @@ -202,14 +202,16 @@ export class DataService { public async fetchPlanTimes(filters: any, renderStartDate: Date, renderEndtDate: Date){ const promise = new Promise(resolve=>{ - let obj = {filters : filters, renderStartDate : renderStartDate, renderEndDate: renderEndtDate }; + let obj = {filter : filters.filter, renderStartDate : renderStartDate, renderEndDate: renderEndtDate }; let stringyfiedData = JSON.stringify(obj); let dataJson = JSON.parse(stringyfiedData) as typeof stringyfiedData; console.log(dataJson); let res : any[] = []; this.http.post('http://localhost:8080/api/fetchPlanTimes', dataJson) - .subscribe((response: any)=>{ - console.log(response); + .subscribe((response: any[])=>{ + response.forEach(week => { + res.push(week); + }); resolve(res); }) }) diff --git a/frontend/src/ntt-gantt/ntt-gantt.component.ts b/frontend/src/ntt-gantt/ntt-gantt.component.ts index 8a56078..7d8e653 100644 --- a/frontend/src/ntt-gantt/ntt-gantt.component.ts +++ b/frontend/src/ntt-gantt/ntt-gantt.component.ts @@ -274,7 +274,7 @@ public logg(args){ this.inputForTimeline = [this.splitterSettings, this.projectStartDate, this.projectEndDate]; }); }); - this.dataService.fetchPlanTimes({'filterElement': this.filters}, this.projectStartDate, this.projectEndDate); + From 4db2b32b4c0148d874f8f9ac901bc03d4bf6ee34 Mon Sep 17 00:00:00 2001 From: Julius Sula Date: Tue, 20 Jun 2023 13:19:59 +0200 Subject: [PATCH 25/25] remove print --- backend/src/main/java/com/nttdata/calender/DateConverter.java | 1 - 1 file changed, 1 deletion(-) diff --git a/backend/src/main/java/com/nttdata/calender/DateConverter.java b/backend/src/main/java/com/nttdata/calender/DateConverter.java index 3d23ff6..52ea020 100644 --- a/backend/src/main/java/com/nttdata/calender/DateConverter.java +++ b/backend/src/main/java/com/nttdata/calender/DateConverter.java @@ -17,7 +17,6 @@ public class DateConverter { public LocalDate convertDateTime(String timestamp) throws ValidationError { try { - System.out.println(timestamp); LocalDate date = LocalDate.parse(timestamp, DateTimeFormatter.ofPattern(DATEFORMAT)); return date; } catch (DateTimeParseException e) {