All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xero.api.client.FinanceApi Maven / Gradle / Ivy

/*
 * Xero Finance API
 * The Finance API is a collection of endpoints which customers can use in the course of a loan application, which may assist lenders to gain the confidence they need to provide capital.
 *
 * The version of the OpenAPI document: 6.3.0
 * Contact: [email protected]
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

package com.xero.api.client;

import com.fasterxml.jackson.core.type.TypeReference;
import com.google.api.client.auth.oauth2.BearerToken;
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.http.GenericUrl;
import com.google.api.client.http.HttpContent;
import com.google.api.client.http.HttpHeaders;
import com.google.api.client.http.HttpMethods;
import com.google.api.client.http.HttpRequestFactory;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpResponseException;
import com.google.api.client.http.HttpTransport;
import com.xero.api.ApiClient;
import com.xero.api.XeroApiExceptionHandler;
import com.xero.models.finance.AccountUsageResponse;
import com.xero.models.finance.BalanceSheetResponse;
import com.xero.models.finance.BankStatementAccountingResponse;
import com.xero.models.finance.CashValidationResponse;
import com.xero.models.finance.CashflowResponse;
import com.xero.models.finance.IncomeByContactResponse;
import com.xero.models.finance.LockHistoryResponse;
import com.xero.models.finance.ProfitAndLossResponse;
import com.xero.models.finance.ReportHistoryResponse;
import com.xero.models.finance.TrialBalanceResponse;
import com.xero.models.finance.UserActivitiesResponse;
import jakarta.ws.rs.core.UriBuilder;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/** FinanceApi has methods for interacting with all endpoints in the API set */
public class FinanceApi {
  private ApiClient apiClient;
  private static FinanceApi instance = null;
  private String userAgent = "Default";
  private String version = "8.3.0";
  static final Logger logger = LoggerFactory.getLogger(FinanceApi.class);

  /** FinanceApi */
  public FinanceApi() {
    this(new ApiClient());
  }

  /**
   * FinanceApi getInstance
   *
   * @param apiClient ApiClient pass into the new instance of this class
   * @return instance of this class
   */
  public static FinanceApi getInstance(ApiClient apiClient) {
    if (instance == null) {
      instance = new FinanceApi(apiClient);
    }
    return instance;
  }

  /**
   * FinanceApi
   *
   * @param apiClient ApiClient pass into the new instance of this class
   */
  public FinanceApi(ApiClient apiClient) {
    this.apiClient = apiClient;
  }

  /**
   * get ApiClient
   *
   * @return apiClient the current ApiClient
   */
  public ApiClient getApiClient() {
    return apiClient;
  }

  /**
   * set ApiClient
   *
   * @param apiClient ApiClient pass into the new instance of this class
   */
  public void setApiClient(ApiClient apiClient) {
    this.apiClient = apiClient;
  }

  /**
   * set user agent
   *
   * @param userAgent string to override the user agent
   */
  public void setUserAgent(String userAgent) {
    this.userAgent = userAgent;
  }

  /**
   * get user agent
   *
   * @return String of user agent
   */
  public String getUserAgent() {
    return this.userAgent + " [Xero-Java-" + this.version + "]";
  }

