From 5e8d334f8e582638b2224d24cbe54a5ad3b19274 Mon Sep 17 00:00:00 2001 From: andrew xu <53061040+andxu282@users.noreply.github.com> Date: Thu, 2 May 2024 13:26:19 -0400 Subject: [PATCH] Schedule Generator (#928) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * added blue icon, need to adjust centering and add grey icon * Added grey icon, still need to adjust text centering and new width? * Formatting * feature flag schedule generator * added blue icon, need to adjust centering and add grey icon * Added grey icon, still need to adjust text centering and new width? * Formatting * Changed icon title to Generate, tried to fix spacing * Centered icon with Builder Label * Added mobile sched builder icon, fixed formatting and centering * Changed profile icon label in mobile * removed cypress * Create header component for scheduler side panel (#880) * chore: create schedule sidebar panel header * style: also define appearance property in SchedulerPanelHeader.vue for compatability * docs: add inline docs to SchedulerPanelHeader * link icon w/header * link icon w/header * fix: style schedule-gen sidebar background and padding --------- Co-authored-by: Andrew J Xu * chore: create schedule sidebar panel header * style: also define appearance property in SchedulerPanelHeader.vue for compatability * docs: add inline docs to SchedulerPanelHeader * link icon w/header * Run Courses Script for FA23 (#856) * Run courses script for FA23 * Fix CS 1110 Frontend Test Corrects the CS 1110 frontend test with the new course title * Spring 2024 courses script (#864) * add header * fix header * fix header * move into folder * fix full-courses * link modal to schedule builder icon * modal * modal clickable * type fix and rename * rename * rename * [Schedule Generator] Courses Component (#893) * link icon w/header * fix: style schedule-gen sidebar background and padding * add schedules and courses sections * fix indent * chore: flesh out component for LHS of schedgen modal * fix * fix modal * fixes * fix --------- Co-authored-by: Simon Ilincev * [Schedule Generator] Schedules Component (#904) * add schedules and courses sections * fix indent * chore: flesh out component for LHS of schedgen modal * fixes * schedule * refactoring * calculate minutes and labels * fix lint --------- Co-authored-by: Simon Ilincev * Schedule Generator Algorithm: V1 (#909) * chore: rewrite basic java algorithm impl in ts * chore: create output format for algorithm * chore: update course-scheduling algorithm to use timeslots and 15-min gaps * "fix" 😈: get rid of ugly java-style syntax also checkpoint: progress towards dealing with days of the week & labs * refactor internal algorithm logic, improve pretty-print, handle days of the week * docs: add docs for new folder --------- Co-authored-by: Simon Ilincev * [Schedule Generator] Add Requirements (#905) * add requirements component * fix dropdown * fixed dropdowns * fixed dropdowns * fixed dropdowns * fix lint * clean up styling * frontend for requirement courses (#914) * frontend for requirement courses * type fix * documentation --------- Co-authored-by: elizabeth-tang <43019442+elizabeth-tang@users.noreply.github.com> * [Schedule Generator] Schedule Fixes (#913) * fix course height and flex box * fixes * [Schedule Generator] Read in Requirements (#918) * read in reqs * linting * fix linting * fix adding courses * documentation * add as many reqs as possible * Support schedule downloading + pagination in schedgen modal (#919) * add schedules and courses sections * fix indent * chore: flesh out component for LHS of schedgen modal * refactoring * create pdf schedule generator with table + headers + credits to work on: wrong data, calendar thingie * support passing around data into pdf schedule download now just missing calendar also need to fix formatting in download * hotfix overflow issue by shortening req names * fix typo * chore: add in docs for the new pdf schedule downloader * migrate styles from figma * almost fully styled / laid out just missing right-aligned download button * right-align download button * merge conflict fixes * revert changes * fixed download --------- Co-authored-by: Andrew J Xu * comments * courses from user input show up on modal, schedule info passed into modal for gen request * log generated schedule * added random time generator for testing, logs schedule correctly * adjusted algorithm, mapped generated schedule to frontend * colors match on mapped sched q * changed testing * add reqs to top of list * side of modal is updated with course count / total credits * quick fixes * connected courses to fa24 firestore meeting times/patterns * fully connect sidebar to schedule * rename pdf output * finally integrate download pdf, but algo only ever returns one course * fix algo by correcting type parameters * fix overlap calculation and button size * add algo improvement note * FA24 Courses JSON (#924) * courses json * reqs * semi-working one course max per req * fix: always try to fulfill 1+ req for each * [Schedule Generator] Frontend Fixes (#925) * disable generate * Generating... when generating schedule and fix max hour bug * lint * cleanup * credit limit and overflow * courses overflow * change warning * fix fonts * padding and font fix * cleanup --------- Co-authored-by: Nidhi Mylavarapu * [Schedule Generator] Filter courses by latest semester / requirement (#926) * started req/sem filtering logic * undo changes * fixes * filter courses by sem from json * read sem courses only * lint * lint * fix: only show unique courses in requirement groups * adjusted for courses without meeting times * cleanup * add no requirement * fix test.spec.ts * lint --------- Co-authored-by: andxu282 Co-authored-by: Simon Ilincev * fixes * import issue * lint * update ScheduleGenerate dir * prettier * update courses * reqs --------- Co-authored-by: Nidhi Mylavarapu Co-authored-by: Simon Ilincev Co-authored-by: Simon Ilincev Co-authored-by: Zak Kent <73757337+zachary-kent@users.noreply.github.com> Co-authored-by: Nidhi Mylavarapu <73746818+nidhi-mylavarapu@users.noreply.github.com> Co-authored-by: elizabeth-tang <43019442+elizabeth-tang@users.noreply.github.com> --- .python-version | 1 + package-lock.json | 6 +- package.json | 1 + src/assets/courses/full-courses.json | 646 +++++++++++----- src/assets/courses/typed-full-courses.ts | 3 + .../images/navbar/schedule-builder-mobile.svg | 3 + .../images/navbar/scheduleBuilderIcon.svg | 3 + .../images/navbar/scheduleBuilderIconBlue.svg | 3 + src/assets/scss/_variables.scss | 1 + src/components/Course/Course.vue | 7 +- .../Modals/NewCourse/CourseSelector.vue | 22 +- .../Modals/NewCourse/NewCourseModal.vue | 28 +- src/components/NavBar.vue | 38 +- .../AllRequirementsDropdown.vue | 322 ++++++++ .../ScheduleGenerate/RequirementCourses.vue | 209 ++++++ src/components/ScheduleGenerate/Schedule.vue | 226 ++++++ .../ScheduleGenerate/ScheduleCourses.vue | 122 +++ .../ScheduleGenerateModal.vue | 696 ++++++++++++++++++ .../ScheduleGenerateSideBar.vue | 549 ++++++++++++++ src/components/Tools/ExportCard.vue | 2 +- src/containers/Dashboard.vue | 66 +- src/feature-flags.ts | 6 +- src/requirements/decorated-requirements.json | 315 +++++++- src/schedule-generator/README.md | 53 ++ src/schedule-generator/algorithm.ts | 147 ++++ src/schedule-generator/course-unit.ts | 77 ++ src/schedule-generator/generator-request.ts | 32 + src/schedule-generator/requirement.ts | 17 + src/schedule-generator/testing.ts | 249 +++++++ src/schedule-generator/tsconfig.json | 10 + src/tools/export-plan/index.ts | 3 +- .../export-plan/pdf-schedule-generator.ts | 524 +++++++++++++ src/tools/export-plan/types.ts | 52 ++ src/tools/export-plan/utilities.ts | 105 ++- 34 files changed, 4292 insertions(+), 252 deletions(-) create mode 100644 .python-version create mode 100644 src/assets/images/navbar/schedule-builder-mobile.svg create mode 100644 src/assets/images/navbar/scheduleBuilderIcon.svg create mode 100644 src/assets/images/navbar/scheduleBuilderIconBlue.svg create mode 100644 src/components/ScheduleGenerate/AllRequirementsDropdown.vue create mode 100644 src/components/ScheduleGenerate/RequirementCourses.vue create mode 100644 src/components/ScheduleGenerate/Schedule.vue create mode 100644 src/components/ScheduleGenerate/ScheduleCourses.vue create mode 100644 src/components/ScheduleGenerate/ScheduleGenerateModal.vue create mode 100644 src/components/ScheduleGenerate/ScheduleGenerateSideBar.vue create mode 100644 src/schedule-generator/README.md create mode 100644 src/schedule-generator/algorithm.ts create mode 100644 src/schedule-generator/course-unit.ts create mode 100644 src/schedule-generator/generator-request.ts create mode 100644 src/schedule-generator/requirement.ts create mode 100644 src/schedule-generator/testing.ts create mode 100644 src/schedule-generator/tsconfig.json create mode 100644 src/tools/export-plan/pdf-schedule-generator.ts diff --git a/.python-version b/.python-version new file mode 100644 index 000000000..afad81866 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.11.0 diff --git a/package-lock.json b/package-lock.json index a9f1ec788..89e09e211 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "esbuild": "^0.15.5", "firebase": "^9.9.3", "firebase-admin": "^11.5.0", + "html2canvas": "^1.4.1", "intro.js": "^3.3.1", "jspdf": "^2.5.1", "jspdf-autotable": "^3.5.25", @@ -6306,7 +6307,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", - "optional": true, "engines": { "node": ">= 0.6.0" } @@ -8157,7 +8157,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", - "optional": true, "dependencies": { "utrie": "^1.0.2" } @@ -11794,7 +11793,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", - "optional": true, "dependencies": { "css-line-break": "^2.1.0", "text-segmentation": "^1.0.3" @@ -19861,7 +19859,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", - "optional": true, "dependencies": { "utrie": "^1.0.2" } @@ -20468,7 +20465,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", - "optional": true, "dependencies": { "base64-arraybuffer": "^1.0.2" } diff --git a/package.json b/package.json index 616fa202d..59aecfeba 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "esbuild": "^0.15.5", "firebase": "^9.9.3", "firebase-admin": "^11.5.0", + "html2canvas": "^1.4.1", "intro.js": "^3.3.1", "jspdf": "^2.5.1", "jspdf-autotable": "^3.5.25", diff --git a/src/assets/courses/full-courses.json b/src/assets/courses/full-courses.json index 60677addd..c4366cecf 100644 --- a/src/assets/courses/full-courses.json +++ b/src/assets/courses/full-courses.json @@ -22137,7 +22137,7 @@ "catalogSatisfiesReq": "Satisfies core requirement for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "351469": [ @@ -24619,12 +24619,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Graduate students must enroll in HADM 6470.", "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "351580": [ @@ -24724,10 +24724,6 @@ "catalogNbr": "3210", "titleLong": "Principles of Hospitality Real Estate", "enrollGroups": [ - { - "unitsMaximum": 3, - "unitsMinimum": 3 - }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -24737,7 +24733,7 @@ "catalogSatisfiesReq": "Satisfies core requirement for Nolan School students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA23" + "roster": "SP24" } ], "351588": [ @@ -24765,10 +24761,6 @@ "catalogNbr": "3510", "titleLong": "Hospitality Facilities Design", "enrollGroups": [ - { - "unitsMaximum": 4, - "unitsMinimum": 4 - }, { "unitsMaximum": 4, "unitsMinimum": 4 @@ -24778,7 +24770,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "351591": [ @@ -25042,10 +25034,6 @@ "catalogNbr": "3550", "titleLong": "Hospitality Facilities Management", "enrollGroups": [ - { - "unitsMaximum": 3, - "unitsMinimum": 3 - }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -25056,7 +25044,7 @@ "catalogAttribute": "(CU-SBY)", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA23" + "roster": "SP24" } ], "351609": [ @@ -25236,11 +25224,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall, Spring.", + "catalogWhenOffered": "Spring.", + "catalogDistr": "(ALC-HA)", "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "351621": [ @@ -25770,10 +25759,10 @@ } ], "catalogWhenOffered": "Spring.", - "catalogSatisfiesReq": "Satisfies HADM or free electives for SHA students.", + "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP21" + "roster": "SP24" } ], "351649": [ @@ -26074,7 +26063,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "351667": [ @@ -30096,12 +30085,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "To be considered, waitlisted students must attend the first class. Graduate students should enroll in HADM 6570.", "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "351845": [ @@ -30507,12 +30496,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Graduate students should enroll in HADM 6350. ", - "catalogSatisfiesReq": "Satisifes HADM or free electives for SHA students.", + "catalogSatisfiesReq": "Satisifes HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP21" + "roster": "SP24" } ], "351861": [ @@ -31230,7 +31219,7 @@ "subject": "AIIS", "crseId": 351907, "catalogNbr": "6451", - "titleLong": "Federal Indian Law", + "titleLong": "Indigenous Peoples and American Law", "enrollGroups": [ { "unitsMaximum": 3, @@ -31246,7 +31235,7 @@ "subject": "LAW", "crseId": 351907, "catalogNbr": "6451", - "titleLong": "Federal Indian Law", + "titleLong": "Indigenous Peoples and American Law", "enrollGroups": [ { "unitsMaximum": 3, @@ -32989,7 +32978,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "352016": [ @@ -33157,6 +33146,10 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, + { + "unitsMaximum": 15, + "unitsMinimum": 1 + }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -33514,6 +33507,10 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, + { + "unitsMaximum": 15, + "unitsMinimum": 1 + }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -33870,17 +33867,21 @@ "catalogNbr": "4110", "titleLong": "Negotiations in the Hospitality Industry", "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + }, { "unitsMaximum": 3, "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Grad students must enroll in HADM 6110. This course has a strict no dropping policy after the first week of class.", "catalogSatisfiesReq": "Satisfies HADM or free electives for SHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "352067": [ @@ -34212,6 +34213,10 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, + { + "unitsMaximum": 15, + "unitsMinimum": 1 + }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -34572,6 +34577,10 @@ "catalogNbr": "6110", "titleLong": "Negotiations in the Hospitality Industry", "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -34581,7 +34590,7 @@ "catalogComments": "Undergraduate students should enroll in HADM 4110. This course has a strict no dropping policy after the first week of class.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "352107": [ @@ -34628,7 +34637,7 @@ "catalogComments": "Undergraduate students should enroll in HADM 4280.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "352110": [ @@ -60665,8 +60674,8 @@ "titleLong": "Puzzles and Paradoxes", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 0, + "unitsMinimum": 0 } ], "catalogWhenOffered": "Fall.", @@ -60682,8 +60691,8 @@ "titleLong": "Puzzles and Paradoxes", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 0, + "unitsMinimum": 0 } ], "catalogWhenOffered": "Fall.", @@ -80725,6 +80734,10 @@ "unitsMaximum": 12, "unitsMinimum": 2 }, + { + "unitsMaximum": 12, + "unitsMinimum": 2 + }, { "unitsMaximum": 12, "unitsMinimum": 2 @@ -81069,14 +81082,6 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -81119,14 +81124,6 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -81169,14 +81166,6 @@ "unitsMaximum": 15, "unitsMinimum": 1 }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, - { - "unitsMaximum": 15, - "unitsMinimum": 1 - }, { "unitsMaximum": 15, "unitsMinimum": 1 @@ -85753,7 +85742,7 @@ "catalogAttribute": "(CU-SBY)", "acadCareer": "GR", "acadGroup": "AS", - "roster": "SP24" + "roster": "FA24" } ], "355517": [ @@ -101545,8 +101534,8 @@ "unitsMinimum": 1 }, { - "unitsMaximum": 6, - "unitsMinimum": 1 + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 } ], "catalogWhenOffered": "Spring.", @@ -106934,7 +106923,7 @@ "catalogComments": "The students will attend field trips to the Cornell University MRI Facility. The students may also attend field trips to the Cornell University Hospital for Animals and Cayuga Medical Center (Weill Cornell Medical Center for students at NYC campus) to observe imaging in clinical practice, pending on hospital courtesies.", "acadCareer": "GR", "acadGroup": "EN", - "roster": "FA24" + "roster": "FA23" }, { "subject": "ECE", @@ -106966,7 +106955,7 @@ "catalogWhenOffered": "Fall.", "acadCareer": "GR", "acadGroup": "EN", - "roster": "FA24" + "roster": "FA23" }, { "subject": "VETCS", @@ -106982,7 +106971,7 @@ "catalogWhenOffered": "Fall.", "acadCareer": "GR", "acadGroup": "VM", - "roster": "FA24" + "roster": "FA23" } ], "358962": [ @@ -110957,7 +110946,7 @@ "catalogSatisfiesReq": "Required for HLDP students. Satisfies free electives for Nolan students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "359336": [ @@ -114923,6 +114912,10 @@ "catalogNbr": "7510", "titleLong": "Properties Development and Planning", "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -114932,7 +114925,7 @@ "catalogSatisfiesReq": "Satisfies MMH core.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "359744": [ @@ -114955,7 +114948,7 @@ "catalogComments": "Undergraduate students should enroll in HADM 3470.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "359745": [ @@ -123907,11 +123900,11 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Spring.", + "catalogWhenOffered": "Spring, Summer.", "catalogComments": "Required.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SU23" + "roster": "SP24" } ], "361351": [ @@ -123926,10 +123919,13 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", + "catalogDistr": "(GLC-HA, SSC-HA)", + "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", + "catalogAttribute": "(EC-LASP)", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA18" + "roster": "SP24" } ], "361352": [ @@ -124074,12 +124070,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Graduate students must enroll in HADM 6480.", - "catalogSatisfiesReq": "Satisfies HADM or free electives for SHA students.", + "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA21" + "roster": "SP24" } ], "361363": [ @@ -124094,11 +124090,11 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Undergraduate students should enroll in HADM 4480.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA21" + "roster": "SP24" } ], "361364": [ @@ -124271,6 +124267,10 @@ "catalogNbr": "7240", "titleLong": "Managerial Accounting", "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -124280,7 +124280,7 @@ "catalogSatisfiesReq": "Satisfies MMH core.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "361377": [ @@ -124297,7 +124297,7 @@ ], "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "361379": [ @@ -124350,12 +124350,12 @@ "unitsMinimum": 1.5 } ], - "catalogWhenOffered": "Fall, Spring.", + "catalogWhenOffered": "Spring.", "catalogComments": "Students may be asked to offset some of the costs of lodging and travel.", "catalogSatisfiesReq": "Satisfies MMH Core.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "361387": [ @@ -129479,7 +129479,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "362038": [ @@ -134477,7 +134477,7 @@ "catalogAttribute": "(CU-SBY)", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "362619": [ @@ -144910,7 +144910,7 @@ "catalogSatisfiesReq": "Satisfies free electives for Nolan students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "363742": [ @@ -148969,7 +148969,7 @@ "catalogComments": "Undergraduate students must enroll in HADM 4800.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "364230": [ @@ -150947,10 +150947,6 @@ "catalogNbr": "4340", "titleLong": "Special Topics in International and Comparative Labor", "enrollGroups": [ - { - "unitsMaximum": 1.5, - "unitsMinimum": 1.5 - }, { "unitsMaximum": 1.5, "unitsMinimum": 1.5 @@ -150960,7 +150956,7 @@ "catalogAttribute": "(CU-ITL)", "acadCareer": "UG", "acadGroup": "IL", - "roster": "FA24" + "roster": "SP24" } ], "364424": [ @@ -156692,7 +156688,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "364870": [ @@ -165282,7 +165278,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "365683": [ @@ -169093,10 +169089,10 @@ ], "catalogWhenOffered": "Spring.", "catalogComments": "Graduate students should enroll in HADM 6255.", - "catalogSatisfiesReq": "Satisfies HADM or free electives for SHA students.", + "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP22" + "roster": "SP24" } ], "365949": [ @@ -169115,7 +169111,7 @@ "catalogComments": "Undergraduates should enroll in HADM 4255.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP22" + "roster": "SP24" } ], "365950": [ @@ -170117,7 +170113,7 @@ "subject": "HADM", "crseId": 366081, "catalogNbr": "4650", - "titleLong": "Advanced Communication Practicum in Public Speaking for Hospitality Leaders", + "titleLong": "Impactful Unscripted Communication Practicum", "enrollGroups": [ { "unitsMaximum": 3, @@ -170125,11 +170121,12 @@ } ], "catalogWhenOffered": "Spring.", - "catalogComments": "Co-meets with HADM 6650.", - "catalogSatisfiesReq": "Elective.", + "catalogDistr": "(SSC-HA)", + "catalogComments": "Graduate students should enroll in HADM 6650.", + "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP19" + "roster": "SP24" } ], "366085": [ @@ -170726,19 +170723,18 @@ "subject": "HADM", "crseId": 366137, "catalogNbr": "4550", - "titleLong": "Introduction to Sustainable Tourism - A Costa Rican Practicum", + "titleLong": "Introduction to Sustainable Tourism", "enrollGroups": [ { "unitsMaximum": 3, "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", - "catalogComments": "Co-meets with HADM 6550.", + "catalogWhenOffered": "Spring.", "catalogAttribute": "(CU-SBY)", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA18" + "roster": "SP24" } ], "366138": [ @@ -170746,19 +170742,18 @@ "subject": "HADM", "crseId": 366138, "catalogNbr": "6550", - "titleLong": "Introduction to Sustainable Tourism - A Costa Rican Practicum", + "titleLong": "Introduction to Sustainable Tourism", "enrollGroups": [ { "unitsMaximum": 3, "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", - "catalogComments": "Co-meets with HADM 4550.", + "catalogWhenOffered": "Spring.", "catalogAttribute": "(CU-SBY)", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA18" + "roster": "SP24" } ], "366143": [ @@ -173432,10 +173427,6 @@ "unitsMaximum": 3, "unitsMinimum": 3 }, - { - "unitsMaximum": 3, - "unitsMinimum": 3 - }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -173457,10 +173448,6 @@ "unitsMaximum": 3, "unitsMinimum": 3 }, - { - "unitsMaximum": 3, - "unitsMinimum": 3 - }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -182169,7 +182156,7 @@ "catalogComments": "Graduate students must enroll in HADM 6965.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "367034": [ @@ -183659,7 +183646,7 @@ "catalogSatisfiesReq": "Elective.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA23" + "roster": "SP24" } ], "367123": [ @@ -183768,7 +183755,7 @@ "catalogComments": "Undergraduates must enroll in HADM 4570.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "367129": [ @@ -183788,7 +183775,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "367130": [ @@ -183807,7 +183794,7 @@ "catalogComments": "Undergraduate students must enroll in HADM 4965.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "367132": [ @@ -186694,12 +186681,12 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", + "catalogWhenOffered": "Spring.", "catalogComments": "Graduate students must enroll in HADM 6115.", "catalogSatisfiesReq": "Elective.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA20" + "roster": "SP24" } ], "367312": [ @@ -196505,7 +196492,7 @@ "catalogSatisfiesReq": "Elective.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "367933": [ @@ -196753,7 +196740,7 @@ "catalogAttribute": "(CU-CEL)", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" }, { "subject": "HADM", @@ -196808,7 +196795,7 @@ "catalogAttribute": "(CU-CEL)", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "367951": [ @@ -202852,6 +202839,10 @@ "catalogNbr": "6115", "titleLong": "Managing Professional Relationships", "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -202862,7 +202853,7 @@ "catalogSatisfiesReq": "Elective.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA20" + "roster": "SP24" } ], "368322": [ @@ -205197,16 +205188,16 @@ "titleLong": "Revolution: An Intellectual History", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], - "catalogWhenOffered": "Spring.", - "catalogDistr": "(HA-AS)", + "catalogWhenOffered": "Fall.", + "catalogDistr": "(ALC-AS, HA-AS, HST-AS)", "catalogComments": "Conducted in English.", "acadCareer": "UG", "acadGroup": "AS", - "roster": "SP17" + "roster": "FA24" }, { "subject": "ROMS", @@ -205215,16 +205206,16 @@ "titleLong": "Revolution: An Intellectual History", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], - "catalogWhenOffered": "Spring.", - "catalogDistr": "(HA-AS)", + "catalogWhenOffered": "Fall.", + "catalogDistr": "(ALC-AS, HA-AS, HST-AS)", "catalogComments": "Conducted in English.", "acadCareer": "UG", "acadGroup": "AS", - "roster": "SP17" + "roster": "FA24" } ], "368458": [ @@ -211389,7 +211380,7 @@ "catalogComments": "Undergraduate students must enroll in HADM 3740.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "368719": [ @@ -212652,11 +212643,12 @@ } ], "catalogWhenOffered": "Spring.", + "catalogDistr": "(ALC-HA)", "catalogComments": "Graduate students must enroll in HADM 6375. Students are to provide glassware that is approved by the instructor. Only glass kits from HADM 4300 or VIEN 1104 will be excepted. Kits can be purchased at the Campus bookstore.", "catalogSatisfiesReq": "Satisifies HADM or free electives for Nolan students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "368780": [ @@ -220957,7 +220949,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "369067": [ @@ -220976,7 +220968,7 @@ "catalogComments": "Undergraduates should enroll in HADM 3235.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "369068": [ @@ -230694,11 +230686,11 @@ "unitsMinimum": 3 } ], - "catalogWhenOffered": "Fall.", - "catalogComments": "Undergraduate students should enroll in HADM 4350. ", + "catalogWhenOffered": "Spring.", + "catalogComments": "Undergraduate students should enroll in HADM 4350.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP21" + "roster": "SP24" } ], "369428": [ @@ -231405,15 +231397,15 @@ "titleLong": "Seminar in Leadership, Diversity, and Inclusion", "enrollGroups": [ { - "unitsMaximum": 1.5, - "unitsMinimum": 1.5 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], "catalogWhenOffered": "Spring.", "catalogSatisfiesReq": "Satisfies elective requirement for MMH students only.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "369469": [ @@ -240822,7 +240814,7 @@ "subject": "HADM", "crseId": 369919, "catalogNbr": "6650", - "titleLong": "Advanced Communication Practicum in Public Speaking for Hospitality Leaders", + "titleLong": "Impactful Unscripted Communication Practicum", "enrollGroups": [ { "unitsMaximum": 3, @@ -240830,10 +240822,10 @@ } ], "catalogWhenOffered": "Spring.", - "catalogComments": "Co-meets with HADM 4650.", - "acadCareer": "GM", + "catalogComments": "Undergraduate students must enroll in HADM 4650.", + "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP19" + "roster": "SP24" } ], "369920": [ @@ -243455,7 +243447,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "370020": [ @@ -249389,7 +249381,7 @@ "catalogDistr": "(MQR-AS, SMR-AS)", "acadCareer": "UG", "acadGroup": "AS", - "roster": "FA24" + "roster": "FA23" }, { "subject": "PHIL", @@ -249406,7 +249398,7 @@ "catalogDistr": "(MQR-AS, SMR-AS)", "acadCareer": "UG", "acadGroup": "AS", - "roster": "FA24" + "roster": "FA23" } ], "370308": [ @@ -255365,13 +255357,13 @@ "titleLong": "Introduction to Humanities", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], "acadCareer": "UG", "acadGroup": "AS", - "roster": "SP22" + "roster": "FA24" }, { "subject": "ASRC", @@ -255395,13 +255387,13 @@ "titleLong": "Introduction to Humanities", "enrollGroups": [ { - "unitsMaximum": 4, - "unitsMinimum": 4 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], "acadCareer": "UG", "acadGroup": "AS", - "roster": "SP22" + "roster": "FA24" }, { "subject": "COML", @@ -266735,14 +266727,13 @@ "subject": "ALS", "crseId": 370952, "catalogNbr": "4400", - "titleLong": "Leadership through Peer Mentoring", + "titleLong": "", "enrollGroups": [ { "unitsMaximum": 2, "unitsMinimum": 2 } ], - "catalogWhenOffered": "Fall.", "acadCareer": "UG", "acadGroup": "AG", "roster": "FA24" @@ -267801,7 +267792,7 @@ "catalogWhenOffered": "Fall, Spring.", "acadCareer": "GR", "acadGroup": "IL", - "roster": "FA24" + "roster": "FA23" } ], "370997": [ @@ -269657,7 +269648,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "371052": [ @@ -269675,7 +269666,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "371053": [ @@ -294078,7 +294069,7 @@ "catalogComments": "Graduate students must enroll in HADM 5121.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "372119": [ @@ -294096,7 +294087,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "372120": [ @@ -295347,10 +295338,6 @@ "catalogNbr": "6510", "titleLong": "Hospitality Facilities Design", "enrollGroups": [ - { - "unitsMaximum": 4, - "unitsMinimum": 4 - }, { "unitsMaximum": 4, "unitsMinimum": 4 @@ -295360,7 +295347,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for SHA students.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "372194": [ @@ -295845,14 +295832,15 @@ "titleLong": "Seminar in Leadership, Diversity, and Inclusion", "enrollGroups": [ { - "unitsMaximum": 1.5, - "unitsMinimum": 1.5 + "unitsMaximum": 3, + "unitsMinimum": 3 } ], "catalogWhenOffered": "Spring.", + "catalogDistr": "(SCD-HA)", "acadCareer": "UG", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "372219": [ @@ -299914,7 +299902,7 @@ "catalogSatisfiesReq": "Satisfies HADM or free electives for NSHA students.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "372329": [ @@ -300285,7 +300273,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "UG", "acadGroup": "BU", - "roster": "FA22" + "roster": "SP24" } ], "372349": [ @@ -300853,7 +300841,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP22" + "roster": "SP24" } ], "372378": [ @@ -300871,7 +300859,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP22" + "roster": "SP24" } ], "372379": [ @@ -302261,10 +302249,6 @@ "catalogNbr": "6311", "titleLong": "Topics in Logic and the Foundations of Mathematics", "enrollGroups": [ - { - "unitsMaximum": 3, - "unitsMinimum": 3 - }, { "unitsMaximum": 3, "unitsMinimum": 3 @@ -310333,15 +310317,13 @@ "subject": "ALS", "crseId": 372825, "catalogNbr": "1400", - "titleLong": "CALS LAB: Landing and Becoming", + "titleLong": "", "enrollGroups": [ { "unitsMaximum": 1, "unitsMinimum": 1 } ], - "catalogWhenOffered": "Fall.", - "catalogComments": "Email Rhonda Todd at rrt52@cornell.edu for more information on peer mentoring.", "acadCareer": "UG", "acadGroup": "AG", "roster": "FA24" @@ -312822,12 +312804,12 @@ "titleLong": "Energy Efficiency in the Circular Economy", "enrollGroups": [ { - "unitsMaximum": 1, - "unitsMinimum": 1 + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 }, { - "unitsMaximum": 1, - "unitsMinimum": 1 + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 } ], "catalogWhenOffered": "Fall.", @@ -316362,6 +316344,24 @@ "roster": "FA24" } ], + "373083": [ + { + "subject": "HADM", + "crseId": 373083, + "catalogNbr": "7611", + "titleLong": "Management Communication", + "enrollGroups": [ + { + "unitsMaximum": 1, + "unitsMinimum": 1 + } + ], + "catalogWhenOffered": "Spring.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373084": [ { "subject": "BEE", @@ -316801,16 +316801,18 @@ "subject": "HADM", "crseId": 373105, "catalogNbr": "6910", - "titleLong": "Immersion I", + "titleLong": "Hospitality Immersion I", "enrollGroups": [ { "unitsMaximum": 1, "unitsMinimum": 1 } ], + "catalogWhenOffered": "Spring.", + "catalogSatisfiesReq": "Satisfies EMMH core.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "373106": [ @@ -317364,7 +317366,7 @@ "catalogComments": "Students are to provide glassware that is approved by the instructor. Only glass kits from HADM 4300 or VIEN 1104 will be excepted. Kits can be purchased at the Campus bookstore.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "373139": [ @@ -317382,7 +317384,7 @@ "catalogWhenOffered": "Spring.", "acadCareer": "GR", "acadGroup": "BU", - "roster": "SP23" + "roster": "SP24" } ], "373140": [ @@ -318304,6 +318306,23 @@ "roster": "SP24" } ], + "373183": [ + { + "subject": "HADM", + "crseId": 373183, + "catalogNbr": "7090", + "titleLong": "Introduction to Hospitality", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373184": [ { "subject": "HADM", @@ -321151,6 +321170,25 @@ "roster": "FA24" } ], + "373293": [ + { + "subject": "HADM", + "crseId": 373293, + "catalogNbr": "6011", + "titleLong": "Data-Driven Analytics", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Fall.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373294": [ { "subject": "HADM", @@ -328867,6 +328905,44 @@ "roster": "SP24" } ], + "373631": [ + { + "subject": "HADM", + "crseId": 373631, + "catalogNbr": "6206", + "titleLong": "Real Estate Financial Modeling", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Spring.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], + "373632": [ + { + "subject": "HADM", + "crseId": 373632, + "catalogNbr": "6311", + "titleLong": "Restaurant Distribution Strategies", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Spring.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373633": [ { "subject": "HADM", @@ -330249,6 +330325,44 @@ "roster": "FA24" } ], + "373693": [ + { + "subject": "HADM", + "crseId": 373693, + "catalogNbr": "6481", + "titleLong": "Brand Management", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Fall.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], + "373694": [ + { + "subject": "HADM", + "crseId": 373694, + "catalogNbr": "6871", + "titleLong": "Real Estate Law", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Fall.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373695": [ { "subject": "CRP", @@ -330929,6 +331043,69 @@ "roster": "SU24" } ], + "373730": [ + { + "subject": "HADM", + "crseId": 373730, + "catalogNbr": "4750", + "titleLong": "Machine Learning for Business and Hospitality Applications", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + }, + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Spring.", + "catalogComments": "Course can qualify for Hospitality Analytics Specialization elective.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "UG", + "acadGroup": "BU", + "roster": "SP24" + } + ], + "373731": [ + { + "subject": "HADM", + "crseId": 373731, + "catalogNbr": "4335", + "titleLong": "Contemporary Issues in Food", + "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + } + ], + "catalogWhenOffered": "Spring.", + "catalogComments": "This course can count as a Nolan elective, as an LAS elective, and towards the F&B specialization.", + "catalogSatisfiesReq": "Elective. ", + "acadCareer": "UG", + "acadGroup": "BU", + "roster": "SP24" + } + ], + "373732": [ + { + "subject": "HADM", + "crseId": 373732, + "catalogNbr": "6811", + "titleLong": "Discrimination and Labor Law", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Spring.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373733": [ { "subject": "ART", @@ -333111,6 +333288,23 @@ "roster": "SP24" } ], + "373822": [ + { + "subject": "HADM", + "crseId": 373822, + "catalogNbr": "6620", + "titleLong": "Intercultural Communication in Global Business", + "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + } + ], + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373823": [ { "subject": "HADM", @@ -333562,6 +333756,47 @@ "roster": "SP24" } ], + "373845": [ + { + "subject": "HADM", + "crseId": 373845, + "catalogNbr": "6750", + "titleLong": "Machine Learning for Business and Hospitality Applications", + "enrollGroups": [ + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + }, + { + "unitsMaximum": 1.5, + "unitsMinimum": 1.5 + } + ], + "catalogWhenOffered": "Spring.", + "catalogComments": "Course can qualify for Hospitality Analytics Specialization elective.", + "catalogSatisfiesReq": "Elective.", + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], + "373846": [ + { + "subject": "HADM", + "crseId": 373846, + "catalogNbr": "6335", + "titleLong": "Contemporary Issues in Food", + "enrollGroups": [ + { + "unitsMaximum": 3, + "unitsMinimum": 3 + } + ], + "acadCareer": "GR", + "acadGroup": "BU", + "roster": "SP24" + } + ], "373849": [ { "subject": "AEM", @@ -338865,6 +339100,23 @@ "roster": "FA24" } ], + "374124": [ + { + "subject": "CHIN", + "crseId": 374124, + "catalogNbr": "6616", + "titleLong": "Mandarin Language Across the Curriculum (LAC)", + "enrollGroups": [ + { + "unitsMaximum": 1, + "unitsMinimum": 1 + } + ], + "acadCareer": "GR", + "acadGroup": "AS", + "roster": "FA24" + } + ], "374126": [ { "subject": "AMST", diff --git a/src/assets/courses/typed-full-courses.ts b/src/assets/courses/typed-full-courses.ts index efa2b2cbf..f568716c2 100644 --- a/src/assets/courses/typed-full-courses.ts +++ b/src/assets/courses/typed-full-courses.ts @@ -33,3 +33,6 @@ export const fullCoursesJson: FullCourseJson = Object.fromEntries( export const fullCoursesArray: readonly CornellCourseRosterCourse[] = Object.values( fullCoursesJsonWithStringKey ).flat(); + +export const specificRosterCoursesArray = (roster: string): readonly CornellCourseRosterCourse[] => + fullCoursesArray.filter(course => course.roster === roster); diff --git a/src/assets/images/navbar/schedule-builder-mobile.svg b/src/assets/images/navbar/schedule-builder-mobile.svg new file mode 100644 index 000000000..57f3f0c51 --- /dev/null +++ b/src/assets/images/navbar/schedule-builder-mobile.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/navbar/scheduleBuilderIcon.svg b/src/assets/images/navbar/scheduleBuilderIcon.svg new file mode 100644 index 000000000..fd52d5298 --- /dev/null +++ b/src/assets/images/navbar/scheduleBuilderIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/images/navbar/scheduleBuilderIconBlue.svg b/src/assets/images/navbar/scheduleBuilderIconBlue.svg new file mode 100644 index 000000000..e3acf9687 --- /dev/null +++ b/src/assets/images/navbar/scheduleBuilderIconBlue.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/scss/_variables.scss b/src/assets/scss/_variables.scss index 85d9ce5f7..3540ef01b 100644 --- a/src/assets/scss/_variables.scss +++ b/src/assets/scss/_variables.scss @@ -15,6 +15,7 @@ $navMenuGray: #f7fafc; $borderGray: #d8d8d8; $offWhite: #f8f8f8; $searchBoxWhite: #f1f1f1; +$veryLightGray: #e5e5e5; $lightGray: #acacac; $medGray: #737373; $darkGray: #3c3c3c; diff --git a/src/components/Course/Course.vue b/src/components/Course/Course.vue index cc31a77a6..03736dd14 100644 --- a/src/components/Course/Course.vue +++ b/src/components/Course/Course.vue @@ -50,7 +50,11 @@
{{ creditString }} {{ semesterString }} - +
@@ -91,6 +95,7 @@ export default defineComponent({ semesterIndex: { type: Number, required: false, default: 0 }, season: { type: String, required: false, default: '' }, year: { type: Number, required: false, default: 0 }, + isSchedGenCourse: { type: Boolean, required: false, default: false }, }, emits: { 'delete-course': (code: string, uniqueID: number) => diff --git a/src/components/Modals/NewCourse/CourseSelector.vue b/src/components/Modals/NewCourse/CourseSelector.vue index 214bd05b6..05d7011a2 100644 --- a/src/components/Modals/NewCourse/CourseSelector.vue +++ b/src/components/Modals/NewCourse/CourseSelector.vue @@ -30,6 +30,7 @@ import { fullCoursesArray } from '@/assets/courses/typed-full-courses'; const getMatchingCourses = ( searchText: string, + coursesArray?: readonly CornellCourseRosterCourse[], filter?: (course: CornellCourseRosterCourse) => boolean ): readonly CornellCourseRosterCourse[] => { // search after value length of 2 to reduce search times of courses @@ -37,7 +38,12 @@ const getMatchingCourses = ( /* code array for results that contain course code and title array for results that contain title */ const code: CornellCourseRosterCourse[] = []; const title: CornellCourseRosterCourse[] = []; - const filteredCourses = filter != null ? fullCoursesArray.filter(filter) : fullCoursesArray; + let filteredCourses: readonly CornellCourseRosterCourse[] = []; + if (coursesArray !== undefined) { + filteredCourses = coursesArray; + } else { + filteredCourses = filter != null ? fullCoursesArray.filter(filter) : fullCoursesArray; + } for (const course of filteredCourses) { const courseCode = `${course.subject} ${course.catalogNbr}`; if (courseCode.toUpperCase().includes(searchText)) { @@ -60,13 +66,12 @@ export default defineComponent({ props: { searchBoxClassName: { type: String, required: true }, placeholder: { type: String, required: true }, - courseFilter: { - type: (Function as unknown) as PropType< - ((course: CornellCourseRosterCourse) => boolean) | undefined - >, + autoFocus: { type: Boolean, required: true }, + coursesArray: { + type: Object as PropType, + required: false, default: undefined, }, - autoFocus: { type: Boolean, required: true }, }, emits: { 'on-escape': () => true, @@ -80,7 +85,7 @@ export default defineComponent({ }, computed: { matches(): readonly CornellCourseRosterCourse[] { - return getMatchingCourses(this.searchText.toUpperCase(), this.courseFilter); + return getMatchingCourses(this.searchText.toUpperCase(), this.coursesArray); }, }, mounted() { @@ -121,6 +126,7 @@ export default defineComponent({ padding: 10px; font-size: 16px; } + .autocomplete { /*the container must be positioned relative:*/ position: relative; @@ -129,6 +135,7 @@ export default defineComponent({ margin-top: 0.5rem; padding-bottom: 12px; } + .autocomplete-items { position: absolute; border: 1px solid $searchBoxBorderGray; @@ -154,6 +161,7 @@ export default defineComponent({ } } } + .autocomplete-active { /*when navigating through the items using the arrow keys:*/ background-color: DodgerBlue !important; diff --git a/src/components/Modals/NewCourse/NewCourseModal.vue b/src/components/Modals/NewCourse/NewCourseModal.vue index aba4e68be..ebe93f9db 100644 --- a/src/components/Modals/NewCourse/NewCourseModal.vue +++ b/src/components/Modals/NewCourse/NewCourseModal.vue @@ -21,6 +21,7 @@ @on-escape="closeCurrentModal" @on-select="selectCourse" data-cyId="newCourse-dropdown" + :courses-array="courseArrayBySem" />
{{ selectedCourse.subject }} {{ selectedCourse.catalogNbr }}: @@ -43,7 +44,7 @@ + +// a lot of this styling is copied from Onboarding.scss + + diff --git a/src/components/ScheduleGenerate/RequirementCourses.vue b/src/components/ScheduleGenerate/RequirementCourses.vue new file mode 100644 index 000000000..2afe961d5 --- /dev/null +++ b/src/components/ScheduleGenerate/RequirementCourses.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/src/components/ScheduleGenerate/Schedule.vue b/src/components/ScheduleGenerate/Schedule.vue new file mode 100644 index 000000000..fefb1ccca --- /dev/null +++ b/src/components/ScheduleGenerate/Schedule.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/src/components/ScheduleGenerate/ScheduleCourses.vue b/src/components/ScheduleGenerate/ScheduleCourses.vue new file mode 100644 index 000000000..8c682d4a8 --- /dev/null +++ b/src/components/ScheduleGenerate/ScheduleCourses.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/src/components/ScheduleGenerate/ScheduleGenerateModal.vue b/src/components/ScheduleGenerate/ScheduleGenerateModal.vue new file mode 100644 index 000000000..84bb966d2 --- /dev/null +++ b/src/components/ScheduleGenerate/ScheduleGenerateModal.vue @@ -0,0 +1,696 @@ + + + + + diff --git a/src/components/ScheduleGenerate/ScheduleGenerateSideBar.vue b/src/components/ScheduleGenerate/ScheduleGenerateSideBar.vue new file mode 100644 index 000000000..61319d9bb --- /dev/null +++ b/src/components/ScheduleGenerate/ScheduleGenerateSideBar.vue @@ -0,0 +1,549 @@ + + + + + diff --git a/src/components/Tools/ExportCard.vue b/src/components/Tools/ExportCard.vue index b367b374d..546df1265 100644 --- a/src/components/Tools/ExportCard.vue +++ b/src/components/Tools/ExportCard.vue @@ -8,7 +8,7 @@