diff --git a/lib/models/new_models/department.dart b/lib/models/new_models/department.dart index a2f23206..e48585da 100644 --- a/lib/models/new_models/department.dart +++ b/lib/models/new_models/department.dart @@ -38,7 +38,7 @@ class Department extends Base { String? departmentCode; // Now nullable dynamic departmentId; // Now nullable String? ntCode; // Now nullable - List? rooms; // Now nullable + List? rooms=[]; // Now nullable Department copyWith({ num? id, // Parameters are now nullable diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart index 4ee73a94..28a46706 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_form_view.dart @@ -426,7 +426,7 @@ class _AssetInventoryFormViewState extends State { _scannedAssetModel?.photo = fileName; } showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - assetInventoryProvider.saveAssetInSession(model: _scannedAssetModel).then((success) { + assetInventoryProvider.saveAssetInSession(model: _scannedAssetModel).then((success) async{ ///Need to use push and remove until... Navigator.pop(context); if (success) { @@ -436,12 +436,14 @@ class _AssetInventoryFormViewState extends State { AllRequestsProvider allRequestsProvider = Provider.of(context, listen: false); allRequestsProvider.reset(); allRequestsProvider.getAllRequests(context, typeTransaction: 8); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (contxt) => SiteInformationPage( - sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0), - ))); + getAssetFilteredList(); + Navigator.pop(context); + // Navigator.pushReplacement( + // context, + // MaterialPageRoute( + // builder: (contxt) => SiteInformationPage( + // sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0), + // ))); } else { log('api error...'); } @@ -459,4 +461,21 @@ class _AssetInventoryFormViewState extends State { _remarksController.clear(); registeredController?.dispose(); } + + + Future getAssetFilteredList({bool loadMore = false}) async { + AssetInventoryProvider provider = Provider.of(context, listen: false); + Map payload = { + "sessionId": widget.assetInventoryModel?.sessionId, + "siteId": widget.assetInventoryModel?.site?.id, + "buildingId": widget.assetInventoryModel?.building?.id, + "floorId": widget.assetInventoryModel?.floor?.id, + "departmentId": widget.assetInventoryModel?.department?.id, + "roomId": widget.assetInventoryModel?.room?.id, + }; + await provider.getInventoryDetailsByFilter(payload: payload, loadMore: loadMore); + provider.getAssetsInSession( + sessionId: (widget.assetInventoryModel?.sessionId ?? 0).toInt(), + ); + } } diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart index 50266f40..11dcc31b 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart @@ -40,10 +40,17 @@ class SiteInformationPage extends StatefulWidget { class _SiteInformationPageState extends State { AssetInventoryModel assetInventoryModel = AssetInventoryModel(); bool showMarkAsComplete = false; + final ScrollController _scrollController = ScrollController(); @override void initState() { super.initState(); + _scrollController.addListener(() { + final provider = Provider.of(context, listen: false); + if (_scrollController.position.pixels >= _scrollController.position.maxScrollExtent && !provider.isNextPageLoading && provider.nextPage) { + getAssetFilteredList(loadMore: true); + } + }); } final GlobalKey _scaffoldKey = GlobalKey(); @@ -51,55 +58,48 @@ class _SiteInformationPageState extends State { @override Widget build(BuildContext context) { return Scaffold( - key: _scaffoldKey, - appBar: DefaultAppBar( - title: 'Inventory Session Request'.addTranslation, - titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), - body: Column( - children: [ - ListView( - padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + key: _scaffoldKey, + appBar: DefaultAppBar( + title: 'Inventory Session Request'.addTranslation, + titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + body: Column( + children: [ + ListView( + controller: _scrollController, + padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + children: [ + siteInfoCard(context, widget.sessionModel), + 12.height, + assetDetailList(), + 8.height, + ], + ).expanded, + FooterActionButton.footerContainer( + context: context, + child: Column( children: [ - siteInfoCard(context, widget.sessionModel), - 12.height, - assetDetailList(), - 8.height, - ], - ).expanded, - FooterActionButton.footerContainer( - context: context, - child: Column( - children: [ + AppFilledButton( + buttonColor: AppColor.primary10, + label: 'Add Asset'.addTranslation, + onPressed: () => _addAsset(), + // buttonColor: AppColor.primary10, + ), + if (showMarkAsComplete) ...[ + 12.height, AppFilledButton( - buttonColor: AppColor.primary10, - label: 'Add Asset'.addTranslation, - onPressed: () => _addAsset(), + buttonColor: AppColor.green70, + label: 'Mark as completed'.addTranslation, + onPressed: () => _markAsCompleted(), // buttonColor: AppColor.primary10, - ), - if (showMarkAsComplete) ...[ - 12.height, - AppFilledButton( - buttonColor: AppColor.green70, - label: 'Mark as completed'.addTranslation, - onPressed: () => _markAsCompleted(), - // buttonColor: AppColor.primary10, - ) - ] - ], - ), + ) + ] + ], ), - // FooterActionButton.footerContainer( - // context: context, - // child: AppFilledButton( - // buttonColor: AppColor.green70, - // label: 'Mark as completed'.addTranslation, - // onPressed: () => _markAsCompleted(), - // // buttonColor: AppColor.primary10, - // ), - // ), - ], - )); + ), + ], + ), + ); } void _addAsset() async { @@ -130,7 +130,6 @@ class _SiteInformationPageState extends State { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); await provider.markAsComplete(payload: payload).then((success) { Navigator.pop(context); - log('success $success'); if (success) { ///TODO need to confirm need to call this or not .. // AllRequestsProvider allRequestsProvider = Provider.of(context, listen: false); @@ -148,38 +147,32 @@ class _SiteInformationPageState extends State { return Consumer( builder: (context, provider, _) { if (provider.isLoading) { - return SizedBox(height: 300.toScreenHeight, child: const CircularProgressIndicator(color: AppColor.primary10).center); + return SizedBox( + height: 300.toScreenHeight, + child: const CircularProgressIndicator(color: AppColor.primary10).center, + ); } + final assets = provider.siteFilterAssetList; - return NotificationListener( - onNotification: (scrollInfo) { - if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) { - getAssetFilteredList(loadMore: true); - } - return false; + return ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + // Keep non-scrollable, parent handles scroll + itemCount: assets.length, + itemBuilder: (context, index) { + return AssetDetailCardView( + assetInventoryModel: assets[index], + onDeletePress: () async { + await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { + if (success) { + await getAssetFilteredList(); + await provider.getAssetsInSession(sessionId: widget.sessionModel.id ?? 0); + } + }); + }, + ); }, - child: ListView.separated( - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - return AssetDetailCardView( - assetInventoryModel: assets[index], - onDeletePress: () async { - log('Delete icon press'); - await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { - if (success) { - await getAssetFilteredList(); - await provider.getAssetsInSession( - sessionId: widget.sessionModel.id ?? 0, - ); - } - }); - }, - ); - }, - separatorBuilder: (context, index) => 12.height, - itemCount: assets.length, - ), + separatorBuilder: (context, index) => 12.height, ); }, ); @@ -253,7 +246,9 @@ class _SiteInformationPageState extends State { assetInventoryModel.room = null; showMarkAsComplete = true; setState(() {}); - getAssetFilteredList(); + if (assetInventoryModel.department != null && assetInventoryModel.department!.rooms!.isEmpty) { + getAssetFilteredList(); + } }, ), 12.height,