@aptly-as/types
Version:
Aptly types and enums
251 lines (250 loc) • 8.77 kB
TypeScript
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';
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)[];
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[];
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> {
category: ID;
size: number;
hide: boolean;
}
export type AptlyUnitProductOverride = AptlyUnitProductOverrideSchema<string>;
export interface AptlyUnitProductOverrideSchema<ID> {
sectionProductRef: ID;
section: ID;
amount?: number;
unitCost?: number;
algorithm?: ID;
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 {};