UNPKG

@aptly-as/types

Version:
258 lines (257 loc) 9.03 kB
import { AptlyScopeSchema } from '../core/index.js'; import { AptlyAddress } from './address.js'; import { AptlyCategorySchema } from './category.js'; import { AptlyDocumentSchema } from './document.js'; import { AptlyInviteSchema } from './invite.js'; import { AptlyOrderSchema } from './order.js'; import { AptlyPeriodSchema } from './period.js'; import { AptlyProducerSchema } from './producer.js'; import { AptlyProductSchema } from './product.js'; import { AptlyProjectSchema } from './project.js'; import { AptlyHistorySchema } from './extends.js'; import { AptlyUnitTemplateBaseSchema, AptlyUnitTemplateCategorySchema, AptlyUnitTemplateCategorySectionSchema, AptlyUnitTemplateSchema } from './unit-template'; import { AptlyIntegration, AptlyUnitItemParamKey, AptlyUnitStatus } from '../enums/index.js'; import { AptlyUserSchema } from './user.js'; import { AptlyOrganizationSchema } from './organization.js'; import { AptlyCustomerSchema } from './customer.js'; export type AptlyUnitContent = AptlyUnitContentSchema<string, string>; export type AptlyUnitContentSchema<ID, DATE> = Pick<AptlyUnitSchema<ID, DATE>, '_id' | 'name' | 'address' | 'shipping' | 'billing'>; export type AptlyUnit = AptlyUnitSchema<string, string>; export interface AptlyUnitSchema<ID, DATE> extends AptlyUnitTemplateBaseSchema<ID, DATE>, AptlyUnitEditData<DATE>, AptlyHistorySchema<ID, DATE> { status: AptlyUnitStatus; vat?: string; addressHash?: string; shipping?: AptlyAddress; billing?: AptlyAddress; rooms: AptlyUnitRoomSchema<ID, DATE>[]; selectedOptions: AptlyUnitSelectedOptionSchema<ID, DATE>[]; items: AptlyUnitOptionItemSchema<ID, DATE>[]; revertedOptions?: AptlyUnitOptionItemSchema<ID, DATE>[]; revertedItems?: AptlyUnitOptionItemSchema<ID, DATE>[]; extraOptions: AptlyUnitOptionExtraItemSchema<ID, DATE>[]; categoryOverrides: AptlyUnitCategoryOverrideSchema<ID>[]; productOverrides: AptlyUnitProductOverrideSchema<ID>[]; ordersToSign: ID[]; categoriesRead: ID[]; spec: AptlyUnitSpec<ID>; buildStep: number; documents: (AptlyDocumentSchema<ID, DATE> | ID)[]; unitPlans: { image: string; description?: string; }[]; organization: AptlyOrganizationSchema<ID, DATE> | ID; project: AptlyProjectSchema<ID, DATE> | ID; users: (AptlyUserSchema<ID, DATE> | ID)[]; customers: (AptlyCustomerSchema<ID, DATE> | ID)[]; unitTemplate?: ID | AptlyUnitTemplateSchema<ID, DATE> | null; unitTemplateEjected?: boolean; confirmedPeriods: AptlyUnitConfirmedPeriodSchema<ID, DATE>[]; queueInvites: string[]; invites: AptlyUnitInviteSchema<ID, DATE>[]; invitesQueue: AptlyUnitInviteQueueSchema[]; overridePeriod?: ID; overridePeriods?: AptlyUnitOverridePeriodSchema<ID, DATE>[]; integrations: AptlyUnitIntegrationSchema<ID>[]; gdpr?: AptlyUnitGDPRSchema<DATE, ID>; tree: any[]; scope?: AptlyScopeSchema; activatedAt: DATE | null; created: DATE; } interface AptlyUnitGDPRSchema<DATE, ID> { approved: boolean; approvedAt: DATE | null; documents: ID[]; users: ID[]; } export type AptlyUnitOverridePeriod = AptlyUnitOverridePeriodSchema<string, string>; export interface AptlyUnitOverridePeriodSchema<ID, DATE> { _id: ID; period: ID; close: DATE; } export type AptlyUnitItemBase = AptlyUnitItemBaseSchema<string, string>; export interface AptlyUnitItemBaseSchema<ID, DATE> { _id: ID; product: ID | AptlyProductSchema<ID, DATE>; variant: ID; producer: ID | AptlyProducerSchema<ID, DATE>; category?: ID | AptlyUnitTemplateCategorySchema<ID, DATE>; section?: ID | AptlyUnitTemplateCategorySectionSchema<ID, DATE>; period?: ID; quantity: number; standard?: boolean; pickDate: string; confirmDate?: DATE; pickedBy: ID; text?: string; params: AptlyUnitItemParamSchema<ID>[]; baseCost?: number; } export type AptlyUnitOption = AptlyUnitSelectedOptionSchema<string, string>; export interface AptlyUnitSelectedOptionSchema<ID, DATE> { _id: ID; category: ID | AptlyUnitTemplateCategorySchema<ID, DATE>; section: ID | AptlyUnitTemplateCategorySectionSchema<ID, DATE>; sectionProductRef: ID; product: ID | AptlyProductSchema<ID, DATE>; variant: ID; period: ID; quantity: number; pickDate: DATE; pickedBy: ID; confirmDate?: DATE; params: AptlyUnitItemParamSchema<ID>[]; package?: ID; assortment?: ID; standard?: boolean; text?: string; producer?: ID | AptlyProducerSchema<ID, DATE>; baseCost?: number; } export type AptlyUnitOptionItem = AptlyUnitOptionItemSchema<string, string>; export interface AptlyUnitOptionItemSchema<ID, DATE> extends AptlyUnitSelectedOptionSchema<ID, DATE> { unitCost: number; unitVat?: number; pickRef?: ID; order?: ID; } export type AptlyUnitOptionExtraItem = AptlyUnitOptionExtraItemSchema<string, string>; export interface AptlyUnitOptionExtraItemSchema<ID, DATE> extends AptlyUnitOptionItemSchema<ID, DATE> { _id: ID; unitCost: number; addToNextOrder?: boolean; text?: string; customDescription?: string; algorithm?: ID; projectItemRef?: ID; revertedOption?: boolean; revertItemRef?: ID; unitTemplateCategory?: ID; document?: ID; prerequisites?: { totalCost?: number; }; thirdPartyUploader?: string; cost: number; customTitle?: string; } export type AptlyUnitItemParam<VALUE> = AptlyUnitItemParamSchema<string, VALUE>; export interface AptlyUnitItemParamSchema<ID, VALUE = any> { _id: ID; key: AptlyUnitItemParamKey; value: VALUE; downloadToken?: string; } export type AptlyUnitRoom = AptlyUnitRoomSchema<string, string>; export interface AptlyUnitRoomSchema<ID, DATE> { _id: ID; category?: ID | AptlyCategorySchema<ID, DATE> | null; name: string; sizeParams: AptlyUnitRoomSchemaSizeParamSchema<ID>[]; } export type AptlyUnitRoomSchemaSizeParam = AptlyUnitRoomSchemaSizeParamSchema<string>; export interface AptlyUnitRoomSchemaSizeParamSchema<ID> { _id: ID; key: string; value: number; } export type AptlyUnitCategoryOverride = AptlyUnitCategoryOverrideSchema<string>; export interface AptlyUnitCategoryOverrideSchema<ID> { _id: ID; category: ID; size: number; hide: boolean; } export type AptlyUnitProductOverride = AptlyUnitProductOverrideSchema<string>; export interface AptlyUnitProductOverrideSchema<ID> { _id: ID; sectionProductRef: ID; section: ID; amount?: number; unitCost?: number | null; algorithm?: ID | null; variantPrices?: AptlyUnitProductOverrideVariantPriceSchema<ID>[]; hide?: boolean; } export type AptlyUnitProductOverrideVariantPrice = AptlyUnitProductOverrideVariantPriceSchema<string>; export interface AptlyUnitProductOverrideVariantPriceSchema<ID> { _id: ID; variant: ID; price: number; } export interface AptlyUnitSpec<ID> { categories: { _id: ID; name: string; isRoom: boolean; size: number; sections: { name: string; standard: boolean; displayType: 'default'; }[]; }[]; } export type AptlyUnitConfirmedPeriod = AptlyUnitConfirmedPeriodSchema<string, string>; export interface AptlyUnitConfirmedPeriodSchema<ID, DATE> { _id: ID; period: ID; confirmed?: DATE; order?: ID | AptlyOrderSchema<ID, DATE>; } export type AptlyUnitIntegration = AptlyUnitIntegrationSchema<string>; export interface AptlyUnitIntegrationSchema<ID> { _id: ID; integration: AptlyIntegration; unit?: string; plantId?: string; tags?: string[]; } interface AptlyUnitEditData<DATE> { address?: string; zipCode?: string; city?: string; houseNumber?: string; entrance?: string; floor?: string; oldAddress?: string; storageNumber?: string; garageNumber?: string; garagePortNumber?: string; garagePowerID?: string; electricCar?: string; unitNumber?: string; countyNumber?: string; holdingNumber?: number; subHoldingNumber?: number; leaseNumber?: number; sectionNumber?: number; boligmappaNumber?: string; tapWaterID?: string; tapWaterID2?: string; hotWaterID?: string; hotWaterID2?: string; remoteHeatID?: string; gasID?: string; powerCabinetID?: string; powerCabinetMeasureID?: string; unitKeys?: number; postboxKeys?: number; electricKeys?: number; balconyKeys?: number; handoverDate?: DATE | null; } export interface AptlyUnitInviteQueueSchema { email: string; fullName?: string; phone?: string; } export interface AptlyUnitInviteSchema<ID, DATE> extends AptlyInviteSchema<ID, DATE> { newOwner: boolean; allowAsGuest?: boolean; } export type AptlyUnitPeriod = AptlyUnitPeriodSchema<string, string>; export type AptlyUnitPeriodSchema<ID, DATE> = AptlyPeriodSchema<ID, DATE> & Pick<AptlyUnitConfirmedPeriodSchema<ID, DATE>, 'confirmed' | 'order'>; export {};