-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathSalaryInfo.java
More file actions
63 lines (49 loc) · 2.18 KB
/
Copy pathSalaryInfo.java
File metadata and controls
63 lines (49 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package core.basesyntax;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class SalaryInfo {
private static final DateTimeFormatter DATE_FORMATTER =
DateTimeFormatter.ofPattern("dd.MM.yyyy");
private static final String REPORT_HEADER = "Report for period ";
private static final String DATE_SEPARATOR = " - ";
private static final String NAME_SALARY_SEPARATOR = " - ";
private static final String DATA_SEPARATOR = " ";
private static final int DATE_INDEX = 0;
private static final int NAME_INDEX = 1;
private static final int HOURS_INDEX = 2;
private static final int RATE_INDEX = 3;
public String getSalaryInfo(String[] names, String[] data, String dateFrom, String dateTo) {
LocalDate startDate = LocalDate.parse(dateFrom, DATE_FORMATTER);
LocalDate endDate = LocalDate.parse(dateTo, DATE_FORMATTER);
StringBuilder report = new StringBuilder();
report.append(REPORT_HEADER)
.append(dateFrom)
.append(DATE_SEPARATOR)
.append(dateTo);
for (String name : names) {
int salary = calculateSalary(name, data, startDate, endDate);
report.append(System.lineSeparator())
.append(name)
.append(NAME_SALARY_SEPARATOR)
.append(salary);
}
return report.toString();
}
private int calculateSalary(String name, String[] data,
LocalDate startDate, LocalDate endDate) {
int salary = 0;
for (String record : data) {
String[] recordParts = record.split(DATA_SEPARATOR);
LocalDate workDate = LocalDate.parse(recordParts[DATE_INDEX], DATE_FORMATTER);
String employeeName = recordParts[NAME_INDEX];
int hours = Integer.parseInt(recordParts[HOURS_INDEX]);
int rate = Integer.parseInt(recordParts[RATE_INDEX]);
if (employeeName.equals(name)
&& !workDate.isBefore(startDate)
&& !workDate.isAfter(endDate)) {
salary += hours * rate;
}
}
return salary;
}
}