diff --git a/lib/api/services/cheque_service.dart b/lib/api/services/cheque_service.dart index 1505723..fda0ba5 100644 --- a/lib/api/services/cheque_service.dart +++ b/lib/api/services/cheque_service.dart @@ -130,4 +130,62 @@ class ChequeService { ); return response.toString(); } + + Future revokeStop({ + required String accountno, + required String removeFromChequeNo, + required String instrType, + String? removeToChequeNo, + String? removeIssueDate, + String? removeExpiryDate, + String? removeAmount, + String? removeComment, + required String tpin, + }) async { + final response = await _dio.post( + '/api/cheque/removeStop', + options: Options( + validateStatus: (int? status) => true, + receiveDataWhenStatusError: true, + ), + data: { + 'accountNumber': accountno, + 'removeFromChequeNo': removeFromChequeNo, + 'instrumentType': instrType, + 'removeToChequeNo': removeToChequeNo, + 'removeIssueDate': removeIssueDate, + 'removeExpiryDate': removeExpiryDate, + 'removeAmount': removeAmount, + 'removeComment': removeComment, + 'tpin': tpin, + }, + ); + return response.toString(); + } + + Future registerPPS({ + required String cheque_no, + required String account_number, + String? issue_date, + String? amount, + String? payee_name, + required String tpin, + }) async { + final response = await _dio.post( + '/api/pps', + options: Options( + validateStatus: (int? status) => true, + receiveDataWhenStatusError: true, + ), + data: { + 'cheque_no': cheque_no, + 'account_number': account_number, + 'issue_date': issue_date, + 'amount': amount, + 'payee_name': payee_name, + 'tpin': tpin, + }, + ); + return response.toString(); + } } diff --git a/lib/api/services/yojna_service.dart b/lib/api/services/yojna_service.dart new file mode 100644 index 0000000..9440048 --- /dev/null +++ b/lib/api/services/yojna_service.dart @@ -0,0 +1,213 @@ +import 'dart:developer'; +import 'package:dio/dio.dart'; + + +class YojnaService { + final Dio _dio; + + YojnaService(this._dio); + + Future fetchpmydetails({ + required String scheme, + required String action, + required String accountno, + }) async { + try { + final response = await _dio.post( + "/api/gov-scheme/req/PMJBY", + data: { + 'scheme': scheme, + 'action': action, + 'accountNo': accountno, + }, + options: Options( + headers: { + "Content-Type": "application/json", + }, + ), + ); + + log("PMY Details Response: ${response.data}"); + + if (response.statusCode == 200) { + return response.data; + } else { + throw Exception("INTERNAL SERVER ERROR"); + } + } catch (e) { + log("Error fetching PMY details: $e"); + return null; + } + } + + Future secondvalidationPMJJBY({ + String? aadharno, +String? accountno, +String? availablebalance, +String? country, +String? customerdob, +String? customername, +String? customerno, +String? dateofacctopening, +String? emailid, +String? financialyear, +String? gender, +String? ifsccode, +String? married, +String? mobileno, +String? pan, +String? pincode, +String? policynumber, +String? premiumamount, +String? state, +String? healthstatus, +String? collectionchannel, +String? nomineename, +String? nomineeaddress, +String? nomineerelationship, +String? nomineeminor, +String? ruralcategory, + }) async { + final response = await _dio.post( + '/api/gov-scheme/create/PMJBY', + options: Options( + validateStatus: (int? status) => true, + receiveDataWhenStatusError: true, + ), + data: { + 'aadharno': aadharno , + 'accountno': accountno, +'availablebalance': availablebalance, +'country': country, +'customerdob': customerdob, +'customername': customername, +'customerno': customerno, +'dateofacctopening': dateofacctopening, +'emailid': emailid, +'financialyear': financialyear, +'gender': gender, +'ifsccode': ifsccode, +'married': married, +'mobileno': mobileno, +'pan': pan, +'pincode': pincode, +'policynumber': policynumber, +'premiumamount': premiumamount, +'state': state, +'healthstatus': healthstatus, +'collectionchannel': collectionchannel, +'nomineename': nomineename, +'nomineeaddress': nomineeaddress, +'nomineerelationship': nomineerelationship, +'nomineeminor': nomineeminor, +'ruralcategory': ruralcategory, + }, + ); + return response.toString(); + } + + Future secondvalidationPMSBY({ +String? aadharno, +String? accountno, +String? address1, +String? address2, +String? availablebalance, +String? city, +String? country, +String? customerdob, +String? customername, +String? customerno, +String? emailid, +String? financialyear, +String? gender, +String? married, +String? mobileno, +String? pan, +String? pincode, +String? policyno, +String? premiumamount, +String? state, +String? healthstatus, +String? nomineename, +String? nomineeadress, +String? relationwithnominee, +String? nomineeminor, +String? collectionchannel, +String? ruralcategory, +String? policystatus, + }) async { + final response = await _dio.post( + '/api/gov-scheme/create/PMSBY', + options: Options( + validateStatus: (int? status) => true, + receiveDataWhenStatusError: true, + ), + data: { + "aadharno": aadharno, +"accountno": accountno, +"address1": address1, +"address2": address2, +"availablebalance": availablebalance, +"city": city, +"country": country, +"customerdob": customerdob, +"customername": customername, +"customerno": customerno, +"emailid": emailid, +"financialyear": financialyear, +"gender": gender, +"married": married, +"mobileno": mobileno, +"pan": pan, +"pincode": pincode, +"policyno": policyno, +"premiumamount": premiumamount, +"state": state, +"healthstatus": healthstatus, +"nomineename": nomineename, +"nomineeadress": nomineeadress, +"relationwithnominee": relationwithnominee, +"nomineeminor": nomineeminor, +"collectionchannel": collectionchannel, +"ruralcategory": ruralcategory, +"policystatus": policystatus, + }, + ); + return response.toString(); + } + + Future enquiry({ + required String scheme, + required String action, + required String financialyear, + String? customerno, + }) async { + try { + final response = await _dio.get( + "/api/gov-scheme/enquiry/PMJBY", + queryParameters: { + 'scheme': scheme, + 'action': action, + 'financialyear': financialyear, + 'customerno': customerno, + }, + options: Options( + headers: { + "Content-Type": "application/json", + }, + ), + ); + + log("PMY Details Response: ${response.data}"); + + if (response.statusCode == 200) { + return response.data; + } else { + throw Exception("INTERNAL SERVER ERROR"); + } + } catch (e) { + log("Error fetching PMY details: $e"); + return null; + } + } +} \ No newline at end of file diff --git a/lib/data/models/beneficiary.dart b/lib/data/models/beneficiary.dart index 4521bf0..8389b0a 100644 --- a/lib/data/models/beneficiary.dart +++ b/lib/data/models/beneficiary.dart @@ -6,6 +6,7 @@ class Beneficiary { final String ifscCode; final String? bankName; final String? branchName; + final String? transactionLimit; final String? tpin; Beneficiary({ @@ -16,6 +17,7 @@ class Beneficiary { required this.ifscCode, this.bankName, this.branchName, + this.transactionLimit, this.tpin, }); @@ -30,6 +32,7 @@ class Beneficiary { ifscCode: json['ifsc_code'] ?? json['ifscCode'] ?? '', bankName: json['bank_name'] ?? json['bankName'] ?? '', branchName: json['branch_name'] ?? json['branchName'] ?? '', + transactionLimit: json['transactionLimit'] ?? '', ); } diff --git a/lib/features/beneficiaries/screens/beneficiary_details_screen.dart b/lib/features/beneficiaries/screens/beneficiary_details_screen.dart index 3a4fc0c..e592a12 100644 --- a/lib/features/beneficiaries/screens/beneficiary_details_screen.dart +++ b/lib/features/beneficiaries/screens/beneficiary_details_screen.dart @@ -119,6 +119,7 @@ class BeneficiaryDetailsScreen extends StatelessWidget { beneficiary.ifscCode), _buildDetailRow('${AppLocalizations.of(context).branchName} ', beneficiary.branchName ?? 'N/A'), + _buildDetailRow("Beneficiary Transactional Limit", beneficiary.transactionLimit ?? 'N/A'), const Spacer(), Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, diff --git a/lib/features/cheque/screens/revoke_stop_screen.dart b/lib/features/cheque/screens/revoke_stop_screen.dart new file mode 100644 index 0000000..6f61929 --- /dev/null +++ b/lib/features/cheque/screens/revoke_stop_screen.dart @@ -0,0 +1,351 @@ +// import 'package:kmobile/data/models/user.dart'; +// import 'package:kmobile/di/injection.dart'; +// import 'package:flutter/material.dart'; +// import 'package:kmobile/api/services/cheque_service.dart'; +// // import 'package:kmobile/features/cheque/screens/revoke_stop_multiple_screen.dart'; +// // import 'package:kmobile/features/cheque/screens/revoke_stop_single_screen.dart'; +// import 'package:kmobile/l10n/app_localizations.dart'; + +// class RevokeStopChequeScreen extends StatefulWidget { +// final List users; +// final int selectedIndex; + +// const RevokeStopChequeScreen( +// { +// super.key, +// required this.users, +// required this.selectedIndex, +// }); + +// @override +// State createState() => _RevokeStopChequeScreenState(); +// } + +// class _RevokeStopChequeScreenState extends State { +// User? _selectedAccount; +// var service = getIt(); +// bool _isLoading = true; +// List _stCheques = []; +// List _filteredUsers = []; + +// @override +// void initState() { +// super.initState(); +// _filteredUsers = widget.users +// .where((user) => ['SA', 'SB', 'CA', 'CC'].contains(user.accountType)) +// .toList(); + +// if (widget.users.isNotEmpty && widget.selectedIndex < widget.users.length) { +// if (_filteredUsers.isNotEmpty) { +// if (_filteredUsers.contains(widget.users[widget.selectedIndex])) { +// _selectedAccount = widget.users[widget.selectedIndex]; +// } else { +// _selectedAccount = _filteredUsers.first; +// } +// } else { +// _selectedAccount = widget.users[widget.selectedIndex]; +// } +// } else { +// if (_filteredUsers.isNotEmpty) { +// _selectedAccount = _filteredUsers.first; +// } +// } + +// _loadCheques(); +// } + +// Future _loadCheques() async { +// if (_selectedAccount == null) { +// setState(() { +// _isLoading = false; +// _stCheques = []; +// }); +// return; +// } +// setState(() { +// _isLoading = true; +// }); + +// String instrType; +// switch (_selectedAccount!.accountType) { +// case 'SA': +// case 'SB': +// instrType = '10'; +// break; +// case 'CA': +// instrType = '11'; +// break; +// case 'CC': +// instrType = '13'; +// break; +// default: +// instrType = '10'; +// } + +// try { +// final data = await service.ChequeEnquiry( +// accountNumber: _selectedAccount!.accountNo!, instrType: instrType); +// final stCheques = data.where((cheque) => cheque.type == 'ST').toList(); +// setState(() { +// _stCheques = stCheques; +// _isLoading = false; +// }); +// } catch (e) { +// setState(() { +// _isLoading = false; +// _stCheques = []; +// }); +// ScaffoldMessenger.of(context).showSnackBar( +// SnackBar( +// content: Text('Failed to fetch cheque status: ${e.toString()}'), +// ), +// ); +// } +// } + +// String _getAccountTypeDisplayName(String accountType) { +// switch (accountType.toLowerCase()) { +// case 'sa': +// return AppLocalizations.of(context).savingsAccount; +// case 'sb': +// return AppLocalizations.of(context).savingsAccount; +// case 'ca': +// return "Current Account"; +// case 'cc': +// return "Cash Credit Account"; +// default: +// return accountType; +// } +// } + +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// appBar: AppBar( +// title: Text(AppLocalizations.of(context).revokeStop), +// centerTitle: false, +// ), +// body: Stack( +// children: [ +// Padding( +// padding: const EdgeInsets.all(16.0), +// child: Column(children: [ +// Card( +// elevation: 4, +// margin: const EdgeInsets.symmetric(vertical: 8.0), +// child: Padding( +// padding: const EdgeInsets.all(16.0), +// child: Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: [ +// Text( +// AppLocalizations.of(context).accountNumber, +// style: const TextStyle( +// fontWeight: FontWeight.bold, fontSize: 18), +// ), +// const SizedBox(width: 16), +// if (_selectedAccount != null) +// Expanded( +// child: DropdownButton( +// value: _selectedAccount, +// onChanged: (User? newUser) { +// if (newUser != null) { +// setState(() { +// _selectedAccount = newUser; +// _loadCheques(); +// }); +// } +// }, +// items: _filteredUsers.map((user) { +// return DropdownMenuItem( +// value: user, +// child: Text(user.accountNo.toString()), +// ); +// }).toList(), +// ), +// ) +// else +// Text(AppLocalizations.of(context).noAccountsFound), +// ], +// ), +// ), +// ), +// const SizedBox(height: 20), +// Row( +// children: [ +// Expanded( +// child: Card( +// color: Theme.of(context).colorScheme.primaryContainer, +// elevation: 4, +// child: InkWell( +// onTap: () { +// if (_selectedAccount != null && +// _stCheques.isNotEmpty) { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => +// RevokeStopSingleChequeScreen( +// selectedAccount: _selectedAccount!, +// date: _stCheques.first.Date!, +// instrType: _stCheques.first.InstrType!, +// fromCheque: _stCheques.first.fromCheque!, +// toCheque: _stCheques.first.toCheque!, +// ), +// ), +// ); +// } else { +// ScaffoldMessenger.of(context).showSnackBar( +// const SnackBar( +// content: Text("No stopped cheques present"), +// ), +// ); +// } +// }, +// child: Padding( +// padding: const EdgeInsets.all(16.0), +// child: Center( +// child: Text( +// AppLocalizations.of(context).revokeSingleStopTitle, +// textAlign: TextAlign.center, +// style: TextStyle( +// fontSize: 16, +// fontWeight: FontWeight.bold, +// color: Theme.of(context) +// .colorScheme +// .onPrimaryContainer, +// ), +// ), +// ), +// ), +// ), +// ), +// ), +// const SizedBox(width: 10), +// Expanded( +// child: Card( +// color: Theme.of(context).colorScheme.primaryContainer, +// elevation: 4, +// child: InkWell( +// onTap: () { +// if (_selectedAccount != null && +// _stCheques.isNotEmpty) { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => +// RevokeStopMultipleChequesScreen( +// selectedAccount: _selectedAccount!, +// date: _stCheques.first.Date!, +// instrType: _stCheques.first.InstrType!, +// fromCheque: _stCheques.first.fromCheque!, +// toCheque: _stCheques.first.toCheque!, +// ), +// ), +// ); +// } else { +// ScaffoldMessenger.of(context).showSnackBar( +// SnackBar( +// content: Text(AppLocalizations.of(context) +// .pleaseSelectAccountFirst), +// ), +// ); +// } +// }, +// child: Padding( +// padding: const EdgeInsets.all(16.0), +// child: Center( +// child: Text( +// AppLocalizations.of(context).revokeMultipleStops, +// textAlign: TextAlign.center, +// style: TextStyle( +// fontSize: 16, +// fontWeight: FontWeight.bold, +// color: Theme.of(context) +// .colorScheme +// .onSecondaryContainer, +// ), +// ), +// ), +// ), +// ), +// ), +// ), +// ], +// ), +// const SizedBox(height: 20), +// Expanded( +// child: _isLoading +// ? const Center(child: CircularProgressIndicator()) +// : _stCheques.isEmpty +// ? Center( +// child: Text(AppLocalizations.of(context) +// .noChequeIssuedStatus)) +// : ListView.builder( +// itemCount: _stCheques.length, +// itemBuilder: (context, index) { +// return _buildSTTile(context, _stCheques[index]); +// }, +// ), +// ), +// ]), +// ), +// IgnorePointer( +// child: Center( +// child: Opacity( +// opacity: 0.07, // Reduced opacity +// child: ClipOval( +// child: Image.asset( +// 'assets/images/logo.png', +// width: 200, // Adjust size as needed +// height: 200, // Adjust size as needed +// ), +// ), +// ), +// ), +// ), +// ], +// ), +// ); +// } + +// Widget _buildSTTile(BuildContext context, Cheque cheque) { +// return Card( +// margin: const EdgeInsets.symmetric( +// vertical: 8.0, +// ), +// child: Padding( +// padding: const EdgeInsets.all(16.0), +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// children: [ +// Text(AppLocalizations.of(context).stopChequeLabel, +// style: Theme.of(context).textTheme.titleLarge), +// const SizedBox(height: 8), +// _buildInfoRow('From Cheque:', cheque.fromCheque), +// _buildInfoRow('To Cheque:', cheque.toCheque), +// _buildInfoRow('Account Type:', +// _getAccountTypeDisplayName(_selectedAccount!.accountType!)), +// _buildInfoRow('Branch Code:', cheque.branchCode), +// _buildInfoRow('Stop Issue Date:', cheque.stopIssueDate), +// _buildInfoRow('Stop Expiry Date:', cheque.StopExpiryDate), +// _buildInfoRow('Cheques Count:', cheque.Chequescount), +// ], +// ), +// ), +// ); +// } + +// Widget _buildInfoRow(String label, String? value) { +// return Padding( +// padding: const EdgeInsets.symmetric(vertical: 4.0), +// child: Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// children: [ +// Text(label, style: const TextStyle(fontWeight: FontWeight.bold)), +// Text(value ?? ''), +// ], +// ), +// ); +// } +// }