export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceAmountsDetails = {LaborAmount?: number | undefined, MaterialAmount?: number | undefined, TravelAmount?: number | undefined, FreightAmount?: number | undefined, OtherAmount?: number | undefined, OtherDescription?: string | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceTaxesDetails = {LaborTaxPercent?: number | undefined, MaterialTaxPercent?: number | undefined, TravelTaxPercent?: number | undefined, FreightTaxPercent?: number | undefined, OtherTaxPercent?: number | undefined, LaborTax?: number | undefined, MaterialTax?: number | undefined, TravelTax?: number | undefined, FreightTax?: number | undefined, OtherTax?: number | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesTax2Details = {Tax2Amount?: number | undefined, Tax2Name?: string | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesCreatingInvoiceTaxIncludedRequest = {LaborTaxIncluded?: string | undefined, TravelTaxIncluded?: string | undefined, MaterialTaxIncluded?: string | undefined, FreightTaxIncluded?: string | undefined, OtherTaxIncluded?: string | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceLaborWithPriceList = {PriceListId?: number | undefined, PriceListName?: string | undefined, SkillLevelName?: string | undefined, LaborTypeName?: string | undefined, SkillLevel?: string | undefined, LaborType?: string | undefined, NumOfTech?: string | undefined, HourlyRate?: number | undefined, Hours?: number | undefined, Amount?: number | undefined, IsOffShore?: boolean | undefined, ServiceType?: string | undefined, CityPerformed?: string | undefined, RateDiscrepancyReason?: string | undefined, isNontaxableVATEU?: boolean | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceMaterial = {Id?: number | undefined, InvoiceId?: number | undefined, Description?: string | undefined, PartNum?: string | undefined, UnitType?: string | undefined, UnitPrice?: number | undefined, PartName?: string | undefined, MarkUpPercent?: number | undefined, AgreedMarkUpPercent?: number | undefined, MarkUpDiscrepancyReason?: string | undefined, AgreedPartPrice?: number | undefined, Quantity?: number | undefined, Amount?: number | undefined, PriceDiscrepancyReason?: string | undefined, isNontaxableVATEU?: boolean | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceTravel = {Id?: number | undefined, InvoiceId?: number | undefined, Description?: string | undefined, UnitType?: string | undefined, UnitPrice?: number | undefined, Quantity?: number | undefined, Amount?: number | undefined, IsOffShore?: boolean | undefined, isNontaxableVATEU?: boolean | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceOther = {Id?: number | undefined, InvoiceId?: number | undefined, Description?: string | undefined, Type?: string | undefined, Amount?: number | undefined, UnitType?: string | undefined, UnitPrice?: number | undefined, Quantity?: number | undefined, AgreedUnitPrice?: number | undefined, UnitPriceDiscrepancyReason?: string | undefined, PriceListOtherChargeId?: number | undefined, isNontaxableVATEU?: boolean | undefined}; export type AddInvoiceAttachmentRequest = {Name?: string | undefined, Description?: string | undefined, Path?: string | undefined, Visibility?: number | undefined, IsInvoiceDigitalCopy?: boolean | undefined}; export type ServiceChannelServicesWebApiModelsRequestInvoicesCreateInvoiceRequest = {InvoiceNumber: string, InvoiceDate?: string | undefined, InvoiceDateDTO?: string | undefined, WoIdentifier: string, InvoiceTax?: number | undefined, PostedTaxRate?: number | undefined, NonTaxableLabor?: number | undefined, NonTaxableTravel?: number | undefined, NonTaxableMaterial?: number | undefined, NonTaxableFreight?: number | undefined, NonTaxableOther?: number | undefined, WithMismatchedRates?: boolean | undefined, InvoiceTotal?: number | undefined, InvoiceText?: string | undefined, InvoiceAmountsDetails?: ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceAmountsDetails | undefined, InvoiceTaxesDetails?: ServiceChannelServicesWebApiModelsRequestInvoicesInvoiceTaxesDetails | undefined, Tax2Details?: ServiceChannelServicesWebApiModelsRequestInvoicesTax2Details | undefined, TaxIncluded?: ServiceChannelServicesWebApiModelsRequestInvoicesCreatingInvoiceTaxIncludedRequest | undefined, Labors?: Array | undefined, Materials?: Array | undefined, Travels?: Array | undefined, Others?: Array | undefined, ExplainDispute?: string | undefined, SubmitDisputed?: boolean | undefined, VendorId?: number | undefined, Terms?: string | undefined, Attachments?: Array | undefined}; export type CreateApiInvoicesArgs = {body: ServiceChannelServicesWebApiModelsRequestInvoicesCreateInvoiceRequest}; export type CreateApiInvoicesOptions = {baseUrl?: string | undefined, oauth2?: string | undefined, fetch?: typeof fetch | undefined}; /** * Add an invoice to a work order * * POST /invoices */ export const createApiInvoices = async (args: CreateApiInvoicesArgs, options?: CreateApiInvoicesOptions) => { const {baseUrl = "https://sb2api.servicechannel.com/v3", fetch: fetchFn = fetch, oauth2} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") if (oauth2 !== undefined) headers.set('authorization', `Bearer ${oauth2}`) const url = `${baseUrl.replace(/\/+$/, '')}/invoices${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return undefined };