Merge branch 'master' into development_sikander

merge-requests/31/head
Sikander Saleem 3 years ago
commit 0a73cced51

@ -421,6 +421,8 @@
"fieldIsEmpty": "'{data}' الحقل فارغ. الرجاء التحديد",
"pleaseEnterComments": "الرجاء إدخال التعليقات",
"skip": "يتخطى",
"typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه",
"currentPassword": "كلمة المرور الحاليه",
"profile": {
"reset_password": {
"label": "Reset Password",

@ -420,7 +420,9 @@
"updateMember": "Are You Sure You Want to Update this Member?",
"fieldIsEmpty": "'{data}' Field is empty. Please select",
"pleaseEnterComments": "Please enter comments",
"skip": "skip",
"skip": "Skip",
"typeCurrentPasswordBelow": "Type Your Current password below",
"currentPassword": "Current password",
"profile": {
"reset_password": {
"label": "Reset Password",

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:convert';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
@ -377,7 +378,7 @@ class ProfileApiClient {
}, url, postParams);
}
Future<SubmitContactTransactionList?> submitContactTransactionAddAndUpdate(String actionType, int relationId, List<Map<String, dynamic>> list) async {
Future<SubmitContactTransactionList?> submitContactTransactionAddAndUpdate(String actionType, relationId, List<Map<String, dynamic>> list) async {
String url = "${ApiConsts.erpRest}SUBMIT_CONTACT_TRANSACTION";
Map<String, dynamic> postParams = {
"P_MENU_TYPE": "E",
@ -386,8 +387,14 @@ class ProfileApiClient {
"P_ACTION": actionType,
"P_CONTACT_RELATIONSHIP_ID": relationId,
};
postParams["EITTransactionTBL"] = list;
postParams.addAll(AppState().postParamsJson);
print("postParam:${json.encode(postParams)}");
postParams["EITTransactionTBL"] = list;
list.forEach((element) {
print(json.encode(element));
});
return await ApiClient().postJsonForObject((json) {
GenericResponseModel? responseData = GenericResponseModel.fromJson(json);
return responseData.submitContactTransactionList;

@ -52,6 +52,10 @@ class Utils {
}
}
static Future delay(int millis) async {
return await Future.delayed(Duration(milliseconds: millis));
}
static void showLoading(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) {
_isLoadingVisible = true;
@ -65,10 +69,6 @@ class Utils {
});
}
static Future delay(int millis) async {
return await Future.delayed(Duration(milliseconds: millis));
}
static void hideLoading(BuildContext context) {
if (_isLoadingVisible) {
_isLoadingVisible = false;

@ -435,6 +435,10 @@ class CodegenLoader extends AssetLoader{
"adult": "بالغ",
"updateMember": "هل انت متأكد تريد تحديث بيانات هذا العضو؟",
"fieldIsEmpty": "'{data}' الحقل فارغ. الرجاء التحديد",
"pleaseEnterComments": "الرجاء إدخال التعليقات",
"skip": "يتخطى",
"typeCurrentPasswordBelow": "اكتب كلمة المرور الحاليه",
"currentPassword": "كلمة المرور الحاليه",
"profile": {
"reset_password": {
"label": "Reset Password",
@ -904,6 +908,10 @@ static const Map<String,dynamic> en_US = {
"adult": "Adult",
"updateMember": "Are You Sure You Want to Update this Member?",
"fieldIsEmpty": "'{data}' Field is empty. Please select",
"pleaseEnterComments": "Please enter comments",
"skip": "Skip",
"typeCurrentPasswordBelow": "Type Your Current password below",
"currentPassword": "Current password",
"profile": {
"reset_password": {
"label": "Reset Password",

@ -422,6 +422,8 @@ abstract class LocaleKeys {
static const fieldIsEmpty = 'fieldIsEmpty';
static const pleaseEnterComments = 'pleaseEnterComments';
static const skip = 'skip';
static const typeCurrentPasswordBelow = 'typeCurrentPasswordBelow';
static const currentPassword = 'currentPassword';
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';

@ -790,30 +790,13 @@ class GenericResponseModel {
getCEIDFFStructureList = json['GetCEIDFFStructureList'];
getCEITransactionList = json['GetCEITransactionList'];
getCcpTransactionsList = json['GetCcpTransactionsList'];
if (json['GetContactDetailsList'] != null) {
getContactDetailsList = <GetContactDetailsList>[];
json['GetContactDetailsList'].forEach((v) {
getContactDetailsList!.add(GetContactDetailsList.fromJson(v));
});
}
if (json['GetContactColsStructureList'] != null) {
getContactColsStructureList = <GetContactColsStructureList>[];
json['GetContactColsStructureList'].forEach((v) {
getContactColsStructureList!.add(GetContactColsStructureList.fromJson(v));
});
}
getContactColsStructureList = json['GetContactColsStructureList'];
getContactDetailsList = json['GetContactDetailsList'];
getContactDffStructureList = json['GetContactDffStructureList'];
getContactNotificationBodyList = json["GetContactNotificationBodyList"] == null ? null : GetContactNotificationBodyList.fromJson(json["GetContactNotificationBodyList"]);
if (json['GetContactColsStructureList'] != null) {
getContactColsStructureList = [];
json['GetContactColsStructureList'].forEach((v) {
getContactColsStructureList!.add(GetContactColsStructureList.fromJson(v));
});
}
if (json['GetContactDetailsList'] != null) {
getContactDetailsList = [];
json['GetContactDetailsList'].forEach((v) {
@ -826,8 +809,6 @@ class GenericResponseModel {
getContactDffStructureList!.add(GetContactDffStructureList.fromJson(v));
});
}
// getContactDetailsList = json['GetContactDetailsList'];
// getContactDffStructureList = json['GetContactDffStructureList'];
getContactNotificationBodyList = json["GetContactNotificationBodyList"] == null ? null : GetContactNotificationBodyList.fromJson(json["GetContactNotificationBodyList"]);
if (json['GetCountriesList'] != null) {

@ -116,6 +116,8 @@ class _MonthlyAttendanceScreenState extends State<MonthlyAttendanceScreen> {
initialDate: formattedDate,
firstDate: DateTime(searchYear - 2),
lastDate: DateTime.now(),
confirmText: Text(LocaleKeys.confirm.tr()),
cancelText: Text(LocaleKeys.cancel.tr()),
).then((selectedDate) {
if (selectedDate != null) {
searchMonth = getMonth(selectedDate.month);

@ -164,6 +164,7 @@ class _AppDrawerState extends State<AppDrawer> {
AppState().setPostParamsModel(obj!);
Navigator.pop(context);
widget.onLanguageChange();
setState(() {});
}
void performLogout() async {

@ -64,11 +64,11 @@ class _ChangePasswordScreenState extends State<ChangePasswordScreen> {
ListView(
padding: const EdgeInsets.all(21),
children: [
"Change Password".toText24(isBold: true),
"Type Your Current password below".toText16(),
LocaleKeys.changePassword.tr().toText24(isBold: true),
LocaleKeys.typeCurrentPasswordBelow.tr().toText16(),
16.height,
InputWidget(
"Current password",
LocaleKeys.currentPassword.tr(),
"**********",
oldPassword,
onChange: (value) {

@ -70,6 +70,7 @@ class _EmployeeDetailsState extends State<EmployeeDetails> {
extendBody: true,
backgroundColor: MyColors.lightGreyEFColor,
body: Stack(children: [
getEmployeeSubordinates!.eMPLOYEEIMAGE != null ?
Container(
height: 200,
margin: EdgeInsets.only(top: 30),
@ -80,6 +81,8 @@ class _EmployeeDetailsState extends State<EmployeeDetails> {
decoration: new BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
),
) : Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
SingleChildScrollView(
scrollDirection: Axis.vertical,

@ -169,6 +169,8 @@ class _ViewAttendanceState extends State<ViewAttendance> {
initialDate: formattedDate,
firstDate: DateTime(searchYear - 2),
lastDate: DateTime.now(),
confirmText: Text(LocaleKeys.confirm.tr()),
cancelText: Text(LocaleKeys.cancel.tr()),
).then(
(selectedDate) {
if (selectedDate != null) {

@ -38,7 +38,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
SubmitContactTransactionList? submitContactTransactionList;
dynamic args;
String? date = "MM/DD/YYYY";
var dateTime = DateTime.now().timeZoneOffset;
var dateTime1 = DateTime.now().timeZoneName;
GetApprovesList? getApprovesList;
@ -48,7 +49,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
}
void callAddAndUpdateFamilyMember() async {
try {
try {
Utils.showLoading(context);
getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure();
getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(args['actionType']);
@ -89,11 +90,13 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
Widget build(BuildContext context) {
if (args == null) {
args = ModalRoute.of(context)!.settings.arguments;
callAddAndUpdateFamilyMember();}
callAddAndUpdateFamilyMember();
}
return Scaffold(
appBar: AppBarWidget(
context,
title: LocaleKeys.profile_familyDetails.tr(),),
title: LocaleKeys.profile_familyDetails.tr(),
),
backgroundColor: MyColors.backgroundColor,
body: args['flag'] == 1
? Column(
@ -125,49 +128,45 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
separatorBuilder: (cxt, index) => 0.height,
itemCount: getContactDffStructureList!.length),
]).expanded,
DefaultButton(
LocaleKeys.next.tr(), () async {
submitUpdateForm();
}
).insideContainer,
DefaultButton(LocaleKeys.next.tr(), () async {
submitUpdateForm();
}).insideContainer,
],
)
: args['flag'] == 2
? Column(
children: [
// getContactDetailsList!.isEmpty
ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getContactColsStructureList!.length),
12.height,
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getBasicDetDffStructureList!.length),
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getContactDffStructureList!.length),
]).expanded,
DefaultButton(
LocaleKeys.next.tr(), () async {
// getContactDetailsList!.isEmpty
ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getContactColsStructureList!.length),
12.height,
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getBasicDetDffStructureList!.length),
ListView.separated(
physics: const NeverScrollableScrollPhysics(),
shrinkWrap: true,
itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex);
},
separatorBuilder: (cxt, index) => 0.height,
itemCount: getContactDffStructureList!.length),
]).expanded,
DefaultButton(LocaleKeys.next.tr(), () async {
submitUpdateForm();
}
).insideContainer,
}).insideContainer,
],
)
: Container(),
@ -199,13 +198,23 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
});
} else {
return DynamicTextFieldWidget(
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : "") ,
( model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "")+ (model!.aPPLICATIONCOLUMNNAME == "NATIONAL_IDENTIFIER" ? "1-1111-1111-1" : ""),
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
(model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""),
//isInputTypeNum: true,
onChange: (text) {
model!.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
}
} else if (model.dATATYPE == "NUMBER") {
return DynamicTextFieldWidget(
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
(model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""),
isInputTypeNum: true,
onChange: (text) {
model!.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
} else if (model.dATATYPE == "DATE") {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
@ -214,8 +223,13 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false,
onTap: () async {
DateTime dateValue = await _selectDate(context);
date = DateFormat('yyyy/MM/dd').format(dateValue);
//date = DateFormat('yyyy/MM/dd').format(dateValue);
date = "2022-10-23T09:17:38.653+03:00";
// date = (DateFormat('yyyy-MM-dd').format(dateValue)+"T"+ dateTime.toString() + dateTime1.toString());
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
print(dateTime);
print(dateTime1);
print(date);
setState(() {});
},
).paddingOnly(bottom: 12);
@ -251,11 +265,21 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
// isInputTypeNum: true,
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
}
} else if (model.fORMATTYPE == "N") {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isInputTypeNum: true,
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "X") {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
@ -264,7 +288,9 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false,
onTap: () async {
DateTime dateValue = await _selectDate(context);
date = DateFormat('yyyy/MM/dd').format(dateValue);
date = "2022-10-23T09:17:38.653+03:00";
// date = (DateFormat('yyyy-MM-dd').format(dateValue) +"T"+ dateTime.toString() + dateTime1.toString());
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
setState(() {});
},
@ -300,11 +326,21 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
// isInputTypeNum: true,
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
}
} else if (model.fORMATTYPE == "N") {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isInputTypeNum: true,
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text;
},
).paddingOnly(bottom: 12);
} else if (model.fORMATTYPE == "X") {
return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
@ -313,7 +349,9 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false,
onTap: () async {
DateTime dateValue = await _selectDate(context);
date = DateFormat('yyyy/MM/dd').format(dateValue);
date = "2022-10-23T09:17:38.653+03:00";
// date = (DateFormat('yyyy-MM-dd').format(dateValue)+"T"+ dateTime.toString() + dateTime1.toString());
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
setState(() {});
},
@ -345,8 +383,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
),
);
} else {
DateTime? picked =
await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
if (picked != null && picked != selectedDate) {
time = picked;
}
@ -354,80 +391,81 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
return time;
}
void submitUpdateForm() async {
try {
List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = e!.getContactDetailsList!.nUMBERVALUE;
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.dATEVALUE.toString();
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString();
numberVal = null;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values2 = getContactDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = e!.getContactDetailsList!.nUMBERVALUE;
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.dATEVALUE.toString();
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
numberVal = null;
vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString();
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) {
// String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? "";
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.dATATYPE == 'VARCHAR2') {
dateVal = null;
numberVal = null;
vatcherVal = e!.getContactDetailsList!.vARCHAR2VALUE.toString();
} else if (e.dATATYPE == 'DATE') {
dateVal = e!.getContactDetailsList!.dATEVALUE.toString();
vatcherVal = null;
numberVal = null;
} else if (e.dATATYPE == 'NUMBER') {
dateVal = null;
vatcherVal = null;
numberVal = e!.getContactDetailsList!.nUMBERVALUE;
} else {}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3];
Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(args['actionType'], args['relationID'] ?? 0, valuesFinal);
var transactionId = submitContactTransactionList!.pTRANSACTIONID;
var itemKey = submitContactTransactionList!.pITEMKEY;
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member'));
setState(() {});
} catch (ex) {
Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
// try {
List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.sEGMENTVALUEDSP.toString();
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
vatcherVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
numberVal = null;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values2 = getContactDffStructureList!.map((e) {
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
if (e!.fORMATTYPE == 'N') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else if (e.fORMATTYPE == 'X') {
dateVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
vatcherVal = null;
numberVal = null;
} else {
dateVal = null;
numberVal = null;
vatcherVal = e!.getContactDetailsList!.sEGMENTVALUEDSP;
}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal.toString()).toJson();
}).toList();
List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) {
// String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? "";
String? dateVal = '';
String? vatcherVal = '';
int? numberVal;
print("e.dATATYPE:${e?.dATATYPE}");
if (e!.dATATYPE == 'VARCHAR2') {
dateVal = null;
numberVal = null;
vatcherVal = e.getContactDetailsList?.sEGMENTVALUEDSP ?? "";
} else if (e.dATATYPE == 'DATE') {
dateVal = e.getContactDetailsList!.sEGMENTVALUEDSP.toString();
print("dateVal:${dateVal ?? ""}");
vatcherVal = null;
numberVal = null;
} else if (e.dATATYPE == 'NUMBER') {
dateVal = null;
vatcherVal = null;
numberVal = int.parse(e.getContactDetailsList!.sEGMENTVALUEDSP??"0");
} else {}
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: vatcherVal).toJson();
}).toList();
List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3];
Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(args['actionType'], args['relationID'] ?? null, valuesFinal);
var transactionId = submitContactTransactionList!.pTRANSACTIONID;
var itemKey = submitContactTransactionList!.pITEMKEY;
Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member'));
setState(() {});
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// }
}
}

@ -78,31 +78,33 @@ class _BasicDetailsState extends State<BasicDetails> {
backgroundColor: MyColors.backgroundColor,
body: Column(
children: [
ListView(
padding: const EdgeInsets.all(21),
children: [
getEmployeeBasicDetailsList == null
? const SizedBox().expanded
: (getEmployeeBasicDetailsList!.isEmpty
? Utils.getNoDataWidget(context).expanded
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: getEmployeeBasicDetailsList!
.map((e) => Column(
children: [
e.dISPLAYFLAG == "Y"
? Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
"${e.sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor),
"${e.sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor),
12.height
])
: Container(),
],
))
.toList())
.objectContainerView())
],
).expanded,
Expanded(
child: ListView(
padding: const EdgeInsets.all(21),
children: [
getEmployeeBasicDetailsList == null
? const SizedBox()
: (getEmployeeBasicDetailsList!.isEmpty
? Utils.getNoDataWidget(context)
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: getEmployeeBasicDetailsList!
.map((e) => Column(
children: [
e.dISPLAYFLAG == "Y"
? Column(crossAxisAlignment: CrossAxisAlignment.start, children: [
"${e.sEGMENTPROMPT}".toText13(color: MyColors.lightGrayColor),
"${e.sEGMENTVALUEDSP}".toText16(isBold: true, color: MyColors.blackColor),
12.height
])
: Container(),
],
))
.toList())
.objectContainerView())
],
),
),
DefaultButton(
LocaleKeys.update.tr(),
menuEntries.updateButton == 'Y'

@ -1,6 +1,7 @@
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/profile_api_client.dart';
import 'package:mohem_flutter_app/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/config/routes.dart';
@ -98,11 +99,16 @@ class _ContactDetailsState extends State<ContactDetails> {
separatorBuilder: (cxt, index) => 12.height,
itemCount: getEmployeePhonesList.length),
if (menuEntriesPhone.updateButton == 'Y')
Positioned(
AppState().isArabic(context)? Positioned(
top: 1,
right: 1,
left: 1,
child: const Icon(Icons.edit_location_alt_outlined, size: 20).onPress(updatePhone),
),
)
:Positioned(
top: 1,
right: 1,
child: const Icon(Icons.edit_location_alt_outlined, size: 20).onPress(updatePhone),
),
],
).objectContainerView(),
12.height,

@ -27,7 +27,7 @@ class FamilyMembers extends StatefulWidget {
class _FamilyMembersState extends State<FamilyMembers> {
List<GetEmployeeContactsList> getEmployeeContactsList = [];
int? relationId;
dynamic? relationId;
int? flag;
GetMenuEntriesList menuEntries = GetMenuEntriesList();
@ -97,8 +97,8 @@ class _FamilyMembersState extends State<FamilyMembers> {
style:TextStyle(color: menuEntries.updateButton == 'Y' ? MyColors.grey67Color : MyColors.lightGreyColor, fontSize: 12, letterSpacing: -0.36, fontWeight: FontWeight.w600),
recognizer: TapGestureRecognizer()
..onTap = () async {
relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt();
menuEntries.updateButton == 'Y'? showUpdateAlertDialog(context, relationId!.toInt(), 2, "UPDATE"):null;
relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID;
menuEntries.updateButton == 'Y'? showUpdateAlertDialog(context, relationId, 2, "UPDATE"):null;
}
)
],
@ -118,8 +118,8 @@ class _FamilyMembersState extends State<FamilyMembers> {
),
],
),
).onPress(() { relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID!.toInt();
showRemoveAlertDialog(context, relationId!.toInt());}),
).onPress(() { relationId = getEmployeeContactsList[index]!.cONTACTRELATIONSHIPID;
showRemoveAlertDialog(context, relationId);}),
],
),
],
@ -136,7 +136,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
));
}
void showUpdateAlertDialog(BuildContext context, int relationId, int flag, String actionType) {
void showUpdateAlertDialog(BuildContext context, relationId, int flag, String actionType) {
Widget cancelButton = TextButton(
child: Text(
LocaleKeys.cancel.tr(),
@ -175,7 +175,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
);
}
void showRemoveAlertDialog(BuildContext context, int relationId) {
void showRemoveAlertDialog(BuildContext context, relationId) {
Widget cancelButton = TextButton(
child: Text(
LocaleKeys.cancel.tr(),

@ -44,23 +44,26 @@ class _ProfileScreenState extends State<ProfileScreen> {
backgroundColor: const Color(0xffefefef),
body: Stack(
children: [
Container(
height: 300,
margin: const EdgeInsets.only(top: 50),
decoration: BoxDecoration(
memberInformationList!.eMPLOYEEIMAGE != null
? Container(
height: 300,
margin: const EdgeInsets.only(top: 50),
decoration: BoxDecoration(
image: DecorationImage(
image: MemoryImage(
Utils.dataFromBase64String(memberInformationList.eMPLOYEEIMAGE!),
),
fit: BoxFit.cover),
),
child: BackdropFilter(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 10.0, sigmaY: 10.0),
child: Container(
color: Colors.white.withOpacity(0.0),
),
),
),
): Container(
decoration: BoxDecoration(color: Colors.white.withOpacity(0.0)),
),
SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Column(

@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mohem_flutter_app/api/items_for_sale/items_for_sale_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/config/routes.dart';
@ -98,7 +99,9 @@ class _ItemsForSaleFragmentState extends State<ItemsForSaleFragment> {
currentCategoryID == getSaleCategoriesList[index].categoryID ? const Icon(Icons.check_circle_rounded, color: MyColors.greenColor, size: 16.0) : Container(),
],
).expanded,
getSaleCategoriesList[index].title!.toText10()
AppState().isArabic(context)
?getSaleCategoriesList[index].titleAr!.toText10()
:getSaleCategoriesList[index].title!.toText10()
],
).paddingOnly(left: 10, right: 10, bottom: 10, top: 12).expanded.objectContainerView(disablePadding: true),
),

@ -183,7 +183,6 @@ class _OffersAndDiscountsHomeState extends State<OffersAndDiscountsHome> {
),
),
),
10.height,
AppState().isArabic(context)
? getOffersList.titleAR!.toText16(isBold: true, color: const Color(0xff2B353E), maxlines: 1)
: getOffersList.title!.toText16(isBold: true, color: const Color(0xff2B353E), maxlines: 1),
@ -194,7 +193,7 @@ class _OffersAndDiscountsHomeState extends State<OffersAndDiscountsHome> {
// // }
// ),
getOffersList.description!.toText12(maxLine: 2, color: const Color(0xff535353)),
16.height,
// 8.height,
getOffersList.discount!.toText14(isBold: true, maxlines: 1),
10.height,
Row(
@ -212,7 +211,11 @@ class _OffersAndDiscountsHomeState extends State<OffersAndDiscountsHome> {
if (enteredKeyword.isEmpty) {
results = getOffersList;
} else {
results = getOffersList.where((offer) => offer.title!.toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
if(AppState().isArabic(context)) {
results = getOffersList.where((offer) => offer.titleAR!.toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
} else {
results = getOffersList.where((offer) => offer.title!.toLowerCase().contains(enteredKeyword.toLowerCase())).toList();
}
}
setState(() {
_foundOffersList = results;

@ -465,10 +465,10 @@ class _DelegateSheetState extends State<DelegateSheet> {
child: Row(
children: [
CircularAvatar(
url: actionHistory.employeeImage ?? "",
url: actionHistory.employeeImage,
height: 30,
width: 30,
isImageBase64: true,
isImageBase64: (actionHistory.employeeImage != null || actionHistory.employeeImage!.isNotEmpty) ? true : false,
),
16.width,
Expanded(
@ -510,10 +510,10 @@ class _DelegateSheetState extends State<DelegateSheet> {
child: Row(
children: [
CircularAvatar(
url: actionHistory.employeeImage ?? "",
url: actionHistory.employeeImage,
height: 30,
width: 30,
isImageBase64: true,
isImageBase64: actionHistory.employeeImage != null ? true : false,
),
16.width,
Expanded(

@ -142,10 +142,17 @@ class SelectedItemSheet extends StatelessWidget {
padding: EdgeInsets.only(top: 16, bottom: 16, left: 21, right: 21),
child: Row(
children: [
CircularAvatar(
height: 30,
width: 30,
),
actionHistoryList != null
? CircularAvatar(
height: 30,
width: 30,
url: actionHistoryList!.eMPLOYEEIMAGE,
isImageBase64: true,
)
: CircularAvatar(
height: 30,
width: 30,
),
16.width,
Expanded(
child: (name ?? "").toText12(),

@ -98,6 +98,12 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
if (workListData!.iTEMTYPE == "HRSSA" || workListData!.iTEMTYPE == "STAMP") {
getUserInformation();
}
notificationGetRespondAttributes();
getNotificationButtons();
getAttachments();
getActionHistory();
if (workListData!.iTEMTYPE == "HRSSA") {
if (workListData!.rEQUESTTYPE == "EIT") {
getEitNotificationBody();
@ -130,8 +136,6 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
getPRNotification();
}
notificationGetRespondAttributes();
// List dataToFetch = await Future.wait([
//
// WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!),
@ -142,10 +146,6 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
// actionHistoryList = dataToFetch[1];
// getAttachmentList = dataToFetch[2];
getNotificationButtons();
getActionHistory();
getAttachments();
// if (notificationButtonsList.isNotEmpty) {
// isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE");
// isApproveAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "APPROVED");
@ -354,7 +354,8 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
if (notificationButtonsList[i].bUTTONACTION! == "REJECTED" || notificationButtonsList[i].bUTTONACTION! == "APPROVED" || notificationButtonsList[i].bUTTONACTION! == "CLOSE") {
continue;
}
fabs.add(myFab(notificationButtonsList[i].bUTTONLABEL!, notificationButtonsList[i].bUTTONICON ?? "", isIconAsset: false)
fabs.add(myFab(notificationButtonsList[i].bUTTONLABEL!, notificationButtonsList[i].bUTTONACTION == "DELEGATE" ? "assets/images/delegate.svg" : notificationButtonsList[i].bUTTONICON ?? "",
isIconAsset: notificationButtonsList[i].bUTTONACTION == "DELEGATE" ? true : false,)
.paddingOnly(bottom: 12)
.onPress(() => handleFabAction(notificationButtonsList[i])));
}
@ -486,7 +487,6 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
builder: (cxt) => AcceptRejectInputDialog(
message: LocaleKeys.requestedItems.tr(),
notificationGetRespond: notificationNoteInput,
textEditingController: textEditingController,
onTap: (note) {
Map<String, dynamic> payload = {
"P_ACTION_MODE": actionMode,
@ -772,17 +772,17 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
void getActionHistory() async {
try {
if (apiCallCount == 0) Utils.showLoading(context);
apiCallCount++;
// if (apiCallCount == 0) Utils.showLoading(context);
// apiCallCount++;
actionHistoryList = await WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!);
apiCallCount--;
if (apiCallCount == 0) {
Utils.hideLoading(context);
setState(() {});
}
// apiCallCount--;
// if (apiCallCount == 0) {
// Utils.hideLoading(context);
setState(() {});
// }
} catch (ex) {
apiCallCount--;
Utils.hideLoading(context);
// apiCallCount--;
// Utils.hideLoading(context);
Utils.handleException(ex, context, null);
}
}

@ -440,7 +440,7 @@ class InfoFragment extends StatelessWidget {
Widget getPRNotificationBodyListWidget(GetPrNotificationBodyList getPrNotificationBodyList) {
return Column(
children: [
getPrNotificationBodyList.pINFORMATION.toString().toText14(color: MyColors.textMixColor).objectContainerView(),
getPrNotificationBodyList.pINFORMATION != null ? getPrNotificationBodyList.pINFORMATION.toString().toText14(color: MyColors.textMixColor).objectContainerView() : Container(),
12.height,
Column(
children: [
@ -456,21 +456,23 @@ class InfoFragment extends StatelessWidget {
ItemDetailViewCol(LocaleKeys.id.tr(), workListData!.nOTIFICATIONID?.toString() ?? ""),
ItemDetailViewCol(LocaleKeys.responder.tr(), workListData!.rESPONDER ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol(getPrNotificationBodyList.pRHeader![2].hDRATTRIBUTENAME!, getPrNotificationBodyList.pRHeader![2].hDRATTRIBUTEVALUE ?? ""),
ItemDetailViewCol(getPrNotificationBodyList.pRHeader![0].hDRATTRIBUTENAME!, getPrNotificationBodyList.pRHeader![0].hDRATTRIBUTEVALUE ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol(getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTENAME!, getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTEVALUE ?? ""),
Container(),
isItLast: true,
),
Column(
children: getPRHeaderValues(),
)
],
).objectContainerView(),
],
);
}
List<Widget> getPRHeaderValues() {
List<Widget> pRHeaders = [];
getPrNotificationBodyList!.pRHeader!.forEach((element) {
pRHeaders.add(ItemDetailGrid(ItemDetailViewCol(element.hDRATTRIBUTENAME!, element.hDRATTRIBUTEVALUE!), Container()));
});
return pRHeaders;
}
Widget getContactNotificationBodyListWidget(GetContactNotificationBodyList data) {
bool isOdd = false;
try {

@ -115,37 +115,42 @@ class RequestFragment extends StatelessWidget {
}
Widget prLinesDataView() {
return Column(
children: [
prLinesList[0].dESCRIPTION.toString().toText14(color: MyColors.textMixColor).objectContainerView(),
12.height,
Column(
children: [
ItemDetailGrid(
ItemDetailViewCol("Cost Center", prLinesList[0].cOSTCENTER ?? ""),
ItemDetailViewCol("Code", prLinesList[0].iTEMCODE ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("Unit", prLinesList[0].uOM ?? ""),
ItemDetailViewCol("Price (SAR)", prLinesList[0].uNITPRICE.toString() ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("Amount (SAR)", prLinesList[0].lINEAMOUNT.toString() ?? ""),
ItemDetailViewCol("Quantity", prLinesList[0].qUANTITY.toString() ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("AMU (Last 3 months)", prLinesList[0].iTEMAMU.toString() ?? ""),
Container(),
isItLast: true,
),
// ItemDetailGrid(
// ItemDetailViewCol(getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTENAME!, getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTEVALUE ?? ""),
// Container(),
// isItLast: true,
// ),
],
).objectContainerView(),
],
return ExpandableNotifier(
child: ListView.separated(
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemBuilder: (cxt, index) => ExpandablePanel(
header: prLinesList[index].dESCRIPTION.toString().toText14(color: MyColors.textMixColor),
collapsed: Column(
children: [
ItemDetailGrid(
ItemDetailViewCol("Cost Center", prLinesList[index].cOSTCENTER ?? ""),
ItemDetailViewCol("Code", prLinesList[index].iTEMCODE ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("Unit", prLinesList[index].uOM ?? ""),
ItemDetailViewCol("Price (SAR)", prLinesList[index].uNITPRICE.toString() ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("Amount (SAR)", prLinesList[index].lINEAMOUNT.toString() ?? ""),
ItemDetailViewCol("Quantity", prLinesList[index].qUANTITY.toString() ?? ""),
),
ItemDetailGrid(
ItemDetailViewCol("AMU (Last 3 months)", prLinesList[index].iTEMAMU.toString() ?? ""),
Container(),
isItLast: true,
),
// ItemDetailGrid(
// ItemDetailViewCol(getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTENAME!, getPrNotificationBodyList.pRHeader![1].hDRATTRIBUTEVALUE ?? ""),
// Container(),
// isItLast: true,
// ),
],
),
expanded: const SizedBox(),
).objectContainerView(),
separatorBuilder: (cxt, index) => 12.height,
itemCount: prLinesList.length),
);
}

@ -15,9 +15,9 @@ class AcceptRejectInputDialog extends StatelessWidget {
final String? okTitle;
final NotificationGetRespondAttributesList? notificationGetRespond;
final Function(String) onTap;
final TextEditingController textEditingController;
// final TextEditingController textEditingController;
AcceptRejectInputDialog({Key? key, this.title, @required this.message, this.okTitle, required this.onTap, this.notificationGetRespond, required this.textEditingController}) : super(key: key);
AcceptRejectInputDialog({Key? key, this.title, @required this.message, this.okTitle, required this.onTap, this.notificationGetRespond}) : super(key: key);
String note = "";

Loading…
Cancel
Save