Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

implemented method getSalaryInfo(...) according to requirements #1334

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 52 additions & 1 deletion src/main/java/core/basesyntax/SalaryInfo.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,58 @@
package core.basesyntax;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class SalaryInfo {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("dd.MM.yyyy");
private static final int DATE_INDEX = 0;
private static final int HOURS_INDEX = 2;
private static final int INCOME_INDEX = 3;
private static final int NAME_INDEX = 1;
private static final String DATA_DELIMITER = " ";
private static final String REPORT_DELIMITER = " - ";
private static final String REPORT_HEADER = "Report for period ";

public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) {

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) {
public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) {
final LocalDate fromDate = LocalDate.parse(dateFrom, inputFormatter);
final LocalDate toDate = LocalDate.parse(dateTo, inputFormatter);
StringBuilder report = new StringBuilder("Report for period ")
.append(fromDate.format(inputFormatter))
.append(" - ")
.append(toDate.format(inputFormatter));
int[] salaries = new int[names.length];
for (String info : data) {
String[] parts = info.split(" ");
LocalDate recordDay = LocalDate.parse(parts[DATE_INDEX], inputFormatter);
if ((recordDay.isAfter(fromDate) || recordDay.isEqual(fromDate))
&& (recordDay.isBefore(toDate) || recordDay.isEqual(toDate))) {
for (int i = 0; i < names.length; i++) {
if (names[i].equals(parts[NAME_INDEX])) {
salaries[i] += Integer.parseInt(parts[HOURS_INDEX])
* Integer.parseInt(parts[INCOME_INDEX]);
}
}
}
}
for (int i = 0; i < names.length; i++) {
report.append(System.lineSeparator())
.append(names[i])
.append(" - ")
.append(salaries[i]);
}
return report.toString();
}

return null;
final LocalDate fromDate = LocalDate.parse(dateFrom, FORMATTER);
final LocalDate toDate = LocalDate.parse(dateTo, FORMATTER);
int[] salaries = new int[names.length];
for (String info : data) {
String[] parts = info.split(DATA_DELIMITER);
LocalDate recordDay = LocalDate.parse(parts[DATE_INDEX], FORMATTER);
if (isWithinDateRange(recordDay, fromDate, toDate)) {
calculateSalaries(names, parts, salaries);
}
}
return composeReport(names, dateFrom, dateTo, salaries);
}

private static boolean isWithinDateRange(LocalDate currentDate, LocalDate fromDate,
LocalDate toDate) {
return (currentDate.isAfter(fromDate) || currentDate.isEqual(fromDate)) && (
currentDate.isBefore(toDate) || currentDate.isEqual(toDate));
}

private static void calculateSalaries(String[] names, String[] parts, int[] salaries) {
for (int i = 0; i < names.length; i++) {
if (names[i].equals(parts[NAME_INDEX])) {
salaries[i] += Integer.parseInt(parts[HOURS_INDEX]) * Integer.parseInt(
parts[INCOME_INDEX]);
}
}
}

private static String composeReport(String[] names, String dateFrom, String dateTo,
int[] salaries) {
StringBuilder report = new StringBuilder(REPORT_HEADER).append(dateFrom)
.append(REPORT_DELIMITER)
.append(dateTo);
for (int i = 0; i < names.length; i++) {
report.append(System.lineSeparator())
.append((names[i]))
.append(REPORT_DELIMITER)
.append(salaries[i]);
}
Comment on lines +50 to +55

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(1)

return report.toString();
}
}
Loading