ticket flow added

This commit is contained in:
Surendiran 2025-08-20 17:38:01 +05:30
parent 9f4241fc9d
commit dfdc8c803c
3 changed files with 68 additions and 37 deletions

View File

@ -31,6 +31,7 @@ class _helpState extends State<help> {
int tickets = 1; int tickets = 1;
int closedTrackActive = 1; int closedTrackActive = 1;
int allClaimsActive = 0; int allClaimsActive = 0;
bool _isArgsHandled = false;
dynamic _token; dynamic _token;
dynamic empCodeString; dynamic empCodeString;
dynamic empPrimaryId; dynamic empPrimaryId;
@ -77,6 +78,26 @@ class _helpState extends State<help> {
super.dispose(); super.dispose();
} }
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (!_isArgsHandled) {
final args = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
if (args != null && args.containsKey('ticketTabSelected')) {
setState(() {
tickets = args['ticketTabSelected']; // e.g. 0 from TicketForm
closedTrackActive = 1;
allClaimsActive = 1;
isActive = false;
});
}
_isArgsHandled = true; // only apply once
}
}
Future<void> _loadToken() async { Future<void> _loadToken() async {
print('_loadToken'); print('_loadToken');
final SharedPreferences prefs = await SharedPreferences.getInstance(); final SharedPreferences prefs = await SharedPreferences.getInstance();
@ -413,7 +434,7 @@ class _helpState extends State<help> {
arguments: details); arguments: details);
}, },
child: Text( child: Text(
'Raise a request', 'Raise a Claims',
style: GoogleFonts.poppins(color: Colors.white), style: GoogleFonts.poppins(color: Colors.white),
), ),
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(

View File

@ -137,7 +137,7 @@ class ApiService {
if (_token == null) { if (_token == null) {
await _initializeToken(); await _initializeToken();
} }
final url = Uri.parse('${Environment.apiUrlTicket}/initiateClaim'); final url = Uri.parse('${Environment.apiUrl}ticketSave');
// Convert formData to Map<String, String> // Convert formData to Map<String, String>
Map<String, String> stringFormData = Map<String, String> stringFormData =
formData.map((key, value) => MapEntry(key, value.toString())); formData.map((key, value) => MapEntry(key, value.toString()));

View File

@ -31,7 +31,6 @@ class _ticketsState extends State<tickets> {
dynamic policyDataIsEmpty = 1; dynamic policyDataIsEmpty = 1;
int? fromClaimsPage; int? fromClaimsPage;
dynamic decodedToken; dynamic decodedToken;
List<Map<String, dynamic>> departmentList = [];
List<Map<String, dynamic>> policyNumberList = []; List<Map<String, dynamic>> policyNumberList = [];
dynamic serviceId; dynamic serviceId;
dynamic policyNumberId; dynamic policyNumberId;
@ -62,6 +61,7 @@ class _ticketsState extends State<tickets> {
bool isServiceValid = true; bool isServiceValid = true;
bool isPolicyValid = true; bool isPolicyValid = true;
bool isSubjectValid = true; bool isSubjectValid = true;
bool isMessageValid = true;
@ -167,7 +167,7 @@ class _ticketsState extends State<tickets> {
if (response.containsKey('data')) { if (response.containsKey('data')) {
setState(() { setState(() {
selfDetails = response['data']; selfDetails = response['data'];
print(selfDetails); print('ABBC $selfDetails');
}); });
} else { } else {
// Handle other status messages if needed // Handle other status messages if needed
@ -183,13 +183,20 @@ class _ticketsState extends State<tickets> {
Future<void> sendFormDataToApi() async { Future<void> sendFormDataToApi() async {
setState(() { setState(() {
isServiceValid = serviceId != null; isServiceValid = serviceId != null;
isPolicyValid = policyNumberId != null;
isSubjectValid = subjectController.text.trim().isNotEmpty; isSubjectValid = subjectController.text.trim().isNotEmpty;
isMessageValid = messageController.text.trim().isNotEmpty;
// Skip policy validation if service is "Sales"
if (selectedServiceName == "Sales") {
isPolicyValid = true;
} else {
isPolicyValid = policyNumberId != null;
}
}); });
if (isServiceValid && if (isServiceValid &&
isPolicyValid && isPolicyValid &&
isSubjectValid) { isSubjectValid && isMessageValid) {
// Proceed to submit // Proceed to submit
} else { } else {
ToastHelper.showErrorToast(context, 'Please Fill Required Fields'); ToastHelper.showErrorToast(context, 'Please Fill Required Fields');
@ -208,52 +215,50 @@ class _ticketsState extends State<tickets> {
try { try {
print('Check One'); print('Check One');
Map<String, dynamic> formData = { Map<String, dynamic> formData = {
// 'opener': 'user',
'emp_id': emp_id,
'client_policy_id': client_policy_id,
'ticket_type_id': serviceId,
'subject': subjectController.text,
'message': messageController.text,
// 'policy_id': fromClaimsPage == 0
// ? claimsDetails['client_policy_id']
// : policyNumberId,
'emp_code':
decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
'mobile_number':
decodedToken['mobile'] != null ? decodedToken['mobile'] : '',
'email': decodedToken['email_corporate'] != null 'email': decodedToken['email_corporate'] != null
? decodedToken['email_corporate'] ? decodedToken['email_corporate']
: '', : '',
'fullname': decodedToken['name'] != null ? decodedToken['name'] : '', 'empcode': decodedToken['emp_code'] != null ? decodedToken['emp_code'] : '',
'message': messageController.text,
'mobile': decodedToken['mobile'] != null ? decodedToken['mobile'] : '',
'name': decodedToken['name'] != null ? decodedToken['name'] : '',
'policy_no': policyNumberId,
'subject': subjectController.text,
'ticket_type': selectedServiceName,
'client_id': selfDetails['client_id'], 'client_id': selfDetails['client_id'],
'relationship': selfDetails['relationship'], 'client_branch_id': selfDetails['client_branch_id'],
'gender': selfDetails['gender'],
}; };
print('formData $formData');
if (policyTypeCondition == 1) { // if (policyTypeCondition == 1) {
formData['policyholder_name'] = employeePolicyList[0]['name']; // formData['policyholder_name'] = employeePolicyList[0]['name'];
formData['member_name'] = selectedMemberName; // formData['member_name'] = selectedMemberName;
} else { // } else {
//
formData['policyholder_name'] = employeePolicyList[0]['name']; // formData['policyholder_name'] = employeePolicyList[0]['name'];
formData['member_name'] = selectedMemberName; // formData['member_name'] = selectedMemberName;
} // }
// Convert integer values to strings // Convert integer values to strings
formData = formData.map((key, value) => MapEntry(key, value.toString())); formData = formData.map((key, value) => MapEntry(key, value.toString()));
final response = await apiService.sendFormDataToApi(formData); final response = await apiService.sendFormDataToApi(formData);
if (response['status'] == true) { if (response['status'] == 'success') {
ToastHelper.showSuccessToast(context, response['message']); ToastHelper.showSuccessToast(context, response['message']);
serviceId = null; serviceId = null;
departmentList.clear(); policyNumberId = null;
subjectController.clear();
messageController.clear();
setState(() { setState(() {
isLoading = false; isLoading = false;
}); });
Navigator.pushNamed(context, 'claims'); Navigator.pushNamed(context, 'help');
Navigator.pushNamed(
context,
'help',
arguments: {'ticketTabSelected': 0},
);
print('Form data submitted successfully'); print('Form data submitted successfully');
} else { } else {
print('Failed to submit form data: ${response['status']}'); print('Failed to submit form data: ${response['status']}');
@ -424,10 +429,13 @@ class _ticketsState extends State<tickets> {
serviceId, serviceId,
valueKey: 'id', valueKey: 'id',
), ),
if (!isServiceValid)
Text('Please select a Service',
style: TextStyle(color: Colors.red)),
], ],
), ),
SizedBox(height: 15), SizedBox(height: 15),
if (selectedServiceName == "Service") if (selectedServiceName != "Sales")
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -464,6 +472,8 @@ class _ticketsState extends State<tickets> {
buildTextAreaField( buildTextAreaField(
'Message', 'Message',
messageController), messageController),
if (!isMessageValid)
Text('Please enter the Message', style: TextStyle(color: Colors.red)),
] ]
), ),
], ],
@ -483,7 +493,7 @@ class _ticketsState extends State<tickets> {
alignment: Alignment.centerRight, alignment: Alignment.centerRight,
child: ElevatedButton( child: ElevatedButton(
onPressed: () { onPressed: () {
// sendFormDataToApi(); sendFormDataToApi();
}, },
child: Text( child: Text(
'Send', 'Send',