import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, } from "typeorm"; import { CodeRedemptionHistoryUser, Local, Partner, Request, RequestLocalHistory, RequestLocalPayment, RequestLocalTable, RequestProduct, RequestProductGroupComplement, } from ".."; @Entity({ comment: "Tabla para guardar las relaciones de un pedido y los locales", name: "request_local", }) export class RequestLocal { @PrimaryGeneratedColumn({ type: "int", comment: "Id único de cada registro.", }) id: number; @ManyToOne(() => Request, (request) => request.requests_local, { onDelete: "CASCADE", onUpdate: "NO ACTION", }) @JoinColumn({ name: "request" }) request: Request; @ManyToOne(() => Local, (local) => local.requests_local, { onDelete: "CASCADE", onUpdate: "NO ACTION", }) @JoinColumn({ name: "local" }) local: Local; @Column({ type: "decimal", precision: 10, scale: 8, comment: "Costo total del pedido.", }) total_cost: number; @Column({ type: "decimal", nullable: true, default: null, precision: 10, scale: 8, comment: "Columna creada para saber cuánto es la cantidad que nos falta para pagar por completo el pedido.", }) remaining_amount: number; @Column({ default: 1, type: "int", width: 1, comment: "Estado en el que se encuentra un pedido.\r\n0. En proceso: El usuario está agregando los productos del/los local/es.\r\n1. Creado: El usuario ya creó el pedido con los prductos en los/el local/es especificado/s.\r\n2. Cancelado: El usuario canceló el pedido, esto sólo se permite si aún no está pago el pedido.\r\n3. Rechazado: Si un local canceló el pedido por x circustancias. Cabe resaltar que si el pedido fue solicitado a más de un local, el estado 3 sólo se agregaría al pedido si todos los locales cancelaron (Se tiene un estado para cada local en la tabla request_local) -> Aún no se sabe si este estado va.\r\n4. Finalizado: El pedido fue entregado y también pagado. Si el pedido se realizó en varios locales, entonces sólo se pasará a Finalizado, cuando todos los locales a los que se le hizo el pedido están pagos y con los productos entregados.", }) status: number; @Column({ type: "varchar", length: 4, nullable: true, default: null, comment: "Columna para saber cuánto tiempo máximo (minutos) nos tomará en preparar los productos y sus toppings.\r\n\r\nEsta columna viene también al momento de crear.", }) preparation_time: string | null; @Column({ type: "datetime", default: () => "CURRENT_TIMESTAMP", onUpdate: "CURRENT_TIMESTAMP", comment: "Columna donde almacenamos la fecha de actualización del registro, este campo nos sirve para saber cuánto tiempo llevamos desde qué se actualizó hasta la hora actual.", }) updated: Date; @Column({ type: "int", comment: "Número del pedido.", }) order_number: number; @Column({ type: "int", comment: "Número del pedido consecutivo por día, es decir, cada día que pase, se va resetean a 0.", }) order_number_day: number; @ManyToOne( () => CodeRedemptionHistoryUser, (codeRedemptionHistoryUser) => codeRedemptionHistoryUser.discount_redemption_request_locals, { onDelete: "SET NULL", onUpdate: "NO ACTION", nullable: true, }, ) @JoinColumn({ name: "discount_redemption" }) discount_redemption: CodeRedemptionHistoryUser | null; @Column({ length: 200, nullable: true, default: null, type: "varchar", comment: "Comentarios del pedido.", }) comments: string | null; @Column({ length: 300, type: "varchar", nullable: true, default: null, comment: "Comentarios que el usuario le agrega al pedido.", }) user_details: string | null; @ManyToOne(() => Partner, (partner) => partner.partner_request_locals, { onDelete: "CASCADE", onUpdate: "NO ACTION", nullable: true, }) @JoinColumn({ name: "partner" }) partner: Partner | null; @Column({ default: 1, type: "int", width: 1, comment: "Columna para saber sí se notificó vía mensaje desde la página web - aplicación de escritorio o/y correo electrónico:\r\n1. No notificado.\r\n2. Notificado.", }) is_notified: number; @OneToMany( () => RequestLocalHistory, (requestLocalHistory) => requestLocalHistory.request_local, ) requests_local_history: RequestLocalHistory[]; @OneToMany( () => RequestLocalPayment, (requestLocalPayment) => requestLocalPayment.request_local, ) payments_made: RequestLocalPayment[]; @OneToMany( () => RequestLocalTable, (requestLocalTable) => requestLocalTable.request_local, ) request_locals_table: RequestLocalTable[]; @OneToMany(() => RequestProduct, (requestProduct) => requestProduct.request) request_products: RequestProduct[]; @OneToMany( () => RequestProductGroupComplement, (requestProduct) => requestProduct.request, ) request_product_group_complements: RequestProductGroupComplement[]; }