import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, } from "typeorm"; import { LocalPaymentMethod, LocalReserve, Partner, User, UserPaymentMethod, } from ".."; @Entity({ comment: "Registros de los pagos qué se han hecho de las reservas.", name: "local_table_reserve_payment", }) export class LocalTableReservePayment { @PrimaryGeneratedColumn({ type: "int", comment: "ID único de cada registro.", }) id: number; @Column({ length: 40, type: "varchar", unique: true, comment: "Código único de cada registro.", }) code: string; @ManyToOne( () => LocalReserve, (localReserve) => localReserve.local_reserve_payments, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "local_reserve" }) local_reserve: LocalReserve; @ManyToOne( () => LocalPaymentMethod, (localPaymentMethod) => localPaymentMethod.local_table_reserves_payment, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "payment_method" }) payment_method: LocalPaymentMethod; @Column({ type: "decimal", precision: 10, scale: 2, comment: "Monto que se paga de la reserva.", }) amount_paid: number; @Column({ type: "decimal", precision: 10, scale: 2, nullable: true, default: null, comment: "Monto restante para pagar.", }) remaining_amount: number; @Column({ type: "varchar", length: 4, nullable: true, default: null, comment: "Si se paga con tarjeta, entonces se almacenan los últimos 4 dígitos de la tarjeta de crédito/débito con el que se paga.", }) card_last_four_digits: string | null; @Column({ type: "varchar", length: 50, nullable: true, default: null, comment: "Si se paga con tarjeta, entonces se guarda el tipo de tarjeta con la que se paga.", }) card_type: string | null; @ManyToOne( () => UserPaymentMethod, (card) => card.local_table_reserve_payments, { onDelete: "NO ACTION", onUpdate: "NO ACTION", nullable: true, }, ) @JoinColumn({ name: "card" }) card: UserPaymentMethod | null; @Column({ type: "varchar", length: 255, nullable: true, default: null, comment: "Comentarios del pago, si aplica.", }) comments: string | null; @ManyToOne(() => User, (user) => user.local_table_reserve_payments, { onDelete: "NO ACTION", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "user" }) user: User | null; @Column({ type: "int", width: 1, comment: "Estado del pago:\r\n1. Aprobado.\r\n2. Rechazado.\r\n3. Pendiente.", default: 3, }) status: number; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP", comment: "Fecha de creación del registro.", }) created: Date; @Column({ type: "datetime", nullable: true, default: null, onUpdate: "CURRENT_TIMESTAMP", comment: "Fecha de actualización del registro.", }) updated: Date | null; @ManyToOne(() => Partner, (partner) => partner.local_table_reserve_payments, { onDelete: "NO ACTION", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "partner" }) partner: Partner | null; @Column({ type: "varchar", length: 45, nullable: true, comment: "Dirección ip donde se hace la solicitud del pago.", }) user_ip: string | null; }