createTicket method
Future<Map<String, dynamic> >
createTicket({
- required String projectID,
- required String trackerID,
- required String tenantProductID,
- required String subject,
- required String statusID,
- String? description,
- String? priorityID,
- String? assigneeID,
- DateTime? startDate,
- DateTime? dueDate,
- Map<
String, dynamic> ? customValues, - String? audioFilePath,
- String? audioFieldID,
Create Ticket with Audio File Support
Implementation
Future<Map<String, dynamic>> createTicket({
required String projectID,
required String trackerID,
required String tenantProductID,
required String subject,
required String statusID,
String? description,
String? priorityID,
String? assigneeID,
DateTime? startDate,
DateTime? dueDate,
Map<String, dynamic>? customValues,
String? audioFilePath,
String? audioFieldID,
}) async {
// If audio file exists, use multipart upload
if (audioFilePath != null && audioFieldID != null) {
return _createTicketWithAudio(
projectID: projectID,
trackerID: trackerID,
tenantProductID: tenantProductID,
subject: subject,
description: description,
statusID: statusID,
priorityID: priorityID,
assigneeID: assigneeID,
startDate: startDate,
dueDate: dueDate,
customValues: customValues,
audioFilePath: audioFilePath,
audioFieldID: audioFieldID,
);
}
// Regular GraphQL mutation without file
const mutation = r'''
mutation CreateTicket($input: CreateProjectTicketInput!) {
createProjectTicket(input: $input) {
success
message
projectTicket {
id
ticketNumber
subject
customValues
startDate
createdAt
}
}
}
''';
final Map<String, dynamic> input = {
'projectID': projectID,
'trackerID': trackerID,
'tenantProductID': tenantProductID,
'subject': subject,
'statusID': statusID,
if (description != null && description.isNotEmpty) 'description': description,
if (priorityID != null) 'priorityID': priorityID,
if (assigneeID != null) 'assigneeID': assigneeID,
if (startDate != null) 'startDate': startDate.toUtc().toIso8601String(),
if (dueDate != null) 'dueDate': dueDate.toUtc().toIso8601String(),
};
if (customValues != null && customValues.isNotEmpty) {
input['customValues'] = jsonEncode(_prepareCustomValuesForBackend(customValues));
}
final variables = {'input': input};
print("Creating ticket with input: $input");
final result = await _api.graphql(mutation, variables);
final ticketResponse = result['createProjectTicket'];
if (ticketResponse != null) {
print("Ticket service returning: $ticketResponse");
return ticketResponse;
}
return {'success': false, 'message': 'Unknown error - no response data'};
}