voidInvoice method

Future<Invoice> voidInvoice({
  1. required Invoice invoice,
  2. String? realmId,
  3. String? authToken,
})

Use this operation to void an existing invoice object; include a minimum of Invoice.Id and the current Invoice.SyncToken. The transaction remains active but all amounts and quantities are zeroed and the string, Voided, is injected into Invoice.PrivateNote, prepended to existing text if present.

Implementation

Future<Invoice> voidInvoice({
  required Invoice invoice,
  String? realmId,
  String? authToken,
}) async {

  authToken ??= authenticationService.getCachedToken()?.access_token;
  realmId ??= authenticationService.getCachedRealmId();

  Map<String, String> headers = {
    "Authorization": "Bearer ${authToken ?? ""}",
    'Content-Type': 'application/json; charset=UTF-8',
    'Accept': 'application/json',

  };

  Map<String, String> params = {
    "minorversion": minorVersion.toString(),
    "operation": "void"
  };

  Uri endpoint = Uri.https(
      baseUrl, "/v3/company/$realmId/invoice", params);

  //print (endpoint.toString());

  var response = await
  http.post(endpoint, body: jsonEncode(invoice.toJson()), headers: headers);

  if (response.statusCode == 200) {
    //print (jsonDecode(response.body));
    return Invoice.fromJson(jsonDecode(response.body)["Invoice"]);
  }
  else {
    throw InvoiceException(statusCode: response.statusCode, message: response.body);
  }
}