Commit f6fbe101 authored by Mohit Kumar's avatar Mohit Kumar
Browse files

AttendanceList

RewardList
TourExpenses
Implementation
parent 6d1deaf2
This diff is collapsed.
This diff is collapsed.
import 'package:flutter/material.dart';
class OrganizationStructureScreen extends StatelessWidget {
final List<Department> departments = [
Department(
name: "Engineering",
teams: [
Team(name: "Mobile Team", members: ["Mohit", "Srinivas", ]),
Team(name: "Backend Team", members: ["Dheeraj", "Satya","Sneha"]),
],
),
Department(
name: "Sales & Marketing",
teams: [
Team(name: "Digital Marketing", members: ["Kiran", "Priya"]),
Team(name: "Field Sales", members: ["Raj", "Anjali"]),
],
),
Department(
name: "HR & Admin",
teams: [
Team(name: "Recruitment", members: ["Naresh"]),
Team(name: "Operations", members: ["Suresh", "Divya"]),
],
),
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Organization Structure")),
body: ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: departments.length,
itemBuilder: (context, deptIndex) {
final dept = departments[deptIndex];
return Card(
margin: const EdgeInsets.only(bottom: 16),
elevation: 2,
child: ExpansionTile(
title: Text(
"${dept.name} not ready",
style: const TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
children: dept.teams.map((team) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
team.name,
style: const TextStyle(fontSize: 16, fontWeight: FontWeight.w600),
),
const SizedBox(height: 4),
Wrap(
spacing: 8,
children: team.members.map((member) {
return Chip(
label: Text(member),
backgroundColor: Colors.blue.shade50,
);
}).toList(),
),
const SizedBox(height: 8),
],
),
);
}).toList(),
),
);
},
),
);
}
}
class Department {
final String name;
final List<Team> teams;
Department({required this.name, required this.teams});
}
class Team {
final String name;
final List<String> members;
Team({required this.name, required this.members});
}
This diff is collapsed.
...@@ -8,17 +8,20 @@ import '../../Utils/app_colors.dart'; ...@@ -8,17 +8,20 @@ import '../../Utils/app_colors.dart';
import '../finance/FileViewer.dart'; import '../finance/FileViewer.dart';
class TourExpensesDetailsScreen extends StatelessWidget { class TourExpensesDetailsScreen extends StatefulWidget {
final String tourBillId; final String tourBillId;
const TourExpensesDetailsScreen({Key? key, required this.tourBillId}) const TourExpensesDetailsScreen({Key? key, required this.tourBillId})
: super(key: key); : super(key: key);
@override
State<TourExpensesDetailsScreen> createState() => _TourExpensesDetailsScreenState();
}
class _TourExpensesDetailsScreenState extends State<TourExpensesDetailsScreen>{
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ChangeNotifierProvider( return ChangeNotifierProvider(
create: (_) => TourExpensesDetailsProvider() create: (_) => TourExpensesDetailsProvider()
..fetchTourExpensesDetails(context, tourBillId), ..fetchTourExpensesDetails(context, widget.tourBillId),
child: Scaffold( child: Scaffold(
appBar: AppBar( appBar: AppBar(
automaticallyImplyLeading: false, automaticallyImplyLeading: false,
...@@ -66,17 +69,22 @@ class TourExpensesDetailsScreen extends StatelessWidget { ...@@ -66,17 +69,22 @@ class TourExpensesDetailsScreen extends StatelessWidget {
if (response == null) { if (response == null) {
return const Center(child: Text("No data available")); return const Center(child: Text("No data available"));
} }
debugPrint("==================requestDetails: ${response.requestDetails?.approvalStatus}");
return SingleChildScrollView( return SingleChildScrollView(
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
/// Header Card at the very top /// Header Card at the very top
_expenseHeaderCard( _expenseHeaderCard(
title: response.requestDetails?.placeOfVisit ?? "Tour", title: response.requestDetails?.placeOfVisit ?? "Tour",
date: response.tourExpenses?.fromDate ?? "-", date: response.tourExpenses?.fromDate ?? "-",
status: response.requestDetails?.approvalStatus ?? "-", status: (response.requestDetails?.approvalStatus?.isNotEmpty ?? false)
? response.requestDetails!.approvalStatus!
: "No Status",
details: [ details: [
{"key": "TL Pending Approval Amount", "value": "-"}, {"key": "TL Pending Approval Amount", "value": "-"},
{"key": "Total Approved Amount", "value": response.tourExpenses?.appliedAmount ?? "-"}, {"key": "Total Approved Amount", "value": response.tourExpenses?.appliedAmount ?? "-"},
...@@ -167,17 +175,12 @@ class TourExpensesDetailsScreen extends StatelessWidget { ...@@ -167,17 +175,12 @@ class TourExpensesDetailsScreen extends StatelessWidget {
debugPrint("Open: ${t.imageDirFilePath}"); debugPrint("Open: ${t.imageDirFilePath}");
//Fileviewer(fileName: "", fileUrl: t.imageDirFilePath.toString()) //Fileviewer(fileName: "", fileUrl: t.imageDirFilePath.toString())
showDialog( Navigator.push(
context: context, context,
builder: (_) => Dialog( MaterialPageRoute(
shape: RoundedRectangleBorder( builder:
borderRadius: BorderRadius.circular(12), (context) => Image.network(t.imageDirFilePath.toString()),
), // Fileviewer(fileName: label, fileUrl: "assets/images/capa.svg"),
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.network(t.imageDirFilePath.toString())
),
), ),
); );
}, },
......
...@@ -129,20 +129,18 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> { ...@@ -129,20 +129,18 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
item.placeOfVisit ?? "-", item.placeOfVisit ?? "-",
maxLines: 1, maxLines: 1,
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,
style: const TextStyle( style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14, fontSize: 14,
fontFamily: "Plus Jakarta Sans", color: AppColors.semi_black,
fontWeight: FontWeight.w400,
color: Color(0xff2d2d2d),
), ),
), ),
Text( Text(
item.appliedDate ?? "-", item.appliedDate ?? "-",
style: const TextStyle( style: TextStyle(
fontSize: 12, fontFamily: "JakartaRegular",
fontFamily: "Plus Jakarta Sans", fontSize: 14,
fontWeight: FontWeight.w400, color: AppColors.grey_semi,
color: Color(0xff818181),
), ),
), ),
], ],
...@@ -153,9 +151,8 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> { ...@@ -153,9 +151,8 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
Text( Text(
"₹${item.appliedAmount ?? '0'}", "₹${item.appliedAmount ?? '0'}",
style: const TextStyle( style: const TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14, fontSize: 14,
fontFamily: "Plus Jakarta Sans",
fontWeight: FontWeight.w500,
color: Color(0xff1487c9), color: Color(0xff1487c9),
) )
), ),
...@@ -185,7 +182,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> { ...@@ -185,7 +182,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
name: 'AddTourExpBillScreen'), name: 'AddTourExpBillScreen'),
), ),
).then((_) { ).then((_) {
provider.fetchTourExpenses(context, "1");
}); });
// show add bill screen here // show add bill screen here
}, },
...@@ -280,7 +277,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> { ...@@ -280,7 +277,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
case 'Updated': case 'Updated':
return "U"; return "U";
default: default:
return "Requested"; return "R";
} }
} }
......
...@@ -62,4 +62,6 @@ export 'package:generp/Notifiers/hrmProvider/AttendanceDetailsProvider.dart'; ...@@ -62,4 +62,6 @@ export 'package:generp/Notifiers/hrmProvider/AttendanceDetailsProvider.dart';
export 'package:generp/Notifiers/hrmProvider/tourExpensesProvider.dart'; export 'package:generp/Notifiers/hrmProvider/tourExpensesProvider.dart';
export 'package:generp/Notifiers/hrmProvider/tourExpensesDetailsProvider.dart'; export 'package:generp/Notifiers/hrmProvider/tourExpensesDetailsProvider.dart';
export 'package:generp/Notifiers/hrmProvider/rewardListProvider.dart'; export 'package:generp/Notifiers/hrmProvider/rewardListProvider.dart';
export 'package:generp/Notifiers/hrmProvider/LeaveApplicationListProvider.dart';
export 'package:generp/Notifiers/hrmProvider/LeaveApplicationDetailsProvider.dart';
This diff is collapsed.
...@@ -180,6 +180,7 @@ const crmDashboardQuotationsUrl = "${baseUrl_test}crm_dashboard_quotations_list" ...@@ -180,6 +180,7 @@ const crmDashboardQuotationsUrl = "${baseUrl_test}crm_dashboard_quotations_list"
///HRM ///HRM
//Attendance //Attendance
const HrmAccessiblePagesUrl ="${baseUrl_test}hrm_accessible_pages";
const AttendanceRequestListUrl ="${baseUrl_test}attendance_request_list"; const AttendanceRequestListUrl ="${baseUrl_test}attendance_request_list";
const AttendanceRequestDetailsUrl ="${baseUrl_test}attendance_request_details"; const AttendanceRequestDetailsUrl ="${baseUrl_test}attendance_request_details";
const AddAttendanceRequestUrl ="${baseUrl_test}add_attendance_request"; const AddAttendanceRequestUrl ="${baseUrl_test}add_attendance_request";
...@@ -188,6 +189,12 @@ const RewardListUrl ="${baseUrl_test}hrm_emp_self_rewards"; ...@@ -188,6 +189,12 @@ const RewardListUrl ="${baseUrl_test}hrm_emp_self_rewards";
// Tour Expenses hrm_emp_self_rewards // Tour Expenses hrm_emp_self_rewards
const TourExpensesListUrl ="${baseUrl_test}tour_bill_list"; const TourExpensesListUrl ="${baseUrl_test}tour_bill_list";
const TourExpensesDetailsUrl ="${baseUrl_test}tour_bill_details"; const TourExpensesDetailsUrl ="${baseUrl_test}tour_bill_details";
const TourExpensesAddViewUrl ="${baseUrl_test}add_tour_bill_view";
const AddTourExpensesUrl ="${baseUrl_test}add_tour_bill";
//leave applications
const LeaveApplicationListUrl ="${baseUrl_test}leave_request_list";
const LeaveApplicationDetailsUrl ="${baseUrl_test}leave_request_details";
const LeaveRequestAdditionUrl ="${baseUrl_test}add_leave_request";
......
This diff is collapsed.
...@@ -8,6 +8,7 @@ import Foundation ...@@ -8,6 +8,7 @@ import Foundation
import app_settings import app_settings
import connectivity_plus import connectivity_plus
import device_info_plus import device_info_plus
import file_picker
import file_selector_macos import file_selector_macos
import firebase_core import firebase_core
import firebase_messaging import firebase_messaging
...@@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ...@@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AppSettingsPlugin.register(with: registry.registrar(forPlugin: "AppSettingsPlugin")) AppSettingsPlugin.register(with: registry.registrar(forPlugin: "AppSettingsPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
......
...@@ -465,6 +465,14 @@ packages: ...@@ -465,6 +465,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.0.1" version: "7.0.1"
file_picker:
dependency: "direct main"
description:
name: file_picker
sha256: ab13ae8ef5580a411c458d6207b6774a6c237d77ac37011b13994879f68a8810
url: "https://pub.dev"
source: hosted
version: "8.3.7"
file_selector_linux: file_selector_linux:
dependency: transitive dependency: transitive
description: description:
......
...@@ -89,6 +89,7 @@ dependencies: ...@@ -89,6 +89,7 @@ dependencies:
pinput: ^5.0.1 pinput: ^5.0.1
build_runner: ^2.4.0 build_runner: ^2.4.0
build_web_compilers: ^4.0.4 build_web_compilers: ^4.0.4
file_picker: ^8.0.0
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment