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: [],
};