ISPANA Client App Changelog — v0.0.7 Catatan Rilis Klien ISPANA — v0.0.7
Focus: 01092026
Git Commit Tag:
ispana-v0.0.7a117 Focus: Upgrade Default WhatsApp Invoice Notification Template
- a. [whatsapp_gateway_settings_view.dart]: Updated default notification template to structured multi-line
/tagihanformat with business name, date, invoice number, amount, status, and payment link.
Git Commit Tag:
ispana-app-v0.0.7a116 Focus: Auto-Send Invoice Dispatch Hardening & Deduplication Separation
- a. [whatsapp_history_datasource.dart]: Added
hasAutoInvoiceMessageto specifically check for auto-source messages, ensuring manual WhatsApp messages do not falsely block automatic invoice delivery. - b. [customer_sync_repository.dart]: Cleaned duplicate code blocks in
checkAndIsolateExpiredCustomers, wrapped WhatsApp dispatch in localized try-catch with structured logs, and ensured phone fallback resolution. - c. [customer_repository.dart]: Added try-catch and status logging around manual isolation WhatsApp dispatch.
- d. [pubspec.yaml]: Bumped version to
0.0.7+115.
Git Commit Tag:
ispana-v0.0.7a115 Focus: ROOT CAUSE FIX — Brace Mismatch Preventing API Compilation
- a. [customer_sync_repository.dart]: Fixed broken brace structure (extra
}from prioronlySendToInteractedremoval) that prevented the entire API from compiling. Server was running stale pre-fix code. - b. [pubspec.yaml]: Bumped version to
0.0.7+114.
Git Commit Tag:
ispana-v0.0.7a114 Focus: Robust Expiry Date Type Evaluation
- a. [customer_data_source.dart]: Added dual support for DateTime and String ISO-8601 formats in
findExpiredActiveCustomersquery filter. - b. [pubspec.yaml]: Bumped version to
0.0.7+113.
Git Commit Tag:
ispana-v0.0.7a113 Focus: Syntax and Brace Alignment in Sync Repository
- a. [customer_sync_repository.dart]: Removed extraneous closing brace in isolated customer iteration loop.
- b. [pubspec.yaml]: Bumped version to
0.0.7+112.
Git Commit Tag:
ispana-v0.0.7a112 Focus: Unconditional Invoice Delivery on Isolation
- a. [customer_repository.dart & customer_sync_repository.dart]: Removed chat interaction gate (
onlySendToInteracted) for transactional customer isolation billing notices. - b. [pubspec.yaml]: Bumped version to
0.0.7+111.
Git Commit Tag:
ispana-v0.0.7a111 Focus: Customer Phone Fallback Resolution on Auto-Billing
- a. [customer_data_source.dart]: Corrected non-empty string fallback for customer phone, name, and address to prevent empty string overrides.
- b. [customer_repository.dart]: Hardened phone number resolution in isolation flow.
- c. [pubspec.yaml]: Bumped version to
0.0.7+110.
Git Commit Tag:
ispana-v0.0.7a110 Focus: Verification and Compilation Readiness of Auto-Billing
- a. [customer_repository.dart]: Resolved compilation error and verified immediate auto-send dispatch.
- b. [pubspec.yaml]: Bumped version to
0.0.7+109.
Git Commit Tag:
ispana-v0.0.7a109 Focus: Import Cleanup in Customer Repository
- a. [customer_repository.dart]: Added missing
WhatsappServiceimport. - b. [pubspec.yaml]: Bumped version to
0.0.7+108.
Git Commit Tag:
ispana-v0.0.7a108 Focus: Immediate Auto-Billing WhatsApp Dispatch & Phone Parsing
- a. [customer_sync_repository.dart & customer_repository.dart]: Switched auto-send bill dispatch to immediate
sendMessageand strengthened non-empty phone fallback. - b. [pubspec.yaml]: Bumped version to
0.0.7+107.
Git Commit Tag:
ispana-v0.0.7a107 Focus: Auto-Generate Missing Invoices for Isolated Customers
- a. [customer_sync_repository.dart]: Added missing invoice auto-generation during isolated customer sync loop before WhatsApp queueing.
- b. [customer_repository.dart]: Allowed idempotent isolation without throwing exception when customer is already marked isolated.
- c. [pubspec.yaml]: Bumped version to
0.0.7+106.
Git Commit Tag:
ispana-v0.0.7a106 Focus: WhatsApp Gateway Null Unwrapping Fix in Auto-Billing
- a. [customer_sync_repository.dart & customer_repository.dart]: Fixed runtime crash caused by force unwrapping null
whatsappGatewayduring template parsing. - b. [pubspec.yaml]: Bumped version to
0.0.7+105.
Git Commit Tag:
ispana-v0.0.7a105 Focus: Auto-Billing Trigger & Setting Fallbacks
- a. [customer_repository.dart & customer_sync_repository.dart]: Made auto-send invoice evaluation active by default when WhatsApp gateway is available.
- b. [whatsapp_gateway_settings_view.dart]: Set default auto-send switch state to enabled.
- c. [pubspec.yaml]: Bumped version to
0.0.7+104.
Git Commit Tag:
ispana-v0.0.7a104 Focus: Isolated Customer Auto-Billing Sync & Interaction History Resolution
- a. [whatsapp_history_datasource.dart]: Added
hasHistoryWithPhoneandhasRecentInvoiceMessagequeries. - b. [customer_repository.dart]: Enhanced
hasInteractedresolution during customer isolation to verify existing chat history. - c. [customer_sync_repository.dart]: Extended periodic scheduler to automatically catch isolated customers with unpaid invoices and auto-queue invoice bills.
- d. [pubspec.yaml]: Bumped version to
0.0.7+103.
Git Commit Tag:
ispana-v0.0.7a103 Focus: Auto-Send Bill for Isolated Customers & Public Invoice Link Fix
- a. [auth_middleware.dart]: Allowed public route access to
/verify/invoicewithout JWT token requirements to prevent 401 Unauthorized errors on public invoice lookup. - b. [invoice_controller.dart & server.dart]: Mounted public landing portal at
/verify/invoicefor direct visitor lookups. - c. [customer_repository.dart & customer_sync_repository.dart]: Corrected MongoDB
ObjectIdhex string extraction (.oid) and refined WhatsApp invoice bill auto-dispatch template parameters. - d. [whatsapp_send_dialog.dart & customer_management_view.dart]: Enabled customer ID auto-matching for bill templates, automatic invoice pre-fetching, and graceful link placeholders when invoices are not yet generated.
- e. [pubspec.yaml]: Bumped version to
0.0.7+102.
Git Commit Tag:
ispana-v0.0.7a102 Focus: Settings Remote Data Source Clean Integration
- a. [customer_repository.dart]: Connected
_settingsDataSourceto fetch vendor branding and WhatsApp gateway configurations during customer isolation. - b. [pubspec.yaml]: Bumped version to
0.0.7+101.
Git Commit Tag:
ispana-v0.0.7a101 Focus: ObjectId toHexString Deprecation Replacement
- a. [customer_repository.dart & customer_sync_repository.dart]: Replaced deprecated
toHexString()calls onObjectIdwith.oidgetter. - b. [pubspec.yaml]: Bumped version to
0.0.7+100.
Git Commit Tag:
ispana-v0.0.7a100 Focus: Active Invoice Identifiers Declaration Scope
- a. [customer_sync_repository.dart]: Declared
activeInvoiceNumandactiveInvoiceIdin outer scope before invoice existence evaluation. - b. [pubspec.yaml]: Bumped version to
0.0.7+99.
Git Commit Tag:
ispana-v0.0.7a99 Focus: EnvConfig publicDomain Property
- a. [env_config.dart]: Added
publicDomaingetter with environment/fallback support for invoice verification links. - b. [pubspec.yaml]: Bumped version to
0.0.7+98.
Git Commit Tag:
ispana-v0.0.7a98 Focus: CustomerModel WhatsApp Interacted Fields & Sync Ternary Fix
- a. [customer_model.dart]: Added
whatsappInteractedandwhatsappInteractedAtfields, constructor params, and serialization mappings. - b. [customer_sync_repository.dart]: Simplified
activeInvoiceIdassignment to remove nested async condition. - c. [whatsapp_history_view.dart]: Removed unused
isFailedvariable and wrapped nested ternary expression in parentheses. - d. [pubspec.yaml]: Bumped version to
0.0.7+97.
Git Commit Tag:
ispana-v0.0.7a97 Focus: Server Dependency Declaration Order Fix
- a. [server.dart]: Moved
customerDataSourceinstantiation beforesettingsControllerinitialization to fix unassigned variable error. - b. [pubspec.yaml]: Bumped version to
0.0.7+96.
Git Commit Tag:
ispana-v0.0.7a96 Focus: Auto-Billing for Isolated Customers, 3-Minute WAHA Queue, and WhatsApp Chat Localization
- a. [customer_repository.dart & customer_sync_repository.dart]: Implemented automatic unpaid invoice generation under category
billingwhen customer isolation occurs (manual and cron-scheduled). - b. [whatsapp_history_datasource.dart & whatsapp_history_repository.dart]: Implemented persistent message queue engine with guaranteed 3-minute (180s) intervals per vendor to prevent WhatsApp anti-ban triggering.
- c. [whatsapp_history_view.dart]: Added support for
QUEUEDmessage status badge with countdown/interval indicators and localized labels. - d. [app_localization.dart]: Added missing localization keys for WhatsApp chat template selection, recipient labels, status badges, and error/success notifications.
- e. [whatsapp_send_dialog.dart]: Fully localized manual WhatsApp chat form and harmonized
/tagihanshortcut template to dynamically render official invoice details, formatted amount, and verification/payment link. - f. [pubspec.yaml]: Bumped version to
0.0.7+95.
Git Commit Tag:
ispana-v0.0.7a95 Focus: VendorDrawer Parameter Fix
- a. [finance_management_page.dart]: Removed undefined
currentRouteparameter inVendorDrawerinvocations. - b. [pubspec.yaml]: Bumped version to
0.0.7+94.
Git Commit Tag:
ispana-v0.0.7a94 Focus: Finance Management Feature Type Correction
- a. [finance_management_page.dart]: Replaced
VendorSubFeaturetype withVendorFeatureand guarded subFeatures nullability. - b. [pubspec.yaml]: Bumped version to
0.0.7+93.
Git Commit Tag:
ispana-v0.0.7a93 Focus: Missing Table Column Localization Keys in AppLocale
- a. [app_localization.dart]: Added missing
contactInfo,locationInfo,pppoeUser, andpppoePasswordconstants and corresponding English / Indonesian translations. - b. [pubspec.yaml]: Bumped version to
0.0.7+92.
Git Commit Tag:
ispana-v0.0.7a92 Focus: Code Sanitization, Localization Duplicates Removal, and Invoice Integration Unification
- a. [app_localization.dart]: Removed duplicate
invoicesstring key definitions and duplicate entries from English and Indonesian locale maps. - b. [customer_management_view.dart]: Added missing
intlpackage import and verified column and status handlers. - c. [invoice_view.dart & invoice_form_page.dart]: Unified authentic rich Invoice Form and Table view with category routing ('invoice' / 'billing'), Tripay online payment dialog, WhatsApp direct resend, and live 72h settlement countdown badge.
- d. [finance_management_page.dart]: Wired Finance Management tabs directly to the unified InvoiceView with permission checks.
- e. [pubspec.yaml]: Bumped version to
0.0.7+91.
Git Commit Tag:
ispana-v0.0.7a91 Focus: Finance Management Menu, Customer Table Expansion, 72h Tripay Settlement, and Billing Separation
- a. [vendor_features.dart & app_localization.dart]: Relocated Invoices from Customer Management to new Finance Management menu with sub-features Invoices (manual creation) and Billing (recurring auto-generated). Added localized keys.
- b. [customer_management_view.dart]: Separated PPPoE User and PPPoE Profile into dedicated columns and added Active Date and Isolate Date table columns.
- c. [invoice_model.dart & payment_callback_controller.dart]: Added category, paidAt, settlementDueAt fields; updated Tripay payment callback to set status to 'settle' with a 72-hour settlement due countdown.
- d. [settlement_timer_badge.dart & invoice_list_view.dart & invoice_form_page.dart & finance_management_page.dart]: Created full vertical slice for Finance Management with dynamic ButtonsTabBar navigation, live 72h settlement countdown timer, and arbitrary invoice form creation.
- e. [vendor_drawer.dart]: Wired routing to FinanceManagementPage.
- f. [pubspec.yaml]: Bumped version to
0.0.7+90.
Git Commit Tag:
ispana-v0.0.7a90 Focus: WhatsApp Gateway UX Direct Visibility & WAHA Session In-App Restart Capability
- a. [whatsapp_gateway_settings_view.dart]: Removed top toggle switch and collapsed layout, converting WhatsApp Gateway into a direct static settings page. Added dedicated FAILED/ERROR session status handling and in-app Restart Session buttons.
- b. [settings_provider.dart & settings_service.dart]: Added
restartWahaSession/restartWhatsAppSessionclient methods. - c. [settings_controller.dart & whatsapp_service.dart]: Implemented
POST /settings/whatsapp-gateway/session/restartand auto-recovery restart fallback on 409/stuck WAHA sessions. - d. [pubspec.yaml]: Bumped version to
0.0.7+89.
Git Commit Tag:
ispana-v0.0.7a89 Focus: Customer Management & Network Management Read-Only Permission Sanitization
- a. [customer_management_view.dart]: Removed
auth.tier == 'vendor'bypass; gated Edit button, Isolate/Activate/Delete popup menu, Onboarding status quick dropdown, CSV Import, and Add FAB with stricthasWritePermissionandhasDeletePermission. - b. [invoice_view.dart]: Removed vendor tier bypass; gated Delete Invoice action with
hasDeletePermissionand Buat Invoice FAB withhasWritePermission. - c. [whatsapp_history_view.dart]: Gated Send WhatsApp FAB with
canWritepermission. - d. [customer_controller.dart, invoice_controller.dart, network_controller.dart]: Enforced 403 Forbidden checks on all mutating API routes (customers, invoices, routers, PPPoE profiles, isolation profiles, VPN users).
- e. [pubspec.yaml]: Bumped version to
0.0.7+88.
Git Commit Tag:
ispana-v0.0.7a88 Focus: Strict Read-Only Permission Gating & Architecture Guard Standard
- a. [role_management_page.dart]: Gated role edit and dialog save buttons with
staff_management|role|writepermission. - b. [employee_management_page.dart]: Gated employee card popup menu edit and delete actions with
canWriteandcanDelete. - c. [landmark_drafts_list_view.dart]: Gated draft approve and reject actions with
writeanddeletepermissions. - d. [settings_management_page.dart, brand_settings_view.dart, payment_gateway_settings_view.dart, whatsapp_gateway_settings_view.dart]: Gated top save button and disabled form inputs/switches/actions when user has read-only status.
- e. [auth_provider.dart & auth_middleware.dart]: Added settings permission aliases to Universal Sub-Menu Permission Engine.
- f. [staff_controller.dart, landmark_controller.dart, settings_controller.dart]: Enforced 403 Forbidden checks on all mutating API endpoints.
- g. [09-authentification-rule.md]: Added permanent guard standard for granular UI and API permission gating.
- h. [pubspec.yaml]: Bumped version to
0.0.7+87.
Git Commit Tag:
ispana-v0.0.7a87 Focus: feat:Payment gateway integrations
Git Commit Tag:
ispana-v0.0.7a86 Focus: Refactored Status Resolution to O(1) Constant Map & Set Lookups
- a. [invoice_view.dart]: Replaced verbose 45-line
switch-casein_buildStatusBadgewith a staticMap<String, (Color, String)>for instant O(1) badge configuration lookups. - b. [payment_callback_controller.dart]: Replaced repetitive
if/else-ifchain with constantSet<String>lookups in webhook status settlement. - c. [pubspec.yaml]: Bumped version to
0.0.7+85.
Git Commit Tag:
ispana-v0.0.7a85 Focus: Comprehensive Payment Gateway Status Alias Mapping (All 5 Categories)
- a. [invoice_view.dart] & [payment_callback_controller.dart]: Added exhaustive status alias mapping across all 5 payment outcome categories:
• PAID (paid, settled, success, completed, dibayar, lunas, 1)
• UNPAID (unpaid, pending, waiting, belum dibayar, belum lunas, 0)
• REFUNDED (refund, refunded, reversed, dikembalikan, dikembalian)
• EXPIRED (expired, expiration, kadaluarsa, kadaluwarsa)
• FAILED (failed, failed_payment, cancelled, canceled, denied, gagal, batal) - b. [pubspec.yaml]: Bumped version to
0.0.7+84.
Git Commit Tag:
ispana-v0.0.7a84 Focus: Fixed Refund Status Badge Alias Mapping & Callback Strings
- a. [invoice_view.dart]: Added
refundanddikembaliancases to_buildStatusBadgeswitch statement, soREFUNDstatus callbacks correctly display purpleREFUNDEDbadge instead of falling back to defaultUNPAID. - b. [payment_callback_controller.dart]: Supported
REFUND,REFUNDED,DIKEMBALIKAN, andDIKEMBALIANstatus string aliases in callback processor. - c. [pubspec.yaml]: Bumped version to
0.0.7+83.
Git Commit Tag:
ispana-v0.0.7a83 Focus: Read-Only Payment Status Badges & 5 Gateway Outcome Mappings
- a. [invoice_view.dart]: Removed manual status dropdown; implemented
_buildStatusBadgesupporting 5 gateway-driven status badges (UNPAID,PAID,REFUNDED,EXPIRED,FAILED). - b. [payment_callback_controller.dart]: Mapped payment gateway callback outcomes explicitly across all 5 statuses in MongoDB.
- c. [pubspec.yaml]: Bumped version to
0.0.7+82.
Git Commit Tag:
ispana-v0.0.7a82 Focus: Tripay Callback Settlement Logic & Real-time Flutter UI Auto-Refresh
- a. [payment_callback_controller.dart]: Expanded
isPaidevaluation to cover all Tripay status formats (status == 'PAID',status_code == 1, or test simulator payload withpayment_statusheader), ensuring database status auto-updates topaidupon callback arrival. - b. [invoice_view.dart]: Added periodic background auto-refresh timer (every 5 seconds) to
InvoiceViewso the Flutter table automatically updates invoice statuses on screen without requiring manual page reload. - c. [pubspec.yaml]: Bumped version to
0.0.7+81.
Git Commit Tag:
ispana-v0.0.7a81 Focus: Replaced Invoice Download Action with Copy Link Button
- a. [invoice_view.dart]: Replaced
_downloadInvoicebutton with_copyInvoiceUrlusingIcons.link, allowing vendors to copy public web checkout URLs directly to clipboard with confirmation toast feedback. - b. [pubspec.yaml]: Bumped version to
0.0.7+80.
Git Commit Tag:
ispana-v0.0.7a80 Focus: Fixed Tripay Webhook Callback Signature Verification Error
- a. [payment_callback_controller.dart]: Fixed credential field mapping in
_processTripayCallbackto useclientKey/privateKeyinstead ofapiKeywhen computing HMAC-SHA256 signatures, resolving theInvalid signature (HTTP 400)error from Tripay. - b. [pubspec.yaml]: Bumped version to
0.0.7+79.
Git Commit Tag:
ispana-v0.0.7a79 Focus: Multiline PDF Address Wrapping & Regional (Kabupaten) Signature Location
- a. [pdf_invoice_service.dart]: Wrapped top-left vendor brand container in
pw.Expandedwith right padding, enabling long vendor addresses to wrap cleanly onto multiple lines without pushing the rightINVOICEheader block off-screen. - b. [invoice_repository.dart]: Extracted
regency(Regional Kabupaten) from vendor brandworkingAreasettings and rendered it above the digital signature QR code (e.g.Kampar, 18 August 2026). - c. [pubspec.yaml]: Bumped version to
0.0.7+78.
Git Commit Tag:
ispana-v0.0.7a78 Focus: Full Responsive Table Expansion via LayoutBuilder & ConstrainedBox
- a. [invoice_view.dart]: Wrapped Invoice DataTable in
LayoutBuilderandConstrainedBox(constraints: BoxConstraints(minWidth: constraints.maxWidth))so the table stretches across 100% width on wide desktop screens while preserving smooth horizontal scroll on mobile devices. - b. [pubspec.yaml]: Bumped version to
0.0.7+77.
Git Commit Tag:
ispana-v0.0.7a77 Focus: Strict Tenant Isolation Query Fix & Standardized Table UI Styling
- a. [invoice_data_source.dart]: Replaced unsafe
where.raw(...)query builder with strictwhere.eq('vendorId', vendorId).ne('isDeleted', true)selector ingetInvoices, eliminating cross-tenant invoice leakage. - b. [invoice_view.dart]: Standardized Invoice DataTable container styling with
Card,ClipRRect, themedheadingRowColor, and bold header column labels matching Customer and WhatsApp History sub-features. - c. [pubspec.yaml]: Bumped version to
0.0.7+76.
Git Commit Tag:
ispana-v0.0.7a76 Focus: Interactive Public Web Checkout, Overdue Bill Regeneration, PDF Alignment & Status Auto-Update
- a. [invoice_controller.dart]: Built interactive public web payment checkout portal on
/verify/invoice/<invoiceId>with dynamic channel selection, QRIS QR code rendering, VA code copying, and real-time status auto-polling. - b. [invoice_repository.dart]: Implemented
createPaymentTransactionPublicand expired bill renewal allowing customers to re-select payment methods and generate fresh 24h transactions under the sameinvoiceNumber. - c. [pdf_invoice_service.dart]: Fixed header right metadata table column overflow (expanding width for long invoice numbers like
INV/SWAINET/26/00008) and added dynamic QR/VA rendering in PDF Payment Method section. - d. [invoice_view.dart]: Updated WhatsApp invoice message link template to point to the Web Checkout portal instead of direct raw PDF downloads.
- e. [pubspec.yaml]: Bumped version to
0.0.7+75.
Git Commit Tag:
ispana-v0.0.7a75 Focus: Fixed Layout Overflow in Payment Checkout Dialog
- a. [payment_dialog.dart]: Wrapped
SelectableTextinsideExpandedwidget within the payment code Row container to prevent right overflow when displaying long checkout URLs or payment codes. - b. [pubspec.yaml]: Bumped version to
0.0.7+74.
Git Commit Tag:
ispana-v0.0.7a74 Focus: Safe Fee Number Parsing in Payment Checkout Dialog
- a. [payment_dialog.dart]: Added
_parseDoublehelper method handling String, num, and null types for flat and percentage fee calculations, resolving the_TypeError (type 'String' is not a subtype of type 'num?')cast exception when Tripay returns string numbers. - b. [pubspec.yaml]: Bumped version to
0.0.7+73.
Git Commit Tag:
ispana-v0.0.7a73 Focus: Fixed Tripay Credential Mapping Mismatch & Standardized Form Labels
- a. [invoice_repository.dart]: Fixed credential parsing logic where
apiKeyandprivateKeywere inverted when retrieving payment channels and creating transactions. - b. [payment_gateway_settings_view.dart]: Standardized settings form labels and helper texts to match Tripay Dashboard terminology (Kode Merchant, API Key, Private Key).
- c. [pubspec.yaml]: Bumped version to
0.0.7+72.
Git Commit Tag:
ispana-v0.0.7a72 Focus: Resolved All Invoice Repository Signature & Named Parameter Mismatches
- a. [invoice_repository.dart]: Updated
getInvoicesto accept optionalcustomerIdfiltering. ExtendedcreateInvoicesignature withamount,invoiceNumber,date,dueDate, andcustomerAddressmatchingInvoiceControllercallers. - b. Verified 0 compilation errors across
01_APIwithdart analyze. - c. [pubspec.yaml]: Bumped version to
0.0.7+71.
Git Commit Tag:
ispana-v0.0.7a71 Focus: Rebuilt InvoiceRepository & Resolved All Backend and App Analysis Errors
- a. [invoice_repository.dart]: Restored and updated the complete
InvoiceRepositoryclass with exact model mappings, PDF invoice generation, and payment gateway methods. - b. [payment_gateway_settings_view.dart]: Cleaned up unused fields and fixed runtime constant instantiation for ClipboardData.
- c. Verified 0 compilation/analysis issues across both
01_APIand02_ispanacodebases. - d. [pubspec.yaml]: Bumped version to
0.0.7+70.
Git Commit Tag:
ispana-v0.0.7a70 Focus: Fix Server Payment Callback Mount Path Alignment
- a. [server.dart]: Fixed server route mounting from
/api/payment/callbackto/api/paymentand/payment, aligning with vendor-scoped routes (/api/payment/tripay/instanet,/api/payment/tripay/platform) and legacy callback fallbacks. - b. [pubspec.yaml]: Bumped version to
0.0.7+69.
Git Commit Tag:
ispana-v0.0.7a69 Focus: Vendor-Scoped Payment Gateway Callback Architecture (/api/payment/tripay/<vendor-brand-name>)
- a. [payment_callback_controller.dart]: Implemented vendor-scoped callback route handling (
/api/payment/<provider>/<vendorIdentifier>) with tenant isolation validation before HMAC signature checking and invoice settlement. - b. [invoice_repository.dart]: Dynamically formatted Tripay payment callback URLs to vendor-specific paths (e.g.
https://swainet.id/api/payment/tripay/instanet) orplatform. - c. [payment_gateway_settings_view.dart]: Dynamically generated copyable vendor-branded callback URL for Tripay Merchant Dashboard configuration.
- d. [auth_middleware.dart]: Updated public whitelist for
path.startsWith('api/payment/')andpath.startsWith('payment/'). - e. [pubspec.yaml]: Bumped version to
0.0.7+68.
Git Commit Tag:
ispana-v0.0.7a68 Focus: Removed Payment Gateway Toggle & Copyable Tripay Merchant Callback URL
- a. [payment_gateway_settings_view.dart]: Removed the redundant 'Enable Payment Gateway' switch toggle. Added a read-only, 1-click copyable
Tripay Merchant Callback URLfield (https://swainet.id/api/payment/callback/tripay) whenTripay (Own Account)is selected. - b. [pubspec.yaml]: Bumped version to
0.0.7+67.
Git Commit Tag:
ispana-v0.0.7a67 Focus: Tripay Payment Gateway Full Functional Integration & Interactive Checkout Dialog
- a. [tripay_service.dart]: Implemented
TripayServicewith HMAC-SHA256 signature generation, payment channel retrieval, and closed payment transaction creation. - b. [invoice_model.dart & invoice_repository.dart]: Extended invoice schema with
paymentUrl,paymentPayCode,paymentMethodCode, andpaymentExpiredAt. Added channel discovery and payment transaction creation. - c. [invoice_controller.dart & auth_middleware.dart]: Exposed payment channel & transaction routes. Fixed auth middleware to publicly whitelist payment callbacks (resolving HTTP 401 error).
- d. [payment_dialog.dart & invoice_view.dart]: Built interactive online payment dialog featuring payment channel selection, dynamic QRIS display, and Virtual Account number 1-click copy. Added 'Bayar Online' action button on unpaid invoices.
- e. [pubspec.yaml]: Bumped version to
0.0.7+66.
Git Commit Tag:
ispana-v0.0.7a66 Focus: Payment Gateway Options (ISPANA Platform Tripay, Own Tripay, Xendit, Duitku) & Extensible Callback Webhook
- a. [payment_gateway_settings_view.dart]: Updated provider dropdown options to support
ISPANA Platform (Tripay),Tripay (Own Account),Xendit (Coming Soon), andDuitku (Coming Soon). Removed redundant Production Mode switch toggle. - b. [payment_callback_controller.dart]: Created generalized, extensible payment callback controller handling webhooks for Tripay (HMAC-SHA256 signature verification, auto-settling invoice as paid, auto-activating customer subscription) and stubbed routes for future gateway providers.
- c. [server.dart]: Mounted
/api/payment/callback/<provider>and/payment/callback/<provider>webhook routes. - d. [pubspec.yaml]: Bumped version to
0.0.7+65.
Git Commit Tag:
ispana-v0.0.7a65 Focus: Separate PPPoE User/Pass Columns & Compact DataRow Height
- a. [customer_management_view.dart]: Separated PPPoE credentials into distinct
PPPoE UserandPPPoE Passcolumns. Reduced row height todataRowMinHeight: 48anddataRowMaxHeight: 52for a compact table presentation. - b. [pubspec.yaml]: Bumped version to
0.0.7+64.
Git Commit Tag:
ispana-v0.0.7a64 Focus: PPPoE Account Column & Tap-To-Reveal Password Toggle
- a. [customer_management_view.dart]: Added
PPPoEcolumn displaying PPPoE username and masked password (••••••••). Tapping the cell toggles password visibility without opening the customer detail modal. - b. [pubspec.yaml]: Bumped version to
0.0.7+63.
Git Commit Tag:
ispana-v0.0.7a63 Focus: Removed Selection Checkbox Column in Customer Management Table
- a. [customer_management_view.dart]: Set
showCheckboxColumn: falseonDataTableto remove checkbox column while preserving full-row clickability. - b. [pubspec.yaml]: Bumped version to
0.0.7+62.
Git Commit Tag:
ispana-v0.0.7a62 Focus: Unified Status Badge Styling in Customer Management Column
- a. [customer_management_view.dart]: Styled 4th column Status cell (line 441) with
statusColorbackground andstatusTextlabel badge across both Customers & Onboarding views. - b. [pubspec.yaml]: Bumped version to
0.0.7+61.
Git Commit Tag:
ispana-v0.0.7a61 Focus: Full DataRow Clickability in Customer Management Table
- a. [customer_management_view.dart]: Added
onSelectChangedcallback toDataRowso clicking anywhere on a customer row opens the detail modal. - b. [pubspec.yaml]: Bumped version to
0.0.7+60.
Git Commit Tag:
ispana-v0.0.7a60 Focus: Fix Customer DataTable Row Height Overflow & Full-Width Layout
- a. [customer_management_view.dart]: Set
dataRowMinHeight: 64,dataRowMaxHeight: 68, and wrapped inLayoutBuilderwith full-widthConstrainedBoxto eliminate bottom pixel overflow and stretch table to 100% container width. Added direct WhatsApp action button. - b. [pubspec.yaml]: Bumped version to
0.0.7+59.
Git Commit Tag:
ispana-v0.0.7a59 Focus: WhatsApp Gateway (WAHA) Auto-Detection & Connected Phone Synchronization
- a. [whatsapp_service.dart]: Extracted connected phone number and account push name from WAHA active session status payload.
- b. [settings_provider.dart]: Added
wahaPhoneandwahaPushNametracking in state provider. - c. [whatsapp_gateway_settings_view.dart]: Added fallback to Brand WhatsApp number, auto-populated empty phone field upon pairing, and displayed connected account badge with manual sync button.
- d. [app_localization.dart]: Added localization keys and translations (EN/ID) for connected account badges and sync actions.
- e. [pubspec.yaml]: Bumped version to
0.0.7+58.
Git Commit Tag:
ispana-v0.0.7a58 Focus: Onboarding Table Layout & Username Display in Activation Progress
- a. [customer_management_view.dart]: Converted Customer Onboarding grid cards into a clean, scrollable
DataTablelayout to eliminate card height overflow. - b. [customer_form_page.dart]: Added username formatting to display usernames (e.g.,
sarana.working.akses.indonesia) instead of full email addresses in Activation Progress timeline. - c. [customer_repository.dart]: Updated
_resolveActorNameon backend to extract username or email prefix for registration footprints. - d. [pubspec.yaml]: Bumped version to
0.0.7+57.
Git Commit Tag:
ispana-v0.0.7a57 Focus: Fixed WhatsApp WAHA Gateway Map Type Cast Error
-
a. [settings_repository.dart]: Converted MongoDB BSON
subdocuments (
whatsappGateway,paymentGateway) using safeMap<String, dynamic>.from(...). -
b. [settings_controller.dart]: Replaced direct
as Map<String, dynamic>?subtype casts in WAHA session handlers with safe map conversion. -
c. [whatsapp_service.dart]: Ensured JSON decodes safely cast
to
Map<String, dynamic>. -
d. [api_client.dart]: Updated
_handleResponsein Flutter app to safely convert HTTP JSON map responses viaMap<String, dynamic>.from(...). -
e. [pubspec.yaml]: Bumped version to
0.0.7+55.
Git Commit Tag:
ispana-v0.0.7a55 Focus: Dual Searchable Kecamatan/Village Fields & Google Maps Short-Link Navigation
- a. [landmark_data_section.dart]: Placed Kecamatan and Village (Kelurahan/Desa) selection fields in the same row with searchable modal picker sheets.
- b. [landmark_form_page.dart]: Implemented dynamic village filtering per selected kecamatan & spatial coordinate auto-population.
- c. [map_display_view.dart]: Enhanced Google Maps short-link coordinate extraction and map navigation.
- d. [app_localization.dart]: Added Kecamatan & Village search localization keys for EN & ID.
-
e. [pubspec.yaml]: Bumped version to
0.0.7+54.
Git Commit Tag:
ispana-v0.0.7a54 Focus: Fixed Vendor Settings Fetch Trigger & Auto-Population Lifecycle
-
a. [settings_management_page.dart]: Removed restrictive
tier == 'vendor'check so all authorized vendor accounts fetch settings on page load. - b. [brand_settings_view.dart]: Direct build-pass sync for controllers and state properties when brand settings arrive.
-
c. [pubspec.yaml]: Bumped version to
0.0.7+53.
Git Commit Tag:
ispana-v0.0.7a53 Focus: Fixed Root Vendor Fields Fallback for Business Name, WhatsApp, Address, Logo & Banner
-
a. [settings_repository.dart]: Merged root vendor fields (
businessName,whatsapp,address,logoUrl,bannerUrl) into the brand settings response map. -
b. [settings_remote_data_source.dart]: Updated
updateBrandSettingsto synchronize root vendor fields alongside brand subdocument in MongoDB. -
c. [brand_settings_view.dart]: Added fallback key checks for
whatsapp/whatsappNumberandbusinessName/name. -
d. [pubspec.yaml]: Bumped version to
0.0.7+52.
Git Commit Tag:
ispana-v0.0.7a52 Focus: Fixed Brand Settings Data Auto-Population for Logo, Banner, Business Name & WhatsApp
-
a. [brand_settings_view.dart]: Updated
_populateFromBrandand build lifecycle to automatically populate existing business name, whatsapp number, logo URL, and banner URL when settings data loads. -
b. [pubspec.yaml]: Bumped version to
0.0.7+51.
Git Commit Tag:
ispana-v0.0.7a51 Focus: Replaced Kecamatan with Kabupaten (Regency) Multi-Selection in Vendor Working Area
-
a. [regions_data_source.dart] & [system_controller.dart]:
Added
getRegenciesForProvincemethod and mountedGET /v1/system/regions/regencies?province=Xendpoint. -
b. [brand_settings_view.dart]: Replaced Kecamatan
multi-select with
Regional (Kabupaten)multi-select form &+ Add Kabupatenmodal. -
c. [settings_service.dart]: Added
getRegencies(province)service helper method. - d. [landmark_form_page.dart] & [customer_form_page.dart]: Updated regional working area kelurahan loading logic to support selected Kabupaten (Regencies).
-
e. [pubspec.yaml]: Bumped version to
0.0.7+50.
Git Commit Tag:
ispana-v0.0.7a50 Focus: Fixed Undefined Method loadSettings in Landmark Form Page
-
a. [landmark_form_page.dart]: Replaced undefined
loadSettingscall onSettingsProviderwithfetchVendorSettings(vendorId, token). -
b. [pubspec.yaml]: Bumped version to
0.0.7+49.
Git Commit Tag:
ispana-v0.0.7a49 Focus: Fixed VendorDrawer Avatar Exception & Enabled Regional Working Area Selection in Landmark Form
-
a. [vendor_drawer.dart]: Fixed
Invalid image dataexception by replacing rawui-avatarsNetworkImage with robust initial text CircleAvatar. -
b. [landmark_form_page.dart]: Fixed regional working area
kelurahan loading fallback and integrated 2dsphere spatial
lookup (
lookupRegion) on coordinate changes. -
c. [settings_service.dart]: Added
lookupRegion(lat, lng)method to query regional spatial lookup API. -
d. [pubspec.yaml]: Bumped version to
0.0.7+48.
Git Commit Tag:
ispana-v0.0.7a48 Focus: Integrated 1.9 GB Indonesia District Master GeoJSON Dataset into MongoDB & Dart API
-
a. [seed_regions.dart] (CLI Script): Created CLI import tool
to stream and seed 1.9 GB GeoJSON dataset into MongoDB
system_regionscollection with 2dsphere index. -
b. [regions_data_source.dart] (Backend Datasource):
Refactored to query MongoDB
system_regionscollection dynamically with aggregation pipelines and spatial lookup. -
c. [system_controller.dart] (Backend Controller): Updated
REST endpoints (provinces, kecamatan, kelurahan) and added
/v1/system/regions/lookupendpoint. -
d. [pubspec.yaml]: Bumped version to
0.0.7+47.
Git Commit Tag:
ispana-v0.0.7a47 Focus: FEATURE-03 Regionalization Polygon & Working Area System
- a. [regions_data_source.dart] (API): Added Indonesian regional datasource providing provinces list, kecamatan GeoJSON polygons, and kelurahan lists.
- b. [system_controller.dart] (API): Exposed regional REST API endpoints (GET /regions/provinces, GET /regions/kecamatan, POST /regions/kelurahan).
- c. [settings_service.dart] & [settings_provider.dart] (Flutter): Added regional API consumer methods and working area payload support.
- d. [brand_settings_view.dart] (Widget): Replaced address field with Country -> Province -> Multi-Kecamatan working area chip selector.
- e. [map_display_view.dart] (Widget): Added PolygonLayer overlay to render vendor working area kecamatan polygons on canvas with toggle map control button.
- f. [landmark_data_section.dart] & [landmark_form_page.dart] (Widget): Replaced landmark label text field with Village (Kelurahan/Desa) dropdown scoped to vendor working area.
- g. [customer_form_page.dart] (Widget): Added scoped Kelurahan dropdown selection for customer address setup.
- h. [TODO.md]: Checked off all FEATURE-03 tasks.
-
i. [pubspec.yaml]: Bumped version to
0.0.7+46.
Git Commit Tag:
ispana-v0.0.7a46 Focus: Fix Port Search Bar Clearing on Mobile Scroll
-
a. [landmark_pop_form.dart]: Moved
searchControllerlifecycle outsideshowModalBottomSheetbuilder to prevent search input wipe on scroll. - b. [router_registration_form.dart]: Fixed port search controller reset on scroll rebuilds.
- c. [customer_form_page.dart]: Fixed customer upstream port search controller lifecycle.
- d. [TODO.md]: Marked BUG-02 task as completed.
-
e. [pubspec.yaml]: Bumped version to
0.0.7+45.
Git Commit Tag:
ispana-v0.0.7a45 Focus: Unify Landmark and Map Search Bar Logic
-
a. [landmark_provider.dart]: Incremented
_landmarksVersioninsetFilterQueryandsetSelectedCategoryto trigger map cache update on search query changes. -
b. [map_display_view.dart]: Initialized
_searchControllertext from provider state and synced search changes/clears toLandmarkProvider.setFilterQuery. - c. [landmarks_list_view.dart]: Ensured bidirectional search query sync between map view and landmark list.
- d. [TODO.md]: Added roadmap and marked BUG-01 search unification task as completed.
-
e. [pubspec.yaml]: Bumped version to
0.0.7+44.
Git Commit Tag:
ispana-v0.0.7a44 Focus: Fix web version check caching and refresh handling
Git Commit Tag:
ispana-v0.0.7a43 Focus: feat: UI/UX improvement part 1
Git Commit Tag:
ispana-v0.0.7a42 Focus: Fix FilePicker API Call Compatibility
-
a. [customer_import_view.dart] (Widget): Updated
FilePicker.platform.pickFilesto static methodFilePicker.pickFilesforfile_pickerv11.x API compatibility. -
b. [pubspec.yaml]: Bumped version to
0.0.7+31.
Git Commit Tag:
ispana-v0.0.7a31 Focus: Refactor Role Management to Data Table & Integrate File Picker
- a. [role_management_page.dart] (Widget): Refactored role grid cards to structured DataTable with action columns.
-
b. [customer_import_view.dart] (Widget): Integrated
file_pickerfor selecting local CSV files. -
c. [pubspec.yaml]: Added
file_picker: ^11.0.2dependency and bumped version to0.0.7+30.
Git Commit Tag:
ispana-v0.0.7a30 Focus: Simplify Staff & Customer Management UI/UX via Modal Dialogs
- a. [staff_management_page.dart] (Page): Removed 'Peran' tab from top sub-menu bar.
- b. [employee_management_page.dart] (Widget): Added 'Kelola Peran' button to open role management dialog.
-
c. [role_management_page.dart] (Widget): Wrapped role table
and creation form into
RoleManagementDialog. - d. [customer_management_page.dart] (Page): Removed 'Impor CSV' tab from top sub-menu bar.
- e. [customer_management_view.dart] (Widget): Added 'Impor CSV' button in header action bar.
-
f. [customer_import_view.dart] (Widget): Wrapped CSV
importer in
CustomerImportDialogand added 'Unduh Templat CSV' template download button. -
g. [pubspec.yaml]: Bumped version to
0.0.7+29.
Git Commit Tag:
ispana-v0.0.7a29 Focus: Remove Template Shortcut Inserted SnackBar Notification
- a. [whatsapp_send_dialog.dart] (Widget): Removed SnackBar notification when inserting message template shortcuts.
-
b. [pubspec.yaml]: Bumped version to
0.0.7+28.
Git Commit Tag:
ispana-v0.0.7a28 Focus: WhatsApp History UI Cleanup (Refresh Button Removal & FAB Icon-Only)
- a. [whatsapp_history_view.dart] (Widget): Removed manual refresh IconButton next to search field and updated FloatingActionButton to icon-only FAB.
-
b. [pubspec.yaml]: Bumped version to
0.0.7+27.
Git Commit Tag:
ispana-v0.0.7a27 Focus: Release
Git Commit Tag:
ispana-v0.0.7a26 Focus: Refactor Null Check to Null-Aware Element Marker in MapDisplayView
-
a. [map_display_view.dart] (Widget): Replaced
if (_searchMarker != null) _searchMarker!with?_searchMarkernull-aware collection element syntax. -
b. [pubspec.yaml]: Bumped version to
0.0.7+25.
Git Commit Tag:
ispana-v0.0.7a25 Focus: Fix Map Event Infinite Rebuild Loop in MapDisplayView
-
a. [map_display_view.dart] (Widget): Filtered
onMapEventlistener to only trigger debounced bounding box fetches when map camera movement finishes (MapEventMoveEnd,MapEventFlingAnimationEnd,MapEventDoubleTapZoomEnd), eliminating the UI thread freeze loop. -
b. [pubspec.yaml]: Bumped version to
0.0.7+24.
Git Commit Tag:
ispana-v0.0.7a24 Focus: Fix "Ini Tiang Sendiri" (isOwnedPole) Persistence in Dart API Backend
-
a. [landmark_model.dart] (API Model): Added
isOwnedPolefield, constructor mapping,fromMap()parsing, andtoMap()serialization in Dart API backend. -
b. [landmark_repository.dart] (API Repository): Added
isOwnedPoleparameter handling increateLandmark()andupdateLandmark(). -
c. [landmark_controller.dart] (API Controller): Extracted
payload['isOwnedPole']in REST HTTP endpoints (POST /landmarksandPUT /landmarks/<id>) to preserve checkbox state in MongoDB. -
d. [pubspec.yaml]: Bumped version to
0.0.7+23.
Git Commit Tag:
ispana-v0.0.7a23 Focus: Fix Map Management UI Freeze & Unused Field Warning
-
a. [map_display_view.dart] (Widget): Replaced synchronous
main-thread
BuiltInMapCachingProviderwith non-blockingNetworkTileProviderto prevent UI freeze on map startup, and fixed?_searchMarkernull-aware syntax inMarkerLayer. -
b. [landmark_form_page.dart] (Page): Removed unused private
field
_landmarkIconsand unreferenced style handlers. -
c. [pubspec.yaml]: Bumped version to
0.0.7+22.
Git Commit Tag:
ispana-v0.0.7a22 Focus: Landmark Form Simplification (Moved Mark Own Pole to General Tab & Removed Style Tab)
- a. [landmark_data_section.dart] (Widget): Moved the Ini Tiang Sendiri (Mark Own Pole) checkbox tile directly into the Umum (General) tab form.
- b. [landmark_form_page.dart] (Page): Removed the Gaya (Style) sub-menu tab from the landmark modal dialog and reduced tab count to 3 (Umum, Infrastruktur, Perangkat Keras). Cleaned up unused style handlers & imports.
-
c. [pubspec.yaml]: Bumped version to
0.0.7+21.
Git Commit Tag:
ispana-v0.0.7a21 Focus: Fix HTTP 301 Moved Permanently Error (Separate API BaseUrl & Public Verification Domain)
-
a. [api_config.dart] (Config): Restored
ApiConfig.baseUrlback to API backend server (http://103.196.40.140:8080) to prevent Nginx HTTP-to-HTTPS 301 redirects on API calls, and addedApiConfig.publicDomain(http://swainet.id) specifically for public invoice links. -
b. [invoice_view.dart] (Widget): Updated invoice PDF
download & WhatsApp sharing links to utilize
ApiConfig.publicDomain(http://swainet.id/verify/invoice/...) while preserving direct API server connectivity for app requests. -
c. [pubspec.yaml]: Bumped version to
0.0.7+20.
Git Commit Tag:
ispana-v0.0.7a20 Focus: Domain Invoice PDF URL & Auto-Populating Brand Settings Form
-
a. [api_config.dart] (Config): Updated default
ApiConfig.baseUrlfrom IP:PORT (http://103.196.40.140:8080) to production domain (http://swainet.id) so invoice PDF links are formatted with the domain. -
b. [brand_settings_view.dart] (Widget): Added automatic
fetchVendorSettings()post-frame callback ininitState()and implemented reactive_populateFromBrand()syncing so existing brand settings (Business Name, WhatsApp Number, Address, Logo, Banner) are populated into the form. -
c. [pubspec.yaml]: Bumped version to
0.0.7+19.
Git Commit Tag:
ispana-v0.0.7a19 Focus: Auto-Fetch Vendor Settings & Compact Autocomplete Template Selection Field
-
a. [whatsapp_send_dialog.dart] (Widget): Added automatic
fetchVendorSettings()execution ininitState()so custom saved message templates from vendor settings are always loaded when opening the dialog. -
b. [whatsapp_send_dialog.dart] (Widget): Replaced the
template action chips bar with a compact, clean
Autocomplete<Map<String, dynamic>>FormField (Pilih / Cari Templat Pesan (Pintasan)) with live filtering by template title, shortcut, or body. -
c. [pubspec.yaml]: Bumped version to
0.0.7+18.
Git Commit Tag:
ispana-v0.0.7a18 Focus: Reliable Shortcut Expansion & Built-In Template Fallback
-
a. [whatsapp_send_dialog.dart] (Widget): Added automatic
pre-send shortcut expansion inside
_handleSend()so clicking "Kirim WhatsApp" with raw shortcut text (e.g./hello) instantly expands into template text before sending. -
b. [whatsapp_send_dialog.dart] (Widget): Implemented live
onChangedshortcut expansion detection (expanding shortcuts when space or newline is typed) and added built-in fallback template defaults (/hello,/tagihan,/terimakasih). -
c. [pubspec.yaml]: Bumped version to
0.0.7+17.
Git Commit Tag:
ispana-v0.0.7a17 Focus: Auto-Sanitization of Phone Numbers (Country Code Conversion)
-
a. [customer_form_page.dart] (Page): Auto-sanitizes input
phone numbers starting with
0(e.g.08123456789) into international country code format (628123456789) upon customer registration & edit. -
b. [whatsapp_send_dialog.dart] (Widget): Normalizes target
phone numbers in direct messaging modal dialog to ensure
leading
0is converted to country code62. -
c. [pubspec.yaml]: Bumped version to
0.0.7+16.
Git Commit Tag:
ispana-v0.0.7a16 Focus: Full WhatsApp Integration (Customer Card Button, Invoice Send, Shortcut Engine & History Tab)
- a. [customer_management_view.dart] (Widget): Added a green WhatsApp IconButton on the bottom-right of customer card opening direct chat modal dialog.
-
b. [whatsapp_send_dialog.dart] (Widget): Implemented a modal
dialog supporting shortcut auto-expansion (e.g. typing
/helloand pressing Enter automatically fills template text and replaces variables{customerName},{invoiceNumber},{amount}) and quick-pick action chips. - c. [invoice_view.dart] (Widget): Integrated direct WhatsApp sending in the Faktur / Invoice sub-menu table with prefilled invoice payment notice template.
- d. [whatsapp_history_view.dart] (Widget): Created the "Riwayat WhatsApp" sub-menu tab displaying sent history logs data table with recipient type badges, source badges, status, and extended Floating Action Button (FAB) with recipient autocomplete suggestions.
-
e. [vendor_features.dart] & [app_localization.dart]:
Registered
whatsapp_historysub-feature key and localized all strings in Indonesian & English. -
f. [pubspec.yaml]: Bumped version to
0.0.7+15.
Git Commit Tag:
ispana-v0.0.7a15 Focus: Fix BuildContext Across Async Gaps Warning
-
a. [whatsapp_gateway_settings_view.dart] (Widget): Replaced
context.mountedchecks after asynchronous operations withmounted(State.mounted) to satisfy Dart'suse_build_context_synchronouslylinter rule. -
b. [pubspec.yaml]: Bumped version to
0.0.7+14.
Git Commit Tag:
ispana-v0.0.7a14 Focus: Responsive Draft Data Table & Creator Name Resolution
-
a. [landmark_drafts_list_view.dart] (Widget): Wrapped
DataTableinLayoutBuilderwith responsive min-width constraint (math.max(constraints.maxWidth, 700.0)) so the table expands responsively across 100% of desktop/web views. -
b. [landmark_drafts_list_view.dart] (Widget): Added
_fetchStaffNames()viaEmployeeServiceto resolve raw creator token IDs (e.g.3SY!C8) into human-readable staff names (e.g.John Doe) in the "Dibuat Oleh" column. -
c. [pubspec.yaml]: Bumped version to
0.0.7+11.
Git Commit Tag:
ispana-v0.0.7a11 Focus: Landmark Draft Sub-Menu DataTable & Live Background Sync
-
a. [landmark_drafts_list_view.dart] (Widget): Replaced bulky
card layout with a clean, horizontal-scrolling
DataTable(Tipe, Nama Markah, Dibuat Oleh, Tanggal, Aksi). Preserved click-to-view feature opening read-only draft form. - b. [landmark_drafts_list_view.dart] (Widget): Implemented a periodic 5-second background sync timer while mounted so newly submitted drafts automatically appear live for admins without manual refresh.
-
c. [landmark_provider.dart] (Provider): Updated
approveDraft()to call bothfetchLandmarks()andfetchDrafts()for immediate real-time state resolution. -
d. [pubspec.yaml]: Bumped version to
0.0.7+10.
Git Commit Tag:
ispana-v0.0.7a10 Focus: Fix App Crash on Map Marker Render (Safeguard Splitter Ratio Parsing)
-
a. [map_landmark.dart] (Model): Wrapped
getEffectiveColor()in atry-catchsafety handler and added range checks forsplitterRatiostring splitting to preventRangeErrorcrashes when splitter ratios lack colon formatting. -
b. [pubspec.yaml]: Bumped version to
0.0.7+9.
Git Commit Tag:
ispana-v0.0.7a9 Focus: Restrict Landmark Editing to Landmark Sub-Menu List
- a. [landmark_detail_sheet.dart] (Widget): Removed the edit button icon from the landmark detail popup sheet header so landmark editing can only be launched from the Landmark sub-menu list view ("Markah Tanah" tab).
-
b. [pubspec.yaml]: Bumped version to
0.0.7+8.
Git Commit Tag:
ispana-v0.0.7a8 Focus: Landmark Pin Style & Color Revision (Dynamic Port & Status Colors + Color Wheel Picker)
-
a. [map_landmark.dart] (Model): Added
getEffectiveColor()method calculating dynamic status colors forodp,olt,jc,bts,otbbased on non-zero port capacity andonubased on customer status. - b. [map_display_view.dart] (Widget): Updated marker pin rendering, polylines, search suggestions, and dimmed opacity for unconfigured ONU pins.
- c. [landmark_detail_sheet.dart] & [landmarks_list_view.dart] (Widgets): Updated landmark headers and list items to display effective status colors.
-
d. [landmark_style_section.dart] (Page): Restricted
customizable colors to
pop&defaultthemes, added Hex input field, interactive HSV Color Wheel dialog, and dynamic color notification notice for hardware devices. - e. [landmark_form_page.dart] (Page): Added silent color normalization on edit when saving non-customizable landmark records to database.
-
f. [pubspec.yaml]: Bumped version to
0.0.7+7.
Git Commit Tag:
ispana-v0.0.7a7 Focus: Remove Duplicated AppBar Search Bar in Maps Management
-
a. [maps_management_page.dart] (Frontend): Removed redundant
AppBar title
TextFieldthat caused a double search bar whenfilterQuerywas active. -
b. [pubspec.yaml]: Bumped version to
0.0.7+6.
Git Commit Tag:
ispana-v0.0.7a6 Focus: Standardized Proportional Card System Across Staff, Customer & Radius Routers
-
a. [employee_management_page.dart]: Standardized
EmployeeCardlayout to 175px grid height with 52x52 soft avatar container, zero blank space, and uniform borders. -
b. [customer_management_view.dart]: Converted Customer view
to
GridView.builderwith 175px grid height, 52x52 customer avatar container, and 3-dots popup menu. -
c. [radius_management_view.dart]: Converted Router view to
GridView.builderwith 175px grid height, 52x52 router icon container, and top ID/status chips. -
d. [pubspec.yaml]: Incremented version to
0.0.7+41.
Git Commit Tag:
ispana-v0.0.7a41 Focus: Role Form Top-Right Header Action & Redundant Cancel Button Removal
-
a. [role_management_page.dart]: Placed the primary
BUAT PERAN/SIMPANbutton in the top-right header bar next to the close button for seamless design alignment with Settings. -
b. [role_form_page.dart]: Removed the redundant
BATALbutton from the bottom footer bar since the top-left<-back button handles navigation. -
c. [pubspec.yaml]: Incremented version to
0.0.7+40.
Git Commit Tag:
ispana-v0.0.7a40 Focus: Single-Layer Role Management Dialog, CSV Import Permission Cleanup & Modal Overflow Fix
-
a. [role_management_page.dart] & [role_form_page.dart]:
Refactored
RoleManagementDialogto switch views inline (List <-> Form) inside a single modal container, eliminating double-stacked popups. -
b. [vendor_features.dart]: Removed
customer_import(Impor CSV) sub-feature entry from the role permission checklist. -
c. [customer_import_view.dart]: Wrapped title/description
text in
Expandedinside the CSV import modal header to eliminate pixel overflow errors. -
d. [pubspec.yaml]: Incremented version to
0.0.7+39.
Git Commit Tag:
ispana-v0.0.7a39 Focus: Reusable PhotoUploadWidget Integration & Account Profile Global SIMPAN Binding
-
a. [account_security_view.dart]: Removed redundant
Simpan Profilbutton and bound saving to the top globalSIMPANbutton header. -
b. [photo_upload_widget.dart]: Decoupled
PhotoUploadWidgetfromLandmarkProviderso it can be reused globally across all app features. -
c. [account_security_view.dart] & [employee_form_page.dart]:
Integrated
PhotoUploadWidgetfor uniform image picker and upload experience. - d. [auth_repository_impl.dart], [auth_remote_data_source.dart] & [auth_controller.dart]: Resolved all backend API compile errors.
-
e. [pubspec.yaml]: Incremented version to
0.0.7+38.
Git Commit Tag:
ispana-v0.0.7a38 Focus: Employee Form Profile Picture Field & Account Profile Settings Form (Phone, Photo, Address)
-
a. [employee_form_page.dart]: Added profile picture field
with live 54x54 soft rounded square avatar preview container
in
EmployeeFormDialog. - b. [employee_management_page.dart]: Rendered uploaded network photo images inside the staff card avatar container with initial letter fallback.
-
c. [account_security_view.dart]: Added Profil Akun card allowing users to update their WhatsApp number (with
InputSanitizer), profile picture URL, and address. -
d. [auth_controller.dart] & [auth_repository_impl.dart]:
Added
PUT /v1/auth/profileendpoint in API to persist user profile updates indata_authanddata_employees. -
e. [pubspec.yaml]: Incremented version to
0.0.7+37.
Git Commit Tag:
ispana-v0.0.7a37 Focus: Staff Square Avatar, PopupMenu Contrast Fix, Employee Form Dialog Popup & Responsive Role Table
- a. [employee_management_page.dart]: Added a square avatar container with soft border radius displaying staff initials to balance the card layout.
- b. [employee_management_page.dart]: Enhanced PopupMenu contrast and elevation so item list options stand out clearly against dark card surface.
-
c. [employee_form_page.dart]: Refactored Employee
Create/Edit form from a full-page route into a modal dialog
(
EmployeeFormDialog.show). -
d. [role_management_page.dart]: Made the role list table
100% responsive (expanding to
double.infinitywidth). -
e. [pubspec.yaml]: Incremented version to
0.0.7+36.
Git Commit Tag:
ispana-v0.0.7a36 Focus: Staff Page Double Navbar Fix, Dropdown Filter Removal & Icon-Only FloatingActionButton
-
a. [employee_management_page.dart]: Removed duplicate inner
AppBarandVendorDrawer, fixing the double navbar issue. - b. [employee_management_page.dart]: Completely removed status dropdown filter from top header row to eliminate pixel overflow.
-
c. [employee_management_page.dart]: Converted
FloatingActionButton to an icon-only button (
Icon(Icons.person_add_outlined)). -
d. [pubspec.yaml]: Incremented version to
0.0.7+35.
Git Commit Tag:
ispana-v0.0.7a35 Focus: Staff Page Header Overflow Fix, FAB Refactoring, Outdated Warning Card Removal & Centralized Input Sanitizers
-
a. [employee_management_page.dart]: Moved
+ Tambah Karyawanaction to a FloatingActionButton (FloatingActionButton.extended) and cleaned up top header action row to eliminate pixel overflow. -
b. [employee_form_page.dart]: Removed outdated
AppLocale.employeeSignInInfowarning card from employee form. -
c. [input_sanitizer.dart]: Created centralized
InputSanitizerutility in both Flutter frontend (02_ispana) and backend API (01_API) for mandatory email lowercasing and phone country code conversion. -
d. [staff_repository.dart], [customer_form_page.dart],
[auth_provider.dart] & [auth_repository_impl.dart]:
Enforced
InputSanitizeracross forms, providers, and backend repositories. -
e. [pubspec.yaml]: Incremented version to
0.0.7+34.
Git Commit Tag:
ispana-v0.0.7a34 Focus: Staff Phone Country Code Auto-Conversion, Staff Page UI/UX Modernization & WhatsApp Recipient Autocomplete
-
a. [employee_form_page.dart] & [staff_repository.dart]:
Enforced automatic phone country code conversion (converting
08...to628...) on frontend form submission and backend database insertion. - b. [employee_management_page.dart]: Redesigned Staff Management page UI/UX to match Customer Management styling with live search, status filter, ID badges, role chips, and WhatsApp quick actions.
- c. [whatsapp_send_dialog.dart]: Enhanced recipient autocomplete search so searching by customer or staff name automatically populates and replaces text field with their WhatsApp phone number.
-
d. [pubspec.yaml]: Incremented version to
0.0.7+33.
Git Commit Tag:
ispana-v0.0.7a33 Focus: Option C Role Permission Selection & Global Settings Architecture Refactoring
- a. [app_appearance_view.dart]: Created shared core widget for universal theme and language selection across all tiers.
- b. [account_security_view.dart]: Created shared core widget for change password & security verification across all tiers.
-
c. [vendor_features.dart]: Added
isPermissionConfigurableandsupportedLevelsper feature, excluding universal features (dashboardandsettings_account). -
d. [role_form_page.dart]: Updated
RoleFormDialogto filter out universal features, dynamically build supported permission level segments, and supportclaimlevel access. -
e. [auth_provider.dart] & [auth_middleware.dart]:
Updated permission engines to evaluate
|claimlevel access. -
f. [settings_management_page.dart]: Refactored settings tabs
to isolate vendor company settings and create a dedicated
Accounttab for change password. -
g. [pubspec.yaml]: Incremented version to
0.0.7+32.
Git Commit Tag:
ispana-v0.0.7a32 Focus: Strict Read-Write Role Level Enforcement (Delete Button Removal)
-
a. [auth_provider.dart] (Frontend): Refactored
_hasLevelPermissionso delete level strictly requires|deletepermission and updatedisSupergetter. -
b. [auth_middleware.dart] (Backend): Enforced strict delete
level validation in
_hasLevelPermissionand updatedhasPermissionbypass for employees. -
c. [staff_repository.dart] (Backend): Ensured employee auth
accounts are saved with
role: 1(Employee), reservingrole: 0exclusively for primary Vendor Owner. -
d. [pubspec.yaml]: Bumped version to
0.0.7+5.
Git Commit Tag:
ispana-v0.0.7a5 Focus: Dev Tools Cleanup
-
a. [build.ps1]: Removed unused
$CHANGELOG_DIRvariable assignment.
Git Commit Tag:
ispana-v0.0.7a4 Focus: Version Transition to v0.0.7
-
a. [pubspec.yaml]: Bumped version to
0.0.7+1to initiate the v0.0.7 development cycle. - b. [app-v0-0-7.astro]: Created standalone Astro changelog page for tracking v0.0.7 iterations.
Git Commit Tag:
ispana-v0.0.7a1