Skip to content

Commit

Permalink
Add track employee work hours function as part of v1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
h4ow3i committed Mar 16, 2024
1 parent f897d1b commit f2ce418
Show file tree
Hide file tree
Showing 17 changed files with 273 additions and 45 deletions.
1 change: 1 addition & 0 deletions src/main/java/seedu/address/logic/Messages.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ public class Messages {
public static final String MESSAGE_PERSONS_LISTED_OVERVIEW = "%1$d persons listed!";
public static final String MESSAGE_DUPLICATE_FIELDS =
"Multiple values specified for the following single-valued field(s): ";
public static final String MESSAGE_INVALID_HOURS_WORKED = "Hours clocked can only contain numbers and no spaces.";

/**
* Returns an error message indicating the duplicate prefixes.
Expand Down
10 changes: 5 additions & 5 deletions src/main/java/seedu/address/logic/commands/AddCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,18 +31,18 @@ public class AddCommand extends Command {
+ PREFIX_PHONE + "PHONE "
+ PREFIX_SEX + "SEX "
+ PREFIX_EMPLOYMENTTYPE + "EMPLOYMENT TYPE "
+ "[" + PREFIX_ADDRESS + "ADDRESS] "
+ "[" + PREFIX_BANKDETAILS + "BANK DETAILS] "
+ "[" + PREFIX_TAG + "TAG]...\n"
+ PREFIX_ADDRESS + "ADDRESS "
+ PREFIX_BANKDETAILS + "BANK DETAILS \n"
// + PREFIX_TAG + "TAG...\n"
+ "Example: " + COMMAND_WORD + " "
+ PREFIX_FIRSTNAME + "John "
+ PREFIX_LASTNAME + "Doe "
+ PREFIX_PHONE + "98765432 "
+ PREFIX_SEX + "m "
+ PREFIX_EMPLOYMENTTYPE + "ft "
+ PREFIX_ADDRESS + "311, Clementi Ave 2, #02-25 "
+ PREFIX_TAG + "friends "
+ PREFIX_TAG + "owesMoney";
+ PREFIX_BANKDETAILS + "0495858505";
// + PREFIX_TAG + "owesMoney";

public static final String MESSAGE_SUCCESS = "New person added: %1$s";
public static final String MESSAGE_DUPLICATE_PERSON = "This person already exists in the address book";
Expand Down
10 changes: 2 additions & 8 deletions src/main/java/seedu/address/logic/commands/EditCommand.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,7 @@
import seedu.address.logic.Messages;
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.person.Address;
import seedu.address.model.person.BankDetails;
import seedu.address.model.person.EmploymentType;
import seedu.address.model.person.Name;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;
import seedu.address.model.person.Sex;
import seedu.address.model.person.*;
import seedu.address.model.tag.Tag;

/**
Expand Down Expand Up @@ -79,7 +73,7 @@ private static Person createEditedPerson(Person personToEdit, EditPersonDescript
return new Person(new Name(""), new Name(""), new Phone(""), new Sex(""),
new EmploymentType(""),
new Address(""),
new BankDetails(""), new HashSet<>());
new BankDetails(""), new WorkHours(),new HashSet<>());
}

@Override
Expand Down
76 changes: 76 additions & 0 deletions src/main/java/seedu/address/logic/commands/HoursCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
package seedu.address.logic.commands;

import static java.util.Objects.requireNonNull;

import seedu.address.commons.util.ToStringBuilder;
import seedu.address.logic.commands.exceptions.CommandException;
import seedu.address.model.Model;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;
import seedu.address.model.person.WorkHours;

/**
* Adds work hours to a person in the address book.
*/
public class HoursCommand extends Command {

public static final String COMMAND_WORD = "hours";

public static final String MESSAGE_USAGE = COMMAND_WORD + ": Adds work hours to a person in the address book. "
+ "Parameters: <Phone> <Hours>\n"
+ "Example: " + COMMAND_WORD + " 98765432 5";

public static final String MESSAGE_SUCCESS = "%1$s has worked %2$d hours this week";
public static final String MESSAGE_PERSON_NOT_FOUND = "The person with phone number: %1$s does not exist";

private final Phone phoneNumber;
private final WorkHours hoursWorked;

/**
* Creates an HoursCommand to add work hours to the person with the specified phone number.
*/
public HoursCommand(Phone phoneNumber, WorkHours hoursWorked) {
requireNonNull(phoneNumber);
this.phoneNumber = phoneNumber;
this.hoursWorked = hoursWorked;
}

@Override
public CommandResult execute(Model model) throws CommandException {
requireNonNull(model);

Person personToUpdate = model.getPersonByPhoneNumber(phoneNumber);
if (personToUpdate == null) {
throw new CommandException(String.format(MESSAGE_PERSON_NOT_FOUND, phoneNumber));
}

personToUpdate.setHoursWorked(hoursWorked);
model.updatePerson(personToUpdate);

return new CommandResult(String.format(MESSAGE_SUCCESS, personToUpdate.getName(), hoursWorked.getHoursWorked()));

}

@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}

if (!(other instanceof HoursCommand)) {
return false;
}

HoursCommand otherCommand = (HoursCommand) other;
return phoneNumber.equals(otherCommand.phoneNumber)
&& hoursWorked == otherCommand.hoursWorked;
}

@Override
public String toString() {
return new ToStringBuilder(this)
.add("phoneNumber", phoneNumber)
.add("hoursWorked", hoursWorked)
.toString();
}
}
11 changes: 2 additions & 9 deletions src/main/java/seedu/address/logic/parser/AddCommandParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,7 @@

import seedu.address.logic.commands.AddCommand;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.person.Address;
import seedu.address.model.person.BankDetails;
import seedu.address.model.person.EmploymentType;
import seedu.address.model.person.Name;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;
import seedu.address.model.person.Sex;
import seedu.address.model.person.*;
import seedu.address.model.tag.Tag;


Expand Down Expand Up @@ -71,8 +65,7 @@ public AddCommand parse(String args) throws ParseException {
Set<Tag> tagList = ParserUtil.parseTags(argMultimap.getAllValues(PREFIX_TAG));

Person person = new Person(firstName, lastName, phone, sex, employmentType, address,
bankDetails,
tagList);
bankDetails, new WorkHours(), tagList);

return new AddCommand(person);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import seedu.address.logic.commands.FindCommand;
import seedu.address.logic.commands.HelpCommand;
import seedu.address.logic.commands.ListCommand;
import seedu.address.logic.commands.HoursCommand;
import seedu.address.logic.parser.exceptions.ParseException;

/**
Expand Down Expand Up @@ -77,6 +78,9 @@ public Command parseCommand(String userInput) throws ParseException {
case HelpCommand.COMMAND_WORD:
return new HelpCommand();

case HoursCommand.COMMAND_WORD:
return new HoursCommandParser().parse(arguments);

default:
logger.finer("This user input caused a ParseException: " + userInput);
throw new ParseException(MESSAGE_UNKNOWN_COMMAND);
Expand Down
1 change: 1 addition & 0 deletions src/main/java/seedu/address/logic/parser/CliSyntax.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,6 @@ public class CliSyntax {
public static final Prefix PREFIX_ADDRESS = new Prefix("-a ");
public static final Prefix PREFIX_BANKDETAILS = new Prefix("-b ");
public static final Prefix PREFIX_TAG = new Prefix("-t ");
public static final Prefix PREFIX_HOURS = new Prefix("-hours");

}
36 changes: 36 additions & 0 deletions src/main/java/seedu/address/logic/parser/HoursCommandParser.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package seedu.address.logic.parser;

import static seedu.address.logic.Messages.MESSAGE_INVALID_COMMAND_FORMAT;
import static seedu.address.logic.Messages.MESSAGE_INVALID_HOURS_WORKED;

import seedu.address.logic.commands.HoursCommand;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.person.Phone;
import seedu.address.model.person.WorkHours;

import java.util.stream.Stream;

/**
* Parses input arguments and creates a new HoursCommand object
*/
public class HoursCommandParser implements Parser<HoursCommand> {

/**
* Parses the given {@code String} of arguments in the context of the HoursCommand
* and returns a HoursCommand object for execution.
*
* @throws ParseException if the user input does not conform the expected format
*/
public HoursCommand parse(String args) throws ParseException {
String[] tokens = args.trim().split("\\s+");
if (tokens.length != 2) {
throw new ParseException(String.format(MESSAGE_INVALID_COMMAND_FORMAT, HoursCommand.MESSAGE_USAGE));
}

Phone phoneNumber = ParserUtil.parsePhone(tokens[0]);
WorkHours hoursWorked;
hoursWorked = ParserUtil.parseWorkHours(tokens[1]);

return new HoursCommand(phoneNumber, hoursWorked);
}
}
22 changes: 16 additions & 6 deletions src/main/java/seedu/address/logic/parser/ParserUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,7 @@
import seedu.address.commons.core.index.Index;
import seedu.address.commons.util.StringUtil;
import seedu.address.logic.parser.exceptions.ParseException;
import seedu.address.model.person.Address;
import seedu.address.model.person.BankDetails;
import seedu.address.model.person.EmploymentType;
import seedu.address.model.person.Name;
import seedu.address.model.person.Phone;
import seedu.address.model.person.Sex;
import seedu.address.model.person.*;
import seedu.address.model.tag.Tag;

