@platform-modules/foreign-ministry 1.3.276 → 1.3.286

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/.env +10 -5
  2. package/dist/data-source.js +24 -1
  3. package/dist/helpers/evaluation-eligibility.utils.d.ts +10 -0
  4. package/dist/helpers/evaluation-eligibility.utils.js +39 -0
  5. package/dist/index.d.ts +12 -0
  6. package/dist/index.js +38 -1
  7. package/dist/models/EmployeeEvaluationAnswerModel.d.ts +13 -0
  8. package/dist/models/EmployeeEvaluationAnswerModel.js +46 -0
  9. package/dist/models/EmployeeEvaluationApprovalModel.d.ts +22 -0
  10. package/dist/models/EmployeeEvaluationApprovalModel.js +84 -0
  11. package/dist/models/EmployeeEvaluationAttachmentModel.d.ts +11 -0
  12. package/dist/models/EmployeeEvaluationAttachmentModel.js +52 -0
  13. package/dist/models/EmployeeEvaluationChatModel.d.ts +18 -0
  14. package/dist/models/EmployeeEvaluationChatModel.js +65 -0
  15. package/dist/models/EmployeeEvaluationModel.d.ts +16 -0
  16. package/dist/models/EmployeeEvaluationModel.js +59 -0
  17. package/dist/models/EmployeeEvaluationRequestModel.d.ts +34 -0
  18. package/dist/models/EmployeeEvaluationRequestModel.js +104 -0
  19. package/dist/models/EmployeeEvaluationWorkflowModel.d.ts +17 -0
  20. package/dist/models/EmployeeEvaluationWorkflowModel.js +67 -0
  21. package/dist/models/EvaluationEligibilitySettingModel.d.ts +23 -0
  22. package/dist/models/EvaluationEligibilitySettingModel.js +71 -0
  23. package/dist/models/EvaluationFormModel.d.ts +17 -0
  24. package/dist/models/EvaluationFormModel.js +64 -0
  25. package/dist/models/EvaluationFormQuestionModel.d.ts +22 -0
  26. package/dist/models/EvaluationFormQuestionModel.js +78 -0
  27. package/dist/models/EvaluationFormSectionModel.d.ts +12 -0
  28. package/dist/models/EvaluationFormSectionModel.js +54 -0
  29. package/dist/models/EvaluationMastersModel.d.ts +16 -0
  30. package/dist/models/EvaluationMastersModel.js +67 -0
  31. package/dist/models/EvaluationQuestionMasterModel.d.ts +10 -0
  32. package/dist/models/EvaluationQuestionMasterModel.js +42 -0
  33. package/dist/models/EvaluationSectionMasterModel.d.ts +7 -0
  34. package/dist/models/EvaluationSectionMasterModel.js +36 -0
  35. package/dist/models/EvaluationWorkflowModel.d.ts +60 -0
  36. package/dist/models/EvaluationWorkflowModel.js +215 -0
  37. package/dist/models/IneligibleForEvaluationModel.d.ts +8 -0
  38. package/dist/models/IneligibleForEvaluationModel.js +44 -0
  39. package/dist/models/MissionTravelClassConfigModel.d.ts +10 -0
  40. package/dist/models/MissionTravelClassConfigModel.js +50 -0
  41. package/dist/models/MissionTravelPerdiemModel.d.ts +10 -0
  42. package/dist/models/MissionTravelPerdiemModel.js +54 -0
  43. package/dist/models/UuidAuditModel.d.ts +9 -0
  44. package/dist/models/UuidAuditModel.js +41 -0
  45. package/package.json +1 -1
  46. package/src/data-source.ts +30 -2
  47. package/src/helpers/evaluation-eligibility.utils.ts +36 -0
  48. package/src/index.ts +468 -429
  49. package/src/models/AnnualTravelTicketPriceConfigurationItemModel.ts +36 -36
  50. package/src/models/AnnualTravelTicketPriceConfigurationModel.ts +35 -35
  51. package/src/models/AnnualTravelTicketRequestModel.ts +42 -42
  52. package/src/models/DiplomaticAcademyRequestModel.ts +80 -80
  53. package/src/models/DocumentationFileModel.ts +40 -40
  54. package/src/models/EmployeeEvaluationAnswerModel.ts +28 -0
  55. package/src/models/EmployeeEvaluationApprovalModel.ts +56 -0
  56. package/src/models/EmployeeEvaluationAttachmentModel.ts +29 -0
  57. package/src/models/EmployeeEvaluationChatModel.ts +42 -0
  58. package/src/models/EmployeeEvaluationModel.ts +38 -0
  59. package/src/models/EmployeeEvaluationRequestModel.ts +77 -0
  60. package/src/models/EmployeeEvaluationWorkflowModel.ts +43 -0
  61. package/src/models/EvaluationEligibilitySettingModel.ts +47 -0
  62. package/src/models/EvaluationFormModel.ts +40 -0
  63. package/src/models/EvaluationFormQuestionModel.ts +52 -0
  64. package/src/models/EvaluationFormSectionModel.ts +33 -0
  65. package/src/models/FinancialWorkFlowModel.ts +15 -15
  66. package/src/models/GatePassVisitorsModel.ts +7 -7
  67. package/src/models/LMSExternalEntityTrainedPersonModel.ts +45 -45
  68. package/src/models/LanguageCourseRequestModel.ts +67 -67
  69. package/src/models/LeaveConfigModel.ts +71 -71
  70. package/src/models/MissionTravelApprovalModel.ts +101 -101
  71. package/src/models/MissionTravelAttachmentModel.ts +56 -56
  72. package/src/models/MissionTravelChatModel.ts +52 -52
  73. package/src/models/MissionTravelPersonModel.ts +105 -105
  74. package/src/models/MissionTravelWorkflowModel.ts +54 -54
  75. package/src/models/PollOptionsModel.ts +26 -26
  76. package/src/models/PollVotesModel.ts +37 -37
  77. package/src/models/PollsModel.ts +49 -49
  78. package/src/models/ProjectContactsModel.ts +51 -51
  79. package/src/models/ProjectFaqModel.ts +36 -36
  80. package/src/models/ProjectInvoicesModel.ts +41 -41
  81. package/src/models/ProjectModel.ts +75 -75
  82. package/src/models/ProjectTasksModel.ts +75 -75
  83. package/src/models/ResignationTerminationApprovalModel.ts +9 -9
  84. package/src/models/ResignationTerminationRequestModel.ts +17 -17
  85. package/src/models/SectionModel.ts +35 -35
  86. package/src/models/ServicesNotificationConfigsModel.ts +55 -55
  87. package/src/models/TelephoneDirectoryModel.ts +20 -20
  88. package/dist/models/EmbassyMasterModel.d.ts +0 -16
  89. package/dist/models/EmbassyMasterModel.js +0 -75
  90. package/dist/models/UserDependentsModel.d.ts +0 -18
  91. package/dist/models/UserDependentsModel.js +0 -94
