Merge remote-tracking branch 'origin/development_aamir' into development_aamir

merge-requests/131/head
Sikander Saleem 3 years ago
commit 3f8dedbf80

@ -46,15 +46,15 @@ class ChatApiClient {
return userLoginResponse; return userLoginResponse;
} }
Future<List<ChatUser>?> getChatMemberFromSearch(String sName, int cUserId) async { Future<ChatUserModel> getChatMemberFromSearch(String searchParam, int cUserId, int pageNo) async {
Response response = await ApiClient().getJsonForResponse( ChatUserModel chatUserModel;
"${ApiConsts.chatLoginTokenUrl}getUserWithStatusAndFavAsync/$sName/$cUserId", Response response = await ApiClient().postJsonForResponse("${ApiConsts.chatLoginTokenUrl}getUserWithStatusAndFavAsync", {"employeeNumber": cUserId, "userName": searchParam, "pageNumber": pageNo},
token: AppState().chatDetails!.response!.token, token: AppState().chatDetails!.response!.token);
);
if (!kReleaseMode) { if (!kReleaseMode) {
logger.i("res: " + response.body); logger.i("res: " + response.body);
} }
return List<ChatUser>.from(json.decode(response.body).map((x) => ChatUser.fromJson(x))); chatUserModel = chatUserModelFromJson(response.body);
return chatUserModel;
} }
//Get User Recent Chats //Get User Recent Chats

@ -165,4 +165,6 @@ class AppState {
set setemployeeSubordinatesList(List<GetEmployeeSubordinatesList> employeeSubordinatesList) { set setemployeeSubordinatesList(List<GetEmployeeSubordinatesList> employeeSubordinatesList) {
_employeeSubordinatesList = employeeSubordinatesList; _employeeSubordinatesList = employeeSubordinatesList;
} }
bool cancelRequestTrancsection = true;
} }

@ -3,8 +3,8 @@ import 'package:mohem_flutter_app/ui/marathon/widgets/question_card.dart';
class ApiConsts { class ApiConsts {
//static String baseUrl = "http://10.200.204.20:2801/"; // Local server //static String baseUrl = "http://10.200.204.20:2801/"; // Local server
// static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server // static String baseUrl = "https://erptstapp.srca.org.sa"; // SRCA server
static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server // static String baseUrl = "https://uat.hmgwebservices.com"; // UAT server
// static String baseUrl = "https://hmgwebservices.com"; // Live server static String baseUrl = "https://hmgwebservices.com"; // Live server
static String baseUrlServices = baseUrl + "/Services/"; // server static String baseUrlServices = baseUrl + "/Services/"; // server
// static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server // static String baseUrlServices = "https://api.cssynapses.com/tangheem/"; // Live server
static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/"; static String utilitiesRest = baseUrlServices + "Utilities.svc/REST/";

@ -1,5 +1,10 @@
import 'dart:convert';
import 'dart:io'; import 'dart:io';
ChatUserModel chatUserModelFromJson(String str) => ChatUserModel.fromJson(json.decode(str));
String chatUserModelToJson(ChatUserModel data) => json.encode(data.toJson());
class ChatUserModel { class ChatUserModel {
ChatUserModel({ ChatUserModel({
this.response, this.response,
@ -7,16 +12,40 @@ class ChatUserModel {
}); });
List<ChatUser>? response; List<ChatUser>? response;
dynamic errorResponses; List<ErrorResponse>? errorResponses;
factory ChatUserModel.fromJson(Map<String, dynamic> json) => ChatUserModel( factory ChatUserModel.fromJson(Map<String, dynamic> json) => ChatUserModel(
response: json["response"] == null ? null : List<ChatUser>.from(json["response"].map((x) => ChatUser.fromJson(x))), response: json["response"] == null ? null : List<ChatUser>.from(json["response"].map((x) => ChatUser.fromJson(x))),
errorResponses: json["errorResponses"], errorResponses: json["errorResponses"] == null ? null : List<ErrorResponse>.from(json["errorResponses"].map((x) => ErrorResponse.fromJson(x))),
); );
Map<String, dynamic> toJson() => { Map<String, dynamic> toJson() => {
"response": response == null ? null : List<dynamic>.from(response!.map((x) => x.toJson())), "response": response == null ? null : List<dynamic>.from(response!.map((x) => x.toJson())),
"errorResponses": errorResponses, "errorResponses": errorResponses == null ? null : List<dynamic>.from(errorResponses!.map((x) => x.toJson())),
};
}
class ErrorResponse {
ErrorResponse({
this.fieldName,
this.message,
});
dynamic? fieldName;
String? message;
factory ErrorResponse.fromRawJson(String str) => ErrorResponse.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ErrorResponse.fromJson(Map<String, dynamic> json) => ErrorResponse(
fieldName: json["fieldName"],
message: json["message"] == null ? null : json["message"],
);
Map<String, dynamic> toJson() => {
"fieldName": fieldName,
"message": message == null ? null : message,
}; };
} }
@ -34,6 +63,8 @@ class ChatUser {
this.isPin, this.isPin,
this.isFav, this.isFav,
this.isAdmin, this.isAdmin,
this.rKey,
this.totalCount,
this.isTyping, this.isTyping,
this.isImageLoaded, this.isImageLoaded,
this.isImageLoading, this.isImageLoading,
@ -44,7 +75,7 @@ class ChatUser {
String? userName; String? userName;
String? email; String? email;
dynamic? phone; dynamic? phone;
dynamic? title; String? title;
int? userStatus; int? userStatus;
dynamic? image; dynamic? image;
int? unreadMessageCount; int? unreadMessageCount;
@ -52,17 +83,23 @@ class ChatUser {
bool? isPin; bool? isPin;
bool? isFav; bool? isFav;
bool? isAdmin; bool? isAdmin;
dynamic? rKey;
int? totalCount;
bool? isTyping; bool? isTyping;
bool? isImageLoaded; bool? isImageLoaded;
bool? isImageLoading; bool? isImageLoading;
File? userLocalDownlaodedImage; File? userLocalDownlaodedImage;
factory ChatUser.fromRawJson(String str) => ChatUser.fromJson(json.decode(str));
String toRawJson() => json.encode(toJson());
factory ChatUser.fromJson(Map<String, dynamic> json) => ChatUser( factory ChatUser.fromJson(Map<String, dynamic> json) => ChatUser(
id: json["id"] == null ? null : json["id"], id: json["id"] == null ? null : json["id"],
userName: json["userName"] == null ? null : json["userName"], userName: json["userName"] == null ? null : json["userName"],
email: json["email"] == null ? null : json["email"], email: json["email"] == null ? null : json["email"],
phone: json["phone"], phone: json["phone"],
title: json["title"], title: json["title"] == null ? null : json["title"],
userStatus: json["userStatus"] == null ? null : json["userStatus"], userStatus: json["userStatus"] == null ? null : json["userStatus"],
image: json["image"], image: json["image"],
unreadMessageCount: json["unreadMessageCount"] == null ? null : json["unreadMessageCount"], unreadMessageCount: json["unreadMessageCount"] == null ? null : json["unreadMessageCount"],
@ -70,6 +107,8 @@ class ChatUser {
isPin: json["isPin"] == null ? null : json["isPin"], isPin: json["isPin"] == null ? null : json["isPin"],
isFav: json["isFav"] == null ? null : json["isFav"], isFav: json["isFav"] == null ? null : json["isFav"],
isAdmin: json["isAdmin"] == null ? null : json["isAdmin"], isAdmin: json["isAdmin"] == null ? null : json["isAdmin"],
rKey: json["rKey"],
totalCount: json["totalCount"] == null ? null : json["totalCount"],
isTyping: false, isTyping: false,
isImageLoaded: false, isImageLoaded: false,
isImageLoading: true, isImageLoading: true,
@ -80,7 +119,7 @@ class ChatUser {
"userName": userName == null ? null : userName, "userName": userName == null ? null : userName,
"email": email == null ? null : email, "email": email == null ? null : email,
"phone": phone, "phone": phone,
"title": title, "title": title == null ? null : title,
"userStatus": userStatus == null ? null : userStatus, "userStatus": userStatus == null ? null : userStatus,
"image": image, "image": image,
"unreadMessageCount": unreadMessageCount == null ? null : unreadMessageCount, "unreadMessageCount": unreadMessageCount == null ? null : unreadMessageCount,
@ -88,5 +127,7 @@ class ChatUser {
"isPin": isPin == null ? null : isPin, "isPin": isPin == null ? null : isPin,
"isFav": isFav == null ? null : isFav, "isFav": isFav == null ? null : isFav,
"isAdmin": isAdmin == null ? null : isAdmin, "isAdmin": isAdmin == null ? null : isAdmin,
"rKey": rKey,
"totalCount": totalCount == null ? null : totalCount,
}; };
} }

@ -69,6 +69,10 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
//Chat Home Page Counter //Chat Home Page Counter
int chatUConvCounter = 0; int chatUConvCounter = 0;
/// Search Provider
List<ChatUser>? chatUsersList = [];
int pageNo = 1;
Future<void> getUserAutoLoginToken() async { Future<void> getUserAutoLoginToken() async {
userLoginToken.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken(); userLoginToken.UserAutoLoginModel userLoginResponse = await ChatApiClient().getUserLoginToken();
if (userLoginResponse.response != null) { if (userLoginResponse.response != null) {
@ -171,9 +175,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
if (response.statusCode == 204) { if (response.statusCode == 204) {
if (isNewChat) { if (isNewChat) {
userChatHistory = []; userChatHistory = [];
} else if (loadMore) { } else if (loadMore) {}
Utils.showToast("No More Data To Load");
}
} else { } else {
if (loadMore) { if (loadMore) {
List<SingleUserChatModel> temp = getSingleUserChatModel(response.body).reversed.toList(); List<SingleUserChatModel> temp = getSingleUserChatModel(response.body).reversed.toList();
@ -329,6 +331,16 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
user.userStatus = items.first["userStatus"]; user.userStatus = items.first["userStatus"];
} }
} }
if (teamMembersList != null) {
if (teamMembersList.isNotEmpty) {
for (ChatUser user in teamMembersList!) {
if (user.id == items.first["id"]) {
user.userStatus = items.first["userStatus"];
}
}
}
}
notifyListeners(); notifyListeners();
} }
@ -919,7 +931,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
return f.format(data); return f.format(data);
} }
Future<void> favoriteUser({required int userID, required int targetUserID}) async { Future<void> favoriteUser({required int userID, required int targetUserID, required bool fromSearch}) async {
fav.FavoriteChatUser favoriteChatUser = await ChatApiClient().favUser(userID: userID, targetUserID: targetUserID); fav.FavoriteChatUser favoriteChatUser = await ChatApiClient().favUser(userID: userID, targetUserID: targetUserID);
if (favoriteChatUser.response != null) { if (favoriteChatUser.response != null) {
for (ChatUser user in searchedChats!) { for (ChatUser user in searchedChats!) {
@ -931,6 +943,25 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
} }
} }
} }
for (ChatUser user in chatUsersList!) {
if (user.id == favoriteChatUser.response!.targetUserId!) {
user.isFav = favoriteChatUser.response!.isFav;
dynamic contain = favUsersList!.where((ChatUser element) => element.id == favoriteChatUser.response!.targetUserId!);
if (contain.isEmpty) {
favUsersList.add(user);
}
}
}
}
if (fromSearch) {
for (ChatUser user in favUsersList) {
if (user.id == targetUserID) {
user.userLocalDownlaodedImage = null;
user.isImageLoading = false;
user.isImageLoaded = false;
}
}
} }
notifyListeners(); notifyListeners();
} }
@ -949,6 +980,12 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
); );
} }
for (ChatUser user in chatUsersList!) {
if (user.id == favoriteChatUser.response!.targetUserId!) {
user.isFav = favoriteChatUser.response!.isFav;
}
}
notifyListeners(); notifyListeners();
} }
@ -1264,7 +1301,7 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
await Directory(dirPath).create(); await Directory(dirPath).create();
await File('$dirPath/.nomedia').create(); await File('$dirPath/.nomedia').create();
} }
File file = File("$dirPath/${data.currentUserId}-${data.targetUserId}-${DateTime.now().microsecondsSinceEpoch}" + ext); File file = File("$dirPath/${data.currentUserId}-${data.targetUserId}-${DateTime.now().microsecondsSinceEpoch}." + ext);
await file.writeAsBytes(bytes); await file.writeAsBytes(bytes);
return file.path; return file.path;
} }
@ -1288,50 +1325,64 @@ class ChatProviderModel with ChangeNotifier, DiagnosticableTreeMixin {
teamMembersList = []; teamMembersList = [];
isLoading = true; isLoading = true;
if (AppState().getemployeeSubordinatesList.isNotEmpty) { if (AppState().getemployeeSubordinatesList.isNotEmpty) {
print("=============== In App State =====================");
getEmployeeSubordinatesList = AppState().getemployeeSubordinatesList; getEmployeeSubordinatesList = AppState().getemployeeSubordinatesList;
for (GetEmployeeSubordinatesList element in getEmployeeSubordinatesList) { for (GetEmployeeSubordinatesList element in getEmployeeSubordinatesList) {
print(element.eMPLOYEEEMAILADDRESS); if (element.eMPLOYEEEMAILADDRESS != null) {
teamMembersList.add( if (element.eMPLOYEEEMAILADDRESS!.isNotEmpty) {
ChatUser( teamMembersList.add(
id: int.parse(element.eMPLOYEENUMBER!), ChatUser(
email: element.eMPLOYEEEMAILADDRESS, id: int.parse(element.eMPLOYEENUMBER!),
userName: element.eMPLOYEENAME, email: element.eMPLOYEEEMAILADDRESS,
phone: element.eMPLOYEEMOBILENUMBER, userName: element.eMPLOYEENAME,
userStatus: 0, phone: element.eMPLOYEEMOBILENUMBER,
unreadMessageCount: 0, userStatus: 0,
isFav: false, unreadMessageCount: 0,
isTyping: false, isFav: false,
isImageLoading: false, isTyping: false,
image: element.eMPLOYEEIMAGE ?? "", isImageLoading: false,
isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true, image: element.eMPLOYEEIMAGE ?? "",
userLocalDownlaodedImage:element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true,
), userLocalDownlaodedImage: element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!),
); ),
);
}
}
} }
} else { } else {
getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates("", "", ""); getEmployeeSubordinatesList = await MyTeamApiClient().getEmployeeSubordinates("", "", "");
AppState().setemployeeSubordinatesList = getEmployeeSubordinatesList; AppState().setemployeeSubordinatesList = getEmployeeSubordinatesList;
for (GetEmployeeSubordinatesList element in getEmployeeSubordinatesList) { for (GetEmployeeSubordinatesList element in getEmployeeSubordinatesList) {
print(element.eMPLOYEEEMAILADDRESS); if (element.eMPLOYEEEMAILADDRESS != null) {
teamMembersList.add( if (element.eMPLOYEEEMAILADDRESS!.isNotEmpty) {
ChatUser( teamMembersList.add(
id: int.parse(element.eMPLOYEENUMBER!), ChatUser(
email: element.eMPLOYEEEMAILADDRESS, id: int.parse(element.eMPLOYEENUMBER!),
userName: element.eMPLOYEENAME, email: element.eMPLOYEEEMAILADDRESS,
phone: element.eMPLOYEEMOBILENUMBER, userName: element.eMPLOYEENAME,
userStatus: 0, phone: element.eMPLOYEEMOBILENUMBER,
unreadMessageCount: 0, userStatus: 0,
isFav: false, unreadMessageCount: 0,
isTyping: false, isFav: false,
isImageLoading: false, isTyping: false,
image: element.eMPLOYEEIMAGE ?? "", isImageLoading: false,
isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true, image: element.eMPLOYEEIMAGE ?? "",
userLocalDownlaodedImage: element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!), isImageLoaded: element.eMPLOYEEIMAGE == null ? false : true,
), userLocalDownlaodedImage: element.eMPLOYEEIMAGE == null ? null : await downloadImageLocal(element.eMPLOYEEIMAGE ?? "", element.eMPLOYEENUMBER!),
); ),
);
}
}
} }
} }
for (ChatUser user in searchedChats!) {
for (ChatUser teamUser in teamMembersList!) {
if (user.id == teamUser.id) {
teamUser.userStatus = user.userStatus;
}
}
}
isLoading = false; isLoading = false;
notifyListeners(); notifyListeners();
} }

