@aptly-as/types
Version:
Aptly types and enums
133 lines (132 loc) • 5.58 kB
TypeScript
import { Populated } from '../core/mongoose.js';
import { AptlyAddress, AptlySearchAddress } from './address.js';
import { AptlyAllowance, AptlyAllowanceChargeSchema, AptlyExtensionAmount, AptlyLegalMonetaryTotal } from './algorithm.js';
import { AptlyCompany, AptlyCompanySchema } from './company.js';
import { AptlyCustomerData, AptlyCustomerDataSchema } from './customer.js';
import { AptlyDocumentSchema } from './document.js';
import { AptlyBaseSchema } from './extends.js';
import { AptlyOptionPopulatedSchema, AptlyOptionSchema } from './option.js';
import { AptlyOrderPaymentStatus, AptlyOrderSchema } from './order.js';
import { AptlyOrganization, AptlyOrganizationSchema } from './organization.js';
import { AptlyPickSchema } from './pick.js';
import { AptlyProjectSchema } from './project.js';
import { AptlyUnitSchema } from './unit.js';
import { AptlyUserSchema } from './user.js';
import { AptlyCategorySchema } from './category';
import { AptlyApp, AptlyAppSchema } from './app';
export type AptlyOffer = AptlyOfferSchema<string, string>;
export interface AptlyOfferSchema<ID, DATE> extends AptlyBaseSchema<ID, DATE>, Omit<AptlyExtensionAmount, 'currency'> {
organization: ID | AptlyOrganizationSchema<ID, DATE> | null;
project: ID | AptlyProjectSchema<ID, DATE> | null;
unit: ID | AptlyUnitSchema<ID, DATE> | null;
order: ID | AptlyOrderSchema<ID, DATE> | null;
company: ID | AptlyCompanySchema<ID, DATE> | null;
document: ID | AptlyDocumentSchema<ID, DATE> | null;
categories: (ID | AptlyCategorySchema<ID, DATE>)[];
invoice: boolean;
apps: (ID | AptlyAppSchema<ID, DATE>)[];
createdBy: Populated<AptlyUserSchema<ID, DATE>> | null;
expiresAt: DATE | null;
sentAt: DATE | null;
number: number | null;
description: string;
identification: string;
incVAT: boolean;
hidePrices: boolean;
amount: number | null;
allowance?: AptlyAllowance | null;
algorithm: ID | null;
items: AptlyOfferItemSchema<ID, DATE>[];
customer: AptlyCustomerDataSchema<ID, DATE> | null;
shipping: AptlyAddress | null;
ourContact: Populated<AptlyUserSchema<ID, DATE>> | null;
openedAt: DATE | null;
acceptedAt: DATE | null;
acceptedBy: ID | AptlyUserSchema<ID, DATE> | null;
locked: boolean;
}
export type AptlyOfferItem = AptlyOfferItemSchema<string, string>;
export interface AptlyOfferItemSchema<ID, DATE> {
_id: ID;
option: ID | AptlyOptionSchema<ID, DATE>;
quantity: number;
amount: number;
title?: string;
algorithm: ID | null;
note: string;
createdAt?: DATE;
index: number;
allowance?: AptlyAllowance | null;
}
export type AptlyUserOffer = AptlyUserOfferSchema<string, string>;
export interface AptlyUserOfferSchema<ID, DATE> extends Omit<AptlyOfferSchema<ID, DATE>, 'amount' | 'items' | 'apps'> {
apps: Pick<AptlyAppSchema<ID, DATE>, '_id' | 'name' | 'implements'>[];
options: AptlyOptionPopulatedSchema<ID, DATE>[];
picks?: AptlyPickSchema<ID, DATE>[];
}
export interface AptlyOfferSendInvoiceBody {
invoice?: boolean;
apps?: (string | AptlyApp)[];
__hr?: undefined;
}
export interface AptlyOfferSendLinkBody {
email: string;
}
export interface AptlyOfferSendUnitBody extends AptlyOfferSendInvoiceBody {
unit: string;
address: AptlySearchAddress | null;
email?: string;
firstName?: string;
lastName?: string;
phone?: string;
}
export interface AptlyOfferSendPrivateBody extends AptlyOfferSendInvoiceBody, Omit<AptlyCustomerData, 'fullName' | 'user'> {
unit: string | null;
address: AptlySearchAddress | null;
}
export interface AptlyOfferSendCustomerBody extends AptlyOfferSendInvoiceBody, Omit<AptlyCustomerData, 'companyVat' | 'companyName' | 'user'> {
customer: string | null;
address: AptlySearchAddress | null;
shipping?: AptlyAddress | null;
}
export interface AptlyOfferSendCompanyBody extends AptlyOfferSendInvoiceBody, Omit<AptlyCustomerData, 'fullName' | 'user'> {
company: Pick<AptlyCompany, 'name' | 'vat' | 'email' | 'phone' | 'shipping' | 'billing'> & Pick<AptlyOrganization, 'address'>;
address: AptlyAddress;
}
export interface AptlyOfferQRBody {
src: string;
href: string;
}
export type AptlyPublicOfferCheckout = AptlyPublicOfferCheckoutSchema<string, string>;
export interface AptlyPublicOfferCheckoutSchema<ID, DATE> extends Pick<AptlyExtensionAmount, 'currency'> {
status: AptlyOrderPaymentStatus;
offer: Omit<AptlyUserOfferSchema<ID, DATE>, 'options'>;
options: AptlyOptionPopulatedSchema<ID, DATE>[];
organization: Pick<AptlyOrganizationSchema<ID, DATE>, 'name' | 'logoMedia'>;
project: Pick<AptlyProjectSchema<ID, DATE>, 'name' | 'paymentApp' | 'signApp'> | null;
unit: Pick<AptlyUnitSchema<ID, DATE>, '_id' | 'name'> | null;
order?: Pick<AptlyOrderSchema<ID, DATE>, '_id' | 'status' | 'paymentSession' | 'billing' | 'shippingDate'>;
app: Pick<AptlyAppSchema<ID, DATE>, '_id' | 'name' | 'implements'> | null;
actions: {
payment?: {
active: boolean;
};
sign?: {
active: boolean;
};
confirm?: {
active: boolean;
};
};
extensionAmount: number;
extensionVatAmount: number;
total: AptlyLegalMonetaryTotal;
allowanceCharges: AptlyAllowanceChargeSchema<ID, boolean>[];
terms?: AptlyDocumentSchema<ID, DATE> | null;
}
export interface AptlyPublicOfferAcceptBody {
customer: AptlyCustomerData;
shipping: AptlyAddress;
billing: AptlyAddress | null;
redirectUri: string;
}