Hr upload added

This commit is contained in:
Surendiran 2025-09-06 11:30:37 +05:30
parent c5d5f3aadd
commit f5cd4d89ad
11 changed files with 1350 additions and 900 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 247 B

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -30,6 +30,7 @@ class _CustomAppBarState extends State<CustomAppBar> {
// final String? hrtoken = prefs.getString('_postToken');
// final String? token = prefs.getString('enrollToken');
prefs.clear();
print('LocalStorage Cleared');
Navigator.pushNamed(context, 'hrLogin');
}

View File

@ -1018,9 +1018,7 @@ class _excelVerifyState extends State<excelVerify> {
],
)
: ElevatedButton(
onPressed: () =>
_uploadFile(
'Policy Name'),
onPressed: () => _uploadFile('Policy Name'),
child: Text(
'Select File',
style: TextStyle(

View File

@ -80,7 +80,7 @@ class _hrDashboardState extends State<hrDashboard>
void initState() {
super.initState();
apiService = ApiService(context); // Initialize ApiService here
_loadToken();
checkToken();
empCodeFromHrPolcy = widget.empCodeFromHrPolicy;
// _tabController = TabController(length: 4, vsync: this);
@ -102,6 +102,22 @@ class _hrDashboardState extends State<hrDashboard>
_tabController.dispose();
}
checkToken() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
enrollToken = prefs.getString('enrollToken');
_postToken = prefs.getString('_postToken');
print('token check in');
if((enrollToken != null && enrollToken!.isNotEmpty) || (_postToken != null && _postToken!.isNotEmpty)){
print('token check done');
_loadToken();
} else {
print('token check reject');
ToastHelper.showErrorToast(context, 'Session Out');
Navigator.pushReplacementNamed(context, 'hrLogin');
}
}
Future<void> _loadToken() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
_postToken = prefs.getString('_postToken');

View File

@ -1,5 +1,6 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:http/http.dart' as http;
@ -40,10 +41,23 @@ class _MyPhoneState extends State<MyHrLogin> {
@override
void initState() {
print('vndbbcbdskbvkjs1');
countryController.text = "+91";
super.initState();
clearLocalStorageWhenStarts('initState');
}
clearLocalStorageWhenStarts(fromData) async {
print(fromData);
if(kIsWeb) {
print('vndbbcbdskbvkj3');
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.clear();
print('Local Storage Clear');
}
}
void toggleField() {
setState(() {
isEmailFieldVisible = !isEmailFieldVisible;
@ -51,6 +65,9 @@ class _MyPhoneState extends State<MyHrLogin> {
}
Future<void> verifyMobileAndEmailNumber() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.clear();
print('verifyMobileAndEmailNumber :- Local Storage Clear');
try {
if (_formKey.currentState!.validate()) {
setState(() {

View File

@ -4,6 +4,7 @@ import 'package:google_fonts/google_fonts.dart';
import 'package:nhancepolicy/customAppBar/customAppBar.dart';
import 'package:nhancepolicy/excel_verification.dart';
import 'package:nhancepolicy/models/environment.dart';
import 'package:nhancepolicy/postFileUpload.dart';
import 'package:nhancepolicy/service/api_service.dart';
import 'package:nhancepolicy/service/hrDashboardTabs/claims.dart';
import 'package:shared_preferences/shared_preferences.dart';
@ -463,13 +464,13 @@ class _HrPolicyDetailsState extends State<hrPolicyDetails>
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
if (widget.TokenType != "post")
// if (widget.TokenType != "post")
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => excelVerify(
builder: (context) => widget.TokenType != "post" ? excelVerify(
ClientId:
widget.ClientId, // <-- from map
policyTypeId: widget.policyTypeId,
@ -494,7 +495,32 @@ class _HrPolicyDetailsState extends State<hrPolicyDetails>
// PolicyNo: widget.cardPolicyNo,
// ClientBranchId: widget.HrId,
// PolicyType: widget.cardType,
),
) : postFileUpload(
ClientId:
widget.ClientId, // <-- from map
policyTypeId: widget.policyTypeId,
ClientPoliyId: widget.ClientPoliyId,
clientBranchId:
widget.clientBranchId,
Token: widget.Token,
TokenType: widget.TokenType,
cardType: widget.cardType,
cardPolicyNo: widget.cardPolicyNo,
cardInsurer_name:
widget.cardInsurer_name,
cardPolicy_name:
widget.cardPolicy_name,
cardPolicy_ExpDate:
widget.cardPolicy_ExpDate,
// Token: widget.Token,
// ClientId: widget.ClientId,
// ClientPolicyId : widget.ClientPoliyId,
// PolicyName: widget.cardPolicy_name,
// PolicyNo: widget.cardPolicyNo,
// ClientBranchId: widget.HrId,
// PolicyType: widget.cardType,
)
),
);
// exportToCsv(filteredData);
@ -910,14 +936,14 @@ class _HrPolicyDetailsState extends State<hrPolicyDetails>
_launchURL(item['ecard_download_link']);
},
child: Container(
height: 35,
width: 35,
height: 40,
width: 40,
decoration: BoxDecoration(
color: Color(0xFFE6F5F6),
borderRadius: BorderRadius.circular(8),
),
child: Padding(
padding: EdgeInsets.all(6),
padding: EdgeInsets.all(4),
child: Image.asset(
'assets/credit_card.png',
fit: BoxFit.contain,
@ -946,14 +972,14 @@ class _HrPolicyDetailsState extends State<hrPolicyDetails>
);
},
child: Container(
height: 35,
width: 35,
height: 40,
width: 40,
decoration: BoxDecoration(
color: Color(0xFFE6F5F6),
borderRadius: BorderRadius.circular(8),
),
child: Padding(
padding: EdgeInsets.all(6),
padding: EdgeInsets.all(4),
child: Image.asset(
'assets/claim.png',
fit: BoxFit.contain,

View File

@ -1,887 +0,0 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:nhancepolicy/customAppBar/enrollmentAppBar.dart';
import 'package:nhancepolicy/excel_verification.dart';
import 'package:nhancepolicy/models/environment.dart';
import 'package:nhancepolicy/service/api_service.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:jwt_decode/jwt_decode.dart';
import 'dart:convert';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:nhancepolicy/customAppBar/toastHelper.dart';
import 'package:universal_html/html.dart' as html;
import 'dart:typed_data';
import 'dart:io';
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:intl/intl.dart';
import 'package:excel/excel.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;
import 'customAppBar/customFooter.dart';
class hrPolicyDetails extends StatefulWidget {
const hrPolicyDetails({Key? key}) : super(key: key);
@override
State<hrPolicyDetails> createState() => _HrPolicyDetailsState();
}
class _HrPolicyDetailsState extends State<hrPolicyDetails>
with TickerProviderStateMixin {
Uint8List? fileBytes;
late String _token;
List<Map<String, dynamic>> getEmpDependenceByClintId = [];
bool isLoading = false;
bool _isLoading = false;
// dynamic clintID;
late TabController _tabController;
// List<dynamic> dataPolicy = [];
List<dynamic> reversedDataPolicy = [];
List<Map<String, dynamic>> originalData = []; // Original data source
List<Map<String, dynamic>> filteredData = []; // Filtered data source
dynamic argumentsData;
dynamic policyType;
dynamic policyName;
dynamic clientPolicyId;
dynamic clientId;
dynamic empRefId;
int inceptionType = 0;
TextEditingController searchController = TextEditingController();
late ApiService apiService;
@override
void initState() {
super.initState();
apiService = ApiService(context); // Initialize ApiService here
_tabController = TabController(length: 4, vsync: this);
_loadToken();
}
@override
void dispose() {
_tabController.dispose();
super.dispose();
}
Future<void> _loadToken() async {
print('1');
final SharedPreferences prefs = await SharedPreferences.getInstance();
final token = prefs.getString('hrtoken');
if (token != null && token.isNotEmpty) {
print('2');
setState(() {
_token = token;
});
Map<String, dynamic>? decodedToken = Jwt.parseJwt(token);
empRefId = prefs.getString('empRefId');
// clintID = decodedToken['client_id'];
getPolicyDetails();
} else {
// Token is empty or null, handle accordingly (e.g., navigate to login screen)
// For now, let's navigate to the login screen
ToastHelper.showErrorToast(context, 'Session Out');
Navigator.pushReplacementNamed(context, 'hrLogin');
}
}
Future<void> _saveArgumentsDataToLocalStorage(argumentsData) async {
print('6');
print('argumentsData');
final prefs = await SharedPreferences.getInstance();
await prefs.setString('hrSelectArgumentsData', jsonEncode(argumentsData));
}
Future<void> getPolicyDetails() async {
print('3');
try {
print('4');
setState(() {
if (argumentsData != null && argumentsData is Map<String, dynamic>) {
print('5');
_saveArgumentsDataToLocalStorage(argumentsData);
print('7');
if (argumentsData['type'] == 'GPA') {
print('8');
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'GMC') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'GMC - Parents') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'GMC - Topup') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'GMC - Topup(Parents)') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'EDLI') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
} else if (argumentsData['type'] == 'GTLI') {
_isLoading = true;
clientPolicyId = argumentsData['client_policy_id'];
clientId = argumentsData['client_id'];
policyType = argumentsData['type'];
policyName = argumentsData['policy_name'];
String int_inception_type = argumentsData['inception_type'];
inceptionType = int.parse(int_inception_type);
getEmployeeAndDependence(clientId, clientPolicyId);
}
}
});
} catch (e) {
_isLoading = false;
print('Exception occurred: $e');
} finally {
setState(() {
_isLoading = false;
});
}
}
Future<void> getEmployeeAndDependence(clintID, getPolicyNo) async {
print('9');
setState(() {
isLoading = true;
});
try {
print('10');
final response = await apiService.getEmployeeAndDependenceToApi(
clintID!, getPolicyNo!, empRefId!);
if (response['status'] == 'success') {
setState(() {
isLoading = false;
});
setState(() {
getEmpDependenceByClintId =
List<Map<String, dynamic>>.from(response['data']);
originalData = getEmpDependenceByClintId;
filteredData = List.from(originalData);
print('filteredData');
print(filteredData);
});
} else {
setState(() {
isLoading = false;
});
// ToastHelper.showWarningToast(
// context, 'Request failed with status: ${response.statusCode}');
print('Request failed with status: ${response['code']}');
}
} catch (e) {
setState(() {
isLoading = false;
});
print('Exception occurred: $e');
} finally {
setState(() {
_isLoading = false;
});
}
}
void _uploadFile(type) async {
var argumentType;
if (type == 'GPA') {
// argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails2;
argumentType = 'GPA';
} else if (type == 'GMC') {
// argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails1;
argumentType = 'GMC';
}
// else if (importPolicyName == 'SI-TopUp') {
// // argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails0;
// argumentDetails = 'SI-TopUp';
// } else if (importPolicyName == 'Dependent-AddOn') {
// // argumentDetails = importPolicyName + ' - ' + getPolicyNameDetails0;
// argumentDetails = 'Dependent-AddOn';
// }
Navigator.pushNamed(context, 'excelVerify', arguments: argumentsData);
// return;
// if (kIsWeb) {
// final input = html.FileUploadInputElement();
// input.accept = '.xlsx';
// input.click();
// input.onChange.listen((event) async {
// final file = input.files!.first;
// final reader = html.FileReader();
// reader.readAsArrayBuffer(file);
// reader.onLoadEnd.listen((event) async {
// final Uint8List? fileBytes = reader.result as Uint8List?;
// if (fileBytes != null) {
// // Call function to process Excel data
// }
// });
// });
// }
}
// Implement a method to handle the search functionality
void search(String query) {
print(query);
// Check if the query is empty
if (query.isEmpty) {
// If search query is empty, show all data
setState(() {
filteredData = List.from(originalData);
});
} else {
// Filter the original data based on the search query
setState(() {
filteredData = originalData.where((row) {
// Implement your filter logic here
// For example, check if any field in the row contains the query
// Adjust this logic based on your data structure
return row['emp_code']
.toString()
.toLowerCase()
.contains(query.toLowerCase()) ||
row['name']
.toString()
.toLowerCase()
.contains(query.toLowerCase()) ||
row['relationship']
.toString()
.toLowerCase()
.contains(query.toLowerCase()) ||
row['dob']
.toString()
.toLowerCase()
.contains(query.toLowerCase()) ||
row['gender']
.toString()
.toLowerCase()
.contains(query.toLowerCase()) ||
row['mobile']
.toString()
.toLowerCase()
.contains(query.toLowerCase());
}).toList();
});
}
print(filteredData.length);
}
Future<void> downloadExcel() async {
// API endpoint to download the Excel file
// Send GET request to the API
var url = Uri.parse(Environment.apiUrl +
'exportDataByClientPolicyId?client_id=$clientId&client_policy_id=$clientPolicyId&client_branch_id=$empRefId');
var response = await http.get(
url,
headers: {
'Authorization': 'Bearer $_token',
},
);
// Check if the request was successful (status code 200)
// Check if the request was successful (status code 200)
// Check if the request was successful (status code 200)
if (response.statusCode == 200) {
// Create a blob from the response body
final blob = html.Blob([response.bodyBytes]);
// Generate a download URL for the blob
final url = html.Url.createObjectUrlFromBlob(blob);
// Create a link element to trigger the download
final anchor = html.AnchorElement(href: url)
..setAttribute('download', '$policyName - ($policyType).xlsx')
..click();
// Revoke the download URL to free up resources
html.Url.revokeObjectUrl(url);
} else {
// Handle error
print('Failed to download Excel file: ${response.statusCode}');
}
}
@override
Widget build(BuildContext context) {
dynamic arguments = ModalRoute.of(context)!.settings.arguments;
print('arguments');
print(arguments);
if (arguments != null && arguments is Map<String, dynamic>) {
argumentsData = arguments;
print('argumentsData $argumentsData');
}
if (filteredData == []) {
return Scaffold(
appBar: CustomAppBar(),
body: Stack(children: [
SingleChildScrollView(
child: Container(
color: Color(0xFFEFF3F6),
child: Column(
children: [
Center(
child: Text('No Data Available'),
)
],
),
),
),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Center(
child: // Your GIF loader widget
Image.asset(
height: 60,
width: 60,
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity, // Make the footer full width
child: CustomFooter(),
),
),
]));
} else {
return Scaffold(
appBar: CustomAppBar(),
body: Stack(children: [
Container(
padding: const EdgeInsets.only(
top: 30, bottom: 70, left: 30, right: 30),
color: Color(0xFFEFF3F6),
height: MediaQuery.of(context).size.height,
child: Card(
elevation: 0,
color: Colors.white,
child: SingleChildScrollView(
child: Column(
children: [
Center(
child: Padding(
padding: const EdgeInsets.all(20),
child: _isLoading
? Center(child: CircularProgressIndicator())
: originalData.isNotEmpty
? SingleChildScrollView(
child: Column(
children: [
Container(
padding: EdgeInsets.all(
10), // Set your desired padding
color: Color(
0xFFE26728), // Set your desired background color
child: Row(
children: [
Expanded(
flex: 6,
child: Container(
alignment: Alignment
.centerLeft, // Align text to the center
child: Text(
'$policyName - ($policyType)',
textAlign: TextAlign
.center, // Align text to the center
style:
GoogleFonts.poppins(
fontSize: 16,
fontWeight:
FontWeight.w500,
color: Colors.white,
),
),
),
),
Expanded(
flex: 6,
child: Container(
alignment: Alignment
.centerRight, // Align text to the center
child: MouseRegion(
cursor: SystemMouseCursors
.click,
child: GestureDetector(
onTap: () async {
final prefs =
await SharedPreferences
.getInstance();
await prefs.remove(
'hrSelectArgumentsData');
Navigator.pushNamed(
context,
'hrDashboard');
},
child: Icon(
Icons
.close, // Replace with your desired icon
color: Colors
.white, // Replace with your desired icon color
),
),
),
),
),
],
),
),
SizedBox(height: 20),
Row(
children: [
Expanded(
flex: (policyType == 'GPA' ||
policyType == 'GMC')
? 8
: 10,
child: Container(
alignment:
Alignment.centerLeft,
child: Container(
width:
350, // Set your desired width here
height:
40, // Set your desired height here
decoration: BoxDecoration(
boxShadow: [
BoxShadow(
color: Color.fromRGBO(
255,
255,
255,
0.5), // Shadow color with opacity
offset: Offset(5,
5), // Shadow position (horizontal, vertical)
blurRadius:
10, // Blur radius
spreadRadius:
0, // Spread radius
),
],
borderRadius:
BorderRadius
.circular(5),
),
child: TextField(
textAlignVertical:
TextAlignVertical
.center, // Center the text vertically
decoration:
InputDecoration(
hintText: 'Search',
suffixIcon: Icon(
Icons.search),
contentPadding:
EdgeInsets.all(
10), // Adjust the horizontal padding
border:
OutlineInputBorder(
borderSide: BorderSide(
color: Color(
0xFFf5f5f7)), // Set border color to gray
),
),
controller:
searchController,
onChanged:
search, // Call the search method on text change
),
)),
),
Expanded(
flex: 2,
child: Container(
alignment:
Alignment.centerRight,
child: Row(
mainAxisAlignment:
MainAxisAlignment
.center,
children: [
Expanded(
child: ElevatedButton(
onPressed: () =>
{downloadExcel()},
child: Text(
'Export',
style: TextStyle(
color: Colors
.white),
),
style: ElevatedButton
.styleFrom(
backgroundColor:
Color(
0xFFE26728),
shape:
RoundedRectangleBorder(
borderRadius:
BorderRadius
.circular(
5),
),
),
),
),
],
),
),
),
SizedBox(
width: (policyType == 'GPA' ||
policyType == 'GMC')
? 5
: 0),
if ((policyType == 'GPA' ||
policyType == 'GMC' ||
policyType == 'EDLI' ||
policyType == 'GTLI') &&
inceptionType == 2)
Expanded(
flex: 2,
child: Container(
alignment:
Alignment.centerRight,
child: Row(
mainAxisAlignment:
MainAxisAlignment
.center,
children: [
Expanded(
child: ElevatedButton(
onPressed: () =>
_uploadFile(
policyType),
child: Text(
'Import Data',
style: TextStyle(
color: Colors
.white),
),
style:
ElevatedButton
.styleFrom(
backgroundColor:
Color(
0xFFE26728),
shape:
RoundedRectangleBorder(
borderRadius:
BorderRadius
.circular(
5),
),
),
),
),
],
),
),
),
],
),
SizedBox(height: 20),
Row(
children: [
Expanded(
child: SingleChildScrollView(
child: _buildDataTableGPA(
context),
),
)
],
),
],
))
: Container(
height:
MediaQuery.of(context).size.height,
child: Column(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Container(
padding: EdgeInsets.all(
10), // Set your desired padding
color: Color(
0xFFE26728), // Set your desired background color
child: Row(
children: [
Expanded(
flex: 6,
child: Container(
alignment: Alignment
.centerLeft, // Align text to the center
child: Text(
(policyName != null &&
policyType !=
null)
? '$policyName - ($policyType)'
: '',
textAlign: TextAlign
.center, // Align text to the center
style:
GoogleFonts.poppins(
fontSize: 16,
fontWeight:
FontWeight.w500,
color: Colors.white,
),
),
),
),
Expanded(
flex: 6,
child: Container(
alignment: Alignment
.centerRight, // Align text to the center
child: MouseRegion(
cursor:
SystemMouseCursors
.click,
child: GestureDetector(
onTap: () {
Navigator.pushNamed(
context,
'hrDashboard');
},
child: Icon(
Icons
.close, // Replace with your desired icon
color: Colors
.white, // Replace with your desired icon color
),
),
),
),
),
],
),
),
SizedBox(height: 200),
if (inceptionType == 2)
Center(
child: ElevatedButton(
onPressed: () =>
_uploadFile(policyType),
child: Text(
'Import Data',
style: TextStyle(
color: Colors.white),
),
style:
ElevatedButton.styleFrom(
backgroundColor:
Color(0xFFE26728),
shape:
RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(
5),
),
),
),
)
else
Center(
child: Text(
'No Data Available',
style: GoogleFonts.poppins(
fontSize: 16,
letterSpacing: 0,
color: Colors.black,
fontWeight: FontWeight.w300,
),
),
)
],
),
),
),
),
],
),
)),
),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Center(
child: // Your GIF loader widget
Image.asset(
height: 60,
width: 60,
'assets/nhance-loader.gif'), // Adjust path to your GIF loader
),
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity, // Make the footer full width
child: CustomFooter(),
),
),
]));
}
}
Widget _buildDataTableGPA(context) {
if (filteredData.isEmpty) {
SizedBox(height: 25);
return Text('No available data');
} else {
return Card(
elevation: 0,
color: Colors.white, // Set elevation to 0 for no shadow
child: PaginatedDataTable(
rowsPerPage: filteredData.length, // Adjust rows per page as needed
columns: [
DataColumn(label: Text('Employee ID')),
DataColumn(label: Text('TPA ID')),
DataColumn(label: Text('Name')),
DataColumn(label: Text('Relationship')),
DataColumn(label: Text('Date of Birth')),
DataColumn(label: Text('Gender')),
DataColumn(label: Text('Mobile No')),
// DataColumn(label: Text('Date of Joining')),
DataColumn(label: Text('Date Coverage')),
DataColumn(label: Text('Email')),
DataColumn(label: Text('SI')),
DataColumn(label: Text('Grade')),
DataColumn(label: Text('Basic Pay')),
],
source: _DependenceDataSource0(filteredData, context),
),
);
}
}
}
class _DependenceDataSource0 extends DataTableSource {
final List<Map<String, dynamic>> _data;
final BuildContext context;
_DependenceDataSource0(this._data, this.context);
@override
DataRow getRow(int index) {
final row = _data[index];
Color rowColor = Colors.transparent;
TextStyle textStyle = TextStyle(color: Colors.black);
bool isClickable = false;
if (row['relationship'] == 'Self') {
rowColor = Color(0xFFFFF1DD); // Setting background color for 'Self' rows
textStyle = TextStyle(color: Colors.black);
isClickable = true; // Making 'Self' rows clickable
}
// Format date of birth to "July 10, 1996"
String dob = row['dob'] != null ? formatDateString(row['dob']) : 'N/A';
// String doj = row['doj'] != null ? formatDateString(row['doj']) : 'N/A';
String dateCoverage = row['date_coverage'] != null
? formatDateString(row['date_coverage'])
: 'N/A';
return DataRow(
color: MaterialStateColor.resolveWith(
(states) => rowColor), // Setting row background color
cells: [
DataCell(
Text(row['emp_code'].toString(), style: textStyle),
onTap: isClickable
? () => _navigateToAnotherPage(row)
: null, // Navigation only for 'Self' rows
),
DataCell(Text(row['tpa_id'].toString(), style: textStyle)),
DataCell(Text(row['name'].toString(), style: textStyle)),
DataCell(Text(row['relationship'].toString(), style: textStyle)),
DataCell(Text(dob, style: textStyle)),
DataCell(Text(row['gender'] ?? 'N/A', style: textStyle)),
DataCell(Text(row['mobile'] ?? 'N/A', style: textStyle)),
// DataCell(Text(doj, style: textStyle)),
DataCell(Text(dateCoverage, style: textStyle)),
DataCell(Text(row['email_corporate'] ?? 'N/A', style: textStyle)),
DataCell(Text(row['basic_cover_si'] ?? 'N/A', style: textStyle)),
DataCell(Text(row['grade'] ?? 'N/A', style: textStyle)),
DataCell(Text(row['basic_pay'] ?? 'N/A', style: textStyle)),
],
);
}
@override
bool get isRowCountApproximate => false;
@override
int get rowCount => _data.length;
@override
int get selectedRowCount => 0;
void _navigateToAnotherPage(row) async {
print(row['mobile']);
final SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setBool('showBackToHR', true);
prefs.setString('employee_id', row['employee_id']);
// Navigation logic here
Navigator.pushNamed(context, 'empDetails',
arguments: {'mobile': row['mobile']});
}
String formatDateString(String dateString) {
// Parse the date string to DateTime object
DateTime dateTime = DateTime.parse(dateString);
// Format the DateTime object to "dd-mm-yyyy"
String formattedDate = DateFormat('dd-MM-yyyy').format(dateTime);
return formattedDate;
}
}
// Sample Data class representing each element in the array
class Data {
final dynamic value;
final int row;
final int column;
final String sheet;
Data(this.value, this.row, this.column, this.sheet);
}

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:nhancepolicy/addons.dart';
@ -8,6 +9,7 @@ import 'package:nhancepolicy/hrHome.dart';
import 'package:nhancepolicy/hrVerify.dart';
import 'package:nhancepolicy/models/environment.dart';
import 'package:nhancepolicy/phone.dart';
import 'package:nhancepolicy/postFileUpload.dart';
import 'package:nhancepolicy/verify.dart';
import 'package:nhancepolicy/home.dart';
import 'package:nhancepolicy/hrDashboard.dart';
@ -19,8 +21,13 @@ import 'package:firebase_core/firebase_core.dart';
import 'cdTransactionDetails.dart';
import 'email_verify.dart';
import 'dart:html' as html;
Future<void> main() async {
// html.window.onBeforeUnload.listen((event) {
// print('Local Storage cleared by window');
// html.window.localStorage.clear();
// });
// await dotenv.load(fileName: Environment.fileName);
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
@ -80,6 +87,19 @@ Future<void> main() async {
cardPolicy_name: '',
cardPolicy_ExpDate: '',
),
'postFileUpload': (context) => const postFileUpload(
ClientId: '',
policyTypeId: '',
ClientPoliyId: '',
clientBranchId: '',
Token: '',
TokenType: '',
cardType: '',
cardPolicyNo: '',
cardInsurer_name: '',
cardPolicy_name: '',
cardPolicy_ExpDate: '',
),
'empDetails': (context) => empDetails(),
'addOnsDetails': (context) => addOnsDetails(),
'empReviewDetails': (context) => empReviewDetails(),

1217
lib/postFileUpload.dart Normal file

File diff suppressed because it is too large Load Diff

View File

@ -650,6 +650,48 @@ class ApiService {
return response;
}
Future<Map<String, dynamic>> getFileUploadMastersToApi(String token) async {
print(_hrtoken);
if (token == null) {
await _initializeToken();
}
final url = Uri.parse(
'${Environment.apiUrlPost}hrFileUploadMasters');
final headers = {
'Authorization': 'Bearer $token' ?? '',
};
final response = await _makeGetRequest(url, headers);
return response;
}
Future<Map<String, dynamic>> getFileListToApi(empPrimaryId,cardPolicyNo,String token) async {
print(_hrtoken);
if (token == null) {
await _initializeToken();
}
final url = Uri.parse(
'${Environment.apiUrlPost}hrFileList?created_by=$empPrimaryId&policy_no=$cardPolicyNo');
final headers = {
'Authorization': 'Bearer $token' ?? '',
};
final response = await _makeGetRequest(url, headers);
return response;
}
// Future<Map<String, dynamic>> getHrFileDownloadToApi(id,String token) async {
// print(_hrtoken);
// if (token == null) {
// await _initializeToken();
// }
// final url = Uri.parse(
// '${Environment.apiUrl}hrFileDownload?id=$id');
// final headers = {
// 'Authorization': 'Bearer $token' ?? '',
// };
// final response = await _makeGetRequest(url, headers);
// return response;
// }
Future<Map<String, dynamic>> getEmployeeAndDependenceToApiPre(
String clintID, String getPolicyNo, String empRefId, String token) async {
print(_hrtoken);