@ -87,7 +87,6 @@ class _ChatDetailScreenState extends State<ChatDetailScreen> {
context, context,
title: params!.chatUser!.userName.toString().replaceAll(".", " ").capitalizeFirstofEach, title: params!.chatUser!.userName.toString().replaceAll(".", " ").capitalizeFirstofEach,
showHomeButton: false, showHomeButton: false,
image: params!.chatUser!.image == null || params!.chatUser!.image.isEmpty ? null : params!.chatUser!.image,
showTyping: true, showTyping: true,
chatUser: params!.chatUser, chatUser: params!.chatUser,
actions: [ actions: [

@ -179,6 +179,7 @@ class _ChatHomeScreenState extends State<ChatHomeScreen> {
m.favoriteUser( m.favoriteUser(
userID: AppState().chatDetails!.response!.id!, userID: AppState().chatDetails!.response!.id!,
targetUserID: m.searchedChats![index].id!, targetUserID: m.searchedChats![index].id!,
fromSearch: false
); );
} else if (m.searchedChats![index].isFav == true) { } else if (m.searchedChats![index].isFav == true) {
m.unFavoriteUser( m.unFavoriteUser(
@ -189,6 +190,7 @@ class _ChatHomeScreenState extends State<ChatHomeScreen> {
m.favoriteUser( m.favoriteUser(
userID: AppState().chatDetails!.response!.id!, userID: AppState().chatDetails!.response!.id!,
targetUserID: m.searchedChats![index].id!, targetUserID: m.searchedChats![index].id!,
fromSearch: false
); );
} }
}, },
@ -238,6 +240,7 @@ class _ChatHomeScreenState extends State<ChatHomeScreen> {
), ),
), ),
onPressed: () async { onPressed: () async {
print(AppState().chatDetails!.response!.token);
showMyBottomSheet( showMyBottomSheet(
context, context,
callBackFunc: () {}, callBackFunc: () {},

@ -84,24 +84,24 @@ class _MyTeamScreenState extends State<MyTeamScreen> {
), ),
), ),
), ),
// Positioned( Positioned(
// right: 5, right: 5,
// bottom: 1, bottom: 1,
// child: Container( child: Container(
// width: 10, width: 10,
// height: 10, height: 10,
// decoration: BoxDecoration( decoration: BoxDecoration(
// color: m.teamMembersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, color: m.teamMembersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red,
// ), ),
// ).circle(10), ).circle(10),
// ) )
], ],
), ),
Column( Column(
mainAxisAlignment: MainAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
(m.teamMembersList![index].userName! ?? "").toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 13), (m.teamMembersList![index].userName!.replaceFirst(".", " ").capitalizeFirstofEach ?? "").toText14(color: MyColors.darkTextColor).paddingOnly(left: 11, top: 13),
], ],
).expanded, ).expanded,
// SizedBox( // SizedBox(

