import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, ManyToOne, JoinColumn, OneToMany, } from 'typeorm'; import { Student } from './student.entity'; import { BillItem } from './bill-item.entity'; @Entity('bills') export class Bill { @PrimaryGeneratedColumn() id: number; @Column({ name: 'student_id' }) studentId: number; @Column({ name: 'period_start', type: 'date' }) periodStart: string; @Column({ name: 'period_end', type: 'date' }) periodEnd: string; @Column({ name: 'shared_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) sharedAmount: number; @Column({ name: 'personal_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) personalAmount: number; @Column({ name: 'total_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) totalAmount: number; @Column({ type: 'varchar', length: 30, default: 'batch' }) source: 'batch' | 'student_utility'; @Column({ name: 'paid_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) paidAmount: number; @Column({ name: 'outstanding_amount', type: 'decimal', precision: 10, scale: 2, default: 0 }) outstandingAmount: number; @Column({ type: 'varchar', length: 20, default: 'unpaid' }) status: string; @Column({ name: 'cancelled_at', type: 'datetime', nullable: true }) cancelledAt: Date | null; @Column({ name: 'cancel_reason', type: 'varchar', length: 300, nullable: true }) cancelReason: string | null; @CreateDateColumn({ name: 'generated_at' }) generatedAt: Date; @ManyToOne(() => Student, (s) => s.bills) @JoinColumn({ name: 'student_id' }) student: Student; @OneToMany(() => BillItem, (bi) => bi.bill) items: BillItem[]; }