my attendance working cont-1
parent
9b5147b565
commit
25d020441c
@ -0,0 +1,41 @@
|
||||
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/basic_member_information_model.dart';
|
||||
import 'package:mohem_flutter_app/models/check_mobile_app_version_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_eit_transaction_list_model.dart';
|
||||
import 'package:mohem_flutter_app/models/get_mobile_login_info_list_model.dart';
|
||||
import 'package:mohem_flutter_app/models/member_login_list_model.dart';
|
||||
|
||||
import 'api_client.dart';
|
||||
|
||||
class MyAttendanceApiClient {
|
||||
static final MyAttendanceApiClient _instance = MyAttendanceApiClient._internal();
|
||||
|
||||
MyAttendanceApiClient._internal();
|
||||
|
||||
factory MyAttendanceApiClient() => _instance;
|
||||
|
||||
Future<List<GetEITTransactionList>?> getEitTransaction(String pFunctionName) async {
|
||||
String url = "${ApiConsts.erpRest}GET_EIT_TRANSACTIONS";
|
||||
Map<String, dynamic> postParams = {"P_PAGE_LIMIT": 50, "P_PAGE_NUM": 1, "P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
|
||||
postParams.addAll(AppState().postParamsJson);
|
||||
return await ApiClient().postJsonForObject((json) {
|
||||
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||
return responseData.getEITTransactionList ?? [];
|
||||
}, url, postParams);
|
||||
}
|
||||
|
||||
Future<List<GetEITDFFStructureList>?> getEitDffStructure(String pFunctionName) async {
|
||||
String url = "${ApiConsts.erpRest}GET_EIT_DFF_STRUCTURE";
|
||||
Map<String, dynamic> postParams = {"P_SELECTED_RESP_ID": -999, "P_MENU_TYPE": "E", "P_FUNCTION_NAME": pFunctionName};
|
||||
postParams.addAll(AppState().postParamsJson);
|
||||
return await ApiClient().postJsonForObject((json) {
|
||||
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
|
||||
return responseData.getEITDFFStructureList ?? [];
|
||||
}, url, postParams);
|
||||
}
|
||||
}
|
@ -0,0 +1,235 @@
|
||||
class GetEITDFFStructureList {
|
||||
String? aLPHANUMERICALLOWEDFLAG;
|
||||
String? aPPLICATIONCOLUMNNAME;
|
||||
String? cHILDSEGMENTSDV;
|
||||
List<String>? cHILDSEGMENTSDVSplited;
|
||||
String? cHILDSEGMENTSVS;
|
||||
String? cHILDSEGMENTSVSSplited;
|
||||
String? dEFAULTTYPE;
|
||||
String? dEFAULTVALUE;
|
||||
String? dESCFLEXCONTEXTCODE;
|
||||
String? dESCFLEXCONTEXTNAME;
|
||||
String? dESCFLEXNAME;
|
||||
String? dISPLAYFLAG;
|
||||
String? eNABLEDFLAG;
|
||||
ESERVICESDV? eSERVICESDV;
|
||||
List<String>? eSERVICESVS;
|
||||
String? fLEXVALUESETNAME;
|
||||
String? fORMATTYPE;
|
||||
String? fORMATTYPEDSP;
|
||||
bool? isEmptyOption;
|
||||
String? lONGLISTFLAG;
|
||||
int? mAXIMUMSIZE;
|
||||
String? mAXIMUMVALUE;
|
||||
String? mINIMUMVALUE;
|
||||
String? mOBILEENABLED;
|
||||
String? nUMBERPRECISION;
|
||||
String? nUMERICMODEENABLEDFLAG;
|
||||
String? pARENTSEGMENTSDV;
|
||||
List<PARENTSEGMENTSDVSplited>? pARENTSEGMENTSDVSplited;
|
||||
String? pARENTSEGMENTSVS;
|
||||
List<String>? pARENTSEGMENTSVSSplitedVS;
|
||||
String? rEADONLY;
|
||||
String? rEQUIREDFLAG;
|
||||
String? sEGMENTNAME;
|
||||
String? sEGMENTPROMPT;
|
||||
int? sEGMENTSEQNUM;
|
||||
String? uPPERCASEONLYFLAG;
|
||||
String? uSEDFLAG;
|
||||
String? vALIDATIONTYPE;
|
||||
String? vALIDATIONTYPEDSP;
|
||||
|
||||
GetEITDFFStructureList(
|
||||
{this.aLPHANUMERICALLOWEDFLAG,
|
||||
this.aPPLICATIONCOLUMNNAME,
|
||||
this.cHILDSEGMENTSDV,
|
||||
this.cHILDSEGMENTSDVSplited,
|
||||
this.cHILDSEGMENTSVS,
|
||||
this.cHILDSEGMENTSVSSplited,
|
||||
this.dEFAULTTYPE,
|
||||
this.dEFAULTVALUE,
|
||||
this.dESCFLEXCONTEXTCODE,
|
||||
this.dESCFLEXCONTEXTNAME,
|
||||
this.dESCFLEXNAME,
|
||||
this.dISPLAYFLAG,
|
||||
this.eNABLEDFLAG,
|
||||
this.eSERVICESDV,
|
||||
this.eSERVICESVS,
|
||||
this.fLEXVALUESETNAME,
|
||||
this.fORMATTYPE,
|
||||
this.fORMATTYPEDSP,
|
||||
this.isEmptyOption,
|
||||
this.lONGLISTFLAG,
|
||||
this.mAXIMUMSIZE,
|
||||
this.mAXIMUMVALUE,
|
||||
this.mINIMUMVALUE,
|
||||
this.mOBILEENABLED,
|
||||
this.nUMBERPRECISION,
|
||||
this.nUMERICMODEENABLEDFLAG,
|
||||
this.pARENTSEGMENTSDV,
|
||||
this.pARENTSEGMENTSDVSplited,
|
||||
this.pARENTSEGMENTSVS,
|
||||
this.pARENTSEGMENTSVSSplitedVS,
|
||||
this.rEADONLY,
|
||||
this.rEQUIREDFLAG,
|
||||
this.sEGMENTNAME,
|
||||
this.sEGMENTPROMPT,
|
||||
this.sEGMENTSEQNUM,
|
||||
this.uPPERCASEONLYFLAG,
|
||||
this.uSEDFLAG,
|
||||
this.vALIDATIONTYPE,
|
||||
this.vALIDATIONTYPEDSP});
|
||||
|
||||
GetEITDFFStructureList.fromJson(Map<String, dynamic> json) {
|
||||
aLPHANUMERICALLOWEDFLAG = json['ALPHANUMERIC_ALLOWED_FLAG'];
|
||||
aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME'];
|
||||
cHILDSEGMENTSDV = json['CHILD_SEGMENTS_DV'];
|
||||
cHILDSEGMENTSDVSplited = json['CHILD_SEGMENTS_DV_Splited'] == null ? <String>[] : json['CHILD_SEGMENTS_DV_Splited'].cast<String>();
|
||||
cHILDSEGMENTSVS = json['CHILD_SEGMENTS_VS'];
|
||||
cHILDSEGMENTSVSSplited = json['CHILD_SEGMENTS_VS_Splited'];
|
||||
dEFAULTTYPE = json['DEFAULT_TYPE'];
|
||||
dEFAULTVALUE = json['DEFAULT_VALUE'];
|
||||
dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE'];
|
||||
dESCFLEXCONTEXTNAME = json['DESC_FLEX_CONTEXT_NAME'];
|
||||
dESCFLEXNAME = json['DESC_FLEX_NAME'];
|
||||
dISPLAYFLAG = json['DISPLAY_FLAG'];
|
||||
eNABLEDFLAG = json['ENABLED_FLAG'];
|
||||
eSERVICESDV = json['E_SERVICES_DV'] != null ? new ESERVICESDV.fromJson(json['E_SERVICES_DV']) : null;
|
||||
if (json['E_SERVICES_VS'] != null) {
|
||||
eSERVICESVS = <String>[];
|
||||
json['E_SERVICES_VS'].forEach((v) {
|
||||
eSERVICESVS!.add(v);
|
||||
});
|
||||
}
|
||||
fLEXVALUESETNAME = json['FLEX_VALUE_SET_NAME'];
|
||||
fORMATTYPE = json['FORMAT_TYPE'];
|
||||
fORMATTYPEDSP = json['FORMAT_TYPE_DSP'];
|
||||
isEmptyOption = json['IsEmptyOption'];
|
||||
lONGLISTFLAG = json['LONGLIST_FLAG'];
|
||||
mAXIMUMSIZE = json['MAXIMUM_SIZE'];
|
||||
mAXIMUMVALUE = json['MAXIMUM_VALUE'];
|
||||
mINIMUMVALUE = json['MINIMUM_VALUE'];
|
||||
mOBILEENABLED = json['MOBILE_ENABLED'];
|
||||
nUMBERPRECISION = json['NUMBER_PRECISION'];
|
||||
nUMERICMODEENABLEDFLAG = json['NUMERIC_MODE_ENABLED_FLAG'];
|
||||
pARENTSEGMENTSDV = json['PARENT_SEGMENTS_DV'];
|
||||
if (json['PARENT_SEGMENTS_DV_Splited'] != null) {
|
||||
pARENTSEGMENTSDVSplited = <PARENTSEGMENTSDVSplited>[];
|
||||
json['PARENT_SEGMENTS_DV_Splited'].forEach((v) {
|
||||
pARENTSEGMENTSDVSplited!.add(new PARENTSEGMENTSDVSplited.fromJson(v));
|
||||
});
|
||||
}
|
||||
pARENTSEGMENTSVS = json['PARENT_SEGMENTS_VS'];
|
||||
if (json['PARENT_SEGMENTS_VS_SplitedVS'] != null) {
|
||||
pARENTSEGMENTSVSSplitedVS = <String>[];
|
||||
json['PARENT_SEGMENTS_VS_SplitedVS'].forEach((v) {
|
||||
pARENTSEGMENTSVSSplitedVS!.add(v);
|
||||
});
|
||||
}
|
||||
rEADONLY = json['READ_ONLY'];
|
||||
rEQUIREDFLAG = json['REQUIRED_FLAG'];
|
||||
sEGMENTNAME = json['SEGMENT_NAME'];
|
||||
sEGMENTPROMPT = json['SEGMENT_PROMPT'];
|
||||
sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM'];
|
||||
uPPERCASEONLYFLAG = json['UPPERCASE_ONLY_FLAG'];
|
||||
uSEDFLAG = json['USED_FLAG'];
|
||||
vALIDATIONTYPE = json['VALIDATION_TYPE'];
|
||||
vALIDATIONTYPEDSP = json['VALIDATION_TYPE_DSP'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ALPHANUMERIC_ALLOWED_FLAG'] = this.aLPHANUMERICALLOWEDFLAG;
|
||||
data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME;
|
||||
data['CHILD_SEGMENTS_DV'] = this.cHILDSEGMENTSDV;
|
||||
data['CHILD_SEGMENTS_DV_Splited'] = this.cHILDSEGMENTSDVSplited;
|
||||
data['CHILD_SEGMENTS_VS'] = this.cHILDSEGMENTSVS;
|
||||
data['CHILD_SEGMENTS_VS_Splited'] = this.cHILDSEGMENTSVSSplited;
|
||||
data['DEFAULT_TYPE'] = this.dEFAULTTYPE;
|
||||
data['DEFAULT_VALUE'] = this.dEFAULTVALUE;
|
||||
data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE;
|
||||
data['DESC_FLEX_CONTEXT_NAME'] = this.dESCFLEXCONTEXTNAME;
|
||||
data['DESC_FLEX_NAME'] = this.dESCFLEXNAME;
|
||||
data['DISPLAY_FLAG'] = this.dISPLAYFLAG;
|
||||
data['ENABLED_FLAG'] = this.eNABLEDFLAG;
|
||||
if (this.eSERVICESDV != null) {
|
||||
data['E_SERVICES_DV'] = this.eSERVICESDV!.toJson();
|
||||
}
|
||||
if (this.eSERVICESVS != null) {
|
||||
data['E_SERVICES_VS'] = this.eSERVICESVS!.toList();
|
||||
}
|
||||
data['FLEX_VALUE_SET_NAME'] = this.fLEXVALUESETNAME;
|
||||
data['FORMAT_TYPE'] = this.fORMATTYPE;
|
||||
data['FORMAT_TYPE_DSP'] = this.fORMATTYPEDSP;
|
||||
data['IsEmptyOption'] = this.isEmptyOption;
|
||||
data['LONGLIST_FLAG'] = this.lONGLISTFLAG;
|
||||
data['MAXIMUM_SIZE'] = this.mAXIMUMSIZE;
|
||||
data['MAXIMUM_VALUE'] = this.mAXIMUMVALUE;
|
||||
data['MINIMUM_VALUE'] = this.mINIMUMVALUE;
|
||||
data['MOBILE_ENABLED'] = this.mOBILEENABLED;
|
||||
data['NUMBER_PRECISION'] = this.nUMBERPRECISION;
|
||||
data['NUMERIC_MODE_ENABLED_FLAG'] = this.nUMERICMODEENABLEDFLAG;
|
||||
data['PARENT_SEGMENTS_DV'] = this.pARENTSEGMENTSDV;
|
||||
if (this.pARENTSEGMENTSDVSplited != null) {
|
||||
data['PARENT_SEGMENTS_DV_Splited'] = this.pARENTSEGMENTSDVSplited!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['PARENT_SEGMENTS_VS'] = this.pARENTSEGMENTSVS;
|
||||
if (this.pARENTSEGMENTSVSSplitedVS != null) {
|
||||
data['PARENT_SEGMENTS_VS_SplitedVS'] = this.pARENTSEGMENTSVSSplitedVS!.toList();
|
||||
}
|
||||
data['READ_ONLY'] = this.rEADONLY;
|
||||
data['REQUIRED_FLAG'] = this.rEQUIREDFLAG;
|
||||
data['SEGMENT_NAME'] = this.sEGMENTNAME;
|
||||
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
|
||||
data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM;
|
||||
data['UPPERCASE_ONLY_FLAG'] = this.uPPERCASEONLYFLAG;
|
||||
data['USED_FLAG'] = this.uSEDFLAG;
|
||||
data['VALIDATION_TYPE'] = this.vALIDATIONTYPE;
|
||||
data['VALIDATION_TYPE_DSP'] = this.vALIDATIONTYPEDSP;
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class ESERVICESDV {
|
||||
String? pIDCOLUMNNAME;
|
||||
String? pRETURNMSG;
|
||||
String? pRETURNSTATUS;
|
||||
String? pVALUECOLUMNNAME;
|
||||
|
||||
ESERVICESDV({this.pIDCOLUMNNAME, this.pRETURNMSG, this.pRETURNSTATUS, this.pVALUECOLUMNNAME});
|
||||
|
||||
ESERVICESDV.fromJson(Map<String, dynamic> json) {
|
||||
pIDCOLUMNNAME = json['P_ID_COLUMN_NAME'];
|
||||
pRETURNMSG = json['P_RETURN_MSG'];
|
||||
pRETURNSTATUS = json['P_RETURN_STATUS'];
|
||||
pVALUECOLUMNNAME = json['P_VALUE_COLUMN_NAME'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
class PARENTSEGMENTSDVSplited {
|
||||
String? isRequired;
|
||||
String? name;
|
||||
|
||||
PARENTSEGMENTSDVSplited({this.isRequired, this.name});
|
||||
|
||||
PARENTSEGMENTSDVSplited.fromJson(Map<String, dynamic> json) {
|
||||
isRequired = json['IsRequired'];
|
||||
name = json['Name'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['IsRequired'] = this.isRequired;
|
||||
data['Name'] = this.name;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,104 @@
|
||||
class GetEITTransactionList {
|
||||
List<CollectionTransaction>? collectionTransaction;
|
||||
|
||||
GetEITTransactionList({this.collectionTransaction});
|
||||
|
||||
GetEITTransactionList.fromJson(Map<String, dynamic> json) {
|
||||
if (json['Collection_Transaction'] != null) {
|
||||
collectionTransaction = <CollectionTransaction>[];
|
||||
json['Collection_Transaction'].forEach((v) {
|
||||
collectionTransaction!.add(new CollectionTransaction.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
if (this.collectionTransaction != null) {
|
||||
data['Collection_Transaction'] =
|
||||
this.collectionTransaction!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
class CollectionTransaction {
|
||||
String? aPPLICATIONCOLUMNNAME;
|
||||
String? dATATYPE;
|
||||
String? dATEVALUE;
|
||||
String? dESCFLEXCONTEXTCODE;
|
||||
String? dESCFLEXNAME;
|
||||
String? dISPLAYFLAG;
|
||||
int? fROMROWNUM;
|
||||
int? nOOFROWS;
|
||||
int? nUMBERVALUE;
|
||||
int? rOWNUM;
|
||||
String? sEGMENTNAME;
|
||||
String? sEGMENTPROMPT;
|
||||
int? sEGMENTSEQNUM;
|
||||
String? sEGMENTVALUEDSP;
|
||||
int? tOROWNUM;
|
||||
int? tRANSACTIONNUMBER;
|
||||
String? vARCHAR2VALUE;
|
||||
|
||||
CollectionTransaction(
|
||||
{this.aPPLICATIONCOLUMNNAME,
|
||||
this.dATATYPE,
|
||||
this.dATEVALUE,
|
||||
this.dESCFLEXCONTEXTCODE,
|
||||
this.dESCFLEXNAME,
|
||||
this.dISPLAYFLAG,
|
||||
this.fROMROWNUM,
|
||||
this.nOOFROWS,
|
||||
this.nUMBERVALUE,
|
||||
this.rOWNUM,
|
||||
this.sEGMENTNAME,
|
||||
this.sEGMENTPROMPT,
|
||||
this.sEGMENTSEQNUM,
|
||||
this.sEGMENTVALUEDSP,
|
||||
this.tOROWNUM,
|
||||
this.tRANSACTIONNUMBER,
|
||||
this.vARCHAR2VALUE});
|
||||
|
||||
CollectionTransaction.fromJson(Map<String, dynamic> json) {
|
||||
aPPLICATIONCOLUMNNAME = json['APPLICATION_COLUMN_NAME'];
|
||||
dATATYPE = json['DATATYPE'];
|
||||
dATEVALUE = json['DATE_VALUE'];
|
||||
dESCFLEXCONTEXTCODE = json['DESC_FLEX_CONTEXT_CODE'];
|
||||
dESCFLEXNAME = json['DESC_FLEX_NAME'];
|
||||
dISPLAYFLAG = json['DISPLAY_FLAG'];
|
||||
fROMROWNUM = json['FROM_ROW_NUM'];
|
||||
nOOFROWS = json['NO_OF_ROWS'];
|
||||
nUMBERVALUE = json['NUMBER_VALUE'];
|
||||
rOWNUM = json['ROW_NUM'];
|
||||
sEGMENTNAME = json['SEGMENT_NAME'];
|
||||
sEGMENTPROMPT = json['SEGMENT_PROMPT'];
|
||||
sEGMENTSEQNUM = json['SEGMENT_SEQ_NUM'];
|
||||
sEGMENTVALUEDSP = json['SEGMENT_VALUE_DSP'];
|
||||
tOROWNUM = json['TO_ROW_NUM'];
|
||||
tRANSACTIONNUMBER = json['TRANSACTION_NUMBER'];
|
||||
vARCHAR2VALUE = json['VARCHAR2_VALUE'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['APPLICATION_COLUMN_NAME'] = this.aPPLICATIONCOLUMNNAME;
|
||||
data['DATATYPE'] = this.dATATYPE;
|
||||
data['DATE_VALUE'] = this.dATEVALUE;
|
||||
data['DESC_FLEX_CONTEXT_CODE'] = this.dESCFLEXCONTEXTCODE;
|
||||
data['DESC_FLEX_NAME'] = this.dESCFLEXNAME;
|
||||
data['DISPLAY_FLAG'] = this.dISPLAYFLAG;
|
||||
data['FROM_ROW_NUM'] = this.fROMROWNUM;
|
||||
data['NO_OF_ROWS'] = this.nOOFROWS;
|
||||
data['NUMBER_VALUE'] = this.nUMBERVALUE;
|
||||
data['ROW_NUM'] = this.rOWNUM;
|
||||
data['SEGMENT_NAME'] = this.sEGMENTNAME;
|
||||
data['SEGMENT_PROMPT'] = this.sEGMENTPROMPT;
|
||||
data['SEGMENT_SEQ_NUM'] = this.sEGMENTSEQNUM;
|
||||
data['SEGMENT_VALUE_DSP'] = this.sEGMENTVALUEDSP;
|
||||
data['TO_ROW_NUM'] = this.tOROWNUM;
|
||||
data['TRANSACTION_NUMBER'] = this.tRANSACTIONNUMBER;
|
||||
data['VARCHAR2_VALUE'] = this.vARCHAR2VALUE;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
class AllowedActions {
|
||||
String? action;
|
||||
String? details;
|
||||
bool? isAvailable;
|
||||
|
||||
AllowedActions({this.action, this.details, this.isAvailable});
|
||||
|
||||
AllowedActions.fromJson(Map<String, dynamic> json) {
|
||||
action = json['Action'];
|
||||
details = json['Details'];
|
||||
isAvailable = json['IsAvailable'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['Action'] = this.action;
|
||||
data['Details'] = this.details;
|
||||
data['IsAvailable'] = this.isAvailable;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/fields_model.dart';
|
||||
|
||||
class FieldGoups {
|
||||
List<Fields>? fields;
|
||||
String? title;
|
||||
|
||||
FieldGoups({this.fields, this.title});
|
||||
|
||||
FieldGoups.fromJson(Map<String, dynamic> json) {
|
||||
if (json['Fields'] != null) {
|
||||
fields = <Fields>[];
|
||||
json['Fields'].forEach((v) {
|
||||
fields!.add(new Fields.fromJson(v));
|
||||
});
|
||||
}
|
||||
title = json['Title'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
if (this.fields != null) {
|
||||
data['Fields'] = this.fields!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['Title'] = this.title;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
class Fields {
|
||||
List<String>? multipleValue;
|
||||
String? tableValue;
|
||||
String? title;
|
||||
String? type;
|
||||
String? value;
|
||||
|
||||
Fields({this.multipleValue, this.tableValue, this.title, this.type, this.value});
|
||||
|
||||
Fields.fromJson(Map<String, dynamic> json) {
|
||||
multipleValue = json['MultipleValue'] != null ? json['MultipleValue'].cast<String>() : null;
|
||||
tableValue = json['TableValue'];
|
||||
title = json['Title'];
|
||||
type = json['Type'];
|
||||
value = json['Value'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['MultipleValue'] = this.multipleValue;
|
||||
data['TableValue'] = this.tableValue;
|
||||
data['Title'] = this.title;
|
||||
data['Type'] = this.type;
|
||||
data['Value'] = this.value;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/allowed_actions_model.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/field_goups_model.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/wf_history_model.dart';
|
||||
|
||||
class ITGRequest {
|
||||
List<AllowedActions>? allowedActions;
|
||||
Null? attachments;
|
||||
List<FieldGoups>? fieldGoups;
|
||||
Null? grantFields;
|
||||
List<WFHistory>? wFHistory;
|
||||
|
||||
ITGRequest({this.allowedActions, this.attachments, this.fieldGoups, this.grantFields, this.wFHistory});
|
||||
|
||||
ITGRequest.fromJson(Map<String, dynamic> json) {
|
||||
if (json['AllowedActions'] != null) {
|
||||
allowedActions = <AllowedActions>[];
|
||||
json['AllowedActions'].forEach((v) {
|
||||
allowedActions!.add(new AllowedActions.fromJson(v));
|
||||
});
|
||||
}
|
||||
attachments = json['Attachments'];
|
||||
if (json['FieldGoups'] != null) {
|
||||
fieldGoups = <FieldGoups>[];
|
||||
json['FieldGoups'].forEach((v) {
|
||||
fieldGoups!.add(new FieldGoups.fromJson(v));
|
||||
});
|
||||
}
|
||||
grantFields = json['GrantFields'];
|
||||
if (json['WFHistory'] != null) {
|
||||
wFHistory = <WFHistory>[];
|
||||
json['WFHistory'].forEach((v) {
|
||||
wFHistory!.add(new WFHistory.fromJson(v));
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
if (this.allowedActions != null) {
|
||||
data['AllowedActions'] = this.allowedActions!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['Attachments'] = this.attachments;
|
||||
if (this.fieldGoups != null) {
|
||||
data['FieldGoups'] = this.fieldGoups!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['GrantFields'] = this.grantFields;
|
||||
if (this.wFHistory != null) {
|
||||
data['WFHistory'] = this.wFHistory!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
class RequestDetails {
|
||||
int? iD;
|
||||
int? itemID;
|
||||
String? listID;
|
||||
String? listName;
|
||||
String? modifiedDate;
|
||||
String? title;
|
||||
String? uRL;
|
||||
String? requestType;
|
||||
|
||||
RequestDetails({this.iD, this.itemID, this.listID, this.listName, this.modifiedDate, this.title, this.uRL,this.requestType});
|
||||
|
||||
RequestDetails.fromJson(Map<String, dynamic> json) {
|
||||
iD = json['ID'];
|
||||
itemID = json['ItemID'];
|
||||
listID = json['ListID'];
|
||||
listName = json['ListName'];
|
||||
modifiedDate = json['ModifiedDate'];
|
||||
title = json['Title'];
|
||||
uRL = json['URL'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ID'] = this.iD;
|
||||
data['ItemID'] = this.itemID;
|
||||
data['ListID'] = this.listID;
|
||||
data['ListName'] = this.listName;
|
||||
data['ModifiedDate'] = this.modifiedDate;
|
||||
data['Title'] = this.title;
|
||||
data['URL'] = this.uRL;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/request_detail_model.dart';
|
||||
|
||||
class RequestType {
|
||||
int? itemCount;
|
||||
List<RequestDetails>? requestDetails;
|
||||
String? requestTypeCode;
|
||||
String? requestTypeName;
|
||||
|
||||
RequestType({this.itemCount, this.requestDetails, this.requestTypeCode, this.requestTypeName});
|
||||
|
||||
RequestType.fromJson(Map<String, dynamic> json) {
|
||||
itemCount = json['ItemCount'];
|
||||
if (json['RequestDetails'] != null) {
|
||||
requestDetails = <RequestDetails>[];
|
||||
json['RequestDetails'].forEach((v) {
|
||||
requestDetails!.add(new RequestDetails.fromJson(v));
|
||||
});
|
||||
}
|
||||
requestTypeCode = json['RequestTypeCode'];
|
||||
requestTypeName = json['RequestTypeName'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['ItemCount'] = this.itemCount;
|
||||
if (this.requestDetails != null) {
|
||||
data['RequestDetails'] = this.requestDetails!.map((v) => v.toJson()).toList();
|
||||
}
|
||||
data['RequestTypeCode'] = this.requestTypeCode;
|
||||
data['RequestTypeName'] = this.requestTypeName;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
class WFHistory {
|
||||
String? action;
|
||||
String? approvalLevel;
|
||||
String? date;
|
||||
String? email;
|
||||
String? employeeID;
|
||||
String? name;
|
||||
String? notes;
|
||||
|
||||
WFHistory(
|
||||
{this.action,
|
||||
this.approvalLevel,
|
||||
this.date,
|
||||
this.email,
|
||||
this.employeeID,
|
||||
this.name,
|
||||
this.notes});
|
||||
|
||||
WFHistory.fromJson(Map<String, dynamic> json) {
|
||||
action = json['Action'];
|
||||
approvalLevel = json['ApprovalLevel'];
|
||||
date = json['Date'];
|
||||
email = json['Email'];
|
||||
employeeID = json['EmployeeID'];
|
||||
name = json['Name'];
|
||||
notes = json['Notes'];
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||
data['Action'] = this.action;
|
||||
data['ApprovalLevel'] = this.approvalLevel;
|
||||
data['Date'] = this.date;
|
||||
data['Email'] = this.email;
|
||||
data['EmployeeID'] = this.employeeID;
|
||||
data['Name'] = this.name;
|
||||
data['Notes'] = this.notes;
|
||||
return data;
|
||||
}
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
import 'package:easy_localization/easy_localization.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/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_eit_dff_structure_list_model.dart';
|
||||
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||
import 'package:mohem_flutter_app/widgets/button/default_button.dart';
|
||||
|
||||
class AddWorkFromHomeScreen extends StatefulWidget {
|
||||
AddWorkFromHomeScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_AddWorkFromHomeScreenState createState() {
|
||||
return _AddWorkFromHomeScreenState();
|
||||
}
|
||||
}
|
||||
|
||||
class _AddWorkFromHomeScreenState extends State<AddWorkFromHomeScreen> {
|
||||
List<GetEITDFFStructureList>? getEitDffStructureList;
|
||||
String? callingFunction;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void getTransactionsStructure() async {
|
||||
try {
|
||||
Utils.showLoading(context);
|
||||
getEitDffStructureList = await MyAttendanceApiClient().getEitDffStructure(callingFunction!);
|
||||
getEitDffStructureList = getEitDffStructureList!.where((element) => element.dISPLAYFLAG == "Y").toList();
|
||||
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 (callingFunction == null) {
|
||||
callingFunction = "HMG_OTL_WFH_EIT_SS"; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel;
|
||||
getTransactionsStructure();
|
||||
}
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBarWidget(
|
||||
context,
|
||||
title: LocaleKeys.workFromHome.tr(),
|
||||
),
|
||||
body: Column(
|
||||
children: [
|
||||
(getEitDffStructureList == null
|
||||
? const SizedBox()
|
||||
: (getEitDffStructureList!.isEmpty
|
||||
? LocaleKeys.noDataAvailable.tr().toText16().center
|
||||
: ListView.separated(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
padding: EdgeInsets.all(21),
|
||||
itemBuilder: (cxt, int parentIndex) => Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [],
|
||||
).objectContainerView(),
|
||||
separatorBuilder: (cxt, index) => 12.height,
|
||||
itemCount: getEitDffStructureList!.length)))
|
||||
.expanded,
|
||||
// 12.height,
|
||||
DefaultButton(
|
||||
LocaleKeys.next.tr(),
|
||||
(getEitDffStructureList ?? []).isEmpty
|
||||
? null
|
||||
: () => {
|
||||
//Navigator.of(context).pushNamed(LOGIN_TYPE)
|
||||
},
|
||||
).insideContainer,
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,63 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:mohem_flutter_app/classes/colors.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/widgets/app_bar_widget.dart';
|
||||
|
||||
class MyAttendanceScreen extends StatelessWidget {
|
||||
MyAttendanceScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBarWidget(
|
||||
context,
|
||||
title: LocaleKeys.myAttendance.tr(),
|
||||
),
|
||||
body: SizedBox(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: ListView(
|
||||
children: [
|
||||
itemView(
|
||||
"assets/images/pdf.svg",
|
||||
LocaleKeys.missingSwipes.tr(),
|
||||
).onPress(() {
|
||||
|
||||
}),
|
||||
12.height,
|
||||
itemView(
|
||||
"assets/images/pdf.svg",
|
||||
LocaleKeys.workFromHome.tr(),
|
||||
).onPress(() {
|
||||
Navigator.pushNamed(context, AppRoutes.workFromHome);
|
||||
}),
|
||||
12.height,
|
||||
itemView(
|
||||
"assets/images/pdf.svg",
|
||||
LocaleKeys.workOnBreak.tr(),
|
||||
),
|
||||
],
|
||||
).paddingAll(21)),
|
||||
);
|
||||
}
|
||||
|
||||
Widget itemView(String icon, String title) {
|
||||
return Row(
|
||||
children: [
|
||||
(title).toText16().expanded,
|
||||
12.width,
|
||||
SvgPicture.asset(
|
||||
"assets/images/arrow_next.svg",
|
||||
color: MyColors.darkIconColor,
|
||||
)
|
||||
],
|
||||
).objectContainerView();
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
import 'package:easy_localization/easy_localization.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/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/get_eit_transaction_list_model.dart';
|
||||
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
|
||||
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
|
||||
|
||||
class WorkFromHomeScreen extends StatefulWidget {
|
||||
WorkFromHomeScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_WorkFromHomeScreenState createState() {
|
||||
return _WorkFromHomeScreenState();
|
||||
}
|
||||
}
|
||||
|
||||
class _WorkFromHomeScreenState extends State<WorkFromHomeScreen> {
|
||||
List<GetEITTransactionList>? getEITTransactionList;
|
||||
String? callingFunction;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
void getTransactions() async {
|
||||
try {
|
||||
Utils.showLoading(context);
|
||||
getEITTransactionList = await MyAttendanceApiClient().getEitTransaction(callingFunction!);
|
||||
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 (callingFunction == null) {
|
||||
callingFunction = "HMG_OTL_WFH_EIT_SS"; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel;
|
||||
getTransactions();
|
||||
}
|
||||
|
||||
return Scaffold(
|
||||
backgroundColor: Colors.white,
|
||||
appBar: AppBarWidget(
|
||||
context,
|
||||
title: LocaleKeys.workFromHome.tr(),
|
||||
),
|
||||
body: getEITTransactionList == null
|
||||
? const SizedBox()
|
||||
: (getEITTransactionList!.isEmpty
|
||||
? LocaleKeys.noDataAvailable.tr().toText16().center
|
||||
: ListView.separated(
|
||||
physics: const BouncingScrollPhysics(),
|
||||
padding: EdgeInsets.all(21),
|
||||
itemBuilder: (cxt, int parentIndex) => Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
for (int t = 0; t < (getEITTransactionList![parentIndex].collectionTransaction ?? []).length; t++)
|
||||
if (getEITTransactionList![parentIndex].collectionTransaction![t].dISPLAYFLAG == "Y")
|
||||
ItemDetailView(
|
||||
getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTPROMPT!, getEITTransactionList![parentIndex].collectionTransaction![t].sEGMENTVALUEDSP ?? ""),
|
||||
],
|
||||
).objectContainerView(),
|
||||
separatorBuilder: (cxt, index) => 12.height,
|
||||
itemCount: getEITTransactionList!.length)),
|
||||
floatingActionButton: Container(
|
||||
height: 50,
|
||||
width: 50,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(transform: GradientRotation(.83), begin: Alignment.topRight, end: Alignment.bottomLeft, colors: [
|
||||
MyColors.gradiantEndColor,
|
||||
MyColors.gradiantStartColor,
|
||||
]),
|
||||
),
|
||||
child: const Icon(Icons.add, color: Colors.white, size: 30),
|
||||
).onPress(() {
|
||||
Navigator.pushNamed(context, AppRoutes.addWorkFromHome);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
@ -0,0 +1,376 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:easy_localization/src/public_ext.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_svg/svg.dart';
|
||||
import 'package:mohem_flutter_app/api/worklist/worklist_api_client.dart';
|
||||
import 'package:mohem_flutter_app/app_state/app_state.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/generic_response_model.dart';
|
||||
import 'package:mohem_flutter_app/models/get_notification_buttons_list_model.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/allowed_actions_model.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/itg_request_model.dart';
|
||||
import 'package:mohem_flutter_app/models/itg_forms_models/request_detail_model.dart';
|
||||
import 'package:mohem_flutter_app/ui/work_list/itg_fragments/approval_level_fragment.dart';
|
||||
import 'package:mohem_flutter_app/ui/work_list/itg_fragments/request_detail_fragment.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/dialogs/accept_reject_input_dialog.dart';
|
||||
|
||||
class ItgDetailScreen extends StatefulWidget {
|
||||
ItgDetailScreen({Key? key}) : super(key: key);
|
||||
|
||||
@override
|
||||
_ItgDetailScreenState createState() {
|
||||
return _ItgDetailScreenState();
|
||||
}
|
||||
}
|
||||
|
||||
class _ItgDetailScreenState extends State<ItgDetailScreen> {
|
||||
int tabIndex = 0;
|
||||
PageController controller = PageController();
|
||||
bool showFabOptions = false;
|
||||
|
||||
bool isCloseAvailable = false;
|
||||
bool isApproveAvailable = false;
|
||||
bool isRejectAvailable = false;
|
||||
|
||||
List<AllowedActions> allowedActionList = [];
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
RequestDetails? requestDetails;
|
||||
ITGRequest? itgRequest;
|
||||
|
||||
void getItgData() async {
|
||||
try {
|
||||
Utils.showLoading(context);
|
||||
itgRequest = await WorkListApiClient().getITGFormDetails(requestDetails!.requestType!, requestDetails!.iD!, requestDetails!.itemID!, "");
|
||||
allowedActionList = itgRequest?.allowedActions ?? [];
|
||||
if (allowedActionList.isNotEmpty) {
|
||||
isCloseAvailable = allowedActionList.any((element) => element.action == "CLOSE");
|
||||
isApproveAvailable = itgRequest!.allowedActions!.any((element) => element.action == "Approve");
|
||||
// isAnswerAvailable = itgRequest!.allowedActions!.any((element) => element.action == "Answer");
|
||||
isRejectAvailable = itgRequest!.allowedActions!.any((element) => element.action == "Reject");
|
||||
}
|
||||
Utils.hideLoading(context);
|
||||
setState(() {});
|
||||
} catch (ex) {
|
||||
Utils.hideLoading(context);
|
||||
Utils.handleException(ex, context, null);
|
||||
}
|
||||
}
|
||||
|
||||
void getDataFromState() {
|
||||
if (requestDetails == null) {
|
||||
requestDetails = AppState().requestAllList![AppState().itgWorkListIndex!]; // ModalRoute.of(context)!.settings.arguments as WorkListResponseModel;
|
||||
getItgData();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
getDataFromState();
|
||||
|
||||
return Scaffold(
|
||||
appBar: AppBarWidget(context, title: LocaleKeys.details.tr()),
|
||||
backgroundColor: Colors.white,
|
||||
body: Stack(
|
||||
children: [
|
||||
Column(
|
||||
children: [
|
||||
Container(
|
||||
padding: const EdgeInsets.only(left: 21, right: 21, top: 16, bottom: 16),
|
||||
decoration: const BoxDecoration(
|
||||
borderRadius: BorderRadius.only(
|
||||
bottomLeft: Radius.circular(25),
|
||||
bottomRight: Radius.circular(25),
|
||||
),
|
||||
gradient: LinearGradient(
|
||||
transform: GradientRotation(.83),
|
||||
begin: Alignment.topRight,
|
||||
end: Alignment.bottomLeft,
|
||||
colors: [
|
||||
MyColors.gradiantEndColor,
|
||||
MyColors.gradiantStartColor,
|
||||
],
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
myTab(LocaleKeys.requestDetails.tr(), 0),
|
||||
myTab(LocaleKeys.approvalLevel.tr(), 1),
|
||||
myTab(LocaleKeys.requesterDetails.tr(), 2),
|
||||
],
|
||||
),
|
||||
),
|
||||
PageView(
|
||||
controller: controller,
|
||||
onPageChanged: (pageIndex) {
|
||||
setState(() {
|
||||
tabIndex = pageIndex;
|
||||
});
|
||||
},
|
||||
children: [
|
||||
RequestDetailFragment(fields: itgRequest?.fieldGoups?[1].fields ?? []),
|
||||
ApprovalLevelfragment(
|
||||
wFHistory: itgRequest?.wFHistory ?? [],
|
||||
),
|
||||
RequestDetailFragment(fields: itgRequest?.fieldGoups?[0].fields ?? []),
|
||||
],
|
||||
).expanded,
|
||||
if (isApproveAvailable || isRejectAvailable || isCloseAvailable)
|
||||
Container(
|
||||
padding: const EdgeInsets.only(top: 14, bottom: 14, left: 21, right: 21),
|
||||
decoration: const BoxDecoration(
|
||||
color: Colors.white,
|
||||
border: Border(
|
||||
top: BorderSide(
|
||||
color: MyColors.lightGreyEFColor,
|
||||
width: 1.0,
|
||||
),
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
if (isRejectAvailable)
|
||||
DefaultButton(
|
||||
LocaleKeys.reject.tr(),
|
||||
() => performAction("REJECTED"),
|
||||
colors: const [
|
||||
Color(0xffE47A7E),
|
||||
Color(0xffDE6D71),
|
||||
],
|
||||
).expanded,
|
||||
if (isApproveAvailable && isRejectAvailable) 8.width,
|
||||
if (isApproveAvailable)
|
||||
DefaultButton(
|
||||
LocaleKeys.approve.tr(),
|
||||
() => performAction("APPROVED"),
|
||||
colors: const [
|
||||
Color(0xff28C884),
|
||||
Color(0xff1BB271),
|
||||
],
|
||||
).expanded,
|
||||
if (isCloseAvailable)
|
||||
DefaultButton(
|
||||
LocaleKeys.ok.tr(),
|
||||
() => performAction("CLOSE"),
|
||||
colors: const [
|
||||
Color(0xff32D892),
|
||||
Color(0xff1AB170),
|
||||
],
|
||||
).expanded,
|
||||
8.width,
|
||||
Container(
|
||||
height: 43,
|
||||
width: 43,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: MyColors.lightGreyE6Color,
|
||||
),
|
||||
child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor),
|
||||
).onPress(() {
|
||||
setState(() {
|
||||
showFabOptions = true;
|
||||
});
|
||||
})
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
IgnorePointer(
|
||||
ignoring: !showFabOptions,
|
||||
child: AnimatedOpacity(
|
||||
opacity: showFabOptions ? 1 : 0,
|
||||
duration: const Duration(milliseconds: 250),
|
||||
child: Container(
|
||||
padding: const EdgeInsets.only(left: 21, right: 21, bottom: 75 - 12),
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
color: Colors.white.withOpacity(.67),
|
||||
alignment: Alignment.bottomRight,
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
myFab("Skip", "assets/images/skip.svg").onPress(() {
|
||||
// if (AppState().workList!.length - 1 > AppState().workListIndex!) {
|
||||
// AppState().setWorkListIndex = AppState().workListIndex! + 1;
|
||||
// workListData = null;
|
||||
// showFabOptions = false;
|
||||
// getDataFromState();
|
||||
// } else if (AppState().workList!.length - 1 == AppState().workListIndex!) {
|
||||
// Navigator.pop(context);
|
||||
// }
|
||||
}),
|
||||
12.height,
|
||||
...viewApiButtonsList(allowedActionList),
|
||||
],
|
||||
),
|
||||
),
|
||||
).onPress(() {
|
||||
setState(() {
|
||||
showFabOptions = false;
|
||||
});
|
||||
}),
|
||||
),
|
||||
],
|
||||
),
|
||||
floatingActionButton: (!isApproveAvailable && !isRejectAvailable && !isCloseAvailable)
|
||||
? Container(
|
||||
height: 43,
|
||||
width: 43,
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: MyColors.lightGreyE6Color,
|
||||
),
|
||||
child: Icon(showFabOptions ? Icons.more_vert_rounded : Icons.more_horiz_rounded, color: MyColors.darkIconColor),
|
||||
).onPress(() {
|
||||
setState(() {
|
||||
showFabOptions = true;
|
||||
});
|
||||
})
|
||||
: null,
|
||||
);
|
||||
}
|
||||
|
||||
List<Widget> viewApiButtonsList(List<AllowedActions> allowedActionList) {
|
||||
List<Widget> fabs = [];
|
||||
for (int i = 0; i < allowedActionList.length; i++) {
|
||||
if (allowedActionList[i].action! == "Reject" || allowedActionList[i].action! == "Approve" || allowedActionList[i].action! == "CLOSE") {
|
||||
continue;
|
||||
}
|
||||
fabs.add(myFab(allowedActionList[i].action!, "", isIconAsset: false).paddingOnly(bottom: 12).onPress(() => handleFabAction(allowedActionList[i])));
|
||||
}
|
||||
return fabs;
|
||||
}
|
||||
|
||||
void handleFabAction(AllowedActions action) {
|
||||
switch (action.action) {
|
||||
case "DELEGATE":
|
||||
// do something
|
||||
break;
|
||||
case "REQUEST_INFO":
|
||||
// do something else
|
||||
break;
|
||||
case "RFC":
|
||||
// do something else
|
||||
break;
|
||||
case "UPDATE_ACTION":
|
||||
// do something else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Widget myTab(String title, int index) {
|
||||
bool isSelected = (index == tabIndex);
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
title.toText12(color: isSelected ? Colors.white : Colors.white.withOpacity(.74), isCenter: true),
|
||||
4.height,
|
||||
Container(
|
||||
height: 8,
|
||||
width: 8,
|
||||
decoration: BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
color: isSelected ? Colors.white : Colors.transparent,
|
||||
),
|
||||
).onPress(() {
|
||||
setState(() {
|
||||
showFabOptions = true;
|
||||
});
|
||||
})
|
||||
],
|
||||
).onPress(() {
|
||||
controller.jumpToPage(index);
|
||||
}).expanded;
|
||||
}
|
||||
|
||||
Widget myFab(String title, String icon, {bool isIconAsset = true}) {
|
||||
return Row(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
title.toText16(),
|
||||
14.width,
|
||||
Container(
|
||||
height: 43,
|
||||
width: 43,
|
||||
padding: const EdgeInsets.all(12),
|
||||
decoration: const BoxDecoration(
|
||||
shape: BoxShape.circle,
|
||||
gradient: LinearGradient(
|
||||
transform: GradientRotation(.46),
|
||||
begin: Alignment.topRight,
|
||||
end: Alignment.bottomLeft,
|
||||
colors: [
|
||||
MyColors.gradiantEndColor,
|
||||
MyColors.gradiantStartColor,
|
||||
],
|
||||
),
|
||||
),
|
||||
child: isIconAsset
|
||||
? SvgPicture.asset(icon)
|
||||
: Image.memory(
|
||||
base64Decode(icon),
|
||||
fit: BoxFit.cover,
|
||||
),
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
void performAction(String actionMode) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (cxt) => AcceptRejectInputDialog(
|
||||
message: LocaleKeys.requestedItems.tr(),
|
||||
// notificationGetRespond: notificationNoteInput,
|
||||
onTap: (note) {
|
||||
Map<String, dynamic> payload = {
|
||||
"P_ACTION_MODE": actionMode,
|
||||
"P_APPROVER_INDEX": null,
|
||||
"P_COMMENTS": "",
|
||||
"P_FORWARD_TO_USER_NAME": "",
|
||||
// "P_NOTIFICATION_ID": workListData!.nOTIFICATIONID!,
|
||||
"RespondAttributeList": [
|
||||
// if (notificationNoteInput != null) {notificationNoteInput!.attributeName: note}
|
||||
],
|
||||
};
|
||||
|
||||
performNotificationAction(payload);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void performNotificationAction(Map<String, dynamic> payload) async {
|
||||
try {
|
||||
Utils.showLoading(context);
|
||||
GenericResponseModel model = await WorkListApiClient().postNotificationActions(payload);
|
||||
Utils.hideLoading(context);
|
||||
Utils.showToast(LocaleKeys.yourChangeHasBeenSavedSuccessfully.tr());
|
||||
Navigator.pop(context, true);
|
||||
} catch (ex) {
|
||||
Utils.hideLoading(context);
|
||||
Utils.handleException(ex, context, null);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mohem_flutter_app/classes/colors.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/itg_forms_models/wf_history_model.dart';
|
||||
import 'package:mohem_flutter_app/ui/work_list/sheets/delegate_sheet.dart';
|
||||
import 'package:mohem_flutter_app/ui/work_list/sheets/request_more_info_sheet.dart';
|
||||
import 'package:mohem_flutter_app/widgets/bottom_sheet.dart';
|
||||
import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
|
||||
|
||||
class ApprovalLevelfragment extends StatelessWidget {
|
||||
List<WFHistory> wFHistory;
|
||||
|
||||
ApprovalLevelfragment({Key? key, this.wFHistory = const <WFHistory>[]}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
if (wFHistory.isNotEmpty) wFHistory = wFHistory.reversed.toList();
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: ListView.separated(
|
||||
itemCount: wFHistory.length,
|
||||
padding: const EdgeInsets.all(21),
|
||||
itemBuilder: (context, index) {
|
||||
return showItem(context, wFHistory[index]);
|
||||
},
|
||||
separatorBuilder: (BuildContext context, int index) {
|
||||
return 12.height;
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget showItem(BuildContext context, WFHistory history) {
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(10),
|
||||
boxShadow: [
|
||||
BoxShadow(
|
||||
color: const Color(0xff000000).withOpacity(.05),
|
||||
blurRadius: 26,
|
||||
offset: const Offset(0, -3),
|
||||
),
|
||||
],
|
||||
),
|
||||
clipBehavior: Clip.antiAlias,
|
||||
child: Stack(
|
||||
clipBehavior: Clip.antiAlias,
|
||||
children: [
|
||||
Positioned(
|
||||
left: -20,
|
||||
top: -10,
|
||||
child: Transform.rotate(
|
||||
angle: 15,
|
||||
child: Container(
|
||||
width: 50,
|
||||
height: 30,
|
||||
color: getStatusColor(history.action!),
|
||||
),
|
||||
),
|
||||
),
|
||||
Column(
|
||||
children: [
|
||||
Row(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
CircularAvatar(url: null, isImageBase64: false, height: 34, width: 34),
|
||||
9.width,
|
||||
Expanded(
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
history.name!.toText16(),
|
||||
if ((history.notes ?? "").isNotEmpty) history.notes!.toText12(color: MyColors.grey57Color),
|
||||
4.height,
|
||||
Row(
|
||||
children: [
|
||||
history.action!.toText10(
|
||||
color: getStatusColor(history.action!),
|
||||
),
|
||||
8.width,
|
||||
if (history.date!.isNotEmpty) history.date!.toText12(color: MyColors.lightTextColor),
|
||||
],
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
],
|
||||
).paddingOnly(top: 19, left: 16, right: 16, bottom: 12),
|
||||
Container(width: double.infinity, height: 1, color: MyColors.lightGreyEFColor),
|
||||
Row(
|
||||
children: [
|
||||
LocaleKeys.request_info.tr().toText12(color: MyColors.grey67Color).center.paddingOnly(top: 6, bottom: 6).onPress(() {
|
||||
showMyBottomSheet(context, child: RequestMoreInfoSheet());
|
||||
}).expanded,
|
||||
Container(width: 1, height: 30, color: MyColors.lightGreyEFColor),
|
||||
LocaleKeys.delegate.tr().toText12(color: MyColors.gradiantEndColor).center.paddingOnly(top: 6, bottom: 6).onPress(() {
|
||||
showMyBottomSheet(context, child: DelegateSheet());
|
||||
}).expanded,
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Color getStatusColor(String code) {
|
||||
if (code == "SUBMIT") {
|
||||
return const Color(0xff2E303A);
|
||||
} else if (code == "REJECTED") {
|
||||
return const Color(0xffD02127);
|
||||
} else if (code == "APPROVED" || code == "Requested Information") {
|
||||
return const Color(0xff1FA269);
|
||||
} else if (code == "REQUEST_INFO") {
|
||||
return const Color(0xff2E303A);
|
||||
} else {
|
||||
return const Color(0xff2E303A);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.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/itg_forms_models/fields_model.dart';
|
||||
import 'package:mohem_flutter_app/widgets/item_detail_view_widget.dart';
|
||||
|
||||
class RequestDetailFragment extends StatelessWidget {
|
||||
List<Fields> fields;
|
||||
|
||||
RequestDetailFragment({Key? key, this.fields = const <Fields>[]}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
List<Widget> uiList = [detailView()];
|
||||
return Container(
|
||||
width: double.infinity,
|
||||
height: double.infinity,
|
||||
child: fields.isEmpty
|
||||
? LocaleKeys.noDataAvailable.tr().toText16().center
|
||||
: ListView(
|
||||
padding: const EdgeInsets.all(21),
|
||||
children: uiList,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget detailView() {
|
||||
return ListView.separated(
|
||||
shrinkWrap: true,
|
||||
physics: const NeverScrollableScrollPhysics(),
|
||||
itemBuilder: (cxt, index) {
|
||||
if (fields[index].value == null) {
|
||||
return ItemDetailView(fields[index].title!, fields[index].multipleValue?.join(", ") ?? "");
|
||||
}
|
||||
return ItemDetailView(fields[index].title!, fields[index].value ?? "");
|
||||
},
|
||||
separatorBuilder: (cxt, index) => 4.height,
|
||||
itemCount: fields.length)
|
||||
.objectContainerView();
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue