Below here a table is shown with the identified changes between ECP and Valghalla, based on tasks and user stories
...
Data model is shown here: Data model
ECP vs Valghalla UI structure view: https://aarhuskommune-my.sharepoint.com/:x:/g/personal/movk_aarhus_dk/EUm4O-eqCuhNth1XIRnhEhwBGRDTjCBi5Cqe2kflA8m89g?rtime=E223oKNL20g
Another way to view the data is this page Reusable ECP components it also takes its point in the user interface.
Most Jira user stories referenced has subtasks, references to other user stories and links to Figma where mockups of the desired user interface is
Go-to the Jira user story to see them.
Transformation:
In general we should remove:
CreatedByOld
ChangedByOld
When changing / removing / adding an Entity we should also update / review:
Automapper
EntityConfiguration
Schema
Modules
Changing from MSSQL to Postgres be aware of:
Connection string is different
Where model configuration is set to be required and HasDefaultValueSql, the “((1))” value has to be changed to “TRUE”
Where model configuration has HasColumnType(datetime) it needs to either be changed to HasColumnType(timestamp) or it needs to be removed, resulting in Postgres type timestamp with time zone
Previous migrations has to be deleted and a new will have to be created.
dotnet ef migrations add InitialCreate --output-dir "C:\dev\Valghalla\Internal application\Kaskelot.Internal.Infrastructure\Migrations\Stopping the PostgresSql engine
sc stop postgresql-x64-15
Starting the PostgresSql engine (is not started)
sc start postgresql-x64-15
From all data model entities
Action | Name | Link | Data notes | Functionality notes | ||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Remove | Materials | /administration/material | ||||||||||||||||||||||||||||||||||||||||||||||||||
Remove / Repurpose | Courses | Repurpose CourseEntity | /course → /Communication | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Rooms | Remove RoomEntity | /building/details/ | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Constituency | Remove ConstituencyEntity | /administration/structure | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Parish | Remove ParishEntity | /administration/structure | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Sign Not needed | Remove SignEntity | /building/details/ | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Applications | FieldAlternativeEntity | Some of this functionality / components might be useful in the communication portion) | |||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Forms | |||||||||||||||||||||||||||||||||||||||||||||||||||
Change | Templates Not needed | /administration/templates
| ||||||||||||||||||||||||||||||||||||||||||||||||||
Remove | Electorial district | Remove ElectoralDistrictEntity | /administration/structure | |||||||||||||||||||||||||||||||||||||||||||||||||
Investigate | Tag | PersonTagEntity | /administration/category | |||||||||||||||||||||||||||||||||||||||||||||||||
Decide | Group Type → Team type | GroupTypeEntity | /administration/category | |||||||||||||||||||||||||||||||||||||||||||||||||
New | Validation rules |
| New entity and table in the data model or as a fixed model (enum or json object) in the code ? Reference to a localized string per. entry |
| ||||||||||||||||||||||||||||||||||||||||||||||||
New | Election types |
| New entity and table in the data model. Reference to the selected validation rules | Show in administration area on same level as election. | ||||||||||||||||||||||||||||||||||||||||||||||||
New / Change | Special diet (reuse Category if it makes sense) |
| New entity and table in the data model | Perhaps reuse category dialog setup and category card from administration if it makes sense. | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Election committee contact information |
| New entity and table in the data model, see field fields in figma link on the individual task. | Show in administration area on same level as election. | ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Disctrict → Area |
| Add in entity DistrictEntity data model
Rename DistrictEntity to Area AreaEntity in source code | Move from structure to administration area on same level as election. Add field for
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Election |
| Add in entity ElectionEntity data model
Change in the entity data model
Remove in entity data model
|
Add fields for
| ||||||||||||||||||||||||||||||||||||||||||||||||
New | Election |
| Automated tasks
Bound to communications settings | |||||||||||||||||||||||||||||||||||||||||||||||||
New | Election |
| N/A | All election data except participants is copied to a new election call the same and suffixed with (copy) maybe we could write a stored procedure for that ? | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Automated tasks / job | N/A | Known about the daily scheduled task / job
| |||||||||||||||||||||||||||||||||||||||||||||||||
New | CPR (social security job) Automated tasks / job |
| Create CPRQueueEntity
Create Table CPRQueue This is not set in stone, it is a suggestion | Known about this scheduled task / job
This is not set in stone, it is a suggestion | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Web (Declaration of consent) |
| Maybe reuse the WebConfigurationEntity if it makes sense |
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Building->Work location |
| Remove binding to Election (this is global)
Remove in the BuildingEntity data model
Rename to BuildingEntity to WorkLocation in source code Remove BuildingEventLogEntity data model |
Add fields for
Remove / repurpose fields
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Function → Task type |
| Remove binding to Election (this is a global configuration) Add in entity FunctionEntity data model
Change in entity data model
Remove from entity data model
Rename FunctionEntity to TaskType TaskTypeEntity in source code |
Add field for
Remove / repurpose fields
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Group → Team |
| Remove binding to Election (this is a global configuration) Add in entity GroupEntity data model
Change in entity data model
Remove from entity data model
Undetermined
Rename from GroupEntity to Team TeamEntity in source code |
Add fields for
Remove / repurpose fields
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | User interface |
| N/A | Show election selection as a drop down in top right hand corner. | ||||||||||||||||||||||||||||||||||||||||||||||||
New | User interface |
| N/A | Show a breadcrumb in the solution | ||||||||||||||||||||||||||||||||||||||||||||||||
New | User interface |
| N/A | Use either
Help text should be localized | ||||||||||||||||||||||||||||||||||||||||||||||||
New | User Interface |
| Store data in WebConfiguration table | Help icon in top righthand corner | ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Person → Participant |
| Add to the PersonEntity data model
Remove from PersonEntity data model
Rename from PersonEntity to ParticipantEntity Change in the PersonEventLogEntity data model
| /person → Add person Add field for
Add button (Lookup participant) next to the Social security number, should use a service to lookup the core participant data. Reuse eventlog interface but make it more automated, no manual entries can be put in the eventlog Remove fields
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Person overview → Participant overview |
| We might need to change/adjust the view supplying this functionality | /person Show fields
Remove fields
Filter changes
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change | Person details → Participant details |
| /person/details/<ID> Add communication log (reuse event log or repurpose course functionality ?) Reuse button (Lookup participant) next to the Social security number, should use a service to lookup the core participant data. Remove:
| |||||||||||||||||||||||||||||||||||||||||||||||||
New | Import participants |
| N/A | Should be a background task, because it could take some time ? | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Export participants |
| Might need some minor changes | Ensure report generator / analyze functionality can be used for this. | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Participants functionality |
| N/A | Logic for the different tasks are described in the tasks. Automated tasks
Manually initiated
| ||||||||||||||||||||||||||||||||||||||||||||||||
New | Link generator | Add entity “LinkEntity” for link storage Add a separate table for each link type to handle
Use the following columns
| The link will be created in the internal application. Where the functionality is available we should add a icon / button control to show the link To ensure that we don’t create multiple links for the same item/entity/query we will generate a HashValue and use that as a key. It will be parsed in the external web and should always show a minimum amount of information on a unprotected route in the external web.
A details page for each should also be in an unprotected route in the external web. Require login/protected route when “Register” button on task is clicked in the external web. This functionality is referenced a number of places in the specifications.
| |||||||||||||||||||||||||||||||||||||||||||||||||
New | External web - Task overview |
| N/A |
| ||||||||||||||||||||||||||||||||||||||||||||||||
New | External web - Task registration |
| N/A |
| ||||||||||||||||||||||||||||||||||||||||||||||||
Keep | Lists |
| N/A | Use report generator to create datasets to export to csv | ||||||||||||||||||||||||||||||||||||||||||||||||
New | Validation upon participant creation |
| New entity and table in the data model or as a fixed model (enum or json object) in the code ? Reference to a localized string per. entry |
| ||||||||||||||||||||||||||||||||||||||||||||||||
New | Automated validation | Use CPRQueueEntity Use Table CPRQueue This is not set in stone, it is a suggestion | See previous entry about CPRQueue The service should be expanded to also check assigned tasks and see that the participant is still valid, can be silent unless participant is no longer valid, then is should go in the participant eventlog. This is not set in stone, it is a suggestion | |||||||||||||||||||||||||||||||||||||||||||||||||
New | Communication templates |
| Create new enum with communication types
Create a new entity and table to store the templates or repurpose the Course tables and entities
Create a new entity and table to store the template to task type mapping or CourseOccasion tables and entities.
| Create an interface with:
| ||||||||||||||||||||||||||||||||||||||||||||||||
Change / New | External web |
| Use Person entity → Participant entity | Participants can see their own details on a page or in a dialog in the external web application Only phone number and Email can be changed by the user on their profile See task for rules on when its possible to delete a profile. | ||||||||||||||||||||||||||||||||||||||||||||||||
Change / New | External web |
| Staffing Group entity → Staffing entity
| Possibility for a participant to cancel a task registration. See Jira tasks for rules on when it is possible for a participant to cancel a task registration. | ||||||||||||||||||||||||||||||||||||||||||||||||
Change |
Fjern oplysninger om arbejdssted
...
Visiting address information
...
Building Category
...
Expandable
...
/ New | External web |
| Use Staffing entity | See invitation and accept or decline assigned task. Task is assigned in internal application, upon task assignment see
| ||||||||||||||||||||||||
New | External web |
| Use ElectionContactInformationEntity | Show either in the footer in the center or show in a dialog when clicking a link. | ||||||||||||||||||||||||
New | External web |
| Use Staffing entity |
| ||||||||||||||||||||||||
New | External web |
| Use Staffing entity Use LinkEntity | See Jira task description for the different ways a team task can be shared. Show should only be possible if the user has the Team Responsible role. | ||||||||||||||||||||||||
New | External web |
| Use LinkEntity | Mostly UI and link functionality. | ||||||||||||||||||||||||
New | External web |
| Use TeamEntity Use Staffing entity |
| ||||||||||||||||||||||||
New | Exterla web |
| Use ElectionContactInformationEntity Use ConfigurationEntity |
| ||||||||||||||||||||||||
New | Communication |
| Create CommunicationLogEntity and CommunicationLog table
|
| ||||||||||||||||||||||||
New | Communication notifications (Automated) |
| Use CommunicationQueueEntity Use Table CommunicationQueue This is not set in stone, it is a suggestion | Use the task types and communication template settings to determine if notification to participant should be sent. Use an automated queued approach See individual Jira stories and subtasks for more detail. A service should be created to ensure notifications are sent and their status recorded in a communication log. This is not set in stone, it is a suggestion | ||||||||||||||||||||||||
New | Notification hub |
| Based on the subtasks in the Jira story we will need a new NotificationEntity and Notification table
|