fist commit ftc staff app clone

This commit is contained in:
2024-08-01 13:46:46 +05:30
commit bf9064a9c9
515 changed files with 42796 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
import 'package:flutter/material.dart';
import 'package:ftc_mobile_app/models/profile_screen_model.dart';
import 'package:ftc_mobile_app/models/rota/LiveRoasterResponseData.dart';
import 'package:ftc_mobile_app/models/rota/WeekArrayData.dart';
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import '../../ftc_mobile_app.dart';
class DashboardScreenController extends GetxController {
static DashboardScreenController get instance =>
Get.find<DashboardScreenController>();
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
final selectedIndex = 1.obs;
final myShiftsList = RxList<DaysArrayData>();
final ongoingShift = Rx<DaysArrayData?>(null);
final myProfileData = Rx<StaffMembers?>(null);
@override
void onInit() {
_initOngoingShift();
super.onInit();
}
@override
void onReady() {
getProfileDetail();
getMyShifts();
super.onReady();
}
void removeFocus() {
FocusScope.of(screenKey.currentContext!).unfocus();
}
_initOngoingShift() {
final shift = LocalStorageManager.getOngoingShift();
if (shift != null) {
//meaning shift expired already
if (shift.endTime != null && shift.endTime!.isBefore(TimeOfDay.now())) {
LocalStorageManager.removeOngoingShift();
} else {
ongoingShift.value = shift;
}
}
}
getProfileDetail() async {
final resp = await ClientService().getUserDetails();
if (resp is ProfileDataModel) {
myProfileData.value = resp.data?.staffMembers?.firstOrNull;
}
}
Future<void> getMyShifts() async {
var response = await RotaService().getMyShifts(
startDateMills: DateTime.now().subtract(30.days).millisecondsSinceEpoch,
endDateMills: DateTime.now().add(30.days).millisecondsSinceEpoch);
if (response is LiveRoasterResponseData) {
response.daysArray = (response.daysArray.isNullOrEmpty())
? []
: (response.daysArray!
..sort((a, b) => a.shiftDate!.compareTo(b.shiftDate!)));
List<DaysArrayData> todayAndFutureShifts = [];
//Extracting today's and future shifts
for (final shift in response.daysArray!) {
if (shift.shiftDateTime == null ||
shift.startTime == null ||
shift.endTime == null) {
debugPrint(
"shiftId: ${shift.id} has missing shiftDateTime or startTime or endTime. Please check");
return;
}
//Note: matching only date, month, year
final isTodayShift =
DateFormatter.dateFormatter.format(shift.shiftDateTime!) ==
DateFormatter.dateFormatter.format(DateTime.now());
final isFutureShift = shift.shiftDateTime!.isAfter(DateTime.now());
if (isTodayShift) {
//checking and adding today's not expired shift
// shift not expired yet
if (shift.endTime!.isAfter(TimeOfDay.now())) {
todayAndFutureShifts.add(shift);
if (ongoingShift() == null) {
LocalStorageManager.saveShiftData(data: shift);
ongoingShift.value = shift;
}
}
} else if (isFutureShift) {
todayAndFutureShifts.add(shift);
}
}
myShiftsList.value = todayAndFutureShifts.take(2).toList();
} else if (response is String && response.isNotEmpty) {
FrequentFunctions.showToast(message: response);
}
}
@override
void dispose() {
Get.delete<DashboardScreenController>();
super.dispose();
}
}

View File

@@ -0,0 +1,3 @@
export 'dashboard_screen_controller.dart';
export '../../view/screens/chat/controller/chat_screen_controller.dart';
export 'inbox_screen_controller.dart';

View File

