Skip to content

Commit

Permalink
Merge pull request #194 from galvinleow/branch-sort-revenue
Browse files Browse the repository at this point in the history
Sort Revenue Feature
  • Loading branch information
Hans Sebastian Tirtaputra committed Oct 26, 2020
2 parents 7255cfc + 1d5cec4 commit 3987cda
Show file tree
Hide file tree
Showing 10 changed files with 149 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ public class ListRevenueCommand extends Command {

public static final String MESSAGE_SUCCESS = "Listed all revenue";


@Override
public CommandResult execute(Model model, HistoryManager historyManager) {
requireNonNull(model);
model.getRevenueTracker().sortDefaultRevenueList();
model.updateFilteredRevenueList(PREDICATE_SHOW_ALL_REVENUE);
return new CommandResult(MESSAGE_SUCCESS, RevenueListPanel.TAB_NAME);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package seedu.homerce.logic.commands.revenue;

import static java.util.Objects.requireNonNull;

import seedu.homerce.logic.commands.Command;
import seedu.homerce.logic.commands.CommandResult;
import seedu.homerce.model.Model;
import seedu.homerce.model.manager.HistoryManager;
import seedu.homerce.ui.revenuepanel.RevenueListPanel;

/**
* Sorts all revenues in Homerce to the user.
*/
public class SortRevenueCommand extends Command {

public static final String COMMAND_WORD = "sortrev";

public static final String MESSAGE_SUCCESS = "Sorted all revenues";

public static final String MESSAGE_USAGE = COMMAND_WORD
+ ": Sorts the revenue based on value.\n"
+ "Parameters: ORDER\n"
+ "Example: " + COMMAND_WORD + " asc";

private final boolean isAscending;

/**
* Constructs a SortRevenueCommand.
*
* @param isAscending to indicate the order of the sort.
*/
public SortRevenueCommand(boolean isAscending) {
this.isAscending = isAscending;
}

@Override
public CommandResult execute(Model model, HistoryManager historyManager) {
requireNonNull(model);
model.getRevenueTracker().sortRevenueList(isAscending);
return new CommandResult(MESSAGE_SUCCESS, RevenueListPanel.TAB_NAME);
}
}
5 changes: 5 additions & 0 deletions src/main/java/seedu/homerce/logic/parser/HomerceParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
import seedu.homerce.logic.commands.revenue.ClearRevenueCommand;
import seedu.homerce.logic.commands.revenue.FindRevenueCommand;
import seedu.homerce.logic.commands.revenue.ListRevenueCommand;
import seedu.homerce.logic.commands.revenue.SortRevenueCommand;
import seedu.homerce.logic.commands.schedule.AbstractWeekCommand;
import seedu.homerce.logic.commands.schedule.NextWeekCommand;
import seedu.homerce.logic.commands.schedule.PreviousWeekCommand;
Expand All @@ -61,6 +62,7 @@
import seedu.homerce.logic.parser.expense.FindExpenseCommandParser;
import seedu.homerce.logic.parser.expense.SortExpenseCommandParser;
import seedu.homerce.logic.parser.revenue.FindRevenueCommandParser;
import seedu.homerce.logic.parser.revenue.SortRevenueCommandParser;
import seedu.homerce.logic.parser.schedule.ScheduleCommandParser;
import seedu.homerce.logic.parser.service.AddServiceCommandParser;
import seedu.homerce.logic.parser.service.DeleteServiceCommandParser;
Expand Down Expand Up @@ -167,6 +169,9 @@ public Command parseCommand(String userInput) throws ParseException {
case ClearRevenueCommand.COMMAND_WORD:
return new ClearRevenueCommand();

case SortRevenueCommand.COMMAND_WORD:
return new SortRevenueCommandParser().parse(arguments);

case AddAppointmentCommand.COMMAND_WORD:
return new AddAppointmentCommandParser().parse(arguments);

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/seedu/homerce/logic/parser/ParserUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -207,11 +207,11 @@ public static boolean parseOrder(String order) throws ParseException {
order = order.trim();
try {
if (!order.equals("asc") && !order.equals("desc")) {
throw new ParseException("Order should be either 'asc' or 'desc'");
throw new ParseException("ORDER should be either 'asc' or 'desc'");
}
return order.equals("asc");
} catch (NumberFormatException e) {
throw new ParseException("Order should be either 'asc' or 'desc'");
throw new ParseException("ORDER should be either 'asc' or 'desc'");
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package seedu.homerce.logic.parser.revenue;

import static seedu.homerce.commons.core.Messages.MESSAGE_INVALID_COMMAND_FORMAT;

import seedu.homerce.logic.commands.revenue.SortRevenueCommand;
import seedu.homerce.logic.parser.ParserUtil;
import seedu.homerce.logic.parser.exceptions.ParseException;

public class SortRevenueCommandParser {

/**
* Parses the given {@code String} of arguments in the context of the SortRevenueCommand
* and returns a SortRevenueCommand object for execution.
*
* @throws ParseException if the user input does not conform the expected format
*/
public SortRevenueCommand parse(String args) throws ParseException {
try {
boolean isAscending = ParserUtil.parseOrder(args);
return new SortRevenueCommand(isAscending);
} catch (ParseException pe) {
throw new ParseException(
String.format(MESSAGE_INVALID_COMMAND_FORMAT, SortRevenueCommand.MESSAGE_USAGE), pe);
}
}
}
2 changes: 1 addition & 1 deletion src/main/java/seedu/homerce/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public class ModelManager implements Model {
private final UserPrefs userPrefs;

private final FilteredList<Client> filteredClients;
private FilteredList<Expense> filteredExpenses;
private final FilteredList<Expense> filteredExpenses;
private final FilteredList<Service> filteredServices;
private final FilteredList<Revenue> filteredRevenue;
private final FilteredList<Appointment> filteredAppointments;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,16 @@ public interface ReadOnlyRevenueTracker {
* Returns an unmodifiable view of the revenue list.
*/
ObservableList<Revenue> getRevenueList();

/**
* Sorts the expense list.
*
* @param isAscending
*/
public void sortRevenueList(boolean isAscending);

/**
* Sorts the revenue list by date (default).
*/
public void sortDefaultRevenueList();
}
48 changes: 32 additions & 16 deletions src/main/java/seedu/homerce/model/manager/RevenueTracker.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@

import javafx.collections.ObservableList;
import seedu.homerce.model.revenue.Revenue;
import seedu.homerce.model.revenue.RevenueComparator;
import seedu.homerce.model.revenue.RevenueDefaultComparator;
import seedu.homerce.model.util.nonuniquelist.NonUniqueList;

/**
Expand All @@ -30,6 +32,29 @@ public RevenueTracker(ReadOnlyRevenueTracker toBeCopied) {
resetData(toBeCopied);
}

/**
* Sorts the revenue list by value.
*
* @param isAscending
*/
@Override
public void sortRevenueList(boolean isAscending) {
if (isAscending) {
revenues.sort(new RevenueComparator());
} else {
revenues.sort(new RevenueComparator().reversed());
;
}
}

/**
* Sorts the revenue list by date (default).
*/
@Override
public void sortDefaultRevenueList() {
revenues.sort(new RevenueDefaultComparator());
}

//// list overwrite operations

/**
Expand All @@ -51,17 +76,7 @@ public void setRevenues(List<Revenue> revenues) {
//// service-level operations

/**
* Replaces the given revenue {@code target} in the list with {@code editedRevenue}.
* {@code target} must exist in the SuperSalon.
* The service identity of {@code editedService} must not be the same as another existing service in the SuperSalon.
*/
public void setRevenues(Revenue target, Revenue editedRevenue) {
requireNonNull(editedRevenue);
revenues.setItem(target, editedRevenue);
}

/**
* Adds a revenues to the SuperSalon.
* Adds a revenues to the Homerce.
*/
public void addRevenue(Revenue r) {
revenues.add(r);
Expand All @@ -70,7 +85,7 @@ public void addRevenue(Revenue r) {

/**
* Removes {@code key} from this {@code ServiceManager}.
* {@code key} must exist in the SuperSalon.
* {@code key} must exist in the Homerce.
*/
public void removeRevenue(Revenue key) {
revenues.remove(key);
Expand All @@ -79,6 +94,7 @@ public void removeRevenue(Revenue key) {
public List<Revenue> filterByMonth(Predicate<Revenue> predicate) {
return revenues.stream().filter(x -> predicate.test(x)).collect(Collectors.toList());
}

public List<Revenue> filterByYear(Predicate<Revenue> predicate) {
return revenues.stream().filter(x -> predicate.test(x)).collect(Collectors.toList());
}
Expand All @@ -88,8 +104,8 @@ public List<Revenue> filterByYear(Predicate<Revenue> predicate) {
@Override
public String toString() {
return "Service Manager:\n"
+ revenues.stream().map(Revenue::toString).collect(Collectors.joining("\n"))
+ "\n Total number of activities: " + revenues.size();
+ revenues.stream().map(Revenue::toString).collect(Collectors.joining("\n"))
+ "\n Total number of activities: " + revenues.size();

}

Expand All @@ -101,8 +117,8 @@ public ObservableList<Revenue> getRevenueList() {
@Override
public boolean equals(Object other) {
return other == this // short circuit if same object
|| (other instanceof RevenueTracker // instanceof handles nulls
&& revenues.equals(((RevenueTracker) other).revenues));
|| (other instanceof RevenueTracker // instanceof handles nulls
&& revenues.equals(((RevenueTracker) other).revenues));
}

@Override
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/seedu/homerce/model/revenue/RevenueComparator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package seedu.homerce.model.revenue;

import java.util.Comparator;

public class RevenueComparator implements Comparator<Revenue> {

@Override
public int compare(Revenue revenue1, Revenue revenue2) {
return revenue1.getValue().value.compareTo(revenue2.getValue().value);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package seedu.homerce.model.revenue;

import java.util.Comparator;

public class RevenueDefaultComparator implements Comparator<Revenue> {

@Override
public int compare(Revenue revenue1, Revenue revenue2) {
if (revenue1.getDate().getLocalDate().isBefore(revenue2.getDate().getLocalDate())) {
return 1;
} else if (revenue1.getDate().getLocalDate().isAfter(revenue2.getDate().getLocalDate())) {
return -1;
} else {
return 0;
}
}
}

0 comments on commit 3987cda

Please sign in to comment.