code improvements

design_3.0_asset_inventory_module
Sikander Saleem 3 weeks ago
parent 8578319cc3
commit d3c000004e

@ -4,6 +4,7 @@ import 'package:flutter/widgets.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.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/all_requests_and_count_model.dart';
import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/enums/user_types.dart';
import 'package:test_sa/models/ppm/recurrent_wo.dart'; import 'package:test_sa/models/ppm/recurrent_wo.dart';
@ -130,6 +131,24 @@ class AllRequestsProvider extends ChangeNotifier {
SearchAllRequestsModel? searchedModel; SearchAllRequestsModel? searchedModel;
List<int> getStatues(BuildContext context) {
List<int> 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<int> getAllRequests(BuildContext context, {int? typeTransaction, SearchAllRequestsModel? search}) async { Future<int> getAllRequests(BuildContext context, {int? typeTransaction, SearchAllRequestsModel? search}) async {
if (isAllLoading == true) return -2; if (isAllLoading == true) return -2;
isAllLoading = true; isAllLoading = true;
@ -143,7 +162,7 @@ class AllRequestsProvider extends ChangeNotifier {
} }
final type = typeTransaction == null final type = typeTransaction == null
? search?.typeTransaction == null || (search?.typeTransaction?.isEmpty ?? false) ? search?.typeTransaction == null || (search?.typeTransaction?.isEmpty ?? false)
? [1, 2, 3, 4, 5, 6,7,8] ? getStatues(context)
: search!.typeTransaction : search!.typeTransaction
: [typeTransaction]; : [typeTransaction];
List<int> status = (search?.statuses == null || (search?.statuses?.isEmpty ?? false)) ? (((search?.isArchived ?? false) ? [3] : [1, 2, 4])) : search!.statuses!; List<int> status = (search?.statuses == null || (search?.statuses?.isEmpty ?? false)) ? (((search?.isArchived ?? false) ? [3] : [1, 2, 4])) : search!.statuses!;

@ -23,71 +23,73 @@ class AssetDetailCardView extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Row( return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Column( Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Text( Text(
context.translation.assetInformation, context.translation.assetInformation,
style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ).expanded,
// 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: [
'delete_icon'.toSvgAsset().onPress(() { 'delete_icon'.toSvgAsset().onPress(() {
onDeletePress(); 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( Container(
decoration: BoxDecoration(color: AppColor.neutral100, borderRadius: BorderRadius.circular(15)), decoration: BoxDecoration(color: AppColor.neutral100, borderRadius: BorderRadius.circular(15)),
height: 115.toScreenHeight, height: 115.toScreenHeight,
width: 115.toScreenWidth, width: 115.toScreenWidth,
margin: const EdgeInsets.only(top: 8),
child: assetInventoryModel.photo != null && assetInventoryModel.photo!.isNotEmpty child: assetInventoryModel.photo != null && assetInventoryModel.photo!.isNotEmpty
? ClipRRect( ? ClipRRect(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
@ -100,8 +102,8 @@ class AssetDetailCardView extends StatelessWidget {
: 'image_placeholder'.toSvgAsset().center, : 'image_placeholder'.toSvgAsset().center,
) )
], ],
) ),
], ],
).toShadowContainer(context); ).toShadowContainer(context, borderRadius: 20, padding: 12);
} }
} }

@ -87,7 +87,7 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), 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) { Widget siteListCard(BuildContext context, SessionModel sessionModel) {
@ -155,6 +155,6 @@ class _AssetInventoryDetailViewState extends State<AssetInventoryDetailView> {
separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), separatorBuilder: (cxt, index) => const Divider().defaultStyle(context),
), ),
], ],
).toShadowContainer(context, padding: 12); ).toShadowContainer(context, padding: 12, borderRadius: 20);
} }
} }

