diff --git a/docs/OnTrack/Capstone Self Enrolment/Capstone Self Enrolment Project Proposal.md b/docs/OnTrack/Capstone Self Enrolment/Capstone Self Enrolment Project Proposal.md new file mode 100644 index 000000000..445f438a7 --- /dev/null +++ b/docs/OnTrack/Capstone Self Enrolment/Capstone Self Enrolment Project Proposal.md @@ -0,0 +1,339 @@ +# Capstone company & project self enrolment feature + +## Author information: + +- Student ID: s222313935 + +## Project scope + +### Description + +This project aims to improve the capstone company and project selection process within OnTrack by +developing a form-based task that collects and processes student selections efficiently. The goal is +to ensure seamless enrolment, prevent errors, and facilitate easy data extraction. + +### Objectives + +- Develop an OnTrack task for SIT374 & SIT378 to handle company and project selection. +- Ensure student selections are accurate and complete before submission. +- Generate a CSV file containing all student selections for administrative use. +- Maintain the ability to modify the form as required. + +### Scope of Work + +The enhancement will include the following steps within a single OnTrack task: + +#### 1. Company allocation task + +- Students self-enrol in a company through the native OnTrack groups. +- The selected company is automatically linked to the form task. + +#### 2. Project Selection + +- Display available projects within the selected company. +- Enforce project capacity limits (default max 30 students, except for designated projects with + different limits) +- Mark fully allocated projects as unavailable (disabled with "Project Full" text) + +#### 3. Leadership Interest + +- Provide a multiple-choice question: "Are you interested in a leadership position? (Yes/No)" + +#### 4. GitHub Username Submission + +- Collect students' GitHub usernames for ease of repository management. + +#### 5. Submission Process + +- Ensure all fields are completed before allowing submission. +- Students should be able to view their submission responses within OnTrack. +- Subission should be final (no resubmissions allowed after end of week 2). + +### Data Management + +- The task should automatically collect student names and IDs. +- All form responses should be downloadable as a CSV file for each unit separately. +- Admins should have the ability to modify the form to add/remove project teams or companies. + +### Implementation Considerations + +- A spearate onboarding mobule will be created to guide students on companies and projects before + making selections. +- The form task should have a user-friendly interface and clear instructions to eliminate errors + (eg. Ensure users cannot select a project team that is already full) +- Staff should have an easy-to-use interface for managing project teams and downloading student + selections. + +### Expected Outcomes + +- Streamlined project allocation process within OnTrack. +- Reduced administrative workload for managing company and project selection. +- Improved student experience by ensuring clear and error-free selection processes. + +--- + +## Understanding how SIT374 & SIT378 are currently managed + +### Group Sets & Groups + +- In Team Project A & B units, `groups` are used for submission tasks 2.1P & 6.1P, allowing each + capstone company to make their own handover report submissions. +- As we have the two units, juniors in Team Project A will submit their report for their group + (Company), and seniors in Team Project B will submit their report for their group (Company). +- These groups each are linked to a tutorial within the unit (Company tutorial), automatically + enrolling students into that tutorial. + +### Tutorial Streams & Tutorials + +- `tutorial_streams` are used to categorise different tutorials. +- Students can only be enrolled into one `tutorial` from each `tutorial_stream` +- Tutorials have a designated tutor, allowing them to access the work submitted students that are + "enrolled" into their tutorial. + +### Current schema design + +

+ +

+ +We can observe that group_sets, groups, tutorial_streams, and tutorials, are all children of a +particular Unit. However, since SIT374 and SIT378 are separate units, we can visualise the data +structure something to be like this: + +- SIT374 Team Project A (Unit) + - Company (group_set) + - ThothTech + - DataBytes + - Hardhat Enterprises + - Company (tutorial_stream) + - ThothTech (tutorial) + - DataBytes (tutorial) + - Hardhat Enterprises (tutorial) + - Enrolment (tutorial_stream) + - SIT374 (tutorial) + - SIT764 (tutorial) + - Mentor (tutorial_stream) + - Thoth-Tutor1 (tutorial) + - Thoth-Tutor2 (tutorial) + - DataBytes-Tutor3 (tutorial) + - Hardat-Tutor4 (tutorial) + +_This unit is then essentially duplicated for SIT378 Team Project B. This means that all the +'Company' group_sets and groups, and the 'Company', 'Enrolment', and 'Mentor' tutorial_streams and +streams, are also duplicated_ + +## Implementation Proposal + +- The goal will be to utilise the existing OnTrack `group` and `tutorial` features as much as + possible. + +### Front end + +#### UI Concepts + +##### Admin/Convenor POV + +- Enabling capstone management for a unit +

