diff --git a/lib/model/employees/add_employee_bottom_sheet.dart b/lib/model/employees/add_employee_bottom_sheet.dart index 82277f0..97a37b2 100644 --- a/lib/model/employees/add_employee_bottom_sheet.dart +++ b/lib/model/employees/add_employee_bottom_sheet.dart @@ -36,57 +36,61 @@ class _AddEmployeeBottomSheetState extends State late final TextEditingController _genderController; late final TextEditingController _roleController; - @override + @override void initState() { super.initState(); + _orgFieldController = TextEditingController(); + _joiningDateController = TextEditingController(); + _genderController = TextEditingController(); + _roleController = TextEditingController(); - _controller = Get.put( - AddEmployeeController(), - // Unique tag to avoid clashes, but stable for this widget instance - tag: UniqueKey().toString(), - ); + _controller = Get.put(AddEmployeeController(), tag: UniqueKey().toString()); - _orgFieldController = TextEditingController(text: ''); - _joiningDateController = TextEditingController(text: ''); - _genderController = TextEditingController(text: ''); - _roleController = TextEditingController(text: ''); - - // Prefill when editing if (widget.employeeData != null) { _controller.editingEmployeeData = widget.employeeData; _controller.prefillFields(); - final orgId = widget.employeeData!['organizationId']; - if (orgId != null) { - _controller.selectedOrganizationId = orgId; + // Prepopulate hasApplicationAccess and email + _hasApplicationAccess = + widget.employeeData?['hasApplicationAccess'] ?? false; - final selectedOrg = _organizationController.organizations - .firstWhereOrNull((o) => o.id == orgId); - if (selectedOrg != null) { - _organizationController.selectOrganization(selectedOrg); - _orgFieldController.text = selectedOrg.name; - } + final email = widget.employeeData?['email']; + if (email != null && email.toString().isNotEmpty) { + _controller.basicValidator.getController('email')?.text = + email.toString(); } + // Trigger UI rebuild to reflect email & checkbox + setState(() {}); + + // Joining date if (_controller.joiningDate != null) { _joiningDateController.text = DateFormat('dd MMM yyyy').format(_controller.joiningDate!); } + // Gender if (_controller.selectedGender != null) { _genderController.text = _controller.selectedGender!.name.capitalizeFirst ?? ''; } - final roleName = _controller.roles.firstWhereOrNull( - (r) => r['id'] == _controller.selectedRoleId)?['name'] ?? - ''; - _roleController.text = roleName; + // Role + _controller.fetchRoles().then((_) { + if (_controller.selectedRoleId != null) { + final roleName = _controller.roles.firstWhereOrNull( + (r) => r['id'] == _controller.selectedRoleId, + )?['name']; + if (roleName != null) { + _roleController.text = roleName; + } + _controller.update(); + } + }); } else { - _orgFieldController.text = _organizationController.currentSelection; + _controller.fetchRoles(); } } - @override void dispose() { _orgFieldController.dispose(); diff --git a/lib/model/employees/employee_details_model.dart b/lib/model/employees/employee_details_model.dart index cd0ea65..b5c22f4 100644 --- a/lib/model/employees/employee_details_model.dart +++ b/lib/model/employees/employee_details_model.dart @@ -12,15 +12,17 @@ class EmployeeDetailsModel { final String phoneNumber; final String? emergencyPhoneNumber; final String? emergencyContactPerson; - final String? aadharNumber; final bool isActive; - final String? panNumber; - final String? photo; - final String? applicationUserId; - final String jobRoleId; + final bool isRootUser; final bool isSystem; final String jobRole; - + final String jobRoleId; + final String? photo; + final String? applicationUserId; + final bool hasApplicationAccess; + final String? organizationId; + final String? aadharNumber; + final String? panNumber; EmployeeDetailsModel({ required this.id, required this.firstName, @@ -35,14 +37,17 @@ class EmployeeDetailsModel { required this.phoneNumber, this.emergencyPhoneNumber, this.emergencyContactPerson, - this.aadharNumber, required this.isActive, - this.panNumber, - this.photo, - this.applicationUserId, - required this.jobRoleId, + required this.isRootUser, required this.isSystem, required this.jobRole, + required this.jobRoleId, + this.photo, + this.applicationUserId, + required this.hasApplicationAccess, + this.organizationId, + this.aadharNumber, + this.panNumber, }); factory EmployeeDetailsModel.fromJson(Map json) { @@ -60,24 +65,20 @@ class EmployeeDetailsModel { phoneNumber: json['phoneNumber'], emergencyPhoneNumber: json['emergencyPhoneNumber'], emergencyContactPerson: json['emergencyContactPerson'], - aadharNumber: json['aadharNumber'], isActive: json['isActive'], - panNumber: json['panNumber'], - photo: json['photo'], - applicationUserId: json['applicationUserId'], - jobRoleId: json['jobRoleId'], + isRootUser: json['isRootUser'], isSystem: json['isSystem'], jobRole: json['jobRole'], + jobRoleId: json['jobRoleId'], + photo: json['photo'], + applicationUserId: json['applicationUserId'], + hasApplicationAccess: json['hasApplicationAccess'], + organizationId: json['organizationId'], + aadharNumber: json['aadharNumber'], + panNumber: json['panNumber'], ); } - static DateTime? _parseDate(String? dateStr) { - if (dateStr == null || dateStr == "0001-01-01T00:00:00") { - return null; - } - return DateTime.tryParse(dateStr); - } - Map toJson() { return { 'id': id, @@ -93,14 +94,24 @@ class EmployeeDetailsModel { 'phoneNumber': phoneNumber, 'emergencyPhoneNumber': emergencyPhoneNumber, 'emergencyContactPerson': emergencyContactPerson, - 'aadharNumber': aadharNumber, 'isActive': isActive, - 'panNumber': panNumber, - 'photo': photo, - 'applicationUserId': applicationUserId, - 'jobRoleId': jobRoleId, + 'isRootUser': isRootUser, 'isSystem': isSystem, 'jobRole': jobRole, + 'jobRoleId': jobRoleId, + 'photo': photo, + 'applicationUserId': applicationUserId, + 'hasApplicationAccess': hasApplicationAccess, + 'organizationId': organizationId, + 'aadharNumber': aadharNumber, + 'panNumber': panNumber, }; } -} + + static DateTime? _parseDate(String? dateStr) { + if (dateStr == null || dateStr == "0001-01-01T00:00:00") { + return null; + } + return DateTime.tryParse(dateStr); + } +} \ No newline at end of file diff --git a/lib/view/employees/employee_detail_screen.dart b/lib/view/employees/employee_detail_screen.dart index bcaecdc..752dc8d 100644 --- a/lib/view/employees/employee_detail_screen.dart +++ b/lib/view/employees/employee_detail_screen.dart @@ -251,8 +251,8 @@ class _EmployeeDetailPageState extends State { ), ), IconButton( - icon: const Icon(Icons.edit, - size: 24, color: Colors.red), + icon: + const Icon(Icons.edit, size: 24, color: Colors.red), onPressed: () async { final result = await showModalBottomSheet>( @@ -265,6 +265,9 @@ class _EmployeeDetailPageState extends State { 'first_name': employee.firstName, 'last_name': employee.lastName, 'phone_number': employee.phoneNumber, + 'email': employee.email, + 'hasApplicationAccess': + employee.hasApplicationAccess, 'gender': employee.gender.toLowerCase(), 'job_role_id': employee.jobRoleId, 'joining_date':