# Dispatching
## Notes
- team availability could be used to get inspector working hours
- The system will prioritize the locations that are limited to certain users (labels) then dispatch other locations
- User Labels is a list assigned to user with 2 properties (Name, Value)
- Example: Label Name = `Gender`, Label Value = `Male`
- Example: Label Name = `Nationality`, Label Value = `Egyptian`
- New Table to track dispatching generated schedule should be added
- Add new flag to schedule (Is System)
- We have two jobs (create interval activities - adjust missing visits)
## Model
- Id
- Name
- Locations Filters (List)
- Filter Type [Type, Category, SubCategory, Account, Landmark, Ids]
- Filter Values (list) [TypeIds, CategoryIds, SubCategoryIds, AccountIds, Landmarks, Location Ids]
- Allowed Users (not a list)
- Filter Type [Any, Type, Ids, Labels]
- User Type [User, Unit User, Location User]
- User Ids (list) (nullable)
- Labels
- Label Name (new column added to user)
- Label Value (new column added to user)
- Location Grouping [Category, Type, Direct Parent, GPS and Distance(later)]
- Dispatch Schedule
- Start Date
- End Date (nullable)
- Interval (Days, Weeks, Months)
- Number of Visits Per Interval
- Activity Configs
- Form
- Workflow
- Event Type
- Submit The Report At Site
- Activity Type
- Users Limits
- [x] Max Visits Per Day
- [x] Max Visits Per Week
- [x] Max Visits Per Month
- [x] Visit Interval (Hours)
- Location Limits
- [ ] Max Visits Per Day
- [x] Max Visits Per Week
- [x] Max Visits Per Month
- Follow-ups
- Event Status (nullable)
- Min Readiness (nullable)
- Max Readiness (nullable)
- Notice Period (Days)
- Follow-up User
- Same Inspector
- Different Inspector
- Inspector Supervisor
## JSON
```json=
{
"id": "",
"name": "Dispatching Name 1",
"locationsFilter": [
{
"filterType": "",
"filterValue": [ "" ],
"allowedUser": {
"filtertype": "",
"userType": "",
"userId": [],
"lable": {
"name": "",
"value": "" }
}
}
],
"dispatchSchedule": {
"startDate": "01-04-2023",
"endDate": "",
"interval": "",
"numberOfVisit": 5 },
"activityConfiguration": {
"form": "",
"workflow": "",
"eventType": "",
"submitTheReportAtSite": true,
"activityType": "" },
"usersLimits": {
"maxVisitsPerDay": 5,
"maxVisitsPerWeek": 5,
"maxVisitsPerMonth": 5,
"visitInterval": 5 },
"locationLimits": {
"maxVisitsPerDay": 5,
"maxVisitsPerWeek": 5,
"maxVisitsPerMonth": 5 },
"followUps": {
"eventStatus": null,
"minReadinness": null,
"maxReadinness": null,
"noticPeriodInDays": 0,
"FollowUpUser": {
"SameInspector": "",
"DifferentInspector": "",
"InspectorSupervisor":"" }
}
}
```