@@ -0,0 +1,38 @@
1
+ import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+ import { EmployeeEvaluationRequests } from './EmployeeEvaluationRequestModel';
4
+
5
+ export enum EmployeeEvaluationUsFeedback {
6
+ EXCELLENT = 'Excellent',
7
+ VERY_GOOD = 'Very good',
8
+ }
9
+
10
+ @Entity({ name: 'employee_evaluations' })
11
+ export class EmployeeEvaluation extends BaseModel {
12
+ @ManyToOne(() => EmployeeEvaluationRequests, { onDelete: 'CASCADE' })
13
+ @JoinColumn({ name: 'evaluation_request_id' })
14
+ evaluation_request: EmployeeEvaluationRequests;
15
+
16
+ @Column({ type: 'int', nullable: false })
17
+ user_id: number;
18
+
19
+ /** Snapshot of section/question structure from masters at request creation (JSON). */
20
+ @Column({ type: 'jsonb', nullable: true })
21
+ dynamic_evaluation_form: Record<string, unknown> | null;
22
+
23
+ @Column({ type: 'boolean', default: false })
24
+ is_rca: boolean;
25
+
26
+ @Column({
27
+ type: 'enum',
28
+ enum: EmployeeEvaluationUsFeedback,
29
+ nullable: true,
30
+ })
31
+ us_feedback: EmployeeEvaluationUsFeedback | null;
32
+
33
+ @Column({ type: 'float', nullable: true })
34
+ section_total_score: number | null;
35
+
36
+ @Column({ type: 'float', nullable: true })
37
+ final_total_score: number | null;
38
+ }
@@ -0,0 +1,77 @@
1
+ import { Column, Entity } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ export enum EmployeeEvaluationRequestStatus {
5
+ PENDING = 'Pending',
6
+ IN_PROGRESS = 'In Progress',
7
+ APPROVED = 'Approved',
8
+ REJECTED = 'Rejected',
9
+ }
10
+
11
+ /** Routing bucket derived from undersecretary department (US Political / Administrative / Finance). */
12
+ export enum EmployeeEvaluationRoutingBucket {
13
+ US_POLITICAL = 'US_POLITICAL',
14
+ US_ADMINISTRATIVE = 'US_ADMINISTRATIVE',
15
+ FINANCE = 'FINANCE',
16
+ OTHER = 'OTHER',
17
+ }
18
+
19
+ @Entity({ name: 'employee_evaluation_requests' })
20
+ export class EmployeeEvaluationRequests extends BaseModel {
21
+ @Column({ type: 'int', nullable: true })
22
+ req_user_department_id: number | null;
23
+
24
+ @Column({ type: 'int', nullable: true })
25
+ req_user_section_id: number | null;
26
+
27
+ @Column({ type: 'int', nullable: true })
28
+ service_id: number | null;
29
+
30
+ @Column({ type: 'int', nullable: true })
31
+ sub_service_id: number | null;
32
+
33
+ /** User who raised the request (e.g. HOD). */
34
+ @Column({ type: 'int', nullable: false })
35
+ user_id: number;
36
+
37
+ @Column({ type: 'int', nullable: false })
38
+ evaluation_year: number;
39
+
40
+ @Column({ type: 'varchar', length: 120, nullable: false })
41
+ evaluation_period: string;
42
+
43
+ @Column({ type: 'int', nullable: false })
44
+ evaluation_month: number;
45
+
46
+ /** Scope: employees must belong to this department. */
47
+ @Column({ type: 'int', nullable: false })
48
+ department_id: number;
49
+
50
+ /** Scope: employees must belong to this section. */
51
+ @Column({ type: 'int', nullable: false })
52
+ section_id: number;
53
+
54
+ @Column({ type: 'bigint', nullable: true })
55
+ undersecretary_department_id: number | null;
56
+
57
+ @Column({
58
+ type: 'enum',
59
+ enum: EmployeeEvaluationRoutingBucket,
60
+ nullable: true,
61
+ })
62
+ evaluation_routing_bucket: EmployeeEvaluationRoutingBucket | null;
63
+
64
+ @Column({
65
+ type: 'enum',
66
+ enum: EmployeeEvaluationRequestStatus,
67
+ default: EmployeeEvaluationRequestStatus.PENDING,
68
+ nullable: false,
69
+ })
70
+ status: EmployeeEvaluationRequestStatus;
71
+
72
+ @Column({ type: 'varchar', length: 255, nullable: true })
73
+ workflow_execution_id: string | null;
74
+
75
+ @Column({ type: 'text', nullable: true })
76
+ comments: string | null;
77
+ }
@@ -0,0 +1,43 @@
1
+ import { Column, Entity } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ export enum EmployeeEvaluationWorkFlowStatus {
5
+ COMPLETED = 'Completed',
6
+ NOT_YET_STARTED = 'Not Yet Started',
7
+ PENDING = 'Pending',
8
+ }
9
+
10
+ @Entity({ name: 'employee_evaluation_workflows' })
11
+ export class EmployeeEvaluationWorkFlow extends BaseModel {
12
+ @Column({ type: 'integer', nullable: false })
13
+ request_id: number;
14
+
15
+ @Column({ type: 'integer', nullable: true })
16
+ service_id: number | null;
17
+
18
+ @Column({ type: 'integer', nullable: true })
19
+ sub_service_id: number | null;
20
+
21
+ @Column({ type: 'varchar', length: 500, nullable: false })
22
+ content: string;
23
+
24
+ @Column({
25
+ type: 'enum',
26
+ enum: EmployeeEvaluationWorkFlowStatus,
27
+ default: EmployeeEvaluationWorkFlowStatus.NOT_YET_STARTED,
28
+ nullable: false,
29
+ })
30
+ status: EmployeeEvaluationWorkFlowStatus;
31
+
32
+ @Column({ type: 'integer', nullable: true })
33
+ user_id: number | null;
34
+
35
+ @Column({ type: 'integer', nullable: true })
36
+ role_id: number | null;
37
+
38
+ @Column({ type: 'integer', nullable: true })
39
+ department_id: number | null;
40
+
41
+ @Column({ type: 'integer', nullable: true })
42
+ section_id: number | null;
43
+ }
@@ -0,0 +1,47 @@
1
+ import { Column, Entity, JoinColumn, ManyToOne, OneToMany } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ /**
5
+ * Department/section/month evaluation window: which employees are excluded or re-included
6
+ * for that cycle (e.g. excluded in January, eligible again in May via a different month row).
7
+ */
8
+ @Entity({ name: 'evaluation_eligibility_settings' })
9
+ export class EvaluationEligibilitySetting extends BaseModel {
10
+ @Column({ type: 'int' })
11
+ department_id: number;
12
+
13
+ @Column({ type: 'int' })
14
+ section_id: number;
15
+
16
+ /** Evaluation window start month (1–12). */
17
+ @Column({ type: 'int' })
18
+ from_month: number;
19
+
20
+ /** Evaluation window end month (1–12), inclusive. */
21
+ @Column({ type: 'int' })
22
+ to_month: number;
23
+
24
+ /** Last day of the evaluation month (1–31) when submissions close. */
25
+ @Column({ type: 'int' })
26
+ evaluation_end_date: number;
27
+
28
+ @Column({ type: 'boolean', default: true })
29
+ is_active: boolean;
30
+
31
+ @OneToMany(() => EvaluationEligibilitySettingEmployee, (e) => e.evaluation_eligibility_setting)
32
+ employees?: EvaluationEligibilitySettingEmployee[];
33
+ }
34
+
35
+ @Entity({ name: 'evaluation_eligibility_setting_employees' })
36
+ export class EvaluationEligibilitySettingEmployee extends BaseModel {
37
+ @ManyToOne(() => EvaluationEligibilitySetting, (s) => s.employees, { onDelete: 'CASCADE' })
38
+ @JoinColumn({ name: 'setting_id' })
39
+ evaluation_eligibility_setting: EvaluationEligibilitySetting;
40
+
41
+ @Column({ type: 'int' })
42
+ employee_id: number;
43
+
44
+ /** When true, employee is excluded from evaluation for this setting’s month/department/section. */
45
+ @Column({ type: 'boolean', default: true })
46
+ is_excluded_from_evaluation: boolean;
47
+ }
@@ -0,0 +1,40 @@
1
+ import { Column, Entity, Index, OneToMany } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+ import { EvaluationFormSection } from './EvaluationFormSectionModel';
4
+
5
+ export enum EvaluationFormType {
6
+ EMPLOYEE_EVALUATION = 'employee_evaluation',
7
+ DEPARTMENT = 'department',
8
+ }
9
+
10
+ @Entity({ name: 'evaluation_forms' })
11
+ @Index('uq_evaluation_forms_form_name', ['form_name'], { unique: true, where: '"is_deleted" = false' })
12
+ @Index('uq_evaluation_forms_form_code', ['form_code'], { unique: true, where: '"is_deleted" = false' })
13
+ export class EvaluationForm extends BaseModel {
14
+ @Column({ type: 'varchar', length: 255, nullable: false })
15
+ form_name: string;
16
+
17
+ @Column({ type: 'varchar', length: 64, nullable: false })
18
+ form_code: string;
19
+
20
+ @Column({ type: 'varchar', length: 32, nullable: false })
21
+ form_type: EvaluationFormType;
22
+
23
+ @Column({ type: 'int', nullable: true })
24
+ department_id: number | null;
25
+
26
+ @Column({ type: 'int', nullable: true })
27
+ section_id: number | null;
28
+
29
+ @Column({ type: 'int', default: 0 })
30
+ min_score: number;
31
+
32
+ @Column({ type: 'int', default: 10 })
33
+ max_score: number;
34
+
35
+ @Column({ type: 'boolean', default: true })
36
+ is_active: boolean;
37
+
38
+ @OneToMany(() => EvaluationFormSection, (s) => s.form)
39
+ sections?: EvaluationFormSection[];
40
+ }
@@ -0,0 +1,52 @@
1
+ import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+ import { EvaluationFormSection } from './EvaluationFormSectionModel';
4
+
5
+ export enum EvaluationFormQuestionType {
6
+ RATING = 'rating',
7
+ TEXT = 'text',
8
+ TEXTAREA = 'textarea',
9
+ DROPDOWN = 'dropdown',
10
+ CHECKBOX = 'checkbox',
11
+ }
12
+
13
+ @Entity({ name: 'evaluation_form_questions' })
14
+ @Index('uq_evaluation_form_questions_section_display_order', ['form_section_id', 'display_order'], {
15
+ unique: true,
16
+ where: '"is_deleted" = false',
17
+ })
18
+ export class EvaluationFormQuestion extends BaseModel {
19
+ @Column({ type: 'int', nullable: false })
20
+ form_section_id: number;
21
+
22
+ @ManyToOne(() => EvaluationFormSection, (s) => s.questions, { onDelete: 'CASCADE' })
23
+ @JoinColumn({ name: 'form_section_id' })
24
+ section: EvaluationFormSection;
25
+
26
+ @Column({ type: 'text', nullable: false })
27
+ question_text: string;
28
+
29
+ @Column({ type: 'varchar', length: 32, nullable: false, default: EvaluationFormQuestionType.RATING })
30
+ question_type: EvaluationFormQuestionType;
31
+
32
+ @Column({ type: 'int', default: 0 })
33
+ min_score: number;
34
+
35
+ @Column({ type: 'int', default: 10 })
36
+ max_score: number;
37
+
38
+ @Column({ type: 'boolean', default: false })
39
+ is_required: boolean;
40
+
41
+ @Column({ type: 'int', default: 0 })
42
+ display_order: number;
43
+
44
+ @Column({ type: 'text', nullable: true })
45
+ help_text: string | null;
46
+
47
+ @Column({ type: 'jsonb', nullable: true })
48
+ options_json: string[] | null;
49
+
50
+ @Column({ type: 'boolean', default: true })
51
+ is_active: boolean;
52
+ }
@@ -0,0 +1,33 @@
1
+ import { Column, Entity, Index, JoinColumn, ManyToOne, OneToMany } from 'typeorm';
2
+ import { BaseModel } from './BaseModel';
3
+ import { EvaluationForm } from './EvaluationFormModel';
4
+ import type { EvaluationFormQuestion } from './EvaluationFormQuestionModel';
5
+
6
+ @Entity({ name: 'evaluation_form_sections' })
7
+ @Index('uq_evaluation_form_sections_form_display_order', ['form_id', 'display_order'], {
8
+ unique: true,
9
+ where: '"is_deleted" = false',
10
+ })
11
+ export class EvaluationFormSection extends BaseModel {
12
+ @Column({ type: 'int', nullable: false })
13
+ form_id: number;
14
+
15
+ @ManyToOne(() => EvaluationForm, (f) => f.sections, { onDelete: 'CASCADE' })
16
+ @JoinColumn({ name: 'form_id' })
17
+ form: EvaluationForm;
18
+
19
+ @Column({ type: 'varchar', length: 500, nullable: false })
20
+ section_title: string;
21
+
22
+ @Column({ type: 'text', nullable: true })
23
+ section_description: string | null;
24
+
25
+ @Column({ type: 'int', default: 0 })
26
+ display_order: number;
27
+
28
+ @Column({ type: 'boolean', default: true })
29
+ is_active: boolean;
30
+
31
+ @OneToMany('EvaluationFormQuestion', 'section')
32
+ questions?: EvaluationFormQuestion[];
33
+ }
@@ -33,15 +33,15 @@ export class FinancialWorkFlow extends BaseModel {
33
33
  @Column({ type: 'int', nullable: true })
34
34
  approved_by_role_id: number;
35
35
 
36
- @Column({ type: 'int', nullable: true })
37
- step_order: number;
38
-
39
- @Column({ type: 'varchar', length: 50, nullable: true })
40
- action: string | null;
41
-
42
- @ManyToOne(() => FinancialRequests, fr => fr.workflows)
43
- @JoinColumn({ name: 'financial_request_id' })
44
- financialRequest?: FinancialRequests;
36
+ @Column({ type: 'int', nullable: true })
37
+ step_order: number;
38
+
39
+ @Column({ type: 'varchar', length: 50, nullable: true })
40
+ action: string | null;
41
+
42
+ @ManyToOne(() => FinancialRequests, fr => fr.workflows)
43
+ @JoinColumn({ name: 'financial_request_id' })
44
+ financialRequest?: FinancialRequests;
45
45
 
46
46
  constructor(
47
47
  financial_request_id: number,
@@ -55,10 +55,10 @@ export class FinancialWorkFlow extends BaseModel {
55
55
  this.status = status;
56
56
  this.approved_by_user_id = approved_by_user_id;
57
57
  this.content = content;
58
- this.financial_approval_id = 0;
59
- this.activity_date = new Date();
60
- this.step_order = step_order;
61
- this.action = null;
62
- }
63
- }
58
+ this.financial_approval_id = 0;
59
+ this.activity_date = new Date();
60
+ this.step_order = step_order;
61
+ this.action = null;
62
+ }
63
+ }
64
64
 
