missing swipe added.

merge-requests/1/merge
Sikander Saleem 3 years ago
parent 1e9a26e3df
commit 3e6fdd2cb5

@ -211,6 +211,11 @@
"workOnBreak": "العمل على استراحة",
"next": "التالي",
"submit": "ارسال",
"areYouSureYouWantToSubmit": "هل أنت متأكد أنك تريد أن تقدم؟",
"comments": "تعليقات",
"writeComment": "أكتب تعليقا",
"approversList": "قائمة الموافقين",
"yourRequestHasBeenSubmittedForApprovals": "تم تقديم طلبك للموافقات",
"profile": {
"reset_password": {
"label": "Reset Password",

@ -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",

@ -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<List<GetApprovesList>> addAttachment(List<Map<String, dynamic>> list) async {
String url = "${ApiConsts.erpRest}ADD_ATTACHMENT";
Map<String, dynamic> postParams = {"AddAttachmentList": list};
postParams.addAll(AppState().postParamsJson);
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.getApprovesList ?? [];
}, url, postParams);
}
Future<StartEitApprovalProcess?> startEitApprovalProcess(String action, String comments, String itemKey, int transactionId) async {
String url = "${ApiConsts.erpRest}START_EIT_APPROVAL_PROCESS";
Map<String, dynamic> 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);
}
}

@ -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<String,dynamic> 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",

@ -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';
}

@ -0,0 +1,18 @@
class AddAttSuccessList {
bool? addSuccess;
int? attachmentID;
AddAttSuccessList({this.addSuccess, this.attachmentID});
AddAttSuccessList.fromJson(Map<String, dynamic> json) {
addSuccess = json['AddSuccess'];
attachmentID = json['AttachmentID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['AddSuccess'] = this.addSuccess;
data['AttachmentID'] = this.attachmentID;
return data;
}
}

@ -0,0 +1,18 @@
class AddAttachmentList {
String? pRETURNMSG;
String? pRETURNSTATUS;
AddAttachmentList({this.pRETURNMSG, this.pRETURNSTATUS});
AddAttachmentList.fromJson(Map<String, dynamic> json) {
pRETURNMSG = json['P_RETURN_MSG'];
pRETURNSTATUS = json['P_RETURN_STATUS'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['P_RETURN_MSG'] = this.pRETURNMSG;
data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
return data;
}
}

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -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>? 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 = <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;

@ -0,0 +1,18 @@
class StartEitApprovalProcess {
String? pRETURNMSG;
String? pRETURNSTATUS;
StartEitApprovalProcess({this.pRETURNMSG, this.pRETURNSTATUS});
StartEitApprovalProcess.fromJson(Map<String, dynamic> json) {
pRETURNMSG = json['P_RETURN_MSG'];
pRETURNSTATUS = json['P_RETURN_STATUS'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['P_RETURN_MSG'] = this.pRETURNMSG;
data['P_RETURN_STATUS'] = this.pRETURNSTATUS;
return data;
}
}

@ -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<RequestSubmitScreen> {
RequestSubmitScreenParams? params;
TextEditingController comments = TextEditingController();
List<GetApprovesList> approverList = [];
List<File> attachmentFiles = [];
@ -57,6 +63,44 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
}
}
void submitRequest() async {
try {
Utils.showLoading(context);
List<Map<String, dynamic>> list = [];
if (attachmentFiles.isNotEmpty) {
attachmentFiles.asMap().forEach((index, value) async {
String type = value.path.split('.').last;
String name = value.path.split('/').last;
List<int> 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<RequestSubmitScreen> {
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<RequestSubmitScreen> {
},
), //.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<RequestSubmitScreen> {
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,
],

@ -67,30 +67,32 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
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<GetEITDFFStructureList> filteredList = getEitDffStructureList?.where((element) => element.cHILDSEGMENTSVS == segmentId).toList() ?? [];
List<Map<String, dynamic>> values = filteredList
@ -269,9 +271,8 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
//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();

@ -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)),

Loading…
Cancel
Save