updateTicketWithMultipleLicenses method

Future<Map<String, dynamic>> updateTicketWithMultipleLicenses({
  1. required String ticketID,
  2. required int numberOfPeople,
  3. required List<File> licenseFiles,
  4. required String employeeFieldID,
  5. required String licenseFieldID,
})

Update ticket with MULTIPLE driving license files PUBLIC method - called by JobService

Implementation

Future<Map<String, dynamic>> updateTicketWithMultipleLicenses({
  required String ticketID,
  required int numberOfPeople,
  required List<File> licenseFiles,
  required String employeeFieldID,
  required String licenseFieldID,
}) async {
  try {
    print('Updating ticket with multiple licenses');
    print('Ticket ID: $ticketID');
    print('Number of People: $numberOfPeople');
    print('License Files: ${licenseFiles.length}');

    const mutation = r'''
      mutation UpdateTicket($input: UpdateProjectTicketInput!) {
        updateProjectTicket(input: $input) {
          success
          message
          projectTicket {
            id
            ticketNumber
            customValues
            documentFiles {
              url
              filename
              type
              label
              size
            }
            updatedAt
          }
        }
      }
    ''';

    // Create custom files array - one entry per license file
    final customFiles = licenseFiles.map((file) => {
      'fieldID': licenseFieldID,
      'file': null, // Files will be added via multipart
    }).toList();

    final Map<String, dynamic> input = {
      'id': ticketID,
      'customValues': jsonEncode({
        'cf_$employeeFieldID': numberOfPeople,
      }),
      'customFiles': customFiles,
    };

    final variables = {'input': input};

    // Use BaasApi to upload multiple documents
    final result = await _api.uploadTicketWithMultipleDocuments(
      mutation: mutation,
      variables: variables,
      filePaths: licenseFiles.map((f) => f.path).toList(),
      fieldID: licenseFieldID,
    );

    final ticketResponse = result['updateProjectTicket'];
    if (ticketResponse != null) {
      print(' Ticket updated with ${licenseFiles.length} licenses successfully');
      return ticketResponse;
    }

    return {'success': false, 'message': 'Unknown error - no response data'};
  } catch (e) {
    print('Error updating ticket with multiple licenses: $e');
    return {'success': false, 'message': e.toString()};
  }
}