@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/date_uitl.dart'; import 'package:mohem_flutter_app/classes/date_uitl.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
@ -141,12 +142,13 @@ class _AddLeaveBalanceScreenState extends State<AddLeaveBalanceScreen> {
empID: selectedID); empID: selectedID);
Utils.hideLoading(context); Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
var res = await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance", selectedEmployeeID: selectedID)); arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submit.pTRANSACTIONID!, "", "add_leave_balance", selectedEmployeeID: selectedID));
if (res != null && res == true) {
Utils.showLoading(context); if (!AppState().cancelRequestTrancsection) {
return;
} }
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!); await LeaveBalanceApiClient().cancelHrTransaction(submit.pTRANSACTIONID!);
Utils.hideLoading(context); Utils.hideLoading(context);
} catch (ex) { } catch (ex) {

@ -1,8 +1,6 @@
import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
@ -58,6 +56,7 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
AppState().cancelRequestTrancsection = true;
} }
void getApproverList() async { void getApproverList() async {
@ -138,9 +137,9 @@ class _RequestSubmitScreenState extends State<RequestSubmitScreen> {
params!.transactionId, params!.transactionId,
); );
} else {} } else {}
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr(), longDuration: true); Utils.showToast(LocaleKeys.yourRequestHasBeenSubmittedForApprovals.tr(), longDuration: true);
AppState().cancelRequestTrancsection = false;
Navigator.of(context).popUntil((route) => route.settings.name == AppRoutes.dashboard); Navigator.of(context).popUntil((route) => route.settings.name == AppRoutes.dashboard);
Navigator.pushNamed(context, AppRoutes.workList); Navigator.pushNamed(context, AppRoutes.workList);
} catch (ex) { } catch (ex) {

@ -5,6 +5,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
@ -57,7 +58,7 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
} }
void validateTransaction() async { void validateTransaction() async {
// try { try {
Utils.showLoading(context); Utils.showLoading(context);
List<Map<String, dynamic>> values = getEitDffStructureList!.map((e) { List<Map<String, dynamic>> values = getEitDffStructureList!.map((e) {
String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? ""; String tempVar = e.eSERVICESDV?.pIDCOLUMNNAME ?? "";
@ -95,13 +96,16 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
Utils.hideLoading(context); Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit')); arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitEITTransactionList.pTRANSACTIONID!, submitEITTransactionList.pITEMKEY!, 'eit'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context); Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitEITTransactionList.pTRANSACTIONID!); await LeaveBalanceApiClient().cancelHrTransaction(submitEITTransactionList.pTRANSACTIONID!);
Utils.hideLoading(context); Utils.hideLoading(context);
// } catch (ex) { } catch (ex) {
// Utils.hideLoading(context); Utils.hideLoading(context);
// Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
// } }
} }
String dESCFLEXCONTEXTCODE = ""; String dESCFLEXCONTEXTCODE = "";
@ -188,7 +192,8 @@ class _DynamicInputScreenState extends State<DynamicInputScreen> {
// Utils.hideLoading(context); // Utils.hideLoading(context);
} }
} else if (values.isNotEmpty) { } else if (values.isNotEmpty) {
ESERVICESDV defaultValue = await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values, empID: dynamicParams!.selectedEmp); ESERVICESDV defaultValue =
await MyAttendanceApiClient().getDefaultValue(segmentId, structureList.dESCFLEXCONTEXTCODE!, structureList.dESCFLEXNAME!, values, empID: dynamicParams!.selectedEmp);
int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId); int index = getEitDffStructureList!.indexWhere((element) => element.sEGMENTNAME == segmentId);
getEitDffStructureList![index].eSERVICESDV = defaultValue; getEitDffStructureList![index].eSERVICESDV = defaultValue;
} }

