ppm pm kits improvement

design_3.0_latest
Sikander Saleem 8 months ago
parent 5a211a295f
commit 8fe01adcb0

@ -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<SparePart> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {

@ -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;
}
}

@ -365,7 +365,7 @@ class CategoryTabs {
static List<CategoryTabs> getTabs({required UsersTypes userType, required BuildContext context}) {
List<CategoryTabs> 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));

@ -54,7 +54,9 @@ class _SingleItemDropDownMenuState<T extends Base, X extends LoadingListNotifier
provider = Provider.of<X>(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<T extends Base, X extends LoadingListNotifier
@override
void didUpdateWidget(covariant SingleItemDropDownMenu<T, X> 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 {

@ -12,8 +12,6 @@ class VendorProvider extends LoadingListNotifier<SupplierDetails> {
if (loading == true) return -2;
loading = true;
notifyListeners();
loading = true;
notifyListeners();
try {
Response response = await ApiManager.instance.get("${URLs.getSuppliersAutoComplete}?searchText=${""}");
stateCode = response.statusCode;

@ -111,7 +111,6 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
requestDetailProvider.activityMaintenanceHelperModel?.timerModelList = requestDetailProvider.activityMaintenanceHelperModel?.timerModelList ?? [];
requestDetailProvider.activityMaintenanceHelperModel?.timerModelList!.add(timer);
}
return true;
},
),

@ -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';

@ -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<PreventiveVisitSuppliers>? models;
@ -287,8 +286,10 @@ class _PpmExternalDetailsFormState extends State<PpmExternalDetailsForm> {
// 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<PpmExternalDetailsForm> {
}
// 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<ExternalDetailItem> {
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<ExternalDetailItem> {
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<ExternalDetailItem> {
initialValue: widget.model.suppPerson,
staticData: widget.model.supplier?.suppPersons,
showAsBottomSheet: true,
showShadow: false,
onSelect: (suppPerson) {
if (suppPerson != null) {
widget.model.suppPerson = suppPerson;

@ -73,7 +73,12 @@ class _PpmPMKitsFormState extends State<PpmPMKitsForm> {
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<PpmPMKitsForm> {
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(() {});
},
),

@ -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<UpdatePpm> 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<AllRequestsProvider>(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

@ -56,7 +56,6 @@ class _AutoCompletePartsFieldState extends State<AutoCompletePartsField> {
_userProvider = Provider.of<UserProvider>(context);
_partsProvider = Provider.of<PartsProvider>(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<AutoCompletePartsField> {
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<AutoCompletePartsField> {
labelStyle: AppTextStyles.tinyFont.copyWith(color: AppColor.neutral120),
),
textInputAction: TextInputAction.search,
onChanged: (text){
fieldTextEditingController.text =text;
},
onSubmitted: (String value) {
onFieldSubmitted();
},

Loading…
Cancel
Save