From 936de9169e302ff8450eec88fec01047202e2481 Mon Sep 17 00:00:00 2001 From: Artem Hurievskyi Date: Tue, 11 Jun 2024 11:52:31 +0300 Subject: [PATCH 1/3] create an implementation for the method "getSalaryInfo" --- .../java/core/basesyntax/DataComparison.java | 25 +++++++++++++ src/main/java/core/basesyntax/SalaryInfo.java | 37 +++++++++++++++++-- 2 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 src/main/java/core/basesyntax/DataComparison.java diff --git a/src/main/java/core/basesyntax/DataComparison.java b/src/main/java/core/basesyntax/DataComparison.java new file mode 100644 index 000000000..88f4c9e22 --- /dev/null +++ b/src/main/java/core/basesyntax/DataComparison.java @@ -0,0 +1,25 @@ +package core.basesyntax; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; + +public class DataComparison { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + + public boolean isDateInRange(String fromDate, String toDate, String dateFromAList) { + + try { + LocalDate startDate = LocalDate.parse(fromDate, FORMATTER); + LocalDate endDate = LocalDate.parse(toDate, FORMATTER); + LocalDate dateToCheck = LocalDate.parse(dateFromAList, FORMATTER); + + return ((dateToCheck.isEqual(startDate) || dateToCheck.isAfter(startDate)) + && (dateToCheck.isEqual(endDate) || dateToCheck.isBefore(endDate))); + } catch (DateTimeParseException e) { + System.out.println("Invalid date format" + e); + return false; + } + } + +} diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 4a34339b5..9b7bf7b6c 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -1,7 +1,38 @@ package core.basesyntax; -public class SalaryInfo { - public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { - return null; +import java.time.format.DateTimeParseException; + +public class SalaryInfo extends DataComparison { + + public String getSalaryInfo(String[] names, String[] dates, String dateFrom, String dateTo) { + StringBuilder builder = new StringBuilder("Report for period "); + int[] employeeSalary = new int[names.length]; + + try { + for (String date : dates) { + String[] record = date.split("\\s+"); + String recordDate = record[0]; + String recordName = record[1]; + int totalHours = Integer.parseInt(record[2]); + int salaryPerHour = Integer.parseInt(record[3]); + + for (int i = 0; i < names.length; i++) { + if (names[i].equals(recordName) + && isDateInRange(dateFrom, dateTo, recordDate)) { + employeeSalary[i] += totalHours * salaryPerHour; + } + } + } + } catch (DateTimeParseException | NumberFormatException e) { + System.out.println("Invalid date format" + e); + + } + + builder.append(dateFrom).append(" - ").append(dateTo).append(System.lineSeparator()); + for (int i = 0; i < names.length; i++) { + builder.append(names[i]).append(" - ").append(employeeSalary[i]) + .append(System.lineSeparator()); + } + return builder.toString().trim(); } } From 70f62ba293106f9e26d2baf06670eb0918698752 Mon Sep 17 00:00:00 2001 From: Artem Hurievskyi Date: Tue, 11 Jun 2024 22:41:19 +0300 Subject: [PATCH 2/3] did all magic numbers connstants, removed unnecessary class and moved it`s method to the SalaryInfo class and made it static, made 2 loops instead of 3 ones, and made date checking shorter --- .../java/core/basesyntax/DataComparison.java | 25 --------- src/main/java/core/basesyntax/SalaryInfo.java | 55 +++++++++++++------ 2 files changed, 37 insertions(+), 43 deletions(-) delete mode 100644 src/main/java/core/basesyntax/DataComparison.java diff --git a/src/main/java/core/basesyntax/DataComparison.java b/src/main/java/core/basesyntax/DataComparison.java deleted file mode 100644 index 88f4c9e22..000000000 --- a/src/main/java/core/basesyntax/DataComparison.java +++ /dev/null @@ -1,25 +0,0 @@ -package core.basesyntax; - -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; - -public class DataComparison { - private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); - - public boolean isDateInRange(String fromDate, String toDate, String dateFromAList) { - - try { - LocalDate startDate = LocalDate.parse(fromDate, FORMATTER); - LocalDate endDate = LocalDate.parse(toDate, FORMATTER); - LocalDate dateToCheck = LocalDate.parse(dateFromAList, FORMATTER); - - return ((dateToCheck.isEqual(startDate) || dateToCheck.isAfter(startDate)) - && (dateToCheck.isEqual(endDate) || dateToCheck.isBefore(endDate))); - } catch (DateTimeParseException e) { - System.out.println("Invalid date format" + e); - return false; - } - } - -} diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 9b7bf7b6c..299ca2222 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -1,38 +1,57 @@ package core.basesyntax; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; -public class SalaryInfo extends DataComparison { +public class SalaryInfo { + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + private static final int DATE_FROM_LIST = 0; + private static final int NAME_FROM_LIST = 1; + private static final int HOURS_FROM_LIST = 2; + private static final int HOURS_RATE_FROM_LIST = 3; + private static final String LINE_SEPARATOR = "\\s+"; + + public static boolean isDateInRange(String fromDate, String toDate, String dateFromAList) { + + try { + LocalDate startDate = LocalDate.parse(fromDate, FORMATTER); + LocalDate endDate = LocalDate.parse(toDate, FORMATTER); + LocalDate dateToCheck = LocalDate.parse(dateFromAList, FORMATTER); + return (!dateToCheck.isBefore(startDate) + && !dateToCheck.isAfter(endDate)); + } catch (DateTimeParseException e) { + System.out.println("Invalid date format" + e); + return false; + } + } public String getSalaryInfo(String[] names, String[] dates, String dateFrom, String dateTo) { StringBuilder builder = new StringBuilder("Report for period "); - int[] employeeSalary = new int[names.length]; + builder.append(dateFrom).append(" - ").append(dateTo).append(System.lineSeparator()); try { - for (String date : dates) { - String[] record = date.split("\\s+"); - String recordDate = record[0]; - String recordName = record[1]; - int totalHours = Integer.parseInt(record[2]); - int salaryPerHour = Integer.parseInt(record[3]); - - for (int i = 0; i < names.length; i++) { - if (names[i].equals(recordName) + for (int i = 0; i < names.length; i++) { + int employeeSalary = 0; + for (String date : dates) { + String[] record = date.split(LINE_SEPARATOR); + String recordDate = record[DATE_FROM_LIST]; + String recordName = record[NAME_FROM_LIST]; + int totalHours = Integer.parseInt(record[HOURS_FROM_LIST]); + int salaryPerHour = Integer.parseInt(record[HOURS_RATE_FROM_LIST]); + + if (recordName.equals(names[i]) && isDateInRange(dateFrom, dateTo, recordDate)) { - employeeSalary[i] += totalHours * salaryPerHour; + employeeSalary += totalHours * salaryPerHour; } } + builder.append(names[i]).append(" - ").append(employeeSalary) + .append(System.lineSeparator()); } } catch (DateTimeParseException | NumberFormatException e) { System.out.println("Invalid date format" + e); } - - builder.append(dateFrom).append(" - ").append(dateTo).append(System.lineSeparator()); - for (int i = 0; i < names.length; i++) { - builder.append(names[i]).append(" - ").append(employeeSalary[i]) - .append(System.lineSeparator()); - } return builder.toString().trim(); } } From ffaea6d92a62863c501df9c0c4e490cb551f60e5 Mon Sep 17 00:00:00 2001 From: Artem Hurievskyi Date: Wed, 12 Jun 2024 11:48:33 +0300 Subject: [PATCH 3/3] changed the method access and moved it after public method --- src/main/java/core/basesyntax/SalaryInfo.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 299ca2222..5a21e1554 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -12,20 +12,6 @@ public class SalaryInfo { private static final int HOURS_RATE_FROM_LIST = 3; private static final String LINE_SEPARATOR = "\\s+"; - public static boolean isDateInRange(String fromDate, String toDate, String dateFromAList) { - - try { - LocalDate startDate = LocalDate.parse(fromDate, FORMATTER); - LocalDate endDate = LocalDate.parse(toDate, FORMATTER); - LocalDate dateToCheck = LocalDate.parse(dateFromAList, FORMATTER); - return (!dateToCheck.isBefore(startDate) - && !dateToCheck.isAfter(endDate)); - } catch (DateTimeParseException e) { - System.out.println("Invalid date format" + e); - return false; - } - } - public String getSalaryInfo(String[] names, String[] dates, String dateFrom, String dateTo) { StringBuilder builder = new StringBuilder("Report for period "); builder.append(dateFrom).append(" - ").append(dateTo).append(System.lineSeparator()); @@ -54,4 +40,18 @@ && isDateInRange(dateFrom, dateTo, recordDate)) { } return builder.toString().trim(); } + + private static boolean isDateInRange(String fromDate, String toDate, String dateFromAList) { + + try { + LocalDate startDate = LocalDate.parse(fromDate, FORMATTER); + LocalDate endDate = LocalDate.parse(toDate, FORMATTER); + LocalDate dateToCheck = LocalDate.parse(dateFromAList, FORMATTER); + return (!dateToCheck.isBefore(startDate) + && !dateToCheck.isAfter(endDate)); + } catch (DateTimeParseException e) { + System.out.println("Invalid date format" + e); + return false; + } + } }