@ -1,11 +1,16 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/profile_api_client.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/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.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/extensions/widget_extensions.dart';
import 'package:mohem_flutter_app/generated/locale_keys.g.dart'; import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart'; import 'package:mohem_flutter_app/models/dyanmic_forms/validate_eit_transaction_model.dart';
@ -17,11 +22,16 @@ import 'package:mohem_flutter_app/models/profile/get_contact_details_list.dart';
import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
import 'package:easy_localization/src/public_ext.dart';
class FamilyMemberScreenParams {
String? actionType;
int relationID;
int? flag;
FamilyMemberScreenParams(this.relationID, {this.actionType, this.flag});
}
class AddUpdateFamilyMember extends StatefulWidget { class AddUpdateFamilyMember extends StatefulWidget {
const AddUpdateFamilyMember({Key? key}) : super(key: key); const AddUpdateFamilyMember({Key? key}) : super(key: key);
@ -36,10 +46,12 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
List<GetContactDffStructureList?> getContactDffStructureList = []; List<GetContactDffStructureList?> getContactDffStructureList = [];
List<GetContactDetailsList?> getContactDetailsList = []; List<GetContactDetailsList?> getContactDetailsList = [];
SubmitContactTransactionList? submitContactTransactionList; SubmitContactTransactionList? submitContactTransactionList;
dynamic args;
//dynamic args;
FamilyMemberScreenParams? params;
String? date = "MM/DD/YYYY"; String? date = "MM/DD/YYYY";
var dateTime = DateTime.now().timeZoneOffset; Duration dateTime = DateTime.now().timeZoneOffset;
var dateTime1 = DateTime.now().timeZoneName; String dateTime1 = DateTime.now().timeZoneName;
GetApprovesList? getApprovesList; GetApprovesList? getApprovesList;
@ -52,9 +64,9 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
try { try {
Utils.showLoading(context); Utils.showLoading(context);
getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure(); getBasicDetDffStructureList = await ProfileApiClient().getBasicDetDffStructure();
getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(args['actionType']); getContactColsStructureList = await ProfileApiClient().getContactColsStructureList(params!.actionType.toString());
getContactDffStructureList = await ProfileApiClient().getContactDffStructureList(); getContactDffStructureList = await ProfileApiClient().getContactDffStructureList();
if (args['actionType'] == "ADD") { if (params!.actionType == "ADD") {
getBasicDetDffStructureList?.forEach((element) { getBasicDetDffStructureList?.forEach((element) {
element?.getContactDetailsList = new GetContactDetailsList(); element?.getContactDetailsList = new GetContactDetailsList();
}); });
@ -64,8 +76,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
getContactDffStructureList?.forEach((element) { getContactDffStructureList?.forEach((element) {
element?.getContactDetailsList = new GetContactDetailsList(); element?.getContactDetailsList = new GetContactDetailsList();
}); });
} else if (args['actionType'] == "UPDATE") { } else if (params!.actionType == "UPDATE") {
getContactDetailsList = await ProfileApiClient().getContactDetailsList(args['relationID']); getContactDetailsList = await ProfileApiClient().getContactDetailsList(params!.relationID);
getBasicDetDffStructureList?.forEach((element) { getBasicDetDffStructureList?.forEach((element) {
element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME); element?.getContactDetailsList = getContactDetailsList?.singleWhere((userDetail) => userDetail?.aPPLICATIONCOLUMNNAME == element?.aPPLICATIONCOLUMNNAME);
@ -88,8 +100,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
if (args == null) { if (params == null) {
args = ModalRoute.of(context)!.settings.arguments; params = ModalRoute.of(context)!.settings.arguments as FamilyMemberScreenParams;
callAddAndUpdateFamilyMember(); callAddAndUpdateFamilyMember();
} }
return Scaffold( return Scaffold(
@ -98,45 +110,48 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
title: LocaleKeys.profile_familyDetails.tr(), title: LocaleKeys.profile_familyDetails.tr(),
), ),
backgroundColor: MyColors.backgroundColor, backgroundColor: MyColors.backgroundColor,
body: args['flag'] == 1 body: params!.flag == 1
? Column( ? Column(
children: [ children: [
ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ ListView(
ListView.separated( physics: const BouncingScrollPhysics(),
physics: const NeverScrollableScrollPhysics(), padding: const EdgeInsets.all(21),
shrinkWrap: true, children: [
itemBuilder: (BuildContext cxt, int parentIndex) { ListView.separated(
return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); physics: const NeverScrollableScrollPhysics(),
}, shrinkWrap: true,
separatorBuilder: (cxt, index) => 0.height, itemBuilder: (BuildContext cxt, int parentIndex) {
itemCount: getContactColsStructureList!.length), return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex);
12.height, },
ListView.separated( separatorBuilder: (BuildContext cxt, int index) => 0.height,
physics: const NeverScrollableScrollPhysics(), itemCount: getContactColsStructureList!.length),
shrinkWrap: true, 12.height,
itemBuilder: (BuildContext cxt, int parentIndex) { ListView.separated(
return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); physics: const NeverScrollableScrollPhysics(),
}, shrinkWrap: true,
separatorBuilder: (cxt, index) => 0.height, itemBuilder: (BuildContext cxt, int parentIndex) {
itemCount: getBasicDetDffStructureList!.length), return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex);
ListView.separated( },
physics: const NeverScrollableScrollPhysics(), separatorBuilder: (BuildContext cxt, int index) => 0.height,
shrinkWrap: true, itemCount: getBasicDetDffStructureList!.length),
itemBuilder: (BuildContext cxt, int parentIndex) { ListView.separated(
return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); physics: const NeverScrollableScrollPhysics(),
}, shrinkWrap: true,
separatorBuilder: (cxt, index) => 0.height, itemBuilder: (BuildContext cxt, int parentIndex) {
itemCount: getContactDffStructureList!.length), return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex);
]).expanded, },
separatorBuilder: (BuildContext cxt, int index) => 0.height,
itemCount: getContactDffStructureList!.length),
],
).expanded,
DefaultButton(LocaleKeys.next.tr(), () async { DefaultButton(LocaleKeys.next.tr(), () async {
submitUpdateForm(); submitUpdateForm();
}).insideContainer, }).insideContainer,
], ],
) )
: args['flag'] == 2 : params!.flag == 2
? Column( ? Column(
children: [ children: [
// getContactDetailsList!.isEmpty
ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [ ListView(physics: const BouncingScrollPhysics(), padding: const EdgeInsets.all(21), children: [
ListView.separated( ListView.separated(
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
@ -144,7 +159,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
itemBuilder: (BuildContext cxt, int parentIndex) { itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex); return parseDynamicFormatTypeCols(getContactColsStructureList![parentIndex], parentIndex);
}, },
separatorBuilder: (cxt, index) => 0.height, separatorBuilder: (BuildContext cxt, int index) => 0.height,
itemCount: getContactColsStructureList!.length), itemCount: getContactColsStructureList!.length),
12.height, 12.height,
ListView.separated( ListView.separated(
@ -153,7 +168,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
itemBuilder: (BuildContext cxt, int parentIndex) { itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex); return parseDynamicFormatTypeBasicDetDff(getBasicDetDffStructureList![parentIndex], parentIndex);
}, },
separatorBuilder: (cxt, index) => 0.height, separatorBuilder: (BuildContext cxt, int index) => 0.height,
itemCount: getBasicDetDffStructureList!.length), itemCount: getBasicDetDffStructureList!.length),
ListView.separated( ListView.separated(
physics: const NeverScrollableScrollPhysics(), physics: const NeverScrollableScrollPhysics(),
@ -161,7 +176,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
itemBuilder: (BuildContext cxt, int parentIndex) { itemBuilder: (BuildContext cxt, int parentIndex) {
return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex); return parseDynamicFormatTypeContactDff(getContactDffStructureList![parentIndex], parentIndex);
}, },
separatorBuilder: (cxt, index) => 0.height, separatorBuilder: (BuildContext cxt, int index) => 0.height,
itemCount: getContactDffStructureList!.length), itemCount: getContactDffStructureList!.length),
]).expanded, ]).expanded,
DefaultButton(LocaleKeys.next.tr(), () async { DefaultButton(LocaleKeys.next.tr(), () async {
@ -181,27 +196,27 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
if (model.dATATYPE == "VARCHAR2") { if (model.dATATYPE == "VARCHAR2") {
if (model!.objectValuesList?.isNotEmpty ?? false) { if (model!.objectValuesList?.isNotEmpty ?? false) {
return PopupMenuButton( return PopupMenuButton(
child: DynamicTextFieldWidget( child: DynamicTextFieldWidget(
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isEnable: false, isEnable: false,
isPopup: true, isPopup: true,
).paddingOnly(bottom: 12), ).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[ itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getContactColsStructureList[index]!.objectValuesList!.length; i++) for (int i = 0; i < getContactColsStructureList[index]!.objectValuesList!.length; i++)
PopupMenuItem<int>(child: Text(getContactColsStructureList[index]!.objectValuesList![i].mEANING.toString()), value: i), PopupMenuItem<int>(child: Text(getContactColsStructureList[index]!.objectValuesList![i].mEANING.toString()), value: i),
], ],
onSelected: (int popupIndex) { onSelected: (int popupIndex) {
model.getContactDetailsList!.sEGMENTVALUEDSP = getContactColsStructureList[index]!.objectValuesList![popupIndex].mEANING.toString(); model.getContactDetailsList!.sEGMENTVALUEDSP = getContactColsStructureList[index]!.objectValuesList![popupIndex].mEANING.toString();
model.getContactDetailsList!.vARCHAR2VALUE = getContactColsStructureList[index]!.objectValuesList![popupIndex].cODE.toString(); model.getContactDetailsList!.vARCHAR2VALUE = getContactColsStructureList[index]!.objectValuesList![popupIndex].cODE.toString();
setState(() {}); setState(() {});
}); },
);
} else { } else {
return DynamicTextFieldWidget( return DynamicTextFieldWidget(
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
(model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""), (model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""),
//isInputTypeNum: true, onChange: (String text) {
onChange: (text) {
model!.getContactDetailsList!.sEGMENTVALUEDSP = text; model!.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -211,7 +226,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
(model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""), (model!.getContactDetailsList!.sEGMENTVALUEDSP ?? ""),
isInputTypeNum: true, isInputTypeNum: true,
onChange: (text) { onChange: (String text) {
model!.getContactDetailsList!.sEGMENTVALUEDSP = text; model!.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -223,13 +238,8 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false, isEnable: false,
onTap: () async { onTap: () async {
DateTime dateValue = await _selectDate(context); 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)); date = (DateFormat('yyyy-MM-dd').format(dateValue));
model!.getContactDetailsList!.sEGMENTVALUEDSP = date; model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
print(dateTime);
print(dateTime1);
print(date);
setState(() {}); setState(() {});
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -245,28 +255,28 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
if (model!.fORMATTYPE == "C") { if (model!.fORMATTYPE == "C") {
if (model!.eSERVICESVS?.isNotEmpty ?? false) { if (model!.eSERVICESVS?.isNotEmpty ?? false) {
return PopupMenuButton( return PopupMenuButton(
child: DynamicTextFieldWidget( child: DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isEnable: false, isEnable: false,
isPopup: true, isPopup: true,
).paddingOnly(bottom: 12), ).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[ itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getBasicDetDffStructureList[index]!.eSERVICESVS!.length; i++) for (int i = 0; i < getBasicDetDffStructureList[index]!.eSERVICESVS!.length; i++)
PopupMenuItem<int>(child: Text(getBasicDetDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), PopupMenuItem<int>(child: Text(getBasicDetDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i),
], ],
onSelected: (int popupIndex) { onSelected: (int popupIndex) {
model.getContactDetailsList!.sEGMENTVALUEDSP = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); model.getContactDetailsList!.sEGMENTVALUEDSP = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString();
model.getContactDetailsList!.vARCHAR2VALUE = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); model.getContactDetailsList!.vARCHAR2VALUE = getBasicDetDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString();
setState(() {}); setState(() {});
}); },
);
} else { } else {
return DynamicTextFieldWidget( return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
// isInputTypeNum: true, onChange: (String text) {
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text; model.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -276,7 +286,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isInputTypeNum: true, isInputTypeNum: true,
onChange: (text) { onChange: (String text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text; model.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -289,8 +299,6 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
onTap: () async { onTap: () async {
DateTime dateValue = await _selectDate(context); DateTime dateValue = await _selectDate(context);
date = (DateFormat('yyyy-MM-dd').format(dateValue)); date = (DateFormat('yyyy-MM-dd').format(dateValue));
// date = (DateFormat('yyyy-MM-dd').format(dateValue) +"T"+ dateTime.toString() + dateTime1.toString());
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date; model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
setState(() {}); setState(() {});
}, },
@ -307,27 +315,27 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
if (model!.fORMATTYPE == "C") { if (model!.fORMATTYPE == "C") {
if (model.eSERVICESVS?.isNotEmpty ?? false) { if (model.eSERVICESVS?.isNotEmpty ?? false) {
return PopupMenuButton( return PopupMenuButton(
child: DynamicTextFieldWidget( child: DynamicTextFieldWidget(
(model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""), (model!.sEGMENTPROMPT ?? "") + (model!.rEQUIREDFLAG == "Y" ? "*" : ""),
model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model!.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isEnable: false, isEnable: false,
isPopup: true, isPopup: true,
).paddingOnly(bottom: 12), ).paddingOnly(bottom: 12),
itemBuilder: (_) => <PopupMenuItem<int>>[ itemBuilder: (_) => <PopupMenuItem<int>>[
for (int i = 0; i < getContactDffStructureList[index]!.eSERVICESVS!.length; i++) for (int i = 0; i < getContactDffStructureList[index]!.eSERVICESVS!.length; i++)
PopupMenuItem<int>(child: Text(getContactDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i), PopupMenuItem<int>(child: Text(getContactDffStructureList[index]!.eSERVICESVS![i].vALUECOLUMNNAME.toString()), value: i),
], ],
onSelected: (int popupIndex) { onSelected: (int popupIndex) {
model.getContactDetailsList!.sEGMENTVALUEDSP = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString(); model.getContactDetailsList!.sEGMENTVALUEDSP = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].vALUECOLUMNNAME.toString();
model.getContactDetailsList!.vARCHAR2VALUE = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString(); model.getContactDetailsList!.vARCHAR2VALUE = getContactDffStructureList[index]!.eSERVICESVS![popupIndex].iDCOLUMNNAME.toString();
setState(() {}); setState(() {});
}); },
);
} else { } else {
return DynamicTextFieldWidget( return DynamicTextFieldWidget(
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
// isInputTypeNum: true, onChange: (String text) {
onChange: (text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text; model.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -337,7 +345,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
(model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""), (model.sEGMENTPROMPT ?? "") + (model.rEQUIREDFLAG == "Y" ? "*" : ""),
model.getContactDetailsList!.sEGMENTVALUEDSP ?? "", model.getContactDetailsList!.sEGMENTVALUEDSP ?? "",
isInputTypeNum: true, isInputTypeNum: true,
onChange: (text) { onChange: (String text) {
model.getContactDetailsList!.sEGMENTVALUEDSP = text; model.getContactDetailsList!.sEGMENTVALUEDSP = text;
}, },
).paddingOnly(bottom: 12); ).paddingOnly(bottom: 12);
@ -349,9 +357,7 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
isEnable: false, isEnable: false,
onTap: () async { onTap: () async {
DateTime dateValue = await _selectDate(context); DateTime dateValue = await _selectDate(context);
// date = "2022-10-23T09:17:38.653+03:00";
date = (DateFormat('yyyy-MM-dd').format(dateValue)); date = (DateFormat('yyyy-MM-dd').format(dateValue));
// date = DateFormat('yyyy/MM/dd').format(dateValue);
model!.getContactDetailsList!.sEGMENTVALUEDSP = date; model!.getContactDetailsList!.sEGMENTVALUEDSP = date;
setState(() {}); setState(() {});
}, },
@ -367,13 +373,13 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
if (!Platform.isIOS) { if (!Platform.isIOS) {
await showCupertinoModalPopup( await showCupertinoModalPopup(
context: context, context: context,
builder: (cxt) => Container( builder: (BuildContext cxt) => Container(
height: 250, height: 250,
color: Colors.white, color: Colors.white,
child: CupertinoDatePicker( child: CupertinoDatePicker(
backgroundColor: Colors.white, backgroundColor: Colors.white,
mode: CupertinoDatePickerMode.date, mode: CupertinoDatePickerMode.date,
onDateTimeChanged: (value) { onDateTimeChanged: (DateTime value) {
if (value != null && value != selectedDate) { if (value != null && value != selectedDate) {
time = value; time = value;
} }
@ -392,7 +398,6 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
} }
void submitUpdateForm() async { void submitUpdateForm() async {
print("submit");
try { try {
List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) { List<Map<String, dynamic>> values1 = getBasicDetDffStructureList!.map((e) {
String? dateVal = ''; String? dateVal = '';
@ -441,12 +446,10 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: varChar).toJson(); return ValidateEitTransactionModel(dATEVALUE: dateVal, nAME: e.aPPLICATIONCOLUMNNAME, nUMBERVALUE: numberVal, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: varChar).toJson();
}).toList(); }).toList();
List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) { List<Map<String, dynamic>> values3 = getContactColsStructureList!.map((e) {
// String tempVar = e!.getContactDetailsList!.sEGMENTVALUEDSP ?? "";
String? dateVal = ''; String? dateVal = '';
dynamic? varChar1 = ''; String? varChar1 = '';
int? numberVal; int? numberVal;
print("e.dATATYPE:${e?.dATATYPE}");
if (e!.dATATYPE == 'VARCHAR2') { if (e!.dATATYPE == 'VARCHAR2') {
dateVal = null; dateVal = null;
numberVal = null; numberVal = null;
@ -468,15 +471,18 @@ class _AddUpdateFamilyMemberState extends State<AddUpdateFamilyMember> {
}).toList(); }).toList();
List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3]; List<Map<String, dynamic>> valuesFinal = [...values1, ...values2, ...values3];
Utils.showLoading(context); Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(args['actionType'], args['relationID'] ?? null, valuesFinal); submitContactTransactionList = await ProfileApiClient().submitContactTransactionAddAndUpdate(params!.actionType!, params!.relationID, valuesFinal);
var transactionId = submitContactTransactionList!.pTRANSACTIONID; Utils.hideLoading(context);
var itemKey = submitContactTransactionList!.pITEMKEY; await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), submitContactTransactionList!.pTRANSACTIONID!, submitContactTransactionList!.pITEMKEY!, 'family_member'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitContactTransactionList!.pTRANSACTIONID!);
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member'));
setState(() {}); setState(() {});
} catch (ex) { } catch (ex) {
print(ex);
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);
} }

@ -1,6 +1,11 @@
import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/profile_api_client.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/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
@ -10,13 +15,12 @@ import 'package:mohem_flutter_app/models/get_approves_list_model.dart';
import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart'; import 'package:mohem_flutter_app/models/profile/submit_contact_transaction_list_model.dart';
import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart'; import 'package:mohem_flutter_app/ui/misc/request_submit_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.dart'; import 'package:mohem_flutter_app/widgets/app_bar_widget.dart';
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
class DeleteFamilyMember extends StatefulWidget { class DeleteFamilyMember extends StatefulWidget {
int relationId; int relationId;
DeleteFamilyMember(@required this.relationId, {Key? key}) : super(key: key); DeleteFamilyMember(@required this.relationId, {Key? key}) : super(key: key);
@override @override
@ -26,9 +30,11 @@ class DeleteFamilyMember extends StatefulWidget {
class _DeleteFamilyMemberState extends State<DeleteFamilyMember> { class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
String pFunctionName = "HR_PERINFO_SS"; String pFunctionName = "HR_PERINFO_SS";
String actionType = "DELETE"; String actionType = "DELETE";
// int? contactRelationId; // int? contactRelationId;
String? date = "MM/DD/YYYY"; String? date = "MM/DD/YYYY";
String? datePar; String? datePar;
// String? itemKey; // String? itemKey;
SubmitContactTransactionList? submitContactTransactionList; SubmitContactTransactionList? submitContactTransactionList;
@ -44,12 +50,16 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
try { try {
Utils.showLoading(context); Utils.showLoading(context);
submitContactTransactionList = await ProfileApiClient().submetConatctTransaction(pFunctionName.toString(), actionType.toString(), widget.relationId!.toInt(), datePar.toString()); submitContactTransactionList = await ProfileApiClient().submetConatctTransaction(pFunctionName.toString(), actionType.toString(), widget.relationId!.toInt(), datePar.toString());
var transactionId = submitContactTransactionList!.pTRANSACTIONID;
var itemKey = submitContactTransactionList!.pITEMKEY;
Utils.hideLoading(context); Utils.hideLoading(context);
// getApprovesList = await ProfileApiClient().getApproves(transactionId!.toInt(), itemKey.toString() );
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), transactionId!.toInt(), itemKey.toString(), 'family_member')); arguments: RequestSubmitScreenParams(LocaleKeys.profile_familyDetails.tr(), submitContactTransactionList!.pTRANSACTIONID!, submitContactTransactionList!.pITEMKEY!, 'family_member'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitContactTransactionList!.pTRANSACTIONID!);
Utils.hideLoading(context);
setState(() {}); setState(() {});
} catch (ex) { } catch (ex) {
@ -73,7 +83,8 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
DynamicTextFieldWidget( DynamicTextFieldWidget(
LocaleKeys.endDate.tr(), date.toString(), LocaleKeys.endDate.tr(),
date.toString(),
isEnable: false, isEnable: false,
onTap: () async { onTap: () async {
DateTime dateValue = await _selectDate(context); DateTime dateValue = await _selectDate(context);
@ -85,10 +96,9 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
], ],
), ),
), ),
DefaultButton( DefaultButton(LocaleKeys.next.tr(), () async {
LocaleKeys.next.tr(), () async { deleteFamilyMember(datePar);
deleteFamilyMember(datePar);} }).insideContainer,
).insideContainer,
], ],
)); ));
} }
@ -145,8 +155,7 @@ class _DeleteFamilyMemberState extends State<DeleteFamilyMember> {
), ),
); );
} else { } else {
DateTime? picked = DateTime? picked = await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
await showDatePicker(context: context, initialDate: selectedDate, initialEntryMode: DatePickerEntryMode.calendarOnly, firstDate: DateTime(2015, 8), lastDate: DateTime(2101));
if (picked != null && picked != selectedDate) { if (picked != null && picked != selectedDate) {
time = picked; time = picked;
} }

@ -3,8 +3,10 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/api/profile_api_client.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/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
@ -296,8 +298,16 @@ class _DynamicInputScreenState extends State<DynamicInputScreenAddress> {
); );
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(dynamicParams!.title, submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'address')); arguments: RequestSubmitScreenParams(dynamicParams!.title, submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'address'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitPhoneNumbers.pTRANSACTIONID!);
Utils.hideLoading(context);
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);

@ -3,8 +3,10 @@ import 'dart:io';
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/api/profile_api_client.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/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
@ -378,7 +380,6 @@ class _DynamicInputScreenState extends State<DynamicInputScreenProfile> {
values.add(ValidateEitTransactionModel(dATEVALUE: null, nAME: "PEI_ACTION", nUMBERVALUE: null, tRANSACTIONNUMBER: 1, vARCHAR2VALUE: "NEW_ROW").toJson()); 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_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());
List<Map<String, dynamic>> valuesCols = getBasicDetColsStructureList!.map((e) { List<Map<String, dynamic>> valuesCols = getBasicDetColsStructureList!.map((e) {
if (e.dATATYPE == 'NUMBER') { if (e.dATATYPE == 'NUMBER') {
numberValue = e.userBasicDetail!.nUMBERVALUE ?? 0; numberValue = e.userBasicDetail!.nUMBERVALUE ?? 0;
@ -392,11 +393,18 @@ class _DynamicInputScreenState extends State<DynamicInputScreenProfile> {
SubmitBasicDetailsTransactionList submitBasicDetails = SubmitBasicDetailsTransactionList submitBasicDetails =
await ProfileApiClient().submitBasicDetailsTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, transactionValues, dynamicParams!.correctOrNew); await ProfileApiClient().submitBasicDetailsTransaction(dESCFLEXCONTEXTCODE, dynamicParams!.dynamicId, transactionValues, dynamicParams!.correctOrNew);
print(submitBasicDetails);
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(dynamicParams!.title, submitBasicDetails.pTRANSACTIONID!, submitBasicDetails.pITEMKEY!, 'basicDetails')); arguments: RequestSubmitScreenParams(dynamicParams!.title, submitBasicDetails.pTRANSACTIONID!, submitBasicDetails.pITEMKEY!, 'basicDetails'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitBasicDetails.pTRANSACTIONID!);
Utils.hideLoading(context);
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);

@ -12,6 +12,7 @@ import 'package:mohem_flutter_app/generated/locale_keys.g.dart';
import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart'; import 'package:mohem_flutter_app/models/dashboard/menu_entries.dart';
import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart'; import 'package:mohem_flutter_app/models/get_employee_contacts.model.dart';
import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart'; import 'package:mohem_flutter_app/provider/dashboard_provider_model.dart';
import 'package:mohem_flutter_app/ui/profile/add_update_family_member.dart';
import 'package:mohem_flutter_app/ui/profile/profile_screen.dart'; import 'package:mohem_flutter_app/ui/profile/profile_screen.dart';
import 'package:mohem_flutter_app/widgets/app_bar_widget.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/default_button.dart';
@ -140,7 +141,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
LocaleKeys.addNewFamilyMember.tr(), LocaleKeys.addNewFamilyMember.tr(),
menuEntries.updateButton == 'Y' menuEntries.updateButton == 'Y'
? () async { ? () async {
Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: {"relationID": relationId, "flag": 1, "actionType": "ADD"}); Navigator.pushNamed(context, AppRoutes.addUpdateFamilyMember, arguments: FamilyMemberScreenParams( relationId, flag: 1, actionType: "ADD"));
// ProfileScreen(); // ProfileScreen();
} }
: null) : null)
@ -166,7 +167,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
Navigator.pushNamed( Navigator.pushNamed(
context, context,
AppRoutes.addUpdateFamilyMember, AppRoutes.addUpdateFamilyMember,
arguments: {"relationID": relationId, "flag": 2, "actionType": "UPDATE"}, arguments:FamilyMemberScreenParams(relationId, flag: 2, actionType: "UPDATE"),
); );
}, },
); );
@ -202,7 +203,7 @@ class _FamilyMembersState extends State<FamilyMembers> {
LocaleKeys.ok.tr(), LocaleKeys.ok.tr(),
), ),
onPressed: () { onPressed: () {
Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: relationId); Navigator.pushNamed(context, AppRoutes.deleteFamilyMember, arguments: FamilyMemberScreenParams(relationId));
// continueDynamicForms(); // continueDynamicForms();
}, },
); );

@ -1,6 +1,8 @@
import 'package:easy_localization/src/public_ext.dart'; import 'package:easy_localization/src/public_ext.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/profile_api_client.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/colors.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
@ -117,8 +119,14 @@ class _PhoneNumbersState extends State<PhoneNumbers> {
setUpdateStatus(); setUpdateStatus();
submitPhoneNumbers = await ProfileApiClient().submitPhoneNumbers(widget.getEmployeePhonesList); submitPhoneNumbers = await ProfileApiClient().submitPhoneNumbers(widget.getEmployeePhonesList);
Utils.hideLoading(context); Utils.hideLoading(context);
Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.profile_contactDetails.tr(), submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'phone_numbers')); arguments: RequestSubmitScreenParams(LocaleKeys.profile_contactDetails.tr(), submitPhoneNumbers.pTRANSACTIONID!, submitPhoneNumbers.pITEMKEY!, 'phone_numbers'));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitPhoneNumbers.pTRANSACTIONID!);
Utils.hideLoading(context);
} }
void setUpdateStatus() { void setUpdateStatus() {

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart'; import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/api/termination_dff_api_client.dart'; import 'package:mohem_flutter_app/api/termination_dff_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
@ -135,6 +136,9 @@ class _EndEmploymentScreenState extends State<EndEmploymentScreen> {
Utils.hideLoading(context); Utils.hideLoading(context);
await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen, await Navigator.pushNamed(context, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitTermTransaction.pTRANSACTIONID!, submitTermTransaction.pITEMKEY!, "endEmployment")); arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), submitTermTransaction.pTRANSACTIONID!, submitTermTransaction.pITEMKEY!, "endEmployment"));
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context); Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(submitTermTransaction.pTRANSACTIONID!); await LeaveBalanceApiClient().cancelHrTransaction(submitTermTransaction.pTRANSACTIONID!);
Utils.hideLoading(context); Utils.hideLoading(context);

