marco.pms.mobileapp/lib/controller/dashboard/add_employee_controller.dart
Vaibhav Surve 1ea960b0ec Add employee management features including controller, models, and UI
- Implemented AddEmployeeController for handling employee creation logic.
- Created EmployeeScreen and AddEmployeeScreen for employee management UI.
- Added API endpoints for fetching and creating employees.
- Updated EmployeeModel to include additional fields: jobRole, email, and phoneNumber.
- Refactored MyRefreshWrapper to MyRefreshableContent for consistency.
- Enhanced navigation to include employee management routes.
2025-05-09 09:58:44 +05:30

120 lines
3.3 KiB
Dart

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:get/get.dart';
import 'package:logger/logger.dart';
enum Gender {
male,
female,
other;
const Gender();
}
final Logger logger = Logger();
class AddEmployeeController extends MyController {
List<PlatformFile> files = [];
MyFormValidator basicValidator = MyFormValidator();
Gender? selectedGender;
List<Map<String, dynamic>> roles = [];
String? selectedRoleId;
@override
void onInit() {
super.onInit();
logger.i("Initializing AddEmployeeController...");
fetchRoles();
basicValidator.addField(
'first_name',
label: "First Name",
required: true,
controller: TextEditingController(),
);
basicValidator.addField(
'phone_number',
label: "Phone Number",
required: true,
controller: TextEditingController(),
);
basicValidator.addField(
'last_name',
label: "Last Name",
required: true,
controller: TextEditingController(),
);
logger.i("Fields initialized for first_name, phone_number, last_name.");
}
bool showOnline = true;
final List<String> categories = [];
void onGenderSelected(Gender? gender) {
selectedGender = gender;
logger.i("Gender selected: ${gender?.name}");
update();
}
Future<void> fetchRoles() async {
logger.i("Fetching roles...");
final result = await ApiService.getRoles();
if (result != null) {
roles = List<Map<String, dynamic>>.from(result);
logger.i("Roles fetched successfully.");
update();
} else {
logger.e("Failed to fetch roles.");
}
}
void onRoleSelected(String? roleId) {
selectedRoleId = roleId;
logger.i("Role selected: $roleId");
update();
}
Future<void> createEmployees() async {
logger.i("Starting employee creation...");
if (selectedGender == null || selectedRoleId == null) {
logger.w("Missing gender or role.");
Get.snackbar(
"Missing Fields",
"Please select both Gender and Role.",
snackPosition: SnackPosition.BOTTOM,
);
return;
}
final firstName = basicValidator.getController("first_name")?.text.trim();
final lastName = basicValidator.getController("last_name")?.text.trim();
final phoneNumber =
basicValidator.getController("phone_number")?.text.trim();
logger.i(
"Creating employee with Name: $firstName $lastName, Phone: $phoneNumber, Gender: ${selectedGender!.name}");
final response = await ApiService.createEmployee(
firstName: firstName!,
lastName: lastName!,
phoneNumber: phoneNumber!,
gender: selectedGender!.name,
jobRoleId: selectedRoleId!,
);
if (response == true) {
logger.i("Employee created successfully.");
Get.back(); // Or navigate as needed
Get.snackbar("Success", "Employee created successfully!",
snackPosition: SnackPosition.BOTTOM);
} else {
logger.e("Failed to create employee.");
Get.snackbar("Error", "Failed to create employee.",
snackPosition: SnackPosition.BOTTOM);
}
}
}