@platform-modules/foreign-ministry 1.3.11 → 1.3.40
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.
- package/dist/data-source.js +0 -12
- package/dist/index.d.ts +0 -10
- package/dist/index.js +1 -17
- package/dist/models/MissionTravelClassConfigModel.d.ts +10 -0
- package/dist/models/MissionTravelClassConfigModel.js +50 -0
- package/dist/models/MissionTravelPerdiemModel.d.ts +10 -0
- package/dist/models/MissionTravelPerdiemModel.js +54 -0
- package/package.json +1 -1
- package/src/data-source.ts +0 -12
- package/src/index.ts +0 -11
- package/src/models/DiplomaticClubSubscriptionMasterModel.ts +26 -26
- package/src/models/DiplomaticRequestsModel.ts +157 -157
- package/src/models/LeaveConfigModel.ts +71 -71
- package/src/models/MissionTravelApprovalModel.ts +100 -100
- package/src/models/MissionTravelAttachmentModel.ts +56 -56
- package/src/models/MissionTravelChatModel.ts +52 -52
- package/src/models/MissionTravelPersonModel.ts +105 -105
- package/src/models/MissionTravelWorkflowModel.ts +54 -54
- package/dist/models/DiplomaticClubCardApprovalModel.d.ts +0 -16
- package/dist/models/DiplomaticClubCardApprovalModel.js +0 -58
- package/dist/models/DiplomaticClubCardAttachmentModel.d.ts +0 -9
- package/dist/models/DiplomaticClubCardAttachmentModel.js +0 -44
- package/dist/models/DiplomaticClubCardChatModel.d.ts +0 -7
- package/dist/models/DiplomaticClubCardChatModel.js +0 -36
- package/dist/models/DiplomaticClubCardMemberModel.d.ts +0 -13
- package/dist/models/DiplomaticClubCardMemberModel.js +0 -60
- package/dist/models/DiplomaticClubCardRequestModel.d.ts +0 -33
- package/dist/models/DiplomaticClubCardRequestModel.js +0 -98
- package/dist/models/DiplomaticClubCardWorkFlowModel.d.ts +0 -12
- package/dist/models/DiplomaticClubCardWorkFlowModel.js +0 -42
- package/dist/models/DiplomaticServiceDetailsModel.d.ts +0 -20
- package/dist/models/DiplomaticServiceDetailsModel.js +0 -65
- package/dist/models/DiplomaticSettingsModel.d.ts +0 -11
- package/dist/models/DiplomaticSettingsModel.js +0 -59
- package/dist/models/DiplomaticTitleModel.d.ts +0 -12
- package/dist/models/DiplomaticTitleModel.js +0 -45
- package/dist/models/GatePassApprovalsModel.d.ts +0 -33
- package/dist/models/GatePassApprovalsModel.js +0 -110
- package/dist/models/GatePassAttachmentsModel.d.ts +0 -16
- package/dist/models/GatePassAttachmentsModel.js +0 -60
- package/dist/models/GatePassChatsModel.d.ts +0 -26
- package/dist/models/GatePassChatsModel.js +0 -84
- package/dist/models/GatePassRequestsModel.d.ts +0 -46
- package/dist/models/GatePassRequestsModel.js +0 -148
- package/dist/models/GatePassVisitorsModel.d.ts +0 -27
- package/dist/models/GatePassVisitorsModel.js +0 -115
- package/dist/models/GatePassWorkFlowModel.d.ts +0 -33
- package/dist/models/GatePassWorkFlowModel.js +0 -93
- package/dist/models/PassportRequestApprovalModel.d.ts +0 -22
- package/dist/models/PassportRequestApprovalModel.js +0 -91
- package/dist/models/PassportRequestAttachmentModel.d.ts +0 -10
- package/dist/models/PassportRequestAttachmentModel.js +0 -54
- package/dist/models/PassportRequestChatModel.d.ts +0 -8
- package/dist/models/PassportRequestChatModel.js +0 -44
- package/dist/models/PassportRequestDependentModel.d.ts +0 -20
- package/dist/models/PassportRequestDependentModel.js +0 -85
- package/dist/models/PassportRequestModel.d.ts +0 -40
- package/dist/models/PassportRequestModel.js +0 -128
- package/dist/models/PassportRequestWorkFlowModel.d.ts +0 -15
- package/dist/models/PassportRequestWorkFlowModel.js +0 -60
- package/dist/models/SubscriptionAmountModel.d.ts +0 -67
- package/dist/models/SubscriptionAmountModel.js +0 -114
- package/src/models/GatePassApprovalsModel.ts +0 -98
- package/src/models/GatePassAttachmentsModel.ts +0 -38
- package/src/models/GatePassChatsModel.ts +0 -72
- package/src/models/GatePassRequestsModel.ts +0 -139
- package/src/models/GatePassVisitorsModel.ts +0 -100
- package/src/models/GatePassWorkFlowModel.ts +0 -66
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Approval Status Enum
|
|
6
|
-
*/
|
|
7
|
-
export enum GatePassApprovalStatus {
|
|
8
|
-
PENDING = "Pending",
|
|
9
|
-
IN_PROGRESS = "In Progress",
|
|
10
|
-
APPROVED = "Approved",
|
|
11
|
-
REJECTED = "Rejected",
|
|
12
|
-
CANCELLED = "Cancelled"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Gate Pass Approval Details Table
|
|
17
|
-
* Stores approval information for each level of the workflow
|
|
18
|
-
* Workflow: Employee → Department Admin Office → Security Department
|
|
19
|
-
*/
|
|
20
|
-
@Entity({ name: 'gate_pass_approvals' })
|
|
21
|
-
export class GatePassApprovalDetails extends BaseModel {
|
|
22
|
-
|
|
23
|
-
@Column({ type: 'int', nullable: false })
|
|
24
|
-
gate_pass_request_id: number; // Foreign key to gate_pass_requests
|
|
25
|
-
|
|
26
|
-
@Column({ type: 'int', nullable: false })
|
|
27
|
-
level: number; // Approval level (1: Department Admin Office, 2: Security Department)
|
|
28
|
-
|
|
29
|
-
@Column({ type: 'int', nullable: true })
|
|
30
|
-
approver_user_id: number | null;
|
|
31
|
-
|
|
32
|
-
@Column({ type: 'int', nullable: true })
|
|
33
|
-
approver_role_id: number | null;
|
|
34
|
-
|
|
35
|
-
@Column({ type: 'integer', nullable: true })
|
|
36
|
-
delegate_user_id: number | null; // If someone is delegating approval
|
|
37
|
-
|
|
38
|
-
@Column({ type: 'integer', nullable: true })
|
|
39
|
-
approved_by: number | null; // Actual user who approved (in case of delegation)
|
|
40
|
-
|
|
41
|
-
@Column({ type: 'int', nullable: true })
|
|
42
|
-
department_id: number | null;
|
|
43
|
-
|
|
44
|
-
@Column({ type: 'int', nullable: true })
|
|
45
|
-
section_id: number | null;
|
|
46
|
-
|
|
47
|
-
@Column({ type: 'text', nullable: true })
|
|
48
|
-
comment: string | null; // Approval/rejection comment
|
|
49
|
-
|
|
50
|
-
@Column({ type: 'enum', enum: GatePassApprovalStatus, default: GatePassApprovalStatus.PENDING, nullable: false })
|
|
51
|
-
approval_status: GatePassApprovalStatus;
|
|
52
|
-
|
|
53
|
-
@Column({ type: 'boolean', default: true, nullable: false })
|
|
54
|
-
is_allowed: boolean; // Whether this approval step is allowed
|
|
55
|
-
|
|
56
|
-
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
57
|
-
access_type: string | null; // Normal - to track access type
|
|
58
|
-
|
|
59
|
-
@Column({ type: 'integer', nullable: true })
|
|
60
|
-
service_id: number | null;
|
|
61
|
-
|
|
62
|
-
@Column({ type: 'integer', nullable: true })
|
|
63
|
-
sub_service_id: number | null;
|
|
64
|
-
|
|
65
|
-
constructor(
|
|
66
|
-
gate_pass_request_id: number,
|
|
67
|
-
level: number,
|
|
68
|
-
approver_user_id: number | null,
|
|
69
|
-
approver_role_id: number | null,
|
|
70
|
-
delegate_user_id: number | null,
|
|
71
|
-
approved_by: number | null,
|
|
72
|
-
department_id: number | null,
|
|
73
|
-
section_id: number | null,
|
|
74
|
-
comment: string | null,
|
|
75
|
-
approval_status: GatePassApprovalStatus,
|
|
76
|
-
is_allowed: boolean,
|
|
77
|
-
access_type: string | null,
|
|
78
|
-
service_id: number | null,
|
|
79
|
-
sub_service_id: number | null
|
|
80
|
-
) {
|
|
81
|
-
super();
|
|
82
|
-
this.gate_pass_request_id = gate_pass_request_id;
|
|
83
|
-
this.level = level;
|
|
84
|
-
this.approver_user_id = approver_user_id;
|
|
85
|
-
this.approver_role_id = approver_role_id;
|
|
86
|
-
this.delegate_user_id = delegate_user_id;
|
|
87
|
-
this.approved_by = approved_by;
|
|
88
|
-
this.department_id = department_id;
|
|
89
|
-
this.section_id = section_id;
|
|
90
|
-
this.comment = comment;
|
|
91
|
-
this.approval_status = approval_status;
|
|
92
|
-
this.is_allowed = is_allowed;
|
|
93
|
-
this.access_type = access_type;
|
|
94
|
-
this.service_id = service_id;
|
|
95
|
-
this.sub_service_id = sub_service_id;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Request Attachment Table
|
|
6
|
-
* Stores file attachments for gate pass requests
|
|
7
|
-
*/
|
|
8
|
-
@Entity({ name: 'gate_pass_attachments' })
|
|
9
|
-
export class GatePassRequestAttachment extends BaseModel {
|
|
10
|
-
|
|
11
|
-
@Column({ type: 'integer', nullable: false })
|
|
12
|
-
request_id: number;
|
|
13
|
-
|
|
14
|
-
@Column({ type: 'integer', nullable: true })
|
|
15
|
-
service_id: number | null;
|
|
16
|
-
|
|
17
|
-
@Column({ type: 'integer', nullable: true })
|
|
18
|
-
sub_service_id: number | null;
|
|
19
|
-
|
|
20
|
-
@Column({ type: 'varchar', length: 500, nullable: false })
|
|
21
|
-
file_url: string;
|
|
22
|
-
|
|
23
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
24
|
-
file_name: string;
|
|
25
|
-
|
|
26
|
-
@Column({ type: 'varchar', length: 100, nullable: true })
|
|
27
|
-
file_type: string;
|
|
28
|
-
|
|
29
|
-
@Column({ type: 'bigint', nullable: true })
|
|
30
|
-
file_size: number | null;
|
|
31
|
-
|
|
32
|
-
@Column({ type: 'integer', nullable: true })
|
|
33
|
-
chat_id: number | null;
|
|
34
|
-
|
|
35
|
-
@Column({ type: 'text', nullable: true })
|
|
36
|
-
description: string | null; // Optional description for the attachment
|
|
37
|
-
}
|
|
38
|
-
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Message Type Enum
|
|
6
|
-
*/
|
|
7
|
-
export enum GatePassMessageType {
|
|
8
|
-
TEXT = "text",
|
|
9
|
-
IMAGE = "image",
|
|
10
|
-
VIDEO = "video",
|
|
11
|
-
FILE = "file",
|
|
12
|
-
LINK = "link"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Gate Pass Request Chat Table
|
|
17
|
-
* Stores chat messages for gate pass requests
|
|
18
|
-
*/
|
|
19
|
-
@Entity({ name: 'gate_pass_chats' })
|
|
20
|
-
export class GatePassRequestChat extends BaseModel {
|
|
21
|
-
|
|
22
|
-
@Column({ type: 'integer', nullable: false })
|
|
23
|
-
request_id: number;
|
|
24
|
-
|
|
25
|
-
@Column({ type: 'integer', nullable: true })
|
|
26
|
-
service_id: number | null;
|
|
27
|
-
|
|
28
|
-
@Column({ type: 'integer', nullable: true })
|
|
29
|
-
sub_service_id: number | null;
|
|
30
|
-
|
|
31
|
-
@Column({ type: 'integer', nullable: false })
|
|
32
|
-
user_id: number;
|
|
33
|
-
|
|
34
|
-
@Column({ type: 'integer', nullable: true })
|
|
35
|
-
role_id: number;
|
|
36
|
-
|
|
37
|
-
@Column({ type: 'text', nullable: false })
|
|
38
|
-
message: string;
|
|
39
|
-
|
|
40
|
-
@Column({
|
|
41
|
-
type: 'enum',
|
|
42
|
-
enum: GatePassMessageType,
|
|
43
|
-
default: GatePassMessageType.TEXT,
|
|
44
|
-
nullable: false
|
|
45
|
-
})
|
|
46
|
-
messageType: GatePassMessageType;
|
|
47
|
-
|
|
48
|
-
@Column({ type: 'text', nullable: true })
|
|
49
|
-
status: string;
|
|
50
|
-
|
|
51
|
-
constructor(
|
|
52
|
-
request_id: number,
|
|
53
|
-
user_id: number,
|
|
54
|
-
role_id: number,
|
|
55
|
-
message: string,
|
|
56
|
-
service_id?: number,
|
|
57
|
-
sub_service_id?: number,
|
|
58
|
-
messageType?: GatePassMessageType,
|
|
59
|
-
status?: string
|
|
60
|
-
) {
|
|
61
|
-
super();
|
|
62
|
-
this.request_id = request_id;
|
|
63
|
-
this.service_id = service_id || null;
|
|
64
|
-
this.sub_service_id = sub_service_id || null;
|
|
65
|
-
this.user_id = user_id;
|
|
66
|
-
this.role_id = role_id;
|
|
67
|
-
this.message = message;
|
|
68
|
-
this.messageType = messageType || GatePassMessageType.TEXT;
|
|
69
|
-
this.status = status || 'Pending';
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Request Status Enum
|
|
6
|
-
*/
|
|
7
|
-
export enum GatePassRequestStatus {
|
|
8
|
-
PENDING = "Pending",
|
|
9
|
-
APPROVED = "Approved",
|
|
10
|
-
REJECTED = "Rejected",
|
|
11
|
-
CANCELLED = "Cancelled",
|
|
12
|
-
IN_PROGRESS = "In Progress"
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Gate Pass Type Enum
|
|
17
|
-
*/
|
|
18
|
-
export enum GatePassType {
|
|
19
|
-
SHORT_TERM = "Short-term",
|
|
20
|
-
LONG_TERM = "Long-term"
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Main Gate Pass Request Table (FM022)
|
|
25
|
-
* This table stores the primary gate pass request data
|
|
26
|
-
* Employees request gate passes for visitors
|
|
27
|
-
*/
|
|
28
|
-
@Entity({ name: 'gate_pass_requests' })
|
|
29
|
-
export class GatePassRequests extends BaseModel {
|
|
30
|
-
|
|
31
|
-
// User and Department Information
|
|
32
|
-
@Column({ type: 'int', nullable: false })
|
|
33
|
-
user_id: number; // Employee who is requesting
|
|
34
|
-
|
|
35
|
-
@Column({ type: 'int', nullable: true })
|
|
36
|
-
req_user_department_id: number | null;
|
|
37
|
-
|
|
38
|
-
@Column({ type: 'int', nullable: true })
|
|
39
|
-
req_user_section_id: number | null;
|
|
40
|
-
|
|
41
|
-
@Column({ type: 'int', nullable: true })
|
|
42
|
-
service_id: number | null;
|
|
43
|
-
|
|
44
|
-
@Column({ type: 'int', nullable: true })
|
|
45
|
-
sub_service_id: number | null;
|
|
46
|
-
|
|
47
|
-
// Request Status and Workflow
|
|
48
|
-
@Column({ type: 'enum', enum: GatePassRequestStatus, default: GatePassRequestStatus.PENDING, nullable: false })
|
|
49
|
-
status: GatePassRequestStatus;
|
|
50
|
-
|
|
51
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
52
|
-
workflow_execution_id: string | null;
|
|
53
|
-
|
|
54
|
-
// Gate Pass Request Fields (from requirements)
|
|
55
|
-
@Column({ type: 'date', nullable: true })
|
|
56
|
-
date: Date | null; // التاريخ (Date)
|
|
57
|
-
|
|
58
|
-
@Column({ type: 'int', nullable: true })
|
|
59
|
-
department_id: number | null; // الدائرة (Department)
|
|
60
|
-
|
|
61
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
62
|
-
serial_number: string | null; // الرقم التسلسلي (Serial Number)
|
|
63
|
-
|
|
64
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
65
|
-
office_number: string | null; // رقم المكتب (Office Number)
|
|
66
|
-
|
|
67
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
68
|
-
visiting_department: string | null; // قسم الزيارة (Visiting Department) - Auto filled
|
|
69
|
-
|
|
70
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
71
|
-
person_to_be_interviewed: string | null; // الشخص المطلوب مقابلته (Person to be Interviewed)
|
|
72
|
-
|
|
73
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
74
|
-
vehicle_type_and_color: string | null; // نوع المركبة ولونها (Vehicle Type and Color)
|
|
75
|
-
|
|
76
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
77
|
-
plate_number_and_code: string | null; // رقم اللوحة والرمز (Plate Number and Code)
|
|
78
|
-
|
|
79
|
-
@Column({ type: 'text', nullable: true })
|
|
80
|
-
purpose_of_entry: string | null; // الغرض من الدخول (Purpose of Entry)
|
|
81
|
-
|
|
82
|
-
@Column({ type: 'date', nullable: true })
|
|
83
|
-
from_date: Date | null; // من (From)
|
|
84
|
-
|
|
85
|
-
@Column({ type: 'date', nullable: true })
|
|
86
|
-
to_date: Date | null; // الى (To)
|
|
87
|
-
|
|
88
|
-
@Column({ type: 'enum', enum: GatePassType, nullable: true })
|
|
89
|
-
gate_pass_type: GatePassType | null; // نوع ممر البوابة (Gate Pass Type) - Short Term / Long Term
|
|
90
|
-
|
|
91
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
92
|
-
visiting_person_in_department: string | null; // زائر في القسم (Visiting Person in Department)
|
|
93
|
-
|
|
94
|
-
constructor(
|
|
95
|
-
user_id: number,
|
|
96
|
-
req_user_department_id: number | null,
|
|
97
|
-
req_user_section_id: number | null,
|
|
98
|
-
service_id: number | null,
|
|
99
|
-
sub_service_id: number | null,
|
|
100
|
-
status: GatePassRequestStatus,
|
|
101
|
-
workflow_execution_id: string | null,
|
|
102
|
-
date: Date | null,
|
|
103
|
-
department_id: number | null,
|
|
104
|
-
serial_number: string | null,
|
|
105
|
-
office_number: string | null,
|
|
106
|
-
visiting_department: string | null,
|
|
107
|
-
person_to_be_interviewed: string | null,
|
|
108
|
-
vehicle_type_and_color: string | null,
|
|
109
|
-
plate_number_and_code: string | null,
|
|
110
|
-
purpose_of_entry: string | null,
|
|
111
|
-
from_date: Date | null,
|
|
112
|
-
to_date: Date | null,
|
|
113
|
-
gate_pass_type: GatePassType | null,
|
|
114
|
-
visiting_person_in_department: string | null
|
|
115
|
-
) {
|
|
116
|
-
super();
|
|
117
|
-
this.user_id = user_id;
|
|
118
|
-
this.req_user_department_id = req_user_department_id;
|
|
119
|
-
this.req_user_section_id = req_user_section_id;
|
|
120
|
-
this.service_id = service_id;
|
|
121
|
-
this.sub_service_id = sub_service_id;
|
|
122
|
-
this.status = status;
|
|
123
|
-
this.workflow_execution_id = workflow_execution_id;
|
|
124
|
-
this.date = date;
|
|
125
|
-
this.department_id = department_id;
|
|
126
|
-
this.serial_number = serial_number;
|
|
127
|
-
this.office_number = office_number;
|
|
128
|
-
this.visiting_department = visiting_department;
|
|
129
|
-
this.person_to_be_interviewed = person_to_be_interviewed;
|
|
130
|
-
this.vehicle_type_and_color = vehicle_type_and_color;
|
|
131
|
-
this.plate_number_and_code = plate_number_and_code;
|
|
132
|
-
this.purpose_of_entry = purpose_of_entry;
|
|
133
|
-
this.from_date = from_date;
|
|
134
|
-
this.to_date = to_date;
|
|
135
|
-
this.gate_pass_type = gate_pass_type;
|
|
136
|
-
this.visiting_person_in_department = visiting_person_in_department;
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Visitors Table
|
|
6
|
-
* Stores visitor information for each gate pass request
|
|
7
|
-
* One request can have multiple visitors
|
|
8
|
-
*/
|
|
9
|
-
@Entity({ name: 'gate_pass_visitors' })
|
|
10
|
-
export class GatePassVisitors extends BaseModel {
|
|
11
|
-
|
|
12
|
-
@Column({ type: 'int', nullable: false })
|
|
13
|
-
gate_pass_request_id: number; // Foreign key to gate_pass_requests
|
|
14
|
-
|
|
15
|
-
@Column({ type: 'int', nullable: true })
|
|
16
|
-
service_id: number | null;
|
|
17
|
-
|
|
18
|
-
@Column({ type: 'int', nullable: true })
|
|
19
|
-
sub_service_id: number | null;
|
|
20
|
-
|
|
21
|
-
// Visitor Information Fields (from requirements)
|
|
22
|
-
@Column({ type: 'varchar', length: 255, nullable: false })
|
|
23
|
-
visitor_name: string; // اسم الزائر (Visitor Name)
|
|
24
|
-
|
|
25
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
26
|
-
visitor_id_passport_no: string | null; // رقم هوية الزائر / جواز السفر (Visitor ID / Passport No)
|
|
27
|
-
|
|
28
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
29
|
-
nationality: string | null; // الجنسية (Nationality)
|
|
30
|
-
|
|
31
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
32
|
-
job_title: string | null; // الوظيفة (The Job)
|
|
33
|
-
|
|
34
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
35
|
-
represented_entity: string | null; // الجهة التي يمثلها (The Represented Entity)
|
|
36
|
-
|
|
37
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
38
|
-
visitor_email_address: string | null; // عنوان البريد الإلكتروني للزائر (Visitor email Address)
|
|
39
|
-
|
|
40
|
-
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
41
|
-
visitor_mobile_number: string | null; // رقم هاتف الزائر (Visitor Mobile Number)
|
|
42
|
-
|
|
43
|
-
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
44
|
-
visitor_photo_url: string | null; // صورة الزائر (Visitor Photo) - Required for Long Term Gate pass
|
|
45
|
-
|
|
46
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
47
|
-
visitor_photo_file_name: string | null;
|
|
48
|
-
|
|
49
|
-
// QR Code for Gate Pass
|
|
50
|
-
@Column({ type: 'text', nullable: true })
|
|
51
|
-
qr_code_url: string | null; // QR code URL for this visitor (data URL can be 6000+ characters)
|
|
52
|
-
|
|
53
|
-
@Column({ type: 'text', nullable: true })
|
|
54
|
-
qr_code_data: string | null; // QR code data (JSON string)
|
|
55
|
-
|
|
56
|
-
// Gate Pass Generation
|
|
57
|
-
@Column({ type: 'boolean', default: false, nullable: false })
|
|
58
|
-
gate_pass_generated: boolean; // Whether gate pass has been generated
|
|
59
|
-
|
|
60
|
-
@Column({ type: 'timestamptz', nullable: true })
|
|
61
|
-
gate_pass_generated_at: Date | null; // When gate pass was generated
|
|
62
|
-
|
|
63
|
-
@Column({ type: 'boolean', default: false, nullable: false })
|
|
64
|
-
email_sent: boolean; // Whether email has been sent to visitor
|
|
65
|
-
|
|
66
|
-
@Column({ type: 'timestamptz', nullable: true })
|
|
67
|
-
email_sent_at: Date | null; // When email was sent
|
|
68
|
-
|
|
69
|
-
constructor(
|
|
70
|
-
gate_pass_request_id: number,
|
|
71
|
-
visitor_name: string,
|
|
72
|
-
service_id: number | null,
|
|
73
|
-
sub_service_id: number | null,
|
|
74
|
-
visitor_id_passport_no: string | null,
|
|
75
|
-
nationality: string | null,
|
|
76
|
-
job_title: string | null,
|
|
77
|
-
represented_entity: string | null,
|
|
78
|
-
visitor_email_address: string | null,
|
|
79
|
-
visitor_mobile_number: string | null,
|
|
80
|
-
visitor_photo_url: string | null,
|
|
81
|
-
visitor_photo_file_name: string | null
|
|
82
|
-
) {
|
|
83
|
-
super();
|
|
84
|
-
this.gate_pass_request_id = gate_pass_request_id;
|
|
85
|
-
this.service_id = service_id;
|
|
86
|
-
this.sub_service_id = sub_service_id;
|
|
87
|
-
this.visitor_name = visitor_name;
|
|
88
|
-
this.visitor_id_passport_no = visitor_id_passport_no;
|
|
89
|
-
this.nationality = nationality;
|
|
90
|
-
this.job_title = job_title;
|
|
91
|
-
this.represented_entity = represented_entity;
|
|
92
|
-
this.visitor_email_address = visitor_email_address;
|
|
93
|
-
this.visitor_mobile_number = visitor_mobile_number;
|
|
94
|
-
this.visitor_photo_url = visitor_photo_url;
|
|
95
|
-
this.visitor_photo_file_name = visitor_photo_file_name;
|
|
96
|
-
this.gate_pass_generated = false;
|
|
97
|
-
this.email_sent = false;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Column, Entity } from "typeorm";
|
|
2
|
-
import { BaseModel } from './BaseModel';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Gate Pass Workflow Status Enum
|
|
6
|
-
*/
|
|
7
|
-
export enum GatePassWorkFlowStatus {
|
|
8
|
-
COMPLETED = "Completed",
|
|
9
|
-
NOT_YET_STARTED = "Not Yet Started",
|
|
10
|
-
PENDING = "Pending",
|
|
11
|
-
IN_PROGRESS = "In Progress"
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* Gate Pass Workflow Table
|
|
16
|
-
* Tracks the progress of the request through different workflow stages
|
|
17
|
-
* Provides a timeline/audit trail of the process
|
|
18
|
-
*
|
|
19
|
-
* Workflow: Employee → Department Admin Office → Security Department
|
|
20
|
-
*/
|
|
21
|
-
@Entity({ name: 'gate_pass_workflows' })
|
|
22
|
-
export class GatePassWorkFlow extends BaseModel {
|
|
23
|
-
|
|
24
|
-
@Column({ type: 'int', nullable: false })
|
|
25
|
-
gate_pass_request_id: number; // Foreign key to gate_pass_requests
|
|
26
|
-
|
|
27
|
-
@Column({ type: 'int', nullable: false, default: 0 })
|
|
28
|
-
gate_pass_approval_details_id: number; // Foreign key to gate_pass_approvals
|
|
29
|
-
|
|
30
|
-
@Column({ type: 'varchar', length: 255, nullable: false })
|
|
31
|
-
content: string; // Description of the workflow step
|
|
32
|
-
|
|
33
|
-
@Column({ type: 'enum', enum: GatePassWorkFlowStatus, default: GatePassWorkFlowStatus.NOT_YET_STARTED, nullable: false })
|
|
34
|
-
status: GatePassWorkFlowStatus; // Current status of this workflow step
|
|
35
|
-
|
|
36
|
-
@Column({ type: 'integer', nullable: true })
|
|
37
|
-
user_id: number | null; // User responsible for this step
|
|
38
|
-
|
|
39
|
-
@Column({ type: 'integer', nullable: true })
|
|
40
|
-
role_id: number | null; // Role responsible for this step
|
|
41
|
-
|
|
42
|
-
@Column({ type: 'integer', nullable: true })
|
|
43
|
-
department_id: number | null; // Department involved in this step
|
|
44
|
-
|
|
45
|
-
@Column({ type: 'integer', nullable: true })
|
|
46
|
-
section_id: number | null; // Section involved in this step
|
|
47
|
-
|
|
48
|
-
@Column({ type: 'integer', nullable: false, default: 1 })
|
|
49
|
-
level: number; // Workflow level
|
|
50
|
-
|
|
51
|
-
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
52
|
-
access_type: string | null; // Normal - to track workflow path
|
|
53
|
-
|
|
54
|
-
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
55
|
-
action_taken: string | null; // Action taken
|
|
56
|
-
|
|
57
|
-
@Column({ type: 'timestamptz', nullable: true })
|
|
58
|
-
action_date: Date | null; // Date when action was taken
|
|
59
|
-
|
|
60
|
-
@Column({ type: 'integer', nullable: true })
|
|
61
|
-
service_id: number | null;
|
|
62
|
-
|
|
63
|
-
@Column({ type: 'integer', nullable: true })
|
|
64
|
-
sub_service_id: number | null;
|
|
65
|
-
}
|
|
66
|
-
|