diff --git a/lib/models/service_request/service_report.dart b/lib/models/service_request/service_report.dart index 25ae4ccb..71966b8b 100644 --- a/lib/models/service_request/service_report.dart +++ b/lib/models/service_request/service_report.dart @@ -1,5 +1,8 @@ import 'dart:typed_data'; +import 'package:flutter/cupertino.dart'; +import 'package:fluttertoast/fluttertoast.dart'; +import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_request/spare_parts.dart'; import 'package:test_sa/models/service_request/supp_engineer_work_orders.dart'; @@ -266,8 +269,8 @@ class ServiceReport { if (reason != null) { map['reason'] = reason.toJson(); } - map['startofWorkTime'] = startofWorkTime; - map['endofWorkTime'] = endofWorkTime; + map['startofWorkTime'] = "2023-10-30T10:14:07.032021"; + map['endofWorkTime'] = "2023-10-30T10:15:07.032021"; map['workingHours'] = workingHours; map['travelingHours'] = travelingHours; map['travelingExpenses'] = travelingExpenses; @@ -302,7 +305,19 @@ class ServiceReport { return map; } - Future validate() async { + Future validate(BuildContext context) async { + if (calllastSituation == null) { + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.callLastSituation}"); + return false; + } + if (sparePartsWorkOrders?.isEmpty ?? true) { + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.partNo}"); + return false; + } + if (reason == null) { + await Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.reason}"); + return false; + } return true; } } diff --git a/lib/models/service_request/spare_parts.dart b/lib/models/service_request/spare_parts.dart index cd981eb2..2f080f76 100644 --- a/lib/models/service_request/spare_parts.dart +++ b/lib/models/service_request/spare_parts.dart @@ -41,7 +41,7 @@ class SparePartsWorkOrders extends Base { if (sparePart != null) { map['sparePart'] = sparePart.toJson(); } - map['qty'] = qty; + map['qty'] = qty ?? 0; map['returnQty'] = returnQty; map['installQty'] = installQty; return map; diff --git a/lib/views/pages/user/requests/service_request_details.dart b/lib/views/pages/user/requests/service_request_details.dart index 88afcebc..2e83457b 100644 --- a/lib/views/pages/user/requests/service_request_details.dart +++ b/lib/views/pages/user/requests/service_request_details.dart @@ -209,7 +209,7 @@ class ServiceRequestDetailsPage extends StatelessWidget { padding: const EdgeInsets.all(16), child: informationCard(), ).expanded, - if (_userProvider.user.type != UsersTypes.engineer || (serviceRequest.statusValue == 5 || serviceRequest.statusValue == 3)) + if (_userProvider.user.type == UsersTypes.engineer || (serviceRequest.statusValue == 5 || serviceRequest.statusValue == 3)) (serviceRequest.firstAction == null ? AppFilledButton( label: context.translation.firstAction, diff --git a/lib/views/pages/user/requests/work_order/create_service_report.dart b/lib/views/pages/user/requests/work_order/create_service_report.dart index 84c9f652..0764b1c2 100644 --- a/lib/views/pages/user/requests/work_order/create_service_report.dart +++ b/lib/views/pages/user/requests/work_order/create_service_report.dart @@ -21,6 +21,7 @@ import 'package:test_sa/providers/work_order/reason_provider.dart'; import 'package:test_sa/providers/work_order/service_type_provider.dart'; import 'package:test_sa/views/widgets/e_signature/e_signature.dart'; import 'package:test_sa/views/widgets/loaders/loading_manager.dart'; +import 'package:test_sa/views/widgets/status/report/service_report_assistant_employee_menu.dart'; import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart'; import '../../../../../controllers/providers/api/status_drop_down/report/service_types_provider.dart'; @@ -31,7 +32,6 @@ import '../../../../../new_views/common_widgets/default_app_bar.dart'; import '../../../../../new_views/common_widgets/single_item_drop_down_menu.dart'; import '../../../../widgets/date_and_time/date_picker.dart'; import '../../../../widgets/images/multi_image_picker.dart'; -import '../../../../widgets/status/report/service_report_assistant_employee_menu.dart'; /// todo : TBD (compare with the design) class CreateServiceReport extends StatefulWidget { @@ -84,7 +84,7 @@ class _CreateServiceReportState extends State with TickerPr setState(() {}); _serviceReport.callRequest = await _serviceRequestsProvider.getCallRequestForWorkOrder(callId: widget.request.id); await _assetTypeProvider.getTypes(user: _userProvider.user, host: _settingProvider.host); - // _serviceReport.engineer = Engineer.fromJson(_callRequestForWorkOrder?.assignedEmployee?.toJson()); + _serviceReport.assignedEmployee = _serviceReport.callRequest?.assignedEmployee; _spareParts = await _partsProvider.getPartsList(assetId: widget.request.deviceId); _isLoading = false; setState(() {}); @@ -192,7 +192,7 @@ class _CreateServiceReportState extends State with TickerPr initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.sparePart : null, onSelect: (part) { _serviceReport.sparePartsWorkOrders.clear(); - _serviceReport.sparePartsWorkOrders.add(SparePartsWorkOrders(sparePart: part)); + _serviceReport.sparePartsWorkOrders.add(SparePartsWorkOrders(id: 0, sparePart: part, qty: 0)); setState(() {}); }, ), @@ -201,8 +201,11 @@ class _CreateServiceReportState extends State with TickerPr labelText: context.translation.quantity, textInputType: TextInputType.number, enable: _serviceReport.sparePartsWorkOrders.isNotEmpty, + initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.qty?.toString() : null, onSaved: (text) { - _serviceReport.sparePartsWorkOrders.first.qty = num.tryParse(text ?? ""); + if (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) { + _serviceReport.sparePartsWorkOrders.first.qty = num.tryParse(text ?? ""); + } }, ), 8.height, @@ -227,7 +230,7 @@ class _CreateServiceReportState extends State with TickerPr AppFilledButton( label: context.translation.submitRequest, onPressed: () async { - if ((!_formKey.currentState.validate()) || (!(await _serviceReport.validate()))) { + if ((!_formKey.currentState.validate()) || (!(await _serviceReport.validate(context)))) { setState(() {}); return; } diff --git a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart index 2cac7c98..b12178c9 100644 --- a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart +++ b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart @@ -156,13 +156,14 @@ class WorkOrderListPage extends StatelessWidget { ); }, ).expanded, - if (_userProvider.user.type != UsersTypes.engineer && (serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)) + if (_userProvider.user.type == UsersTypes.engineer && (serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3)) AppFilledButton( - label: context.translation.createWorkOrder, - maxWidth: true, - onPressed: () { - Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreateServiceReport(request: serviceRequest))); - }).paddingOnly(start: 16, end: 16, bottom: 16) + label: context.translation.createWorkOrder, + maxWidth: true, + onPressed: () { + Navigator.of(context).push(MaterialPageRoute(builder: (_) => CreateServiceReport(request: serviceRequest))); + }, + ).paddingOnly(start: 16, end: 16, bottom: 16) ], ); },