From 5f7852958b0a67c73cd06550b65a0b84d2d6b1a9 Mon Sep 17 00:00:00 2001 From: asif Date: Thu, 15 Jan 2026 13:29:59 +0530 Subject: [PATCH] Changes in stop Cheque file before bank --- .../screens/stop_multiple_cheques_screen.dart | 75 +++++++++++++++++- .../screens/stop_single_cheque_screen.dart | 76 +++++++++++++++++-- 2 files changed, 142 insertions(+), 9 deletions(-) diff --git a/lib/features/cheque/screens/stop_multiple_cheques_screen.dart b/lib/features/cheque/screens/stop_multiple_cheques_screen.dart index 607e543..28f9ee5 100644 --- a/lib/features/cheque/screens/stop_multiple_cheques_screen.dart +++ b/lib/features/cheque/screens/stop_multiple_cheques_screen.dart @@ -34,9 +34,19 @@ class _StopMultipleChequesScreenState extends State { final _stopIssueDateController = TextEditingController(); final _stopExpiryDateController = TextEditingController(); final _stopAmountController = TextEditingController(); - final _stopCommentController = TextEditingController(); final _chequeService = getIt(); + String? _selectedComment; + final _otherCommentController = TextEditingController(); + bool _showOtherCommentField = false; + final List _commentOptions = [ + 'Cheque Lost', + 'Cheque Stolen', + 'Cheque Missing', + 'Cheque Damaged', + 'Other' + ]; + String _formatDate(String dateString) { if (dateString.length != 8) { return dateString; // Return as is if not in expected ddmmyyyy format @@ -51,6 +61,21 @@ class _StopMultipleChequesScreenState extends State { } } + Future _selectDate(TextEditingController controller) async { + final DateTime? picked = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime.now(), + lastDate: DateTime(2101), + ); + if (picked != null) { + setState(() { + controller.text = + '${picked.day.toString().padLeft(2, '0')}/${picked.month.toString().padLeft(2, '0')}/${picked.year}'; + }); + } + } + Future _showResponseDialog(String title, String message) async { return showDialog( context: context, @@ -110,6 +135,7 @@ class _StopMultipleChequesScreenState extends State { decoration: InputDecoration( labelText: AppLocalizations.of(context).fromChequeNumberHint, border: const OutlineInputBorder(), + errorMaxLines: 2, ), keyboardType: TextInputType.number, validator: (value) { @@ -139,6 +165,7 @@ class _StopMultipleChequesScreenState extends State { decoration: InputDecoration( labelText: AppLocalizations.of(context).toChequeNumberHint, border: const OutlineInputBorder(), + errorMaxLines: 2, ), keyboardType: TextInputType.number, validator: (value) { @@ -174,18 +201,30 @@ class _StopMultipleChequesScreenState extends State { const SizedBox(height: 16), TextFormField( controller: _stopIssueDateController, + readOnly: true, + onTap: () => _selectDate(_stopIssueDateController), decoration: InputDecoration( labelText: AppLocalizations.of(context).stopIssueDateHint, border: const OutlineInputBorder(), + suffixIcon: IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () => _selectDate(_stopIssueDateController), + ), ), keyboardType: TextInputType.datetime, ), const SizedBox(height: 16), TextFormField( controller: _stopExpiryDateController, + readOnly: true, + onTap: () => _selectDate(_stopExpiryDateController), decoration: InputDecoration( labelText: AppLocalizations.of(context).stopExpiryDateHint, border: const OutlineInputBorder(), + suffixIcon: IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () => _selectDate(_stopExpiryDateController), + ), ), keyboardType: TextInputType.datetime, ), @@ -199,13 +238,39 @@ class _StopMultipleChequesScreenState extends State { keyboardType: TextInputType.number, ), const SizedBox(height: 16), - TextFormField( - controller: _stopCommentController, + DropdownButtonFormField( + value: _selectedComment, + items: _commentOptions.map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (newValue) { + setState(() { + _selectedComment = newValue; + _showOtherCommentField = newValue == 'Other'; + }); + }, decoration: InputDecoration( labelText: AppLocalizations.of(context).stopCommentHint, border: const OutlineInputBorder(), ), ), + if (_showOtherCommentField) + Padding( + padding: const EdgeInsets.only(top: 16.0), + child: TextFormField( + controller: _otherCommentController, + decoration: const InputDecoration( + labelText: "Other Reasons :", + border: OutlineInputBorder(), + ), + validator: (value) { + return null; + }, + ), + ), const SizedBox(height: 16), TextFormField( initialValue: _formatDate(widget.date), @@ -236,7 +301,9 @@ class _StopMultipleChequesScreenState extends State { stopIssueDate: _stopIssueDateController.text, stopExpiryDate: _stopExpiryDateController.text, stopAmount: _stopAmountController.text, - stopComment: _stopCommentController.text, + stopComment: _selectedComment == 'Other' + ? _otherCommentController.text + : _selectedComment ?? '', chequeIssueDate: widget.date, tpin: pin, ); diff --git a/lib/features/cheque/screens/stop_single_cheque_screen.dart b/lib/features/cheque/screens/stop_single_cheque_screen.dart index c9355f5..5c4f4b2 100644 --- a/lib/features/cheque/screens/stop_single_cheque_screen.dart +++ b/lib/features/cheque/screens/stop_single_cheque_screen.dart @@ -31,9 +31,19 @@ class _StopSingleChequeScreenState extends State { final _stopIssueDateController = TextEditingController(); final _stopExpiryDateController = TextEditingController(); final _stopAmountController = TextEditingController(); - final _stopCommentController = TextEditingController(); final _chequeService = getIt(); + String? _selectedComment; + final _otherCommentController = TextEditingController(); + bool _showOtherCommentField = false; + final List _commentOptions = [ + 'Cheque Lost', + 'Cheque Stolen', + 'Cheque Missing', + 'Cheque Damaged', + 'Other' + ]; + String _formatDate(String dateString) { if (dateString.length != 8) { return dateString; // Return as is if not in expected ddmmyyyy format @@ -48,6 +58,21 @@ class _StopSingleChequeScreenState extends State { } } + Future _selectDate(TextEditingController controller) async { + final DateTime? picked = await showDatePicker( + context: context, + initialDate: DateTime.now(), + firstDate: DateTime.now(), + lastDate: DateTime(2101), + ); + if (picked != null) { + setState(() { + controller.text = + '${picked.day.toString().padLeft(2, '0')}/${picked.month.toString().padLeft(2, '0')}/${picked.year}'; + }); + } + } + Future _showResponseDialog(String title, String message) async { return showDialog( context: context, @@ -107,6 +132,7 @@ class _StopSingleChequeScreenState extends State { decoration: InputDecoration( labelText: AppLocalizations.of(context).chequeNumberLabel, border: OutlineInputBorder(), + errorMaxLines: 2, ), keyboardType: TextInputType.number, validator: (value) { @@ -142,18 +168,30 @@ class _StopSingleChequeScreenState extends State { const SizedBox(height: 16), TextFormField( controller: _stopIssueDateController, + readOnly: true, + onTap: () => _selectDate(_stopIssueDateController), decoration: InputDecoration( labelText: AppLocalizations.of(context).stopIssueDateLabel, border: const OutlineInputBorder(), + suffixIcon: IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () => _selectDate(_stopIssueDateController), + ), ), keyboardType: TextInputType.datetime, ), const SizedBox(height: 16), TextFormField( controller: _stopExpiryDateController, + readOnly: true, + onTap: () => _selectDate(_stopExpiryDateController), decoration: InputDecoration( labelText: AppLocalizations.of(context).stopExpiryDateLabel, border: const OutlineInputBorder(), + suffixIcon: IconButton( + icon: const Icon(Icons.calendar_today), + onPressed: () => _selectDate(_stopExpiryDateController), + ), ), keyboardType: TextInputType.datetime, ), @@ -167,13 +205,39 @@ class _StopSingleChequeScreenState extends State { keyboardType: TextInputType.number, ), const SizedBox(height: 16), - TextFormField( - controller: _stopCommentController, + DropdownButtonFormField( + value: _selectedComment, + items: _commentOptions.map((String value) { + return DropdownMenuItem( + value: value, + child: Text(value), + ); + }).toList(), + onChanged: (newValue) { + setState(() { + _selectedComment = newValue; + _showOtherCommentField = newValue == 'Other'; + }); + }, decoration: InputDecoration( labelText: AppLocalizations.of(context).stopCommentHint, border: const OutlineInputBorder(), ), ), + if (_showOtherCommentField) + Padding( + padding: const EdgeInsets.only(top: 16.0), + child: TextFormField( + controller: _otherCommentController, + decoration: const InputDecoration( + labelText: "Other Reasons :", + border: OutlineInputBorder(), + ), + validator: (value) { + return null; + }, + ), + ), const SizedBox(height: 16), TextFormField( initialValue: _formatDate(widget.date), @@ -205,7 +269,9 @@ class _StopSingleChequeScreenState extends State { stopIssueDate: _stopIssueDateController.text, stopExpiryDate: _stopExpiryDateController.text, stopAmount: _stopAmountController.text, - stopComment: _stopCommentController.text, + stopComment: _selectedComment == 'Other' + ? _otherCommentController.text + : _selectedComment ?? '', chequeIssueDate: widget.date, tpin: pin, ); @@ -215,7 +281,7 @@ class _StopSingleChequeScreenState extends State { final message = decodedResponse['message']; if (status == 'SUCCESS') { _showResponseDialog('Success', message); - } else { + } if (status == 'ERROR') { _showResponseDialog('Error', message); } } on Exception catch (e) {