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; export type AptlyUnitContentSchema = Pick, '_id' | 'name' | 'address' | 'shipping' | 'billing'>; export type AptlyUnit = AptlyUnitSchema; export interface AptlyUnitSchema extends AptlyUnitTemplateBaseSchema, AptlyUnitEditData, AptlyHistorySchema { status: AptlyUnitStatus; vat?: string; addressHash?: string; shipping?: AptlyAddress; billing?: AptlyAddress; rooms: AptlyUnitRoomSchema[]; selectedOptions: AptlyUnitSelectedOptionSchema[]; items: AptlyUnitOptionItemSchema[]; revertedOptions?: AptlyUnitOptionItemSchema[]; revertedItems?: AptlyUnitOptionItemSchema[]; extraOptions: AptlyUnitOptionExtraItemSchema[]; categoryOverrides: AptlyUnitCategoryOverrideSchema[]; productOverrides: AptlyUnitProductOverrideSchema[]; ordersToSign: ID[]; categoriesRead: ID[]; spec: AptlyUnitSpec; buildStep: number; documents: (AptlyDocumentSchema | ID)[]; unitPlans: { image: string; description?: string; }[]; organization: AptlyOrganizationSchema | ID; project: AptlyProjectSchema | ID; users: (AptlyUserSchema | ID)[]; customers: (AptlyCustomerSchema | ID)[]; unitTemplate?: ID | AptlyUnitTemplateSchema | null; unitTemplateEjected?: boolean; confirmedPeriods: AptlyUnitConfirmedPeriodSchema[]; queueInvites: string[]; invites: AptlyUnitInviteSchema[]; invitesQueue: AptlyUnitInviteQueueSchema[]; overridePeriod?: ID; overridePeriods?: AptlyUnitOverridePeriodSchema[]; integrations: AptlyUnitIntegrationSchema[]; gdpr?: AptlyUnitGDPRSchema; tree: any[]; scope?: AptlyScopeSchema; activatedAt: DATE | null; created: DATE; } interface AptlyUnitGDPRSchema { approved: boolean; approvedAt: DATE | null; documents: ID[]; users: ID[]; } export type AptlyUnitOverridePeriod = AptlyUnitOverridePeriodSchema; export interface AptlyUnitOverridePeriodSchema { _id: ID; period: ID; close: DATE; } export type AptlyUnitItemBase = AptlyUnitItemBaseSchema; export interface AptlyUnitItemBaseSchema { _id: ID; product: ID | AptlyProductSchema; variant: ID; producer: ID | AptlyProducerSchema; category?: ID | AptlyUnitTemplateCategorySchema; section?: ID | AptlyUnitTemplateCategorySectionSchema; period?: ID; quantity: number; standard?: boolean; pickDate: string; confirmDate?: DATE; pickedBy: ID; text?: string; params: AptlyUnitItemParamSchema[]; baseCost?: number; } export type AptlyUnitOption = AptlyUnitSelectedOptionSchema; export interface AptlyUnitSelectedOptionSchema { _id: ID; category: ID | AptlyUnitTemplateCategorySchema; section: ID | AptlyUnitTemplateCategorySectionSchema; sectionProductRef: ID; product: ID | AptlyProductSchema; variant: ID; period: ID; quantity: number; pickDate: DATE; pickedBy: ID; confirmDate?: DATE; params: AptlyUnitItemParamSchema[]; package?: ID; assortment?: ID; standard?: boolean; text?: string; producer?: ID | AptlyProducerSchema; baseCost?: number; } export type AptlyUnitOptionItem = AptlyUnitOptionItemSchema; export interface AptlyUnitOptionItemSchema extends AptlyUnitSelectedOptionSchema { unitCost: number; unitVat?: number; pickRef?: ID; order?: ID; } export type AptlyUnitOptionExtraItem = AptlyUnitOptionExtraItemSchema; export interface AptlyUnitOptionExtraItemSchema extends AptlyUnitOptionItemSchema { _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 = AptlyUnitItemParamSchema; export interface AptlyUnitItemParamSchema { _id: ID; key: AptlyUnitItemParamKey; value: VALUE; downloadToken?: string; } export type AptlyUnitRoom = AptlyUnitRoomSchema; export interface AptlyUnitRoomSchema { _id: ID; category?: ID | AptlyCategorySchema | null; name: string; sizeParams: AptlyUnitRoomSchemaSizeParamSchema[]; } export type AptlyUnitRoomSchemaSizeParam = AptlyUnitRoomSchemaSizeParamSchema; export interface AptlyUnitRoomSchemaSizeParamSchema { _id: ID; key: string; value: number; } export type AptlyUnitCategoryOverride = AptlyUnitCategoryOverrideSchema; export interface AptlyUnitCategoryOverrideSchema { category: ID; size: number; hide: boolean; } export type AptlyUnitProductOverride = AptlyUnitProductOverrideSchema; export interface AptlyUnitProductOverrideSchema { sectionProductRef: ID; section: ID; amount?: number; unitCost?: number; algorithm?: ID; variantPrices?: AptlyUnitProductOverrideVariantPriceSchema[]; hide?: boolean; } export type AptlyUnitProductOverrideVariantPrice = AptlyUnitProductOverrideVariantPriceSchema; export interface AptlyUnitProductOverrideVariantPriceSchema { _id: ID; variant: ID; price: number; } export interface AptlyUnitSpec { categories: { _id: ID; name: string; isRoom: boolean; size: number; sections: { name: string; standard: boolean; displayType: 'default'; }[]; }[]; } export type AptlyUnitConfirmedPeriod = AptlyUnitConfirmedPeriodSchema; export interface AptlyUnitConfirmedPeriodSchema { _id: ID; period: ID; confirmed?: DATE; order?: ID | AptlyOrderSchema; } export type AptlyUnitIntegration = AptlyUnitIntegrationSchema; export interface AptlyUnitIntegrationSchema { _id: ID; integration: AptlyIntegration; unit?: string; plantId?: string; tags?: string[]; } interface AptlyUnitEditData { 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 extends AptlyInviteSchema { newOwner: boolean; allowAsGuest?: boolean; } export type AptlyUnitPeriod = AptlyUnitPeriodSchema; export type AptlyUnitPeriodSchema = AptlyPeriodSchema & Pick, 'confirmed' | 'order'>; export {};