- Added a floating action button to the Layout widget for better accessibility. - Updated the left bar navigation items for clarity and consistency. - Introduced Daily Progress Report and Daily Task Planning screens with comprehensive UI. - Implemented filtering and refreshing functionalities in task planning. - Improved user experience with better spacing and layout adjustments. - Updated pubspec.yaml to include new dependencies for image handling and path management.
127 lines
3.4 KiB
Dart
127 lines
3.4 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:logger/logger.dart';
|
|
import 'package:marco/helpers/widgets/my_snackbar.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<bool> createEmployees() async {
|
|
logger.i("Starting employee creation...");
|
|
if (selectedGender == null || selectedRoleId == null) {
|
|
logger.w("Missing gender or role.");
|
|
showAppSnackbar(
|
|
title: "Missing Fields",
|
|
message: "Please select both Gender and Role.",
|
|
type: SnackbarType.warning,
|
|
);
|
|
return false;
|
|
}
|
|
|
|
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.");
|
|
showAppSnackbar(
|
|
title: "Success",
|
|
message: "Employee created successfully!",
|
|
type: SnackbarType.success,
|
|
);
|
|
return true;
|
|
} else {
|
|
logger.e("Failed to create employee.");
|
|
showAppSnackbar(
|
|
title: "Error",
|
|
message: "Failed to create employee.",
|
|
type: SnackbarType.error,
|
|
);
|
|
return false;
|
|
}
|
|
}
|
|
}
|