From c281fba1ac128bd4bf2b973e9a515bbebdacb878 Mon Sep 17 00:00:00 2001 From: zaid_daoud Date: Tue, 31 Oct 2023 13:09:25 +0300 Subject: [PATCH] Enhancements --- lib/l10n/app_ar.arb | 2 + lib/l10n/app_en.arb | 3 +- lib/main.dart | 2 + .../work_order/work_order_details_page.dart | 98 +++++++++++++++++++ .../work_order/work_orders_list_page.dart | 38 +++---- 5 files changed, 116 insertions(+), 27 deletions(-) create mode 100644 lib/views/pages/user/requests/work_order/work_order_details_page.dart diff --git a/lib/l10n/app_ar.arb b/lib/l10n/app_ar.arb index da3950b4..3a197653 100644 --- a/lib/l10n/app_ar.arb +++ b/lib/l10n/app_ar.arb @@ -208,6 +208,8 @@ "pickFromFiles" : "اختر من الملفات", "requiredFile" : "الملف مطلوب", "pickFile" : "اختر ملف", + "workOrder" : "طلب عمل", + "workOrders" : "طلبات عمل", "login" : "تسجيل الدخول", "enterCredsToLogin" : "أدخل بياناتك الخاصة لتسجيل الدخول", "forgotPassword" : "نسيت كلمة السر؟", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 8ca93ef9..77f11ce2 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -257,7 +257,8 @@ "filter" : "Filter", "pickAsset" : "Pick Asset", "firstAction" : "First Action", - "workOrder" : "Work Orders", + "workOrder" : "Work Order", + "workOrders" : "Work Orders", "viewWorkOrder" : "View All Work Order", "createWorkOrder" : "Create Work Order", "viewWorkOrder" : "View All Work Order", diff --git a/lib/main.dart b/lib/main.dart index be728ba2..3a361613 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -75,6 +75,7 @@ import 'package:test_sa/views/pages/user/report_issues_page.dart'; import 'package:test_sa/views/pages/user/requests/create_service_request_page.dart'; import 'package:test_sa/views/pages/user/requests/future_request_service_details.dart'; import 'package:test_sa/views/pages/user/requests/requests_page.dart'; +import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; import 'package:test_sa/views/pages/user/requests/work_order/work_orders_list_page.dart'; import 'package:test_sa/views/pages/user/visits/preventive_maintenance_visits_page.dart'; import 'package:test_sa/views/pages/user/visits/regular_visits_page.dart'; @@ -216,6 +217,7 @@ class MyApp extends StatelessWidget { AssetDetailPage.id: (_) => AssetDetailPage(), AssetSearchScreen.id: (_) => const AssetSearchScreen(), AssetFilterScreen.id: (_) => const AssetFilterScreen(), + WorkOrderDetailsPage.id: (_) => const WorkOrderDetailsPage(), }, ), ), diff --git a/lib/views/pages/user/requests/work_order/work_order_details_page.dart b/lib/views/pages/user/requests/work_order/work_order_details_page.dart new file mode 100644 index 00000000..a9a4c9d8 --- /dev/null +++ b/lib/views/pages/user/requests/work_order/work_order_details_page.dart @@ -0,0 +1,98 @@ +import 'package:flutter/material.dart'; +import 'package:provider/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/service_request/service_request.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/default_app_bar.dart'; + +import '../../../../../controllers/providers/api/user_provider.dart'; +import '../../../../../models/enums/user_types.dart'; +import '../../../../../models/service_request/search_work_order.dart'; +import '../../../../widgets/requests/request_status.dart'; + +class WorkOrderDetailsPage extends StatelessWidget { + static const String id = "/work_order_details_page"; + final SearchWorkOrder workOrder; + final ServiceRequest serviceRequest; + const WorkOrderDetailsPage({Key key, this.workOrder, this.serviceRequest}) : super(key: key); + + @override + Widget build(BuildContext context) { + UserProvider userProvider = Provider.of(context); + return Scaffold( + appBar: DefaultAppBar(title: context.translation.workOrder), + body: Column( + children: [ + SingleChildScrollView( + child: Container( + margin: const EdgeInsets.all(16), + decoration: ShapeDecoration( + color: Colors.white, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), + shadows: const [BoxShadow(color: Color(0x07000000), blurRadius: 14, offset: Offset(0, 0), spreadRadius: 0)], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + StatusLabel(label: workOrder.currentSituation.name, textColor: AppColor.orange60, backgroundColor: AppColor.orange40), + 8.height, + Text(serviceRequest.requestCode, style: AppTextStyles.heading5.copyWith(color: const Color(0xFF3B3D4A))), + 8.height, + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + '${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + Text( + '${context.translation.status}: ${workOrder.currentSituation.name}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + ], + ).expanded, + Text(workOrder.visitDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), + ], + ), + Text( + '${context.translation.orderWorkNumber}: ${workOrder.workOrderNo}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + Text( + '${context.translation.assignedEmployee}: ${workOrder.assignedEmployee?.name ?? ""}', + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), + ), + Text('${context.translation.assetSN}: ${workOrder.callRequest.asset.assetSerialNo ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + Text('${context.translation.assetName}: ${workOrder.callRequest.asset.modelDefinition.assetName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + Text('${context.translation.assetNumber}: ${workOrder.callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + Text('${context.translation.model}: ${workOrder.callRequest.asset.modelDefinition.modelName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + Text('${context.translation.site}: ${workOrder.callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + Text('${"Call last Situation"}: ${workOrder.calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575))), + ], + ).paddingAll(16).onPress(() { + // onPressed(request); + }), + ), + ).expanded, + if (userProvider.user.type == UsersTypes.engineer && serviceRequest.statusValue != 5 && serviceRequest.statusValue != 3) + AppFilledButton( + onPressed: () { + /// todo zaid : push to update page + }, + label: context.translation.updateRequest, + ).paddingAll(16), + ], + ), + ); + } +} diff --git a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart index 33cdde78..7fef1221 100644 --- a/lib/views/pages/user/requests/work_order/work_orders_list_page.dart +++ b/lib/views/pages/user/requests/work_order/work_orders_list_page.dart @@ -15,6 +15,7 @@ import 'package:test_sa/new_views/common_widgets/app_filled_button.dart'; import 'package:test_sa/new_views/common_widgets/default_app_bar.dart'; import 'package:test_sa/views/pages/user/requests/work_order/create_service_report.dart'; import 'package:test_sa/views/pages/user/requests/work_order/future_service_report.dart'; +import 'package:test_sa/views/pages/user/requests/work_order/work_order_details_page.dart'; import 'package:test_sa/views/widgets/requests/request_status.dart'; class WorkOrderListPage extends StatelessWidget { @@ -36,14 +37,14 @@ class WorkOrderListPage extends StatelessWidget { } print("serviceRequest.statusValue:${serviceRequest.statusValue}"); return Scaffold( - appBar: DefaultAppBar(title: context.translation.workOrder), + appBar: DefaultAppBar(title: context.translation.workOrders), backgroundColor: const Color(0xfff8f9fb), body: SafeArea( child: FutureBuilder( future: serviceRequestsProvider.searchWorkOrders(callId: serviceRequest.requestCode), builder: (context, snap) { workOrders = snap.data as List; - if (snap.connectionState == ConnectionState.waiting) return Center(child: CircularProgressIndicator()); + if (snap.connectionState == ConnectionState.waiting) return const Center(child: CircularProgressIndicator()); return Column( children: [ @@ -104,33 +105,17 @@ class WorkOrderListPage extends StatelessWidget { children: [ Text( '${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), ), Text( '${context.translation.status}: ${workOrders[index].currentSituation.name}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), + style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF757575)), ), ], ).expanded, Text(workOrders[index].visitDate?.toServiceRequestCardFormat ?? "", textAlign: TextAlign.end, style: AppTextStyles.tinyFont.copyWith(color: const Color(0xFF3B3D4A))), ], ), - Text( - '${context.translation.orderWorkNumber}: ${workOrders[index].workOrderNo}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text( - '${context.translation.assignedEmployee}: ${workOrders[index].assignedEmployee?.name ?? ""}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575)), - ), - Text('${context.translation.assetSN}: ${workOrders[index].callRequest.asset.assetSerialNo ?? ""}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), - Text('${context.translation.assetName}: ${workOrders[index].callRequest.asset.modelDefinition.assetName ?? ""}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), - Text('${context.translation.assetNumber}: ${workOrders[index].callRequest.asset.assetNumber ?? ""}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), - Text('${context.translation.model}: ${workOrders[index].callRequest.asset.modelDefinition.modelName ?? ""}', - style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), - Text('${context.translation.site}: ${workOrders[index].callRequest.asset.site.custName ?? ""}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), - Text('${"Call last Situation"}: ${workOrders[index].calllastSituation.name ?? '' ?? ""}', style: AppTextStyles.bodyText.copyWith(color: Color(0xFF757575))), 16.height, Row( mainAxisSize: MainAxisSize.min, @@ -140,13 +125,14 @@ class WorkOrderListPage extends StatelessWidget { style: AppTextStyles.bodyText.copyWith(color: const Color(0xFF4A8DB7)), ), 4.width, - const Icon( - Icons.arrow_forward, - color: Color(0xFF4A8DB7), - size: 14, - ) + const Icon(Icons.arrow_forward, color: Color(0xFF4A8DB7), size: 14) ], - ), + ).onPress(() { + Navigator.push( + context, + MaterialPageRoute(builder: (context) => WorkOrderDetailsPage(workOrder: workOrders[index], serviceRequest: serviceRequest)), + ); + }), ], ).paddingAll(16).onPress(() { // onPressed(request);