From 8f05983c1493594852a71f1b2216ca8580c11a65 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Wed, 21 Jun 2023 12:11:36 +0300 Subject: [PATCH] Ready For Testing --- ...report_maintenance_situation_provider.dart | 4 +- .../service_request/search_work_order.dart | 56 +-- .../create_sub_workorder_page.dart | 437 +++++++++--------- .../search_sub_workorder_page.dart | 11 + .../spare_parts_details_bottom_sheet.dart | 56 ++- .../work_order_details_bottom_sheet.dart | 9 +- lib/views/widgets/parts/part_item.dart | 7 +- .../status/assistant_employee_menu.dart | 4 +- .../service_report_maintenance_situation.dart | 10 +- 9 files changed, 324 insertions(+), 270 deletions(-) diff --git a/lib/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart b/lib/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart index 1041a2a2..18720589 100644 --- a/lib/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart +++ b/lib/controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart @@ -41,14 +41,14 @@ class ServiceReportMaintenanceSituationProvider extends ChangeNotifier { /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart - Future getOperators() async { + Future getOperators(String woId) async { if (_loading == true) return -2; _loading = true; notifyListeners(); Response response; try { response = await ApiManager.instance.get( - "${URLs.getMaintenanceSituation}", + woId == null ? "${URLs.getMaintenanceSituation}" : "${URLs.getServiceReportLastCalls}?parentWOId=$woId&isAdd=true&id=${0}&typeTransaction='Nothing'", ); // response = await get( // Uri.parse( diff --git a/lib/models/service_request/search_work_order.dart b/lib/models/service_request/search_work_order.dart index 735fedd4..39eca14a 100644 --- a/lib/models/service_request/search_work_order.dart +++ b/lib/models/service_request/search_work_order.dart @@ -104,29 +104,35 @@ class SearchWorkOrder { workOrderYear = wo.workOrderYear ?? workOrderYear; workOrderSequennce = wo.workOrderSequennce ?? workOrderSequennce; callRequest = wo.callRequest ?? callRequest; - assetType = wo.assetType ?? assetType; - assignedEmployee = wo.assignedEmployee ?? assignedEmployee; + if (wo.assetType != null) assetType = Lookup.fromJson((wo.assetType)?.toMap() ?? {}); + if (wo.assignedEmployee != null) assignedEmployee = AssignedEmployee.fromJson((wo.assignedEmployee)?.toJson() ?? {}); visitDate = wo.visitDate ?? visitDate; - assistantEmployees = wo.assistantEmployees ?? assistantEmployees; - supplier = wo.supplier ?? supplier; + assistantEmployees = (wo.assistantEmployees ?? assistantEmployees) + ?.map((e) => AssistantEmployees.fromJson({ + "id": e?.id, + "user": {"name": e?.user?.name, "id": (e?.user?.id) ?? "0"} + })) + ?.toList() ?? + []; + if (wo.supplier != null) supplier = SupplierModel.fromJson((wo.supplier)?.toJson() ?? {}); vendorTicketNumber = wo.vendorTicketNumber ?? vendorTicketNumber; - contactPersonWorkOrders = wo.contactPersonWorkOrders ?? contactPersonWorkOrders; - calllastSituation = wo.calllastSituation ?? calllastSituation; - currentSituation = wo.currentSituation ?? currentSituation; - repairLocation = wo.repairLocation ?? repairLocation; - reason = wo.reason ?? reason; + contactPersonWorkOrders = (wo.contactPersonWorkOrders ?? contactPersonWorkOrders)?.map((e) => ContactPersonWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + calllastSituation = Lookup.fromJson((wo.calllastSituation ?? calllastSituation)?.toMap() ?? {}); + if (wo.currentSituation != null) currentSituation = Lookup.fromJson((wo.currentSituation)?.toMap() ?? {}); + repairLocation = Lookup.fromJson((wo.repairLocation ?? repairLocation)?.toMap() ?? {}); + reason = Lookup.fromJson((wo.reason ?? reason)?.toMap() ?? {}); startofWorkTime = wo.startofWorkTime ?? startofWorkTime; endofWorkTime = wo.endofWorkTime ?? endofWorkTime; workingHours = wo.workingHours ?? workingHours; travelingHours = wo.travelingHours ?? travelingHours; travelingExpenses = wo.travelingExpenses ?? travelingExpenses; - faultDescription = wo.faultDescription ?? faultDescription; - sparePartsWorkOrders = wo.sparePartsWorkOrders ?? sparePartsWorkOrders; + faultDescription = FaultDescription.fromJson((wo.faultDescription ?? faultDescription)?.toJson() ?? {}); + sparePartsWorkOrders = (wo.sparePartsWorkOrders ?? sparePartsWorkOrders)?.map((e) => SparePartsWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? []; reviewComment = wo.reviewComment ?? reviewComment; comment = wo.comment ?? comment; - attachmentsWorkOrder = wo.attachmentsWorkOrder ?? attachmentsWorkOrder; - equipmentStatus = wo.equipmentStatus ?? equipmentStatus; - suppEngineerWorkOrders = wo.suppEngineerWorkOrders ?? suppEngineerWorkOrders; + attachmentsWorkOrder = (wo.attachmentsWorkOrder ?? attachmentsWorkOrder)?.map((e) => AttachmentsWorkOrder.fromJson(e?.toJson() ?? {}))?.toList() ?? []; + equipmentStatus = Lookup.fromJson((wo.equipmentStatus ?? equipmentStatus)?.toMap() ?? {}); + suppEngineerWorkOrders = (wo.suppEngineerWorkOrders ?? suppEngineerWorkOrders)?.map((e) => SuppEngineerWorkOrders.fromJson(e?.toJson() ?? {}))?.toList() ?? []; engSignature = wo.engSignature ?? engSignature; nurseSignature = wo.nurseSignature ?? nurseSignature; woParentDto = wo.woParentDto ?? woParentDto; @@ -262,9 +268,7 @@ class SearchWorkOrder { if (calllastSituation != null) { map['calllastSituation'] = calllastSituation.toMap(); } - if (currentSituation != null) { - map['currentSituation'] = currentSituation.toMap(); - } + map['currentSituation'] = currentSituation?.toMap(); if (repairLocation != null) { map['repairLocation'] = repairLocation.toMap(); } @@ -1722,11 +1726,8 @@ class Asset { if (modelDefinition != null) { map['modelDefinition'] = modelDefinition.toJson(); } - if (supplier != null) { - map['supplier'] = supplier.toJson(); - } else { - map['supplier'] = []; - } + map['supplier'] = supplier?.toJson(); + map['ipAddress'] = ipAddress; map['macAddress'] = macAddress; map['portNumber'] = portNumber; @@ -1742,11 +1743,12 @@ class Asset { if (parentAsset != null) { map['parentAsset'] = parentAsset.toJson(); } - if (assetType != null) { - map['assetType'] = assetType.toMap(); - } else { - map['assetType'] = []; - } + + map['assetType'] = assetType?.toMap(); + print("supplier : ${supplier?.toJson()}"); + print("supplier 2 : ${map['supplier']}"); + print("asset type : ${assetType?.toMap()}"); + print("asset type 2: ${map['assetType']}"); if (site != null) { map['site'] = site.toJson(); } diff --git a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart index 16481e6e..66941a76 100644 --- a/lib/views/pages/sub_workorder/create_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/create_sub_workorder_page.dart @@ -6,6 +6,7 @@ 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/controllers/providers/api/status_drop_down/report/service_types_provider.dart'; import 'package:test_sa/models/lookup.dart'; import 'package:test_sa/models/service_report.dart'; import 'package:test_sa/models/service_request/search_work_order.dart'; @@ -13,6 +14,8 @@ import 'package:test_sa/views/app_style/colors.dart'; import 'package:test_sa/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart'; import 'package:test_sa/views/pages/sub_workorder/work_order_details_bottom_sheet.dart'; import 'package:test_sa/views/pages/sub_workorder/workorder_details.dart'; +import 'package:test_sa/views/widgets/loaders/app_loading.dart'; +import 'package:test_sa/views/widgets/status/service_request/service_request_defect_types_mune.dart'; import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/localization/localization.dart'; @@ -23,7 +26,6 @@ import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/buttons/app_button.dart'; import '../../widgets/date_and_time/date_picker.dart'; import '../../widgets/images/mini_one_image_picker.dart'; -import '../../widgets/status/report/service_report_equipment_status.dart'; import '../../widgets/status/report/service_report_fault_description.dart'; import '../../widgets/status/report/service_report_reasons.dart'; import '../../widgets/titles/app_sub_title.dart'; @@ -48,234 +50,249 @@ class _CreateSubWorkOrderPageState extends State { @override void initState() { - _subWorkOrders = SearchWorkOrder(assignedEmployee: widget.workOrder.assignedEmployee, callRequest: CallRequest()); + _subWorkOrders = SearchWorkOrder( + assignedEmployee: widget?.workOrder?.callRequest?.assignedEmployee, + callRequest: CallRequest(id: widget?.workOrder?.callRequest?.id), + currentSituation: null, + supplier: null, + ); _serviceReport = ServiceReport(id: widget.workOrder.id, type: widget.workOrder.assetType, equipmentStatus: widget.workOrder.equipmentStatus); - if (context.mounted) { - Provider.of(context, listen: false).reset(); - } super.initState(); } + Future getAssetType() async { + Provider.of(context, listen: false).reset(); + final assetTypesProvider = Provider.of(context, listen: false); + await assetTypesProvider.getTypes(); + _subWorkOrders?.assetType = assetTypesProvider.statuses?.firstWhere( + (element) => element.value == widget.workOrder?.callRequest?.assetType, + orElse: () => null, + ); + } + @override Widget build(BuildContext context) { final Subtitle subtitle = AppLocalization.of(context).subtitle; return Scaffold( body: SafeArea( - child: SingleChildScrollView( - child: Form( - key: _formKey, - child: Column( - children: [ - Container( - color: AColors.primaryColor, - padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), - child: Column( - children: [ - Row( - children: [ - const ABackButton(), - Expanded( - child: Center( - child: Text( - "New Work Order", - style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic), - ), - ), - ), - const SizedBox( - width: 48, - ) - ], - ), - ], - ), - ), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), - child: Column( - children: [ - WorkOrderDetails( - item: widget.workOrder, - ), - const SizedBox(height: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const ASubTitle("Equipment status"), - if (_validate && _subWorkOrders?.equipmentStatus == null) - ASubTitle( - subtitle.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - ServiceReportEquipmentStatusMenu( - report: _serviceReport, - onSelect: (status) { - _subWorkOrders.equipmentStatus = status; - _serviceReport.equipmentStatus = status; - setState(() {}); - }, - ), - ], - ), - const SizedBox(height: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const ASubTitle("Return to Service"), - if (_validate && _subWorkOrders.visitDate == null) - ASubTitle( - subtitle.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - Row( + child: FutureBuilder( + future: getAssetType(), + builder: (context, snap) => snap.connectionState == ConnectionState.waiting + ? const ALoading() + : SingleChildScrollView( + child: Form( + key: _formKey, + child: Column( + children: [ + Container( + color: AColors.primaryColor, + padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 4), + child: Column( children: [ - Expanded( - child: ADatePicker( - date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""), - from: DateTime(1950), - onDatePicker: (date) { - _subWorkOrders.visitDate = date?.toIso8601String(); - setState(() {}); - }, - ), + Row( + children: [ + const ABackButton(), + Expanded( + child: Center( + child: Text( + "New Work Order", + style: Theme.of(context).textTheme.titleLarge.copyWith(color: AColors.white, fontStyle: FontStyle.italic), + ), + ), + ), + const SizedBox( + width: 48, + ) + ], ), ], ), - ], - ), - const SizedBox(height: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle("Failure ${subtitle.reasons}"), - if (_validate && _subWorkOrders.reason == null) - ASubTitle( - subtitle.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - ServiceReportReasonsMenu( - initialValue: _serviceReportReason, - onSelect: (status) { - _serviceReportReason = status; - _subWorkOrders.reason = status; - setState(() {}); - }, - ), - ], - ), - const SizedBox(height: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ASubTitle(subtitle.faultDescription), - if (_validate && _subWorkOrders.faultDescription == null) - ASubTitle( - subtitle.requiredWord, - color: Colors.red, - ), - const SizedBox( - height: 4, - ), - ServiceReportFaultDescription( - requestId: widget.workOrder?.callRequest?.id?.toString(), - initialValue: _subWorkOrders.faultDescription, - onSelect: (status) { - _subWorkOrders.faultDescription = status; - setState(() {}); - }, - ), - ], - ), - const SizedBox(height: 8), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const ASubTitle("Solution"), - const SizedBox( - height: 4, - ), - ATextFormField(labelText: _subWorkOrders.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false), - ], - ), - const SizedBox(height: 8), - InkWell( - onTap: () async { - await showModalBottomSheet( - context: context, - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (context) => WorkOrderDetailsBottomSheet(subWorkOrder: _subWorkOrders), - ); - log(_subWorkOrders?.toJson()?.toString()); - }, - child: Card( - child: ListTile( - title: Row( - children: [ - Text( - "WO Details", - style: Theme.of(context).textTheme.bodyMedium, - ), - const Text("*", style: TextStyle(color: Colors.red)), - ], - ), - trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor), - ), ), - ), - const SizedBox(height: 8), - InkWell( - onTap: () async { - await showModalBottomSheet( - context: context, - useSafeArea: true, - isScrollControlled: true, - backgroundColor: Colors.transparent, - builder: (context) => SparePartsBottomSheet(subWorkOrder: _subWorkOrders), - ); - log(_subWorkOrders?.toJson()?.toString()); - }, - child: Card( - child: ListTile( - title: Row( - children: [ - Text( - "Spare Parts", - style: Theme.of(context).textTheme.bodyMedium, + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 16), + child: Column( + children: [ + WorkOrderDetails( + item: widget.workOrder, + ), + const SizedBox(height: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const ASubTitle("Equipment status"), + if (_validate && _subWorkOrders?.equipmentStatus == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), + ServiceRequestDefectTypesMenu( + initialValue: _serviceReport.equipmentStatus, + onSelect: (status) { + _subWorkOrders.equipmentStatus = status; + _serviceReport.equipmentStatus = status; + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const ASubTitle("Return to Service"), + if (_validate && _subWorkOrders.visitDate == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), + Row( + children: [ + Expanded( + child: ADatePicker( + date: DateTime.tryParse(_subWorkOrders.visitDate ?? ""), + from: DateTime(1950), + onDatePicker: (date) { + _subWorkOrders.visitDate = date?.toIso8601String(); + setState(() {}); + }, + ), + ), + ], + ), + ], + ), + const SizedBox(height: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle("Failure ${subtitle.reasons}"), + if (_validate && _subWorkOrders.reason == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), + ServiceReportReasonsMenu( + initialValue: _serviceReportReason, + onSelect: (status) { + _serviceReportReason = status; + _subWorkOrders.reason = status; + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ASubTitle(subtitle.faultDescription), + if (_validate && _subWorkOrders.faultDescription == null) + ASubTitle( + subtitle.requiredWord, + color: Colors.red, + ), + const SizedBox( + height: 4, + ), + ServiceReportFaultDescription( + requestId: widget.workOrder?.callRequest?.id?.toString(), + initialValue: _subWorkOrders?.faultDescription, + onSelect: (status) { + _subWorkOrders.faultDescription = status; + setState(() {}); + }, + ), + ], + ), + const SizedBox(height: 8), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const ASubTitle("Solution"), + const SizedBox(height: 4), + ATextFormField(labelText: _subWorkOrders?.faultDescription?.workPerformed ?? "", textInputType: TextInputType.multiline, enable: false), + ], + ), + const SizedBox(height: 8), + InkWell( + onTap: () async { + await showModalBottomSheet( + context: context, + useSafeArea: true, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) => WorkOrderDetailsBottomSheet(subWorkOrder: _subWorkOrders), + ); + log(_subWorkOrders?.toJson()?.toString()); + }, + child: Card( + child: ListTile( + title: Row( + children: [ + Text( + "WO Details", + style: Theme.of(context).textTheme.bodyMedium, + ), + const Text("*", style: TextStyle(color: Colors.red)), + ], + ), + trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor), + ), + ), + ), + const SizedBox(height: 8), + InkWell( + onTap: () async { + await showModalBottomSheet( + context: context, + useSafeArea: true, + isScrollControlled: true, + backgroundColor: Colors.transparent, + builder: (context) => SparePartsBottomSheet(subWorkOrder: _subWorkOrders), + ); + log(_subWorkOrders?.toJson()?.toString()); + }, + child: Card( + child: ListTile( + title: Row( + children: [ + Text( + "Spare Parts", + style: Theme.of(context).textTheme.bodyMedium, + ), + const Text("*", style: TextStyle(color: Colors.red)), + ], + ), + trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor), + ), ), - const Text("*", style: TextStyle(color: Colors.red)), - ], - ), - trailing: const Icon(Icons.arrow_forward_ios, size: 14, color: AColors.primaryColor), + ), + const SizedBox(height: 8), + AMiniOneImagePicker( + image: _image, + onPick: (image) { + _image = image; + _subWorkOrders.attachmentsWorkOrder ??= []; + _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}")); + }, + ), + const SizedBox(height: 50), + ], ), ), - ), - const SizedBox(height: 8), - AMiniOneImagePicker( - image: _image, - onPick: (image) { - _image = image; - _subWorkOrders.attachmentsWorkOrder ??= []; - _subWorkOrders.attachmentsWorkOrder.add(AttachmentsWorkOrder(name: "${image.path.split("/").last}|${base64Encode(image.readAsBytesSync())}")); - }, - ), - const SizedBox(height: 50), - ], + ], + ), ), ), - ], - ), - ), ), ), floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, diff --git a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart index 279f8576..af4b0418 100644 --- a/lib/views/pages/sub_workorder/search_sub_workorder_page.dart +++ b/lib/views/pages/sub_workorder/search_sub_workorder_page.dart @@ -12,6 +12,7 @@ import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; import '../../../controllers/api_routes/http_status_manger.dart'; import '../../../controllers/localization/localization.dart'; +import '../../../controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart'; import '../../app_style/colors.dart'; import '../../widgets/buttons/app_back_button.dart'; import '../../widgets/buttons/app_button.dart'; @@ -35,6 +36,15 @@ class _SearchSubWorkOrderPageState extends State { bool _isLoading = false; String _callerId = "", _site = ""; Lookup _dateOperator; + + @override + void initState() { + super.initState(); + if (context.mounted) { + Provider.of(context, listen: false).reset(); + } + } + @override Widget build(BuildContext context) { _subtitle = AppLocalization.of(context).subtitle; @@ -120,6 +130,7 @@ class _SearchSubWorkOrderPageState extends State { _searchWorkOrders.calllastSituation = status; } }, + woId: _searchWorkOrders.id?.toString(), ), const SizedBox(height: 16), ATextFormField( diff --git a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart index d6586592..5c9a8fa7 100644 --- a/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/spare_parts_details_bottom_sheet.dart @@ -30,6 +30,12 @@ class _SparePartsBottomSheetState extends State { _workOrder.copyFrom(widget.subWorkOrder); } + @override + void dispose() { + _workOrder.sparePartsWorkOrders = widget.subWorkOrder.sparePartsWorkOrders; + super.dispose(); + } + @override Widget build(BuildContext context) { final size = MediaQuery.of(context).size; @@ -92,9 +98,9 @@ class _SparePartsBottomSheetState extends State { onPick: (part) { _workOrder.sparePartsWorkOrders ??= []; _workOrder.sparePartsWorkOrders.add(SparePartsWorkOrders( - id: part.id, + id: part.reportPartID, qty: part.quantity, - sparePart: SparePart(id: part.reportPartID, partName: part.name, partNo: part.code), + sparePart: SparePart(id: part.id, partName: part.name, partNo: part.code), )); }, ), @@ -115,27 +121,31 @@ class _SparePartsBottomSheetState extends State { ), if (_workOrder.sparePartsWorkOrders?.isNotEmpty ?? false) Column( - children: List.generate(_workOrder.sparePartsWorkOrders?.length, (index) { - final spare = _workOrder.sparePartsWorkOrders[index]; - Part part = Part( - id: spare.id, - reportPartID: spare.sparePart?.id, - code: spare.sparePart?.partNo, - name: spare.sparePart?.partName, - quantity: spare.qty, - ); - return PartItem( - part: part, - onDelete: (part) { - _workOrder.sparePartsWorkOrders.remove(SparePartsWorkOrders( - id: part.id, - qty: part.quantity, - sparePart: SparePart(id: part.reportPartID, partName: part.name, partNo: part.code), - )); - setState(() {}); - }, - ); - }), + children: List.generate( + _workOrder.sparePartsWorkOrders?.length, + (index) { + final spare = _workOrder.sparePartsWorkOrders[index]; + Part part = Part( + id: spare.sparePart?.id, + reportPartID: spare.id, + code: spare.sparePart?.partNo, + name: spare.sparePart?.partName, + quantity: spare.qty, + ); + return PartItem( + part: part, + onEdit: (qty) { + print("sss${spare.qty}"); + print(qty); + spare.qty = qty; + }, + onDelete: (part) { + _workOrder.sparePartsWorkOrders.remove(spare); + setState(() {}); + }, + ); + }, + ), ), const SizedBox(height: 16), ], diff --git a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart index bb08dc43..c6ebd386 100644 --- a/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart +++ b/lib/views/pages/sub_workorder/work_order_details_bottom_sheet.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:provider/provider.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'; @@ -8,6 +9,7 @@ import 'package:test_sa/views/widgets/status/report/service_report_maintenance_s import 'package:test_sa/views/widgets/status/report/service_report_repair_location.dart'; import '../../../controllers/localization/localization.dart'; +import '../../../controllers/providers/api/status_drop_down/report/service_report_maintenance_situation_provider.dart'; import '../../app_style/sizing.dart'; import '../../widgets/date_and_time/time_picker.dart'; import '../../widgets/titles/app_sub_title.dart'; @@ -27,7 +29,11 @@ class _WorkOrderDetailsBottomSheetState extends State(context, listen: false).reset(); + } } @override @@ -66,7 +72,7 @@ class _WorkOrderDetailsBottomSheetState extends State _PartItemState(); @@ -38,7 +39,7 @@ class _PartItemState extends State { iconData: Icons.add, color: Theme.of(context).primaryColor, onPressed: () { - widget.part.quantity++; + widget.onEdit(++widget.part.quantity); setState(() {}); }, ), @@ -48,7 +49,7 @@ class _PartItemState extends State { onPressed: widget.part.quantity < 2 ? null : () { - widget.part.quantity--; + widget.onEdit(--widget.part.quantity); setState(() {}); }, ), diff --git a/lib/views/widgets/status/assistant_employee_menu.dart b/lib/views/widgets/status/assistant_employee_menu.dart index fa7d9ed8..45f2177b 100644 --- a/lib/views/widgets/status/assistant_employee_menu.dart +++ b/lib/views/widgets/status/assistant_employee_menu.dart @@ -27,7 +27,7 @@ class _SingleAssistantEmployeeMenuState extends State { void didUpdateWidget(covariant AssistantEmployeeMenu oldWidget) { if (widget.initialStatus != null) { final result = widget.statuses?.where((element) { - return element == widget.initialStatus; + return element?.user?.id == widget.initialStatus?.user?.id; }); if (result.isNotEmpty) { _selectedStatus = result.first; @@ -47,7 +47,7 @@ class _SingleAssistantEmployeeMenuState extends State { void initState() { if (widget.initialStatus != null) { final result = widget.statuses?.where((element) { - return element == widget.initialStatus; + return element?.user?.id == widget.initialStatus?.user?.id; }); if (result.isNotEmpty) _selectedStatus = result.first; if (widget.initialStatus?.user?.id != _selectedStatus?.user?.id) { diff --git a/lib/views/widgets/status/report/service_report_maintenance_situation.dart b/lib/views/widgets/status/report/service_report_maintenance_situation.dart index 936a2284..311581a0 100644 --- a/lib/views/widgets/status/report/service_report_maintenance_situation.dart +++ b/lib/views/widgets/status/report/service_report_maintenance_situation.dart @@ -8,8 +8,14 @@ import 'package:test_sa/views/widgets/status/single_status_menu.dart'; class ServiceReportMaintenanceSituation extends StatelessWidget { final Function(Lookup) onSelect; final Lookup initialValue; + final String woId; - const ServiceReportMaintenanceSituation({Key key, @required this.onSelect, @required this.initialValue}) : super(key: key); + const ServiceReportMaintenanceSituation({ + Key key, + @required this.onSelect, + @required this.initialValue, + @required this.woId, + }) : super(key: key); @override Widget build(BuildContext context) { ServiceReportMaintenanceSituationProvider menuProvider = Provider.of(context); @@ -18,7 +24,7 @@ class ServiceReportMaintenanceSituation extends StatelessWidget { isFailedLoading: menuProvider.operators == null, stateCode: menuProvider.stateCode, onRefresh: () async { - menuProvider.getOperators(); + menuProvider.getOperators(woId); }, child: SingleStatusMenu( initialStatus: initialValue,