/* tslint:disable */
/* eslint-disable */
/**
 * Apideck
 * The Apideck OpenAPI Spec: SDK Optimized
 *
 * The version of the OpenAPI document: 10.13.0
 * Contact: support@apideck.com
 *
 * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
 * https://openapi-generator.tech
 * Do not edit the class manually.
 */

import {
  CreateDepartmentResponse,
  CreateDepartmentResponseFromJSON,
  CreateEmployeeResponse,
  CreateEmployeeResponseFromJSON,
  CreateHrisCompanyResponse,
  CreateHrisCompanyResponseFromJSON,
  CreateTimeOffRequestResponse,
  CreateTimeOffRequestResponseFromJSON,
  DeleteDepartmentResponse,
  DeleteDepartmentResponseFromJSON,
  DeleteEmployeeResponse,
  DeleteEmployeeResponseFromJSON,
  DeleteHrisCompanyResponse,
  DeleteHrisCompanyResponseFromJSON,
  DeleteTimeOffRequestResponse,
  DeleteTimeOffRequestResponseFromJSON,
  Department,
  DepartmentToJSON,
  Employee,
  EmployeesFilter,
  EmployeesOneFilter,
  EmployeesSort,
  EmployeeToJSON,
  GetDepartmentResponse,
  GetDepartmentResponseFromJSON,
  GetDepartmentsResponse,
  GetDepartmentsResponseFromJSON,
  GetEmployeePayrollResponse,
  GetEmployeePayrollResponseFromJSON,
  GetEmployeePayrollsResponse,
  GetEmployeePayrollsResponseFromJSON,
  GetEmployeeResponse,
  GetEmployeeResponseFromJSON,
  GetEmployeeSchedulesResponse,
  GetEmployeeSchedulesResponseFromJSON,
  GetEmployeesResponse,
  GetEmployeesResponseFromJSON,
  GetHrisCompaniesResponse,
  GetHrisCompaniesResponseFromJSON,
  GetHrisCompanyResponse,
  GetHrisCompanyResponseFromJSON,
  GetPayrollResponse,
  GetPayrollResponseFromJSON,
  GetPayrollsResponse,
  GetPayrollsResponseFromJSON,
  GetTimeOffRequestResponse,
  GetTimeOffRequestResponseFromJSON,
  GetTimeOffRequestsResponse,
  GetTimeOffRequestsResponseFromJSON,
  HrisCompany,
  HrisCompanyToJSON,
  PassThroughQuery,
  PayrollsFilter,
  TimeOffRequest,
  TimeOffRequestsFilter,
  TimeOffRequestToJSON,
  UpdateDepartmentResponse,
  UpdateDepartmentResponseFromJSON,
  UpdateEmployeeResponse,
  UpdateEmployeeResponseFromJSON,
  UpdateHrisCompanyResponse,
  UpdateHrisCompanyResponseFromJSON,
  UpdateTimeOffRequestResponse,
  UpdateTimeOffRequestResponseFromJSON
} from '../models'
import * as runtime from '../runtime'

