Problem Statement
Saat ini TessaERP masih menggunakan pendekatan dashboard yang bersifat statis dan hardcoded pada halaman DashboardUtama.
Kondisi saat ini menyebabkan:
- Dashboard tidak dapat dikonfigurasi berdasarkan role tanpa perubahan kode
- Penambahan widget baru membutuhkan modifikasi halaman dashboard secara langsung
- Tidak tersedia mekanisme katalog widget yang terstandarisasi
- Layout dashboard tidak dapat diatur oleh administrator
- Tidak tersedia abstraction layer untuk rendering widget secara dinamis
- Tidak ada standar pengembangan widget yang konsisten antar modul
- Dashboard sulit dikembangkan menjadi Executive Dashboard, Operational Dashboard, maupun Personalized Dashboard
Sebagai bagian dari transformasi TessaERP menjadi platform ERP modern yang modular dan extensible, diperlukan Dashboard & Widget Framework yang memungkinkan pengelolaan widget secara terpusat dan konfiguratif.
Goals
Mengimplementasikan Dashboard & Widget Management Framework pada TessaERP dengan pendekatan:
- Widget dikembangkan menggunakan reusable template dan/atau custom component
- Dashboard dirender secara dinamis berdasarkan konfigurasi database
- Widget dapat di-assign ke role tanpa perubahan kode
- Layout dashboard dapat dikonfigurasi oleh administrator
- Dashboard menggunakan Dynamic Component Rendering
- Mendukung auto-refresh per widget
- Menyediakan fondasi untuk personalized dashboard pada fase berikutnya
Tujuan utama:
- Menghilangkan dashboard hardcoded
- Menyediakan dashboard berbasis role
- Mempercepat pengembangan widget baru
- Menstandarkan pola pengembangan widget
- Menyediakan fondasi dashboard yang scalable dan extensible
Scope of Works
Backend
1. Dashboard Widget Catalog
Implementasikan master catalog untuk seluruh widget yang tersedia pada sistem.
Detail Teknis
Setiap widget harus memiliki metadata:
| Field | Purpose |
|---|---|
| Widget Code | Unique Widget Identifier |
| Widget Name | Nama Widget |
| Category | Kategori Dashboard |
| Template Type | Tipe Template Widget |
| Component Name | Custom Component |
| Service Type | Data Service Source |
| Default Col Span | Layout Default |
| Active Status | Enable / Disable Widget |
Requirement
- Widget terdaftar dalam catalog terpusat
- Mendukung template-based widget
- Mendukung custom widget component
- Mendukung extensibility untuk widget baru
2. Role Dashboard Configuration
Implementasikan konfigurasi dashboard berdasarkan role.
Detail Teknis
Setiap role dapat menentukan:
- Widget yang ditampilkan
- Urutan widget
- Ukuran widget
- Interval refresh widget
- Status aktif/nonaktif widget
Requirement
- Konfigurasi tersimpan pada database
- Tidak memerlukan deployment ulang saat konfigurasi berubah
- Mendukung multi-role dashboard configuration
3. User Dashboard Role Management
Implementasikan mekanisme penentuan dashboard berdasarkan role bisnis user.
Background
Saat ini TessaERP menggunakan struktur:
tconfusertconfgrouptconfusergroup
untuk kebutuhan menu access control.
Namun tconfgroup merepresentasikan permission group dan bukan business role sehingga tidak cocok digunakan sebagai dashboard role.
Requirement
Tambahkan kolom baru pada tabel tconfuser:
ALTER TABLE tconfuser ADD COLUMN user_dashboard_role VARCHAR(50) DEFAULT NULL;
Contoh nilai:
EXECUTIVE FINANCE_MGR SALES_MGR WAREHOUSE_MGR PROCUREMENT_MGR MANUFACTURE_MGR HR_MGR SUPERVISOR OPERATOR
Detail Teknis
Dashboard role:
- Independen dari menu access group (
tconfgroup) - Ditentukan langsung pada master user
- Digunakan saat proses login untuk menentukan dashboard yang ditampilkan
- Tidak mempengaruhi permission menu yang sudah ada
Login Flow
User Login ↓ Load User Information ↓ Read user_dashboard_role ↓ NULL ? ↓ YES → Use OPERATOR NO → Use Assigned Role ↓ Load Dashboard Configuration ↓ Render Dashboard
User Management Enhancement
Tambahkan field baru pada halaman User Management:
Dashboard Role
Administrator dapat menentukan dashboard role untuk setiap user.
Initial Role Mapping
| Dashboard Role | Target User |
|---|---|
| EXECUTIVE | Director / Owner |
| FINANCE_MGR | Finance Manager |
| SALES_MGR | Sales Manager |
| WAREHOUSE_MGR | Warehouse Manager |
| PROCUREMENT_MGR | Procurement Manager |
| MANUFACTURE_MGR | Manufacturing Manager |
| HR_MGR | HR Manager |
| SUPERVISOR | Supervisor |
| OPERATOR | Staff / Operator |
Business Rules
- Satu user hanya memiliki satu dashboard role aktif
- Dashboard role tidak terkait dengan permission group
- Dashboard role dapat berbeda dengan menu access group
- Jika role tidak diisi maka sistem menggunakan role
OPERATOR - Dashboard role dibaca saat proses login
- Dashboard role digunakan untuk menentukan konfigurasi widget yang akan ditampilkan
4. Dashboard Rendering Engine
Implementasikan Dashboard Container sebagai rendering engine utama.
Detail Teknis
Flow:
User Login ↓ Resolve Role ↓ Load Dashboard Configuration ↓ Resolve Widget Definition ↓ Render Dynamic Component ↓ Display Dashboard
Requirement
- Menggunakan Blazor DynamicComponent
- Tidak menggunakan switch-case per widget
- Mendukung generic template maupun custom component
- Mendukung parameter injection
5. Generic Widget Template Framework
Implementasikan reusable widget templates.
Template Types
| Template | Purpose |
|---|---|
| KPI_CARD | KPI Summary |
| KPI_PROGRESS | KPI vs Target |
| CHART | Bar, Line, Pie, Donut |
| ALERT_TABLE | Alert & Exception List |
| GROUPED_TABLE | Expandable Grouped Data |
Requirement
- Template reusable
- Konsisten dengan UI standard ERP
- Mendukung drill-down URL
- Mendukung loading state
- Mendukung refresh
6. Widget Service Abstraction
Implementasikan standard interface untuk data provider widget.
Interface Requirement
Setiap widget service harus:
- Mengambil data berdasarkan context user
- Mendukung entity, branch, dan user filtering
- Mengembalikan data sesuai template contract
Standard Query Context
WidgetQueryParams { EntityIds, BranchIds, UserId, DateFrom, DateTo }
Requirement
- Dashboard tidak mengakses database secara langsung
- Data source terisolasi pada service layer
- Service dapat direuse oleh template manapun
7. Widget Shell Framework
Implementasikan wrapper standar untuk seluruh widget.
Feature
- Widget Header
- Widget Title
- Refresh Button
- Loading Indicator
- Drill-down Action
- Error State
Requirement
- Konsisten pada seluruh widget
- Mendukung auto refresh
- Mendukung manual refresh
8. Layout Management Framework
Implementasikan sistem layout dashboard.
Detail Teknis
Menggunakan grid 12 kolom.
Supported Size:
| Col Span | Usage |
|---|---|
| 3 | KPI Card |
| 4 | KPI Summary |
| 6 | Chart |
| 8 | Large Table |
| 12 | Full Width Widget |
Requirement
- Layout configurable via database
- Ordering configurable
- Responsive terhadap ukuran layar
9. Dashboard Administration Pages
Implementasikan halaman administrasi dashboard.
Widget Catalog
Fungsi:
- View widget catalog
- Activate/Deactivate widget
- View widget metadata
Role Dashboard Configuration
Fungsi:
- Assign widget ke role
- Enable/Disable widget
- Configure layout
- Configure ordering
- Configure refresh interval
Requirement
- Mengikuti pola Control Files yang sudah ada
- Tidak memerlukan perubahan kode untuk konfigurasi dashboard
10. Auto Refresh Framework
Implementasikan auto-refresh per widget.
Detail Teknis
Menggunakan:
PeriodicTimer
Flow
Widget Loaded ↓ Start Timer ↓ Refresh Interval Reached ↓ Reload Widget Data ↓ Update UI
Requirement
- Refresh configurable per widget
- Tidak melakukan page reload
- Mendukung manual refresh
11. Dashboard Migration
Implementasikan migrasi dari DashboardUtama existing.
Scope
- Dashboard lama tetap berjalan
- Widget existing diekstrak menjadi widget individual
- Dashboard baru berjalan pada route terpisah
- Dashboard lama dipensiunkan setelah validasi selesai
Requirement
- Tidak mengganggu operasional existing dashboard
- Mendukung migrasi bertahap
Business Rules
- Dashboard ditentukan berdasarkan role user
- Hanya widget aktif yang ditampilkan
- Widget wajib terdaftar pada Widget Catalog
- Dashboard harus dirender melalui Dashboard Engine
- Widget harus menggunakan Widget Shell
- Data widget harus berasal dari Widget Service
- Layout dashboard harus berasal dari konfigurasi database
- Administrator dapat mengubah konfigurasi dashboard tanpa deployment ulang
- Setiap user memiliki maksimal satu Dashboard Role aktif
- Dashboard Role bersifat independen dari Menu Access Group
- Dashboard Role digunakan sebagai key untuk menentukan widget configuration
- User tanpa Dashboard Role menggunakan konfigurasi OPERATOR
Out of Scope (Phase 1)
- End User Drag & Drop Layout
- Personalized Dashboard per User
- Dashboard Export PDF
- Real-Time WebSocket Push
- AI Generated Insights
- User Defined Query Builder
- User Created Custom Widget
- Dashboard Sharing
- Dashboard Snapshot History
- Dashboard Notification Center
Acceptance Criteria
- Widget catalog tersedia dan dapat dikelola
- Dashboard dapat dirender berdasarkan role
- Widget dapat di-assign ke role melalui konfigurasi
- Dynamic Component berhasil merender widget secara runtime
- Generic template dapat digunakan untuk KPI, Chart, dan Table widget
- Widget service abstraction berjalan sesuai standar
- Widget shell menampilkan loading, refresh, dan drill-down action
- Layout dashboard dapat dikonfigurasi melalui database
- Auto refresh berjalan sesuai interval konfigurasi
- Dashboard Administration Page tersedia
- Dashboard lama tetap berjalan selama masa migrasi
- Widget baru dapat ditambahkan tanpa perubahan Dashboard Container
- Kolom user_dashboard_role tersedia pada master user
- Dashboard Role dapat diatur melalui User Management
- Dashboard Role berhasil dibaca saat login
- User tanpa Dashboard Role menggunakan konfigurasi default OPERATOR
- Dashboard yang dirender sesuai dengan Dashboard Role user
- Perubahan Dashboard Role tidak mempengaruhi Menu Access Group existing
References
- Architecture : docs/07-misc/backlog/dashboard-widget/dashboard-widget-architecture.md · docs/mkdocs-setup-for-diary-integration · products / ERP Neuron / ERP · GitLab
- Template Based Architecture: docs/07-misc/backlog/dashboard-widget/dashboard-widget-architecture-template-based.md · docs/mkdocs-setup-for-diary-integration · products / ERP Neuron / ERP · GitLab
- List Dashboard & Widget : docs/07-misc/backlog/dashboard-widget/dashboard-widget-master-list.md · docs/mkdocs-setup-for-diary-integration · products / ERP Neuron / ERP · GitLab
- User Roles Enhancement: docs/07-misc/backlog/dashboard-widget/dashboard-widget-user-master-enhancement.md · docs/mkdocs-setup-for-diary-integration · products / ERP Neuron / ERP · GitLab