This commit is contained in:
Surendiran 2026-03-31 12:47:07 +05:30
parent 9a3367e802
commit f940e53501
4 changed files with 121 additions and 10 deletions

View File

@ -886,6 +886,7 @@ class _HrPolicyDetailsState extends State<hrPolicyDetails>
cardPolicy_ExpDate: cardPolicy_ExpDate:
widget.cardPolicy_ExpDate, widget.cardPolicy_ExpDate,
total_premium: widget.total_premium, total_premium: widget.total_premium,
allocgType: 'EB',
// Token: localToken, // Token: localToken,
// ClientId: widget.ClientId, // ClientId: widget.ClientId,

View File

@ -10,6 +10,7 @@ import 'package:nhancepolicy/service/api_service.dart';
import 'package:nhancepolicy/service/hrDashboardTabs/activePolicies.dart'; import 'package:nhancepolicy/service/hrDashboardTabs/activePolicies.dart';
import 'package:nhancepolicy/service/hrDashboardTabs/cd.dart'; import 'package:nhancepolicy/service/hrDashboardTabs/cd.dart';
import 'package:nhancepolicy/presentation/claims.dart'; import 'package:nhancepolicy/presentation/claims.dart';
import 'package:nhancepolicy/presentation/postFileUpload.dart';
import 'package:nhancepolicy/service/hrDashboardTabs/preEnrollment.dart'; import 'package:nhancepolicy/service/hrDashboardTabs/preEnrollment.dart';
import 'package:nhancepolicy/service/token_storage_service.dart'; import 'package:nhancepolicy/service/token_storage_service.dart';
import 'package:nhancepolicy/service/_ResponsiveGridConfig.dart'; import 'package:nhancepolicy/service/_ResponsiveGridConfig.dart';
@ -584,6 +585,11 @@ class _PolicyGrid extends StatelessWidget {
this.onBulkDownload, this.onBulkDownload,
}); });
bool _isNonEbPolicy(Map<String, dynamic> data) {
final allocg = (data['allocg'] ?? '').toString().trim().toLowerCase();
return allocg == 'non-eb';
}
ResponsiveGridConfig _getGridConfig( ResponsiveGridConfig _getGridConfig(
BuildContext context, BuildContext context,
bool isEnrollment, bool isEnrollment,
@ -611,13 +617,80 @@ class _PolicyGrid extends StatelessWidget {
} }
} }
@override
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final tokenService = TokenStorageService(); final tokenService = TokenStorageService();
final config = _getGridConfig(context, isEnrollment); final config = _getGridConfig(context, isEnrollment);
final int rowCount = (policies.length / config.crossAxisCount).ceil(); /// Enrollment No change
if (isEnrollment) {
return _buildGrid(
context,
policies,
config,
tokenService,
);
}
/// Active Split EB / Non-EB
final ebPolicies = policies.where((p) => p['allocg'] == 'EB').toList();
final nonEbPolicies =
policies.where((p) => p['allocg'] == 'Non-EB').toList();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
/// EB section
if (ebPolicies.isNotEmpty) ...[
Text(
'EB Policies',
style: GoogleFonts.poppins(
fontSize: 13,
fontWeight: FontWeight.w600,
color: const Color(0xFF009195),
),
),
const SizedBox(height: 10),
_buildGrid(
context,
ebPolicies,
config,
tokenService,
),
],
/// Non-EB section
if (nonEbPolicies.isNotEmpty) ...[
Text(
'Non-EB Policies',
style: GoogleFonts.poppins(
fontSize: 13,
fontWeight: FontWeight.w600,
color: const Color(0xFFD06A00),
),
),
const SizedBox(height: 10),
_buildGrid(
context,
nonEbPolicies,
config,
tokenService,
isNonEb: true,
),
],
],
);
}
Widget _buildGrid(
BuildContext context,
List<Map<String, dynamic>> list,
ResponsiveGridConfig config,
TokenStorageService tokenService, {
bool isNonEb = false,
}) {
final int rowCount = (list.length / config.crossAxisCount).ceil();
double cardHeight; double cardHeight;
@ -628,7 +701,6 @@ class _PolicyGrid extends StatelessWidget {
} }
final double totalHeight = rowCount * cardHeight + ((rowCount - 1) * 16); final double totalHeight = rowCount * cardHeight + ((rowCount - 1) * 16);
return SizedBox( return SizedBox(
height: totalHeight, height: totalHeight,
child: GridView.builder( child: GridView.builder(
@ -642,9 +714,9 @@ class _PolicyGrid extends StatelessWidget {
mainAxisSpacing: 16, mainAxisSpacing: 16,
mainAxisExtent: isEnrollment ? 120 : 150, // fixed card height mainAxisExtent: isEnrollment ? 120 : 150, // fixed card height
), ),
itemCount: policies.length, itemCount: list.length,
itemBuilder: (context, index) { itemBuilder: (context, index) {
final data = policies[index]; final data = list[index];
return isEnrollment return isEnrollment
? _EnrollmentPolicyCardNew( ? _EnrollmentPolicyCardNew(
@ -687,6 +759,7 @@ class _PolicyGrid extends StatelessWidget {
) )
: _ActivePolicyCardNew( : _ActivePolicyCardNew(
data: data, data: data,
isNonEb: isNonEb,
onBulkDownload: onBulkDownload, onBulkDownload: onBulkDownload,
onTap: () async { onTap: () async {
final token = await tokenService.getCurrentToken(); final token = await tokenService.getCurrentToken();
@ -704,6 +777,34 @@ class _PolicyGrid extends StatelessWidget {
return; return;
} }
if (_isNonEbPolicy(data)) {
Navigator.push(
context,
MaterialPageRoute(
settings: const RouteSettings(name: 'postFileUpload'),
builder: (_) => postFileUpload(
ClientId: clientId,
policyTypeId: data['policy_type_id'].toString(),
ClientPoliyId: data['client_policy_id'].toString(),
clientBranchId: branchId,
Token: token,
TokenType: 'post',
cardType: data['type'].toString(),
cardPolicyNo: data['policy_no'].toString(),
cardInsurer_name:
data['insurer_short_name'].toString(),
cardPolicy_name:
data['policy_name']?.toString() ?? '',
cardPolicy_ExpDate:
data['policy_expiry_date'].toString(),
total_premium: data['total_premium'].toString(),
allocgType: 'NONEB',
),
),
);
return;
}
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
@ -954,11 +1055,13 @@ class _ActivePolicyCardNew extends StatelessWidget {
final Map<String, dynamic> data; final Map<String, dynamic> data;
final VoidCallback? onTap; final VoidCallback? onTap;
final Function(String clientPolicyId)? onBulkDownload; final Function(String clientPolicyId)? onBulkDownload;
final bool isNonEb;
const _ActivePolicyCardNew({ const _ActivePolicyCardNew({
required this.data, required this.data,
this.onTap, this.onTap,
this.onBulkDownload, this.onBulkDownload,
this.isNonEb = false,
}); });
@override @override
@ -970,7 +1073,9 @@ class _ActivePolicyCardNew extends StatelessWidget {
onTap: onTap, // 👈 card click onTap: onTap, // 👈 card click
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: const Color(0xFFE9F6FB), color: isNonEb
? const Color(0xFFFFF3E0) // 🔥 Non-EB
: const Color(0xFFE9F6FB), // EB
borderRadius: BorderRadius.circular(12), borderRadius: BorderRadius.circular(12),
), ),
padding: const EdgeInsets.all(14), padding: const EdgeInsets.all(14),

View File

@ -39,6 +39,7 @@ class postFileUpload extends StatefulWidget {
final String cardPolicy_name; final String cardPolicy_name;
final String cardPolicy_ExpDate; final String cardPolicy_ExpDate;
final String total_premium; final String total_premium;
final String allocgType;
const postFileUpload( const postFileUpload(
{Key? key, {Key? key,
required this.ClientId, required this.ClientId,
@ -52,7 +53,8 @@ class postFileUpload extends StatefulWidget {
required this.cardInsurer_name, required this.cardInsurer_name,
required this.cardPolicy_name, required this.cardPolicy_name,
required this.cardPolicy_ExpDate, required this.cardPolicy_ExpDate,
required this.total_premium}) required this.total_premium,
this.allocgType = ''})
: super(key: key); : super(key: key);
@override @override
@ -74,6 +76,7 @@ class _postFileUploadState extends State<postFileUpload> {
String localCardPolicyName = ''; String localCardPolicyName = '';
String localCardPolicyExpDate = ''; String localCardPolicyExpDate = '';
String localTotalPremium = ''; String localTotalPremium = '';
String localAllocgType = '';
Uint8List? fileBytes; Uint8List? fileBytes;
Uint8List? fileBytes2; Uint8List? fileBytes2;
@ -214,6 +217,8 @@ class _postFileUploadState extends State<postFileUpload> {
localTotalPremium = widget.total_premium.isNotEmpty localTotalPremium = widget.total_premium.isNotEmpty
? widget.total_premium ? widget.total_premium
: await tokenService.readValue('upload_total_premium') ?? ''; : await tokenService.readValue('upload_total_premium') ?? '';
localAllocgType = widget.allocgType;
} }
Future<void> clearUploadStorage() async { Future<void> clearUploadStorage() async {
@ -262,7 +267,7 @@ class _postFileUploadState extends State<postFileUpload> {
Future<void> getFileUploadMasterDetails() async { Future<void> getFileUploadMasterDetails() async {
logDebug('9'); logDebug('9');
try { try {
final response = await apiService.getFileUploadMastersToApi(localToken); final response = await apiService.getFileUploadMastersToApi(localToken,localAllocgType);
if (response['status'] == true) { if (response['status'] == true) {
logDebug('getFileUploadMasterList1'); logDebug('getFileUploadMasterList1');

View File

@ -845,12 +845,12 @@ class ApiService {
return response; return response;
} }
Future<Map<String, dynamic>> getFileUploadMastersToApi(String token) async { Future<Map<String, dynamic>> getFileUploadMastersToApi(String token,localAllocgType) async {
logDebug(_hrtoken); logDebug(_hrtoken);
if (token == null) { if (token == null) {
await _initializeToken(); await _initializeToken();
} }
final url = Uri.parse('${Environment.apiUrlPost}hrFileUploadMasters'); final url = Uri.parse('${Environment.apiUrlPost}hrFileUploadMasters?type=$localAllocgType');
final headers = { final headers = {
'Authorization': 'Bearer $token' ?? '', 'Authorization': 'Bearer $token' ?? '',
}; };