diff --git a/README.md b/README.md
index 850d67e..071a587 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# marco
+# On Field Work
A new Flutter project.
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 6499e02..4a7cbdf 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,7 +8,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Marco
+ On Field Work
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -13,7 +13,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- marco
+ on field work
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/lib/app_constant.dart b/lib/app_constant.dart
index 8d5f2b5..55c95b9 100644
--- a/lib/app_constant.dart
+++ b/lib/app_constant.dart
@@ -8,5 +8,5 @@ class AppConstant {
static int iOSAppVersion = 1;
static String version = "1.0.0";
- static String get appName => 'Marco';
+ static String get appName => 'On Field Work';
}
diff --git a/lib/controller/attendance/attendance_screen_controller.dart b/lib/controller/attendance/attendance_screen_controller.dart
index cab2ffd..5aebd4d 100644
--- a/lib/controller/attendance/attendance_screen_controller.dart
+++ b/lib/controller/attendance/attendance_screen_controller.dart
@@ -5,19 +5,19 @@ import 'package:image_picker/image_picker.dart';
import 'package:geolocator/geolocator.dart';
import 'package:intl/intl.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/widgets/my_image_compressor.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_image_compressor.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
-import 'package:marco/model/attendance/attendance_model.dart';
-import 'package:marco/model/project_model.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/model/attendance/attendance_log_model.dart';
-import 'package:marco/model/regularization_log_model.dart';
-import 'package:marco/model/attendance/attendance_log_view_model.dart';
-import 'package:marco/model/attendance/organization_per_project_list_model.dart';
-import 'package:marco/controller/project_controller.dart';
+import 'package:on_field_work/model/attendance/attendance_model.dart';
+import 'package:on_field_work/model/project_model.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/model/attendance/attendance_log_model.dart';
+import 'package:on_field_work/model/regularization_log_model.dart';
+import 'package:on_field_work/model/attendance/attendance_log_view_model.dart';
+import 'package:on_field_work/model/attendance/organization_per_project_list_model.dart';
+import 'package:on_field_work/controller/project_controller.dart';
class AttendanceController extends GetxController {
// ------------------ Data Models ------------------
diff --git a/lib/controller/auth/forgot_password_controller.dart b/lib/controller/auth/forgot_password_controller.dart
index 8d544d7..35683b4 100644
--- a/lib/controller/auth/forgot_password_controller.dart
+++ b/lib/controller/auth/forgot_password_controller.dart
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_validators.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_validators.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
class ForgotPasswordController extends MyController {
final MyFormValidator basicValidator = MyFormValidator();
diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart
index 40cbd25..408ab5a 100644
--- a/lib/controller/auth/login_controller.dart
+++ b/lib/controller/auth/login_controller.dart
@@ -1,12 +1,12 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_validators.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_validators.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class LoginController extends MyController {
final MyFormValidator basicValidator = MyFormValidator();
diff --git a/lib/controller/auth/mpin_controller.dart b/lib/controller/auth/mpin_controller.dart
index a03b1f2..d72db80 100644
--- a/lib/controller/auth/mpin_controller.dart
+++ b/lib/controller/auth/mpin_controller.dart
@@ -1,13 +1,13 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/firebase/firebase_messaging_service.dart';
-import 'package:marco/controller/permission_controller.dart';
-import 'package:marco/controller/project_controller.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/firebase/firebase_messaging_service.dart';
+import 'package:on_field_work/controller/permission_controller.dart';
+import 'package:on_field_work/controller/project_controller.dart';
class MPINController extends GetxController {
final MyFormValidator basicValidator = MyFormValidator();
diff --git a/lib/controller/auth/otp_controller.dart b/lib/controller/auth/otp_controller.dart
index 53cfeb5..e677816 100644
--- a/lib/controller/auth/otp_controller.dart
+++ b/lib/controller/auth/otp_controller.dart
@@ -1,10 +1,10 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class OTPController extends GetxController {
final formKey = GlobalKey();
diff --git a/lib/controller/auth/register_account_controller.dart b/lib/controller/auth/register_account_controller.dart
index 8236b90..b0db3c3 100644
--- a/lib/controller/auth/register_account_controller.dart
+++ b/lib/controller/auth/register_account_controller.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_validators.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_validators.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class RegisterAccountController extends MyController {
MyFormValidator basicValidator = MyFormValidator();
diff --git a/lib/controller/auth/reset_password_controller.dart b/lib/controller/auth/reset_password_controller.dart
index 842ca40..c411b5d 100644
--- a/lib/controller/auth/reset_password_controller.dart
+++ b/lib/controller/auth/reset_password_controller.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_validators.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_validators.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class ResetPasswordController extends MyController {
MyFormValidator basicValidator = MyFormValidator();
diff --git a/lib/controller/dashboard/dashboard_controller.dart b/lib/controller/dashboard/dashboard_controller.dart
index 50e801a..e6ed81b 100644
--- a/lib/controller/dashboard/dashboard_controller.dart
+++ b/lib/controller/dashboard/dashboard_controller.dart
@@ -1,12 +1,12 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/controller/project_controller.dart';
-import 'package:marco/model/dashboard/project_progress_model.dart';
-import 'package:marco/model/dashboard/pending_expenses_model.dart';
-import 'package:marco/model/dashboard/expense_type_report_model.dart';
-import 'package:marco/model/dashboard/monthly_expence_model.dart';
-import 'package:marco/model/expense/expense_type_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/controller/project_controller.dart';
+import 'package:on_field_work/model/dashboard/project_progress_model.dart';
+import 'package:on_field_work/model/dashboard/pending_expenses_model.dart';
+import 'package:on_field_work/model/dashboard/expense_type_report_model.dart';
+import 'package:on_field_work/model/dashboard/monthly_expence_model.dart';
+import 'package:on_field_work/model/expense/expense_type_model.dart';
class DashboardController extends GetxController {
// =========================
@@ -58,7 +58,7 @@ class DashboardController extends GetxController {
final Rx pendingExpensesData =
Rx(null);
// =========================
-// Expense Type Report
+// Expense Category Report
// =========================
final RxBool isExpenseTypeReportLoading = false.obs;
final Rx expenseTypeReportData =
@@ -355,15 +355,15 @@ class DashboardController extends GetxController {
if (response != null && response.success) {
expenseTypeReportData.value = response.data;
- logSafe('Expense Type Report fetched successfully.',
+ logSafe('Expense Category Report fetched successfully.',
level: LogLevel.info);
} else {
expenseTypeReportData.value = null;
- logSafe('Failed to fetch Expense Type Report.', level: LogLevel.error);
+ logSafe('Failed to fetch Expense Category Report.', level: LogLevel.error);
}
} catch (e, st) {
expenseTypeReportData.value = null;
- logSafe('Error fetching Expense Type Report',
+ logSafe('Error fetching Expense Category Report',
level: LogLevel.error, error: e, stackTrace: st);
} finally {
isExpenseTypeReportLoading.value = false;
diff --git a/lib/controller/directory/add_comment_controller.dart b/lib/controller/directory/add_comment_controller.dart
index fcc3357..69f1aaf 100644
--- a/lib/controller/directory/add_comment_controller.dart
+++ b/lib/controller/directory/add_comment_controller.dart
@@ -1,9 +1,9 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/controller/directory/directory_controller.dart';
-import 'package:marco/controller/directory/notes_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/controller/directory/directory_controller.dart';
+import 'package:on_field_work/controller/directory/notes_controller.dart';
class AddCommentController extends GetxController {
final String contactId;
diff --git a/lib/controller/directory/add_contact_controller.dart b/lib/controller/directory/add_contact_controller.dart
index 0c549c3..96989a7 100644
--- a/lib/controller/directory/add_contact_controller.dart
+++ b/lib/controller/directory/add_contact_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
class AddContactController extends GetxController {
final RxList categories = [].obs;
diff --git a/lib/controller/directory/create_bucket_controller.dart b/lib/controller/directory/create_bucket_controller.dart
index 80338d5..325b589 100644
--- a/lib/controller/directory/create_bucket_controller.dart
+++ b/lib/controller/directory/create_bucket_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
class BucketController extends GetxController {
RxBool isCreating = false.obs;
diff --git a/lib/controller/directory/directory_controller.dart b/lib/controller/directory/directory_controller.dart
index bef19f1..5bfba60 100644
--- a/lib/controller/directory/directory_controller.dart
+++ b/lib/controller/directory/directory_controller.dart
@@ -1,10 +1,10 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/directory/contact_model.dart';
-import 'package:marco/model/directory/contact_bucket_list_model.dart';
-import 'package:marco/model/directory/directory_comment_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/directory/contact_model.dart';
+import 'package:on_field_work/model/directory/contact_bucket_list_model.dart';
+import 'package:on_field_work/model/directory/directory_comment_model.dart';
class DirectoryController extends GetxController {
// -------------------- CONTACTS --------------------
diff --git a/lib/controller/directory/manage_bucket_controller.dart b/lib/controller/directory/manage_bucket_controller.dart
index 72ad336..66e0995 100644
--- a/lib/controller/directory/manage_bucket_controller.dart
+++ b/lib/controller/directory/manage_bucket_controller.dart
@@ -1,9 +1,9 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/controller/directory/directory_controller.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/controller/directory/directory_controller.dart';
class ManageBucketController extends GetxController {
RxList allEmployees = [].obs;
diff --git a/lib/controller/directory/notes_controller.dart b/lib/controller/directory/notes_controller.dart
index 1868414..2185633 100644
--- a/lib/controller/directory/notes_controller.dart
+++ b/lib/controller/directory/notes_controller.dart
@@ -1,8 +1,8 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/directory/note_list_response_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/directory/note_list_response_model.dart';
class NotesController extends GetxController {
RxList notesList = [].obs;
diff --git a/lib/controller/document/document_details_controller.dart b/lib/controller/document/document_details_controller.dart
index c160a0d..c2edc2e 100644
--- a/lib/controller/document/document_details_controller.dart
+++ b/lib/controller/document/document_details_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/document/document_details_model.dart';
-import 'package:marco/model/document/document_version_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/document/document_details_model.dart';
+import 'package:on_field_work/model/document/document_version_model.dart';
class DocumentDetailsController extends GetxController {
/// Observables
diff --git a/lib/controller/document/document_upload_controller.dart b/lib/controller/document/document_upload_controller.dart
index c7e33c7..56fe638 100644
--- a/lib/controller/document/document_upload_controller.dart
+++ b/lib/controller/document/document_upload_controller.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/document/master_document_type_model.dart';
-import 'package:marco/model/document/master_document_tags.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/document/master_document_type_model.dart';
+import 'package:on_field_work/model/document/master_document_tags.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
class DocumentUploadController extends GetxController {
// Observables
diff --git a/lib/controller/document/user_document_controller.dart b/lib/controller/document/user_document_controller.dart
index 5667003..a424dce 100644
--- a/lib/controller/document/user_document_controller.dart
+++ b/lib/controller/document/user_document_controller.dart
@@ -1,8 +1,9 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/document/document_filter_model.dart';
-import 'package:marco/model/document/documents_list_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/document/document_filter_model.dart';
+import 'package:on_field_work/model/document/documents_list_model.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
class DocumentController extends GetxController {
// ==================== Observables ====================
@@ -38,7 +39,6 @@ class DocumentController extends GetxController {
final endDate = Rxn();
// ==================== Lifecycle ====================
-
@override
void onClose() {
// Don't dispose searchController here - it's managed by the page
@@ -87,13 +87,23 @@ class DocumentController extends GetxController {
entityId: entityId,
reset: true,
);
+
+ // Show success snackbar
+ showAppSnackbar(
+ title: 'Success',
+ message: isActive ? 'Document deactivated' : 'Document activated',
+ type: SnackbarType.success,
+ );
+
return true;
} else {
errorMessage.value = 'Failed to update document state';
+ _showError('Failed to update document state');
return false;
}
} catch (e) {
errorMessage.value = 'Error updating document: $e';
+ _showError('Error updating document: $e');
debugPrint('❌ Error toggling document state: $e');
return false;
} finally {
@@ -110,17 +120,13 @@ class DocumentController extends GetxController {
bool reset = false,
}) async {
try {
- // Reset pagination if needed
if (reset) {
pageNumber.value = 1;
documents.clear();
hasMore.value = true;
}
- // Don't fetch if no more data
if (!hasMore.value && !reset) return;
-
- // Prevent duplicate requests
if (isLoading.value) return;
isLoading.value = true;
@@ -147,12 +153,24 @@ class DocumentController extends GetxController {
errorMessage.value = response?.message ?? 'Failed to fetch documents';
if (documents.isEmpty) {
_showError('Failed to load documents');
+ } else {
+ showAppSnackbar(
+ title: 'Warning',
+ message: 'No more documents to load',
+ type: SnackbarType.warning,
+ );
}
}
} catch (e) {
errorMessage.value = 'Error fetching documents: $e';
if (documents.isEmpty) {
_showError('Error loading documents');
+ } else {
+ showAppSnackbar(
+ title: 'Error',
+ message: 'Error fetching additional documents',
+ type: SnackbarType.error,
+ );
}
debugPrint('❌ Error fetching documents: $e');
} finally {
@@ -185,17 +203,12 @@ class DocumentController extends GetxController {
isVerified.value != null;
}
- /// Show error message
+ /// Show error message via snackbar
void _showError(String message) {
- Get.snackbar(
- 'Error',
- message,
- snackPosition: SnackPosition.BOTTOM,
- backgroundColor: Colors.red.shade100,
- colorText: Colors.red.shade900,
- margin: const EdgeInsets.all(16),
- borderRadius: 8,
- duration: const Duration(seconds: 3),
+ showAppSnackbar(
+ title: 'Error',
+ message: message,
+ type: SnackbarType.error,
);
}
diff --git a/lib/controller/dynamicMenu/dynamic_menu_controller.dart b/lib/controller/dynamicMenu/dynamic_menu_controller.dart
index f55cb1e..f5f259c 100644
--- a/lib/controller/dynamicMenu/dynamic_menu_controller.dart
+++ b/lib/controller/dynamicMenu/dynamic_menu_controller.dart
@@ -1,8 +1,8 @@
import 'dart:async';
import 'package:get/get.dart';
-import 'package:marco/model/dynamicMenu/dynamic_menu_model.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/dynamicMenu/dynamic_menu_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class DynamicMenuController extends GetxController {
// UI reactive states
diff --git a/lib/controller/employee/add_employee_controller.dart b/lib/controller/employee/add_employee_controller.dart
index 44aa286..fbbab27 100644
--- a/lib/controller/employee/add_employee_controller.dart
+++ b/lib/controller/employee/add_employee_controller.dart
@@ -1,11 +1,11 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
import 'package:flutter_contacts/flutter_contacts.dart';
import 'package:permission_handler/permission_handler.dart';
diff --git a/lib/controller/employee/assign_projects_controller.dart b/lib/controller/employee/assign_projects_controller.dart
index 37581ae..7962b8c 100644
--- a/lib/controller/employee/assign_projects_controller.dart
+++ b/lib/controller/employee/assign_projects_controller.dart
@@ -1,10 +1,10 @@
import 'package:flutter/widgets.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/model/global_project_model.dart';
-import 'package:marco/model/employees/assigned_projects_model.dart';
-import 'package:marco/controller/project_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/global_project_model.dart';
+import 'package:on_field_work/model/employees/assigned_projects_model.dart';
+import 'package:on_field_work/controller/project_controller.dart';
class AssignProjectController extends GetxController {
final String employeeId;
diff --git a/lib/controller/employee/employees_screen_controller.dart b/lib/controller/employee/employees_screen_controller.dart
index a8d9f1a..d8a4c9e 100644
--- a/lib/controller/employee/employees_screen_controller.dart
+++ b/lib/controller/employee/employees_screen_controller.dart
@@ -1,8 +1,8 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/model/employees/employee_details_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/model/employees/employee_details_model.dart';
class EmployeesScreenController extends GetxController {
/// ✅ Data lists
diff --git a/lib/controller/error_pages/coming_soon_controller.dart b/lib/controller/error_pages/coming_soon_controller.dart
index 50c820a..429b37e 100644
--- a/lib/controller/error_pages/coming_soon_controller.dart
+++ b/lib/controller/error_pages/coming_soon_controller.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class ComingSoonController extends MyController {
Timer? countdownTimer;
diff --git a/lib/controller/error_pages/error_404_controller.dart b/lib/controller/error_pages/error_404_controller.dart
index 7894d01..90323dc 100644
--- a/lib/controller/error_pages/error_404_controller.dart
+++ b/lib/controller/error_pages/error_404_controller.dart
@@ -1,5 +1,5 @@
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class Error404Controller extends MyController {
void goToDashboardScreen() {
diff --git a/lib/controller/error_pages/error_500_controller.dart b/lib/controller/error_pages/error_500_controller.dart
index c080b64..13f7827 100644
--- a/lib/controller/error_pages/error_500_controller.dart
+++ b/lib/controller/error_pages/error_500_controller.dart
@@ -1,5 +1,5 @@
import 'package:get/get.dart';
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class Error500Controller extends MyController {
void goToDashboardScreen() {
diff --git a/lib/controller/expense/add_expense_controller.dart b/lib/controller/expense/add_expense_controller.dart
index 11ce63d..32e53fd 100644
--- a/lib/controller/expense/add_expense_controller.dart
+++ b/lib/controller/expense/add_expense_controller.dart
@@ -10,14 +10,14 @@ import 'package:intl/intl.dart';
import 'package:mime/mime.dart';
import 'package:image_picker/image_picker.dart';
-import 'package:marco/controller/expense/expense_screen_controller.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/model/expense/expense_type_model.dart';
-import 'package:marco/model/expense/payment_types_model.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/controller/expense/expense_screen_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/model/expense/expense_type_model.dart';
+import 'package:on_field_work/model/expense/payment_types_model.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
class AddExpenseController extends GetxController {
// --- Text Controllers ---
@@ -196,7 +196,7 @@ class AddExpenseController extends GetxController {
'Location: ${locationController.text}',
'Transaction Date: ${transactionDateController.text}',
'No. of Persons: ${noOfPersonsController.text}',
- 'Expense Type: ${selectedExpenseType.value?.name}',
+ 'Expense Category: ${selectedExpenseType.value?.name}',
'Payment Mode: ${selectedPaymentMode.value?.name}',
'Paid By: ${selectedPaidBy.value?.name}',
'Attachments: ${attachments.length}',
@@ -445,7 +445,7 @@ class AddExpenseController extends GetxController {
return null;
}
if (expenseType == null) {
- _errorSnackbar("Expense type not selected");
+ _errorSnackbar("Expense Category not selected");
return null;
}
if (paymentMode == null) {
@@ -517,7 +517,7 @@ class AddExpenseController extends GetxController {
final missing = [];
if (selectedProject.value.isEmpty) missing.add("Project");
- if (selectedExpenseType.value == null) missing.add("Expense Type");
+ if (selectedExpenseType.value == null) missing.add("Expense Category");
if (selectedPaymentMode.value == null) missing.add("Payment Mode");
if (selectedPaidBy.value == null) missing.add("Paid By");
if (amountController.text.trim().isEmpty) missing.add("Amount");
diff --git a/lib/controller/expense/expense_detail_controller.dart b/lib/controller/expense/expense_detail_controller.dart
index afc925a..9ba8376 100644
--- a/lib/controller/expense/expense_detail_controller.dart
+++ b/lib/controller/expense/expense_detail_controller.dart
@@ -1,8 +1,8 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/model/expense/expense_detail_model.dart';
-import 'package:marco/model/employees/employee_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/expense/expense_detail_model.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
import 'package:flutter/material.dart';
class ExpenseDetailController extends GetxController {
diff --git a/lib/controller/expense/expense_screen_controller.dart b/lib/controller/expense/expense_screen_controller.dart
index 11714a3..9cab200 100644
--- a/lib/controller/expense/expense_screen_controller.dart
+++ b/lib/controller/expense/expense_screen_controller.dart
@@ -1,13 +1,13 @@
import 'dart:convert';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/model/expense/expense_list_model.dart';
-import 'package:marco/model/expense/payment_types_model.dart';
-import 'package:marco/model/expense/expense_type_model.dart';
-import 'package:marco/model/expense/expense_status_model.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/expense/expense_list_model.dart';
+import 'package:on_field_work/model/expense/payment_types_model.dart';
+import 'package:on_field_work/model/expense/expense_type_model.dart';
+import 'package:on_field_work/model/expense/expense_status_model.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
import 'package:flutter/material.dart';
class ExpenseController extends GetxController {
@@ -213,7 +213,7 @@ class ExpenseController extends GetxController {
selectedCreatedByEmployees.clear();
}
- /// Fetch master data: expense types, payment modes, and expense status
+ /// Fetch master data: Expense Categorys, payment modes, and expense status
Future fetchMasterData() async {
try {
final expenseTypesData = await ApiService.getMasterExpenseTypes();
diff --git a/lib/controller/extra_pages/faqs_controller.dart b/lib/controller/extra_pages/faqs_controller.dart
index 4ac1905..a704d75 100644
--- a/lib/controller/extra_pages/faqs_controller.dart
+++ b/lib/controller/extra_pages/faqs_controller.dart
@@ -1,5 +1,5 @@
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_text_utils.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_text_utils.dart';
class FaqsController extends MyController {
final List dataExpansionPanel = [true, false, false, false, false, false];
diff --git a/lib/controller/extra_pages/pricing_controller.dart b/lib/controller/extra_pages/pricing_controller.dart
index 6db7583..0ab3745 100644
--- a/lib/controller/extra_pages/pricing_controller.dart
+++ b/lib/controller/extra_pages/pricing_controller.dart
@@ -1,4 +1,4 @@
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class PricingController extends MyController {
bool isMonth = false;
diff --git a/lib/controller/finance/add_payment_request_controller.dart b/lib/controller/finance/add_payment_request_controller.dart
index 1ff0a4e..e7688b9 100644
--- a/lib/controller/finance/add_payment_request_controller.dart
+++ b/lib/controller/finance/add_payment_request_controller.dart
@@ -8,12 +8,12 @@ import 'package:image_picker/image_picker.dart';
import 'package:mime/mime.dart';
import 'package:intl/intl.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
-import 'package:marco/model/finance/expense_category_model.dart';
-import 'package:marco/model/finance/currency_list_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/model/finance/expense_category_model.dart';
+import 'package:on_field_work/model/finance/currency_list_model.dart';
class AddPaymentRequestController extends GetxController {
// Loading States
diff --git a/lib/controller/finance/advance_payment_controller.dart b/lib/controller/finance/advance_payment_controller.dart
index 84eb917..9fc63f9 100644
--- a/lib/controller/finance/advance_payment_controller.dart
+++ b/lib/controller/finance/advance_payment_controller.dart
@@ -1,9 +1,9 @@
import 'dart:async';
import 'package:get/get.dart';
-import 'package:marco/model/finance/advance_payment_model.dart';
-import 'package:marco/model/finance/get_employee_model.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
+import 'package:on_field_work/model/finance/advance_payment_model.dart';
+import 'package:on_field_work/model/finance/get_employee_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
class AdvancePaymentController extends GetxController {
/// Advance payments list
diff --git a/lib/controller/finance/payment_request_controller.dart b/lib/controller/finance/payment_request_controller.dart
index 63bd234..14b9e56 100644
--- a/lib/controller/finance/payment_request_controller.dart
+++ b/lib/controller/finance/payment_request_controller.dart
@@ -1,8 +1,8 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/finance/payment_request_list_model.dart';
-import 'package:marco/model/finance/payment_request_filter.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/finance/payment_request_list_model.dart';
+import 'package:on_field_work/model/finance/payment_request_filter.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
class PaymentRequestController extends GetxController {
// ---------------- Observables ----------------
@@ -32,13 +32,14 @@ class PaymentRequestController extends GetxController {
Future fetchPaymentRequestFilterOptions() async {
try {
final response = await ApiService.getExpensePaymentRequestFilterApi();
- if (response != null) {
- projects.assignAll(response.data.projects);
- payees.assignAll(response.data.payees);
- categories.assignAll(response.data.expenseCategory);
- currencies.assignAll(response.data.currency);
- statuses.assignAll(response.data.status);
- createdBy.assignAll(response.data.createdBy);
+
+ if (response != null && response.data != null) {
+ projects.assignAll(response.data!.projects ?? []);
+ payees.assignAll(response.data!.payees ?? []);
+ categories.assignAll(response.data!.expenseCategory ?? []);
+ currencies.assignAll(response.data!.currency ?? []);
+ statuses.assignAll(response.data!.status ?? []);
+ createdBy.assignAll(response.data!.createdBy ?? []);
} else {
logSafe("Payment request filter API returned null",
level: LogLevel.warning);
@@ -63,7 +64,7 @@ class PaymentRequestController extends GetxController {
isLoading.value = false;
}
-// ---------------- Load More ----------------
+ // ---------------- Load More ----------------
Future loadMorePaymentRequests() async {
if (isLoading.value || !_hasMoreData) return;
@@ -74,7 +75,7 @@ class PaymentRequestController extends GetxController {
isLoading.value = false;
}
-// ---------------- Internal API Call ----------------
+ // ---------------- Internal API Call ----------------
Future _fetchPaymentRequestsFromApi() async {
try {
final response = await ApiService.getExpensePaymentRequestListApi(
@@ -84,17 +85,17 @@ class PaymentRequestController extends GetxController {
searchString: searchString.value,
);
- if (response != null && response.data.data.isNotEmpty) {
+ final data = response?.data;
+ final reqList = data?.data ?? [];
+
+ if (response != null && data != null && reqList.isNotEmpty) {
if (_pageNumber == 1) {
- // First page, replace the list
- paymentRequests.assignAll(response.data.data);
+ paymentRequests.assignAll(reqList);
} else {
- // Append next page items at the end
- paymentRequests.addAll(response.data.data);
+ paymentRequests.addAll(reqList);
}
- // If returned data is less than page size, no more data
- if (response.data.data.length < _pageSize) {
+ if (reqList.length < _pageSize) {
_hasMoreData = false;
}
} else {
diff --git a/lib/controller/finance/payment_request_detail_controller.dart b/lib/controller/finance/payment_request_detail_controller.dart
index b0d17fb..d790eb4 100644
--- a/lib/controller/finance/payment_request_detail_controller.dart
+++ b/lib/controller/finance/payment_request_detail_controller.dart
@@ -1,11 +1,11 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/model/finance/payment_request_details_model.dart';
-import 'package:marco/model/expense/payment_types_model.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/model/finance/payment_request_details_model.dart';
+import 'package:on_field_work/model/expense/payment_types_model.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:convert';
import 'dart:io';
@@ -13,6 +13,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:geocoding/geocoding.dart';
import 'package:geolocator/geolocator.dart';
import 'package:mime/mime.dart';
+import 'package:on_field_work/controller/finance/payment_request_controller.dart';
class PaymentRequestDetailController extends GetxController {
final Rx paymentRequest = Rx(null);
@@ -26,6 +27,8 @@ class PaymentRequestDetailController extends GetxController {
final RxList employeeSearchResults = [].obs;
final TextEditingController employeeSearchController =
TextEditingController();
+ PaymentRequestController get paymentRequestController =>
+ Get.find();
final RxBool isSearchingEmployees = false.obs;
// Attachments
@@ -297,6 +300,7 @@ class PaymentRequestDetailController extends GetxController {
message: 'Payment submitted successfully',
type: SnackbarType.success);
await fetchPaymentRequestDetail();
+ paymentRequestController.fetchPaymentRequests();
} else {
showAppSnackbar(
title: 'Error',
diff --git a/lib/controller/layout/auth_layout_2_controller.dart b/lib/controller/layout/auth_layout_2_controller.dart
index bcf35eb..3d096d4 100644
--- a/lib/controller/layout/auth_layout_2_controller.dart
+++ b/lib/controller/layout/auth_layout_2_controller.dart
@@ -1,3 +1,3 @@
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class AuthLayout2Controller extends MyController {}
diff --git a/lib/controller/layout/auth_layout_controller.dart b/lib/controller/layout/auth_layout_controller.dart
index e873fb4..555cbf9 100644
--- a/lib/controller/layout/auth_layout_controller.dart
+++ b/lib/controller/layout/auth_layout_controller.dart
@@ -1,7 +1,7 @@
import 'dart:async';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_text_utils.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_text_utils.dart';
import 'package:flutter/material.dart';
class AuthLayoutController extends MyController {
diff --git a/lib/controller/layout/layout_controller.dart b/lib/controller/layout/layout_controller.dart
index 1ee06ea..a3cca3a 100644
--- a/lib/controller/layout/layout_controller.dart
+++ b/lib/controller/layout/layout_controller.dart
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/theme/theme_customizer.dart';
-import 'package:marco/model/project_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/theme/theme_customizer.dart';
+import 'package:on_field_work/model/project_model.dart';
class LayoutController extends GetxController {
// Theme Customization
@@ -55,7 +55,7 @@ class LayoutController extends GetxController {
isLoadingProjects.value = true;
try {
- final response = await ApiService.getProjects();
+ final response = await ApiService.getGlobalProjects();
if (response != null && response.isNotEmpty) {
final fetchedProjects = response.map((json) => ProjectModel.fromJson(json)).toList();
diff --git a/lib/controller/my_controller.dart b/lib/controller/my_controller.dart
index b831e8c..190c84f 100644
--- a/lib/controller/my_controller.dart
+++ b/lib/controller/my_controller.dart
@@ -1,5 +1,5 @@
import 'package:get/get_state_manager/get_state_manager.dart';
-import 'package:marco/helpers/theme/theme_customizer.dart';
+import 'package:on_field_work/helpers/theme/theme_customizer.dart';
abstract class MyController extends GetxController {
@override
diff --git a/lib/controller/permission_controller.dart b/lib/controller/permission_controller.dart
index 30253d7..8e17ecc 100644
--- a/lib/controller/permission_controller.dart
+++ b/lib/controller/permission_controller.dart
@@ -2,11 +2,11 @@ import 'dart:async';
import 'dart:convert';
import 'package:get/get.dart';
import 'package:shared_preferences/shared_preferences.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/permission_service.dart';
-import 'package:marco/model/user_permission.dart';
-import 'package:marco/model/employees/employee_info.dart';
-import 'package:marco/model/projects_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/permission_service.dart';
+import 'package:on_field_work/model/user_permission.dart';
+import 'package:on_field_work/model/employees/employee_info.dart';
+import 'package:on_field_work/model/projects_model.dart';
class PermissionController extends GetxController {
var permissions = [].obs;
diff --git a/lib/controller/project_controller.dart b/lib/controller/project_controller.dart
index a31cfcd..0ffafa9 100644
--- a/lib/controller/project_controller.dart
+++ b/lib/controller/project_controller.dart
@@ -1,8 +1,8 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/global_project_model.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/global_project_model.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
class ProjectController extends GetxController {
RxList projects = [].obs;
diff --git a/lib/controller/service_project/add_service_project_job_controller.dart b/lib/controller/service_project/add_service_project_job_controller.dart
index e53fcd6..3d07097 100644
--- a/lib/controller/service_project/add_service_project_job_controller.dart
+++ b/lib/controller/service_project/add_service_project_job_controller.dart
@@ -1,56 +1,58 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/employees/employee_model.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/controller/service_project/service_project_details_screen_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/controller/service_project/service_project_details_screen_controller.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
+import 'package:on_field_work/model/service_project/service_project_branches_model.dart';
class AddServiceProjectJobController extends GetxController {
-// Form Controllers
+ // FORM CONTROLLERS
final titleCtrl = TextEditingController();
final descCtrl = TextEditingController();
final tagCtrl = TextEditingController();
- final FocusNode searchFocusNode = FocusNode();
- final RxBool showEmployeePicker = true.obs;
+ final searchFocusNode = FocusNode();
-// Observables
+ // OBSERVABLES
final startDate = Rx(DateTime.now());
final dueDate = Rx(DateTime.now().add(const Duration(days: 1)));
+
final enteredTags = [].obs;
-
- final employees = [].obs;
final selectedAssignees = [].obs;
- final isSearchingEmployees = false.obs;
-// Loading states
+ // Branches
+ final branches = [].obs;
+ final selectedBranch = Rxn();
+ final isBranchLoading = false.obs;
+
+ // Loading
final isLoading = false.obs;
- final isAllEmployeeLoading = false.obs;
- final allEmployees = [].obs;
- final employeeSearchResults = [].obs;
-
- @override
- void onInit() {
- super.onInit();
- }
@override
void onClose() {
titleCtrl.dispose();
descCtrl.dispose();
tagCtrl.dispose();
+ searchFocusNode.dispose();
super.onClose();
}
- /// Toggle employee selection
- void toggleAssignee(EmployeeModel employee) {
- if (selectedAssignees.contains(employee)) {
- selectedAssignees.remove(employee);
- } else {
- selectedAssignees.add(employee);
+ // FETCH BRANCHES
+ Future fetchBranches(String projectId) async {
+ isBranchLoading.value = true;
+
+ final response = await ApiService.getServiceProjectBranchesFull(
+ projectId: projectId,
+ );
+
+ if (response != null && response.success) {
+ branches.assignAll(response.data?.data ?? []);
}
+
+ isBranchLoading.value = false;
}
- /// Create Service Project Job API call
+ // CREATE JOB
Future createJob(String projectId) async {
if (titleCtrl.text.trim().isEmpty || descCtrl.text.trim().isEmpty) {
showAppSnackbar(
@@ -63,18 +65,22 @@ class AddServiceProjectJobController extends GetxController {
final assigneeIds = selectedAssignees.map((e) => e.id).toList();
+ isLoading.value = true;
+
final success = await ApiService.createServiceProjectJobApi(
title: titleCtrl.text.trim(),
description: descCtrl.text.trim(),
projectId: projectId,
+ branchId: selectedBranch.value?.id,
assignees: assigneeIds.map((id) => {"id": id}).toList(),
startDate: startDate.value!,
dueDate: dueDate.value!,
tags: enteredTags.map((tag) => {"name": tag}).toList(),
);
+ isLoading.value = false;
+
if (success) {
- // 🔥 Auto-refresh job list in ServiceProjectDetailsController
if (Get.isRegistered()) {
Get.find().refreshJobsAfterAdd();
}
diff --git a/lib/controller/service_project/service_project_allocation_controller.dart b/lib/controller/service_project/service_project_allocation_controller.dart
index a59b399..dd85f35 100644
--- a/lib/controller/service_project/service_project_allocation_controller.dart
+++ b/lib/controller/service_project/service_project_allocation_controller.dart
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/model/service_project/job_allocation_model.dart';
-import 'package:marco/helpers/services/api_service.dart';
+import 'package:on_field_work/model/service_project/job_allocation_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
class ServiceProjectAllocationController extends GetxController {
final projectId = ''.obs;
diff --git a/lib/controller/service_project/service_project_details_screen_controller.dart b/lib/controller/service_project/service_project_details_screen_controller.dart
index 41f0954..46f43aa 100644
--- a/lib/controller/service_project/service_project_details_screen_controller.dart
+++ b/lib/controller/service_project/service_project_details_screen_controller.dart
@@ -1,11 +1,11 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/service_project/service_projects_details_model.dart';
-import 'package:marco/model/service_project/job_list_model.dart';
-import 'package:marco/model/service_project/service_project_job_detail_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/service_project/service_projects_details_model.dart';
+import 'package:on_field_work/model/service_project/job_list_model.dart';
+import 'package:on_field_work/model/service_project/service_project_job_detail_model.dart';
import 'package:geolocator/geolocator.dart';
-import 'package:marco/model/service_project/job_attendance_logs_model.dart';
-import 'package:marco/model/service_project/job_allocation_model.dart';
+import 'package:on_field_work/model/service_project/job_attendance_logs_model.dart';
+import 'package:on_field_work/model/service_project/job_allocation_model.dart';
import 'dart:convert';
import 'dart:io';
@@ -17,6 +17,7 @@ class ServiceProjectDetailsController extends GetxController {
var projectDetail = Rxn();
var jobList = [].obs;
var jobDetail = Rxn();
+ var showArchivedJobs = false.obs; // true = archived, false = active
// Loading states
var isLoading = false.obs;
@@ -39,21 +40,47 @@ class ServiceProjectDetailsController extends GetxController {
var teamList = [].obs;
var isTeamLoading = false.obs;
var teamErrorMessage = ''.obs;
+ var filteredJobList = [].obs;
// -------------------- Lifecycle --------------------
@override
void onInit() {
super.onInit();
- fetchProjectJobs(); // always load jobs even without projectId
+ fetchProjectJobs();
+ filteredJobList.value = jobList;
}
// -------------------- Project --------------------
void setProjectId(String id) {
+ if (projectId.value == id) return;
projectId.value = id;
- fetchProjectDetail();
+
+ // Reset pagination and list
pageNumber = 1;
hasMoreJobs.value = true;
- fetchProjectJobs(); // no initialLoad
+ jobList.clear();
+ filteredJobList.clear();
+
+ // Fetch project detail
+ fetchProjectDetail();
+
+ // Always fetch jobs for this project
+ fetchProjectJobs(refresh: true);
+ }
+
+ void updateJobSearch(String searchText) {
+ if (searchText.isEmpty) {
+ filteredJobList.value = jobList;
+ } else {
+ filteredJobList.value = jobList.where((job) {
+ final lowerSearch = searchText.toLowerCase();
+ return job.title.toLowerCase().contains(lowerSearch) ||
+ (job.description.toLowerCase().contains(lowerSearch)) ||
+ (job.tags?.any(
+ (tag) => tag.name.toLowerCase().contains(lowerSearch)) ??
+ false);
+ }).toList();
+ }
}
Future fetchProjectTeams() async {
@@ -135,33 +162,39 @@ class ServiceProjectDetailsController extends GetxController {
}
// -------------------- Job List (modified to always load) --------------------
- Future fetchProjectJobs() async {
- if (!hasMoreJobs.value) return;
+ Future fetchProjectJobs({bool refresh = false}) async {
+ if (projectId.value.isEmpty) return;
+
+ if (refresh) pageNumber = 1;
+ if (!hasMoreJobs.value && !refresh) return;
isJobLoading.value = true;
jobErrorMessage.value = '';
try {
final result = await ApiService.getServiceProjectJobListApi(
- projectId: projectId.value, // allows empty projectId
+ projectId: projectId.value,
pageNumber: pageNumber,
pageSize: pageSize,
isActive: true,
+ isArchive: showArchivedJobs.value,
);
if (result != null && result.data != null) {
final newJobs = result.data?.data ?? [];
- if (pageNumber == 1) {
+ if (refresh || pageNumber == 1) {
jobList.value = newJobs;
} else {
jobList.addAll(newJobs);
}
+ filteredJobList.value = jobList;
+
hasMoreJobs.value = newJobs.length == pageSize;
if (hasMoreJobs.value) pageNumber++;
} else {
- jobErrorMessage.value = result?.message ?? "Failed to fetch job list";
+ jobErrorMessage.value = result?.message ?? "Failed to fetch jobs";
}
} catch (e) {
jobErrorMessage.value = "Error fetching jobs: $e";
diff --git a/lib/controller/service_project/service_project_screen_controller.dart b/lib/controller/service_project/service_project_screen_controller.dart
index 401b68b..22d4a5c 100644
--- a/lib/controller/service_project/service_project_screen_controller.dart
+++ b/lib/controller/service_project/service_project_screen_controller.dart
@@ -1,6 +1,6 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/service_project/service_projects_list_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/service_project/service_projects_list_model.dart';
class ServiceProjectController extends GetxController {
final projects = [].obs;
diff --git a/lib/controller/task_planning/add_task_controller.dart b/lib/controller/task_planning/add_task_controller.dart
index b3df752..6a7ef5e 100644
--- a/lib/controller/task_planning/add_task_controller.dart
+++ b/lib/controller/task_planning/add_task_controller.dart
@@ -1,9 +1,9 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/dailyTaskPlanning/master_work_category_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/master_work_category_model.dart';
class AddTaskController extends GetxController {
RxMap uploadingStates = {}.obs;
diff --git a/lib/controller/task_planning/daily_task_controller.dart b/lib/controller/task_planning/daily_task_controller.dart
index 7fddd48..7f25e49 100644
--- a/lib/controller/task_planning/daily_task_controller.dart
+++ b/lib/controller/task_planning/daily_task_controller.dart
@@ -1,10 +1,10 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/project_model.dart';
-import 'package:marco/model/dailyTaskPlanning/daily_task_model.dart';
-import 'package:marco/model/dailyTaskPlanning/daily_progress_report_filter_response_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/project_model.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/daily_task_model.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/daily_progress_report_filter_response_model.dart';
class DailyTaskController extends GetxController {
List projects = [];
diff --git a/lib/controller/task_planning/daily_task_planning_controller.dart b/lib/controller/task_planning/daily_task_planning_controller.dart
index a0d24df..8ebd877 100644
--- a/lib/controller/task_planning/daily_task_planning_controller.dart
+++ b/lib/controller/task_planning/daily_task_planning_controller.dart
@@ -1,11 +1,11 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/project_model.dart';
-import 'package:marco/model/dailyTaskPlanning/daily_task_planning_model.dart';
-import 'package:marco/model/employees/employee_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/project_model.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/daily_task_planning_model.dart';
+import 'package:on_field_work/model/employees/employee_model.dart';
class DailyTaskPlanningController extends GetxController {
List projects = [];
diff --git a/lib/controller/task_planning/report_task_action_controller.dart b/lib/controller/task_planning/report_task_action_controller.dart
index 491e618..91633f2 100644
--- a/lib/controller/task_planning/report_task_action_controller.dart
+++ b/lib/controller/task_planning/report_task_action_controller.dart
@@ -4,16 +4,16 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:image_picker/image_picker.dart';
-import 'package:marco/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/controller/task_Planning/daily_task_Planning_controller.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/widgets/my_image_compressor.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/model/dailyTaskPlanning/work_status_model.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/controller/task_Planning/daily_task_Planning_controller.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/widgets/my_image_compressor.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/work_status_model.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
enum ApiStatus { idle, loading, success, failure }
diff --git a/lib/controller/task_planning/report_task_controller.dart b/lib/controller/task_planning/report_task_controller.dart
index 8aec032..34d0711 100644
--- a/lib/controller/task_planning/report_task_controller.dart
+++ b/lib/controller/task_planning/report_task_controller.dart
@@ -1,17 +1,17 @@
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_form_validator.dart';
-import 'package:marco/helpers/services/api_service.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_form_validator.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/controller/task_Planning/daily_task_Planning_controller.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/controller/task_Planning/daily_task_Planning_controller.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:io';
import 'dart:convert';
-import 'package:marco/helpers/widgets/my_image_compressor.dart';
-import 'package:marco/helpers/widgets/time_stamp_image_helper.dart';
+import 'package:on_field_work/helpers/widgets/my_image_compressor.dart';
+import 'package:on_field_work/helpers/widgets/time_stamp_image_helper.dart';
enum ApiStatus { idle, loading, success, failure }
diff --git a/lib/controller/tenant/all_organization_controller.dart b/lib/controller/tenant/all_organization_controller.dart
index 75ce2fd..80ea99a 100644
--- a/lib/controller/tenant/all_organization_controller.dart
+++ b/lib/controller/tenant/all_organization_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/all_organization_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/all_organization_model.dart';
class AllOrganizationController extends GetxController {
RxList organizations = [].obs;
diff --git a/lib/controller/tenant/organization_selection_controller.dart b/lib/controller/tenant/organization_selection_controller.dart
index ee6db6e..4b84375 100644
--- a/lib/controller/tenant/organization_selection_controller.dart
+++ b/lib/controller/tenant/organization_selection_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/model/attendance/organization_per_project_list_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/model/attendance/organization_per_project_list_model.dart';
class OrganizationController extends GetxController {
/// List of organizations assigned to the selected project
diff --git a/lib/controller/tenant/service_controller.dart b/lib/controller/tenant/service_controller.dart
index f832157..eed1d8f 100644
--- a/lib/controller/tenant/service_controller.dart
+++ b/lib/controller/tenant/service_controller.dart
@@ -1,7 +1,7 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/api_service.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/model/tenant/tenant_services_model.dart';
+import 'package:on_field_work/helpers/services/api_service.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/tenant/tenant_services_model.dart';
class ServiceController extends GetxController {
List services = [];
diff --git a/lib/controller/tenant/tenant_selection_controller.dart b/lib/controller/tenant/tenant_selection_controller.dart
index 7952e91..c5074be 100644
--- a/lib/controller/tenant/tenant_selection_controller.dart
+++ b/lib/controller/tenant/tenant_selection_controller.dart
@@ -1,10 +1,10 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/tenant_service.dart';
-import 'package:marco/model/tenant/tenant_list_model.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
-import 'package:marco/controller/permission_controller.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/tenant_service.dart';
+import 'package:on_field_work/model/tenant/tenant_list_model.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/controller/permission_controller.dart';
class TenantSelectionController extends GetxController {
final TenantService _tenantService = TenantService();
diff --git a/lib/controller/tenant/tenant_switch_controller.dart b/lib/controller/tenant/tenant_switch_controller.dart
index 5d73dc7..1ecaa8a 100644
--- a/lib/controller/tenant/tenant_switch_controller.dart
+++ b/lib/controller/tenant/tenant_switch_controller.dart
@@ -1,10 +1,10 @@
import 'package:get/get.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/helpers/services/tenant_service.dart';
-import 'package:marco/model/tenant/tenant_list_model.dart';
-import 'package:marco/helpers/widgets/my_snackbar.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
-import 'package:marco/controller/permission_controller.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/helpers/services/tenant_service.dart';
+import 'package:on_field_work/model/tenant/tenant_list_model.dart';
+import 'package:on_field_work/helpers/widgets/my_snackbar.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/controller/permission_controller.dart';
class TenantSwitchController extends GetxController {
final TenantService _tenantService = TenantService();
diff --git a/lib/controller/ui/buttons_controller.dart b/lib/controller/ui/buttons_controller.dart
index 9141c6a..71c61ec 100644
--- a/lib/controller/ui/buttons_controller.dart
+++ b/lib/controller/ui/buttons_controller.dart
@@ -1,4 +1,4 @@
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class ButtonsController extends MyController {
List selected = List.filled(3, false);
diff --git a/lib/controller/ui/carousels_controller.dart b/lib/controller/ui/carousels_controller.dart
index 6f64dc4..b5d6955 100644
--- a/lib/controller/ui/carousels_controller.dart
+++ b/lib/controller/ui/carousels_controller.dart
@@ -1,7 +1,7 @@
import 'dart:async';
import 'package:carousel_slider/carousel_controller.dart';
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
import 'package:flutter/material.dart';
class CarouselsController extends MyController {
diff --git a/lib/controller/ui/dialogs_controller.dart b/lib/controller/ui/dialogs_controller.dart
index 670848f..00fba9d 100644
--- a/lib/controller/ui/dialogs_controller.dart
+++ b/lib/controller/ui/dialogs_controller.dart
@@ -1,5 +1,5 @@
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_text_utils.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_text_utils.dart';
class DialogsController extends MyController {
List dummyTexts =
diff --git a/lib/controller/ui/loaders_controller.dart b/lib/controller/ui/loaders_controller.dart
index 55fc120..933d214 100644
--- a/lib/controller/ui/loaders_controller.dart
+++ b/lib/controller/ui/loaders_controller.dart
@@ -1,3 +1,3 @@
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
class LoadersController extends MyController {}
diff --git a/lib/controller/ui/modal_controller.dart b/lib/controller/ui/modal_controller.dart
index e1f5660..9fcd3d3 100644
--- a/lib/controller/ui/modal_controller.dart
+++ b/lib/controller/ui/modal_controller.dart
@@ -1,5 +1,5 @@
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_text_utils.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_text_utils.dart';
import 'package:flutter/animation.dart';
import 'package:flutter/material.dart';
diff --git a/lib/controller/ui/notification_controller.dart b/lib/controller/ui/notification_controller.dart
index 5a02ff2..d78a484 100644
--- a/lib/controller/ui/notification_controller.dart
+++ b/lib/controller/ui/notification_controller.dart
@@ -1,10 +1,10 @@
import 'dart:async';
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/extensions/string.dart';
-import 'package:marco/helpers/theme/admin_theme.dart';
-import 'package:marco/helpers/widgets/my_button.dart';
-import 'package:marco/helpers/widgets/my_spacing.dart';
-import 'package:marco/helpers/widgets/my_text.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/extensions/string.dart';
+import 'package:on_field_work/helpers/theme/admin_theme.dart';
+import 'package:on_field_work/helpers/widgets/my_button.dart';
+import 'package:on_field_work/helpers/widgets/my_spacing.dart';
+import 'package:on_field_work/helpers/widgets/my_text.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:flutter_lucide/flutter_lucide.dart';
diff --git a/lib/controller/ui/tabs_controller.dart b/lib/controller/ui/tabs_controller.dart
index 77789ca..57641bc 100644
--- a/lib/controller/ui/tabs_controller.dart
+++ b/lib/controller/ui/tabs_controller.dart
@@ -1,5 +1,5 @@
-import 'package:marco/controller/my_controller.dart';
-import 'package:marco/helpers/widgets/my_text_utils.dart';
+import 'package:on_field_work/controller/my_controller.dart';
+import 'package:on_field_work/helpers/widgets/my_text_utils.dart';
import 'package:flutter/material.dart';
class TabsController extends MyController {
diff --git a/lib/controller/ui/toast_message_controller.dart b/lib/controller/ui/toast_message_controller.dart
index 61c4656..232036f 100644
--- a/lib/controller/ui/toast_message_controller.dart
+++ b/lib/controller/ui/toast_message_controller.dart
@@ -1,4 +1,4 @@
-import 'package:marco/controller/my_controller.dart';
+import 'package:on_field_work/controller/my_controller.dart';
import 'package:flutter/material.dart';
class ToastMessageController extends MyController {
diff --git a/lib/helpers/extensions/app_localization_delegate.dart b/lib/helpers/extensions/app_localization_delegate.dart
index 4668e1e..a9c87f7 100644
--- a/lib/helpers/extensions/app_localization_delegate.dart
+++ b/lib/helpers/extensions/app_localization_delegate.dart
@@ -1,5 +1,5 @@
-import 'package:marco/helpers/services/localizations/language.dart';
-import 'package:marco/helpers/theme/app_notifier.dart';
+import 'package:on_field_work/helpers/services/localizations/language.dart';
+import 'package:on_field_work/helpers/theme/app_notifier.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
diff --git a/lib/helpers/extensions/string.dart b/lib/helpers/extensions/string.dart
index 0e818c3..da4627c 100644
--- a/lib/helpers/extensions/string.dart
+++ b/lib/helpers/extensions/string.dart
@@ -1,5 +1,5 @@
import 'dart:ui';
-import 'package:marco/helpers/services/localizations/translator.dart';
+import 'package:on_field_work/helpers/services/localizations/translator.dart';
extension StringUtil on String {
Color get toColor {
diff --git a/lib/helpers/services/api_endpoints.dart b/lib/helpers/services/api_endpoints.dart
index 8b5b277..743c8e1 100644
--- a/lib/helpers/services/api_endpoints.dart
+++ b/lib/helpers/services/api_endpoints.dart
@@ -3,6 +3,8 @@ class ApiEndpoints {
// static const String baseUrl = "https://api.marcoaiot.com/api";
// static const String baseUrl = "https://devapi.marcoaiot.com/api";
// static const String baseUrl = "https://mapi.marcoaiot.com/api";
+ // static const String baseUrl = "https://api.onfieldwork.com/api";
+
static const String getMasterCurrencies = "/Master/currencies/list";
static const String getMasterExpensesCategories =
@@ -145,8 +147,9 @@ class ApiEndpoints {
static const String editServiceProjectJob = "/serviceproject/job/edit";
static const String createServiceProjectJob = "/serviceproject/job/create";
static const String serviceProjectUpateJobAttendance = "/serviceproject/job/attendance";
- static const String serviceProjectUpateJobAttendanceLog = "/job/attendance/log";
+ static const String serviceProjectUpateJobAttendanceLog = "/serviceproject/job/attendance/log";
static const String getServiceProjectUpateJobAllocationList = "/serviceproject/get/allocation/list";
static const String manageServiceProjectUpateJobAllocation = "/serviceproject/manage/allocation";
static const String getTeamRoles = "/master/team-roles/list";
+ static const String getServiceProjectBranches = "/serviceproject/branch/list";
}
diff --git a/lib/helpers/services/api_service.dart b/lib/helpers/services/api_service.dart
index f3d7ce2..2c22e46 100644
--- a/lib/helpers/services/api_service.dart
+++ b/lib/helpers/services/api_service.dart
@@ -4,41 +4,42 @@ import 'package:http/http.dart' as http;
import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart';
-import 'package:marco/helpers/services/auth_service.dart';
-import 'package:marco/helpers/services/api_endpoints.dart';
-import 'package:marco/helpers/services/storage/local_storage.dart';
+import 'package:on_field_work/helpers/services/auth_service.dart';
+import 'package:on_field_work/helpers/services/api_endpoints.dart';
+import 'package:on_field_work/helpers/services/storage/local_storage.dart';
import 'package:jwt_decoder/jwt_decoder.dart';
-import 'package:marco/model/dashboard/project_progress_model.dart';
-import 'package:marco/model/dashboard/dashboard_tasks_model.dart';
-import 'package:marco/model/dashboard/dashboard_teams_model.dart';
-import 'package:marco/helpers/services/app_logger.dart';
-import 'package:marco/model/document/document_filter_model.dart';
-import 'package:marco/model/document/documents_list_model.dart';
-import 'package:marco/model/document/master_document_tags.dart';
-import 'package:marco/model/document/master_document_type_model.dart';
-import 'package:marco/model/document/document_details_model.dart';
-import 'package:marco/model/document/document_version_model.dart';
-import 'package:marco/model/attendance/organization_per_project_list_model.dart';
-import 'package:marco/model/tenant/tenant_services_model.dart';
-import 'package:marco/model/dailyTaskPlanning/daily_task_model.dart';
-import 'package:marco/model/dailyTaskPlanning/daily_progress_report_filter_response_model.dart';
-import 'package:marco/model/all_organization_model.dart';
-import 'package:marco/model/dashboard/pending_expenses_model.dart';
-import 'package:marco/model/dashboard/expense_type_report_model.dart';
-import 'package:marco/model/dashboard/monthly_expence_model.dart';
-import 'package:marco/model/finance/expense_category_model.dart';
-import 'package:marco/model/finance/currency_list_model.dart';
-import 'package:marco/model/finance/payment_payee_request_model.dart';
-import 'package:marco/model/finance/payment_request_list_model.dart';
-import 'package:marco/model/finance/payment_request_filter.dart';
-import 'package:marco/model/finance/payment_request_details_model.dart';
-import 'package:marco/model/finance/advance_payment_model.dart';
-import 'package:marco/model/service_project/service_projects_list_model.dart';
-import 'package:marco/model/service_project/service_projects_details_model.dart';
-import 'package:marco/model/service_project/job_list_model.dart';
-import 'package:marco/model/service_project/service_project_job_detail_model.dart';
-import 'package:marco/model/service_project/job_attendance_logs_model.dart';
-import 'package:marco/model/service_project/job_allocation_model.dart';
+import 'package:on_field_work/model/dashboard/project_progress_model.dart';
+import 'package:on_field_work/model/dashboard/dashboard_tasks_model.dart';
+import 'package:on_field_work/model/dashboard/dashboard_teams_model.dart';
+import 'package:on_field_work/helpers/services/app_logger.dart';
+import 'package:on_field_work/model/document/document_filter_model.dart';
+import 'package:on_field_work/model/document/documents_list_model.dart';
+import 'package:on_field_work/model/document/master_document_tags.dart';
+import 'package:on_field_work/model/document/master_document_type_model.dart';
+import 'package:on_field_work/model/document/document_details_model.dart';
+import 'package:on_field_work/model/document/document_version_model.dart';
+import 'package:on_field_work/model/attendance/organization_per_project_list_model.dart';
+import 'package:on_field_work/model/tenant/tenant_services_model.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/daily_task_model.dart';
+import 'package:on_field_work/model/dailyTaskPlanning/daily_progress_report_filter_response_model.dart';
+import 'package:on_field_work/model/all_organization_model.dart';
+import 'package:on_field_work/model/dashboard/pending_expenses_model.dart';
+import 'package:on_field_work/model/dashboard/expense_type_report_model.dart';
+import 'package:on_field_work/model/dashboard/monthly_expence_model.dart';
+import 'package:on_field_work/model/finance/expense_category_model.dart';
+import 'package:on_field_work/model/finance/currency_list_model.dart';
+import 'package:on_field_work/model/finance/payment_payee_request_model.dart';
+import 'package:on_field_work/model/finance/payment_request_list_model.dart';
+import 'package:on_field_work/model/finance/payment_request_filter.dart';
+import 'package:on_field_work/model/finance/payment_request_details_model.dart';
+import 'package:on_field_work/model/finance/advance_payment_model.dart';
+import 'package:on_field_work/model/service_project/service_projects_list_model.dart';
+import 'package:on_field_work/model/service_project/service_projects_details_model.dart';
+import 'package:on_field_work/model/service_project/job_list_model.dart';
+import 'package:on_field_work/model/service_project/service_project_job_detail_model.dart';
+import 'package:on_field_work/model/service_project/job_attendance_logs_model.dart';
+import 'package:on_field_work/model/service_project/job_allocation_model.dart';
+import 'package:on_field_work/model/service_project/service_project_branches_model.dart';
class ApiService {
static const bool enableLogs = true;
@@ -310,6 +311,51 @@ class ApiService {
}
}
+ /// Fetch Service Project Branches with full response
+ static Future getServiceProjectBranchesFull({
+ required String projectId,
+ int pageNumber = 1,
+ int pageSize = 20,
+ String searchString = '',
+ bool isActive = true,
+ }) async {
+ final queryParams = {
+ 'pageNumber': pageNumber.toString(),
+ 'pageSize': pageSize.toString(),
+ 'searchString': searchString,
+ 'isActive': isActive.toString(),
+ };
+
+ final endpoint = "${ApiEndpoints.getServiceProjectBranches}/$projectId";
+
+ try {
+ final response = await _getRequest(
+ endpoint,
+ queryParams: queryParams,
+ );
+
+ if (response == null) {
+ _log("getServiceProjectBranchesFull: No response received.");
+ return null;
+ }
+
+ final parsedJson = _parseResponseForAllData(
+ response,
+ label: "ServiceProjectBranchesFull",
+ );
+
+ if (parsedJson == null) return null;
+
+ return ServiceProjectBranchesResponse.fromJson(parsedJson);
+ } catch (e, stack) {
+ _log(
+ "Exception in getServiceProjectBranchesFull: $e\n$stack",
+ level: LogLevel.error,
+ );
+ return null;
+ }
+ }
+
// Service Project Module APIs
static Future?> getTeamRoles() async {
try {
@@ -558,6 +604,7 @@ class ApiService {
required DateTime startDate,
required DateTime dueDate,
required List