@@ -0,0 +1,156 @@
import 'package:flutter/material.dart';
import 'package:ftc_mobile_app/models/chat/combined_last_messages_model_class.dart';
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
import 'package:ftc_mobile_app/view/screens/chat/arguments/group_data_args.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
import '../../ftc_mobile_app.dart';
import '../../web_services/chat_services.dart';
class InboxScreenController extends GetxController {
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
// CombinedMessageModel combinedMessageModel = CombinedMessageModel.empty();
final String privacyPolicy =
"A quick preview of the text will be shown here. A quick preview of the text will be shown here. shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.\n shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.\n shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here. A quick preview of the text will be shown here.";
final checkBoxValue = false.obs;
final chatsAndGroups = RxList<MessagesListModel>();
// final sortedChatsAndGroups = RxList<MessagesListModel>();
final canLoadMore = RxBool(false);
final onFirstMessageSend = false.obs;
// late IO.Socket socket;
// final int _limit = 20;
// int _skip = 0;
bool loadingMore = false;
final _listRC = RefreshController(initialRefresh: false);
RefreshController get listRC => _listRC;
final _listSC = ScrollController();
ScrollController get listSC => _listSC;
String myId = "";
@override
void onInit() {
//Getting my ID
// String userJson = LocalStorageManager.getSessionToken(
// tokenKey: LocalStorageKeys.kUserModelKey,
// );
// UserModel userModel = UserModel.fromJson(json.decode(userJson));
myId = LocalStorageManager.userId;
onFirstMessageSend.listen((isTrue) {
if (isTrue) {
onFirstMessageSend(false);
getChatsAndGroupsList();
}
});
super.onInit();
}
@override
void onReady() {
// connect();
getChatsAndGroupsList();
super.onReady();
}
void onBackButtonPressed() {
Get.delete<InboxScreenController>();
Navigator.pop(screenKey.currentState!.context);
}
// void showPrivacyDialog() {
// showDialog(
// context: screenKey.currentState!.context,
// builder: (BuildContext context) {
// return PrivacyPolicyDialog(
// privacyPolicy: privacyPolicy,
// checkBoxOnChange: (value) {
// checkBoxValue.value = value;
// },
// );
// },
// );
// }
void onRefresh() async {
await getChatsAndGroupsList();
_listRC.refreshCompleted();
}
void onLoading() async {
// if (!loadingMore) {
// await _loadMore();
// }
_listRC.loadComplete();
}
void removeFocus() {
FocusScope.of(screenKey.currentContext!).unfocus();
}
Future getChatsAndGroupsList() async {
final resp =
await ChatService().combinedLastMessage(userId: myId).showLoader();
if (resp is CombinedMessageModel) {
List<MessagesListModel> messages = [];
//Private Messages transform
for (final e in resp.personalMessage) {
messages.add(
MessagesListModel(
otherUserId: (e.senderId == myId) ? e.recieverId : e.senderId,
image: e.image,
title: e.name,
previewOfLastMessage: e.message,
messageType: e.messageType,
date: DateTime.tryParse(e.date)?.millisecondsSinceEpoch ??
DateTime.now().millisecondsSinceEpoch,
// messageDateTime: FrequentFunctions.toTimesAgo(e.date),
// personalMessageIndex: index,
),
);
}
//Group Messages transform
for (final e in resp.sortedArrayGroup) {
messages.add(
MessagesListModel(
image: e.groupImage,
title: e.groupName,
previewOfLastMessage: e.lastMessages.message,
messageType: MessageType.message.name,
// messageType: e.lastMessages.messageType ?? MessageType.message.name,
date: DateTime.tryParse(e.date)?.millisecondsSinceEpoch ??
DateTime.now().millisecondsSinceEpoch,
// messageDateTime: FrequentFunctions.toTimesAgo(e.date),
isGroup: true,
groupData: GroupDataArgs(
groupId: e.id,
groupMembersIds: e.groupMembers,
scheduleTime: e.groupWorkingScheduleTime,
),
),
);
}
chatsAndGroups.value = messages;
} else {
FrequentFunctions.showToast(message: resp["message"]);
}
}
@override
void dispose() {
Get.delete<InboxScreenController>();
super.dispose();
}
}

View File

@@ -0,0 +1,146 @@
import 'package:flutter/material.dart';
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
import 'package:ftc_mobile_app/utilities/local_storage_manager/local_storage_manager.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
import '../../utilities/frequent_functions.dart';
import '../../web_services/client_services.dart';
class SelectUserForChatScreenController extends GetxController {
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
final searchController = TextEditingController();
List<UserData> oStaffUsersList = [];
final staffUsersList = RxList<UserData>();
final canLoadMore = RxBool(false);
final searchText = "".obs;
final int _limit = 20;
int _skip = 0;
bool loadingMore = false;
final _listRC = RefreshController(initialRefresh: false);
RefreshController get listRC => _listRC;
final _listSC = ScrollController();
ScrollController get listSC => _listSC;
@override
void onInit() {
// debounce(searchText, onSearch, time: 800.milliseconds);
super.onInit();
}
@override
void onReady() {
getStaffMembers();
super.onReady();
}
void onRefresh() async {
await getStaffMembers();
_listRC.refreshCompleted();
}
void onLoading() async {
if (!loadingMore) {
await _loadMore();
}
_listRC.loadComplete();
}
onSearch(String text) {
// getStaffMembers();
if (text.isEmpty) {
staffUsersList.value = List.from(oStaffUsersList);
} else {
staffUsersList.value = oStaffUsersList
.where(
(e) => e.displayName.toLowerCase().contains(text.toLowerCase()))
.toList();
// Future.forEach(oStaffUsersList, (e) => null);
}
}
Future<void> getStaffMembers() async {
staffUsersList.clear();
_skip = 0;
var response = await (ClientService()
.getAllUsersList(
searchText: searchText(),
limit: _limit,
offset: _skip,
)
.showLoader());
if (response.success == true) {
if (response.data?.users?.isNotEmpty == true) {
_skip += _limit;
final list = response.data!.users!
..removeWhere((e) => e.id == LocalStorageManager.userId);
oStaffUsersList = List.from(list);
staffUsersList.value = list;
// canLoadMore.value = false;
} else {
// canLoadMore.value = searchText.isEmpty;
}
} else {
if (response.message.isNullOrEmptyNot()) {
FrequentFunctions.showToast(message: response.message!);
}
}
}
Future<void> _loadMore() async {
if (canLoadMore.isTrue) {
loadingMore = true;
var response = await ClientService().getServiceUsersList(
searchText: searchText(),
limit: _limit,
offset: _skip,
);
loadingMore = false;
if (response.success == true) {
if (response.data?.users?.isNotEmpty == true) {
_skip += _limit;
staffUsersList.addAll(response.data?.users ?? []);
canLoadMore.value = true;
} else {
canLoadMore.value = false;
}
} else {
if (response.message.isNullOrEmptyNot()) {
FrequentFunctions.showToast(message: response.message!);
}
}
}
}
void removeFocus() {
FocusScope.of(screenKey.currentContext!).unfocus();
}
@override
void dispose() {
searchController.dispose();
_listSC.dispose();
Get.delete<SelectUserForChatScreenController>();
super.dispose();
}
void backButtonPressed(BuildContext context) {
Get.delete<SelectUserForChatScreenController>();
Navigator.of(context).pop();
}
}