Multiple spare parts in all places

main_design2.0
zaid_daoud 2 years ago
parent 88048fb11e
commit 03926a1fd1

@ -1,5 +1,4 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@ -61,7 +60,6 @@ class ServiceRequestFaultDescriptionProvider extends ChangeNotifier {
// client's request was successfully received
List listJson = json.decode(response.body)["data"]['asset']['modelDefinition']['modelDefRelatedDefects'];
_items = listJson?.map((type) => FaultDescription.fromJson(type))?.toList() ?? [];
log("${_items}Zaid");
}
_loading = false;
notifyListeners();

@ -43,7 +43,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
}
if (widget.initialValue != null) {
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue;
return element.identifier == widget.initialValue.identifier;
});
if (result?.isNotEmpty ?? false) _selectedItem = result.first;
if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) {
@ -62,7 +62,7 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
void didUpdateWidget(covariant SingleItemDropDownMenu<T, X> oldWidget) {
if (widget.initialValue != null) {
final result = (X == NullableLoadingProvider ? widget.staticData : provider.items)?.where((element) {
return element == widget.initialValue;
return element.identifier == widget.initialValue.identifier;
});
if (result?.isNotEmpty ?? false) {
_selectedItem = result.first;

@ -42,6 +42,7 @@ import '../../widgets/status/report/service_report_fault_description.dart';
import '../../widgets/status/report/service_report_last_call.dart';
import '../../widgets/status/report/service_report_repair_location.dart';
import '../../widgets/timer/app_timer.dart';
import '../user/requests/work_order/part_no_button.dart';
class CreateSubWorkOrderPage extends StatefulWidget {
static const id = "/CreateSubWorkOrder";
@ -58,11 +59,13 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
SearchWorkOrder _subWorkOrders;
ServiceReport _serviceReport;
final List<File> _files = [];
List<SparePart> _spareParts = [];
bool _isLoading = false;
bool _showVendorFields = false;
SuppEngineerWorkOrders engineer;
SupplierDetails initialSupplier;
final TextEditingController _workPreformedController = TextEditingController();
final TextEditingController _partQtyController = TextEditingController();
@override
void initState() {
@ -96,7 +99,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
_serviceReport.equipmentStatus = subWoDetails.equipmentStatus;
_serviceReport.reason = subWoDetails.reason;
initialSupplier = subWoDetails.supplier;
// _serviceReport.faultDescription = subWoDetails.faultDescription;
_serviceReport.faultDescription = subWoDetails.faultDescription;
}
await assetTypesProvider.getTypes();
_subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere(
@ -110,6 +113,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
}
_subWorkOrders.supplier ??= SupplierDetails(id: _subWorkOrders?.supplier?.id);
}
_spareParts = _serviceReport.sparePartsWorkOrders.map((e) => e.sparePart).toList();
setState(() {
_isLoading = false;
});
@ -118,6 +122,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
@override
void dispose() {
_workPreformedController?.dispose();
_partQtyController?.dispose();
super.dispose();
}
@ -186,7 +191,7 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
},
child: AppTextFormField(
labelText: context.translation.assetType,
initialValue: _serviceReport?.assetType?.name ?? "NULL",
initialValue: _serviceReport?.assetType?.name,
textAlign: TextAlign.center,
enable: false,
style: Theme.of(context).textTheme.titleMedium,
@ -302,30 +307,6 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
},
),
8.height,
SingleItemDropDownMenu<SparePart, NullableLoadingProvider>(
context: context,
title: context.translation.partNo,
staticData: _subWorkOrders.sparePartsWorkOrders.map((e) => e.sparePart).toList(),
initialValue: (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) ? _subWorkOrders.sparePartsWorkOrders.first.sparePart : null,
onSelect: (part) {
_subWorkOrders.sparePartsWorkOrders.clear();
_subWorkOrders.sparePartsWorkOrders.add(SparePartsWorkOrders(id: 0, sparePart: part, qty: 0));
setState(() {});
},
),
8.height,
AppTextFormField(
labelText: context.translation.quantity,
textInputType: TextInputType.number,
enable: _subWorkOrders?.sparePartsWorkOrders?.isNotEmpty,
initialValue: (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) ? _subWorkOrders.sparePartsWorkOrders.first.qty?.toString() : null,
onSaved: (text) {
if (_subWorkOrders.sparePartsWorkOrders?.isNotEmpty ?? false) {
_subWorkOrders.sparePartsWorkOrders.first.qty = num.tryParse(text ?? "");
}
},
),
8.height,
ServiceReportRepairLocation(
label: context.translation.repairLocation,
initialValue: _subWorkOrders.repairLocation,
@ -334,7 +315,17 @@ class _CreateSubWorkOrderPageState extends State<CreateSubWorkOrderPage> {
},
),
8.height,
PartNoButton(
controller: _partQtyController,
spareParts: _spareParts,
initialList: _serviceReport.sparePartsWorkOrders,
onAdd: (parts) {
_serviceReport.sparePartsWorkOrders = parts;
},
),
8.height,
MultiFilesPicker(label: context.translation.attachImage, files: _files),
8.height,
AppTextFormField(
labelText: context.translation.travelingExpense,
initialValue: _serviceReport?.travelingExpenses?.toString(),

@ -175,7 +175,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
},
child: AppTextFormField(
labelText: context.translation.assetType,
initialValue: _serviceReport?.assetType?.name ?? "NULL",
initialValue: _serviceReport?.assetType?.name,
textAlign: TextAlign.center,
enable: false,
style: Theme.of(context).textTheme.titleMedium,
@ -272,6 +272,7 @@ class _CreateServiceReportState extends State<CreateServiceReport> with TickerPr
PartNoButton(
controller: _partQtyController,
spareParts: _spareParts,
initialList: _serviceReport.sparePartsWorkOrders,
onAdd: (parts) {
_serviceReport.sparePartsWorkOrders = parts;
},

@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
@ -13,6 +14,7 @@ import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.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/pages/user/requests/work_order/part_no_button.dart';
import 'package:test_sa/views/widgets/loaders/loading_manager.dart';
import 'package:test_sa/views/widgets/status/report/service_report_last_call.dart';
@ -24,7 +26,6 @@ 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/loading_list_notifier.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';
@ -58,6 +59,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
final GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();
final TextEditingController _faultController = TextEditingController();
final TextEditingController _workPreformedController = TextEditingController();
final TextEditingController _partQtyController = TextEditingController();
ServiceStatusProvider _assetTypeProvider;
CallRequest _callRequestForWorkOrder;
@ -73,6 +75,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
_isLoading = true;
setState(() {});
_callRequestForWorkOrder = await _serviceRequestsProvider?.getCallRequestForWorkOrder(callId: widget.request.id);
log(_serviceReport.faultDescription?.toJson()?.toString());
_serviceReport.assignedEmployee = _callRequestForWorkOrder?.assignedEmployee;
await _assetTypeProvider?.getTypes(user: _userProvider.user, host: _settingProvider.host);
_isLoading = false;
@ -83,6 +86,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
void dispose() {
_faultController.dispose();
_workPreformedController.dispose();
_partQtyController.dispose();
super.dispose();
}
@ -158,7 +162,7 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
},
child: AppTextFormField(
labelText: context.translation.assetType,
initialValue: _serviceReport?.assetType?.name ?? "NULL",
initialValue: _serviceReport?.assetType?.name,
textAlign: TextAlign.center,
enable: false,
style: Theme.of(context).textTheme.titleMedium,
@ -224,30 +228,6 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
},
),
8.height,
SingleItemDropDownMenu<SparePart, NullableLoadingProvider>(
context: context,
title: context.translation.partNo,
staticData: _spareParts,
initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.sparePart : null,
onSelect: (part) {
_serviceReport.sparePartsWorkOrders.clear();
_serviceReport.sparePartsWorkOrders.add(SparePartsWorkOrders(id: 0, sparePart: part, qty: 0));
// setState(() {});
},
),
8.height,
AppTextFormField(
labelText: context.translation.quantity,
textInputType: TextInputType.number,
enable: _serviceReport.sparePartsWorkOrders.isNotEmpty,
initialValue: (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) ? _serviceReport.sparePartsWorkOrders.first.qty?.toString() : null,
onSaved: (text) {
if (_serviceReport.sparePartsWorkOrders?.isNotEmpty ?? false) {
_serviceReport.sparePartsWorkOrders.first.qty = num.tryParse(text ?? "");
}
},
),
8.height,
AppTextFormField(
labelText: context.translation.travelingExpense,
initialValue: _serviceReport?.travelingExpenses?.toString(),
@ -276,6 +256,15 @@ class _EditServiceReportState extends State<EditServiceReport> with TickerProvid
},
),
8.height,
PartNoButton(
controller: _partQtyController,
spareParts: _spareParts,
initialList: _serviceReport.sparePartsWorkOrders,
onAdd: (parts) {
_serviceReport.sparePartsWorkOrders = parts;
},
),
8.height,
MultiFilesPicker(label: context.translation.attachImage, files: _files),
8.height,
ESignature(

@ -21,9 +21,11 @@ class ServiceReportFaultDescription extends StatefulWidget {
}
class _ServiceReportFaultDescriptionState extends State<ServiceReportFaultDescription> {
FaultDescription initialValue;
@override
void initState() {
super.initState();
initialValue = widget.initialValue;
if (widget.initialValue == null) {
WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((timeStamp) {
ServiceRequestFaultDescriptionProvider menuProvider = Provider.of<ServiceRequestFaultDescriptionProvider>(context, listen: false);
@ -33,6 +35,16 @@ class _ServiceReportFaultDescriptionState extends State<ServiceReportFaultDescri
}
}
@override
void didUpdateWidget(covariant ServiceReportFaultDescription oldWidget) {
if (widget.initialValue != oldWidget.initialValue) {
setState(() {
initialValue = widget.initialValue;
});
}
super.didUpdateWidget(oldWidget);
}
@override
Widget build(BuildContext context) {
SettingProvider settingProvider = Provider.of<SettingProvider>(context);
@ -50,7 +62,7 @@ class _ServiceReportFaultDescriptionState extends State<ServiceReportFaultDescri
context: context,
title: context.translation.faultDescription,
onSelect: widget.onSelect,
initialValue: widget.initialValue,
initialValue: initialValue,
staticData: menuProvider.items ?? [],
),
// child: FaultDescriptionMenu(

Loading…
Cancel
Save