From d3c000004e4bebffc158aad603dc840eb6d7a956 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 9 Oct 2025 18:23:41 +0300 Subject: [PATCH] code improvements --- .../providers/api/all_requests_provider.dart | 21 +- .../pages/asset_detail_card_view.dart | 112 +++-- .../pages/asset_inventory_detail_view.dart | 4 +- .../pages/asset_inventory_form_view.dart | 475 +++++++++--------- .../pages/asset_inventory_page.dart | 95 ++-- .../asset_inventory_scan_assets_view.dart | 92 ++-- ...sset_inventory_site_information_page.dart} | 96 ++-- .../my_request/my_requests_page.dart | 4 +- .../selection_fullscreen_dialog.dart | 4 +- 9 files changed, 460 insertions(+), 443 deletions(-) rename lib/modules/asset_inventory_module/pages/{asset_inventory_site_information_view.dart => asset_inventory_site_information_page.dart} (84%) diff --git a/lib/controllers/providers/api/all_requests_provider.dart b/lib/controllers/providers/api/all_requests_provider.dart index f95ef38d..b1af1d28 100644 --- a/lib/controllers/providers/api/all_requests_provider.dart +++ b/lib/controllers/providers/api/all_requests_provider.dart @@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart'; import 'package:http/http.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/all_requests_and_count_model.dart'; import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/ppm/recurrent_wo.dart'; @@ -130,6 +131,24 @@ class AllRequestsProvider extends ChangeNotifier { SearchAllRequestsModel? searchedModel; + List getStatues(BuildContext context) { + List list = [1, 2, 3, 4]; + + if (context.userProvider.user!.type != UsersTypes.normal_user) { + list.add(5); + } + list.add(6); // task module + + if (context.settingProvider.isUserFlowMedical && context.userProvider.user!.type != UsersTypes.normal_user) { + list.add(7); // task mod + } + if (context.userProvider.user!.type != UsersTypes.normal_user) { + list.add(8); // + } + + return list; + } + Future getAllRequests(BuildContext context, {int? typeTransaction, SearchAllRequestsModel? search}) async { if (isAllLoading == true) return -2; isAllLoading = true; @@ -143,7 +162,7 @@ class AllRequestsProvider extends ChangeNotifier { } final type = typeTransaction == null ? search?.typeTransaction == null || (search?.typeTransaction?.isEmpty ?? false) - ? [1, 2, 3, 4, 5, 6,7,8] + ? getStatues(context) : search!.typeTransaction : [typeTransaction]; List status = (search?.statuses == null || (search?.statuses?.isEmpty ?? false)) ? (((search?.isArchived ?? false) ? [3] : [1, 2, 4])) : search!.statuses!; diff --git a/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart b/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart index 29769f79..889451de 100644 --- a/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_detail_card_view.dart @@ -23,71 +23,73 @@ class AssetDetailCardView extends StatelessWidget { @override Widget build(BuildContext context) { - return Row( - crossAxisAlignment: CrossAxisAlignment.start, + return Column( children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, + Row( children: [ Text( context.translation.assetInformation, style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), - // 8.height, - Text( - '${context.translation.assetNumber}: ${assetInventoryModel.assetNumber ?? '-'}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.serialNo}: ${assetInventoryModel.serialNo ?? '-'}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.manufacture}: ${assetInventoryModel.manufacturer ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.model}: ${assetInventoryModel.model ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.site}: ${assetInventoryModel.siteName ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.building}: ${assetInventoryModel.buildingName ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.floor}: ${assetInventoryModel.floorName ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.department}: ${assetInventoryModel.departmentName ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${context.translation.supplier}: ${assetInventoryModel.supplierName ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - Text( - '${'Remarks'.addTranslation}: ${assetInventoryModel.remarks ?? ''}', - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), - ), - ], - ).expanded, - Column( - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisAlignment: MainAxisAlignment.start, - children: [ + ).expanded, 'delete_icon'.toSvgAsset().onPress(() { onDeletePress(); }), - 20.height, + ], + ), + 8.height, + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${context.translation.assetNumber}: ${assetInventoryModel.assetNumber ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.serialNo}: ${assetInventoryModel.serialNo ?? '-'}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.manufacture}: ${assetInventoryModel.manufacturer ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.model}: ${assetInventoryModel.model ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.site}: ${assetInventoryModel.siteName ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.building}: ${assetInventoryModel.buildingName ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.floor}: ${assetInventoryModel.floorName ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.department}: ${assetInventoryModel.departmentName ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.supplier}: ${assetInventoryModel.supplierName ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${'Remarks'.addTranslation}: ${assetInventoryModel.remarks ?? ''}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + ], + ).expanded, Container( decoration: BoxDecoration(color: AppColor.neutral100, borderRadius: BorderRadius.circular(15)), height: 115.toScreenHeight, width: 115.toScreenWidth, + margin: const EdgeInsets.only(top: 8), child: assetInventoryModel.photo != null && assetInventoryModel.photo!.isNotEmpty ? ClipRRect( borderRadius: BorderRadius.circular(8), @@ -100,8 +102,8 @@ class AssetDetailCardView extends StatelessWidget { : 'image_placeholder'.toSvgAsset().center, ) ], - ) + ), ], - ).toShadowContainer(context); + ).toShadowContainer(context, borderRadius: 20, padding: 12); } } diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart index f7cacee2..cb157b57 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart @@ -87,7 +87,7 @@ class _AssetInventoryDetailViewState extends State { style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), ), ], - ).paddingOnly(start: 16, end: 16, top: 16, bottom: 8).toShadowContainer(context, padding: 0); + ).toShadowContainer(context, padding: 12, borderRadius: 20); } Widget siteListCard(BuildContext context, SessionModel sessionModel) { @@ -155,6 +155,6 @@ class _AssetInventoryDetailViewState extends State { separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), ), ], - ).toShadowContainer(context, padding: 12); + ).toShadowContainer(context, padding: 12, borderRadius: 20); } } 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 2440bbf6..4ee73a94 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 @@ -29,7 +29,7 @@ import 'package:test_sa/views/widgets/images/multi_image_picker_item.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; import '../../../new_views/common_widgets/app_filled_button.dart'; import '../../../new_views/common_widgets/default_app_bar.dart'; -import 'asset_inventory_site_information_view.dart'; +import 'asset_inventory_site_information_page.dart'; class AssetInventoryFormView extends StatefulWidget { static const String id = "/asset-inventory-form"; @@ -92,254 +92,255 @@ class _AssetInventoryFormViewState extends State { child: Column( children: [ SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + padding: const EdgeInsets.all(16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - 'Not Registered'.addTranslation.heading5(context), - AdvancedSwitch( - controller: registeredController, - activeColor: AppColor.green50.withOpacity(0.5), - inactiveColor: AppColor.neutral10, - thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20), - borderRadius: const BorderRadius.all(Radius.circular(30)), - width: 42.toScreenWidth, - height: 24.toScreenHeight, - onChanged: (value) { - isRegistered = value; - resetData(); - setState(() {}); - }, - disabledOpacity: 1, - ), - ], - ), - 16.height, - ], - - if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[ - AssetPicker( - showLoading: false, - labelColor: AppColor.white936, - iconColor: AppColor.neutral120, - label: 'Scan Asset'.addTranslation, - borderColor: AppColor.white936, - buttonColor: Colors.white, - enablePickManually: false, - showAssetInfo: false, - showBorder: true, - onPick: (asset) async { - resetData(); - setState(() {}); - if (asset.assetNumber != null) { - searchAsset(assetNo: asset.assetNumber!); - } - }), - 12.height, - AppTextFormField( - labelText: context.translation.assetNo, - backgroundColor: AppColor.fieldBgColor(context), - textAlign: TextAlign.center, - controller: _assetNoController, - showShadow: false, - enable: false, - labelStyle: AppTextStyles.textFieldLabelStyle, - style: Theme.of(context).textTheme.titleMedium, - ), - 12.height, - ], + if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + 'Not Registered'.addTranslation.heading5(context), + AdvancedSwitch( + controller: registeredController, + activeColor: AppColor.green50.withOpacity(0.5), + inactiveColor: AppColor.neutral10, + thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20), + borderRadius: const BorderRadius.all(Radius.circular(30)), + width: 42.toScreenWidth, + height: 24.toScreenHeight, + onChanged: (value) { + isRegistered = value; + resetData(); + setState(() {}); + }, + disabledOpacity: 1, + ), + ], + ), + 12.height, + ], - if (((!isRegistered && widget.sessionTypeValue == 2))) - AppFilledButton( - label: 'Search Asset'.addTranslation, - onPressed: () async { - resetData(isScanned: false); - setState(() {}); - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => SearchAssetView( - sessionId: widget.assetInventoryModel?.sessionId ?? 0, - ))).then((value) { - if (value != null) { - _pickedAssetModel = value; - // _pickedAssetModel?.assetNumber = _scannedAssetModel?.assetNumber; - // _pickedAssetModel?.assetId = _scannedAssetModel?.assetId; - // _pickedAssetModel?.status = _scannedAssetModel?.status; + if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[ + AssetPicker( + showLoading: false, + labelColor: AppColor.white936, + iconColor: AppColor.neutral120, + label: 'Scan Asset'.addTranslation, + borderColor: AppColor.white936, + buttonColor: Colors.white, + enablePickManually: false, + showAssetInfo: false, + showBorder: true, + onPick: (asset) async { + resetData(); + setState(() {}); + if (asset.assetNumber != null) { + searchAsset(assetNo: asset.assetNumber!); + } + }), + 12.height, + AppTextFormField( + labelText: context.translation.assetNo, + backgroundColor: AppColor.fieldBgColor(context), + textAlign: TextAlign.center, + controller: _assetNoController, + showShadow: false, + enable: false, + labelStyle: AppTextStyles.textFieldLabelStyle, + style: Theme.of(context).textTheme.titleMedium, + ), + 12.height, + ], - _scannedAssetModel = _scannedAssetModel?.mergeWith(_pickedAssetModel) ?? _pickedAssetModel; + if (((!isRegistered && widget.sessionTypeValue == 2))) ...[ + AppFilledButton( + label: 'Search Asset'.addTranslation, + onPressed: () async { + resetData(isScanned: false); + setState(() {}); + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SearchAssetView( + sessionId: widget.assetInventoryModel?.sessionId ?? 0, + ))).then((value) { + if (value != null) { + _pickedAssetModel = value; + // _pickedAssetModel?.assetNumber = _scannedAssetModel?.assetNumber; + // _pickedAssetModel?.assetId = _scannedAssetModel?.assetId; + // _pickedAssetModel?.status = _scannedAssetModel?.status; - populateFormValues(); - setState(() {}); - } + _scannedAssetModel = _scannedAssetModel?.mergeWith(_pickedAssetModel) ?? _pickedAssetModel; - ///Need to assign the values - }); - }, - ).paddingOnly(bottom: 12), + populateFormValues(); + setState(() {}); + } - AppTextFormField( - labelText: context.translation.serialNo, - backgroundColor: AppColor.fieldBgColor(context), - controller: _serialNoController, - textAlign: TextAlign.center, - showShadow: false, - labelStyle: AppTextStyles.textFieldLabelStyle, - onChange: (value) { - if (value != _scannedAssetModel?.serialNo) { - _scannedAssetModel?.newSerialNo = value; - // setState(() {}); - } - }, - style: Theme.of(context).textTheme.titleMedium, - ), - 12.height, - LookUpAutoCompleteField( - clearAfterPick: false, - forAssetName: true, - onChanged: (value) { - _scannedAssetModel?.newAssetNameId = null; - _scannedAssetModel?.newAssetNameText = value; - }, - initialValue: _scannedAssetModel?.assetName ?? "", - label: 'Asset Name'.addTranslation, - onPick: (value) { - _scannedAssetModel?.newAssetNameText = null; - _scannedAssetModel?.assetName = value.name; - _scannedAssetModel?.newAssetNameId = value.id; - setState(() {}); - }, - ), - 12.height, - //Asset Name.. - LookUpAutoCompleteField( - clearAfterPick: false, - isManufacturer: true, - initialValue: _scannedAssetModel?.manufacturer ?? "", - label: 'Manufacturer'.addTranslation, - onChanged: (value) { - _scannedAssetModel?.newManufacturerId = null; - _scannedAssetModel?.newManufacturerName = value; - }, - onPick: (value) { - _scannedAssetModel?.newManufacturerName = null; - _scannedAssetModel?.manufacturer = value.name; - _scannedAssetModel?.newManufacturerId = value.id; + ///Need to assign the values + }); + }, + ), + 12.height, + ], + AppTextFormField( + labelText: context.translation.serialNo, + backgroundColor: AppColor.fieldBgColor(context), + controller: _serialNoController, + textAlign: TextAlign.center, + showShadow: false, + labelStyle: AppTextStyles.textFieldLabelStyle, + onChange: (value) { + if (value != _scannedAssetModel?.serialNo) { + _scannedAssetModel?.newSerialNo = value; + // setState(() {}); + } + }, + style: Theme.of(context).textTheme.titleMedium, + ), + 12.height, + LookUpAutoCompleteField( + clearAfterPick: false, + forAssetName: true, + onChanged: (value) { + _scannedAssetModel?.newAssetNameId = null; + _scannedAssetModel?.newAssetNameText = value; + }, + initialValue: _scannedAssetModel?.assetName ?? "", + label: 'Asset Name'.addTranslation, + onPick: (value) { + _scannedAssetModel?.newAssetNameText = null; + _scannedAssetModel?.assetName = value.name; + _scannedAssetModel?.newAssetNameId = value.id; + setState(() {}); + }, + ), + 12.height, + //Asset Name.. + LookUpAutoCompleteField( + clearAfterPick: false, + isManufacturer: true, + initialValue: _scannedAssetModel?.manufacturer ?? "", + label: 'Manufacturer'.addTranslation, + onChanged: (value) { + _scannedAssetModel?.newManufacturerId = null; + _scannedAssetModel?.newManufacturerName = value; + }, + onPick: (value) { + _scannedAssetModel?.newManufacturerName = null; + _scannedAssetModel?.manufacturer = value.name; + _scannedAssetModel?.newManufacturerId = value.id; - setState(() {}); - }, - ), - 12.height, - LookUpAutoCompleteField( - clearAfterPick: false, - isManufacturer: false, - initialValue: _scannedAssetModel?.model ?? "", - label: 'Model'.addTranslation, - onChanged: (value) { - _scannedAssetModel?.newModelId = null; - _scannedAssetModel?.newModelName = value; - }, - onPick: (value) { - _scannedAssetModel?.newModelName = null; - _scannedAssetModel?.model = value.name; - _scannedAssetModel?.newModelId = value.id; - setState(() {}); - }, - ), + setState(() {}); + }, + ), + 12.height, + LookUpAutoCompleteField( + clearAfterPick: false, + isManufacturer: false, + initialValue: _scannedAssetModel?.model ?? "", + label: 'Model'.addTranslation, + onChanged: (value) { + _scannedAssetModel?.newModelId = null; + _scannedAssetModel?.newModelName = value; + }, + onPick: (value) { + _scannedAssetModel?.newModelName = null; + _scannedAssetModel?.model = value.name; + _scannedAssetModel?.newModelId = value.id; + setState(() {}); + }, + ), - 12.height, + 12.height, - LookUpAutoCompleteField( - clearAfterPick: false, - forSupplier: true, - initialValue: _scannedAssetModel?.supplierName ?? "", - label: context.translation.supplier, - onChanged: (value) { - _scannedAssetModel?.newSupplierId = null; - _scannedAssetModel?.newSupplierName = value; - }, - onPick: (value) { - _scannedAssetModel?.newSupplierName = null; - _scannedAssetModel?.supplierName = value.name; - _scannedAssetModel?.newSupplierId = value.id; - setState(() {}); - }, - ), - // SingleItemDropDownMenu( - // context: context, - // title: context.translation.supplier, - // backgroundColor: AppColor.fieldBgColor(context), - // initialValue: _scannedAssetModel?.supplier, - // showAsBottomSheet: true, - // showShadow: false, - // showCancel: true, - // onSelect: (supplier) { - // _scannedAssetModel?.supplier = supplier; - // _scannedAssetModel?.newSupplierId = supplier?.id; - // _scannedAssetModel?.newSupplierName = supplier?.name; - // setState(() {}); - // }, - // ), - 12.height, - siteInfoContainer(label: context.translation.site, value: _scannedAssetModel?.siteName ?? '-'), - 12.height, - siteInfoContainer(label: context.translation.building, value: _scannedAssetModel?.buildingName ?? '-'), - 12.height, - siteInfoContainer(label: context.translation.floor, value: _scannedAssetModel?.floorName ?? '-'), - 12.height, - siteInfoContainer(label: context.translation.department, value: _scannedAssetModel?.departmentName ?? '-'), - 12.height, - siteInfoContainer(label: context.translation.room, value: _scannedAssetModel?.roomName ?? '-'), - 12.height, - if (_scannedAssetModel?.status != null && _scannedAssetModel!.status!.isNotEmpty) classificationWidget(label: _scannedAssetModel?.status), - 12.height, - Text( - 'Asset Photo'.addTranslation, - style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.white936), - ), - 12.height, - attachments.isEmpty - ? AttachmentPicker( - label: context.translation.attachImage, - attachment: attachments, - buttonColor: AppColor.black10, - onlyImages: true, - onChange: (value) { + LookUpAutoCompleteField( + clearAfterPick: false, + forSupplier: true, + initialValue: _scannedAssetModel?.supplierName ?? "", + label: context.translation.supplier, + onChanged: (value) { + _scannedAssetModel?.newSupplierId = null; + _scannedAssetModel?.newSupplierName = value; + }, + onPick: (value) { + _scannedAssetModel?.newSupplierName = null; + _scannedAssetModel?.supplierName = value.name; + _scannedAssetModel?.newSupplierId = value.id; setState(() {}); }, - buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), - ) - : MultiFilesPickerItem( - file: File(attachments.first.name ?? ''), - enabled: true, - onRemoveTap: (file) { - setState(() { - attachments.clear(); - }); + ), + // SingleItemDropDownMenu( + // context: context, + // title: context.translation.supplier, + // backgroundColor: AppColor.fieldBgColor(context), + // initialValue: _scannedAssetModel?.supplier, + // showAsBottomSheet: true, + // showShadow: false, + // showCancel: true, + // onSelect: (supplier) { + // _scannedAssetModel?.supplier = supplier; + // _scannedAssetModel?.newSupplierId = supplier?.id; + // _scannedAssetModel?.newSupplierName = supplier?.name; + // setState(() {}); + // }, + // ), + 12.height, + siteInfoContainer(label: context.translation.site, value: _scannedAssetModel?.siteName ?? '-'), + 12.height, + siteInfoContainer(label: context.translation.building, value: _scannedAssetModel?.buildingName ?? '-'), + 12.height, + siteInfoContainer(label: context.translation.floor, value: _scannedAssetModel?.floorName ?? '-'), + 12.height, + siteInfoContainer(label: context.translation.department, value: _scannedAssetModel?.departmentName ?? '-'), + 12.height, + siteInfoContainer(label: context.translation.room, value: _scannedAssetModel?.roomName ?? '-'), + 12.height, + if (_scannedAssetModel?.status != null && _scannedAssetModel!.status!.isNotEmpty) classificationWidget(label: _scannedAssetModel?.status), + 12.height, + Text( + 'Asset Photo'.addTranslation, + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.white936), + ), + 12.height, + attachments.isEmpty + ? AttachmentPicker( + label: context.translation.attachImage, + attachment: attachments, + buttonColor: AppColor.black10, + onlyImages: true, + onChange: (value) { + setState(() {}); + }, + buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), + ) + : MultiFilesPickerItem( + file: File(attachments.first.name ?? ''), + enabled: true, + onRemoveTap: (file) { + setState(() { + attachments.clear(); + }); + }, + ), + 12.height, + AppTextFormField( + backgroundColor: AppColor.fieldBgColor(context), + labelText: 'Remarks'.addTranslation, + labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), + alignLabelWithHint: true, + textInputType: TextInputType.multiline, + showShadow: false, + controller: _remarksController, + onSaved: (text) { + _scannedAssetModel?.remarks = text; + setState(() {}); }, ), - 12.height, - AppTextFormField( - backgroundColor: AppColor.fieldBgColor(context), - labelText: 'Remarks'.addTranslation, - labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), - alignLabelWithHint: true, - textInputType: TextInputType.multiline, - showShadow: false, - controller: _remarksController, - onSaved: (text) { - _scannedAssetModel?.remarks = text; - setState(() {}); - }, - ), - // 100.height, - ], - ).toShadowContainer(context).paddingOnly(top: 20, start: 16, end: 16), - ).expanded, - 10.height, + // 100.height, + ], + ).toShadowContainer(context, borderRadius: 20, padding: 12)) + .expanded, FooterActionButton.footerContainer( context: context, child: AppFilledButton(buttonColor: AppColor.primary10, label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit), @@ -438,7 +439,7 @@ class _AssetInventoryFormViewState extends State { Navigator.pushReplacement( context, MaterialPageRoute( - builder: (contxt) => SiteInformationView( + builder: (contxt) => SiteInformationPage( sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0), ))); } else { diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart index 284a9d0f..88e21b07 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_page.dart @@ -10,7 +10,7 @@ import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/modules/asset_inventory_module/models/session_model.dart'; import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_detail_view.dart'; import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart'; -import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_site_information_view.dart'; +import 'package:test_sa/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart'; import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; @@ -66,62 +66,57 @@ class _AssetInventoryPageState extends State { body: Consumer(builder: (context, provider, child) { return DefaultTabController( length: 2, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight), - decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)), - child: TabBar( - padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), - labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, - unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, - unselectedLabelStyle: AppTextStyles.bodyText, - labelStyle: AppTextStyles.bodyText, - indicatorPadding: EdgeInsets.zero, - indicatorSize: TabBarIndicatorSize.tab, - dividerColor: Colors.transparent, - indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)), - onTap: (index) {}, - tabs: [ - Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight), - Tab( - text: - '${'Scan Assets'.addTranslation} ${provider.assetInventoryResponse?.totalRows != null && provider.assetInventoryResponse!.totalRows! > 0 ? '(${provider.assetInventoryResponse?.totalRows})' : ''}', - height: 57.toScreenHeight), + child: provider.isLoading + ? const CircularProgressIndicator(color: AppColor.primary10).center + : Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight), + decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)), + child: TabBar( + padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), + labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, + unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, + unselectedLabelStyle: AppTextStyles.bodyText, + labelStyle: AppTextStyles.bodyText, + indicatorPadding: EdgeInsets.zero, + indicatorSize: TabBarIndicatorSize.tab, + dividerColor: Colors.transparent, + indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)), + onTap: (index) {}, + tabs: [ + Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight), + Tab( + text: + '${'Scan Assets'.addTranslation} ${provider.assetInventoryResponse?.totalRows != null && provider.assetInventoryResponse!.totalRows! > 0 ? '(${provider.assetInventoryResponse?.totalRows})' : ''}', + height: 57.toScreenHeight), + ], + ), + ), + TabBarView( + children: [ + AssetInventoryDetailView(sessionModel: provider.sessionModel ?? SessionModel()), + AssetInventoryScanAssetView(sessionId: provider.sessionModel?.id ?? 0), + ], + ).expanded, + FooterActionButton.footerContainer( + context: context, + child: AppFilledButton( + buttonColor: AppColor.primary10, + label: 'Scan Assets'.addTranslation, + onPressed: () => _scanAsset(provider: provider), + // buttonColor: AppColor.primary10, + ), + ) ], ), - ), - 12.height, - TabBarView( - children: [ - provider.isLoading - ? const CircularProgressIndicator(color: AppColor.primary10).center - : AssetInventoryDetailView( - sessionModel: provider.sessionModel ?? SessionModel(), - ), - AssetInventoryScanAssetView( - sessionId: provider.sessionModel?.id ?? 0, - ), - ], - ).expanded, - FooterActionButton.footerContainer( - context: context, - child: AppFilledButton( - buttonColor: AppColor.primary10, - label: 'Scan Assets'.addTranslation, - onPressed: () => _scanAsset(provider: provider), - // buttonColor: AppColor.primary10, - ), - ).toShadowContainer(context, padding: 0, showShadow: false, borderRadius: 0), - ], - ), ); })); } Future _scanAsset({required AssetInventoryProvider provider}) async { provider.siteFilterAssetList.clear(); - Navigator.push(context, MaterialPageRoute(builder: (contxt) => SiteInformationView(sessionModel: provider.sessionModel ?? SessionModel()))); + Navigator.push(context, MaterialPageRoute(builder: (contxt) => SiteInformationPage(sessionModel: provider.sessionModel ?? SessionModel()))); } } diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart index c7f5050b..4bf38915 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_scan_assets_view.dart @@ -48,9 +48,7 @@ class _AssetInventoryScanAssetViewState extends State( onNotification: (scrollInfo) { - if (!provider.isNextPageLoading && - provider.nextPage && - scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) { + if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) { getAssetList(loadMore: true); } return false; @@ -84,48 +82,48 @@ class _AssetInventoryScanAssetViewState extends State( - // builder: (context, provider, _) { - // if (provider.isLoading && provider.assetInventoryResponse == null) { - // //TODO need use existing loader if found.. - // return const Center(child: CircularProgressIndicator()); - // } - // final assets = provider.assetInventoryResponse?.assetList ?? []; - // if (assets.isEmpty) { - // return const Center(child: NoDataFound()); - // } - // return LazyLoading( - // nextPage: provider.nextPage, - // onLazyLoad: () async { - // log('Loading next page...'); - // await getAssetList(loadMore: true); - // }, - // child: ListView.separated( - // padding: const EdgeInsets.all(16), - // itemBuilder: (context, index) { - // if (index == assets.length) { - // // bottom loader - // return const Padding( - // padding: EdgeInsets.symmetric(vertical: 16), - // child: Center(child: CircularProgressIndicator()), - // ); - // } - // return AssetDetailCardView( - // assetInventoryModel: assets[index], - // onDeletePress: () async { - // await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { - // if (success) { - // await provider.getAssetsInSession(sessionId: widget.sessionId); - // } - // }); - // }, - // ); - // }, - // separatorBuilder: (context, index) => 12.height, - // itemCount: assets.length + (provider.nextPage ? 1 : 0), - // ), - // ); - // }, - // ); - // } +// return Consumer( +// builder: (context, provider, _) { +// if (provider.isLoading && provider.assetInventoryResponse == null) { +// //TODO need use existing loader if found.. +// return const Center(child: CircularProgressIndicator()); +// } +// final assets = provider.assetInventoryResponse?.assetList ?? []; +// if (assets.isEmpty) { +// return const Center(child: NoDataFound()); +// } +// return LazyLoading( +// nextPage: provider.nextPage, +// onLazyLoad: () async { +// log('Loading next page...'); +// await getAssetList(loadMore: true); +// }, +// child: ListView.separated( +// padding: const EdgeInsets.all(16), +// itemBuilder: (context, index) { +// if (index == assets.length) { +// // bottom loader +// return const Padding( +// padding: EdgeInsets.symmetric(vertical: 16), +// child: Center(child: CircularProgressIndicator()), +// ); +// } +// return AssetDetailCardView( +// assetInventoryModel: assets[index], +// onDeletePress: () async { +// await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { +// if (success) { +// await provider.getAssetsInSession(sessionId: widget.sessionId); +// } +// }); +// }, +// ); +// }, +// separatorBuilder: (context, index) => 12.height, +// itemCount: assets.length + (provider.nextPage ? 1 : 0), +// ), +// ); +// }, +// ); +// } } diff --git a/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_view.dart b/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart similarity index 84% rename from lib/modules/asset_inventory_module/pages/asset_inventory_site_information_view.dart rename to lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart index 6374fb56..50266f40 100644 --- a/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_view.dart +++ b/lib/modules/asset_inventory_module/pages/asset_inventory_site_information_page.dart @@ -28,16 +28,16 @@ import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; -class SiteInformationView extends StatefulWidget { +class SiteInformationPage extends StatefulWidget { SessionModel sessionModel; - SiteInformationView({Key? key, required this.sessionModel}) : super(key: key); + SiteInformationPage({Key? key, required this.sessionModel}) : super(key: key); @override - State createState() => _SiteInformationViewState(); + State createState() => _SiteInformationPageState(); } -class _SiteInformationViewState extends State { +class _SiteInformationPageState extends State { AssetInventoryModel assetInventoryModel = AssetInventoryModel(); bool showMarkAsComplete = false; @@ -56,45 +56,49 @@ class _SiteInformationViewState extends State { title: 'Inventory Session Request'.addTranslation, titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), - body: SafeArea( - child: Column( - children: [ - ListView( - padding: const EdgeInsets.only(left: 16, right: 16, top: 16), + body: Column( + children: [ + ListView( + 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, + AppFilledButton( + buttonColor: AppColor.primary10, + label: 'Add Asset'.addTranslation, + onPressed: () => _addAsset(), + // buttonColor: AppColor.primary10, + ), + if (showMarkAsComplete) ...[ + 12.height, + AppFilledButton( + buttonColor: AppColor.green70, + label: 'Mark as completed'.addTranslation, + onPressed: () => _markAsCompleted(), + // buttonColor: AppColor.primary10, + ) + ] ], - ).expanded, - FooterActionButton.footerContainer( - context: context, - child: AppFilledButton( - buttonColor: AppColor.primary10, - label: 'Add Asset'.addTranslation, - onPressed: () => _addAsset(), - // buttonColor: AppColor.primary10, - ), ), - if (showMarkAsComplete) - AppFilledButton( - buttonColor: AppColor.green70, - label: 'Mark as completed'.addTranslation, - onPressed: () => _markAsCompleted(), - // buttonColor: AppColor.primary10, - ).paddingOnly(start: 16, end: 16), - // FooterActionButton.footerContainer( - // context: context, - // child: 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, + // ), + // ), + ], )); } @@ -185,7 +189,6 @@ class _SiteInformationViewState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - 12.height, SingleItemDropDownMenu( context: context, title: context.translation.site, @@ -202,7 +205,7 @@ class _SiteInformationViewState extends State { setState(() {}); }, ), - 8.height, + 12.height, SingleItemDropDownMenu( context: context, title: context.translation.building, @@ -219,7 +222,7 @@ class _SiteInformationViewState extends State { setState(() {}); }, ), - 8.height, + 12.height, SingleItemDropDownMenu( context: context, title: context.translation.floor, @@ -235,7 +238,7 @@ class _SiteInformationViewState extends State { setState(() {}); }, ), - 8.height, + 12.height, SingleItemDropDownMenu( context: context, title: context.translation.department, @@ -253,7 +256,7 @@ class _SiteInformationViewState extends State { getAssetFilteredList(); }, ), - 8.height, + 12.height, SingleItemDropDownMenu( context: context, title: context.translation.room, @@ -271,9 +274,8 @@ class _SiteInformationViewState extends State { } }, ), - 8.height, ], - ).toShadowContainer(context); + ).toShadowContainer(context, borderRadius: 20, padding: 12); } Future validateRequest() async { diff --git a/lib/new_views/pages/land_page/my_request/my_requests_page.dart b/lib/new_views/pages/land_page/my_request/my_requests_page.dart index d7fb13c4..821567ac 100644 --- a/lib/new_views/pages/land_page/my_request/my_requests_page.dart +++ b/lib/new_views/pages/land_page/my_request/my_requests_page.dart @@ -52,7 +52,9 @@ class _MyRequestsPageState extends State { if (context.settingProvider.isUserFlowMedical) { requestsList.add(Request(7, 'Recall and Alert')); } - requestsList.add(Request(8, 'Inventory Session'.addTranslation)); + if (Provider.of(context, listen: false).user!.type != UsersTypes.normal_user) { + requestsList.add(Request(8, 'Inventory Session'.addTranslation)); + } _provider = Provider.of(context, listen: false); _provider!.reset(); WidgetsBinding.instance.addPostFrameCallback((_) { diff --git a/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart index ce08754f..b7227dda 100644 --- a/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart +++ b/lib/views/widgets/fullscreen_dialogs/selection_fullscreen_dialog.dart @@ -87,9 +87,7 @@ class _SelectionBottomSheetState extends State(0), - backgroundColor: WidgetStateProperty.all( - AppColor.fieldBgColor(context), // Your custom background color - ), + backgroundColor: WidgetStateProperty.all(context.isDark ? AppColor.neutral120 : null), leading: Icon(Icons.search, color: AppColor.iconColor(context)), textStyle: WidgetStateProperty.all( TextStyle(color: AppColor.textColor(context), fontSize: 16.0),