Files
gongxue-base/apps/server/src/entities/deposit.entity.ts

82 lines
2.3 KiB
TypeScript

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;
}