PROJECT: slaveFinder()


Overview

slaveFinder() is a resume management application that helps recruiters manage most of the hiring process. It allows recruiters to easily look for quality job applicants through convenient filtering of resumes' various fields, and sort these applicants into different parts of the selection process. Other features include automated scheduling of interviews based on recruiter’s availability and analytics of job applicants.

Summary of contributions

  • Major enhancement 1: added Analytics feature end-to-end

    • What it does:

      • Consolidates and breaksdown the various fields data of applicants, such as gender breakdown, number of applicants in each school, number of applicants in each major and average grade.

      • Analytics can be done on specific lists in the selection process, such as only on applicants that were interviewed or selected for the job. analytics applicant, analytics kiv, analytics interview, analytics shortlist, analytics

    • Justification:

      • Recruiters often want to know the quality of applicants that apply to their company, and use this data to improve their hiring process or recruit marketing strategies.

      • Furthermore, many companies are concerned about diviersity in their team. Such analytics can inform them if they are getting (or selecting) a sufficiently diversed pool of applicants.

    • Highlights: In addition to processing the various fields data in corresponding lists, analytics data is presented in a visually intuitive manner consisting of different charts to suit the nature of the person field.

      analytics
  • Major enhancement 2: restructured the original AB4 UI code to suit the context of slaveFinder(), and provide UI component for various commands added by other team members.

    • What it does:

      • Consist of two scenes: First scene shows 2 panels consisting of a list of all applicants and a list of all job openings. Second scene shows 4 panels, each representing a specific part in the hiring process for a specific job opening: "Applicants, KIV, Interviewed, Shortlist".

      • Filtering of applicants through field data is also shown visually on software, where filtered keywords are "stored" (and removed when needed) above the corresponding lists.

    • Justification: Being able to filter applicants and sort them according to the selection process is the core value add of our software, and hence essential to be visually represented and for user to interact with each list accordingly.

    • Highlights: Enable UI for the following commands:

      • DisplayJob: Switch UI scene to show 4 panels for specific job

      • list: Switch UI scene to show all applicants and all job openings

      • filter: Filter keywords stored above corresponding lists

      • deleteFilter & clearFilter: remove filter keywords stored above corresponding lists

      • movePerson, addPerson: allows Person to be moved and displayed at various list on the applicantsPanel, kivPanel, interviewPanel, shortListPanel

      • createJob: allows new job to be added as a JobCard on the JobsPanel

      • analytics: new window that displays analytics data on different charts.

  • Minor enhancement: Added Person Fields: Gender, Race, NRIC, Grade, InterviewScores, JobApply, as required by resumes of job applicants (#85)

  • Minor enhancement: Make person field NRIC the unique identifier of Person and create UniqueNRICMap to allow convenient obtaining of Person via NRIC. (#85)

  • Minor enhancement: Enhance list command to list both jobs and persons. (#200)

  • Code contributed: Functional and Tests

  • Other contributions:

    • Enhancements to existing features:

      • Updated the GUI color scheme (#200)

      • Wrote additional tests to increase coverage by 4% (#247, (#85)

    • Documentation:

      • Update the UI component class diagram and Sequence Diagram in DG and enhance existing contents in UG. (#256, #238, #239, #201, #110)

    • Community:

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

      • Reported bugs and suggestions for other teams in class (1, 2, 3, 4, 5, 6)

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.

Display Analytics : analytics

Display the analytics of applicants for desired job list (applicant, kiv, interview, shortlist) or all applicants.
Format : analytics LISTNAME or analytics (for all applicants)

  • LISTNAME indicate which Job list this command will be used.

  • LISTNAME can are the names of job lists such as "applicant", "kiv", "interview", "shortlist".

  • If no LISTNAME is entered, the analytis of all applicants in the slave system will be shown.

  • If have never used the DisplayJob command before, using analytics LISTNAME will be empty analytics.

  • If on all applicants and all jobs page, analytics LISTNAME will display analytics on the job last displayed using command DisplayJob

Examples:

  • analytics applicant

  • analytics kiv

  • analytics

Introduction

slaveFinder() is a resume management application that helps recruiters manage most of the hiring process.
The application is optimized for those who prefer to work with a Command Line Interface (CLI) while still having the benefits of a Graphical User Interface (GUI). If you can type fast, slaveFinder() can get your resume management tasks done faster than traditional GUI apps.
Interested? Jump to the [Quick Start] to get started or [Command Summary] for the list of commands. Enjoy!

  1. Some example commands you can try:

    • add n/John p/91757536 nric/S8761230Q e/john@example.com a/123 Disneyland g/Male r/Malay m/Psychology s/NUS gr/4.33 j/Manager: adds a person named John to all applicants database.

    • createJob jn/Manager: creates new job opening Manager.

    • addAll a jn/Manager : adds all applicants in the database to the applicants list of job Manager.

    • displayJob jn/Manager: displays the selection process for job opening Manager

    • list : Goes back to the list of all applicants and job openings.

Adding a person: add

Adds a person to slaveFinder()
Format: add n/NAME p/PHONE_NUMBER nric/NRIC e/EMAIL a/ADDRESS g/GENDER r/RACE m/MAJOR s/SCHOOL gr/GRADE j/JOBS_APPLY

  • n/: Name should only contain alphanumeric characters and spaces, and should not be empty.

  • a/: Address can take any values, but should not be empty.

  • nric/: NRIC must be unique. It must start with S, followed by exactly 7 numbers, and end with an alpabet in capital letter. It should not be empty.

  • p/: Phone numbers should only contain numbers, and it should be at least 3 digits long, and should not be empty.

  • e/: Email should be of the format local-part@domain, and should not be empty. "E.g. example@gmail.com"

  • g/: Gender should only be "Female", "Male" or "Others", and should not be empty.

  • r/: Race should only be "Chinese", "Malay", "Indian" or "Others", and should not be empty.

  • gr/: Grade should only contain positive numbers, and must be in exactly 2 decimal place. E.g. "4.64"

  • s/: School can take any values, but should not be empty.

  • m/: Major should only contain alphanumeric characters and spaces, and should not be empty.

  • j/: Jobs Apply must only contain one word. If two or more words, have to be connected by a dash. E.g. "Software-Engineer". It should not be empty. It can take more than 1 value. E.g. "j/Manager j/Sweeper"

  • is/: Interview scores field is optional, and must be exactly 5 set of numbers, each seperated by a comma. E.g. "1,2,3,4,5"

  • kpl/: Known Programming Language field is optional. It can take any values, and can take more than 1 value. E.g. "kpl/Java kpl/Python"

  • pj/: Past jobs field is optional, and past job must only contain one word. If two or more words, have to be connected by a dash. E.g. "Software-Engineer". It can take more than 1 value E.g. "pj/Manager pj/Sweeper"

Examples:

  • add n/John p/91757536 nric/S8761230Q e/john@example.com a/123 Disneyland g/Male r/Malay m/Psychology s/NUS gr/4.33 j/Manager

  • add n/Betty p/123 nric/S4444455Y e/betty@bet.com a/321 USS g/Female r/Others m/Life Science s/NTU gr/0.44 j/Helper is/1,2,1,10,5 kpl/Java pj/Chief-Executive-Officer

Undoing previous command : undo

Restores slaveFinder() to the state before the previous undoable command was executed.
Format: undo

Undoable commands: those commands that modify slaveFinder()'s content (add, delete, edit, clear, createJob, deleteJob, generateInterviews, setMaxInterviewsADay, setBlockOutDates, clearInterviews, filter, deleteFilter).

Examples:

  • edit 1 n/Johnny
    list
    undo (reverses the edit 1 n/Johnny command)

Redoing the previously undone command : redo

Reverses the most recent undo command.
Format: redo

Examples:

  • edit 1 n/Johnny
    undo (reverses the edit 1 n/Johnny command)
    redo (reapplies the edit 1 n/Johnny command)

  • edit 1 n/Johnny
    redo
    The redo command fails as there are no undo commands executed previously.

  • edit 1 n/Johnny
    clear
    undo (reverses the clear command)
    undo (reverses the edit 1 n/Johnny command)
    redo (reapplies the edit 1 n/Johnny command)
    redo (reapplies the clear command)

Editing a person : edit

Edits an existing person in slaveFinder().
Format: edit INDEX n/NAME p/PHONE_NUMBER nric/NRIC e/EMAIL a/ADDRESS g/GENDER r/RACE m/MAJOR s/SCHOOL gr/GRADE j/JOBS_APPLY

  • Edits the person at the specified INDEX. The index refers to the index number shown in the displayed person list. The index must be a positive integer 1, 2, 3, …​

  • Editting fields that allows more than 1 value will entirely replace the existing values.

  • Existing values will be updated to the input values.

Examples:

  • edit 1 p/91234567 e/johndoe@example.com
    Edits the phone number and email address of the 1st person to be 91234567 and johndoe@example.com respectively.

  • edit 2 n/Betsy Crower pj/Manager
    Edits the name of the 2nd person to be Betsy Crower and clears all existing past jobs and replace it with 'Manager".

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.

Analytics Feature

Current Implementation

The analytics is facilicated by the Analytics class. Analytics data are generated in real time depending on the specific job currently on display in the software by the user. Hence it will not be saved as states in the versionedAddressBook. It pulls required person list to generate data from Model, which consists of lists: displayedFilter, activeJobAllApplicants, activeJobKiv, activeJobInterview, activeJobShortist. An Analytics object will be created by Analytics class, storing the various required data generated, and pass it to Logic and UI for display.

Given below is the sequence diagram for analytics:

AnalyticsDiagram

UI component

UiComponentClassDiagram
Figure 1. Structure of the UI Component

API : Ui.java

The UI consists of a MainWindow that is made up of parts e.g.CommandBox, ResultDisplay, PersonListPanel, StatusBarFooter, JobListPanel etc. All these, including the MainWindow, inherit from the abstract UiPart class.

The UI component uses JavaFx UI framework. The layout of these UI parts are defined in matching .fxml files that are in the src/main/resources/view folder. For example, the layout of the MainWindow is specified in MainWindow.fxml

The UI component,

  • Executes user commands using the Logic component.

  • Listens for changes to Model data so that the UI can be updated with the modified data.

Use case: View Analytics

MSS

  1. User requests to display various lists of applicants from one of the jobs in all job openings lists

  2. slaveFinder() shows lists of persons for specific job

  3. User requests to view analytics for specific list of persons

  4. slaveFinder() shows analytics results

    Use case ends.