@ -1,6 +1,8 @@
import 'package:easy_localization/easy_localization.dart'; import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:mohem_flutter_app/api/leave_balance_api_client.dart';
import 'package:mohem_flutter_app/api/my_attendance_api_client.dart'; import 'package:mohem_flutter_app/api/my_attendance_api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
import 'package:mohem_flutter_app/classes/utils.dart'; import 'package:mohem_flutter_app/classes/utils.dart';
import 'package:mohem_flutter_app/config/routes.dart'; import 'package:mohem_flutter_app/config/routes.dart';
import 'package:mohem_flutter_app/extensions/int_extensions.dart'; import 'package:mohem_flutter_app/extensions/int_extensions.dart';
@ -30,6 +32,7 @@ class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
double itemHeight = 0; double itemHeight = 0;
double itemWidth = 0; double itemWidth = 0;
List<Map<String, dynamic>> validatedValues = []; List<Map<String, dynamic>> validatedValues = [];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var size = MediaQuery.of(context).size; var size = MediaQuery.of(context).size;
@ -57,11 +60,7 @@ class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
index, index,
dataList[index].segmentPrompt, dataList[index].segmentPrompt,
dataList[index].segmentValueDsp, dataList[index].segmentValueDsp,
isNeedToShowEmptyDivider: (dataList.length == index + 1) isNeedToShowEmptyDivider: (dataList.length == index + 1) ? (isOdd ? true : false) : false,
? isOdd
? true
: false
: false,
), ),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2, crossAxisCount: 2,
@ -95,7 +94,6 @@ class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
} }
void performNextAction() async { void performNextAction() async {
//Resubmit EIT Transaction
try { try {
Utils.showLoading(context); Utils.showLoading(context);
List<Map<String, dynamic>> values = []; List<Map<String, dynamic>> values = [];
@ -114,7 +112,6 @@ class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
} }
} }
} }
ResubmitEITRequestResponse resubmitEITRequestResponse = await MyAttendanceApiClient().reSubmitEitTransaction(widget.workListData!.iTEMKEY!, widget.workListData!.nOTIFICATIONID, values); ResubmitEITRequestResponse resubmitEITRequestResponse = await MyAttendanceApiClient().reSubmitEitTransaction(widget.workListData!.iTEMKEY!, widget.workListData!.nOTIFICATIONID, values);
Utils.hideLoading(context); Utils.hideLoading(context);
await Navigator.pushNamed( await Navigator.pushNamed(
@ -122,6 +119,12 @@ class _UpdateContinueSheetState extends State<UpdateContinueSheet> {
AppRoutes.requestSubmitScreen, AppRoutes.requestSubmitScreen,
arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), resubmitEITRequestResponse.pTRANSACTIONID!, widget.workListData!.iTEMKEY!, 'eit'), arguments: RequestSubmitScreenParams(LocaleKeys.submit.tr(), resubmitEITRequestResponse.pTRANSACTIONID!, widget.workListData!.iTEMKEY!, 'eit'),
); );
if (!AppState().cancelRequestTrancsection) {
return;
}
Utils.showLoading(context);
await LeaveBalanceApiClient().cancelHrTransaction(resubmitEITRequestResponse.pTRANSACTIONID!);
Utils.hideLoading(context);
} catch (ex) { } catch (ex) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(ex, context, null); Utils.handleException(ex, context, null);

