import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { ToppingImage } from ".."; import { jsonTransformer } from "../transformers/jsonTransformer"; import { ProductGroup } from "./ProductGroup"; import { RequestProductGroupComplement } from "./RequestProductGroupComplement"; @Entity("product_group_complement", { comment: "Los complementos que tiene el grupo de un producto (product_group_complement).", }) export class ProductGroupComplement { @PrimaryGeneratedColumn({ type: "int", comment: "Número de identificación (ID) único de cada registro.", }) id: number; @ManyToOne( () => ProductGroup, (productGroup) => productGroup.groups_complement, { onDelete: "CASCADE", onUpdate: "NO ACTION", } ) @JoinColumn({ name: "group_id" }) group_id: ProductGroup; @Column({ length: 30, type: "varchar", comment: "Nombre del complemento." }) name: string; @ManyToOne( () => ToppingImage, (toppingImage) => toppingImage.topping_images, { onDelete: "RESTRICT", onUpdate: "NO ACTION", } ) @JoinColumn({ name: "image" }) image: ToppingImage; @Column({ length: 20, type: "varchar", nullable: true, default: null, comment: "Precio del complemento.", }) price: string | null; @Column({ nullable: true, type: "int", default: null, comment: "Límite máximo para poder agregar el complement (topping) al producto.", }) maximum_limit: number | null; @Column({ type: "int", comment: "El orden en que aparece los grupos en el producto.", }) position: number; @Column({ type: "mediumtext", nullable: true, default: null, transformer: jsonTransformer, comment: "Valores qué se van a mostrar mientras se aprueban los nuevos cambios.", }) current_values: any | null; @Column({ default: 1, type: "int", width: 1, comment: "Estado en el que está el elemento: \n0. Inactivo. \n1. Activo. \n2. Eliminado.", }) status: number; @Column({ type: "text", nullable: true, default: null, transformer: jsonTransformer, comment: "Cuando un complemento se inactiva, existe la opción de hacerlo por:\r\n1. Un solo día: El elemento no estará disponible hasta las 00:00 del siguiente día (Se guarda un elemento de tipo fecha).\r\n2. Fecha personalizada: Se puede escoger la fecha en la que el elemento estará activo (Se guarda un elemento de tipo fecha).\r\n3. Indefinidamente: El elemento estará inactivo hasta que se vuelva a activar (El campo inactive_until estará vacío).", }) inactive_until: any | null; @Column({ default: 1, type: "int", width: 1, comment: "Estado en el que se encuentra la revisión de los cambios: \n1. En revisión. \n2. Rechazado.", }) status_review: number; @Column({ nullable: true, default: null, type: "varchar", length: 600, comment: "Comentarios u observaciones de la revisión.", }) review_comment: string | null; @OneToMany( () => RequestProductGroupComplement, (requestProduct) => requestProduct.product_group_complement ) request_product_group_complements: RequestProductGroupComplement[]; }