|
|
|
|
@ -2,25 +2,22 @@ import 'package:flutter/material.dart';
|
|
|
|
|
import 'package:fluttertoast/fluttertoast.dart';
|
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
|
import 'package:test_sa/controllers/providers/api/service_requests_provider.dart';
|
|
|
|
|
import 'package:test_sa/models/lookup.dart';
|
|
|
|
|
import 'package:test_sa/models/service_request/search_work_order.dart';
|
|
|
|
|
import 'package:test_sa/models/subtitle.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/app_text_form_field.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/buttons/app_button.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/loaders/app_loading.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/status/report/service_report_maintenance_situation.dart';
|
|
|
|
|
import 'package:test_sa/views/widgets/status/report/service_report_repair_location.dart';
|
|
|
|
|
|
|
|
|
|
import '../../../controllers/api_routes/http_status_manger.dart';
|
|
|
|
|
import '../../../controllers/localization/localization.dart';
|
|
|
|
|
import '../../../models/engineer.dart';
|
|
|
|
|
import '../../../models/service_report.dart';
|
|
|
|
|
import '../../app_style/sizing.dart';
|
|
|
|
|
import '../../widgets/date_and_time/time_picker.dart';
|
|
|
|
|
import '../../widgets/status/report/service_report_all_users.dart';
|
|
|
|
|
import '../../widgets/titles/app_sub_title.dart';
|
|
|
|
|
|
|
|
|
|
class WorkOrderDetailsBottomSheet extends StatefulWidget {
|
|
|
|
|
final SearchWorkOrders workOrder;
|
|
|
|
|
final SearchWorkOrder workOrder;
|
|
|
|
|
const WorkOrderDetailsBottomSheet({this.workOrder, Key key}) : super(key: key);
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@ -29,7 +26,7 @@ class WorkOrderDetailsBottomSheet extends StatefulWidget {
|
|
|
|
|
|
|
|
|
|
class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomSheet> {
|
|
|
|
|
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
|
|
|
|
SearchWorkOrders _workOrder;
|
|
|
|
|
SearchWorkOrder _workOrder;
|
|
|
|
|
bool _isLoading = false;
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
@ -73,14 +70,14 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
const ASubTitle("Assistant Employee"),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceReportAllUsers(
|
|
|
|
|
initialValue: _workOrder.assistantEmployees == null || _workOrder.assistantEmployees.isEmpty
|
|
|
|
|
? null
|
|
|
|
|
: Engineer(id: _workOrder.assistantEmployees?.first?.id, name: _workOrder.assistantEmployees?.first?.name),
|
|
|
|
|
onSelect: (engineer) {
|
|
|
|
|
_workOrder.assistantEmployees = [AssignedEmployee(id: engineer.id, name: engineer.name)];
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
// ServiceReportAllUsers(
|
|
|
|
|
// initialValue: _workOrder.assistantEmployees == null || _workOrder.assistantEmployees.isEmpty
|
|
|
|
|
// ? null
|
|
|
|
|
// : Engineer(id: _workOrder.assistantEmployees?.first?.id, name: _workOrder.assistantEmployees?.first?.name),
|
|
|
|
|
// onSelect: (engineer) {
|
|
|
|
|
// _workOrder.assistantEmployees = [AssignedEmployee(id: engineer.id, name: engineer.name)];
|
|
|
|
|
// },
|
|
|
|
|
// ),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
Row(
|
|
|
|
|
children: [
|
|
|
|
|
@ -93,11 +90,11 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
height: 8 * AppStyle.getScaleFactor(context),
|
|
|
|
|
),
|
|
|
|
|
ADateTimePicker(
|
|
|
|
|
date: DateTime.tryParse(_workOrder.startDate ?? ""),
|
|
|
|
|
date: DateTime.tryParse(_workOrder.startofWorkTime ?? ""),
|
|
|
|
|
from: DateTime.now().subtract(const Duration(days: 365)),
|
|
|
|
|
to: DateTime.now().add(const Duration(days: 365)),
|
|
|
|
|
onDateTimePicker: (date) {
|
|
|
|
|
_workOrder.startDate = date?.toIso8601String();
|
|
|
|
|
_workOrder.startofWorkTime = date?.toIso8601String();
|
|
|
|
|
setState(() {});
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
@ -114,11 +111,11 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
height: 8 * AppStyle.getScaleFactor(context),
|
|
|
|
|
),
|
|
|
|
|
ADateTimePicker(
|
|
|
|
|
date: DateTime.tryParse(_workOrder.endDate ?? ""),
|
|
|
|
|
date: DateTime.tryParse(_workOrder.endofWorkTime ?? ""),
|
|
|
|
|
from: DateTime.now().subtract(const Duration(days: 365)),
|
|
|
|
|
to: DateTime.now().add(const Duration(days: 365)),
|
|
|
|
|
onDateTimePicker: (date) {
|
|
|
|
|
_workOrder.endDate = date?.toIso8601String();
|
|
|
|
|
_workOrder.endofWorkTime = date?.toIso8601String();
|
|
|
|
|
setState(() {});
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
@ -133,9 +130,12 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
ATextFormField(
|
|
|
|
|
initialValue: null,
|
|
|
|
|
textAlign: TextAlign.center,
|
|
|
|
|
hintText: _workOrder.startDate == null
|
|
|
|
|
hintText: _workOrder.startofWorkTime == null
|
|
|
|
|
? "0"
|
|
|
|
|
: ((DateTime.tryParse(_workOrder.endDate)?.difference(DateTime.tryParse(_workOrder.startDate ?? ""))?.inMinutes ?? 0) / 60)?.toStringAsFixed(2)?.toString() ?? "0",
|
|
|
|
|
: ((DateTime.tryParse(_workOrder.endofWorkTime ?? "")?.difference(DateTime.tryParse(_workOrder.startofWorkTime ?? ""))?.inMinutes ?? 0) / 60)
|
|
|
|
|
?.toStringAsFixed(2)
|
|
|
|
|
?.toString() ??
|
|
|
|
|
"0",
|
|
|
|
|
enable: false,
|
|
|
|
|
style: Theme.of(context).textTheme.titleMedium,
|
|
|
|
|
// validator: (value) => Validator.isNumeric(value) ? null : _subtitle.requiredWord,
|
|
|
|
|
@ -180,18 +180,18 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
const ASubTitle("Repair Location"),
|
|
|
|
|
const SizedBox(height: 4),
|
|
|
|
|
ServiceReportRepairLocation(
|
|
|
|
|
initialValue: _workOrder.repairLocation != null ? Lookup(name: _workOrder.repairLocation) : null,
|
|
|
|
|
initialValue: _workOrder.repairLocation,
|
|
|
|
|
onSelect: (status) {
|
|
|
|
|
_workOrder.repairLocation = status.name;
|
|
|
|
|
_workOrder.repairLocation = status;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 8),
|
|
|
|
|
ATextFormField(
|
|
|
|
|
labelText: "Technical Comments",
|
|
|
|
|
initialValue: _workOrder.reviewComment,
|
|
|
|
|
initialValue: _workOrder.comment,
|
|
|
|
|
textInputType: TextInputType.multiline,
|
|
|
|
|
onSaved: (value) {
|
|
|
|
|
_workOrder.reviewComment = value;
|
|
|
|
|
_workOrder.comment = value;
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
const SizedBox(height: 24),
|
|
|
|
|
@ -200,36 +200,38 @@ class _WorkOrderDetailsBottomSheetState extends State<WorkOrderDetailsBottomShee
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
AButton(
|
|
|
|
|
text: subtitle.update,
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
// _validate = true;
|
|
|
|
|
if (!_formKey.currentState.validate()) {
|
|
|
|
|
setState(() {});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// if (!_serviceReport.validate()) {
|
|
|
|
|
// setState(() {});
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
_formKey.currentState.save();
|
|
|
|
|
_isLoading
|
|
|
|
|
? const ALoading()
|
|
|
|
|
: AButton(
|
|
|
|
|
text: subtitle.update,
|
|
|
|
|
onPressed: () async {
|
|
|
|
|
// _validate = true;
|
|
|
|
|
if (!_formKey.currentState.validate()) {
|
|
|
|
|
setState(() {});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// if (!_serviceReport.validate()) {
|
|
|
|
|
// setState(() {});
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
_formKey.currentState.save();
|
|
|
|
|
|
|
|
|
|
_isLoading = true;
|
|
|
|
|
setState(() {});
|
|
|
|
|
_isLoading = true;
|
|
|
|
|
setState(() {});
|
|
|
|
|
|
|
|
|
|
int status = await Provider.of<ServiceRequestsProvider>(context).updateServiceReport(report: ServiceReport());
|
|
|
|
|
_isLoading = false;
|
|
|
|
|
setState(() {});
|
|
|
|
|
if (status >= 200 && status < 300) {
|
|
|
|
|
Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully);
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
// Navigator.of(context).pop();
|
|
|
|
|
} else {
|
|
|
|
|
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: subtitle);
|
|
|
|
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage)));
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
int status = await Provider.of<ServiceRequestsProvider>(context, listen: false).updateWorkOrderDetails(workOrder: _workOrder);
|
|
|
|
|
_isLoading = false;
|
|
|
|
|
setState(() {});
|
|
|
|
|
if (status >= 200 && status < 300) {
|
|
|
|
|
Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully);
|
|
|
|
|
Navigator.of(context).pop();
|
|
|
|
|
// Navigator.of(context).pop();
|
|
|
|
|
} else {
|
|
|
|
|
String errorMessage = HttpStatusManger.getStatusMessage(status: status, subtitle: subtitle);
|
|
|
|
|
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(errorMessage)));
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
),
|
|
|
|
|
],
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|