@ -115,9 +115,9 @@ class _WorkListScreenState extends State<WorkListScreen> {
} }
} }
}); });
workListItemTypes.removeWhere((element) => element.value == 0); workListItemTypes.removeWhere((element) => element.value < 1);
if (workListItemTypes.isNotEmpty) { if (workListItemTypes.isNotEmpty) {
workListItemIndex = 0; workListItemIndex = workListItemIndex ?? 0;
} else { } else {
workListItemIndex = null; workListItemIndex = null;
} }
@ -147,17 +147,6 @@ class _WorkListScreenState extends State<WorkListScreen> {
} }
} }
}); });
// var tempList = providerData.getOpenNotificationsList?.where((notificationElement) {
// return (notificationElement.itemType == workListItemTypes[workListItemIndex].key) && notificationElement.itemType == workListElement.key;
// }).toList();
// if (tempList!.isNotEmpty) {
// if ((AppState().workList?.length ?? 0) != (tempList.first.openNtfNumber ?? 0)) {
// workListElement.value = AppState().workList?.length ?? 0;
// providerData.workListCounter = providerData.workListCounter - ((tempList.first.openNtfNumber ?? 0) - (AppState().workList?.length ?? 0));
// providerData.notify();
// }
// }
} }
}); });
} }
@ -357,28 +346,15 @@ class _WorkListScreenState extends State<WorkListScreen> {
if (shouldReloadData != null) { if (shouldReloadData != null) {
if (shouldReloadData.toString() == "delegate_reload") { if (shouldReloadData.toString() == "delegate_reload") {
providerData.itgFormsModel!.totalCount = providerData.itgFormsModel!.totalCount! - 1; providerData.itgFormsModel!.totalCount = providerData.itgFormsModel!.totalCount! - 1;
workListItemIndex = null;
calculateCounter(); calculateCounter();
setState(() {});
if (workListItemIndex != null) { if (workListItemIndex != null) {
getWorkList(); getWorkList();
} else {
setState(() {});
} }
} }
// workList!.remove(data);
// AppState().setWorkList = workList;
// if (data.iTEMTYPE == "ITG") {
//
//
// } else {
// providerData.getOpenNotificationsList?.forEach((element) {
// if (element.itemType == data.iTEMTYPE) {
// element.openNtfNumber = element.openNtfNumber! - 1;
// }
// });
// providerData.workListCounter = providerData.workListCounter - 1;
// providerData.notify();
// }
// calculateCounter();
// if (mounted) setState(() {});
} else { } else {
verifyWorkListCounter(); verifyWorkListCounter();
if (mounted) setState(() {}); if (mounted) setState(() {});
@ -477,7 +453,13 @@ class _WorkListScreenState extends State<WorkListScreen> {
if (shouldReloadData != null) { if (shouldReloadData != null) {
if (shouldReloadData.toString() == "delegate_reload") { if (shouldReloadData.toString() == "delegate_reload") {
verifyWorkListCounter(); verifyWorkListCounter();
getWorkList(); workListItemIndex = null;
calculateCounter();
if (workListItemIndex != null) {
getWorkList();
} else {
setState(() {});
}
} else { } else {
workList!.remove(data); workList!.remove(data);
AppState().setWorkList = workList; AppState().setWorkList = workList;

@ -81,7 +81,6 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
GetContactNotificationBodyList? getContactNotificationBodyList; GetContactNotificationBodyList? getContactNotificationBodyList;
List<GetAddressNotificationBodyList>? getAddressNotificationBodyList = []; List<GetAddressNotificationBodyList>? getAddressNotificationBodyList = [];
GenericResponseModel? getBasicNTFBody; GenericResponseModel? getBasicNTFBody;
GenericResponseModel? getICBody; GenericResponseModel? getICBody;
GenericResponseModel? subordinatesLeavesModel; GenericResponseModel? subordinatesLeavesModel;
@ -93,6 +92,9 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
bool isApproveAvailable = false; bool isApproveAvailable = false;
bool isRejectAvailable = false; bool isRejectAvailable = false;
String approveAction = "";
String rejectAction = "";
bool isAttachmentLoaded = false; bool isAttachmentLoaded = false;
bool isActionHistoryLoaded = false; bool isActionHistoryLoaded = false;
@ -169,29 +171,6 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
if (controller.hasClients) { if (controller.hasClients) {
controller.jumpToPage(0); controller.jumpToPage(0);
} }
// List dataToFetch = await Future.wait([
//
// WorkListApiClient().getActionHistory(workListData!.nOTIFICATIONID!),
// WorkListApiClient().getAttachments(workListData!.nOTIFICATIONID!),
// ]);
//
// notificationButtonsList = dataToFetch[0];
// actionHistoryList = dataToFetch[1];
// getAttachmentList = dataToFetch[2];
// if (notificationButtonsList.isNotEmpty) {
// isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE");
// isApproveAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "APPROVED");
// isRejectAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "REJECTED");
// }
// Utils.hideLoading(context);
// setState(() {});
// } catch (ex) {
// Utils.hideLoading(context);
// Utils.handleException(ex, context, null);
// setState(() {});
// }
} }
List<Future> futureRequest = []; List<Future> futureRequest = [];
@ -320,14 +299,14 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
if (isRejectAvailable) if (isRejectAvailable)
DefaultButton( DefaultButton(
LocaleKeys.reject.tr(), LocaleKeys.reject.tr(),
() => performAction("REJECTED"), () => performAction(rejectAction),
colors: const [Color(0xffE47A7E), Color(0xffDE6D71)], colors: const [Color(0xffE47A7E), Color(0xffDE6D71)],
).expanded, ).expanded,
if (isApproveAvailable && isRejectAvailable) 8.width, if (isApproveAvailable && isRejectAvailable) 8.width,
if (isApproveAvailable) if (isApproveAvailable)
DefaultButton( DefaultButton(
LocaleKeys.approve.tr(), LocaleKeys.approve.tr(),
() => performAction("APPROVED"), () => performAction(approveAction),
colors: const [Color(0xff28C884), Color(0xff1BB271)], colors: const [Color(0xff28C884), Color(0xff1BB271)],
).expanded, ).expanded,
if (isCloseAvailable) if (isCloseAvailable)
@ -417,7 +396,11 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
List<Widget> viewApiButtonsList(List<GetNotificationButtonsList> notificationButtonsList) { List<Widget> viewApiButtonsList(List<GetNotificationButtonsList> notificationButtonsList) {
List<Widget> fabs = []; List<Widget> fabs = [];
for (int i = 0; i < notificationButtonsList.length; i++) { for (int i = 0; i < notificationButtonsList.length; i++) {
if (notificationButtonsList[i].bUTTONACTION! == "REJECTED" || notificationButtonsList[i].bUTTONACTION! == "APPROVED" || notificationButtonsList[i].bUTTONACTION! == "CLOSE") { if (notificationButtonsList[i].bUTTONACTION! == "REJECTED" ||
notificationButtonsList[i].bUTTONACTION! == "REJECT" ||
notificationButtonsList[i].bUTTONACTION! == "APPROVED" ||
notificationButtonsList[i].bUTTONACTION! == "APPROVE" ||
notificationButtonsList[i].bUTTONACTION! == "CLOSE") {
continue; continue;
} }
fabs.add(myFab( fabs.add(myFab(
@ -989,8 +972,20 @@ class _WorkListDetailScreenState extends State<WorkListDetailScreen> {
notificationButtonsList = await WorkListApiClient().getNotificationButtons(workListData!.nOTIFICATIONID!); notificationButtonsList = await WorkListApiClient().getNotificationButtons(workListData!.nOTIFICATIONID!);
if (notificationButtonsList.isNotEmpty) { if (notificationButtonsList.isNotEmpty) {
isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE"); isCloseAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "CLOSE");
isApproveAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "APPROVED"); isApproveAvailable = notificationButtonsList.any((element) {
isRejectAvailable = notificationButtonsList.any((element) => element.bUTTONACTION == "REJECTED"); if (element.bUTTONACTION == "APPROVED" || element.bUTTONACTION == "APPROVE") {
approveAction = element.bUTTONACTION!;
return true;
}
return false;
});
isRejectAvailable = notificationButtonsList.any((element) {
if (element.bUTTONACTION == "REJECTED" || element.bUTTONACTION == "REJECT") {
rejectAction = element.bUTTONACTION!;
return true;
}
return false;
});
} }
apiCallCount--; apiCallCount--;
if (apiCallCount == 0) { if (apiCallCount == 0) {

@ -20,10 +20,13 @@ import 'package:mohem_flutter_app/models/chat/get_search_user_chat_model.dart';
import 'package:mohem_flutter_app/models/get_action_history_list_model.dart'; import 'package:mohem_flutter_app/models/get_action_history_list_model.dart';
import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart'; import 'package:mohem_flutter_app/models/worklist/get_favorite_replacements_model.dart';
import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart'; import 'package:mohem_flutter_app/models/worklist/replacement_list_model.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:mohem_flutter_app/ui/chat/chat_detailed_screen.dart'; import 'package:mohem_flutter_app/ui/chat/chat_detailed_screen.dart';
import 'package:mohem_flutter_app/widgets/button/default_button.dart'; import 'package:mohem_flutter_app/widgets/button/default_button.dart';
import 'package:mohem_flutter_app/widgets/circular_avatar.dart'; import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart'; import 'package:mohem_flutter_app/widgets/dynamic_forms/dynamic_textfield_widget.dart';
import 'package:provider/provider.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
class SearchEmployeeBottomSheet extends StatefulWidget { class SearchEmployeeBottomSheet extends StatefulWidget {
int? notificationID; int? notificationID;
@ -47,6 +50,8 @@ class SearchEmployeeBottomSheet extends StatefulWidget {
class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> { class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
TextEditingController username = TextEditingController(); TextEditingController username = TextEditingController();
ScrollController sc = ScrollController();
String searchText = ""; String searchText = "";
List<String>? optionsList = [ List<String>? optionsList = [
@ -61,7 +66,7 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
List<ReplacementList>? nonFavouriteUserList; List<ReplacementList>? nonFavouriteUserList;
// Chat Items // Chat Items
List<ChatUser>? chatUsersList = []; late ChatProviderModel provider;
int _selectedSearchIndex = 0; int _selectedSearchIndex = 0;
@ -88,25 +93,55 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
} }
void fetchChatUser({bool isNeedLoading = true}) async { void fetchChatUser({bool isNeedLoading = true}) async {
if (provider.pageNo == 1) provider.chatUsersList!.clear();
try { try {
Utils.showLoading(context); Utils.showLoading(context);
chatUsersList = await ChatApiClient().getChatMemberFromSearch( await ChatApiClient().getChatMemberFromSearch(searchText, AppState().chatDetails!.response!.id!, provider.pageNo).then((ChatUserModel value) {
searchText, if (value.response != null) {
int.parse(AppState().chatDetails!.response!.id.toString()), if (provider.pageNo == 1) {
); provider.chatUsersList = value.response;
chatUsersList!.removeWhere((ChatUser element) => element.id == AppState().chatDetails!.response!.id); } else {
print("--------------------------Added More----------------------");
provider.chatUsersList!.addAll(value.response!);
}
}
});
provider.chatUsersList!.removeWhere((ChatUser element) => element.id == AppState().chatDetails!.response!.id);
Utils.hideLoading(context); Utils.hideLoading(context);
setState(() {}); setState(() {});
} catch (e) { } catch (e) {
Utils.hideLoading(context); Utils.hideLoading(context);
Utils.handleException(e, context, null); Utils.handleException(e, context, null);
} }
if (isNeedLoading) Utils.hideLoading(context); if (isNeedLoading) Utils.hideLoading(context);
setState(() {}); setState(() {});
return null; return null;
} }
void scrollListener() async {
if (sc.position.pixels == sc.position.maxScrollExtent) {
provider.pageNo++;
logger.w(provider.chatUsersList!.length);
logger.w(provider.pageNo);
fetchChatUser();
}
}
@override
void initState() {
super.initState();
sc.addListener(scrollListener);
provider = Provider.of<ChatProviderModel>(context, listen: false);
}
@override
void dispose() {
print("// TODO: implement dispose");
super.dispose();
provider.chatUsersList = [];
provider.pageNo = 1;
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return SizedBox( return SizedBox(
@ -123,7 +158,7 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
11.height, 11.height,
Row( Row(
children: [ children: [
radioOption("Name", 0, _selectedSearchIndex), radioOption(widget.fromChat ? "UserId" : "Name", 0, _selectedSearchIndex),
radioOption("User Name", 1, _selectedSearchIndex), radioOption("User Name", 1, _selectedSearchIndex),
radioOption("Email", 2, _selectedSearchIndex), radioOption("Email", 2, _selectedSearchIndex),
], ],
@ -188,73 +223,137 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
], ],
).expanded, ).expanded,
if (widget.fromChat) if (widget.fromChat)
if (chatUsersList != null && widget.fromChat) if (provider.chatUsersList != null && widget.fromChat)
chatUsersList!.isEmpty provider.chatUsersList!.isEmpty
? Column( ? Column(
children: [ children: [
20.height, 20.height,
Utils.getNoDataWidget(context), Utils.getNoDataWidget(context),
], ],
) )
: ListView( : ListView.separated(
physics: const BouncingScrollPhysics(), itemCount: provider.chatUsersList!.length,
padding: const EdgeInsets.only( shrinkWrap: true,
top: 15, physics: const ClampingScrollPhysics(),
), controller: sc,
children: <Widget>[ padding: const EdgeInsets.only(bottom: 80.0, top: 20),
ListView.separated( itemBuilder: (BuildContext context, int index) {
physics: const NeverScrollableScrollPhysics(), return SizedBox(
shrinkWrap: true, height: 55,
itemBuilder: (BuildContext cxt, int index) { child: Row(
return SizedBox( children: [
height: 55, Stack(
child: ListTile( children: <Widget>[
leading: Stack( SvgPicture.asset(
children: [
SvgPicture.asset(
"assets/images/user.svg", "assets/images/user.svg",
height: 48, height: 48,
width: 48, width: 48,
), ),
Positioned( Positioned(
right: 5, right: 5,
bottom: 1, bottom: 1,
child: Container( child: Container(
width: 10, width: 10,
height: 10, height: 10,
decoration: BoxDecoration( decoration: BoxDecoration(
color: chatUsersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red, color: provider.chatUsersList![index].userStatus == 1 ? MyColors.green2DColor : Colors.red,
borderRadius: const BorderRadius.all( ),
Radius.circular(10), ).circle(10),
)
],
),
Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
(provider.chatUsersList![index].userName!.replaceFirst(".", " ").capitalizeFirstofEach ?? "")
.toText14(color: MyColors.darkTextColor)
.paddingOnly(left: 11, top: 13),
provider.chatUsersList![index].isTyping!
? 'Typing...'
.toText10(
color: MyColors.textMixColor,
)
.paddingOnly(left: 11.0)
: const SizedBox()
],
).expanded,
SizedBox(
width: 60,
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.end,
mainAxisSize: MainAxisSize.max,
children: <Widget>[
if (provider.chatUsersList![index].unreadMessageCount! > 0)
Container(
alignment: Alignment.center,
width: 18,
height: 18,
decoration: const BoxDecoration(
color: MyColors.redColor,
borderRadius: BorderRadius.all(
Radius.circular(20),
), ),
), ),
), child: (provider.chatUsersList![index].unreadMessageCount!.toString())
) .toText10(
color: MyColors.white,
)
.center,
).paddingOnly(right: 10).center,
Icon(
provider.chatUsersList![index].isFav != null && provider.chatUsersList![index].isFav == false ? Icons.star_sharp : Icons.star_sharp,
color: provider.chatUsersList![index].isFav != null && provider.chatUsersList![index].isFav == true ? MyColors.yellowColor : MyColors.grey35Color,
).onPress(
() {
if (provider.chatUsersList![index].isFav == null || provider.chatUsersList![index].isFav == false) {
provider
.favoriteUser(
userID: AppState().chatDetails!.response!.id!,
targetUserID: provider.chatUsersList![index].id!,
fromSearch: true
)
.then((value) {
setState(() {});
});
} else if (provider.chatUsersList![index].isFav == true) {
provider
.unFavoriteUser(
userID: AppState().chatDetails!.response!.id!,
targetUserID: provider.chatUsersList![index].id!,
)
.then((value) {
setState(() {});
});
} else {
provider
.favoriteUser(
userID: AppState().chatDetails!.response!.id!,
targetUserID: provider.chatUsersList![index].id!,
fromSearch: true
)
.then((value) {
setState(() {});
});
}
},
).center
], ],
), ),
title: (chatUsersList![index].userName ?? "").toText14(color: MyColors.darkTextColor),
minVerticalPadding: 0,
onTap: () {
Navigator.pop(context);
Navigator.pushNamed(
context,
AppRoutes.chatDetailed,
arguments: ChatDetailedScreenParams(chatUsersList![index], true),
);
},
), ),
); ],
},
separatorBuilder: (BuildContext context, int index) => const Padding(
padding: EdgeInsets.only(right: 10, left: 70, bottom: 0, top: 0),
child: Divider(
color: Color(0xFFE5E5E5),
),
), ),
itemCount: chatUsersList?.length ?? 0, ).onPress(() {
), Navigator.pop(context);
12.height, Navigator.pushNamed(
], context,
AppRoutes.chatDetailed,
arguments: ChatDetailedScreenParams(provider.chatUsersList![index], true),
);
});
},
separatorBuilder: (BuildContext context, int index) => const Divider(color: MyColors.lightGreyE5Color).paddingOnly(left: 59),
).expanded, ).expanded,
], ],
).paddingOnly(left: 21, right: 21, bottom: 0, top: 21).expanded, ).paddingOnly(left: 21, right: 21, bottom: 0, top: 21).expanded,
@ -263,6 +362,8 @@ class _SearchEmployeeBottomSheetState extends State<SearchEmployeeBottomSheet> {
LocaleKeys.cancel.tr(), LocaleKeys.cancel.tr(),
() { () {
Navigator.pop(context); Navigator.pop(context);
provider.chatUsersList = [];
provider.pageNo = 1;
}, },
textColor: MyColors.grey3AColor, textColor: MyColors.grey3AColor,
colors: const [ colors: const [

@ -11,56 +11,75 @@ import 'package:mohem_flutter_app/widgets/circular_avatar.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
AppBar ChatAppBarWidget(BuildContext context, AppBar ChatAppBarWidget(BuildContext context,
{required String title, {required String title, bool showHomeButton = true, ChatUser? chatUser, bool showTyping = false, List<Widget>? actions, void Function()? onHomeTapped, void Function()? onBackTapped}) {
bool showHomeButton = true,
String? image,
ChatUser? chatUser,
bool showTyping = false,
List<Widget>? actions,
void Function()? onHomeTapped,
void Function()? onBackTapped}) {
return AppBar( return AppBar(
leadingWidth: 0, leadingWidth: 0,
title: Row( title: Consumer<ChatProviderModel>(builder: (BuildContext cxt, ChatProviderModel data, Widget? child) {
children: [ return Row(
GestureDetector( children: [
behavior: HitTestBehavior.opaque, GestureDetector(
onTap: Feedback.wrapForTap(() { behavior: HitTestBehavior.opaque,
(onBackTapped == null ? Navigator.maybePop(context) : onBackTapped()); onTap: Feedback.wrapForTap(() {
}, context), (onBackTapped == null ? Navigator.maybePop(context) : onBackTapped());
child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor), }, context),
), child: const Icon(Icons.arrow_back_ios, color: MyColors.darkIconColor),
4.width,
if (image != null)
CircularAvatar(
url: image,
height: 40,
width: 40,
isImageBase64: true,
), ),
if (image != null) 14.width, 4.width,
SizedBox( if (chatUser != null)
height: 40, Stack(
child: Column( children: <Widget>[
crossAxisAlignment: CrossAxisAlignment.start, if (chatUser.isImageLoading!)
mainAxisAlignment: MainAxisAlignment.start, const SizedBox(
children: [ height: 48,
title.toText20(color: MyColors.darkTextColor, isBold: true).expanded, width: 48,
if (showTyping) ).toShimmer().circle(30),
Consumer<ChatProviderModel>( if (!chatUser.isImageLoading! && chatUser.userLocalDownlaodedImage == null)
builder: (BuildContext cxt, ChatProviderModel data, Widget? child) { SvgPicture.asset(
if (chatUser!.isTyping!) { "assets/images/user.svg",
return ("Typing ...").toText10(color: MyColors.textMixColor); height: 48,
} else { width: 48,
return const SizedBox(); ),
} if (!chatUser.isImageLoading! && chatUser.userLocalDownlaodedImage != null)
}, Container(
), width: 48.0,
], height: 48.0,
), decoration: BoxDecoration(
) shape: BoxShape.circle,
], image: DecorationImage(
), fit: BoxFit.cover,
image: FileImage(chatUser.userLocalDownlaodedImage!),
),
),
),
Positioned(
right: 5,
bottom: 1,
child: Container(
width: 10,
height: 10,
decoration: BoxDecoration(
color: chatUser.userStatus == 1 ? MyColors.green2DColor : Colors.red,
),
).circle(10),
)
],
),
if (chatUser != null) 14.width,
SizedBox(
height: 40,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
title.toText20(color: MyColors.darkTextColor, isBold: true).expanded,
if (showTyping)
if (chatUser!.isTyping!) ("Typing ...").toText10(color: MyColors.textMixColor) else const SizedBox(),
],
),
)
],
);
}),
centerTitle: false, centerTitle: false,
elevation: 0, elevation: 0,
backgroundColor: Colors.white, backgroundColor: Colors.white,

@ -273,7 +273,7 @@ class ChatHomeShimmer extends StatelessWidget {
children: <Widget>[ children: <Widget>[
Container( Container(
width: double.infinity, width: double.infinity,
height: 8.0, height: 20.0,
color: Colors.white, color: Colors.white,
), ),
const Padding( const Padding(
@ -281,7 +281,7 @@ class ChatHomeShimmer extends StatelessWidget {
), ),
Container( Container(
width: double.infinity, width: double.infinity,
height: 8.0, height: 15.0,
color: Colors.white, color: Colors.white,
), ),
const Padding( const Padding(
@ -289,7 +289,7 @@ class ChatHomeShimmer extends StatelessWidget {
), ),
Container( Container(
width: 40.0, width: 40.0,
height: 8.0, height: 10.0,
color: Colors.white, color: Colors.white,
), ),
], ],

Loading…
Cancel
Save