claims history page

This commit is contained in:
Surendiran 2025-07-07 15:31:33 +05:30
parent 4e85d3d73f
commit 0a66595130
2 changed files with 482 additions and 0 deletions

469
lib/claimshistory.dart Normal file
View File

@ -0,0 +1,469 @@
import 'package:flutter/material.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:nhancepolicy/service/api_service.dart';
class ClaimHistoryPopup extends StatefulWidget {
final String ticket_id;
final String empName;
final String empCode;
final String policyType;
final String clientPolicyNo;
final String claimAmount;
final String claimNo;
final String postToken;
const ClaimHistoryPopup({
Key? key,
required this.ticket_id,
required this.empName,
required this.empCode,
required this.policyType,
required this.clientPolicyNo,
required this.claimAmount,
required this.claimNo,
required this.postToken,
}) : super(key: key);
@override
State<ClaimHistoryPopup> createState() => _ClaimHistoryPopupState();
}
class _ClaimHistoryPopupState extends State<ClaimHistoryPopup> {
late ApiService apiService;
List<Map<String, dynamic>> getClaimsHistoryList = [];
int _index = 4;
@override
void initState() {
super.initState();
apiService = ApiService(context);
print(widget.postToken);
print(widget.claimAmount);
print(widget.claimNo);
print(widget.clientPolicyNo);
print(widget.empCode);
print(widget.policyType);
print(widget.ticket_id);
// getClaimsHistoryDetails();
}
@override
void dispose() {
super.dispose();
}
Future<void> getClaimsHistoryDetails() async {
setState(() {
// isLoading = true;
});
try {
print('10');
final ticketID = widget.ticket_id;
if(ticketID != '' || ticketID != null){
return;
}
final response = await apiService.getClaimsHistoryToApi(
widget.ticket_id, widget.postToken);
if (response['status'] == 'success') {
setState(() {
// isLoading = false;
});
setState(() {
getClaimsHistoryList = List<Map<String, dynamic>>.from(response['data']);
// originalData = getCDPolicies;
// 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;
});
}
}
@override
Widget build(BuildContext context) {
if (getClaimsHistoryList.isEmpty) {
return SizedBox(
height: 50,
child: Center(child: Text('No available Claims')),
);
}
return Container(
constraints: BoxConstraints(maxWidth: 800, maxHeight: 800),
padding: EdgeInsets.all(20),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
Expanded(
child: Align(
alignment: Alignment.centerLeft,
child: Text(
'Claim History',
style: GoogleFonts.poppins(
fontSize: 20,
fontWeight: FontWeight.w500,
color: Color(0xFF101010),
),
),
),
),
MouseRegion(
cursor: SystemMouseCursors.click, // Show pointer cursor
child: GestureDetector(
onTap: () => Navigator.of(context).pop(),
child: Container(
height: 30,
width: 30,
decoration: BoxDecoration(
color: Colors.white,
border: Border.all(color: Color(0xFFBCBCBC)),
borderRadius: BorderRadius.circular(6),
),
child: Icon(
Icons.close,
size: 25,
color: Color(0xFFBCBCBC),
),
),
),
)
],
),
SizedBox(height: 10),
// Container(
// decoration: BoxDecoration(
// color: Color(0xFFFFFFFF), // White background
// borderRadius: BorderRadius.circular(12),
// boxShadow: [
// BoxShadow(
// color: Color(0xFFEBEBEB), // Shadow color
// blurRadius: 14, // How soft the shadow is
// spreadRadius: 2, // How much it spreads
// offset: Offset(0, 1), // X and Y offset
// ),
// ],
// ),
// padding: const EdgeInsets.all(16),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Row(
// children: [
// Expanded(
// child: _buildKeyValue(
// 'Name', '${widget.empName ?? ''} (${widget.empCode ?? ''})'),
// ),
// SizedBox(width: 16),
// Expanded(
// child: _buildKeyValue('Policy Name',
// '${widget.policyType ?? ''} - ${widget.clientPolicyNo ?? ''}')),
// ],
// ),
// SizedBox(height: 16),
// Row(
// children: [
// Expanded(
// child: _buildKeyValue(
// 'Claim Amount', '${widget.claimAmount ?? ''}'),
// ),
// SizedBox(width: 16),
// Expanded(
// child: _buildKeyValue('Claim Number', widget.claimNo ?? ''),
// ),
// ],
// ),
// ],
// ),
// ),
// SizedBox(height: 10),
// // Container(
// // padding: const EdgeInsets.all(16),
// // child: Stepper(
// // currentStep: _index,
// // onStepCancel: () {
// // if (_index > 0) {
// // setState(() {
// // _index -= 1;
// // });
// // }
// // },
// // onStepContinue: () {
// // if (_index < 4) {
// // setState(() {
// // _index += 1;
// // });
// // }
// // },
// // onStepTapped: (int index) {
// // setState(() {
// // _index = index;
// // });
// // },
// // steps: <Step>[
// // Step(
// // title: Text('Step 1: PAYMENT INITIATED'),
// // content: Text('Pay Initiate Date: 05-05-2025'),
// // isActive: true,
// // state: StepState.complete,
// // ),
// // Step(
// // title: Text('Step 2: INFORMATION REQUIRED'),
// // content: Text('Raised Date: 05-05-2025'),
// // isActive: true,
// // state: StepState.complete,
// // ),
// // Step(
// // title: Text('Step 3: CLAIM NO. UPDATION'),
// // content: Column(
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // Text('Claim Number: 4315440'),
// // Text('Registration Date: 05-05-2025'),
// // ],
// // ),
// // isActive: true,
// // state: StepState.complete,
// // ),
// // Step(
// // title: Text('Step 4: QUERY DOCUMENT REQUIRED'),
// // content: Text('Query Received Date: 05-05-2025'),
// // isActive: true,
// // state: StepState.complete,
// // ),
// // Step(
// // title: Text('Step 5: APPROVED'),
// // content: Column(
// // crossAxisAlignment: CrossAxisAlignment.start,
// // children: [
// // Text('Approved Amount: 4315440'),
// // Text('Approved Date: 05-05-2025'),
// // Text('Approved Letter: Lorem ipsum...'),
// // Text('Description: Lorem ipsum...'),
// // ],
// // ),
// // isActive: true,
// // state: StepState.complete,
// // ),
// // ],
// // ),
// // )
// Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: List.generate(5, (index) {
// return _buildStep(
// stepNumber: index + 1,
// title: _getStepTitle(index),
// content: _getStepContent(index),
// isLast: index == 4,
// );
// }),
// )
],
),
),
);
}
Widget _buildStep({
required int stepNumber,
required String title,
required Widget content,
bool isLast = false,
}) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Left Column with circle + line
Column(
children: [
// Add top spacing before circle
SizedBox(height: stepNumber == 1 ? 0 : 4),
// Step number circle
Container(
height: 28,
width: 28,
decoration: BoxDecoration(
color: Color(0xFF00A5A8),
shape: BoxShape.circle,
),
alignment: Alignment.center,
child: Text(
'$stepNumber',
style: TextStyle(
color: Colors.white,
fontSize: 13,
fontWeight: FontWeight.w600,
),
),
),
// Dotted line below circle (except for last step)
if (!isLast)
Container(
height: 50, // increase to extend line
width: 2,
margin: EdgeInsets.only(top: 4, bottom: 4),
child: CustomPaint(
painter: DottedLinePainter(),
),
),
],
),
SizedBox(width: 12),
// Right Side: Step title and content
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 15,
),
),
SizedBox(height: 8),
Container(
width: double.infinity,
padding: EdgeInsets.all(12),
decoration: BoxDecoration(
color: Color(0xFFF7F7F7),
borderRadius: BorderRadius.circular(8),
border: Border.all(color: Color(0xFFE0E0E0)),
),
child: content,
),
SizedBox(height: isLast ? 0 : 16),
],
),
),
],
);
}
String _getStepTitle(int index) {
switch (index) {
case 0:
return 'PAYMENT INITIATED (Nalini 21062025 / 11:20:02 AM)';
case 1:
return 'INFORMATION REQUIRED (Nalini 21062025 / 11:20:02 AM)';
case 2:
return 'UNDER PROCESS CLAIM NO. UPDATION (Nalini 21062025 / 11:20:02 AM)';
case 3:
return 'UNDER PROCESS QUERY DOCUMENT REQUIRED (Nalini 21062025 / 11:20:02 AM)';
case 4:
return 'APPROVED (Nalini 21062025 / 11:20:02 AM)';
default:
return '';
}
}
Widget _getStepContent(int index) {
switch (index) {
case 0:
return Text('Pay Initiate Date: 05-05-2025');
case 1:
return Text('Raised Date: 05-05-2025');
case 2:
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Claim Number: 4315440'),
Text('Registration Date: 05-05-2025'),
],
);
case 3:
return Text('Query Received Date: 05-05-2025');
case 4:
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Approved Amount: 4315440'),
Text('Approved Date: 05-05-2025'),
Text('Approved Letter: Lorem ipsum...'),
Text('Description: Lorem ipsum...'),
],
);
default:
return SizedBox.shrink();
}
}
Widget _buildKeyValue(String title, String value) {
final displayValue = (value == null || value.trim().isEmpty) ? 'N/A' : value;
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: TextStyle(
color: Colors.grey[600],
fontSize: 14,
),
),
SizedBox(height: 4),
Text(
displayValue,
style: TextStyle(
color: Colors.black,
fontWeight: FontWeight.w500,
fontSize: 15,
),
),
],
);
}
}
class DottedLinePainter extends CustomPainter {
@override
void paint(Canvas canvas, Size size) {
const dashHeight = 4.0;
const dashSpace = 3.0;
double startY = 0;
final paint = Paint()
..color = Colors.grey.shade400
..strokeWidth = 1;
while (startY < size.height) {
canvas.drawLine(
Offset(0, startY),
Offset(0, startY + dashHeight),
paint,
);
startY += dashHeight + dashSpace;
}
}
@override
bool shouldRepaint(CustomPainter oldDelegate) => false;
}

View File

@ -507,6 +507,19 @@ class ApiService {
return response;
}
Future<Map<String, dynamic>> getClaimsHistoryToApi(
String ticket_type_id,String token) async {
print("getCashDepositDetailsToApi1");
final url = Uri.parse(
'${Environment.apiUrlPost}claimView?ticket_id=$ticket_type_id');
final headers = {
'Authorization': 'Bearer $token' ?? '',
};
final response = await _makeGetRequest(url, headers);
return response;
}
Future<Map<String, dynamic>> getEmployeeAndDependenceToApi(
String clintID, String getPolicyNo, String empRefId, String token) async {
print(_hrtoken);