You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			246 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			246 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Dart
		
	
| import 'dart:convert';
 | |
| import 'dart:io';
 | |
| 
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| import 'package:test_sa/extensions/context_extension.dart';
 | |
| import 'package:test_sa/extensions/int_extensions.dart';
 | |
| import 'package:test_sa/extensions/text_extensions.dart';
 | |
| import 'package:test_sa/extensions/widget_extensions.dart';
 | |
| import 'package:test_sa/models/generic_attachment_model.dart';
 | |
| import 'package:test_sa/models/lookup.dart';
 | |
| import 'package:test_sa/modules/cm_module/utilities/service_request_utils.dart';
 | |
| import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
 | |
| import 'package:test_sa/modules/traf_module/traf_request_model.dart';
 | |
| import 'package:test_sa/modules/traf_module/traf_request_provider.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_text_form_field.dart';
 | |
| import 'package:test_sa/new_views/common_widgets/default_app_bar.dart';
 | |
| import 'package:test_sa/new_views/common_widgets/multiple_item_drop_down_menu.dart';
 | |
| import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart';
 | |
| import 'package:test_sa/providers/lookups/classification_lookup_provider.dart';
 | |
| import 'package:test_sa/providers/lookups/recommendation_lookup_provider.dart';
 | |
| import 'package:test_sa/providers/lookups/request_type_lookup_provider.dart';
 | |
| import 'package:test_sa/views/widgets/equipment/asset_picker.dart';
 | |
| import 'package:test_sa/models/device/asset.dart';
 | |
| import 'package:test_sa/views/widgets/images/multi_image_picker.dart';
 | |
| 
 | |
| class UpdateTrafRequestPage extends StatefulWidget {
 | |
|   static const String id = "/update-TRAF";
 | |
| 
 | |
|   UpdateTrafRequestPage({Key? key}) : super(key: key);
 | |
| 
 | |
|   @override
 | |
|   _UpdateTrafRequestPageState createState() {
 | |
|     return _UpdateTrafRequestPageState();
 | |
|   }
 | |
| }
 | |
| 
 | |
