From beeb4cf1552afe64cb73de8c352628c7e703d7c0 Mon Sep 17 00:00:00 2001 From: ttikr Date: Thu, 29 Aug 2024 19:56:38 +0300 Subject: [PATCH 1/4] first version of test-passed solution --- src/main/java/core/basesyntax/SalaryInfo.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 4a34339b5..5cdea21e2 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -1,7 +1,37 @@ package core.basesyntax; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; + public class SalaryInfo { + private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM.yyyy"); + public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { - return null; + LocalDate localDateFrom = LocalDate.parse(dateFrom, formatter); + LocalDate localDateTo = LocalDate.parse(dateTo, formatter); + StringBuilder salaryInfo = new StringBuilder(); + salaryInfo.append("Report for period ").append(dateFrom).append(" - ").append(dateTo); + + for (String name : names) { + salaryInfo.append(System.lineSeparator()).append(name).append(" - "); + int salary = 0; + for (String simpleData : data) { + if (simpleData.contains(name)) { + LocalDate rowDate = LocalDate.parse(simpleData.substring(0, 10), formatter); + if ((rowDate.isAfter(localDateFrom) || rowDate.isEqual(localDateFrom)) + && rowDate.isBefore(localDateTo) || rowDate.isEqual(localDateTo)) { + + String[] dayIncomeInformation = simpleData.substring(12 + + name.length()).split(" "); + salary += Integer.parseInt(dayIncomeInformation[0]) + * Integer.parseInt(dayIncomeInformation[1]); + } + } + } + salaryInfo.append(salary); + } + + return salaryInfo.toString(); } + } From ae6e9aca8dccca07d6c8636c28001ce625ac5c59 Mon Sep 17 00:00:00 2001 From: ttikr Date: Thu, 29 Aug 2024 20:11:02 +0300 Subject: [PATCH 2/4] refactored after checklist.md --- src/main/java/core/basesyntax/SalaryInfo.java | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 5cdea21e2..6d10463fc 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -5,10 +5,16 @@ public class SalaryInfo { private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM.yyyy"); + private final int startPositionForSubstringDate = 0; + private final int endPositionForSubstringDate = 10; + private final int startPositionForSubstringIncomeData = 12; + private final int arrayPositionOfWorkingHours = 0; + private final int arrayPositionOfIncomePerHour = 1; public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { LocalDate localDateFrom = LocalDate.parse(dateFrom, formatter); LocalDate localDateTo = LocalDate.parse(dateTo, formatter); + StringBuilder salaryInfo = new StringBuilder(); salaryInfo.append("Report for period ").append(dateFrom).append(" - ").append(dateTo); @@ -17,21 +23,22 @@ public String getSalaryInfo(String[] names, String[] data, String dateFrom, Stri int salary = 0; for (String simpleData : data) { if (simpleData.contains(name)) { - LocalDate rowDate = LocalDate.parse(simpleData.substring(0, 10), formatter); + LocalDate rowDate = LocalDate.parse(simpleData.substring( + startPositionForSubstringDate, endPositionForSubstringDate), + formatter); if ((rowDate.isAfter(localDateFrom) || rowDate.isEqual(localDateFrom)) && rowDate.isBefore(localDateTo) || rowDate.isEqual(localDateTo)) { - String[] dayIncomeInformation = simpleData.substring(12 - + name.length()).split(" "); - salary += Integer.parseInt(dayIncomeInformation[0]) - * Integer.parseInt(dayIncomeInformation[1]); + String[] dayIncomeInfo = simpleData.substring( + startPositionForSubstringIncomeData + + name.length()).split(" "); + salary += Integer.parseInt(dayIncomeInfo[arrayPositionOfWorkingHours]) + * Integer.parseInt(dayIncomeInfo[arrayPositionOfIncomePerHour]); } } } salaryInfo.append(salary); } - return salaryInfo.toString(); } - } From c2e3f3970f67cfa55f45c76dd56fe9a34396a914 Mon Sep 17 00:00:00 2001 From: ttikr Date: Thu, 29 Aug 2024 20:19:52 +0300 Subject: [PATCH 3/4] refactored after ai-mentor advices (made private fields static ((just forgot about this)) and simplified if statement that checked the data) --- src/main/java/core/basesyntax/SalaryInfo.java | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 6d10463fc..2582faf78 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -4,12 +4,12 @@ import java.time.format.DateTimeFormatter; public class SalaryInfo { - private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM.yyyy"); - private final int startPositionForSubstringDate = 0; - private final int endPositionForSubstringDate = 10; - private final int startPositionForSubstringIncomeData = 12; - private final int arrayPositionOfWorkingHours = 0; - private final int arrayPositionOfIncomePerHour = 1; + private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM.yyyy"); + private static final int startPositionForSubstringDate = 0; + private static final int endPositionForSubstringDate = 10; + private static final int startPositionForSubstringIncomeData = 12; + private static final int arrayPositionOfWorkingHours = 0; + private static final int arrayPositionOfIncomePerHour = 1; public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { LocalDate localDateFrom = LocalDate.parse(dateFrom, formatter); @@ -26,9 +26,7 @@ public String getSalaryInfo(String[] names, String[] data, String dateFrom, Stri LocalDate rowDate = LocalDate.parse(simpleData.substring( startPositionForSubstringDate, endPositionForSubstringDate), formatter); - if ((rowDate.isAfter(localDateFrom) || rowDate.isEqual(localDateFrom)) - && rowDate.isBefore(localDateTo) || rowDate.isEqual(localDateTo)) { - + if (!rowDate.isBefore(localDateFrom) && !rowDate.isAfter(localDateTo)) { String[] dayIncomeInfo = simpleData.substring( startPositionForSubstringIncomeData + name.length()).split(" "); From ccd02133658514569338db8603f2e1e46e6bbf37 Mon Sep 17 00:00:00 2001 From: ttikr Date: Mon, 2 Sep 2024 17:44:07 +0300 Subject: [PATCH 4/4] refactored after mentor reject (give convention name for static values, change pattern in formatter) --- src/main/java/core/basesyntax/SalaryInfo.java | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/core/basesyntax/SalaryInfo.java b/src/main/java/core/basesyntax/SalaryInfo.java index 2582faf78..2349b211f 100644 --- a/src/main/java/core/basesyntax/SalaryInfo.java +++ b/src/main/java/core/basesyntax/SalaryInfo.java @@ -4,16 +4,16 @@ import java.time.format.DateTimeFormatter; public class SalaryInfo { - private static final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.MM.yyyy"); - private static final int startPositionForSubstringDate = 0; - private static final int endPositionForSubstringDate = 10; - private static final int startPositionForSubstringIncomeData = 12; - private static final int arrayPositionOfWorkingHours = 0; - private static final int arrayPositionOfIncomePerHour = 1; + private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy"); + private static final int START_POSITION_FOR_SUBSTRING_DATE = 0; + private static final int END_POSITION_FOR_SUBSTRING_DATE = 10; + private static final int START_POSITION_FOR_SUBSTRING_INCOME_DATA = 12; + private static final int ARRAY_POSITION_OF_WORKING_HOURS = 0; + private static final int ARRAY_POSITION_OF_INC_PER_HOUR = 1; public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) { - LocalDate localDateFrom = LocalDate.parse(dateFrom, formatter); - LocalDate localDateTo = LocalDate.parse(dateTo, formatter); + LocalDate localDateFrom = LocalDate.parse(dateFrom, FORMATTER); + LocalDate localDateTo = LocalDate.parse(dateTo, FORMATTER); StringBuilder salaryInfo = new StringBuilder(); salaryInfo.append("Report for period ").append(dateFrom).append(" - ").append(dateTo); @@ -24,14 +24,15 @@ public String getSalaryInfo(String[] names, String[] data, String dateFrom, Stri for (String simpleData : data) { if (simpleData.contains(name)) { LocalDate rowDate = LocalDate.parse(simpleData.substring( - startPositionForSubstringDate, endPositionForSubstringDate), - formatter); + START_POSITION_FOR_SUBSTRING_DATE, + END_POSITION_FOR_SUBSTRING_DATE), + FORMATTER); if (!rowDate.isBefore(localDateFrom) && !rowDate.isAfter(localDateTo)) { String[] dayIncomeInfo = simpleData.substring( - startPositionForSubstringIncomeData + START_POSITION_FOR_SUBSTRING_INCOME_DATA + name.length()).split(" "); - salary += Integer.parseInt(dayIncomeInfo[arrayPositionOfWorkingHours]) - * Integer.parseInt(dayIncomeInfo[arrayPositionOfIncomePerHour]); + salary += Integer.parseInt(dayIncomeInfo[ARRAY_POSITION_OF_WORKING_HOURS]) + * Integer.parseInt(dayIncomeInfo[ARRAY_POSITION_OF_INC_PER_HOUR]); } } }