Merge branch 'master_mohemm_flutter'

# Conflicts:
#	lib/app_state/app_state.dart
mohemm_HMG_flutter_upgrade
haroon amjad 3 years ago
commit 8c1f140b57

@ -539,5 +539,6 @@
"allDocuments": "كافة المستندات", "allDocuments": "كافة المستندات",
"expiredDocuments": "المستندات منتهية الصلاحية", "expiredDocuments": "المستندات منتهية الصلاحية",
"missingDocuments": "مستندات مفقودة", "missingDocuments": "مستندات مفقودة",
"uploadedDocuments": "المستندات التي تم تحميلها" "uploadedDocuments": "المستندات التي تم تحميلها",
"addAtLeastOneAttachment": "الرجاء إضافة مرفق واحد على الأقل."
} }

@ -559,5 +559,6 @@
"searchByUserName": "Search By Username", "searchByUserName": "Search By Username",
"userSearch": "User Search", "userSearch": "User Search",
"userName": "User Name", "userName": "User Name",
"userId": "UserID" "userId": "UserID",
"addAtLeastOneAttachment": "Please add at least one attachment."
} }

@ -90,7 +90,7 @@ class AppState {
String get getHuaweiPushToken => _huaweiPushToken; String get getHuaweiPushToken => _huaweiPushToken;
final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 33, versionID: 5.1, mobileType: Platform.isAndroid ? "android" : "ios"); final PostParamsModel _postParamsInitConfig = PostParamsModel(channel: 33, versionID: 5.2, mobileType: Platform.isAndroid ? "android" : "ios");
void setPostParamsInitConfig() { void setPostParamsInitConfig() {
isAuthenticated = false; isAuthenticated = false;

@ -546,4 +546,5 @@ abstract class LocaleKeys {
static const userSearch ='userSearch'; static const userSearch ='userSearch';
static const userName ='userName'; static const userName ='userName';
static const userId ='userId'; static const userId ='userId';
static const addAtLeastOneAttachment ='addAtLeastOneAttachment';
} }

@ -2,28 +2,35 @@ class EmployeeDocumentsList {
String? dOCUMENTREQUIREDSTATUS; String? dOCUMENTREQUIREDSTATUS;
String? dOCUMENTSTATUS; String? dOCUMENTSTATUS;
String? dOCUMENTTYPE; String? dOCUMENTTYPE;
String? dOCUMENTTYPENAME;
String? eNTITLEDTOAPPLYFLAG;
String? fUNCTIONNAME; String? fUNCTIONNAME;
EmployeeDocumentsList({ EmployeeDocumentsList(
this.dOCUMENTREQUIREDSTATUS, {this.dOCUMENTREQUIREDSTATUS,
this.dOCUMENTSTATUS, this.dOCUMENTSTATUS,
this.dOCUMENTTYPE, this.dOCUMENTTYPE,
this.fUNCTIONNAME, this.dOCUMENTTYPENAME,
}); this.eNTITLEDTOAPPLYFLAG,
this.fUNCTIONNAME});
EmployeeDocumentsList.fromJson(Map<String, dynamic> json) { EmployeeDocumentsList.fromJson(Map<String, dynamic> json) {
dOCUMENTREQUIREDSTATUS = json['DOCUMENT_REQUIRED_STATUS']; dOCUMENTREQUIREDSTATUS = json['DOCUMENT_REQUIRED_STATUS'];
dOCUMENTSTATUS = json['DOCUMENT_STATUS']; dOCUMENTSTATUS = json['DOCUMENT_STATUS'];
dOCUMENTTYPE = json['DOCUMENT_TYPE']; dOCUMENTTYPE = json['DOCUMENT_TYPE'];
dOCUMENTTYPENAME = json['DOCUMENT_TYPE_NAME'];
eNTITLEDTOAPPLYFLAG = json['ENTITLED_TO_APPLY_FLAG'];
fUNCTIONNAME = json['FUNCTION_NAME']; fUNCTIONNAME = json['FUNCTION_NAME'];
} }
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
Map<String, dynamic> data = Map<String, dynamic>(); Map<String, dynamic> data = new Map<String, dynamic>();
data['DOCUMENT_REQUIRED_STATUS'] = dOCUMENTREQUIREDSTATUS; data['DOCUMENT_REQUIRED_STATUS'] = this.dOCUMENTREQUIREDSTATUS;
data['DOCUMENT_STATUS'] = dOCUMENTSTATUS; data['DOCUMENT_STATUS'] = this.dOCUMENTSTATUS;
data['DOCUMENT_TYPE'] = dOCUMENTTYPE; data['DOCUMENT_TYPE'] = this.dOCUMENTTYPE;
data['FUNCTION_NAME'] = fUNCTIONNAME; data['DOCUMENT_TYPE_NAME'] = this.dOCUMENTTYPENAME;
data['ENTITLED_TO_APPLY_FLAG'] = this.eNTITLEDTOAPPLYFLAG;
data['FUNCTION_NAME'] = this.fUNCTIONNAME;
return data; return data;
} }
} }

@ -278,7 +278,6 @@ class DashboardProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
getMenuEntriesList.add(activeDirectoryEntry); getMenuEntriesList.add(activeDirectoryEntry);
list.add(GetMenuEntriesList(requestType: "ITG_FORMS", prompt: LocaleKeys.itgForms.tr(), menuName: 'ITG_FORMS')); 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)); menus.add(Menus(getMenuEntriesList[i], list));

