@aptly-as/types
Version:
Aptly types and enums
202 lines (201 loc) • 7.21 kB
TypeScript
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;
}