From f99ea0dacd8d99261a268cff73f9bfdae7520a3f Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 25 Mar 2025 12:32:54 +0300 Subject: [PATCH 1/8] remove camel case text, confirmation dialog added, on back press. --- lib/extensions/text_extensions.dart | 15 ++-- lib/extensions/widget_extensions.dart | 46 ++++++++--- .../common_widgets/app_filled_button.dart | 4 +- .../common_widgets/default_app_bar.dart | 16 +++- .../dialoge/acknowledge_work_dialog.dart | 67 ++++++++++++++++ .../swipe_module/dialoge/confirm_dialog.dart | 14 ++-- .../maintenance_request_main.dart | 76 ++++++++++--------- 7 files changed, 175 insertions(+), 63 deletions(-) create mode 100644 lib/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart diff --git a/lib/extensions/text_extensions.dart b/lib/extensions/text_extensions.dart index 5a81bc5c..ea5496e3 100644 --- a/lib/extensions/text_extensions.dart +++ b/lib/extensions/text_extensions.dart @@ -164,13 +164,14 @@ extension CapExtension on String { String get allInCaps => toUpperCase(); - String get cleanupWhitespace => replaceAll(RegExp(r"\s+"), " "); - - String get capitalizeFirstOfEach => trim().isNotEmpty - ? trim().toLowerCase().split(" ").map((str) { - return str.trim()?.inCaps ?? ""; - }).join(" ") - : ""; + String get cleanupWhitespace => this;//replaceAll(RegExp(r"\s+"), " "); + + String get capitalizeFirstOfEach => this; + //trim().isNotEmpty + // ? trim().toLowerCase().split(" ").map((str) { + // return str.trim()?.inCaps ?? ""; + // }).join(" ") + // : ""; } extension FilesExtension on String { diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 0586f01a..23a5a6a1 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -4,6 +4,7 @@ import 'package:shimmer/shimmer.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart'; import '../new_views/app_style/app_color.dart'; @@ -54,6 +55,26 @@ extension WidgetExtensions on Widget { Widget toExpanded({int flex = 1}) => Expanded(flex: flex, child: this); + Widget handlePopScope(BuildContext _cxt, VoidCallback onSave) { + return PopScope( + canPop: false, + onPopInvokedWithResult: (didPop, result) { + if (didPop) { + return; + } + showDialog( + context: _cxt, + builder: (BuildContext cxt) => AcknowledgeWorkDialog( + onSave: () => onSave(), + onDiscard: () { + Navigator.of(cxt).pop(); + }, + ), + ); + }, + child: this); + } + Widget toShimmer({bool isShow = true, double radius = 20}) => isShow ? Shimmer.fromColors( baseColor: const Color(0xffe8eff0), @@ -81,18 +102,19 @@ extension WidgetExtensions on Widget { ).toShadowContainer(context) : this; - Widget toShadowContainer(BuildContext context, {bool showShadow = true,double borderRadius = 14, bool withShadow = true, Color? backgroundColor, double padding = 16, EdgeInsets? paddingObject}) => withShadow - ? Container( - padding: paddingObject ?? EdgeInsets.all(padding), - width: double.infinity, - decoration: ShapeDecoration( - color: backgroundColor ?? AppColor.background(context), - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius)), - shadows: showShadow ? [boxShadowR14] : null, - ), - child: this, - ) - : this; + Widget toShadowContainer(BuildContext context, {bool showShadow = true, double borderRadius = 14, bool withShadow = true, Color? backgroundColor, double padding = 16, EdgeInsets? paddingObject}) => + withShadow + ? Container( + padding: paddingObject ?? EdgeInsets.all(padding), + width: double.infinity, + decoration: ShapeDecoration( + color: backgroundColor ?? AppColor.background(context), + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(borderRadius)), + shadows: showShadow ? [boxShadowR14] : null, + ), + child: this, + ) + : this; Widget bottomSheetContainer(BuildContext context, {EdgeInsets? padding}) => Container( clipBehavior: Clip.antiAlias, diff --git a/lib/new_views/common_widgets/app_filled_button.dart b/lib/new_views/common_widgets/app_filled_button.dart index 153f7431..87376c27 100644 --- a/lib/new_views/common_widgets/app_filled_button.dart +++ b/lib/new_views/common_widgets/app_filled_button.dart @@ -15,6 +15,7 @@ class AppFilledButton extends StatelessWidget { final Color? textColor; final bool showBorder; final double radius; + final int height; final bool disableButton; const AppFilledButton( @@ -25,6 +26,7 @@ class AppFilledButton extends StatelessWidget { this.icon, this.fontSize, this.loading = false, + this.height = 56, this.showBorder = false, this.disableButton = false, this.buttonColor, @@ -36,7 +38,7 @@ class AppFilledButton extends StatelessWidget { @override Widget build(BuildContext context) { return Container( - height: 56.toScreenHeight, + height: height.toScreenHeight, width: maxWidth ? double.infinity : null, alignment: Alignment.center, decoration: BoxDecoration( diff --git a/lib/new_views/common_widgets/default_app_bar.dart b/lib/new_views/common_widgets/default_app_bar.dart index 6cc8bd5a..7d28abaa 100644 --- a/lib/new_views/common_widgets/default_app_bar.dart +++ b/lib/new_views/common_widgets/default_app_bar.dart @@ -4,6 +4,7 @@ import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; import 'package:test_sa/new_views/pages/land_page/land_page.dart'; +import 'package:test_sa/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart'; import '../app_style/app_color.dart'; @@ -12,8 +13,9 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { final List? actions; final Function? onBackPress; final bool showHomeActionButton; + final VoidCallback? onWillPopScope; - const DefaultAppBar({this.title, this.onBackPress, this.actions, this.showHomeActionButton = false, Key? key}) : super(key: key); + const DefaultAppBar({this.title, this.onBackPress, this.onWillPopScope, this.actions, this.showHomeActionButton = false, Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -40,6 +42,18 @@ class DefaultAppBar extends StatelessWidget implements PreferredSizeWidget { title: Row( children: [ const Icon(Icons.arrow_back_ios).onPress(() { + if (onWillPopScope != null) { + showDialog( + context: context, + builder: (BuildContext cxt) => AcknowledgeWorkDialog( + onSave: onWillPopScope!, + onDiscard: () { + Navigator.of(cxt).pop(); + }, + ), + ); + return; + } if (onBackPress != null) { onBackPress!(); } else { diff --git a/lib/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart b/lib/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart new file mode 100644 index 00000000..81ee9a1d --- /dev/null +++ b/lib/new_views/swipe_module/dialoge/acknowledge_work_dialog.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; +import 'package:test_sa/extensions/int_extensions.dart'; +import 'package:test_sa/extensions/text_extensions.dart'; +import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/new_views/app_style/app_color.dart'; +import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; + +class AcknowledgeWorkDialog extends StatelessWidget { + final String? title; + final String? message; + final String? okTitle; + final VoidCallback onSave; + final VoidCallback onDiscard; + + const AcknowledgeWorkDialog( + {Key? key, this.title, this.message = "To prevent the risk of losing your changes, Please confirm Save or Discard", this.okTitle, required this.onSave, required this.onDiscard}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return Dialog( + backgroundColor: Colors.white, + shape: const RoundedRectangleBorder(), + insetPadding: const EdgeInsets.only(left: 21, right: 21), + child: Padding( + padding: const EdgeInsets.only(left: 20, right: 20, top: 18, bottom: 28), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + const Text( + "Confirm", + style: TextStyle(fontSize: 24, fontWeight: FontWeight.w600, color: Colors.black87, height: 35 / 24, letterSpacing: -0.96), + ).paddingOnly(top: 16, bottom: 8), + message != null ? message!.heading5(context).custom(color: AppColor.neutral50) : const SizedBox(), + 28.height, + Row( + children: [ + AppFilledButton( + label: "Discard", + buttonColor: Colors.white54, + textColor: AppColor.red30, + height: 40, + showBorder: true, + onPressed: () { + Navigator.of(context).pop(); + onDiscard(); + }, + ).expanded, + 16.width, + AppFilledButton( + label: "Save", + onPressed: () { + Navigator.of(context).pop(); + onSave(); + }, + height: 40, + buttonColor: AppColor.green70, + ).expanded, + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/new_views/swipe_module/dialoge/confirm_dialog.dart b/lib/new_views/swipe_module/dialoge/confirm_dialog.dart index 3e07310f..f8cfacfb 100644 --- a/lib/new_views/swipe_module/dialoge/confirm_dialog.dart +++ b/lib/new_views/swipe_module/dialoge/confirm_dialog.dart @@ -6,13 +6,13 @@ import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; class ConfirmDialog extends StatelessWidget { - final String ?title; - final String ?message; - final String ?okTitle; - final VoidCallback ?onTap; - final VoidCallback ?onCloseTap; + final String? title; + final String? message; + final String? okTitle; + final VoidCallback? onTap; + final VoidCallback? onCloseTap; - const ConfirmDialog({Key ?key, this.title, this.message, this.okTitle, this.onTap, this.onCloseTap}) : super(key: key); + const ConfirmDialog({Key? key, this.title, this.message, this.okTitle, this.onTap, this.onCloseTap}) : super(key: key); @override Widget build(BuildContext context) { @@ -45,7 +45,7 @@ class ConfirmDialog extends StatelessWidget { ) ], ), - message!=null?message!.heading5(context).custom(color: AppColor.neutral70):const SizedBox(), + message != null ? message!.heading5(context).custom(color: AppColor.neutral70) : const SizedBox(), 28.height, AppFilledButton( label: okTitle ?? "OK", diff --git a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart index e60383bb..a9dded6f 100644 --- a/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart +++ b/lib/service_request_latest/views/forms/maintenance_request/maintenance_request_main.dart @@ -49,7 +49,12 @@ class _MaintenanceRequestFormState extends State with Si bool isUpdate = requestDetailProvider.activityMaintenanceHelperModel?.id != 0; return Scaffold( backgroundColor: AppColor.neutral110, - appBar: const DefaultAppBar(title: "CM Activity"), + appBar: DefaultAppBar( + title: "CM Activity", + onWillPopScope: () { + save(requestDetailProvider); + }, + ), body: Stack( children: [ DefaultTabController( @@ -97,48 +102,49 @@ class _MaintenanceRequestFormState extends State with Si label: requestDetailProvider.activityMaintenanceHelperModel?.id != 0 ? context.translation.update : context.translation.addActivity, // Use the dynamic label buttonColor: AppColor.primary10, onPressed: () async { - //TODO add this as dropdown not added in design yet Bhaa need to confirm with hussain then. - // requestDetailProvider.activityMaintenanceHelperModel?.lastSituationId = 282; - - if (validate(model: requestDetailProvider.activityMaintenanceHelperModel!)) { - requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers = requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers ?? []; - requestDetailProvider.activityMaintenanceHelperModel?.timerModelList?.forEach((timer) { - int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; - requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers?.add( - ActivityMaintenanceTimers( - id: 0, - startTime: timer.startAt!.toIso8601String(), // Handle potential null - endTime: timer.endAt?.toIso8601String(), // Handle potential null - workingHours: ((durationInSecond) / 60 / 60), - ), - ); - }); - showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); - int status = -1; - if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) { - status = await requestDetailProvider.createActivityMaintenanceRequest(); - } else { - status = await requestDetailProvider.updateActivityMaintenance(); - } - if (status == 200) { - requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); - Navigator.pop(context); - Navigator.pop(context); - } else { - Navigator.pop(context); - } - } - - // Handle button press + save(requestDetailProvider); }, ), ), ], ), - ); + ).handlePopScope(context, () { + save(requestDetailProvider); + }); }); } + void save(ServiceRequestDetailProvider requestDetailProvider) async { + if (validate(model: requestDetailProvider.activityMaintenanceHelperModel!)) { + requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers = requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers ?? []; + requestDetailProvider.activityMaintenanceHelperModel?.timerModelList?.forEach((timer) { + int durationInSecond = timer.endAt!.difference(timer.startAt!).inSeconds; + requestDetailProvider.activityMaintenanceHelperModel?.activityMaintenanceTimers?.add( + ActivityMaintenanceTimers( + id: 0, + startTime: timer.startAt!.toIso8601String(), // Handle potential null + endTime: timer.endAt?.toIso8601String(), // Handle potential null + workingHours: ((durationInSecond) / 60 / 60), + ), + ); + }); + showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); + int status = -1; + if (requestDetailProvider.activityMaintenanceHelperModel?.id == 0) { + status = await requestDetailProvider.createActivityMaintenanceRequest(); + } else { + status = await requestDetailProvider.updateActivityMaintenance(); + } + if (status == 200) { + requestDetailProvider.getWorkOrderById(id: requestDetailProvider.currentWorkOrder!.data!.requestId!); + Navigator.pop(context); + Navigator.pop(context); + } else { + Navigator.pop(context); + } + } + } + bool validate({required ActivityMaintenanceHelperModel model}) { if (model.activityStatus == null) { Fluttertoast.showToast(msg: "${context.translation.youHaveToSelect} ${context.translation.activityStatus}"); From 53028580972bdeaf08940eb19de09ae01a1dad4d Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 25 Mar 2025 12:38:56 +0300 Subject: [PATCH 2/8] confirmation dialog added on ppm & recurrent --- .../recurrent_work_order_view.dart | 11 ++++++++-- .../pages/user/ppm/update_ppm/update_ppm.dart | 20 ++++++++++--------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart index 8b3eb979..19574b31 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/recurrent_work_order_view.dart @@ -48,7 +48,12 @@ class _RecurrentWorkOrderViewState extends State { Widget build(BuildContext context) { return Consumer(builder: (context, requestProvider, child) { return Scaffold( - appBar: DefaultAppBar(title: context.translation.recurrentWo), + appBar: DefaultAppBar( + title: context.translation.recurrentWo, + onWillPopScope: () { + _updateTask(context: context, status: 0); + }, + ), body: allRequestsProvider!.isLoading ? const ALoading() : requestProvider.recurrentWoData != null @@ -94,7 +99,9 @@ class _RecurrentWorkOrderViewState extends State { ], ) : NoDataFound(message: context.translation.noDataFound).center, - ); + ).handlePopScope(context, () { + _updateTask(context: context, status: 0); + }); }); } } 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 dc78915c..839a6090 100644 --- a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart +++ b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart @@ -1,5 +1,4 @@ import 'dart:convert'; -import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -9,7 +8,6 @@ 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/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/models/ppm/ppm.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; @@ -44,8 +42,7 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { late PpmProvider ppmProvider; _onSubmit({required int status}) async { - - if(ppmProvider.validate()){ + if (ppmProvider.validate()) { showDialog(context: context, barrierDismissible: false, builder: (context) => const AppLazyLoading()); ppmProvider.planPreventiveVisit?.preventiveVisitAttachments = []; for (var item in ppmProvider.ppmPlanAttachments) { @@ -67,7 +64,7 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { }); await ppmProvider.updateVisitByEngineer(status: status).whenComplete(() { - if(status==1){ + if (status == 1) { AllRequestsProvider allRequestsProvider = Provider.of(context, listen: false); allRequestsProvider.reset(); allRequestsProvider.getAllRequests(context, typeTransaction: 4); @@ -78,8 +75,6 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { Navigator.pop(context); }); } - - } @override @@ -115,7 +110,12 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { Widget build(BuildContext context) { return Scaffold( backgroundColor: AppColor.neutral110, - appBar: DefaultAppBar(title: context.translation.preventiveMaintenance), + appBar: DefaultAppBar( + title: context.translation.preventiveMaintenance, + onWillPopScope: () { + _onSubmit(status: 0); + }, + ), key: _scaffoldKey, body: SafeArea( child: Column( @@ -212,6 +212,8 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { ], ), ), - ); + ).handlePopScope(context, () { + _onSubmit(status: 0); + }); } } From 544dffc03fc3009617d2113be219be1d0c49cc6f Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 25 Mar 2025 13:01:07 +0300 Subject: [PATCH 3/8] chart updated overview screen. --- .../widgets/progress_fragment.dart | 79 +++++++++---------- pubspec.lock | 24 ++---- pubspec.yaml | 2 +- 3 files changed, 47 insertions(+), 58 deletions(-) diff --git a/lib/dashboard_latest/widgets/progress_fragment.dart b/lib/dashboard_latest/widgets/progress_fragment.dart index 994d13d7..8f60be60 100644 --- a/lib/dashboard_latest/widgets/progress_fragment.dart +++ b/lib/dashboard_latest/widgets/progress_fragment.dart @@ -151,10 +151,9 @@ // import 'package:flutter/material.dart'; +import 'package:pie_chart/pie_chart.dart'; import 'package:provider/provider.dart'; -import 'package:syncfusion_flutter_charts/charts.dart'; import 'package:test_sa/dashboard_latest/dashboard_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/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; @@ -212,46 +211,44 @@ class ProgressFragment extends StatelessWidget { child: Stack( alignment: Alignment.center, children: [ - SfCircularChart( - tooltipBehavior: TooltipBehavior( - enable: true, - // elevation: 2, - color: context.isDark ? const Color(0xFF111427) : const Color(0xffF7F9FB), - textStyle: context.isDark ? null : const TextStyle(color: Colors.black87, fontSize: 12), + PieChart( + dataMap: {for (var v in chartData) v.x: v.y}, + animationDuration: const Duration(milliseconds: 800), + chartLegendSpacing: 32, + chartRadius: MediaQuery.of(context).size.width / 3.2, + colorList: chartData.map((element) => element.color).toList(), + initialAngleInDegree: 270, + chartType: ChartType.ring, + ringStrokeWidth: 32, + centerWidget: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + context.translation.total, + style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + Text( + "$total", + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), + ), + ], + ), + legendOptions: const LegendOptions( + showLegendsInRow: false, + legendPosition: LegendPosition.right, + showLegends: true, + legendTextStyle: TextStyle( + fontWeight: FontWeight.w500, ), - legend: const Legend( - //isVisible: true, - ), - series: [ - DoughnutSeries( - dataSource: chartData, - radius: "100%", - innerRadius: "60%", - pointColorMapper: (ChartData data, _) => data.color, - xValueMapper: (ChartData data, _) => data.x, - yValueMapper: (ChartData data, _) => data.y, - dataLabelMapper: (ChartData data, _) => data.x, - dataLabelSettings: DataLabelSettings( - margin: const EdgeInsets.all(8), - isVisible: true, - textStyle: TextStyle(color: context.isDark ? Colors.white : AppColor.neutral20, fontSize: 12, fontWeight: FontWeight.w500), - labelPosition: ChartDataLabelPosition.outside, - ), - ) - ]).toShimmer(isShow: snapshot.isAllCountLoading, radius: 250).paddingAll(0).toShadowContainer(context), - Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - context.translation.total, - style: AppTextStyles.heading5.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), - ), - Text( - "$total", - style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral20), - ), - ], - ), + ), + chartValuesOptions: const ChartValuesOptions( + showChartValueBackground: false, + showChartValues: false, + showChartValuesInPercentage: false, + showChartValuesOutside: false, + decimalPlaces: 1, + ), + ).toShimmer(isShow: snapshot.isAllCountLoading, radius: 250).paddingAll(0).toShadowContainer(context), ], ), ), diff --git a/pubspec.lock b/pubspec.lock index 402dbb06..4546b9fd 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1213,6 +1213,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.0.2" + pie_chart: + dependency: "direct main" + description: + name: pie_chart + sha256: "58e6a46999ac938bfa1c3e5be414d6e149f037647197dca03ba3614324c12c82" + url: "https://pub.dev" + source: hosted + version: "5.4.0" pinput: dependency: "direct main" description: @@ -1506,22 +1514,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.2.0" - syncfusion_flutter_charts: - dependency: "direct main" - description: - name: syncfusion_flutter_charts - sha256: a755274a8786b200b7a05f7414168cd5858871db74d0f1de2e57b20a8aaeb7a4 - url: "https://pub.dev" - source: hosted - version: "26.2.14" - syncfusion_flutter_core: - dependency: transitive - description: - name: syncfusion_flutter_core - sha256: "6e67726b85812afc7105725a23620b876ab7f6b04b8410e211330ffb8c2cdbe8" - url: "https://pub.dev" - source: hosted - version: "26.2.14" synchronized: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 8cc4034f..2bcf8f5b 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -79,11 +79,11 @@ dependencies: image_cropper: ^8.0.2 flutter_timezone: ^3.0.1 device_calendar: ^4.3.3 + pie_chart: ^5.4.0 badges: ^3.1.1 # buttons_tabbar: ^1.1.2 flutter_custom_month_picker: ^0.1.3 - syncfusion_flutter_charts: ^26.2.14 local_auth: ^2.3.0 google_api_availability: ^5.0.0 huawei_push: ^6.5.0+300 From 99ef704913755ca1d530f1583e26b651498516fd Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 25 Mar 2025 14:43:12 +0300 Subject: [PATCH 4/8] rename points done --- lib/dashboard_latest/dashboard_provider.dart | 8 ++++---- .../new_models/work_order_detail_model.dart | 8 ++++---- .../my_request/all_requests_filter_page.dart | 16 +++++++++++----- .../pages/land_page/requests/ppm_item_view.dart | 6 ++++-- .../requests/service_request_item_view.dart | 10 ++++++---- .../views/components/asset_detail_card.dart | 2 +- .../forms/asset_retired/verify_asset_detail.dart | 15 ++++++++------- lib/views/pages/user/ppm/ppm_details_page.dart | 4 ++-- .../components/task_info_widget.dart | 2 +- .../pages/user/ppm/update_ppm/wo_info_form.dart | 5 +---- 10 files changed, 42 insertions(+), 34 deletions(-) diff --git a/lib/dashboard_latest/dashboard_provider.dart b/lib/dashboard_latest/dashboard_provider.dart index d763092d..db07f571 100644 --- a/lib/dashboard_latest/dashboard_provider.dart +++ b/lib/dashboard_latest/dashboard_provider.dart @@ -367,16 +367,16 @@ class CategoryTabs { if (userType == UsersTypes.engineer) { // 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)); + tabs.add(CategoryTabs(label: 'UnAssigned', tag: 1, id: 1)); + tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3)); tabs.add(CategoryTabs(label: 'Completed', tag: 3, id: 4)); return tabs; } - tabs.add(CategoryTabs(label: 'Open Request', tag: 1, id: 2)); + tabs.add(CategoryTabs(label: 'Open', tag: 1, id: 2)); tabs.add(CategoryTabs(label: 'In Progress', tag: 2, id: 3)); - tabs.add(CategoryTabs(label: 'Upcoming', tag: 3, id: 1)); + tabs.add(CategoryTabs(label: 'Pending Acknowledgement', tag: 3, id: 1)); tabs.add(CategoryTabs(label: 'Canceled', tag: 6, id: 4)); return tabs; } diff --git a/lib/models/new_models/work_order_detail_model.dart b/lib/models/new_models/work_order_detail_model.dart index 8117d902..d98565e3 100644 --- a/lib/models/new_models/work_order_detail_model.dart +++ b/lib/models/new_models/work_order_detail_model.dart @@ -281,7 +281,7 @@ class WorkOrderAssignedEmployee { required this.languageId, }); - dynamic userId; + String userId; String? userName; String? email; int? languageId; @@ -357,7 +357,7 @@ class Activities { activityStatus = json['activityStatus'] != null ? Lookup.fromJson(json['activityStatus']) : null; activityMaintenance = json['activityMaintenance'] != null ? ActivityMaintenance.fromJson(json['activityMaintenance']) : null; if (activityMaintenance != null) { - activityType = 'Maintenance Request'; + activityType = 'CM Activity'; } activitySparePart = json['activitySparePart'] != null ? ActivitySparePart.fromJson(json['activitySparePart']) : null; @@ -504,9 +504,9 @@ class WorkOrderContactPerson { String? name; String? employeeId; String? position; - dynamic extension; + String extension; String? email; - dynamic mobilePhone; + String mobilePhone; WorkOrderAssignedEmployee? contactUser; factory WorkOrderContactPerson.fromJson(Map json) { diff --git a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart index 0ce17697..684eb99d 100644 --- a/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart +++ b/lib/new_views/pages/land_page/my_request/all_requests_filter_page.dart @@ -1,9 +1,11 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:test_sa/controllers/providers/api/user_provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/extensions/text_extensions.dart'; import 'package:test_sa/extensions/widget_extensions.dart'; +import 'package:test_sa/models/enums/user_types.dart'; import 'package:test_sa/models/search_all_requests_model.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; @@ -43,6 +45,7 @@ class _AllRequestsFilterPageState extends State { @override Widget build(BuildContext context) { + bool isEngineer = (Provider.of(context, listen: false).user?.type) == UsersTypes.engineer; if (search == null) { search = SearchAllRequestsModel( requestNumber: SearchByRequestNumberModel(context, controller: TextEditingController()), @@ -59,14 +62,17 @@ class _AllRequestsFilterPageState extends State { context.translation.gasRefill: 2, context.translation.deviceTransfer: 3, context.translation.preventiveMaintenance: 4, - context.translation.recurrentWo: 5, }; + if (isEngineer) { + types.addAll({context.translation.recurrentWo: 5}); + } final statuses = { - context.translation.allRequests: 0, + "All WO": 0, context.translation.open: 1, context.translation.inProgress: 2, context.translation.completed: 4, context.translation.closed: 3, + "Canceled": 5, }; return Scaffold( appBar: DefaultAppBar( @@ -99,7 +105,7 @@ class _AllRequestsFilterPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - context.translation.requestStatus.heading5(context), + "WO Status".heading5(context), 8.height, RequestsTypeFilter( initialValues: search?.statuses ?? [], @@ -116,7 +122,7 @@ class _AllRequestsFilterPageState extends State { }, ), 16.height, - context.translation.typeOfRequest.heading5(context), + "Type of WO".heading5(context), 8.height, RequestsTypeFilter( initialValues: search?.typeTransaction ?? [], @@ -155,7 +161,7 @@ class _AllRequestsFilterPageState extends State { ], ), 16.height, - "Archived Requests".heading5(context), + "Archived WO".heading5(context), // 8.height, Row( children: [ diff --git a/lib/new_views/pages/land_page/requests/ppm_item_view.dart b/lib/new_views/pages/land_page/requests/ppm_item_view.dart index a4569881..ba30b5c7 100644 --- a/lib/new_views/pages/land_page/requests/ppm_item_view.dart +++ b/lib/new_views/pages/land_page/requests/ppm_item_view.dart @@ -49,10 +49,11 @@ class PpmItemView extends StatelessWidget { 8.height, (requestData?.typeTransaction ?? context.translation.ppmRequest).heading5(context), 8.height, + '${context.translation.assetName}: ${requestData!.assetName}'.bodyText(context), '${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), + 'PM No: ${requestData!.requestNo}'.bodyText(context), 16.height, Row( mainAxisSize: MainAxisSize.min, @@ -99,10 +100,11 @@ class PpmItemView extends StatelessWidget { 8.height, (requestDetails?.nameOfType ?? context.translation.ppmRequest).heading5(context), 8.height, + '${context.translation.assetName}: ${requestDetails!.assetName}'.bodyText(context), '${context.translation.assetNumber}: ${requestDetails!.assetNo}'.bodyText(context), '${context.translation.assetSN}: ${requestDetails!.assetSN}'.bodyText(context), // '${context.translation.code}: ${request.code}'.bodyText(context), - '${context.translation.requestNo}: ${requestDetails!.requestNo}'.bodyText(context), + 'PM No: ${requestDetails!.requestNo}'.bodyText(context), 16.height, Row( mainAxisSize: MainAxisSize.min, diff --git a/lib/new_views/pages/land_page/requests/service_request_item_view.dart b/lib/new_views/pages/land_page/requests/service_request_item_view.dart index e9b09bbc..928dc950 100644 --- a/lib/new_views/pages/land_page/requests/service_request_item_view.dart +++ b/lib/new_views/pages/land_page/requests/service_request_item_view.dart @@ -55,7 +55,7 @@ class ServiceRequestItemView extends StatelessWidget { '${context.translation.assetName}: ${requestData!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), // '${context.translation.assetNumber}: ${request.assetNo}'.bodyText(context), // '${context.translation.requestType}: ${requestData!.requestTypeName}'.bodyText(context), - '${context.translation.requestNo}: ${requestData!.requestNo}'.bodyText(context), + 'CM Number: ${requestData!.requestNo}'.bodyText(context), if (requestData?.statusName == 'Canceled') ...[ '${context.translation.rejectionReason}: ${requestData!.rejectReason}'.bodyText(context), ], @@ -110,10 +110,12 @@ 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.requestType}: ${requestDetails!.requestType}'.bodyText(context), + 'CM Number: ${requestDetails!.requestNo}'.bodyText(context), '${context.translation.assetNumber}: ${requestDetails!.assetNo}'.bodyText(context), - '${context.translation.requestType}: ${requestDetails!.requestType}'.bodyText(context), - '${context.translation.requestNo}: ${requestDetails!.requestNo}'.bodyText(context), + '${context.translation.assetName}: ${requestDetails!.assetName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), + 8.height, Row( // mainAxisSize: MainAxisSize.min, diff --git a/lib/service_request_latest/views/components/asset_detail_card.dart b/lib/service_request_latest/views/components/asset_detail_card.dart index f86b30ad..2ba75907 100644 --- a/lib/service_request_latest/views/components/asset_detail_card.dart +++ b/lib/service_request_latest/views/components/asset_detail_card.dart @@ -47,7 +47,7 @@ class AssetDetailCard extends StatelessWidget { ]), 6.height, Text( - context.translation.assetSituation, + "Work Order Details", style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), ), Text( diff --git a/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart b/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart index c0f9942e..25c26a43 100644 --- a/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart +++ b/lib/service_request_latest/views/forms/asset_retired/verify_asset_detail.dart @@ -1,7 +1,6 @@ import 'dart:async'; import 'package:flutter/material.dart'; -import 'package:fluttertoast/fluttertoast.dart'; import 'package:provider/provider.dart'; import 'package:test_sa/extensions/context_extension.dart'; import 'package:test_sa/extensions/int_extensions.dart'; @@ -215,12 +214,14 @@ class _VerifyAssetDetailsState extends State with TickerProv } }, ), - 12.height, - context.translation.solutions.heading6(context).custom(color: AppColor.neutral50), - 8.height, - requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null - ? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120) - : const SizedBox(), + if (requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null) ...[ + 12.height, + context.translation.solutions.heading6(context).custom(color: AppColor.neutral50), + 8.height, + requestDetailProvider.engineerUpdateWorkOrderHelperModel?.solution != null + ? requestDetailProvider.engineerUpdateWorkOrderHelperModel!.solution!.bodyText2(context).custom(color: AppColor.neutral120) + : const SizedBox(), + ] ], ).toShadowContainer(context).paddingAll(16), ).expanded, diff --git a/lib/views/pages/user/ppm/ppm_details_page.dart b/lib/views/pages/user/ppm/ppm_details_page.dart index 107cc4d7..ecd40444 100644 --- a/lib/views/pages/user/ppm/ppm_details_page.dart +++ b/lib/views/pages/user/ppm/ppm_details_page.dart @@ -97,7 +97,7 @@ class _PpmDetailsPageState extends State { // '${context.translation.expectDate}: ${planPreventiveVisit.expectedDate?.toAssetDetailsFormat ?? ""}'.bodyText(context), //todo @baha, '${context.translation.actualDate}: ${planPreventiveVisit.acutalDateOfVisit?.toIso8601String().toAssetDetailsFormat ?? ""}'.bodyText(context), //todo @baha, const Divider().defaultStyle(context), - '${context.translation.engineerName}: ${planPreventiveVisit.assignedEmployee?.userName ?? ""}'.bodyText(context), //todo @baha, + '${context.translation.assignedEmployee}: ${planPreventiveVisit.assignedEmployee?.userName ?? ""}'.bodyText(context), //todo @baha, '${context.translation.site}: ${planPreventiveVisit.siteName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), //todo @baha, '${context.translation.building}: ${planPreventiveVisit.buildingName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), //todo @baha, '${context.translation.floor}: ${planPreventiveVisit.floorName?.cleanupWhitespace.capitalizeFirstOfEach}'.bodyText(context), //todo @baha, @@ -112,7 +112,7 @@ class _PpmDetailsPageState extends State { await Navigator.of(context).push(MaterialPageRoute(builder: (_) => UpdatePpm(ppm: null, planPreventiveVisit: planPreventiveVisit))); getVisitData(); }, - label: context.translation.updateRequest, + label: context.translation.updateWorkOrder, ).paddingAll(16) ]); }), diff --git a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart index 407449bc..4e418aa3 100644 --- a/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart +++ b/lib/views/pages/user/ppm/ppm_work_order/recurrent_wo/components/task_info_widget.dart @@ -40,7 +40,7 @@ class RecurrentTaskInfoWidget extends StatelessWidget { 2.height, '${context.translation.taskNo}: ${model!.taskNo!}'.bodyText2(context).custom(color: AppColor.neutral120), '${context.translation.site}: ${model!.site!.siteName!}'.bodyText2(context).custom(color: AppColor.neutral120), - '${context.translation.assignEngineer}: ${model!.engineer!.userName ?? ""}'.bodyText2(context).custom(color: AppColor.neutral120), + '${context.translation.assignedEmployee}: ${model!.engineer!.userName ?? ""}'.bodyText2(context).custom(color: AppColor.neutral120), '${context.translation.scheduledDate}: ${model!.scheduleDate!.toMonthYearFormat}'.bodyText2(context).custom(color: AppColor.neutral120), ], ).toShadowContainer(context), diff --git a/lib/views/pages/user/ppm/update_ppm/wo_info_form.dart b/lib/views/pages/user/ppm/update_ppm/wo_info_form.dart index a5e23ea4..b1b44b66 100644 --- a/lib/views/pages/user/ppm/update_ppm/wo_info_form.dart +++ b/lib/views/pages/user/ppm/update_ppm/wo_info_form.dart @@ -78,9 +78,6 @@ class _WoInfoFormState extends State { '${context.translation.pmPlanNo}: ${widget.planPreventiveVisit.planNo}'.bodyText2(context).custom(color: AppColor.neutral120), //need to add in translation it's suggestion from ahmed.. 'Work Order Number: ${widget.planPreventiveVisit.visitNo}'.bodyText2(context).custom(color: AppColor.neutral120), - '${context.translation.from}: ${widget.planPreventiveVisit.fromDate?.toMonthYearFormat}'.bodyText2(context).custom(color: AppColor.neutral120), - '${context.translation.to}: ${widget.planPreventiveVisit.toDate?.toMonthYearFormat}'.bodyText2(context).custom(color: AppColor.neutral120), - '${context.translation.nextPmDate}: ${widget.planPreventiveVisit.nextPMDate != null ? widget.planPreventiveVisit.nextPMDate!.toMonthYearFormat : '-'}' .bodyText2(context) .custom(color: AppColor.neutral120), @@ -248,7 +245,7 @@ class _WoInfoFormState extends State { _timerWidget(context, totalWorkingHours), 8.height, AppTextFormField( - labelText: context.translation.callComments, + labelText: context.translation.comment, backgroundColor: AppColor.neutral100, showShadow: false, initialValue: (widget.planPreventiveVisit.comments ?? "").toString(), From bbc584800ad10f3deefebe477302347dc82b823c Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 25 Mar 2025 15:05:07 +0300 Subject: [PATCH 5/8] CM contact info added. --- .../service_request_detail_view.dart | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/lib/service_request_latest/views/components/service_request_detail_view.dart b/lib/service_request_latest/views/components/service_request_detail_view.dart index 61111bdd..74512830 100644 --- a/lib/service_request_latest/views/components/service_request_detail_view.dart +++ b/lib/service_request_latest/views/components/service_request_detail_view.dart @@ -1,4 +1,3 @@ -import 'dart:convert'; import 'dart:io'; import 'package:flutter/material.dart'; @@ -65,6 +64,8 @@ class _ServiceRequestDetailViewState extends State { workOrderDetailCard(context, requestProvider.currentWorkOrder!.data!, _userProvider, requestProvider), initialVisitCard(requestDetailProvider: requestProvider, userProvider: _userProvider), assetDetailCard(requestDetailProvider: requestProvider, userProvider: _userProvider), + 12.height, + contactInfoCard(context, requestProvider.currentWorkOrder!.data!), 20.height, ], ), @@ -334,6 +335,55 @@ class _ServiceRequestDetailViewState extends State { ).toShadowContainer(context, padding: 0); } + Widget contactInfoCard(BuildContext context, WorkOrderData workOrder) { + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Contact Info", + style: AppTextStyles.heading4.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + 8.height, + ListView.separated( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + padding: EdgeInsets.zero, + itemBuilder: (cxt, index) => Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${workOrder.workOrderContactPerson[index].name}', + style: AppTextStyles.heading6.copyWith(color: context.isDark ? AppColor.neutral30 : AppColor.neutral50), + ), + Text( + '${context.translation.employeeId}: ${workOrder.workOrderContactPerson[index].employeeId}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.telephone}: ${workOrder.workOrderContactPerson[index].mobilePhone}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + 'Job: ${workOrder.workOrderContactPerson[index].position}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + '${context.translation.email}: ${workOrder.workOrderContactPerson[index].email}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + Text( + 'Extension: ${workOrder.workOrderContactPerson[index].extension}', + style: AppTextStyles.bodyText.copyWith(color: context.isDark ? AppColor.neutral10 : AppColor.neutral120), + ), + ], + ), + separatorBuilder: (cxt, index) => const Divider().defaultStyle(context), + itemCount: workOrder.workOrderContactPerson.length), + ], + ).toShadowContainer(context, padding: 16); + } + Widget assetRetiredButton({required BuildContext context}) { return Padding( padding: EdgeInsets.symmetric(horizontal: 16.toScreenHeight, vertical: 12.toScreenWidth), From 5825464ed54449399e25392c941a719842d720e3 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 26 Mar 2025 11:00:49 +0300 Subject: [PATCH 6/8] ppm wo inspection back button added. --- .../pages/user/ppm/update_ppm/update_ppm.dart | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) 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 839a6090..51255a31 100644 --- a/lib/views/pages/user/ppm/update_ppm/update_ppm.dart +++ b/lib/views/pages/user/ppm/update_ppm/update_ppm.dart @@ -158,6 +158,7 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { ), ), TabBarView( + physics: const NeverScrollableScrollPhysics(), children: [ WoInfoForm( planPreventiveVisit: _planPreventiveVisit, @@ -183,6 +184,24 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { ).expanded, Row( children: [ + if (tabIndex == 1) ...[ + AppFilledButton( + buttonColor: _tabController!.index == 0 ? null:AppColor.background(context), + textColor: _tabController!.index == 0 ? null: AppColor.blueStatus(context), + showBorder: true, + disableButton: _tabController!.index == 0, + onPressed: () { + if (_tabController!.index == 0) { + return; + } + _tabController?.animateTo(_tabController!.index - 1); + setState(() {}); + return; + }, + label: context.translation.back, + ).expanded, + 8.width, + ], AppFilledButton( buttonColor: AppColor.white60, textColor: AppColor.neutral50, @@ -191,7 +210,7 @@ class _UpdatePpmState extends State with TickerProviderStateMixin { }, label: context.translation.save, ).expanded, - 16.width, + 8.width, AppFilledButton( onPressed: () { if (tabIndex == 0) { From e13a7c96349e016159a89f0c03f859b06a840225 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 26 Mar 2025 11:18:43 +0300 Subject: [PATCH 7/8] rename text --- .../views/forms/spare_part/spare_part_request.dart | 2 +- lib/views/pages/user/requests/pending_requests_screen.dart | 2 +- .../widgets/bottom_sheets/pending_request_bottom_sheet.dart | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart index 3df20c4c..4f93a950 100644 --- a/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart +++ b/lib/service_request_latest/views/forms/spare_part/spare_part_request.dart @@ -245,7 +245,7 @@ class _SparePartRequestState extends State with TickerProvider controller: _descriptionController, showSpeechToText: true, backgroundColor: context.isDark ? AppColor.neutral20 : AppColor.neutral90, - labelText: context.translation.description, + labelText: "Engineer Comment", alignLabelWithHint: true, showWithoutDecoration: true, textInputType: TextInputType.multiline, diff --git a/lib/views/pages/user/requests/pending_requests_screen.dart b/lib/views/pages/user/requests/pending_requests_screen.dart index 4ae44fa5..ee99a490 100644 --- a/lib/views/pages/user/requests/pending_requests_screen.dart +++ b/lib/views/pages/user/requests/pending_requests_screen.dart @@ -18,7 +18,7 @@ class PendingServiceRequestScreen extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - appBar: DefaultAppBar(title: "Pending Requests (${pendingAssetServiceRequest.details!.length})"), + appBar: DefaultAppBar(title: "Pending WOs (${pendingAssetServiceRequest.details!.length})"), body: ListView.separated( itemCount: pendingAssetServiceRequest.details!.length, padding: const EdgeInsets.all(16), diff --git a/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart b/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart index f22c2d1b..84b98782 100644 --- a/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart +++ b/lib/views/widgets/bottom_sheets/pending_request_bottom_sheet.dart @@ -25,7 +25,7 @@ class PendingRequestBottomSheet extends StatelessWidget { "Alert!".heading4(context), 12.height, Text( - "${pendingAssetServiceRequest.details!.length} pending service requests found", + "${pendingAssetServiceRequest.details!.length} pending corrective maintenance found", style: TextStyle( fontSize: 16.toScreenWidth, fontWeight: FontWeight.w500, From 68c4df0c14de143ff1260fbee79e35357505d180 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 26 Mar 2025 16:12:02 +0300 Subject: [PATCH 8/8] validateAssetSituation check removed handled from backend --- .../service_request_bottomsheet.dart | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart index 150b59d8..44f7a9a6 100644 --- a/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart +++ b/lib/service_request_latest/views/components/bottom_sheets/service_request_bottomsheet.dart @@ -837,14 +837,14 @@ class ServiceRequestBottomSheet { } static bool validateAssetSituation(ServiceRequestDetailProvider requestDetailProvider) { - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus != null) { - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 1 || requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 2) { - if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService == null) { - Fluttertoast.showToast(msg: "Return to service is required ", toastLength: Toast.LENGTH_LONG); - return false; - } - } - } + // if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus != null) { + // if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 1 || requestDetailProvider.engineerUpdateWorkOrderHelperModel!.equipmentStatus!.value == 2) { + // if (requestDetailProvider.engineerUpdateWorkOrderHelperModel!.returnToService == null) { + // Fluttertoast.showToast(msg: "Return to service is required ", toastLength: Toast.LENGTH_LONG); + // return false; + // } + // } + // } return true; }