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 closedTrackActive = 1;
int allClaimsActive = 0;
bool _isArgsHandled = false;
dynamic _token;
dynamic empCodeString;
dynamic empPrimaryId;
@ -77,6 +78,26 @@ class _helpState extends State<help> {
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 {
print('_loadToken');
final SharedPreferences prefs = await SharedPreferences.getInstance();
@ -413,7 +434,7 @@ class _helpState extends State<help> {
arguments: details);
},
child: Text(
'Raise a request',
'Raise a Claims',
style: GoogleFonts.poppins(color: Colors.white),
),
style: ElevatedButton.styleFrom(

View File

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

View File

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