diff --git a/lib/modules/incident_module/create_incident_request_page.dart b/lib/modules/incident_module/create_incident_request_page.dart index 3e466bfe..5ceb5dca 100644 --- a/lib/modules/incident_module/create_incident_request_page.dart +++ b/lib/modules/incident_module/create_incident_request_page.dart @@ -73,6 +73,15 @@ class _CreateIncidentRequestPageState extends State { Map payload = {}; + Map? ovrDetails; + + bool get isOvrVerified => ovrDetails != null; + + bool ovrVerifying = false; + String ovrTicketNumber = ""; + + TextEditingController ovrTicketController = TextEditingController(); + @override void initState() { super.initState(); @@ -372,6 +381,7 @@ class _CreateIncidentRequestPageState extends State { 8.height, AppTextFormField( initialValue: "", + controller: ovrTicketController, labelText: "OVR Ticket Number", validator: (value) { if ((value ?? "").isEmpty) return "Mandatory"; @@ -381,10 +391,56 @@ class _CreateIncidentRequestPageState extends State { backgroundColor: AppColor.fieldBgColor(context), labelStyle: AppTextStyles.textFieldLabelStyle.copyWith(color: AppColor.textColor(context)), showShadow: false, + suffixIcon: Row( + mainAxisSize: MainAxisSize.min, + children: [ + TextButton( + onPressed: () { + if (ovrVerifying || isOvrVerified) return; + if (ovrTicketNumber.isEmpty) { + "Please enter OVR ticket number".showToast; + return; + } + ovrVerifying = true; + setState(() {}); + context.read().getOvrTicketDetails(ovrTicketNumber).then((details) { + ovrDetails = details; + if (ovrDetails != null) { + payload["ovrTicketNumber"] = ovrTicketNumber; + "OVR Ticket verified successfully".showToast; + } + }).whenComplete(() { + ovrVerifying = false; + setState(() {}); + }); + }, + child: ovrVerifying + ? SizedBox( + width: 16.toScreenHeight, + height: 16.toScreenHeight, + child: const CircularProgressIndicator(color: AppColor.primary10, strokeWidth: 2), + ) + : isOvrVerified + ? const Row( + mainAxisSize: MainAxisSize.min, + children: [Icon(Icons.done), Text("Verified")], + ) + : const Text("Verify"), + ), + if (isOvrVerified) + const Icon(Icons.clear, color: AppColor.red30).paddingOnly(end: 8).onPress(() { + ovrDetails = null; + ovrTicketNumber = ""; + ovrTicketController.clear(); + payload.remove("ovrTicketNumber"); + setState(() {}); + }), + ], + ), textInputType: TextInputType.name, textInputAction: TextInputAction.next, onChange: (value) { - payload["ovrTicketNumber"] = value; + ovrTicketNumber = value; }, ), ], @@ -621,6 +677,11 @@ class _CreateIncidentRequestPageState extends State { return; } + if (ovrSystem?.value == 1 && isOvrVerified == false) { + "Please verify OVR Ticket Number".showToast; + return; + } + if (occurrenceDate == null) { "Please select occurrence Data".showToast; return; diff --git a/lib/modules/incident_module/incident_provider.dart b/lib/modules/incident_module/incident_provider.dart index 93f29939..653854e3 100644 --- a/lib/modules/incident_module/incident_provider.dart +++ b/lib/modules/incident_module/incident_provider.dart @@ -42,6 +42,10 @@ class IncidentProvider extends ChangeNotifier { try { Response response = await ApiManager.instance.post(URLs.getOvrTicketDetails, body: {"ticketNumber": ticketNumber}, showToast: false); if (response.statusCode >= 200 && response.statusCode < 300) { + if (json.decode(response.body)["statusCode"] == 404) { + Fluttertoast.showToast(msg: json.decode(response.body)["message"] ?? "OVR Ticket not found"); + return null; + } return json.decode(response.body)["data"]; } } catch (error) {