+ +

+ +- Enable enrolment form for a task +

+ +

+ +- Creating projects, and allocating tutorials to project +

+ +

+ +##### Students POV + +- Awaiting form submission +

+ +

+ +- Filling out the form (modal) +

+ + +

+ +- Completed the form +

+ +

+ +### Back end + +- We will continue to use the "Company" `group_set` and `group` entities to retrieve the available + list of Companies to choose from. +- Existing UI: +

+ +

+ +- We will create a new `capstone_company_projects` entity. This is because we might want to link + multiple tutorials to a single project that a student can choose from, so we cannot use the + existing `tutorial` entities to represent a project. + +#### `capstone_company_projects` + +| | Attribute | Data Type | Note | +| --- | ---------------- | --------- | --------------------------------------------------- | +| PK | id | INT | | +| FK | company_group_id | INT | References the `id` of the company's `group` entity | +| | name | string | eg. "OnTrack" or "Splashkit" for ThothTech company | + +- We will create a new `capstone_company_project_tutorials` to establish which tutorials belong to + which company project. + +#### `capstone_company_project_tutorials` + +| | Attribute | Data Type | Note | +| --- | ------------------- | --------- | ---------------------------------------------------- | +| PK | id | INT | | +| FK | capstone_project_id | INT | References the `id` from `capstone_company_projects` | +| FK | tutorial_id | INT | References the `id` from existing `tutorials` table | + +\*_The capacity of the project will be enforced by the logic already existing in the `tutorial` +entity_ + +#### `capstone_form_responses` + +| | Attribute | Data Type | Note | +| --- | -------------------- | ------------ | ----------------------------------------------------------- | +| PK | id | INT | | +| FK | task_id | INT | References the task the form is for | +| FK | student_id | INT | References the id of the student | +| FK | selected_company_id | INT | References the `id` of the company `group` | +| FK | selected_project_id | INT | References the `id` in `capstone_company_projects` | +| FK | selected_tutorial_id | INT | References the `id` in `capstone_company_project_tutorials` | +| | leadership_interest | BOOL | | +| | github_username | VARCHAR(100) | | + +#### Extending `units` + +| | Attribute | Data Type | Note | +| --- | ----------- | --------- | ------------------------------------------------------------------------------------ | +| | ... | | | +| + | is_capstone | BOOL | Enables the capstone tab when editing the unit. Allows enrolment form to be enabled. | + +#### Extending `task_definitions` + +| | Attribute | Data Type | Note | +| --- | ----------------------------- | --------- | ------------------------------------------------------- | +| | ... | | | +| + | capstone_form_enable | BOOL | Enables capstone form for a task | +| + | capstone_company_group_set_id | BOOL | Determines which group set to use for company selection | + +#### Improving batch imports of groups and tutorials + +- When a unit is duplicated (e.g., via OnTrack Rollover), only `group_sets` and `tutorial_streams` + are copied; `groups` and `tutorials` must be manually imported. +- Now, our only hurdle with this proposal is administration having to duplicate all the group, + tutorials, company projects, and project tutorial links for both SIT374 and SIT378. +- Currently, admins are already able to upload a collection of `groups` through a CSV. +- We will also extend this functionality to the `unit-tutorials-list` component, allowing ease of + management of tutorials, so that they can be batch imported into both SIT374 and SIT378. + +#### Linking of tutorials between SIT374 and SIT378 + +Because we now have two tutorials that **_virtually_** belongs to the same project and company, but +exist under different units, we need to link these two together, so that later on we can count the +number of students enrolled in that tutorial from both SIT374 and SIT378. + +To achieve this, my proposal is to implement a feature that allows units to "sync" a tutorial (or +multiple) from an existing tutorial in another unit. (Not capstone specific) + +#### `unit_tutorial_syncs` + +| | Attribute | Data Type | Note | +| --- | ------------------ | --------- | --------------------------------------------------- | +| PK | id | | +| FK | main_tutorial_id | INT | References `id` from the `tutorial` in one unit | +| FK | synced_tutorial_id | INT | References `id` from the `tutorial` in another unit | + +##### Constraints: + +- **No linking within the same unit:** Tutorials cannot be synced within the same unit. +- **Deleting linked tutorials:** + - If the `synced_tutorial_id` tutorial is deleted, only that link is removed. + - If the `main_tutorial_id` tutorial is deleted, all links for that tutorial are removed, + un-linking the `synced_tutorial_id` tutorials. + +#### "Import Tutorial from Existing Unit" Feature: + +- In the case where **SIT378** is the "main" unit and **SIT374** is the new unit: + - Admins can use the "Import tutorials from existing unit" feature to sync tutorials from + **SIT378** to **SIT374**. + - A modal allows admins to select tutorials from **SIT378** and sync them with **SIT374**. + +##### Process: + +1. Admin clicks "Import tutorials from existing unit" and selects tutorials to sync. +2. For each selected tutorial: + - A new row is created in `unit_tutorial_syncs`: + - `main_tutorial_id` = tutorial `id` from **SIT378** + - `synced_tutorial_id` = tutorial `id` from **SIT374** +3. When listing tutorials in **SIT374**, we check if a tutorial's `id` exists in + `synced_tutorial_id`: + - If yes, it's a synced tutorial and cannot be edited. A tooltip says, "This tutorial cannot be + edited because it is synced from SIT378". +4. When modifying a tutorial in **SIT378**: + + - The `put '/tutorials/:id'` endpoint should be modified to update the corresponding + `synced_tutorial_id` in **SIT374** if it exists in `unit_tutorial_syncs`. + + _Refer to below sequence diagram for full detail_ + +## Sequence Diagram + + + +## Tasks that need to be done + +- [ ] Implement a "Import tutorials" feature +- [ ] BE: Extending `units` entity [Reference](#extending-units) +- [ ] FE: Toggle capstone button functionality + [Reference](./UI/Admin/ui_enable_capstone_management.png) +- [ ] FE: Enable capstone enrolment form on tasks + [Reference](./UI/Admin/ui_admin_task_form_enable.png) +- [ ] BE: Extending `task_definitions` entity [Reference](#extending-task_definitions) +- [ ] FE: Capstone tab (Manage projects, tutorial link) + [Reference](./UI/Admin/ui_admin_add_projects_tutorials.png) + - Similar UI to the Tutorials tab, uses the `capstone_company_projects` and + `capstone_company_project_tutorials` entities. +- [ ] FE: Student task view (if incomplete) [Reference](./UI/Student/ui_begin_enrolment.png) +- [ ] FE: Student task view (if completed) [Reference](./UI/Student/ui_enrolment_complete.png) +- [ ] FE: Enrolment form modal [Reference](./UI/Student/ui_enrolment_form_modal_filling.png) +- [ ] BE: `capstone_company_projects` entity [Reference](#capstone_company_projects) +- [ ] BE: `capstone_company_project_tutorials` entity + [Reference](#capstone_company_project_tutorials) +- [ ] BE: `capstone_form_responses` entity [Reference](#capstone_form_responses) +- [ ] BE: `unit_tutorial_syncs` entity [Reference](#unit_tutorial_syncs) +- [ ] FE: Modify Tutorial admin tab, allowing syncing of tutorials + [Reference](#linking-of-tutorials-between-sit374-and-sit378) +- [ ] And more... (refer to OnTrack planner board on Teams) + +## Issues and constraints with current proposal + +- This implementation does not allow management of the enrolment form, and is hardcoded into + `doubtfire-web`. This could be addressed with dynamic forms, encapsulating the entire the form as + a JSON object, and saving response as a JSON. This is challenging due to the custom logic of + fetching groups and tutorials, validating that the tutorial capacity limit has not been reached + prior to submission. If the form does not require any validation and automatic enrolment, and is + only used to collect student's submission as a CSV (which could then be later used to batch enrol + students into tutorials and groups), then dynamic forms would be feasible. +- However, admin's are still able to modify the companies, teams, and tutorial spots, that the form + dynamically fetches. + +## Future plans + +- Dynamic forms + - Allow admins to dynamically build their own form and save responses as a JSON + - Feasible with https://formio.github.io/angular-demo/ + - `@formio/angular@7.0.0` works with the current version of OnTrack (Angular17) + - Restricted to boostrap UI (no native support for material UI) diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_add_projects_tutorials.png b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_add_projects_tutorials.png new file mode 100644 index 000000000..cf3a98e58 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_add_projects_tutorials.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_task_form_enable.png b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_task_form_enable.png new file mode 100644 index 000000000..4302da2ac Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_admin_task_form_enable.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_enable_capstone_management.png b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_enable_capstone_management.png new file mode 100644 index 000000000..95efd0856 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_enable_capstone_management.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_existing_groups.png b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_existing_groups.png new file mode 100644 index 000000000..533d69294 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Admin/ui_existing_groups.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_begin_enrolment.png b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_begin_enrolment.png new file mode 100644 index 000000000..6baf9c03b Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_begin_enrolment.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_complete.png b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_complete.png new file mode 100644 index 000000000..a4123f2f1 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_complete.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_filling.png b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_filling.png new file mode 100644 index 000000000..83210c610 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_filling.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_viewsubmission.png b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_viewsubmission.png new file mode 100644 index 000000000..01d6ea840 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UI/Student/ui_enrolment_form_modal_viewsubmission.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/UML/current_ontrack_schema_condensed.png b/docs/OnTrack/Capstone Self Enrolment/UML/current_ontrack_schema_condensed.png new file mode 100644 index 000000000..0518d2a13 Binary files /dev/null and b/docs/OnTrack/Capstone Self Enrolment/UML/current_ontrack_schema_condensed.png differ diff --git a/docs/OnTrack/Capstone Self Enrolment/sequence_diagram.svg b/docs/OnTrack/Capstone Self Enrolment/sequence_diagram.svg new file mode 100644 index 000000000..07b2358be --- /dev/null +++ b/docs/OnTrack/Capstone Self Enrolment/sequence_diagram.svg @@ -0,0 +1,2994 @@ + + + title%20Capstone%20Self%20Enrolment%20Proposal%0A%0A%0Aparticipant%20Student%0A%0Aparticipant%20Admin%0A%0Aparticipant%20Frontend-WEB%0A%0A%0Aparticipant%20Backend-API%0A%0A%0Anote%20over%20Admin%2CBackend-API%3A**Creating%20SIT374%20(Project%20A)**%0A%0AAdmin-%3EFrontend-WEB%3ACreate%20SIT374%20%26%20SIT378%20for%20the%5Cnnew%20trimester%20by%20rolling%20over%5Cnthe%20previous%20units.%0AFrontend-WEB-%3EBackend-API%3ANew%20units%20are%20created.%5CnDuplicates%20the%20%60group_sets%60%20and%20%60tutorial_streams%60%5Cninto%20the%20new%20units.%0A%0A%0A%0AAdmin-%3EFrontend-WEB%3A%3E%20Either%20download%20and%20import%20CSV%20of%20tutorials%20from%20previous%20unit%5Cnor%20manually%20create%20a%20CSV%20of%20tutorials%2C%20importing%20it%20into%20the%20unit.%5Cn(Or%20manually%20create%20tutorials%20one-by-one).%5Cn%3E%20The%20name%20of%20the%20%22Company%22%20tutorials%20will%20be%20used%20in%20the%20groups%20CSV%20file%2C%5Cnlinking%20each%20Company%20group%20to%20a%20Company%20tutorial.%0AAdmin-%3EFrontend-WEB%3ADownload%20list%20of%20groups%5Cnfrom%20the%20'Company'%20group%20set%5Cnfrom%20previous%20unit%0AFrontend-WEB--%3EBackend-API%3AFetch%20list%20of%20groups%0ABackend-API--%3EAdmin%3A%20Return%20list%20of%20groups%20as%20CSV%20file%0AAdmin-%3EFrontend-WEB%3AImport%20%22Company%22%20groups%20via%20CSV%20into%20the%20new%20unit.%0AFrontend-WEB--%3EBackend-API%3AInsert%20groups%20into%20the%20database%20based%20off%20CSV%5Cnlinking%20defined%20tutorials%20to%20group.%0AAdmin--%3EFrontend-WEB%3AImport%20tasks%2C%20import%20unit%20alignment%20outcomes%2C%20etc...%0A%0Anote%20over%20Admin%2CBackend-API%3A**Creating%20SIT378%20(Project%20B)**%0AAdmin-%3EFrontend-WEB%3AImport%2FCreate%20tutorials%20only%20for%5Cnthe%20Company%20%26%20Enrolment%20tutorial%20streams.%0AAdmin-%3EFrontend-WEB%3A%3E%20Use%20the%20%22Sync%20tutorial%20from%20external%20unit%22%20feature%5Cnto%20import%20tutorials%20from%20**SIT374**.%5Cn%3E%20Admin%20selects%20the%20unit%20to%20import%20from%20(SIT374)%2C%20then%5Cnusing%20the%20multi-select%20dropdown%2C%20selects%20all%20the%20%22Mentor%22%5Cntutorials%20from%20SIT374%2C%20they%20will%20then%20have%20to%20assign%20the%20staff%5Cnfrom%20SIT374%20for%20each%20tutorial%20then%20click%20%22Sync%22%20or%20%22Import%22%0AFrontend-WEB-%3EBackend-API%3AThe%20API%20will%20duplicate%20selected%20tutorials%5Cnbut%20link%20them%20under%20SIT378.%20This%20will%5Cncopy%20over%20attributes%20like%20tutorial%20capacity.%5CnThese%20tutorials%20%5Bat%20this%20stage%5D%20are%20unique%20to%20the%20unit%20and%20separated.%0AFrontend-WEB-%3EBackend-API%3AA%20new%20record%20is%20created%20inside%20the%20%60unit_tutorial_syncs%60%5Cntable.%20Linking%20the%20original%20tutorial%20from%20SIT374%20as%5Cnthe%20%22main_tutorial%22%2C%20and%20the%20new%20tutorial%20being%20imported%5Cnas%20the%20%22synced_tutorial%22%0AAdmin-%3EFrontend-WEB%3A%3E%20Viewing%20list%20of%20tutorials%20for%20SIT378%5Cn%3E%20Synced%20tutorials%20have%20their%20inputs%20disabled%20and%5Cncannot%20be%20modified%2C%20with%20a%20tooltip%20showing%3A%20%22This%5Cnunit%20is%20synced%20from%20SIT374%22.%0Anote%20over%20Admin%2CBackend-API%3A**Viewing%20SIT374%20(Project%20A)**%0A%0AAdmin-%3EFrontend-WEB%3A%3E%20Viewing%20list%20of%20tutorials%5Cn%3E%20Tutorials%20can%20be%20modified%5Cn%3E%20Admin%20modifies%20one%20Mentor%20tutorial%20to%20adjust%20the%20capacity%0AFrontend-WEB-%3EBackend-API%3A%3E%20Before%20saving%20changes%20to%20the%20unit%2C%20checks%20to%20see%5Cnif%20this%20unit%20is%20synced%20elsewhere%20by%20looking%20in%5Cn%60unit_tutorial_syncs%5Cn%3E%20If%20synced%20unit(s)%20exists%2C%20same%20changes%20are%20applied%20to%20them.%5Cn%3E%20If%20main%20tutorial%20is%20deleted%2C%20only%20the%20sync%20is%20removed.%5CnThe%20synced%20tutorials%20in%20other%20units%20will%20now%20be%20able%20to%20modified%5Cnand%20will%20exist%20as%20their%20own%20tutorial%0A%0Anote%20over%20Admin%2CBackend-API%3A**Setting%20up%20capstone%20projects%20(For%20each%20unit)**%0AAdmin-%3EFrontend-WEB%3AEnable%20the%20%22Is%20Capstone%20Unit%3F%22%5Cncheckbox%20in%20the%20unit%20admin%20dashboard%0AFrontend-WEB-%3EBackend-API%3ASet%20the%20%60units.is_capstone%60%20property%20to%20TRUE%0A%0AAdmin-%3EFrontend-WEB%3A%3E%20Navigate%20to%20the%20%22Capstone%22%20tab%20in%20the%5Cnunit%20admin%20dashboard%5Cn%3E%20Create%20a%20new%20%22Company%20Project%22%20record%5Cn%3E%20Assign%20which%20Company%20Group%20it%20belongs%20to%5Cn%3E%20Select%20which%20tutorials%20belong%20to%20that%20project.%0A%0AFrontend-WEB-%3EBackend-API%3A%3E%20Create%20a%20new%20record%20in%20%60capstone_company_projects%60%5Cn%3E%20For%20each%20selected%20tutorial%2C%20create%20a%20record%20in%5Cn%60capstone_company_project_tutorials%60%2C%20linking%5Cn%20the%20project%20and%20tutorial%20together.%0A%0AAdmin--%3EFrontend-WEB%3A(Repeat%20for%20each%20project%20in%20every%20company)%5Cn(Repeat%20for%20both%20SIT374%20and%20SIT378)%0A%0Anote%20over%20Admin%2CBackend-API%3A**Setting%20up%20the%20enrolment%20form**%0AAdmin-%3EFrontend-WEB%3A%3E%20Create%20a%20new%20task%20(0.1P%20Company%20enrolment%20form)%5Cn%3E%20Tick%20the%20%22Enable%20enrolment%20form%20for%20this%20task%22%5Cn%3E%20Select%20which%20group%20set%20to%20use%20for%20the%20companies%5Cn%3E%20A%20file%20submission%20of%20an%20image%20is%20required%20for%20the%20task%5Cnallowing%20students%20to%20screenshot%20their%20response%20and%20upload%20it%5Cnto%20the%20task.%20Only%20used%20to%20enforce%20a%20submission%20before%20completing%5Cnthe%20task%2C%20and%20is%20saved%20into%20the%20final%20portfolio%20as%20a%20record.%0AFrontend-WEB-%3EBackend-API%3A%3E%20Set%20%60capstone_form_enable%60%20to%20TRUE%20for%20the%20task%5Cn%3E%20Set%20%60capstone_company_group_set_id%60%20to%20the%20selected%20group%0Anote%20over%20Admin%2CBackend-API%3A**Completing%20the%20form%20as%20a%20student**%0AStudent-%3EFrontend-WEB%3A%3E%20Navigate%20to%20SIT374%20%26%20view%20task%200.1P%20Enrolment%20form%5Cn%3E%20Presented%20with%20a%20box%20outlining%20the%20description%20of%20the%20form%5Cn%3E%20Selects%20the%20%22Begin%20Enrolment%22%20button%0AFrontend-WEB-%3EBackend-API%3A%3E%20As%20the%20form%20is%20loading%2C%20it%20fetches%20all%20the%20groups%5Cnfrom%20the%20group%20set%20configured%20in%20the%20task%20(%22Company%22)%5Cn%3E%20Fetch%20list%20of%20projects%20from%20%60capstone_company_projects%60%5Cn%3E%20Fetch%20list%20of%20tutorials%20from%20%60capstone_company_project_tutorials%60%5Cn%3E%20These%20tutorials%20will%20be%20cross-checked%20using%20%60unit_tutorial_syncs%60%5Cntogether%20with%20%60tutorial_enrolments%60%20to%20identify%20the%5Cnnumber%20of%20students%20enrolled%20in%20the%20project%20from%20both%20SIT374%20and%20SIT378%0ABackend-API--%3EFrontend-WEB%3AReturn%20company%20groups%2C%20projects%2C%20and%20related%20tutorials.%0AFrontend-WEB--%3EStudent%3APresent%20the%20enrolment%20form%20as%20a%20modal%0AStudent-%3EFrontend-WEB%3A%3E%20Fills%20out%20the%20form%20and%20submits%20response%0AFrontend-WEB-%3EBackend-API%3A%3E%20Validate%20the%20user%20hasn't%20submitted%20a%20response%20yet%5Cn%3E%20Validate%20that%20the%20selected%20group%20and%20project%20exists%20for%20current%20unit%20(SIT374)%5Cn%3E%20Validate%20that%20the%20capacity%20for%20selected%20tutorial%20has%20not%20been%20exceeded.%5Cn%3E%20If%20valid%3A%5Cn%3E%20Enrol%20the%20student%20in%20the%20Company%20Group%5Cn%3E%20Enrol%20the%20student%20in%20the%20Company%20tutorial%5Cn%3E%20Enrol%20the%20student%20into%20the%20project%20tutorial%5Cn%3E%20Save%20their%20response%20into%20%60capstone_form_responses%60%5Cn%3E%20(Prevent%20automatic%20enrolment%20if%20the%20task%20is%20overdue%3F%20Allows%20late-comers%20to%5Cnsellect%20a%20company%20and%20project%2C%20but%20requires%20an%20admin%20to%20manually%20enrol%5Cnthem%20into%20the%20group%20and%20tutorials)%0AStudent-%3EFrontend-WEB%3A%3E%20Task%20details%20box%20now%20displays%20%22Successful%20form%20submission%22%5Cn%3E%20Student%20can%20select%20%22View%20response%22%2C%20displaying%20the%20same%5Cnmodal%20with%20their%20filled%20out%20details%2C%20with%20inputs%20disabled%0AStudent-%3EFrontend-WEB%3ATo%20complete%20the%20task%2C%20the%20student%20must%20take%20a%20screenshot%5Cnof%20their%20completed%20form%20submission%2C%20and%20upload%20it%20to%20the%20task.%0A%0Anote%20over%20Admin%2CBackend-API%3A**Viewing%20responses**%0A%0AAdmin-%3EFrontend-WEB%3AWhile%20assessing%20the%20submitted%20task%2C%5Cntutors%20are%20also%20able%20to%20%22View%20response%22%5Cnto%20view%20their%20submission.%5Cn(Or%20this%20could%20be%20viewed%20via%20their%20task%20submission%5Cnusing%20their%20uploaded%20screenshot)%0AAdmin-%3EFrontend-WEB%3AAdmins%20can%20navigate%20to%20the%20capstone%20tab%5Cnin%20the%20unit%20admin%20dashboard%2C%20and%20download%5Cna%20list%20of%20all%20the%20submitted%20responses%20as%20a%20CSV%0A%0A + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Student + + + + + + + + Admin + + + + + + + + Frontend-WEB + + + + + + + + Backend-API + + + + + Capstone Self Enrolment Proposal + + + + Creating SIT374 (Project A) + + + + + + Create SIT374 & SIT378 for the + new trimester by rolling over + the previous units. + + + + + + + + + + + + New units are created. + Duplicates the `group_sets` and `tutorial_streams` + into the new units. + + + + + + + + + + + + + + > Either download and import CSV of tutorials from previous unit + or manually create a CSV of tutorials, importing it into the unit. + (Or manually create tutorials one-by-one). + > The name of the "Company" tutorials will be used in the groups CSV file, + linking each Company group to a Company tutorial. + + + + + + + + + + + + Download list of groups + from the 'Company' group set + from previous unit + + + + + + + + + + Fetch list of groups + + + + + + + + + + Return list of groups as CSV file + + + + + + + + + + Import "Company" groups via CSV into the new unit. + + + + + + + + + + + Insert groups into the database based off CSV + linking defined tutorials to group. + + + + + + + + + + Import tasks, import unit alignment outcomes, etc... + + + + + + + + + + Creating SIT378 (Project B) + + + + + Import/Create tutorials only for + the Company & Enrolment tutorial streams. + + + + + + + + + + + + + + + + + > Use the "Sync tutorial from external unit" feature + to import tutorials from  + SIT374 + . + > Admin selects the unit to import from (SIT374), then + using the multi-select dropdown, selects all the "Mentor" + tutorials from SIT374, they will then have to assign the staff + from SIT374 for each tutorial then click "Sync" or "Import" + + + + + + + + + + + + + The API will duplicate selected tutorials + but link them under SIT378. This will + copy over attributes like tutorial capacity. + These tutorials [at this stage] are unique to the unit and separated. + + + + + + + + + + + + + A new record is created inside the `unit_tutorial_syncs` + table. Linking the original tutorial from SIT374 as + the "main_tutorial", and the new tutorial being imported + as the "synced_tutorial" + + + + + + + + + + + + + > Viewing list of tutorials for SIT378 + > Synced tutorials have their inputs disabled and + cannot be modified, with a tooltip showing: "This + unit is synced from SIT374". + + + + + + + + + + Viewing SIT374 (Project A) + + + + + + > Viewing list of tutorials + > Tutorials can be modified + > Admin modifies one Mentor tutorial to adjust the capacity + + + + + + + + + + + + + + + + > Before saving changes to the unit, checks to see + if this unit is synced elsewhere by looking in + `unit_tutorial_syncs + > If synced unit(s) exists, same changes are applied to them. + > If main tutorial is deleted, only the sync is removed. + The synced tutorials in other units will now be able to modified + and will exist as their own tutorial + + + + + + + + + + Setting up capstone projects (For each unit) + + + + + Enable the "Is Capstone Unit?" + checkbox in the unit admin dashboard + + + + + + + + + + Set the `units.is_capstone` property to TRUE + + + + + + + + + + + + + + > Navigate to the "Capstone" tab in the + unit admin dashboard + > Create a new "Company Project" record + > Assign which Company Group it belongs to + > Select which tutorials belong to that project. + + + + + + + + + + + + + > Create a new record in `capstone_company_projects` + > For each selected tutorial, create a record in + `capstone_company_project_tutorials`, linking +  the project and tutorial together. + + + + + + + + + + + (Repeat for each project in every company) + (Repeat for both SIT374 and SIT378) + + + + + + + + + + Setting up the enrolment form + + + + + + + + + + > Create a new task (0.1P Company enrolment form) + > Tick the "Enable enrolment form for this task" + > Select which group set to use for the companies + > A file submission of an image is required for the task + allowing students to screenshot their response and upload it + to the task. Only used to enforce a submission before completing + the task, and is saved into the final portfolio as a record. + + + + + + + + + + + > Set `capstone_form_enable` to TRUE for the task + > Set `capstone_company_group_set_id` to the selected group + + + + + + + + + + Completing the form as a student + + + + + + > Navigate to SIT374 & view task 0.1P Enrolment form + > Presented with a box outlining the description of the form + > Selects the "Begin Enrolment" button + + + + + + + + + + + + + + + + > As the form is loading, it fetches all the groups + from the group set configured in the task ("Company") + > Fetch list of projects from `capstone_company_projects` + > Fetch list of tutorials from `capstone_company_project_tutorials` + > These tutorials will be cross-checked using `unit_tutorial_syncs` + together with `tutorial_enrolments` to identify the + number of students enrolled in the project from both SIT374 and SIT378 + + + + + + + + + + Return company groups, projects, and related tutorials. + + + + + + + + + + Present the enrolment form as a modal + + + + + + + + + + > Fills out the form and submits response + + + + + + + + + + + + + + + + + + + + > Validate the user hasn't submitted a response yet + > Validate that the selected group and project exists for current unit (SIT374) + > Validate that the capacity for selected tutorial has not been exceeded. + > If valid: + > Enrol the student in the Company Group + > Enrol the student in the Company tutorial + > Enrol the student into the project tutorial + > Save their response into `capstone_form_responses` + > (Prevent automatic enrolment if the task is overdue? Allows late-comers to + sellect a company and project, but requires an admin to manually enrol + them into the group and tutorials) + + + + + + + + + + + + > Task details box now displays "Successful form submission" + > Student can select "View response", displaying the same + modal with their filled out details, with inputs disabled + + + + + + + + + + + To complete the task, the student must take a screenshot + of their completed form submission, and upload it to the task. + + + + + + + + + + Viewing responses + + + + + + + + While assessing the submitted task, + tutors are also able to "View response" + to view their submission. + (Or this could be viewed via their task submission + using their uploaded screenshot) + + + + + + + + + + + + Admins can navigate to the capstone tab + in the unit admin dashboard, and download + a list of all the submitted responses as a CSV + + + + + + + + + + + + + +