PROJECT: slaveFinder()


Overview

slaveFinder() is a desktop address book application used for people in the HR department of a company to help them filter people and schedule interviews. It also helps with analytics of the hiring process in the company.

Summary of contributions

  • Major enhancement: added Interview scheduling

    • What it does: allows the user to schedule interviews with block out dates.

    • Justification: This feature improves the product significantly because a user can improve his/her productivity as the app can take over the task of scheduling to the app.

    • Highlights:

    • Credits:

  • Minor enhancement: Added a school field which helped in the ranking and filtering of individuals for interviews

  • Code contributed: https://nus-cs2103-ay1819s2.github.io/cs2103-dashboard/#search=weesoojun&sort=displayName&since=2019-02-10&until=2019-04-14&timeframe=day&reverse=false&repoSort=true

  • Other contributions:

    • Project management:

      • Managed release v1.3 on GitHub

    • Enhancements to existing features:

    • Documentation:

      • Updated Model Component image of slaveFinder()

    • Community:

      • PRs reviewed (with non-trivial review comments): #44

    • Tools:

      • Integrated TravisCI, Appveyor, Codacy, and Coveralls to team repo

Contributions to the User Guide

Given below are sections I contributed to the User Guide. They showcase my ability to write documentation targeting end-users.

Generate Interview Dates : generateInterviews

Generate interview dates for all applicants in slaveFinder(). Interview dates cannot be generated again if they are already present. Dates generated exclude weekends and block out dates(see below).

Generate Interview Dates for a particular job : generateInterviews jn/[JOB_NAME] Coming in v2.0

Generate interviews for applicants of a particular job in slaveFinder(). Interview dates cannot be generated again if they are already present. Dates generated exclude weekends and block out dates(see below).

Clear Interview Dates : clearInterviews

Clears the list of generated interview dates.

Clear Interview Dates for a specified job opening : clearInterviews jn/[JOB_NAME] Coming in v2.0

Clears the list of generated interview dates for the specified job.

Set maximum number of interviews a day : setMaxInterviewsADay [NUMBER]

Sets the maximum number of interviews to be generated in a day.

Set block out dates for interviews : setBlockOutDates [DD/MM/YYYY] OR [DD/MM/YYYY - DD/MM/YYYY] OR [DD/MM/YYYY], [DD/MM/YYYY - DD/MM/YYYY]

Sets the block out dates(unavailable dates) which the interviewer is not available for interviews to be scheduled.

Show interviews dates : showInterviews

Shows the list of dates which the interviewees in slaveFinder() are assigned. (Show is not considered an operation in terms of undo/redo, therefore when undo, the previous command before showInterviews is called)

Show interviews dates for a job opening : showInterviews jn/[JOB_NAME] Coming in v2.0

Shows the list of dates which the interviewees for the state job in slaveFinder() are assigned to.

Reschedule Person for interview: move jn/[JOB_NAME] nric/[NRIC] [FROM_DATE(dd/mm/yyyy)] [TO_DATE(dd/mm/yyyy)] Coming in v2.0

Reschedules a person scheduled to a particular date to another date. If to date is not present, the person is removed from that date.

Save interviews data Coming in v2.0

Scheduled interviews is automatically stored in a json file.

Contributions to the Developer Guide

Given below are sections I contributed to the Developer Guide. They showcase my ability to write technical documentation and the technical depth of my contributions to the project.

Model component

ModelClassDiagram
Figure 1. Structure of the Model Component

API : Model.java

The Model,

  • stores a UserPref object that represents the user’s preferences.

  • stores the Address Book data.

  • exposes an unmodifiable ObservableList<Person> that can be 'observed' e.g. the UI can be bound to this list so that the UI automatically updates when the data in the list change.

  • does not depend on any of the other three components.

  • InterviewScores stores the scores of the applicant and is used in considering an applicant for hiring.

  • NRIC is used as a unique identifier for an applicant.

  • School of the applicant (no restrictions on the input for this).

  • Race and Gender can only take specific values as spelled out in the user guide and it is used in the analytics portion of the app.

  • JobsApply should always be present when a for a person.

  • PastJobs, KnownProgLang and InterviewScores are optional.

  • PastJobs, KnownProgLang and Major stores values as strings therefore, "Engineer, Data Scientist" are stored as one PastJobs.

