diff --git a/build.gradle b/build.gradle index e72606ed10a..0424e97d993 100644 --- a/build.gradle +++ b/build.gradle @@ -61,6 +61,8 @@ dependencies { implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.7.0' implementation group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.7.4' + compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0' + testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: jUnitVersion testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: jUnitVersion diff --git a/src/main/java/seedu/address/logic/parser/ParserUtil.java b/src/main/java/seedu/address/logic/parser/ParserUtil.java index 753a7cf5616..189fefdc014 100644 --- a/src/main/java/seedu/address/logic/parser/ParserUtil.java +++ b/src/main/java/seedu/address/logic/parser/ParserUtil.java @@ -95,7 +95,7 @@ public static Date parseDate(ArgumentMultimap argMultimap) throws ParseException String date; if (!dateField.isPresent()) { LocalDateTime currentDateTime = LocalDateTime.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HHmm"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy, H:mma"); date = currentDateTime.format(formatter); } else { date = dateField.get(); diff --git a/src/main/java/seedu/address/model/expense/Date.java b/src/main/java/seedu/address/model/expense/Date.java index ca63ef0ad46..1e1fa84a6b5 100644 --- a/src/main/java/seedu/address/model/expense/Date.java +++ b/src/main/java/seedu/address/model/expense/Date.java @@ -89,67 +89,75 @@ private static String convertDate(String date) { LocalTime newTime; LocalDate newDate; LocalDateTime newDateTime; + String datePattern = "dd MMM yyyy"; + String dateTimePattern = "dd MMM yyyy, H:mma"; if (date.matches(HMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("Hmm"); newTime = LocalTime.parse(date, formatter); - return newTime.format(DateTimeFormatter.ofPattern("H:mma")); + return appendDate(newTime).format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(HHMM_REGEX)) { - formatter = DateTimeFormatter.ofPattern("HHmm"); + formatter = DateTimeFormatter.ofPattern("Hmm"); newTime = LocalTime.parse(date, formatter); - return newTime.format(DateTimeFormatter.ofPattern("HH:mma")); + return appendDate(newTime).format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DMYYYY_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/M/yyyy"); newDate = LocalDate.parse(date, formatter); - return newDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")); + return newDate.format(DateTimeFormatter.ofPattern(datePattern)); } else if (date.matches(DMMYYYY_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/MM/yyyy"); newDate = LocalDate.parse(date, formatter); - return newDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")); + return newDate.format(DateTimeFormatter.ofPattern(datePattern)); } else if (date.matches(DDMYYYY_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/M/yyyy"); newDate = LocalDate.parse(date, formatter); - return newDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")); + return newDate.format(DateTimeFormatter.ofPattern(datePattern)); } else if (date.matches(DDMMYYYY_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); newDate = LocalDate.parse(date, formatter); - return newDate.format(DateTimeFormatter.ofPattern("MMM dd, yyyy")); + return newDate.format(DateTimeFormatter.ofPattern(datePattern)); } else if (date.matches(DMYYYYHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/M/yyyy Hmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DMMYYYYHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/MM/yyyy Hmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DDMYYYYHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/M/yyyy Hmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DDMMYYYYHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy Hmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DMYYYYHHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/M/yyyy HHmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DMMYYYYHHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("d/MM/yyyy HHmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DDMYYYYHHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/M/yyyy HHmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else if (date.matches(DDMMYYYYHHMM_REGEX)) { formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy HHmm"); newDateTime = LocalDateTime.parse(date, formatter); - return newDateTime.format(DateTimeFormatter.ofPattern("MMM dd H:mma, yyyy")); + return newDateTime.format(DateTimeFormatter.ofPattern(dateTimePattern)); } else { return date; } } + private static LocalDateTime appendDate(LocalTime time) { + LocalDate localDate = LocalDate.now(); + LocalTime localTime = LocalTime.of(time.getHour(), time.getMinute()); + return LocalDateTime.of(localDate, localTime); + } + @Override public String toString() { return value; diff --git a/src/main/java/seedu/address/model/expense/Expense.java b/src/main/java/seedu/address/model/expense/Expense.java index 5d29b95bc1b..708e629a749 100644 --- a/src/main/java/seedu/address/model/expense/Expense.java +++ b/src/main/java/seedu/address/model/expense/Expense.java @@ -98,12 +98,13 @@ public int hashCode() { @Override public String toString() { final StringBuilder builder = new StringBuilder(); - builder.append(getName()) - .append(" Amount: ") + builder.append("\n") + .append(getName()) + .append(" ") .append(getAmount()) - .append(" Date: ") + .append("\n") .append(getDate()) - .append(" Tags: "); + .append("\n"); getTags().forEach(builder::append); return builder.toString(); } diff --git a/src/main/java/seedu/address/model/expense/Name.java b/src/main/java/seedu/address/model/expense/Name.java index 728453b562c..184925b6f2d 100644 --- a/src/main/java/seedu/address/model/expense/Name.java +++ b/src/main/java/seedu/address/model/expense/Name.java @@ -3,6 +3,8 @@ import static java.util.Objects.requireNonNull; import static seedu.address.commons.util.AppUtil.checkArgument; +import org.apache.commons.lang3.StringUtils; + /** * Represents the description of an expense in the expense list. * Guarantees: immutable; is valid as declared in {@link #isValidName(String)} @@ -28,7 +30,7 @@ public class Name { public Name(String name) { requireNonNull(name); checkArgument(isValidName(name), MESSAGE_CONSTRAINTS); - fullName = name; + fullName = StringUtils.capitalize(name); } /**