@ -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 'package:test_sa/views/widgets/requests/request_status.dart';
import '../../../new_views/common_widgets/app_filled_button.dart'; import '../../../new_views/common_widgets/app_filled_button.dart';
import '../../../new_views/common_widgets/default_app_bar.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 { class AssetInventoryFormView extends StatefulWidget {
static const String id = "/asset-inventory-form"; static const String id = "/asset-inventory-form";
@ -92,254 +92,255 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
child: Column( child: Column(
children: [ children: [
SingleChildScrollView( SingleChildScrollView(
child: Column( padding: const EdgeInsets.all(16),
crossAxisAlignment: CrossAxisAlignment.start, child: Column(
children: [ crossAxisAlignment: CrossAxisAlignment.start,
if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
'Not Registered'.addTranslation.heading5(context), if (widget.sessionTypeValue == 1 || widget.sessionTypeValue == 2) ...[
AdvancedSwitch( Row(
controller: registeredController, mainAxisAlignment: MainAxisAlignment.spaceBetween,
activeColor: AppColor.green50.withOpacity(0.5), children: [
inactiveColor: AppColor.neutral10, 'Not Registered'.addTranslation.heading5(context),
thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20), AdvancedSwitch(
borderRadius: const BorderRadius.all(Radius.circular(30)), controller: registeredController,
width: 42.toScreenWidth, activeColor: AppColor.green50.withOpacity(0.5),
height: 24.toScreenHeight, inactiveColor: AppColor.neutral10,
onChanged: (value) { thumb: CircleAvatar(backgroundColor: isRegistered == true ? AppColor.green50 : AppColor.neutral20),
isRegistered = value; borderRadius: const BorderRadius.all(Radius.circular(30)),
resetData(); width: 42.toScreenWidth,
setState(() {}); height: 24.toScreenHeight,
}, onChanged: (value) {
disabledOpacity: 1, isRegistered = value;
), resetData();
], setState(() {});
), },
16.height, disabledOpacity: 1,
], ),
],
if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[ ),
AssetPicker( 12.height,
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 (((!isRegistered && widget.sessionTypeValue == 2))) if ((!isRegistered && widget.sessionTypeValue == 1) || (widget.sessionTypeValue == 3) || (!isRegistered && widget.sessionTypeValue == 2)) ...[
AppFilledButton( AssetPicker(
label: 'Search Asset'.addTranslation, showLoading: false,
onPressed: () async { labelColor: AppColor.white936,
resetData(isScanned: false); iconColor: AppColor.neutral120,
setState(() {}); label: 'Scan Asset'.addTranslation,
await Navigator.push( borderColor: AppColor.white936,
context, buttonColor: Colors.white,
MaterialPageRoute( enablePickManually: false,
builder: (context) => SearchAssetView( showAssetInfo: false,
sessionId: widget.assetInventoryModel?.sessionId ?? 0, showBorder: true,
))).then((value) { onPick: (asset) async {
if (value != null) { resetData();
_pickedAssetModel = value; setState(() {});
// _pickedAssetModel?.assetNumber = _scannedAssetModel?.assetNumber; if (asset.assetNumber != null) {
// _pickedAssetModel?.assetId = _scannedAssetModel?.assetId; searchAsset(assetNo: asset.assetNumber!);
// _pickedAssetModel?.status = _scannedAssetModel?.status; }
}),
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(); _scannedAssetModel = _scannedAssetModel?.mergeWith(_pickedAssetModel) ?? _pickedAssetModel;
setState(() {});
}
///Need to assign the values populateFormValues();
}); setState(() {});
}, }
).paddingOnly(bottom: 12),
AppTextFormField( ///Need to assign the values
labelText: context.translation.serialNo, });
backgroundColor: AppColor.fieldBgColor(context), },
controller: _serialNoController, ),
textAlign: TextAlign.center, 12.height,
showShadow: false, ],
labelStyle: AppTextStyles.textFieldLabelStyle, AppTextFormField(
onChange: (value) { labelText: context.translation.serialNo,
if (value != _scannedAssetModel?.serialNo) { backgroundColor: AppColor.fieldBgColor(context),
_scannedAssetModel?.newSerialNo = value; controller: _serialNoController,
// setState(() {}); textAlign: TextAlign.center,
} showShadow: false,
}, labelStyle: AppTextStyles.textFieldLabelStyle,
style: Theme.of(context).textTheme.titleMedium, onChange: (value) {
), if (value != _scannedAssetModel?.serialNo) {
12.height, _scannedAssetModel?.newSerialNo = value;
LookUpAutoCompleteField( // setState(() {});
clearAfterPick: false, }
forAssetName: true, },
onChanged: (value) { style: Theme.of(context).textTheme.titleMedium,
_scannedAssetModel?.newAssetNameId = null; ),
_scannedAssetModel?.newAssetNameText = value; 12.height,
}, LookUpAutoCompleteField(
initialValue: _scannedAssetModel?.assetName ?? "", clearAfterPick: false,
label: 'Asset Name'.addTranslation, forAssetName: true,
onPick: (value) { onChanged: (value) {
_scannedAssetModel?.newAssetNameText = null; _scannedAssetModel?.newAssetNameId = null;
_scannedAssetModel?.assetName = value.name; _scannedAssetModel?.newAssetNameText = value;
_scannedAssetModel?.newAssetNameId = value.id; },
setState(() {}); initialValue: _scannedAssetModel?.assetName ?? "",
}, label: 'Asset Name'.addTranslation,
), onPick: (value) {
12.height, _scannedAssetModel?.newAssetNameText = null;
//Asset Name.. _scannedAssetModel?.assetName = value.name;
LookUpAutoCompleteField( _scannedAssetModel?.newAssetNameId = value.id;
clearAfterPick: false, setState(() {});
isManufacturer: true, },
initialValue: _scannedAssetModel?.manufacturer ?? "", ),
label: 'Manufacturer'.addTranslation, 12.height,
onChanged: (value) { //Asset Name..
_scannedAssetModel?.newManufacturerId = null; LookUpAutoCompleteField(
_scannedAssetModel?.newManufacturerName = value; clearAfterPick: false,
}, isManufacturer: true,
onPick: (value) { initialValue: _scannedAssetModel?.manufacturer ?? "",
_scannedAssetModel?.newManufacturerName = null; label: 'Manufacturer'.addTranslation,
_scannedAssetModel?.manufacturer = value.name; onChanged: (value) {
_scannedAssetModel?.newManufacturerId = value.id; _scannedAssetModel?.newManufacturerId = null;
_scannedAssetModel?.newManufacturerName = value;
},
onPick: (value) {
_scannedAssetModel?.newManufacturerName = null;
_scannedAssetModel?.manufacturer = value.name;
_scannedAssetModel?.newManufacturerId = value.id;
setState(() {}); setState(() {});
}, },
), ),
12.height, 12.height,
LookUpAutoCompleteField( LookUpAutoCompleteField(
clearAfterPick: false, clearAfterPick: false,
isManufacturer: false, isManufacturer: false,
initialValue: _scannedAssetModel?.model ?? "", initialValue: _scannedAssetModel?.model ?? "",
label: 'Model'.addTranslation, label: 'Model'.addTranslation,
onChanged: (value) { onChanged: (value) {
_scannedAssetModel?.newModelId = null; _scannedAssetModel?.newModelId = null;
_scannedAssetModel?.newModelName = value; _scannedAssetModel?.newModelName = value;
}, },
onPick: (value) { onPick: (value) {
_scannedAssetModel?.newModelName = null; _scannedAssetModel?.newModelName = null;
_scannedAssetModel?.model = value.name; _scannedAssetModel?.model = value.name;
_scannedAssetModel?.newModelId = value.id; _scannedAssetModel?.newModelId = value.id;
setState(() {}); setState(() {});
}, },
), ),
12.height, 12.height,
LookUpAutoCompleteField( LookUpAutoCompleteField(
clearAfterPick: false, clearAfterPick: false,
forSupplier: true, forSupplier: true,
initialValue: _scannedAssetModel?.supplierName ?? "", initialValue: _scannedAssetModel?.supplierName ?? "",
label: context.translation.supplier, label: context.translation.supplier,
onChanged: (value) { onChanged: (value) {
_scannedAssetModel?.newSupplierId = null; _scannedAssetModel?.newSupplierId = null;
_scannedAssetModel?.newSupplierName = value; _scannedAssetModel?.newSupplierName = value;
}, },
onPick: (value) { onPick: (value) {
_scannedAssetModel?.newSupplierName = null; _scannedAssetModel?.newSupplierName = null;
_scannedAssetModel?.supplierName = value.name; _scannedAssetModel?.supplierName = value.name;
_scannedAssetModel?.newSupplierId = value.id; _scannedAssetModel?.newSupplierId = value.id;
setState(() {});
},
),
// SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
// 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(() {}); setState(() {});
}, },
buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120), ),
) // SingleItemDropDownMenu<SupplierDetails, VendorProvider>(
: MultiFilesPickerItem( // context: context,
file: File(attachments.first.name ?? ''), // title: context.translation.supplier,
enabled: true, // backgroundColor: AppColor.fieldBgColor(context),
onRemoveTap: (file) { // initialValue: _scannedAssetModel?.supplier,
setState(() { // showAsBottomSheet: true,
attachments.clear(); // 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, // 100.height,
AppTextFormField( ],
backgroundColor: AppColor.fieldBgColor(context), ).toShadowContainer(context, borderRadius: 20, padding: 12))
labelText: 'Remarks'.addTranslation, .expanded,
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,
FooterActionButton.footerContainer( FooterActionButton.footerContainer(
context: context, context: context,
child: AppFilledButton(buttonColor: AppColor.primary10, label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit), child: AppFilledButton(buttonColor: AppColor.primary10, label: context.translation.submitRequest, maxWidth: true, onPressed: _onSubmit),
@ -438,7 +439,7 @@ class _AssetInventoryFormViewState extends State<AssetInventoryFormView> {
Navigator.pushReplacement( Navigator.pushReplacement(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (contxt) => SiteInformationView( builder: (contxt) => SiteInformationPage(
sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0), sessionModel: SessionModel(id: int.tryParse(widget.assetInventoryModel?.sessionId?.toString() ?? '') ?? 0),
))); )));
} else { } else {

@ -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/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_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_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/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/app_style/app_color.dart';
import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart';
@ -66,62 +66,57 @@ class _AssetInventoryPageState extends State<AssetInventoryPage> {
body: Consumer<AssetInventoryProvider>(builder: (context, provider, child) { body: Consumer<AssetInventoryProvider>(builder: (context, provider, child) {
return DefaultTabController( return DefaultTabController(
length: 2, length: 2,
child: Column( child: provider.isLoading
mainAxisSize: MainAxisSize.min, ? const CircularProgressIndicator(color: AppColor.primary10).center
children: <Widget>[ : Column(
Container( mainAxisSize: MainAxisSize.min,
margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight), children: <Widget>[
decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)), Container(
child: TabBar( margin: EdgeInsets.only(left: 16.toScreenWidth, right: 16.toScreenWidth, top: 12.toScreenHeight),
padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth), decoration: BoxDecoration(color: context.isDark ? AppColor.neutral50 : AppColor.white10, borderRadius: BorderRadius.circular(10)),
labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, child: TabBar(
unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20, padding: EdgeInsets.symmetric(vertical: 4.toScreenHeight, horizontal: 4.toScreenWidth),
unselectedLabelStyle: AppTextStyles.bodyText, labelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
labelStyle: AppTextStyles.bodyText, unselectedLabelColor: context.isDark ? AppColor.neutral30 : AppColor.black20,
indicatorPadding: EdgeInsets.zero, unselectedLabelStyle: AppTextStyles.bodyText,
indicatorSize: TabBarIndicatorSize.tab, labelStyle: AppTextStyles.bodyText,
dividerColor: Colors.transparent, indicatorPadding: EdgeInsets.zero,
indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)), indicatorSize: TabBarIndicatorSize.tab,
onTap: (index) {}, dividerColor: Colors.transparent,
tabs: [ indicator: BoxDecoration(color: context.isDark ? AppColor.neutral60 : AppColor.neutral110, borderRadius: BorderRadius.circular(7)),
Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight), onTap: (index) {},
Tab( tabs: [
text: Tab(text: 'Request Details'.addTranslation, height: 57.toScreenHeight),
'${'Scan Assets'.addTranslation} ${provider.assetInventoryResponse?.totalRows != null && provider.assetInventoryResponse!.totalRows! > 0 ? '(${provider.assetInventoryResponse?.totalRows})' : ''}', Tab(
height: 57.toScreenHeight), 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<void> _scanAsset({required AssetInventoryProvider provider}) async { Future<void> _scanAsset({required AssetInventoryProvider provider}) async {
provider.siteFilterAssetList.clear(); 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())));
} }
} }

@ -48,9 +48,7 @@ class _AssetInventoryScanAssetViewState extends State<AssetInventoryScanAssetVie
} }
return NotificationListener<ScrollNotification>( return NotificationListener<ScrollNotification>(
onNotification: (scrollInfo) { onNotification: (scrollInfo) {
if (!provider.isNextPageLoading && if (!provider.isNextPageLoading && provider.nextPage && scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
provider.nextPage &&
scrollInfo.metrics.pixels == scrollInfo.metrics.maxScrollExtent) {
getAssetList(loadMore: true); getAssetList(loadMore: true);
} }
return false; return false;
@ -84,48 +82,48 @@ class _AssetInventoryScanAssetViewState extends State<AssetInventoryScanAssetVie
} }
// Widget build(BuildContext context) { // Widget build(BuildContext context) {
// return Consumer<AssetInventoryProvider>( // return Consumer<AssetInventoryProvider>(
// builder: (context, provider, _) { // builder: (context, provider, _) {
// if (provider.isLoading && provider.assetInventoryResponse == null) { // if (provider.isLoading && provider.assetInventoryResponse == null) {
// //TODO need use existing loader if found.. // //TODO need use existing loader if found..
// return const Center(child: CircularProgressIndicator()); // return const Center(child: CircularProgressIndicator());
// } // }
// final assets = provider.assetInventoryResponse?.assetList ?? []; // final assets = provider.assetInventoryResponse?.assetList ?? [];
// if (assets.isEmpty) { // if (assets.isEmpty) {
// return const Center(child: NoDataFound()); // return const Center(child: NoDataFound());
// } // }
// return LazyLoading( // return LazyLoading(
// nextPage: provider.nextPage, // nextPage: provider.nextPage,
// onLazyLoad: () async { // onLazyLoad: () async {
// log('Loading next page...'); // log('Loading next page...');
// await getAssetList(loadMore: true); // await getAssetList(loadMore: true);
// }, // },
// child: ListView.separated( // child: ListView.separated(
// padding: const EdgeInsets.all(16), // padding: const EdgeInsets.all(16),
// itemBuilder: (context, index) { // itemBuilder: (context, index) {
// if (index == assets.length) { // if (index == assets.length) {
// // bottom loader // // bottom loader
// return const Padding( // return const Padding(
// padding: EdgeInsets.symmetric(vertical: 16), // padding: EdgeInsets.symmetric(vertical: 16),
// child: Center(child: CircularProgressIndicator()), // child: Center(child: CircularProgressIndicator()),
// ); // );
// } // }
// return AssetDetailCardView( // return AssetDetailCardView(
// assetInventoryModel: assets[index], // assetInventoryModel: assets[index],
// onDeletePress: () async { // onDeletePress: () async {
// await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async { // await provider.deleteAssetISession(id: assets[index].id ?? 0).then((success) async {
// if (success) { // if (success) {
// await provider.getAssetsInSession(sessionId: widget.sessionId); // await provider.getAssetsInSession(sessionId: widget.sessionId);
// } // }
// }); // });
// }, // },
// ); // );
// }, // },
// separatorBuilder: (context, index) => 12.height, // separatorBuilder: (context, index) => 12.height,
// itemCount: assets.length + (provider.nextPage ? 1 : 0), // itemCount: assets.length + (provider.nextPage ? 1 : 0),
// ), // ),
// ); // );
// }, // },
// ); // );
// } // }
} }

@ -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/providers/loading_list_notifier.dart';
import 'package:test_sa/views/widgets/loaders/lazy_loading.dart'; import 'package:test_sa/views/widgets/loaders/lazy_loading.dart';
class SiteInformationView extends StatefulWidget { class SiteInformationPage extends StatefulWidget {
SessionModel sessionModel; SessionModel sessionModel;
SiteInformationView({Key? key, required this.sessionModel}) : super(key: key); SiteInformationPage({Key? key, required this.sessionModel}) : super(key: key);
@override @override
State<SiteInformationView> createState() => _SiteInformationViewState(); State<SiteInformationPage> createState() => _SiteInformationPageState();
} }
class _SiteInformationViewState extends State<SiteInformationView> { class _SiteInformationPageState extends State<SiteInformationPage> {
AssetInventoryModel assetInventoryModel = AssetInventoryModel(); AssetInventoryModel assetInventoryModel = AssetInventoryModel();
bool showMarkAsComplete = false; bool showMarkAsComplete = false;
@ -56,45 +56,49 @@ class _SiteInformationViewState extends State<SiteInformationView> {
title: 'Inventory Session Request'.addTranslation, title: 'Inventory Session Request'.addTranslation,
titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), titleStyle: AppTextStyles.heading3.copyWith(fontWeight: FontWeight.w500, color: context.isDark ? AppColor.neutral30 : AppColor.neutral50),
), ),
body: SafeArea( body: Column(
child: Column( children: [
children: [ ListView(
ListView( padding: const EdgeInsets.only(left: 16, right: 16, top: 16),
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: [ children: [
siteInfoCard(context, widget.sessionModel), AppFilledButton(
12.height, buttonColor: AppColor.primary10,
assetDetailList(), label: 'Add Asset'.addTranslation,
8.height, 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( // FooterActionButton.footerContainer(
buttonColor: AppColor.green70, // context: context,
label: 'Mark as completed'.addTranslation, // child: AppFilledButton(
onPressed: () => _markAsCompleted(), // buttonColor: AppColor.green70,
// buttonColor: AppColor.primary10, // label: 'Mark as completed'.addTranslation,
).paddingOnly(start: 16, end: 16), // onPressed: () => _markAsCompleted(),
// FooterActionButton.footerContainer( // // buttonColor: AppColor.primary10,
// 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<SiteInformationView> {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
12.height,
SingleItemDropDownMenu<Site, NullableLoadingProvider>( SingleItemDropDownMenu<Site, NullableLoadingProvider>(
context: context, context: context,
title: context.translation.site, title: context.translation.site,
@ -202,7 +205,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {}); setState(() {});
}, },
), ),
8.height, 12.height,
SingleItemDropDownMenu<Building, NullableLoadingProvider>( SingleItemDropDownMenu<Building, NullableLoadingProvider>(
context: context, context: context,
title: context.translation.building, title: context.translation.building,
@ -219,7 +222,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {}); setState(() {});
}, },
), ),
8.height, 12.height,
SingleItemDropDownMenu<Floor, NullableLoadingProvider>( SingleItemDropDownMenu<Floor, NullableLoadingProvider>(
context: context, context: context,
title: context.translation.floor, title: context.translation.floor,
@ -235,7 +238,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
setState(() {}); setState(() {});
}, },
), ),
8.height, 12.height,
SingleItemDropDownMenu<Department, NullableLoadingProvider>( SingleItemDropDownMenu<Department, NullableLoadingProvider>(
context: context, context: context,
title: context.translation.department, title: context.translation.department,
@ -253,7 +256,7 @@ class _SiteInformationViewState extends State<SiteInformationView> {
getAssetFilteredList(); getAssetFilteredList();
}, },
), ),
8.height, 12.height,
SingleItemDropDownMenu<Rooms, NullableLoadingProvider>( SingleItemDropDownMenu<Rooms, NullableLoadingProvider>(
context: context, context: context,
title: context.translation.room, title: context.translation.room,
@ -271,9 +274,8 @@ class _SiteInformationViewState extends State<SiteInformationView> {
} }
}, },
), ),
8.height,
], ],
).toShadowContainer(context); ).toShadowContainer(context, borderRadius: 20, padding: 12);
} }
Future<bool> validateRequest() async { Future<bool> validateRequest() async {

@ -52,7 +52,9 @@ class _MyRequestsPageState extends State<MyRequestsPage> {
if (context.settingProvider.isUserFlowMedical) { if (context.settingProvider.isUserFlowMedical) {
requestsList.add(Request(7, 'Recall and Alert')); requestsList.add(Request(7, 'Recall and Alert'));
} }
requestsList.add(Request(8, 'Inventory Session'.addTranslation)); if (Provider.of<UserProvider>(context, listen: false).user!.type != UsersTypes.normal_user) {
requestsList.add(Request(8, 'Inventory Session'.addTranslation));
}
_provider = Provider.of<AllRequestsProvider>(context, listen: false); _provider = Provider.of<AllRequestsProvider>(context, listen: false);
_provider!.reset(); _provider!.reset();
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {

@ -87,9 +87,7 @@ class _SelectionBottomSheetState<T extends Base> extends State<SelectionFullScre
SearchBar( SearchBar(
focusNode: searchFocusNode, focusNode: searchFocusNode,
elevation: WidgetStateProperty.all<double>(0), elevation: WidgetStateProperty.all<double>(0),
backgroundColor: WidgetStateProperty.all<Color>( backgroundColor: WidgetStateProperty.all<Color?>(context.isDark ? AppColor.neutral120 : null),
AppColor.fieldBgColor(context), // Your custom background color
),
leading: Icon(Icons.search, color: AppColor.iconColor(context)), leading: Icon(Icons.search, color: AppColor.iconColor(context)),
textStyle: WidgetStateProperty.all<TextStyle>( textStyle: WidgetStateProperty.all<TextStyle>(
TextStyle(color: AppColor.textColor(context), fontSize: 16.0), TextStyle(color: AppColor.textColor(context), fontSize: 16.0),

Loading…
Cancel
Save