import { Entity, Column, OneToMany, JoinColumn, ManyToOne } from "typeorm"; import { EntityBase } from "./base/Base"; import { PosMaster } from "./PosMaster"; import { PosLevel } from "./PosLevel"; import { PosType } from "./PosType"; import { ProfileSalary } from "./ProfileSalary"; import { ProfileDiscipline } from "./ProfileDiscipline"; import { ProfileCertificate } from "./ProfileCertificate"; import { ProfileEducation } from "./ProfileEducation"; import { ProfileTraining } from "./ProfileTraining"; import { ProfileInsignia } from "./ProfileInsignia"; import { ProfileHonor } from "./ProfileHonor"; import { ProfileAssessment } from "./ProfileAssessment"; import { ProfileLeave } from "./ProfileLeave"; import { ProfileAbility } from "./ProfileAbility"; import { ProfileDuty } from "./ProfileDuty"; import { ProfileNopaid } from "./ProfileNopaid"; import { ProfileOther } from "./ProfileOther"; import { ProfileFamilyHistory } from "./ProfileFamily"; import { ProfileGovernment } from "./ProfileGovernment"; import { Gender } from "./Gender"; import { Relationship } from "./Relationship"; import { BloodGroup } from "./BloodGroup"; import { Religion } from "./Religion"; @Entity("profile") export class Profile extends EntityBase { @Column({ nullable: true, comment: "คำนำหน้าชื่อ", length: 40, default: null, }) prefix: string; @Column({ nullable: true, comment: "ชื่อ", length: 255, default: null, }) firstName: string; @Column({ nullable: true, comment: "นามสกุล", length: 255, default: null, }) lastName: string; @Column({ nullable: true, comment: "เลขประจำตัวประชาชน", default: null, length: 13, }) citizenId: string; @Column({ nullable: true, comment: "ตำแหน่ง", default: null, length: 255, }) position: string; @Column({ nullable: true, length: 40, comment: "ไอดีระดับตำแหน่ง", }) posLevelId: string | null; @Column({ nullable: true, length: 40, comment: "ไอดีประเภทตำแหน่ง", }) posTypeId: string | null; @Column({ nullable: true, length: 255, comment: "อีเมล", }) email: string; @Column({ nullable: true, length: 20, comment: "เบอร์โทร", }) phone: string; // @Column({ // nullable: true, // length: 40, // comment: // "คนครองปัจจุบัน เมื่อทำสำเนาโครงสร้างและตำแหน่งพร้อมกับคนครองมา คนครองจะอยู่ในฟิลด์นี้", // default: null, // unique: false, // }) // current_holderId: string; // @Column({ // nullable: true, // length: 40, // comment: // "คนที่กำลังจะมาครอง ตอนปรับโครงสร้าง ถ้าเลือกให้ใครมาครอง ProfileId ของคนนั้นจะมาอยู่ในช่องนี้ รวมทั้งตอนเลือกตำแหน่งเพื่อบรรจุ แต่งตั้ง เลื่อน ย้าย ในระบบบรรจุแต่งตั้งด้วย", // default: null, // unique: false, // }) // next_holderId: string; @Column({ nullable: true, comment: "id keycloak", length: 40, default: null, }) keycloak: string; @Column({ comment: "ทดลองปฏิบัติหน้าที่", default: false, }) isProbation: boolean; @Column({ nullable: true, type: "datetime", comment: "วันที่พักราชการ", default: null, }) dateRetire: Date; @Column({ nullable: true, type: "datetime", comment: "วันเกิด", default: null, }) birthDate: Date; @Column({ nullable: true, comment: "เชื้อชาติ", length: 255, default: null, }) ethnicity: string; @Column({ nullable: true, comment: "เบอร์โทร", length: 255, default: null, }) telephoneNumber: string; @Column({ nullable: true, comment: "เพศ", length: 40, default: null, }) genderId: string; @ManyToOne(() => Gender, (v) => v.profile) gender: Gender; @Column({ nullable: true, comment: "ความสัมพันธ์", length: 40, default: null, }) relationshipId: string; @ManyToOne(() => Relationship, (v) => v.profile) relationship: Relationship; @Column({ nullable: true, comment: "ศาสนา", length: 255, default: null, }) religionId: string; @ManyToOne(() => Religion, (v) => v.profile) religion: Religion; @Column({ nullable: true, comment: "กรุ๊ปเลือด", length: 40, default: null, }) bloodGroupId: string; @ManyToOne(() => BloodGroup, (v) => v.profile) bloodGroup: BloodGroup; @OneToMany(() => PosMaster, (posMaster) => posMaster.current_holder) current_holders: PosMaster[]; @OneToMany(() => PosMaster, (posMaster) => posMaster.next_holder) next_holders: PosMaster[]; @OneToMany(() => ProfileSalary, (profileSalary) => profileSalary.profile) profileSalary: ProfileSalary[]; @OneToMany(() => ProfileDiscipline, (profileDiscipline) => profileDiscipline.profile) profileDiscipline: ProfileDiscipline[]; @OneToMany(() => ProfileCertificate, (profileCertificate) => profileCertificate.profile) profileCertificates: ProfileCertificate[]; @OneToMany(() => ProfileEducation, (profileEducation) => profileEducation.profile) profileEducations: ProfileEducation[]; @OneToMany(() => ProfileTraining, (profileTraining) => profileTraining.profile) profileTrainings: ProfileTraining[]; @OneToMany(() => ProfileInsignia, (profileInsignia) => profileInsignia.profile) profileInsignias: ProfileInsignia[]; @OneToMany(() => ProfileHonor, (profileHonor) => profileHonor.profile) profileHonors: ProfileHonor[]; @OneToMany(() => ProfileAssessment, (profileAssessment) => profileAssessment.profile) profileAssessments: ProfileAssessment[]; @OneToMany(() => ProfileLeave, (profileLeave) => profileLeave.profile) profileLeaves: ProfileLeave[]; @OneToMany(() => ProfileAbility, (profileAbility) => profileAbility.profile) profileAbilities: ProfileAbility[]; @OneToMany(() => ProfileDuty, (profileDuty) => profileDuty.profile) profileDutys: ProfileDuty[]; @OneToMany(() => ProfileNopaid, (profileNopaid) => profileNopaid.profile) profileNopaids: ProfileNopaid[]; @OneToMany(() => ProfileOther, (profileOther) => profileOther.profile) profileOthers: ProfileOther[]; @OneToMany(() => ProfileFamilyHistory, (profileFamily) => profileFamily.profile) profileFamily: ProfileFamilyHistory[]; @OneToMany(() => ProfileGovernment, (profileGovernment) => profileGovernment.profile) profileGovernment: ProfileGovernment[]; @OneToMany(() => ProfileHistory, (v) => v.profile) histories: ProfileHistory[]; @ManyToOne(() => PosLevel, (posLevel) => posLevel.profiles) @JoinColumn({ name: "posLevelId" }) posLevel: PosLevel; @ManyToOne(() => PosType, (posType) => posType.profiles) @JoinColumn({ name: "posTypeId" }) posType: PosType; } @Entity("profileHistory") export class ProfileHistory extends Profile { @Column({ nullable: true, length: 40, comment: "คีย์นอก(FK)ของตาราง ProfileInformation", default: null, }) profileId: string; @ManyToOne(() => Profile, (v) => v.histories, { onDelete: "CASCADE" }) profile: Profile; } export class CreateProfile { prefix: string; firstName: string; lastName: string; position: string; email: string | null; phone: string | null; isProbation: boolean | null; dateRetire: Date | null; birthDate: Date | null; ethnicity: string | null; telephoneNumber: string | null; citizenId: string; religionId: string | null; posLevelId: string | null; posTypeId: string | null; genderId: string | null; relationshipId: string | null; bloodGroupId: string | null; } export type UpdateProfile = { prefix?: string | null; firstName?: string | null; lastName?: string | null; position?: string | null; email?: string | null; phone?: string | null; keycloak?: string | null; isProbation?: boolean | null; dateRetire?: Date | null; birthDate?: Date | null; ethnicity?: string | null; telephoneNumber?: string | null; citizenId?: string | null; religionId: string | null; posLevelId?: string | null; posTypeId?: string | null; genderId?: string | null; relationshipId?: string | null; bloodGroupId?: string | null; };