claims form changes

This commit is contained in:
Surendiran 2026-01-09 09:58:25 +05:30
parent 2eeccba0ed
commit 5d0566e338
15 changed files with 931 additions and 870 deletions

View File

@ -19,12 +19,12 @@ if (project.hasProperty('google-services.json')) {
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '47'
flutterVersionCode = '53'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '2.0.9'
flutterVersionName = '2.0.15'
}
def keystoreProperties = new Properties()

View File

@ -80,6 +80,7 @@ class _CustomAppBarState extends State<CustomAppBar> {
body: json.encode(params),
headers: {
HttpHeaders.contentTypeHeader: 'application/json',
'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y',
},
);

View File

@ -99,7 +99,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
dynamic topUpParentSiPremiumValue;
dynamic topUpParentSiPremiumGst;
dynamic topUpParentSiTotalAmt;
dynamic topUpParenIsPremiumSummery;
bool topUpParentIsPremiumSummary = false;
dynamic topUpParentTypeName;
int topUpParentOpenForEnrollment = 0;
dynamic addOnsDependentPolicies = [];
@ -111,7 +111,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
dynamic addOnsDependentPolicyName;
dynamic addOnsDependentPolicyType;
dynamic addOnsDependentECardDownload;
dynamic addOnsDependentIsPremiumSummery;
bool addOnsDependentIsPremiumSummary = false;
dynamic addOnsDependentRelationShip;
int addOnsDependentOpenForEnrollment = 0;
dynamic siValue;
@ -123,7 +123,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
dynamic addOnsDependentTotalAmt;
// dynamic topUpSiTotalAmt;
dynamic topUpSiTotalAmt;
dynamic topUpSiPremiumSummery;
bool topUpIsPremiumSummary = false;
late TextEditingController _relationShipController;
late TextEditingController _dobController;
late TextEditingController _memberNameController;
@ -232,6 +232,11 @@ class _addOnsDetailsState extends State<addOnsDetails> {
}
}
bool isPremiumEnabled(dynamic value) {
final intValue = int.tryParse(value?.toString() ?? '0') ?? 0;
return intValue != 0;
}
// Future<void> _loadToken() async {
// final SharedPreferences prefs = await SharedPreferences.getInstance();
// final String? token = prefs.getString('enrollToken');
@ -321,11 +326,12 @@ class _addOnsDetailsState extends State<addOnsDetails> {
setState(() {
gpaPolicies = response['data'];
for (var item in gpaPolicies) {
if (item['is_premium_summery'] == "1") {
gpahasPremiumSummary = true;
break;
}
// Extract disclaimer value from each object
if (isPremiumEnabled(item['is_premium_summery'])) {
gpahasPremiumSummary = true;
print('gpahasPremiumSummary $gpahasPremiumSummary');
break;
}
// Extract disclaimer value from each object
if (item['OpenForEnrollment'] == '1') {
dynamic disclaimer = item['disclaimer'];
if (disclaimer != null && disclaimer.isNotEmpty) {
@ -402,10 +408,9 @@ class _addOnsDetailsState extends State<addOnsDetails> {
gmcPolicies = response['data'];
for (var item in gmcPolicies) {
print('checking is_premium_summery ${item['is_premium_summery']}');
if (item['is_premium_summery'] == "1") {
print('checking is_premium_summery ${item['is_premium_summery']}');
if (isPremiumEnabled(item['is_premium_summery'])) {
gmchasPremiumSummary = true;
print('gmchasPremiumSummary ${gmchasPremiumSummary}');
print('gmchasPremiumSummary $gmchasPremiumSummary');
break;
}
if (item['OpenForEnrollment'] == '1') {
@ -525,7 +530,10 @@ class _addOnsDetailsState extends State<addOnsDetails> {
topUpSiTotalAmt = topUpSiPremiumValue + topUpSiPremiumGst;
topUpSiPremiumSummery = topUpSiPolicies['gmc_si_topup']['is_premium_summery'];
setState(() {
topUpIsPremiumSummary = isPremiumEnabled(topUpSiPolicies['gmc_si_topup']?['is_premium_summery']);
});
// topUpSiTotalAmt = (topUpSum as double).toInt();
});
@ -621,8 +629,11 @@ class _addOnsDetailsState extends State<addOnsDetails> {
topUpParentSiTotalAmt =
topUpParentSiPremiumValue + topUpParentSiPremiumGst;
topUpParenIsPremiumSummery = topUpSiParentPolicies['gmc_si_parent_topup']['is_premium_summery'];
print('topUpParenIsPremiumSummery $topUpParenIsPremiumSummery');
setState(() {
topUpParentIsPremiumSummary = isPremiumEnabled(topUpSiParentPolicies['gmc_si_parent_topup']?['is_premium_summery']);
print(topUpParentECardDownload);
});
});
}
@ -743,8 +754,11 @@ class _addOnsDetailsState extends State<addOnsDetails> {
addOnsDependentPolicies['gmc_dependent_addon']
['eCardDownload'];
addOnsDependentIsPremiumSummery = addOnsDependentPolicies['gmc_dependent_addon']['is_premium_summery'];
print('addOnsDependentIsPremiumSummery $addOnsDependentIsPremiumSummery');
setState(() {
addOnsDependentIsPremiumSummary = isPremiumEnabled(addOnsDependentPolicies['gmc_dependent_addon']?['is_premium_summery']);
});
print('addOnsDependentIsPremiumSummery $addOnsDependentIsPremiumSummary');
addOnsDependentRelationShip = addOnsDependentPolicies['gmc_dependent_addon']['relationship'];
// if(addOnsDependentIsPremiumSummery == 1){
@ -2460,7 +2474,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
if (_addOnsDependentSwitcher)
SizedBox(height: 20),
if (Responsive.isDesktop(context) &&
_addOnsDependentSwitcher && addOnsDependentIsPremiumSummery == '1')
_addOnsDependentSwitcher && addOnsDependentIsPremiumSummary)
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
@ -2585,7 +2599,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
],
),
if (!Responsive.isDesktop(context) &&
_addOnsDependentSwitcher == true && addOnsDependentIsPremiumSummery == '1')
_addOnsDependentSwitcher == true && addOnsDependentIsPremiumSummary)
Container(
child: Column(
crossAxisAlignment:
@ -3102,7 +3116,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
if (_topUpSiSwitcher == true)
SizedBox(height: 20),
if (Responsive.isDesktop(context) &&
_topUpSiSwitcher == true && topUpSiPremiumSummery == '1')
_topUpSiSwitcher == true && topUpIsPremiumSummary)
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
@ -3221,7 +3235,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
],
),
if (!Responsive.isDesktop(context) &&
_topUpSiSwitcher == true && topUpSiPremiumSummery == '1')
_topUpSiSwitcher == true && topUpIsPremiumSummary)
Container(
child: Column(
crossAxisAlignment:
@ -3738,7 +3752,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
if (_topUpParentSiSwitcher == true)
SizedBox(height: 20),
if (Responsive.isDesktop(context) &&
_topUpParentSiSwitcher == true && topUpParenIsPremiumSummery == '1')
_topUpParentSiSwitcher == true && topUpParentIsPremiumSummary)
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
@ -3857,7 +3871,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
],
),
if (!Responsive.isDesktop(context) &&
_topUpParentSiSwitcher == true && topUpParenIsPremiumSummery == '1')
_topUpParentSiSwitcher == true && topUpParentIsPremiumSummary)
Container(
child: Column(
crossAxisAlignment:
@ -5141,6 +5155,11 @@ class _addOnsDetailsState extends State<addOnsDetails> {
return 0.0;
}
String formatAmount(double value) {
return value % 1 == 0
? value.toInt().toString()
: value.toStringAsFixed(2);
}
List<Widget> generateGmcCards(List<dynamic> data) {
List<Widget> cards = [];
@ -5154,13 +5173,15 @@ class _addOnsDetailsState extends State<addOnsDetails> {
String gmcNotes = item['notes'] ?? '';
String gmcECardDownload = item['eCardDownload'] ?? '';
double gmcGstValue = toDoubleSafe(item['family_floaters_of_dependent_and_gst_value']);
double gmcSiPremiumValue = toDoubleSafe(item['family_floaters_of_dependent_and_si_premium_value']);
double gmcGstValue =
double.tryParse(item['family_floaters_of_dependent_and_gst_value']?.toString() ?? '0') ?? 0.0;
double gmcSiPremiumValue =
double.tryParse(item['family_floaters_of_dependent_and_si_premium_value']?.toString() ?? '0') ?? 0.0;
double gmcTotalableValue = gmcSiPremiumValue + gmcGstValue;
double gmcTotalableValue = gmcGstValue + gmcSiPremiumValue;
bool gmcIsValueValid = (gmcSiPremiumValue != 0 && gmcGstValue != 0);
bool gmcIsValueValid = (gmcSiPremiumValue > 0 && gmcGstValue > 0);
List gmcMappedFamilyFloaters = item['mapped_family_floaters'] ?? [];
@ -5353,7 +5374,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
),
),
Text(
(gmcSiPremiumValue ?? '').toString(),
formatAmount(gmcSiPremiumValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,
@ -5379,7 +5400,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
),
),
Text(
(gmcGstValue ?? '').toString(),
formatAmount(gmcGstValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,
@ -5405,7 +5426,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
),
),
Text(
(gmcTotalableValue ?? '').toString(),
formatAmount(gmcTotalableValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,
@ -5454,8 +5475,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcSiPremiumValue ?? '')
.toString(),
formatAmount(gmcSiPremiumValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,
@ -5499,7 +5519,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcGstValue ?? '').toString(),
formatAmount(gmcGstValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,
@ -5543,8 +5563,7 @@ class _addOnsDetailsState extends State<addOnsDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcTotalableValue ?? '')
.toString(),
formatAmount(gmcTotalableValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 14 : 12,

View File

@ -2216,6 +2216,12 @@ class _empDetailsState extends State<empDetails> {
return cards;
}
String formatAmount(double value) {
return value % 1 == 0
? value.toInt().toString()
: value.toStringAsFixed(2);
}
List<Widget> generateCards(List<dynamic> data) {
List<Widget> cards = [];
@ -2239,13 +2245,17 @@ class _empDetailsState extends State<empDetails> {
print('gmcECardDownload $gmcECardDownload');
bool gmcCopyDependenceDataEnable = item['copy_dependence_data_enable'];
print('gmcCopyDependenceDataEnable $gmcCopyDependenceDataEnable');
double gmcGstValue = item['family_floaters_of_dependent_and_gst_value'];
print('gmcGstValue $gmcGstValue');
double gmcSiPremiumValue =
item['family_floaters_of_dependent_and_si_premium_value'];
print('gmcSiPremiumValue $gmcSiPremiumValue');
double gmcTotalableValue = gmcGstValue + gmcSiPremiumValue;
bool gmcIsValueValid = (gmcSiPremiumValue != 0 && gmcGstValue != 0);
// double gmcGstValue = (item['family_floaters_of_dependent_and_gst_value'] ?? 0).toDouble();
double gmcGstValue =
double.tryParse(item['family_floaters_of_dependent_and_gst_value']?.toString() ?? '0') ?? 0.0;
double gmcSiPremiumValue =
double.tryParse(item['family_floaters_of_dependent_and_si_premium_value']?.toString() ?? '0') ?? 0.0;
double gmcTotalableValue = gmcGstValue + gmcSiPremiumValue;
bool gmcIsValueValid = (gmcSiPremiumValue > 0 && gmcGstValue > 0);
List gmcRelationShip = item['relationship'];
List gmcMappedFamilyFloaters = item['mapped_family_floaters'];
@ -2688,7 +2698,7 @@ class _empDetailsState extends State<empDetails> {
),
),
Text(
(gmcSiPremiumValue ?? '').toString(),
formatAmount(gmcSiPremiumValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 18,
@ -2713,7 +2723,7 @@ class _empDetailsState extends State<empDetails> {
),
),
Text(
(gmcGstValue ?? '').toString(),
formatAmount(gmcGstValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 18,
@ -2738,7 +2748,7 @@ class _empDetailsState extends State<empDetails> {
),
),
Text(
(gmcTotalableValue ?? '').toString(),
formatAmount(gmcTotalableValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 18,
@ -2787,7 +2797,7 @@ class _empDetailsState extends State<empDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcSiPremiumValue ?? '').toString(),
formatAmount(gmcSiPremiumValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 16,
@ -2831,7 +2841,7 @@ class _empDetailsState extends State<empDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcGstValue ?? '').toString(),
formatAmount(gmcGstValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 16,
@ -2875,7 +2885,7 @@ class _empDetailsState extends State<empDetails> {
CrossAxisAlignment.center,
children: [
Text(
(gmcTotalableValue ?? '').toString(),
formatAmount(gmcTotalableValue),
textAlign: TextAlign.start,
style: GoogleFonts.poppins(
fontSize: 16,
@ -2896,7 +2906,7 @@ class _empDetailsState extends State<empDetails> {
return cards;
}
Future<void> copyPreviousPolicy(gmcMappedFamilyFloaters,gmcClientPolicyId,sumInsured) async {
Future<void> copyPreviousPolicy(gmcMappedFamilyFloaters,gmcClientPolicyId,sumInsured) async {
print('gmcClientPolicyId1234 $gmcClientPolicyId');
try {
final response = await apiService.copyActivePolicy(enrollmentClient_id,enrollmentEmpCodeString,gmcClientPolicyId);

File diff suppressed because it is too large Load Diff

View File

@ -583,8 +583,8 @@ class _claimsState extends State<claims> {
horizontal: Responsive
.isDesktop(
context)
? 140
: 10 ,
? 70
: 30 ,
vertical: Responsive
.isDesktop(
context)
@ -654,7 +654,7 @@ class _claimsState extends State<claims> {
horizontal: Responsive
.isDesktop(
context)
? 130
? 70
: 30,
vertical: Responsive
.isDesktop(

View File

@ -192,7 +192,8 @@ class _helpState extends State<help> {
isLoading = true;
});
print('check 1');
final response = await apiService.getTrackClaimsList(empPrimaryId!,empMobileNo,empEmailID);
final response = await apiService.getTrackClaimsList(
empPrimaryId!, empMobileNo, empEmailID);
print('check 2');
setState(() {
isLoading = false;
@ -582,90 +583,34 @@ class _helpState extends State<help> {
),
),
SizedBox(height: 20),
SizedBox(height: 5),
InkWell(
onTap: () {
context.go('/faqs');
},
child: Container(
width: double.infinity,
height: Responsive.isDesktop(context) ? 140 : 120,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(6),
border: Border.all(
color: const Color(0xFF2F80ED),
width: 2,
Container(
// width: Responsive.isDesktop(context) ? 500 : double.infinity,
// height: 75,
// padding: Responsive.isDesktop(context)
// ? const EdgeInsets.only(
// top: 0, bottom: 20, left: 30, right: 30)
// : const EdgeInsets.symmetric(vertical: 0, horizontal: 0),
child: InkWell(
onTap: () {
context.push('/faqs');
},
child: Text(
'Click to find answers to commonly\nasked questions',
maxLines: 2,
softWrap: true,
textAlign: TextAlign.center,
style: GoogleFonts.poppins(
fontSize: Responsive.isDesktop(context) ? 12 : 10,
fontWeight: FontWeight.w600,
color: Colors.grey,
// decoration: TextDecoration.underline,
// decorationThickness: 1,
),
),
child: Row(
children: [
/// LEFT IMAGE BLOCK
Container(
width: Responsive.isDesktop(context) ? 180 : 120,
height: double.infinity,
color: Colors.white,
padding: const EdgeInsets.all(12),
child: Image.asset(
'assets/faqs.jpg',
fit: BoxFit.contain,
),
),
/// RIGHT CONTENT BLOCK
Expanded(
child: Container(
color: const Color(0xFF93C01F),
padding: EdgeInsets.symmetric(
horizontal: Responsive.isDesktop(context) ? 32 : 16,
vertical: Responsive.isDesktop(context) ? 24 : 16,
),
child: Row(
children: [
/// TEXT CONTENT
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'FAQs',
style: GoogleFonts.poppins(
fontSize:
Responsive.isDesktop(context) ? 36 : 20,
fontWeight: FontWeight.w600,
color: Colors.white,
),
),
const SizedBox(height: 8),
Text(
'Find answers to commonly asked questions',
style: GoogleFonts.poppins(
fontSize:
Responsive.isDesktop(context) ? 18 : 14,
fontWeight: FontWeight.w400,
color: Colors.white,
),
),
],
),
),
/// RIGHT ARROW
Icon(
Icons.chevron_right,
size: Responsive.isDesktop(context) ? 36 : 28,
color: Colors.white,
),
],
),
),
),
],
),
),
),
)
// SizedBox(height: 15),
// Container(
@ -1129,42 +1074,42 @@ class _helpState extends State<help> {
: FloatingActionButtonLocation.miniEndFloat,
bottomNavigationBar: Responsive.isDesktop(context)
? null
: CustomBottomNavigationBar(
onTabChanged: (index) {
// Add your navigation logic here
// repositionBotman();
if (index == 0) {
context.push('/home');
} else if (index == 1) {
context.push('/claims');
} else if (index == 2) {
context.push('/faqs');
} else if (index == 3) {
context.push('/profile');
} else if (index == 4) {
context.push('/help');
}
// else if (index == 4) {
// // context.push('/wellness');
// // Wellness tab clicked show popup
// if(!isRetailLoggedIn)
// PopupHelper.showRedirectPopup(
// context: context,
// apiService: apiService,
// empPrimaryId: session.empPrimaryId,
// );
// }
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.question_answer_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
],
labels: ["Home", "Claims", "FAQs", "Profile","Help"],
initialIndex: 4, // Initial index of the bottom navigation bar
),
: CustomBottomNavigationBar(
onTabChanged: (index) {
// Add your navigation logic here
// repositionBotman();
if (index == 0) {
context.push('/home');
} else if (index == 1) {
context.push('/claims');
} else if (index == 2) {
context.push('/faqs');
} else if (index == 3) {
context.push('/profile');
} else if (index == 4) {
context.push('/help');
}
// else if (index == 4) {
// // context.push('/wellness');
// // Wellness tab clicked show popup
// if(!isRetailLoggedIn)
// PopupHelper.showRedirectPopup(
// context: context,
// apiService: apiService,
// empPrimaryId: session.empPrimaryId,
// );
// }
},
icons: [
Icons.home_outlined,
Icons.sticky_note_2_outlined,
Icons.question_answer_outlined,
Icons.person_outline_outlined,
Icons.headset_mic_outlined,
],
labels: ["Home", "Claims", "FAQs", "Profile", "Help"],
initialIndex: 4, // Initial index of the bottom navigation bar
),
));
}

View File

@ -26,6 +26,7 @@ import '../service/TokenService.dart';
import '../service/popup_helper.dart';
import 'package:pdf/widgets.dart' as pw;
import 'package:printing/printing.dart';
import 'package:flutter/services.dart';
class planclaimsform extends StatefulWidget {
final Map<String, dynamic>? details;
@ -386,7 +387,7 @@ class _planclaimsformState extends State<planclaimsform> {
client_policy_id = null;
});
print('1111 serviceId : $serviceId');
if (serviceId == 1 || serviceId == 2 || serviceId == 3 || serviceId == 4) {
if (serviceId == 1 || serviceId == 2 || serviceId == 3 || serviceId == 4 || serviceId == 72) {
print('2222');
// Filter policies based on the ticket_type_id
List<Map<String, dynamic>> filteredPolicies = policyList.where((policy) {
@ -541,15 +542,15 @@ class _planclaimsformState extends State<planclaimsform> {
isPolicyValid = policyNumberId != null;
isMemberValid = selectedMemberId != null;
isSubjectValid = subjectController.text.trim().isNotEmpty;
isHospitalNameValid = policyTypeCondition != 1 || hospitalNameController.text.trim().isNotEmpty;
isHospitalAddressValid = policyTypeCondition != 1 || hospitalAddressController.text.trim().isNotEmpty;
isHospitalStateValid = policyTypeCondition != 1 || hospitalStateController.text.trim().isNotEmpty;
isHospitalCityValid = policyTypeCondition != 1 || hospitalCityController.text.trim().isNotEmpty;
isHospitalPincodeValid = policyTypeCondition != 1 || hospitalPinCodeController.text.trim().isNotEmpty;
isHospitalPhoneNoValid = policyTypeCondition != 1 || hospitalPhoneNoController.text.trim().isNotEmpty;
isHospitalNameValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalNameController.text.trim().isNotEmpty;
isHospitalAddressValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalAddressController.text.trim().isNotEmpty;
isHospitalStateValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalStateController.text.trim().isNotEmpty;
isHospitalCityValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalCityController.text.trim().isNotEmpty;
isHospitalPincodeValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalPinCodeController.text.trim().isNotEmpty;
isHospitalPhoneNoValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || hospitalPhoneNoController.text.trim().isNotEmpty;
// isAdmitDischargeValid = policyTypeCondition != 1 || (admitDate != null && dischargeDate != null);
isAdmitDateValid = policyTypeCondition != 1 || admitDate != null;
isDischargeDateValid = policyTypeCondition != 1 || dischargeDate != null;
isAdmitDateValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || admitDate != null;
isDischargeDateValid = (policyTypeCondition != 1 && policyTypeCondition != 72) || dischargeDate != null;
isClaimAmountValid = serviceId != 1 || claimAmountController.text.trim().isNotEmpty;
isAccidentDateValid = (serviceId == 2 || serviceId == 3 || serviceId == 4) ? accidentDate != null : true;
isIntimationDateValid = (serviceId == 2 || serviceId == 3 || serviceId == 4) ? intimationDate != null : true;
@ -618,7 +619,7 @@ class _planclaimsformState extends State<planclaimsform> {
};
if (policyTypeCondition == 1) {
if (policyTypeCondition == 1 || policyTypeCondition == 72) {
String formattedAdmitDate = DateFormat('yyyy-MM-dd').format(admitDate!);
String formattedDischargeDate = DateFormat('yyyy-MM-dd').format(dischargeDate!);
fields['hospital_name'] = hospitalNameController.text;
@ -767,11 +768,17 @@ class _planclaimsformState extends State<planclaimsform> {
print('Form data submitted successfully');
fileService.clearAll();
} else {
setState(() {
isLoading = false;
});
ToastHelper.showErrorToast(context, "Failed: ${decoded['message']}");
}
} catch (e) {
setState(() {
isLoading = false;
});
print('Error submitting form data: $e');
}
}
@ -1197,7 +1204,7 @@ SizedBox(height: 15),
// 'Accident Details',
// accidentDetailsController),
SizedBox(height: 15),
if (policyTypeCondition == 1) ...[
if (policyTypeCondition == 1 || policyTypeCondition == 72) ...[
buildTextField('Hospital Name', hospitalNameController),
if (!isHospitalNameValid)
Text('Please enter the Hospital Name', style: TextStyle(color: Colors.red)),
@ -1214,11 +1221,19 @@ SizedBox(height: 15),
if (!isHospitalStateValid)
Text('Please enter the Hospital State', style: TextStyle(color: Colors.red)),
SizedBox(height: 15),
buildTextField('Hospital Pincode', hospitalPinCodeController),
buildTextField('Hospital Pincode', hospitalPinCodeController,keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(6), // optional
]),
if (!isHospitalPincodeValid)
Text('Please enter the Hospital Pincode', style: TextStyle(color: Colors.red)),
SizedBox(height: 15),
buildTextField('Hospital Phone No', hospitalPhoneNoController),
buildTextField('Hospital Phone No', hospitalPhoneNoController,keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
LengthLimitingTextInputFormatter(10), // optional
]),
if (!isHospitalPhoneNoValid)
Text('Please enter the Hospital Phone No', style: TextStyle(color: Colors.red)),
],
@ -1295,7 +1310,7 @@ SizedBox(height: 15),
// 'Accident Details',
// accidentDetailsController),
// SizedBox(height: 15),
if (policyTypeCondition == 1) ...[
if (policyTypeCondition == 1 || policyTypeCondition == 72) ...[
// 🟡 Admit Date no future allowed
buildDatePickerField(
label: 'Admit Date',
@ -1334,7 +1349,10 @@ SizedBox(height: 15),
SizedBox(height: 15),
if (serviceId == 1) ...[
buildTextField('Claims Amount', claimAmountController, TextInputType.number),
buildTextField('Claims Amount', claimAmountController, keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
]),
if (!isClaimAmountValid)
Text('Please enter the Claims Amount', style: TextStyle(color: Colors.red)),
],
@ -1346,7 +1364,10 @@ SizedBox(height: 15),
buildTextField(
'Sum Insured',
sumInsuredController,
TextInputType.number,
keyboardType: TextInputType.number,
inputFormatters: [
FilteringTextInputFormatter.digitsOnly,
],
),
]
),
@ -1495,12 +1516,18 @@ SizedBox(height: 15),
);
}
Widget buildTextField(String label, TextEditingController controller,
[TextInputType keyboardType = TextInputType.text]) {
Widget buildTextField(
String label,
TextEditingController controller, {
TextInputType keyboardType = TextInputType.text,
List<TextInputFormatter>? inputFormatters,
}) {
return TextFormField(
controller: controller,
decoration: InputDecoration(labelText: label),
keyboardType: keyboardType,
inputFormatters: inputFormatters,
decoration: InputDecoration(labelText: label),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter the $label';
@ -1510,6 +1537,7 @@ SizedBox(height: 15),
);
}
Widget buildTextAreaField(String label, TextEditingController controller) {
return TextFormField(
controller: controller,

View File

@ -48,6 +48,7 @@ class _policiesState extends State<policies> {
dynamic EmployeePolicy;
List<Map<String, String>> employeeDetails = [];
dynamic argumentsData;
bool ECardHide = true;
bool _isExpanded = false;
void _onTabChanged(int index) {
@ -90,11 +91,12 @@ class _policiesState extends State<policies> {
}
}
Future<void> getEcardDownload() async {
Future<void> getEcardDownload(id) async {
final clientPolicyID = widget.arguments?['client_policy_id'];
final policyNo = widget.arguments?['policy_no'];
final eCarDParams = {
'id': empPrimaryId,
// 'id': empPrimaryId,
'id': id,
'emp_code': empCodeString,
'client_policy_id': clientPolicyID,
'policy_no': policyNo
@ -269,9 +271,18 @@ class _policiesState extends State<policies> {
String relationship = employee['relationship'];
String dob = employee['dob'];
String gender = employee['gender'];
employeeDetails.add({'name': name, 'relationship': relationship,'dob':dob,'gender':gender});
String id = employee['id'];
employeeDetails.add({'id':id,'name': name, 'relationship': relationship,'dob':dob,'gender':gender});
});
}
setState(() {
if(argumentsData['policy_type'] == 'GMC' || argumentsData['policy_type'] == 'GMC - Parents' || argumentsData['policy_type'] == 'GMC - Topup' || argumentsData['policy_type'] == 'GMC - Topup(Parents)'){
ECardHide = true;
} else {
ECardHide = false;
}
});
sortEmployeeDetails(employeeDetails);
print('employeeDetails');
print(employeeDetails);
@ -333,7 +344,7 @@ class _policiesState extends State<policies> {
flex: 11,
child: Row(
mainAxisAlignment: Responsive.isDesktop(context)
? MainAxisAlignment.center
? MainAxisAlignment.start
: MainAxisAlignment.start,
children: [
Text(
@ -369,7 +380,7 @@ class _policiesState extends State<policies> {
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if(argumentsData['policy_type'] != 'OPD')
if(ECardHide)
Expanded(
flex: Responsive.isDesktop(context) ? 4 : 6,
child: Container(
@ -388,7 +399,7 @@ class _policiesState extends State<policies> {
: 180,
child: TextButton(
onPressed: () {
getEcardDownload();
getEcardDownload(empPrimaryId);
// if (argumentsData['eCardDownload'] !=
// null) {
// _launchURL(
@ -433,9 +444,9 @@ class _policiesState extends State<policies> {
),
))),
)),
if (Responsive.isDesktop(context))
Expanded(flex: 4, child: Container()),
if(argumentsData['policy_type'] != 'OPD')
// if (Responsive.isDesktop(context))
// Expanded(flex: 4, child: Container()),
// if(argumentsData['policy_type'] != 'OPD')
Expanded(
flex: Responsive.isDesktop(context) ? 4 : 6,
child: Container(
@ -601,7 +612,7 @@ class _policiesState extends State<policies> {
CrossAxisAlignment.center,
children: [
Expanded(
flex: 8,
flex: 6,
child: Container(
alignment: Alignment.centerLeft,
padding: Responsive.isDesktop(context)
@ -665,21 +676,63 @@ class _policiesState extends State<policies> {
),
),
Expanded(
flex: 4,
flex: 6,
child: Container(
alignment: Alignment.centerRight,
child: Text(
detail['relationship']!,
textAlign: TextAlign.end,
style: GoogleFonts.poppins(
fontSize:
padding: Responsive.isDesktop(context)
? EdgeInsets.only(
top: 10,
bottom: 10,
left: 10,
right: 10)
: EdgeInsets.only(
top: 15,
bottom: 15,
left: 7,
right: 7),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if(ECardHide)...[
Container(
alignment: Alignment.centerRight,
child: MouseRegion(
cursor: SystemMouseCursors.click, // Web pointer
child: GestureDetector(
onTap: () {
getEcardDownload(detail['id']);
},
child: Tooltip(
message: 'E-Card',
waitDuration: const Duration(milliseconds: 300),
showDuration: const Duration(seconds: 2),
child: SvgPicture.string(
SvgService.getSvg('ECard'),
width: 25,
height: 25,
),
),
),
),
),
const SizedBox(height: 4),
],
Text(
detail['relationship']!,
textAlign: TextAlign.end,
style: GoogleFonts.poppins(
fontSize:
Responsive.isDesktop(context)
? 16
: 14,
color: Color(0xFF404040),
fontWeight: FontWeight.w400,
),
),
color: Color(0xFF404040),
fontWeight: FontWeight.w400,
),
),
],
)
),
),
],

View File

@ -217,6 +217,7 @@ class _profileState extends State<profile> {
body: json.encode(params),
headers: {
HttpHeaders.contentTypeHeader: 'application/json',
'APP-SIGNATURE': 'nhance-2025-signature-T8f6gV9k5fK2wf5V5c4vId3b0J8z6cAm2x8Y',
},
);
@ -749,7 +750,7 @@ class _profileState extends State<profile> {
])),
SizedBox(height: 12),
if (Responsive.isMobile(context) ||
Responsive.isTablet(context))
Responsive.isTablet(context)) ...[
Container(
child: Row(
children: [
@ -787,7 +788,8 @@ class _profileState extends State<profile> {
],
),
),
SizedBox(height: 10),
SizedBox(height: 10),
],
Container(
// color: Colors.amberAccent,
width: MediaQuery.of(context).size.width,
@ -797,10 +799,11 @@ class _profileState extends State<profile> {
mainAxisSize: MainAxisSize.min,
children: [
// Change Password Button
if(Responsive.isDesktop(context))
_buildChangePasswordButton(context),
if(Responsive.isDesktop(context))...[
_buildChangePasswordButton(context),
const SizedBox(width: 10),
const SizedBox(width: 10),
],
// Logout Button
Responsive.isDesktop(context)

View File

@ -480,7 +480,7 @@ class _tickettracklistState extends State<tickettracklist> {
SizedBox(
width: 5),
Text(
name,
name ?? '',
style: GoogleFonts
.poppins(
fontSize:

View File

@ -202,10 +202,12 @@ class _pinPageState extends State<pinPage> {
}
} else {
ToastHelper.showErrorToast(context, 'Something went wrong');
context.go('/login');
throw Exception('Failed to verify pin number');
}
} catch (e) {
ToastHelper.showErrorToast(context, 'Something went wrong');
context.go('/login');
print('Error: $e');
}
}
@ -492,6 +494,34 @@ class _pinPageState extends State<pinPage> {
return false;
},
child: Scaffold(
resizeToAvoidBottomInset: true, // IMPORTANT
bottomNavigationBar: SafeArea(
child: Container(
color: Colors.white, // 👈 set your color here
padding: const EdgeInsets.only(bottom: 8, top: 4),
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: const [
TextSpan(
text: 'privacy policy ',
style: TextStyle(color: Color(0xFF00989E)),
),
TextSpan(text: 'and '),
TextSpan(
text: 'terms of use',
style: TextStyle(color: Color(0xFF00989E)),
),
],
),
),
),
),
body: Container(
color: Colors.white, // Set the color for the body
child: SizedBox.expand(
@ -697,6 +727,11 @@ class _pinPageState extends State<pinPage> {
focusedBorderColor),
),
),
obscureText: true,
obscuringWidget: const Text(
'',
style: TextStyle(fontSize: 12,color: Colors.black87),
),
submittedPinTheme:
defaultPinTheme
.copyWith(
@ -761,7 +796,7 @@ class _pinPageState extends State<pinPage> {
forgotPin();
},
child: Text(
'Forget PIN?',
'Forgot PIN?',
style: GoogleFonts
.poppins(
fontSize: 12,
@ -776,6 +811,41 @@ class _pinPageState extends State<pinPage> {
],
),
),
SizedBox(height: 15),
Container(
margin:
EdgeInsets.symmetric(
horizontal: 30),
child: SizedBox(
width: double.infinity,
height: 45,
child: ElevatedButton(
style: ElevatedButton
.styleFrom(
backgroundColor:
Color(0xFF00989E),
shape:
RoundedRectangleBorder(
borderRadius:
BorderRadius
.circular(
10),
),
),
onPressed: () async {
forgotPin();
// context.go('/login');
},
child: Text(
"Login with OTP",
style: GoogleFonts
.poppins(
color: Color(
0xFFFFFFFF)),
),
),
),
),
],
),
),
@ -791,48 +861,6 @@ class _pinPageState extends State<pinPage> {
),
]),
)),
Align(
alignment: Alignment.bottomCenter,
child: SafeArea(
child: Container(
padding: EdgeInsets.only(bottom: 8),
width: double.infinity,
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: <TextSpan>[
TextSpan(
text: 'privacy policy ',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
TextSpan(
text: 'and ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
),
TextSpan(
text: 'terms of use',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
],
),
),
),
),
)
]),
))));
}

View File

@ -174,6 +174,34 @@ class _changePinState extends State<changePin> {
);
return Scaffold(
resizeToAvoidBottomInset: true, // IMPORTANT
bottomNavigationBar: SafeArea(
child: Container(
color: Colors.white, // 👈 set your color here
padding: const EdgeInsets.only(bottom: 8, top: 4),
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: const [
TextSpan(
text: 'privacy policy ',
style: TextStyle(color: Color(0xFF00989E)),
),
TextSpan(text: 'and '),
TextSpan(
text: 'terms of use',
style: TextStyle(color: Color(0xFF00989E)),
),
],
),
),
),
),
body: Container(
color: Colors.white, // Set the color for the body
child: SizedBox.expand(
@ -534,45 +562,6 @@ class _changePinState extends State<changePin> {
),
]),
)),
Align(
alignment: Alignment.bottomCenter,
child: Container(
width: double.infinity, // Make the footer full width
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: <TextSpan>[
TextSpan(
text: 'privacy policy ',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
TextSpan(
text: 'and ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
),
TextSpan(
text: 'terms of use',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
],
),
),
),
),
]),
)));
}

View File

@ -253,6 +253,34 @@ class _pinSettingPageState extends State<pinSettingPage> {
return false;
},
child: Scaffold(
resizeToAvoidBottomInset: true, // IMPORTANT
bottomNavigationBar: SafeArea(
child: Container(
color: Colors.white, // 👈 set your color here
padding: const EdgeInsets.only(bottom: 8, top: 4),
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: const [
TextSpan(
text: 'privacy policy ',
style: TextStyle(color: Color(0xFF00989E)),
),
TextSpan(text: 'and '),
TextSpan(
text: 'terms of use',
style: TextStyle(color: Color(0xFF00989E)),
),
],
),
),
),
),
body: Container(
color: Colors.white, // Set the color for the body
child: SizedBox.expand(
@ -716,48 +744,6 @@ class _pinSettingPageState extends State<pinSettingPage> {
),
]),
)),
Align(
alignment: Alignment.bottomCenter,
child: SafeArea(
child: Container(
padding: EdgeInsets.only(bottom: 8),
width: double.infinity,
child: RichText(
textAlign: TextAlign.center,
text: TextSpan(
text: 'By continuing, you agree with our ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
children: <TextSpan>[
TextSpan(
text: 'privacy policy ',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
TextSpan(
text: 'and ',
style: GoogleFonts.poppins(
color: Colors.black,
fontSize: 9,
),
),
TextSpan(
text: 'terms of use',
style: GoogleFonts.poppins(
color: Color(0xFF00989E),
fontSize: 9,
),
),
],
),
),
),
),
)
]),
))));
}

View File

@ -17,8 +17,8 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
#version: 1.0.32+32
version: 1.0.24+27
#version: 2.0.9+47
version: 1.0.28+33
#version: 2.0.15+53
environment:
sdk: '>=3.3.3 <4.0.0'