cloud-ide-academics 0.0.52 → 0.0.54
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/fesm2022/cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs +216 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs +317 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs +346 -0
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-bonafide.service-B_HDaTmS.mjs → cloud-ide-academics-bonafide.service-DB6ySuGe.mjs} +34 -1
- package/fesm2022/{cloud-ide-academics-bonafide.service-B_HDaTmS.mjs.map → cloud-ide-academics-bonafide.service-DB6ySuGe.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-class-program-term-create.component-CVatJk3N.mjs → cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs} +6 -3
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-C8HKn3DL.mjs → cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs} +5 -3
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-DbVZGw49.mjs → cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs} +36 -17
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-BVsXpSzg.mjs → cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs} +2 -2
- package/fesm2022/{cloud-ide-academics-program-class-create.component-BVsXpSzg.mjs.map → cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs.map} +1 -1
- package/fesm2022/{cloud-ide-academics-program-class-list.component-DAZeLVtC.mjs → cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs} +3 -2
- package/fesm2022/cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-DoW_oswM.mjs +0 -114
- package/fesm2022/cloud-ide-academics-bonafide-request-form.component-DoW_oswM.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-CsFlYVci.mjs +0 -121
- package/fesm2022/cloud-ide-academics-bonafide-request-list.component-CsFlYVci.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-CVatJk3N.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-C8HKn3DL.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-DbVZGw49.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-DAZeLVtC.mjs.map +0 -1
|
@@ -0,0 +1,346 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, DestroyRef, signal, computed, viewChild, effect, Component } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
5
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
6
|
+
import { NotificationService, CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, CideEleDropdownComponent, CideSelectComponent } from 'cloud-ide-element';
|
|
7
|
+
import { RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
8
|
+
import { C as CideAcademicsBonafideService } from './cloud-ide-academics-bonafide.service-DB6ySuGe.mjs';
|
|
9
|
+
import { generateStringFromObject } from 'cloud-ide-lms-model';
|
|
10
|
+
|
|
11
|
+
class CideAcademicsBonafideRequestListComponent {
|
|
12
|
+
destroyRef = inject(DestroyRef);
|
|
13
|
+
bonafideService = inject(CideAcademicsBonafideService);
|
|
14
|
+
router = inject(Router);
|
|
15
|
+
route = inject(ActivatedRoute);
|
|
16
|
+
rightsService = inject(RightsService);
|
|
17
|
+
sharedService = inject(CideLytSharedService);
|
|
18
|
+
notificationService = inject(NotificationService);
|
|
19
|
+
requests = signal([], ...(ngDevMode ? [{ debugName: "requests" }] : []));
|
|
20
|
+
total = signal(0, ...(ngDevMode ? [{ debugName: "total" }] : []));
|
|
21
|
+
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
22
|
+
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
23
|
+
selectedStatus = signal('ALL', ...(ngDevMode ? [{ debugName: "selectedStatus" }] : []));
|
|
24
|
+
// Page config (title/subtitle) from page API
|
|
25
|
+
pageTitle = signal('', ...(ngDevMode ? [{ debugName: "pageTitle" }] : []));
|
|
26
|
+
pageSubtitle = signal('', ...(ngDevMode ? [{ debugName: "pageSubtitle" }] : []));
|
|
27
|
+
pageCode = signal('academics_bonafide_list', ...(ngDevMode ? [{ debugName: "pageCode" }] : []));
|
|
28
|
+
canCreate = computed(() => this.rightsService.hasRight('CREATE'), ...(ngDevMode ? [{ debugName: "canCreate" }] : []));
|
|
29
|
+
canView = computed(() => this.rightsService.hasRight('VIEW'), ...(ngDevMode ? [{ debugName: "canView" }] : []));
|
|
30
|
+
canDownload = computed(() => this.rightsService.hasRight('DOWNLOAD'), ...(ngDevMode ? [{ debugName: "canDownload" }] : []));
|
|
31
|
+
// Template references for custom renderers
|
|
32
|
+
statusRendererTemplate = viewChild.required('statusRendererTemplate');
|
|
33
|
+
actionsDropdownRendererTemplate = viewChild.required('actionsDropdownRendererTemplate');
|
|
34
|
+
// Status filter options
|
|
35
|
+
statusOptions = [
|
|
36
|
+
{ value: 'ALL', label: 'All Status' },
|
|
37
|
+
{ value: 'PENDING', label: 'Pending' },
|
|
38
|
+
{ value: 'IN_REVIEW', label: 'In Review' },
|
|
39
|
+
{ value: 'APPROVED', label: 'Approved' },
|
|
40
|
+
{ value: 'COMPLETED', label: 'Completed' },
|
|
41
|
+
{ value: 'REJECTED', label: 'Rejected' }
|
|
42
|
+
];
|
|
43
|
+
// Constructor to set up reactive effect for page data
|
|
44
|
+
constructor() {
|
|
45
|
+
// Watch for page data changes in cache and update title/subtitle reactively
|
|
46
|
+
effect(() => {
|
|
47
|
+
const currentPageCode = this.pageCode();
|
|
48
|
+
if (!currentPageCode)
|
|
49
|
+
return;
|
|
50
|
+
// Watch the page data cache signal from shared service
|
|
51
|
+
const pageDataCache = this.sharedService.pageDataStore();
|
|
52
|
+
const cachedData = pageDataCache[currentPageCode];
|
|
53
|
+
const page = cachedData?.data?.page;
|
|
54
|
+
if (page) {
|
|
55
|
+
// Try to parse configuration for title/subtitle
|
|
56
|
+
const cfgString = page?.sypg_configuration;
|
|
57
|
+
if (cfgString) {
|
|
58
|
+
try {
|
|
59
|
+
const cfg = JSON.parse(cfgString);
|
|
60
|
+
this.pageTitle.set(cfg.title || page?.sypg_title || '');
|
|
61
|
+
this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.warn('Invalid page config JSON', e);
|
|
65
|
+
this.pageTitle.set(page?.sypg_title || '');
|
|
66
|
+
this.pageSubtitle.set(page?.sypg_desc || '');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.pageTitle.set(page?.sypg_title || '');
|
|
71
|
+
this.pageSubtitle.set(page?.sypg_desc || '');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
gridConfig = computed(() => ({
|
|
77
|
+
id: 'bonafide-request-grid',
|
|
78
|
+
columns: [
|
|
79
|
+
{ key: 'abnr_request_number', header: 'Request Number', type: 'text', width: 'md', align: 'left' },
|
|
80
|
+
{ key: 'abnr_purpose', header: 'Purpose', type: 'text', width: 'lg' },
|
|
81
|
+
{ key: 'abnr_request_date', header: 'Requested Date', type: 'date', width: 'md', align: 'center' },
|
|
82
|
+
{ key: 'abnr_status_id_sygms', header: 'Status', type: 'text', width: 'sm', align: 'center', renderer: 'statusRenderer' },
|
|
83
|
+
{ key: 'actions', header: 'Actions', type: 'text', width: 'sm', align: 'center', renderer: 'actionsDropdownRenderer' }
|
|
84
|
+
],
|
|
85
|
+
data: this.requests(),
|
|
86
|
+
trackBy: '_id',
|
|
87
|
+
pagination: {
|
|
88
|
+
enabled: true,
|
|
89
|
+
pageSize: 10,
|
|
90
|
+
pageSizeOptions: [10, 25, 50, 100],
|
|
91
|
+
showQuickJump: true,
|
|
92
|
+
showPageInfo: true,
|
|
93
|
+
showRefresh: true
|
|
94
|
+
},
|
|
95
|
+
search: {
|
|
96
|
+
enabled: true,
|
|
97
|
+
placeholder: 'Search bonafide requests...',
|
|
98
|
+
searchableColumns: ['abnr_purpose', 'abnr_request_number'],
|
|
99
|
+
debounceMs: 300
|
|
100
|
+
},
|
|
101
|
+
loading: {
|
|
102
|
+
useDefer: true,
|
|
103
|
+
skeletonRows: 5,
|
|
104
|
+
showOverlay: false
|
|
105
|
+
},
|
|
106
|
+
responsive: true,
|
|
107
|
+
striped: false,
|
|
108
|
+
bordered: true,
|
|
109
|
+
compact: false,
|
|
110
|
+
fullHeight: true
|
|
111
|
+
}), ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
|
|
112
|
+
templateRenderers = computed(() => ({
|
|
113
|
+
statusRenderer: this.statusRendererTemplate(),
|
|
114
|
+
actionsDropdownRenderer: this.actionsDropdownRendererTemplate()
|
|
115
|
+
}), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
|
|
116
|
+
ngOnInit() {
|
|
117
|
+
// Initialize rights for this page
|
|
118
|
+
this.rightsService.initializeRights('academics_bonafide_list');
|
|
119
|
+
// Initialize page code from route data
|
|
120
|
+
this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {
|
|
121
|
+
const codeFromRoute = data['page']?.sypg_page_code || data['sypg_page_code'];
|
|
122
|
+
const codeFromQuery = this.route.snapshot.queryParamMap.get('sypg_page_code');
|
|
123
|
+
const finalCode = (codeFromRoute || codeFromQuery || this.pageCode()).toString();
|
|
124
|
+
this.pageCode.set(finalCode);
|
|
125
|
+
// Page title/subtitle will be updated reactively by the effect when page data is loaded
|
|
126
|
+
// Also check immediately if data is already available
|
|
127
|
+
const cached = finalCode ? this.sharedService.getCachedPageData(finalCode) : null;
|
|
128
|
+
const page = data['page'] || cached?.data?.page;
|
|
129
|
+
if (page) {
|
|
130
|
+
const cfgString = page?.sypg_configuration;
|
|
131
|
+
if (cfgString) {
|
|
132
|
+
try {
|
|
133
|
+
const cfg = JSON.parse(cfgString);
|
|
134
|
+
this.pageTitle.set(cfg.title || page?.sypg_title || '');
|
|
135
|
+
this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
console.warn('Invalid page config JSON', e);
|
|
139
|
+
this.pageTitle.set(page?.sypg_title || '');
|
|
140
|
+
this.pageSubtitle.set(page?.sypg_desc || '');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.pageTitle.set(page?.sypg_title || '');
|
|
145
|
+
this.pageSubtitle.set(page?.sypg_desc || '');
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
this.loadRequests();
|
|
150
|
+
}
|
|
151
|
+
loadRequests(filters, pageIndex = 1, pageSize = 10) {
|
|
152
|
+
this.loading.set(true);
|
|
153
|
+
this.error.set(null);
|
|
154
|
+
const queryParams = {
|
|
155
|
+
pageIndex,
|
|
156
|
+
pageSize,
|
|
157
|
+
...filters
|
|
158
|
+
};
|
|
159
|
+
this.bonafideService.getRequestList(queryParams)
|
|
160
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
161
|
+
.subscribe({
|
|
162
|
+
next: (response) => {
|
|
163
|
+
if (response.success) {
|
|
164
|
+
// Fix: Handle response structure correctly
|
|
165
|
+
const data = response.data;
|
|
166
|
+
this.requests.set(data?.requests || []);
|
|
167
|
+
this.total.set(data?.total || 0);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.error.set(response.message || 'Failed to load requests');
|
|
171
|
+
this.requests.set([]);
|
|
172
|
+
this.total.set(0);
|
|
173
|
+
}
|
|
174
|
+
this.loading.set(false);
|
|
175
|
+
},
|
|
176
|
+
error: (err) => {
|
|
177
|
+
console.error('Error loading requests:', err);
|
|
178
|
+
this.error.set(err.message || 'Failed to load requests');
|
|
179
|
+
this.requests.set([]);
|
|
180
|
+
this.total.set(0);
|
|
181
|
+
this.loading.set(false);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
onGridEvent(event) {
|
|
186
|
+
switch (event.type) {
|
|
187
|
+
case 'pageChange': {
|
|
188
|
+
// Handle pagination - data can be { page: number; pageSize: number } or { pageIndex: number } or just a number
|
|
189
|
+
if (event.data && typeof event.data === 'object') {
|
|
190
|
+
const pageData = event.data;
|
|
191
|
+
const pageIndex = pageData.pageIndex || pageData.page || 1;
|
|
192
|
+
const pageSize = pageData.pageSize || 10;
|
|
193
|
+
this.loadRequests(this.getFilters(), pageIndex, pageSize);
|
|
194
|
+
}
|
|
195
|
+
else if (typeof event.data === 'number') {
|
|
196
|
+
this.loadRequests(this.getFilters(), event.data, 10);
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
this.loadRequests(this.getFilters());
|
|
200
|
+
}
|
|
201
|
+
break;
|
|
202
|
+
}
|
|
203
|
+
case 'refresh':
|
|
204
|
+
this.loadRequests(this.getFilters());
|
|
205
|
+
break;
|
|
206
|
+
case 'search':
|
|
207
|
+
// Handle search if needed
|
|
208
|
+
this.loadRequests(this.getFilters());
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
onStatusFilterChange(status) {
|
|
213
|
+
// Convert to string - handle array case by taking first element
|
|
214
|
+
const statusStr = Array.isArray(status) ? status[0] : String(status);
|
|
215
|
+
this.selectedStatus.set(statusStr);
|
|
216
|
+
this.loadRequests(this.getFilters());
|
|
217
|
+
}
|
|
218
|
+
getFilters() {
|
|
219
|
+
const filters = {};
|
|
220
|
+
if (this.selectedStatus() !== 'ALL') {
|
|
221
|
+
// Note: In a real implementation, you'd need to get status ID from master data
|
|
222
|
+
// For now, we'll filter on the frontend or pass the status code
|
|
223
|
+
filters.statusCode = this.selectedStatus();
|
|
224
|
+
}
|
|
225
|
+
return filters;
|
|
226
|
+
}
|
|
227
|
+
getStatusText(row) {
|
|
228
|
+
const status = row.abnr_status_id_sygms;
|
|
229
|
+
if (!status)
|
|
230
|
+
return 'N/A';
|
|
231
|
+
if (typeof status === 'string')
|
|
232
|
+
return status;
|
|
233
|
+
return status.sygms_title || status.sygms_code || 'N/A';
|
|
234
|
+
}
|
|
235
|
+
getStatusBadgeClass(row) {
|
|
236
|
+
const statusText = this.getStatusText(row).toUpperCase();
|
|
237
|
+
if (statusText.includes('PENDING')) {
|
|
238
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 dark:tw-bg-yellow-900/30 dark:tw-text-yellow-300';
|
|
239
|
+
}
|
|
240
|
+
else if (statusText.includes('REVIEW')) {
|
|
241
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 dark:tw-bg-blue-900/30 dark:tw-text-blue-300';
|
|
242
|
+
}
|
|
243
|
+
else if (statusText.includes('APPROVED')) {
|
|
244
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 dark:tw-bg-green-900/30 dark:tw-text-green-300';
|
|
245
|
+
}
|
|
246
|
+
else if (statusText.includes('COMPLETED')) {
|
|
247
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-emerald-100 tw-text-emerald-800 dark:tw-bg-emerald-900/30 dark:tw-text-emerald-300';
|
|
248
|
+
}
|
|
249
|
+
else if (statusText.includes('REJECTED')) {
|
|
250
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 dark:tw-bg-red-900/30 dark:tw-text-red-300';
|
|
251
|
+
}
|
|
252
|
+
return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800 dark:tw-bg-gray-700 dark:tw-text-gray-300';
|
|
253
|
+
}
|
|
254
|
+
getActionDropdownItems(row) {
|
|
255
|
+
const items = [];
|
|
256
|
+
if (this.canView()) {
|
|
257
|
+
items.push({
|
|
258
|
+
id: `view-${row._id || 'unknown'}`,
|
|
259
|
+
label: 'View Details',
|
|
260
|
+
icon: 'visibility'
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
if (this.canDownload()) {
|
|
264
|
+
if (row.abnr_soft_copy_id_cyfm) {
|
|
265
|
+
items.push({
|
|
266
|
+
id: `download-soft-${row._id || 'unknown'}`,
|
|
267
|
+
label: 'Download Soft Copy',
|
|
268
|
+
icon: 'download'
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
if (row.abnr_stamped_copy_id_cyfm) {
|
|
272
|
+
items.push({
|
|
273
|
+
id: `download-stamped-${row._id || 'unknown'}`,
|
|
274
|
+
label: 'Download Stamped Copy',
|
|
275
|
+
icon: 'download'
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (items.length === 0) {
|
|
280
|
+
items.push({
|
|
281
|
+
id: `no-action-${row._id || 'unknown'}`,
|
|
282
|
+
label: 'No actions available',
|
|
283
|
+
icon: 'info',
|
|
284
|
+
disabled: true
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
return items;
|
|
288
|
+
}
|
|
289
|
+
onActionItemClick(item, row) {
|
|
290
|
+
if (item.disabled) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
const itemId = item.id;
|
|
294
|
+
if (itemId.startsWith('view-')) {
|
|
295
|
+
this.viewRequest(row);
|
|
296
|
+
}
|
|
297
|
+
else if (itemId.startsWith('download-soft-')) {
|
|
298
|
+
this.downloadCertificate(row, 'soft-copy');
|
|
299
|
+
}
|
|
300
|
+
else if (itemId.startsWith('download-stamped-')) {
|
|
301
|
+
this.downloadCertificate(row, 'stamped-copy');
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
viewRequest(row) {
|
|
305
|
+
if (!row._id) {
|
|
306
|
+
this.notificationService.error('Request ID not found');
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
const query = generateStringFromObject({ abnr_id: row._id });
|
|
310
|
+
this.router.navigate(['/control-panel/bonafide/view', query]);
|
|
311
|
+
}
|
|
312
|
+
downloadCertificate(row, fileType) {
|
|
313
|
+
if (!row._id) {
|
|
314
|
+
this.notificationService.error('Request ID not found');
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
try {
|
|
318
|
+
this.bonafideService.downloadCertificate(row._id, fileType);
|
|
319
|
+
this.notificationService.success(`Downloading ${fileType === 'soft-copy' ? 'soft copy' : 'stamped copy'}...`);
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
console.error('Error downloading certificate:', error);
|
|
323
|
+
this.notificationService.error('Failed to download certificate');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
createNew() {
|
|
327
|
+
this.router.navigate(['/control-panel/bonafide/create']);
|
|
328
|
+
}
|
|
329
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideRequestListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
330
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideAcademicsBonafideRequestListComponent, isStandalone: true, selector: "cide-academics-bonafide-request-list", viewQueries: [{ propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Bonafide Request List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_list' }\">\r\n <div class=\"bonafide-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-justify-end tw-items-center\">\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-gap-2\">\r\n <!-- Status Filter -->\r\n <cide-ele-select\r\n [options]=\"statusOptions\"\r\n [ngModel]=\"selectedStatus()\"\r\n (ngModelChange)=\"onStatusFilterChange($event)\"\r\n placeholder=\"Filter by status\"\r\n class=\"tw-w-48\">\r\n </cide-ele-select>\r\n\r\n @if (canCreate()) {\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"createNew()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n New Bonafide Request\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-mx-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Status Badge Template -->\r\n <ng-template #statusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-3\">\r\n <span [class]=\"getStatusBadgeClass(row)\">\r\n {{ getStatusText(row) }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n (itemClick)=\"onActionItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>\r\n", styles: [".bonafide-list-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
|
|
331
|
+
}
|
|
332
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideRequestListComponent, decorators: [{
|
|
333
|
+
type: Component,
|
|
334
|
+
args: [{ selector: 'cide-academics-bonafide-request-list', standalone: true, imports: [
|
|
335
|
+
CommonModule,
|
|
336
|
+
CideEleDataGridComponent,
|
|
337
|
+
CideEleButtonComponent,
|
|
338
|
+
CideIconComponent,
|
|
339
|
+
CideLytSharedWrapperComponent,
|
|
340
|
+
CideEleDropdownComponent,
|
|
341
|
+
CideSelectComponent
|
|
342
|
+
], template: "<!-- Bonafide Request List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_list' }\">\r\n <div class=\"bonafide-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-justify-end tw-items-center\">\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-gap-2\">\r\n <!-- Status Filter -->\r\n <cide-ele-select\r\n [options]=\"statusOptions\"\r\n [ngModel]=\"selectedStatus()\"\r\n (ngModelChange)=\"onStatusFilterChange($event)\"\r\n placeholder=\"Filter by status\"\r\n class=\"tw-w-48\">\r\n </cide-ele-select>\r\n\r\n @if (canCreate()) {\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"createNew()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n New Bonafide Request\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-mx-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Status Badge Template -->\r\n <ng-template #statusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-3\">\r\n <span [class]=\"getStatusBadgeClass(row)\">\r\n {{ getStatusText(row) }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n (itemClick)=\"onActionItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>\r\n", styles: [".bonafide-list-container{@apply tw-w-full tw-h-full;}:host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
|
|
343
|
+
}], ctorParameters: () => [] });
|
|
344
|
+
|
|
345
|
+
export { CideAcademicsBonafideRequestListComponent };
|
|
346
|
+
//# sourceMappingURL=cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-list/bonafide-request-list.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, computed, OnInit, effect, TemplateRef, viewChild } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, GridConfiguration, GridEvent, CideEleDropdownComponent, DropdownItem, NotificationService, CideSelectComponent } from 'cloud-ide-element';\nimport { AppStateHelperService, RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\nimport { generateStringFromObject } from 'cloud-ide-lms-model';\n\ntype TemplateContext = { value: any; row: any; column: any };\n\n@Component({\n selector: 'cide-academics-bonafide-request-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideLytSharedWrapperComponent,\n CideEleDropdownComponent,\n CideSelectComponent\n ],\n templateUrl: './bonafide-request-list.component.html',\n styles: [`\n .bonafide-list-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class CideAcademicsBonafideRequestListComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private bonafideService = inject(CideAcademicsBonafideService);\n private router = inject(Router);\n private route = inject(ActivatedRoute);\n private rightsService = inject(RightsService);\n private sharedService = inject(CideLytSharedService);\n private notificationService = inject(NotificationService);\n\n requests = signal<any[]>([]);\n total = signal<number>(0);\n loading = signal(false);\n error = signal<string | null>(null);\n selectedStatus = signal<string>('ALL');\n \n // Page config (title/subtitle) from page API\n pageTitle = signal<string>('');\n pageSubtitle = signal<string>('');\n pageCode = signal<string>('academics_bonafide_list');\n \n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canView = computed(() => this.rightsService.hasRight('VIEW'));\n canDownload = computed(() => this.rightsService.hasRight('DOWNLOAD'));\n\n // Template references for custom renderers\n statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Status filter options\n statusOptions = [\n { value: 'ALL', label: 'All Status' },\n { value: 'PENDING', label: 'Pending' },\n { value: 'IN_REVIEW', label: 'In Review' },\n { value: 'APPROVED', label: 'Approved' },\n { value: 'COMPLETED', label: 'Completed' },\n { value: 'REJECTED', label: 'Rejected' }\n ];\n\n // Constructor to set up reactive effect for page data\n constructor() {\n // Watch for page data changes in cache and update title/subtitle reactively\n effect(() => {\n const currentPageCode = this.pageCode();\n if (!currentPageCode) return;\n\n // Watch the page data cache signal from shared service\n const pageDataCache = this.sharedService.pageDataStore();\n const cachedData = pageDataCache[currentPageCode];\n const page = cachedData?.data?.page;\n \n if (page) {\n // Try to parse configuration for title/subtitle\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n }\n\n gridConfig = computed<GridConfiguration<any>>(() => ({\n id: 'bonafide-request-grid',\n columns: [\n { key: 'abnr_request_number', header: 'Request Number', type: 'text', width: 'md', align: 'left' },\n { key: 'abnr_purpose', header: 'Purpose', type: 'text', width: 'lg' },\n { key: 'abnr_request_date', header: 'Requested Date', type: 'date', width: 'md', align: 'center' },\n { key: 'abnr_status_id_sygms', header: 'Status', type: 'text', width: 'sm', align: 'center', renderer: 'statusRenderer' },\n { key: 'actions', header: 'Actions', type: 'text', width: 'sm', align: 'center', renderer: 'actionsDropdownRenderer' }\n ],\n data: this.requests(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search bonafide requests...',\n searchableColumns: ['abnr_purpose', 'abnr_request_number'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n fullHeight: true\n }));\n\n templateRenderers = computed(() => ({\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n ngOnInit(): void {\n // Initialize rights for this page\n this.rightsService.initializeRights('academics_bonafide_list');\n\n // Initialize page code from route data\n this.route.data.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(data => {\n const codeFromRoute = data['page']?.sypg_page_code || data['sypg_page_code'];\n const codeFromQuery = this.route.snapshot.queryParamMap.get('sypg_page_code');\n const finalCode = (codeFromRoute || codeFromQuery || this.pageCode()).toString();\n this.pageCode.set(finalCode);\n\n // Page title/subtitle will be updated reactively by the effect when page data is loaded\n // Also check immediately if data is already available\n const cached = finalCode ? this.sharedService.getCachedPageData(finalCode) : null;\n const page = data['page'] || cached?.data?.page;\n if (page) {\n const cfgString = page?.sypg_configuration;\n if (cfgString) {\n try {\n const cfg = JSON.parse(cfgString);\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\n } catch (e) {\n console.warn('Invalid page config JSON', e);\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n } else {\n this.pageTitle.set(page?.sypg_title || '');\n this.pageSubtitle.set(page?.sypg_desc || '');\n }\n }\n });\n\n this.loadRequests();\n }\n\n loadRequests(filters?: any, pageIndex: number = 1, pageSize: number = 10): void {\n this.loading.set(true);\n this.error.set(null);\n\n const queryParams: any = {\n pageIndex,\n pageSize,\n ...filters\n };\n\n this.bonafideService.getRequestList(queryParams)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n // Fix: Handle response structure correctly\n const data = response.data;\n this.requests.set(data?.requests || []);\n this.total.set(data?.total || 0);\n } else {\n this.error.set(response.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n }\n this.loading.set(false);\n },\n error: (err) => {\n console.error('Error loading requests:', err);\n this.error.set(err.message || 'Failed to load requests');\n this.requests.set([]);\n this.total.set(0);\n this.loading.set(false);\n }\n });\n }\n\n onGridEvent(event: GridEvent): void {\n switch (event.type) {\n case 'pageChange': {\n // Handle pagination - data can be { page: number; pageSize: number } or { pageIndex: number } or just a number\n if (event.data && typeof event.data === 'object') {\n const pageData = event.data as { page?: number; pageIndex?: number; pageSize?: number };\n const pageIndex = pageData.pageIndex || pageData.page || 1;\n const pageSize = pageData.pageSize || 10;\n this.loadRequests(this.getFilters(), pageIndex, pageSize);\n } else if (typeof event.data === 'number') {\n this.loadRequests(this.getFilters(), event.data, 10);\n } else {\n this.loadRequests(this.getFilters());\n }\n break;\n }\n case 'refresh':\n this.loadRequests(this.getFilters());\n break;\n case 'search':\n // Handle search if needed\n this.loadRequests(this.getFilters());\n break;\n }\n }\n\n onStatusFilterChange(status: string | number | string[]): void {\n // Convert to string - handle array case by taking first element\n const statusStr = Array.isArray(status) ? status[0] : String(status);\n this.selectedStatus.set(statusStr);\n this.loadRequests(this.getFilters());\n }\n\n getFilters(): any {\n const filters: any = {};\n if (this.selectedStatus() !== 'ALL') {\n // Note: In a real implementation, you'd need to get status ID from master data\n // For now, we'll filter on the frontend or pass the status code\n filters.statusCode = this.selectedStatus();\n }\n return filters;\n }\n\n getStatusText(row: any): string {\n const status = row.abnr_status_id_sygms;\n if (!status) return 'N/A';\n if (typeof status === 'string') return status;\n return status.sygms_title || status.sygms_code || 'N/A';\n }\n\n getStatusBadgeClass(row: any): string {\n const statusText = this.getStatusText(row).toUpperCase();\n if (statusText.includes('PENDING')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 dark:tw-bg-yellow-900/30 dark:tw-text-yellow-300';\n } else if (statusText.includes('REVIEW')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800 dark:tw-bg-blue-900/30 dark:tw-text-blue-300';\n } else if (statusText.includes('APPROVED')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-green-100 tw-text-green-800 dark:tw-bg-green-900/30 dark:tw-text-green-300';\n } else if (statusText.includes('COMPLETED')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-emerald-100 tw-text-emerald-800 dark:tw-bg-emerald-900/30 dark:tw-text-emerald-300';\n } else if (statusText.includes('REJECTED')) {\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 dark:tw-bg-red-900/30 dark:tw-text-red-300';\n }\n return 'tw-inline-flex tw-items-center tw-px-2.5 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-gray-100 tw-text-gray-800 dark:tw-bg-gray-700 dark:tw-text-gray-300';\n }\n\n getActionDropdownItems(row: any): DropdownItem[] {\n const items: DropdownItem[] = [];\n\n if (this.canView()) {\n items.push({\n id: `view-${row._id || 'unknown'}`,\n label: 'View Details',\n icon: 'visibility'\n });\n }\n\n if (this.canDownload()) {\n if (row.abnr_soft_copy_id_cyfm) {\n items.push({\n id: `download-soft-${row._id || 'unknown'}`,\n label: 'Download Soft Copy',\n icon: 'download'\n });\n }\n\n if (row.abnr_stamped_copy_id_cyfm) {\n items.push({\n id: `download-stamped-${row._id || 'unknown'}`,\n label: 'Download Stamped Copy',\n icon: 'download'\n });\n }\n }\n\n if (items.length === 0) {\n items.push({\n id: `no-action-${row._id || 'unknown'}`,\n label: 'No actions available',\n icon: 'info',\n disabled: true\n });\n }\n\n return items;\n }\n\n onActionItemClick(item: DropdownItem, row: any): void {\n if (item.disabled) {\n return;\n }\n\n const itemId = item.id;\n \n if (itemId.startsWith('view-')) {\n this.viewRequest(row);\n } else if (itemId.startsWith('download-soft-')) {\n this.downloadCertificate(row, 'soft-copy');\n } else if (itemId.startsWith('download-stamped-')) {\n this.downloadCertificate(row, 'stamped-copy');\n }\n }\n\n viewRequest(row: any): void {\n if (!row._id) {\n this.notificationService.error('Request ID not found');\n return;\n }\n const query = generateStringFromObject({ abnr_id: row._id });\n this.router.navigate(['/control-panel/bonafide/view', query]);\n }\n\n downloadCertificate(row: any, fileType: 'soft-copy' | 'stamped-copy'): void {\n if (!row._id) {\n this.notificationService.error('Request ID not found');\n return;\n }\n\n try {\n this.bonafideService.downloadCertificate(row._id, fileType);\n this.notificationService.success(`Downloading ${fileType === 'soft-copy' ? 'soft copy' : 'stamped copy'}...`);\n } catch (error: any) {\n console.error('Error downloading certificate:', error);\n this.notificationService.error('Failed to download certificate');\n }\n }\n\n createNew(): void {\n this.router.navigate(['/control-panel/bonafide/create']);\n }\n}\n","<!-- Bonafide Request List with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_list' }\">\r\n <div class=\"bonafide-list-container tw-bg-white tw-shadow-lg tw-rounded-lg tw-table tw-h-full\">\r\n\r\n <!-- Header Section with Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-px-6 tw-py-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-justify-end tw-items-center\">\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-3 tw-gap-2\">\r\n <!-- Status Filter -->\r\n <cide-ele-select\r\n [options]=\"statusOptions\"\r\n [ngModel]=\"selectedStatus()\"\r\n (ngModelChange)=\"onStatusFilterChange($event)\"\r\n placeholder=\"Filter by status\"\r\n class=\"tw-w-48\">\r\n </cide-ele-select>\r\n\r\n @if (canCreate()) {\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"createNew()\"\r\n class=\"tw-whitespace-nowrap tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon size=\"xs\" class=\"tw-w-6 tw-h-5\">add</cide-ele-icon>\r\n New Bonafide Request\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Message -->\r\n @if (error()) {\r\n <div class=\"tw-mt-4 tw-mx-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\r\n <div class=\"tw-flex\">\r\n <cide-ele-icon name=\"error\" class=\"tw-text-red-400\"></cide-ele-icon>\r\n <div class=\"tw-ml-3\">\r\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1\">{{ error() }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <!-- Data Grid Component -->\r\n <cide-ele-data-grid \r\n [config]=\"gridConfig()\"\r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n <!-- Status Badge Template -->\r\n <ng-template #statusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-py-3\">\r\n <span [class]=\"getStatusBadgeClass(row)\">\r\n {{ getStatusText(row) }}\r\n </span>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Actions Dropdown Template -->\r\n <ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <cide-ele-dropdown\r\n [items]=\"getActionDropdownItems(row)\"\r\n (itemClick)=\"onActionItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n </ng-template>\r\n</cide-lyt-shared-wrapper>\r\n"],"names":[],"mappings":"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"}
|
|
@@ -107,6 +107,39 @@ class CideAcademicsBonafideService {
|
|
|
107
107
|
]);
|
|
108
108
|
return this.http.get(url);
|
|
109
109
|
}
|
|
110
|
+
/**
|
|
111
|
+
* Download bonafide certificate file
|
|
112
|
+
* @param requestId - Bonafide request ID
|
|
113
|
+
* @param fileType - 'soft-copy' or 'stamped-copy'
|
|
114
|
+
*/
|
|
115
|
+
downloadCertificate(requestId, fileType) {
|
|
116
|
+
const url = cidePath.join([
|
|
117
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
118
|
+
academicsRoutesUrl.module,
|
|
119
|
+
academicsRoutesUrl.bonafide,
|
|
120
|
+
requestId,
|
|
121
|
+
'download',
|
|
122
|
+
fileType
|
|
123
|
+
]);
|
|
124
|
+
// Open in new window for download
|
|
125
|
+
window.open(url, '_blank');
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Get download URL for certificate file
|
|
129
|
+
* @param requestId - Bonafide request ID
|
|
130
|
+
* @param fileType - 'soft-copy' or 'stamped-copy'
|
|
131
|
+
* @returns Download URL string
|
|
132
|
+
*/
|
|
133
|
+
getDownloadUrl(requestId, fileType) {
|
|
134
|
+
return cidePath.join([
|
|
135
|
+
hostManagerRoutesUrl.cideSuiteHost,
|
|
136
|
+
academicsRoutesUrl.module,
|
|
137
|
+
academicsRoutesUrl.bonafide,
|
|
138
|
+
requestId,
|
|
139
|
+
'download',
|
|
140
|
+
fileType
|
|
141
|
+
]);
|
|
142
|
+
}
|
|
110
143
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
111
144
|
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideService, providedIn: 'root' });
|
|
112
145
|
}
|
|
@@ -118,4 +151,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
118
151
|
}] });
|
|
119
152
|
|
|
120
153
|
export { CideAcademicsBonafideService as C };
|
|
121
|
-
//# sourceMappingURL=cloud-ide-academics-bonafide.service-
|
|
154
|
+
//# sourceMappingURL=cloud-ide-academics-bonafide.service-DB6ySuGe.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-academics-bonafide.service-
|
|
1
|
+
{"version":3,"file":"cloud-ide-academics-bonafide.service-DB6ySuGe.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/services/bonafide.service.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { cidePath, academicsRoutesUrl, hostManagerRoutesUrl, generateStringFromObject } from 'cloud-ide-lms-model';\r\n\r\nexport interface CreateBonafideRequestDto {\r\n abnr_student_id_auth?: string;\r\n abnr_purpose?: string;\r\n abnr_requested_date?: Date;\r\n abnr_remarks?: string;\r\n abnr_entity_id_syen?: string;\r\n}\r\n\r\nexport interface BonafideRequestResponse {\r\n success: boolean;\r\n message?: string;\r\n data?: any;\r\n total?: number;\r\n}\r\n\r\nexport interface ApproveBonafideDto {\r\n comments?: string;\r\n actionBy?: string;\r\n}\r\n\r\nexport interface RejectBonafideDto {\r\n comments?: string;\r\n reason?: string;\r\n actionBy?: string;\r\n}\r\n\r\nexport interface UploadStampedCopyDto {\r\n stampedCopyFileId?: string;\r\n stampedCopyUrl?: string;\r\n uploadedBy?: string;\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideAcademicsBonafideService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Create bonafide request\r\n */\r\n createRequest(data: CreateBonafideRequestDto): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide\r\n ]);\r\n return this.http.post<BonafideRequestResponse>(url, data);\r\n }\r\n\r\n /**\r\n * Get bonafide request list\r\n */\r\n getRequestList(query?: any): Observable<BonafideRequestResponse> {\r\n const queryString = query ? generateStringFromObject(query) : '';\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n queryString\r\n ]);\r\n return this.http.get<BonafideRequestResponse>(url);\r\n }\r\n\r\n /**\r\n * Get bonafide request by ID\r\n */\r\n getRequestById(id: string): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n 'byId',\r\n id\r\n ]);\r\n return this.http.get<BonafideRequestResponse>(url);\r\n }\r\n\r\n /**\r\n * Approve bonafide request\r\n */\r\n approveRequest(requestId: string, data: ApproveBonafideDto): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'approve'\r\n ]);\r\n return this.http.post<BonafideRequestResponse>(url, data);\r\n }\r\n\r\n /**\r\n * Reject bonafide request\r\n */\r\n rejectRequest(requestId: string, data: RejectBonafideDto): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'reject'\r\n ]);\r\n return this.http.post<BonafideRequestResponse>(url, data);\r\n }\r\n\r\n /**\r\n * Generate bonafide certificate\r\n */\r\n generateCertificate(requestId: string): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'generate'\r\n ]);\r\n return this.http.post<BonafideRequestResponse>(url, {});\r\n }\r\n\r\n /**\r\n * Upload stamped copy\r\n */\r\n uploadStampedCopy(requestId: string, data: UploadStampedCopyDto): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'upload-stamped'\r\n ]);\r\n return this.http.post<BonafideRequestResponse>(url, data);\r\n }\r\n\r\n /**\r\n * Get transaction history\r\n */\r\n getHistory(requestId: string): Observable<BonafideRequestResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'history'\r\n ]);\r\n return this.http.get<BonafideRequestResponse>(url);\r\n }\r\n\r\n /**\r\n * Download bonafide certificate file\r\n * @param requestId - Bonafide request ID\r\n * @param fileType - 'soft-copy' or 'stamped-copy'\r\n */\r\n downloadCertificate(requestId: string, fileType: 'soft-copy' | 'stamped-copy'): void {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'download',\r\n fileType\r\n ]);\r\n // Open in new window for download\r\n window.open(url, '_blank');\r\n }\r\n\r\n /**\r\n * Get download URL for certificate file\r\n * @param requestId - Bonafide request ID\r\n * @param fileType - 'soft-copy' or 'stamped-copy'\r\n * @returns Download URL string\r\n */\r\n getDownloadUrl(requestId: string, fileType: 'soft-copy' | 'stamped-copy'): string {\r\n return cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.bonafide,\r\n requestId,\r\n 'download',\r\n fileType\r\n ]);\r\n }\r\n}\r\n\r\n\r\n\r\n"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
8
8
|
import { NotificationService, ConfirmationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, CideFormFieldErrorComponent } from 'cloud-ide-element';
|
|
9
9
|
import { AppStateHelperService, ComponentContextService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
10
10
|
import { ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
|
|
11
|
-
import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService, c as CideLytClassProgramTermService } from './cloud-ide-academics-cloud-ide-academics-
|
|
11
|
+
import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService, c as CideLytClassProgramTermService } from './cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs';
|
|
12
12
|
import { generateObjectFromString, MClassProgramTerm } from 'cloud-ide-lms-model';
|
|
13
13
|
|
|
14
14
|
class ClassProgramTermCreateComponent {
|
|
@@ -522,7 +522,10 @@ class ClassProgramTermCreateComponent {
|
|
|
522
522
|
loadProgramClasses() {
|
|
523
523
|
console.log('🔍 loadProgramClasses() CALLED');
|
|
524
524
|
console.log('🔍 Current acacpmId signal value:', this.acacpmId());
|
|
525
|
-
this.programClassService.getProgramClassList({
|
|
525
|
+
this.programClassService.getProgramClassList({
|
|
526
|
+
pagination: false,
|
|
527
|
+
acacpm_entity_id_syen: this.appState.getActiveEntityId()
|
|
528
|
+
})
|
|
526
529
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
527
530
|
.subscribe({
|
|
528
531
|
next: (response) => {
|
|
@@ -1211,4 +1214,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
1211
1214
|
}], ctorParameters: () => [] });
|
|
1212
1215
|
|
|
1213
1216
|
export { ClassProgramTermCreateComponent };
|
|
1214
|
-
//# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-
|
|
1217
|
+
//# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs.map
|