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.
		
		
		
		
		
			
		
			
				
	
	
		
			388 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			388 lines
		
	
	
		
			17 KiB
		
	
	
	
		
			Dart
		
	
| 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/string_extensions.dart';
 | |
| import 'package:test_sa/extensions/text_extensions.dart';
 | |
| import 'package:test_sa/extensions/widget_extensions.dart';
 | |
| import 'package:test_sa/models/device/asset.dart';
 | |
| import 'package:test_sa/models/lookup.dart';
 | |
| import 'package:test_sa/models/new_models/traf_department.dart';
 | |
| import 'package:test_sa/modules/cm_module/views/components/action_button/footer_action_button.dart';
 | |
| import 'package:test_sa/modules/traf_module/asset_auto_complete_field.dart';
 | |
| import 'package:test_sa/modules/traf_module/traf_request_detail_page.dart';
 | |
| import 'package:test_sa/modules/traf_module/update_traf_request_page.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/loading_list_notifier.dart';
 | |
| import 'package:test_sa/providers/lookups/department_lookup_provider.dart';
 | |
| import 'package:test_sa/providers/lookups/request_type_lookup_provider.dart';
 | |
| import 'package:test_sa/providers/lookups/yes_no_lookup_provider.dart';
 | |
| import 'package:test_sa/views/widgets/equipment/asset_picker.dart';
 | |
| 
 | |
| import 'traf_request_model.dart';
 | |
| 
 | |
| class CreateTRAFRequestPage extends StatefulWidget {
 | |
|   static const String id = "/create-TRAF";
 | |
| 
 | |
|   CreateTRAFRequestPage({Key? key}) : super(key: key);
 | |
| 
 | |
|   @override
 | |
|   _CreateTRAFRequestPageState createState() {
 | |
|     return _CreateTRAFRequestPageState();
 | |
|   }
 | |
| }
 | |
| 
 | |
