diff --git a/html/template/sync/planning-root.html b/html/template/sync/planning-root.html new file mode 100644 index 00000000..9082ed13 --- /dev/null +++ b/html/template/sync/planning-root.html @@ -0,0 +1,295 @@ +{{ template "sync/layout/authenticated.html" . }} + +{{ define "title" }}Planning{{ end }} +{{ define "extraheader" }} + + + + +{{ end }} +{{ define "content" }} + + +
+
+

Daily Planning Workbench

+
+ Signals and leads enter from the left, are investigated in the center, + and transformed into structured field assignments using tools on the + right. +
+
+
+ +
+ +
+
+
+ Incoming Signals & Leads +
+
+ +
+
Species
+ + +
Signal Type
+ + +
Sort By
+ +
+ +
+ + +
+
Signals
+ +
+
+ Public Report – Service Request #1024 +
+
+ Aedes aegypti • Standing Water Complaint +
+
+ +
+
+ Trap Spike – H3 8828308281fffff +
+
Culex pipiens • Adult Surge
+
+ +
+
+ Residual Expiring – Parcel 45-233-01 +
+
Reinspection Due
+
+
+ +
+ + +
+
Mosquito Control Plan Follow-Ups
+ +
+
+ Plan Follow-Up – Greenway HOA Basin +
+
+ Residential Section • Verification Required +
+ Plan +
+ +
+
+ Plan Follow-Up – Ag Irrigation Canal 7B +
+
Ag Section • Monitoring Window
+ Plan +
+
+ +
+ + +
+
Existing Leads
+ +
+
Lead #L-204
+
3 Signals • Aedes aegypti
+
+ +
+
Lead #L-198
+
2 Signals • Culex pipiens
+
+
+
+
+
+ + +
+
+
+ Active Investigation Workbench +
+
+
+ Map Placeholder
+ H3 Cells • Parcels • Signal Density • Lead Clusters +
+ +
+
+
+
+
Selected Signals
+
3 Signals Selected
+
    +
  • Public Report – Aedes aegypti
  • +
  • Trap Spike – Culex pipiens
  • +
  • Plan Follow-Up – HOA Basin
  • +
+
+
+
+ +
+
+
+
Derived Lead Strength
+
Signal Convergence Score
+
+ High Confidence +
+
+
+
+ +
+
+
+
Related Communications
+
Inbound & outbound contact
+
    +
  • Resident follow-up requested
  • +
  • HOA notification sent
  • +
+
+
+
+ +
+
+
+
Priority Context
+
Risk synthesis
+ Elevated Aedes Risk +
+
+
+
+
+
+
+ + +
+
+
Transformation Tools
+
+
+
Signal → Lead
+ + + +
+ +
+ +
+
Lead → Field Assignment
+ + + +
+ +
+ +
+
Assignment Controls
+ + + +
+
+
+
+
+{{ end }} diff --git a/sync/planning.go b/sync/planning.go new file mode 100644 index 00000000..bca944ce --- /dev/null +++ b/sync/planning.go @@ -0,0 +1,14 @@ +package sync + +import ( + "context" + "net/http" + + "github.com/Gleipnir-Technology/nidus-sync/db/models" +) + +type contentPlanningRoot struct{} + +func getPlanningRoot(ctx context.Context, r *http.Request, org *models.Organization, user *models.User) (*response[contentPlanningRoot], *errorWithStatus) { + return newResponse("sync/planning-root.html", contentPlanningRoot{}), nil +} diff --git a/sync/routes.go b/sync/routes.go index 02485413..d38df682 100644 --- a/sync/routes.go +++ b/sync/routes.go @@ -52,6 +52,7 @@ func Router() chi.Router { r.Method("GET", "/layout-test", authenticatedHandler(getLayoutTest)) r.Method("GET", "/message", authenticatedHandler(getMessageList)) r.Method("GET", "/notification", authenticatedHandler(getNotificationList)) + r.Method("GET", "/planning", authenticatedHandler(getPlanningRoot)) r.Method("GET", "/pool", authenticatedHandler(getPoolList)) r.Method("GET", "/pool/create", authenticatedHandler(getPoolCreate)) r.Method("GET", "/pool/{id}", authenticatedHandler(getPoolByID)) diff --git a/sync/url.go b/sync/url.go index 516ad6e7..e3641d61 100644 --- a/sync/url.go +++ b/sync/url.go @@ -9,11 +9,45 @@ type contentURL struct { Root string Route string SamplePoolCSV string + Sidebar contentURLSidebar Setting contentURLSetting Tegola string UploadCSVPool string } +func newContentURL() contentURL { + return contentURL{ + OAuthRefreshArcGIS: config.MakeURLNidus("/arcgis/oauth/begin"), + Root: config.MakeURLNidus("/"), + Route: config.MakeURLNidus("/route"), + SamplePoolCSV: config.MakeURLNidus("/static/file/sample-pool.csv"), + Setting: newContentURLSetting(), + Sidebar: newContentURLSidebar(), + Tegola: config.MakeURLTegola("/"), + UploadCSVPool: config.MakeURLNidus("/upload/pool"), + } +} + +type contentURLSidebar struct { + Communication string + Configuration string + Intelligence string + Operations string + Planning string + Review string +} + +func newContentURLSidebar() contentURLSidebar { + return contentURLSidebar{ + Communication: config.MakeURLNidus("/communication"), + Configuration: config.MakeURLNidus("/configuration"), + Intelligence: config.MakeURLNidus("/intelligence"), + Operations: config.MakeURLNidus("/operations"), + Planning: config.MakeURLNidus("/planning"), + Review: config.MakeURLNidus("/review"), + } +} + type contentURLSetting struct { ArcGIS string Fieldseeker string @@ -26,17 +60,6 @@ type contentURLSetting struct { UserAdd string } -func newContentURL() contentURL { - return contentURL{ - OAuthRefreshArcGIS: config.MakeURLNidus("/arcgis/oauth/begin"), - Root: config.MakeURLNidus("/"), - Route: config.MakeURLNidus("/route"), - SamplePoolCSV: config.MakeURLNidus("/static/file/sample-pool.csv"), - Setting: newContentURLSetting(), - Tegola: config.MakeURLTegola("/"), - UploadCSVPool: config.MakeURLNidus("/upload/pool"), - } -} func newContentURLSetting() contentURLSetting { return contentURLSetting{ ArcGIS: config.MakeURLNidus("/setting/integration/arcgis"),