| class _UpdateTrafRequestPageState extends State<UpdateTrafRequestPage> {
 | |
|   Lookup? requestType;
 | |
|   Lookup? assessorRecommendation;
 | |
|   Lookup? classificationType;
 | |
|   late TrafRequestProvider trafRequestProvider;
 | |
| 
 | |
|   late TrafRequestDataModel trafRequest;
 | |
| 
 | |
|   List<Lookup> abc = [];
 | |
| 
 | |
|   List<Asset> _deviceList = [];
 | |
|   Asset? asset;
 | |
|   List<GenericAttachmentModel> attachments = [];
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
|     Provider.of<ClassificationLookupProvider>(context, listen: false).reset();
 | |
|     Provider.of<RecommendationLookupProvider>(context, listen: false).reset();
 | |
|     trafRequestProvider = Provider.of<TrafRequestProvider>(context, listen: false);
 | |
|     trafRequest = trafRequestProvider.trafRequestDataModel!;
 | |
|     attachments = trafRequest.attachments?.map((item) => GenericAttachmentModel(id: item.id, name: item.attachmentName)).toList() ?? [];
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     super.dispose();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|         appBar: const DefaultAppBar(title: "Update TRAF Request"),
 | |
|         body: Column(
 | |
|           children: [
 | |
|             SingleChildScrollView(
 | |
|               padding: const EdgeInsets.all(16),
 | |
|               child: Column(
 | |
|                 mainAxisSize: MainAxisSize.min,
 | |
|                 crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                 children: [
 | |
|                   SingleItemDropDownMenu<Lookup, ClassificationLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     title: "Classification",
 | |
|                     initialValue: classificationType,
 | |
|                     onSelect: (value) {
 | |
|                       classificationType = value;
 | |
|                       trafRequest?.cla = value?.value;
 | |
|                       // setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, RequestTypeLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     title: context.translation.requestType,
 | |
|                     initialValue: requestType,
 | |
|                     onSelect: (value) {
 | |
|                       requestType = value;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   if (requestType?.id == 732) ...[
 | |
|                     12.height,
 | |
|                     AppTextFormField(
 | |
|                       initialValue: "",
 | |
|                       makeMultiLinesNull: true,
 | |
|                       labelText: "Recommended Quantity",
 | |
|                       backgroundColor: AppColor.fieldBgColor(context),
 | |
|                       labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                       showShadow: false,
 | |
|                       textInputType: TextInputType.number,
 | |
|                       onChange: (value) {
 | |
|                         trafRequest.qty = int.tryParse(value);
 | |
|                       },
 | |
|                     ),
 | |
|                   ],
 | |
|                   if (requestType?.id == 733) ...[
 | |
|                     12.height,
 | |
|                     AssetPicker(
 | |
|                       device: asset,
 | |
|                       editable: false,
 | |
|                       showLoading: false,
 | |
| 
 | |
|                       // borderColor: AppColor.black20,
 | |
|                       // backgroundColor: AppColor.white936,
 | |
|                       onPick: (asset) async {
 | |
|                         this.asset = asset;
 | |
|                         setState(() {});
 | |
|                         // pendingAssetServiceRequest = null;
 | |
|                         // _serviceRequest.device = asset;
 | |
|                         // await checkAssetForPendingServiceRequest(asset.id!.toInt());
 | |
|                         // if (pendingAssetServiceRequest != null && pendingAssetServiceRequest!.details!.isNotEmpty) {
 | |
|                         //   showPendingRequestBottomSheet();
 | |
|                         // }
 | |
|                       },
 | |
|                     ),
 | |
|                   ],
 | |
|                   // 12.height,
 | |
|                   // MultipleItemDropDownMenu<Lookup, RequestTypeLookupProvider>(
 | |
|                   //   context: context,
 | |
|                   //   showAsBottomSheet: true,
 | |
|                   //   backgroundColor: AppColor.neutral100,
 | |
|                   //   showShadow: false,
 | |
|                   //   showCancel: true,
 | |
|                   //   title: "Please specify departments and relations",
 | |
|                   //   initialValue: abc,
 | |
|                   //   onSelect: (value) {
 | |
|                   //     abc = value ?? [];
 | |
|                   //     // setState(() {
 | |
|                   //     //
 | |
|                   //     // });
 | |
|                   //   },
 | |
|                   // ),
 | |
|                   12.height,
 | |
|                   Text(
 | |
|                     "Quantity to be Transfer",
 | |
|                     style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w500),
 | |
|                   ),
 | |
|                   8.height,
 | |
|                   AssetPicker(
 | |
|                     deviceList: _deviceList,
 | |
|                     showLoading: false,
 | |
|                     borderColor: AppColor.black20,
 | |
|                     buttonColor: AppColor.white936,
 | |
|                     multiSelection: true,
 | |
|                     onAssetRemove: (itemId) {
 | |
|                       _deviceList.removeWhere((asset) => asset.id?.toInt() == itemId);
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                     onMultiAssetPick: (assetList) {
 | |
|                       _deviceList.addAll(assetList);
 | |
|                       final seenIds = <num?>{};
 | |
|                       _deviceList = _deviceList.where((item) => seenIds.add(item.id)).toList();
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, RecommendationLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     title: "Assessor Recommendation",
 | |
|                     initialValue: assessorRecommendation,
 | |
|                     onSelect: (value) {
 | |
|                       assessorRecommendation = value;
 | |
|                       trafRequest?.requestTypeId = value?.value;
 | |
|                       // trafRequest?.requestTypeId = value?.value;
 | |
|                       // setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     textInputType: TextInputType.multiline,
 | |
|                     alignLabelWithHint: true,
 | |
|                     labelText: "Assessor comment",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.comment = value; // todo confirm parameter shaheer
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AttachmentPicker(
 | |
|                     label: context.translation.attachFiles,
 | |
|                     attachment: attachments,
 | |
|                     buttonColor: AppColor.black10,
 | |
|                     onlyImages: false,
 | |
|                     buttonIcon: 'image-plus'.toSvgAsset(color: AppColor.neutral120),
 | |
|                     onChange: (attachment) {
 | |
|                       attachments = attachment;
 | |
|                     },
 | |
|                   ),
 | |
|                 ],
 | |
|               ).toShadowContainer(context, borderRadius: 20, padding: 12),
 | |
|             ).expanded,
 | |
|             FooterActionButton.footerContainer(
 | |
|               context: context,
 | |
|               child: AppFilledButton(
 | |
|                   buttonColor: AppColor.primary10,
 | |
|                   label: "Update",
 | |
|                   onPressed: () {
 | |
|                     trafRequest.attachments = [];
 | |
|                     for (var item in attachments) {
 | |
|                       String fileName =
 | |
|                           ServiceRequestUtils.isLocalUrl(item.name ?? '') ? ("${item.name ?? ''.split("/").last}|${base64Encode(File(item.name ?? '').readAsBytesSync())}") : item.name ?? '';
 | |
|                       trafRequest.attachments!.add(
 | |
|                         Attachments(id: item.id, trafId: item.id, attachmentName: fileName),
 | |
|                       );
 | |
|                     }
 | |
|                   }
 | |
|                   // buttonColor: AppColor.primary10,
 | |
|                   ),
 | |
|             ),
 | |
|           ],
 | |
|         ));
 | |
|   }
 | |
| }
 |