import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn, } from "typeorm"; import { LocalPaymentMethod, Partner, RequestLocal, User, UserPaymentMethod, } from ".."; @Entity({ comment: "Tabla creada para almacenar y llevar el control del los pagos que se han realizado de los pedidos.", name: "request_local_payment", }) export class RequestLocalPayment { @PrimaryGeneratedColumn({ type: "int", comment: "ID único de cada registro.", }) id: number; @Column({ length: 40, type: "varchar", unique: true, comment: "Código único de cada pago que se realiza.", }) code: string; @ManyToOne(() => User, (user) => user.payments_made, { onDelete: "NO ACTION", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "user" }) user: User | null; @ManyToOne(() => RequestLocal, (requestLocal) => requestLocal.payments_made, { onDelete: "NO ACTION", onUpdate: "NO ACTION", }) @JoinColumn({ name: "request_local" }) request_local: RequestLocal; @ManyToOne( () => LocalPaymentMethod, (LocalPaymentMethod) => LocalPaymentMethod.request_payment_methods, { onDelete: "RESTRICT", onUpdate: "NO ACTION", }, ) @JoinColumn({ name: "payment_method" }) payment_method: LocalPaymentMethod; @Column({ type: "decimal", precision: 10, scale: 2, comment: "Monto que se paga del pedido.", }) amount_paid: number; @Column({ type: "decimal", precision: 10, scale: 2, 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.cards, { 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; @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.requests_local_payment, { 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; }