diff --git a/lib/controllers/providers/api/parts_provider.dart b/lib/controllers/providers/api/parts_provider.dart index 6705a4f9..4163e06c 100644 --- a/lib/controllers/providers/api/parts_provider.dart +++ b/lib/controllers/providers/api/parts_provider.dart @@ -88,9 +88,9 @@ class PartsProvider extends ChangeNotifier { late Response response; try { if (partNo != null) { - response = await ApiManager.instance.post(URLs.getPartNumber, body: {"partNo": partNo, "assetId": assetId}); + response = await ApiManager.instance.post(URLs.getPartNumber, body: {"partNo": partNo, }); } else { - response = await ApiManager.instance.post(URLs.getPartNumber, body: {"partName": partName, "assetId": assetId}); + response = await ApiManager.instance.post(URLs.getPartNumber, body: {"partName": partName, }); } List page = []; if (response.statusCode >= 200 && response.statusCode < 300) { diff --git a/lib/controllers/providers/api/ppm_provider.dart b/lib/controllers/providers/api/ppm_provider.dart index 229d2e35..8da87c92 100644 --- a/lib/controllers/providers/api/ppm_provider.dart +++ b/lib/controllers/providers/api/ppm_provider.dart @@ -294,4 +294,41 @@ class PpmProvider extends ChangeNotifier { return -1; } } + bool validate() { + // if (planPreventiveVisit.activityStatus == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.activityStatus}"); + // return false; + // } + if (planPreventiveVisit?.tbsTimer?.startAt == null) { + Fluttertoast.showToast(msg: "Working Hours Required"); + return false; + } + if (planPreventiveVisit?.tbsTimer?.endAt == null) { + Fluttertoast.showToast(msg: "Please Stop The Timer"); + return false; + } + // if (model.startTime == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.startTime}"); + // return false; + // } + // if (model.endTime == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.endTime}"); + // return false; + // } + // else if (model.travelHours == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.travelingHours}"); + // return false; + // } + // if (model.repairLocation == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.repairLocation}"); + // return false; + // } + // else if (model.assignedEmployeeId == null) { + // Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.assignedEmployee}"); + // return false; + // } + //write all other missing conditions.. + + return true; + } } diff --git a/lib/dashboard_latest/dashboard_provider.dart b/lib/dashboard_latest/dashboard_provider.dart index fafa23bc..d763092d 100644 --- a/lib/dashboard_latest/dashboard_provider.dart +++ b/lib/dashboard_latest/dashboard_provider.dart @@ -365,7 +365,7 @@ class CategoryTabs { static List getTabs({required UsersTypes userType, required BuildContext context}) { List tabs = []; if (userType == UsersTypes.engineer) { - tabs.add(CategoryTabs(label: 'Upcoming', tag: 0, id: 0)); + // tabs.add(CategoryTabs(label: 'Upcoming', tag: 0, id: 0)); // tabs.add(CategoryTabs('Open', 1)); tabs.add(CategoryTabs(label: 'UnAssigned Open', tag: 1, id: 1)); tabs.add(CategoryTabs(label: 'Assigned Open', tag: 1, id: 2)); diff --git a/lib/new_views/common_widgets/single_item_drop_down_menu.dart b/lib/new_views/common_widgets/single_item_drop_down_menu.dart index 9896beb9..a4343fba 100644 --- a/lib/new_views/common_widgets/single_item_drop_down_menu.dart +++ b/lib/new_views/common_widgets/single_item_drop_down_menu.dart @@ -54,7 +54,9 @@ class _SingleItemDropDownMenuState(widget.context); } if (widget.initialValue != null) { + print("$provider:start1:${DateTime.now()}"); final result = (X == NullableLoadingProvider ? widget.staticData : provider?.items)?.where((element) => element.identifier == widget.initialValue?.identifier); + print("$provider:start2:${DateTime.now()}"); if (result?.isNotEmpty ?? false) _selectedItem = result!.first as T?; if (widget.onSelect != null && (widget.initialValue?.identifier ?? "") != (_selectedItem?.identifier ?? "")) { widget.onSelect!(_selectedItem); // Non-null assertion after null check @@ -71,7 +73,9 @@ class _SingleItemDropDownMenuState oldWidget) { if (widget.initialValue != null) { + print("$provider:start3:${DateTime.now()}"); final result = (X == NullableLoadingProvider ? widget.staticData : provider?.items)?.where((element) => element.identifier == widget.initialValue?.identifier); + print("$provider:start4:${DateTime.now()}"); if (result?.isNotEmpty ?? false) { _selectedItem = result?.first as T?; } else { diff --git a/lib/providers/work_order/vendor_provider.dart b/lib/providers/work_order/vendor_provider.dart index 285ff95a..d2cd7f55 100644 --- a/lib/providers/work_order/vendor_provider.dart +++ b/lib/providers/work_order/vendor_provider.dart @@ -12,8 +12,6 @@ class VendorProvider extends LoadingListNotifier { if (loading == true) return -2; loading = true; notifyListeners(); - loading = true; - notifyListeners(); try { Response response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=${""}"); stateCode = response.statusCode; diff --git a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart index 0be65a4b..189d303e 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/components/internal_request.dart @@ -111,7 +111,6 @@ class _InternalMaintenanceRequestState extends State requestDetailProvider.activityMaintenanceHelperModel?.timerModelList = requestDetailProvider.activityMaintenanceHelperModel?.timerModelList ?? []; requestDetailProvider.activityMaintenanceHelperModel?.timerModelList!.add(timer); } - return true; }, ), diff --git a/lib/views/pages/user/ppm/ppm_details_page.dart b/lib/views/pages/user/ppm/ppm_details_page.dart index d73a16c1..6785e134 100644 --- a/lib/views/pages/user/ppm/ppm_details_page.dart +++ b/lib/views/pages/user/ppm/ppm_details_page.dart @@ -11,7 +11,6 @@ import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/pages/user/ppm/update_ppm/update_ppm.dart'; import 'package:test_sa/views/widgets/loaders/app_loading.dart'; -import 'package:test_sa/views/widgets/loaders/no_data_found.dart'; import '../../../../controllers/providers/api/user_provider.dart'; import '../../../../models/enums/user_types.dart'; diff --git a/lib/views/pages/user/ppm/update_ppm/ppm_external_details_form.dart b/lib/views/pages/user/ppm/update_ppm/ppm_external_details_form.dart index b50e6a14..72aba1aa 100644 --- a/lib/views/pages/user/ppm/update_ppm/ppm_external_details_form.dart +++ b/lib/views/pages/user/ppm/update_ppm/ppm_external_details_form.dart @@ -244,15 +244,14 @@ import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart'; import 'package:test_sa/models/service_request/supplier_details.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/app_text_form_field.dart'; import 'package:test_sa/new_views/common_widgets/single_item_drop_down_menu.dart'; import 'package:test_sa/providers/loading_list_notifier.dart'; import 'package:test_sa/providers/work_order/vendor_provider.dart'; -import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/service_request_latest/utilities/service_request_utils.dart'; import 'package:test_sa/views/widgets/date_and_time/date_picker.dart'; -import 'package:test_sa/views/widgets/loaders/app_loading.dart'; class PpmExternalDetailsForm extends StatefulWidget { final List? models; @@ -287,8 +286,10 @@ class _PpmExternalDetailsFormState extends State { // isLoading = false; }); } + @override Widget build(BuildContext context) { + print("widget.models!.length:${widget.models!.length}"); return ListView.builder( itemCount: widget.models!.length + 1, padding: const EdgeInsets.all(16), @@ -306,12 +307,12 @@ class _PpmExternalDetailsFormState extends State { } // return !isLoading // ? - return ExternalDetailItem( - model: widget.models![index], - index: index, - onRemove: () => _removeEntry(index), - ); - // : const ALoading(); + return ExternalDetailItem( + model: widget.models![index], + index: index, + onRemove: () => _removeEntry(index), + ); + // : const ALoading(); }, ); } @@ -359,7 +360,12 @@ class _ExternalDetailItemState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ (widget.index == 0 ? "1 /4 . External Details" : "").heading5(context), - "trash".toSvgAsset(height: 20, width: 15).onPress(() { + Container( + height: 32, + width: 32, + padding: const EdgeInsets.all(6), + child: "trash".toSvgAsset(height: 20, width: 20), + ).onPress(() { widget.onRemove(); }), ], @@ -371,6 +377,7 @@ class _ExternalDetailItemState extends State { initialValue: widget.model.supplier, backgroundColor: AppColor.neutral100, showAsBottomSheet: true, + showShadow: false, onSelect: (supplier) { if (supplier != null) { setState(() { @@ -388,6 +395,7 @@ class _ExternalDetailItemState extends State { initialValue: widget.model.suppPerson, staticData: widget.model.supplier?.suppPersons, showAsBottomSheet: true, + showShadow: false, onSelect: (suppPerson) { if (suppPerson != null) { widget.model.suppPerson = suppPerson; diff --git a/lib/views/pages/user/ppm/update_ppm/ppm_pm_kits_form.dart b/lib/views/pages/user/ppm/update_ppm/ppm_pm_kits_form.dart index 14590fd8..fc3ffc94 100644 --- a/lib/views/pages/user/ppm/update_ppm/ppm_pm_kits_form.dart +++ b/lib/views/pages/user/ppm/update_ppm/ppm_pm_kits_form.dart @@ -73,7 +73,12 @@ class _PpmPMKitsFormState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ (index == 0 ? "$currentIndex /$totalTabs . PM Kits" : "").heading5(context), - "trash".toSvgAsset(width: 15, height: 20).onPress(() { + Container( + height: 32, + width: 32, + padding: const EdgeInsets.all(6), + child: "trash".toSvgAsset(height: 20, width: 20), + ).onPress(() { widget.models!.remove(model); setState(() {}); }), @@ -97,9 +102,7 @@ class _PpmPMKitsFormState extends State { byName: false, initialValue: model.partCatalogItem?.partNumber ?? "", onPick: (part) { - model.partCatalogItem?.id = part.sparePart?.id; - model.partCatalogItem?.partNumber = part.sparePart?.partNo; - model.partCatalogItem?.partName = part.sparePart?.partName; + model.partCatalogItem = PartCatalogItem(id: part.sparePart?.id, partNumber: part.sparePart?.partNo, partName: part.sparePart?.partName, oracleCode: part.sparePart?.oracleCode); setState(() {}); }, ), diff --git a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart index 667bde1d..207b544c 100644 --- a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart +++ b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart @@ -3,6 +3,7 @@ import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/all_requests_provider.dart'; import 'package:test_sa/controllers/providers/api/ppm_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -44,35 +45,42 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { late PpmProvider ppmProvider; _onSubmit({required int status}) async { - showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - ppmProvider.planPreventiveVisit?.preventiveVisitAttachments = []; - for (var item in ppmProvider.ppmPlanAttachments) { - ppmProvider.planPreventiveVisit?.preventiveVisitAttachments - ?.add(PreventiveVisitAttachments(id: 0, attachmentName: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path)); + + if(ppmProvider.validate()){ + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + ppmProvider.planPreventiveVisit?.preventiveVisitAttachments = []; + for (var item in ppmProvider.ppmPlanAttachments) { + ppmProvider.planPreventiveVisit?.preventiveVisitAttachments + ?.add(PreventiveVisitAttachments(id: 0, attachmentName: ServiceRequestUtils.isLocalUrl(item.path) ? "${item.path.split("/").last}|${base64Encode(item.readAsBytesSync())}" : item.path)); + } + log('data i got is ${ppmProvider.planPreventiveVisit?.toJson(status: status)}'); + + ppmProvider.planPreventiveVisit?.preventiveVisitTimers = ppmProvider.planPreventiveVisit?.preventiveVisitTimers ?? []; + ppmProvider.planPreventiveVisit?.timerModelList?.forEach((timer) { + int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; + ppmProvider.planPreventiveVisit?.preventiveVisitTimers?.add( + PreventiveVisitTimers( + id: 0, + startDateTime: timer.startAt!.toIso8601String(), // Handle potential null + endDateTime: timer.endAt?.toIso8601String(), // Handle potential null + workingHours: ((durationInSecond) / 60 / 60), + ), + ); + }); + + await ppmProvider.updateVisitByEngineer(status: status).whenComplete(() { + if(status==1){ + AllRequestsProvider allRequestsProvider = Provider.of(context, listen: false); + allRequestsProvider.reset(); + allRequestsProvider.getAllRequests(context, typeTransaction: 4); + } + // allRequestsProvider.recurrentWoData?.recurrentWoTimerModel=null; + Navigator.pop(context); + Navigator.pop(context); + }); } - log('data i got is ${ppmProvider.planPreventiveVisit?.toJson(status: status)}'); - - ppmProvider.planPreventiveVisit?.preventiveVisitTimers = ppmProvider.planPreventiveVisit?.preventiveVisitTimers ?? []; - ppmProvider.planPreventiveVisit?.timerModelList?.forEach((timer) { - int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; - ppmProvider.planPreventiveVisit?.preventiveVisitTimers?.add( - PreventiveVisitTimers( - id: 0, - startDateTime: timer.startAt!.toIso8601String(), // Handle potential null - endDateTime: timer.endAt?.toIso8601String(), // Handle potential null - workingHours: ((durationInSecond) / 60 / 60), - ), - ); - }); - - await ppmProvider.updateVisitByEngineer(status: status).whenComplete(() { - // if(status==1){// when click complete then this request remove from the list and status changes to closed.. - // - // } - // allRequestsProvider.recurrentWoData?.recurrentWoTimerModel=null; - Navigator.pop(context); - Navigator.pop(context); - }); + + } @override diff --git a/lib/views/widgets/parts/auto_complete_parts_field.dart b/lib/views/widgets/parts/auto_complete_parts_field.dart index cff4c7fe..1ce09558 100644 --- a/lib/views/widgets/parts/auto_complete_parts_field.dart +++ b/lib/views/widgets/parts/auto_complete_parts_field.dart @@ -56,7 +56,6 @@ class _AutoCompletePartsFieldState extends State { _userProvider = Provider.of(context); _partsProvider = Provider.of(context); final border = UnderlineInputBorder(borderSide: BorderSide.none, borderRadius: BorderRadius.circular(10)); - return Container( decoration: BoxDecoration( color: AppColor.background(context), @@ -75,7 +74,7 @@ class _AutoCompletePartsFieldState extends State { displayStringForOption: (SparePartsWorkOrders option) => widget.byName ? option.sparePart?.partName ?? "" : option.sparePart?.partNo ?? "", fieldViewBuilder: (BuildContext context, TextEditingController fieldTextEditingController, FocusNode fieldFocusNode, VoidCallback onFieldSubmitted) { return TextField( - controller: fieldTextEditingController, + controller: _controller, focusNode: fieldFocusNode, style: AppTextStyles.bodyText.copyWith(color: AppColor.black10), textAlign: TextAlign.start, @@ -96,6 +95,9 @@ class _AutoCompletePartsFieldState extends State { labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120), ), textInputAction: TextInputAction.search, + onChanged: (text){ + fieldTextEditingController.text =text; + }, onSubmitted: (String value) { onFieldSubmitted(); },