  /**
   * Get account usage A summary of how each account is being transacted on exposing the level of
   * detail and amounts attributable to manual adjustments.
   *
   * 

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param startMonth date, yyyy-MM If no parameter is provided, the month 12 months prior to the * end month will be used. Account usage for up to 12 months from this date will be returned. * @param endMonth date, yyyy-MM If no parameter is provided, the current month will be used. * Account usage for up to 12 months prior to this date will be returned. * @param accessToken Authorization token for user set in header of each request * @return AccountUsageResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public AccountUsageResponse getAccountingActivityAccountUsage( String accessToken, String xeroTenantId, String startMonth, String endMonth) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getAccountingActivityAccountUsageForHttpResponse( accessToken, xeroTenantId, startMonth, endMonth); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getAccountingActivityAccountUsage -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get account usage A summary of how each account is being transacted on exposing the level of * detail and amounts attributable to manual adjustments. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param startMonth date, yyyy-MM If no parameter is provided, the month 12 months prior to the * end month will be used. Account usage for up to 12 months from this date will be returned. * @param endMonth date, yyyy-MM If no parameter is provided, the current month will be used. * Account usage for up to 12 months prior to this date will be returned. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getAccountingActivityAccountUsageForHttpResponse( String accessToken, String xeroTenantId, String startMonth, String endMonth) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getAccountingActivityAccountUsage"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getAccountingActivityAccountUsage"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/AccountingActivities/AccountUsage"); if (startMonth != null) { String key = "startMonth"; Object value = startMonth; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (endMonth != null) { String key = "endMonth"; Object value = endMonth; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get lock history Provides a history of locking of accounting books. Locking may be an indicator * of good accounting practices that could reduce the risk of changes to accounting records in * prior periods. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param endDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. Any * changes to hard or soft lock dates that were made within the period up to 12 months before * this date will be returned. Please be aware that there may be a delay of up to 3 days * before a change is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return LockHistoryResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public LockHistoryResponse getAccountingActivityLockHistory( String accessToken, String xeroTenantId, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getAccountingActivityLockHistoryForHttpResponse(accessToken, xeroTenantId, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getAccountingActivityLockHistory -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get lock history Provides a history of locking of accounting books. Locking may be an indicator * of good accounting practices that could reduce the risk of changes to accounting records in * prior periods. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param endDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. Any * changes to hard or soft lock dates that were made within the period up to 12 months before * this date will be returned. Please be aware that there may be a delay of up to 3 days * before a change is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getAccountingActivityLockHistoryForHttpResponse( String accessToken, String xeroTenantId, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getAccountingActivityLockHistory"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getAccountingActivityLockHistory"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/AccountingActivities/LockHistory"); if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get report history For a specified organisation, provides a summary of all the reports * published within a given period, which may be an indicator for good business management and * oversight. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param endDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. Any * reports that were published within the period up to 12 months before this date will be * returned. Please be aware that there may be a delay of up to 3 days before a published * report is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return ReportHistoryResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public ReportHistoryResponse getAccountingActivityReportHistory( String accessToken, String xeroTenantId, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getAccountingActivityReportHistoryForHttpResponse(accessToken, xeroTenantId, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getAccountingActivityReportHistory -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get report history For a specified organisation, provides a summary of all the reports * published within a given period, which may be an indicator for good business management and * oversight. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param endDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. Any * reports that were published within the period up to 12 months before this date will be * returned. Please be aware that there may be a delay of up to 3 days before a published * report is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getAccountingActivityReportHistoryForHttpResponse( String accessToken, String xeroTenantId, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getAccountingActivityReportHistory"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getAccountingActivityReportHistory"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/AccountingActivities/ReportHistory"); if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get user activities For a specified organisation, provides a list of all the users registered, * and a history of their accounting transactions. Also identifies the existence of an external * accounting advisor and the level of interaction. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param dataMonth date, yyyy-MM The specified month must be complete (in the past); The current * month cannot be specified since it is not complete. If no parameter is provided, the month * immediately previous to the current month will be used. Any user activities occurring * within the specified month will be returned. Please be aware that there may be a delay of * up to 3 days before a user activity is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return UserActivitiesResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public UserActivitiesResponse getAccountingActivityUserActivities( String accessToken, String xeroTenantId, String dataMonth) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getAccountingActivityUserActivitiesForHttpResponse(accessToken, xeroTenantId, dataMonth); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getAccountingActivityUserActivities -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get user activities For a specified organisation, provides a list of all the users registered, * and a history of their accounting transactions. Also identifies the existence of an external * accounting advisor and the level of interaction. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param dataMonth date, yyyy-MM The specified month must be complete (in the past); The current * month cannot be specified since it is not complete. If no parameter is provided, the month * immediately previous to the current month will be used. Any user activities occurring * within the specified month will be returned. Please be aware that there may be a delay of * up to 3 days before a user activity is visible from this API. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getAccountingActivityUserActivitiesForHttpResponse( String accessToken, String xeroTenantId, String dataMonth) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getAccountingActivityUserActivities"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getAccountingActivityUserActivities"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/AccountingActivities/UserActivities"); if (dataMonth != null) { String key = "dataMonth"; Object value = dataMonth; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get Bank Statement Accounting For lenders that prefer using bank statement data as the source * of truth. We provide a data point that will allow access to customer bank statements, plus for * reconciled bank transactions the matching accounting, invoice and billing data as well. As * customers reconcile bank statements to invoices and bills, this transaction detail will provide * valuable insight for lender's assessment measures. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param bankAccountID string, GUID Bank account Id * @param fromDate date, yyyy-MM-dd Specifies the start date of the query period. The maximum * range of the query period is 12 months. If the specified query period is more than 12 * months the request will be rejected. * @param toDate date, yyyy-MM-dd Specifies the end date of the query period. If the end date is a * future date, the request will be rejected. * @param summaryOnly boolean, true/false The default value is true if no parameter is provided. * In summary mode, the response will exclude the computation-heavy LineItems fields from bank * transaction, invoice, credit note, prepayment and overpayment data, making the API calls * quicker and more efficient. * @param accessToken Authorization token for user set in header of each request * @return BankStatementAccountingResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public BankStatementAccountingResponse getBankStatementAccounting( String accessToken, String xeroTenantId, UUID bankAccountID, String fromDate, String toDate, Boolean summaryOnly) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getBankStatementAccountingForHttpResponse( accessToken, xeroTenantId, bankAccountID, fromDate, toDate, summaryOnly); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getBankStatementAccounting -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get Bank Statement Accounting For lenders that prefer using bank statement data as the source * of truth. We provide a data point that will allow access to customer bank statements, plus for * reconciled bank transactions the matching accounting, invoice and billing data as well. As * customers reconcile bank statements to invoices and bills, this transaction detail will provide * valuable insight for lender's assessment measures. * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param bankAccountID string, GUID Bank account Id * @param fromDate date, yyyy-MM-dd Specifies the start date of the query period. The maximum * range of the query period is 12 months. If the specified query period is more than 12 * months the request will be rejected. * @param toDate date, yyyy-MM-dd Specifies the end date of the query period. If the end date is a * future date, the request will be rejected. * @param summaryOnly boolean, true/false The default value is true if no parameter is provided. * In summary mode, the response will exclude the computation-heavy LineItems fields from bank * transaction, invoice, credit note, prepayment and overpayment data, making the API calls * quicker and more efficient. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getBankStatementAccountingForHttpResponse( String accessToken, String xeroTenantId, UUID bankAccountID, String fromDate, String toDate, Boolean summaryOnly) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling getBankStatementAccounting"); } // verify the required parameter 'bankAccountID' is set if (bankAccountID == null) { throw new IllegalArgumentException( "Missing the required parameter 'bankAccountID' when calling getBankStatementAccounting"); } // verify the required parameter 'fromDate' is set if (fromDate == null) { throw new IllegalArgumentException( "Missing the required parameter 'fromDate' when calling getBankStatementAccounting"); } // verify the required parameter 'toDate' is set if (toDate == null) { throw new IllegalArgumentException( "Missing the required parameter 'toDate' when calling getBankStatementAccounting"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling getBankStatementAccounting"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/BankStatementsPlus/statements"); if (bankAccountID != null) { String key = "BankAccountID"; Object value = bankAccountID; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (fromDate != null) { String key = "FromDate"; Object value = fromDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (toDate != null) { String key = "ToDate"; Object value = toDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (summaryOnly != null) { String key = "SummaryOnly"; Object value = summaryOnly; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get cash validation Summarizes the total cash position for each account for an org * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param balanceDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. * The ‘balance date’ will return transactions based on the accounting date entered by the * user. Transactions before the balanceDate will be included. The user has discretion as to * which accounting period the transaction relates to. The ‘balance date’ will control the * latest maximum date of transactions included in the aggregate numbers. Balance date does * not affect the CurrentStatement object, as this will always return the most recent * statement before asAtSystemDate (if specified) * @param asAtSystemDate date, yyyy-MM-dd If no parameter is provided, the current date will be * used. The ‘as at’ date will return transactions based on the creation date. It reflects the * date the transactions were entered into Xero, not the accounting date. The ‘as at’ date can * not be overridden by the user. This can be used to estimate a ‘historical frequency of * reconciliation’. The ‘as at’ date will affect the current statement in the response, as any * candidate statements created after this date will be filtered out. Thus the current * statement returned will be the most recent statement prior to the specified ‘as at’ date. * Be aware that neither the begin date, nor the balance date, will affect the current * statement. Note; information is only presented when system architecture allows, meaning * historical cash validation information will be an estimate. In addition, delete events are * not aware of the ‘as at’ functionality in this endpoint, meaning that transactions deleted * at the time the API is accessed will be considered to always have been deleted. * @param beginDate date, yyyy-MM-dd If no parameter is provided, the aggregate results will be * drawn from the user’s total history. The ‘begin date’ will return transactions based on the * accounting date entered by the user. Transactions after the beginDate will be included. The * user has discretion as to which accounting period the transaction relates to. * @param accessToken Authorization token for user set in header of each request * @return List<CashValidationResponse> * @throws IOException if an error occurs while attempting to invoke the API * */ public List getCashValidation( String accessToken, String xeroTenantId, String balanceDate, String asAtSystemDate, String beginDate) throws IOException { try { TypeReference> typeRef = new TypeReference>() {}; HttpResponse response = getCashValidationForHttpResponse( accessToken, xeroTenantId, balanceDate, asAtSystemDate, beginDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getCashValidation -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get cash validation Summarizes the total cash position for each account for an org * *

200 - Success * *

400 - BadRequest * * @param xeroTenantId Xero identifier for Tenant * @param balanceDate date, yyyy-MM-dd If no parameter is provided, the current date will be used. * The ‘balance date’ will return transactions based on the accounting date entered by the * user. Transactions before the balanceDate will be included. The user has discretion as to * which accounting period the transaction relates to. The ‘balance date’ will control the * latest maximum date of transactions included in the aggregate numbers. Balance date does * not affect the CurrentStatement object, as this will always return the most recent * statement before asAtSystemDate (if specified) * @param asAtSystemDate date, yyyy-MM-dd If no parameter is provided, the current date will be * used. The ‘as at’ date will return transactions based on the creation date. It reflects the * date the transactions were entered into Xero, not the accounting date. The ‘as at’ date can * not be overridden by the user. This can be used to estimate a ‘historical frequency of * reconciliation’. The ‘as at’ date will affect the current statement in the response, as any * candidate statements created after this date will be filtered out. Thus the current * statement returned will be the most recent statement prior to the specified ‘as at’ date. * Be aware that neither the begin date, nor the balance date, will affect the current * statement. Note; information is only presented when system architecture allows, meaning * historical cash validation information will be an estimate. In addition, delete events are * not aware of the ‘as at’ functionality in this endpoint, meaning that transactions deleted * at the time the API is accessed will be considered to always have been deleted. * @param beginDate date, yyyy-MM-dd If no parameter is provided, the aggregate results will be * drawn from the user’s total history. The ‘begin date’ will return transactions based on the * accounting date entered by the user. Transactions after the beginDate will be included. The * user has discretion as to which accounting period the transaction relates to. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getCashValidationForHttpResponse( String accessToken, String xeroTenantId, String balanceDate, String asAtSystemDate, String beginDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling getCashValidation"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling getCashValidation"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/CashValidation"); if (balanceDate != null) { String key = "balanceDate"; Object value = balanceDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (asAtSystemDate != null) { String key = "asAtSystemDate"; Object value = asAtSystemDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (beginDate != null) { String key = "beginDate"; Object value = beginDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get Balance Sheet report The balance sheet report is a standard financial report which * describes the financial position of an organisation at a point in time. * *

200 - Success * *

400 - Bad Request * *

503 - Server Error * * @param xeroTenantId Xero identifier for Tenant * @param balanceDate Specifies the date for balance sheet report. Format yyyy-MM-dd. If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return BalanceSheetResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public BalanceSheetResponse getFinancialStatementBalanceSheet( String accessToken, String xeroTenantId, String balanceDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementBalanceSheetForHttpResponse(accessToken, xeroTenantId, balanceDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementBalanceSheet -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get Balance Sheet report The balance sheet report is a standard financial report which * describes the financial position of an organisation at a point in time. * *

200 - Success * *

400 - Bad Request * *

503 - Server Error * * @param xeroTenantId Xero identifier for Tenant * @param balanceDate Specifies the date for balance sheet report. Format yyyy-MM-dd. If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementBalanceSheetForHttpResponse( String accessToken, String xeroTenantId, String balanceDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementBalanceSheet"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementBalanceSheet"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/BalanceSheet"); if (balanceDate != null) { String key = "balanceDate"; Object value = balanceDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get Cash flow report The statement of cash flows - direct method, provides the year to date * changes in operating, financing and investing cash flow activities for an organisation. * Cashflow statement is not available in US region at this stage. * *

200 - Success * *

400 - Bad Request * *

503 - Server Error * * @param xeroTenantId Xero identifier for Tenant * @param startDate Date e.g. yyyy-MM-dd Specifies the start date for cash flow report. If no * parameter is provided, the date of 12 months before the end date will be used. * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for cash flow report. If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return CashflowResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public CashflowResponse getFinancialStatementCashflow( String accessToken, String xeroTenantId, String startDate, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementCashflowForHttpResponse( accessToken, xeroTenantId, startDate, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementCashflow -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get Cash flow report The statement of cash flows - direct method, provides the year to date * changes in operating, financing and investing cash flow activities for an organisation. * Cashflow statement is not available in US region at this stage. * *

200 - Success * *

400 - Bad Request * *

503 - Server Error * * @param xeroTenantId Xero identifier for Tenant * @param startDate Date e.g. yyyy-MM-dd Specifies the start date for cash flow report. If no * parameter is provided, the date of 12 months before the end date will be used. * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for cash flow report. If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementCashflowForHttpResponse( String accessToken, String xeroTenantId, String startDate, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementCashflow"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementCashflow"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/Cashflow"); if (startDate != null) { String key = "startDate"; Object value = startDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get expense by contacts report The expense by contact report provides a year to date profit and * loss for customers and suppliers for a given organisation, including detailed contact * information. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param contactIds Specifies the customer contacts to be included in the report. If no parameter * is provided, all customer contacts will be included * @param includeManualJournals Specifies whether to include the manual journals in the report. If * no parameter is provided, manual journals will not be included. * @param startDate Date yyyy-MM-dd Specifies the start date for the report. If no parameter is * provided, the date of 12 months before the end date will be used. It is recommended to * always specify both a start date and end date; While the initial range may be set to 12 * months, this may need to be reduced for high volume organisations in order to improve * latency. * @param endDate Date yyyy-MM-dd Specifies the end date for the report. If no parameter is * provided, the current date will be used. It is recommended to always specify both a start * date and end date; While the initial range may be set to 12 months, this may need to be * reduced for high volume organisations in order to improve latency. * @param accessToken Authorization token for user set in header of each request * @return IncomeByContactResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public IncomeByContactResponse getFinancialStatementContactsExpense( String accessToken, String xeroTenantId, List contactIds, Boolean includeManualJournals, String startDate, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementContactsExpenseForHttpResponse( accessToken, xeroTenantId, contactIds, includeManualJournals, startDate, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementContactsExpense -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get expense by contacts report The expense by contact report provides a year to date profit and * loss for customers and suppliers for a given organisation, including detailed contact * information. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param contactIds Specifies the customer contacts to be included in the report. If no parameter * is provided, all customer contacts will be included * @param includeManualJournals Specifies whether to include the manual journals in the report. If * no parameter is provided, manual journals will not be included. * @param startDate Date yyyy-MM-dd Specifies the start date for the report. If no parameter is * provided, the date of 12 months before the end date will be used. It is recommended to * always specify both a start date and end date; While the initial range may be set to 12 * months, this may need to be reduced for high volume organisations in order to improve * latency. * @param endDate Date yyyy-MM-dd Specifies the end date for the report. If no parameter is * provided, the current date will be used. It is recommended to always specify both a start * date and end date; While the initial range may be set to 12 months, this may need to be * reduced for high volume organisations in order to improve latency. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementContactsExpenseForHttpResponse( String accessToken, String xeroTenantId, List contactIds, Boolean includeManualJournals, String startDate, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementContactsExpense"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementContactsExpense"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/contacts/expense"); if (contactIds != null) { String key = "contactIds"; Object value = contactIds; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (includeManualJournals != null) { String key = "includeManualJournals"; Object value = includeManualJournals; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (startDate != null) { String key = "startDate"; Object value = startDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get revenue by contacts report The revenue by contact report provides a year to date profit and * loss for customers and suppliers for a given organisation, including detailed contact * information. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param contactIds Specifies the customer contacts to be included in the report. If no parameter * is provided, all customer contacts will be included * @param includeManualJournals Specifies whether to include the manual journals in the report. If * no parameter is provided, manual journals will not be included. * @param startDate Date yyyy-MM-dd Specifies the start date for the report. If no parameter is * provided, the date of 12 months before the end date will be used. It is recommended to * always specify both a start date and end date; While the initial range may be set to 12 * months, this may need to be reduced for high volume organisations in order to improve * latency. * @param endDate Date yyyy-MM-dd Specifies the end date for the report. If no parameter is * provided, the current date will be used. It is recommended to always specify both a start * date and end date; While the initial range may be set to 12 months, this may need to be * reduced for high volume organisations in order to improve latency. * @param accessToken Authorization token for user set in header of each request * @return IncomeByContactResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public IncomeByContactResponse getFinancialStatementContactsRevenue( String accessToken, String xeroTenantId, List contactIds, Boolean includeManualJournals, String startDate, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementContactsRevenueForHttpResponse( accessToken, xeroTenantId, contactIds, includeManualJournals, startDate, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementContactsRevenue -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get revenue by contacts report The revenue by contact report provides a year to date profit and * loss for customers and suppliers for a given organisation, including detailed contact * information. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param contactIds Specifies the customer contacts to be included in the report. If no parameter * is provided, all customer contacts will be included * @param includeManualJournals Specifies whether to include the manual journals in the report. If * no parameter is provided, manual journals will not be included. * @param startDate Date yyyy-MM-dd Specifies the start date for the report. If no parameter is * provided, the date of 12 months before the end date will be used. It is recommended to * always specify both a start date and end date; While the initial range may be set to 12 * months, this may need to be reduced for high volume organisations in order to improve * latency. * @param endDate Date yyyy-MM-dd Specifies the end date for the report. If no parameter is * provided, the current date will be used. It is recommended to always specify both a start * date and end date; While the initial range may be set to 12 months, this may need to be * reduced for high volume organisations in order to improve latency. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementContactsRevenueForHttpResponse( String accessToken, String xeroTenantId, List contactIds, Boolean includeManualJournals, String startDate, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementContactsRevenue"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementContactsRevenue"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/contacts/revenue"); if (contactIds != null) { String key = "contactIds"; Object value = contactIds; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (includeManualJournals != null) { String key = "includeManualJournals"; Object value = includeManualJournals; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (startDate != null) { String key = "startDate"; Object value = startDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get Profit & Loss report The profit and loss statement is a standard financial report * providing detailed year to date income and expense detail for an organisation. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param startDate Date e.g. yyyy-MM-dd Specifies the start date for profit and loss report If no * parameter is provided, the date of 12 months before the end date will be used. * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for profit and loss report If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return ProfitAndLossResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public ProfitAndLossResponse getFinancialStatementProfitAndLoss( String accessToken, String xeroTenantId, String startDate, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementProfitAndLossForHttpResponse( accessToken, xeroTenantId, startDate, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementProfitAndLoss -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get Profit & Loss report The profit and loss statement is a standard financial report * providing detailed year to date income and expense detail for an organisation. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param startDate Date e.g. yyyy-MM-dd Specifies the start date for profit and loss report If no * parameter is provided, the date of 12 months before the end date will be used. * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for profit and loss report If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementProfitAndLossForHttpResponse( String accessToken, String xeroTenantId, String startDate, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementProfitAndLoss"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementProfitAndLoss"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/ProfitAndLoss"); if (startDate != null) { String key = "startDate"; Object value = startDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * Get Trial Balance report The trial balance provides a detailed list of all accounts of an * organisation at a point in time, with revenue and expense items being year to date. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for trial balance report If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return TrialBalanceResponse * @throws IOException if an error occurs while attempting to invoke the API * */ public TrialBalanceResponse getFinancialStatementTrialBalance( String accessToken, String xeroTenantId, String endDate) throws IOException { try { TypeReference typeRef = new TypeReference() {}; HttpResponse response = getFinancialStatementTrialBalanceForHttpResponse(accessToken, xeroTenantId, endDate); return apiClient.getObjectMapper().readValue(response.getContent(), typeRef); } catch (HttpResponseException e) { if (logger.isDebugEnabled()) { logger.debug( "------------------ HttpResponseException " + e.getStatusCode() + " : getFinancialStatementTrialBalance -------------------"); logger.debug(e.toString()); } XeroApiExceptionHandler handler = new XeroApiExceptionHandler(); handler.execute(e); } catch (IOException ioe) { throw ioe; } return null; } /** * Get Trial Balance report The trial balance provides a detailed list of all accounts of an * organisation at a point in time, with revenue and expense items being year to date. * *

200 - Success * *

400 - Bad Request * * @param xeroTenantId Xero identifier for Tenant * @param endDate Date e.g. yyyy-MM-dd Specifies the end date for trial balance report If no * parameter is provided, the current date will be used. * @param accessToken Authorization token for user set in header of each request * @return HttpResponse * @throws IOException if an error occurs while attempting to invoke the API */ public HttpResponse getFinancialStatementTrialBalanceForHttpResponse( String accessToken, String xeroTenantId, String endDate) throws IOException { // verify the required parameter 'xeroTenantId' is set if (xeroTenantId == null) { throw new IllegalArgumentException( "Missing the required parameter 'xeroTenantId' when calling" + " getFinancialStatementTrialBalance"); } if (accessToken == null) { throw new IllegalArgumentException( "Missing the required parameter 'accessToken' when calling" + " getFinancialStatementTrialBalance"); } HttpHeaders headers = new HttpHeaders(); headers.set("xero-tenant-id", xeroTenantId); headers.setAccept("application/json"); headers.setUserAgent(this.getUserAgent()); UriBuilder uriBuilder = UriBuilder.fromUri(apiClient.getBasePath() + "/FinancialStatements/TrialBalance"); if (endDate != null) { String key = "endDate"; Object value = endDate; if (value instanceof Collection) { List valueList = new ArrayList<>((Collection) value); if (!valueList.isEmpty() && valueList.get(0) instanceof UUID) { List list = new ArrayList(); for (int i = 0; i < valueList.size(); i++) { list.add(valueList.get(i).toString()); } uriBuilder = uriBuilder.queryParam(key, String.join(",", list)); } else { uriBuilder = uriBuilder.queryParam(key, String.join(",", valueList)); } } else if (value instanceof Object[]) { uriBuilder = uriBuilder.queryParam(key, (Object[]) value); } else { uriBuilder = uriBuilder.queryParam(key, value); } } String url = uriBuilder.build().toString(); GenericUrl genericUrl = new GenericUrl(url); if (logger.isDebugEnabled()) { logger.debug("GET " + genericUrl.toString()); } HttpContent content = null; Credential credential = new Credential(BearerToken.authorizationHeaderAccessMethod()).setAccessToken(accessToken); HttpTransport transport = apiClient.getHttpTransport(); HttpRequestFactory requestFactory = transport.createRequestFactory(credential); return requestFactory .buildRequest(HttpMethods.GET, genericUrl, content) .setHeaders(headers) .setConnectTimeout(apiClient.getConnectionTimeout()) .setReadTimeout(apiClient.getReadTimeout()) .execute(); } /** * convert intput to byte array * * @param is InputStream the server status code returned * @return byteArrayInputStream a ByteArrayInputStream * @throws IOException for failed or interrupted I/O operations */ public ByteArrayInputStream convertInputToByteArray(InputStream is) throws IOException { byte[] bytes = IOUtils.toByteArray(is); try { // Process the input stream.. ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); return byteArrayInputStream; } finally { is.close(); } } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy