From 58962ede0339bf1b1d3f567d2804200b3befda2b Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Tue, 3 Oct 2023 16:49:39 +0300 Subject: [PATCH 1/3] CR-6273 implemented. --- assets/langs/ar-SA.json | 3 +- assets/langs/en-US.json | 3 +- lib/classes/consts.dart | 4 +-- lib/generated/locale_keys.g.dart | 1 + .../employee_documents_list_model.dart | 31 ++++++++++++------- lib/provider/dashboard_provider_model.dart | 1 - lib/ui/landing/widget/services_widget.dart | 2 +- lib/ui/misc/request_submit_screen.dart | 10 ++++-- .../dynamic_screens/dynamic_input_screen.dart | 2 +- .../dynamic_listview_screen.dart | 15 +++++++-- .../my_documents/my_documents_fragment.dart | 8 +++-- .../my_documents/my_documents_screen.dart | 1 + lib/widgets/my_document_item.dart | 2 +- 13 files changed, 57 insertions(+), 26 deletions(-) diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 2ed5acc..3a4cd96 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -539,5 +539,6 @@ "allDocuments": "كافة المستندات", "expiredDocuments": "المستندات منتهية الصلاحية", "missingDocuments": "مستندات مفقودة", - "uploadedDocuments": "المستندات التي تم تحميلها" + "uploadedDocuments": "المستندات التي تم تحميلها", + "addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل." } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 38aeaa7..02bcd94 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -559,5 +559,6 @@ "searchByUserName": "Search By Username", "userSearch": "User Search", "userName": "User Name", - "userId": "UserID" + "userId": "UserID", + "addAtLeastOneAttachment": "Please add at least one attachment." } \ No newline at end of file diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 64047e5..9023f93 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -3,8 +3,8 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart'; class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server // static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA 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/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index c5ec04f..5455a92 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -546,4 +546,5 @@ abstract class LocaleKeys { static const userSearch ='userSearch'; static const userName ='userName'; static const userId ='userId'; + static const addAtLeastOneAttachment ='addAtLeastOneAttachment'; } diff --git a/lib/models/my_documents/employee_documents_list_model.dart b/lib/models/my_documents/employee_documents_list_model.dart index 97ef785..b91bc3d 100644 --- a/lib/models/my_documents/employee_documents_list_model.dart +++ b/lib/models/my_documents/employee_documents_list_model.dart @@ -2,28 +2,35 @@ class EmployeeDocumentsList { String? dOCUMENTREQUIREDSTATUS; String? dOCUMENTSTATUS; String? dOCUMENTTYPE; + String? dOCUMENTTYPENAME; + String? eNTITLEDTOAPPLYFLAG; String? fUNCTIONNAME; - EmployeeDocumentsList({ - this.dOCUMENTREQUIREDSTATUS, - this.dOCUMENTSTATUS, - this.dOCUMENTTYPE, - this.fUNCTIONNAME, - }); + EmployeeDocumentsList( + {this.dOCUMENTREQUIREDSTATUS, + this.dOCUMENTSTATUS, + this.dOCUMENTTYPE, + this.dOCUMENTTYPENAME, + this.eNTITLEDTOAPPLYFLAG, + this.fUNCTIONNAME}); EmployeeDocumentsList.fromJson(Map json) { dOCUMENTREQUIREDSTATUS = json['DOCUMENT_REQUIRED_STATUS']; dOCUMENTSTATUS = json['DOCUMENT_STATUS']; dOCUMENTTYPE = json['DOCUMENT_TYPE']; + dOCUMENTTYPENAME = json['DOCUMENT_TYPE_NAME']; + eNTITLEDTOAPPLYFLAG = json['ENTITLED_TO_APPLY_FLAG']; fUNCTIONNAME = json['FUNCTION_NAME']; } Map toJson() { - Map data = Map(); - data['DOCUMENT_REQUIRED_STATUS'] = dOCUMENTREQUIREDSTATUS; - data['DOCUMENT_STATUS'] = dOCUMENTSTATUS; - data['DOCUMENT_TYPE'] = dOCUMENTTYPE; - data['FUNCTION_NAME'] = fUNCTIONNAME; + Map data = new Map(); + data['DOCUMENT_REQUIRED_STATUS'] = this.dOCUMENTREQUIREDSTATUS; + data['DOCUMENT_STATUS'] = this.dOCUMENTSTATUS; + data['DOCUMENT_TYPE'] = this.dOCUMENTTYPE; + data['DOCUMENT_TYPE_NAME'] = this.dOCUMENTTYPENAME; + data['ENTITLED_TO_APPLY_FLAG'] = this.eNTITLEDTOAPPLYFLAG; + data['FUNCTION_NAME'] = this.fUNCTIONNAME; return data; } -} +} \ No newline at end of file diff --git a/lib/provider/dashboard_provider_model.dart b/lib/provider/dashboard_provider_model.dart index 5eac532..0e18544 100644 --- a/lib/provider/dashboard_provider_model.dart +++ b/lib/provider/dashboard_provider_model.dart @@ -278,7 +278,6 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin { getMenuEntriesList.add(activeDirectoryEntry); list.add(GetMenuEntriesList(requestType: "ITG_FORMS", prompt: LocaleKeys.itgForms.tr(), menuName: 'ITG_FORMS')); - list.add(GetMenuEntriesList(requestType: "MY_DOCUMENTS", prompt: LocaleKeys.myDocuments.tr(), menuName: 'MY_DOCUMENTS')); } menus.add(Menus(getMenuEntriesList[i], list)); diff --git a/lib/ui/landing/widget/services_widget.dart b/lib/ui/landing/widget/services_widget.dart index 7dabb0c..cc16fc5 100644 --- a/lib/ui/landing/widget/services_widget.dart +++ b/lib/ui/landing/widget/services_widget.dart @@ -207,7 +207,7 @@ class ServicesWidget extends StatelessWidget { } else if (menuEntry.menuName == "MBL_PERINFO_SS") { Navigator.of(context).pushNamed(AppRoutes.profile); return; - } else if (menuEntry.menuName == "MY_DOCUMENTS") { + } else if (menuEntry.menuName!.substring(4, menuEntry.menuName!.length) == "MBL_EMPLOYEE_DOCUMENTS") { Navigator.pushNamed(context, AppRoutes.myDocuments); return; } diff --git a/lib/ui/misc/request_submit_screen.dart b/lib/ui/misc/request_submit_screen.dart index 6fa0ef8..ceba8be 100644 --- a/lib/ui/misc/request_submit_screen.dart +++ b/lib/ui/misc/request_submit_screen.dart @@ -32,8 +32,9 @@ class RequestSubmitScreenParams { String approvalFlag; String? selectedEmployeeID; String? popNavigateToSpecificRoute; + bool isAttachmentMandatory; - RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId, this.approvalFlag, {this.selectedEmployeeID, this.popNavigateToSpecificRoute}); + RequestSubmitScreenParams(this.title, this.transactionId, this.pItemId, this.approvalFlag, {this.selectedEmployeeID, this.popNavigateToSpecificRoute, this.isAttachmentMandatory = false}); } class RequestSubmitScreen extends StatefulWidget { @@ -180,7 +181,7 @@ class _RequestSubmitScreenState extends State { physics: const BouncingScrollPhysics(), children: [ attachmentView( - LocaleKeys.attachments.tr(), + LocaleKeys.attachments.tr() + (params!.isAttachmentMandatory ? "*" : ""), ), 14.height, InputWidget( @@ -210,6 +211,11 @@ class _RequestSubmitScreenState extends State { DefaultButton( LocaleKeys.submit.tr(), () { + if (params!.isAttachmentMandatory && attachmentFiles.isEmpty) { + Utils.showToast(LocaleKeys.addAtLeastOneAttachment.tr()); + return; + } + showDialog( context: context, builder: (cxt) => ConfirmDialog( 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 c1f5cfe..2f3f1be 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_input_screen.dart @@ -95,7 +95,7 @@ class _DynamicInputScreenState extends State { SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values, empID: dynamicParams!.selectedEmp); Utils.hideLoading(context); await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, - arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit')); + arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit',isAttachmentMandatory: dynamicParams!.isAttachmentMandatory)); if (!AppState().cancelRequestTrancsection) { return; } diff --git a/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart index 9294159..94a201f 100644 --- a/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart +++ b/lib/ui/my_attendance/dynamic_screens/dynamic_listview_screen.dart @@ -20,12 +20,23 @@ class DynamicListViewParams { String colsURL; bool isUpdate; String? popUntilRoute; + bool isAttachmentMandatory; List? collectionNotificationList; final String? selectedEmp; - DynamicListViewParams(this.title, this.dynamicId, - {this.selectedEmp, this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.isUpdate = false, this.collectionNotificationList, this.popUntilRoute}); + DynamicListViewParams( + this.title, + this.dynamicId, { + this.selectedEmp, + this.uRL = 'GET_EIT_DFF_STRUCTURE', + this.requestID = '', + this.colsURL = '', + this.isUpdate = false, + this.collectionNotificationList, + this.popUntilRoute, + this.isAttachmentMandatory = false, + }); } class DynamicListViewScreen extends StatefulWidget { diff --git a/lib/ui/screens/my_documents/my_documents_fragment.dart b/lib/ui/screens/my_documents/my_documents_fragment.dart index e1be0a4..b385d15 100644 --- a/lib/ui/screens/my_documents/my_documents_fragment.dart +++ b/lib/ui/screens/my_documents/my_documents_fragment.dart @@ -78,7 +78,8 @@ class _MyDocumentsFragmentState extends State { Navigator.pushNamed( context, AppRoutes.addDynamicInput, - arguments: DynamicListViewParams(documentfilteredList[index].dOCUMENTTYPE!, documentfilteredList[index].fUNCTIONNAME!, selectedEmp: AppState().getUserName), + arguments: DynamicListViewParams(documentfilteredList[index].dOCUMENTTYPE!, documentfilteredList[index].fUNCTIONNAME!, + selectedEmp: AppState().getUserName, isAttachmentMandatory: true), ); }); }, @@ -123,6 +124,9 @@ class _MyDocumentsFragmentState extends State { Color getColorByDocumentStatus(String status) { Color _color; switch (status) { + case "Expired": + _color = MyColors.redA3Color; + break; case "Exist": _color = MyColors.greenColor; break; @@ -143,7 +147,7 @@ class _MyDocumentsFragmentState extends State { List list = []; switch (index) { case 1: - list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Not Exist").toList() ?? []; + list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Expired").toList() ?? []; break; case 2: list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Missing").toList() ?? []; diff --git a/lib/ui/screens/my_documents/my_documents_screen.dart b/lib/ui/screens/my_documents/my_documents_screen.dart index ffddd36..703adeb 100644 --- a/lib/ui/screens/my_documents/my_documents_screen.dart +++ b/lib/ui/screens/my_documents/my_documents_screen.dart @@ -42,6 +42,7 @@ class _MyDocumentsScreenState extends State { documentsList?.clear(); Utils.showLoading(context); documentsList = await ProfileApiClient().getEmployeeDocuments(); + documentsList?.removeWhere((element) => element.eNTITLEDTOAPPLYFLAG!="Y"); Utils.hideLoading(context); setState(() {}); } catch (ex) { diff --git a/lib/widgets/my_document_item.dart b/lib/widgets/my_document_item.dart index b0d4b51..700d6fb 100644 --- a/lib/widgets/my_document_item.dart +++ b/lib/widgets/my_document_item.dart @@ -54,7 +54,7 @@ class MyDocumentItem extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - document.dOCUMENTTYPE!.toText16(), + document.dOCUMENTTYPENAME!.toText16(), document.dOCUMENTSTATUS!.toText10(color: color), ], ).expanded, From 7f6f240590bbd88c78315cc6f9e77d1bf313b0b5 Mon Sep 17 00:00:00 2001 From: Sikander Saleem Date: Wed, 11 Oct 2023 11:53:45 +0300 Subject: [PATCH 2/3] CR-6273 improvement. --- .../my_documents/my_documents_fragment.dart | 1 + .../screens/my_documents/my_documents_screen.dart | 1 - lib/widgets/my_document_item.dart | 14 +++++++------- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/ui/screens/my_documents/my_documents_fragment.dart b/lib/ui/screens/my_documents/my_documents_fragment.dart index b385d15..6bc46f7 100644 --- a/lib/ui/screens/my_documents/my_documents_fragment.dart +++ b/lib/ui/screens/my_documents/my_documents_fragment.dart @@ -75,6 +75,7 @@ class _MyDocumentsFragmentState extends State { padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 11), itemBuilder: (cxt, index) { return MyDocumentItem(documentfilteredList[index], getColorByDocumentStatus(documentfilteredList[index].dOCUMENTSTATUS!)).onPress(() { + if (documentfilteredList[index].eNTITLEDTOAPPLYFLAG != 'Y') return; Navigator.pushNamed( context, AppRoutes.addDynamicInput, diff --git a/lib/ui/screens/my_documents/my_documents_screen.dart b/lib/ui/screens/my_documents/my_documents_screen.dart index 703adeb..ffddd36 100644 --- a/lib/ui/screens/my_documents/my_documents_screen.dart +++ b/lib/ui/screens/my_documents/my_documents_screen.dart @@ -42,7 +42,6 @@ class _MyDocumentsScreenState extends State { documentsList?.clear(); Utils.showLoading(context); documentsList = await ProfileApiClient().getEmployeeDocuments(); - documentsList?.removeWhere((element) => element.eNTITLEDTOAPPLYFLAG!="Y"); Utils.hideLoading(context); setState(() {}); } catch (ex) { diff --git a/lib/widgets/my_document_item.dart b/lib/widgets/my_document_item.dart index 700d6fb..4eb8051 100644 --- a/lib/widgets/my_document_item.dart +++ b/lib/widgets/my_document_item.dart @@ -17,7 +17,7 @@ class MyDocumentItem extends StatelessWidget { Widget build(BuildContext context) { return Container( decoration: BoxDecoration( - color: Colors.white, + color: document.eNTITLEDTOAPPLYFLAG != 'Y' ? Colors.grey.shade300 : Colors.white, borderRadius: BorderRadius.circular(10), boxShadow: [ BoxShadow( @@ -60,12 +60,12 @@ class MyDocumentItem extends StatelessWidget { ).expanded, ], ).expanded, - if(isNotInDetailView) - const Icon( - Icons.arrow_forward, - size: 20, - color: Color(0xff2E303A), - ) + if (isNotInDetailView) + const Icon( + Icons.arrow_forward, + size: 20, + color: Color(0xff2E303A), + ) ], ).paddingOnly(top: 14, bottom: 18, right: 14, left: 24), ], From 74b12391d2c09303b62b374ccf0fea3e8830c252 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 11 Oct 2023 13:36:19 +0300 Subject: [PATCH 3/3] update to store for document upload CR --- lib/app_state/app_state.dart | 2 +- lib/classes/consts.dart | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/app_state/app_state.dart b/lib/app_state/app_state.dart index b0c93ee..052ad10 100644 --- a/lib/app_state/app_state.dart +++ b/lib/app_state/app_state.dart @@ -90,7 +90,7 @@ class AppState { String get getHuaweiPushToken => _huaweiPushToken; - final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.0, mobileType: Platform.isAndroid ? "android" : "ios"); + final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 31, versionID: 5.2, mobileType: Platform.isAndroid ? "android" : "ios"); void setPostParamsInitConfig() { isAuthenticated = false; diff --git a/lib/classes/consts.dart b/lib/classes/consts.dart index 9023f93..64047e5 100644 --- a/lib/classes/consts.dart +++ b/lib/classes/consts.dart @@ -3,8 +3,8 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart'; class ApiConsts { //static String baseUrl = "http://10.200.204.20:2801/"; // Local server // static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA 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/";