import { Column, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { DiscountCodeUser, Gallery, LocalChange, LocalDecorationReserve, LocalPaymentMethod, LocalPlan, LocalReserveStatus, LocalTable, LocalTableZone, PosSystem, ReceiptConfig, RequestInvoice, RequestLocal } from ".."; import { BusinessTypeProduct } from "./BusinessTypeProduct"; import { Category } from "./Category"; import { City } from "./City"; import { Company } from "./Company"; import { LocalQualification } from "./LocalQualification"; import { Partner } from "./Partner"; import { PaymentMethod } from "./PaymentMethod"; import { Square } from "./Square"; import { User } from "./User"; @Entity({ comment: "Locales disponibles de las empresas (company)." }) export class Local { @PrimaryGeneratedColumn({ type: "int", comment: "Número de identificación (ID) único de cada registro.", }) id: number; @Column({ length: 10, type: "varchar", unique: true, comment: "Código único de 10 caracteres por cada registro.", }) code: string; @ManyToOne(() => Company, (company) => company.locals, { onDelete: "CASCADE", onUpdate: "NO ACTION", }) @JoinColumn({ name: "company" }) company: Company; @Column({ type: "varchar", length: 100 }) name: string; @ManyToOne(() => City, (city) => city.locals, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }) @JoinColumn({ name: "city" }) city: City; @Column({ type: "varchar", length: 120 }) address: string; @Column({ type: "decimal", precision: 10, scale: 8 }) latitude: number; @Column({ type: "decimal", precision: 10, scale: 8 }) longitude: number; @Column({ type: "json", nullable: true, default: null, // transformer: jsonTransformer, comment: "Campo de tipo JSON por si es necesario agregar información adicional", }) details: any | null; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP" }) created: Date; @ManyToOne(() => Partner, (partner) => partner.created_by_locals, { onDelete: "NO ACTION", onUpdate: "NO ACTION", }) @JoinColumn({ name: "created_by" }) created_by: Partner; @Column({ type: "datetime", onUpdate: "CURRENT_TIMESTAMP", nullable: true, default: null, }) updated: Date | null; @ManyToOne(() => Partner, (partner) => partner.locals, { onDelete: "NO ACTION", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "updated_by" }) updated_by: Partner | null; @ManyToOne(() => Square, (square) => square.locals, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }) @JoinColumn({ name: "square" }) square: Square; @ManyToOne(() => PosSystem, (posSystem) => posSystem.locals_pos_system, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }) @JoinColumn({ name: "pos_system" }) pos_system: PosSystem; @Column({ type: "json", nullable: true, default: null, // transformer: jsonTransformer, comment: "Campo de tipo JSON por si es necesario agregar información adicional", }) pos_system_settings: any | null; @Column({ default: 1, type: "int", width: 1, comment: "Estado del registro, es decir:\r\n1. Activo: Es visible en la plataforma.\r\n0. Inactivo: No será visible en la plataforma.", }) status: number; @Column({ default: 1, type: "int", width: 1, comment: "Es el estado para verificar si se envía en la papelera o no.", }) visible: number; @Column({ default: 0, type: "int", width: 1, comment: "Estado de operación en el que se encuentra el restaurante/local:\n0: Cerrado: Cuando el local no se encuentra operando.\n1: Abierto: Cuando el local se encuentra operando.\n2: Pausado: Cuando el local se ha pausado, es decir, un empleado pausó las operaciones temporalmente.\n3: En mantenimiento: Cuando el local se encuentra en mantenimiento y no está en operación.", }) operation_status: number; // !: ¿Esta columna debería venir? @Column({ type: "json", nullable: true, default: null, // transformer: jsonTransformer, }) contact_details: any | null; @ManyToMany(() => Partner, (partner) => partner.locals_partner) @JoinTable({ name: "local_partner", joinColumn: { name: "local", referencedColumnName: "id", }, inverseJoinColumn: { name: "partner", referencedColumnName: "id", }, }) locals_partners: Partner[]; @OneToMany(() => RequestLocal, (requestLocal) => requestLocal.local) requests_local: RequestLocal[]; @OneToMany(() => Category, (category) => category.local) categories: Category[]; @ManyToMany(() => PaymentMethod, (paymentMethod) => paymentMethod.locals) @JoinTable({ name: "local_payment_method", joinColumn: { name: "local", referencedColumnName: "id", }, inverseJoinColumn: { name: "payment_method", referencedColumnName: "id", }, }) payment_methods: PaymentMethod[]; @OneToMany( () => LocalQualification, (localQualification) => localQualification.local, ) qualifications: LocalQualification[]; @ManyToMany(() => User, (user) => user.user_favorite_locals) @JoinTable({ name: "user_favorite_local", joinColumn: { name: "local", referencedColumnName: "id", }, inverseJoinColumn: { name: "user", referencedColumnName: "id", }, }) users_favorite_local: User[]; @ManyToMany( () => BusinessTypeProduct, (businessTypeProduct) => businessTypeProduct.business_type_products, ) @JoinTable({ name: "business_type_product_local", joinColumn: { name: "local", referencedColumnName: "id", }, inverseJoinColumn: { name: "business_type_product", referencedColumnName: "id", }, }) business_type_products: BusinessTypeProduct[]; @OneToMany( () => DiscountCodeUser, (discountCodeUser) => discountCodeUser.local, ) discount_code_locals: DiscountCodeUser[]; @OneToMany(() => LocalPlan, (localPlan) => localPlan.local) locals_plan: LocalPlan[]; @OneToMany(() => ReceiptConfig, (receiptConfig) => receiptConfig.local) receipts_local_config: ReceiptConfig[]; @OneToMany(() => LocalTableZone, (localTableZone) => localTableZone.local) local_table_zones: LocalTableZone[]; @OneToMany(() => LocalTable, (localTable) => localTable.local) local_tables: LocalTable[]; @OneToMany( () => LocalDecorationReserve, (localDecorationReserve) => localDecorationReserve.local, ) local_decorations_reserve: LocalDecorationReserve[]; @OneToMany( () => LocalReserveStatus, (localReserveStatus) => localReserveStatus.local, ) local_reserve_status: LocalReserveStatus[]; @OneToMany(() => RequestInvoice, (requestInvoice) => requestInvoice.local) request_invoices: RequestInvoice[]; @OneToMany(() => Gallery, (gallery) => gallery.local) galleries: Gallery[]; @OneToMany( () => LocalPaymentMethod, (localPaymentMethod) => localPaymentMethod.local, ) locals_payment_method: LocalPaymentMethod[]; @OneToMany(() => LocalChange, (localChange) => localChange.local) locals_changes: LocalChange[]; }