timer picker added, and code improvements
parent
bcb54f6279
commit
62dd395a73
@ -1,241 +1,241 @@
|
||||
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<FirstActionBottomSheet> createState() => _FirstActionBottomSheetState();
|
||||
}
|
||||
|
||||
class _FirstActionBottomSheetState extends State<FirstActionBottomSheet> {
|
||||
late ServiceRequest _serviceRequest;
|
||||
Asset? asset;
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
|
||||
Lookup? firstAction;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
_serviceRequest = widget.request;
|
||||
firstAction = _serviceRequest.firstAction;
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final userProvider = Provider.of<UserProvider>(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<Lookup, FirstActionStatusProvider>(
|
||||
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<SettingProvider>(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<Lookup, LoanAvailabilityProvider>(
|
||||
// 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<ServiceRequestsProvider>(
|
||||
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,
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
}
|
||||
// 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;
|
||||
// todo @delete
|
||||
// const FirstActionBottomSheet({Key? key, required this.request}) : super(key: key);
|
||||
//
|
||||
// @override
|
||||
// State<FirstActionBottomSheet> createState() => _FirstActionBottomSheetState();
|
||||
// }
|
||||
//
|
||||
// class _FirstActionBottomSheetState extends State<FirstActionBottomSheet> {
|
||||
// late ServiceRequest _serviceRequest;
|
||||
// Asset? asset;
|
||||
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
//
|
||||
// Lookup? firstAction;
|
||||
//
|
||||
// @override
|
||||
// void initState() {
|
||||
// super.initState();
|
||||
// _serviceRequest = widget.request;
|
||||
// firstAction = _serviceRequest.firstAction;
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// final userProvider = Provider.of<UserProvider>(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<Lookup, FirstActionStatusProvider>(
|
||||
// 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<SettingProvider>(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<Lookup, LoanAvailabilityProvider>(
|
||||
// // 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<ServiceRequestsProvider>(
|
||||
// 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,
|
||||
// ],
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// )
|
||||
// ],
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -1,398 +1,398 @@
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
||||
import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/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_report.dart';
|
||||
import 'package:test_sa/models/service_request/service_request.dart';
|
||||
import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
|
||||
import 'package:test_sa/views/pages/user/requests/work_order/part_no_button.dart';
|
||||
import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
|
||||
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
|
||||
|
||||
import '../../../../../attachment.dart';
|
||||
import '../../../../../models/lookup.dart';
|
||||
import '../../../../../models/service_request/spare_parts.dart';
|
||||
import '../../../../../models/service_request/wo_call_request.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/default_app_bar.dart';
|
||||
import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
|
||||
import '../../../../../providers/service_request_providers/equipment_status_provider.dart';
|
||||
import '../../../../../providers/work_order/reason_provider.dart';
|
||||
import '../../../../../providers/work_order/service_type_provider.dart';
|
||||
import '../../../../widgets/date_and_time/date_picker.dart';
|
||||
import '../../../../widgets/e_signature/e_signature.dart';
|
||||
import '../../../../widgets/images/multi_image_picker.dart';
|
||||
import '../../../../widgets/status/report/service_report_assistant_employee_menu.dart';
|
||||
import '../../../../widgets/status/report/service_report_fault_description.dart';
|
||||
import '../../../../widgets/status/report/service_report_repair_location.dart';
|
||||
import '../../../../widgets/timer/app_timer.dart';
|
||||
|
||||
class EditServiceReport extends StatefulWidget {
|
||||
static const String id = "/edit-service-report";
|
||||
final ServiceRequest request;
|
||||
final ServiceReport report;
|
||||
|
||||
const EditServiceReport({Key? key, required this.request, required this.report}) : super(key: key);
|
||||
|
||||
@override
|
||||
_EditServiceReportState createState() => _EditServiceReportState();
|
||||
}
|
||||
|
||||
class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
|
||||
late UserProvider _userProvider;
|
||||
late SettingProvider _settingProvider;
|
||||
late ServiceRequestsProvider _serviceRequestsProvider;
|
||||
List<SparePart> _spareParts = [];
|
||||
late ServiceReport _serviceReport;
|
||||
bool _isLoading = false;
|
||||
List<File> _files = [];
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
final TextEditingController _faultController = TextEditingController();
|
||||
final TextEditingController _workPreformedController = TextEditingController();
|
||||
final TextEditingController _partQtyController = TextEditingController();
|
||||
late ServiceStatusProvider _assetTypeProvider;
|
||||
late CallRequest _callRequestForWorkOrder;
|
||||
|
||||
Asset? loanAvailabilityAsset;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_serviceReport = widget.report;
|
||||
_files = widget.report.attachmentsWorkOrder?.map((e) => File(e.name!)).toList() ?? [];
|
||||
_spareParts = _serviceReport.sparePartsWorkOrders?.map((e) => e.sparePart!).toList() ?? [];
|
||||
super.initState();
|
||||
if (context.mounted) {
|
||||
Provider.of<ReasonProvider>(context, listen: false).reset();
|
||||
Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _serviceReport.callRequest!.id.toString();
|
||||
}
|
||||
}
|
||||
|
||||
void getRequestForWorkOrder() async {
|
||||
_isLoading = true;
|
||||
setState(() {});
|
||||
_callRequestForWorkOrder = (await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: widget.request.id!))!;
|
||||
_serviceReport.assignedEmployee = _callRequestForWorkOrder.assignedEmployee;
|
||||
await _assetTypeProvider.getTypes();
|
||||
_isLoading = false;
|
||||
setState(() {});
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_faultController.dispose();
|
||||
_workPreformedController.dispose();
|
||||
_partQtyController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
_userProvider = Provider.of<UserProvider>(context);
|
||||
_settingProvider = Provider.of<SettingProvider>(context);
|
||||
_serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
|
||||
_assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
|
||||
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder.assetType, orElse: null);
|
||||
return Scaffold(
|
||||
key: _scaffoldKey,
|
||||
appBar: DefaultAppBar(title: context.translation.updateWorkOrder),
|
||||
body: SafeArea(
|
||||
child: LoadingManager(
|
||||
isLoading: _isLoading,
|
||||
isFailedLoading: false,
|
||||
stateCode: 200,
|
||||
onRefresh: () async {},
|
||||
child: Form(
|
||||
key: _formKey,
|
||||
child: Column(
|
||||
children: [
|
||||
SingleChildScrollView(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
Card(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
children: [
|
||||
widget.request.hospitalName!.heading5(context),
|
||||
8.height,
|
||||
"${context.translation.assetNo}: ${widget.request.deviceNumber}".bodyText(context),
|
||||
"${context.translation.callId}: ${widget.request.requestCode}".bodyText(context),
|
||||
],
|
||||
).paddingAll(16),
|
||||
),
|
||||
8.height,
|
||||
ADatePicker(
|
||||
label: context.translation.returnToService,
|
||||
date: DateTime.tryParse(_serviceReport.visitDate ?? ""),
|
||||
formatDateWithTime: true,
|
||||
onDatePicker: (selectedDate) {
|
||||
showTimePicker(
|
||||
context: context,
|
||||
initialTime: TimeOfDay.now(),
|
||||
).then((selectedTime) {
|
||||
if (selectedTime != null) {
|
||||
DateTime selectedDateTime = DateTime(
|
||||
selectedDate.year,
|
||||
selectedDate.month,
|
||||
selectedDate.day,
|
||||
selectedTime.hour,
|
||||
selectedTime.minute,
|
||||
);
|
||||
setState(() {
|
||||
_serviceReport.visitDate = selectedDateTime.toIso8601String();
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
AppTimer(
|
||||
label: context.translation.workingHours,
|
||||
timer: _serviceReport.timer,
|
||||
enabled: _serviceReport.endofWorkTime == null,
|
||||
onChange: (timer) async {
|
||||
_serviceReport.timer = timer;
|
||||
return true;
|
||||
},
|
||||
onPick: (value) {},
|
||||
),
|
||||
8.height,
|
||||
LoadingManager(
|
||||
isLoading: _assetTypeProvider.isLoading,
|
||||
isFailedLoading: _assetTypeProvider.statuses == null,
|
||||
stateCode: _assetTypeProvider.stateCode,
|
||||
onRefresh: () async {
|
||||
_assetTypeProvider.reset();
|
||||
await _assetTypeProvider.getTypes();
|
||||
_serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
|
||||
(element) => element.value == _serviceReport.callRequest?.assetType,
|
||||
orElse: null,
|
||||
);
|
||||
},
|
||||
child: AppTextFormField(
|
||||
labelText: context.translation.assetType,
|
||||
initialValue: _serviceReport.assetType?.name,
|
||||
textAlign: TextAlign.center,
|
||||
enable: false,
|
||||
style: Theme.of(context).textTheme.titleMedium,
|
||||
),
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
|
||||
context: context,
|
||||
title: context.translation.equipmentStatus,
|
||||
initialValue: _serviceReport.equipmentStatus,
|
||||
onSelect: (value) {
|
||||
_serviceReport.equipmentStatus = value;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Lookup, ReasonProvider>(
|
||||
context: context,
|
||||
title: context.translation.reason,
|
||||
initialValue: _serviceReport.reason,
|
||||
onSelect: (value) {
|
||||
if (value != null) {
|
||||
_serviceReport.reason = value;
|
||||
}
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Lookup, ServiceTypeProvider>(
|
||||
context: context,
|
||||
title: context.translation.serviceType,
|
||||
initialValue: _serviceReport.serviceType,
|
||||
onSelect: (value) {
|
||||
_serviceReport.serviceType = value;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
ServiceReportLastCallsMenu(
|
||||
report: _serviceReport,
|
||||
title: context.translation.callLastSituation,
|
||||
parentId: widget.request.id,
|
||||
onSelect: (status) {
|
||||
_serviceReport.calllastSituation = status;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
ServiceReportFaultDescription(
|
||||
requestId: widget.request.id,
|
||||
initialValue: _serviceReport.faultDescription,
|
||||
onSelect: (status) {
|
||||
_serviceReport.faultDescription = status;
|
||||
_workPreformedController.text = _serviceReport.faultDescription?.workPerformed ?? "";
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: context.translation.solution,
|
||||
initialValue: _serviceReport.faultDescription?.workPerformed,
|
||||
textAlign: TextAlign.center,
|
||||
enable: false,
|
||||
controller: _workPreformedController,
|
||||
),
|
||||
8.height,
|
||||
SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
|
||||
context: context,
|
||||
title: context.translation.loanAvailability,
|
||||
initialValue: _serviceReport.loanAvailablity,
|
||||
onSelect: (status) {
|
||||
if (status != null) {
|
||||
setState(() {
|
||||
_serviceReport.loanAvailablity = status;
|
||||
if (_serviceReport.loanAvailablity?.value != 1) {
|
||||
loanAvailabilityAsset = null;
|
||||
_serviceReport.assetLoan = null;
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
),
|
||||
if (_serviceReport.loanAvailablity?.value == 1) 8.height,
|
||||
if (_serviceReport.loanAvailablity?.value == 1)
|
||||
PickAsset(
|
||||
device: loanAvailabilityAsset, // ?? _serviceReport.device,
|
||||
onPickAsset: (asset) {
|
||||
_serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson());
|
||||
setState(() {
|
||||
loanAvailabilityAsset = asset;
|
||||
});
|
||||
},
|
||||
),
|
||||
if (_serviceReport.assetLoan != null && loanAvailabilityAsset == null)
|
||||
Card(child: "${context.translation.assetNumber}: ${_serviceReport.assetLoan?.assetNumber}".bodyText(context).paddingAll(16)),
|
||||
8.height,
|
||||
ServiceReportAssistantEmployeeMenu(
|
||||
title: context.translation.assignAssistant,
|
||||
assetId: _serviceReport.callRequest!.asset!.id!,
|
||||
initialValue: (_serviceReport.assistantEmployees?.isNotEmpty ?? false) ? _serviceReport.assistantEmployees?.first : null,
|
||||
onSelect: (employee) {
|
||||
if (employee == null) {
|
||||
_serviceReport.assistantEmployees = [];
|
||||
} else {
|
||||
_serviceReport.assistantEmployees = [employee.copyWith(id: 0)];
|
||||
}
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: context.translation.travelingExpense,
|
||||
initialValue: _serviceReport.travelingExpenses?.toString(),
|
||||
textInputType: TextInputType.number,
|
||||
onSaved: (value) {
|
||||
_serviceReport.travelingExpenses = double.tryParse(value) ?? 0.0;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
labelText: context.translation.travelingHours,
|
||||
initialValue: _serviceReport.travelingHours?.toString(),
|
||||
textInputType: TextInputType.number,
|
||||
onSaved: (value) {
|
||||
_serviceReport.travelingHours = double.tryParse(value) ?? 0.0;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
AppTextFormField(
|
||||
initialValue: _serviceReport.comment,
|
||||
labelText: context.translation.technicalComment,
|
||||
alignLabelWithHint: true,
|
||||
textInputType: TextInputType.multiline,
|
||||
onSaved: (value) {
|
||||
_serviceReport.comment = value;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
ServiceReportRepairLocation(
|
||||
label: context.translation.repairLocation,
|
||||
initialValue: _serviceReport.repairLocation,
|
||||
onSelect: (status) {
|
||||
_serviceReport.repairLocation = status;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
PartNoButton(
|
||||
controller: _partQtyController,
|
||||
spareParts: _spareParts,
|
||||
initialList: _serviceReport.sparePartsWorkOrders,
|
||||
onChange: (parts) {
|
||||
_serviceReport.sparePartsWorkOrders = parts;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
MultiFilesPicker(label: context.translation.attachImage, files: _files),
|
||||
8.height,
|
||||
ESignature(
|
||||
title: context.translation.engSign,
|
||||
oldSignature: _serviceReport.engSignature,
|
||||
newSignature: _serviceReport.localEngSignature,
|
||||
onSaved: (signature) {
|
||||
if (signature == null || signature.isEmpty) {
|
||||
setState(() {});
|
||||
return;
|
||||
}
|
||||
_serviceReport.localEngSignature = signature;
|
||||
_serviceReport.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
||||
},
|
||||
),
|
||||
8.height,
|
||||
ESignature(
|
||||
title: context.translation.nurseSignature,
|
||||
oldSignature: _serviceReport.nurseSignature,
|
||||
newSignature: _serviceReport.localNurseSignature,
|
||||
onSaved: (signature) {
|
||||
if (signature == null || signature.isEmpty) {
|
||||
setState(() {});
|
||||
return;
|
||||
}
|
||||
_serviceReport.localNurseSignature = signature;
|
||||
_serviceReport.nurseSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
||||
},
|
||||
),
|
||||
24.height,
|
||||
],
|
||||
),
|
||||
).expanded,
|
||||
AppFilledButton(
|
||||
label: context.translation.updateRequest,
|
||||
onPressed: () async {
|
||||
if ((!_formKey.currentState!.validate()) || (!(await _serviceReport.validate(context)))) {
|
||||
setState(() {});
|
||||
return;
|
||||
}
|
||||
_formKey.currentState!.save();
|
||||
_serviceReport.attachmentsWorkOrder ??= [];
|
||||
if (_files.isEmpty) _serviceReport.attachmentsWorkOrder = [];
|
||||
try {
|
||||
for (var file in _files) {
|
||||
_serviceReport.attachmentsWorkOrder!.add(Attachment(id: 0, name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
|
||||
}
|
||||
} catch (error) {
|
||||
print(error);
|
||||
}
|
||||
|
||||
await _serviceRequestsProvider.updateServiceReport(context, report: _serviceReport);
|
||||
},
|
||||
),
|
||||
],
|
||||
).paddingAll(16),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
// import 'dart:convert';
|
||||
// import 'dart:io';
|
||||
//
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:provider/provider.dart';
|
||||
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
||||
// import 'package:test_sa/controllers/providers/api/status_drop_down/report/service_types_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/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_report.dart';
|
||||
// import 'package:test_sa/models/service_request/service_request.dart';
|
||||
// import 'package:test_sa/providers/service_request_providers/loan_availability_provider.dart';
|
||||
// import 'package:test_sa/views/pages/user/requests/work_order/part_no_button.dart';
|
||||
// import 'package:test_sa/views/widgets/equipment/pick_asset.dart';
|
||||
// import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
|
||||
// import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
|
||||
//
|
||||
// import '../../../../../attachment.dart';
|
||||
// import '../../../../../models/lookup.dart';
|
||||
// import '../../../../../models/service_request/spare_parts.dart';
|
||||
// import '../../../../../models/service_request/wo_call_request.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/default_app_bar.dart';
|
||||
// import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart';
|
||||
// import '../../../../../providers/service_request_providers/equipment_status_provider.dart';
|
||||
// import '../../../../../providers/work_order/reason_provider.dart';
|
||||
// import '../../../../../providers/work_order/service_type_provider.dart';
|
||||
// import '../../../../widgets/date_and_time/date_picker.dart';
|
||||
// import '../../../../widgets/e_signature/e_signature.dart';
|
||||
// import '../../../../widgets/images/multi_image_picker.dart';
|
||||
// import '../../../../widgets/status/report/service_report_assistant_employee_menu.dart';
|
||||
// import '../../../../widgets/status/report/service_report_fault_description.dart';
|
||||
// import '../../../../widgets/status/report/service_report_repair_location.dart';
|
||||
// import '../../../../widgets/timer/app_timer.dart';
|
||||
//
|
||||
// class EditServiceReport extends StatefulWidget {
|
||||
// static const String id = "/edit-service-report";
|
||||
// final ServiceRequest request;
|
||||
// final ServiceReport report;
|
||||
//
|
||||
// const EditServiceReport({Key? key, required this.request, required this.report}) : super(key: key);
|
||||
//
|
||||
// @override
|
||||
// _EditServiceReportState createState() => _EditServiceReportState();
|
||||
// }
|
||||
// // todo @delete
|
||||
// class _EditServiceReportState extends State<EditServiceReport> with TickerProviderStateMixin {
|
||||
// late UserProvider _userProvider;
|
||||
// late SettingProvider _settingProvider;
|
||||
// late ServiceRequestsProvider _serviceRequestsProvider;
|
||||
// List<SparePart> _spareParts = [];
|
||||
// late ServiceReport _serviceReport;
|
||||
// bool _isLoading = false;
|
||||
// List<File> _files = [];
|
||||
// final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
// final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
|
||||
// final TextEditingController _faultController = TextEditingController();
|
||||
// final TextEditingController _workPreformedController = TextEditingController();
|
||||
// final TextEditingController _partQtyController = TextEditingController();
|
||||
// late ServiceStatusProvider _assetTypeProvider;
|
||||
// late CallRequest _callRequestForWorkOrder;
|
||||
//
|
||||
// Asset? loanAvailabilityAsset;
|
||||
//
|
||||
// @override
|
||||
// void initState() {
|
||||
// _serviceReport = widget.report;
|
||||
// _files = widget.report.attachmentsWorkOrder?.map((e) => File(e.name!)).toList() ?? [];
|
||||
// _spareParts = _serviceReport.sparePartsWorkOrders?.map((e) => e.sparePart!).toList() ?? [];
|
||||
// super.initState();
|
||||
// if (context.mounted) {
|
||||
// Provider.of<ReasonProvider>(context, listen: false).reset();
|
||||
// Provider.of<ReasonProvider>(context, listen: false).serviceRequestId = _serviceReport.callRequest!.id.toString();
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// void getRequestForWorkOrder() async {
|
||||
// _isLoading = true;
|
||||
// setState(() {});
|
||||
// _callRequestForWorkOrder = (await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: widget.request.id!))!;
|
||||
// _serviceReport.assignedEmployee = _callRequestForWorkOrder.assignedEmployee;
|
||||
// await _assetTypeProvider.getTypes();
|
||||
// _isLoading = false;
|
||||
// setState(() {});
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// void dispose() {
|
||||
// _faultController.dispose();
|
||||
// _workPreformedController.dispose();
|
||||
// _partQtyController.dispose();
|
||||
// super.dispose();
|
||||
// }
|
||||
//
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// _userProvider = Provider.of<UserProvider>(context);
|
||||
// _settingProvider = Provider.of<SettingProvider>(context);
|
||||
// _serviceRequestsProvider = Provider.of<ServiceRequestsProvider>(context);
|
||||
// _assetTypeProvider = Provider.of<ServiceStatusProvider>(context);
|
||||
// _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere((element) => element.value == _callRequestForWorkOrder.assetType, orElse: null);
|
||||
// return Scaffold(
|
||||
// key: _scaffoldKey,
|
||||
// appBar: DefaultAppBar(title: context.translation.updateWorkOrder),
|
||||
// body: SafeArea(
|
||||
// child: LoadingManager(
|
||||
// isLoading: _isLoading,
|
||||
// isFailedLoading: false,
|
||||
// stateCode: 200,
|
||||
// onRefresh: () async {},
|
||||
// child: Form(
|
||||
// key: _formKey,
|
||||
// child: Column(
|
||||
// children: [
|
||||
// SingleChildScrollView(
|
||||
// child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
// children: [
|
||||
// Card(
|
||||
// child: Column(
|
||||
// crossAxisAlignment: CrossAxisAlignment.stretch,
|
||||
// children: [
|
||||
// widget.request.hospitalName!.heading5(context),
|
||||
// 8.height,
|
||||
// "${context.translation.assetNo}: ${widget.request.deviceNumber}".bodyText(context),
|
||||
// "${context.translation.callId}: ${widget.request.requestCode}".bodyText(context),
|
||||
// ],
|
||||
// ).paddingAll(16),
|
||||
// ),
|
||||
// 8.height,
|
||||
// ADatePicker(
|
||||
// label: context.translation.returnToService,
|
||||
// date: DateTime.tryParse(_serviceReport.visitDate ?? ""),
|
||||
// formatDateWithTime: true,
|
||||
// onDatePicker: (selectedDate) {
|
||||
// showTimePicker(
|
||||
// context: context,
|
||||
// initialTime: TimeOfDay.now(),
|
||||
// ).then((selectedTime) {
|
||||
// if (selectedTime != null) {
|
||||
// DateTime selectedDateTime = DateTime(
|
||||
// selectedDate.year,
|
||||
// selectedDate.month,
|
||||
// selectedDate.day,
|
||||
// selectedTime.hour,
|
||||
// selectedTime.minute,
|
||||
// );
|
||||
// setState(() {
|
||||
// _serviceReport.visitDate = selectedDateTime.toIso8601String();
|
||||
// });
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// AppTimer(
|
||||
// label: context.translation.workingHours,
|
||||
// timer: _serviceReport.timer,
|
||||
// enabled: _serviceReport.endofWorkTime == null,
|
||||
// onChange: (timer) async {
|
||||
// _serviceReport.timer = timer;
|
||||
// return true;
|
||||
// },
|
||||
// onPick: (value) {},
|
||||
// ),
|
||||
// 8.height,
|
||||
// LoadingManager(
|
||||
// isLoading: _assetTypeProvider.isLoading,
|
||||
// isFailedLoading: _assetTypeProvider.statuses == null,
|
||||
// stateCode: _assetTypeProvider.stateCode,
|
||||
// onRefresh: () async {
|
||||
// _assetTypeProvider.reset();
|
||||
// await _assetTypeProvider.getTypes();
|
||||
// _serviceReport.assetType = _assetTypeProvider.statuses?.firstWhere(
|
||||
// (element) => element.value == _serviceReport.callRequest?.assetType,
|
||||
// orElse: null,
|
||||
// );
|
||||
// },
|
||||
// child: AppTextFormField(
|
||||
// labelText: context.translation.assetType,
|
||||
// initialValue: _serviceReport.assetType?.name,
|
||||
// textAlign: TextAlign.center,
|
||||
// enable: false,
|
||||
// style: Theme.of(context).textTheme.titleMedium,
|
||||
// ),
|
||||
// ),
|
||||
// 8.height,
|
||||
// SingleItemDropDownMenu<Lookup, EquipmentStatusProvider>(
|
||||
// context: context,
|
||||
// title: context.translation.equipmentStatus,
|
||||
// initialValue: _serviceReport.equipmentStatus,
|
||||
// onSelect: (value) {
|
||||
// _serviceReport.equipmentStatus = value;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// SingleItemDropDownMenu<Lookup, ReasonProvider>(
|
||||
// context: context,
|
||||
// title: context.translation.reason,
|
||||
// initialValue: _serviceReport.reason,
|
||||
// onSelect: (value) {
|
||||
// if (value != null) {
|
||||
// _serviceReport.reason = value;
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// SingleItemDropDownMenu<Lookup, ServiceTypeProvider>(
|
||||
// context: context,
|
||||
// title: context.translation.serviceType,
|
||||
// initialValue: _serviceReport.serviceType,
|
||||
// onSelect: (value) {
|
||||
// _serviceReport.serviceType = value;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// ServiceReportLastCallsMenu(
|
||||
// report: _serviceReport,
|
||||
// title: context.translation.callLastSituation,
|
||||
// parentId: widget.request.id,
|
||||
// onSelect: (status) {
|
||||
// _serviceReport.calllastSituation = status;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// ServiceReportFaultDescription(
|
||||
// requestId: widget.request.id,
|
||||
// initialValue: _serviceReport.faultDescription,
|
||||
// onSelect: (status) {
|
||||
// _serviceReport.faultDescription = status;
|
||||
// _workPreformedController.text = _serviceReport.faultDescription?.workPerformed ?? "";
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// AppTextFormField(
|
||||
// labelText: context.translation.solution,
|
||||
// initialValue: _serviceReport.faultDescription?.workPerformed,
|
||||
// textAlign: TextAlign.center,
|
||||
// enable: false,
|
||||
// controller: _workPreformedController,
|
||||
// ),
|
||||
// 8.height,
|
||||
// SingleItemDropDownMenu<Lookup, LoanAvailabilityProvider>(
|
||||
// context: context,
|
||||
// title: context.translation.loanAvailability,
|
||||
// initialValue: _serviceReport.loanAvailablity,
|
||||
// onSelect: (status) {
|
||||
// if (status != null) {
|
||||
// setState(() {
|
||||
// _serviceReport.loanAvailablity = status;
|
||||
// if (_serviceReport.loanAvailablity?.value != 1) {
|
||||
// loanAvailabilityAsset = null;
|
||||
// _serviceReport.assetLoan = null;
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
// if (_serviceReport.loanAvailablity?.value == 1) 8.height,
|
||||
// if (_serviceReport.loanAvailablity?.value == 1)
|
||||
// PickAsset(
|
||||
// device: loanAvailabilityAsset, // ?? _serviceReport.device,
|
||||
// onPickAsset: (asset) {
|
||||
// _serviceReport.assetLoan = AssetInfo.fromJson(asset.toJson());
|
||||
// setState(() {
|
||||
// loanAvailabilityAsset = asset;
|
||||
// });
|
||||
// },
|
||||
// ),
|
||||
// if (_serviceReport.assetLoan != null && loanAvailabilityAsset == null)
|
||||
// Card(child: "${context.translation.assetNumber}: ${_serviceReport.assetLoan?.assetNumber}".bodyText(context).paddingAll(16)),
|
||||
// 8.height,
|
||||
// ServiceReportAssistantEmployeeMenu(
|
||||
// title: context.translation.assignAssistant,
|
||||
// assetId: _serviceReport.callRequest!.asset!.id!,
|
||||
// initialValue: (_serviceReport.assistantEmployees?.isNotEmpty ?? false) ? _serviceReport.assistantEmployees?.first : null,
|
||||
// onSelect: (employee) {
|
||||
// if (employee == null) {
|
||||
// _serviceReport.assistantEmployees = [];
|
||||
// } else {
|
||||
// _serviceReport.assistantEmployees = [employee.copyWith(id: 0)];
|
||||
// }
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// AppTextFormField(
|
||||
// labelText: context.translation.travelingExpense,
|
||||
// initialValue: _serviceReport.travelingExpenses?.toString(),
|
||||
// textInputType: TextInputType.number,
|
||||
// onSaved: (value) {
|
||||
// _serviceReport.travelingExpenses = double.tryParse(value) ?? 0.0;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// AppTextFormField(
|
||||
// labelText: context.translation.travelingHours,
|
||||
// initialValue: _serviceReport.travelingHours?.toString(),
|
||||
// textInputType: TextInputType.number,
|
||||
// onSaved: (value) {
|
||||
// _serviceReport.travelingHours = double.tryParse(value) ?? 0.0;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// AppTextFormField(
|
||||
// initialValue: _serviceReport.comment,
|
||||
// labelText: context.translation.technicalComment,
|
||||
// alignLabelWithHint: true,
|
||||
// textInputType: TextInputType.multiline,
|
||||
// onSaved: (value) {
|
||||
// _serviceReport.comment = value;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// ServiceReportRepairLocation(
|
||||
// label: context.translation.repairLocation,
|
||||
// initialValue: _serviceReport.repairLocation,
|
||||
// onSelect: (status) {
|
||||
// _serviceReport.repairLocation = status;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// PartNoButton(
|
||||
// controller: _partQtyController,
|
||||
// spareParts: _spareParts,
|
||||
// initialList: _serviceReport.sparePartsWorkOrders,
|
||||
// onChange: (parts) {
|
||||
// _serviceReport.sparePartsWorkOrders = parts;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// MultiFilesPicker(label: context.translation.attachImage, files: _files),
|
||||
// 8.height,
|
||||
// ESignature(
|
||||
// title: context.translation.engSign,
|
||||
// oldSignature: _serviceReport.engSignature,
|
||||
// newSignature: _serviceReport.localEngSignature,
|
||||
// onSaved: (signature) {
|
||||
// if (signature == null || signature.isEmpty) {
|
||||
// setState(() {});
|
||||
// return;
|
||||
// }
|
||||
// _serviceReport.localEngSignature = signature;
|
||||
// _serviceReport.engSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
||||
// },
|
||||
// ),
|
||||
// 8.height,
|
||||
// ESignature(
|
||||
// title: context.translation.nurseSignature,
|
||||
// oldSignature: _serviceReport.nurseSignature,
|
||||
// newSignature: _serviceReport.localNurseSignature,
|
||||
// onSaved: (signature) {
|
||||
// if (signature == null || signature.isEmpty) {
|
||||
// setState(() {});
|
||||
// return;
|
||||
// }
|
||||
// _serviceReport.localNurseSignature = signature;
|
||||
// _serviceReport.nurseSignature = signature != null ? "${DateTime.now().toIso8601String()}.png|${base64Encode(signature)}" : null;
|
||||
// },
|
||||
// ),
|
||||
// 24.height,
|
||||
// ],
|
||||
// ),
|
||||
// ).expanded,
|
||||
// AppFilledButton(
|
||||
// label: context.translation.updateRequest,
|
||||
// onPressed: () async {
|
||||
// if ((!_formKey.currentState!.validate()) || (!(await _serviceReport.validate(context)))) {
|
||||
// setState(() {});
|
||||
// return;
|
||||
// }
|
||||
// _formKey.currentState!.save();
|
||||
// _serviceReport.attachmentsWorkOrder ??= [];
|
||||
// if (_files.isEmpty) _serviceReport.attachmentsWorkOrder = [];
|
||||
// try {
|
||||
// for (var file in _files) {
|
||||
// _serviceReport.attachmentsWorkOrder!.add(Attachment(id: 0, name: "${file.path.split("/").last}|${base64Encode(file.readAsBytesSync())}"));
|
||||
// }
|
||||
// } catch (error) {
|
||||
// print(error);
|
||||
// }
|
||||
//
|
||||
// await _serviceRequestsProvider.updateServiceReport(context, report: _serviceReport);
|
||||
// },
|
||||
// ),
|
||||
// ],
|
||||
// ).paddingAll(16),
|
||||
// ),
|
||||
// ),
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
@ -1,45 +1,45 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
||||
import 'package:test_sa/models/service_request/search_work_order.dart';
|
||||
import 'package:test_sa/models/service_request/service_report.dart';
|
||||
import 'package:test_sa/models/service_request/service_request.dart';
|
||||
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
|
||||
import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
|
||||
|
||||
import 'edit_service_report.dart';
|
||||
|
||||
class UpdateServiceReport extends StatefulWidget {
|
||||
final ServiceRequest request;
|
||||
final SearchWorkOrder workOrder;
|
||||
|
||||
const UpdateServiceReport({Key? key, required this.request, required this.workOrder}) : super(key: key);
|
||||
|
||||
@override
|
||||
_UpdateServiceReportState createState() => _UpdateServiceReportState();
|
||||
}
|
||||
|
||||
class _UpdateServiceReportState extends State<UpdateServiceReport> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
ServiceRequestsProvider().getSingleServiceReport(context, reportId: widget.workOrder.id!.toInt());
|
||||
return Scaffold(
|
||||
body: FutureBuilder<ServiceReport>(
|
||||
future: ServiceRequestsProvider().getSingleServiceReport(context, reportId: widget.workOrder.id!.toInt()),
|
||||
builder: (BuildContext context, AsyncSnapshot<ServiceReport> snapshot) {
|
||||
if (snapshot.hasError) {
|
||||
return FailedLoading(
|
||||
message: snapshot.error.toString(),
|
||||
onReload: () {
|
||||
setState(() {});
|
||||
},
|
||||
);
|
||||
}
|
||||
if (snapshot.connectionState == ConnectionState.done) {
|
||||
return EditServiceReport(report: snapshot.data as ServiceReport, request: widget.request);
|
||||
}
|
||||
return const Center(child: ALoading());
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
// import 'package:flutter/material.dart';
|
||||
// import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
||||
// import 'package:test_sa/models/service_request/search_work_order.dart';
|
||||
// import 'package:test_sa/models/service_request/service_report.dart';
|
||||
// import 'package:test_sa/models/service_request/service_request.dart';
|
||||
// import 'package:test_sa/views/widgets/loaders/app_loading.dart';
|
||||
// import 'package:test_sa/views/widgets/loaders/failed_loading.dart';
|
||||
//
|
||||
// import 'edit_service_report.dart';
|
||||
// todo @delete
|
||||
// class UpdateServiceReport extends StatefulWidget {
|
||||
// final ServiceRequest request;
|
||||
// final SearchWorkOrder workOrder;
|
||||
//
|
||||
// const UpdateServiceReport({Key? key, required this.request, required this.workOrder}) : super(key: key);
|
||||
//
|
||||
// @override
|
||||
// _UpdateServiceReportState createState() => _UpdateServiceReportState();
|
||||
// }
|
||||
//
|
||||
// class _UpdateServiceReportState extends State<UpdateServiceReport> {
|
||||
// @override
|
||||
// Widget build(BuildContext context) {
|
||||
// ServiceRequestsProvider().getSingleServiceReport(context, reportId: widget.workOrder.id!.toInt());
|
||||
// return Scaffold(
|
||||
// body: FutureBuilder<ServiceReport>(
|
||||
// future: ServiceRequestsProvider().getSingleServiceReport(context, reportId: widget.workOrder.id!.toInt()),
|
||||
// builder: (BuildContext context, AsyncSnapshot<ServiceReport> snapshot) {
|
||||
// if (snapshot.hasError) {
|
||||
// return FailedLoading(
|
||||
// message: snapshot.error.toString(),
|
||||
// onReload: () {
|
||||
// setState(() {});
|
||||
// },
|
||||
// );
|
||||
// }
|
||||
// if (snapshot.connectionState == ConnectionState.done) {
|
||||
// return EditServiceReport(report: snapshot.data as ServiceReport, request: widget.request);
|
||||
// }
|
||||
// return const Center(child: ALoading());
|
||||
// },
|
||||
// ),
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
|
||||
Loading…
Reference in New Issue