import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { ReceiptConfig } from ".."; import { IPropsContactDetail } from "../interfaces"; import { City } from "./City"; import { CodeRedemptionHistoryCompany } from "./CodeRedemptionHistoryCompany"; import { DiscountCodeUser } from "./DiscountCodeUser"; import { Local } from "./Local"; import { Partner } from "./Partner"; import { PartnerRole } from "./PartnerRole"; import { Plan } from "./Plan"; import { ProductTopping } from "./ProductTopping"; @Entity({ comment: "Tabla creada para las empresas de comida rápida que deseen registrarse en la plataforma.", }) export class Company { @PrimaryGeneratedColumn({ type: "int", comment: "Número de identificación (ID) único de cada empresa.", }) id: number; @Column({ length: 30, type: "varchar", unique: true, comment: "Código único de la empresa.", }) code: string; @Column({ length: 50, type: "varchar", comment: "Nombre de la empresa." }) name: string; @ManyToOne(() => City, (city) => city.companies, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }) @JoinColumn({ name: "city" }) city: City; @ManyToOne(() => Partner, (partner) => partner.companies, { onDelete: "CASCADE", onUpdate: "NO ACTION", }) @JoinColumn({ name: "partner" }) partner: Partner; @Column({ type: "json", nullable: true, default: null, comment: "Campo de tipo JSON donde se guarda información necesaria para la empresa.", }) profile: any | null; @Column({ type: "json", nullable: true, default: null, comment: "Campo de tipo JSON donde se guarda información para guardar el teléfono y el correo electrónico, también los nuevos valores qué tengan esos 2 campos.", }) contact_details: IPropsContactDetail | null; @Column({ type: "json", nullable: true, default: null, comment: "Información de tipo JSON donde se guarda la información legal de la empresa.", }) legal_information: any | null; @Column({ type: "json", nullable: true, default: null, comment: "Información de tipo JSON donde se guarda la información del representante legal del representante.", }) legal_agent: any | null; @Column({ type: "json", nullable: true, default: null, comment: "Configuración de la empresa.", }) settings: any | null; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP", comment: "Fecha creación de la empresa.", }) created: Date; @Column({ type: "date", nullable: true, default: null, comment: "Cuándo expira el plan de la empresa.", }) expiration: string | null; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP", onUpdate: "CURRENT_TIMESTAMP", comment: "Fecha de actualización de la empresa.", }) updated: Date; @Column({ default: 1, comment: "Estado de la empresa, es decir:\r\n1. Activo: Es visible en la plataforma.\r\n0. Inactivo: No será visible en la plataforma.", }) status: number; @OneToMany(() => Local, (local) => local.company) locals: Local[]; @OneToMany( () => CodeRedemptionHistoryCompany, (codeRedemptionHistoryCompany) => codeRedemptionHistoryCompany.company, ) code_redemption_history_company: CodeRedemptionHistoryCompany[]; @OneToMany( () => DiscountCodeUser, (discountCodeUser) => discountCodeUser.company, ) discount_code_users: DiscountCodeUser[]; @OneToMany(() => ProductTopping, (productTopping) => productTopping.company) product_toppings: ProductTopping[]; @OneToMany(() => Partner, (partner) => partner.company) partners_company: Partner[]; @OneToMany(() => PartnerRole, (partnerRole) => partnerRole.company) roles_company: PartnerRole[]; @OneToMany(() => Plan, (plan) => plan.company) plans_company: Plan[]; @OneToMany(() => ReceiptConfig, (receiptConfig) => receiptConfig.company) receipts_company_config: ReceiptConfig[]; }