ppm improvement, recurrent task improvement

design_3.0_latest
Sikander Saleem 9 months ago
parent 2a6277ee76
commit 4a7f1eb037

@ -4,17 +4,14 @@ import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:google_api_availability/google_api_availability.dart';
import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:test_sa/controllers/notification/notification_manger.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/device/asset_transfer.dart';
import 'package:test_sa/models/new_models/gas_refill_model.dart';
import 'package:huawei_push/huawei_push.dart' as h_push;
import 'package:test_sa/models/service_request/service_request.dart';
import 'package:test_sa/service_request_latest/views/service_request_detail_main_view.dart';
import 'package:test_sa/views/pages/device_transfer/device_transfer_details.dart';
import 'package:test_sa/views/pages/user/gas_refill/gas_refill_details.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_details_page.dart';
import 'package:test_sa/views/pages/user/requests/service_request_details.dart';
@pragma('vm:entry-point')
Future<void> firebaseMessagingBackgroundHandler(RemoteMessage message) async {}
@ -38,7 +35,7 @@ class FirebaseNotificationManger {
// print("Huawei Token: ${hToken}");
token = hToken;
}, onError: (e) {
print( "Huawei TokenError"+e.toString());
print("Huawei TokenError" + e.toString());
});
h_push.Push.getToken('');
} else {
@ -83,7 +80,7 @@ class FirebaseNotificationManger {
Widget? serviceClass;
if (messageData["requestType"] == "Service request to engineer") {
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"]??'');
serviceClass = ServiceRequestDetailMain(requestId: messageData["requestNumber"] ?? '');
} else if (messageData["requestType"] == "Gas Refill") {
serviceClass = GasRefillDetailsPage(
priority: messageData["priority"],
@ -93,11 +90,7 @@ class FirebaseNotificationManger {
} else if (messageData["requestType"] == "Asset Transfer") {
serviceClass = DeviceTransferDetails(model: AssetTransfer(id: int.parse(messageData["requestNumber"].toString())));
} else if (messageData["requestType"] == "PPM") {
serviceClass = PpmDetailsPage(
request: RequestsDetails(
id: int.parse(messageData["requestNumber"].toString()),
priority: messageData["priority"],
));
serviceClass = PpmDetailsPage(requestId: int.parse(messageData["requestNumber"].toString()));
}
// else if (data["requestType"] == "WorkOrder") {
//
@ -110,7 +103,6 @@ class FirebaseNotificationManger {
}
static initialized(BuildContext context) async {
//TOD0 add platform check here also
if (!(await isGoogleServicesAvailable())) {
var initialNotification = await h_push.Push.getInitialNotification();
@ -165,8 +157,7 @@ class FirebaseNotificationManger {
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print('notification i got is ${message.toMap()}');
if (Platform.isAndroid) {
if(message.data["notificationType"]!='NurseConfirmArrive'){
if (message.data["notificationType"] != 'NurseConfirmArrive') {
NotificationManger.showNotification(
title: message.notification?.title ?? "", subtext: message.notification?.body ?? "", hashcode: int.tryParse("1234" ?? "") ?? 1, payload: json.encode(message.data), context: context);
}

@ -52,32 +52,32 @@ class PartsProvider 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<int> getParts({String? title}) async {
if (_loading == true) return -2;
_loading = true;
notifyListeners();
late Response response;
try {
response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<SparePart> page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList();
_parts ??= [];
_parts!.addAll(page.map((e) => SparePartsWorkOrders(sparePart: e)).toList());
_nextPage = page.length >= pageItemNumber;
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return -1;
}
}
// Future<int> getParts({String? title}) async {
// if (_loading == true) return -2;
// _loading = true;
// notifyListeners();
// late Response response;
// try {
// response = await ApiManager.instance.post(URLs.getPartNumber, body: {if (title != null && title.isNotEmpty) "partName": title});
// _stateCode = response.statusCode;
// if (response.statusCode >= 200 && response.statusCode < 300) {
// // client's request was successfully received
// List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
// List<SparePart> page = categoriesListJson.map((part) => SparePart.fromJson(part)).toList();
// _parts ??= [];
// _parts!.addAll(page.map((e) => SparePartsWorkOrders(sparePart: e)).toList());
// _nextPage = page.length >= pageItemNumber;
// }
// _loading = false;
// notifyListeners();
// return response.statusCode;
// } catch (error) {
// _loading = false;
// _stateCode = -1;
// notifyListeners();
// return -1;
// }
// }
/// return -2 if request in progress
/// return -1 if error happen when sending request

@ -6,6 +6,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/recurrent_wo_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
class RequestCategoryList extends StatelessWidget {
@ -17,16 +18,17 @@ class RequestCategoryList extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView.builder(
return ListView.separated(
itemCount: list.length < totalCount ? list.length + 1 : list.length,
shrinkWrap: true,
padding: const EdgeInsets.all(16),
physics: const NeverScrollableScrollPhysics(),
separatorBuilder: (cxt, index) => 16.height,
itemBuilder: (context, index) {
if (index == list.length) {
return const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 1).center;
}
return Padding(padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight), child: _buildRequestItem(list[index]));
return _buildRequestItem(list[index]);
},
);
}
@ -36,6 +38,7 @@ class RequestCategoryList extends StatelessWidget {
bool isGasRefill = request.transactionNo == 2;
bool isAssetTransfer = request.transactionNo == 3;
bool isPPMs = request.transactionNo == 4;
bool isRecurrentTask = request.transactionNo == 5;
if (isServiceRequest) {
return ServiceRequestItemView(requestData: request);
@ -45,6 +48,8 @@ class RequestCategoryList extends StatelessWidget {
return PpmItemView(requestData: request);
} else if (isAssetTransfer) {
return AssetItemView(requestData: request);
} else if (isRecurrentTask) {
return RecurrentWoItemView(requestData: request);
} else {
return Container(
height: 100,

@ -174,7 +174,7 @@ class WorkOrderData {
failureReasone: json["failureReasone"] == null ? null : Lookup.fromJson(json["failureReasone"]),
faultDescription: json["faultDescription"] == null ? null : FaultDescription.fromJson(json["faultDescription"]),
solution: json["solution"] == null ? null : Lookup.fromJson(json["solution"]),
totalWorkingHours: json["totalWorkingHours"],
totalWorkingHours: (json["totalWorkingHours"] ??"").toString(),
workOrderHistory: json["workOrderHistory"] == null ? [] : List<WorkOrderHistory>.from(json["workOrderHistory"]!.map((x) => WorkOrderHistory.fromJson(x))),
activities: json["activities"] == null ? [] : List<Activities>.from(json["activities"]!.map((x) => Activities.fromJson(x))),
needAVisitDateTime: DateTime.tryParse(json["needAVisitDateTime"] ?? ""),

@ -67,7 +67,7 @@ class PpmItemView extends StatelessWidget {
),
],
).toShadowContainer(context, withShadow: showShadow).onPress(() {
// Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: request)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: requestData!.id!)));
});
}
if (requestDetails != null) {
@ -117,7 +117,7 @@ class PpmItemView extends StatelessWidget {
),
],
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: requestDetails!)));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: requestDetails!.id!)));
});
}
return SizedBox();

@ -1,25 +1,75 @@
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/extensions/context_extension.dart';
import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/ppm/recurrent_wo.dart';
import 'package:test_sa/models/new_models/dashboard_detail.dart';
import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart';
import '../../../../views/widgets/requests/request_status.dart';
class RecurrentWoItemView extends StatelessWidget {
final Data? requestData;
final RequestsDetails? requestDetails;
final bool showShadow;
const RecurrentWoItemView({Key? key, this.requestDetails, this.showShadow = true}) : super(key: key);
const RecurrentWoItemView({Key? key, this.requestData, this.requestDetails, this.showShadow = true}) : super(key: key);
@override
Widget build(BuildContext context) {
if (requestData != null) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StatusLabel(
label: requestData!.priorityName!,
textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.priorityName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.priorityName!),
),
8.width,
StatusLabel(
label: requestData!.statusName!,
textColor: AppColor.getRequestStatusTextColorByName(context, requestData!.statusName!),
backgroundColor: AppColor.getRequestStatusColorByName(context, requestData!.statusName!),
),
1.width.expanded,
Text(
requestData!.transactionDate?.toServiceRequestCardFormat ?? "",
textAlign: TextAlign.end,
style: AppTextStyles.tinyFont.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral50),
),
],
),
8.height,
(requestData?.typeTransaction ?? context.translation.ppmRequest).heading5(context),
8.height,
// '${context.translation.assetNumber}: ${requestData!.assetNumber}'.bodyText(context),
// '${context.translation.assetSN}: ${request.assetSN}'.bodyText(context),//todo ask ahmed
// '${context.translation.code}: ${request.code}'.bodyText(context),
'${context.translation.requestNo}: ${requestData!.requestNo}'.bodyText(context),
16.height,
Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
context.translation.viewDetails,
style: AppTextStyles.bodyText.copyWith(color: AppColor.blueStatus(context)),
),
4.width,
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
),
],
).toShadowContainer(context, withShadow: showShadow).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => RecurrentWorkOrderView(taskId: requestData!.id)));
});
}
if (requestDetails != null) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,

@ -5,6 +5,7 @@ import 'package:test_sa/new_views/app_style/app_color.dart';
import 'package:test_sa/new_views/pages/land_page/requests/asset_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/gas_refill_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/ppm_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/recurrent_wo_item_view.dart';
import 'package:test_sa/new_views/pages/land_page/requests/service_request_item_view.dart';
class RequestPaginatedListview extends StatelessWidget {
@ -17,12 +18,13 @@ class RequestPaginatedListview extends StatelessWidget {
@override
Widget build(BuildContext context) {
print('count i got is ${totalCount}');
return ListView.builder(
return ListView.separated(
itemCount: list.length < totalCount ? list.length + 1 : list.length,
controller: scrollController,
shrinkWrap: true,
padding: EdgeInsets.symmetric(horizontal: 16.toScreenWidth),
padding: const EdgeInsets.all(16),
separatorBuilder: (cxt, index) => 16.height,
itemBuilder: (context, index) {
if (index == list.length) {
return const ListTile(
@ -37,7 +39,7 @@ class RequestPaginatedListview extends StatelessWidget {
),
);
}
return Padding(padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight), child: _buildRequestItem(list[index]));
return _buildRequestItem(list[index]);
},
);
}
@ -47,15 +49,21 @@ class RequestPaginatedListview extends StatelessWidget {
bool isGasRefill = request.transactionNo == 2;
bool isAssetTransfer = request.transactionNo == 3;
bool isPPMs = request.transactionNo == 4;
bool isRecurrentTask = request.transactionNo == 5;
if (isServiceRequest) {
return ServiceRequestItemView(requestData: request,refreshData: false,);
return ServiceRequestItemView(
requestData: request,
refreshData: false,
);
} else if (isGasRefill) {
return GasRefillItemView(requestData: request);
} else if (isPPMs) {
return PpmItemView(requestData: request);
} else if (isAssetTransfer) {
return AssetItemView(requestData: request);
} else if (isRecurrentTask) {
return RecurrentWoItemView(requestData: request);
} else {
return Container(
height: 100,

@ -51,6 +51,7 @@ class ServiceRequestItemView extends StatelessWidget {
),
8.height,
(requestData?.typeTransaction ?? context.translation.correctiveMaintenance).heading5(context),
8.height,
'${context.translation.assetName}: ${requestData!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),
// '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context),
// '${context.translation.requestType}: ${requestData!.requestTypeName}'.bodyText(context),
@ -108,6 +109,7 @@ class ServiceRequestItemView extends StatelessWidget {
),
8.height,
(requestDetails!.nameOfType ?? context.translation.correctiveMaintenance).heading5(context),
8.height,
'${context.translation.assetName}: ${requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context),
'${context.translation.assetNumber}: ${requestDetails!.assetNo}'.bodyText(context),
'${context.translation.requestType}: ${requestDetails!.requestType}'.bodyText(context),

@ -70,6 +70,7 @@ class _RequestsListPageState extends State<RequestsListPage> {
if (snapshot.isDetailLoading || snapshot.requestDetailList == null) {
return ListView.builder(
itemCount: 6,
padding: const EdgeInsets.all(16),
itemBuilder: (context, index) {
return Padding(
padding: EdgeInsets.symmetric(vertical: 10.toScreenHeight, horizontal: 0),

@ -64,7 +64,7 @@ class RequestItemViewList extends StatelessWidget {
// color: Colors.grey,
// );
},
separatorBuilder: (cxt, index) => 8.height,
separatorBuilder: (cxt, index) => 16.height,
itemCount: isLoading ? 6 : list.length);
}
}

@ -53,6 +53,8 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
@override
Widget build(BuildContext context) {
return Consumer<ServiceRequestDetailProvider>(builder: (context, requestDetailProvider, child) {
double totalWorkingHours = _requestDetailProvider?.activityMaintenanceHelperModel?.activityMaintenanceTimers
?.fold(0.0, (sum, item) => (sum ?? 0) + DateTime.parse(item.endTime!).difference(DateTime.parse(item.startTime!)).inSeconds) ??
0;
@ -242,11 +244,11 @@ class _InternalMaintenanceRequestState extends State<InternalMaintenanceRequest>
initialValue: requestDetailProvider.activityMaintenanceHelperModel?.travelHours?.toString(),
textInputType: TextInputType.number,
onChange: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.travelHours = int.tryParse(value);
requestDetailProvider.activityMaintenanceHelperModel?.travelHours = num.parse(value) ;// int.tryParse(value);
},
// contentPadding: EdgeInsets.symmetric(vertical: 18.toScreenHeight, horizontal: 16.toScreenWidth),
onSaved: (value) {
requestDetailProvider.activityMaintenanceHelperModel?.travelHours = value as int?;
requestDetailProvider.activityMaintenanceHelperModel?.travelHours = value as num?;
},
),
16.height,

@ -151,6 +151,7 @@ class _SparePartRequestState extends State<SparePartRequest> with TickerProvider
title: context.translation.partNo,
staticData: _spareParts,
showShadow: false,
showAsBottomSheet: true,
loading: _isLoading,
initialValue: requestDetailProvider.sparePartHelperModel?.sparePart,
backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90,

@ -6,7 +6,6 @@ import 'package:test_sa/extensions/int_extensions.dart';
import 'package:test_sa/extensions/string_extensions.dart';
import 'package:test_sa/extensions/text_extensions.dart';
import 'package:test_sa/extensions/widget_extensions.dart';
import 'package:test_sa/models/all_requests_and_count_model.dart';
import 'package:test_sa/models/plan_preventive_visit/plan_preventive_visit_model.dart';
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';
@ -20,9 +19,11 @@ import '../../../widgets/requests/request_status.dart';
class PpmDetailsPage extends StatefulWidget {
static const String id = "/visit-details";
final RequestsDetails request;
const PpmDetailsPage({Key? key, required this.request}) : super(key: key);
// final RequestsDetails request;
final int requestId;
const PpmDetailsPage({Key? key, required this.requestId}) : super(key: key);
@override
_PpmDetailsPageState createState() {
@ -48,7 +49,7 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
Future<void> getVisitData() async {
ppmProvider = Provider.of<PpmProvider>(context, listen: false);
await ppmProvider?.getPlanPreventiveVisitById(widget.request.id!);
await ppmProvider?.getPlanPreventiveVisitById(widget.requestId);
}
@override
@ -70,20 +71,20 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
children: [
Row(
children: [
if (widget.request.priority != null)
StatusLabel(
label: widget.request.priority,
textColor: AppColor.getRequestStatusTextColorByName(context, widget.request.priority!),
backgroundColor: AppColor.getRequestStatusColorByName(context, widget.request.priority!),
),
if (widget.request.priority != null) 8.width,
// if (widget.request.priority != null)
// StatusLabel(
// label: widget.request.priority,
// textColor: AppColor.getRequestStatusTextColorByName(context, widget.request.priority!),
// backgroundColor: AppColor.getRequestStatusColorByName(context, widget.request.priority!),
// ),
// if (planPreventiveVisit?.visitStatus != null) 8.width,
StatusLabel(
label: planPreventiveVisit?.visitStatus!.name!,
id: planPreventiveVisit!.visitStatus!.id!,
textColor: AppColor.getRequestStatusTextColorByName(context, planPreventiveVisit.visitStatus!.name!),
backgroundColor: AppColor.getRequestStatusColorByName(context, planPreventiveVisit.visitStatus!.name!),
),
1.width.expanded,
// 1.width.expanded,
],
),
8.height,
@ -108,7 +109,7 @@ class _PpmDetailsPageState extends State<PpmDetailsPage> {
if (userProvider!.user!.type == UsersTypes.engineer && (planPreventiveVisit.visitStatus!.id! != 270 && planPreventiveVisit.visitStatus!.id! != 269))
AppFilledButton(
onPressed: () async {
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit, details: widget.request)));
await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit)));
getVisitData();
},
label: context.translation.updateRequest,

@ -28,9 +28,8 @@ import 'wo_info_form.dart';
class UpdatePpm extends StatefulWidget {
final Ppm? ppm;
final PlanPreventiveVisit planPreventiveVisit;
final RequestsDetails? details;
const UpdatePpm({Key? key, this.ppm, required this.planPreventiveVisit, this.details}) : super(key: key);
const UpdatePpm({Key? key, this.ppm, required this.planPreventiveVisit}) : super(key: key);
@override
State<UpdatePpm> createState() => _UpdatePpmState();

@ -66,7 +66,7 @@ class PpmItem extends StatelessWidget {
Icon(Icons.arrow_forward, color: AppColor.blueStatus(context), size: 14)
],
).onPress(() {
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(request: RequestsDetails(id: ppm.id!.toInt()))));
Navigator.of(context).push(MaterialPageRoute(builder: (_) => PpmDetailsPage(requestId: ppm.id!.toInt())));
}),
],
).expanded,

Loading…
Cancel
Save