@@ -85,10 +85,10 @@ export class GatePassVisitors extends BaseModel {
85
85
  @Column({ type: 'varchar', length: 255, nullable: true })
86
86
  visiting_person_in_department: string | null; // زائر في القسم (Visiting Person in Department)
87
87
 
88
- @Column({ type: 'int', nullable: true, unique: true })
89
- serial_number: number | null;
90
-
91
- // QR Code for Gate Pass
88
+ @Column({ type: 'int', nullable: true, unique: true })
89
+ serial_number: number | null;
90
+
91
+ // QR Code for Gate Pass
92
92
  @Column({ type: 'text', nullable: true })
93
93
  qr_code_url: string | null; // QR code URL for this visitor (data URL can be 6000+ characters)
94
94
 
@@ -134,9 +134,9 @@ export class GatePassVisitors extends BaseModel {
134
134
  this.visitor_email_address = visitor_email_address;
135
135
  this.visitor_mobile_number = visitor_mobile_number;
136
136
  this.visitor_photo_url = visitor_photo_url;
137
- this.visitor_photo_file_name = visitor_photo_file_name;
138
- this.serial_number = null;
139
- this.gate_pass_generated = false;
137
+ this.visitor_photo_file_name = visitor_photo_file_name;
138
+ this.serial_number = null;
139
+ this.gate_pass_generated = false;
140
140
  this.email_sent = false;
141
141
  }
142
142
  }
