@platform-modules/civil-aviation-authority 2.3.308 → 2.3.310
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/models/CancellationRequestModel.d.ts +1 -0
- package/dist/models/CancellationRequestModel.js +4 -0
- package/dist/models/ComplaintLostPropertyReportRequestModel.d.ts +3 -0
- package/dist/models/ComplaintLostPropertyReportRequestModel.js +12 -0
- package/dist/models/LegalComplaintRequestModel.d.ts +3 -3
- package/dist/models/LegalComplaintRequestModel.js +2 -8
- package/dist/models/MediaPublicationsRequestModel.d.ts +26 -1
- package/dist/models/MediaPublicationsRequestModel.js +70 -2
- package/dist/models/VipHallRequestModel.d.ts +4 -2
- package/dist/models/VipHallRequestModel.js +9 -7
- package/dist/models/user.d.ts +1 -0
- package/dist/models/user.js +4 -0
- package/package.json +1 -1
- package/sql/add_users_is_selected_lang.sql +11 -0
- package/sql/caa_api_payload_changes_2026_07_batch2.sql +66 -0
- package/src/models/CancellationRequestModel.ts +3 -0
- package/src/models/ComplaintLostPropertyReportRequestModel.ts +9 -0
- package/src/models/LegalComplaintRequestModel.ts +4 -11
- package/src/models/MediaPublicationsRequestModel.ts +62 -2
- package/src/models/VipHallRequestModel.ts +10 -7
- package/src/models/user.ts +3 -0
|
@@ -16,6 +16,7 @@ export declare class CancellationRequests extends BaseModel {
|
|
|
16
16
|
status: CancellationRequestStatus;
|
|
17
17
|
workflow_execution_id: string | null;
|
|
18
18
|
old_request_number: number;
|
|
19
|
+
decision_number: string | null;
|
|
19
20
|
reason_for_cancellation: string;
|
|
20
21
|
description: string;
|
|
21
22
|
/** Optional user IDs for “affected participants” notification fan-out */
|
|
@@ -56,6 +56,10 @@ __decorate([
|
|
|
56
56
|
(0, typeorm_1.Column)({ type: "integer", nullable: false }),
|
|
57
57
|
__metadata("design:type", Number)
|
|
58
58
|
], CancellationRequests.prototype, "old_request_number", void 0);
|
|
59
|
+
__decorate([
|
|
60
|
+
(0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
|
|
61
|
+
__metadata("design:type", Object)
|
|
62
|
+
], CancellationRequests.prototype, "decision_number", void 0);
|
|
59
63
|
__decorate([
|
|
60
64
|
(0, typeorm_1.Column)({ type: "varchar", length: 500, nullable: false }),
|
|
61
65
|
__metadata("design:type", String)
|
|
@@ -17,6 +17,9 @@ export declare class ComplaintLostPropertyReportRequest extends BaseModel {
|
|
|
17
17
|
location_where_item_was_lost: string;
|
|
18
18
|
item_description: string;
|
|
19
19
|
description: string | null;
|
|
20
|
+
lost_item_classification: string | null;
|
|
21
|
+
caa_property_type: string | null;
|
|
22
|
+
lost_card: string | null;
|
|
20
23
|
created_by: number;
|
|
21
24
|
reference_number: string | null;
|
|
22
25
|
constructor();
|
|
@@ -74,6 +74,18 @@ __decorate([
|
|
|
74
74
|
(0, typeorm_1.Column)({ type: "text", nullable: true }),
|
|
75
75
|
__metadata("design:type", Object)
|
|
76
76
|
], ComplaintLostPropertyReportRequest.prototype, "description", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, typeorm_1.Column)({ type: "varchar", length: 100, nullable: true }),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], ComplaintLostPropertyReportRequest.prototype, "lost_item_classification", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, typeorm_1.Column)({ type: "varchar", length: 255, nullable: true }),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], ComplaintLostPropertyReportRequest.prototype, "caa_property_type", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
(0, typeorm_1.Column)({ type: "varchar", length: 10, nullable: true }),
|
|
87
|
+
__metadata("design:type", Object)
|
|
88
|
+
], ComplaintLostPropertyReportRequest.prototype, "lost_card", void 0);
|
|
77
89
|
__decorate([
|
|
78
90
|
(0, typeorm_1.Column)({ type: "int", nullable: false }),
|
|
79
91
|
__metadata("design:type", Number)
|
|
@@ -21,7 +21,7 @@ export interface LegalComplaintIncidentInput {
|
|
|
21
21
|
}
|
|
22
22
|
/** Step 3 — Complainant: Name / Position / Employee ID / Directorate / Department / Section. */
|
|
23
23
|
export interface LegalComplaintComplainantInput {
|
|
24
|
-
name
|
|
24
|
+
name?: string | null;
|
|
25
25
|
position?: string | null;
|
|
26
26
|
employee_id?: string | null;
|
|
27
27
|
directorate?: string | null;
|
|
@@ -50,7 +50,7 @@ export interface LegalComplaintStructuredCreateFields {
|
|
|
50
50
|
incident_events: string | null;
|
|
51
51
|
incident_other_details: string | null;
|
|
52
52
|
incident_description: string;
|
|
53
|
-
complainant_name: string;
|
|
53
|
+
complainant_name: string | null;
|
|
54
54
|
complainant_position: string | null;
|
|
55
55
|
complainant_employee_id: string | null;
|
|
56
56
|
complainant_directorate: string | null;
|
|
@@ -94,7 +94,7 @@ export declare class LegalComplaintRequest extends BaseModel {
|
|
|
94
94
|
/** “Any other details related to complaint”. */
|
|
95
95
|
incident_other_details: string | null;
|
|
96
96
|
incident_description: string;
|
|
97
|
-
complainant_name: string;
|
|
97
|
+
complainant_name: string | null;
|
|
98
98
|
complainant_position: string | null;
|
|
99
99
|
complainant_employee_id: string | null;
|
|
100
100
|
complainant_directorate: string | null;
|
|
@@ -126,12 +126,6 @@ function parseLegalComplaintCreateFields(body) {
|
|
|
126
126
|
complainant_section_id = sec.id;
|
|
127
127
|
complainant_section_name = sec.name;
|
|
128
128
|
}
|
|
129
|
-
if (!complainant_name) {
|
|
130
|
-
return {
|
|
131
|
-
ok: false,
|
|
132
|
-
message: 'complainant.name is required (or legacy complainant_details text)',
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
129
|
const sub = body.complained_employee ?? body.complainedEmployee;
|
|
136
130
|
let complained_employee_name = '';
|
|
137
131
|
let complained_employee_position = null;
|
|
@@ -238,8 +232,8 @@ __decorate([
|
|
|
238
232
|
__metadata("design:type", String)
|
|
239
233
|
], LegalComplaintRequest.prototype, "incident_description", void 0);
|
|
240
234
|
__decorate([
|
|
241
|
-
(0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable:
|
|
242
|
-
__metadata("design:type",
|
|
235
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }),
|
|
236
|
+
__metadata("design:type", Object)
|
|
243
237
|
], LegalComplaintRequest.prototype, "complainant_name", void 0);
|
|
244
238
|
__decorate([
|
|
245
239
|
(0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }),
|
|
@@ -15,6 +15,14 @@ export declare enum MediaPublicationsRequestStatus {
|
|
|
15
15
|
APPROVED = "Approved",
|
|
16
16
|
REJECTED = "Rejected"
|
|
17
17
|
}
|
|
18
|
+
export interface MediaPublicationMaterialLine {
|
|
19
|
+
item_type?: string | null;
|
|
20
|
+
item_code?: string | null;
|
|
21
|
+
description?: string | null;
|
|
22
|
+
quantity?: number | null;
|
|
23
|
+
unit_price?: number | null;
|
|
24
|
+
cost?: number | null;
|
|
25
|
+
}
|
|
18
26
|
export declare class MediaPublicationsRequests extends BaseModel {
|
|
19
27
|
req_user_department_id: number | null;
|
|
20
28
|
req_user_section_id: number | null;
|
|
@@ -25,14 +33,31 @@ export declare class MediaPublicationsRequests extends BaseModel {
|
|
|
25
33
|
requestor_name: string | null;
|
|
26
34
|
requestor_department: string | null;
|
|
27
35
|
requestor_designation: string | null;
|
|
36
|
+
job_title: string | null;
|
|
37
|
+
directorate: string | null;
|
|
38
|
+
department: string | null;
|
|
39
|
+
extension_number: string | null;
|
|
28
40
|
contact_number: string | null;
|
|
41
|
+
phone_number: string | null;
|
|
29
42
|
email: string | null;
|
|
30
43
|
request_type: MediaPublicationsRequestType;
|
|
31
|
-
item_code: string;
|
|
44
|
+
item_code: string | null;
|
|
45
|
+
item_type: string | null;
|
|
32
46
|
description: string;
|
|
33
47
|
cost: number;
|
|
34
48
|
publication_date: Date;
|
|
35
49
|
event_type: MediaPublicationsEventType;
|
|
50
|
+
publication_type: string[] | null;
|
|
51
|
+
publication_format: string[] | null;
|
|
52
|
+
purpose_of_publication: string | null;
|
|
53
|
+
intended_use: string | null;
|
|
54
|
+
target_audience: string | null;
|
|
55
|
+
is_new_or_update: string | null;
|
|
56
|
+
approved_budget_available: string | null;
|
|
57
|
+
estimated_quantity: number | null;
|
|
58
|
+
required_languages: string[] | null;
|
|
59
|
+
technical_requirements: string | null;
|
|
60
|
+
material_lines: MediaPublicationMaterialLine[] | null;
|
|
36
61
|
quantity: number | null;
|
|
37
62
|
unit_price: number | null;
|
|
38
63
|
status: MediaPublicationsRequestStatus;
|
|
@@ -70,10 +70,30 @@ __decorate([
|
|
|
70
70
|
(0, typeorm_1.Column)({ type: 'varchar', length: 500, nullable: true }),
|
|
71
71
|
__metadata("design:type", Object)
|
|
72
72
|
], MediaPublicationsRequests.prototype, "requestor_designation", void 0);
|
|
73
|
+
__decorate([
|
|
74
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 500, nullable: true }),
|
|
75
|
+
__metadata("design:type", Object)
|
|
76
|
+
], MediaPublicationsRequests.prototype, "job_title", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 500, nullable: true }),
|
|
79
|
+
__metadata("design:type", Object)
|
|
80
|
+
], MediaPublicationsRequests.prototype, "directorate", void 0);
|
|
81
|
+
__decorate([
|
|
82
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 500, nullable: true }),
|
|
83
|
+
__metadata("design:type", Object)
|
|
84
|
+
], MediaPublicationsRequests.prototype, "department", void 0);
|
|
85
|
+
__decorate([
|
|
86
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }),
|
|
87
|
+
__metadata("design:type", Object)
|
|
88
|
+
], MediaPublicationsRequests.prototype, "extension_number", void 0);
|
|
73
89
|
__decorate([
|
|
74
90
|
(0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }),
|
|
75
91
|
__metadata("design:type", Object)
|
|
76
92
|
], MediaPublicationsRequests.prototype, "contact_number", void 0);
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 100, nullable: true }),
|
|
95
|
+
__metadata("design:type", Object)
|
|
96
|
+
], MediaPublicationsRequests.prototype, "phone_number", void 0);
|
|
77
97
|
__decorate([
|
|
78
98
|
(0, typeorm_1.Column)({ type: 'varchar', length: 320, nullable: true }),
|
|
79
99
|
__metadata("design:type", Object)
|
|
@@ -88,9 +108,13 @@ __decorate([
|
|
|
88
108
|
__metadata("design:type", String)
|
|
89
109
|
], MediaPublicationsRequests.prototype, "request_type", void 0);
|
|
90
110
|
__decorate([
|
|
91
|
-
(0, typeorm_1.Column)({ type: 'varchar', length: 120, nullable:
|
|
92
|
-
__metadata("design:type",
|
|
111
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 120, nullable: true }),
|
|
112
|
+
__metadata("design:type", Object)
|
|
93
113
|
], MediaPublicationsRequests.prototype, "item_code", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 255, nullable: true }),
|
|
116
|
+
__metadata("design:type", Object)
|
|
117
|
+
], MediaPublicationsRequests.prototype, "item_type", void 0);
|
|
94
118
|
__decorate([
|
|
95
119
|
(0, typeorm_1.Column)({ type: 'text', nullable: false }),
|
|
96
120
|
__metadata("design:type", String)
|
|
@@ -112,6 +136,50 @@ __decorate([
|
|
|
112
136
|
}),
|
|
113
137
|
__metadata("design:type", String)
|
|
114
138
|
], MediaPublicationsRequests.prototype, "event_type", void 0);
|
|
139
|
+
__decorate([
|
|
140
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
141
|
+
__metadata("design:type", Object)
|
|
142
|
+
], MediaPublicationsRequests.prototype, "publication_type", void 0);
|
|
143
|
+
__decorate([
|
|
144
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
145
|
+
__metadata("design:type", Object)
|
|
146
|
+
], MediaPublicationsRequests.prototype, "publication_format", void 0);
|
|
147
|
+
__decorate([
|
|
148
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
149
|
+
__metadata("design:type", Object)
|
|
150
|
+
], MediaPublicationsRequests.prototype, "purpose_of_publication", void 0);
|
|
151
|
+
__decorate([
|
|
152
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
153
|
+
__metadata("design:type", Object)
|
|
154
|
+
], MediaPublicationsRequests.prototype, "intended_use", void 0);
|
|
155
|
+
__decorate([
|
|
156
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
157
|
+
__metadata("design:type", Object)
|
|
158
|
+
], MediaPublicationsRequests.prototype, "target_audience", void 0);
|
|
159
|
+
__decorate([
|
|
160
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }),
|
|
161
|
+
__metadata("design:type", Object)
|
|
162
|
+
], MediaPublicationsRequests.prototype, "is_new_or_update", void 0);
|
|
163
|
+
__decorate([
|
|
164
|
+
(0, typeorm_1.Column)({ type: 'varchar', length: 50, nullable: true }),
|
|
165
|
+
__metadata("design:type", Object)
|
|
166
|
+
], MediaPublicationsRequests.prototype, "approved_budget_available", void 0);
|
|
167
|
+
__decorate([
|
|
168
|
+
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
169
|
+
__metadata("design:type", Object)
|
|
170
|
+
], MediaPublicationsRequests.prototype, "estimated_quantity", void 0);
|
|
171
|
+
__decorate([
|
|
172
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
173
|
+
__metadata("design:type", Object)
|
|
174
|
+
], MediaPublicationsRequests.prototype, "required_languages", void 0);
|
|
175
|
+
__decorate([
|
|
176
|
+
(0, typeorm_1.Column)({ type: 'text', nullable: true }),
|
|
177
|
+
__metadata("design:type", Object)
|
|
178
|
+
], MediaPublicationsRequests.prototype, "technical_requirements", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
(0, typeorm_1.Column)({ type: 'jsonb', nullable: true }),
|
|
181
|
+
__metadata("design:type", Object)
|
|
182
|
+
], MediaPublicationsRequests.prototype, "material_lines", void 0);
|
|
115
183
|
__decorate([
|
|
116
184
|
(0, typeorm_1.Column)({ type: 'int', nullable: true }),
|
|
117
185
|
__metadata("design:type", Object)
|
|
@@ -13,8 +13,10 @@ export declare enum VipHallInternalExternal {
|
|
|
13
13
|
export declare enum VipHallMealType {
|
|
14
14
|
BREAKFAST = "Breakfast",
|
|
15
15
|
LUNCH = "Lunch",
|
|
16
|
-
DINNER = "Dinner"
|
|
16
|
+
DINNER = "Dinner",
|
|
17
|
+
SNACKS = "Snacks"
|
|
17
18
|
}
|
|
19
|
+
export declare const VIP_HALL_MEAL_TYPE_VALUES: readonly [VipHallMealType.BREAKFAST, VipHallMealType.LUNCH, VipHallMealType.DINNER, VipHallMealType.SNACKS];
|
|
18
20
|
export declare class VipHallRequests extends BaseModel {
|
|
19
21
|
req_user_department_id: number | null;
|
|
20
22
|
req_user_section_id: number | null;
|
|
@@ -34,7 +36,7 @@ export declare class VipHallRequests extends BaseModel {
|
|
|
34
36
|
/** Purpose of the meeting (mandatory in API validation). */
|
|
35
37
|
meeting_purpose: string;
|
|
36
38
|
meal_required: boolean;
|
|
37
|
-
meal_type:
|
|
39
|
+
meal_type: string[] | null;
|
|
38
40
|
network_support_required: boolean;
|
|
39
41
|
media_coverage_required: boolean;
|
|
40
42
|
project_maintenance_support_required: boolean;
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.VipHallRequests = exports.VipHallMealType = exports.VipHallInternalExternal = exports.VipHallRequestStatus = void 0;
|
|
12
|
+
exports.VipHallRequests = exports.VIP_HALL_MEAL_TYPE_VALUES = exports.VipHallMealType = exports.VipHallInternalExternal = exports.VipHallRequestStatus = void 0;
|
|
13
13
|
const typeorm_1 = require("typeorm");
|
|
14
14
|
const BaseModel_1 = require("./BaseModel");
|
|
15
15
|
var VipHallRequestStatus;
|
|
@@ -30,7 +30,14 @@ var VipHallMealType;
|
|
|
30
30
|
VipHallMealType["BREAKFAST"] = "Breakfast";
|
|
31
31
|
VipHallMealType["LUNCH"] = "Lunch";
|
|
32
32
|
VipHallMealType["DINNER"] = "Dinner";
|
|
33
|
+
VipHallMealType["SNACKS"] = "Snacks";
|
|
33
34
|
})(VipHallMealType || (exports.VipHallMealType = VipHallMealType = {}));
|
|
35
|
+
exports.VIP_HALL_MEAL_TYPE_VALUES = [
|
|
36
|
+
VipHallMealType.BREAKFAST,
|
|
37
|
+
VipHallMealType.LUNCH,
|
|
38
|
+
VipHallMealType.DINNER,
|
|
39
|
+
VipHallMealType.SNACKS,
|
|
40
|
+
];
|
|
34
41
|
let VipHallRequests = class VipHallRequests extends BaseModel_1.BaseModel {
|
|
35
42
|
};
|
|
36
43
|
exports.VipHallRequests = VipHallRequests;
|
|
@@ -109,12 +116,7 @@ __decorate([
|
|
|
109
116
|
__metadata("design:type", Boolean)
|
|
110
117
|
], VipHallRequests.prototype, "meal_required", void 0);
|
|
111
118
|
__decorate([
|
|
112
|
-
(0, typeorm_1.Column)({
|
|
113
|
-
type: "enum",
|
|
114
|
-
enum: VipHallMealType,
|
|
115
|
-
enumName: "vip_hall_meal_type_en",
|
|
116
|
-
nullable: true,
|
|
117
|
-
}),
|
|
119
|
+
(0, typeorm_1.Column)({ type: "jsonb", nullable: true }),
|
|
118
120
|
__metadata("design:type", Object)
|
|
119
121
|
], VipHallRequests.prototype, "meal_type", void 0);
|
|
120
122
|
__decorate([
|
package/dist/models/user.d.ts
CHANGED
package/dist/models/user.js
CHANGED
|
@@ -210,6 +210,10 @@ __decorate([
|
|
|
210
210
|
(0, typeorm_1.Column)({ nullable: true }),
|
|
211
211
|
__metadata("design:type", String)
|
|
212
212
|
], User.prototype, "avatar", void 0);
|
|
213
|
+
__decorate([
|
|
214
|
+
(0, typeorm_1.Column)({ type: "enum", enum: ["English", "Arabic"], nullable: false, default: "English" }),
|
|
215
|
+
__metadata("design:type", String)
|
|
216
|
+
], User.prototype, "is_selected_lang", void 0);
|
|
213
217
|
__decorate([
|
|
214
218
|
(0, typeorm_1.Column)({ nullable: true }),
|
|
215
219
|
__metadata("design:type", String)
|
package/package.json
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- Add is_selected_lang column to users table (CAA).
|
|
2
|
+
-- Run once per environment before deploying updated services.
|
|
3
|
+
|
|
4
|
+
DO $$ BEGIN
|
|
5
|
+
CREATE TYPE is_selected_lang_enum AS ENUM ('English', 'Arabic');
|
|
6
|
+
EXCEPTION
|
|
7
|
+
WHEN duplicate_object THEN NULL;
|
|
8
|
+
END $$;
|
|
9
|
+
|
|
10
|
+
ALTER TABLE IF EXISTS users
|
|
11
|
+
ADD COLUMN IF NOT EXISTS is_selected_lang is_selected_lang_enum NOT NULL DEFAULT 'English';
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
-- CAA API payload changes batch 2 (Jul 2026)
|
|
2
|
+
-- Run after deploying updated shared_models, services, and Conductor workers.
|
|
3
|
+
|
|
4
|
+
-- 1. Complaint / lost property report
|
|
5
|
+
ALTER TABLE complaint_lost_property_report_requests
|
|
6
|
+
ADD COLUMN IF NOT EXISTS lost_item_classification VARCHAR(100),
|
|
7
|
+
ADD COLUMN IF NOT EXISTS caa_property_type VARCHAR(255),
|
|
8
|
+
ADD COLUMN IF NOT EXISTS lost_card VARCHAR(10);
|
|
9
|
+
|
|
10
|
+
-- 2. Cancellation request
|
|
11
|
+
ALTER TABLE cancellation_requests
|
|
12
|
+
ADD COLUMN IF NOT EXISTS decision_number VARCHAR(255);
|
|
13
|
+
|
|
14
|
+
-- 3. VIP hall — meal_type multi-select (jsonb array)
|
|
15
|
+
DO $$
|
|
16
|
+
BEGIN
|
|
17
|
+
IF EXISTS (
|
|
18
|
+
SELECT 1 FROM information_schema.columns
|
|
19
|
+
WHERE table_name = 'vip_hall_requests' AND column_name = 'meal_type'
|
|
20
|
+
) THEN
|
|
21
|
+
BEGIN
|
|
22
|
+
ALTER TABLE vip_hall_requests
|
|
23
|
+
ALTER COLUMN meal_type TYPE jsonb
|
|
24
|
+
USING CASE
|
|
25
|
+
WHEN meal_type IS NULL THEN NULL
|
|
26
|
+
WHEN pg_typeof(meal_type)::text = 'jsonb' THEN meal_type
|
|
27
|
+
ELSE to_jsonb(ARRAY[meal_type::text])
|
|
28
|
+
END;
|
|
29
|
+
EXCEPTION WHEN OTHERS THEN
|
|
30
|
+
ALTER TABLE vip_hall_requests
|
|
31
|
+
ADD COLUMN IF NOT EXISTS meal_type_jsonb jsonb;
|
|
32
|
+
UPDATE vip_hall_requests
|
|
33
|
+
SET meal_type_jsonb = to_jsonb(ARRAY[meal_type::text])
|
|
34
|
+
WHERE meal_type IS NOT NULL;
|
|
35
|
+
ALTER TABLE vip_hall_requests DROP COLUMN IF EXISTS meal_type;
|
|
36
|
+
ALTER TABLE vip_hall_requests RENAME COLUMN meal_type_jsonb TO meal_type;
|
|
37
|
+
END;
|
|
38
|
+
END IF;
|
|
39
|
+
END $$;
|
|
40
|
+
|
|
41
|
+
-- 4. Legal complaint — complainant name optional
|
|
42
|
+
ALTER TABLE legal_complaint_requests
|
|
43
|
+
ALTER COLUMN complainant_name DROP NOT NULL;
|
|
44
|
+
|
|
45
|
+
-- 5. Media publications — expanded payload fields
|
|
46
|
+
ALTER TABLE media_publications_requests
|
|
47
|
+
ADD COLUMN IF NOT EXISTS job_title VARCHAR(500),
|
|
48
|
+
ADD COLUMN IF NOT EXISTS directorate VARCHAR(500),
|
|
49
|
+
ADD COLUMN IF NOT EXISTS department VARCHAR(500),
|
|
50
|
+
ADD COLUMN IF NOT EXISTS extension_number VARCHAR(50),
|
|
51
|
+
ADD COLUMN IF NOT EXISTS phone_number VARCHAR(100),
|
|
52
|
+
ADD COLUMN IF NOT EXISTS item_type VARCHAR(255),
|
|
53
|
+
ADD COLUMN IF NOT EXISTS publication_type jsonb,
|
|
54
|
+
ADD COLUMN IF NOT EXISTS publication_format jsonb,
|
|
55
|
+
ADD COLUMN IF NOT EXISTS purpose_of_publication TEXT,
|
|
56
|
+
ADD COLUMN IF NOT EXISTS intended_use TEXT,
|
|
57
|
+
ADD COLUMN IF NOT EXISTS target_audience TEXT,
|
|
58
|
+
ADD COLUMN IF NOT EXISTS is_new_or_update VARCHAR(50),
|
|
59
|
+
ADD COLUMN IF NOT EXISTS approved_budget_available VARCHAR(50),
|
|
60
|
+
ADD COLUMN IF NOT EXISTS estimated_quantity INT,
|
|
61
|
+
ADD COLUMN IF NOT EXISTS required_languages jsonb,
|
|
62
|
+
ADD COLUMN IF NOT EXISTS technical_requirements TEXT,
|
|
63
|
+
ADD COLUMN IF NOT EXISTS material_lines jsonb;
|
|
64
|
+
|
|
65
|
+
ALTER TABLE media_publications_requests
|
|
66
|
+
ALTER COLUMN item_code DROP NOT NULL;
|
|
@@ -36,6 +36,9 @@ export class CancellationRequests extends BaseModel {
|
|
|
36
36
|
@Column({ type: "integer", nullable: false })
|
|
37
37
|
old_request_number: number;
|
|
38
38
|
|
|
39
|
+
@Column({ type: "varchar", length: 255, nullable: true })
|
|
40
|
+
decision_number: string | null;
|
|
41
|
+
|
|
39
42
|
@Column({ type: "varchar", length: 500, nullable: false })
|
|
40
43
|
reason_for_cancellation: string;
|
|
41
44
|
|
|
@@ -48,6 +48,15 @@ export class ComplaintLostPropertyReportRequest extends BaseModel {
|
|
|
48
48
|
@Column({ type: "text", nullable: true })
|
|
49
49
|
description: string | null;
|
|
50
50
|
|
|
51
|
+
@Column({ type: "varchar", length: 100, nullable: true })
|
|
52
|
+
lost_item_classification: string | null;
|
|
53
|
+
|
|
54
|
+
@Column({ type: "varchar", length: 255, nullable: true })
|
|
55
|
+
caa_property_type: string | null;
|
|
56
|
+
|
|
57
|
+
@Column({ type: "varchar", length: 10, nullable: true })
|
|
58
|
+
lost_card: string | null;
|
|
59
|
+
|
|
51
60
|
@Column({ type: "int", nullable: false })
|
|
52
61
|
created_by: number;
|
|
53
62
|
|
|
@@ -25,7 +25,7 @@ export interface LegalComplaintIncidentInput {
|
|
|
25
25
|
|
|
26
26
|
/** Step 3 — Complainant: Name / Position / Employee ID / Directorate / Department / Section. */
|
|
27
27
|
export interface LegalComplaintComplainantInput {
|
|
28
|
-
name
|
|
28
|
+
name?: string | null;
|
|
29
29
|
position?: string | null;
|
|
30
30
|
employee_id?: string | null;
|
|
31
31
|
directorate?: string | null;
|
|
@@ -56,7 +56,7 @@ export interface LegalComplaintStructuredCreateFields {
|
|
|
56
56
|
incident_events: string | null;
|
|
57
57
|
incident_other_details: string | null;
|
|
58
58
|
incident_description: string;
|
|
59
|
-
complainant_name: string;
|
|
59
|
+
complainant_name: string | null;
|
|
60
60
|
complainant_position: string | null;
|
|
61
61
|
complainant_employee_id: string | null;
|
|
62
62
|
complainant_directorate: string | null;
|
|
@@ -193,13 +193,6 @@ export function parseLegalComplaintCreateFields(body: Record<string, any>): Lega
|
|
|
193
193
|
complainant_section_name = sec.name;
|
|
194
194
|
}
|
|
195
195
|
|
|
196
|
-
if (!complainant_name) {
|
|
197
|
-
return {
|
|
198
|
-
ok: false,
|
|
199
|
-
message: 'complainant.name is required (or legacy complainant_details text)',
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
|
|
203
196
|
const sub = body.complained_employee ?? body.complainedEmployee;
|
|
204
197
|
let complained_employee_name = '';
|
|
205
198
|
let complained_employee_position: string | null = null;
|
|
@@ -297,8 +290,8 @@ export class LegalComplaintRequest extends BaseModel {
|
|
|
297
290
|
@Column({ type: 'text', nullable: false })
|
|
298
291
|
incident_description: string;
|
|
299
292
|
|
|
300
|
-
@Column({ type: 'varchar', length: 255, nullable:
|
|
301
|
-
complainant_name: string;
|
|
293
|
+
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
294
|
+
complainant_name: string | null;
|
|
302
295
|
|
|
303
296
|
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
304
297
|
complainant_position: string | null;
|
|
@@ -20,6 +20,15 @@ export enum MediaPublicationsRequestStatus {
|
|
|
20
20
|
REJECTED = 'Rejected',
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
export interface MediaPublicationMaterialLine {
|
|
24
|
+
item_type?: string | null;
|
|
25
|
+
item_code?: string | null;
|
|
26
|
+
description?: string | null;
|
|
27
|
+
quantity?: number | null;
|
|
28
|
+
unit_price?: number | null;
|
|
29
|
+
cost?: number | null;
|
|
30
|
+
}
|
|
31
|
+
|
|
23
32
|
@Entity({ name: 'media_publications_requests' })
|
|
24
33
|
export class MediaPublicationsRequests extends BaseModel {
|
|
25
34
|
@Column({ type: 'int', nullable: true })
|
|
@@ -49,9 +58,24 @@ export class MediaPublicationsRequests extends BaseModel {
|
|
|
49
58
|
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
50
59
|
requestor_designation: string | null;
|
|
51
60
|
|
|
61
|
+
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
62
|
+
job_title: string | null;
|
|
63
|
+
|
|
64
|
+
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
65
|
+
directorate: string | null;
|
|
66
|
+
|
|
67
|
+
@Column({ type: 'varchar', length: 500, nullable: true })
|
|
68
|
+
department: string | null;
|
|
69
|
+
|
|
70
|
+
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
71
|
+
extension_number: string | null;
|
|
72
|
+
|
|
52
73
|
@Column({ type: 'varchar', length: 100, nullable: true })
|
|
53
74
|
contact_number: string | null;
|
|
54
75
|
|
|
76
|
+
@Column({ type: 'varchar', length: 100, nullable: true })
|
|
77
|
+
phone_number: string | null;
|
|
78
|
+
|
|
55
79
|
@Column({ type: 'varchar', length: 320, nullable: true })
|
|
56
80
|
email: string | null;
|
|
57
81
|
|
|
@@ -63,8 +87,11 @@ export class MediaPublicationsRequests extends BaseModel {
|
|
|
63
87
|
})
|
|
64
88
|
request_type: MediaPublicationsRequestType;
|
|
65
89
|
|
|
66
|
-
@Column({ type: 'varchar', length: 120, nullable:
|
|
67
|
-
item_code: string;
|
|
90
|
+
@Column({ type: 'varchar', length: 120, nullable: true })
|
|
91
|
+
item_code: string | null;
|
|
92
|
+
|
|
93
|
+
@Column({ type: 'varchar', length: 255, nullable: true })
|
|
94
|
+
item_type: string | null;
|
|
68
95
|
|
|
69
96
|
@Column({ type: 'text', nullable: false })
|
|
70
97
|
description: string;
|
|
@@ -83,6 +110,39 @@ export class MediaPublicationsRequests extends BaseModel {
|
|
|
83
110
|
})
|
|
84
111
|
event_type: MediaPublicationsEventType;
|
|
85
112
|
|
|
113
|
+
@Column({ type: 'jsonb', nullable: true })
|
|
114
|
+
publication_type: string[] | null;
|
|
115
|
+
|
|
116
|
+
@Column({ type: 'jsonb', nullable: true })
|
|
117
|
+
publication_format: string[] | null;
|
|
118
|
+
|
|
119
|
+
@Column({ type: 'text', nullable: true })
|
|
120
|
+
purpose_of_publication: string | null;
|
|
121
|
+
|
|
122
|
+
@Column({ type: 'text', nullable: true })
|
|
123
|
+
intended_use: string | null;
|
|
124
|
+
|
|
125
|
+
@Column({ type: 'text', nullable: true })
|
|
126
|
+
target_audience: string | null;
|
|
127
|
+
|
|
128
|
+
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
129
|
+
is_new_or_update: string | null;
|
|
130
|
+
|
|
131
|
+
@Column({ type: 'varchar', length: 50, nullable: true })
|
|
132
|
+
approved_budget_available: string | null;
|
|
133
|
+
|
|
134
|
+
@Column({ type: 'int', nullable: true })
|
|
135
|
+
estimated_quantity: number | null;
|
|
136
|
+
|
|
137
|
+
@Column({ type: 'jsonb', nullable: true })
|
|
138
|
+
required_languages: string[] | null;
|
|
139
|
+
|
|
140
|
+
@Column({ type: 'text', nullable: true })
|
|
141
|
+
technical_requirements: string | null;
|
|
142
|
+
|
|
143
|
+
@Column({ type: 'jsonb', nullable: true })
|
|
144
|
+
material_lines: MediaPublicationMaterialLine[] | null;
|
|
145
|
+
|
|
86
146
|
@Column({ type: 'int', nullable: true })
|
|
87
147
|
quantity: number | null;
|
|
88
148
|
|
|
@@ -18,8 +18,16 @@ export enum VipHallMealType {
|
|
|
18
18
|
BREAKFAST = "Breakfast",
|
|
19
19
|
LUNCH = "Lunch",
|
|
20
20
|
DINNER = "Dinner",
|
|
21
|
+
SNACKS = "Snacks",
|
|
21
22
|
}
|
|
22
23
|
|
|
24
|
+
export const VIP_HALL_MEAL_TYPE_VALUES = [
|
|
25
|
+
VipHallMealType.BREAKFAST,
|
|
26
|
+
VipHallMealType.LUNCH,
|
|
27
|
+
VipHallMealType.DINNER,
|
|
28
|
+
VipHallMealType.SNACKS,
|
|
29
|
+
] as const;
|
|
30
|
+
|
|
23
31
|
@Entity({ name: "vip_hall_requests" })
|
|
24
32
|
export class VipHallRequests extends BaseModel {
|
|
25
33
|
@Column({ type: "integer", nullable: true })
|
|
@@ -82,13 +90,8 @@ export class VipHallRequests extends BaseModel {
|
|
|
82
90
|
@Column({ type: "boolean", default: false, nullable: false })
|
|
83
91
|
meal_required: boolean;
|
|
84
92
|
|
|
85
|
-
@Column({
|
|
86
|
-
|
|
87
|
-
enum: VipHallMealType,
|
|
88
|
-
enumName: "vip_hall_meal_type_en",
|
|
89
|
-
nullable: true,
|
|
90
|
-
})
|
|
91
|
-
meal_type: VipHallMealType | null;
|
|
93
|
+
@Column({ type: "jsonb", nullable: true })
|
|
94
|
+
meal_type: string[] | null;
|
|
92
95
|
|
|
93
96
|
@Column({ type: "boolean", default: false, nullable: false })
|
|
94
97
|
network_support_required: boolean;
|
package/src/models/user.ts
CHANGED
|
@@ -115,6 +115,9 @@ export class User extends BaseModel {
|
|
|
115
115
|
@Column({ nullable: true })
|
|
116
116
|
avatar?: string;
|
|
117
117
|
|
|
118
|
+
@Column({ type: "enum", enum: ["English", "Arabic"], nullable: false, default: "English" })
|
|
119
|
+
is_selected_lang: "English" | "Arabic";
|
|
120
|
+
|
|
118
121
|
@Column({ nullable: true })
|
|
119
122
|
father_name?: string;
|
|
120
123
|
|