UNPKG

@aptly-as/types

Version:
202 lines (201 loc) 7.21 kB
import { AptlyOrderStatus } from '../enums/index.js'; import { AptlyAddress } from './address.js'; import { AptlyAllowanceChargeSchema, AptlyLegalMonetaryTotal } from './algorithm.js'; import { AptlyAppImplementationSetting, AptlyAppSchema } from './app.js'; import { AptlyCustomerSchema } from './customer.js'; import { AptlyDocumentSchema } from './document.js'; import { AptlyEmailSchema } from './email.js'; import { AptlyOfferSchema } from './offer.js'; import { AptlyOrganizationAppConfigSchema, AptlyOrganizationSchema } from './organization.js'; import { AptlyPaymentSchema } from './payment.js'; import { AptlyPickConfirmedSchema } from './pick.js'; import { AptlyProductSchema } from './product.js'; import { AptlyProject, AptlyProjectPeriodSchema, AptlyProjectSchema } from './project.js'; import { AptlyUnit, AptlyUnitItemParamSchema, AptlyUnitSchema } from './unit.js'; import { AptlyBaseSchema } from './extends.js'; import { AptlyUser, AptlyUserSchema } from './user.js'; import { Populated } from '../core'; export declare enum AptlyOrderPaymentStatus { Pending = "PENDING", Authorized = "AUTHORIZED", OnHold = "ON_HOLD", Captured = "CAPTURED", Expired = "EXPIRED" } export type AptlyOrder = AptlyOrderSchema<string, string>; export interface AptlyOrderSchema<ID, DATE> extends Omit<AptlyBaseSchema<ID, DATE>, 'name'> { orderNumber: string; invoiceNumber?: number; organization: ID | AptlyOrganizationSchema<ID, DATE>; project: ID | AptlyProjectSchema<ID, DATE>; period?: ID | AptlyProjectPeriodSchema<ID, DATE>; unit: ID | AptlyUnitSchema<ID, DATE>; offer: ID | AptlyOfferSchema<ID, DATE> | null; signers: (ID | AptlyUserSchema<ID, DATE>)[]; status: AptlyOrderStatus; receipt: ID | AptlyDocumentSchema<ID, DATE>; signedReceipt?: ID | AptlyDocumentSchema<ID, DATE>; attachments: ID[]; signage: AptlyOrderSignageSchema<ID, DATE>; items: AptlyOrderItemSchema<ID, DATE>[]; picks: (ID | AptlyPickConfirmedSchema<ID, DATE>)[]; documents: (ID | AptlyDocumentSchema<ID, DATE>)[]; amount?: number; vatAmount?: number; totalVat?: number; totalCost: number; total?: AptlyLegalMonetaryTotal | null; allowanceCharges: AptlyAllowanceChargeSchema<ID, boolean>[]; customer?: AptlyCustomerSchema<ID, DATE>; shipping?: AptlyAddress; billing?: AptlyAddress; pricePipeline: AptlyOrderPricePipelineItemSchema<ID>[]; signees?: AptlyOrderSigneeSchema<ID, DATE>[]; signedAt?: DATE | null; emailText?: string; approved?: { action?: AptlyOrderAction; user?: ID | AptlyUserSchema<ID, DATE>; at?: DATE; }; paymentSession?: AptlyOrderPaymentSessionSchema<ID, DATE> | null; payment?: ID | AptlyPaymentSchema<ID, DATE>; shippingDate?: DATE; shippingDescription?: string; completedAt?: DATE | null; createdBy?: Populated<AptlyUserSchema<ID, DATE>> | null; createdByAdmin?: boolean; created: DATE; } export type AptlyOrderPaymentSession = AptlyOrderPaymentSessionSchema<string, string>; export interface AptlyOrderPaymentSessionSchema<ID, DATE> { app?: ID | AptlyAppSchema<ID, DATE>; status?: AptlyOrderPaymentStatus; user?: ID | null; id?: string; at?: DATE | null; url?: string; notifiedAt?: DATE | null; expiresAt?: DATE | null; paidAt?: DATE | null; capturedAt?: DATE | null; } export type AptlyOrderSignee = AptlyOrderSigneeSchema<string, string>; export interface AptlyOrderSigneeSchema<ID, DATE> { _id: ID; user: ID | AptlyUserSchema<ID, DATE>; type: AptlyOrderSigneeType; url: string; signedAt?: DATE; } export declare enum AptlyOrderSigneeType { Unit = 0, Admin = 1 } export type AptlyOrderPricePipelineItem = AptlyOrderPricePipelineItemSchema<string>; export interface AptlyOrderPricePipelineItemSchema<ID> { _id: ID; label: string; value: number; } export type AptlyOrderSignage = AptlyOrderSignageSchema<string, string>; export interface AptlyOrderSignageSchema<ID, DATE> { signed: boolean; app?: ID | AptlyAppSchema<ID, DATE>; createdAt?: DATE | null; expiresAt?: DATE | null; signedAt?: DATE | null; notifiedAt?: DATE | null; document?: ID | AptlyDocumentSchema<ID, DATE>; hasReceivedFile?: boolean; signedFile?: ID | AptlyDocumentSchema<ID, DATE>; documentId?: ID; documentCreationDate?: DATE; expireDate?: DATE; customerSignerId?: string; organizationSignerId?: string; organizationSignedAt?: DATE; customerSignedAt?: DATE; } export type AptlyOrderItem = AptlyOrderItemSchema<string, string>; export interface AptlyOrderItemSchema<ID, DATE> { _id: ID; text?: string; product: ID | AptlyProductSchema<ID, DATE>; variant: ID; producer: ID; params: AptlyUnitItemParamSchema<ID, DATE>[]; quantity: number; baseCost?: number; unitCost: number; unitVat?: number; vat?: number; pricePipeline: AptlyOrderItemPricePipelineSchema<ID>[]; } export type AptlyOrderItemPricePipeline = AptlyOrderItemPricePipelineSchema<string>; export interface AptlyOrderItemPricePipelineSchema<ID> { _id: ID; label: string; value: number; } export declare enum AptlyOrderAction { Complete = "complete", Delivery = "delivery", Payment = "payment", SignManually = "sign-manually", Sign = "sign" } export interface AptlyOrderActionPostBody { action: AptlyOrderAction | null; document?: string | null; app?: string; emailSubject: string; emailText: string; emailMarkdown: string; users: AptlyOrderActionPostBodyUser[]; deadlineInDays?: number; shippingDate?: string | null; shippingDescription?: string | null; } export interface AptlyOrderActionPostBodyUser { user: string; signMethod?: string; isAdmin?: boolean; } export type AptlyOrderActionItem<S extends object = object> = AptlyOrderActionItemSchema<string, string, S>; export interface AptlyOrderActionItemSchema<ID, DATE, S extends object> { action: AptlyOrderAction; path: string; app?: Pick<AptlyAppSchema<ID, DATE>, '_id' | 'name' | 'sign' | 'logo' | 'settings'>; appSettings?: AptlyOrganizationAppConfigSchema<ID, DATE, S>['settings']; email?: AptlyEmailSchema<ID, DATE>; } export interface AptlyOrderActionItemSignSettings { [AptlyAppImplementationSetting.SignCostPer]: number; [AptlyAppImplementationSetting.SignMethod]: string; } export interface AptlyOrderActionSignData { project: Pick<AptlyProject, '_id' | 'name'> & { theme: Pick<AptlyProject['theme'], 'contact'>; }; unit: Pick<AptlyUnit, '_id' | 'name'>; order: Pick<AptlyOrder, '_id' | 'orderNumber' | 'receipt' | 'period'>; user: AptlyUser; signees: AptlyOrderActionSignDataSignee[]; deadlineInDays?: number; } export interface AptlyOrderActionSignDataSignee { user: AptlyUser; signMethod?: string; isAdmin?: boolean; } export interface AptlyOrderDeliveryBody { shippingDate: string; shippingDescription?: string; } export interface AptlyOrderCompleteBody { emailSubject?: string; emailText?: string; emailMarkdown?: string; skipEmail?: boolean; }