From ec845756be9861afcd325be4841a5b355ed40a56 Mon Sep 17 00:00:00 2001 From: devmirza121 Date: Sun, 22 May 2022 10:48:36 +0300 Subject: [PATCH 01/13] Login Issue Fix's --- assets/langs/ar-SA.json | 1 + lib/classes/consts.dart | 4 +- lib/extensions/widget_extensions.dart | 2 - lib/generated/locale_keys.g.dart | 8 +- lib/ui/attendance/monthly_attendance.dart | 12 +-- lib/ui/landing/dashboard.dart | 93 +++++++++++----------- lib/ui/landing/dashboard_screen.dart | 4 +- lib/ui/login/login_screen.dart | 8 +- lib/ui/login/verify_last_login_screen.dart | 8 +- lib/ui/login/verify_login_screen.dart | 8 +- lib/widgets/app_bar_widget.dart | 2 +- 11 files changed, 78 insertions(+), 72 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 097512f..1dede0d 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -67,6 +67,7 @@ "whatsapp": "واتس اب", "reject": "يرفض", "approve": "يوافق", + "attendanceDetails": "تفاصيل الحضور", "msg": "Hello {} in the {} world ", "msg_named": "{} are written in the {lang} language", "clickMe": "Click me", diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index a95e5b4..ca8e2f0 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -1,7 +1,7 @@ class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server - static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server - // static String baseUrl = "https://hmgwebservices.com"; // Live server + // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server + static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrlServices = baseUrl + "/Services/"; // server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; diff --git a/lib/extensions/widget_extensions.dart b/lib/extensions/widget_extensions.dart index 31f8374..5169f19 100644 --- a/lib/extensions/widget_extensions.dart +++ b/lib/extensions/widget_extensions.dart @@ -9,8 +9,6 @@ extension WidgetExtensions on Widget { Widget get center => Center(child: this); - Widget get expanded => Expanded(child: this); - Widget paddingAll(double _value) => Padding(padding: EdgeInsets.all(_value), child: this); Widget paddingOnly({double left = 0.0, double right = 0.0, double top = 0.0, double bottom = 0.0}) => diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 55e543b..d4772d0 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const mohemm = 'mohemm'; static const english = 'english'; static const arabic = 'arabic'; @@ -53,6 +53,7 @@ abstract class LocaleKeys { static const confirm = 'confirm'; static const passwordChangedSuccessfully = 'passwordChangedSuccessfully'; static const itemsForSale = 'itemsForSale'; + static const attendanceDetails = 'attendanceDetails'; static const doNotUseRecentPassword = 'doNotUseRecentPassword'; static const atLeastOneLowercase = 'atLeastOneLowercase'; static const atLeastOneUppercase = 'atLeastOneUppercase'; @@ -65,14 +66,14 @@ abstract class LocaleKeys { static const fingerPrint = 'fingerPrint'; static const face = 'face'; static const whatsapp = 'whatsapp'; + static const reject = 'reject'; + static const approve = 'approve'; static const msg = 'msg'; static const msg_named = 'msg_named'; static const clickMe = 'clickMe'; static const human = 'human'; static const resources = 'resources'; static const details = 'details'; - static const reject = 'reject'; - static const approve = 'approve'; static const profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_password = 'profile.reset_password.password'; @@ -83,4 +84,5 @@ abstract class LocaleKeys { static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; + } diff --git a/lib/ui/attendance/monthly_attendance.dart b/lib/ui/attendance/monthly_attendance.dart index ff370a3..38547c5 100644 --- a/lib/ui/attendance/monthly_attendance.dart +++ b/lib/ui/attendance/monthly_attendance.dart @@ -231,7 +231,7 @@ class _MonthlyAttendanceState extends State { ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [title.toText10(color: MyColors.darkTextColor).expanded, value.toText20(color: MyColors.darkTextColor)], + children: [title.toText10(color: MyColors.darkTextColor).expanded, value.toText16(color: MyColors.darkTextColor)], ), ), ).expanded; @@ -243,7 +243,7 @@ class _MonthlyAttendanceState extends State { headerHeight: 0, todayHighlightColor: MyColors.grey3AColor, viewHeaderStyle: const ViewHeaderStyle( - dayTextStyle: TextStyle(color: MyColors.grey3AColor, fontSize: 13, fontWeight: FontWeight.w600), + dayTextStyle: TextStyle(color: MyColors.grey3AColor, fontSize: 13, fontWeight: FontWeight.w600), ), monthCellBuilder: (cxt, build) { int val = build.date.day % 4; @@ -273,7 +273,7 @@ class _MonthlyAttendanceState extends State { alignment: Alignment.center, child: Text( "${build.date.day}", - style: const TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: MyColors.white, @@ -297,7 +297,7 @@ class _MonthlyAttendanceState extends State { alignment: Alignment.center, child: Text( "${build.date.day}", - style: const TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: MyColors.white, @@ -321,7 +321,7 @@ class _MonthlyAttendanceState extends State { alignment: Alignment.center, child: Text( "${build.date.day}", - style: const TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: Color(0xff1F2428), @@ -338,7 +338,7 @@ class _MonthlyAttendanceState extends State { alignment: Alignment.center, child: Text( "${build.date.day}", - style: const TextStyle( + style: const TextStyle( fontSize: 13, fontWeight: FontWeight.w500, color: MyColors.greyA5Color, diff --git a/lib/ui/landing/dashboard.dart b/lib/ui/landing/dashboard.dart index feb405d..15b8e29 100644 --- a/lib/ui/landing/dashboard.dart +++ b/lib/ui/landing/dashboard.dart @@ -68,56 +68,59 @@ class _DashboardState extends State { return Scaffold( body: Column( children: [ - Row( - children: [ - Row( - mainAxisSize: MainAxisSize.min, - children: [ - CircularAvatar( - width: 34, - height: 34, - url: - "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", - ), - 8.width, - SvgPicture.asset("assets/images/side_nav.svg"), - ], - ).onPress(() {}), - Expanded( - child: Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, + Container( + color: Colors.red, + child: Row( + children: [ + Row( mainAxisSize: MainAxisSize.min, children: [ - //AppLogo(), + CircularAvatar( + width: 34, + height: 34, + url: + "https://cdn4.iconfinder.com/data/icons/professions-2-2/151/89-512.png", + ), 8.width, - LocaleKeys.mohemm.tr().toText14() - ], - ), - ), - SizedBox( - width: 36, - height: 36, - child: Stack( - alignment: Alignment.centerLeft, - children: [ - SvgPicture.asset("assets/images/announcements.svg"), - Positioned( - right: 0, - top: 0, - child: Container( - padding: const EdgeInsets.only(left: 5, right: 5), - decoration: BoxDecoration( - color: MyColors.redColor, - borderRadius: BorderRadius.circular(17)), - child: "3".toText12(color: Colors.white), - ), - ) + SvgPicture.asset("assets/images/side_nav.svg"), ], + ).onPress(() {}), + Expanded( + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.min, + children: [ + //AppLogo(), + 8.width, + LocaleKeys.mohemm.tr().toText14() + ], + ), ), - ) - ], - ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), + SizedBox( + width: 36, + height: 36, + child: Stack( + alignment: Alignment.centerLeft, + children: [ + SvgPicture.asset("assets/images/announcements.svg"), + Positioned( + right: 0, + top: 0, + child: Container( + padding: const EdgeInsets.only(left: 5, right: 5), + decoration: BoxDecoration( + color: MyColors.redColor, + borderRadius: BorderRadius.circular(17)), + child: "3".toText12(color: Colors.white), + ), + ) + ], + ), + ) + ], + ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), + ), Expanded( child: ListView( padding: EdgeInsets.zero, diff --git a/lib/ui/landing/dashboard_screen.dart b/lib/ui/landing/dashboard_screen.dart index c54dc05..668d3ce 100644 --- a/lib/ui/landing/dashboard_screen.dart +++ b/lib/ui/landing/dashboard_screen.dart @@ -96,7 +96,9 @@ class _DashboardScreenState extends State { ], ), ).onPress(() { - data.update(); + // data.update(); + Navigator.pushNamed( + context, AppRoutes.monthlyAttendance); }) ], ).paddingOnly(left: 21, right: 21, top: 48, bottom: 7), diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index ad4e3c2..81882c7 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -128,11 +128,11 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { - username.text = "15153"; - password.text = "Xy12345@"; + // username.text = "15153"; + // password.text = "Xy12345@"; - // username.text = "287742"; - // password.text = "509@Shafi"; + username.text = "287742"; + password.text = "509@Shafi"; return Scaffold( body: Column( children: [ diff --git a/lib/ui/login/verify_last_login_screen.dart b/lib/ui/login/verify_last_login_screen.dart index 3a7ce86..4124312 100644 --- a/lib/ui/login/verify_last_login_screen.dart +++ b/lib/ui/login/verify_last_login_screen.dart @@ -118,9 +118,9 @@ class _VerifyLastLoginScreenState extends State { shrinkWrap: true, children: [ getButton(3), + getButton(4), getButton(2), getButton(1), - getButton(4), ], ) ], @@ -225,7 +225,7 @@ class _VerifyLastLoginScreenState extends State { }); } else { Utils.showLoading(context); - if (_flag == 2 || _flag == 3) { + if (_flag == 4 || _flag == 3) { bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics(); if (authenticateWithFaceAndTouchID) { Navigator.pushNamedAndRemoveUntil(context, AppRoutes.dashboard, (Route route) => false); @@ -305,11 +305,11 @@ class _VerifyLastLoginScreenState extends State { Widget getButton(int flag) { switch (flag) { - case 4: + case 2: return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null); case 1: return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null); - case 2: + case 4: return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index); case 3: return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index); diff --git a/lib/ui/login/verify_login_screen.dart b/lib/ui/login/verify_login_screen.dart index 7db2151..c208f1d 100644 --- a/lib/ui/login/verify_login_screen.dart +++ b/lib/ui/login/verify_login_screen.dart @@ -140,9 +140,9 @@ class _VerifyLoginScreenState extends State { shrinkWrap: true, children: [ getButton(3), + getButton(4), getButton(2), getButton(1), - getButton(4), ], ) ], @@ -648,7 +648,7 @@ class _VerifyLoginScreenState extends State { } else { try { Utils.showLoading(context); - if (_flag == 2 || _flag == 3) { + if (_flag == 4 || _flag == 3) { bool authenticateWithFaceAndTouchID = await loginWithFaceIDAndBiometrics(); if (!authenticateWithFaceAndTouchID) { return; @@ -735,11 +735,11 @@ class _VerifyLoginScreenState extends State { Widget getButton(int flag) { switch (flag) { - case 4: + case 2: return _loginOptionButton(LocaleKeys.verifyThroughWhatsapp.tr(), 'assets/images/login/verify_whatsapp.svg', flag, null); case 1: return _loginOptionButton(LocaleKeys.verifyThroughSMS.tr(), 'assets/images/login/verify_sms.svg', flag, null); - case 2: + case 4: return _loginOptionButton(LocaleKeys.verifyThroughFingerprint.tr(), 'assets/images/login/verify_thumb.svg', flag, BiometricType.fingerprint.index); case 3: return _loginOptionButton(LocaleKeys.verifyThroughFace.tr(), 'assets/images/login/verify_face.svg', flag, BiometricType.face.index); diff --git a/lib/widgets/app_bar_widget.dart b/lib/widgets/app_bar_widget.dart index f079f7f..5f021d1 100644 --- a/lib/widgets/app_bar_widget.dart +++ b/lib/widgets/app_bar_widget.dart @@ -21,7 +21,7 @@ AppBar AppBarWidget(BuildContext context, {required String title, bool showHomeB child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor), ), 4.width, - title.toText24(color: MyColors.darkTextColor, isBold: true, considerHeight: false).expanded, + title.toText24(color: MyColors.darkTextColor, isBold: true).expanded, ], ), centerTitle: false, From 9cc86751eb3aa2b821e484389efe0e8d2ced12b9 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 8 Jun 2022 10:29:45 +0300 Subject: [PATCH 02/13] missing swipe cont --- lib/api/login_api_client.dart | 2 + lib/api/my_attendance_api_client.dart | 34 ++++ lib/classes/consts.dart | 4 +- lib/classes/utils.dart | 2 +- lib/main.dart | 10 +- .../validate_eit_transaction_model.dart | 27 +++ lib/models/generic_response_model.dart | 9 +- lib/models/get_default_value_list_model.dart | 28 +++ .../get_eit_dff_structure_list_model.dart | 2 - lib/models/post_params_model.dart | 15 +- .../dynamic_screens/dynamic_input_screen.dart | 178 ++++++++++++++++-- .../dynamic_textfield_widget.dart | 4 +- 12 files changed, 283 insertions(+), 32 deletions(-) create mode 100644 lib/models/dyanmic_forms/validate_eit_transaction_model.dart create mode 100644 lib/models/get_default_value_list_model.dart diff --git a/lib/api/login_api_client.dart b/lib/api/login_api_client.dart index 2761ebe..ed7191c 100644 --- a/lib/api/login_api_client.dart +++ b/lib/api/login_api_client.dart @@ -90,6 +90,8 @@ class LoginApiClient { AppState().postParamsObject?.pSessionId = responseData.pSESSIONID; AppState().postParamsObject?.pUserName = AppState().getUserName; AppState().postParamsObject?.pSelectedEmployeeNumber = AppState().getUserName; + AppState().postParamsObject?.setPLegislationCode = responseData.basicMemberInformation!.pLEGISLATIONCODE; + AppState().postParamsObject?.setPayrollCodeStr = responseData.memberInformationList!.first.pAYROLLCODE; return responseData; }, url, postParams); diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart index f49aa1e..4c88ec1 100644 --- a/lib/api/my_attendance_api_client.dart +++ b/lib/api/my_attendance_api_client.dart @@ -54,4 +54,38 @@ class MyAttendanceApiClient { return responseData.getValueSetValuesList!.first; }, url, postParams); } + + Future getDefaultValue(String pSegmentName, String pDescFlexContextCode, String pDescFlexName, List> list) async { + String url = "${ApiConsts.erpRest}GET_DEFAULT_VALUE"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_PARENT_VALUE": null, + "P_SEGMENT_NAME": pSegmentName, + "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, + "P_DESC_FLEX_NAME": pDescFlexName, + "GetValueSetValuesTBL": list, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future validateEitTransaction(String pDescFlexContextCode, String pFunctionName, List> list) async { + String url = "${ApiConsts.erpRest}VALIDATE_EIT_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, + "P_FUNCTION_NAME": pFunctionName, + "EITTransactionTBL": list, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } } diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index ca8e2f0..a95e5b4 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -1,7 +1,7 @@ class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server - // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server - static String baseUrl = "https://hmgwebservices.com"; // Live server + static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server + // static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrlServices = baseUrl + "/Services/"; // server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; diff --git a/lib/classes/utils.dart b/lib/classes/utils.dart index 1634fd5..8837c40 100644 --- a/lib/classes/utils.dart +++ b/lib/classes/utils.dart @@ -36,7 +36,7 @@ class Utils { } static void showLoading(BuildContext context) { - WidgetsBinding.instance?.addPostFrameCallback((_) { + WidgetsBinding.instance.addPostFrameCallback((_) { _isLoadingVisible = true; showDialog( context: context, diff --git a/lib/main.dart b/lib/main.dart index 29a8e17..8120cd8 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,22 +1,18 @@ import 'dart:io'; -import 'dart:typed_data'; import 'package:easy_localization/easy_localization.dart'; +import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; +import 'package:logger/logger.dart'; import 'package:mohem_flutter_app/app_state/app_state.dart'; -import 'package:mohem_flutter_app/config/app_provider.dart'; import 'package:mohem_flutter_app/generated/codegen_loader.g.dart'; import 'package:mohem_flutter_app/models/post_params_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/theme/app_theme.dart'; -import 'package:mohem_flutter_app/widgets/nfc/nfc_reader_sheet.dart'; -import 'package:nfc_manager/nfc_manager.dart'; -import 'package:nfc_manager/platform_tags.dart'; import 'package:provider/provider.dart'; import 'package:sizer/sizer.dart'; -import 'package:firebase_core/firebase_core.dart'; + import 'config/routes.dart'; -import 'package:logger/logger.dart'; var logger = Logger( // filter: null, // Use the default LogFilter (-> only log in debug mode) diff --git a/lib/models/dyanmic_forms/validate_eit_transaction_model.dart b/lib/models/dyanmic_forms/validate_eit_transaction_model.dart new file mode 100644 index 0000000..a543e5c --- /dev/null +++ b/lib/models/dyanmic_forms/validate_eit_transaction_model.dart @@ -0,0 +1,27 @@ +class ValidateEitTransactionModel { + int? tRANSACTIONNUMBER; + String? nAME; + String? vARCHAR2VALUE; + int? nUMBERVALUE; + String? dATEVALUE; + + ValidateEitTransactionModel({this.tRANSACTIONNUMBER, this.nAME, this.vARCHAR2VALUE, this.nUMBERVALUE, this.dATEVALUE}); + + ValidateEitTransactionModel.fromJson(Map json) { + tRANSACTIONNUMBER = json['TRANSACTION_NUMBER']; + nAME = json['NAME']; + vARCHAR2VALUE = json['VARCHAR2_VALUE']; + nUMBERVALUE = json['NUMBER_VALUE']; + dATEVALUE = json['DATE_VALUE']; + } + + Map toJson() { + final Map data = new Map(); + data['TRANSACTION_NUMBER'] = this.tRANSACTIONNUMBER; + data['NAME'] = this.nAME; + data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE; + data['NUMBER_VALUE'] = this.nUMBERVALUE; + data['DATE_VALUE'] = this.dATEVALUE; + return data; + } +} diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index ecad452..c9edf47 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -2,6 +2,7 @@ import 'package:mohem_flutter_app/models/get_absence_collection_notification_bod import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_attachement_list_model.dart'; import 'package:mohem_flutter_app/models/get_basic_det_ntf_body_list_model.dart'; +import 'package:mohem_flutter_app/models/get_default_value_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/get_item_creation_ntf_body_list_model.dart'; @@ -108,7 +109,7 @@ class GenericResponseModel { List? getCountriesList; List? getDayHoursTypeDetailsList; List? getDeductionsList; - List? getDefaultValueList; + GetDefaultValueList? getDefaultValueList; List? getEITCollectionNotificationBodyList; List? getEITDFFStructureList; List? getEITTransactionList; @@ -641,7 +642,7 @@ class GenericResponseModel { getCountriesList = json['GetCountriesList']; getDayHoursTypeDetailsList = json['GetDayHoursTypeDetailsList']; getDeductionsList = json['GetDeductionsList']; - getDefaultValueList = json['GetDefaultValueList']; + getDefaultValueList = json['GetDefaultValueList'] != null ? GetDefaultValueList.fromJson(json['GetDefaultValueList']) : null; getEITCollectionNotificationBodyList = json['GetEITCollectionNotificationBodyList']; if (json['GetEITDFFStructureList'] != null) { getEITDFFStructureList = []; @@ -1022,7 +1023,9 @@ class GenericResponseModel { data['GetCountriesList'] = this.getCountriesList; data['GetDayHoursTypeDetailsList'] = this.getDayHoursTypeDetailsList; data['GetDeductionsList'] = this.getDeductionsList; - data['GetDefaultValueList'] = this.getDefaultValueList; + if (this.getDefaultValueList != null) { + data['GetDefaultValueList'] = this.getDefaultValueList!.toJson(); + } data['GetEITCollectionNotificationBodyList'] = this.getEITCollectionNotificationBodyList; if (this.getEITDFFStructureList != null) { data['GetEITDFFStructureList'] = this.getEITDFFStructureList!.map((v) => v.toJson()).toList(); diff --git a/lib/models/get_default_value_list_model.dart b/lib/models/get_default_value_list_model.dart new file mode 100644 index 0000000..3ee7fc1 --- /dev/null +++ b/lib/models/get_default_value_list_model.dart @@ -0,0 +1,28 @@ +class GetDefaultValueList { + String? pIDCOLUMNNAME; + String? pRETURNMSG; + String? pRETURNSTATUS; + String? pVALUECOLUMNNAME; + + GetDefaultValueList( + {this.pIDCOLUMNNAME, + this.pRETURNMSG, + this.pRETURNSTATUS, + this.pVALUECOLUMNNAME}); + + GetDefaultValueList.fromJson(Map json) { + pIDCOLUMNNAME = json['P_ID_COLUMN_NAME']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pVALUECOLUMNNAME = json['P_VALUE_COLUMN_NAME']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ID_COLUMN_NAME'] = this.pIDCOLUMNNAME; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_VALUE_COLUMN_NAME'] = this.pVALUECOLUMNNAME; + return data; + } +} \ No newline at end of file diff --git a/lib/models/get_eit_dff_structure_list_model.dart b/lib/models/get_eit_dff_structure_list_model.dart index d559794..baf7f95 100644 --- a/lib/models/get_eit_dff_structure_list_model.dart +++ b/lib/models/get_eit_dff_structure_list_model.dart @@ -83,8 +83,6 @@ class GetEITDFFStructureList { this.fieldAnswer}); GetEITDFFStructureList.fromJson(Map json) { - print("----------------=============================="); - print("----------------:$json"); aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG']; aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME']; cHILDSEGMENTSDV = json['CHILD_SEGMENTS_DV']; diff --git a/lib/models/post_params_model.dart b/lib/models/post_params_model.dart index 1ab86f7..0bb48d0 100644 --- a/lib/models/post_params_model.dart +++ b/lib/models/post_params_model.dart @@ -9,6 +9,8 @@ class PostParamsModel { String? pEmailAddress; String? pUserName; String? pSelectedEmployeeNumber; + String? pLegislationCode; + String? payrollCodeStr; int? pSessionId; String? userName; @@ -25,6 +27,8 @@ class PostParamsModel { this.pSessionId, this.pUserName, this.pSelectedEmployeeNumber, + this.payrollCodeStr, + this.pLegislationCode, }); PostParamsModel.fromJson(Map json) { @@ -33,6 +37,8 @@ class PostParamsModel { languageID = json['LanguageID']; mobileType = json['MobileType']; logInTokenID = json['LogInTokenID']; + payrollCodeStr = json['payrollCodeStr']; + pLegislationCode = json['LegislationCodeStr']; tokenID = json['TokenID']; } @@ -43,6 +49,8 @@ class PostParamsModel { data['LanguageID'] = this.languageID; data['MobileType'] = this.mobileType; data['LogInTokenID'] = this.logInTokenID; + data['payrollCodeStr'] = this.payrollCodeStr; + data['LegislationCodeStr'] = this.pLegislationCode; data['TokenID'] = this.tokenID; return data; } @@ -59,9 +67,10 @@ class PostParamsModel { data['UserName'] = this.userName; data['P_EMAIL_ADDRESS'] = this.pEmailAddress; data['P_SESSION_ID'] = this.pSessionId; + data['payrollCodeStr'] = this.payrollCodeStr; + data['LegislationCodeStr'] = this.pLegislationCode; data['P_SELECTED_EMPLOYEE_NUMBER'] = this.pSelectedEmployeeNumber; data['P_USER_NAME'] = this.pUserName; - return data; } @@ -80,4 +89,8 @@ class PostParamsModel { set setPUserName(String? v) => pUserName = v; set setPSelectedEmployeeNumber(String? v) => pSelectedEmployeeNumber = v; + + set setPLegislationCode(String? v) => pLegislationCode = v; + + set setPayrollCodeStr(String? v) => payrollCodeStr = v; } diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index 6fe23ae..f668ea2 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -10,6 +10,7 @@ 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/dyanmic_forms/get_set_values_request_model.dart'; +import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; @@ -50,20 +51,63 @@ class _DynamicInputScreenState extends State { } } + void validateTransaction() async { + try { + Utils.showLoading(context); + + // List> values = getEitDffStructureList! + // .map((e) => + // ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: e.eSERVICESDV?.pIDCOLUMNNAME ?? "").toJson()) + // .toList(); + + List> values = getEitDffStructureList!.map((e) { + String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; + if (e.fORMATTYPE == "X") { + // for date format type, date format is changed + tempVar = e.eSERVICESDV?.pVALUECOLUMNNAME ?? ""; + if (tempVar.isNotEmpty) { + DateTime date = DateFormat('yyyy-MM-dd').parse(tempVar); + tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); + } + } + return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: tempVar).toJson(); + }).toList(); + values.forEach((element) { + print(element); + }); + + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: "NEW_ROW").toJson()); + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: null).toJson()); + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: null).toJson()); + + genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(genericResponseModel!.pDESCFLEXCONTEXTCODE!, dynamicParams!.dynamicId, values); + getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? []; + //getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList(); + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + void calGetValueSetValues(GetEITDFFStructureList structureList) async { try { Utils.showLoading(context); String segmentId = structureList.cHILDSEGMENTSVS!; + List filteredList = getEitDffStructureList?.where((element) => element.cHILDSEGMENTSVS == segmentId).toList() ?? []; List> values = filteredList .map((e) => GetSetValuesRequestModel( sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) .toJson()) .toList(); - ESERVICESVS genericResponseModel = await MyAttendanceApiClient().getValueSetValues(structureList.cHILDSEGMENTSVS!, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); - + ESERVICESVS eServicesResponseModel = await MyAttendanceApiClient().getValueSetValues(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); + List abc = genericResponseModel?.getEITDFFStructureList ?? []; + getEitDffStructureList = abc; int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == structureList.cHILDSEGMENTSVS); - getEitDffStructureList![index].eSERVICESVS!.add(genericResponseModel); + getEitDffStructureList![index].eSERVICESVS!.clear(); + getEitDffStructureList![index].eSERVICESVS!.add(eServicesResponseModel); // getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? []; //getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList(); Utils.hideLoading(context); @@ -74,6 +118,36 @@ class _DynamicInputScreenState extends State { } } + void getDefaultValues(GetEITDFFStructureList structureList) async { + if ((structureList.cHILDSEGMENTSDVSplited?.length ?? 0) < 1) { + return; + } + try { + Utils.showLoading(context); + for (int i = 0; i < (structureList.cHILDSEGMENTSDVSplited?.length ?? 0); i++) { + String segmentId = structureList.cHILDSEGMENTSDVSplited![i]; + GetEITDFFStructureList? reqObj = getEitDffStructureList!.firstWhere((element) => element.sEGMENTNAME == segmentId); + List parentRequired = reqObj.pARENTSEGMENTSDVSplited ?? []; + List filteredList = + getEitDffStructureList!.where((outerElement) => parentRequired.any((element) => outerElement.sEGMENTNAME == element.name && element.isRequired == "REQUIRED")).toList(); + List> values = filteredList + .map((e) => GetSetValuesRequestModel( + sEGMENTNAME: e.sEGMENTNAME, vALUECOLUMNNAME: e.eSERVICESDV!.pVALUECOLUMNNAME, dESCRIPTION: "", iDCOLUMNNAME: e.eSERVICESDV!.pIDCOLUMNNAME, fLEXVALUESETNAME: e.fLEXVALUESETNAME) + .toJson()) + .toList(); + + ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values); + int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); + getEitDffStructureList![index].eSERVICESDV = defaultValue; + } + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + @override void dispose() { super.dispose(); @@ -109,9 +183,11 @@ class _DynamicInputScreenState extends State { LocaleKeys.next.tr(), (getEitDffStructureList ?? []).isEmpty ? null - : () => { - //Navigator.of(context).pushNamed(LOGIN_TYPE) - }, + : () { + validateTransaction(); + + //Navigator.of(context).pushNamed(LOGIN_TYPE) + }, ).insideContainer, ], ), @@ -129,22 +205,24 @@ class _DynamicInputScreenState extends State { return PopupMenuButton( child: DynamicTextFieldWidget( (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), - model.eSERVICESDV?.pIDCOLUMNNAME ?? "", + model.eSERVICESDV?.pVALUECOLUMNNAME ?? "", isEnable: false, isPopup: true, ).paddingOnly(bottom: 12), itemBuilder: (_) => >[ for (int i = 0; i < model.eSERVICESVS!.length; i++) PopupMenuItem(child: Text(model.eSERVICESVS![i].vALUECOLUMNNAME!), value: i), ], - onSelected: (int index) { - + onSelected: (int popipIndex) { ESERVICESDV eservicesdv = ESERVICESDV( - pIDCOLUMNNAME: model.eSERVICESVS![index].vALUECOLUMNNAME, + pIDCOLUMNNAME: model.eSERVICESVS![popipIndex].iDCOLUMNNAME, pRETURNMSG: "null", - pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, - pVALUECOLUMNNAME: model.eSERVICESVS![index].vALUECOLUMNNAME); - - print(model.eSERVICESVS![index].toJson()); + pRETURNSTATUS: getEitDffStructureList![popipIndex].dEFAULTVALUE, + pVALUECOLUMNNAME: model.eSERVICESVS![popipIndex].vALUECOLUMNNAME); + getEitDffStructureList![index].eSERVICESDV = eservicesdv; + setState(() {}); + if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { + getDefaultValues(model); + } }); } @@ -163,6 +241,9 @@ class _DynamicInputScreenState extends State { suffixIconData: Icons.calendar_today, isEnable: false, onTap: () async { + if ((getEitDffStructureList![index].eSERVICESDV?.pVALUECOLUMNNAME != null)) { + selectedDate = DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!); + } DateTime date = await _selectDate(context); DateTime date1 = DateTime(date.year, date.month, date.day); getEitDffStructureList![index].fieldAnswer = date.toString(); @@ -178,6 +259,34 @@ class _DynamicInputScreenState extends State { } }, ).paddingOnly(bottom: 12); + } else if (model.fORMATTYPE == "I") { + return DynamicTextFieldWidget( + (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), + model.eSERVICESDV?.pIDCOLUMNNAME ?? (getEitDffStructureList![index].fieldAnswer ?? ""), + suffixIconData: Icons.access_time_filled_rounded, + isEnable: false, + onTap: () async { + if ((getEitDffStructureList![index].eSERVICESDV?.pVALUECOLUMNNAME != null)) { + var timeString = getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!.split(":"); + selectedDate = DateTime(0, 0, 0, int.parse(timeString[0]), int.parse(timeString[1])); + + //DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!); + } + TimeOfDay _time = await _selectTime(context); + // TimeOfDay.fromDateTime(time) + + String time = DateFormat('HH:mm').format(DateFormat("hh:mm a").parse(_time.format(context))).trim(); + + // DateTime date1 = DateTime(date.year, date.month, date.day); + // getEitDffStructureList![index].fieldAnswer = date.toString(); + ESERVICESDV eservicesdv = ESERVICESDV(pIDCOLUMNNAME: time, pRETURNMSG: "null", pRETURNSTATUS: getEitDffStructureList![index].dEFAULTVALUE, pVALUECOLUMNNAME: time); + getEitDffStructureList![index].eSERVICESDV = eservicesdv; + setState(() {}); + if (model.cHILDSEGMENTSDVSplited?.isNotEmpty ?? false) { + calGetValueSetValues(model); + } + }, + ).paddingOnly(bottom: 12); } return Column( @@ -218,4 +327,45 @@ class _DynamicInputScreenState extends State { } return time; } + + Future _selectTime(BuildContext context) async { + TimeOfDay time = TimeOfDay(hour: selectedDate.hour, minute: selectedDate.minute); + if (!Platform.isIOS) { + await showCupertinoModalPopup( + context: context, + builder: (cxt) => Container( + height: 250, + color: Colors.white, + child: CupertinoDatePicker( + backgroundColor: Colors.white, + mode: CupertinoDatePickerMode.time, + use24hFormat: true, + onDateTimeChanged: (value) { + if (value != null && value != selectedDate) { + time = TimeOfDay(hour: value.hour, minute: value.minute); + } + }, + initialDateTime: selectedDate, + ), + ), + ); + } else { + final TimeOfDay? picked = await showTimePicker( + context: context, + initialTime: time, + builder: (cxt, child) { + return MediaQuery(data: MediaQuery.of(context).copyWith(alwaysUse24HourFormat: true), child: child ?? Container()); + }); + + if (picked != null && picked != time) { + time = picked; + } + // final DateTime? picked = + // await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101)); + // if (picked != null && picked != selectedDate) { + // time = picked; + // } + } + return time; + } } diff --git a/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart index 23404ca..c44be0d 100644 --- a/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart +++ b/lib/widgets/dynamic_forms/dynamic_textfield_widget.dart @@ -98,8 +98,8 @@ class DynamicTextFieldWidget extends StatelessWidget { ], ), ), - if (isPopup) const Icon(Icons.keyboard_arrow_down_outlined, color: MyColors.darkTextColor), - if (onTap != null) Icon(suffixIconData ?? Icons.keyboard_arrow_down_outlined, color: MyColors.darkTextColor), + if (isPopup) const Icon(Icons.keyboard_arrow_down_outlined, color: MyColors.darkIconColor), + if (onTap != null) Icon(suffixIconData ?? Icons.keyboard_arrow_down_outlined, color: MyColors.darkIconColor,size: 20), ], ), ), From 1e9a26e3df1e7900632df701e4f95ef78dc9ddde Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Thu, 9 Jun 2022 14:04:35 +0300 Subject: [PATCH 03/13] missing swipe cont --- assets/langs/ar-SA.json | 1 + assets/langs/en-US.json | 1 + lib/api/my_attendance_api_client.dart | 34 + lib/config/routes.dart | 4 + lib/generated/locale_keys.g.dart | 1 + lib/models/generic_response_model.dart | 41 +- lib/models/get_approves_list_model.dart | 60 ++ .../submit_eit_transaction_list_model.dart | 28 + .../validate_eit_transaction_list_model.dart | 18 + lib/ui/misc/request_submit_screen.dart | 206 +++++ .../dynamic_screens/dynamic_input_screen.dart | 14 +- .../my_attendance/my_attendance_screen.dart | 6 +- lib/ui/screens/tangheem_detail_screen.dart | 819 ------------------ lib/widgets/button/default_button.dart | 46 +- lib/widgets/button/simple_button.dart | 42 + pubspec.yaml | 1 + 16 files changed, 446 insertions(+), 876 deletions(-) create mode 100644 lib/models/get_approves_list_model.dart create mode 100644 lib/models/submit_eit_transaction_list_model.dart create mode 100644 lib/models/validate_eit_transaction_list_model.dart create mode 100644 lib/ui/misc/request_submit_screen.dart delete mode 100644 lib/ui/screens/tangheem_detail_screen.dart create mode 100644 lib/widgets/button/simple_button.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index fe71e90..27f1ab0 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -210,6 +210,7 @@ "myAttendance": "حضوري", "workOnBreak": "العمل على استراحة", "next": "التالي", + "submit": "ارسال", "profile": { "reset_password": { "label": "Reset Password", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index a1bfdfa..498d3e1 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -210,6 +210,7 @@ "myAttendance": "My Attendance", "workOnBreak": "Work On Break", "next": "Next", + "submit": "Submit", "profile": { "reset_password": { "label": "Reset Password", diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart index 4c88ec1..44b91da 100644 --- a/lib/api/my_attendance_api_client.dart +++ b/lib/api/my_attendance_api_client.dart @@ -3,8 +3,10 @@ import 'dart:async'; import 'package:mohem_flutter_app/app_state/app_state.dart'; import 'package:mohem_flutter_app/classes/consts.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'api_client.dart'; @@ -88,4 +90,36 @@ class MyAttendanceApiClient { return responseData; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); }, url, postParams); } + + Future submitEitTransaction(String pDescFlexContextCode, String pFunctionName, List> list) async { + String url = "${ApiConsts.erpRest}SUBMIT_EIT_TRANSACTION"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, + "P_FUNCTION_NAME": pFunctionName, + "EITTransactionTBL": list, + "EITTransactionTBLModel": list, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel responseData = GenericResponseModel.fromJson(json); + return responseData.submitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); + }, url, postParams); + } + + Future> getApproversList(String pAmeTransactionType, int pTransactionId) async { + String url = "${ApiConsts.erpRest}GET_APPROVERS_LIST"; + Map postParams = { + "P_AME_TRANSACTION_TYPE": pAmeTransactionType, + "P_PAGE_LIMIT": 1000, + "P_PAGE_NUM": 1, + "P_TRANSACTION_ID": pTransactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getApprovesList ?? []; + }, url, postParams); + } } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index a31d24c..929924a 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -6,6 +6,7 @@ import 'package:mohem_flutter_app/ui/login/login_screen.dart'; import 'package:mohem_flutter_app/ui/login/new_password_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; @@ -37,6 +38,7 @@ class AppRoutes { static const String myAttendance = "/myAttendance"; static const String dynamicScreen = "/dynamicScreen"; static const String addDynamicInput = "/addDynamicInput"; + static const String requestSubmitScreen = "/requestSubmitScreen"; static final Map routes = { login: (context) => LoginScreen(), @@ -56,5 +58,7 @@ class AppRoutes { myAttendance: (context) => MyAttendanceScreen(), dynamicScreen: (context) => DynamicListViewScreen(), addDynamicInput: (context) => DynamicInputScreen(), + + requestSubmitScreen: (context) => RequestSubmitScreen(), }; } diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index fed6ef6..bb7f085 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -221,5 +221,6 @@ abstract class LocaleKeys { static const myAttendance = 'myAttendance'; static const workOnBreak = 'workOnBreak'; static const next = 'next'; + static const submit = 'submit'; } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index c9edf47..de0404d 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -1,5 +1,6 @@ import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; +import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_attachement_list_model.dart'; import 'package:mohem_flutter_app/models/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_default_value_list_model.dart'; @@ -17,7 +18,9 @@ import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_mod import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'package:mohem_flutter_app/models/notification_action_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; +import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/worklist_response_model.dart'; import 'basic_member_information_model.dart'; @@ -88,7 +91,7 @@ class GenericResponseModel { List? getActionHistoryList; List? getAddressDffStructureList; List? getAddressNotificationBodyList; - List? getApprovesList; + List? getApprovesList; List? getAttachementList; GetAttendanceTracking? getAttendanceTrackingList; List? getBasicDetColsStructureList; @@ -253,7 +256,7 @@ class GenericResponseModel { String? submitCEITransactionList; String? submitCcpTransactionList; String? submitContactTransactionList; - String? submitEITTransactionList; + SubmitEITTransactionList? submitEITTransactionList; String? submitHrTransactionList; String? submitPhonesTransactionList; String? submitSITTransactionList; @@ -272,7 +275,7 @@ class GenericResponseModel { String? vHRGetProjectByCodeList; bool? vHRIsVerificationCodeValid; String? validateAbsenceTransactionList; - String? validateEITTransactionList; + ValidateEITTransactionList? validateEITTransactionList; String? validatePhonesTransactionList; String? vrItemTypesList; String? wFLookUpList; @@ -608,7 +611,13 @@ class GenericResponseModel { getAddressDffStructureList = json['GetAddressDffStructureList']; getAddressNotificationBodyList = json['GetAddressNotificationBodyList']; - getApprovesList = json['GetApprovesList']; + + if (json['GetApprovesList'] != null) { + getApprovesList = []; + json['GetApprovesList'].forEach((v) { + getApprovesList!.add(new GetApprovesList.fromJson(v)); + }); + } if (json['GetAttachementList'] != null) { getAttachementList = []; @@ -887,7 +896,8 @@ class GenericResponseModel { submitCEITransactionList = json['SubmitCEITransactionList']; submitCcpTransactionList = json['SubmitCcpTransactionList']; submitContactTransactionList = json['SubmitContactTransactionList']; - submitEITTransactionList = json['SubmitEITTransactionList']; + submitEITTransactionList = json['SubmitEITTransactionList'] != null ? new SubmitEITTransactionList.fromJson(json['SubmitEITTransactionList']) : null; + submitHrTransactionList = json['SubmitHrTransactionList']; submitPhonesTransactionList = json['SubmitPhonesTransactionList']; submitSITTransactionList = json['SubmitSITTransactionList']; @@ -913,7 +923,9 @@ class GenericResponseModel { vHRGetProjectByCodeList = json['VHR_GetProjectByCodeList']; vHRIsVerificationCodeValid = json['VHR_IsVerificationCodeValid']; validateAbsenceTransactionList = json['ValidateAbsenceTransactionList']; - validateEITTransactionList = json['ValidateEITTransactionList']; + + validateEITTransactionList = json['ValidateEITTransactionList'] != null ? new ValidateEITTransactionList.fromJson(json['ValidateEITTransactionList']) : null; + validatePhonesTransactionList = json['ValidatePhonesTransactionList']; vrItemTypesList = json['VrItemTypesList']; wFLookUpList = json['WFLookUpList']; @@ -994,7 +1006,10 @@ class GenericResponseModel { data['GetAddressDffStructureList'] = this.getAddressDffStructureList; data['GetAddressNotificationBodyList'] = this.getAddressNotificationBodyList; - data['GetApprovesList'] = this.getApprovesList; + + if (this.getApprovesList != null) { + data['GetApprovesList'] = this.getApprovesList!.map((v) => v.toJson()).toList(); + } if (this.getAttachementList != null) { data['GetAttachementList'] = this.getAttachementList!.map((v) => v.toJson()).toList(); @@ -1226,7 +1241,11 @@ class GenericResponseModel { data['SubmitCEITransactionList'] = this.submitCEITransactionList; data['SubmitCcpTransactionList'] = this.submitCcpTransactionList; data['SubmitContactTransactionList'] = this.submitContactTransactionList; - data['SubmitEITTransactionList'] = this.submitEITTransactionList; + + if (this.submitEITTransactionList != null) { + data['SubmitEITTransactionList'] = this.submitEITTransactionList!.toJson(); + } + data['SubmitHrTransactionList'] = this.submitHrTransactionList; data['SubmitPhonesTransactionList'] = this.submitPhonesTransactionList; data['SubmitSITTransactionList'] = this.submitSITTransactionList; @@ -1250,7 +1269,11 @@ class GenericResponseModel { data['VHR_GetProjectByCodeList'] = this.vHRGetProjectByCodeList; data['VHR_IsVerificationCodeValid'] = this.vHRIsVerificationCodeValid; data['ValidateAbsenceTransactionList'] = this.validateAbsenceTransactionList; - data['ValidateEITTransactionList'] = this.validateEITTransactionList; + + if (this.validateEITTransactionList != null) { + data['ValidateEITTransactionList'] = this.validateEITTransactionList!.toJson(); + } + data['ValidatePhonesTransactionList'] = this.validatePhonesTransactionList; data['VrItemTypesList'] = this.vrItemTypesList; data['WFLookUpList'] = this.wFLookUpList; diff --git a/lib/models/get_approves_list_model.dart b/lib/models/get_approves_list_model.dart new file mode 100644 index 0000000..f5a4d82 --- /dev/null +++ b/lib/models/get_approves_list_model.dart @@ -0,0 +1,60 @@ +class GetApprovesList { + String? aPPROVALSTATUS; + String? aPPROVER; + String? aPPROVERCATEGORY; + int? aPPROVERORDERNUMBER; + String? aPPROVERTYPE; + String? eMPLOYEEIMAGE; + int? fROMROWNUM; + int? lINENO; + int? nOOFROWS; + String? pOSITIONTITLE; + int? rOWNUM; + int? tOROWNUM; + + GetApprovesList( + {this.aPPROVALSTATUS, + this.aPPROVER, + this.aPPROVERCATEGORY, + this.aPPROVERORDERNUMBER, + this.aPPROVERTYPE, + this.eMPLOYEEIMAGE, + this.fROMROWNUM, + this.lINENO, + this.nOOFROWS, + this.pOSITIONTITLE, + this.rOWNUM, + this.tOROWNUM}); + + GetApprovesList.fromJson(Map json) { + aPPROVALSTATUS = json['APPROVAL_STATUS']; + aPPROVER = json['APPROVER']; + aPPROVERCATEGORY = json['APPROVER_CATEGORY']; + aPPROVERORDERNUMBER = json['APPROVER_ORDER_NUMBER']; + aPPROVERTYPE = json['APPROVER_TYPE']; + eMPLOYEEIMAGE = json['EMPLOYEE_IMAGE']; + fROMROWNUM = json['FROM_ROW_NUM']; + lINENO = json['LINE_NO']; + nOOFROWS = json['NO_OF_ROWS']; + pOSITIONTITLE = json['POSITION_TITLE']; + rOWNUM = json['ROW_NUM']; + tOROWNUM = json['TO_ROW_NUM']; + } + + Map toJson() { + final Map data = new Map(); + data['APPROVAL_STATUS'] = this.aPPROVALSTATUS; + data['APPROVER'] = this.aPPROVER; + data['APPROVER_CATEGORY'] = this.aPPROVERCATEGORY; + data['APPROVER_ORDER_NUMBER'] = this.aPPROVERORDERNUMBER; + data['APPROVER_TYPE'] = this.aPPROVERTYPE; + data['EMPLOYEE_IMAGE'] = this.eMPLOYEEIMAGE; + data['FROM_ROW_NUM'] = this.fROMROWNUM; + data['LINE_NO'] = this.lINENO; + data['NO_OF_ROWS'] = this.nOOFROWS; + data['POSITION_TITLE'] = this.pOSITIONTITLE; + data['ROW_NUM'] = this.rOWNUM; + data['TO_ROW_NUM'] = this.tOROWNUM; + return data; + } +} \ No newline at end of file diff --git a/lib/models/submit_eit_transaction_list_model.dart b/lib/models/submit_eit_transaction_list_model.dart new file mode 100644 index 0000000..288ce8e --- /dev/null +++ b/lib/models/submit_eit_transaction_list_model.dart @@ -0,0 +1,28 @@ +class SubmitEITTransactionList { + String? pITEMKEY; + String? pRETURNMSG; + String? pRETURNSTATUS; + int? pTRANSACTIONID; + + SubmitEITTransactionList( + {this.pITEMKEY, + this.pRETURNMSG, + this.pRETURNSTATUS, + this.pTRANSACTIONID}); + + SubmitEITTransactionList.fromJson(Map json) { + pITEMKEY = json['P_ITEM_KEY']; + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['P_ITEM_KEY'] = this.pITEMKEY; + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} \ No newline at end of file diff --git a/lib/models/validate_eit_transaction_list_model.dart b/lib/models/validate_eit_transaction_list_model.dart new file mode 100644 index 0000000..02f2af0 --- /dev/null +++ b/lib/models/validate_eit_transaction_list_model.dart @@ -0,0 +1,18 @@ +class ValidateEITTransactionList { + String? pRETURNMSG; + String? pRETURNSTATUS; + + ValidateEITTransactionList({this.pRETURNMSG, this.pRETURNSTATUS}); + + ValidateEITTransactionList.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} \ No newline at end of file diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart new file mode 100644 index 0000000..c57ce6b --- /dev/null +++ b/lib/ui/misc/request_submit_screen.dart @@ -0,0 +1,206 @@ +import 'dart:io'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/my_attendance_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/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/get_approves_list_model.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/button/simple_button.dart'; +import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; +import 'package:mohem_flutter_app/widgets/input_widget.dart'; + +class RequestSubmitScreenParams { + String title; + int transactionId; + + RequestSubmitScreenParams(this.title, this.transactionId); +} + +class RequestSubmitScreen extends StatefulWidget { + RequestSubmitScreen({Key? key}) : super(key: key); + + @override + _RequestSubmitScreenState createState() { + return _RequestSubmitScreenState(); + } +} + +class _RequestSubmitScreenState extends State { + RequestSubmitScreenParams? params; + + List approverList = []; + List attachmentFiles = []; + + @override + void initState() { + super.initState(); + } + + void getApproverList() async { + try { + Utils.showLoading(context); + approverList = await MyAttendanceApiClient().getApproversList("SSHRMS", params!.transactionId); + + Utils.hideLoading(context); + setState(() {}); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if (params == null) { + params = ModalRoute.of(context)!.settings.arguments as RequestSubmitScreenParams; + getApproverList(); + } + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: params!.title, + ), + body: Column( + children: [ + ListView( + padding: const EdgeInsets.all(21).copyWith(top: 14), + physics: const BouncingScrollPhysics(), + children: [ + attachmentView("Attachments"), + 14.height, + InputWidget( + "Comments", + "Write a comment", + TextEditingController(), + isBackgroundEnable: true, + lines: 3, + onChange: (String note) { + // this.note = note; + }, + ), //.objectContainerView(title: "Comments"), + 14.height, + "Approvers List".toSectionHeading(), + 14.height, + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) { + return approverView(cxt, approverList[index]); + }, + separatorBuilder: (cxt, index) => 12.height, + itemCount: approverList.length, + ) + ], + ).expanded, + DefaultButton( + LocaleKeys.submit.tr(), + () { + //Navigator.of(context).pushNamed(LOGIN_TYPE) + }, + ).insideContainer, + ], + ), + ); + } + + Widget approverView(BuildContext context, GetApprovesList approver) { + return Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CircularAvatar(url: approver.eMPLOYEEIMAGE, isImageBase64: true, height: 40, width: 40), + 9.width, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + approver.aPPROVER!.toText16(), + approver.pOSITIONTITLE!.toText12(color: MyColors.lightTextColor), + ], + ), + ) + ], + ).objectContainerView(); + } + + Widget attachmentView(String title) { + return Container( + padding: const EdgeInsets.only(top: 15, bottom: 15, left: 14, right: 14), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(15), + boxShadow: [ + BoxShadow( + color: const Color(0xff000000).withOpacity(.05), + blurRadius: 26, + offset: const Offset(0, -3), + ), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + title.toText16().expanded, + 6.width, + SimpleButton("Add", () async { + FilePickerResult? result = await FilePicker.platform.pickFiles(allowMultiple: true); + if (result != null) { + attachmentFiles = attachmentFiles + result.paths.map((path) => File(path!)).toList(); + attachmentFiles = attachmentFiles.toSet().toList(); + setState(() {}); + } + }, fontSize: 14), + ], + ), + if (attachmentFiles.isNotEmpty) 12.height, + if (attachmentFiles.isNotEmpty) + ListView.separated( + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (cxt, index) { + String fileName = attachmentFiles[index].path.split('/').last; + + return Row( + children: [ + fileName.toText13().expanded, + 6.width, + IconButton( + padding: EdgeInsets.zero, + iconSize: 20, + icon: const Icon(Icons.cancel_rounded), + color: MyColors.redColor, + constraints: const BoxConstraints(), + onPressed: () async { + attachmentFiles.removeAt(index); + setState(() {}); + }, + ) + ], + ); + }, + separatorBuilder: (cxt, index) => 6.height, + itemCount: attachmentFiles.length), + ], + ), + ); + } +} diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index f668ea2..bdbc1d6 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; import 'package:mohem_flutter_app/extensions/widget_extensions.dart'; @@ -13,6 +14,8 @@ import 'package:mohem_flutter_app/models/dyanmic_forms/get_set_values_request_mo import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; +import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -54,12 +57,6 @@ class _DynamicInputScreenState extends State { void validateTransaction() async { try { Utils.showLoading(context); - - // List> values = getEitDffStructureList! - // .map((e) => - // ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: e.eSERVICESDV?.pIDCOLUMNNAME ?? "").toJson()) - // .toList(); - List> values = getEitDffStructureList!.map((e) { String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; if (e.fORMATTYPE == "X") { @@ -81,10 +78,9 @@ class _DynamicInputScreenState extends State { values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: null).toJson()); genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(genericResponseModel!.pDESCFLEXCONTEXTCODE!, dynamicParams!.dynamicId, values); - getEitDffStructureList = genericResponseModel?.getEITDFFStructureList ?? []; - //getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG != "N").toList(); + SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(genericResponseModel!.pDESCFLEXCONTEXTCODE!, dynamicParams!.dynamicId, values); Utils.hideLoading(context); - setState(() {}); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", submitEITTransactionList.pTRANSACTIONID!)); } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); diff --git a/lib/ui/my_attendance/my_attendance_screen.dart b/lib/ui/my_attendance/my_attendance_screen.dart index 2b74c98..e00a5c6 100644 --- a/lib/ui/my_attendance/my_attendance_screen.dart +++ b/lib/ui/my_attendance/my_attendance_screen.dart @@ -7,6 +7,7 @@ import 'package:mohem_flutter_app/extensions/int_extensions.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/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; @@ -31,7 +32,6 @@ class MyAttendanceScreen extends StatelessWidget { LocaleKeys.missingSwipes.tr(), ).onPress(() { Navigator.pushNamed(context, AppRoutes.dynamicScreen, arguments: DynamicListViewParams(LocaleKeys.missingSwipes.tr(), "HMG_OTL_MISSING_SWIPE_EIT_SS")); - }), 12.height, itemView( @@ -44,7 +44,9 @@ class MyAttendanceScreen extends StatelessWidget { itemView( "assets/images/pdf.svg", LocaleKeys.workOnBreak.tr(), - ), + ).onPress(() { + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", 8724807)); + }), ], ).paddingAll(21)), ); diff --git a/lib/ui/screens/tangheem_detail_screen.dart b/lib/ui/screens/tangheem_detail_screen.dart deleted file mode 100644 index 0f4ea7b..0000000 --- a/lib/ui/screens/tangheem_detail_screen.dart +++ /dev/null @@ -1,819 +0,0 @@ -// import 'package:flutter/cupertino.dart'; -// import 'package:flutter/material.dart'; -// import 'package:flutter_html/flutter_html.dart'; -// import 'package:flutter_svg/flutter_svg.dart'; -// import 'package:shared_preferences/shared_preferences.dart'; -// import 'package:tangheem/api/admin_configuration_api_client.dart'; -// import 'package:tangheem/api/tangheem_user_api_client.dart'; -// import 'package:tangheem/app_state/app_state.dart'; -// import 'package:tangheem/classes/colors.dart'; -// import 'package:tangheem/classes/consts.dart'; -// import 'package:tangheem/classes/utils.dart'; -// import 'package:tangheem/extensions/string_extensions.dart'; -// import 'package:tangheem/models/aya_tangheem_type_mapped.dart'; -// import 'package:tangheem/models/discussion_model.dart'; -// import 'package:tangheem/ui/dialogs/discussion_input_dialog.dart'; -// import 'package:tangheem/widgets/aya_player_widget.dart'; -// import 'package:tangheem/widgets/aya_record_widget.dart'; -// import 'package:tangheem/widgets/text_highlight_widget.dart'; -// -// import 'login_screen.dart'; -// -// class TangheemDetailParams { -// final String selectedTangheemTypeId; -// final List ayatTangheemTypeMappedDataList; -// -// TangheemDetailParams({@required this.selectedTangheemTypeId, @required this.ayatTangheemTypeMappedDataList}); -// } -// -// class TangheemDetailScreen extends StatefulWidget { -// static const String routeName = "/tangheem_detail"; -// final TangheemDetailParams tangheemDetailParams; -// -// TangheemDetailScreen({Key key, this.tangheemDetailParams}) : super(key: key); -// -// @override -// _TangheemDetailScreenState createState() { -// return _TangheemDetailScreenState(); -// } -// } -// -// class _TangheemDetailScreenState extends State { -// GlobalKey _globalKey = GlobalKey(); -// -// List voiceNoteList = []; -// -// List ayatTangheemTypeMappedDataList = []; -// -// List _dataList = []; -// -// int _discussionPage = -1; -// AyatTangheemTypeMappedData _ayatTangheemTypeMappedFirstData; -// DiscussionModel _discussionModel; -// -// bool showAyaPlayer = false; -// -// @override -// void initState() { -// super.initState(); -// ayatTangheemTypeMappedDataList = widget.tangheemDetailParams.ayatTangheemTypeMappedDataList; -// _ayatTangheemTypeMappedFirstData = ayatTangheemTypeMappedDataList.first; -// filterVoiceListData(); -// getPrefs(); -// getTangheemDiscussionAndRelatedData(); -// } -// -// double fontSize = 18; -// -// SharedPreferences prefs; -// -// void getPrefs() async { -// prefs = await SharedPreferences.getInstance(); -// fontSize = (prefs.getInt(GlobalConsts.fontZoomSize) ?? 18) + 0.0; -// setState(() {}); -// } -// -// String getArabicIndexWord(int index) { -// if (index == 0) { -// return 'الأولى'; -// } else if (index == 1) { -// return 'الثانية'; -// } else if (index == 2) { -// return 'الثالثة'; -// } else if (index == 3) { -// return 'الرابعة'; -// } else if (index == 4) { -// return 'الخامسة'; -// } -// return ""; -// } -// -// void getTangheemDiscussionAndRelatedData() async { -// Utils.showLoading(context); -// try { -// _discussionModel = await TangheemUserApiClient().getDiscussionByTangheemID(_discussionPage, widget.tangheemDetailParams.selectedTangheemTypeId); -// if (!_ayatTangheemTypeMappedFirstData.ayatNumberInSurahs.contains(",")) { -// _dataList = await getTangheemRelatedData(); -// } -// Utils.hideLoading(context); -// setState(() {}); -// } catch (ex) { -// print(ex); -// Utils.handleException(ex, context, null); -// Utils.hideLoading(context); -// } -// } -// -// Future> getTangheemRelatedData() async { -// _dataList = []; -// AyatTangheemTypeMapped _ayatTangheemTypeMapped = -// await TangheemUserApiClient().getAyaTangheemTypeMappedRelated(_ayatTangheemTypeMappedFirstData.surahNo, _ayatTangheemTypeMappedFirstData.ayatNumberInSurahs); -// _dataList = _ayatTangheemTypeMapped?.data ?? []; -// if (_dataList.isNotEmpty) { -// _dataList = _dataList.where((element) => element.tangheemTypeId != _ayatTangheemTypeMappedFirstData.tangheemTypeId)?.toList() ?? []; -// var _tempList = _dataList.map((e) => e.tangheemTypeId).toList().toSet().toList(); -// var _dataTempList = []; -// _tempList.forEach((_tempElement) { -// _dataTempList.add(_dataList.firstWhere((element) { -// return !element.ayatNumberInSurahs.contains(",") && (element.tangheemTypeId == _tempElement); -// }, orElse: null)); -// }); -// _dataList = _dataTempList; -// } -// -// return _dataList; -// } -// -// void sendComment(String discussionText) async { -// Utils.showLoading(context); -// try { -// await AdminConfigurationApiClient().addDiscussion(discussionText, _ayatTangheemTypeMappedFirstData.ayaTangheemTypeId); -// Utils.showToast("تم إرسال التعليق ، سيكون مرئيًا بمجرد موافقة المسؤول عليه"); -// Utils.hideLoading(context); -// Navigator.pop(context); -// } catch (ex) { -// Utils.handleException(ex, context, null); -// Utils.hideLoading(context); -// } -// } -// -// void filterVoiceListData() { -// ayatTangheemTypeMappedDataList.forEach((element) { -// voiceNoteList.addAll(element.voiceNote); -// }); -// } -// -// @override -// void dispose() { -// super.dispose(); -// } -// -// @override -// Widget build(BuildContext context) { -// return Container( -// padding: EdgeInsets.fromLTRB(16, 0, 16, 0), -// width: double.infinity, -// child: _ayatTangheemTypeMappedFirstData == null -// ? SizedBox() -// : Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Expanded( -// child: ListView( -// physics: BouncingScrollPhysics(), -// padding: EdgeInsets.only(bottom: 16, top: 16), -// children: [ -// Text( -// _ayatTangheemTypeMappedFirstData.tangheemTypeName ?? "", -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 20, color: ColorConsts.primaryBlue, height: 1.5), -// ), -// SizedBox(height: 8), -// Text( -// _ayatTangheemTypeMappedFirstData.tangheemTypeDescription ?? "", -// style: TextStyle(fontSize: 14, color: ColorConsts.textGrey, height: 1), -// ), -// SizedBox(height: 8), -// Container( -// margin: EdgeInsets.only(top: 4, bottom: 4), -// padding: EdgeInsets.only(top: 8, bottom: 8, right: 4, left: 4), -// decoration: BoxDecoration( -// color: Colors.white, -// borderRadius: BorderRadius.circular(8), -// ), -// child: SingleChildScrollView( -// physics: NeverScrollableScrollPhysics(), -// child: RepaintBoundary( -// key: _globalKey, -// child: Material( -// color: Colors.white, -// child: ListView.builder( -// physics: NeverScrollableScrollPhysics(), -// shrinkWrap: true, -// itemCount: ayatTangheemTypeMappedDataList.length > 5 ? 5 : ayatTangheemTypeMappedDataList.length, -// itemBuilder: (context, index) { -// var _ayatTangheemTypeMappedData = ayatTangheemTypeMappedDataList[index]; -// List _tangheemInsideTableList = []; -// List _tangheemAboveTableList = []; -// List _tangheemBelowTableList = []; -// List _tangheemWords = []; -// -// List _tempPropertyList = List() + _ayatTangheemTypeMappedData?.property ?? []; -// int firstIndex = _tempPropertyList.indexWhere((element) => element.isInsideTable); -// if (firstIndex >= 0) { -// var _tempPropertyListTop = _tempPropertyList.take(firstIndex); -// _tempPropertyListTop = _tempPropertyListTop.where((element) => (element.propertyValue ?? "").isNotEmpty)?.toList() ?? []; -// _tangheemAboveTableList = _tempPropertyListTop; -// _tempPropertyListTop.forEach((element) { -// _tempPropertyList.remove(element); -// }); -// var _tempPropertyListInside = _tempPropertyList?.where((element) => (element.isInsideTable))?.toList() ?? []; -// _tempPropertyListInside.forEach((element) { -// _tempPropertyList.remove(element); -// }); -// _tempPropertyListInside = _tempPropertyListInside.where((element) => (element.propertyValue ?? "").isNotEmpty)?.toList() ?? []; -// _tangheemInsideTableList = _tempPropertyListInside; -// var _tempPropertyListBelow = _tempPropertyList; -// _tempPropertyListBelow = _tempPropertyListBelow.where((element) => (element.propertyValue ?? "").isNotEmpty)?.toList() ?? []; -// _tangheemBelowTableList = _tempPropertyListBelow; -// } -// -// _tangheemWords.add(_ayatTangheemTypeMappedData.highlightText ?? ""); -// // _tangheemInsideTableList = -// // _ayatTangheemTypeMappedData?.property?.where((element) => (element.isInsideTable) && (element.propertyValue ?? "").isNotEmpty)?.toList() ?? []; -// // _tangheemAboveTableList = -// // _ayatTangheemTypeMappedData?.property?.where((element) => (!element.isInsideTable) && (element.propertyValue ?? "").isNotEmpty)?.toList() ?? []; -// // -// // -// -// var _tempTangheemIndexWord = ""; -// if (ayatTangheemTypeMappedDataList.length == 1) { -// _tempTangheemIndexWord = ""; -// } else { -// _tempTangheemIndexWord = getArabicIndexWord(index) + " "; -// } -// -// return ListView( -// physics: NeverScrollableScrollPhysics(), -// shrinkWrap: true, -// padding: EdgeInsets.all(4), -// children: [ -// Row( -// children: [ -// Text( -// " جملة ${_ayatTangheemTypeMappedData.tangheemTypeName} $_tempTangheemIndexWord", -// style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white, backgroundColor: ColorConsts.primaryBlue), -// ), -// Expanded( -// child: Container(height: 2, color: ColorConsts.primaryBlue), -// ), -// ], -// ), -// SizedBox(height: 8), -// TextHighLightWidget( -// text: _ayatTangheemTypeMappedData.reverseAyatNumber() ?? "", -// valueColor: ColorConsts.primaryBlue, -// highlights: _tangheemWords, -// highLightFontSize: fontSize, -// style: TextStyle( -// fontFamily: "UthmanicHafs", -// fontSize: fontSize, -// fontWeight: FontWeight.bold, -// ), -// ), -// SizedBox(height: 16), -// ListView.separated( -// itemCount: _tangheemAboveTableList.length, -// physics: NeverScrollableScrollPhysics(), -// shrinkWrap: true, -// separatorBuilder: (context, index) { -// return Divider( -// color: Colors.white, -// height: 4, -// thickness: 0, -// ); -// }, -// itemBuilder: (context, index) { -// return Row( -// children: [ -// Expanded( -// child: Container( -// height: 40, -// padding: EdgeInsets.only(left: 4, right: 8), -// alignment: Alignment.centerRight, -// child: Text( -// _tangheemAboveTableList[index].propertyText, -// maxLines: 1, -// style: TextStyle(fontWeight: FontWeight.bold, color: ColorConsts.secondaryOrange), -// ), -// color: ColorConsts.secondaryWhite, -// ), -// ), -// SizedBox(width: 4), -// Expanded( -// child: Container( -// color: ColorConsts.secondaryWhite, -// padding: EdgeInsets.all(4), -// child: Container( -// color: Colors.white, -// padding: EdgeInsets.only(left: 4, right: 8), -// // alignment: Alignment.centerRight, -// child: Html( -// data: _tangheemAboveTableList[index]?.propertyValue ?? "", -// style: { -// 'html': Style(textAlign: TextAlign.left), -// }, -// ), -// -// // Text( -// // _tangheemAboveTableList[index].propertyValue, -// // maxLines: 1, -// // style: TextStyle( -// // color: Color( -// // Utils.stringToHex(_tangheemAboveTableList[index].textColor), -// // ), -// // ), -// // ), -// ), -// ), -// ) -// ], -// ); -// }), -// if (_tangheemInsideTableList.isNotEmpty) -// Container( -// color: ColorConsts.primaryBlue, -// margin: EdgeInsets.only(top: 8, bottom: 8), -// padding: EdgeInsets.all(8), -// child: Column( -// children: [ -// Text( -// "خط النبر و التنغيم ل${_ayatTangheemTypeMappedData.tangheemTypeName ?? ""}", -// style: TextStyle(fontWeight: FontWeight.bold, color: Colors.white), -// ), -// SizedBox(height: 8), -// tangheemInsideTablePropertyView(_tangheemInsideTableList) -// ], -// ), -// ), -// tangheemOutSideTablePropertyView(_tangheemBelowTableList) -// ], -// ); -// }), -// ), -// ), -// ), -// ), -// SizedBox(height: 8), -// discussionView(_discussionModel?.data ?? []), -// if (_dataList.isNotEmpty) -// Container( -// margin: EdgeInsets.only(top: 8), -// padding: EdgeInsets.only(bottom: 20), -// width: double.infinity, -// decoration: BoxDecoration( -// color: Colors.white, -// borderRadius: BorderRadius.circular(8), -// ), -// child: Column( -// children: [ -// Container( -// height: 60, -// width: double.infinity, -// margin: EdgeInsets.only(bottom: 8), -// alignment: Alignment.center, -// decoration: BoxDecoration( -// color: ColorConsts.primaryBlue, -// borderRadius: BorderRadius.only( -// topLeft: Radius.circular(8), -// topRight: Radius.circular(8), -// ), -// ), -// child: Text( -// "قائمة الأساليب اللغوية في هذه الآية", -// style: TextStyle(fontSize: 16, color: Colors.white), -// ), -// ), -// ListView.separated( -// padding: EdgeInsets.fromLTRB(4, 8, 4, 4), -// shrinkWrap: true, -// physics: NeverScrollableScrollPhysics(), -// itemCount: _dataList.length, -// separatorBuilder: (context, index) => SizedBox(height: 16), -// itemBuilder: (context, index) { -// return InkWell( -// onTap: () { -// List list = _dataList; -// var removedData = list[index]; -// list.remove(removedData); -// list.insert(0, removedData); -// TangheemDetailParams tangheem = TangheemDetailParams(selectedTangheemTypeId: _dataList[index].ayaTangheemTypeId, ayatTangheemTypeMappedDataList: list); -// Navigator.pushNamed(context, TangheemDetailScreen.routeName, arguments: tangheem); -// }, -// child: Text( -// _dataList[index].tangheemTypeName, -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16, color: ColorConsts.secondaryOrange, height: 1.5), -// ), -// ); -// }, -// ), -// ], -// ), -// ), -// SizedBox(height: 16), -// AyaRecordWidget() -// ], -// ), -// ), -// if (MediaQuery.of(context).orientation == Orientation.portrait) -// AyaPlayerWidget( -// surahName: _ayatTangheemTypeMappedFirstData?.surahNameAr ?? "", -// ayaTangheemTypeId: _ayatTangheemTypeMappedFirstData?.ayaTangheemTypeId ?? "", -// globalKey: _globalKey, -// ayaNo: _ayatTangheemTypeMappedFirstData?.ayahNo, -// surahNo: _ayatTangheemTypeMappedFirstData?.surahNo, -// voiceNoteList: voiceNoteList), -// if (MediaQuery.of(context).orientation == Orientation.landscape) -// Column( -// mainAxisSize: MainAxisSize.min, -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Container( -// height: 24, -// margin: EdgeInsets.only(bottom: 8, top: 8), -// // color: Colors.transparent, -// child: TextButton( -// onPressed: () { -// setState(() { -// showAyaPlayer = !showAyaPlayer; -// }); -// }, -// child: Text( -// showAyaPlayer ? "إخفاء التسجيلات" : "إظهار التسجيلات", -// style: TextStyle(color: Colors.black87, fontSize: 12), -// ), -// style: TextButton.styleFrom( -// backgroundColor: ColorConsts.gradientOrange, -// primary: ColorConsts.primaryBlue, -// padding: EdgeInsets.only(top: 4, bottom: 4, right: 8, left: 8), -// textStyle: TextStyle(color: Colors.white, fontSize: 12), -// ), -// ), -// ), -// if (showAyaPlayer) -// AyaPlayerWidget( -// surahName: _ayatTangheemTypeMappedFirstData?.surahNameAr ?? "", -// ayaTangheemTypeId: _ayatTangheemTypeMappedFirstData?.ayaTangheemTypeId ?? "", -// ayaNo: _ayatTangheemTypeMappedFirstData?.ayahNo, -// surahNo: _ayatTangheemTypeMappedFirstData?.surahNo, -// globalKey: _globalKey, -// voiceNoteList: voiceNoteList), -// ], -// ) -// ], -// ), -// ); -// } -// -// Widget nextOptionButton(String icon, String text, VoidCallback onPressed) { -// return InkWell( -// onTap: onPressed, -// child: onPressed == null -// ? SizedBox() -// : Row( -// crossAxisAlignment: CrossAxisAlignment.center, -// mainAxisSize: MainAxisSize.min, -// children: [ -// SvgPicture.asset(icon, height: 12, width: 12), -// SizedBox(width: 4), -// Text( -// text, -// style: TextStyle(color: ColorConsts.textGrey), -// ), -// ], -// ), -// ); -// } -// -// Widget previousOptionButton(String icon, String text, VoidCallback onPressed) { -// return InkWell( -// onTap: onPressed, -// child: onPressed == null -// ? SizedBox() -// : Row( -// crossAxisAlignment: CrossAxisAlignment.center, -// mainAxisSize: MainAxisSize.min, -// children: [ -// Text( -// text, -// style: TextStyle(color: ColorConsts.textGrey), -// ), -// SizedBox(width: 4), -// SvgPicture.asset(icon, height: 12, width: 12), -// ], -// ), -// ); -// } -// -// Widget tangheemOutSideTablePropertyView(List tangheemPropertyList) { -// return ListView.separated( -// itemCount: tangheemPropertyList.length, -// physics: NeverScrollableScrollPhysics(), -// shrinkWrap: true, -// separatorBuilder: (context, index) { -// return Divider( -// color: Colors.white, -// height: 4, -// thickness: 0, -// ); -// }, -// itemBuilder: (context, index) { -// return Row( -// children: [ -// Expanded( -// child: Container( -// height: 40, -// padding: EdgeInsets.only(left: 4, right: 8), -// alignment: Alignment.centerRight, -// child: Text( -// tangheemPropertyList[index].propertyText, -// maxLines: 1, -// style: TextStyle(fontWeight: FontWeight.bold, color: ColorConsts.secondaryOrange), -// ), -// color: ColorConsts.secondaryWhite, -// ), -// ), -// SizedBox(width: 4), -// Expanded( -// child: Container( -// color: ColorConsts.secondaryWhite, -// padding: EdgeInsets.all(4), -// child: Container( -// color: Colors.white, -// padding: EdgeInsets.only(left: 4, right: 8), -// // alignment: Alignment.centerRight, -// child: Html( -// data: tangheemPropertyList[index]?.propertyValue ?? "", -// style: { -// 'html': Style(textAlign: TextAlign.left), -// }, -// ), -// // Text( -// // tangheemPropertyList[index].propertyValue, -// // maxLines: 1, -// // style: TextStyle( -// // color: Color( -// // Utils.stringToHex(tangheemPropertyList[index].textColor), -// // ), -// // ), -// // ), -// ), -// ), -// ) -// ], -// ); -// }); -// } -// -// Widget tangheemInsideTablePropertyView(List tangheemPropertyList) { -// return Container( -// color: Colors.white, -// padding: EdgeInsets.all(2), -// child: Row( -// children: [ -// for (var property in tangheemPropertyList) -// Expanded( -// child: Container( -// // color: ColorConsts.secondaryWhite, -// // padding: EdgeInsets.all(8), -// margin: EdgeInsets.only(left: 2, right: 2), -// child: Column( -// mainAxisSize: MainAxisSize.min, -// crossAxisAlignment: CrossAxisAlignment.start, -// mainAxisAlignment: MainAxisAlignment.center, -// children: [ -// Container( -// color: ColorConsts.secondaryWhite, -// //height: 30, -// alignment: Alignment.center, -// padding: EdgeInsets.only(left: 2, right: 4), -// width: double.infinity, -// child: Text( -// property.propertyText ?? "", -// // maxLines: 1, -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12, color: ColorConsts.secondaryOrange), -// ), -// ), -// Container(width: double.infinity, height: 4, color: Colors.white), -// Container( -// color: ColorConsts.secondaryWhite, -// padding: EdgeInsets.all(4), -// child: Container( -// color: Colors.white, -// padding: EdgeInsets.only(left: 2, right: 4), -// width: double.infinity, -// child: Html( -// data: property.propertyValue ?? "", -// style: { -// 'html': Style(textAlign: TextAlign.left), -// }, -// ), -// -// // Text( -// // property.propertyValue ?? "", -// // maxLines: 1, -// // style: TextStyle( -// // fontSize: 12, -// // color: Color( -// // Utils.stringToHex(property.textColor), -// // ), -// // ), -// // ), -// ), -// ), -// ], -// ), -// ), -// ) -// ], -// ) -// -// //@todo sikander :commented these line for later discussion -// // ListView.separated( -// // itemCount: tangheemPropertyList.length, -// // physics: NeverScrollableScrollPhysics(), -// // padding: EdgeInsets.zero, -// // shrinkWrap: true, -// // separatorBuilder: (context, index) { -// // return Divider( -// // color: Colors.white, -// // height: 1, -// // thickness: 0, -// // ); -// // }, -// // itemBuilder: (context, index) { -// // return Container( -// // color: ColorConsts.secondaryWhite, -// // padding: EdgeInsets.all(8), -// // child: Column( -// // mainAxisSize: MainAxisSize.min, -// // crossAxisAlignment: CrossAxisAlignment.start, -// // mainAxisAlignment: MainAxisAlignment.center, -// // children: [ -// // Text( -// // tangheemPropertyList[index].propertyText ?? "", -// // style: TextStyle(fontWeight: FontWeight.bold, fontSize: 12, color: ColorConsts.secondaryOrange), -// // ), -// // SizedBox(height: 4), -// // Text( -// // tangheemPropertyList[index].propertyValue ?? "", -// // style: TextStyle( -// // fontSize: 12, -// // color: Color( -// // Utils.stringToHex(tangheemPropertyList[index].textColor), -// // ), -// // ), -// // ), -// // ], -// // ), -// // ); -// // }, -// // ), -// ); -// } -// -// Widget discussionView(List _discussionList) { -// _discussionList = _discussionList.where((element) => element.status.toLowerCase() == "Accept".toLowerCase()).toList(); -// return Stack( -// alignment: Alignment.bottomCenter, -// children: [ -// Container( -// margin: EdgeInsets.only(top: 4, bottom: 25), -// padding: EdgeInsets.all(8), -// width: double.infinity, -// decoration: BoxDecoration( -// color: Colors.white, -// borderRadius: BorderRadius.circular(8), -// ), -// child: _discussionList.length > 0 -// ? ListView.separated( -// padding: EdgeInsets.only(top: 4, bottom: 24), -// shrinkWrap: true, -// physics: NeverScrollableScrollPhysics(), -// itemCount: _discussionList.length, -// separatorBuilder: (context, index) => SizedBox(height: 16), -// itemBuilder: (context, index) { -// return Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// mainAxisSize: MainAxisSize.min, -// children: [ -// Row( -// children: [ -// SvgPicture.asset( -// "assets/icons/chat_user.svg", -// width: 60, -// height: 60, -// ), -// SizedBox(width: 8), -// Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// mainAxisAlignment: MainAxisAlignment.center, -// children: [ -// Text( -// "تعليق على الآية ${_ayatTangheemTypeMappedFirstData.ayatNumberInSurahs}", -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16, color: ColorConsts.primaryBlue, height: 1.5), -// ), -// SizedBox(height: 4), -// Directionality( -// textDirection: TextDirection.ltr, -// child: Text( -// _discussionList[index].date.toFormattedDate(), -// style: TextStyle(fontSize: 12, color: ColorConsts.textGrey, height: 1), -// ), -// ), -// ], -// ) -// ], -// ), -// SizedBox(height: 4), -// Column( -// crossAxisAlignment: CrossAxisAlignment.start, -// children: [ -// Text( -// "تعليق من: " + _discussionList[index].userName, -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14, color: ColorConsts.primaryBlue, height: 1.5), -// ), -// Text( -// _discussionList[index].discussionText, -// style: TextStyle(fontSize: 14, color: ColorConsts.textGrey, height: 1.4), -// ), -// if ((_discussionList[index]?.adminResponse ?? "").isNotEmpty) SizedBox(height: 4), -// if ((_discussionList[index]?.adminResponse ?? "").isNotEmpty) -// Text( -// "رد من المسؤول: " + _discussionList[index].adminResponse, -// style: TextStyle(fontSize: 14, color: ColorConsts.textGrey, height: 1.4), -// ), -// ], -// ) -// ], -// ); -// }, -// ) -// : Text( -// "لا يوجد تعليقات", -// style: TextStyle(fontSize: 12, color: ColorConsts.primaryBlue, height: 1.5), -// ), -// ), -// Positioned( -// bottom: 0, -// child: InkWell( -// borderRadius: BorderRadius.circular(30), -// onTap: () async { -// if (!AppState().isUserLogin) { -// Widget cancelButton = FlatButton( -// child: Text("أرغب بالتسجيل"), -// onPressed: () async { -// Navigator.pop(context); -// await Navigator.pushNamed(context, LoginScreen.routeName); -// if (!AppState().isUserLogin) { -// return; -// } -// }, -// ); -// Widget continueButton = FlatButton( -// child: Text("استمرار كضيف"), -// onPressed: () { -// Navigator.pop(context); -// return; -// }, -// ); -// -// AlertDialog alert = AlertDialog( -// content: Text("هذه الخاصية متاحه فقط للأعضاء المسجلين"), -// actions: [ -// cancelButton, -// continueButton, -// ], -// ); -// -// showDialog( -// context: context, -// builder: (BuildContext context) { -// return alert; -// }, -// ); -// -// return; -// } -// showDialog( -// context: context, -// barrierColor: ColorConsts.secondaryWhite.withOpacity(0.8), -// builder: (BuildContext context) => DiscussionInputDialog(onCommentPress: (comment) { -// sendComment(comment); -// }), -// ); -// }, -// child: Container( -// height: 40, -// padding: EdgeInsets.only(left: 24, right: 24), -// alignment: Alignment.centerRight, -// decoration: BoxDecoration( -// borderRadius: BorderRadius.circular(30), -// color: ColorConsts.gradientPink, -// gradient: LinearGradient( -// stops: [0.0, 0.5], -// begin: Alignment.topCenter, -// end: Alignment.bottomCenter, -// colors: [ColorConsts.gradientPink, ColorConsts.gradientOrange], -// ), -// ), -// child: Text( -// "إضافة تعليق", -// style: TextStyle(fontWeight: FontWeight.bold, fontSize: 14, color: Colors.white, height: 1.5), -// ), -// ), -// ), -// ), -// ], -// ); -// } -// } diff --git a/lib/widgets/button/default_button.dart b/lib/widgets/button/default_button.dart index 77d1c61..d572d0c 100644 --- a/lib/widgets/button/default_button.dart +++ b/lib/widgets/button/default_button.dart @@ -3,10 +3,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; extension WithContainer on Widget { - Widget get insideContainer => Container( - color: Colors.white, - padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), - child: this); + Widget get insideContainer => Container(color: Colors.white, padding: const EdgeInsets.only(top: 16, bottom: 16, right: 21, left: 21), child: this); } class DefaultButton extends StatelessWidget { @@ -23,15 +20,7 @@ class DefaultButton extends StatelessWidget { final List? colors; DefaultButton(this.text, this.onPress, - {this.color, - this.isTextExpanded = true, - this.svgIcon, - this.disabledColor, - this.count = 0, - this.textColor = Colors.white, - this.iconData, - this.fontSize, - this.colors}); + {this.color, this.isTextExpanded = true, this.svgIcon, this.disabledColor, this.count = 0, this.textColor = Colors.white, this.iconData, this.fontSize, this.colors}); @override Widget build(BuildContext context) { @@ -42,8 +31,7 @@ class DefaultButton extends StatelessWidget { decoration: BoxDecoration( borderRadius: BorderRadius.circular(6.0), gradient: onPress == null - ? const LinearGradient( - colors: [Color(0xffEAEAEA), Color(0xffEAEAEA)]) + ? const LinearGradient(colors: [Color(0xffEAEAEA), Color(0xffEAEAEA)]) : LinearGradient( transform: GradientRotation(.83), begin: Alignment.topRight, @@ -58,20 +46,14 @@ class DefaultButton extends StatelessWidget { mainAxisAlignment: MainAxisAlignment.center, children: [ if (iconData != null) Icon(iconData, color: textColor), - if (svgIcon != null) - SvgPicture.asset(svgIcon ?? "", color: textColor), + if (svgIcon != null) SvgPicture.asset(svgIcon ?? "", color: textColor), if (!isTextExpanded) Padding( - padding: EdgeInsets.only( - left: (iconData ?? svgIcon) != null ? 6 : 0), + padding: EdgeInsets.only(left: (iconData ?? svgIcon) != null ? 6 : 0), child: Text( text, textAlign: TextAlign.center, - style: TextStyle( - fontSize: fontSize ?? 16, - fontWeight: FontWeight.w600, - color: textColor, - letterSpacing: -0.48), + style: TextStyle(fontSize: fontSize ?? 16, fontWeight: FontWeight.w600, color: textColor, letterSpacing: -0.48), ), ), if (isTextExpanded) @@ -79,11 +61,7 @@ class DefaultButton extends StatelessWidget { child: Text( text, textAlign: TextAlign.center, - style: TextStyle( - fontSize: fontSize ?? 16, - fontWeight: FontWeight.w600, - color: textColor, - letterSpacing: -0.48), + style: TextStyle(fontSize: fontSize ?? 16, fontWeight: FontWeight.w600, color: textColor, letterSpacing: -0.48), ), ), if (count > 0) @@ -94,17 +72,11 @@ class DefaultButton extends StatelessWidget { padding: const EdgeInsets.only(left: 5, right: 5), alignment: Alignment.center, height: 16, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.0), - color: Colors.white), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(10.0), color: Colors.white), child: Text( "$count", textAlign: TextAlign.center, - style: const TextStyle( - fontSize: 12, - fontWeight: FontWeight.w700, - color: Color(0xffD02127), - letterSpacing: -0.6), + style: const TextStyle(fontSize: 12, fontWeight: FontWeight.w700, color: Color(0xffD02127), letterSpacing: -0.6), ), ), ) diff --git a/lib/widgets/button/simple_button.dart b/lib/widgets/button/simple_button.dart new file mode 100644 index 0000000..eecce21 --- /dev/null +++ b/lib/widgets/button/simple_button.dart @@ -0,0 +1,42 @@ +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; + +class SimpleButton extends StatelessWidget { + final String text; + final VoidCallback? onPress; + final Color textColor; + final Color? color; + final double? fontSize; + final List? colors; + + SimpleButton(this.text, this.onPress, {this.color, this.textColor = Colors.white, this.fontSize, this.colors}); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onPress, + child: Container( + alignment: Alignment.center, + padding: const EdgeInsets.only(left: 12, right: 12, top: 4, bottom: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6.0), + gradient: onPress == null + ? const LinearGradient(colors: [Color(0xffEAEAEA), Color(0xffEAEAEA)]) + : LinearGradient( + transform: const GradientRotation(.83), + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: colors ?? + [ + MyColors.gradiantEndColor, + MyColors.gradiantStartColor, + ]), + ), + child: Text( + text, + style: TextStyle(fontSize: fontSize ?? 16, fontWeight: FontWeight.w600, color: textColor, letterSpacing: -0.48), + ), + ), + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index d38cc5a..a28ba95 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -51,6 +51,7 @@ dependencies: flutter_countdown_timer: ^4.1.0 nfc_manager: ^3.1.1 uuid: ^3.0.6 + file_picker: ^4.6.1 # maps google_maps_flutter: ^2.0.2 From 3e6fdd2cb591f8c16b60e477b1fca4133f587145 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Mon, 13 Jun 2022 10:56:22 +0300 Subject: [PATCH 04/13] missing swipe added. --- assets/langs/ar-SA.json | 5 ++ assets/langs/en-US.json | 5 ++ lib/api/my_attendance_api_client.dart | 35 +++++++++- lib/generated/codegen_loader.g.dart | 18 +++++ lib/generated/locale_keys.g.dart | 13 ++-- lib/models/add_att_success_list_model.dart | 18 +++++ lib/models/add_attachment_list_model.dart | 18 +++++ lib/models/attachment_model.dart | 27 ++++++++ lib/models/generic_response_model.dart | 36 +++++++--- .../start_eit_approval_process_model.dart | 18 +++++ lib/ui/misc/request_submit_screen.dart | 65 +++++++++++++++++-- .../dynamic_screens/dynamic_input_screen.dart | 25 +++---- .../my_attendance/my_attendance_screen.dart | 2 +- 13 files changed, 251 insertions(+), 34 deletions(-) create mode 100644 lib/models/add_att_success_list_model.dart create mode 100644 lib/models/add_attachment_list_model.dart create mode 100644 lib/models/attachment_model.dart create mode 100644 lib/models/start_eit_approval_process_model.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 27f1ab0..84e20d9 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -211,6 +211,11 @@ "workOnBreak": "العمل على استراحة", "next": "التالي", "submit": "ارسال", + "areYouSureYouWantToSubmit": "هل أنت متأكد أنك تريد أن تقدم؟", + "comments": "تعليقات", + "writeComment": "أكتب تعليقا", + "approversList": "قائمة الموافقين", + "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", "profile": { "reset_password": { "label": "Reset Password", diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 498d3e1..f12f294 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -211,6 +211,11 @@ "workOnBreak": "Work On Break", "next": "Next", "submit": "Submit", + "areYouSureYouWantToSubmit": "Are you sure you want to submit?", + "comments": "Comments", + "writeComment": "Write a comment", + "approversList": "Approvers List", + "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", "profile": { "reset_password": { "label": "Reset Password", diff --git a/lib/api/my_attendance_api_client.dart b/lib/api/my_attendance_api_client.dart index 44b91da..60247dc 100644 --- a/lib/api/my_attendance_api_client.dart +++ b/lib/api/my_attendance_api_client.dart @@ -6,6 +6,7 @@ import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_transaction_list_model.dart'; +import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'api_client.dart'; @@ -98,10 +99,13 @@ class MyAttendanceApiClient { "P_MENU_TYPE": "E", "P_DESC_FLEX_CONTEXT_CODE": pDescFlexContextCode, "P_FUNCTION_NAME": pFunctionName, - "EITTransactionTBL": list, - "EITTransactionTBLModel": list, + //"EITTransactionTBL": list, + // "EITTransactionTBLModel": list, }; postParams.addAll(AppState().postParamsJson); + print("postParams:$postParams"); + postParams["EITTransactionTBL"] = list; + postParams["EITTransactionTBLModel"] = list; return await ApiClient().postJsonForObject((json) { GenericResponseModel responseData = GenericResponseModel.fromJson(json); return responseData.submitEITTransactionList!; //ESERVICESDV.fromJson(responseData.getDefaultValueList!.toJson()); @@ -122,4 +126,31 @@ class MyAttendanceApiClient { return responseData.getApprovesList ?? []; }, url, postParams); } + + Future> addAttachment(List> list) async { + String url = "${ApiConsts.erpRest}ADD_ATTACHMENT"; + Map postParams = {"AddAttachmentList": list}; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.getApprovesList ?? []; + }, url, postParams); + } + + Future startEitApprovalProcess(String action, String comments, String itemKey, int transactionId) async { + String url = "${ApiConsts.erpRest}START_EIT_APPROVAL_PROCESS"; + Map postParams = { + "P_SELECTED_RESP_ID": -999, + "P_MENU_TYPE": "E", + "P_ACTION_MODE": action, + "P_COMMENTS": comments, + "P_ITEM_KEY": itemKey, + "P_TRANSACTION_ID": transactionId, + }; + postParams.addAll(AppState().postParamsJson); + return await ApiClient().postJsonForObject((json) { + GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + return responseData.startEitApprovalProcess; + }, url, postParams); + } } diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 7afe58a..ca6b210 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -223,6 +223,15 @@ class CodegenLoader extends AssetLoader{ "requestDetails": "طلب تفاصيل", "approvalLevel": "مستوى الموافقة", "requesterDetails": "تفاصيل مقدم الطلب", + "myAttendance": "حضوري", + "workOnBreak": "العمل على استراحة", + "next": "التالي", + "submit": "ارسال", + "areYouSureYouWantToSubmit": "هل أنت متأكد أنك تريد أن تقدم؟", + "comments": "تعليقات", + "writeComment": "أكتب تعليقا", + "approversList": "قائمة الموافقين", + "yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات", "profile": { "reset_password": { "label": "Reset Password", @@ -465,6 +474,15 @@ static const Map en_US = { "requestDetails": "Request Details", "approvalLevel": "Approval Level", "requesterDetails": "Requester Details", + "myAttendance": "My Attendance", + "workOnBreak": "Work On Break", + "next": "Next", + "submit": "Submit", + "areYouSureYouWantToSubmit": "Are you sure you want to submit?", + "comments": "Comments", + "writeComment": "Write a comment", + "approversList": "Approvers List", + "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", "profile": { "reset_password": { "label": "Reset Password", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index bb7f085..e190f4d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -208,6 +208,15 @@ abstract class LocaleKeys { static const requestDetails = 'requestDetails'; static const approvalLevel = 'approvalLevel'; static const requesterDetails = 'requesterDetails'; + static const myAttendance = 'myAttendance'; + static const workOnBreak = 'workOnBreak'; + static const next = 'next'; + static const submit = 'submit'; + static const areYouSureYouWantToSubmit = 'areYouSureYouWantToSubmit'; + static const comments = 'comments'; + static const writeComment = 'writeComment'; + static const approversList = 'approversList'; + static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; static const profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_password = 'profile.reset_password.password'; @@ -218,9 +227,5 @@ abstract class LocaleKeys { static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; - static const myAttendance = 'myAttendance'; - static const workOnBreak = 'workOnBreak'; - static const next = 'next'; - static const submit = 'submit'; } diff --git a/lib/models/add_att_success_list_model.dart b/lib/models/add_att_success_list_model.dart new file mode 100644 index 0000000..e33fff2 --- /dev/null +++ b/lib/models/add_att_success_list_model.dart @@ -0,0 +1,18 @@ +class AddAttSuccessList { + bool? addSuccess; + int? attachmentID; + + AddAttSuccessList({this.addSuccess, this.attachmentID}); + + AddAttSuccessList.fromJson(Map json) { + addSuccess = json['AddSuccess']; + attachmentID = json['AttachmentID']; + } + + Map toJson() { + final Map data = new Map(); + data['AddSuccess'] = this.addSuccess; + data['AttachmentID'] = this.attachmentID; + return data; + } +} \ No newline at end of file diff --git a/lib/models/add_attachment_list_model.dart b/lib/models/add_attachment_list_model.dart new file mode 100644 index 0000000..e34d80c --- /dev/null +++ b/lib/models/add_attachment_list_model.dart @@ -0,0 +1,18 @@ +class AddAttachmentList { + String? pRETURNMSG; + String? pRETURNSTATUS; + + AddAttachmentList({this.pRETURNMSG, this.pRETURNSTATUS}); + + AddAttachmentList.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} \ No newline at end of file diff --git a/lib/models/attachment_model.dart b/lib/models/attachment_model.dart new file mode 100644 index 0000000..eb51dcf --- /dev/null +++ b/lib/models/attachment_model.dart @@ -0,0 +1,27 @@ +class AttachmentModel { + int? attachmentID; + String? pFILECONTENTTYPE; + String? pFILEDATA; + String? pFILENAME; + int? pTRANSACTIONID; + + AttachmentModel({this.attachmentID, this.pFILECONTENTTYPE, this.pFILEDATA, this.pFILENAME, this.pTRANSACTIONID}); + + AttachmentModel.fromJson(Map json) { + attachmentID = json['AttachmentID']; + pFILECONTENTTYPE = json['P_FILE_CONTENT_TYPE']; + pFILEDATA = json['P_FILE_DATA']; + pFILENAME = json['P_FILE_NAME']; + pTRANSACTIONID = json['P_TRANSACTION_ID']; + } + + Map toJson() { + final Map data = new Map(); + data['AttachmentID'] = this.attachmentID; + data['P_FILE_CONTENT_TYPE'] = this.pFILECONTENTTYPE; + data['P_FILE_DATA'] = this.pFILEDATA; + data['P_FILE_NAME'] = this.pFILENAME; + data['P_TRANSACTION_ID'] = this.pTRANSACTIONID; + return data; + } +} diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index de0404d..2e510a8 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -1,3 +1,5 @@ +import 'package:mohem_flutter_app/models/add_att_success_list_model.dart'; +import 'package:mohem_flutter_app/models/add_attachment_list_model.dart'; import 'package:mohem_flutter_app/models/get_absence_collection_notification_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; @@ -18,6 +20,7 @@ import 'package:mohem_flutter_app/models/get_stamp_ns_notification_body_list_mod import 'package:mohem_flutter_app/models/member_login_list_model.dart'; import 'package:mohem_flutter_app/models/notification_action_model.dart'; import 'package:mohem_flutter_app/models/notification_get_respond_attributes_list_model.dart'; +import 'package:mohem_flutter_app/models/start_eit_approval_process_model.dart'; import 'package:mohem_flutter_app/models/submit_eit_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/subordinates_on_leaves_model.dart'; import 'package:mohem_flutter_app/models/validate_eit_transaction_list_model.dart'; @@ -61,8 +64,8 @@ class GenericResponseModel { String? successMsg; String? successMsgN; String? vidaUpdatedResponse; - String? addAttSuccessList; - String? addAttachmentList; + List? addAttSuccessList; + AddAttachmentList? addAttachmentList; String? bCDomain; String? bCLogo; BasicMemberInformationModel? basicMemberInformation; @@ -246,7 +249,7 @@ class GenericResponseModel { String? startBasicDetApprProcessList; String? startCeiApprovalProcess; String? startContactApprovalProcessList; - String? startEitApprovalProcess; + StartEitApprovalProcess? startEitApprovalProcess; String? startHrApprovalProcessList; String? startPhonesApprovalProcessList; String? startSitApprovalProcess; @@ -567,8 +570,13 @@ class GenericResponseModel { successMsg = json['SuccessMsg']; successMsgN = json['SuccessMsgN']; vidaUpdatedResponse = json['VidaUpdatedResponse']; - addAttSuccessList = json['AddAttSuccessList']; - addAttachmentList = json['AddAttachment_List']; + if (json['AddAttSuccessList'] != null) { + addAttSuccessList = []; + json['AddAttSuccessList'].forEach((v) { + addAttSuccessList!.add(new AddAttSuccessList.fromJson(v)); + }); + } + addAttachmentList = json['AddAttachment_List'] != null ? new AddAttachmentList.fromJson(json['AddAttachment_List']) : null; bCDomain = json['BC_Domain']; bCLogo = json['BC_Logo']; basicMemberInformation = json['BasicMemberInformation'] != null ? new BasicMemberInformationModel.fromJson(json['BasicMemberInformation']) : null; @@ -886,7 +894,8 @@ class GenericResponseModel { startBasicDetApprProcessList = json['StartBasicDetApprProcessList']; startCeiApprovalProcess = json['StartCeiApprovalProcess']; startContactApprovalProcessList = json['StartContactApprovalProcessList']; - startEitApprovalProcess = json['StartEitApprovalProcess']; + + startEitApprovalProcess = json['StartEitApprovalProcess'] != null ? new StartEitApprovalProcess.fromJson(json['StartEitApprovalProcess']) : null; startHrApprovalProcessList = json['StartHrApprovalProcessList']; startPhonesApprovalProcessList = json['StartPhonesApprovalProcessList']; startSitApprovalProcess = json['StartSitApprovalProcess']; @@ -966,8 +975,14 @@ class GenericResponseModel { data['SuccessMsg'] = this.successMsg; data['SuccessMsgN'] = this.successMsgN; data['VidaUpdatedResponse'] = this.vidaUpdatedResponse; - data['AddAttSuccessList'] = this.addAttSuccessList; - data['AddAttachment_List'] = this.addAttachmentList; + + if (this.addAttSuccessList != null) { + data['AddAttSuccessList'] = this.addAttSuccessList!.map((v) => v.toJson()).toList(); + } + if (this.addAttachmentList != null) { + data['AddAttachment_List'] = this.addAttachmentList!.toJson(); + } + data['BC_Domain'] = this.bCDomain; data['BC_Logo'] = this.bCLogo; if (this.basicMemberInformation != null) { @@ -1231,7 +1246,10 @@ class GenericResponseModel { data['StartBasicDetApprProcessList'] = this.startBasicDetApprProcessList; data['StartCeiApprovalProcess'] = this.startCeiApprovalProcess; data['StartContactApprovalProcessList'] = this.startContactApprovalProcessList; - data['StartEitApprovalProcess'] = this.startEitApprovalProcess; + + if (this.startEitApprovalProcess != null) { + data['StartEitApprovalProcess'] = this.startEitApprovalProcess!.toJson(); + } data['StartHrApprovalProcessList'] = this.startHrApprovalProcessList; data['StartPhonesApprovalProcessList'] = this.startPhonesApprovalProcessList; data['StartSitApprovalProcess'] = this.startSitApprovalProcess; diff --git a/lib/models/start_eit_approval_process_model.dart b/lib/models/start_eit_approval_process_model.dart new file mode 100644 index 0000000..f49043b --- /dev/null +++ b/lib/models/start_eit_approval_process_model.dart @@ -0,0 +1,18 @@ +class StartEitApprovalProcess { + String? pRETURNMSG; + String? pRETURNSTATUS; + + StartEitApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS}); + + StartEitApprovalProcess.fromJson(Map json) { + pRETURNMSG = json['P_RETURN_MSG']; + pRETURNSTATUS = json['P_RETURN_STATUS']; + } + + Map toJson() { + final Map data = new Map(); + data['P_RETURN_MSG'] = this.pRETURNMSG; + data['P_RETURN_STATUS'] = this.pRETURNSTATUS; + return data; + } +} \ No newline at end of file diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index c57ce6b..196ee01 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -1,3 +1,4 @@ +import 'dart:convert'; import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; @@ -6,22 +7,26 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.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/attachment_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/simple_button.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; +import 'package:mohem_flutter_app/widgets/dialogs/confirm_dialog.dart'; import 'package:mohem_flutter_app/widgets/input_widget.dart'; class RequestSubmitScreenParams { String title; int transactionId; + String pItemId; - RequestSubmitScreenParams(this.title, this.transactionId); + RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId); } class RequestSubmitScreen extends StatefulWidget { @@ -35,6 +40,7 @@ class RequestSubmitScreen extends StatefulWidget { class _RequestSubmitScreenState extends State { RequestSubmitScreenParams? params; + TextEditingController comments = TextEditingController(); List approverList = []; List attachmentFiles = []; @@ -57,6 +63,44 @@ class _RequestSubmitScreenState extends State { } } + void submitRequest() async { + try { + Utils.showLoading(context); + List> list = []; + if (attachmentFiles.isNotEmpty) { + attachmentFiles.asMap().forEach((index, value) async { + String type = value.path.split('.').last; + String name = value.path.split('/').last; + List fileContent = await value.readAsBytes(); + String encodedFile = base64Encode(fileContent); + list.add(AttachmentModel( + attachmentID: index, + pFILECONTENTTYPE: type, + pFILENAME: name, + pFILEDATA: encodedFile, + pTRANSACTIONID: params!.transactionId, + ).toJson()); + }); + } + await MyAttendanceApiClient().addAttachment(list); + await MyAttendanceApiClient().startEitApprovalProcess( + "SUBMIT", + comments.text, + params!.pItemId, + params!.transactionId, + ); + Utils.hideLoading(context); + Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr()); + Navigator.of(context).popUntil((route) { + return route.settings.name == AppRoutes.dashboard; + }); + Navigator.pushNamed(context, AppRoutes.workList); + } catch (ex) { + Utils.hideLoading(context); + Utils.handleException(ex, context, null); + } + } + @override void dispose() { super.dispose(); @@ -83,9 +127,9 @@ class _RequestSubmitScreenState extends State { attachmentView("Attachments"), 14.height, InputWidget( - "Comments", - "Write a comment", - TextEditingController(), + LocaleKeys.comments.tr(), + LocaleKeys.writeComment.tr(), + comments, isBackgroundEnable: true, lines: 3, onChange: (String note) { @@ -93,7 +137,7 @@ class _RequestSubmitScreenState extends State { }, ), //.objectContainerView(title: "Comments"), 14.height, - "Approvers List".toSectionHeading(), + LocaleKeys.approversList.tr().toSectionHeading(), 14.height, ListView.separated( shrinkWrap: true, @@ -109,7 +153,16 @@ class _RequestSubmitScreenState extends State { DefaultButton( LocaleKeys.submit.tr(), () { - //Navigator.of(context).pushNamed(LOGIN_TYPE) + showDialog( + context: context, + builder: (cxt) => ConfirmDialog( + message: LocaleKeys.areYouSureYouWantToSubmit.tr(), + onTap: () { + Navigator.pop(context); + submitRequest(); + }, + ), + ); }, ).insideContainer, ], diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart index bdbc1d6..f855c67 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -67,30 +67,32 @@ class _DynamicInputScreenState extends State { tempVar = DateFormat('yyyy/MM/dd HH:mm:ss').format(date); } } - return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: tempVar).toJson(); + return ValidateEitTransactionModel(dATEVALUE: null, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: tempVar.toString()).toJson(); }).toList(); + + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: "NEW_ROW").toJson()); + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); + values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: null).toJson()); values.forEach((element) { print(element); }); - - values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: "NEW_ROW").toJson()); - values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_EXTRA_INFO_ID", nUMBERVALUE: -1, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: null).toJson()); - values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_OBJECT_VERSION_NUMBER", nUMBERVALUE: 0, tRANSACTIONNUMBER: 2, vARCHAR2VALUE: null).toJson()); - - genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(genericResponseModel!.pDESCFLEXCONTEXTCODE!, dynamicParams!.dynamicId, values); - SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(genericResponseModel!.pDESCFLEXCONTEXTCODE!, dynamicParams!.dynamicId, values); + genericResponseModel = await MyAttendanceApiClient().validateEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); + SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values); Utils.hideLoading(context); - Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", submitEITTransactionList.pTRANSACTIONID!)); + Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!)); } catch (ex) { Utils.hideLoading(context); Utils.handleException(ex, context, null); } } + String dESCFLEXCONTEXTCODE = ""; + void calGetValueSetValues(GetEITDFFStructureList structureList) async { try { Utils.showLoading(context); String segmentId = structureList.cHILDSEGMENTSVS!; + dESCFLEXCONTEXTCODE = structureList.dESCFLEXCONTEXTCODE!; List filteredList = getEitDffStructureList?.where((element) => element.cHILDSEGMENTSVS == segmentId).toList() ?? []; List> values = filteredList @@ -269,9 +271,8 @@ class _DynamicInputScreenState extends State { //DateTime.parse(getEitDffStructureList![index].eSERVICESDV!.pVALUECOLUMNNAME!); } TimeOfDay _time = await _selectTime(context); - // TimeOfDay.fromDateTime(time) - - String time = DateFormat('HH:mm').format(DateFormat("hh:mm a").parse(_time.format(context))).trim(); + DateTime tempTime = DateTime(0, 1, 1, _time.hour, _time.minute); + String time = DateFormat('HH:mm').format(tempTime).trim(); // DateTime date1 = DateTime(date.year, date.month, date.day); // getEitDffStructureList![index].fieldAnswer = date.toString(); diff --git a/lib/ui/my_attendance/my_attendance_screen.dart b/lib/ui/my_attendance/my_attendance_screen.dart index e00a5c6..8e6ab0c 100644 --- a/lib/ui/my_attendance/my_attendance_screen.dart +++ b/lib/ui/my_attendance/my_attendance_screen.dart @@ -45,7 +45,7 @@ class MyAttendanceScreen extends StatelessWidget { "assets/images/pdf.svg", LocaleKeys.workOnBreak.tr(), ).onPress(() { - Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", 8724807)); + // Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, arguments: RequestSubmitScreenParams("title", 8724807)); }), ], ).paddingAll(21)), From a03eb8b11a4d4120c7020311da0ba582a124c86f Mon Sep 17 00:00:00 2001 From: devmirza121 Date: Mon, 13 Jun 2022 14:20:52 +0300 Subject: [PATCH 05/13] Worklist (ITG sikp, Delegats and HR multiple requests) --- android/app/src/main/AndroidManifest.xml | 31 +- .../main/res/xml/network_security_config.xml | 8 + assets/langs/ar-SA.json | 2 +- assets/langs/en-US.json | 1 + lib/api/worklist/worklist_api_client.dart | 182 ++++++- lib/classes/colors.dart | 1 - lib/classes/consts.dart | 4 +- lib/extensions/string_extensions.dart | 3 +- lib/generated/codegen_loader.g.dart | 8 + lib/generated/locale_keys.g.dart | 139 +++++ lib/models/generic_response_model.dart | 31 +- ...llection_notification_body_list_model.dart | 12 +- .../get_favorite_replacements_model.dart | 37 ++ .../hr/eit_otification_body_model.dart | 91 ++++ ...nce_collection_notification_body_list.dart | 87 ++++ .../get_basic_det_ntf_body_list_model.dart | 0 ..._contact_notification_body_list_model.dart | 44 ++ ...t_phones_notification_body_list_model.dart | 27 + .../worklist/replacement_list_model.dart | 57 ++ lib/ui/landing/widget/menus_widget.dart | 8 +- lib/ui/login/login_screen.dart | 2 + lib/ui/work_list/itg_detail_screen.dart | 17 +- lib/ui/work_list/sheets/delegate_sheet.dart | 491 +++++++++++++++--- .../sheets/search_options_sheet.dart | 65 +++ .../work_list/sheets/selected_item_sheet.dart | 84 +-- lib/ui/work_list/work_list_screen.dart | 69 +-- lib/ui/work_list/worklist_detail_screen.dart | 49 +- .../worklist_fragments/actions_fragment.dart | 5 +- .../attachments_fragment.dart | 21 +- .../worklist_fragments/info_fragments.dart | 124 ++++- lib/widgets/input_widget.dart | 25 +- lib/widgets/radio/show_radio.dart | 11 +- pubspec.yaml | 3 + 33 files changed, 1480 insertions(+), 259 deletions(-) create mode 100644 android/app/src/main/res/xml/network_security_config.xml create mode 100644 lib/models/worklist/get_favorite_replacements_model.dart create mode 100644 lib/models/worklist/hr/eit_otification_body_model.dart create mode 100644 lib/models/worklist/hr/get_absence_collection_notification_body_list.dart rename lib/models/{ => worklist/hr}/get_basic_det_ntf_body_list_model.dart (100%) create mode 100644 lib/models/worklist/hr/get_contact_notification_body_list_model.dart create mode 100644 lib/models/worklist/hr/get_phones_notification_body_list_model.dart create mode 100644 lib/models/worklist/replacement_list_model.dart create mode 100644 lib/ui/work_list/sheets/search_options_sheet.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7be27d5..0ddf1eb 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,40 +1,41 @@ - - + + + - - + + + android:networkSecurityConfig="@xml/network_security_config"> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> + android:name="io.flutter.embedding.android.SplashScreenDrawable" + android:resource="@drawable/launch_background" /> - - + + {8O@cedZOr%0lMHqYmQ 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967d9697cd4b83225558af2911e9571c9b..b1f58f0002a1c673815250eb726e609f9a095f8f 100644 GIT binary patch delta 1729 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 delta 1572 zcmV+<2HW|D8MF+LBYy?^Nklc)UfJ<2uenUn3ARN>mf|M z+(eagCX~wv_9N9Br6dE4W@{R1X8yU75JVAXqB_2?1W&7xoYHg zkR5NEVWsUG^?wLzRHH9Aa#eCDK9NvdPE(De9-HaQc(6~^lpTe2pm3&x9G1K5Xawdi z4F*DRWI%>vgEBPFqaRR51|&E>B!fiay027YsK+Vrn=1PqDKdi{m<&P1nQ3_Gw<%cH zHU+slT8moWCbIKH=(W3t1j5BNfsIKQ#Mzi(J59kx zT!xVJ&SKqb4XjdxWQV7$IrZ-{l-x3`7M}qzHsPzP1S_$c=96h(q%b9ZXPvcV z;D5oPsau6Q(U`-YLD*G41z_cgz)a99av0W_U=aHAj?mj@2KZI50efIA zO8^kn_?FjaZ_hfbhSh@3^GzxJx*P{Jc7Hi*OHPZ!wvEV2a9XKq###zPPeRs75i0(W zU?doBGb9yqT58~qn?wQ4oCi3oWdc^W%JAgTVR)*l33@Ky3ip4Rqz14Wx_gwsGYGq) zMY~B;*z8j>WF8xV`^#!USYHDVZf}I{OZGzBnutHA1D(}!4{};5>;)mO27l7F zHh@r23lDAk8oF(C+P0rsBpv85EP>4CVMx#04MOfG;P%vktHcXwTj~+IE(~px)3*MY z77e}p#|c>TD?sMatC0Tu4iKKJ0(X8jxQY*gYtxsC(zYC$g|@+I+kY;dg_dE>scBf& zbP1Nc@Hz<3R)V`=AGkc;8CXqdi+`PV3Vc;#lxQO~AoO*}pfE+=*r3ffZ_YMC zflq>i%a-`Xw)YRuK;MUtq{SGa7vtY^gg0bKSp&F>y|A>h5qhqSvgdtV{(lh0c$xz5 z;*U?KQl%W)htLmD=yhL!@aldLHW(=H00^&qu7J0mA5v0IaX@pn_bKobsC(e>(nAjI zzjyto3Dmc!oOxjlw&JZqeL%+vsN0Zy8@1@rs~rRNAqO?umG&QV WYK#ibz}*4>00007mASaV2SX1c4o{{O13?rI6cP*s)VL`25M!+$lyc~u>=N$Q8X;hdWl zC`n92#+*!&8S2ygsVXLIVUqot)I%Ox44MU@pzRupN3hq|HOq%nM-WZBPB z7ejHA8~!0cN&Sa_n&HofEJ`DiHBNqq|L?8dNkUmiV$wGDF^Xcvj@cZ0WG2sDa?#k_ zKr#Anbq@G#{eN#FAM#OsnTyp0%)5l9gNg`Y?Ahz}2#leU&y5^*!;p5r&wR0nGXqE7 z$F%!BL?CAa{%vh?f9(;_C)SvS%2^67Hx{u;f&q9{p6%@O!^7wN{(2MtHi~W(@$0K~ z?ml_UUbj0UvT=C8&#V9Npt(jEM;K#3EQ-V6m@Gk6eSddOhtdsW?!9Po_vuS+oU3xZ zQD?r8Pun@A(r}YBes**IAx#@XeLaiG0MRT7$s4 zv7kg`I=$UE=GpEM8|{ccUhi`MWs{qWXW3|XSl{om+v)Ms>MFHTk)_H>*7x?=I_lwd zi@%y{e1EaH!u4~P0SK(ch?%Mfd+XM%J4q%{th_l2X@{O>yTijb+pO>J(}^PT&e4xO z&vtiM-Q8xVbBG`~>)1YO^P=^J=HWIuE1W8o$-7`OrUB^f+qdr|(;HafV)XJb%xZ=P$C~>#^3_VY9tQtRa_b4a)iA zRFR6v;KEOaZbYaS0BSJMV8mcdK%|ylY>CvOntp*y z6@OCFNCZR-k+-ONB5&Si!T^@g8$u6?fGUC^*1>$_2L!X)ok@m0YR-Ta!`Zn4feq+; zI{;NEILoPG39pVYw!|uk7)}<7c~H0DYefirU@zP)mpMtKe=N+}4YZllq@_WS+!_B5|b=oMASS;4$z zAA2SA9%lq+%qX4lutJR)*&Yiz`Fb1fF&X@j%CYfGa08iqh^6&lGfTN( zl4;tb?YM_q5-d$W6=@plNt>(-B}>N7zfAYjH1Jtu)-|d9G|BA$kg-U!fYRPdS$4C^ Ye_@S7mQ({%+yDRo07*qoM6N<$g7v#5W&i*H delta 1004 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 delta 1906 zcmV-&2aWipC4di*BYy`+Nkl^fDmF(5(5$|?Cx}D zKEJa&XZP%OyE`*GvvYQ4PV&!g2|L^Q?YG}tx;sY@GzV#^0C$Z`m}blr)&(OPMHT6T@%AxHOWYGG zm>@=0?<)?0r0XK9>leRXyD^j4O4bXT!@LESVI<~>`yB+S2b_f__vvyMHkwGyyXedq3usx&X*}E{O;}+nJ#G_xm zJbQX5 zuFrVK*|x9RQeZ1J@1v9MX;>n34(i>=YE@Iur`0Vah(inE3VUFZNqf~ ztSz{1fz3Fsn_x4F>o(Yo;kpqvBe-sbwH(*Yuz!}~S^-;|MX;9Py1im8!}VY-!u4P+ z!nLEvx?+Rogo+Kw9OBXy&lGIvJ51_7Hl6Q>*MAJa!lMDGGML530`Te&0ciU({DC7` z;RKg{uC>($*mdXnVQQBjiVyqYC7mf!Z%e-Q!?Oo{ufu`G3CAC=UjiTpU<94UTFz2KEDuNS@KKkg)K8!v1L8RUP$_! z({LG$Dy&JLEVpiNVe^G(HCbA*SpsX?292)#=JVQDUMp-cOJPl`+yTHTD!AOit-zAD zptXYa!q%OVLa^mo25b7^Z>kE`3rqgr-G4i;Lw<+P(8khESW8aaBmxfY`WS#6j<92Q z-++&Y z$gbH4#2sT0cU0SdFs=*W*4hKGpuR1QGacHFy;`# zR&NJkbTNp}Ee5f08HmLzK%D(q3@lH;Tzx$?VT;&xJq-KyHV__o3dD)?KrE<6*iXV0 z8;6<{IKw@dyDwJ90H5^3h;|9?twz{UGr|>1Pzhdn6W(r0ifeZd=JI+AAz<~yL(QJk zAWW))+=`8mGj|J!70oF@d4B;WxB=jBM1bWWRBb&1!ie3BUzOdm}yC-xA%SY``k$rbfk;CHqifhU*jfGM@DkYCec zD9&E@F9*za0?~OQZiDE|Cf;;0 z`uZ%H=IeGyG^H0ruev{yIVARgwZUG)j7>F#3~dh+8DOtPByR=(VDhz2enf#EjcXCI z=NUPYr4@S)GhX!?s(0Eh(nGe!y$#$r1B$||I~`wPhUuCQEo;#Xb$EXk=6HgBBRd#c ziK|jN$e~{zV~|;*E@Ij-Z(+tI^B8RW51ptE!nMnPyZ`_I07*qoM6N<$g4KwOA^-pY diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967d9697cd4b83225558af2911e9571c9b..b1f58f0002a1c673815250eb726e609f9a095f8f 100644 GIT binary patch delta 1729 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 delta 2657 zcmV-n3ZC`XL+KQdBYz4oNkloFh3q0M zFesq&64WThn3$;G69TfjsAv=f2G9}pgSx99+!YO}2Uveik)GA5ewEg1Va|1@=x;Pyj3t}zC)T-c zzoz+u9TyK|)jteh(` z;D6}gLagCR0hn*76kN#wCv*`b8GyswI1s7kNaT!{fEXv;5ofK|nu3vU_1cRKLBd@TQ@Ei6F6QJ?HM!O!+{x(L<6rNAv)=55QOzlPWhqI{ zjSR5c$#aW1xy}c;$06La(Y*xlX>0w3EDGGn02k}7*%ZplRLFsw%E3MJO@BuPkU#Ja zcbp(_BL!RxGHHe;wff^+2G>u>ah(dq7O)#K0ekx={yBF*$P%aJSOMmjHHmAxvW0cp zt8@K;ETVH`1(=8Ie(Z;Hy+9V#xv>Mxz*+%0w;aeKJ2#eqVJL7nrpksp7|5bKS2)0a zId?FSYb0>4P=MLsl6(J^Q-5;@54jg=+fq2sO~Hz-hVXEO0L<$0j+BKdGX;Npqt{os zJmk~Y_Q1L83|RfW)5G^!;(u>i7{EI*HIqAp9`Cbzna*hHhI2Lm9I{{?%y{Hgdzxli z7Fd?00Ed;L$qk&zI`y$@{Dn;5j(iW`=!aXNV*G=kjb8%Qi`UtJMSq7ZT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah-w13P)xT`>~eFoJC!>{2X zL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw>F+gN+i+VD?gMXwcIhn8 zrz`>e>J^TI3E-MW>VM=sWZual)ns9B%8_$25BcpOz+KP;+J(1(UiAp*Q=dc!FQL}*R43bTaVm7wy#IrC-VD&k-4FWYMd;wg6!1z8a3SP;O>P#-$->_l zEAM2>hI~v3$Y(TlIdJE^0@|6AK_7#uc{~E1^f2gGJ^}i)rGJ>FDPRt4F~}m-WGQZK zw?8N6;NJH#XeW;Webf!0kG=!+v2#G5xX^L14Y#o*Tz9&z7NjOib92f(6aq==Ntoo74a!u6w~r!$mq|FDi7h6+6fTa4$$0Y>@Y*O}J#< z8ic&ucAQ^e_cw)#3uFTLcly|p7IMmPAXha6205mSA%EQja0eR?DV=N%;eS$2zHI*MpiObUuA|j7`m5?j`@^G6SO!-;(G1aCOu{sGli$ zGck~Eqx{gt?U$`9P3JRJO>}Ku- zRew#6AKb$jGi@lro`A;#P%m@cnyJP&(r%f}Zq^V3mIc=hnLfVXHRn=pj;2#4v8WiM zav|%So5|ksmkM-bV7H;F_%f>b72G`eFJ!d@wTC-#ALO^GRCtHl=K|Y}dX%fTm0A$N zzc4;N3AGsYM~OOND&T_#%8wZzWYfL@by`|620=mAU7(LZ-At!cdlWCvu@AK#bt~#< z9;~k^d5}}7VXmK@h?&@_rUHYJ9zD=M%4AFQ`}k8OC$9ssPq=LnkwKG P00000NkvXXu0mjf=(`%i diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609df07bf62e5100a53a01510388bd2b22..4476421062c023508300eaacfdea5836d403fbbc 100644 GIT binary patch literal 8663 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 delta 2657 zcmV-n3ZC`XL+KQdBYz4oNkloFh3q0M zFesq&64WThn3$;G69TfjsAv=f2G9}pgSx99+!YO}2Uveik)GA5ewEg1Va|1@=x;Pyj3t}zC)T-c zzoz+u9TyK|)jteh(` z;D6}gLagCR0hn*76kN#wCv*`b8GyswI1s7kNaT!{fEXv;5ofK|nu3vU_1cRKLBd@TQ@Ei6F6QJ?HM!O!+{x(L<6rNAv)=55QOzlPWhqI{ zjSR5c$#aW1xy}c;$06La(Y*xlX>0w3EDGGn02k}7*%ZplRLFsw%E3MJO@BuPkU#Ja zcbp(_BL!RxGHHe;wff^+2G>u>ah(dq7O)#K0ekx={yBF*$P%aJSOMmjHHmAxvW0cp zt8@K;ETVH`1(=8Ie(Z;Hy+9V#xv>Mxz*+%0w;aeKJ2#eqVJL7nrpksp7|5bKS2)0a zId?FSYb0>4P=MLsl6(J^Q-5;@54jg=+fq2sO~Hz-hVXEO0L<$0j+BKdGX;Npqt{os zJmk~Y_Q1L83|RfW)5G^!;(u>i7{EI*HIqAp9`Cbzna*hHhI2Lm9I{{?%y{Hgdzxli z7Fd?00Ed;L$qk&zI`y$@{Dn;5j(iW`=!aXNV*G=kjb8%Qi`UtJMSq7ZT$4qCb{TaXHjb$QA{y0EYy*+b1XI;6Ah-w13P)xT`>~eFoJC!>{2X zL(a_#upp3gaR1#5+L(Jmzp4TBnx{~WHedpJ1ch8JFk~Sw>F+gN+i+VD?gMXwcIhn8 zrz`>e>J^TI3E-MW>VM=sWZual)ns9B%8_$25BcpOz+KP;+J(1(UiAp*Q=dc!FQL}*R43bTaVm7wy#IrC-VD&k-4FWYMd;wg6!1z8a3SP;O>P#-$->_l zEAM2>hI~v3$Y(TlIdJE^0@|6AK_7#uc{~E1^f2gGJ^}i)rGJ>FDPRt4F~}m-WGQZK zw?8N6;NJH#XeW;Webf!0kG=!+v2#G5xX^L14Y#o*Tz9&z7NjOib92f(6aq==Ntoo74a!u6w~r!$mq|FDi7h6+6fTa4$$0Y>@Y*O}J#< z8ic&ucAQ^e_cw)#3uFTLcly|p7IMmPAXha6205mSA%EQja0eR?DV=N%;eS$2zHI*MpiObUuA|j7`m5?j`@^G6SO!-;(G1aCOu{sGli$ zGck~Eqx{gt?U$`9P3JRJO>}Ku- zRew#6AKb$jGi@lro`A;#P%m@cnyJP&(r%f}Zq^V3mIc=hnLfVXHRn=pj;2#4v8WiM zav|%So5|ksmkM-bV7H;F_%f>b72G`eFJ!d@wTC-#ALO^GRCtHl=K|Y}dX%fTm0A$N zzc4;N3AGsYM~OOND&T_#%8wZzWYfL@by`|620=mAU7(LZ-At!cdlWCvu@AK#bt~#< z9;~k^d5}}7VXmK@h?&@_rUHYJ9zD=M%4AFQ`}k8OC$9ssPq=LnkwKG P00000NkvXXu0mjf=(`%i diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a5a98e212cca15ea7bf2ab5de5108680..addf702c4eaed01909c7a9ce2f14c8180aa1a684 100644 GIT binary patch literal 14340 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 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39da7941ef3f6dcb7f06a192d8dcb308d..74bfa80fc3b480ea73547737b3b0b41224b16290 100644 GIT binary patch literal 4393 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 VDiT%YA$0%%002ovPDHLkV1gAI!|nh8 literal 3612 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 OTnkgnQ$@y3G5-gVLIjHd literal 0 HcmV?d00001 From 7be1bdcdc203cede471b1bc4a511c1cb880569dc Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Sun, 19 Jun 2022 12:02:14 +0300 Subject: [PATCH 10/13] fix family member --- lib/api/profile_api_client.dart | 1 + lib/config/routes.dart | 3 + lib/ui/profile/contact_details.dart | 2 +- lib/ui/profile/delete_familyMember.dart | 74 +++++++++++++++++ .../dynamic_input_familyMembers_screen.dart | 83 +++++++++++++++++++ .../dynamic_input_profile_screen.dart | 2 + lib/ui/profile/family_members.dart | 52 ++++++++++-- 7 files changed, 210 insertions(+), 7 deletions(-) create mode 100644 lib/ui/profile/delete_familyMember.dart create mode 100644 lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart diff --git a/lib/api/profile_api_client.dart b/lib/api/profile_api_client.dart index 3e254b4..ec79fd7 100644 --- a/lib/api/profile_api_client.dart +++ b/lib/api/profile_api_client.dart @@ -27,6 +27,7 @@ class ProfileApiClient { postParams.addAll(AppState().postParamsJson); return await ApiClient().postJsonForObject((json) { GenericResponseModel? responseData = GenericResponseModel.fromJson(json); + print(responseData); return responseData.getEmployeeContactsList ?? []; }, url, postParams); } diff --git a/lib/config/routes.dart b/lib/config/routes.dart index e377b8a..75f4293 100644 --- a/lib/config/routes.dart +++ b/lib/config/routes.dart @@ -8,6 +8,7 @@ import 'package:mohem_flutter_app/ui/login/verify_last_login_screen.dart'; import 'package:mohem_flutter_app/ui/login/verify_login_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart'; import 'package:mohem_flutter_app/ui/my_attendance/my_attendance_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/delete_familyMember.dart'; import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; // import 'package:mohem_flutter_app/ui/my_attendance/work_from_home_screen.dart'; import 'package:mohem_flutter_app/ui/screens/eit/add_eit.dart'; @@ -69,6 +70,7 @@ class AppRoutes { static const String basicDetails = "/basicDetails"; static const String contactDetails = "/contactDetails"; static const String familyMembers = "/familyMembers"; + static const String deleteFamilyMember = "/deleteFamilyMember"; static final Map routes = { login: (context) => LoginScreen(), @@ -110,5 +112,6 @@ class AppRoutes { dynamicScreen: (context) => DynamicListViewScreen(), addDynamicInput: (context) => DynamicInputScreen(), addDynamicInputProfile: (context) => DynamicInputScreenProfile(), + deleteFamilyMember: (context) => DeleteFamilyMember(), }; } diff --git a/lib/ui/profile/contact_details.dart b/lib/ui/profile/contact_details.dart index c387047..a67283d 100644 --- a/lib/ui/profile/contact_details.dart +++ b/lib/ui/profile/contact_details.dart @@ -210,7 +210,7 @@ class _ContactDetailsState extends State { //]), //), //], - ])); + ]))); } footer() { diff --git a/lib/ui/profile/delete_familyMember.dart b/lib/ui/profile/delete_familyMember.dart new file mode 100644 index 0000000..4876ef3 --- /dev/null +++ b/lib/ui/profile/delete_familyMember.dart @@ -0,0 +1,74 @@ + + +import 'package:easy_localization/src/public_ext.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/colors.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; +import 'package:mohem_flutter_app/dialogs/otp_dialog.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.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/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/profile.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; + +class DeleteFamilyMember extends StatefulWidget { + const DeleteFamilyMember({Key? key}) : super(key: key); + + @override + _DeleteFamilyMemberState createState() => _DeleteFamilyMemberState(); +} + +class _DeleteFamilyMemberState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarWidget( + context, + title: "Dependents And Beneficiaries", + ), + backgroundColor: MyColors.backgroundColor, + bottomSheet: footer(), + body:Column( + children: [ + + ], + ) + + ); + } + footer() { + return Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + color: MyColors.gradiantEndColor, + // margin: EdgeInsets.only(left: 50,right: 20), + padding: EdgeInsets.only(left: 50,right: 50), + child: TextButton( + style: TextButton.styleFrom( + primary:MyColors.white, + onSurface: MyColors.white, + backgroundColor: MyColors.gradiantEndColor, + ), + onPressed: (){}, + child: Text('Next', + style: TextStyle( + fontStyle: FontStyle.normal, + fontSize: 16, + color: Colors.white, + fontWeight: FontWeight.w600 + ),), + ) + ), + ], + ); + } +} diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart new file mode 100644 index 0000000..0fa6845 --- /dev/null +++ b/lib/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart @@ -0,0 +1,83 @@ + +import 'dart:io'; + + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; +import 'package:mohem_flutter_app/api/profile_api_client.dart'; +import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/extensions/int_extensions.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/dyanmic_forms/get_set_values_request_model.dart'; +import 'package:mohem_flutter_app/models/generic_response_model.dart'; +import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; +import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; +import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; +import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; +import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; +import 'package:mohem_flutter_app/widgets/button/default_button.dart'; +import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; + +class DynamicFamilyMembersParams { + String title; + //String dynamicId; + // String uRL; + // String requestID; + // String colsURL; + List? getEmployeeContactsList; + + DynamicFamilyMembersParams(this.title, + {this.getEmployeeContactsList = const []}); +} + +class DynamicFamilyMembersScreen extends StatefulWidget { + DynamicFamilyMembersScreen({Key? key}) : super(key: key); + + @override + _DynamicFamilyMembersScreenState createState() { + return _DynamicFamilyMembersScreenState(); + } +} + +class _DynamicFamilyMembersScreenState extends State { + // GenericResponseModel? genericResponseModel; + DynamicFamilyMembersParams? dynamicFamilyParams; + + @override + void initState() { + super.initState(); + } + + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + if(dynamicFamilyParams == null) { + dynamicFamilyParams = ModalRoute.of(context)!.settings.arguments as DynamicFamilyMembersParams; + } + return Scaffold( + backgroundColor: Colors.white, + appBar: AppBarWidget( + context, + title: dynamicFamilyParams!.title, + ), + body: Column( + children: [ + + ], + ), + ); + } + + +} diff --git a/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart b/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart index 6e054c9..3e25917 100644 --- a/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart +++ b/lib/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart @@ -15,6 +15,7 @@ import 'package:mohem_flutter_app/models/dyanmic_forms/get_set_values_request_mo import 'package:mohem_flutter_app/models/generic_response_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; import 'package:mohem_flutter_app/models/get_employee_basic_details.model.dart'; +import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_cols_structions.dart'; import 'package:mohem_flutter_app/models/profile/basic_details_dff_structure.dart'; import 'package:mohem_flutter_app/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart'; @@ -30,6 +31,7 @@ class DynamicProfileParams { String colsURL; List? getEmployeeBasicDetailsList; + DynamicProfileParams(this.title, this.dynamicId, {this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.getEmployeeBasicDetailsList = const []}); } diff --git a/lib/ui/profile/family_members.dart b/lib/ui/profile/family_members.dart index 6f50c51..bcc5b32 100644 --- a/lib/ui/profile/family_members.dart +++ b/lib/ui/profile/family_members.dart @@ -8,6 +8,7 @@ import 'package:flutter/material.dart'; import 'package:mohem_flutter_app/api/profile_api_client.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; import 'package:mohem_flutter_app/classes/utils.dart'; +import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/dialogs/otp_dialog.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/string_extensions.dart'; @@ -15,6 +16,8 @@ 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/get_employee_basic_details.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_familyMembers_screen.dart'; +import 'package:mohem_flutter_app/ui/profile/dynamic_screens/dynamic_input_profile_screen.dart'; import 'package:mohem_flutter_app/ui/profile/profile.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart'; @@ -30,7 +33,7 @@ class _FamilyMembersState extends State { List getEmployeeContactsList = []; - + int? relationId; @override void initState() { super.initState(); @@ -111,7 +114,7 @@ class _FamilyMembersState extends State { Container( child: InkWell( onTap: () { - + showUpdateAlertDialog(context); }, child: RichText( text: TextSpan( @@ -148,7 +151,7 @@ class _FamilyMembersState extends State { Container( child: InkWell( onTap: () { - showAlertDialog(context); + showRemoveAlertDialog(context, getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt()); }, child: RichText( text: TextSpan( @@ -214,14 +217,42 @@ class _FamilyMembersState extends State { BoxShadow(color: MyColors.lightGreyEFColor, spreadRadius: 3), ], ), - child: DefaultButton(LocaleKeys.update.tr(), () async { + child: DefaultButton("Add New Family Member", () async { // context.setLocale(const Locale("en", "US")); // to change Loacle Profile(); }).insideContainer, ); } - showAlertDialog(BuildContext context) { + showUpdateAlertDialog(BuildContext context) { + Widget cancelButton = TextButton( + child: Text(LocaleKeys.cancel.tr(),), + onPressed: () { + Navigator.pop(context); + }, + ); + Widget continueButton = TextButton( + child: Text(LocaleKeys.ok.tr(),), + onPressed: () { + continueDynamicForms(); + }, + ); + AlertDialog alert = AlertDialog( + title: Text(LocaleKeys.confirm.tr(),), + content: Text("Are You Sure You Want to Update this Member?"), + actions: [ + cancelButton, + continueButton, + ], + ); + showDialog( + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } + showRemoveAlertDialog(BuildContext context,int relationId) { Widget cancelButton = TextButton( child: Text(LocaleKeys.cancel.tr(),), onPressed: () { @@ -230,7 +261,10 @@ class _FamilyMembersState extends State { ); Widget continueButton = TextButton( child: Text(LocaleKeys.ok.tr(),), - onPressed: () {}, + onPressed: () { + Navigator.pushNamed(context, AppRoutes.deleteFamilyMember); + // continueDynamicForms(); + }, ); AlertDialog alert = AlertDialog( title: Text(LocaleKeys.confirm.tr(),), @@ -248,4 +282,10 @@ class _FamilyMembersState extends State { ); } + + void continueDynamicForms() { + Navigator.pushNamed(context, AppRoutes.addDynamicInputProfile, + arguments: DynamicFamilyMembersParams(LocaleKeys.profile_familyDetails.tr(), getEmployeeContactsList: getEmployeeContactsList)); + } + } From 15cfc0b9f4dad761ff0318be4b5a67efd35d2be6 Mon Sep 17 00:00:00 2001 From: Fatimah Alshammari Date: Sun, 19 Jun 2022 12:24:41 +0300 Subject: [PATCH 11/13] merge conflict fixed --- lib/extensions/string_extensions.dart | 5 +++- lib/generated/codegen_loader.g.dart | 35 ++++++++++++++++++++++----- lib/generated/locale_keys.g.dart | 1 + 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 6dab1da..b6cb2dd 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -64,7 +64,10 @@ extension EmailValidator on String { this, style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); - + Widget toText20({Color? color, bool isBold = false}) => Text( + this, + style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), + ); Widget toText22({Color? color, bool isBold = false}) => Text( this, style: TextStyle(height: 1, color: color ?? MyColors.darkTextColor, fontSize: 22, letterSpacing: -1.44, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), diff --git a/lib/generated/codegen_loader.g.dart b/lib/generated/codegen_loader.g.dart index 365e775..c5ea1c4 100644 --- a/lib/generated/codegen_loader.g.dart +++ b/lib/generated/codegen_loader.g.dart @@ -211,9 +211,6 @@ class CodegenLoader extends AssetLoader{ "rfqUOM": "RFQ UOM", "rfqQty": "RFQ الكمية", "rfqNumber": "رقم RFQ", - "msg": "Hello {} in the {} world ", - "msg_named": "{} are written in the {lang} language", - "clickMe": "Click me", "human": "بشري", "resources": "موارد", "details": "تفاصيل", @@ -250,12 +247,32 @@ class CodegenLoader extends AssetLoader{ "myAttendance": "حضوري", "workOnBreak": "التعويض عن العمل اثناءالاستراحه", "next": "التالي", + "mobile": "التليفون المحمول", + "completingYear": "نحن نقدر لك لاستكمال خدمة", + "year": "سنة", + "month": "شهر", + "day": "يوم", + "address": "العنوان", + "phoneNumber": "رقم الجوال", + "businessGroup": "مجموعة العمل", + "Payroll": "الراتب", + "civilIdentityNumber": "رقم الهويه", + "dateOfBirth": "تاريخ الميلاد", + "maritalStatus ": "الحالة الاجتماعية", + "fullName": "الأسم الكامل", + "remove": "حذف", "profile": { "reset_password": { "label": "Reset Password", "username": "Username", "password": "password" - } + }, + "profileCompletionPer": "استكمال الملف الشخصي", + "completeProfile": "الملف الشخصي الكامل", + "personalInformation": "معلومات شخصية", + "basicDetails": "تفاصيل أساسية", + "contactDetails": "بيانات التواصل", + "familyDetails": "تفاصيل عائلية" }, "clicked": { "zero": "You clicked {} times!", @@ -372,7 +389,6 @@ static const Map en_US = { "whatsapp": "Whatsapp", "reject": "Reject", "approve": "Approve", - "attendanceDetails": "Attendence Details", "cancel": "Cancel", "requestedItems": "Requested Items", "request": "Request", @@ -517,6 +533,7 @@ static const Map en_US = { "myAttendance": "My Attendance", "workOnBreak": "Work On Break", "next": "Next", + "mobile": "Mobile", "year": "Year", "month": "Month", "day": "Day", @@ -536,7 +553,13 @@ static const Map en_US = { "label": "Reset Password", "username": "Username", "password": "password" - } + }, + "profileCompletionPer": "Profile Completion", + "completeProfile": "Complete Profile", + "personalInformation": "Personal Information", + "basicDetails": "Basic Details", + "contactDetails": "Contact Details", + "familyDetails": "Family Members" }, "clicked": { "zero": "You clicked {} times!", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 230e45b..e4bf2dd 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -232,6 +232,7 @@ abstract class LocaleKeys { static const myAttendance = 'myAttendance'; static const workOnBreak = 'workOnBreak'; static const next = 'next'; + static const mobile = 'mobile'; static const completingYear = 'completingYear'; static const year = 'year'; static const month = 'month'; From eaac923580e58ce692f2e4f0d548c86b463a2b3d Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 19 Jun 2022 12:31:03 +0300 Subject: [PATCH 12/13] imp --- lib/extensions/string_extensions.dart | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index a953734..98cc830 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -1,8 +1,6 @@ -import 'package:easy_localization/src/public_ext.dart'; import 'package:flutter/cupertino.dart'; import 'package:intl/intl.dart'; import 'package:mohem_flutter_app/classes/colors.dart'; -import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; extension CapExtension on String { String get toCamelCase => "${this[0].toUpperCase()}${this.substring(1)}"; @@ -63,10 +61,11 @@ extension EmailValidator on String { this, style: TextStyle(color: color ?? MyColors.darkTextColor, fontSize: 17, letterSpacing: -0.68, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), ); + Widget toText20({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), - ); + this, + style: TextStyle(fontSize: 20, fontWeight: isBold ? FontWeight.bold : FontWeight.w600, color: color ?? MyColors.darkTextColor, letterSpacing: -0.4), + ); Widget toText22({Color? color, bool isBold = false}) => Text( this, @@ -84,9 +83,9 @@ extension EmailValidator on String { ); Widget toText44({Color? color, bool isBold = false}) => Text( - this, - style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 44, letterSpacing: -2.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), - ); + this, + style: TextStyle(height: 32 / 32, color: color ?? MyColors.darkTextColor, fontSize: 44, letterSpacing: -2.64, fontWeight: isBold ? FontWeight.bold : FontWeight.w600), + ); Widget toSectionHeading({String upperHeading = "", String lowerHeading = ""}) { String upper = ""; From ce7183a137051ef83ca4b304ead8c5a11e2b43a0 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Sun, 19 Jun 2022 12:55:16 +0300 Subject: [PATCH 13/13] merge conflicts fixed. --- android/app/src/main/AndroidManifest.xml | 5 ++--- lib/generated/codegen_loader.g.dart | 16 +++++++--------- lib/generated/locale_keys.g.dart | 6 +++--- lib/models/generic_response_model.dart | 1 - lib/ui/login/login_screen.dart | 5 ++--- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 39cd59d..d44cea3 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -10,9 +10,8 @@ + android:networkSecurityConfig="@xml/network_security_config" + android:roundIcon="@mipmap/ic_launcher_round"> en_US = { "writeComment": "Write a comment", "approversList": "Approvers List", "yourRequestHasBeenSubmittedForApprovals": "Your request has been submitted for approvals", - "profile": { "reset_password": { "label": "Reset Password", diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index e8ea462..21d18f5 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -1,6 +1,6 @@ // DO NOT EDIT. This is code generated via package:easy_localization/generate.dart -abstract class LocaleKeys { +abstract class LocaleKeys { static const mohemm = 'mohemm'; static const english = 'english'; static const arabic = 'arabic'; @@ -243,7 +243,7 @@ abstract class LocaleKeys { static const Payroll = 'Payroll'; static const civilIdentityNumber = 'civilIdentityNumber'; static const dateOfBirth = 'dateOfBirth'; - static const maritalStatus = 'maritalStatus '; + static const maritalStatus = 'maritalStatus '; static const fullName = 'fullName'; static const remove = 'remove'; static const submit = 'submit'; @@ -252,7 +252,6 @@ abstract class LocaleKeys { static const writeComment = 'writeComment'; static const approversList = 'approversList'; static const yourRequestHasBeenSubmittedForApprovals = 'yourRequestHasBeenSubmittedForApprovals'; - static const profile_reset_password_label = 'profile.reset_password.label'; static const profile_reset_password_username = 'profile.reset_password.username'; static const profile_reset_password_password = 'profile.reset_password.password'; @@ -269,4 +268,5 @@ abstract class LocaleKeys { static const gender_with_arg = 'gender.with_arg'; static const gender = 'gender'; static const reset_locale = 'reset_locale'; + } diff --git a/lib/models/generic_response_model.dart b/lib/models/generic_response_model.dart index 54a7b8d..952b9e6 100644 --- a/lib/models/generic_response_model.dart +++ b/lib/models/generic_response_model.dart @@ -4,7 +4,6 @@ import 'package:mohem_flutter_app/models/get_absence_collection_notification_bod import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_approves_list_model.dart'; import 'package:mohem_flutter_app/models/get_attachement_list_model.dart'; -import 'package:mohem_flutter_app/models/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_default_value_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/hr/get_basic_det_ntf_body_list_model.dart'; import 'package:mohem_flutter_app/models/get_eit_dff_structure_list_model.dart'; diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart index b20ec58..d02fd74 100644 --- a/lib/ui/login/login_screen.dart +++ b/lib/ui/login/login_screen.dart @@ -132,10 +132,9 @@ class _LoginScreenState extends State { @override Widget build(BuildContext context) { - // username.text = "15153"; + username.text = "15153"; password.text = "Abcd@1234"; - username.text = "15444"; - + // username.text = "15444"; return Scaffold( body: Column(