diff --git a/assets/images/drawer/car_parking_icon.svg b/assets/images/drawer/car_parking_icon.svg
new file mode 100644
index 0000000..f77afa0
--- /dev/null
+++ b/assets/images/drawer/car_parking_icon.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json
index 88a3891..20b52e5 100644
--- a/assets/langs/ar-SA.json
+++ b/assets/langs/ar-SA.json
@@ -656,5 +656,6 @@
"ticketNumber": "رقم التذكرة",
"ticketId": "معرف التذكرة",
"pleaseSelectProject": "الرجاء اختيار مشروع",
- "viewAttachment" : "عرض المرفق"
+ "viewAttachment" : "عرض المرفق",
+ "parkingQr": "وقوف السيارات QR"
}
\ No newline at end of file
diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json
index 4e29cbc..db106e6 100644
--- a/assets/langs/en-US.json
+++ b/assets/langs/en-US.json
@@ -654,5 +654,6 @@
"ticketNumber": "Ticket Number",
"ticketId": "Ticket ID",
"pleaseSelectProject": "Please select a project",
- "viewAttachment" : "View Attachment"
+ "viewAttachment" : "View Attachment",
+ "parkingQr": "Parking QR"
}
\ No newline at end of file
diff --git a/lib/api/dashboard_api_client.dart b/lib/api/dashboard_api_client.dart
index 5256084..0b8247f 100644
--- a/lib/api/dashboard_api_client.dart
+++ b/lib/api/dashboard_api_client.dart
@@ -16,6 +16,7 @@ import 'package:mohem_flutter_app/models/dashboard/get_attendance_tracking_list_
import 'package:mohem_flutter_app/models/dashboard/itg_forms_model.dart';
import 'package:mohem_flutter_app/models/dashboard/list_menu.dart';
import 'package:mohem_flutter_app/models/generic_response_model.dart';
+import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart';
import 'package:mohem_flutter_app/models/itg/itg_main_response.dart';
import 'package:mohem_flutter_app/models/itg/itg_response_model.dart';
import 'package:mohem_flutter_app/models/sso_auth_model.dart';
@@ -227,9 +228,10 @@ class DashboardApiClient {
Future getBookingSSOFinalRedirection({required String token}) async {
// token =
- "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjZTE2OWM0YjIwYjQ2ZWM5YTQyOTU3Y2ZhODUzNzQ1IiwidHlwIjoiSldUIn0.eyJ0ZW5hbnRfaWQiOiJhOWY0ZDFhMDU5NmQ0YWVhOGY4MzA5OTJlYzRiZGFjMSIsImVpZCI6IjExNzkzMCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL3NpZCI6Ijk2MDI0OGM1NzA3YzQ3MmFhYTEzM2I1N2ZhODE1ZmVhIiwibGFuZ3VhZ2UiOiJVUyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6IjExNzkzMEBobWcuY29tIiwiZXhwIjoxNzgyNDc1NzY5LCJpc3MiOiJodHRwczovL3Nzby11YXQuaG1nLmNvbSIsImF1ZCI6ImE5ZjRkMWEwNTk2ZDRhZWE4ZjgzMDk5MmVjNGJkYWMxIn0.rJcLVsG8D0XECyLERCTD2uqGeWyvp-OBVGE9uL2qKrX4etFUHgdFt_5kYF6edFTtGy-0PIZadHDmv7e-IOhVWHm5HVMClaukiXoRXR8cDN8XA1wfme3Kd-U5PXN-IRh49AyRTzLO0rYNPvH81ScosWGlsFSkOvA-0hJNa2adHdtvgNvB8wJshSU5p7sAmF8mjdDY6aInG19etu2iEuUDwHHA4ZY_ts4hboHo8fE392hFaYGonExoD7bpW5RMx5xKWeRCmWpG_PK8Aw_z1jGzdB9PANus4pteRGuln1J-kmo2lQC9pVrSyZATAKp1HfgfyZ_vUhaHEfM69cMWaCslJQ";
- // var request = http.MultipartRequest('POST', Uri.parse('https://ek.techmaster.in/SSO/HMG'));
- var request = http.MultipartRequest('POST', Uri.parse('https://Paxes-release.techmaster.in/SSO/HMG'));
+ // "eyJhbGciOiJSUzI1NiIsImtpZCI6IjhjZTE2OWM0YjIwYjQ2ZWM5YTQyOTU3Y2ZhODUzNzQ1IiwidHlwIjoiSldUIn0.eyJ0ZW5hbnRfaWQiOiJhOWY0ZDFhMDU5NmQ0YWVhOGY4MzA5OTJlYzRiZGFjMSIsImVpZCI6IjExNzkzMCIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL3NpZCI6Ijk2MDI0OGM1NzA3YzQ3MmFhYTEzM2I1N2ZhODE1ZmVhIiwibGFuZ3VhZ2UiOiJVUyIsImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzLzIwMDUvMDUvaWRlbnRpdHkvY2xhaW1zL2VtYWlsYWRkcmVzcyI6IjExNzkzMEBobWcuY29tIiwiZXhwIjoxNzgyNDc1NzY5LCJpc3MiOiJodHRwczovL3Nzby11YXQuaG1nLmNvbSIsImF1ZCI6ImE5ZjRkMWEwNTk2ZDRhZWE4ZjgzMDk5MmVjNGJkYWMxIn0.rJcLVsG8D0XECyLERCTD2uqGeWyvp-OBVGE9uL2qKrX4etFUHgdFt_5kYF6edFTtGy-0PIZadHDmv7e-IOhVWHm5HVMClaukiXoRXR8cDN8XA1wfme3Kd-U5PXN-IRh49AyRTzLO0rYNPvH81ScosWGlsFSkOvA-0hJNa2adHdtvgNvB8wJshSU5p7sAmF8mjdDY6aInG19etu2iEuUDwHHA4ZY_ts4hboHo8fE392hFaYGonExoD7bpW5RMx5xKWeRCmWpG_PK8Aw_z1jGzdB9PANus4pteRGuln1J-kmo2lQC9pVrSyZATAKp1HfgfyZ_vUhaHEfM69cMWaCslJQ";
+ // // var request = http.MultipartRequest('POST', Uri.parse('https://ek.techmaster.in/SSO/HMG'));
+ var request = http.MultipartRequest('POST', Uri.parse('https://Paxes-release.techmaster.in/SSO/HMG')); // UAT
+ // var request = http.MultipartRequest('POST', Uri.parse('https://paxes.com/sso/hmg')); // Prod
request.fields.addAll({'JWTToken': token});
// request.headers.addAll(headers);
@@ -414,4 +416,18 @@ class DashboardApiClient {
// postParams,
// );
// }
+
+ Future getEmployeeParkingQrCode() async {
+ String url = "${ApiConsts.erpRest}GET_Employee_Parking";
+ Map postParams = {};
+ postParams.addAll(AppState().postParamsJson);
+ return await ApiClient().postJsonForObject(
+ (json) {
+ GetEmployeeParking responseData = GetEmployeeParking.fromJson(json);
+ return responseData;
+ },
+ url,
+ postParams,
+ );
+ }
}
diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart
index a6b7173..d8efe5d 100644
--- a/lib/classes/consts.dart
+++ b/lib/classes/consts.dart
@@ -11,7 +11,7 @@ class ApiConsts {
// static String baseUrl = "https://mohemm.hmg.com"; // New Live server
//
- // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT ser343622ver
+
// static String baseUrl = "http://10.20.200.111:1010/";
// static String baseUrl = "https://webservices.hmg.com"; // PreProd
@@ -27,7 +27,8 @@ class ApiConsts {
static String user = baseUrlServices + "api/User/";
static String cocRest = baseUrlServices + "COCWS.svc/REST/";
- static String ssoAuthRedirection = "https://sso-uat.hmg.com/api/auth/connect";
+ static String ssoAuthRedirection = "https://sso-uat.hmg.com/api/auth/connect"; // UAT
+ // static String ssoAuthRedirection = "https://sso.hmg.com/api/auth/connect"; // Prod
//Chat
static String chatServerBaseUrl = "https://apiderichat.hmg.com/";
diff --git a/lib/config/routes.dart b/lib/config/routes.dart
index bf78671..c1eec7f 100644
--- a/lib/config/routes.dart
+++ b/lib/config/routes.dart
@@ -43,6 +43,7 @@ import 'package:mohem_flutter_app/ui/my_team/profile_details.dart';
import 'package:mohem_flutter_app/ui/my_team/subordinate_leave.dart';
import 'package:mohem_flutter_app/ui/my_team/team_members.dart';
import 'package:mohem_flutter_app/ui/my_team/view_attendance.dart';
+import 'package:mohem_flutter_app/ui/parking_qr/parking_qr.dart';
import 'package:mohem_flutter_app/ui/payslip/monthly_pay_slip_screen.dart';
import 'package:mohem_flutter_app/ui/performance/performance_appraisal_screen.dart';
import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart';
@@ -218,6 +219,9 @@ class AppRoutes {
static const String etqanCreateRequest = "/etqanCreateRequest";
static const String etqanGetIncidientRequest = "/etqanGetIncidientRequest";
+ //Parking QR
+ static const String parkingQr = "/parkingQrScreen";
+
static final Map routes = {
login: (BuildContext context) => LoginScreen(),
verifyLogin: (BuildContext context) => VerifyLoginScreen(),
@@ -341,5 +345,10 @@ class AppRoutes {
etqanOvr: (BuildContext context) => EtqanOvrHome(),
etqanCreateRequest: (BuildContext context) => EtqanOvrCreateRequest(),
etqanGetIncidientRequest: (BuildContext context) => EtqanOvrRequestDetailed(),
+ activityScreen:(BuildContext context) => const EventActivityScreen(),
+
+ //Parking QR
+ parkingQr: (BuildContext context) => const ParkingQrScreen(),
+
};
}
diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart
index 1a3ec71..d22edf2 100644
--- a/lib/generated/codegen_loader.g.dart
+++ b/lib/generated/codegen_loader.g.dart
@@ -669,7 +669,8 @@ class CodegenLoader extends AssetLoader{
"ticketNumber": "رقم التذكرة",
"ticketId": "معرف التذكرة",
"pleaseSelectProject": "الرجاء اختيار مشروع",
- "viewAttachment": "عرض المرفق"
+ "viewAttachment": "عرض المرفق",
+ "parkingQr": "وقوف السيارات QR"
};
static const Map _en_US = {
"mohemm": "Mohemm",
@@ -1326,7 +1327,8 @@ static const Map _en_US = {
"ticketNumber": "Ticket Number",
"ticketId": "Ticket ID",
"pleaseSelectProject": "Please select a project",
- "viewAttachment": "View Attachment"
+ "viewAttachment": "View Attachment",
+ "parkingQr": "Parking QR"
};
static const Map> mapLocales = {"ar_SA": _ar_SA, "en_US": _en_US};
}
diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart
index d060682..dd76183 100644
--- a/lib/generated/locale_keys.g.dart
+++ b/lib/generated/locale_keys.g.dart
@@ -642,5 +642,6 @@ abstract class LocaleKeys {
static const ticketId = 'ticketId';
static const pleaseSelectProject = 'pleaseSelectProject';
static const viewAttachment = 'viewAttachment';
+ static const parkingQr = 'parkingQr';
}
diff --git a/lib/models/get_employee_parking_details_model.dart b/lib/models/get_employee_parking_details_model.dart
new file mode 100644
index 0000000..4a385c8
--- /dev/null
+++ b/lib/models/get_employee_parking_details_model.dart
@@ -0,0 +1,61 @@
+import 'dart:convert';
+
+class GetEmployeeParking {
+ GetEmployeeParkingClass? getEmployeeParking;
+
+ GetEmployeeParking({
+ this.getEmployeeParking,
+ });
+
+ factory GetEmployeeParking.fromRawJson(String str) => GetEmployeeParking.fromJson(json.decode(str));
+
+ String toRawJson() => json.encode(toJson());
+
+ factory GetEmployeeParking.fromJson(Map json) => GetEmployeeParking(
+ getEmployeeParking: json["GET_Employee_Parking"] == null ? null : GetEmployeeParkingClass.fromJson(json["GET_Employee_Parking"]),
+ );
+
+ Map toJson() => {
+ "GET_Employee_Parking": getEmployeeParking?.toJson(),
+ };
+}
+
+class GetEmployeeParkingClass {
+ DateTime? createdAt;
+ String? employeeCode;
+ String? isNewQrCode;
+ String? qrCode;
+ String? qrCodeImageBase64;
+ bool? success;
+
+ GetEmployeeParkingClass({
+ this.createdAt,
+ this.employeeCode,
+ this.isNewQrCode,
+ this.qrCode,
+ this.qrCodeImageBase64,
+ this.success,
+ });
+
+ factory GetEmployeeParkingClass.fromRawJson(String str) => GetEmployeeParkingClass.fromJson(json.decode(str));
+
+ String toRawJson() => json.encode(toJson());
+
+ factory GetEmployeeParkingClass.fromJson(Map json) => GetEmployeeParkingClass(
+ createdAt: json["createdAt"] == null ? null : DateTime.parse(json["createdAt"]),
+ employeeCode: json["employeeCode"],
+ isNewQrCode: json["isNewQRCode"],
+ qrCode: json["qrCode"],
+ qrCodeImageBase64: json["qrCodeImageBase64"],
+ success: json["success"],
+ );
+
+ Map toJson() => {
+ "createdAt": createdAt?.toIso8601String(),
+ "employeeCode": employeeCode,
+ "isNewQRCode": isNewQrCode,
+ "qrCode": qrCode,
+ "qrCodeImageBase64": qrCodeImageBase64,
+ "success": success,
+ };
+}
diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart
index 2d1c50b..b99872f 100644
--- a/lib/provider/dashboard_provider_model.dart
+++ b/lib/provider/dashboard_provider_model.dart
@@ -122,6 +122,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.mowadhafhi.tr(), AppRoutes.mowadhafhi),
// DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.etqanOVR.tr(), AppRoutes.etqanOvr),
DrawerMenuItem("assets/images/drawer/mowadhafi.svg", LocaleKeys.keen.tr(), AppRoutes.etqanOvr),
+ // DrawerMenuItem("assets/images/drawer/car_parking_icon.svg", LocaleKeys.parkingQr.tr(), AppRoutes.parkingQr),
DrawerMenuItem("assets/images/drawer/pending_trasactions.svg", LocaleKeys.pendingTransactions.tr(), AppRoutes.pendingTransactions),
// DrawerMenuItem("assets/images/drawer/drawer_marathon.svg", LocaleKeys.brainMarathon.tr(), AppRoutes.marathonIntroScreen),
DrawerMenuItem("assets/images/drawer/change_password.svg", LocaleKeys.changePassword.tr(), AppRoutes.changePassword),
@@ -328,8 +329,6 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
void fetchTicketBalance() async {
try {
GenericResponseModel? ticketResponse = await DashboardApiClient().getTicketBalance();
- logger.d("Ticket Balance Response: ${ticketResponse?.toJson()}");
- print(" ========= Ticket Balance Response ======= ");
} catch (ex) {
logger.wtf(ex);
isEventLoadingLoading = false;
@@ -342,8 +341,7 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
Future fetchSSOAuthRedirection({String? clientID}) async {
try {
SSOAuthModel? ssoResponse = await DashboardApiClient().getBookingSSOAuthRedirection(clientID: clientID!);
- logger.d("SSO Response: ${ssoResponse!.toJson()}");
- if (ssoResponse.status == "Success") {
+ if (ssoResponse!.status == "Success") {
return ssoResponse;
} else {
Utils.showToast(ssoResponse.message!.first ?? "Failed to fetch SSO Auth Token");
@@ -363,18 +361,12 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
dynamic res = await DashboardApiClient().getBookingSSOFinalRedirection(token: token);
logger.d("SSO URL: $res");
return res;
- // if (ssoResponse.status == "Success") {
- // return ssoResponse;
- // } else {
- // Utils.showToast(ssoResponse.message!.first ?? "Failed to fetch SSO Auth Token");
- // return null;
- // }
} catch (ex) {
logger.wtf(ex);
isEventLoadingLoading = false;
notifyListeners();
Utils.handleException(ex, null, null);
- return null; // Ensure a return value in case of an exception
+ return null;
}
}
diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart
index 3122d17..deb3131 100644
--- a/lib/ui/landing/dashboard_screen.dart
+++ b/lib/ui/landing/dashboard_screen.dart
@@ -167,8 +167,9 @@ class _DashboardScreenState extends State with WidgetsBindingOb
// await data.fetchTicketBooking();
// if (data.ticketBookingResponse != null && !data.ticketBookingResponse!.success) {
- // // data.fetchTicketBalance();
+ // data.fetchTicketBalance();
// }
+
//continue here
}
diff --git a/lib/ui/landing/widget/menus_widget.dart b/lib/ui/landing/widget/menus_widget.dart
index bc5dceb..e764dca 100644
--- a/lib/ui/landing/widget/menus_widget.dart
+++ b/lib/ui/landing/widget/menus_widget.dart
@@ -1,13 +1,17 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
+import 'package:mohem_flutter_app/api/eit_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
+import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/string_extensions.dart';
import 'package:mohem_flutter_app/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
+import 'package:mohem_flutter_app/models/sso_auth_model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart';
+import 'package:mohem_flutter_app/ui/screens/ticket/ticket_detailed_screen.dart';
import 'package:mohem_flutter_app/widgets/shimmer/dashboard_shimmer_widget.dart';
import 'package:provider/provider.dart';
@@ -117,8 +121,29 @@ class MenusWidget extends StatelessWidget {
),
],
).paddingOnly(left: 10, right: 10, bottom: 6, top: 6),
- ).onPress(() {
+ ).onPress(() async {
Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.ticketBalance.tr(), "HMG_TKT_NEW_EIT_SS"));
+
+ // var pro = Provider.of(context, listen: false);
+ //
+ // // if (menuEntry.menuName == "HMG_TICKET_REQUESTS") {
+ // Utils.showLoading(context);
+ // //Ticket Work
+ // if (pro.ticketBookingResponse != null && pro.ticketBookingResponse!.success) {
+ // SSOAuthModel? ssoToken = await pro.fetchSSOAuthRedirection(clientID: pro.ticketBookingResponse!.clientId);
+ // if (ssoToken != null) {
+ // dynamic url = await pro.fetchURLRedirection(token: ssoToken.data!.accessToken!);
+ // await pro.fetchTicketAccuralBalance(context, DateTime.now());
+ // pro.ticketHistoryTransactionList = await EITApiClient().getEITTransactions("HMG_TICKET_ITENARY_HR_EIT_SS", isCompleteList: true);
+ //
+ // Utils.hideLoading(context);
+ // // Here Need Work
+ // Navigator.push(context, MaterialPageRoute(builder: (BuildContext context) => TicketDetailedScreen(url: url, jwtToken: ssoToken.data!.accessToken)));
+ // }
+ // //}
+ // } else {
+ // Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.ticketBalance.tr(), "HMG_TKT_NEW_EIT_SS"));
+ // }
}),
],
);
diff --git a/lib/ui/parking_qr/parking_qr.dart b/lib/ui/parking_qr/parking_qr.dart
new file mode 100644
index 0000000..641f84a
--- /dev/null
+++ b/lib/ui/parking_qr/parking_qr.dart
@@ -0,0 +1,106 @@
+import 'package:easy_localization/easy_localization.dart';
+import 'package:flutter/material.dart';
+import 'package:mohem_flutter_app/api/dashboard_api_client.dart';
+import 'package:mohem_flutter_app/classes/colors.dart';
+import 'package:mohem_flutter_app/classes/utils.dart';
+import 'package:mohem_flutter_app/extensions/int_extensions.dart';
+import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
+import 'package:mohem_flutter_app/models/get_employee_parking_details_model.dart';
+import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
+
+class ParkingQrScreen extends StatefulWidget {
+ const ParkingQrScreen({Key? key}) : super(key: key);
+
+ @override
+ _RequestDetailsState createState() => _RequestDetailsState();
+}
+
+class _RequestDetailsState extends State {
+ GetEmployeeParking? qrData;
+
+ @override
+ void initState() {
+ super.initState();
+ getTicketDetails();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: Colors.white,
+ appBar: AppBarWidget(context, title: LocaleKeys.parkingQr.tr()),
+ body:
+ qrData?.getEmployeeParking == null
+ ? Center(child: Text(LocaleKeys.noDataAvailable.tr()))
+ : SingleChildScrollView(
+ child: Padding(
+ padding: const EdgeInsets.all(20.0),
+ child: Center(
+ child: Container(
+ padding: const EdgeInsets.all(20.0),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ borderRadius: BorderRadius.circular(16),
+ boxShadow: [BoxShadow(color: Colors.grey.withValues(alpha: 0.2), spreadRadius: 5, blurRadius: 10, offset: const Offset(0, 3))],
+ ),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ // QR Code Image
+ if (qrData!.getEmployeeParking!.qrCodeImageBase64 != null && qrData!.getEmployeeParking!.qrCodeImageBase64!.isNotEmpty)
+ Image.memory(Utils.dataFromBase64String(qrData!.getEmployeeParking!.qrCodeImageBase64!), width: 300, height: 300, fit: BoxFit.contain)
+ else
+ Container(
+ width: 300,
+ height: 300,
+ color: MyColors.lightGreyEFColor,
+ child: Center(child: Text(LocaleKeys.noDataAvailable.tr(), style: const TextStyle(color: MyColors.grey67Color))),
+ ),
+ 10.height,
+ Container(height: 1, color: MyColors.lightGreyE3Color, margin: const EdgeInsets.symmetric(vertical: 10)),
+ 20.height,
+ SizedBox(
+ width: double.infinity,
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ // Employee Code
+ if (qrData!.getEmployeeParking!.employeeCode != null && qrData!.getEmployeeParking!.employeeCode!.isNotEmpty) ...[
+ Text(LocaleKeys.employeeNumber.tr(), style: const TextStyle(fontSize: 14, color: MyColors.grey67Color, fontWeight: FontWeight.w400)),
+ 8.height,
+ Text(qrData!.getEmployeeParking!.employeeCode!, style: const TextStyle(fontSize: 18, color: MyColors.darkTextColor, fontWeight: FontWeight.w600)),
+ 8.height,
+ ],
+ if (qrData!.getEmployeeParking!.createdAt != null) ...[
+ Text(LocaleKeys.creationDate.tr(), style: const TextStyle(fontSize: 14, color: MyColors.grey67Color, fontWeight: FontWeight.w400)),
+ 8.height,
+ Text(
+ DateFormat('dd MMM yyyy, hh:mm a').format(qrData!.getEmployeeParking!.createdAt!),
+ style: const TextStyle(fontSize: 16, color: MyColors.darkTextColor, fontWeight: FontWeight.w500),
+ ),
+ ],
+ ],
+ ),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ),
+ ),
+ );
+ }
+
+ void getTicketDetails() async {
+ try {
+ Utils.showLoading(context);
+ qrData = await DashboardApiClient().getEmployeeParkingQrCode();
+ Utils.hideLoading(context);
+ setState(() {});
+ } catch (ex) {
+ Utils.hideLoading(context);
+ Utils.handleException(ex, context, null);
+ }
+ }
+}
diff --git a/lib/ui/work_list/itg_fragments/approval_level_fragment.dart b/lib/ui/work_list/itg_fragments/approval_level_fragment.dart
index d7d9c7e..9d7e94a 100644
--- a/lib/ui/work_list/itg_fragments/approval_level_fragment.dart
+++ b/lib/ui/work_list/itg_fragments/approval_level_fragment.dart
@@ -21,7 +21,11 @@ class ApprovalLevelfragment extends StatelessWidget {
@override
Widget build(BuildContext context) {
- if (wFHistory.isNotEmpty) wFHistory = wFHistory.reversed.toList();
+ if (wFHistory.isNotEmpty) {
+ //TODO: This COde is Written For Future. If Needed Enable to Filter The Empty Action Requests.
+ // wFHistory = wFHistory.where((item) => item.action != null && item.action!.isNotEmpty).toList();
+ wFHistory = wFHistory.reversed.toList();
+ }
return Container(
width: double.infinity,
height: double.infinity,
@@ -164,8 +168,8 @@ class ApprovalLevelfragment extends StatelessWidget {
if (wFHistory[index].date!.isEmpty || wFHistory[index].action!.toLowerCase() == "NO ACTION" || wFHistory[index + 1].date! == "") {
return "";
} else {
- DateTime dateTimeTo = DateUtil.convertSimpleStringDateToDate(wFHistory[index].date!);
- DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(wFHistory[index + 1].date!);
+ DateTime dateTimeTo = DateUtil.convertSimpleStringDateToDate(wFHistory[index].date!, isITG: true);
+ DateTime dateTimeFrom = DateUtil.convertSimpleStringDateToDate(wFHistory[index + 1].date!, isITG: true);
Duration duration = dateTimeTo.difference(dateTimeFrom);
return "Action duration: " + DateUtil.formatDuration(duration);
}
diff --git a/pubspec.yaml b/pubspec.yaml
index 8852c2d..49dec60 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -17,8 +17,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# Read more about iOS versioning at
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
-#version: 3.7.1+300081
-version: 3.9.3+1
+version: 3.7.1+300081
+#version: 3.9.3+1
environment:
sdk: ^3.7.0