import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { CodeRedemptionHistoryCompany } from "./CodeRedemptionHistoryCompany"; import { Master } from "./Master"; @Entity("discount_code_company", { comment: "Códigos de descuento para las empresas.", }) export class DiscountCodeCompany { @PrimaryGeneratedColumn({ type: "int", comment: "Número de identificación (ID) único de cada registro.", }) id: number; @Column({ length: 10, type: "varchar", comment: "Código de descuento para las empresas (company).", }) code: string; @Column({ length: 10, type: "varchar", comment: "Descuento que se aplica." }) discount: string; @Column({ default: 1, type: "int", comment: "Campo para el tipo de descuento:\r\n1. Porcentaje.\r\n2. Valor en moneda.", }) type: number; @Column({ default: 1, type: "int", comment: "Con esto validamos si la empresa puede usar el código una vez o varias veces:\r\n1. Una sola vez.\r\n0. Más de una vez.\r\n\r\nCon esto validamos sí tenemos qué ir a buscar a la tabla code_redemption_history_company.", }) single_use: number; @Column({ nullable: true, type: "int", default: null, comment: "Validamos sí el descuento se aplica para una cantidad límite de usuarios. Entonces, no debería tener en cuenta la fecha de expiración o, si quiero agregar las 2 condicionales.", }) use_limit: number | null; @Column({ type: "datetime", comment: "Fecha de creación del registro.", default: () => "CURRENT_TIMESTAMP", }) created: Date; @ManyToOne( () => Master, (master) => master.discounts_code_company_created_by, { onDelete: "CASCADE", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "created_by" }) created_by: Master; @Column({ type: "date", comment: "Fecha inicial del descuento.", }) start: string; @Column({ type: "date", nullable: true, default: null, comment: "Fecha de expiración del registro.", }) expiration: string | null; @Column({ type: "json", nullable: true, default: null, comment: "Columna de tipos JSON para agregar en un arreglo los días que se pueden repetir el descuento.", }) repeat_days: any | null; @Column({ type: "datetime", default: null, nullable: true, onUpdate: "CURRENT_TIMESTAMP", comment: "Fecha de actualización.", }) updated: Date | null; @ManyToOne(() => Master, (master) => master.discount_code_companies, { onDelete: "CASCADE", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "updated_by" }) updated_by: Master | null; @Column({ default: 1, type: "int", width: 1, comment: "Estado del registro, es decir: \n 1. Activo: Es visible en la plataforma. \n 0. Inactivo: No será visible en la plataforma.", }) status: number; @OneToMany( () => CodeRedemptionHistoryCompany, (codeRedemptionHistoryCompany) => codeRedemptionHistoryCompany.discount_code_company, ) code_redemptions_history_company: CodeRedemptionHistoryCompany[]; // @OneToMany( // () => ServiceDiscountsPlan, // (serviceDiscountsPlan) => serviceDiscountsPlan.discount, // ) // service_discounts_plans: ServiceDiscountsPlan[]; }