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';
import '../finance/FileViewer.dart';
class TourExpensesDetailsScreen extends StatelessWidget {
class TourExpensesDetailsScreen extends StatefulWidget {
final String tourBillId;
const TourExpensesDetailsScreen({Key? key, required this.tourBillId})
: super(key: key);
@override
State<TourExpensesDetailsScreen> createState() => _TourExpensesDetailsScreenState();
}
class _TourExpensesDetailsScreenState extends State<TourExpensesDetailsScreen>{
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (_) => TourExpensesDetailsProvider()
..fetchTourExpensesDetails(context, tourBillId),
..fetchTourExpensesDetails(context, widget.tourBillId),
child: Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
......@@ -66,17 +69,22 @@ class TourExpensesDetailsScreen extends StatelessWidget {
if (response == null) {
return const Center(child: Text("No data available"));
}
debugPrint("==================requestDetails: ${response.requestDetails?.approvalStatus}");
return SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// Header Card at the very top
_expenseHeaderCard(
title: response.requestDetails?.placeOfVisit ?? "Tour",
date: response.tourExpenses?.fromDate ?? "-",
status: response.requestDetails?.approvalStatus ?? "-",
status: (response.requestDetails?.approvalStatus?.isNotEmpty ?? false)
? response.requestDetails!.approvalStatus!
: "No Status",
details: [
{"key": "TL Pending Approval Amount", "value": "-"},
{"key": "Total Approved Amount", "value": response.tourExpenses?.appliedAmount ?? "-"},
......@@ -167,17 +175,12 @@ class TourExpensesDetailsScreen extends StatelessWidget {
debugPrint("Open: ${t.imageDirFilePath}");
//Fileviewer(fileName: "", fileUrl: t.imageDirFilePath.toString())
showDialog(
context: context,
builder: (_) => Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
child: Image.network(t.imageDirFilePath.toString())
),
Navigator.push(
context,
MaterialPageRoute(
builder:
(context) => Image.network(t.imageDirFilePath.toString()),
// Fileviewer(fileName: label, fileUrl: "assets/images/capa.svg"),
),
);
},
......
......@@ -129,20 +129,18 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
item.placeOfVisit ?? "-",
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: const TextStyle(
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
fontFamily: "Plus Jakarta Sans",
fontWeight: FontWeight.w400,
color: Color(0xff2d2d2d),
color: AppColors.semi_black,
),
),
Text(
item.appliedDate ?? "-",
style: const TextStyle(
fontSize: 12,
fontFamily: "Plus Jakarta Sans",
fontWeight: FontWeight.w400,
color: Color(0xff818181),
style: TextStyle(
fontFamily: "JakartaRegular",
fontSize: 14,
color: AppColors.grey_semi,
),
),
],
......@@ -153,9 +151,8 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
Text(
"₹${item.appliedAmount ?? '0'}",
style: const TextStyle(
fontFamily: "JakartaMedium",
fontSize: 14,
fontFamily: "Plus Jakarta Sans",
fontWeight: FontWeight.w500,
color: Color(0xff1487c9),
)
),
......@@ -185,7 +182,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
name: 'AddTourExpBillScreen'),
),
).then((_) {
provider.fetchTourExpenses(context, "1");
});
// show add bill screen here
},
......@@ -280,7 +277,7 @@ class _TourExpensesListScreenState extends State<TourExpensesListScreen> {
case 'Updated':
return "U";
default:
return "Requested";
return "R";
}
}
......
......@@ -62,4 +62,6 @@ export 'package:generp/Notifiers/hrmProvider/AttendanceDetailsProvider.dart';
export 'package:generp/Notifiers/hrmProvider/tourExpensesProvider.dart';
export 'package:generp/Notifiers/hrmProvider/tourExpensesDetailsProvider.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"
///HRM
//Attendance
const HrmAccessiblePagesUrl ="${baseUrl_test}hrm_accessible_pages";
const AttendanceRequestListUrl ="${baseUrl_test}attendance_request_list";
const AttendanceRequestDetailsUrl ="${baseUrl_test}attendance_request_details";
const AddAttendanceRequestUrl ="${baseUrl_test}add_attendance_request";
......@@ -188,6 +189,12 @@ const RewardListUrl ="${baseUrl_test}hrm_emp_self_rewards";
// Tour Expenses hrm_emp_self_rewards
const TourExpensesListUrl ="${baseUrl_test}tour_bill_list";
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
import app_settings
import connectivity_plus
import device_info_plus
import file_picker
import file_selector_macos
import firebase_core
import firebase_messaging
......@@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AppSettingsPlugin.register(with: registry.registrar(forPlugin: "AppSettingsPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FilePickerPlugin.register(with: registry.registrar(forPlugin: "FilePickerPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
......
......@@ -465,6 +465,14 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: transitive
description:
......
......@@ -89,6 +89,7 @@ dependencies:
pinput: ^5.0.1
build_runner: ^2.4.0
build_web_compilers: ^4.0.4
file_picker: ^8.0.0
dev_dependencies:
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