Skip to content

Commit

Permalink
Sprint 11 7 (#268)
Browse files Browse the repository at this point in the history
* Sprint 11 4 (#261)

* Fixed Edit Group Exam Modal to Disable Past Date Selection

Exam dates can no longer be edited to a date that is in the past.  Also fixed eratic form validation that prevented the submit button from being pressed when certain dates were selected.

* Fixed Issue with Appointment Booking Modal Notes

Notes were being captured but not displayed in the modal.  Fixed.  Also adjusted calendar start time to 8:30am.

* Fixed Errors in Branch Agenda

Previously this component was more complex and it relied on an invisible full-calendar instance to consume and parse the event data however this approach was causing issues.  Since the Agenda has recently been simplified and no longer supports multiple views etc., there is no need for full-calendar.  Have re-implemented using only moment.js and eliminated the errors related to full-calendar

* Deleted Date for Invigilators and Rooms

Client was flooded with requests for how to delete invigilators and rooms upon launch. To accomodate for this request but maintain data integrity, a deleted date was added to both the invigilator and room models, such that if these fields were set to a date in the admin panels for these objects, they will no longer show up in the application drop downs or calendars.

* Allow Office Mgr to Edit Group/Session Exam Details

Logic controlling access to the full version of the Edit Exam Modal did not consider the ita_designate key.  Office Manager previously saw only the fields-limited CSR version.   Changed so that office mgr has same access as GA role.  Also fixed:
-liaison_designate were unable to edit office of pesticide exams.
-the exam_type field of the EditExamModal was listing exam_types which did not make sense. Disabled the ability to switch exam_type on a pesticide exam or challenger exam at all and restricted changing 'other' 'individual ita' and 'group ita' to exam type options of their catagory only.
-adjusted the other field-display and field-disable logic to ensure access to necessary features for office managers
-set the time of the editExamSuccess banner to 3 seconds instead of 6

* Admin Panel - Room -> Office Name Sort

Clients required rooms to be sorted by office name after testing in production.

* Typo (#262)

Missing command from sprint-11-4 PR.

* Sprint 11 6 (#263)

* Admin Panel - Room Searching

Client required rooms to be searchable through admin panels.

* Backend Changes for Tracking Number Length

Bookings application required backend changes to reflect tracking number length of 255 chars. Alembic would not generate a migration file for the length change, so the last migration file in the alembic chain was modified to see this change happen.

* Return Exam fix: Action Taken Length & Deleted Invigilator Changes
-Action Taken field now displays an error at the maximum input length and prevents further input
-Adjusted the exam_inventory table to display the life-ring error symbol on any exam assigned to a deleted invigilator and adjusted the filters to show such exams as not ready.
-Changed a call to previous method name which was revised in EditGrouoBooking modal

* AddExamForm Modal exam_name length validation

Modified existing validation logic to check if exam_name field exceeds 50 characters in length and displays error / prevents advancing until corrected.

* Added exam_name length validation to EditExamModal

Added validation and an error message as per the Return Exam modal at the 50 character limit.

* Fixed Error in Appointments with double clicking

Fixed error where double clicking the appointments page would cause two modals to open.

Also removed stray console.log from return_exam_modal

* Delete Room Admin Warning

Clients required there to be a warning given to admin users if a room is about to have a deleted date applied to it, but it currently being used for bookings in the future. The flask admin on_model_change method was used to detect changes in the deleted date field before submission, and looking at the booking model for instances of such a room being used with start times greater than today (doesn't care about historical instances). If the room isn't in use, the room can be deleted. If the room is in use, and error message propagates telling the user that they were unable to apply the deleted date. Any other changes that the user might make on top of applying a deleted date to a room in use will be saved.

* Changed displayed hours of Appointments Calendar to 8.30 am - 5 pm (#264)

* Sprint 11 2 (#265)

* Sprint 11 4 (#261)

* Fixed Edit Group Exam Modal to Disable Past Date Selection

Exam dates can no longer be edited to a date that is in the past.  Also fixed eratic form validation that prevented the submit button from being pressed when certain dates were selected.

* Fixed Issue with Appointment Booking Modal Notes

Notes were being captured but not displayed in the modal.  Fixed.  Also adjusted calendar start time to 8:30am.

* Fixed Errors in Branch Agenda

Previously this component was more complex and it relied on an invisible full-calendar instance to consume and parse the event data however this approach was causing issues.  Since the Agenda has recently been simplified and no longer supports multiple views etc., there is no need for full-calendar.  Have re-implemented using only moment.js and eliminated the errors related to full-calendar

* Deleted Date for Invigilators and Rooms

Client was flooded with requests for how to delete invigilators and rooms upon launch. To accomodate for this request but maintain data integrity, a deleted date was added to both the invigilator and room models, such that if these fields were set to a date in the admin panels for these objects, they will no longer show up in the application drop downs or calendars.

* Allow Office Mgr to Edit Group/Session Exam Details

Logic controlling access to the full version of the Edit Exam Modal did not consider the ita_designate key.  Office Manager previously saw only the fields-limited CSR version.   Changed so that office mgr has same access as GA role.  Also fixed:
-liaison_designate were unable to edit office of pesticide exams.
-the exam_type field of the EditExamModal was listing exam_types which did not make sense. Disabled the ability to switch exam_type on a pesticide exam or challenger exam at all and restricted changing 'other' 'individual ita' and 'group ita' to exam type options of their catagory only.
-adjusted the other field-display and field-disable logic to ensure access to necessary features for office managers
-set the time of the editExamSuccess banner to 3 seconds instead of 6

* Admin Panel - Room -> Office Name Sort

Clients required rooms to be sorted by office name after testing in production.

* Typo (#262)

Missing command from sprint-11-4 PR.

* Sprint 11 6 (#263)

* Admin Panel - Room Searching

Client required rooms to be searchable through admin panels.

* Backend Changes for Tracking Number Length

Bookings application required backend changes to reflect tracking number length of 255 chars. Alembic would not generate a migration file for the length change, so the last migration file in the alembic chain was modified to see this change happen.

* Return Exam fix: Action Taken Length & Deleted Invigilator Changes
-Action Taken field now displays an error at the maximum input length and prevents further input
-Adjusted the exam_inventory table to display the life-ring error symbol on any exam assigned to a deleted invigilator and adjusted the filters to show such exams as not ready.
-Changed a call to previous method name which was revised in EditGrouoBooking modal

* AddExamForm Modal exam_name length validation

Modified existing validation logic to check if exam_name field exceeds 50 characters in length and displays error / prevents advancing until corrected.

* Added exam_name length validation to EditExamModal

Added validation and an error message as per the Return Exam modal at the 50 character limit.

* Fixed Error in Appointments with double clicking

Fixed error where double clicking the appointments page would cause two modals to open.

Also removed stray console.log from return_exam_modal

* Delete Room Admin Warning

Clients required there to be a warning given to admin users if a room is about to have a deleted date applied to it, but it currently being used for bookings in the future. The flask admin on_model_change method was used to detect changes in the deleted date field before submission, and looking at the booking model for instances of such a room being used with start times greater than today (doesn't care about historical instances). If the room isn't in use, the room can be deleted. If the room is in use, and error message propagates telling the user that they were unable to apply the deleted date. Any other changes that the user might make on top of applying a deleted date to a room in use will be saved.

* Changed displayed hours of Appointments Calendar to 8.30 am - 5 pm (#264)

* Update Documentation and OpenShift Templates (#266)

* Update Documentation and OpenShift Templates

* Service Ctzn Mnmize Button now hides Modal + Allows Navigation

Changed the Minimize Button of the Serve Citizen Modal to hide the modal (on the condition that the Service Begun button has been pressed.  If citizen is 'invited' only, will revert to previous collapse behaviour).

Added conditions to Dash Table, Hold Table, router Navigation Guard for automatic ticket creation in exams, and Dash Buttons, to prevent starting additional tickets with current ticket minimized.

Adjusted Simplified Add Service Modal to display the catagories option but default it to 'Exams' instead of hiding it and fixing it on Exams only.  Adjusted the Serve Citizen modal to allow creation of ticket from Outside the Q and display message indicating noa active ticket when there is none.

* Generate Financial Report - Non Exam Events

Client required reporting to be done on Non Exam Events in the booking model as well as Exam events. A separate query was added to the exam_export end point for booking events without exam IDs, and then added another for loop to the query return results parsing, to parse this object and insert rows in the same csv in the form of exam events. Confirmed with the client beforehand what fields should be blank, which fields required hard coded values and what columns were net new (fees collected)

* Added Ability to Show Offsite Exams only in Booking Calendar

Created a toggle filter as in the Exam Inventory with options: "On-Site", "Offsite", "Both" to replace the current Hide/Show Offsite button.

* Added Validation for Required Fields to Return Exam Modal

* Added Icon for Returned Exam

And updated template slightly to streamline display of Exam Details in Details Row.
  • Loading branch information
sjrumsby authored and gil0109 committed May 23, 2019
1 parent 223066f commit a1d0ea2
Show file tree
Hide file tree
Showing 40 changed files with 1,046 additions and 565 deletions.
356 changes: 182 additions & 174 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,174 +1,182 @@
## Queue Managment System

The Queue Managment System will be used to manage the citizen flow and provide analtyics for our Service BC locations. This system is designed to be used for government offices with a large number of services.

## Technology Stack Used

Single Signon using KeyCloak. This is used so that we don't need to manage the security concerns of passwords within the application. This also integrates to internal authentication model.

Designed for use in an application platform buld for containers specifically OpenShift:

- VueJS & BootStrap for Front End
- Flask & Python for API Backend
- Percona Database Cluster
- RabbitMQ
- Caddy HTTP/2 Web Server

## Features

Designed to accomodate multiple locations.
Designed for both reception based offices and direct counter offices.

Additional features for Reception offices:

- Waiting queue displayed
- Citizens are called by name
- Digital Signage includes Current number of people waiting
- Handles a Quick Transaction Counter
- Ability to invite next citizen or pick from the waiting queue

Basic Digital Signage URLs per office

- Date and Time based on TimeZone
- MP4 to display messageing

Hold Queue

- Allows staff to place citizen tickets on hold

Track Channels of an interaction from In Person, Phone, etc.

Service Listings

- Sorted by category
- Searching service listings includes descriptions
- Hovering over a service listing displays descriptions
- Ability to customize service listing per Office
- Ability to hide Services from Digital Signage display
- Ability to add multiple services in one interaction

Office Status Panel

- Provides a manager the ability to see counter interaction details

Basic Administration Panels to add, update and delete:

- Offices
- Customer Service Reps
- Service Listing
- Channels
- Roles

Feedback

- Sends to Slack and / or Service Now

Analytics

- Key timing events are sent to snowplow for analysis and reporting
- Data is also stored in the Percona MySQL database as an alternative method to extract analytics

## Requirements

Requires KeyCloak and additional Openshift / Kubernetes Config Maps

- keycloak.json is required in Front End Container in the following location: /var/www/html/static/keycloak

{
"realm": "",
"auth-server-url": "" ,
"ssl-required": "",
"resource": "",
"credentials": {
"secret": ""
}
}

- secrets.json is required in API Container in the following location: /opt/app-root/src/client_secrets

{
"web": {
"realm_public_key": "",
"issuer": "" ,
"auth_uri": "" ,
"client_id": "",
"client_secret": "",
"redirect_urls": [
""
],
"userinfo_uri": "" ,
"token_uri": "" ,
"token_introspection_uri": ""
}
}

- Digital Signage video (with the name of sbc.mp4) needs to be manually placed in /var/www/html/static/videos

The openshift templates are used for build configs and deployment configs

Additional Enviornment Variables for API pods are used:

SLACK_URL - to integrate feedback to Slack
THEQ_SNOWPLOW_ENDPOINT - where snowplow events are sent
THEQ_SNOWPLOW_APPID - Application ID for snowplow
THEQ_SNOWPLOW_NAMESPACE - Snowplow events namespace
THEQ_SNOWPLOW_CALLFLAG - disable/enable snowplow (Value: True or False)

## [Installation](documentation/Readme.md)

Additional information can be found in the [documention](documentation/Readme.md) folder.

## Goals/Roadmap

Currently onboarding to all of our sites.
Next major updates include:

- Room Booking component
- Service Appointments

## Getting Help or Reporting an Issue

To report bugs/issues/feature requests, please file an [issue](../../issues).

## How to Contribute

_If you are including a Code of Conduct, make sure that you have a [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) file, and include the following text in here in the README:_
"Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms."

## License

Detailed guidance around licenses is available
[here](/BC-Open-Source-Development-Employee-Guide/Licenses.md)

Attach the appropriate LICENSE file directly into your repository before you do anything else!

The default license For code repositories is: Apache 2.0

Here is the boiler-plate you should put into the comments header of every source code file as well as the bottom of your README.md:

Copyright 2015 Province of British Columbia

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

For repos that are made up of docs, wikis and non-code stuff it's Creative Commons Attribution 4.0 International, and should look like this at the bottom of your README.md:

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">YOUR REPO NAME HERE</span> by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">the Province of Britich Columbia</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.

and the code for the cc 4.0 footer looks like this:

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence"
style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br /><span
xmlns:dct="http://purl.org/dc/terms/" property="dct:title">YOUR REPO NAME HERE</span> by <span
xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">the Province of Britich Columbia
</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">
Creative Commons Attribution 4.0 International License</a>.
## Queue Managment System

The Queue Managment System will be used to manage the citizen flow and provide analtyics for our Service BC locations. This system is designed to be used for government offices with a large number of services.

## Technology Stack Used

Single Signon using KeyCloak. This is used so that we don't need to manage the security concerns of passwords within the application. This also integrates to internal authentication model.

Designed for use in an application platform buld for containers specifically OpenShift:

- VueJS & BootStrap for Front End
- Flask & Python for API Backend
- Percona Database Cluster
- RabbitMQ
- Caddy HTTP/2 Web Server

## Features

Designed to accomodate multiple locations.
Designed for both reception based offices and direct counter offices.

Additional features for Reception offices:

- Waiting queue displayed
- Citizens are called by name
- Digital Signage includes Current number of people waiting
- Handles a Quick Transaction Counter
- Ability to invite next citizen or pick from the waiting queue

Basic Digital Signage URLs per office

- Date and Time based on TimeZone
- MP4 to display messageing

Hold Queue

- Allows staff to place citizen tickets on hold

Track Channels of an interaction from In Person, Phone, etc.

Service Listings

- Sorted by category
- Searching service listings includes descriptions
- Hovering over a service listing displays descriptions
- Ability to customize service listing per Office
- Ability to hide Services from Digital Signage display
- Ability to add multiple services in one interaction

Office Status Panel

- Provides a manager the ability to see counter interaction details

Service Appointments (Optional)

- Calendar for booking appointments
- Ability to Checkin clients and place them at the top of the queue

Room Booking and Exam Invigilation (Optional)
- Manage Industry Trade Authority Group and Individual Exams
- Manage Other (Basic Exams)
- Manage General Room Booking
- Report on Exams


Basic Administration Panels to add, update and delete:

- Offices
- Customer Service Reps
- Service Listing
- Channels
- Roles
- Invigilators
- Exam Types
- Rooms
- Counter Types

Feedback

- Sends to Slack and / or Service Now and / or Rocket Chat

Analytics

- Key timing events are sent to snowplow for analysis and reporting
- Data is also stored in the Percona MySQL database as an alternative method to extract analytics

## Requirements

Requires KeyCloak and additional Openshift / Kubernetes Config Maps

- keycloak.json is required in Front End Container in the following location: /var/www/html/static/keycloak

{
"realm": "",
"auth-server-url": "" ,
"ssl-required": "",
"resource": "",
"credentials": {
"secret": ""
}
}

- secrets.json is required in API Container in the following location: /opt/app-root/src/client_secrets

{
"web": {
"realm_public_key": "",
"issuer": "" ,
"auth_uri": "" ,
"client_id": "",
"client_secret": "",
"redirect_urls": [
""
],
"userinfo_uri": "" ,
"token_uri": "" ,
"token_introspection_uri": ""
}
}

- Digital Signage video (with the name of sbc.mp4) needs to be manually placed in /var/www/html/static/videos

The openshift templates are used for build configs and deployment configs

Additional Enviornment Variables for API pods are used:

SLACK_URL - to integrate feedback to Slack
THEQ_SNOWPLOW_ENDPOINT - where snowplow events are sent
THEQ_SNOWPLOW_APPID - Application ID for snowplow
THEQ_SNOWPLOW_NAMESPACE - Snowplow events namespace
THEQ_SNOWPLOW_CALLFLAG - disable/enable snowplow (Value: True or False)

## [Installation](documentation/Readme.md)

Additional information can be found in the [documention](documentation/Readme.md) folder.

## Getting Help or Reporting an Issue

To report bugs/issues/feature requests, please file an [issue](../../issues).

## How to Contribute

_If you are including a Code of Conduct, make sure that you have a [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) file, and include the following text in here in the README:_
"Please note that this project is released with a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms."

## License

Detailed guidance around licenses is available
[here](/BC-Open-Source-Development-Employee-Guide/Licenses.md)

Attach the appropriate LICENSE file directly into your repository before you do anything else!

The default license For code repositories is: Apache 2.0

Here is the boiler-plate you should put into the comments header of every source code file as well as the bottom of your README.md:

Copyright 2015 Province of British Columbia

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

For repos that are made up of docs, wikis and non-code stuff it's Creative Commons Attribution 4.0 International, and should look like this at the bottom of your README.md:

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">YOUR REPO NAME HERE</span> by <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">the Province of Britich Columbia</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.

and the code for the cc 4.0 footer looks like this:

<a rel="license" href="http://creativecommons.org/licenses/by/4.0/"><img alt="Creative Commons Licence"
style="border-width:0" src="https://i.creativecommons.org/l/by/4.0/80x15.png" /></a><br /><span
xmlns:dct="http://purl.org/dc/terms/" property="dct:title">YOUR REPO NAME HERE</span> by <span
xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">the Province of Britich Columbia
</span> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">
Creative Commons Attribution 4.0 International License</a>.
Loading

0 comments on commit a1d0ea2

Please sign in to comment.