diff --git a/src/main/java/org/codedifferently/Main.java b/src/main/java/org/codedifferently/Main.java deleted file mode 100644 index 435139b..0000000 --- a/src/main/java/org/codedifferently/Main.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.codedifferently; - -//TIP To Run code, press or -// click the icon in the gutter. -public class Main { - public static void main(String[] args) { - //TIP Press with your caret at the highlighted text - // to see how IntelliJ IDEA suggests fixing it. - System.out.printf("Hello and welcome!"); - - for (int i = 1; i <= 5; i++) { - //TIP Press to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing . - System.out.println("i = " + i); - } - } -} \ No newline at end of file diff --git a/src/main/java/org/codedifferently/christopherbennett/Main.java b/src/main/java/org/codedifferently/christopherbennett/Main.java new file mode 100644 index 0000000..bfcc934 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/Main.java @@ -0,0 +1,12 @@ +package org.codedifferently.christopherbennett; + +import org.codedifferently.christopherbennett.menus.MainMenu; + +//TIP To Run code, press or +// click the icon in the gutter. +public class Main { + public static void main(String[] args) { + MainMenu mainMenu = new MainMenu(); + mainMenu.promptMainMenu(); + } +} \ No newline at end of file diff --git a/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java b/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java new file mode 100644 index 0000000..0edc676 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/MaintenanceOffice.java @@ -0,0 +1,61 @@ +package org.codedifferently.christopherbennett; + +import org.codedifferently.christopherbennett.data.MaintenanceRequest; +import org.codedifferently.christopherbennett.data.Technician; +import org.codedifferently.christopherbennett.enums.EActivity; +import org.codedifferently.christopherbennett.enums.EStatusUpdate; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; + +public class MaintenanceOffice { + + public void assignTechs(List requests, List techs) { + + //Sort requests by severity + requests.sort(Comparator.comparing(MaintenanceRequest::getSeverity).reversed()); + + //Sort techs by highest level of seniority. + techs.sort(Comparator.comparing(Technician::getProfessionLevel).reversed()); + + int techCounter = 0; + int requestCounter = 0; + while(techCounter < techs.size() && requestCounter < requests.size()) { + + //ignore already done requests + if(requests.get(techCounter).getStatus() == EStatusUpdate.DONE) { + requestCounter++; + continue; + } + + //print statement + System.out.println("[" + requests.get(requestCounter).getApartmentNumber() + + "] Severity " + + requests.get(requestCounter).getSeverity() + + " -> Assigned to " + techs.get(techCounter).getName()); + + //update statuses + requests.get(requestCounter).setStatus(EStatusUpdate.INPROGRESS); + techs.get(techCounter).setActivity(EActivity.Working); + + techs.get(techCounter).setRequest(requests.get(requestCounter)); + + //Increment request and tech counters; + requestCounter++; + techCounter++; + } + System.out.println(); + } + + public void techCompleteTasks(List techs) { + for(int i = 0; i < techs.size(); i++) { + techs.get(i).setActivity(EActivity.Idle); + + if(techs.get(i).getRequest() != null) { + techs.get(i).getRequest().setStatus(EStatusUpdate.DONE); + } + + } + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java b/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java new file mode 100644 index 0000000..1186aa2 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/data/MaintenanceRequest.java @@ -0,0 +1,64 @@ +package org.codedifferently.christopherbennett.data; + +import org.codedifferently.christopherbennett.enums.EIssueType; +import org.codedifferently.christopherbennett.enums.EStatusUpdate; + +public class MaintenanceRequest { + private String tenantName; + private String apartmentNumber; + private EIssueType issueType; + private int severity; + private EStatusUpdate status = EStatusUpdate.NEW; + + + public MaintenanceRequest(String tenantName, String apartmentNumber, EIssueType issueType, int severity) { + this.tenantName = tenantName; + this.apartmentNumber = apartmentNumber; + this.issueType = issueType; + this.severity = severity; + } + + public String getTenantName() { + return tenantName; + } + + public void setTenantName(String tenantName) { + this.tenantName = tenantName; + } + + public String getApartmentNumber() { + return apartmentNumber; + } + + public void setApartmentNumber(String apartmentNumber) { + this.apartmentNumber = apartmentNumber; + } + + public EIssueType getIssueType() { + return issueType; + } + + public void setIssueType(EIssueType issueType) { + this.issueType = issueType; + } + + public int getSeverity() { + return severity; + } + + public void setSeverity(int severity) { + if(severity > 5) { + System.out.println("Max severity is 5!!"); + severity = 5; + } + this.severity = severity; + } + + public EStatusUpdate getStatus() { + return status; + } + + public void setStatus(EStatusUpdate status) { + this.status = status; + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/data/Technician.java b/src/main/java/org/codedifferently/christopherbennett/data/Technician.java new file mode 100644 index 0000000..a307a20 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/data/Technician.java @@ -0,0 +1,48 @@ +package org.codedifferently.christopherbennett.data; + +import org.codedifferently.christopherbennett.enums.EActivity; +import org.codedifferently.christopherbennett.enums.EProfessionLevel; + +public class Technician { + private String name; + private int age; + private EProfessionLevel professionLevel; + private EActivity activity; + private MaintenanceRequest request; + + + public Technician(String name, int age, EProfessionLevel professionLevel, EActivity activity) { + this.name = name; + this.age = age; + this.professionLevel = professionLevel; + this.activity = activity; + } + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public EProfessionLevel getProfessionLevel() { + return professionLevel; + } + + public EActivity getActivity() { + return activity; + } + + public void setActivity(EActivity activity) { + this.activity = activity; + } + + public void setRequest(MaintenanceRequest request) { + this.request = request; + } + + public MaintenanceRequest getRequest() { + return request; + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java b/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java new file mode 100644 index 0000000..1f1020a --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/data/UpdateRequest.java @@ -0,0 +1,24 @@ +package org.codedifferently.christopherbennett.data; + +import java.util.List; + +public class UpdateRequest { + List technicianList; + List maintenanceRequestList; + + public List getMaintenanceRequestList() { + return maintenanceRequestList; + } + + public List getTechnicianList() { + return technicianList; + } + + public void setTechnicianList(List technicianList) { + this.technicianList = technicianList; + } + + public void setMaintenanceRequestList(List maintenanceRequestList) { + this.maintenanceRequestList = maintenanceRequestList; + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java b/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java new file mode 100644 index 0000000..00aa818 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/enums/EActivity.java @@ -0,0 +1,7 @@ +package org.codedifferently.christopherbennett.enums; + +public enum EActivity { + Idle, + Working, + OnBreak, +} diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java b/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java new file mode 100644 index 0000000..ef163c2 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/enums/EIssueType.java @@ -0,0 +1,8 @@ +package org.codedifferently.christopherbennett.enums; + +public enum EIssueType { + Electrical, + Plumbing, + HVAC, + Other +} diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java b/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java new file mode 100644 index 0000000..87e0511 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/enums/EProfessionLevel.java @@ -0,0 +1,7 @@ +package org.codedifferently.christopherbennett.enums; + +public enum EProfessionLevel { + Junior, + MidLevel, + Senior +} diff --git a/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java b/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java new file mode 100644 index 0000000..766a4d2 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/enums/EStatusUpdate.java @@ -0,0 +1,7 @@ +package org.codedifferently.christopherbennett.enums; + +public enum EStatusUpdate { + NEW, + INPROGRESS, + DONE +} diff --git a/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java b/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java new file mode 100644 index 0000000..0135df9 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/helpers/InputHandler.java @@ -0,0 +1,76 @@ +package org.codedifferently.christopherbennett.helpers; + +import org.codedifferently.christopherbennett.enums.EIssueType; + +import java.util.Scanner; + +public class InputHandler { + + public static int handleIntegerInput() { + Scanner scan = new Scanner(System.in); + int scanInput = 0; + boolean validScanInput = false; + //While loop to make sure user puts in the correct input + while(!validScanInput) { + //Call Scanner methods + try { + //Scanner method to collect input + scanInput = scan.nextInt(); + validScanInput = true; + } + catch (Exception e) { + //If user enters invalid input, the catch block will prevent errors. + System.out.println("Invalid input! Try typing a number instead of a String!"); + scan.next(); + } + } + return scanInput; + } + + public static String handleStringInput() { + Scanner scan = new Scanner(System.in); + String scanInput = ""; + boolean validScanInput = false; + //While loop to make sure user puts in the correct input + while(!validScanInput) { + //Call Scanner methods + try { + //Scanner method to collect input + scanInput = scan.nextLine(); + validScanInput = true; + } + catch (Exception e) { + //If user enters invalid input, the catch block will prevent errors. + System.out.println("Invalid input! Try typing a valid String!"); + scan.next(); + } + } + return scanInput; + } + + public static EIssueType handleEnumInput(EIssueType[] validOptions) { + Scanner scan = new Scanner(System.in); + EIssueType result = null; + + while (result == null) { + String scanInput = scan.nextLine().trim(); + + for (int i = 0; i < validOptions.length; i++) { + if (scanInput.equalsIgnoreCase(validOptions[i].name())) { + result = validOptions[i]; + break; + } + } + + if (result == null) { + System.out.println("Invalid input! Valid options are:"); + for (EIssueType option : validOptions) { + System.out.println(" - " + option.name()); + } + } + } + + return result; + } + +} diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java new file mode 100644 index 0000000..eb7a069 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/menus/MainMenu.java @@ -0,0 +1,80 @@ +package org.codedifferently.christopherbennett.menus; + +import org.codedifferently.christopherbennett.MaintenanceOffice; +import org.codedifferently.christopherbennett.data.MaintenanceRequest; +import org.codedifferently.christopherbennett.data.Technician; +import org.codedifferently.christopherbennett.enums.EActivity; +import org.codedifferently.christopherbennett.enums.EProfessionLevel; +import org.codedifferently.christopherbennett.helpers.InputHandler; + +import java.util.ArrayList; +import java.util.List; + +public class MainMenu { + + private ArrayList technicians; + private ArrayList requests; + + public void promptMainMenu() { + + //Initialization + initializeFields(); + boolean inMainMenu = true; + + //Initialize Menus + RequestMenu requestMenu = new RequestMenu(); + TechMenu techMenu = new TechMenu(); + ReportMenu reportMenu = new ReportMenu(); + MaintenanceOffice maintenanceOffice = new MaintenanceOffice(); + + //Main Loop + while(inMainMenu) { + System.out.println("===== MAINTENANCE REQUEST TRACKER =====\n"); + System.out.println("1. Add New Request"); + System.out.println("2. Monitor Technicians"); + System.out.println("3. Daily Report"); + System.out.println("4. Exit"); + + int inputCode = InputHandler.handleIntegerInput(); + + switch(inputCode) { + case 1: + //Add all new requests once finished + List newRequests = requestMenu.promptRequestMenu(); + requests.addAll(newRequests); + maintenanceOffice.assignTechs(requests, technicians); + break; + case 2: + techMenu.promptTechMenu(technicians, requests); + maintenanceOffice.techCompleteTasks(technicians); + break; + case 3: + reportMenu.promptReportMenu(requests); + break; + case 4: + System.out.println("Have a nice day!"); + inMainMenu = false; + break; + default: + System.out.println("Not a valid Integer Input!"); + break; + } + } + } + + + public void initializeFields() { + Technician tech1 = new Technician("Jordan", 34, EProfessionLevel.Senior, EActivity.Idle); + Technician tech2 = new Technician("Coreye'", 25, EProfessionLevel.MidLevel, EActivity.OnBreak); + Technician tech3 = new Technician("Glenn", 27, EProfessionLevel.Junior, EActivity.Working); + Technician tech4 = new Technician("Bryant", 24, EProfessionLevel.Junior, EActivity.Idle); + + technicians = new ArrayList<>(); + technicians.add(tech1); + technicians.add(tech2); + technicians.add(tech3); + technicians.add(tech4); + + requests = new ArrayList<>(); + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java new file mode 100644 index 0000000..9b5890c --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/menus/ReportMenu.java @@ -0,0 +1,78 @@ +package org.codedifferently.christopherbennett.menus; + +import org.codedifferently.christopherbennett.data.MaintenanceRequest; +import org.codedifferently.christopherbennett.enums.EIssueType; +import org.codedifferently.christopherbennett.enums.EStatusUpdate; +import org.codedifferently.christopherbennett.helpers.InputHandler; + +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public class ReportMenu { + public void promptReportMenu(List requests) { + System.out.println("===== DAILY REPORT =====\n"); + + System.out.println("Total Requests: " + requests.size()); + int openCounter = 0; + int closedCounter = 0; + int lowSeverityCount = 0; + int highSeverityCount = 0; + + HashMap commonCountMap = new HashMap(); + + for(int i = 0; i < requests.size(); i++) { + MaintenanceRequest request = requests.get(i); + + if(request.getStatus() == EStatusUpdate.DONE) { + closedCounter++; + } + else { + openCounter++; + } + + if(request.getSeverity() >= 4) { + highSeverityCount++; + } + else { + lowSeverityCount++; + } + + //update hashMap + if(commonCountMap.containsKey(request.getIssueType())) { + commonCountMap.put(request.getIssueType(), commonCountMap.get(request.getIssueType()) + 1); + } + else { + commonCountMap.put(request.getIssueType(), 1); + } + } + + int maxIssueCount = 0; + EIssueType mostCommonIssue = EIssueType.Other; + + //max pattern for EIssueType + for(EIssueType eIssueType : commonCountMap.keySet()) { + + if(commonCountMap.get(eIssueType) > maxIssueCount) { + maxIssueCount = commonCountMap.get(eIssueType); + mostCommonIssue = eIssueType; + } + + } + + System.out.println("Requests open: " + openCounter); + System.out.println("Requests closed: " + closedCounter); + System.out.println("Low Severity Requests (1-3): " + lowSeverityCount); + System.out.println("High Severity Requests (4-5): " + highSeverityCount); + + if(highSeverityCount > 3) + { + System.out.println("OVERLOAD DETECTED!! MANY HIGH SEVERITY REQUESTS WERE FOUND TODAY!"); + } + System.out.println("Most Common Issue: " + mostCommonIssue); + System.out.println(); + + System.out.println("Type anything to continue:"); + InputHandler.handleStringInput(); + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java new file mode 100644 index 0000000..794ae3e --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/menus/RequestMenu.java @@ -0,0 +1,57 @@ +package org.codedifferently.christopherbennett.menus; + +import org.codedifferently.christopherbennett.data.MaintenanceRequest; +import org.codedifferently.christopherbennett.enums.EIssueType; +import org.codedifferently.christopherbennett.helpers.InputHandler; + +import java.util.ArrayList; +import java.util.List; + +public class RequestMenu { + + public List promptRequestMenu() { + + ArrayList requests = new ArrayList(); + + boolean inRequestMenu = true; + while(inRequestMenu) { + System.out.println("===== NEW REQUEST TRACKER =====\n"); + System.out.println("Enter tenant name (or 'done' to stop):"); + String inputStr = InputHandler.handleStringInput(); + + if(inputStr.equals("done")) + { + System.out.println("Exiting out of Request Tracker."); + inRequestMenu = false; + break; + } + + System.out.println("Enter apartment number:"); + String apartmentStr = InputHandler.handleStringInput(); + + System.out.println("Enter issue type: (Electrical/Plumbing/HVAC/Other)"); + + EIssueType[] issueOptions = {EIssueType.Electrical, EIssueType.HVAC, EIssueType.Plumbing, EIssueType.Other}; + EIssueType issueStr = InputHandler.handleEnumInput(issueOptions); + + System.out.println("Enter severity (1-5):"); + int severityCode = InputHandler.handleIntegerInput(); + + System.out.println("✔ Request logged."); + + if(severityCode >= 4 && issueStr == EIssueType.Electrical) { + System.out.println("⚠ WARNING: High-severity electrical issue. Safety risk — inspect immediately."); + } + + if(severityCode >= 5) { + System.out.println("\uD83D\uDEA8 SEVERITY 5 DETECTED — Dispatching technician immediately!"); + } + + MaintenanceRequest request = new MaintenanceRequest(inputStr, apartmentStr, issueStr, severityCode); + + requests.add(request); + } + + return requests; + } +} diff --git a/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java b/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java new file mode 100644 index 0000000..e0629a7 --- /dev/null +++ b/src/main/java/org/codedifferently/christopherbennett/menus/TechMenu.java @@ -0,0 +1,37 @@ +package org.codedifferently.christopherbennett.menus; + +import org.codedifferently.christopherbennett.data.MaintenanceRequest; +import org.codedifferently.christopherbennett.data.Technician; +import org.codedifferently.christopherbennett.helpers.InputHandler; + +import java.util.List; + +public class TechMenu { + public void promptTechMenu(List technicianList, List requests) { + + System.out.println("====== PENDING REQUESTS ======"); + + for(int i = 0; i < requests.size(); i++) { + MaintenanceRequest request = requests.get(i); + System.out.print((i+1) + ". [" + request.getApartmentNumber()); + System.out.print("] | Tenant: " + request.getTenantName() + + " | Severity: " + request.getSeverity() + " | Issue: "); + System.out.print(request.getIssueType() + " | Status: " + request.getStatus()); + System.out.println(); + } + + System.out.println("===== TECHNICIAN WATCH =====\n"); + + for(int i = 0; i < technicianList.size(); i++) { + Technician tech = technicianList.get(i); + System.out.print((i+1) + ". " + tech.getName()); + System.out.print(" | " + tech.getAge() + " | "); + System.out.print(tech.getProfessionLevel() + " | " + tech.getActivity()); + System.out.println(); + } + + System.out.println(); + System.out.println("Type anything to continue:"); + InputHandler.handleStringInput(); + } +}