@@ -1,45 +1,45 @@
1
- import { Column, Entity } from "typeorm";
2
- import { BaseModel } from './BaseModel';
3
-
4
- /**
5
- * One person/trainee per row; multiple rows per request (Request for Individual Training).
6
- */
7
- @Entity({ name: 'lms_external_entity_trained_people' })
8
- export class LMSExternalEntityTrainedPerson extends BaseModel {
9
-
10
- @Column({ type: 'int', nullable: false })
11
- request_id: number;
12
-
13
- @Column({ type: 'int', nullable: true })
14
- service_id: number | null;
15
-
16
- @Column({ type: 'int', nullable: true })
17
- sub_service_id: number | null;
18
-
19
- @Column({ type: 'varchar', length: 255, nullable: true })
20
- full_name: string | null;
21
-
22
- @Column({ type: 'varchar', length: 255, nullable: true })
23
- employee_id: string | null;
24
-
25
- @Column({ type: 'int', nullable: true })
26
- age: number | null;
27
-
28
- @Column({ type: 'varchar', length: 255, nullable: true })
29
- university: string | null;
30
-
31
- @Column({ type: 'text', nullable: true })
32
- qualification: string | null;
33
-
34
- @Column({ type: 'text', nullable: true })
35
- learning_curriculum: string | null;
36
-
37
- @Column({ type: 'varchar', length: 255, nullable: true })
38
- training_period: string | null;
39
-
40
- @Column({ type: 'boolean', default: false })
41
- is_selected: boolean;
42
-
43
- @Column({ type: 'int', default: 0 })
44
- display_order: number;
45
- }
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ /**
5
+ * One person/trainee per row; multiple rows per request (Request for Individual Training).
6
+ */
7
+ @Entity({ name: 'lms_external_entity_trained_people' })
8
+ export class LMSExternalEntityTrainedPerson extends BaseModel {
9
+
10
+ @Column({ type: 'int', nullable: false })
11
+ request_id: number;
12
+
13
+ @Column({ type: 'int', nullable: true })
14
+ service_id: number | null;
15
+
16
+ @Column({ type: 'int', nullable: true })
17
+ sub_service_id: number | null;
18
+
19
+ @Column({ type: 'varchar', length: 255, nullable: true })
20
+ full_name: string | null;
21
+
22
+ @Column({ type: 'varchar', length: 255, nullable: true })
23
+ employee_id: string | null;
24
+
25
+ @Column({ type: 'int', nullable: true })
26
+ age: number | null;
27
+
28
+ @Column({ type: 'varchar', length: 255, nullable: true })
29
+ university: string | null;
30
+
31
+ @Column({ type: 'text', nullable: true })
32
+ qualification: string | null;
33
+
34
+ @Column({ type: 'text', nullable: true })
35
+ learning_curriculum: string | null;
36
+
37
+ @Column({ type: 'varchar', length: 255, nullable: true })
38
+ training_period: string | null;
39
+
40
+ @Column({ type: 'boolean', default: false })
41
+ is_selected: boolean;
42
+
43
+ @Column({ type: 'int', default: 0 })
44
+ display_order: number;
45
+ }
@@ -1,67 +1,67 @@
1
- import { Column, Entity } from "typeorm";
2
- import { BaseModel } from './BaseModel';
3
-
4
- export enum LanguageCourseStatus {
5
- SUBMITTED = "Submitted",
6
- PENDING = "Pending",
7
- ASSIGNED = "Assigned",
8
- IN_PROGRESS = "In Progress",
9
- APPROVED = "Approved",
10
- REJECTED = "Rejected"
11
- }
12
-
13
- @Entity({ name: 'language_course_requests' })
14
- export class LanguageCourseRequests extends BaseModel {
15
-
16
- // Common columns
17
- @Column({ type: 'int', nullable: true })
18
- req_user_department_id: number | null;
19
-
20
- @Column({ type: 'int', nullable: true })
21
- req_user_section_id: number | null;
22
-
23
- @Column({ type: 'int', nullable: true })
24
- service_id: number | null;
25
-
26
- @Column({ type: 'int', nullable: true })
27
- sub_service_id: number | null;
28
-
29
- @Column({ type: 'int', nullable: false })
30
- user_id: number;
31
-
32
- // Language Course specific columns
33
- @Column({ type: 'varchar', length: 255, nullable: false })
34
- course_name: string;
35
-
36
- @Column({ type: 'varchar', length: 100, nullable: false })
37
- course_level: string;
38
-
39
- @Column({ type: 'varchar', length: 255, nullable: false })
40
- institution: string;
41
-
42
- @Column({ type: 'text', nullable: false })
43
- reason_of_course: string;
44
-
45
- @Column({ type: 'int', nullable: false })
46
- estimated_number_of_participants: number;
47
-
48
- // Timeline
49
- @Column({ type: 'date', nullable: false })
50
- date_from: Date;
51
-
52
- @Column({ type: 'date', nullable: false })
53
- date_to: Date;
54
-
55
- @Column({ type: 'time', nullable: false })
56
- time_from: string;
57
-
58
- @Column({ type: 'time', nullable: false })
59
- time_to: string;
60
-
61
- @Column({ type: 'enum', enum: LanguageCourseStatus, default: LanguageCourseStatus.PENDING, nullable: false })
62
- status: LanguageCourseStatus;
63
-
64
- @Column({ type: 'varchar', nullable: true })
65
- workflow_execution_id: string | null;
66
-
67
- }
1
+ import { Column, Entity } from "typeorm";
2
+ import { BaseModel } from './BaseModel';
3
+
4
+ export enum LanguageCourseStatus {
5
+ SUBMITTED = "Submitted",
6
+ PENDING = "Pending",
7
+ ASSIGNED = "Assigned",
8
+ IN_PROGRESS = "In Progress",
9
+ APPROVED = "Approved",
10
+ REJECTED = "Rejected"
11
+ }
12
+
13
+ @Entity({ name: 'language_course_requests' })
14
+ export class LanguageCourseRequests extends BaseModel {
15
+
16
+ // Common columns
17
+ @Column({ type: 'int', nullable: true })
18
+ req_user_department_id: number | null;
19
+
20
+ @Column({ type: 'int', nullable: true })
21
+ req_user_section_id: number | null;
22
+
23
+ @Column({ type: 'int', nullable: true })
24
+ service_id: number | null;
25
+
26
+ @Column({ type: 'int', nullable: true })
27
+ sub_service_id: number | null;
28
+
29
+ @Column({ type: 'int', nullable: false })
30
+ user_id: number;
31
+
32
+ // Language Course specific columns
33
+ @Column({ type: 'varchar', length: 255, nullable: false })
34
+ course_name: string;
35
+
36
+ @Column({ type: 'varchar', length: 100, nullable: false })
37
+ course_level: string;
38
+
39
+ @Column({ type: 'varchar', length: 255, nullable: false })
40
+ institution: string;
41
+
42
+ @Column({ type: 'text', nullable: false })
43
+ reason_of_course: string;
44
+
45
+ @Column({ type: 'int', nullable: false })
46
+ estimated_number_of_participants: number;
47
+
48
+ // Timeline
49
+ @Column({ type: 'date', nullable: false })
50
+ date_from: Date;
51
+
52
+ @Column({ type: 'date', nullable: false })
53
+ date_to: Date;
54
+
55
+ @Column({ type: 'time', nullable: false })
56
+ time_from: string;
57
+
58
+ @Column({ type: 'time', nullable: false })
59
+ time_to: string;
60
+
61
+ @Column({ type: 'enum', enum: LanguageCourseStatus, default: LanguageCourseStatus.PENDING, nullable: false })
62
+ status: LanguageCourseStatus;
63
+
64
+ @Column({ type: 'varchar', nullable: true })
65
+ workflow_execution_id: string | null;
66
+
67
+ }