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.
382 lines
17 KiB
Dart
382 lines
17 KiB
Dart
|
3 weeks ago
|
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/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/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 = [];
|
||
|
|
|
||
|
|
@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(
|
||
|
|
// assetId: widget.assetId,
|
||
|
|
clearAfterPick: false,
|
||
|
|
byName: false,
|
||
|
|
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;
|
||
|
|
setState(() {});
|
||
|
|
},
|
||
|
|
),
|
||
|
|
if (isUsedSolelyOrShared?.value == 1) ...[
|
||
|
|
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,
|
||
|
|
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)));
|
||
|
|
}
|
||
|
|
}
|