export interface HrisApiCompaniesAddRequest {
  company: HrisCompany
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface HrisApiCompaniesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiCompaniesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiCompaniesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface HrisApiCompaniesUpdateRequest {
  id: string
  company: HrisCompany
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiDepartmentsAddRequest {
  department: Department
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface HrisApiDepartmentsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiDepartmentsDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiDepartmentsOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface HrisApiDepartmentsUpdateRequest {
  id: string
  department: Department
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiEmployeePayrollsAllRequest {
  employeeId: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  filter?: PayrollsFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiEmployeePayrollsOneRequest {
  payrollId: string
  employeeId: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface HrisApiEmployeeSchedulesAllRequest {
  employeeId: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiEmployeesAddRequest {
  employee: Employee
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface HrisApiEmployeesAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: EmployeesFilter
  sort?: EmployeesSort
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiEmployeesDeleteRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiEmployeesOneRequest {
  id: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
  filter?: EmployeesOneFilter
  passThrough?: PassThroughQuery
}

export interface HrisApiEmployeesUpdateRequest {
  id: string
  employee: Employee
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiPayrollsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  filter?: PayrollsFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiPayrollsOneRequest {
  payrollId: string
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  fields?: string | null
}

export interface HrisApiTimeOffRequestsAddRequest {
  timeOffRequest: TimeOffRequest
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
}

export interface HrisApiTimeOffRequestsAllRequest {
  raw?: boolean
  consumerId?: string
  appId?: string
  serviceId?: string
  cursor?: string | null
  limit?: number
  filter?: TimeOffRequestsFilter
  passThrough?: PassThroughQuery
  fields?: string | null
}

export interface HrisApiTimeOffRequestsDeleteRequest {
  id: string
  employeeId: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

export interface HrisApiTimeOffRequestsOneRequest {
  id: string
  employeeId: string
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
  fields?: string | null
}

export interface HrisApiTimeOffRequestsUpdateRequest {
  id: string
  employeeId: string
  timeOffRequest: TimeOffRequest
  consumerId?: string
  appId?: string
  serviceId?: string
  raw?: boolean
}

/**
 *
 */
export class HrisApi extends runtime.BaseAPI {
  /**
   * Create Company
   * Create Company
   */
  async companiesAddRaw(
    requestParameters: HrisApiCompaniesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateHrisCompanyResponse>> {
    if (requestParameters.company === null || requestParameters.company === undefined) {
      throw new runtime.RequiredError(
        'company',
        'Required parameter requestParameters.company was null or undefined when calling companiesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/companies`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: HrisCompanyToJSON(requestParameters.company)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateHrisCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Company
   * Create Company
   */
  async companiesAdd(
    requestParameters: HrisApiCompaniesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateHrisCompanyResponse> {
    const response = await this.companiesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Companies
   * List Companies
   */
  async companiesAllRaw(
    requestParameters: HrisApiCompaniesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetHrisCompaniesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/companies`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetHrisCompaniesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List Companies
   * List Companies
   */
  async companiesAll(
    requestParameters: HrisApiCompaniesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetHrisCompaniesResponse> {
    const response = await this.companiesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Company
   * Delete Company
   */
  async companiesDeleteRaw(
    requestParameters: HrisApiCompaniesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteHrisCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteHrisCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Company
   * Delete Company
   */
  async companiesDelete(
    requestParameters: HrisApiCompaniesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteHrisCompanyResponse> {
    const response = await this.companiesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Company
   * Get Company
   */
  async companiesOneRaw(
    requestParameters: HrisApiCompaniesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetHrisCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetHrisCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Company
   * Get Company
   */
  async companiesOne(
    requestParameters: HrisApiCompaniesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetHrisCompanyResponse> {
    const response = await this.companiesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Company
   * Update Company
   */
  async companiesUpdateRaw(
    requestParameters: HrisApiCompaniesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateHrisCompanyResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling companiesUpdate.'
      )
    }

    if (requestParameters.company === null || requestParameters.company === undefined) {
      throw new runtime.RequiredError(
        'company',
        'Required parameter requestParameters.company was null or undefined when calling companiesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/companies/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: HrisCompanyToJSON(requestParameters.company)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateHrisCompanyResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Company
   * Update Company
   */
  async companiesUpdate(
    requestParameters: HrisApiCompaniesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateHrisCompanyResponse> {
    const response = await this.companiesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Department
   * Create Department
   */
  async departmentsAddRaw(
    requestParameters: HrisApiDepartmentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateDepartmentResponse>> {
    if (requestParameters.department === null || requestParameters.department === undefined) {
      throw new runtime.RequiredError(
        'department',
        'Required parameter requestParameters.department was null or undefined when calling departmentsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/departments`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: DepartmentToJSON(requestParameters.department)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateDepartmentResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Department
   * Create Department
   */
  async departmentsAdd(
    requestParameters: HrisApiDepartmentsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateDepartmentResponse> {
    const response = await this.departmentsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Departments
   * List Departments
   */
  async departmentsAllRaw(
    requestParameters: HrisApiDepartmentsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDepartmentsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/departments`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetDepartmentsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List Departments
   * List Departments
   */
  async departmentsAll(
    requestParameters: HrisApiDepartmentsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetDepartmentsResponse> {
    const response = await this.departmentsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Department
   * Delete Department
   */
  async departmentsDeleteRaw(
    requestParameters: HrisApiDepartmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteDepartmentResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Department
   * Delete Department
   */
  async departmentsDelete(
    requestParameters: HrisApiDepartmentsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteDepartmentResponse> {
    const response = await this.departmentsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Department
   * Get Department
   */
  async departmentsOneRaw(
    requestParameters: HrisApiDepartmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetDepartmentResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Department
   * Get Department
   */
  async departmentsOne(
    requestParameters: HrisApiDepartmentsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetDepartmentResponse> {
    const response = await this.departmentsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Department
   * Update Department
   */
  async departmentsUpdateRaw(
    requestParameters: HrisApiDepartmentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateDepartmentResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling departmentsUpdate.'
      )
    }

    if (requestParameters.department === null || requestParameters.department === undefined) {
      throw new runtime.RequiredError(
        'department',
        'Required parameter requestParameters.department was null or undefined when calling departmentsUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/departments/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: DepartmentToJSON(requestParameters.department)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateDepartmentResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Department
   * Update Department
   */
  async departmentsUpdate(
    requestParameters: HrisApiDepartmentsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateDepartmentResponse> {
    const response = await this.departmentsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List payrolls for employee
   * List Employee Payrolls
   */
  async employeePayrollsAllRaw(
    requestParameters: HrisApiEmployeePayrollsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetEmployeePayrollsResponse>> {
    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling employeePayrollsAll.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/payrolls/employees/{employee_id}`.replace(
          `{${'employee_id'}}`,
          encodeURIComponent(String(requestParameters.employeeId))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetEmployeePayrollsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List payrolls for employee
   * List Employee Payrolls
   */
  async employeePayrollsAll(
    requestParameters: HrisApiEmployeePayrollsAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetEmployeePayrollsResponse> {
    const response = await this.employeePayrollsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get payroll for employee
   * Get Employee Payroll
   */
  async employeePayrollsOneRaw(
    requestParameters: HrisApiEmployeePayrollsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetEmployeePayrollResponse>> {
    if (requestParameters.payrollId === null || requestParameters.payrollId === undefined) {
      throw new runtime.RequiredError(
        'payrollId',
        'Required parameter requestParameters.payrollId was null or undefined when calling employeePayrollsOne.'
      )
    }

    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling employeePayrollsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/payrolls/employees/{employee_id}/payrolls/{payroll_id}`
          .replace(`{${'payroll_id'}}`, encodeURIComponent(String(requestParameters.payrollId)))
          .replace(`{${'employee_id'}}`, encodeURIComponent(String(requestParameters.employeeId))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetEmployeePayrollResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get payroll for employee
   * Get Employee Payroll
   */
  async employeePayrollsOne(
    requestParameters: HrisApiEmployeePayrollsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetEmployeePayrollResponse> {
    const response = await this.employeePayrollsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List schedules for employee, a schedule is a work pattern, not the actual worked hours, for an employee.
   * List Employee Schedules
   */
  async employeeSchedulesAllRaw(
    requestParameters: HrisApiEmployeeSchedulesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetEmployeeSchedulesResponse>> {
    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling employeeSchedulesAll.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/schedules/employees/{employee_id}`.replace(
          `{${'employee_id'}}`,
          encodeURIComponent(String(requestParameters.employeeId))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetEmployeeSchedulesResponseFromJSON(jsonValue)
    )
  }

  /**
   * List schedules for employee, a schedule is a work pattern, not the actual worked hours, for an employee.
   * List Employee Schedules
   */
  async employeeSchedulesAll(
    requestParameters: HrisApiEmployeeSchedulesAllRequest,
    initOverrides?: RequestInit
  ): Promise<GetEmployeeSchedulesResponse> {
    const response = await this.employeeSchedulesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Employee
   * Create Employee
   */
  async employeesAddRaw(
    requestParameters: HrisApiEmployeesAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateEmployeeResponse>> {
    if (requestParameters.employee === null || requestParameters.employee === undefined) {
      throw new runtime.RequiredError(
        'employee',
        'Required parameter requestParameters.employee was null or undefined when calling employeesAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/employees`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: EmployeeToJSON(requestParameters.employee)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateEmployeeResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Employee
   * Create Employee
   */
  async employeesAdd(
    requestParameters: HrisApiEmployeesAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateEmployeeResponse> {
    const response = await this.employeesAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Apideck operates as a stateless Unified API, which means that the list endpoint only provides a portion of the employee model. This is due to the fact that most HRIS systems do not readily provide all data in every call. However, you can access the complete employee model through an employee detail call.
   * List Employees
   */
  async employeesAllRaw(
    requestParameters: HrisApiEmployeesAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetEmployeesResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.sort !== undefined) {
      queryParameters['sort'] = requestParameters.sort
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/employees`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetEmployeesResponseFromJSON(jsonValue)
    )
  }

  /**
   * Apideck operates as a stateless Unified API, which means that the list endpoint only provides a portion of the employee model. This is due to the fact that most HRIS systems do not readily provide all data in every call. However, you can access the complete employee model through an employee detail call.
   * List Employees
   */
  async employeesAll(
    requestParameters: HrisApiEmployeesAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetEmployeesResponse> {
    const response = await this.employeesAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Employee
   * Delete Employee
   */
  async employeesDeleteRaw(
    requestParameters: HrisApiEmployeesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteEmployeeResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling employeesDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/employees/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteEmployeeResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Employee
   * Delete Employee
   */
  async employeesDelete(
    requestParameters: HrisApiEmployeesDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteEmployeeResponse> {
    const response = await this.employeesDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Employee
   * Get Employee
   */
  async employeesOneRaw(
    requestParameters: HrisApiEmployeesOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetEmployeeResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling employeesOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/employees/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetEmployeeResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Employee
   * Get Employee
   */
  async employeesOne(
    requestParameters: HrisApiEmployeesOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetEmployeeResponse> {
    const response = await this.employeesOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Employee
   * Update Employee
   */
  async employeesUpdateRaw(
    requestParameters: HrisApiEmployeesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateEmployeeResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling employeesUpdate.'
      )
    }

    if (requestParameters.employee === null || requestParameters.employee === undefined) {
      throw new runtime.RequiredError(
        'employee',
        'Required parameter requestParameters.employee was null or undefined when calling employeesUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/employees/{id}`.replace(
          `{${'id'}}`,
          encodeURIComponent(String(requestParameters.id))
        ),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: EmployeeToJSON(requestParameters.employee)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateEmployeeResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Employee
   * Update Employee
   */
  async employeesUpdate(
    requestParameters: HrisApiEmployeesUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateEmployeeResponse> {
    const response = await this.employeesUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Payroll
   * List Payroll
   */
  async payrollsAllRaw(
    requestParameters: HrisApiPayrollsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPayrollsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/payrolls`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetPayrollsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List Payroll
   * List Payroll
   */
  async payrollsAll(
    requestParameters: HrisApiPayrollsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetPayrollsResponse> {
    const response = await this.payrollsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Payroll
   * Get Payroll
   */
  async payrollsOneRaw(
    requestParameters: HrisApiPayrollsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetPayrollResponse>> {
    if (requestParameters.payrollId === null || requestParameters.payrollId === undefined) {
      throw new runtime.RequiredError(
        'payrollId',
        'Required parameter requestParameters.payrollId was null or undefined when calling payrollsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/payrolls/{payroll_id}`.replace(
          `{${'payroll_id'}}`,
          encodeURIComponent(String(requestParameters.payrollId))
        ),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue => GetPayrollResponseFromJSON(jsonValue))
  }

  /**
   * Get Payroll
   * Get Payroll
   */
  async payrollsOne(
    requestParameters: HrisApiPayrollsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetPayrollResponse> {
    const response = await this.payrollsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Create Time Off Request
   * Create Time Off Request
   */
  async timeOffRequestsAddRaw(
    requestParameters: HrisApiTimeOffRequestsAddRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<CreateTimeOffRequestResponse>> {
    if (
      requestParameters.timeOffRequest === null ||
      requestParameters.timeOffRequest === undefined
    ) {
      throw new runtime.RequiredError(
        'timeOffRequest',
        'Required parameter requestParameters.timeOffRequest was null or undefined when calling timeOffRequestsAdd.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/time-off-requests`,
        method: 'POST',
        headers: headerParameters,
        query: queryParameters,
        body: TimeOffRequestToJSON(requestParameters.timeOffRequest)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      CreateTimeOffRequestResponseFromJSON(jsonValue)
    )
  }

  /**
   * Create Time Off Request
   * Create Time Off Request
   */
  async timeOffRequestsAdd(
    requestParameters: HrisApiTimeOffRequestsAddRequest,
    initOverrides?: RequestInit
  ): Promise<CreateTimeOffRequestResponse> {
    const response = await this.timeOffRequestsAddRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * List Time Off Requests
   * List Time Off Requests
   */
  async timeOffRequestsAllRaw(
    requestParameters: HrisApiTimeOffRequestsAllRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTimeOffRequestsResponse>> {
    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.cursor !== undefined) {
      queryParameters['cursor'] = requestParameters.cursor
    }

    if (requestParameters.limit !== undefined) {
      queryParameters['limit'] = requestParameters.limit
    }

    if (requestParameters.filter !== undefined) {
      queryParameters['filter'] = requestParameters.filter
    }

    if (requestParameters.passThrough !== undefined) {
      queryParameters['pass_through'] = requestParameters.passThrough
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/time-off-requests`,
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetTimeOffRequestsResponseFromJSON(jsonValue)
    )
  }

  /**
   * List Time Off Requests
   * List Time Off Requests
   */
  async timeOffRequestsAll(
    requestParameters: HrisApiTimeOffRequestsAllRequest = {},
    initOverrides?: RequestInit
  ): Promise<GetTimeOffRequestsResponse> {
    const response = await this.timeOffRequestsAllRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Delete Time Off Request
   * Delete Time Off Request
   */
  async timeOffRequestsDeleteRaw(
    requestParameters: HrisApiTimeOffRequestsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<DeleteTimeOffRequestResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling timeOffRequestsDelete.'
      )
    }

    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling timeOffRequestsDelete.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/time-off-requests/employees/{employee_id}/time-off-requests/{id}`
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id)))
          .replace(`{${'employee_id'}}`, encodeURIComponent(String(requestParameters.employeeId))),
        method: 'DELETE',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      DeleteTimeOffRequestResponseFromJSON(jsonValue)
    )
  }

  /**
   * Delete Time Off Request
   * Delete Time Off Request
   */
  async timeOffRequestsDelete(
    requestParameters: HrisApiTimeOffRequestsDeleteRequest,
    initOverrides?: RequestInit
  ): Promise<DeleteTimeOffRequestResponse> {
    const response = await this.timeOffRequestsDeleteRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Get Time Off Request
   * Get Time Off Request
   */
  async timeOffRequestsOneRaw(
    requestParameters: HrisApiTimeOffRequestsOneRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<GetTimeOffRequestResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling timeOffRequestsOne.'
      )
    }

    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling timeOffRequestsOne.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    if (requestParameters.fields !== undefined) {
      queryParameters['fields'] = requestParameters.fields
    }

    const headerParameters: runtime.HTTPHeaders = {}

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/time-off-requests/employees/{employee_id}/time-off-requests/{id}`
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id)))
          .replace(`{${'employee_id'}}`, encodeURIComponent(String(requestParameters.employeeId))),
        method: 'GET',
        headers: headerParameters,
        query: queryParameters
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      GetTimeOffRequestResponseFromJSON(jsonValue)
    )
  }

  /**
   * Get Time Off Request
   * Get Time Off Request
   */
  async timeOffRequestsOne(
    requestParameters: HrisApiTimeOffRequestsOneRequest,
    initOverrides?: RequestInit
  ): Promise<GetTimeOffRequestResponse> {
    const response = await this.timeOffRequestsOneRaw(requestParameters, initOverrides)
    return await response.value()
  }

  /**
   * Update Time Off Request
   * Update Time Off Request
   */
  async timeOffRequestsUpdateRaw(
    requestParameters: HrisApiTimeOffRequestsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<runtime.ApiResponse<UpdateTimeOffRequestResponse>> {
    if (requestParameters.id === null || requestParameters.id === undefined) {
      throw new runtime.RequiredError(
        'id',
        'Required parameter requestParameters.id was null or undefined when calling timeOffRequestsUpdate.'
      )
    }

    if (requestParameters.employeeId === null || requestParameters.employeeId === undefined) {
      throw new runtime.RequiredError(
        'employeeId',
        'Required parameter requestParameters.employeeId was null or undefined when calling timeOffRequestsUpdate.'
      )
    }

    if (
      requestParameters.timeOffRequest === null ||
      requestParameters.timeOffRequest === undefined
    ) {
      throw new runtime.RequiredError(
        'timeOffRequest',
        'Required parameter requestParameters.timeOffRequest was null or undefined when calling timeOffRequestsUpdate.'
      )
    }

    const queryParameters: any = {}

    if (requestParameters.raw !== undefined) {
      queryParameters['raw'] = requestParameters.raw
    }

    const headerParameters: runtime.HTTPHeaders = {}

    headerParameters['Content-Type'] = 'application/json'

    if (requestParameters.consumerId !== undefined && requestParameters.consumerId !== null) {
      headerParameters['x-apideck-consumer-id'] = String(requestParameters.consumerId)
    }

    if (requestParameters.appId !== undefined && requestParameters.appId !== null) {
      headerParameters['x-apideck-app-id'] = String(requestParameters.appId)
    }

    if (requestParameters.serviceId !== undefined && requestParameters.serviceId !== null) {
      headerParameters['x-apideck-service-id'] = String(requestParameters.serviceId)
    }

    if (this.configuration && this.configuration.apiKey) {
      headerParameters['Authorization'] = this.configuration.apiKey('Authorization') // apiKey authentication
    }

    const response = await this.request(
      {
        path: `/hris/time-off-requests/employees/{employee_id}/time-off-requests/{id}`
          .replace(`{${'id'}}`, encodeURIComponent(String(requestParameters.id)))
          .replace(`{${'employee_id'}}`, encodeURIComponent(String(requestParameters.employeeId))),
        method: 'PATCH',
        headers: headerParameters,
        query: queryParameters,
        body: TimeOffRequestToJSON(requestParameters.timeOffRequest)
      },
      initOverrides
    )

    return new runtime.JSONApiResponse(response, jsonValue =>
      UpdateTimeOffRequestResponseFromJSON(jsonValue)
    )
  }

  /**
   * Update Time Off Request
   * Update Time Off Request
   */
  async timeOffRequestsUpdate(
    requestParameters: HrisApiTimeOffRequestsUpdateRequest,
    initOverrides?: RequestInit
  ): Promise<UpdateTimeOffRequestResponse> {
    const response = await this.timeOffRequestsUpdateRaw(requestParameters, initOverrides)
    return await response.value()
  }
}