Interviews Feature

Current Implementation

The interviews and its functionalities are facilitated by the Interviews class. It is a private field present in the versionedAddressBook, to facilitate the integration of interviews and its functions with undo/redo operation in slaveFinder(). (Show is not counted as an operation and hence it is not saved as a state). The reason for using Calendar over LocalDate is that in v2.0, the app can be upgrade to schedule interviews for any time instead of only scheduling by days. The Interview class acts as an association class between calendar and person.

InterviewsAssociationClass

For the generate command. There are total 2 parameters that determines how the interviews list is generated. The 2 parameters are: maxInterviewsADay and blockOutDates. maxInterviewsADay determines the number of interviews that can be scheduled a day and it is saved in the interviews class blockOutDates are the user’s own block out dates which represent unavailable dates that the user is not free and therefore interviews cannot be scheduled. Another thing to note is that weekends are not considered in the scheduled as the user is assumed to have normal working hours from Monday to Friday.

Given below is the sequence diagram for generateInterviews:

GenerateInterviewsDiagram

An example of generateInterviews:

Step 1. User launches the application. The blockOutDates field in the interviews class is currently empty.

Step 2. User sets the block out dates with setBlockOutDates command. User does not change the max interviews a day and it is set to a default value of 2.

Step 3. User request for interviews to be generated.

Step 4. Interviews are generated with the restriction based on the parameters and working hours of a normal working adult.

Interviews also works with deletePerson, that is, when a person is deleted, he/she is also removed from his/her scheduled interview slots.

InterviewsDeletePersonSequenceDiagram

An example of deleting a person:

Step 1. User launches the application and generates interviews.

Step 2. User deletes the person from slaveFinder()

Step 3. Person is removed from his/her scheduled interview date

interviews.removePerson(p) is called. A collection of ArrayList of person is taken from the HashMap and since the collection is backed by the map, any changes to the collection will be reflected in the hashmap. Thus removal of person will be reflected in the hashmap. Therefore this method of removal was used.

|* * * |HR |arrange interview dates quickly |to be more efficient in finding the right person for the job

|* * * |HR |include block out dates in before scheduling interviews |to be more efficient in finding the right person for the job

Use case: Generate and show interview dates

MSS

  1. User requests to arrange interview dates for applicants in slaveFinder()

  2. slaveFinder() assigns to each interviewee a date

  3. User request for the interview dates list

    Use case ends.

Extensions

  • 1a. User wants to set block out dates so no dates are arranged on that day.

    • 1a1. Block out dates set using the command.

      Use case resumes at step 2.

  • 1b. User wants to set maximum interviews a day

    • 1b1. Max interviews a day set by using the command

      Use case resumes at step 2.

  • 3a. User is not satisfied with the dates

    • 3a1. User request to reassign a person to another date

    • 3a2. slaveFinder() reassigns that person

    • 3a3. slaveFinder() shows the updated interviews dates

      Use case ends.

Use case: Clear interview dates

MSS

  1. User request to clear interviews

  2. slaveFinder() clears interviews

    Use case ends.

Extensions

  • 3a. User wants to recover the cleared interviews through undo

  • 3b. slaveFinder() undos the clear interview operation

  • 3c. Previous interview dates are recovered.

    Use case ends.

For interviews test commands:

  • setMaxInterviewsADay 3

  • setBlockOutDates 22/04/2019 - 24/04/2019

  • generateInterviews

  • showInterviews

  • delete 1 (check that interviews works with delete)

  • showInterviews

  • clearInterviews

  • showInterviews

  • undo (check that interviews works with undo)

  • redo (check that interviews works with redo)