SmartInventory Web Portal — Screen-by-Screen UI Catalog
A thorough, screen-by-screen catalog of the SmartInventory web portal (FTTx/fiber GIS inventory), built from a live read-only capture of the demo instance. Its purpose is to ground the rewrite’s data model in how the UI actually works: which behaviours are config-as-data vs hardcoded, and which DB tables/
fn_*each screen administers. It complementsdocs/SmartInventory_WebUI_Usage_and_API_Map.md(API/controller map) anddocs/database/00–08(data model).
1. Overview & method
- What was captured. A live demo deployment —
http://networkaccess.st.leptonsoftware.com, product v8.16.4.0, admin login — captured read-only via Playwright on 2026-06-16 (no browser/DB touched for this doc). Captured: the map workspace, the full command toolbar, the NE Library palette, 17 operational dialogs, and 50 admin/configuration screens (every left-nav admin action). - Artifacts (all under
references/ui-exploration/):- Screenshots (
shots/):W-main.png,W-toolbar.png,02-dashboard.png,03-layers-on.png, theF-*.pngadmin forms;shots/detail/:adm-00..49-*.png(admin screens) anddlg-00..16-*.png(operational dialogs). - Structured dumps:
DETAIL_ADMIN.txt(per-admin-page FIELDS / GRID columns / SELECT options — authoritative for form contents),TOOL_INVENTORY.txt(the fullsi.*client-action namespace),LIVE_FINDINGS.md(shell/auth/SignalR/toolbar summary).
- Screenshots (
- Caveat. This demo is a smaller, different deployment than the
smartinventory_qaDB analyzed indocs/database/; its layers/data differ. Use it to ground usage and configurability, not specific data values. The DB table names cited below are the authoritative ones fromdocs/database/. - Headline finding. The web client is a server-rendered ASP.NET MVC 5 / jQuery monolith — every action lives in one global JS object,
si.*. Almost all UI behaviour is config in a DB table or logic in a stored function (fn_*). The admin area is ~20 disjoint config screens, nearly all sharing one grid pattern; and it exposes only a sliver of the underlyinglayer_detailsentity registry (5 of ~80 flags). See §6.
2. Map workspace (/Products/main)
The default landing surface (shots/W-main.png, 02-dashboard.png, 03-layers-on.png). Layout = a top blue header bar, a left “NETWORK LAYERS” tree, the Google Maps canvas, and a bottom status bar.
Top blue header bar
- SMARTINVENTORY wordmark logo (left).
- Centered geocoder: an “Enter a location” search box with a Google-search icon, an arrow (search) button, and an entity/landbase search-mode toggle. The search dropdown switches between Location (
si.performSearch('Google')), Entity (si.performSearch('Entity')), and LandBase (si.performSearch('LandBaselayer')). - A dense ~30-icon command toolbar (see §3) spanning the bar.
- Right side: a notification bell with a live SignalR count badge (
si.notification('A')), a workspace/user icon, and an Admin ▾ dropdown (si.getWorkSpaces,si.getChangePassword,si.uploadProfileImage,si.SignOut).
Left “NETWORK LAYERS” panel
- A collapsible “LAYERS” header (with a
–minimize and a refresh icon), then “Select All” and an “Advanced Filters” link (si.GetProjecSpeciFilter/si.ClearProjectSpeciFilter) for project-specification filtering, plus per-layer Zoom-level / Planned / As-Built / Dormant / Show-Label sub-toggles (si.handlePrClick,si.handleChClick). - Below that, a grouped layer tree. Observed groups and members: Transmedia → Cable; Structure1 → Pole; Structure → Wall Mount / Manhole / Central_Office / Building / Tree / CDB / Handhole; SPAN → Trench / Duct; Equipment → Splitter / CPE / FDP / Cabinet / ATB; plus loose layers FDC / CSA_Boundary / SurveyArea / Fault / Customer / Patch Panel / (and per
LIVE_FINDINGS: Sector / DSA_Boundary / FAT / SpliceClosure / ROW / CX / Area / Coupler / Tower). - Each layer row exposes toggle columns (visibility / select / edit / label — small checkbox/icon columns) and a live feature count at the right. This panel is the rendered front-end of the
layer_detailsregistry +layer_group_master/layer_group_mapping(docs/database/01); group/order fromViewLayerGroupsMapping(§5).
Map canvas
- Google Maps JS basemap; network feature layers are MapServer WMS image overlays (no GeoJSON XHR at country zoom — tiles load only over data extents). Basemap controls: Toggle Base Map (
si.toggleBaseMap), No Map / white (toggleWhiteMap), Layer Manager (showLayerManager). A fullscreen control sits at the top-right of the canvas.
Bottom status bar
- Coordinates · Version: 8.16.4.0 · Zoom:
· Legend toggle ( si.OpenLegend/si.ClosedLegend).
3. Command toolbar — tool-by-tool
From shots/W-toolbar.png + TOOL_INVENTORY.txt. All handlers are methods on the global si.* object (splicing is a sibling global splicing.*). The toolbar is a flat row of ~30 icon buttons, each opening a fly-out menu or a modal. Grouped by function:
3.1 Entity create / clone — the NE Library palette
- NE Library (
si.getNeLibrary) — opens the entity creation palette (dlg-00-nelibrary.png; see §4): a single-vs-group library of every placeable entity type. Members observed: Wall Mount, Pole, PDP, Manhole, Central_Office, Building, Tree, CDB, Handhole, Cable, Trench, Duct, CPE, FDP, Cabinet, ATB, Tower, FDC, CSA_Boundary, SurveyArea, Fault, Customer, FAT, Splice Closure, ROW, CX, Area, Coupler, GX, Loop, Patch Cord, GI Pipe, SubArea. (Each maps to alayer_detailsrow + itsatt_details_<entity>table.) - Single / Group clone modes; Group Clone (
si.GroupClone). - Entity Along The Direction (
si.entityAlongDirection) — place entities along a drawn direction. - Layout auto-draw (
si.toggleLayoutwith Polygon / Square / Rectangle) — auto-generate entities within a drawn area. - Merge Tool for cables (
si.showMergeCablesPopup+si.MiscellaneousTools.MergeTool). - Point buffer (
si.EnablePointBufferRadius, “Edit Buffer Value”) — radius buffer around a point. - Delete Element (
si.closeLibTools+si.clearTempNewEntity+LandBase.clearTempNewEntity); Hide ToolBar (si.closeLibTools).
3.2 Connectivity / splicing (global splicing.*)
- Wireline Tools (
si.showWLTB('WireLine', this)) — opens the wireline splicing toolbench. - Manual Splicing (
splicing.spliceHere) — port-to-port splice at a point. - Bulk Splicing (
splicing.toggleConnectionUpload) — upload-driven splice (dlg-13; see §4). - Connection Path Finder (
splicing.SinglePathFind) — live fiber trace overconnection_info. - Common Path Finder (
si.openLinkSearch); Customer FiberLink Finder (si.openCustomerFiberLinkSearch); Fiber Links (si.showFiberLinkDetails). - Fiber Cut Tracing (
si.showWLTB('FiberCut', this)). Writes/readsconnection_info,isp_port_info,att_details_cable_info(docs/database/04).
3.3 Workforce Management (SmartOps) — si.WorkForceManagement.*
- WFM menu (
si.WorkForceManagement.showMenu); Assign Job Order (toggleAssignJobOrder,dlg-02); View Assigned / View Unassigned Job Order (+ reporting-manager “RM” variants:toggleViewAssignJobOrder,toggleAssignJobOrderRM,toggleViewAssignJobOrderRM); Save/View Roster (si.SaveRoster/si.ViewRoster); WFM Dashboard (+ RM variant:si.viewWfmDashboard/viewWfmDashboardRM,dlg-01); View User Permission Area (toggleViewUserPermissionArea).
3.4 Tickets — si.Networkticket.*
- Network Ticket menu (
showMenu); Ticket Dashboard (NetworkTicketList,dlg-03); Add Network Ticket (AddNetworkTicket,dlg-04); Draw Ticket Area (initiateDrawingsNetworkTicket('Polygon')). Also Customer Tickets (si.showTicketManager). Writesatt_details_networktickets/ticket_master(docs/database/07).
3.5 Redline / markup — si.Redline.*
- Redline menu (
showRedlineMenu); Dashboard (RedlineList,dlg-05); draw Point / PolyLine / Polygon (initiateDrawingsRedline).
3.6 Reports — the ~12 report tools (all “draw area → filter → export + poll log”)
Each report follows one pattern: a showMenu/showReportMenu fly-out → either a manual modal (Filter Data / Summary tabs, see §4) or a draw-area mode (Polygon / Rectangle / Circle, initiateDrawings*) → an export call (*ExportReport) plus an async export-log companion (*ExportReportLog).
- BOM/BOQ Report —
si.BOMBOQReport.showMenu/BOMBOQShowModel; “FSA-wise overhead logics” (BOMBOQShowModelforBOMDetail); FSA Unlock dashboard (FSAUnlockDashboard). (dlg-07.) Feeds BOM costing fromitem_template_master×layer_details× rates (docs/database/05). - Utilization Report —
si.UtilizationReport.showMenu/UtilizationExportReport/initiateDrawingsUtilizationReport(dlg-08); utilization notifications (si.openUtilizationNotification). - Audit Log Report —
si.AuditLogReport.AuditLogExportReport/...Log(dlg-09). - Export (Entity) Report —
si.Entityreport.EntityExportReport/...Log/initiateDrawingsExportReport(dlg-10). - Association Report —
si.EntityAssreport.EntityAssociationReport/...Log(dlg-11). - LMC (Last-Mile Connectivity) Report —
si.LMCReport.showReportMenu/LmcSiteReport(dlg-12). - Split Report —
si.splitReport.SplitExportReport/...Log. - ROW Report —
si.report.showReportMenu/ROWReport. - VSAT Report —
si.VSATReport.showReportMenu/VSATSiteReport. - GeoTagged Images Report —
si.GeoTaggedImage.showReportMenu/showGeoTaggingImagesDetails/showAllGeoTaggedImagesOnMap(dlg-06). - Potential / homepass —
initiateDrawingsPotential(ComputeHomePassbackend). - Menu Report (
si.MenuReport.showMenu) is the shared report-fly-out host.
3.7 Survey & data ingestion
- Building Survey (
si.showWLTB('Survey')); Survey Assignment (Opensurveyassignment); Survey Building (OpenSurveyBuilding); Upload Buildings (si.toggleBuildingUpload). - Upload Data (
si.toggleUpload,dlg-14); Bulk Update (si.toggleBulkUpdate,dlg-15); External Data View (si.ViewExternalData). - XML Dashboard / Builder (
si.xmlbuilderdashboard.xmlbuilderdashboardList,dlg-16).
3.8 Planning / project / print / misc
- Network Planning (
si.ViewPlanTool); Sprout / Bulk Plan Tool (si.showBulkPlanTool); Project Management (si.projectMgmt); PM Tool (opens an external app on port 4019); Dashboard (opens/Dashboard/Index). - Print Map (
si.PrintMapMenu.showMenu; draw-areasi.togglePrint; Print Export Logsi.printExportLog). - Miscellaneous Tools (
si.MiscellaneousTools.showMenu); Central Office Associated Entities (si.GetPODAssociatedEntities); Location Tracker (OpenPathTracker); Help & FAQ’s (si.HelpPage). - Directions and Ruler (
si.showWFooterShapeTB('DirectionsAndRuler')); Bulk Operation (si.showWFooterShapeTB('ProjectSpecification')).
3.9 Region navigator
A full India state → district tree (~2,544 entries of si.EditRegionProvinceDetails(...,'SHOWONMAP'|'DETAIL'|'BOUNDARY'|'DELETE','PROVINCE',<name>)) used to zoom/scope the map by administrative area (the “circle”/region scoping dimension) and to show/edit/delete province boundaries. si.loadLayerOnEntity (“Refresh Layers”) reloads layers for the chosen scope.
4. Operational dialogs (dlg-*)
All are jQuery-UI modal overlays floating over the map. Several share the report pattern: a blue title bar, Filter Data and Summary tabs, a vertical list of attribute filters, and Reset / Apply (or Submit / Export Log) buttons; the manual variant filters by attributes, the toolbar variant filters by a drawn area, then exports and polls an async log.
| # | Dialog (screenshot) | Title / tabs | Key controls & workflow |
|---|---|---|---|
| 00 | dlg-00-nelibrary | NE Library palette | Entity-creation library reached via si.getNeLibrary — Single vs Group/Group-Clone, the full placeable-entity list (§3.1), Advanced Filters, Expand/Shrink. (Rendered as the workspace with the palette docked.) |
| 01 | dlg-01-wfm-dashboard | Workforce Management Dashboard | WFM KPI/job dashboard (si.viewWfmDashboard). |
| 02 | dlg-02-wfm-assignjob | Assign Job Order | Filters: Status (Unassigned…), Custom date range (From / To), Order Type, Service Type, Jo Category, Search By / Search Text, Auto Refresh checkbox, Search button → job-order grid (“No data found” in demo). Drives Workforce/AssignJobOrder. |
| 03 | dlg-03-ticket-list | Network Tickets (Ticket List) | Status filter chips (Assigned / In Progress / Completed / Approved / On Hold), Ticket-status dropdown, Search, Advanced Filters, Export. Grid cols: Assigned, Ticket Status, Ticket No., Ticket Type (Audit/Construction…), Region, City, Assigned To, Module (Middleware), Created On. Paged. → att_details_networktickets. |
| 04 | dlg-04-ticket-add | Add Network Ticket | Sections: Ticket Details (Ticket Type, Reference Type, Reference Remarks, Remarks), Network Ticket Details (Region, City, Network Ticket #, Assign To, For Network Type, Target Date), Project Specification (Project Code/Name, Planning Code/Name, Workorder Code/Name, Purpose Code/Name). → fn_nwt_insert_update_ticket. |
| 05 | dlg-05-redline-list | Redline (Dashboard) | Grid: Action, Task Name, Task Type (txt/lin/lne…), Task Remarks, Task Action (ADD/EDIT/DELETE), Assigned By, Created On, Assigned To. Search, Export, Advanced Filters, paged. Markup/redline tasks. |
| 06 | dlg-06-geotagged | GeoTagged Images | Field-captured image gallery/report (“No Records Found” in demo); si.GeoTaggedImage.*, with “Show All GeoTaggedImage On Map”. |
| 07 | dlg-07-report-bomboq | BOM/BOQ Report | Filter Data / Summary tabs; long attribute-filter list; Reset / Apply. The toolbar “draw area → export + poll log” report (+ FSA overhead logics, FSA unlock). → BOM/BOQ over item_template_master. |
| 08 | dlg-08-report-utilization | Utilization Report | Filter Data / Summary tabs. Filters: Region, City, Network Status, Entity Type, Project Code, Planning Code, Workorder Code, Purpose Code; Reset / Apply. → entity_utilization_settings thresholds. |
| 09 | dlg-09-report-auditlog | Audit Log Report | Filter Data / Summary. Filters: Entity Type, Network Id, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project Code, Planning Code; Reset / Apply. → audit_* shadow tables. |
| 10 | dlg-10-report-entity | Export Report (Entity) | Same filter set as audit (Entity Type, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project/Planning Code); Reset / Apply. Generic entity export. |
| 11 | dlg-11-report-association | Association Report | Filters: Entity Type, Network Id, Region, City, Network Status, Parent User, User, Ownership Type, Owner, Project/Planning Code; Reset / Export Log. → parent/child entity associations (association_mapping). |
| 12 | dlg-12-report-lmc | LMC Report | Filters: Region (multi-select list), City, Entity Type, LMC Type, Duration Based on / Duration / From / To (time-window), Search Text; Submit / Export Log / Close. Last-mile connectivity report. |
| 13 | dlg-13-splicing-bulk | Bulk Splicing | File (Choose File) + Splicing Type dropdown; Upload + Download Template. Upload-driven bulk splice → connection_info. |
| 14 | dlg-14-data-upload | Upload Data | Two tabs: Xls Report Import (User Type, Plan Name → Upload) and Pre Upload Utility (multi-step: Upload Files → Column Mapping → Data Validation → Data Execution, with an Entity Type select) + an Upload logs tab. → temp_du_* staging → fn_uploader_*; data_uploader_template column map; SignalR progress. |
| 15 | dlg-15-bulk-update | Bulk Update | Pre Upload Utility tab (Entity Type select) + Upload logs tab. Bulk attribute update via uploaded file. |
| 16 | dlg-16-xmlbuilder | XML Builder Dashboard | XML build job list (si.xmlbuilderdashboard). (Rendered as workspace in capture.) |
5. Admin / configuration surface — screen-by-screen
Layout (all admin screens, F-*.png / adm-*.png). A blue header (logo + “admin” user menu), a fixed left nav with a Search… box and ~18 collapsible module groups, and a content pane. The left-nav groups: OLT Patching · Users · Dashboard · Layer Settings · Vendor Specification · Rights Management · Equipment Builder · Miscellaneous Feature · OSP Settings · Vendor · LandBase Layer Settings · Advanced Settings · API Consumer Master · Accessories · Help & FAQ’s · Project · Link Budget Settings.
Two recurring screen archetypes:
- List/grid — a filter row (Search By dropdown + Search Text + Search / Export / Reset / Add New buttons), a “Total Records: N” count, and a sortable grid whose first column is Action (pencil-edit / trash-delete icons) and last columns are the audit envelope (Created By / Created On / Modified By / Modified On). Add/Edit opens a form (often the same page).
- Entity-selector form — pick an Entity Type (or Layer / Type) from a dropdown, which lazy-loads that entity’s config (e.g. Search/Info/Label/Report/History column pickers, Dynamic Form, Tube/Core color). Until selected, the pane is empty.
5.1 Users & Field-Engineer (FE) Tools
Screen (adm-) | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
00 User/AddUser (F-adduser.png) | Create user — a 3-step wizard (1 User Details · 2 Module Rights · 3 Work Area Details). | Step 1: User Name, Full Name, Email, Password (rules: 1 upper/1 lower/1 number/1 special, min 8), Mobile, Role (admin/Qa3/test2/Mobile User/Role-1) + View, Reporting Manager (multi-manager), Application Access (Web/Mobile/Both), User Type (Own/Partner/Vendor), PAN, Vendor Id, Is Admin Rights, Is Active. Step 3: Country (Kenya/India/Sri Lanka/Mauritius) → Region → State/Province scoping. | user_master, user_permission_area (geo scope), role_module_mapping. |
| 01 User/ViewUsers | List/manage users. | Grid: User Name, Name, Email, Role, Reporting Manager, Mobile, App Access, User Type, Status + audit. Filters by Active/App Access/searchBy. Per-row Edit + Logout checkboxes; Logout All Users, Export. | user_master. |
| 02 User/ViewUsersLoginHistory | Login audit. | Grid: User Name, Email, Role, Mobile, Client IP / Server IP, App Access, Source, Browser Name/Version, Login/Logout Time, Status. Date range filter + Export. | user_login_history. |
| 03 User/BulkUserUpload | Excel bulk user load. | File picker + Upload; results grid: File Name, Total / Success / Failed, Status Message, Error Description, Download Logs. | bulk_user_*, fn_bulk_user_upload_process. |
| 18 User/UserReportMapping | Map which reports a user sees. | Pick User (Nicodemus.KW, Brian.TM, Safaricom…) + “is all users mapped”. | user↔report mapping. |
| 04 FETools/Viewfetools (“User Tools”) | Field-engineer tool/asset allocation. | Grid: User Name, Tool Name, Barcode, Serial Number, Date, Is Accepted; Add New + Export. | FE tool allocation. |
5.2 Roles / Templates / Rights (permission matrix + geography scoping)
| Screen | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
| 13 Roles/AddRole | Create role. | Copy from Template (12.1/a1/CP sing/Edit R/t1/T-1/T12/View R…), Reporting Role (multi: super admin/View User/JC NPE/admin/WFM Contractor…), Role Name, Remarks, Is Active. | role_master. |
| 14 Roles/ViewRoles | List roles. | Grid: Role Name, Role Description, Status + audit. (Roles seen: admin, Qa3, test2, Mobile User, Role-1.) | role_master. |
15 Template/AddTemplate (adm-15) | Author a per-entity CRUD permission template. | Copy Template + Template Name; then a permission matrix: rows = every Entity (All, Antenna, Area, ATB, Building, Cabinet, Cable, CDB, Central_Office…), columns grouped under Planned / As-Built / Dormant, each with Add / Edit / Delete / View checkboxes (+ “check-all” per column and per row). Entity search box. | item_template_* + layer_rights_template_permission / role_permission_entity (per-layer × lifecycle CRUD). |
| 16 Template/ViewTemplates | List templates. | Grid: Template Name + audit. | template library. |
17 Roles/UpdateRoleModule (“Role Module Mapping”, adm-17) | Gate which modules/layers a role can use. | Role dropdown (“Please select a role to map with modules”); on select, an AllLayers + module/layer grid. | role_module_mapping. |
| 19 BulkUpdateTemplate (“Configure Bulk Update Template”) | Pick which columns a bulk-update template carries. | Template dropdown (Cable/Duct/Trench/PDP/FDC/Building/Cabinet/FAT/FDP) → column config. | data_uploader_template. |
5.3 Layer Settings & Groups
| Screen | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
| 06 LayerSettings/ViewGroups | Layer-group master. | Grid: Group Name, Group Description, Status + audit; Add New + Export. | layer_group_master. |
| 07 LayerSettings/ViewLayerGroupsMapping | Map layers → groups + order. | Editable grid: Layer Name, Group Name, Group Description (+ hidden layer_seq ordering, mapping_id); Export + Save. Drives the left layer-tree grouping/order. | layer_group_mapping. |
08 LayerSettings/LayerConfigurationSettings (“Layer Configuration”, F-layerconfig.png) | Edit a layer’s config — but only 5 fields. | Layer Name (entity-type select: Area/ATB/Building/Cabinet/Cable/CDB/Central_Office/Coupler/CPE…), Minimum Zoom Level (5–14), Is Mobile Layer, Is Visible In Mobile Library, Is Visible On Mobile Map; Reset / Update. | layer_details (fn_save_layer_settings_details) — exposes only 5 of ~80 columns (see §6). |
5.4 Vendor / Spec / Equipment Builder (Equipment→Chassis→Slot→Card→Port→Tray + BOQ catalog)
| Screen | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
| 43 Vendor/CreateVendor | Vendor master. | Name, Abbr, Type (Own / Third Party), Address, Contact, Email, Remarks, Is Active. | vendor_master. |
| 44 Vendor/ViewVendor | List vendors. | Grid: Name, Type, Address, Contact, Email, Remarks, Status + audit; Export. | vendor_master. |
09 VendorSepcification/AddVendorSpecification (F-addvendor.png) | Author a BOQ/costing catalog item. | Category (=entity type: ATB/Cabinet/Cable/CDB/Central_Office/Coupler/CPE/CX/Demand Point…), Specification, Vendor, Item Code, Item Type (Others/WCR), Unit Measurement (meter/No./Others), Cost Per Unit/meter(Rs), Service Cost Per Unit/meter(Rs), Sub Category 1–3, Is Master, Item Master Code, Extra Percentage, is A-RFS / B-RFS / C-RFS item, Is Active. | item_template_master (cost/RFS catalog) + item_template_<entity> (docs/database/02/05). |
| 10 VendorSepcification/ViewVendorSpecification | List spec catalog. | Grid: Entity Type, Specification, Vendor, Item Code, Cost Per Unit/meter, Service Cost, Port/Fiber Info, Sub Category 1–3, Item Type, Unit, is A/B/C-RFS item + audit; Export. | item_template_master. |
| 11 VendorSepcification/UploadVendorSpecification | Bulk spec upload. | File picker. | catalog bulk load. |
| 12 VendorSepcification/ViewSpecificationServices | Per-spec service costs. | Grid: Entity Type, Specification, Item Code, Service Name, Service Cost Per Unit/meter, Status. | spec-service rows. |
20 Equipment/CreateModel (“Create Model”, F-createmodel.png, adm-20) | CAD-style visual Equipment Builder. | A Model Workspace grid canvas (“Scale: 1M(Grid Module) = 50 mm”), a Grid Color palette, Model + Type dropdowns, Create / Reset / Save Model. Underlying form: model dims (height/width/depth/border/unit_size), is_multi_connection, specification (16 Port / 22 Port OLT / 96 Port ODF / Generic), vendor, item_code, status (Active/Inactive/Pending Design), label color/weight. The Model dropdown = Equipment / Chassis / Slot / Card / Port / Tray. | isp_model_info (docs/database/04). |
21 Equipment/ViewModels (“View Model”, adm-21) | Manage models + parent/child placement rules. | Left rail = Model Category (Equipment, OLT, ACT FRB, FDP, Nokia OLT, Chassis, Slot, Card, Port, Tray); status filter chips (Active / InActive / Pending Design); grid: Name, Type, Manufacturer + audit. Edit panel: dims, no_of_port, specification, vendor, item_template_id, and a Rule builder (parent_model + child_model from Equipment/Chassis/Slot/Card/Port/Tray) → Save Rule. “Create New Model” / “Tips & Rules” buttons. | isp_model_info, isp_model_mapping, isp_model_rules, isp_model_type_master. |
| 22 Equipment/ViewModelsImage | Model SVG/image library. | Grid: Model Name, Image, Is Active + audit; Add New. | model image assets. |
5.5 Miscellaneous Feature
| Screen | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
25 Miscellaneous/ViewPortStatus (“Core/Port Status Settings”, F-portstatus.png) | The core/port status enum that governs splicing. | Grid (4 rows in demo: Vacant/Reserved/Faulty/Connected): Status, Color Code (hex swatch), Is Active, Is Manual, Is Splicing Allowed + audit; Add New / Export. | port_status vocab (docs/database/04); governs att_details_cable_info core-status codes + splicing eligibility. |
26 Miscellaneous/ChangeNetworkCode (“Change Network Code”, adm-26) | Re-codification of an entity’s network id. | Layer Name (PDP/Area/Building/Cabinet/Cable/CDB/Coupler/CSA_Boundary/Customer…), Old Network Id, Remarks → recompute. | fn_get_new_networkcode / fn_save_change_network_code → entity_network_code_history. |
| 27 Miscellaneous/ViewTemplateColumn (“Data Uploader column Settings”) | The per-entity column data dictionary. | Grid: Entity Name, Display Column Name / Data Type, Db Column Name / Data Type, Example Value, Max Length, Is Mandatory, Is Null Allowed, Is Dropdown Base, Description, is Kml Attribute, Is Excel Attribute + audit; Add New. | data_uploader_template / per-entity column dictionary. |
| 28 Miscellaneous/ViewTerminationPoint (“Termination Point Settings”) | Which entities act as TPs. | Grid: Entity Name, TP Entity Name, Is ISP TP, Is OSP TP, Status + audit; Add New. | termination-point config. |
29 Miscellaneous/ViewUtilizationSetting (“Entity Utilization Settings”, adm-29) | Per-entity/region utilization thresholds. | Region / Province / Entity Type filters; grid: Entity Type, Network Status, Region, Province, Low(%) / Moderate(%) / High(%) / Over(%), Entity For Utilization Report, Utilization(%) + audit; Add New / Export. | entity_utilization_settings. |
30 Miscellaneous/DropDownMaster (“Dropdown Master”, adm-30) | The controlled-vocabulary / EAV dropdown master (791 rows in demo). | Filters: Layer/Entity (PDP/Area/FDC/Building/Cabinet/Cable/CDB/Coupler/CSA_Boundary…), Dropdown Type, Value; grid: Entity Name, Dropdown Type, Value, Status + audit; Add New / Export. | dropdown_master. |
31 Miscellaneous/AssociationMapping (“Association Mapping”, adm-31) | Allowed entity-to-entity associations. | Grid: Entity Name, Associate Entity Name, Layer Subtype, Status + audit; Add New. | association_mapping. |
| 32 Miscellaneous/ViewTicketType (“Ticket Type Master”) | Ticket-type vocab. | Grid: Ticket Type, Description, Color Code, Module + audit; Add New. | ticket_type_master. |
33 Miscellaneous/LayerIconMapping (“Layer Icon Setting”, adm-33) | Per-layer/status icon mapping (196 rows in demo). | Grid: Layer Name, Category, Sub Category, Icon Name (e.g. event.png, splicechamber.png), Network Status (Planned/As-built/Dormant), Is Active + audit; Add New. | layer-icon mapping (feeds map symbology). |
| 23 orthoImageLayer/ViewOrthoImage (“Ortho Image Settings”) | Raster ortho-image overlays. | Grid: Display Name, Image Name, Image Ext + audit + Status; Add New / Export. | ortho-image raster registry. |
| 24 Miscellaneous/ViewUserActivityLogSettings (“User Activity Log Settings”) | Which controller actions are audited. | Grid: Controller Name, Action Name, Display Action Name, Description, Source, Project Name, Status + audit; per-row Edit checkbox. | activity-log action registry. |
5.6 Dynamic Form / Dynamic Theme
| Screen | Purpose | Key fields | DB structure |
|---|---|---|---|
34 DynamicForm (“Dynamic Form”, adm-34) | Per-entity dynamic-attribute form builder. | Select Entity (PDP/FDC/Cable/CDB/Coupler/Customer/CX/Demand Point/Duct…) → tabbed builder with Create TextBox / Create Dropdown / Save + delete-control. Adds custom attributes to an entity’s form. | dynamic_controls (EAV overlay, docs/database/02). |
35 DynamicTheme (“Dynamic Theme”, adm-35) | Pick the app color theme. | Radio cards: Dawn / Orchid / Ocean / Olive themes; Cancel / Apply. | theme setting. |
5.7 OSP Settings (search / info / label / tube-core-color / cable-map-color + report/history columns)
All are entity-selector screens (pick “Entity Type” → load that layer’s column/setting list). Group also contains the two Advanced-Settings column pickers.
| Screen | Purpose | DB structure |
|---|---|---|
36 OSPSettings/SearchSettings (“Search Settings”, adm-36) | Which columns are searchable per entity. | layer_details search columns. |
| 38 OSPSettings/InfoSettings (“Info Settings”) | Which columns show in the map info/identify panel. | layer_details info columns. |
| 39 OSPSettings/labelSettings (“Label Settings”) | Which column labels each layer on the map. | Entity + Label Columns select → Save. layer_details / layer_style_master label expression. |
41 OSPSettings/TubeCoreColorSettings (“Tube/Core Color Settings”, adm-41) | Fiber tube/core color sequence. | Type (Tube / Core) + Add; grid: Number, Color Character, Color, Action. → cable styling. |
| 42 OSPSettings/ViewCableMapColorSettings (“Cable Map Color Settings”) | Cable map color by type/category/fiber-count. | Filters: Cable Type (Underground / Aerial-Structured / Aerial-Unstructured / Overhead), Cable Category (TK/AC/BB/LM/FTTH…), Fiber Count (2/6/12/24/48/96/144/192/288); grid: Cable Type, Category, Fiber Count, Color Code + audit; Add New / Export. |
| 37 AdvancedSettings/ReportColumnSettings (“Report Column Settings”) | Which columns appear in entity reports. | layer_details report columns. |
| 40 AdvancedSettings/HistoryColumnSettings (“History Column Settings”) | Which columns appear in entity history. | layer_details history columns. |
5.8 LandBase Settings (runtime landbase layer builder)
| Screen | Purpose | Key fields / grid | DB structure |
|---|---|---|---|
45 LandbaseSettings/AddLayer (“Add Landbase Layer”, adm-45) | Create a landbase layer at runtime (the closest the UI comes to “new layer without code”). | Tabs Existing Fields / Add a Field. Fields: Layer Name, Geom Type (Line/Point/Polygon), Layer Abbreviation, Map Abbreviation, Map Border Color (color picker), Map Sequence, Map Border Thickness, Map Background Color (color picker), Map Background Opacity (%), Network Id Type (Automatic/Manual), Network Code Separator (- / /), Is Active, Icon Type + icon upload, Is Center-Line Enable; “Add a Field” tab adds custom attribute columns (Create TextBox + Save). | landbase_layer_master + landbase_layer_columns_settings (docs/database/06). |
| 46 LandbaseSettings/ViewLayers | List landbase layers. | Grid: Layer Name, Geom Type, Layer/Map Abbreviation, Map Border Color, Map Sequence, Map Border Thickness, Map Background Color/Opacity, Is Center Line Enable, Network Type, Network Code Separator, Status + audit; Export. | landbase_layer_master. |
| 47 LandbaseSettings/ManageDropdownValues (“Landbase Dropdown Master”) | Landbase per-layer vocab. | Filters: Landbase Layer (AdityaLandbase/Building/Camera/Electric Utility/Hydrology…), Type (Category / Sub Category / Classification), Value; grid: Layer Name, Dropdown Type, Value, Status + audit; Add New / Export. | landbase_dropdown_master. |
| 48 LandbaseSettings/LandBaseLayerSearchSetting (“Search Settings”) | Searchable columns per landbase layer. | Landbase Layer select → column list. | landbase_layer_columns_settings. |
| 49 LandbaseSettings/LandBaseLabelSettings (“Label Settings”) | Label column per landbase layer. | Landbase Layer + Label Columns select → Save. | landbase_layer_columns_settings. |
5.9 Other admin areas (left-nav, not separately captured)
- OLT Patching (top-level) — OLT port-patching workspace (the
WorkSpace/equipment OLT-patching UI). - Dashboard (
05 Admin/Home) — admin dashboard; grid: Month, User Count, Task, Hours per Day (POST getDashboardData). - API Consumer Master — registers third-party
IntegrationServicesclients (api_consumer_master; the empty-password-consumer security finding lives here,docs/database/08). - Accessories / Project / Link Budget Settings — accessory + entity mapping; project/planning/workorder/purpose code masters; optical link-budget (drives
Splicing/viewlossdetails).
6. What’s configurable-as-data vs hardcoded
This is the central observation for the rewrite thesis. The web client is a thin renderer over the layer_details registry and DB stored functions — but only a fraction of that model is editable through the admin UI.
Admin-editable through the UI (config-as-data):
- Dynamic attribute forms —
DynamicFormadds custom textbox/dropdown attributes per entity (dynamic_controls). - Controlled vocabularies —
DropDownMaster(dropdown_master, 791 rows),LandbaseSettings/ManageDropdownValues,TicketType,port_status(ViewPortStatus). - Landbase layer builder —
LandbaseSettings/AddLayercreates a whole new landbase layer (geom type, styling, network-id rules, custom fields) at runtime — the only true “new layer without code” path. - Per-layer presentation — search/info/label/report/history column pickers (OSP + Advanced Settings),
LayerIconMapping,TubeCoreColorSettings,CableMapColorSettings,DynamicTheme,ViewLayerGroupsMapping(tree order/grouping). - Rights — Roles, per-entity CRUD permission Templates (Entity × Planned/As-Built/Dormant × Add/Edit/Delete/View matrix),
RoleModuleMapping, geography scoping (Country→Region→State on AddUser). - Vendor specs / BOQ catalog —
item_template_master(cost/service-cost/RFS flags/sub-categories) fully UI-editable. - Equipment models — the visual Equipment Builder authors the Equipment→Chassis→Slot→Card→Port→Tray hierarchy (
isp_model_*) + parent/child placement rules. - Utilization thresholds, association rules, termination points, data-uploader column dictionary, change-network-code.
DB / deployment-only (NOT editable in the UI):
- The core
layer_detailsnetwork-entity behaviour.LayerConfigurationSettingsexposes only 5 of ~80 columns (Layer Name, Min Zoom, Is Mobile Layer, Is Visible In Mobile Library, Is Visible On Mobile Map). The ~75 remaining capability flags (is_osp_layer,is_isp_layer,is_splicer,is_cpe_entity,is_barcode_enabled,is_template_required,is_data_upload_enabled,is_history_enabled,is_feasibility_layer, …) and the config pointers/URLs (layer_table,layer_view,layer_form_url,save_entity_url,network_code_format, …) are set only at the DB/deployment level. - Adding a network entity type = a new
layer_detailsrow + a newatt_details_<entity>table + audit twin + CSV-staging twin (ALTER TABLE/CREATE TABLE), not a UI action. The landbase builder is the only UI exception, and landbase layers are a separate, simpler class than network entities. - Codification rules, map view definitions (
vw_*_map), the 60 GeoJSON caches, trigger-based auditing, and the connectivity model (connection_info) are all DB-side.
Conclusion: “config-not-code” is only partially realized for end users. The vocabulary, presentation, rights, costing, and equipment layers are genuinely data-driven; but the deep behaviour of a network entity still requires DB changes — the key driver of per-customer DB forking, and exactly what the rewrite’s typed schema-driven entity/attribute engine must make safely tenant-editable.
7. UX observations & gaps (for the rewrite)
- One global
si.*namespace. Every toolbar action and dialog hangs off a single global JS object (4,081 distinct tooltip/onclick entries inTOOL_INVENTORY.txt) — confirming a server-rendered jQuery monolith, not a componentized SPA. The new UI wants a composable, permissioned action model. - Modal-heavy. Nearly every workflow (tickets, redline, all reports, splicing, upload, NE library) is a jQuery-UI modal floating over the map. Reports especially share one rigid template (Filter Data / Summary tabs → Reset/Apply → export + poll log).
- ~20 disjoint config screens, one grid pattern. The admin area repeats the same Search-By + Search Text + Search/Export/Reset/Add New + sortable grid (Action … audit columns) archetype across most screens, and the entity-selector-then-load archetype across the OSP/Advanced/Landbase column settings — strong candidates for a single generic config surface.
- Reports = ~12 bespoke “draw area → filter → export + poll log” tools (
si.*Report.*ExportReport+*ExportReportLog). One generic async export/job framework replaces all of them. - The visual Equipment Builder is a genuinely good feature (CAD grid, model-type rails, parent/child rules) worth re-imagining on top of the typed equipment model.
- The admin UI exposes only a sliver of the entity/attribute model (§6) — the single most important gap. The rewrite must make the whole entity/attribute schema safely tenant-editable, retiring the 80-boolean-column + table-per-entity + DB-fork pattern.
- Realtime (SignalR) for upload/utilization progress is genuinely useful — keep it, but decouple from Forms-session auth.
Status: complete. Built from a live read-only capture (demo v8.16.4.0); field/grid/select contents are authoritative from DETAIL_ADMIN.txt, the si.* action surface from TOOL_INVENTORY.txt, and DB table mappings from docs/database/. Screenshots live in references/ui-exploration/shots/ and shots/detail/.