import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/controllers/providers/settings/setting_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/service_request/service_request.dart'; import '../../../../controllers/providers/api/service_requests_provider.dart'; import '../../../../models/lookup.dart'; import '../../../../new_views/app_style/app_color.dart'; import '../../../../new_views/common_widgets/app_filled_button.dart'; import '../../../../new_views/common_widgets/app_text_form_field.dart'; import '../../../../new_views/common_widgets/single_item_drop_down_menu.dart'; import '../../../../providers/service_request_providers/first_action_provider.dart'; import '../../../widgets/date_and_time/date_picker.dart'; class FirstActionBottomSheet extends StatefulWidget { final ServiceRequest request; const FirstActionBottomSheet({Key? key, required this.request}) : super(key: key); @override State createState() => _FirstActionBottomSheetState(); } class _FirstActionBottomSheetState extends State { late ServiceRequest _serviceRequest; Asset? asset; final GlobalKey _formKey = GlobalKey(); Lookup? firstAction; @override void initState() { super.initState(); _serviceRequest = widget.request; firstAction = _serviceRequest.firstAction; } @override Widget build(BuildContext context) { final userProvider = Provider.of(context, listen: false); return Wrap( children: [ Container( clipBehavior: Clip.antiAlias, margin: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), decoration: BoxDecoration( color: Theme.of(context).scaffoldBackgroundColor, borderRadius: const BorderRadius.only(topRight: Radius.circular(20), topLeft: Radius.circular(20)), ), padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth, vertical: 8.toScreenHeight), child: Form( key: _formKey, child: SingleChildScrollView( child: Column( children: [ Container( width: 40.toScreenWidth, height: 5.toScreenHeight, decoration: BoxDecoration(color: AppColor.neutral40, borderRadius: BorderRadius.circular(30)), ), Align( alignment: AlignmentDirectional.centerStart, child: context.translation.firstAction.heading3(context).custom(fontWeight: FontWeight.w600).paddingOnly(top: 16, bottom: 16), ), SingleItemDropDownMenu( context: context, title: context.translation.firstActionStatus, initialValue: firstAction, //_serviceRequest.firstAction, onSelect: (value) { setState(() { //_serviceRequest.firstAction = value; firstAction = value; if (firstAction?.value != 2) { _serviceRequest.visitDate = null; } }); }, ), if (firstAction?.value == 2) ...[ 8.height, ADatePicker( label: context.translation.visitDate, date: DateTime.tryParse(_serviceRequest.visitDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { showTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { // Handle the selected date and time here. if (selectedTime != null) { DateTime selectedDateTime = DateTime( selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute, ); if (selectedDateTime.isBefore(DateTime.parse(_serviceRequest.date!))) { "Visit Date time must be greater then request date".showToast; return; } setState(() { _serviceRequest.visitDate = selectedDateTime.toIso8601String(); }); } }); }, ), ], if (firstAction?.id == 404 && Provider.of(context, listen: false).assetGroup!.id == 1) ...[ 8.height, Row( children: [ ADatePicker( label: context.translation.startDate, date: DateTime.tryParse(_serviceRequest.startDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { showTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { // Handle the selected date and time here. if (selectedTime != null) { DateTime selectedDateTime = DateTime( selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute, ); setState(() { _serviceRequest.startDate = selectedDateTime.toIso8601String(); }); } }); }, ).expanded, 8.width, ADatePicker( label: context.translation.endDate, date: DateTime.tryParse(_serviceRequest.endDate ?? ""), formatDateWithTime: true, onDatePicker: (selectedDate) { showTimePicker( context: context, initialTime: TimeOfDay.now(), ).then((selectedTime) { // Handle the selected date and time here. if (selectedTime != null) { DateTime selectedDateTime = DateTime( selectedDate.year, selectedDate.month, selectedDate.day, selectedTime.hour, selectedTime.minute, ); setState(() { _serviceRequest.endDate = selectedDateTime.toIso8601String(); _serviceRequest.workingHours = (((DateTime.parse(_serviceRequest.endDate!).difference(DateTime.parse(_serviceRequest.startDate!)).inSeconds ?? 0) / 60) / 60).toStringAsFixed(2); }); } }); }, ).expanded, ], ) ], /// Loan availability not required // 8.height, // SingleItemDropDownMenu( // context: context, // title: context.translation.loanAvailability, // initialValue: _serviceRequest.loanAvailability, // onSelect: (status) { // setState(() { // _serviceRequest.loanAvailability = status; // if (_serviceRequest.loanAvailability.value != 1) { // asset = null; // } // }); // }, // ), // if (_serviceRequest?.loanAvailability?.value == 1) 8.height, // if (_serviceRequest?.loanAvailability?.value == 1) // PickAsset( // device: asset ?? _serviceRequest.device, // onPickAsset: (asset) { // setState(() { // this.asset = asset; // }); // }, // ), 8.height, AppTextFormField( labelText: context.translation.comments, textInputType: TextInputType.multiline, alignLabelWithHint: true, onChange: (text) { _serviceRequest.comments = text; }, onSaved: (text) { _serviceRequest.comments = text; }, ), 16.height, Consumer( builder: (context, snapshot, _) => AppFilledButton( label: context.translation.save, loading: snapshot.isLoading ?? false, onPressed: () async { _formKey.currentState!.save(); _serviceRequest.device = asset; _serviceRequest.firstAction = firstAction; await snapshot.updateRequest(user: userProvider.user!, request: _serviceRequest); Navigator.pop(context, true); }, ), ), 16.height, ], ), ), ), ) ], ); } }