fist commit ftc staff app clone
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/HealthIssuesDetailsModel.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'careNoteFormControllers/category_subcategory_widget_controller.dart';
|
||||
|
||||
class AddDetailsToNewBodyPointScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final healthNoteController = TextEditingController();
|
||||
final complaintController = TextEditingController();
|
||||
|
||||
final catSubCatController = Get.put(CategorySubcategoryWidgetController());
|
||||
|
||||
///[isEditing] will be true if using [AddDetailsToNewBodyPointScreen] screen to edit issue details,
|
||||
/// or say issueData is not null
|
||||
final isEditing = false.obs;
|
||||
|
||||
String serviceUserId = "";
|
||||
HealthIssueDetailsModel? issueData;
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
if (issueData != null) {
|
||||
isEditing.value = true;
|
||||
healthNoteController.text = issueData!.healthNote;
|
||||
complaintController.text = issueData!.complaint;
|
||||
}
|
||||
catSubCatController.getBodyParts();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
healthNoteController.dispose();
|
||||
complaintController.dispose();
|
||||
catSubCatController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> submitButtonPressed(BuildContext context) async {
|
||||
if (isEditing.isFalse) {
|
||||
if (catSubCatController.selectedBodyPart() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select category first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart()!.subCategory.isNotEmpty &&
|
||||
catSubCatController.selectedSubcategory() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select subcategory",
|
||||
);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (healthNoteController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(message: "Health Note is required");
|
||||
return;
|
||||
}
|
||||
if (complaintController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(message: "Complaint is required");
|
||||
return;
|
||||
}
|
||||
|
||||
var result = (isEditing.isFalse)
|
||||
? await ClientService()
|
||||
.addHealthIssue(
|
||||
userId: serviceUserId,
|
||||
category: catSubCatController.selectedSubcategory()?.id ??
|
||||
catSubCatController.selectedBodyPart()!.id,
|
||||
healthNote: healthNoteController.text.trim(),
|
||||
complaint: complaintController.text.trim())
|
||||
.showLoader()
|
||||
: await ClientService()
|
||||
.updateHealthIssueData(
|
||||
issueId: issueData!.id,
|
||||
categoryId: issueData!.bodyPointsCategory!.id,
|
||||
healthNote: healthNoteController.text.trim(),
|
||||
complaint: complaintController.text.trim())
|
||||
.showLoader();
|
||||
|
||||
if (result is! String) {
|
||||
Navigator.of(context).pop(true);
|
||||
} else {
|
||||
if (result.isNotEmpty) {
|
||||
FrequentFunctions.showToast(message: result);
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
}
|
||||
127
lib/controllers/clients/add_new_document_screen_controller.dart
Normal file
127
lib/controllers/clients/add_new_document_screen_controller.dart
Normal file
@@ -0,0 +1,127 @@
|
||||
import 'dart:io';
|
||||
import 'package:file_picker/file_picker.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../models/clients/documents_list_model.dart';
|
||||
|
||||
class AddNewDocumentScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
TextEditingController documentTitleController = TextEditingController();
|
||||
TextEditingController documentDetailsController = TextEditingController();
|
||||
dynamic arguments;
|
||||
final docIdReceived = false.obs;
|
||||
final viewOnly = false.obs;
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
DocumentModel documentModel = DocumentModel.empty();
|
||||
final docFile = Rx<File?>(null);
|
||||
RxString docFilePath = "".obs;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
arguments = CustomRouteGenerator.argument;
|
||||
if (arguments is List &&
|
||||
arguments[0] is DocumentModel &&
|
||||
arguments[1] is UserData) {
|
||||
//Open for Editing
|
||||
documentModel = arguments[0];
|
||||
docIdReceived.value = true;
|
||||
docFilePath.value = documentModel.docPath;
|
||||
documentTitleController.text = documentModel.title;
|
||||
documentDetailsController.text = documentModel.details;
|
||||
serviceUser.value = arguments[1];
|
||||
} else if (arguments is List && arguments[1] is bool) {
|
||||
documentModel = arguments[0];
|
||||
docFilePath.value = documentModel.docPath;
|
||||
viewOnly.value = true;
|
||||
documentTitleController.text = documentModel.title;
|
||||
documentDetailsController.text = documentModel.details;
|
||||
} else if (arguments is UserData) {
|
||||
//Open to add new document
|
||||
serviceUser.value = arguments;
|
||||
}
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
onFileChooseButtonTap() async {
|
||||
FilePickerResult? result = await FilePicker.platform.pickFiles(
|
||||
type: FileType.custom,
|
||||
allowedExtensions: ["pdf", "doc", "docx", "xlsx", "xls"]);
|
||||
|
||||
if (result != null) {
|
||||
docFile.value = File(result.files.single.path!);
|
||||
docFilePath.value = result.files.single.path!;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> submitButtonPressed() async {
|
||||
if (validateFields()) {
|
||||
if (docIdReceived.isTrue) {
|
||||
//update doc code here
|
||||
|
||||
String documentPath = docFilePath.value;
|
||||
|
||||
//If doc file is picked than uploading file to server and will be used to update document
|
||||
if (docFile() != null) {
|
||||
final resp = await ClientService()
|
||||
.uploadDocumentService(docPath: docFile()!.path)
|
||||
.showLoader();
|
||||
if (resp is String) {
|
||||
documentPath = resp;
|
||||
}
|
||||
}
|
||||
|
||||
final response = await ClientService()
|
||||
.updateDocumentService(
|
||||
userId: serviceUser()!.id!,
|
||||
docId: documentModel.id,
|
||||
docPath: documentPath,
|
||||
docDetails: documentDetailsController.text,
|
||||
title: documentTitleController.text,
|
||||
addedBy: LocalStorageManager.userId)
|
||||
.showLoader();
|
||||
if (response is DocumentModel) {
|
||||
backButtonPressed(argument: response);
|
||||
} else {
|
||||
FrequentFunctions.showToast(message: response);
|
||||
}
|
||||
} else if (viewOnly.isTrue) {
|
||||
//view doc code here
|
||||
} else {
|
||||
// add doc code here
|
||||
var response = await ClientService()
|
||||
.addDocumentService(
|
||||
userId: serviceUser()!.id!,
|
||||
docPath: docFile.value!.path ?? "",
|
||||
docDetails: documentDetailsController.text,
|
||||
title: documentTitleController.text,
|
||||
addedBy: LocalStorageManager.userId)
|
||||
.showLoader();
|
||||
|
||||
backButtonPressed(argument: response);
|
||||
}
|
||||
} else if (viewOnly.isTrue) {
|
||||
backButtonPressed();
|
||||
} else {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please fill all fields and add Required Document");
|
||||
}
|
||||
}
|
||||
|
||||
void backButtonPressed({dynamic argument}) {
|
||||
// Get.delete<AddNewDocumentScreenController>();
|
||||
Navigator.of(screenKey.currentContext!).pop(argument);
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
bool validateFields() {
|
||||
return documentTitleController.text.isNotEmpty &&
|
||||
documentDetailsController.text.isNotEmpty &&
|
||||
(docFile.value != null || docIdReceived.isTrue);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,166 @@
|
||||
import 'package:adoptive_calendar/adoptive_calendar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/view/screens/clients/add_new_recent_incident_screen.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:quill_html_editor/quill_html_editor.dart';
|
||||
|
||||
class AddNewRecentIncidentScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final incidentDateTEC = TextEditingController();
|
||||
final incidentTitleTEC = TextEditingController();
|
||||
|
||||
// TextEditingController incidentDetails = TextEditingController();
|
||||
QuillEditorController incidentDetailsQuillFieldController =
|
||||
QuillEditorController();
|
||||
|
||||
final selectedDate = DateTime.now().obs;
|
||||
final isButtonEnabled = false.obs;
|
||||
|
||||
// DateTime? fromDateTime, toDateTime;
|
||||
// RecentIncidentsModel recentIncidentsModel = RecentIncidentsModel.empty();
|
||||
|
||||
// String userId = "";
|
||||
late final AddNewRecentIncidentsScreenArgs arguments;
|
||||
|
||||
AddNewRecentIncidentScreenController(AddNewRecentIncidentsScreenArgs args) {
|
||||
arguments = args;
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
incidentTitleTEC.addListener(_onIncidentTitleChanged);
|
||||
selectedDate.listen(_setDateTimeInField);
|
||||
|
||||
_setDateTimeInField(selectedDate());
|
||||
|
||||
fetchDataFromServiceAndSetToVariables();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
_onIncidentTitleChanged() {
|
||||
isButtonEnabled.value = incidentTitleTEC.text.isNotEmpty;
|
||||
}
|
||||
|
||||
_setDateTimeInField(DateTime d) {
|
||||
incidentDateTEC.text = FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
|
||||
void fetchDataFromServiceAndSetToVariables() async {
|
||||
if (arguments.incidentsModel != null) {
|
||||
selectedDate.value = DateTime.fromMillisecondsSinceEpoch(
|
||||
arguments.incidentsModel!.incidentDate);
|
||||
incidentTitleTEC.text = arguments.incidentsModel!.incidentTitle;
|
||||
await incidentDetailsQuillFieldController
|
||||
.setText(arguments.incidentsModel!.note);
|
||||
// isButtonEnabled.value = incidentTitleTEC.text.isNotEmpty;
|
||||
}
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
selectDate(context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
final DateTime? d = await showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AdoptiveCalendar(
|
||||
initialDate: DateTime.now(),
|
||||
action: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
if (d != null) {
|
||||
selectedDate.value = d;
|
||||
// incidentDateTEC.text = FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
// Future<void> selectDateFromPicker(
|
||||
// {required BuildContext context,
|
||||
// required DateTime minDate,
|
||||
// required DateTime maxDate}) async {
|
||||
// try {
|
||||
// final selected = await showDatePicker(
|
||||
// context: context,
|
||||
// initialDate: selectedDate.value,
|
||||
// firstDate: minDate,
|
||||
// lastDate: maxDate,
|
||||
// // initialDate: minDate,
|
||||
// // firstDate: DateTime.now(),
|
||||
// // lastDate: DateTime(DateTime.now().year+1),
|
||||
// // selectableDayPredicate: _showDatesToEnable,
|
||||
// builder: (BuildContext context, Widget? child) {
|
||||
// return Theme(
|
||||
// data: ThemeData.light().copyWith(
|
||||
// primaryColor: CustomAppColors.kSecondaryColor,
|
||||
// colorScheme: const ColorScheme.light(
|
||||
// primary: CustomAppColors.kSecondaryColor),
|
||||
// buttonTheme: const ButtonThemeData(
|
||||
// buttonColor: CustomAppColors.kSecondaryColor),
|
||||
// ),
|
||||
// child: child!,
|
||||
// );
|
||||
// });
|
||||
// if (selected != null) {
|
||||
// // updating selected date range based on selected week
|
||||
// // setState(() {
|
||||
// selectedDate.value = selected;
|
||||
// // });
|
||||
// // widget.onDayPressed?.call(
|
||||
// // selected, widget.markedDatesMap?.getEvents(selected) ?? const []);
|
||||
// }
|
||||
// } catch (e) {
|
||||
// FrequentFunctions.showDialog(
|
||||
// context: context,
|
||||
// title: 'Alert',
|
||||
// description:
|
||||
// 'Something went wrong!! Please check your Date and Time Settings',
|
||||
// type: DialogType.error,
|
||||
// btnOkColor: CustomAppColors.kRedColor);
|
||||
// }
|
||||
// }
|
||||
|
||||
Future<void> submitButtonPressed(BuildContext context) async {
|
||||
dynamic response;
|
||||
if (arguments.userId.isNotNullOrEmpty()) {
|
||||
response = await ClientService()
|
||||
.addRecentIncidentService(
|
||||
userId: arguments.userId!,
|
||||
incidentTitle: incidentTitleTEC.text,
|
||||
note: await incidentDetailsQuillFieldController.getText(),
|
||||
incidentDate: selectedDate.value.millisecondsSinceEpoch,
|
||||
)
|
||||
.showLoader();
|
||||
} else if (arguments.incidentsModel != null) {
|
||||
response = await ClientService()
|
||||
.updateRecentIncidentService(
|
||||
incidentId: arguments.incidentsModel!.incidentId,
|
||||
incidentNote: await incidentDetailsQuillFieldController.getText(),
|
||||
incidentTitle: incidentTitleTEC.text,
|
||||
incidentDate: selectedDate.value.millisecondsSinceEpoch,
|
||||
)
|
||||
.showLoader();
|
||||
}
|
||||
onBackPress(context, response: response);
|
||||
}
|
||||
|
||||
void onBackPress(BuildContext context, {dynamic response}) {
|
||||
// Get.delete<AddNewRecentIncidentScreenController>();
|
||||
Navigator.pop(context, response);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
incidentDateTEC.dispose();
|
||||
incidentTitleTEC.dispose();
|
||||
incidentTitleTEC.removeListener(_onIncidentTitleChanged);
|
||||
Get.delete<AddNewRecentIncidentScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
121
lib/controllers/clients/all_care_notes_screen_contorller.dart
Normal file
121
lib/controllers/clients/all_care_notes_screen_contorller.dart
Normal file
@@ -0,0 +1,121 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/allCareNotes/AllCareNotesListResponse.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/allCareNotes/CarePlans.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.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 AllCareNotesScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final notesList = RxList<CarePlan>();
|
||||
final canLoadMore = RxBool(false);
|
||||
|
||||
int _total = 0;
|
||||
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 serviceUserId = "";
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
|
||||
notesList.listen((list) {
|
||||
canLoadMore.value = list.length < _total;
|
||||
});
|
||||
}
|
||||
|
||||
void onRefresh() async {
|
||||
await getCareNotesList();
|
||||
_listRC.refreshCompleted();
|
||||
}
|
||||
|
||||
void onLoading() async {
|
||||
if (!loadingMore) {
|
||||
await _loadMore();
|
||||
}
|
||||
|
||||
_listRC.loadComplete();
|
||||
}
|
||||
|
||||
Future<void> getCareNotesList() async {
|
||||
_skip = 0;
|
||||
|
||||
var response = await ClientService()
|
||||
.getCarePlansList(
|
||||
serviceUserId: serviceUserId,
|
||||
limit: _limit,
|
||||
offset: _skip,
|
||||
)
|
||||
.showLoader();
|
||||
if (response is AllCareNotesListResponse) {
|
||||
if (response.data?.carePlans?.isNotEmpty == true) {
|
||||
_total = response.data?.carePlanCount ?? 0;
|
||||
_skip += _limit;
|
||||
notesList.value = (response.data?.carePlans ?? [])
|
||||
..sort((a, b) {
|
||||
if (b.flag == true) {
|
||||
return 1;
|
||||
}
|
||||
return -1;
|
||||
});
|
||||
} else {
|
||||
notesList.clear();
|
||||
}
|
||||
} else if (response is String && response.isNotEmpty) {
|
||||
notesList.clear();
|
||||
FrequentFunctions.showToast(message: response);
|
||||
} else {
|
||||
notesList.clear();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _loadMore() async {
|
||||
if (canLoadMore.isTrue) {
|
||||
loadingMore = true;
|
||||
|
||||
var response = await ClientService().getCarePlansList(
|
||||
serviceUserId: serviceUserId,
|
||||
limit: _limit,
|
||||
offset: _skip,
|
||||
);
|
||||
loadingMore = false;
|
||||
|
||||
if (response is AllCareNotesListResponse) {
|
||||
if (response.data?.carePlans?.isNotEmpty == true) {
|
||||
_skip += _limit;
|
||||
notesList.addAll(response.data?.carePlans ?? []);
|
||||
}
|
||||
} else if (response is String && response.isNotEmpty) {
|
||||
FrequentFunctions.showToast(message: response);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<AllCareNotesScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<AllCareNotesScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
71
lib/controllers/clients/appointment_screen_controller.dart
Normal file
71
lib/controllers/clients/appointment_screen_controller.dart
Normal file
@@ -0,0 +1,71 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pull_to_refresh_flutter3/pull_to_refresh_flutter3.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
import '../../models/appointmentsListResponse/AppointmentsListResponse.dart';
|
||||
|
||||
class AppointmentScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final appointments = <AppointmentsListResponseData>[].obs;
|
||||
|
||||
final _listRC = RefreshController(initialRefresh: false);
|
||||
|
||||
RefreshController get listRC => _listRC;
|
||||
|
||||
final _listSC = ScrollController();
|
||||
|
||||
ScrollController get listSC => _listSC;
|
||||
|
||||
String serviceUserId = "";
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
super.onReady();
|
||||
|
||||
getAppointmentsList();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
void onRefresh() async {
|
||||
await getAppointmentsList();
|
||||
_listRC.refreshCompleted();
|
||||
}
|
||||
|
||||
Future<void> getAppointmentsList() async {
|
||||
try {
|
||||
if (serviceUserId.isEmpty) {
|
||||
throw Exception("serviceUserId is not assigned");
|
||||
}
|
||||
|
||||
final response = await ClientService()
|
||||
.getAppointmentsList(
|
||||
serviceId: serviceUserId,
|
||||
startDate: DateTime.now().subtract(28.days).millisecondsSinceEpoch,
|
||||
endDate: DateTime.now().add(28.days).millisecondsSinceEpoch,
|
||||
)
|
||||
.showLoader();
|
||||
if (response.success == true) {
|
||||
appointments.value = response.data ?? [];
|
||||
} else {
|
||||
if (response.message.isNotNullOrEmpty()) {
|
||||
FrequentFunctions.showToast(message: response.message!);
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
debugPrint("getAppointmentsList error");
|
||||
debugPrint(e.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_listSC.dispose();
|
||||
Get.delete<AppointmentScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/ABC_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class ABCFormScreenController extends CommonCareNoteFormsController {
|
||||
final antecedentEventsController = TextEditingController();
|
||||
final behaviourController = TextEditingController();
|
||||
final consequenceEventsController = TextEditingController();
|
||||
|
||||
ABCFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
antecedentEventsController.dispose();
|
||||
behaviourController.dispose();
|
||||
consequenceEventsController.dispose();
|
||||
Get.delete<ABCFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (antecedentEventsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Antecedent Events field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (behaviourController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Behaviour field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (consequenceEventsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Consequence Events field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: ABCFormHtmlRequest(
|
||||
antecedentEvents: antecedentEventsController.text.trim(),
|
||||
behaviour: behaviourController.text.trim(),
|
||||
consequenceEvents: consequenceEventsController.text.trim(),
|
||||
).toHtml()),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
import 'dart:developer';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/physical_intervention_form_html_request.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/safeguarding_form_html_request.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/web_services/client_services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../../models/clients/body_points_category.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class CategorySubcategoryWidgetController extends GetxController {
|
||||
final bodyPointsCategoryList = RxList<BodyPointsCategory>();
|
||||
final selectedBodyPart = Rx<BodyPointsCategory?>(null);
|
||||
final selectedSubcategory = Rx<SubCat?>(null);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CategorySubcategoryWidgetController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
getBodyParts() async {
|
||||
var result = await ClientService().getBodyPointsCategoryList().showLoader();
|
||||
if (result is List && result is List<BodyPointsCategory>) {
|
||||
log('---------------bodyPointsCategoryList length before set -----------${bodyPointsCategoryList.length}');
|
||||
|
||||
List<BodyPointsCategory> uniqueList = removeDuplicates(result);
|
||||
bodyPointsCategoryList.value = uniqueList;
|
||||
// selectedBodyPart.value = bodyPointsCategoryList.first;
|
||||
}
|
||||
}
|
||||
|
||||
List<BodyPointsCategory> removeDuplicates(List<BodyPointsCategory> list) {
|
||||
List<BodyPointsCategory> uniqueList = [];
|
||||
Set<String> enumedSet = {};
|
||||
|
||||
for (var category in list) {
|
||||
if (!enumedSet.contains(category.idOne)) {
|
||||
uniqueList.add(category);
|
||||
enumedSet.add(category.idOne);
|
||||
}
|
||||
}
|
||||
|
||||
return uniqueList;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
import 'dart:convert';
|
||||
import 'package:adoptive_calendar/adoptive_calendar.dart';
|
||||
import 'package:ftc_mobile_app/models/response_model.dart';
|
||||
import 'package:ftc_mobile_app/models/user_model.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/web_services/client_services.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../../models/create_care_plan_request.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import '../../../utilities/export_utilities.dart';
|
||||
|
||||
export '../../../utilities/export_utilities.dart';
|
||||
export '../../../models/create_care_plan_request.dart';
|
||||
|
||||
class CommonCareNoteFormArgs {
|
||||
final String serviceUserId;
|
||||
final String noteType;
|
||||
|
||||
CommonCareNoteFormArgs({required this.serviceUserId, required this.noteType});
|
||||
}
|
||||
|
||||
abstract class CommonCareNoteFormsController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final dateController = TextEditingController();
|
||||
|
||||
DateTime? date;
|
||||
|
||||
final CommonCareNoteFormArgs args;
|
||||
|
||||
CommonCareNoteFormsController({required this.args});
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
selectDate(context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
final DateTime? d = await showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AdoptiveCalendar(
|
||||
initialDate: DateTime.now(),
|
||||
action: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
if (d != null) {
|
||||
date = d;
|
||||
dateController.text = FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
Future<dynamic> onFormSubmit({required CreateCarePlanRequest request}) async {
|
||||
// final userJson = LocalStorageManager.getSessionToken(
|
||||
// tokenKey: LocalStorageKeys.kUserModelKey,
|
||||
// );
|
||||
// print("userJson: $userJson");
|
||||
// final userModel = UserModel.fromJson(jsonDecode(userJson));
|
||||
request.addedby = LocalStorageManager.userId;
|
||||
request.userId = args.serviceUserId;
|
||||
request.noteType = args.noteType;
|
||||
if (date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
request.eventDateTime = date!.toUtc().millisecondsSinceEpoch;
|
||||
|
||||
final response =
|
||||
await ClientService().createCarePlan(request: request).showLoader();
|
||||
|
||||
if (response is ResponseModel) {
|
||||
Navigator.pop(screenKey.currentContext!);
|
||||
Navigator.pop(screenKey.currentContext!);
|
||||
FrequentFunctions.showToast(message: response.statusDescription);
|
||||
} else {
|
||||
FrequentFunctions.showToast(message: response['message']);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
dateController.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,285 @@
|
||||
import 'package:adoptive_calendar/adoptive_calendar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import '../../../models/clients/careNoteFormsRequests/HtmlTableOption.dart';
|
||||
import '../../../models/clients/careNoteFormsRequests/consent_capacity_html_request.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
import 'package:flutter/services.dart' show rootBundle;
|
||||
|
||||
class ConsentCapacityFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final commentsController = TextEditingController();
|
||||
final mentalCapacityAssessmentDetailController = TextEditingController();
|
||||
final specificDecisionDetailController = TextEditingController();
|
||||
final roleController = TextEditingController();
|
||||
final organisationController = TextEditingController();
|
||||
final addressController = TextEditingController();
|
||||
final telController = TextEditingController();
|
||||
final emailController = TextEditingController();
|
||||
final lackCapacityToMakeParticularDecisionDetailController =
|
||||
TextEditingController();
|
||||
final recordYourEvidenceDescribeController = TextEditingController();
|
||||
final viableOptionsConsideredController = TextEditingController();
|
||||
final explainWhyTickedBoxController = TextEditingController();
|
||||
final impairmentDescribeController = TextEditingController();
|
||||
final describeCanPersonDecisionInfoController = TextEditingController();
|
||||
final describeCanTheyRetainController = TextEditingController();
|
||||
final describeCanTheyUseController = TextEditingController();
|
||||
final describeCanTheyCommunicateController = TextEditingController();
|
||||
final evidenceController = TextEditingController();
|
||||
final whatIsYourEvidenceController = TextEditingController();
|
||||
final seekingManagementDescribeController = TextEditingController();
|
||||
final recordInterviewDescribeController = TextEditingController();
|
||||
final requireIMCAController = TextEditingController();
|
||||
final designationController = TextEditingController();
|
||||
final baseAddressController = TextEditingController();
|
||||
final contactDetailsController = TextEditingController();
|
||||
|
||||
final name1Controller = TextEditingController();
|
||||
final dontHaveDecisionNameController = TextEditingController();
|
||||
final haveDecisionNameController = TextEditingController();
|
||||
final assessorsName4Controller = TextEditingController();
|
||||
|
||||
final assessmentDateTimeController = TextEditingController();
|
||||
final dontHaveDecisionDateController = TextEditingController();
|
||||
final haveDecisionDateController = TextEditingController();
|
||||
final whyIMCARequiredDateController = TextEditingController();
|
||||
|
||||
//Yes/No radio selected options
|
||||
final selectedMCARequiredOption = Rx<String?>(null);
|
||||
final selectedImpairmentOption = Rx<String?>(null);
|
||||
final selectedCanPersonDecisionInfoOption = Rx<String?>(null);
|
||||
final selectedCanTheyRetainOption = Rx<String?>(null);
|
||||
final selectedCanTheyUseOption = Rx<String?>(null);
|
||||
final selectedCanTheyCommunicateOption = Rx<String?>(null);
|
||||
final selectedDoYouHaveConcernOption = Rx<String?>(null);
|
||||
final selectedDoesRequireIMCAOption = Rx<String>("No");
|
||||
|
||||
List<HtmlTableOption> canDecisionBeDelayedOptions = [
|
||||
HtmlTableOption(id: '1', requirements: 'The decision can be delayed'),
|
||||
HtmlTableOption(
|
||||
id: '2', requirements: 'Not appropriate to delay the decision'),
|
||||
HtmlTableOption(
|
||||
id: '3',
|
||||
requirements: 'Person not likely to gain or develop capacity '),
|
||||
];
|
||||
|
||||
List<HtmlTableOption> causativeNexusOptions = [
|
||||
HtmlTableOption(id: '1', requirements: 'Yes, there is a causative link '),
|
||||
HtmlTableOption(
|
||||
id: '2',
|
||||
requirements:
|
||||
'No, there is not a causative link, so the person has capacity to make the relevant decision. The decision may therefore be an unwise decision. '),
|
||||
];
|
||||
|
||||
DateTime? assessmentDateTime;
|
||||
DateTime? dontHaveDecisionDateTime;
|
||||
DateTime? haveDecisionDateTime;
|
||||
DateTime? whyIMCARequiredDateTime;
|
||||
|
||||
String consentCapacityHtml = "";
|
||||
|
||||
ConsentCapacityFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
loadConsentCapacityHtmlFile();
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
commentsController.dispose();
|
||||
mentalCapacityAssessmentDetailController.dispose();
|
||||
specificDecisionDetailController.dispose();
|
||||
roleController.dispose();
|
||||
organisationController.dispose();
|
||||
addressController.dispose();
|
||||
telController.dispose();
|
||||
emailController.dispose();
|
||||
assessmentDateTimeController.dispose();
|
||||
lackCapacityToMakeParticularDecisionDetailController.dispose();
|
||||
recordYourEvidenceDescribeController.dispose();
|
||||
viableOptionsConsideredController.dispose();
|
||||
explainWhyTickedBoxController.dispose();
|
||||
impairmentDescribeController.dispose();
|
||||
describeCanPersonDecisionInfoController.dispose();
|
||||
describeCanTheyRetainController.dispose();
|
||||
describeCanTheyUseController.dispose();
|
||||
describeCanTheyCommunicateController.dispose();
|
||||
evidenceController.dispose();
|
||||
whatIsYourEvidenceController.dispose();
|
||||
seekingManagementDescribeController.dispose();
|
||||
recordInterviewDescribeController.dispose();
|
||||
requireIMCAController.dispose();
|
||||
designationController.dispose();
|
||||
baseAddressController.dispose();
|
||||
contactDetailsController.dispose();
|
||||
|
||||
name1Controller.dispose();
|
||||
dontHaveDecisionNameController.dispose();
|
||||
haveDecisionNameController.dispose();
|
||||
assessorsName4Controller.dispose();
|
||||
|
||||
dontHaveDecisionDateController.dispose();
|
||||
haveDecisionDateController.dispose();
|
||||
whyIMCARequiredDateController.dispose();
|
||||
|
||||
Get.delete<ConsentCapacityFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future loadConsentCapacityHtmlFile() async {
|
||||
final htmlString =
|
||||
await rootBundle.loadString(AssetsManager.kConsentCapacityFormHtml);
|
||||
consentCapacityHtml = htmlString;
|
||||
}
|
||||
|
||||
Future<DateTime?> _unFocusAndPickDate(BuildContext context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
return await showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AdoptiveCalendar(
|
||||
initialDate: DateTime.now(),
|
||||
action: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
selectAssessmentDateTime(BuildContext context) async {
|
||||
final d = await _unFocusAndPickDate(context);
|
||||
|
||||
if (d != null) {
|
||||
assessmentDateTime = d;
|
||||
assessmentDateTimeController.text =
|
||||
FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
selectDontHaveDecisionDateTime(BuildContext context) async {
|
||||
final d = await _unFocusAndPickDate(context);
|
||||
|
||||
if (d != null) {
|
||||
dontHaveDecisionDateTime = d;
|
||||
dontHaveDecisionDateController.text =
|
||||
FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
selectHaveDecisionDateTime(BuildContext context) async {
|
||||
final d = await _unFocusAndPickDate(context);
|
||||
|
||||
if (d != null) {
|
||||
haveDecisionDateTime = d;
|
||||
haveDecisionDateController.text =
|
||||
FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
selectDateTimeOfWhyIMCARequired(BuildContext context) async {
|
||||
final d = await _unFocusAndPickDate(context);
|
||||
|
||||
if (d != null) {
|
||||
whyIMCARequiredDateTime = d;
|
||||
whyIMCARequiredDateController.text =
|
||||
FrequentFunctions.careNoteDateFormatter.format(d);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
final formatter = DateFormat("dd/MM/yyyy / hh:mm aa");
|
||||
|
||||
final consentCapacityHtmlString = ConsentCapacityHtmlRequest(
|
||||
isMCARequired: selectedMCARequiredOption()!,
|
||||
comments: commentsController.text.trim(),
|
||||
mentalCapacityAssessmentDetail:
|
||||
mentalCapacityAssessmentDetailController.text.trim(),
|
||||
specificDecisionDetail: specificDecisionDetailController.text.trim(),
|
||||
personUndertakingName: name1Controller.text.trim(),
|
||||
personUndertakingRole: roleController.text.trim(),
|
||||
organisation: organisationController.text.trim(),
|
||||
address: addressController.text.trim(),
|
||||
tel: telController.text.trim(),
|
||||
email: emailController.text.trim(),
|
||||
dateAndTimeOfAssessment: (assessmentDateTime != null)
|
||||
? formatter.format(assessmentDateTime!)
|
||||
: "",
|
||||
lackCapacityToMakeParticularDecisionDetail:
|
||||
lackCapacityToMakeParticularDecisionDetailController.text.trim(),
|
||||
recordYourEvidenceDescribe:
|
||||
recordYourEvidenceDescribeController.text.trim(),
|
||||
viableOptionsConsidered: viableOptionsConsideredController.text.trim(),
|
||||
explainWhyTickedBox: explainWhyTickedBoxController.text.trim(),
|
||||
canDecisionBeDelayedOptions: canDecisionBeDelayedOptions,
|
||||
selectedImpairmentOption: selectedImpairmentOption() ?? "",
|
||||
impairmentDescribe: impairmentDescribeController.text.trim(),
|
||||
selectedCanPersonDecisionInfoOption:
|
||||
selectedCanPersonDecisionInfoOption() ?? "",
|
||||
describeCanPersonDecisionInfo:
|
||||
describeCanPersonDecisionInfoController.text.trim(),
|
||||
selectedCanTheyRetainOption: selectedCanTheyRetainOption() ?? "",
|
||||
describeCanTheyRetain: describeCanTheyRetainController.text.trim(),
|
||||
selectedCanTheyUseOption: selectedCanTheyUseOption() ?? "",
|
||||
describeCanTheyUse: describeCanTheyUseController.text.trim(),
|
||||
selectedCanTheyCommunicateOption:
|
||||
selectedCanTheyCommunicateOption() ?? "",
|
||||
describeCanTheyCommunicate:
|
||||
describeCanTheyCommunicateController.text.trim(),
|
||||
causativeNexusOptions: causativeNexusOptions,
|
||||
evidence: evidenceController.text.trim(),
|
||||
selectedDoYouHaveConcernOption: selectedDoYouHaveConcernOption() ?? "",
|
||||
whatIsYourEvidence: whatIsYourEvidenceController.text.trim(),
|
||||
seekingManagementDescribe:
|
||||
seekingManagementDescribeController.text.trim(),
|
||||
recordInterviewDescribe: recordInterviewDescribeController.text.trim(),
|
||||
section9DontHaveDecisionNameData:
|
||||
dontHaveDecisionNameController.text.trim(),
|
||||
section9DontHaveDecisionDateData: (dontHaveDecisionDateTime != null)
|
||||
? formatter.format(dontHaveDecisionDateTime!)
|
||||
: "",
|
||||
section9HaveDecisionNameData: haveDecisionNameController.text.trim(),
|
||||
section9HaveDecisionDateData: (haveDecisionDateTime != null)
|
||||
? formatter.format(haveDecisionDateTime!)
|
||||
: "",
|
||||
isIMCARequired: selectedDoesRequireIMCAOption(),
|
||||
giveWhyIMCARequiredReason: requireIMCAController.text.trim(),
|
||||
whyIMCARequiredDateTime: (whyIMCARequiredDateTime != null)
|
||||
? formatter.format(whyIMCARequiredDateTime!)
|
||||
: "",
|
||||
section9AssessorsName: assessorsName4Controller.text.trim(),
|
||||
assessorsDesignation: designationController.text.trim(),
|
||||
assessorsBaseAddress: baseAddressController.text.trim(),
|
||||
assessorsContactDetailsData: contactDetailsController.text.trim(),
|
||||
).toHtml(consentCapacityHtml);
|
||||
|
||||
// log("consentCapacityHtmlString: $consentCapacityHtmlString");
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: consentCapacityHtmlString,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class FreeTextEntriesFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final titleController = TextEditingController();
|
||||
final noteDetailsController = TextEditingController();
|
||||
|
||||
final flagForHandover = false.obs;
|
||||
|
||||
FreeTextEntriesFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
titleController.dispose();
|
||||
noteDetailsController.dispose();
|
||||
Get.delete<FreeTextEntriesFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (titleController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Title field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (noteDetailsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Note Details field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
title: titleController.text.trim(),
|
||||
noteDetails: noteDetailsController.text.trim(),
|
||||
flag: flagForHandover(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/health_appointments_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class HealthAppointmentsFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final reasonController = TextEditingController();
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final appointmentWith = [
|
||||
"GP",
|
||||
"CAMHS",
|
||||
"Psychologist",
|
||||
"A&E",
|
||||
"Sexual Health",
|
||||
"Social Worker",
|
||||
"Other"
|
||||
];
|
||||
|
||||
String? selectedAppointmentWith;
|
||||
|
||||
HealthAppointmentsFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
reasonController.dispose();
|
||||
commentsController.dispose();
|
||||
Get.delete<HealthAppointmentsFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (selectedAppointmentWith == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select appointment with",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (reasonController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Reason for appointment field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: HealthAppointmentsFormHtmlRequest(
|
||||
appointmentWith: selectedAppointmentWith!,
|
||||
reason: reasonController.text.trim(),
|
||||
comments: commentsController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'category_subcategory_widget_controller.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class InjuryHealthIssueFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final nameOfWitnesses = TextEditingController();
|
||||
final placeOfAccident = TextEditingController();
|
||||
final accidentDescription = TextEditingController();
|
||||
final recordOfInjury = TextEditingController();
|
||||
final conditionOfPatient = TextEditingController();
|
||||
final nameOfParentContacted = TextEditingController();
|
||||
final parentContactedTime = TextEditingController();
|
||||
|
||||
final isParentContacted = RxString("No");
|
||||
final howParentContacted = Rx<String?>(null);
|
||||
|
||||
final catSubCatController = Get.put(CategorySubcategoryWidgetController());
|
||||
|
||||
InjuryHealthIssueFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
catSubCatController.getBodyParts();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
nameOfWitnesses.dispose();
|
||||
placeOfAccident.dispose();
|
||||
accidentDescription.dispose();
|
||||
recordOfInjury.dispose();
|
||||
conditionOfPatient.dispose();
|
||||
nameOfParentContacted.dispose();
|
||||
parentContactedTime.dispose();
|
||||
|
||||
catSubCatController.dispose();
|
||||
|
||||
Get.delete<InjuryHealthIssueFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
selectParentContactTime(context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
TimeOfDay? timeOfDay = await FrequentFunctions.selectTime(context,
|
||||
selectedTime: TimeOfDay.now(),
|
||||
themeColor: Get.theme.colorScheme.primary);
|
||||
|
||||
if (timeOfDay != null) {
|
||||
parentContactedTime.text = timeOfDay.format(context);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nameOfWitnesses.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Name of witnesses/adults present field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (placeOfAccident.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Place accident occured field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (accidentDescription.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Description how the accident occured field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select category first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart()!.subCategory.isNotEmpty &&
|
||||
catSubCatController.selectedSubcategory() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select subcategory",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isParentContacted() == "Yes" &&
|
||||
nameOfParentContacted.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Name of parent contacted field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isParentContacted() == "Yes" &&
|
||||
parentContactedTime.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select parent contacted time",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isParentContacted() == "Yes" && howParentContacted() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select how parent was contacted",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
category: catSubCatController.selectedSubcategory()?.id ??
|
||||
catSubCatController.selectedBodyPart()!.id,
|
||||
noteDetails: CreateCarePlanRequest.injuryHealthIssueHtmlReq(
|
||||
nameOfWitnesses: nameOfWitnesses.text.trim(),
|
||||
placeOfAccident: placeOfAccident.text.trim(),
|
||||
accidentDescription: accidentDescription.text.trim(),
|
||||
recordOfInjury: recordOfInjury.text.trim(),
|
||||
conditionOfPatient: conditionOfPatient.text.trim(),
|
||||
isParentContacted: isParentContacted(),
|
||||
nameOfParentContacted: isParentContacted() != "Yes"
|
||||
? null
|
||||
: nameOfParentContacted.text.trim(),
|
||||
parentContactedTime: isParentContacted() != "Yes"
|
||||
? null
|
||||
: parentContactedTime.text.trim(),
|
||||
howParentContacted:
|
||||
isParentContacted() != "Yes" ? null : howParentContacted()!,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import '../../../models/mood_rating_data.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class MoodRatingFormController extends CommonCareNoteFormsController {
|
||||
MoodRatingFormController({required super.args});
|
||||
|
||||
final ratings = <MoodRatingData>[
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcAngry, name: 'Angry'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcBored, name: 'Bored'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcCalm, name: 'Calm'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcConfident, name: 'Confident'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcExcited, name: 'Excited'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcHappy, name: 'Happy'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcHopeful, name: 'Hopeful'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcNervous, name: 'Nervous'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcProud, name: 'Proud'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcRelaxed, name: 'Relaxed'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcSad, name: 'Sad'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcScared, name: 'Scared'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcTired, name: 'Tired'),
|
||||
MoodRatingData(icon: AssetsManager.ratingsIcWorried, name: 'Worried'),
|
||||
];
|
||||
|
||||
final Rx<MoodRatingData?> selectedRating = Rx<MoodRatingData?>(null);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<MoodRatingFormController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (selectedRating() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select your mood rating",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
title: "Mood Rating is ${selectedRating()!.name}",
|
||||
noteDetails:
|
||||
"Mood Rating is ${selectedRating()!.name} at ${DateFormat("hh:mm aa on dd/MM/yyyy").format(date!)}",
|
||||
moodRating: selectedRating()!.name,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/nutrition_hydration_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
abstract class NutritionHydrationType {
|
||||
static const String food = "Food";
|
||||
static const String fluid = "Fluid";
|
||||
}
|
||||
|
||||
class NutritionHydrationFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final mealDrinkTypeController = TextEditingController();
|
||||
final amountController = TextEditingController();
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final selectedType = RxString(NutritionHydrationType.food);
|
||||
|
||||
final typeOptions = [
|
||||
NutritionHydrationType.food,
|
||||
NutritionHydrationType.fluid
|
||||
];
|
||||
|
||||
NutritionHydrationFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
mealDrinkTypeController.dispose();
|
||||
amountController.dispose();
|
||||
commentsController.dispose();
|
||||
Get.delete<NutritionHydrationFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: NutritionHydrationFormHtmlRequest(
|
||||
nutritionHydrationType: selectedType(),
|
||||
foodFluidType: mealDrinkTypeController.text.trim(),
|
||||
foodFluidAmount: amountController.text.trim(),
|
||||
comments: commentsController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/observations_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class ObservationsFormScreenController extends CommonCareNoteFormsController {
|
||||
final heartRateController = TextEditingController();
|
||||
final bloodPressureController = TextEditingController();
|
||||
final respiratoryRateController = TextEditingController();
|
||||
final oxygenController = TextEditingController();
|
||||
final temperatureController = TextEditingController();
|
||||
final bloodSugarController = TextEditingController();
|
||||
|
||||
ObservationsFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
heartRateController.dispose();
|
||||
bloodPressureController.dispose();
|
||||
respiratoryRateController.dispose();
|
||||
oxygenController.dispose();
|
||||
temperatureController.dispose();
|
||||
bloodSugarController.dispose();
|
||||
|
||||
Get.delete<ObservationsFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (heartRateController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Heart Rate field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (bloodPressureController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Blood Pressure field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (respiratoryRateController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Respiratory Rate field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (oxygenController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Oxygen field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (temperatureController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Temperature field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (bloodSugarController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Blood Sugar field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: ObservationsFormHtmlReq(
|
||||
heartRate: heartRateController.text.trim(),
|
||||
bloodPressure: bloodPressureController.text.trim(),
|
||||
respiratoryRate: respiratoryRateController.text.trim(),
|
||||
oxygen: oxygenController.text.trim(),
|
||||
temperature: temperatureController.text.trim(),
|
||||
bloodSugar: bloodSugarController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,209 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/physical_intervention_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../../models/clients/careNoteFormsRequests/HtmlTableOption.dart';
|
||||
import 'category_subcategory_widget_controller.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class PhysicalInterventionFormScreenController
|
||||
extends CommonCareNoteFormsController {
|
||||
final durationOfIncidentController = TextEditingController();
|
||||
final staffDebriefFormNumberController = TextEditingController();
|
||||
final nameOfWitnessController = TextEditingController();
|
||||
final incidentPlaceController = TextEditingController();
|
||||
final whatWasUsedController = TextEditingController();
|
||||
final wasThePbsFollowedController = TextEditingController();
|
||||
final reasonForPhysicalInterventionController = TextEditingController();
|
||||
final staffInvolvedController = TextEditingController();
|
||||
final conditionOfServiceUserController = TextEditingController();
|
||||
final userClamedController = TextEditingController();
|
||||
final explainController = TextEditingController();
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final nameOfParentContacted = TextEditingController();
|
||||
final parentContactedTime = TextEditingController();
|
||||
|
||||
final isParentContacted = RxString("No");
|
||||
final howParentContacted = Rx<String?>(null);
|
||||
final howFormSharedRx = Rx<String?>(null);
|
||||
|
||||
final catSubCatController = Get.put(CategorySubcategoryWidgetController());
|
||||
|
||||
List<HtmlTableOption> whyForceNecessaryOptions = [
|
||||
HtmlTableOption(
|
||||
id: '1', requirements: 'Service User was placing themselves at risk'),
|
||||
HtmlTableOption(
|
||||
id: '2', requirements: 'Service User was placing others at risk'),
|
||||
HtmlTableOption(
|
||||
id: '3', requirements: 'Significant Damage to property'),
|
||||
HtmlTableOption(
|
||||
id: '4', requirements: 'Illegal offence was being carried out'),
|
||||
HtmlTableOption(id: '5', requirements: 'Other'),
|
||||
];
|
||||
|
||||
final isParentContactedOptions = ['Yes', 'No'];
|
||||
final howParentContactedOptions = [
|
||||
'Call',
|
||||
'Email',
|
||||
'Other',
|
||||
'Upon collection/drop off'
|
||||
];
|
||||
final howFormSharedOptions = ['Paper', 'Email', 'Other'];
|
||||
|
||||
PhysicalInterventionFormScreenController(
|
||||
{required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
catSubCatController.getBodyParts();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
durationOfIncidentController.dispose();
|
||||
staffDebriefFormNumberController.dispose();
|
||||
nameOfWitnessController.dispose();
|
||||
incidentPlaceController.dispose();
|
||||
whatWasUsedController.dispose();
|
||||
wasThePbsFollowedController.dispose();
|
||||
reasonForPhysicalInterventionController.dispose();
|
||||
staffInvolvedController.dispose();
|
||||
conditionOfServiceUserController.dispose();
|
||||
userClamedController.dispose();
|
||||
explainController.dispose();
|
||||
commentsController.dispose();
|
||||
nameOfParentContacted.dispose();
|
||||
parentContactedTime.dispose();
|
||||
|
||||
catSubCatController.dispose();
|
||||
|
||||
Get.delete<PhysicalInterventionFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
selectParentContactTime(context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
TimeOfDay? timeOfDay = await FrequentFunctions.selectTime(context,
|
||||
selectedTime: TimeOfDay.now(),
|
||||
themeColor: Get.theme.colorScheme.primary);
|
||||
|
||||
if (timeOfDay != null) {
|
||||
parentContactedTime.text = timeOfDay.format(context);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (durationOfIncidentController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Concerns about the service user field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (staffDebriefFormNumberController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Voice of the service user field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (nameOfWitnessController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Are there any immediate risks field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select category first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart()!.subCategory.isNotEmpty &&
|
||||
catSubCatController.selectedSubcategory() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select subcategory",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (isParentContacted() == "Yes" &&
|
||||
nameOfParentContacted.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Name of parent contacted field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isParentContacted() == "Yes" &&
|
||||
parentContactedTime.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select parent contacted time",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (isParentContacted() == "Yes" && howParentContacted() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select how parent was contacted",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (howFormSharedRx() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select How was this form shared with parents/carers?",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
category: catSubCatController.selectedSubcategory()?.id ??
|
||||
catSubCatController.selectedBodyPart()!.id,
|
||||
noteDetails: PhysicalInterventionFormHtmlRequest(
|
||||
durationOfIncidents: durationOfIncidentController.text.trim(),
|
||||
staffDebriefFormNumber:
|
||||
staffDebriefFormNumberController.text.trim(),
|
||||
nameOfWitnesses: nameOfWitnessController.text.trim(),
|
||||
placeOfIncident: incidentPlaceController.text.trim(),
|
||||
priorToIntervention: whatWasUsedController.text.trim(),
|
||||
pbsFollowed: wasThePbsFollowedController.text.trim(),
|
||||
reasonForPhysicalIntervention:
|
||||
reasonForPhysicalInterventionController.text.trim(),
|
||||
staffInvolvedInPI: staffInvolvedController.text.trim(),
|
||||
conditionOfSU: conditionOfServiceUserController.text.trim(),
|
||||
howSuCalmed: userClamedController.text.trim(),
|
||||
useOfForceNecessary: whyForceNecessaryOptions,
|
||||
pleaseExplain: explainController.text.trim(),
|
||||
isParentContacted: isParentContacted(),
|
||||
nameOfParentContacted: isParentContacted() != "Yes"
|
||||
? ""
|
||||
: nameOfParentContacted.text.trim(),
|
||||
parentContactedTime: isParentContacted() != "Yes"
|
||||
? ""
|
||||
: parentContactedTime.text.trim(),
|
||||
howParentContacted:
|
||||
isParentContacted() != "Yes" ? "" : howParentContacted()!,
|
||||
parentCarersComments: commentsController.text.trim(),
|
||||
howFormWasShared: howFormSharedRx()!)
|
||||
.toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
import 'package:adoptive_calendar/adoptive_calendar.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/safeguarding_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'category_subcategory_widget_controller.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class SafeguardingFormScreenController extends CommonCareNoteFormsController {
|
||||
final concernAboutServiceUserController = TextEditingController();
|
||||
final voiceOfServiceUserController = TextEditingController();
|
||||
final anyImmediateRisksController = TextEditingController();
|
||||
final qActionTakenController = TextEditingController();
|
||||
final commentsController = TextEditingController();
|
||||
final nameController1 = TextEditingController();
|
||||
final nameController2 = TextEditingController();
|
||||
final anyWitnessesController = TextEditingController();
|
||||
final reportingDateTimeController = TextEditingController();
|
||||
final actionTakenController = TextEditingController();
|
||||
|
||||
final catSubCatController = Get.put(CategorySubcategoryWidgetController());
|
||||
|
||||
SafeguardingFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
catSubCatController.getBodyParts();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
concernAboutServiceUserController.dispose();
|
||||
voiceOfServiceUserController.dispose();
|
||||
anyImmediateRisksController.dispose();
|
||||
qActionTakenController.dispose();
|
||||
commentsController.dispose();
|
||||
nameController1.dispose();
|
||||
nameController2.dispose();
|
||||
anyWitnessesController.dispose();
|
||||
reportingDateTimeController.dispose();
|
||||
actionTakenController.dispose();
|
||||
catSubCatController.dispose();
|
||||
|
||||
Get.delete<SafeguardingFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
selectDateAndTimeOfReporting(context) async {
|
||||
Get.focusScope?.unfocus();
|
||||
final DateTime? d = await showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return AdoptiveCalendar(
|
||||
initialDate: DateTime.now(),
|
||||
action: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
// final d = await CommonCode.datePicker(context);
|
||||
|
||||
if (d != null) {
|
||||
reportingDateTimeController.text =
|
||||
FrequentFunctions.careNoteDateFormatter.format(d).toLowerCase();
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (concernAboutServiceUserController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Concerns about the service user field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (voiceOfServiceUserController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Voice of the service user field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (anyImmediateRisksController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Are there any immediate risks field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select category first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (catSubCatController.selectedBodyPart()!.subCategory.isNotEmpty &&
|
||||
catSubCatController.selectedSubcategory() == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select subcategory",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
category: catSubCatController.selectedSubcategory()?.id ??
|
||||
catSubCatController.selectedBodyPart()!.id,
|
||||
noteDetails: SafeguardingFormHtmlRequest(
|
||||
concernsAboutServiceUser:
|
||||
concernAboutServiceUserController.text.trim(),
|
||||
voiceOfTheServiceUser: voiceOfServiceUserController.text.trim(),
|
||||
areThereAnyImmediateRisks: anyImmediateRisksController.text.trim(),
|
||||
whatActionDoYouFeel: qActionTakenController.text.trim(),
|
||||
comments: commentsController.text.trim(),
|
||||
yourName: nameController1.text.trim(),
|
||||
anyWitnesses: anyWitnessesController.text.trim(),
|
||||
dateTimeReporting: reportingDateTimeController.text.trim(),
|
||||
yourNameDslDdsl: nameController2.text.trim(),
|
||||
actionTaken: actionTakenController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,51 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/showering_and_bath_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class ShoweringBathFormScreenController extends CommonCareNoteFormsController {
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final selectedOption = Rx<String>('Bath');
|
||||
|
||||
ShoweringBathFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
commentsController.dispose();
|
||||
Get.delete<ShoweringBathFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: ShoweringAndBathFormHtmlRequest(
|
||||
showeringBathType: selectedOption(),
|
||||
comments: commentsController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/careNoteFormsRequests/toileting_form_html_request.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class ToiletingNoteFormScreenController extends CommonCareNoteFormsController {
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final selectedOption = Rx<String?>(null);
|
||||
final assistanceRequired = false.obs;
|
||||
|
||||
ToiletingNoteFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
commentsController.dispose();
|
||||
Get.delete<ToiletingNoteFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (assistanceRequired() && commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: ToiletingFormHtmlRequest(
|
||||
assistanceRequired: assistanceRequired(),
|
||||
assistanceType: !assistanceRequired() ? "" : (selectedOption() ?? ""),
|
||||
comments: !assistanceRequired() ? "" : commentsController.text.trim(),
|
||||
).toHtml(),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'common_care_note_forms_controller.dart';
|
||||
|
||||
class WeightHeightFormScreenController extends CommonCareNoteFormsController {
|
||||
final heightController = TextEditingController();
|
||||
final weightController = TextEditingController();
|
||||
final commentsController = TextEditingController();
|
||||
|
||||
final appointmentWith = [
|
||||
"GP",
|
||||
"CAMHS",
|
||||
"Psychologist",
|
||||
"A&E",
|
||||
"Sexual Health",
|
||||
"Social Worker",
|
||||
"Other"
|
||||
];
|
||||
|
||||
WeightHeightFormScreenController({required CommonCareNoteFormArgs args})
|
||||
: super(args: args);
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
heightController.dispose();
|
||||
weightController.dispose();
|
||||
commentsController.dispose();
|
||||
Get.delete<WeightHeightFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
Future<void> onSaveButtonTap() async {
|
||||
// if (super.date == null || super.time == null) {
|
||||
if (super.date == null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Please select date and time first",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (heightController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Height field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (weightController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Weight field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
if (commentsController.text.trim().isEmpty) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Comments field is required",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
super.removeFocus();
|
||||
|
||||
await onFormSubmit(
|
||||
request: CreateCarePlanRequest(
|
||||
isHTML: true,
|
||||
flag: false,
|
||||
title: "",
|
||||
noteDetails: CreateCarePlanRequest.heightWeightHtmlReq(
|
||||
heightController.text.trim(),
|
||||
weightController.text.trim(),
|
||||
commentsController.text.trim(),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:webview_flutter/webview_flutter.dart';
|
||||
import '../../models/clients/allCareNotes/CarePlans.dart';
|
||||
import '../../view/screens/clients/care_note_detail_screen.dart';
|
||||
|
||||
class CareNoteDetailScreenController extends GetxController {
|
||||
final isLoadingWebPage = false.obs;
|
||||
final webViewHeight = (300.0).obs;
|
||||
|
||||
late final WebViewController webViewController;
|
||||
|
||||
String headerHtml = """<div></div>""";
|
||||
|
||||
final CarePlan data;
|
||||
|
||||
CareNoteDetailScreenController(this.data) {
|
||||
headerHtml = """<p>
|
||||
<strong>${data.addedby?.name ?? ""}</strong>
|
||||
<small>${(data.eventDateTime == null) ? "" : DateFormat("dd/MM/yyyy hh:mm aa").format(DateTime.fromMillisecondsSinceEpoch(data.eventDateTime!).toLocal())}</small>
|
||||
</p>
|
||||
""";
|
||||
|
||||
if (data.isHTML == true) {
|
||||
final bodyPartHtml = (data.healthIssueId?.category == null)
|
||||
? ""
|
||||
: """<p>
|
||||
<strong>Effected Body Part</strong>
|
||||
<small>${data.healthIssueId!.category!.name}</small>
|
||||
</p>""";
|
||||
|
||||
webViewController = WebViewController()
|
||||
..setJavaScriptMode(JavaScriptMode.unrestricted)
|
||||
..setBackgroundColor(const Color(0x00000000))
|
||||
..setNavigationDelegate(
|
||||
NavigationDelegate(
|
||||
onProgress: (int progress) {},
|
||||
onPageStarted: (String url) {
|
||||
isLoadingWebPage.value = true;
|
||||
},
|
||||
onPageFinished: (String url) {
|
||||
updateWebViewHeight();
|
||||
},
|
||||
onHttpError: (HttpResponseError error) {},
|
||||
onWebResourceError: (WebResourceError error) {},
|
||||
onNavigationRequest: (NavigationRequest request) {
|
||||
if (request.url.startsWith('https://www.youtube.com/')) {
|
||||
return NavigationDecision.prevent;
|
||||
}
|
||||
return NavigationDecision.navigate;
|
||||
},
|
||||
),
|
||||
)
|
||||
..loadHtmlString(CareNoteDetailScreen.meta +
|
||||
CareNoteDetailScreen.css +
|
||||
headerHtml +
|
||||
data.noteDetails! +
|
||||
bodyPartHtml);
|
||||
}
|
||||
}
|
||||
|
||||
void updateWebViewHeight() async {
|
||||
final height = await webViewController
|
||||
.runJavaScriptReturningResult('document.body.scrollHeight;');
|
||||
if (height is String) {
|
||||
double h = double.parse(height);
|
||||
webViewHeight.value = h;
|
||||
} else if (height is double) {
|
||||
webViewHeight.value = height;
|
||||
}
|
||||
|
||||
isLoadingWebPage.value = false;
|
||||
}
|
||||
}
|
||||
273
lib/controllers/clients/care_notes_screen_controller.dart
Normal file
273
lib/controllers/clients/care_notes_screen_controller.dart
Normal file
@@ -0,0 +1,273 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/utilities/enums/care_note_form_type.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
import '../../models/clients/care_note_category.dart';
|
||||
|
||||
class CareNotesScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final List<CareNoteCategory> categories = [];
|
||||
|
||||
final categoriesMapList = [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcHealth,
|
||||
"category": "Health",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcInjury,
|
||||
"name": "Injury / Health Issue",
|
||||
"formType": CareNotesFormType.injuryHealthIssueForm.text,
|
||||
"apiValue": CareNotesFormType.injuryHealthIssueForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcWeightHeight,
|
||||
"name": "Weight / Height",
|
||||
"formType": CareNotesFormType.weightHeightForm.text,
|
||||
"apiValue": CareNotesFormType.weightHeightForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcAppointment,
|
||||
"name": "Health appointments",
|
||||
"formType": CareNotesFormType.healthAppointmentForm.text,
|
||||
"apiValue": CareNotesFormType.healthAppointmentForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcSearch,
|
||||
"name": "Observations",
|
||||
"formType": CareNotesFormType.observationsForm.text,
|
||||
"apiValue": CareNotesFormType.observationsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType": CareNotesFormType.healthOtherForm.text,
|
||||
"apiValue": CareNotesFormType.healthOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcGeneral,
|
||||
"category": "General",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcNote,
|
||||
"name": "General Note",
|
||||
"formType": CareNotesFormType.generalNoteForm.text,
|
||||
"apiValue": CareNotesFormType.generalNoteForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcActivity,
|
||||
"name": "Activities",
|
||||
"formType": CareNotesFormType.activitiesForm.text,
|
||||
"apiValue": CareNotesFormType.activitiesForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcSleep,
|
||||
"name": "Sleep",
|
||||
"formType": CareNotesFormType.sleepForm.text,
|
||||
"apiValue": CareNotesFormType.sleepForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcSafeguarding,
|
||||
"name": "Safeguarding",
|
||||
"formType": CareNotesFormType.safeguardingForm.text,
|
||||
"apiValue": CareNotesFormType.safeguardingForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType": CareNotesFormType.generalOtherForm.text,
|
||||
"apiValue": CareNotesFormType.generalOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcPersonalCare,
|
||||
"category": "Personal Care",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcToileting,
|
||||
"name": "Toileting",
|
||||
"formType": CareNotesFormType.toiletingNoteForm.text,
|
||||
"apiValue": CareNotesFormType.toiletingNoteForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcShower,
|
||||
"name": "Showering / Bath",
|
||||
"formType": CareNotesFormType.showeringBathForm.text,
|
||||
"apiValue": CareNotesFormType.showeringBathForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcMouthHygiene,
|
||||
"name": "Mouth Hygiene",
|
||||
"formType": CareNotesFormType.mouthHygieneForm.text,
|
||||
"apiValue": CareNotesFormType.mouthHygieneForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType": CareNotesFormType.personalCareOtherForm.text,
|
||||
"apiValue": CareNotesFormType.personalCareOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcMentalWellbeing,
|
||||
"category": "Mental Wellbeing",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcMood,
|
||||
"name": "Mood Rating",
|
||||
"formType": CareNotesFormType.moodRatingForm.text,
|
||||
"apiValue": CareNotesFormType.moodRatingForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcAbc,
|
||||
"name": "ABC",
|
||||
"formType": CareNotesFormType.ABCForm.text,
|
||||
"apiValue": CareNotesFormType.ABCForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcPhysicalIntervention,
|
||||
"name": "Physical Intervention",
|
||||
"formType": CareNotesFormType.physicalInterventionForm.text,
|
||||
"apiValue": CareNotesFormType.physicalInterventionForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcConsent,
|
||||
"name": "Consent, Capacity, MCA & DOLS",
|
||||
"formType": CareNotesFormType.consentCapacityForm.text,
|
||||
"apiValue": CareNotesFormType.consentCapacityForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType": CareNotesFormType.mentalWellbeingOtherForm.text,
|
||||
"apiValue": CareNotesFormType.mentalWellbeingOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcIntractions,
|
||||
"category": "Professional/family Interactions",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcMeeting,
|
||||
"name": "Meetings",
|
||||
"formType": CareNotesFormType.meetingsForm.text,
|
||||
"apiValue": CareNotesFormType.meetingsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcTelephone,
|
||||
"name": "Telephone Calls",
|
||||
"formType": CareNotesFormType.telephoneCallsForm.text,
|
||||
"apiValue": CareNotesFormType.telephoneCallsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcReviews,
|
||||
"name": "Reviews",
|
||||
"formType": CareNotesFormType.reviewsForm.text,
|
||||
"apiValue": CareNotesFormType.reviewsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcEmail,
|
||||
"name": "Emails",
|
||||
"formType": CareNotesFormType.emailsForm.text,
|
||||
"apiValue": CareNotesFormType.emailsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOtherInteractions,
|
||||
"name": "All other interactions",
|
||||
"formType": CareNotesFormType.allOtherInteractionsForm.text,
|
||||
"apiValue": CareNotesFormType.allOtherInteractionsForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType":
|
||||
CareNotesFormType.professionalFamilyInteractionsOtherForm.text,
|
||||
"apiValue":
|
||||
CareNotesFormType.professionalFamilyInteractionsOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcIndependentLiving,
|
||||
"category": "Independent Living",
|
||||
"subcategories": [
|
||||
{
|
||||
"iconPath": AssetsManager.kIcLaundry,
|
||||
"name": "Laundry",
|
||||
"formType": CareNotesFormType.laundryForm.text,
|
||||
"apiValue": CareNotesFormType.laundryForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcCooking,
|
||||
"name": "Cooking",
|
||||
"formType": CareNotesFormType.cookingForm.text,
|
||||
"apiValue": CareNotesFormType.cookingForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcHydration,
|
||||
"name": "Nutrition / Hydration",
|
||||
"formType": CareNotesFormType.nutritionHydrationForm.text,
|
||||
"apiValue": CareNotesFormType.nutritionHydrationForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcCleaning,
|
||||
"name": "Cleaning",
|
||||
"formType": CareNotesFormType.cleaningForm.text,
|
||||
"apiValue": CareNotesFormType.cleaningForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcFinance,
|
||||
"name": "Finance",
|
||||
"formType": CareNotesFormType.financeForm.text,
|
||||
"apiValue": CareNotesFormType.financeForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcPublicInteraction,
|
||||
"name": "Public interaction (including transport)",
|
||||
"formType": CareNotesFormType.publicInteractionForm.text,
|
||||
"apiValue": CareNotesFormType.publicInteractionForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcEducation,
|
||||
"name": "Education",
|
||||
"formType": CareNotesFormType.educationForm.text,
|
||||
"apiValue": CareNotesFormType.educationForm.apiValue,
|
||||
},
|
||||
{
|
||||
"iconPath": AssetsManager.kIcOthers,
|
||||
"name": "Others",
|
||||
"formType": CareNotesFormType.independentLivingOtherForm.text,
|
||||
"apiValue": CareNotesFormType.independentLivingOtherForm.apiValue,
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
for (var e in categoriesMapList) {
|
||||
categories.add(CareNoteCategory.fromJson(e));
|
||||
}
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CareNotesScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<CareNotesScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/service_users_model.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
import '../../models/clients/care_note_category.dart';
|
||||
|
||||
class CareNotesSubcategoriesScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CareNotesSubcategoriesScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<CareNotesSubcategoriesScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../ftc_mobile_app.dart';
|
||||
import '../../models/clients/service_users_model.dart';
|
||||
|
||||
class CarePlanMenuScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
var argument;
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
CarePlanMenuScreenController({required UserData data}) {
|
||||
serviceUser.value = data;
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
if (CustomRouteGenerator.argument != null) {
|
||||
argument = CustomRouteGenerator.argument;
|
||||
if (argument is ServiceUserModel) {
|
||||
serviceUser.value = argument;
|
||||
}
|
||||
}
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CarePlanMenuScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<CarePlanMenuScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/service_users_model.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
|
||||
class ClientProfileScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
ClientProfileScreenController({required UserData data}) {
|
||||
serviceUser.value = data;
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<ClientProfileScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<ClientProfileScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
127
lib/controllers/clients/clients_list_screen_controller.dart
Normal file
127
lib/controllers/clients/clients_list_screen_controller.dart
Normal file
@@ -0,0 +1,127 @@
|
||||
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: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 ClientsListScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
final searchController = TextEditingController();
|
||||
|
||||
final serviceUsersList = 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() {
|
||||
getClients();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void onRefresh() async {
|
||||
await getClients();
|
||||
_listRC.refreshCompleted();
|
||||
}
|
||||
|
||||
void onLoading() async {
|
||||
if (!loadingMore) {
|
||||
await _loadMore();
|
||||
}
|
||||
|
||||
_listRC.loadComplete();
|
||||
}
|
||||
|
||||
onSearch(String text) {
|
||||
getClients();
|
||||
}
|
||||
|
||||
Future<void> getClients() async {
|
||||
serviceUsersList.clear();
|
||||
_skip = 0;
|
||||
var response = await ClientService()
|
||||
.getServiceUsersList(
|
||||
searchText: searchText(),
|
||||
limit: _limit,
|
||||
offset: _skip,
|
||||
)
|
||||
.showLoader();
|
||||
|
||||
if (response.success == true) {
|
||||
if (response.data?.users?.isNotEmpty == true) {
|
||||
_skip += _limit;
|
||||
serviceUsersList.value = response.data?.users ?? <UserData>[];
|
||||
canLoadMore.value = true;
|
||||
} 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;
|
||||
serviceUsersList.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<ClientsListScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<ClientsListScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,85 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../models/clients/consent_details_model.dart';
|
||||
|
||||
class ConsentAndCapacityAddNewFormScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
final firstNameController = TextEditingController();
|
||||
final lastNameController = TextEditingController();
|
||||
final phoneController = TextEditingController();
|
||||
final emailController = TextEditingController();
|
||||
final genderController = TextEditingController();
|
||||
final dobController = TextEditingController();
|
||||
final ageController = TextEditingController();
|
||||
final descriptionController = TextEditingController();
|
||||
|
||||
// List<String> dropDownList = ["A","b","C"];
|
||||
// RxString selectedDropdownValue = "A".obs;
|
||||
final isForUpdate = false.obs;
|
||||
|
||||
// String updateConsentId = "";
|
||||
// final serviceUser = Rx<UserData?>(null);
|
||||
ConsentDetailsModel saveResult = ConsentDetailsModel.empty();
|
||||
|
||||
Future<dynamic> saveButtonPressed(String serviceUserId) async {
|
||||
var result = await ClientService()
|
||||
.addConsentDetails(
|
||||
description: descriptionController.value.text,
|
||||
staffId: serviceUserId)
|
||||
.showLoader();
|
||||
if (result is ConsentDetailsModel && result.id != "") {
|
||||
saveResult.description = descriptionController.value.text;
|
||||
result.description = descriptionController.value.text;
|
||||
saveResult = result;
|
||||
FrequentFunctions.showToast(message: "Consent Template added successfully");
|
||||
return result;
|
||||
// return true;
|
||||
} else {
|
||||
if (result is String) {
|
||||
FrequentFunctions.showToast(message: result);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> updateButtonPressed(String consentId) async {
|
||||
var result = await ClientService()
|
||||
.updateConsentDetails(
|
||||
description: descriptionController.value.text, consentId: consentId)
|
||||
.showLoader();
|
||||
if (result is bool && result == true) {
|
||||
FrequentFunctions.showToast(message: "Consent Template Updated successfully");
|
||||
return true;
|
||||
} else {
|
||||
if (result is String) {
|
||||
FrequentFunctions.showToast(message: result);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
firstNameController.dispose();
|
||||
lastNameController.dispose();
|
||||
phoneController.dispose();
|
||||
emailController.dispose();
|
||||
genderController.dispose();
|
||||
dobController.dispose();
|
||||
ageController.dispose();
|
||||
descriptionController.dispose();
|
||||
Get.delete<ConsentAndCapacityAddNewFormScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<ConsentAndCapacityAddNewFormScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../models/clients/consent_details_model.dart';
|
||||
import '../../models/clients/service_users_model.dart';
|
||||
|
||||
class ConsentAndCapacityQuestionnaireScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
List<String> dropDownList = ["A", "b", "C"];
|
||||
RxString selectedDropdownValue = "A".obs;
|
||||
RxList<ConsentDetailsModel> consentDetailsList = RxList();
|
||||
dynamic argument;
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
ConsentAndCapacityQuestionnaireScreenController({required UserData data}) {
|
||||
serviceUser.value = data;
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
print("serviceUser() != null ---- ${serviceUser() != null}");
|
||||
if (serviceUser() != null) {
|
||||
fetchList();
|
||||
}
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void fetchList() async {
|
||||
if (CustomRouteGenerator.argument != null) {
|
||||
argument = CustomRouteGenerator.argument;
|
||||
if (argument is ServiceUserModel) {
|
||||
serviceUser.value = argument;
|
||||
}
|
||||
}
|
||||
var result = await ClientService()
|
||||
.getConsentDetails(staffId: serviceUser()!.id!)
|
||||
.showLoader();
|
||||
if (result is List<ConsentDetailsModel>) {
|
||||
consentDetailsList.value = result;
|
||||
}
|
||||
}
|
||||
|
||||
void deleteConsentPressed(
|
||||
{required String consentId, required int index}) async {
|
||||
var result =
|
||||
await ClientService().deleteConsent(consentId: consentId).showLoader();
|
||||
if (result is bool && result == true) {
|
||||
FrequentFunctions.showToast(message: "Consent Deleted Successfully");
|
||||
consentDetailsList.removeAt(index);
|
||||
} else {
|
||||
if (result is String) {
|
||||
FrequentFunctions.showToast(message: result);
|
||||
} else {
|
||||
FrequentFunctions.showToast(message: "Consent Deleted Successfully");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> updateButtonPressed(
|
||||
String description, String id, int index) async {
|
||||
var result = await ClientService()
|
||||
.updateConsentDetails(description: description, consentId: id);
|
||||
if (result is bool && result == true) {
|
||||
FrequentFunctions.showToast(message: "Consent Template Updated successfully");
|
||||
consentDetailsList[index].description = description;
|
||||
consentDetailsList.refresh();
|
||||
return true;
|
||||
} else {
|
||||
if (result is String) {
|
||||
FrequentFunctions.showToast(message: result);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<ConsentAndCapacityQuestionnaireScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<ConsentAndCapacityQuestionnaireScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/HealthIssuesDetailsModel.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/body_points_category.dart';
|
||||
import 'package:ftc_mobile_app/utilities/enums/body_parts.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class BodyPointIssueStyleWrapper {
|
||||
final HealthIssueDetailsModel data;
|
||||
Color? color;
|
||||
|
||||
BodyPointIssueStyleWrapper({
|
||||
required this.data,
|
||||
this.color,
|
||||
});
|
||||
}
|
||||
|
||||
class CurrentHealthIssuesScreenController extends GetxController {
|
||||
static const tabAllIssues = "All Issues";
|
||||
static const tabActiveIssues = "Active Issues";
|
||||
static const tabResolvedIssues = "Resolved Issues";
|
||||
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
RxString selectedDropdownValue = "Active".obs;
|
||||
|
||||
final List<String> tabs = [tabAllIssues, tabActiveIssues, tabResolvedIssues];
|
||||
Map<BodyPart, BodyPointIssueStyleWrapper> oIssueBodyParts = {};
|
||||
final issueBodyParts = RxMap<BodyPart, BodyPointIssueStyleWrapper>();
|
||||
|
||||
String serviceUserId = '';
|
||||
String currentTab = tabAllIssues;
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
getPointsDataFromService();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
onTabChange(String tabText) {
|
||||
switch (tabText) {
|
||||
case tabAllIssues:
|
||||
issueBodyParts.value = Map.from(oIssueBodyParts);
|
||||
break;
|
||||
case tabActiveIssues:
|
||||
final f = <BodyPart, BodyPointIssueStyleWrapper>{};
|
||||
f.addEntries(oIssueBodyParts.entries.where((e) => e.value.data.status));
|
||||
issueBodyParts.value = f;
|
||||
break;
|
||||
case tabResolvedIssues:
|
||||
final f = <BodyPart, BodyPointIssueStyleWrapper>{};
|
||||
f.addEntries(
|
||||
oIssueBodyParts.entries.where((e) => e.value.data.status == false));
|
||||
issueBodyParts.value = f;
|
||||
break;
|
||||
}
|
||||
|
||||
currentTab = tabText;
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
static Color getStatusColor(bool status) {
|
||||
return status == true ? Colors.red : Colors.green;
|
||||
}
|
||||
|
||||
/// This method fetches health issues and map their body points to related data and color to show for the point,
|
||||
void getPointsDataFromService() async {
|
||||
var result = await ClientService()
|
||||
.getHealthIssues(userId: serviceUserId)
|
||||
.showLoader();
|
||||
|
||||
if (result is List<HealthIssueDetailsModel>) {
|
||||
final bodyPartsMap = <BodyPart, BodyPointIssueStyleWrapper>{};
|
||||
const bodyParts = BodyPart.values;
|
||||
|
||||
for (final data in result) {
|
||||
final bodyPartEnum = bodyParts.firstWhereOrNull(
|
||||
(e1) => e1.apiValue == data.bodyPointsCategory?.enumed);
|
||||
if (bodyPartEnum != null) {
|
||||
bodyPartsMap[bodyPartEnum] = BodyPointIssueStyleWrapper(
|
||||
data: data,
|
||||
color: getStatusColor(data.status),
|
||||
);
|
||||
}
|
||||
}
|
||||
oIssueBodyParts = bodyPartsMap;
|
||||
onTabChange(currentTab);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> updateHealthIssueStatus(
|
||||
{required BodyPart bodyPoint,
|
||||
required HealthIssueDetailsModel data,
|
||||
required bool status}) async {
|
||||
final response = await ClientService()
|
||||
.updateHealthIssueData(
|
||||
issueId: data.id,
|
||||
categoryId: data.bodyPointsCategory!.id,
|
||||
status: status,
|
||||
)
|
||||
.showLoader();
|
||||
|
||||
if (response is BodyPointsCategory) {
|
||||
oIssueBodyParts[bodyPoint]!
|
||||
..data.status = status
|
||||
..color = getStatusColor(status);
|
||||
|
||||
issueBodyParts[bodyPoint]!
|
||||
..data.status = status
|
||||
..color = getStatusColor(status);
|
||||
|
||||
Get.back();
|
||||
onTabChange(currentTab);
|
||||
} else if (response is String && response.isNotEmpty) {
|
||||
FrequentFunctions.showToast(message: response);
|
||||
}
|
||||
}
|
||||
|
||||
void onBackPress(BuildContext context) {
|
||||
Get.delete<CurrentHealthIssuesScreenController>();
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CurrentHealthIssuesScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class DocumentDetailsScreenController extends GetxController{
|
||||
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
|
||||
void removeFocus(){
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<DocumentDetailsScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
113
lib/controllers/clients/documents_list_screen_controller.dart
Normal file
113
lib/controllers/clients/documents_list_screen_controller.dart
Normal file
@@ -0,0 +1,113 @@
|
||||
import 'dart:io';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/documents_list_model.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:path/path.dart';
|
||||
|
||||
class DocumentsListScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final searchTEC = TextEditingController();
|
||||
List<DocumentModel> oDocumentsList = [];
|
||||
|
||||
final documentsList = RxList<DocumentModel>();
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
DocumentsListScreenController(UserData data) {
|
||||
serviceUser.value = data;
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
getDocuments();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void getDocuments() async {
|
||||
final response = await ClientService()
|
||||
.getDocumentListService(serviceUserId: serviceUser()!.id!)
|
||||
.showLoader();
|
||||
if (response is DocumentsListModel) {
|
||||
if (response.documentList.isNotEmpty) {
|
||||
response.documentList
|
||||
.removeWhere((e) => e.title.isEmpty || e.details.isEmpty);
|
||||
|
||||
oDocumentsList = response.documentList;
|
||||
documentsList.value = response.documentList;
|
||||
}
|
||||
} else if (response is String && response.isNotEmpty) {
|
||||
FrequentFunctions.showToast(message: response);
|
||||
}
|
||||
}
|
||||
|
||||
onSearch(String text) {
|
||||
if (text.isEmpty) {
|
||||
documentsList.value = oDocumentsList;
|
||||
} else {
|
||||
documentsList.value = oDocumentsList
|
||||
.where((e) => e.title.toLowerCase().contains(text.toLowerCase()))
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
downloadDoc({required String path}) async {
|
||||
if (path.isNotEmpty) {
|
||||
final f = await _downloadGooglePlacePhoto(path: path).showLoader();
|
||||
|
||||
if (f != null) {
|
||||
FrequentFunctions.showToast(
|
||||
message: "Document downloaded successfully");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<File?> _downloadGooglePlacePhoto({required String path}) async {
|
||||
try {
|
||||
// final hasInternet = await FrequentFunctions.hasInternetConnection;
|
||||
// debugPrint("hasInternet: $hasInternet");
|
||||
//
|
||||
// if (!hasInternet) {
|
||||
// return null;
|
||||
// }
|
||||
|
||||
final tempDir = await getApplicationDocumentsDirectory();
|
||||
String fullPath = "${tempDir.path}/${basename(path)}";
|
||||
|
||||
File file = File(fullPath);
|
||||
|
||||
if (file.existsSync()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var dio = Dio();
|
||||
|
||||
final response = await dio.get(
|
||||
"${WebUrls.baseUrl}$path",
|
||||
options: Options(responseType: ResponseType.bytes),
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
file.writeAsBytesSync(response.data);
|
||||
return file;
|
||||
}
|
||||
return null;
|
||||
} on DioException catch (_) {
|
||||
return null;
|
||||
} catch (e) {
|
||||
debugPrint("Web Error: $e");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<DocumentsListScreenController>();
|
||||
searchTEC.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
20
lib/controllers/clients/export_clients_controllers.dart
Normal file
20
lib/controllers/clients/export_clients_controllers.dart
Normal file
@@ -0,0 +1,20 @@
|
||||
export 'clients_list_screen_controller.dart';
|
||||
export 'client_profile_screen_controller.dart';
|
||||
export 'appointment_screen_controller.dart';
|
||||
export 'notes_screen_controller.dart';
|
||||
export 'select_note_screen_controller.dart';
|
||||
export 'new_note_screen_controller.dart';
|
||||
export 'care_plan_menu_screen_controller.dart';
|
||||
export 'documents_list_screen_controller.dart';
|
||||
export 'document_details_screen_controller.dart';
|
||||
export 'recent_incidents_screen_controller.dart';
|
||||
export 'current_health_issues_screen_controller.dart';
|
||||
export 'consent_and_capacity_add_new_form_screen_controller.dart';
|
||||
export 'consent_and_capacity_questionnaire_screen_controller.dart';
|
||||
export 'life_history_and_goals_screen_controller.dart';
|
||||
export 'pbs_plan_screen_controller.dart';
|
||||
export 'photo_gallery_screen_controller.dart';
|
||||
export 'risk_assessments_screen_controller.dart';
|
||||
export 'risk_assessments_template_screen_controller.dart';
|
||||
export 'new_client_module_controllers/export_new_client_module.dart';
|
||||
export 'care_notes_screen_controller.dart';
|
||||
@@ -0,0 +1,22 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class LifeHistoryAndGoalsScreenController extends GetxController{
|
||||
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
TextEditingController lastNameController = TextEditingController();
|
||||
List<String> dropDownList = ["A","b","C"];
|
||||
RxString selectedDropdownValue = "A".obs;
|
||||
|
||||
void removeFocus(){
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<LifeHistoryAndGoalsScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,199 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/PBSPlanModel.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/add_pbs_plan_model.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/view/screens/clients/clients_new_view_module/add_new_pbs_plan_screen.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class AddNewPbsPlanScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
// dynamic argument;
|
||||
|
||||
// final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
// String userId = "";
|
||||
final addPbsPlanModel = PbsList.empty().obs;
|
||||
final enableSubmitButton = true.obs;
|
||||
|
||||
late final AddNewPBSPlanScreenArgs args;
|
||||
|
||||
AddNewPbsPlanScreenController(AddNewPBSPlanScreenArgs data) {
|
||||
args = data;
|
||||
if (data.pbsData != null) {
|
||||
addPbsPlanModel.value = data.pbsData!;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void onInit() {
|
||||
// if (CustomRouteGenerator.argument != null) {
|
||||
// argument = CustomRouteGenerator.argument;
|
||||
// if (argument is ServiceUserModel) {
|
||||
// serviceUser.value = argument;
|
||||
// } else if (argument is List) {
|
||||
// if (argument[1] is ServiceUserModel) {
|
||||
// ServiceUserModel user = argument[1];
|
||||
// userId = user.id;
|
||||
// }
|
||||
// if (argument[0] is PbsList) {
|
||||
// PbsList listItem = argument[0];
|
||||
// addPbsPlanModel.value.userId = listItem.userIdModelInPbs?.id ?? "";
|
||||
// addPbsPlanModel.value.staffId = listItem.staffId?.id ?? "";
|
||||
// addPbsPlanModel.value.planId = listItem.id;
|
||||
// addPbsPlanModel.value.aboutPlanNote = listItem.aboutPlan;
|
||||
// addPbsPlanModel.value.managementOfBehaviouralPresentationNote =
|
||||
// listItem.managementOfBehaviorPlan;
|
||||
// addPbsPlanModel.value.secondaryPreventionNote =
|
||||
// listItem.secondaryPrevention;
|
||||
// addPbsPlanModel.value.reactiveStrategiesNote =
|
||||
// listItem.reactiveStrategies;
|
||||
// addPbsPlanModel.value.postIncidentSupportRecoveryNote =
|
||||
// listItem.postIncidentSupport;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
super.onInit();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
// void enableDisableSubmitButton() async {
|
||||
// enableSubmitButton.value = await addPbsPlanModel.value.areAllFieldsEdited;
|
||||
// }
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<AddNewPbsPlanScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context, dynamic argument) {
|
||||
addPbsPlanModel.value.postIncidentSupportRecoveryQuillController.dispose();
|
||||
addPbsPlanModel.value.reactiveStrategiesQuillController.dispose();
|
||||
addPbsPlanModel.value.secondaryPreventionQuillController.dispose();
|
||||
addPbsPlanModel.value.managementOfBehaviouralPresentationQuillController
|
||||
.dispose();
|
||||
addPbsPlanModel.value.aboutPlanQuillController.dispose();
|
||||
Get.delete<AddNewPbsPlanScreenController>();
|
||||
Navigator.of(context).pop(argument);
|
||||
}
|
||||
|
||||
void submitButtonPressed() async {
|
||||
//post Incident Support
|
||||
final postIncidentSupportText = await addPbsPlanModel
|
||||
.value.postIncidentSupportRecoveryQuillController
|
||||
.getText();
|
||||
|
||||
if (postIncidentSupportText.isEmpty) {
|
||||
FrequentFunctions.showToast(message: "All fields are mandatory.");
|
||||
return;
|
||||
}
|
||||
|
||||
//reactive Strategies
|
||||
final reactiveStrategiesText =
|
||||
await addPbsPlanModel.value.reactiveStrategiesQuillController.getText();
|
||||
|
||||
if (reactiveStrategiesText.isEmpty) {
|
||||
FrequentFunctions.showToast(message: "All fields are mandatory.");
|
||||
return;
|
||||
}
|
||||
|
||||
//secondaryPrevention
|
||||
final secondaryPreventionText = await addPbsPlanModel
|
||||
.value.secondaryPreventionQuillController
|
||||
.getText();
|
||||
|
||||
if (secondaryPreventionText.isEmpty) {
|
||||
FrequentFunctions.showToast(message: "All fields are mandatory.");
|
||||
return;
|
||||
}
|
||||
|
||||
//management Of Behavior Plan
|
||||
final managementOfBehaviorPlanText = await addPbsPlanModel
|
||||
.value.managementOfBehaviouralPresentationQuillController
|
||||
.getText();
|
||||
|
||||
if (managementOfBehaviorPlanText.isEmpty) {
|
||||
FrequentFunctions.showToast(message: "All fields are mandatory.");
|
||||
return;
|
||||
}
|
||||
|
||||
//about Plan
|
||||
final aboutPlanText =
|
||||
await addPbsPlanModel.value.aboutPlanQuillController.getText();
|
||||
|
||||
if (aboutPlanText.isEmpty) {
|
||||
FrequentFunctions.showToast(message: "All fields are mandatory.");
|
||||
return;
|
||||
}
|
||||
|
||||
dynamic response;
|
||||
|
||||
if (args.pbsData == null) {
|
||||
response = await ClientService()
|
||||
.addPbsPlanService(
|
||||
userId: args.userData.id!,
|
||||
staffId: LocalStorageManager.userId,
|
||||
postIncidentSupport: postIncidentSupportText,
|
||||
reactiveStartegies: reactiveStrategiesText,
|
||||
secondaryPrevention: secondaryPreventionText,
|
||||
managementOfBehaviorPlan: managementOfBehaviorPlanText,
|
||||
aboutPlan: aboutPlanText)
|
||||
.showLoader();
|
||||
} else {
|
||||
response = await ClientService()
|
||||
.updatePbsPlanService(
|
||||
id: addPbsPlanModel().id,
|
||||
userId: args.userData.id!,
|
||||
staffId: LocalStorageManager.userId,
|
||||
postIncidentSupport: postIncidentSupportText,
|
||||
reactiveStartegies: reactiveStrategiesText,
|
||||
secondaryPrevention: secondaryPreventionText,
|
||||
managementOfBehaviorPlan: managementOfBehaviorPlanText,
|
||||
aboutPlan: aboutPlanText,
|
||||
)
|
||||
.showLoader();
|
||||
}
|
||||
|
||||
if (response is AddPBSPlanModel) {
|
||||
print("-------------response is AddPBSPlanModel-----------");
|
||||
print({response.toString()});
|
||||
print("------------------------");
|
||||
backButtonPressed(screenKey.currentContext!, true);
|
||||
} else {
|
||||
FrequentFunctions.showToast(message: response.toString());
|
||||
}
|
||||
}
|
||||
|
||||
// void updateButtonPressed() async {
|
||||
// dynamic response = await ClientService()
|
||||
// .updatePbsPlanService(
|
||||
// id: addPbsPlanModel().id,
|
||||
// userId: args.userData.id!,
|
||||
// staffId: FrequentFunctions.userModel.value.id,
|
||||
// postIncidentSupport: await addPbsPlanModel
|
||||
// .value.postIncidentSupportRecoveryQuillController
|
||||
// .getText(),
|
||||
// reactiveStartegies: await addPbsPlanModel
|
||||
// .value.reactiveStrategiesQuillController
|
||||
// .getText(),
|
||||
// secondaryPrevention: await addPbsPlanModel
|
||||
// .value.secondaryPreventionQuillController
|
||||
// .getText(),
|
||||
// managementOfBehaviorPlan: await addPbsPlanModel
|
||||
// .value.managementOfBehaviouralPresentationQuillController
|
||||
// .getText(),
|
||||
// aboutPlan:
|
||||
// await addPbsPlanModel.value.aboutPlanQuillController.getText())
|
||||
// .showLoader();
|
||||
// if (response is AddPBSPlanModel) {
|
||||
// backButtonPressed(screenKey.currentContext!, true);
|
||||
// } else {
|
||||
// FrequentFunctions.showToast(message: response.toString());
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class CrisisManagementScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<CrisisManagementScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
export 'crisis_management_screen_controller.dart';
|
||||
export 'future_plans_screen_controller.dart';
|
||||
export 'health_full_body_map_screen_controller.dart';
|
||||
export 'health_screen_controller.dart';
|
||||
export 'medication_screen_controller.dart';
|
||||
export 'introduction_screen_controller.dart';
|
||||
export 'mental_health_screen_controller.dart';
|
||||
export 'my_current_plan_screen_controller.dart';
|
||||
export 'my_interests_screen_controller.dart';
|
||||
export 'overview_screen_controller.dart';
|
||||
export 'things_i_want_you_to_help_me_screen_controller.dart';
|
||||
export 'support_plan_screen_controller.dart';
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class FuturePlansScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<FuturePlansScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class HealthFullBodyMapScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
List<String> activeList = ["Active","Expired"];
|
||||
RxString selectedDropdownValue = "Active".obs;
|
||||
RxBool firstPointVisible = false.obs;
|
||||
RxString firstPointSelectedDropdownValue = "Active".obs;
|
||||
RxBool secondPointVisible = false.obs;
|
||||
RxString secondPointSelectedDropdownValue = "Expired".obs;
|
||||
RxBool thirdPointVisible = false.obs;
|
||||
RxString thirdPointSelectedDropdownValue = "Active".obs;
|
||||
RxBool fourthPointVisible = false.obs;
|
||||
RxString fourthPointSelectedDropdownValue = "Expired".obs;
|
||||
RxBool fifthPointVisible = false.obs;
|
||||
RxString fifthPointSelectedDropdownValue = "Active".obs;
|
||||
RxBool sixthPointVisible = false.obs;
|
||||
RxString sixthPointSelectedDropdownValue = "Expired".obs;
|
||||
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<HealthFullBodyMapScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<HealthFullBodyMapScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class HealthScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<HealthScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class ClientsIntroductionScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<ClientsIntroductionScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class MedicationScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<MedicationScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
void backButtonPressed(BuildContext context) {
|
||||
Get.delete<MedicationScreenController>();
|
||||
Navigator.of(context).pop();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class MentalHealthScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<MentalHealthScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class MyCurrentPlanScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<MyCurrentPlanScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class MyInterestsScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<MyInterestsScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class OverViewScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<OverViewScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class SupportPlanScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<SupportPlanScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class ThingsIWantYouToHelpMeWithScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<ThingsIWantYouToHelpMeWithScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
}
|
||||
34
lib/controllers/clients/new_note_screen_controller.dart
Normal file
34
lib/controllers/clients/new_note_screen_controller.dart
Normal file
@@ -0,0 +1,34 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
|
||||
class NewNoteScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final TextEditingController titleController = TextEditingController();
|
||||
|
||||
final UserModel user = UserModel(
|
||||
name: 'John Doe',
|
||||
profilePicture: 'assets/profile_picture.jpg', // Replace with the actual path or URL
|
||||
phoneNumber: '123-456-7890',
|
||||
homeAddress: '123 Main St, City ville',
|
||||
nextOfKin: 'Jane Doe',
|
||||
diagnosisDate: "Dec. 19",
|
||||
diagnosisHistory: "A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.",
|
||||
aboutPatient: 'A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.',
|
||||
);
|
||||
List<String> users = ["Hailey Johnson","Ryan Porter","Alan Cruz","Jiwon Nguyen","Patrick Lewis","Isabella Garcia","Yin Chiew","Rebecca Nicholson"];
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
titleController.dispose();
|
||||
Get.delete<NewNoteScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
32
lib/controllers/clients/notes_screen_controller.dart
Normal file
32
lib/controllers/clients/notes_screen_controller.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../ftc_mobile_app.dart';
|
||||
|
||||
class NotesScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
|
||||
final UserModel user = UserModel(
|
||||
name: 'John Doe',
|
||||
profilePicture: 'assets/profile_picture.jpg', // Replace with the actual path or URL
|
||||
phoneNumber: '123-456-7890',
|
||||
homeAddress: '123 Main St, City ville',
|
||||
nextOfKin: 'Jane Doe',
|
||||
diagnosisDate: "Dec. 19",
|
||||
diagnosisHistory: "A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.",
|
||||
aboutPatient: 'A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.',
|
||||
);
|
||||
List<String> users = ["Hailey Johnson","Ryan Porter","Alan Cruz","Jiwon Nguyen","Patrick Lewis","Isabella Garcia","Yin Chiew","Rebecca Nicholson"];
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<NotesScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
49
lib/controllers/clients/pbs_plan_screen_controller.dart
Normal file
49
lib/controllers/clients/pbs_plan_screen_controller.dart
Normal file
@@ -0,0 +1,49 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/PBSPlanModel.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class PBSPlanScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final searchTEC = TextEditingController();
|
||||
|
||||
// dynamic argument;
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
final pbsList = RxList<PbsList>();
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
fetchPBSPlanList();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
Future<void> fetchPBSPlanList() async {
|
||||
dynamic result = await ClientService()
|
||||
.getPbsPlanListService(userId: serviceUser.value!.id!)
|
||||
.showLoader();
|
||||
if (result is PBSListDataJson) {
|
||||
if (result.pbsList.isNotEmpty) {
|
||||
pbsList.value = result.pbsList.take(1).toList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void onBackPress(BuildContext context) {
|
||||
Get.delete<PBSPlanScreenController>();
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
searchTEC.dispose();
|
||||
Get.delete<PBSPlanScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
55
lib/controllers/clients/photo_gallery_screen_controller.dart
Normal file
55
lib/controllers/clients/photo_gallery_screen_controller.dart
Normal file
@@ -0,0 +1,55 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/memoryListResponse/MemoryListData.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/utilities/frequent_functions.dart';
|
||||
import 'package:ftc_mobile_app/web_services/client_services.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class PhotoGalleryScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
late final String serviceUserId;
|
||||
|
||||
final memoryList = RxList<MemoryListData>();
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
getMemoryList();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
Future<void> getMemoryList() async {
|
||||
// serviceUsersList.clear();
|
||||
// _skip = 0;
|
||||
var response = await ClientService()
|
||||
.getMemoryList(serviceUserId: serviceUserId
|
||||
// limit: _limit,
|
||||
// offset: _skip,
|
||||
)
|
||||
.showLoader();
|
||||
|
||||
if (response.success == true) {
|
||||
if (response.data?.list?.isNotEmpty == true) {
|
||||
// _skip += _limit;
|
||||
memoryList.value = response.data?.list ?? <MemoryListData>[];
|
||||
// canLoadMore.value = true;
|
||||
} else {
|
||||
// canLoadMore.value = searchText.isEmpty;
|
||||
}
|
||||
} else {
|
||||
if (response.message.isNullOrEmptyNot()) {
|
||||
FrequentFunctions.showToast(message: response.message!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<PhotoGalleryScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/ftc_mobile_app.dart';
|
||||
import 'package:ftc_mobile_app/models/profileData/user_data.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:get/get.dart';
|
||||
import '../../models/clients/recent_incidents_model.dart';
|
||||
|
||||
class RecentIncidentsScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final searchTEC = TextEditingController();
|
||||
|
||||
List<RecentIncidentsModel> oRecentIncidentsList = [];
|
||||
|
||||
RxList<RecentIncidentsModel> recentIncidentsList = RxList();
|
||||
final serviceUser = Rx<UserData?>(null);
|
||||
|
||||
RecentIncidentsScreenController(UserData data) {
|
||||
serviceUser(data);
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
fetchRecentIncidentList();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void fetchRecentIncidentList() async {
|
||||
if (serviceUser() == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
var result = await ClientService()
|
||||
.getRecentIncidentsListService(userId: serviceUser()!.id!)
|
||||
.showLoader();
|
||||
if (result is List<RecentIncidentsModel>) {
|
||||
oRecentIncidentsList = List.from(result);
|
||||
recentIncidentsList.value = result;
|
||||
} else {
|
||||
FrequentFunctions.showToast(message: result.toString());
|
||||
}
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
onSearch(String text) {
|
||||
if (text.isEmpty) {
|
||||
recentIncidentsList.value = oRecentIncidentsList;
|
||||
} else {
|
||||
recentIncidentsList.value = oRecentIncidentsList
|
||||
.where(
|
||||
(e) => e.incidentTitle.toLowerCase().contains(text.toLowerCase()))
|
||||
.toList();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
searchTEC.dispose();
|
||||
Get.delete<RecentIncidentsScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
void onBackPress(BuildContext context) {
|
||||
Get.delete<RecentIncidentsScreenController>();
|
||||
Navigator.pop(context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class RiskAssessmentsScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
|
||||
void removeFocus(){
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<RiskAssessmentsScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:ftc_mobile_app/models/clients/riskAssessmentResponse/RiskAssessmentData.dart';
|
||||
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
||||
import 'package:ftc_mobile_app/utilities/frequent_functions.dart';
|
||||
import 'package:ftc_mobile_app/web_services/client_services.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
class RiskAssessmentsTemplateScreenController extends GetxController {
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
late final String serviceUserId;
|
||||
final list = RxList<RiskAssessmentData>();
|
||||
|
||||
RiskAssessmentsTemplateScreenController(String userId) {
|
||||
serviceUserId = userId;
|
||||
}
|
||||
|
||||
@override
|
||||
void onReady() {
|
||||
getRiskAssessments();
|
||||
super.onReady();
|
||||
}
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
void getRiskAssessments() async {
|
||||
var response = await ClientService()
|
||||
.getRiskAssessments(serviceUserId: serviceUserId)
|
||||
.showLoader();
|
||||
|
||||
if (response.success == true) {
|
||||
list.value = response.data ?? [];
|
||||
} else {
|
||||
if (response.message.isNotNullOrEmpty()) {
|
||||
FrequentFunctions.showToast(message: response.message!);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<RiskAssessmentsTemplateScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
32
lib/controllers/clients/select_note_screen_controller.dart
Normal file
32
lib/controllers/clients/select_note_screen_controller.dart
Normal file
@@ -0,0 +1,32 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
|
||||
import '../../ftc_mobile_app.dart';
|
||||
|
||||
class SelectNoteScreenController extends GetxController{
|
||||
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
||||
|
||||
final UserModel user = UserModel(
|
||||
name: 'John Doe',
|
||||
profilePicture: 'assets/profile_picture.jpg', // Replace with the actual path or URL
|
||||
phoneNumber: '123-456-7890',
|
||||
homeAddress: '123 Main St, City ville',
|
||||
nextOfKin: 'Jane Doe',
|
||||
diagnosisDate: "Dec. 19",
|
||||
diagnosisHistory: "A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.",
|
||||
aboutPatient: 'A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here. A quick preview of the diagnosis will be shown here.',
|
||||
);
|
||||
List<String> users = ["Hailey Johnson","Ryan Porter","Alan Cruz","Jiwon Nguyen","Patrick Lewis","Isabella Garcia","Yin Chiew","Rebecca Nicholson"];
|
||||
TextEditingController searchController = TextEditingController();
|
||||
|
||||
|
||||
void removeFocus() {
|
||||
FocusScope.of(screenKey.currentContext!).unfocus();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
Get.delete<SelectNoteScreenController>();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user