/**
Expand Down Expand Up @@ -154,4 +149,19 @@ public static Set<Tag> parseTags(Collection<String> tags) throws ParseException
}
return tagSet;
}

public static WorkHours parseWorkHours(String workHours) throws ParseException {
requireNonNull(workHours);
String trimmedWorkHours = workHours.trim();
try {
int hours = Integer.parseInt(trimmedWorkHours);
if (hours < 0) {
throw new ParseException("Work hours cannot be negative");
}
return new WorkHours(hours);
} catch (NumberFormatException e) {
throw new ParseException(WorkHours.MESSAGE_CONSTRAINTS);
}
}

}
13 changes: 13 additions & 0 deletions src/main/java/seedu/address/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import javafx.collections.ObservableList;
import seedu.address.commons.core.GuiSettings;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;

/**
* The API of the Model component.
Expand Down Expand Up @@ -84,4 +85,16 @@ public interface Model {
* @throws NullPointerException if {@code predicate} is null.
*/
void updateFilteredPersonList(Predicate<Person> predicate);

/**
* Returns a person with the given phone number.
* Returns {@code null} if no person with the given phone number is found.
*/
Person getPersonByPhoneNumber(Phone phoneNumber);

/**
* Updates the details of the specified person in the address book with the details of the updated person.
* @param personToUpdate The person to be updated.
*/
void updatePerson(Person personToUpdate);
}
18 changes: 18 additions & 0 deletions src/main/java/seedu/address/model/ModelManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import seedu.address.commons.core.GuiSettings;
import seedu.address.commons.core.LogsCenter;
import seedu.address.model.person.Person;
import seedu.address.model.person.Phone;

/**
* Represents the in-memory model of the address book data.
Expand Down Expand Up @@ -145,4 +146,21 @@ public boolean equals(Object other) {
&& filteredPersons.equals(otherModelManager.filteredPersons);
}

@Override
public Person getPersonByPhoneNumber(Phone phoneNumber) {
requireNonNull(phoneNumber);
for (Person person : addressBook.getPersonList()) {
if (person.getPhone().equals(phoneNumber)) {
return person;
}
}
return null; // Return null if the person is not found
}

@Override
public void updatePerson(Person personToUpdate) {
requireNonNull(personToUpdate);
addressBook.setPerson(personToUpdate, personToUpdate);
}

}
12 changes: 11 additions & 1 deletion src/main/java/seedu/address/model/person/Person.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,14 @@ public class Person {
private final Address address;
private final BankDetails bankDetails;
private final Set<Tag> tags = new HashSet<>();
private WorkHours hoursWorked;

/**
* Every field must be present and not null.
*/
public Person(Name firstName, Name lastName, Phone phone, Sex sex,
EmploymentType employmentType, Address address,
BankDetails bankDetails, Set<Tag> tags) {
BankDetails bankDetails, WorkHours hoursWorked, Set<Tag> tags) {
requireAllNonNull(firstName, lastName, phone, address, bankDetails, tags);
this.firstName = firstName;
this.lastName = lastName;
Expand All @@ -43,6 +44,7 @@ public Person(Name firstName, Name lastName, Phone phone, Sex sex,
this.address = address;
this.bankDetails = bankDetails;
this.tags.addAll(tags);
this.hoursWorked = hoursWorked;
}

public Name getName() {
Expand Down Expand Up @@ -77,6 +79,14 @@ public BankDetails getBankDetails() {
return bankDetails;
}

public WorkHours getWorkHours() {
return hoursWorked;
}

public void setHoursWorked(WorkHours hoursWorked) {
this.hoursWorked = hoursWorked;
}

/**
* Returns an immutable tag set, which throws {@code UnsupportedOperationException}
* if modification is attempted.
Expand Down
Loading

0 comments on commit f2ce418

Please sign in to comment.