| class _CreateTRAFRequestPageState extends State<CreateTRAFRequestPage> {
 | |
|   final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
 | |
| 
 | |
|   bool _acknowledgement = false;
 | |
| 
 | |
|   Asset? asset;
 | |
| 
 | |
|   Lookup? requestType;
 | |
|   Lookup? isUsedSolelyOrShared;
 | |
|   Lookup? otherServicesEffects;
 | |
|   Lookup? useInCombination;
 | |
| 
 | |
|   TrafRequestDataModel? trafRequest;
 | |
| 
 | |
|   List<Lookup> abc = [];
 | |
|   List<TrafDepartment> departments = [];
 | |
| 
 | |
|   @override
 | |
|   void initState() {
 | |
|     super.initState();
 | |
|     trafRequest = TrafRequestDataModel();
 | |
|     resetProviders();
 | |
|   }
 | |
| 
 | |
|   void resetProviders() {
 | |
|     Provider.of<RequestTypeLookupProvider>(context, listen: false).reset();
 | |
|     // Provider.of<YesNoLookupProvider>(context, listen: false).reset();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   void dispose() {
 | |
|     super.dispose();
 | |
|   }
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return Scaffold(
 | |
|       appBar: const DefaultAppBar(title: "TRAF Request"),
 | |
|       body: Form(
 | |
|         key: _formKey,
 | |
|         child: Column(
 | |
|           children: [
 | |
|             ListView(padding: const EdgeInsets.all(16), children: [
 | |
|               Column(
 | |
|                 crossAxisAlignment: CrossAxisAlignment.start,
 | |
|                 children: [
 | |
|                   // SingleItemDropDownMenu<TaskType, TaskTypeProvider>(
 | |
|                   //   context: context,
 | |
|                   //   height: 56.toScreenHeight,
 | |
|                   //   title: context.translation.taskType,
 | |
|                   //   showShadow: false,
 | |
|                   //   backgroundColor: AppColor.fieldBgColor(context),
 | |
|                   //   showAsBottomSheet: true,
 | |
|                   //   initialValue: selectedType,
 | |
|                   //   onSelect: (type) {},
 | |
|                   // ),
 | |
|                   SingleItemDropDownMenu<Lookup, RequestTypeLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     title: context.translation.requestType,
 | |
|                     initialValue: requestType,
 | |
|                     onSelect: (value) {
 | |
|                       requestType = value;
 | |
|                       trafRequest?.requestTypeId = value?.value;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   if (requestType?.value == 1) ...[
 | |
|                     12.height,
 | |
|                     AssetAutoCompleteField(
 | |
|                       clearAfterPick: false,
 | |
|                       byName: true,
 | |
|                       initialValue: "",
 | |
|                       onPick: (part) {
 | |
|                         // model.partCatalogItem = PartCatalogItem(id: part.sparePart?.id, partNumber: part.sparePart?.partNo, partName: part.sparePart?.partName, oracleCode: part.sparePart?.oracleCode);
 | |
|                         // setState(() {});
 | |
|                       },
 | |
|                     ),
 | |
|                   ],
 | |
|                   if (requestType?.value == 2) ...[
 | |
|                     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,
 | |
|                   Text(
 | |
|                     "Request Details",
 | |
|                     style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50, fontWeight: FontWeight.w600),
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     labelText: "How would the requested technology solve the current situation and/or serve the purpose?",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     floatingLabelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     makeMultiLinesNull: true,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.purposeAnswer = value;
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     labelText: "What is the current practice?",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     makeMultiLinesNull: true,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.currentPractise = value;
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     makeMultiLinesNull: true,
 | |
|                     labelText: "Census Q1",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     textInputType: TextInputType.number,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.censusQ1 = int.tryParse(value);
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     makeMultiLinesNull: true,
 | |
|                     labelText: "Census Q2",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     textInputType: TextInputType.number,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.censusQ2 = int.tryParse(value);
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     makeMultiLinesNull: true,
 | |
|                     labelText: "Census Q3",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     textInputType: TextInputType.number,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.censusQ3 = int.tryParse(value);
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   AppTextFormField(
 | |
|                     initialValue: "",
 | |
|                     makeMultiLinesNull: true,
 | |
|                     labelText: "Census Q4",
 | |
|                     backgroundColor: AppColor.fieldBgColor(context),
 | |
|                     labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                     showShadow: false,
 | |
|                     textInputType: TextInputType.number,
 | |
|                     onChange: (value) {
 | |
|                       trafRequest?.censusQ4 = int.tryParse(value);
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     height: 80,
 | |
|                     title: "List down names & contact information of users going to use the technology & specify if they are part-time or full time?",
 | |
|                     initialValue: isUsedSolelyOrShared,
 | |
|                     onSelect: (value) {
 | |
|                       // isUsedSolelyOrShared = value;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     height: 80,
 | |
|                     title: "Is the requesting department going to use the technology solely or shared with other departments?",
 | |
|                     initialValue: isUsedSolelyOrShared,
 | |
|                     onSelect: (value) {
 | |
|                       isUsedSolelyOrShared = value;
 | |
|                       trafRequest?.usingSolelyOrSharedId = value?.value;
 | |
|                       if (isUsedSolelyOrShared?.value != 1) {
 | |
|                         departments = [];
 | |
|                         Provider.of<DepartmentLookupProvider>(context, listen: false).reset();
 | |
|                       }
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   if (isUsedSolelyOrShared?.value == 1) ...[
 | |
|                     12.height,
 | |
|                     MultipleItemDropDownMenu<TrafDepartment, DepartmentLookupProvider>(
 | |
|                       context: context,
 | |
|                       showAsBottomSheet: true,
 | |
|                       backgroundColor: AppColor.neutral100,
 | |
|                       showShadow: false,
 | |
|                       showCancel: true,
 | |
|                       requestById: context.userProvider.user?.clientId,
 | |
|                       title: "Please specify departments and relations",
 | |
|                       initialValue: departments,
 | |
|                       onSelect: (value) {
 | |
|                         departments = value ?? [];
 | |
|                         // setState(() {
 | |
|                         //
 | |
|                         // });
 | |
|                       },
 | |
|                     ),
 | |
|                   ],
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     height: 80,
 | |
|                     title: "Would other services be effected by acquiring the new equipment?",
 | |
|                     initialValue: otherServicesEffects,
 | |
|                     onSelect: (value) {
 | |
|                       otherServicesEffects = value;
 | |
|                       trafRequest?.isEffectedId = value?.value;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   if (otherServicesEffects?.value == 1) ...[
 | |
|                     12.height,
 | |
|                     AppTextFormField(
 | |
|                       initialValue: "",
 | |
|                       // makeMultiLinesNull: true,
 | |
|                       textInputType: TextInputType.multiline,
 | |
|                       alignLabelWithHint: true,
 | |
|                       labelText: "List down these services and stat how would it be effected",
 | |
|                       backgroundColor: AppColor.fieldBgColor(context),
 | |
|                       labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                       showShadow: false,
 | |
|                       onChange: (value) {
 | |
|                         trafRequest?.effectedServices = value;
 | |
|                       },
 | |
|                     ),
 | |
|                   ],
 | |
|                   12.height,
 | |
|                   SingleItemDropDownMenu<Lookup, YesNoLookupProvider>(
 | |
|                     context: context,
 | |
|                     showAsBottomSheet: true,
 | |
|                     backgroundColor: AppColor.neutral100,
 | |
|                     showShadow: false,
 | |
|                     height: 80,
 | |
|                     title: "Is the equipment going to be used with combination of other equipment to accomplish a specific procedure?",
 | |
|                     initialValue: useInCombination,
 | |
|                     onSelect: (value) {
 | |
|                       useInCombination = value;
 | |
|                       trafRequest?.isCombinationId = value?.value;
 | |
|                       setState(() {});
 | |
|                     },
 | |
|                   ),
 | |
|                   if (useInCombination?.value == 1) ...[
 | |
|                     12.height,
 | |
|                     AppTextFormField(
 | |
|                       initialValue: "",
 | |
|                       textInputType: TextInputType.multiline,
 | |
|                       alignLabelWithHint: true,
 | |
|                       labelText: "kindly describe in detail",
 | |
|                       backgroundColor: AppColor.fieldBgColor(context),
 | |
|                       labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)),
 | |
|                       showShadow: false,
 | |
|                       onChange: (value) {
 | |
|                         trafRequest?.usedWithCombination = value;
 | |
|                       },
 | |
|                     ),
 | |
|                   ]
 | |
|                   // 23.height,
 | |
|                   // AttachmentPicker(
 | |
|                   //   label: context.translation.attachImage,
 | |
|                   //   attachment: attachments,
 | |
|                   //   buttonColor: AppColor.black10,
 | |
|                   //   onlyImages: false,
 | |
|                   //   buttonIcon: 'image-plus'.toSvgAsset(color: context.isDark ? AppColor.primary10 : AppColor.neutral120),
 | |
|                   //   //verify this if not required delete this ..
 | |
|                   //   onChange: (attachments) {
 | |
|                   //     attachments = attachments;
 | |
|                   //     setState(() {});
 | |
|                   //   },
 | |
|                   // ),
 | |
|                 ],
 | |
|               ).toShadowContainer(context, padding: 12, borderRadius: 20),
 | |
|               16.height,
 | |
|               Row(
 | |
|                 children: [
 | |
|                   Checkbox(
 | |
|                       value: _acknowledgement,
 | |
|                       visualDensity: const VisualDensity(horizontal: -4.0, vertical: -4.0),
 | |
|                       activeColor: AppColor.blueStatus(context),
 | |
|                       materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
 | |
|                       onChanged: (value) {
 | |
|                         setState(() {
 | |
|                           _acknowledgement = value!;
 | |
|                         });
 | |
|                       }),
 | |
|                   12.width,
 | |
|                   "I acknowledge the information filled above is correct".addTranslation.bodyText(context).custom(color: context.isDark ? AppColor.primary50 : AppColor.neutral120).expanded,
 | |
|                 ],
 | |
|               ),
 | |
|             ]).expanded,
 | |
|             FooterActionButton.footerContainer(
 | |
|               context: context,
 | |
|               child: AppFilledButton(
 | |
|                 buttonColor: AppColor.primary10,
 | |
|                 label: context.translation.submitRequest,
 | |
|                 onPressed: _acknowledgement ? _submit : null,
 | |
|                 // buttonColor: AppColor.primary10,
 | |
|               ),
 | |
|             ),
 | |
|           ],
 | |
|         ),
 | |
|       ),
 | |
|     );
 | |
|   }
 | |
| 
 | |
|   void _submit() {
 | |
|     Navigator.push(context, MaterialPageRoute(builder: (context) => TrafRequestDetailPage(trafId: 27)));
 | |
|   }
 | |
| }
 |