first commit
This commit is contained in:
240
lib/Screens/hrm/hrm_manu_screen.dart
Normal file
240
lib/Screens/hrm/hrm_manu_screen.dart
Normal file
@@ -0,0 +1,240 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:flutter_svg/flutter_svg.dart';
|
||||
import 'package:mobile_pos/generated/l10n.dart' as l;
|
||||
import 'package:mobile_pos/Screens/hrm/attendance/attendance_screen.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/department/department_screen.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/designation/designation_list.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/employee/employee_list_screen.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/holiday/holiday_list_screen.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/leave_request/leave/leave_list_screen.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/leave_request/leave_type/leave_type_list.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/payroll/payroll_list.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/reports/attandence_report.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/reports/leave_reports.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/reports/payroll_reports.dart';
|
||||
import 'package:mobile_pos/Screens/hrm/shift/shift_screen.dart';
|
||||
|
||||
import '../../constant.dart';
|
||||
import '../../service/check_user_role_permission_provider.dart';
|
||||
|
||||
class HrmScreen extends ConsumerStatefulWidget {
|
||||
const HrmScreen({super.key});
|
||||
|
||||
@override
|
||||
ConsumerState<HrmScreen> createState() => _HrmScreenState();
|
||||
}
|
||||
|
||||
class _HrmScreenState extends ConsumerState<HrmScreen> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final _lang = l.S.of(context);
|
||||
final permissionService = PermissionService(ref);
|
||||
return Scaffold(
|
||||
backgroundColor: kBackgroundColor,
|
||||
appBar: AppBar(
|
||||
title: Text(_lang.hrm),
|
||||
centerTitle: true,
|
||||
elevation: 0.0,
|
||||
),
|
||||
body: SingleChildScrollView(
|
||||
padding: const EdgeInsets.all(16.0),
|
||||
child: Column(
|
||||
children: [
|
||||
//---------------Department--------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/depertment.svg',
|
||||
title: _lang.department,
|
||||
destination: DepartmentScreen(),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
//-----------------Designation----------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/designation.svg',
|
||||
title: _lang.designation,
|
||||
destination: DesignationListScreen(),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
//---------------------Shift----------------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/shift.svg',
|
||||
title: _lang.shift,
|
||||
destination: const ShiftScreen(),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//-----------------Employee---------------------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/employee.svg',
|
||||
title: _lang.employee,
|
||||
destination: const EmployeeListScreen(),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//-----------------Leave request-----------------------------
|
||||
_buildExpansionTile(
|
||||
context,
|
||||
icon: 'assets/hrm/leave.svg',
|
||||
title: _lang.leaveRequest,
|
||||
children: [
|
||||
_buildSubMenuItem(
|
||||
context,
|
||||
title: _lang.leaveType,
|
||||
destination: const LeaveTypeList(),
|
||||
),
|
||||
_buildSubMenuItem(
|
||||
context,
|
||||
title: _lang.leave,
|
||||
destination: const LeaveListScreen(),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//------------------------Holiday----------------------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/holiday.svg',
|
||||
title: _lang.holiday,
|
||||
destination: const HolidayList(),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//------------------------Attendance-------------------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/attendence.svg',
|
||||
title: _lang.attendance,
|
||||
destination: const AttendanceScreen(),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//-------------------------payroll----------------------------------
|
||||
_buildListItem(
|
||||
context,
|
||||
icon: 'assets/hrm/payroll.svg',
|
||||
title: _lang.payroll,
|
||||
destination: const PayrollScreen(),
|
||||
),
|
||||
SizedBox(height: 10),
|
||||
//--------------------------Reports--------------------------------
|
||||
if (permissionService.hasPermission(Permit.attendanceReportsRead.value) ||
|
||||
permissionService.hasPermission(Permit.payrollReportsRead.value) ||
|
||||
permissionService.hasPermission(Permit.leaveReportsRead.value))
|
||||
_buildExpansionTile(
|
||||
context,
|
||||
icon: 'assets/hrm/reports.svg',
|
||||
title: _lang.reports,
|
||||
children: [
|
||||
if (permissionService.hasPermission(Permit.attendanceReportsRead.value))
|
||||
_buildSubMenuItem(
|
||||
context,
|
||||
title: _lang.attendance,
|
||||
destination: const AttendanceReports(),
|
||||
),
|
||||
if (permissionService.hasPermission(Permit.payrollReportsRead.value))
|
||||
_buildSubMenuItem(
|
||||
context,
|
||||
title: _lang.payroll,
|
||||
destination: const PayrollReports(),
|
||||
),
|
||||
if (permissionService.hasPermission(Permit.leaveReportsRead.value))
|
||||
_buildSubMenuItem(
|
||||
context,
|
||||
title: _lang.leave,
|
||||
destination: const LeaveReports(),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///-------------build menu item------------------------------
|
||||
Widget _buildListItem(
|
||||
BuildContext context, {
|
||||
required String icon,
|
||||
required String title,
|
||||
required Widget destination,
|
||||
}) {
|
||||
final _theme = Theme.of(context);
|
||||
return ListTile(
|
||||
tileColor: Colors.white,
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadiusGeometry.circular(6)),
|
||||
horizontalTitleGap: 15,
|
||||
contentPadding: EdgeInsetsDirectional.symmetric(horizontal: 8),
|
||||
onTap: () {
|
||||
// expansibleController.collapse();
|
||||
// expansibleController2.collapse();
|
||||
Navigator.push(context, MaterialPageRoute(builder: (context) => destination));
|
||||
},
|
||||
leading: SvgPicture.asset(
|
||||
icon,
|
||||
height: 40,
|
||||
width: 40,
|
||||
),
|
||||
title: Text(
|
||||
title,
|
||||
style: _theme.textTheme.bodyLarge,
|
||||
),
|
||||
trailing: Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
size: 18,
|
||||
color: kNeutral800,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///---------------------expansion tile item---------------------------------
|
||||
Widget _buildExpansionTile(
|
||||
BuildContext context, {
|
||||
required String icon,
|
||||
required String title,
|
||||
required List<Widget> children,
|
||||
}) {
|
||||
return Theme(
|
||||
data: Theme.of(context).copyWith(
|
||||
dividerColor: WidgetStateColor.transparent,
|
||||
),
|
||||
child: ExpansionTile(
|
||||
backgroundColor: Colors.white,
|
||||
collapsedBackgroundColor: Colors.white,
|
||||
collapsedShape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)),
|
||||
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)),
|
||||
iconColor: kNeutral800,
|
||||
tilePadding: const EdgeInsets.symmetric(horizontal: 8),
|
||||
childrenPadding: const EdgeInsets.symmetric(horizontal: 50),
|
||||
leading: SvgPicture.asset(
|
||||
icon,
|
||||
height: 40,
|
||||
width: 40,
|
||||
),
|
||||
title: Text(title, style: Theme.of(context).textTheme.bodyLarge),
|
||||
children: children,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
///-------------------sub menu item---------------------------------------
|
||||
Widget _buildSubMenuItem(
|
||||
BuildContext context, {
|
||||
required String title,
|
||||
required Widget destination,
|
||||
}) {
|
||||
return ListTile(
|
||||
onTap: () {
|
||||
// setState(() => selectedTitle = title);
|
||||
|
||||
Navigator.push(context, MaterialPageRoute(builder: (context) => destination));
|
||||
},
|
||||
visualDensity: const VisualDensity(vertical: -4),
|
||||
title: Text(
|
||||
title,
|
||||
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
|
||||
color: kTitleColor,
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user