import { DefaultEntityTypes } from "~/application/dtos/shared/DefaultEntityTypes"; import { PropertyAttributeName } from "~/application/enums/entities/PropertyAttributeName"; import { Colors } from "~/application/enums/shared/Colors"; import { EntitiesTemplateDto } from "./EntityTemplateDto"; type LanguageScopedEntitiesTemplateDto = EntitiesTemplateDto & { defaultLanguage: "en"; languages: readonly ["en"]; }; const ENGLISH_TEMPLATE_SCOPE = { defaultLanguage: "en", languages: ["en"], } as const; export const CRM_ENTITIES_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [ { type: DefaultEntityTypes.AdminOnly, name: "company", slug: "companies", title: "models.company.object", titlePlural: "models.company.plural", prefix: "CRM-COM", icon: ' ', showInSidebar: false, properties: [ { name: "name", title: "models.company.name", type: "string", isRequired: true, isDisplay: true }, { name: "address", title: "models.company.address", type: "string" }, { name: "phone", title: "models.company.phone", type: "string" }, { name: "source", title: "models.company.source", type: "select", options: [ { value: "email", name: "models.company.sourceOptions.email" }, { value: "website", name: "models.company.sourceOptions.website" }, { value: "social", name: "models.company.sourceOptions.social" }, ], }, { name: "logo", title: "models.company.logo", type: "media" }, ], }, { type: DefaultEntityTypes.AdminOnly, name: "opportunity", slug: "opportunities", title: "models.opportunity.object", titlePlural: "models.opportunity.plural", prefix: "CRM-OPP", icon: ' ', showInSidebar: false, properties: [ { name: "name", title: "models.opportunity.name", type: "string", isDisplay: true }, { name: "value", title: "models.opportunity.value", type: "number", isDisplay: true }, { name: "expectedCloseDate", title: "models.opportunity.expectedCloseDate", type: "date" }, ], views: [ { layout: "table", name: "open", title: "models.opportunity.views.open", isDefault: true, properties: ["name", "value", "expectedCloseDate"], filters: [], }, { layout: "table", name: "opportunities", title: "models.opportunity.views.opportunities", properties: ["folio", "name", "value", "expectedCloseDate", "createdAt"], }, ], }, { type: DefaultEntityTypes.AdminOnly, name: "contact", slug: "contacts", title: "models.contact.object", titlePlural: "models.contact.plural", prefix: "CRM-CTC", icon: ' ', showInSidebar: false, properties: [ { name: "firstName", title: "models.contact.firstName", type: "string", isRequired: true, isDisplay: true }, { name: "lastName", title: "models.contact.lastName", type: "string", isRequired: true, isDisplay: true }, { name: "email", title: "models.contact.email", type: "string", isRequired: true, isDisplay: true }, { name: "jobTitle", title: "models.contact.jobTitle", type: "string" }, { name: "status", title: "models.contact.status", type: "select", options: [ { value: "lead", name: "models.contact.statusOptions.lead", color: Colors.YELLOW }, { value: "contact", name: "models.contact.statusOptions.contact", color: Colors.GREEN }, { value: "customer", name: "models.contact.statusOptions.customer", color: Colors.INDIGO }, ], attributes: [ { name: PropertyAttributeName.DefaultValue, value: "lead", }, ], }, { name: "marketingSubscriber", title: "models.contact.marketingSubscriber", type: "boolean" }, ], }, { type: DefaultEntityTypes.AdminOnly, name: "submission", slug: "submissions", title: "models.submission.object", titlePlural: "models.submission.plural", prefix: "CRM-SUB", icon: ' ', showInSidebar: false, properties: [ { name: "users", title: "models.submission.users", type: "string" }, { name: "message", title: "models.submission.message", type: "string", isDisplay: true }, ], }, ], relationships: [ { parent: "company", child: "contact", order: 1, type: "one-to-many", required: false }, { parent: "company", child: "opportunity", order: 2, type: "one-to-many", required: false }, { parent: "contact", child: "submission", order: 3, type: "one-to-many", required: false }, ], }; export const TENANT_SETTINGS_ENTITIES_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [ { type: "system", name: "tenantSettings", slug: "tenant-settings", title: "models.tenantSettings.object", titlePlural: "models.tenantSettings.plural", prefix: "TNS", properties: [ { name: "website", title: "models.tenantSettings.website", type: "string", subtype: "url", isRequired: true, isDisplay: true, isReadOnly: false, showInCreate: false, attributes: [ { name: "Placeholder", value: "https://website.co", }, ], }, ], isAutogenerated: false, hasApi: false, active: false, hasTags: false, hasComments: false, hasTasks: false, defaultVisibility: "tenant", onCreated: "redirectToOverview", onEdit: "editRoute", }, ], relationships: [], }; export const EMPLOYEES_ENTITIES_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [ { type: "app", name: "employee", slug: "employees", title: "models.employee.object", titlePlural: "models.employee.plural", prefix: "EMP", properties: [ { name: "firstName", title: "models.employee.firstName", type: "string", isRequired: true, isDisplay: true, isReadOnly: false, showInCreate: true, }, { name: "lastName", title: "models.employee.lastName", type: "string", isRequired: true, isDisplay: true, isReadOnly: false, showInCreate: true, }, { name: "email", title: "models.employee.email", type: "string", subtype: "email", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "pattern", value: "[a-zA-Z0-9._%+-]+@[a-z0-9.-]+.[a-zA-Z]{2,4}", }, ], }, { name: "salary", title: "models.employee.salary", type: "number", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "FormatNumber", value: "currency", }, ], }, { name: "status", title: "shared.status", type: "select", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, options: [ { value: "active", name: "models.employee.status.options.active", color: 10, }, { value: "on_leave", name: "models.employee.status.options.on_leave", color: 8, }, { value: "dismissed", name: "models.employee.status.options.dismissed", color: 2, }, ], }, { name: "photo", title: "models.employee.photo", type: "media", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Max", value: "1", }, { name: "AcceptFileTypes", value: "image/png, image/gif, image/jpeg", }, { name: "MaxSize", value: "2", }, ], }, { name: "pdf", title: "models.employee.pdf", type: "media", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "AcceptFileTypes", value: ".pdf", }, ], }, ], isAutogenerated: true, hasApi: true, icon: ' ', active: true, hasTags: false, hasComments: false, hasTasks: false, }, ], relationships: [], }; export const CONTRACTS_ENTITIES_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [ { type: "app", name: "contract", slug: "contracts", title: "Contract", titlePlural: "Contracts", prefix: "CON", properties: [ { name: "name", title: "Name", type: "string", isRequired: true, isDisplay: true, isReadOnly: false, showInCreate: true, }, { name: "type", title: "Type", type: "select", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "DefaultValue", value: "typeB", }, ], options: [ { value: "typeA", name: "Type A", color: 15, }, { value: "typeB", name: "Type B", color: 5, }, ], }, { name: "description", title: "Description", type: "string", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Rows", value: "3", }, ], }, { name: "document", title: "Document", type: "media", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Min", value: "1", }, { name: "Max", value: "1", }, { name: "AcceptFileTypes", value: ".pdf", }, { name: "MaxSize", value: "20", }, ], }, { name: "documentSigned", title: "Document Signed", type: "media", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: false, attributes: [ { name: "AcceptFileTypes", value: ".pdf", }, { name: "Max", value: "1", }, { name: "MaxSize", value: "20", }, ], }, { name: "attachments", title: "Attachments", type: "media", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "estimatedAmount", title: "Estimated Amount", type: "number", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "FormatNumber", value: "decimal", }, ], }, { name: "realAmount", title: "Real amount", type: "number", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: false, attributes: [ { name: "FormatNumber", value: "currency", }, ], }, { name: "active", title: "Active", type: "boolean", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "FormatBoolean", value: "activeInactive", }, ], }, { name: "estimatedCompletionDate", title: "Estimated Completion Date", type: "date", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "FormatDate", value: "diff", }, ], }, { name: "realCompletionDate", title: "Real Completion Date", type: "date", isRequired: false, isDisplay: false, isReadOnly: false, showInCreate: false, attributes: [ { name: "FormatDate", value: "YYYY-MM-DD", }, ], }, ], isAutogenerated: true, hasApi: true, icon: ' ', active: true, hasTags: false, hasComments: false, hasTasks: false, }, ], relationships: [], }; export const ALL_PROPERTY_TYPES_ENTITY_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [ { type: "app", name: "allPropertyTypesEntity", slug: "all-property-types-entity", title: "models.allPropertyTypesEntity.object", titlePlural: "models.allPropertyTypesEntity.plural", prefix: "ALL", properties: [ { name: "textSingleLine", title: "models.allPropertyTypesEntity.textSingleLine", type: "string", subtype: "singleLine", isRequired: true, isDisplay: true, isReadOnly: false, showInCreate: true, }, { name: "textEmail", title: "models.allPropertyTypesEntity.textEmail", type: "string", subtype: "email", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "textPhone", title: "models.allPropertyTypesEntity.textPhone", type: "string", subtype: "phone", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "textUrl", title: "models.allPropertyTypesEntity.textUrl", type: "string", subtype: "url", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "number", title: "models.allPropertyTypesEntity.number", type: "number", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "date", title: "models.allPropertyTypesEntity.date", type: "date", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "singleSelectDropdown", title: "models.allPropertyTypesEntity.singleSelectDropdown", type: "select", subtype: "dropdown", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, options: [ { value: "option_1", name: "models.allPropertyTypesEntity.options.option_1", color: 0, }, { value: "option_2", name: "models.allPropertyTypesEntity.options.option_2", color: 0, }, { value: "option_3", name: "models.allPropertyTypesEntity.options.option_3", color: 0, }, ], }, { name: "singleSelectRadioGroupCards", title: "models.allPropertyTypesEntity.singleSelectRadioGroupCards", type: "select", subtype: "radioGroupCards", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, options: [ { value: "option_1", name: "models.allPropertyTypesEntity.options.option_1", color: 0, }, { value: "option_2", name: "models.allPropertyTypesEntity.options.option_2", color: 0, }, { value: "option_3", name: "models.allPropertyTypesEntity.options.option_3", color: 0, }, ], }, { name: "boolean", title: "models.allPropertyTypesEntity.boolean", type: "boolean", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "media", title: "models.allPropertyTypesEntity.media", type: "media", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "multiSelectCombobox", title: "models.allPropertyTypesEntity.multiSelectCombobox", type: "multiSelect", subtype: "combobox", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, options: [ { value: "option_1", name: "models.allPropertyTypesEntity.options.option_1", color: 0, }, { value: "option_2", name: "models.allPropertyTypesEntity.options.option_2", color: 0, }, { value: "option_3", name: "models.allPropertyTypesEntity.options.option_3", color: 0, }, ], }, { name: "multiSelectCheckboxCards", title: "models.allPropertyTypesEntity.multiSelectCheckboxCards", type: "multiSelect", subtype: "checkboxCards", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, options: [ { value: "option_1", name: "models.allPropertyTypesEntity.options.option_1", color: 0, }, { value: "option_2", name: "models.allPropertyTypesEntity.options.option_2", color: 0, }, { value: "option_3", name: "models.allPropertyTypesEntity.options.option_3", color: 0, }, ], }, { name: "numberRange", title: "models.allPropertyTypesEntity.numberRange", type: "rangeNumber", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "dateRange", title: "models.allPropertyTypesEntity.dateRange", type: "rangeDate", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, }, { name: "multiText", title: "models.allPropertyTypesEntity.multiText", type: "multiText", subtype: null, isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Separator", value: ",", }, ], }, { name: "textMonaco", title: "models.allPropertyTypesEntity.textMonaco", type: "string", subtype: "singleLine", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "editor", value: "monaco", }, { name: "Columns", value: "NaN", }, { name: "EditorLanguage", value: "markdown", }, ], }, { name: "textWysiwyg", title: "models.allPropertyTypesEntity.textWysiwyg", type: "string", subtype: "singleLine", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Columns", value: "NaN", }, { name: "editor", value: "wysiwyg", }, { name: "EditorSize", value: "sm", }, ], }, { name: "textIframe", title: "models.allPropertyTypesEntity.textIframe", type: "string", subtype: "singleLine", isRequired: true, isDisplay: false, isReadOnly: false, showInCreate: true, attributes: [ { name: "Columns", value: "NaN", }, { name: "editor", value: "iframe", }, ], }, ], isAutogenerated: true, hasApi: true, icon: ' ', active: true, hasTags: false, hasComments: false, hasTasks: false, defaultVisibility: "tenant", onCreated: "redirectToOverview", onEdit: "editRoute", }, ], relationships: [], }; export const BOOKS_AND_AUTHORS_ENTITY_TEMPLATE: LanguageScopedEntitiesTemplateDto = { ...ENGLISH_TEMPLATE_SCOPE, entities: [], relationships: [], };