removed unwanted code
This commit is contained in:
parent
1993676470
commit
b1b5b52854
@ -4,7 +4,6 @@ import 'package:marco/controller/attendance/attendance_screen_controller.dart';
|
|||||||
import 'package:marco/helpers/widgets/my_text.dart';
|
import 'package:marco/helpers/widgets/my_text.dart';
|
||||||
import 'package:marco/helpers/utils/permission_constants.dart';
|
import 'package:marco/helpers/utils/permission_constants.dart';
|
||||||
import 'package:marco/helpers/utils/base_bottom_sheet.dart';
|
import 'package:marco/helpers/utils/base_bottom_sheet.dart';
|
||||||
import 'package:get/get.dart';
|
|
||||||
import 'package:marco/helpers/utils/date_time_utils.dart';
|
import 'package:marco/helpers/utils/date_time_utils.dart';
|
||||||
|
|
||||||
class AttendanceFilterBottomSheet extends StatefulWidget {
|
class AttendanceFilterBottomSheet extends StatefulWidget {
|
||||||
@ -39,78 +38,13 @@ class _AttendanceFilterBottomSheetState
|
|||||||
final endDate = widget.controller.endDateAttendance;
|
final endDate = widget.controller.endDateAttendance;
|
||||||
|
|
||||||
if (startDate != null && endDate != null) {
|
if (startDate != null && endDate != null) {
|
||||||
final start =
|
final start = DateTimeUtils.formatDate(startDate, 'dd MMM yyyy');
|
||||||
DateTimeUtils.formatDate(startDate, 'dd MMM yyyy');
|
|
||||||
final end = DateTimeUtils.formatDate(endDate, 'dd MMM yyyy');
|
final end = DateTimeUtils.formatDate(endDate, 'dd MMM yyyy');
|
||||||
return "$start - $end";
|
return "$start - $end";
|
||||||
}
|
}
|
||||||
return "Date Range";
|
return "Date Range";
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _popupSelector({
|
|
||||||
required String currentValue,
|
|
||||||
required List<String> items,
|
|
||||||
required ValueChanged<String> onSelected,
|
|
||||||
}) {
|
|
||||||
return PopupMenuButton<String>(
|
|
||||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
|
|
||||||
onSelected: onSelected,
|
|
||||||
itemBuilder: (context) => items
|
|
||||||
.map((e) => PopupMenuItem<String>(
|
|
||||||
value: e,
|
|
||||||
child: MyText(e),
|
|
||||||
))
|
|
||||||
.toList(),
|
|
||||||
child: Container(
|
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.grey.shade100,
|
|
||||||
border: Border.all(color: Colors.grey.shade300),
|
|
||||||
borderRadius: BorderRadius.circular(12),
|
|
||||||
),
|
|
||||||
child: Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: MyText(
|
|
||||||
currentValue,
|
|
||||||
style: const TextStyle(color: Colors.black87),
|
|
||||||
overflow: TextOverflow.ellipsis,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
const Icon(Icons.arrow_drop_down, color: Colors.grey),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildOrganizationSelector(BuildContext context) {
|
|
||||||
final orgNames = [
|
|
||||||
"All Organizations",
|
|
||||||
...widget.controller.organizations.map((e) => e.name)
|
|
||||||
];
|
|
||||||
|
|
||||||
return _popupSelector(
|
|
||||||
currentValue:
|
|
||||||
widget.controller.selectedOrganization?.name ?? "All Organizations",
|
|
||||||
items: orgNames,
|
|
||||||
onSelected: (name) {
|
|
||||||
if (name == "All Organizations") {
|
|
||||||
setState(() {
|
|
||||||
widget.controller.selectedOrganization = null;
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
final selectedOrg = widget.controller.organizations
|
|
||||||
.firstWhere((org) => org.name == name);
|
|
||||||
setState(() {
|
|
||||||
widget.controller.selectedOrganization = selectedOrg;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Widget> buildMainFilters() {
|
List<Widget> buildMainFilters() {
|
||||||
final hasRegularizationPermission = widget.permissionController
|
final hasRegularizationPermission = widget.permissionController
|
||||||
.hasPermission(Permissions.regularizeAttendance);
|
.hasPermission(Permissions.regularizeAttendance);
|
||||||
@ -149,35 +83,6 @@ class _AttendanceFilterBottomSheetState
|
|||||||
}),
|
}),
|
||||||
];
|
];
|
||||||
|
|
||||||
// 🔹 Organization filter
|
|
||||||
widgets.addAll([
|
|
||||||
const Divider(),
|
|
||||||
Padding(
|
|
||||||
padding: const EdgeInsets.only(top: 12, bottom: 12),
|
|
||||||
child: Align(
|
|
||||||
alignment: Alignment.centerLeft,
|
|
||||||
child: MyText.titleSmall("Choose Organization", fontWeight: 600),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Obx(() {
|
|
||||||
if (widget.controller.isLoadingOrganizations.value) {
|
|
||||||
return const Center(child: CircularProgressIndicator());
|
|
||||||
} else if (widget.controller.organizations.isEmpty) {
|
|
||||||
return Center(
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.symmetric(vertical: 16.0),
|
|
||||||
child: MyText.bodyMedium(
|
|
||||||
"No organizations found",
|
|
||||||
fontWeight: 500,
|
|
||||||
color: Colors.grey,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return _buildOrganizationSelector(context);
|
|
||||||
}),
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 🔹 Date Range only for attendanceLogs
|
// 🔹 Date Range only for attendanceLogs
|
||||||
if (tempSelectedTab == 'attendanceLogs') {
|
if (tempSelectedTab == 'attendanceLogs') {
|
||||||
widgets.addAll([
|
widgets.addAll([
|
||||||
@ -237,7 +142,6 @@ class _AttendanceFilterBottomSheetState
|
|||||||
onCancel: () => Navigator.pop(context),
|
onCancel: () => Navigator.pop(context),
|
||||||
onSubmit: () => Navigator.pop(context, {
|
onSubmit: () => Navigator.pop(context, {
|
||||||
'selectedTab': tempSelectedTab,
|
'selectedTab': tempSelectedTab,
|
||||||
'selectedOrganization': widget.controller.selectedOrganization?.id,
|
|
||||||
}),
|
}),
|
||||||
child: Column(
|
child: Column(
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
@ -5,7 +5,6 @@ import 'package:intl/intl.dart';
|
|||||||
|
|
||||||
import 'package:marco/controller/employee/add_employee_controller.dart';
|
import 'package:marco/controller/employee/add_employee_controller.dart';
|
||||||
import 'package:marco/controller/employee/employees_screen_controller.dart';
|
import 'package:marco/controller/employee/employees_screen_controller.dart';
|
||||||
import 'package:marco/controller/tenant/organization_selection_controller.dart';
|
|
||||||
import 'package:marco/helpers/utils/base_bottom_sheet.dart';
|
import 'package:marco/helpers/utils/base_bottom_sheet.dart';
|
||||||
import 'package:marco/helpers/utils/mixins/ui_mixin.dart';
|
import 'package:marco/helpers/utils/mixins/ui_mixin.dart';
|
||||||
import 'package:marco/helpers/widgets/my_snackbar.dart';
|
import 'package:marco/helpers/widgets/my_snackbar.dart';
|
||||||
@ -24,8 +23,6 @@ class AddEmployeeBottomSheet extends StatefulWidget {
|
|||||||
class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
||||||
with UIMixin {
|
with UIMixin {
|
||||||
late final AddEmployeeController _controller;
|
late final AddEmployeeController _controller;
|
||||||
final OrganizationController _organizationController =
|
|
||||||
Get.put(OrganizationController());
|
|
||||||
|
|
||||||
// Local UI state
|
// Local UI state
|
||||||
bool _hasApplicationAccess = false;
|
bool _hasApplicationAccess = false;
|
||||||
@ -55,19 +52,6 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
if (widget.employeeData != null) {
|
if (widget.employeeData != null) {
|
||||||
_controller.editingEmployeeData = widget.employeeData;
|
_controller.editingEmployeeData = widget.employeeData;
|
||||||
_controller.prefillFields();
|
_controller.prefillFields();
|
||||||
|
|
||||||
final orgId = widget.employeeData!['organizationId'];
|
|
||||||
if (orgId != null) {
|
|
||||||
_controller.selectedOrganizationId = orgId;
|
|
||||||
|
|
||||||
final selectedOrg = _organizationController.organizations
|
|
||||||
.firstWhereOrNull((o) => o.id == orgId);
|
|
||||||
if (selectedOrg != null) {
|
|
||||||
_organizationController.selectOrganization(selectedOrg);
|
|
||||||
_orgFieldController.text = selectedOrg.name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_controller.joiningDate != null) {
|
if (_controller.joiningDate != null) {
|
||||||
_joiningDateController.text =
|
_joiningDateController.text =
|
||||||
DateFormat('dd MMM yyyy').format(_controller.joiningDate!);
|
DateFormat('dd MMM yyyy').format(_controller.joiningDate!);
|
||||||
@ -82,9 +66,7 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
(r) => r['id'] == _controller.selectedRoleId)?['name'] ??
|
(r) => r['id'] == _controller.selectedRoleId)?['name'] ??
|
||||||
'';
|
'';
|
||||||
_roleController.text = roleName;
|
_roleController.text = roleName;
|
||||||
} else {
|
} else {}
|
||||||
_orgFieldController.text = _organizationController.currentSelection;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -102,7 +84,6 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
init: _controller,
|
init: _controller,
|
||||||
builder: (_) {
|
builder: (_) {
|
||||||
// Keep org field in sync with controller selection
|
// Keep org field in sync with controller selection
|
||||||
_orgFieldController.text = _organizationController.currentSelection;
|
|
||||||
|
|
||||||
return BaseBottomSheet(
|
return BaseBottomSheet(
|
||||||
title: widget.employeeData != null ? 'Edit Employee' : 'Add Employee',
|
title: widget.employeeData != null ? 'Edit Employee' : 'Add Employee',
|
||||||
@ -135,30 +116,6 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
_controller.basicValidator.getValidation('last_name'),
|
_controller.basicValidator.getValidation('last_name'),
|
||||||
),
|
),
|
||||||
MySpacing.height(16),
|
MySpacing.height(16),
|
||||||
_sectionLabel('Organization'),
|
|
||||||
MySpacing.height(8),
|
|
||||||
GestureDetector(
|
|
||||||
onTap: () => _showOrganizationPopup(context),
|
|
||||||
child: AbsorbPointer(
|
|
||||||
child: TextFormField(
|
|
||||||
readOnly: true,
|
|
||||||
controller: _orgFieldController,
|
|
||||||
validator: (val) {
|
|
||||||
if (val == null ||
|
|
||||||
val.trim().isEmpty ||
|
|
||||||
val == 'All Organizations') {
|
|
||||||
return 'Organization is required';
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
},
|
|
||||||
decoration:
|
|
||||||
_inputDecoration('Select Organization').copyWith(
|
|
||||||
suffixIcon: const Icon(Icons.expand_more),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
MySpacing.height(24),
|
|
||||||
_sectionLabel('Application Access'),
|
_sectionLabel('Application Access'),
|
||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
@ -333,8 +290,7 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
keyboardType: TextInputType.emailAddress,
|
keyboardType: TextInputType.emailAddress,
|
||||||
decoration: _inputDecoration('e.g., john.doe@example.com').copyWith(
|
decoration: _inputDecoration('e.g., john.doe@example.com').copyWith(),
|
||||||
),
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
@ -483,9 +439,7 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
if (!isValid ||
|
if (!isValid ||
|
||||||
_controller.joiningDate == null ||
|
_controller.joiningDate == null ||
|
||||||
_controller.selectedGender == null ||
|
_controller.selectedGender == null ||
|
||||||
_controller.selectedRoleId == null ||
|
_controller.selectedRoleId == null) {
|
||||||
_organizationController.currentSelection.isEmpty ||
|
|
||||||
_organizationController.currentSelection == 'All Organizations') {
|
|
||||||
showAppSnackbar(
|
showAppSnackbar(
|
||||||
title: 'Missing Fields',
|
title: 'Missing Fields',
|
||||||
message: 'Please complete all required fields.',
|
message: 'Please complete all required fields.',
|
||||||
@ -514,40 +468,6 @@ class _AddEmployeeBottomSheetState extends State<AddEmployeeBottomSheet>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void _showOrganizationPopup(BuildContext context) async {
|
|
||||||
final orgs = _organizationController.organizations;
|
|
||||||
|
|
||||||
if (orgs.isEmpty) {
|
|
||||||
showAppSnackbar(
|
|
||||||
title: 'No Organizations',
|
|
||||||
message: 'No organizations available to select.',
|
|
||||||
type: SnackbarType.warning,
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
final selected = await showMenu<String>(
|
|
||||||
context: context,
|
|
||||||
position: _popupMenuPosition(context),
|
|
||||||
items: orgs
|
|
||||||
.map(
|
|
||||||
(org) => PopupMenuItem<String>(
|
|
||||||
value: org.id,
|
|
||||||
child: Text(org.name),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.toList(),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (selected != null && selected.trim().isNotEmpty) {
|
|
||||||
final chosen = orgs.firstWhere((e) => e.id == selected);
|
|
||||||
_organizationController.selectOrganization(chosen);
|
|
||||||
_controller.selectedOrganizationId = chosen.id;
|
|
||||||
_orgFieldController.text = chosen.name;
|
|
||||||
_controller.update();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void _showGenderPopup(BuildContext context) async {
|
void _showGenderPopup(BuildContext context) async {
|
||||||
final selected = await showMenu<Gender>(
|
final selected = await showMenu<Gender>(
|
||||||
context: context,
|
context: context,
|
||||||
|
@ -11,13 +11,10 @@ import 'package:marco/controller/project_controller.dart';
|
|||||||
import 'package:marco/helpers/widgets/my_custom_skeleton.dart';
|
import 'package:marco/helpers/widgets/my_custom_skeleton.dart';
|
||||||
import 'package:marco/model/employees/employee_model.dart';
|
import 'package:marco/model/employees/employee_model.dart';
|
||||||
import 'package:marco/helpers/utils/launcher_utils.dart';
|
import 'package:marco/helpers/utils/launcher_utils.dart';
|
||||||
import 'package:marco/view/employees/assign_employee_bottom_sheet.dart';
|
|
||||||
import 'package:marco/controller/permission_controller.dart';
|
import 'package:marco/controller/permission_controller.dart';
|
||||||
import 'package:marco/helpers/utils/permission_constants.dart';
|
import 'package:marco/helpers/utils/permission_constants.dart';
|
||||||
import 'package:marco/helpers/widgets/my_refresh_indicator.dart';
|
import 'package:marco/helpers/widgets/my_refresh_indicator.dart';
|
||||||
import 'package:marco/view/employees/employee_profile_screen.dart';
|
import 'package:marco/view/employees/employee_profile_screen.dart';
|
||||||
import 'package:marco/controller/tenant/organization_selection_controller.dart';
|
|
||||||
import 'package:marco/helpers/widgets/tenant/organization_selector.dart';
|
|
||||||
|
|
||||||
class EmployeesScreen extends StatefulWidget {
|
class EmployeesScreen extends StatefulWidget {
|
||||||
const EmployeesScreen({super.key});
|
const EmployeesScreen({super.key});
|
||||||
@ -33,8 +30,6 @@ class _EmployeesScreenState extends State<EmployeesScreen> with UIMixin {
|
|||||||
Get.find<PermissionController>();
|
Get.find<PermissionController>();
|
||||||
final TextEditingController _searchController = TextEditingController();
|
final TextEditingController _searchController = TextEditingController();
|
||||||
final RxList<EmployeeModel> _filteredEmployees = <EmployeeModel>[].obs;
|
final RxList<EmployeeModel> _filteredEmployees = <EmployeeModel>[].obs;
|
||||||
final OrganizationController _organizationController =
|
|
||||||
Get.put(OrganizationController());
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
@ -47,44 +42,15 @@ class _EmployeesScreenState extends State<EmployeesScreen> with UIMixin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _initEmployees() async {
|
Future<void> _initEmployees() async {
|
||||||
final projectId = Get.find<ProjectController>().selectedProject?.id;
|
|
||||||
final orgId = _organizationController.selectedOrganization.value?.id;
|
|
||||||
|
|
||||||
if (projectId != null) {
|
|
||||||
await _organizationController.fetchOrganizations(projectId);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (_employeeController.isAllEmployeeSelected.value) {
|
|
||||||
_employeeController.selectedProjectId = null;
|
_employeeController.selectedProjectId = null;
|
||||||
await _employeeController.fetchAllEmployees(organizationId: orgId);
|
await _employeeController.fetchAllEmployees();
|
||||||
} else if (projectId != null) {
|
|
||||||
_employeeController.selectedProjectId = projectId;
|
|
||||||
await _employeeController.fetchEmployeesByProject(projectId,
|
|
||||||
organizationId: orgId);
|
|
||||||
} else {
|
|
||||||
_employeeController.clearEmployees();
|
|
||||||
}
|
|
||||||
|
|
||||||
_filterEmployees(_searchController.text);
|
_filterEmployees(_searchController.text);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _refreshEmployees() async {
|
Future<void> _refreshEmployees() async {
|
||||||
try {
|
try {
|
||||||
final projectId = Get.find<ProjectController>().selectedProject?.id;
|
_employeeController.selectedProjectId = null;
|
||||||
final orgId = _organizationController.selectedOrganization.value?.id;
|
await _employeeController.fetchAllEmployees();
|
||||||
final allSelected = _employeeController.isAllEmployeeSelected.value;
|
|
||||||
|
|
||||||
_employeeController.selectedProjectId = allSelected ? null : projectId;
|
|
||||||
|
|
||||||
if (allSelected) {
|
|
||||||
await _employeeController.fetchAllEmployees(organizationId: orgId);
|
|
||||||
} else if (projectId != null) {
|
|
||||||
await _employeeController.fetchEmployeesByProject(projectId,
|
|
||||||
organizationId: orgId);
|
|
||||||
} else {
|
|
||||||
_employeeController.clearEmployees();
|
|
||||||
}
|
|
||||||
|
|
||||||
_filterEmployees(_searchController.text);
|
_filterEmployees(_searchController.text);
|
||||||
_employeeController.update(['employee_screen_controller']);
|
_employeeController.update(['employee_screen_controller']);
|
||||||
} catch (e, stackTrace) {
|
} catch (e, stackTrace) {
|
||||||
@ -132,22 +98,7 @@ class _EmployeesScreenState extends State<EmployeesScreen> with UIMixin {
|
|||||||
|
|
||||||
if (result == null || result['success'] != true) return;
|
if (result == null || result['success'] != true) return;
|
||||||
|
|
||||||
final employeeData = result['data'];
|
|
||||||
final employeeId = employeeData['id'] as String;
|
|
||||||
final jobRoleId = employeeData['jobRoleId'] as String?;
|
|
||||||
|
|
||||||
await showModalBottomSheet(
|
|
||||||
context: context,
|
|
||||||
isScrollControlled: true,
|
|
||||||
shape: const RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.vertical(top: Radius.circular(24)),
|
|
||||||
),
|
|
||||||
backgroundColor: Colors.transparent,
|
|
||||||
builder: (context) => AssignProjectBottomSheet(
|
|
||||||
employeeId: employeeId,
|
|
||||||
jobRoleId: jobRoleId ?? '',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
await _refreshEmployees();
|
await _refreshEmployees();
|
||||||
}
|
}
|
||||||
@ -287,43 +238,8 @@ class _EmployeesScreenState extends State<EmployeesScreen> with UIMixin {
|
|||||||
Row(
|
Row(
|
||||||
children: [
|
children: [
|
||||||
Expanded(child: _buildSearchField()),
|
Expanded(child: _buildSearchField()),
|
||||||
const SizedBox(width: 8),
|
|
||||||
_buildPopupMenu(),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
||||||
// Organization Selector Row
|
|
||||||
Row(
|
|
||||||
children: [
|
|
||||||
Expanded(
|
|
||||||
child: OrganizationSelector(
|
|
||||||
controller: _organizationController,
|
|
||||||
height: 36,
|
|
||||||
onSelectionChanged: (org) async {
|
|
||||||
// Make sure the selectedOrganization is updated immediately
|
|
||||||
_organizationController.selectOrganization(org);
|
|
||||||
|
|
||||||
final projectId =
|
|
||||||
Get.find<ProjectController>().selectedProject?.id;
|
|
||||||
|
|
||||||
if (_employeeController.isAllEmployeeSelected.value) {
|
|
||||||
await _employeeController.fetchAllEmployees(
|
|
||||||
organizationId: _organizationController
|
|
||||||
.selectedOrganization.value?.id);
|
|
||||||
} else if (projectId != null) {
|
|
||||||
await _employeeController.fetchEmployeesByProject(
|
|
||||||
projectId,
|
|
||||||
organizationId: _organizationController
|
|
||||||
.selectedOrganization.value?.id);
|
|
||||||
}
|
|
||||||
|
|
||||||
_employeeController.update(['employee_screen_controller']);
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
MySpacing.height(8),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@ -370,63 +286,6 @@ class _EmployeesScreenState extends State<EmployeesScreen> with UIMixin {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildPopupMenu() {
|
|
||||||
if (!_permissionController.hasPermission(Permissions.viewAllEmployees)) {
|
|
||||||
return const SizedBox.shrink();
|
|
||||||
}
|
|
||||||
|
|
||||||
return PopupMenuButton<String>(
|
|
||||||
icon: Stack(
|
|
||||||
clipBehavior: Clip.none,
|
|
||||||
children: [
|
|
||||||
const Icon(Icons.tune, color: Colors.black),
|
|
||||||
Obx(() => _employeeController.isAllEmployeeSelected.value
|
|
||||||
? Positioned(
|
|
||||||
right: -1,
|
|
||||||
top: -1,
|
|
||||||
child: Container(
|
|
||||||
width: 10,
|
|
||||||
height: 10,
|
|
||||||
decoration: const BoxDecoration(
|
|
||||||
color: Colors.red, shape: BoxShape.circle),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
: const SizedBox.shrink()),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
onSelected: (value) async {
|
|
||||||
if (value == 'all_employees') {
|
|
||||||
_employeeController.isAllEmployeeSelected.toggle();
|
|
||||||
await _initEmployees();
|
|
||||||
_employeeController.update(['employee_screen_controller']);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
itemBuilder: (_) => [
|
|
||||||
PopupMenuItem<String>(
|
|
||||||
value: 'all_employees',
|
|
||||||
child: Obx(
|
|
||||||
() => Row(
|
|
||||||
children: [
|
|
||||||
Checkbox(
|
|
||||||
value: _employeeController.isAllEmployeeSelected.value,
|
|
||||||
onChanged: (_) => Navigator.pop(context, 'all_employees'),
|
|
||||||
checkColor: Colors.white,
|
|
||||||
activeColor: Colors.blueAccent,
|
|
||||||
side: const BorderSide(color: Colors.black, width: 1.5),
|
|
||||||
fillColor: MaterialStateProperty.resolveWith<Color>(
|
|
||||||
(states) => states.contains(MaterialState.selected)
|
|
||||||
? Colors.blueAccent
|
|
||||||
: Colors.white),
|
|
||||||
),
|
|
||||||
const Text('All Employees'),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
Widget _buildEmployeeList() {
|
Widget _buildEmployeeList() {
|
||||||
return Obx(() {
|
return Obx(() {
|
||||||
if (_employeeController.isLoading.value) {
|
if (_employeeController.isLoading.value) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user