import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, ManyToOne, OneToMany, JoinColumn, } from 'typeorm'; import { Student } from './student.entity'; import { DepositInstallment } from './deposit-installment.entity'; import { Department } from './department.entity'; @Entity('deposits') export class Deposit { @PrimaryGeneratedColumn() id: number; @Column({ name: 'student_id' }) studentId: number; @Column({ type: 'decimal', precision: 10, scale: 2, default: 500 }) amount: number; // paid: 已缴 | refunded: 已退 | deducted: 已扣除(部分或全部) @Column({ type: 'varchar', length: 20, default: 'paid' }) status: string; @Column({ name: 'paid_date', type: 'date' }) paidDate: string; @Column({ name: 'refund_date', type: 'date', nullable: true }) refundDate: string; @Column({ name: 'refund_amount', type: 'decimal', precision: 10, scale: 2, nullable: true }) refundAmount: number; @Column({ name: 'deduction_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) deductionAmount: number; @Column({ name: 'deduction_reason', type: 'text', nullable: true }) deductionReason: string; @Column({ type: 'text', nullable: true }) notes: string; @Column({ name: 'recorded_by', nullable: true }) recordedBy: number; @Column({ name: 'refund_status', length: 30, nullable: true }) refundStatus: string; // pending | head_teacher_approved | finance_approved | refunded @Column({ name: 'refund_requested_at', type: 'datetime', nullable: true }) refundRequestedAt: Date; @Column({ name: 'refund_approved_by', type: 'integer', nullable: true }) refundApprovedBy: number; @Column({ name: 'refund_approved_at', type: 'datetime', nullable: true }) refundApprovedAt: Date; @Column({ name: 'refund_rejected_reason', length: 500, nullable: true }) refundRejectedReason: string; @OneToMany(() => DepositInstallment, (i) => i.deposit, { cascade: true, eager: true }) installments: DepositInstallment[]; @CreateDateColumn({ name: 'created_at' }) createdAt: Date; @ManyToOne(() => Student, { eager: true }) @JoinColumn({ name: 'student_id' }) student: Student; @Column({ name: 'department_id', type: 'integer', nullable: true }) departmentId: number; @ManyToOne(() => Department, { nullable: true }) @JoinColumn({ name: 'department_id' }) department: Department; }