@ -207,7 +207,7 @@ class ServicesWidget extends StatelessWidget {
} else if (menuEntry.menuName == "MBL_PERINFO_SS") { } else if (menuEntry.menuName == "MBL_PERINFO_SS") {
Navigator.of(context).pushNamed(AppRoutes.profile); Navigator.of(context).pushNamed(AppRoutes.profile);
return; return;
} else if (menuEntry.menuName == "MY_DOCUMENTS") { } else if (menuEntry.menuName!.substring(4, menuEntry.menuName!.length) == "MBL_EMPLOYEE_DOCUMENTS") {
Navigator.pushNamed(context, AppRoutes.myDocuments); Navigator.pushNamed(context, AppRoutes.myDocuments);
return; return;
} }

@ -32,8 +32,9 @@ class RequestSubmitScreenParams {
String approvalFlag; String approvalFlag;
String? selectedEmployeeID; String? selectedEmployeeID;
String? popNavigateToSpecificRoute; 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 { class RequestSubmitScreen extends StatefulWidget {
@ -180,7 +181,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
physics: const BouncingScrollPhysics(), physics: const BouncingScrollPhysics(),
children: [ children: [
attachmentView( attachmentView(
LocaleKeys.attachments.tr(), LocaleKeys.attachments.tr() + (params!.isAttachmentMandatory ? "*" : ""),
), ),
14.height, 14.height,
InputWidget( InputWidget(
@ -210,6 +211,11 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
DefaultButton( DefaultButton(
LocaleKeys.submit.tr(), LocaleKeys.submit.tr(),
() { () {
if (params!.isAttachmentMandatory && attachmentFiles.isEmpty) {
Utils.showToast(LocaleKeys.addAtLeastOneAttachment.tr());
return;
}
showDialog( showDialog(
context: context, context: context,
builder: (cxt) => ConfirmDialog( builder: (cxt) => ConfirmDialog(

@ -95,7 +95,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values, empID: dynamicParams!.selectedEmp); SubmitEITTransactionList submitEITTransactionList = await MyAttendanceApiClient().submitEitTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, values, empID: dynamicParams!.selectedEmp);
Utils.hideLoading(context); Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, 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) { if (!AppState().cancelRequestTrancsection) {
return; return;
} }

@ -20,12 +20,23 @@ class DynamicListViewParams {
String colsURL; String colsURL;
bool isUpdate; bool isUpdate;
String? popUntilRoute; String? popUntilRoute;
bool isAttachmentMandatory;
List<CollectionNotificationEit>? collectionNotificationList; List<CollectionNotificationEit>? collectionNotificationList;
final String? selectedEmp; final String? selectedEmp;
DynamicListViewParams(this.title, this.dynamicId, DynamicListViewParams(
{this.selectedEmp, this.uRL = 'GET_EIT_DFF_STRUCTURE', this.requestID = '', this.colsURL = '', this.isUpdate = false, this.collectionNotificationList, this.popUntilRoute}); 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 { class DynamicListViewScreen extends StatefulWidget {

@ -75,10 +75,12 @@ class _MyDocumentsFragmentState extends State<MyDocumentsFragment> {
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 11), padding: const EdgeInsets.only(left: 21, right: 21, bottom: 21, top: 11),
itemBuilder: (cxt, index) { itemBuilder: (cxt, index) {
return MyDocumentItem(documentfilteredList[index], getColorByDocumentStatus(documentfilteredList[index].dOCUMENTSTATUS!)).onPress(() { return MyDocumentItem(documentfilteredList[index], getColorByDocumentStatus(documentfilteredList[index].dOCUMENTSTATUS!)).onPress(() {
if (documentfilteredList[index].eNTITLEDTOAPPLYFLAG != 'Y') return;
Navigator.pushNamed( Navigator.pushNamed(
context, context,
AppRoutes.addDynamicInput, 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 +125,9 @@ class _MyDocumentsFragmentState extends State<MyDocumentsFragment> {
Color getColorByDocumentStatus(String status) { Color getColorByDocumentStatus(String status) {
Color _color; Color _color;
switch (status) { switch (status) {
case "Expired":
_color = MyColors.redA3Color;
break;
case "Exist": case "Exist":
_color = MyColors.greenColor; _color = MyColors.greenColor;
break; break;
@ -143,7 +148,7 @@ class _MyDocumentsFragmentState extends State<MyDocumentsFragment> {
List<EmployeeDocumentsList> list = []; List<EmployeeDocumentsList> list = [];
switch (index) { switch (index) {
case 1: case 1:
list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Not Exist").toList() ?? []; list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Expired").toList() ?? [];
break; break;
case 2: case 2:
list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Missing").toList() ?? []; list = documentsList?.where((element) => element.dOCUMENTSTATUS == "Missing").toList() ?? [];

@ -17,7 +17,7 @@ class MyDocumentItem extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Container( return Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: Colors.white, color: document.eNTITLEDTOAPPLYFLAG != 'Y' ? Colors.grey.shade300 : Colors.white,
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
boxShadow: [ boxShadow: [
BoxShadow( BoxShadow(
@ -54,18 +54,18 @@ class MyDocumentItem extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
document.dOCUMENTTYPE!.toText16(), document.dOCUMENTTYPENAME!.toText16(),
document.dOCUMENTSTATUS!.toText10(color: color), document.dOCUMENTSTATUS!.toText10(color: color),
], ],
).expanded, ).expanded,
], ],
).expanded, ).expanded,
if(isNotInDetailView) if (isNotInDetailView)
const Icon( const Icon(
Icons.arrow_forward, Icons.arrow_forward,
size: 20, size: 20,
color: Color(0xff2E303A), color: Color(0xff2E303A),
) )
], ],
).paddingOnly(top: 14, bottom: 18, right: 14, left: 24), ).paddingOnly(top: 14, bottom: 18, right: 14, left: 24),
], ],

Loading…
Cancel
Save