UNPKG

@aptly-as/types

Version:
133 lines (132 loc) 5.58 kB
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; }