cloud-ide-academics 0.0.34 → 0.0.36
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-class-program-term-create.component-CvjHi7-O.mjs → cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs} +37 -19
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-class-program-term-list.component-BEfiCtrg.mjs → cloud-ide-academics-class-program-term-list.component-BpjWSltB.mjs} +29 -5
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-BpjWSltB.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-cloud-ide-academics-B3bMr7K9.mjs → cloud-ide-academics-cloud-ide-academics-DTKiLHAW.mjs} +231 -42
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-DTKiLHAW.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-create.component-CRkNKdub.mjs → cloud-ide-academics-program-class-create.component-B6xB_hrJ.mjs} +24 -12
- package/fesm2022/cloud-ide-academics-program-class-create.component-B6xB_hrJ.mjs.map +1 -0
- package/fesm2022/{cloud-ide-academics-program-class-list.component-D1qFXuRT.mjs → cloud-ide-academics-program-class-list.component-BLR9XYoZ.mjs} +25 -5
- package/fesm2022/cloud-ide-academics-program-class-list.component-BLR9XYoZ.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-student-list.component-DwweQJh-.mjs +445 -0
- package/fesm2022/cloud-ide-academics-student-list.component-DwweQJh-.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics-teacher-list.component-BaWKpb8C.mjs +453 -0
- package/fesm2022/cloud-ide-academics-teacher-list.component-BaWKpb8C.mjs.map +1 -0
- package/fesm2022/cloud-ide-academics.mjs +1 -1
- package/index.d.ts +19 -0
- package/package.json +1 -1
- package/fesm2022/cloud-ide-academics-class-program-term-create.component-CvjHi7-O.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-class-program-term-list.component-BEfiCtrg.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-cloud-ide-academics-B3bMr7K9.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-create.component-CRkNKdub.mjs.map +0 -1
- package/fesm2022/cloud-ide-academics-program-class-list.component-D1qFXuRT.mjs.map +0 -1
|
@@ -13,7 +13,7 @@ import { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, Cide
|
|
|
13
13
|
import { HttpClient } from '@angular/common/http';
|
|
14
14
|
import { generateStringFromObject, cidePath, hostManagerRoutesUrl, academicsRoutesUrl, generateObjectFromString, AcaClassPrgBranchListPayload, MClassProgramTerm, MPrgTrmSectionInsertUpdatePayload, MPrgTrmSection } from 'cloud-ide-lms-model';
|
|
15
15
|
import { ENTITY_SERVICE_TOKEN, CideCoreGeneralMasterService, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, PROGRAM_TERM_SECTION_SERVICE_TOKEN } from 'cloud-ide-shared';
|
|
16
|
-
import { ComponentContextService, AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
16
|
+
import { ComponentContextService, RightsService, AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
17
17
|
|
|
18
18
|
const academicsRoutes = [
|
|
19
19
|
// Academic Year Management Routes
|
|
@@ -55,7 +55,7 @@ const academicsRoutes = [
|
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
path: 'program-class-management',
|
|
58
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-list.component-
|
|
58
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-list.component-BLR9XYoZ.mjs').then(c => c.ProgramClassListComponent),
|
|
59
59
|
title: 'Program Class Management',
|
|
60
60
|
canActivate: [authGuard],
|
|
61
61
|
data: {
|
|
@@ -64,7 +64,7 @@ const academicsRoutes = [
|
|
|
64
64
|
},
|
|
65
65
|
{
|
|
66
66
|
path: 'program-class-management/create',
|
|
67
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
67
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-B6xB_hrJ.mjs').then(c => c.ProgramClassCreateComponent),
|
|
68
68
|
title: 'Create Program Class',
|
|
69
69
|
canActivate: [authGuard],
|
|
70
70
|
data: {
|
|
@@ -73,7 +73,7 @@ const academicsRoutes = [
|
|
|
73
73
|
},
|
|
74
74
|
{
|
|
75
75
|
path: 'program-class-management/edit/:query',
|
|
76
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
76
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-B6xB_hrJ.mjs').then(c => c.ProgramClassCreateComponent),
|
|
77
77
|
title: 'Edit Program Class',
|
|
78
78
|
canActivate: [authGuard],
|
|
79
79
|
data: {
|
|
@@ -82,7 +82,7 @@ const academicsRoutes = [
|
|
|
82
82
|
},
|
|
83
83
|
{
|
|
84
84
|
path: 'program-class-management/view/:query',
|
|
85
|
-
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-
|
|
85
|
+
loadComponent: () => import('./cloud-ide-academics-program-class-create.component-B6xB_hrJ.mjs').then(c => c.ProgramClassCreateComponent),
|
|
86
86
|
title: 'View Program Class',
|
|
87
87
|
canActivate: [authGuard],
|
|
88
88
|
data: {
|
|
@@ -91,7 +91,7 @@ const academicsRoutes = [
|
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
path: 'program-term-management/create',
|
|
94
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
94
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
95
95
|
title: 'Create Class Program Term',
|
|
96
96
|
canActivate: [authGuard],
|
|
97
97
|
data: {
|
|
@@ -100,7 +100,7 @@ const academicsRoutes = [
|
|
|
100
100
|
},
|
|
101
101
|
{
|
|
102
102
|
path: 'program-term-management/create/:query',
|
|
103
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
103
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
104
104
|
title: 'Create Class Program Term',
|
|
105
105
|
canActivate: [authGuard],
|
|
106
106
|
data: {
|
|
@@ -109,7 +109,7 @@ const academicsRoutes = [
|
|
|
109
109
|
},
|
|
110
110
|
{
|
|
111
111
|
path: 'program-term-management/edit/:query',
|
|
112
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
112
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
113
113
|
title: 'Edit Class Program Term',
|
|
114
114
|
canActivate: [authGuard],
|
|
115
115
|
data: {
|
|
@@ -118,7 +118,7 @@ const academicsRoutes = [
|
|
|
118
118
|
},
|
|
119
119
|
{
|
|
120
120
|
path: 'program-term-management/view/:query',
|
|
121
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-
|
|
121
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DJQTpKeq.mjs').then(c => c.ClassProgramTermCreateComponent),
|
|
122
122
|
title: 'View Class Program Term',
|
|
123
123
|
canActivate: [authGuard],
|
|
124
124
|
data: {
|
|
@@ -127,7 +127,7 @@ const academicsRoutes = [
|
|
|
127
127
|
},
|
|
128
128
|
{
|
|
129
129
|
path: 'program-term-management',
|
|
130
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-
|
|
130
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-BpjWSltB.mjs').then(c => c.ClassProgramTermListComponent),
|
|
131
131
|
title: 'Class Program Term Management',
|
|
132
132
|
canActivate: [authGuard],
|
|
133
133
|
data: {
|
|
@@ -136,7 +136,7 @@ const academicsRoutes = [
|
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
path: 'program-term-management/:query',
|
|
139
|
-
loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-
|
|
139
|
+
loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-BpjWSltB.mjs').then(c => c.ClassProgramTermListComponent),
|
|
140
140
|
title: 'Class Program Term Management',
|
|
141
141
|
canActivate: [authGuard],
|
|
142
142
|
data: {
|
|
@@ -242,6 +242,86 @@ const academicsRoutes = [
|
|
|
242
242
|
data: {
|
|
243
243
|
sypg_page_code: "class_program_branch"
|
|
244
244
|
}
|
|
245
|
+
},
|
|
246
|
+
// Student Management Routes
|
|
247
|
+
{
|
|
248
|
+
path: 'student',
|
|
249
|
+
loadComponent: () => import('./cloud-ide-academics-student-list.component-DwweQJh-.mjs').then(c => c.StudentListComponent),
|
|
250
|
+
title: 'Student Management',
|
|
251
|
+
canActivate: [authGuard],
|
|
252
|
+
data: {
|
|
253
|
+
sypg_page_code: "academics_student_list"
|
|
254
|
+
}
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
path: 'student/create',
|
|
258
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
259
|
+
title: 'Create Student',
|
|
260
|
+
canActivate: [authGuard],
|
|
261
|
+
data: {
|
|
262
|
+
sypg_page_code: "academics_student_list",
|
|
263
|
+
userType: 'STUDENT'
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
path: 'student/edit/:query',
|
|
268
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
269
|
+
title: 'Edit Student',
|
|
270
|
+
canActivate: [authGuard],
|
|
271
|
+
data: {
|
|
272
|
+
sypg_page_code: "academics_student_list",
|
|
273
|
+
userType: 'STUDENT'
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
path: 'student/view/:query',
|
|
278
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
279
|
+
title: 'View Student',
|
|
280
|
+
canActivate: [authGuard],
|
|
281
|
+
data: {
|
|
282
|
+
sypg_page_code: "academics_student_list",
|
|
283
|
+
userType: 'STUDENT'
|
|
284
|
+
}
|
|
285
|
+
},
|
|
286
|
+
// Teacher Management Routes
|
|
287
|
+
{
|
|
288
|
+
path: 'teacher',
|
|
289
|
+
loadComponent: () => import('./cloud-ide-academics-teacher-list.component-BaWKpb8C.mjs').then(c => c.TeacherListComponent),
|
|
290
|
+
title: 'Teacher Management',
|
|
291
|
+
canActivate: [authGuard],
|
|
292
|
+
data: {
|
|
293
|
+
sypg_page_code: "academics_teacher_list"
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
path: 'teacher/create',
|
|
298
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
299
|
+
title: 'Create Teacher',
|
|
300
|
+
canActivate: [authGuard],
|
|
301
|
+
data: {
|
|
302
|
+
sypg_page_code: "academics_teacher_list",
|
|
303
|
+
userType: 'TEACHER'
|
|
304
|
+
}
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
path: 'teacher/edit/:query',
|
|
308
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
309
|
+
title: 'Edit Teacher',
|
|
310
|
+
canActivate: [authGuard],
|
|
311
|
+
data: {
|
|
312
|
+
sypg_page_code: "academics_teacher_list",
|
|
313
|
+
userType: 'TEACHER'
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
path: 'teacher/view/:query',
|
|
318
|
+
loadComponent: () => import('cloud-ide-core').then(m => m.CideCoreUserCreateComponent),
|
|
319
|
+
title: 'View Teacher',
|
|
320
|
+
canActivate: [authGuard],
|
|
321
|
+
data: {
|
|
322
|
+
sypg_page_code: "academics_teacher_list",
|
|
323
|
+
userType: 'TEACHER'
|
|
324
|
+
}
|
|
245
325
|
}
|
|
246
326
|
];
|
|
247
327
|
|
|
@@ -524,6 +604,7 @@ class AcademicYearCreateComponent {
|
|
|
524
604
|
router = inject(Router);
|
|
525
605
|
route = inject(ActivatedRoute);
|
|
526
606
|
componentContextService = inject(ComponentContextService);
|
|
607
|
+
rightsService = inject(RightsService);
|
|
527
608
|
// Form and state management with proper typing
|
|
528
609
|
academicYearForm;
|
|
529
610
|
activeTab = signal('basic', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
@@ -550,6 +631,8 @@ class AcademicYearCreateComponent {
|
|
|
550
631
|
});
|
|
551
632
|
}
|
|
552
633
|
ngOnInit() {
|
|
634
|
+
// Initialize rights for academic year management
|
|
635
|
+
this.rightsService.initializeRights('academic_year_list');
|
|
553
636
|
this.initializeComponent();
|
|
554
637
|
}
|
|
555
638
|
/**
|
|
@@ -699,6 +782,11 @@ class AcademicYearCreateComponent {
|
|
|
699
782
|
this.activeTab.set(tab.id);
|
|
700
783
|
}
|
|
701
784
|
onSubmit() {
|
|
785
|
+
const requiredRight = this.isEditMode() ? 'EDIT' : 'CREATE';
|
|
786
|
+
if (!this.rightsService.hasRight(requiredRight)) {
|
|
787
|
+
console.error(`You do not have permission to ${this.isEditMode() ? 'edit' : 'create'} academic years`);
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
702
790
|
if (this.academicYearForm.valid && this.validateMappings()) {
|
|
703
791
|
this.loading.set(true);
|
|
704
792
|
const formData = this.academicYearForm.value;
|
|
@@ -1066,7 +1154,7 @@ class AcademicYearCreateComponent {
|
|
|
1066
1154
|
return forkJoin(deleteObservables);
|
|
1067
1155
|
}
|
|
1068
1156
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: AcademicYearCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1069
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: AcademicYearCreateComponent, isStandalone: true, selector: "cide-core-academic-year-create", ngImport: i0, template: "<!-- \r\n ACADEMIC YEAR MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Simple Header Section -->\r\n <div class=\"tw-table-row tw-w-full tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\r\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\r\n </h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Back button or other actions can be added here if needed -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\r\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- Basic Academic Year Information -->\r\n <div class=\"tw-space-y-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\r\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\r\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\r\n placeholder=\"Enter detailed description of the academic year...\"\r\n rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\r\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\r\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('mapping') {\r\n <!-- Academic Year Mapping Configuration -->\r\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\r\n </div>\r\n <div>\r\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\r\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\r\n </div>\r\n </div>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\r\n (click)=\"addAcademicYearMapping()\"\r\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\r\n Add New Mapping\r\n </button>\r\n </div>\r\n \r\n @if (academicYearMappingsArray.length === 0) {\r\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\r\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\r\n @for (mapping of academicYearMappingsArray.controls; track $index) {\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\r\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\r\n </div>\r\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\r\n (click)=\"removeAcademicYearMapping($index)\"\r\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\r\n Remove\r\n </button>\r\n </div>\r\n \r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\r\n <!-- Hidden Academic Year ID field (internal use only) -->\r\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\r\n \r\n <!-- Entity Selection -->\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\r\n <cide-ele-select \r\n [options]=\"entityOptions()\"\r\n formControlName=\"acayrmp_entity_id_syen\"\r\n placeholder=\"Choose entity for this mapping\" \r\n size=\"md\"\r\n valueKey=\"_id\"\r\n labelKey=\"syen_name\"\r\n class=\"tw-min-w-full\"\r\n (change)=\"onMappingEntityChange($event, $index)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n <!-- Status Controls -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input \r\n formControlName=\"acayrmp_islocked\" \r\n type=\"checkbox\" \r\n size=\"sm\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input \r\n formControlName=\"acayrmp_iscurrent\" \r\n type=\"checkbox\" \r\n size=\"sm\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Mapping Validation Messages -->\r\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\r\n Please ensure all mappings have required fields filled in.\r\n </span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\r\n <!-- Form Validation Errors -->\r\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n @if (!isEditMode()) {\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n }\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
1157
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: AcademicYearCreateComponent, isStandalone: true, selector: "cide-core-academic-year-create", ngImport: i0, template: "<!-- \n ACADEMIC YEAR MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Simple Header Section -->\n <div class=\"tw-table-row tw-w-full tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\n </h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Back button or other actions can be added here if needed -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Academic Year Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\n placeholder=\"Enter detailed description of the academic year...\"\n rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\n </cide-ele-input>\n\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('mapping') {\n <!-- Academic Year Mapping Configuration -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\n </div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\n (click)=\"addAcademicYearMapping()\"\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\n Add New Mapping\n </button>\n </div>\n \n @if (academicYearMappingsArray.length === 0) {\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\n </div>\n } @else {\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\n @for (mapping of academicYearMappingsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\n </div>\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\n (click)=\"removeAcademicYearMapping($index)\"\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\n Remove\n </button>\n </div>\n \n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\n <!-- Hidden Academic Year ID field (internal use only) -->\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\n \n <!-- Entity Selection -->\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\n <cide-ele-select \n [options]=\"entityOptions()\"\n formControlName=\"acayrmp_entity_id_syen\"\n placeholder=\"Choose entity for this mapping\" \n size=\"md\"\n valueKey=\"_id\"\n labelKey=\"syen_name\"\n class=\"tw-min-w-full\"\n (change)=\"onMappingEntityChange($event, $index)\">\n </cide-ele-select>\n </div>\n \n <!-- Status Controls -->\n <div class=\"tw-space-y-2\">\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_islocked\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_iscurrent\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Mapping Validation Messages -->\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\n Please ensure all mappings have required fields filled in.\n </span>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\n <!-- Form Validation Errors -->\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
1070
1158
|
}
|
|
1071
1159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: AcademicYearCreateComponent, decorators: [{
|
|
1072
1160
|
type: Component,
|
|
@@ -1080,7 +1168,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
1080
1168
|
CideIconComponent,
|
|
1081
1169
|
CideSelectComponent,
|
|
1082
1170
|
CideFormFieldErrorComponent
|
|
1083
|
-
], template: "<!-- \r\n ACADEMIC YEAR MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<div class=\"tw-w-full tw-h-full\">\r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\r\n (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Simple Header Section -->\r\n <div class=\"tw-table-row tw-w-full tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\r\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\r\n </h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Back button or other actions can be added here if needed -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\r\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- Basic Academic Year Information -->\r\n <div class=\"tw-space-y-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\r\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\r\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\r\n placeholder=\"Enter detailed description of the academic year...\"\r\n rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\r\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\r\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('mapping') {\r\n <!-- Academic Year Mapping Configuration -->\r\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\r\n </div>\r\n <div>\r\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\r\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\r\n </div>\r\n </div>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\r\n (click)=\"addAcademicYearMapping()\"\r\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\r\n Add New Mapping\r\n </button>\r\n </div>\r\n \r\n @if (academicYearMappingsArray.length === 0) {\r\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\r\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\r\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\r\n @for (mapping of academicYearMappingsArray.controls; track $index) {\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\r\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\r\n </div>\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\r\n </div>\r\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\r\n (click)=\"removeAcademicYearMapping($index)\"\r\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\r\n Remove\r\n </button>\r\n </div>\r\n \r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\r\n <!-- Hidden Academic Year ID field (internal use only) -->\r\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\r\n \r\n <!-- Entity Selection -->\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\r\n <cide-ele-select \r\n [options]=\"entityOptions()\"\r\n formControlName=\"acayrmp_entity_id_syen\"\r\n placeholder=\"Choose entity for this mapping\" \r\n size=\"md\"\r\n valueKey=\"_id\"\r\n labelKey=\"syen_name\"\r\n class=\"tw-min-w-full\"\r\n (change)=\"onMappingEntityChange($event, $index)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n <!-- Status Controls -->\r\n <div class=\"tw-space-y-2\">\r\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input \r\n formControlName=\"acayrmp_islocked\" \r\n type=\"checkbox\" \r\n size=\"sm\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input \r\n formControlName=\"acayrmp_iscurrent\" \r\n type=\"checkbox\" \r\n size=\"sm\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n <!-- Mapping Validation Messages -->\r\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\r\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\r\n Please ensure all mappings have required fields filled in.\r\n </span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\r\n <!-- Form Validation Errors -->\r\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\r\n \r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n @if (!isEditMode()) {\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n }\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>" }]
|
|
1171
|
+
], template: "<!-- \n ACADEMIC YEAR MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"academicYearForm\" [class.tw-opacity-60]=\"loading()\"\n (ngSubmit)=\"onSubmit()\">\n\n <!-- Simple Header Section -->\n <div class=\"tw-table-row tw-w-full tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n \n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\n {{ isEditMode() ? 'Edit Academic Year' : 'Create Academic Year' }}\n </h5>\n </div>\n\n <!-- Actions -->\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n <!-- Back button or other actions can be added here if needed -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"academicYearTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Academic Year Information -->\n <div class=\"tw-space-y-6\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Academic Year Code *\" formControlName=\"acayr_code\"\n placeholder=\"e.g., AY2024-25\" size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Academic Year Name *\" formControlName=\"acayr_name\"\n placeholder=\"e.g., Academic Year 2024-2025\" size=\"md\" leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acayr_description\"\n placeholder=\"Enter detailed description of the academic year...\"\n rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"From Date *\" formControlName=\"acayr_from_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_from_date\">\n </cide-ele-input>\n\n <cide-ele-input label=\"To Date *\" formControlName=\"acayr_to_date\" type=\"date\" size=\"md\"\n leadingIcon=\"calendar_today\" id=\"acayr_to_date\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current academic year</span>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acayr_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('mapping') {\n <!-- Academic Year Mapping Configuration -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-border tw-border-blue-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">link</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-blue-900 tw-m-0\">Academic Year Mapping</h6>\n <p class=\"tw-text-sm tw-text-blue-600 tw-m-0\">Configure entity mappings for this academic year</p>\n </div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"md\" leftIcon=\"add\"\n (click)=\"addAcademicYearMapping()\"\n class=\"tw-shadow-md hover:tw-shadow-lg tw-transition-shadow\">\n Add New Mapping\n </button>\n </div>\n \n @if (academicYearMappingsArray.length === 0) {\n <div class=\"tw-text-center tw-py-12 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-full tw-w-16 tw-h-16 tw-mx-auto tw-mb-4 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-text-gray-400\">link</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-base tw-font-medium tw-text-gray-600 tw-mb-2\">No Mappings Yet</h6>\n <p class=\"tw-text-sm tw-text-gray-500\">Click \"Add New Mapping\" to start configuring entity relationships for this academic year.</p>\n </div>\n } @else {\n <div class=\"tw-space-y-4\" formArrayName=\"acayr_academic_year_mappings\">\n @for (mapping of academicYearMappingsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-6\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-mb-4\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">settings</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Mapping #{{ $index + 1 }}</h6>\n </div>\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"sm\" leftIcon=\"delete\"\n (click)=\"removeAcademicYearMapping($index)\"\n class=\"tw-opacity-80 hover:tw-opacity-100 tw-transition-opacity\">\n Remove\n </button>\n </div>\n \n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-4\" [formGroupName]=\"$index\">\n <!-- Hidden Academic Year ID field (internal use only) -->\n <input type=\"hidden\" formControlName=\"acayrmp_academic_year_id_acayr\">\n \n <!-- Entity Selection -->\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Select Entity *</label>\n <cide-ele-select \n [options]=\"entityOptions()\"\n formControlName=\"acayrmp_entity_id_syen\"\n placeholder=\"Choose entity for this mapping\" \n size=\"md\"\n valueKey=\"_id\"\n labelKey=\"syen_name\"\n class=\"tw-min-w-full\"\n (change)=\"onMappingEntityChange($event, $index)\">\n </cide-ele-select>\n </div>\n \n <!-- Status Controls -->\n <div class=\"tw-space-y-2\">\n <div class=\"tw-grid tw-grid-cols-1 tw-gap-3\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_islocked\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n \n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input \n formControlName=\"acayrmp_iscurrent\" \n type=\"checkbox\" \n size=\"sm\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current mapping</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n </div>\n }\n\n <!-- Mapping Validation Messages -->\n @if (academicYearMappingsArray.length > 0 && !isMappingsArrayValid()) {\n <div class=\"tw-mt-4 tw-p-4 tw-bg-yellow-50 tw-border tw-border-yellow-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"warning\" size=\"sm\">warning</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-yellow-800\">\n Please ensure all mappings have required fields filled in.\n </span>\n </div>\n </div>\n }\n </div>\n }\n }\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-gap-4\">\n <!-- Form Validation Errors -->\n <cide-form-field-error [formGroup]=\"academicYearForm\"></cide-form-field-error>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || academicYearForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Academic Year' : 'Create Academic Year' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n </div>" }]
|
|
1084
1172
|
}], ctorParameters: () => [] });
|
|
1085
1173
|
|
|
1086
1174
|
var academicYearCreate_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1096,6 +1184,7 @@ class AcademicYearListComponent {
|
|
|
1096
1184
|
appState = inject(AppStateHelperService);
|
|
1097
1185
|
confirmationService = inject(ConfirmationService);
|
|
1098
1186
|
notificationService = inject(NotificationService);
|
|
1187
|
+
rightsService = inject(RightsService);
|
|
1099
1188
|
// Modern ViewChild signals for template renderers (Angular 20 approach)
|
|
1100
1189
|
academicYearDetailsRendererTemplate = viewChild.required('academicYearDetailsRendererTemplate');
|
|
1101
1190
|
dateRangeRendererTemplate = viewChild.required('dateRangeRendererTemplate');
|
|
@@ -1125,6 +1214,11 @@ class AcademicYearListComponent {
|
|
|
1125
1214
|
{ value: 'current', label: 'Current Year' },
|
|
1126
1215
|
{ value: 'locked', label: 'Locked Years' }
|
|
1127
1216
|
], ...(ngDevMode ? [{ debugName: "statusFilterOptions" }] : []));
|
|
1217
|
+
// Rights computed signals
|
|
1218
|
+
canCreate = computed(() => this.rightsService.hasRight('CREATE'), ...(ngDevMode ? [{ debugName: "canCreate" }] : []));
|
|
1219
|
+
canEdit = computed(() => this.rightsService.hasRight('EDIT'), ...(ngDevMode ? [{ debugName: "canEdit" }] : []));
|
|
1220
|
+
canDelete = computed(() => this.rightsService.hasRight('DELETE'), ...(ngDevMode ? [{ debugName: "canDelete" }] : []));
|
|
1221
|
+
canView = computed(() => this.rightsService.hasRight('VIEW'), ...(ngDevMode ? [{ debugName: "canView" }] : []));
|
|
1128
1222
|
// Modern Angular 20+ grid configuration using computed signal with proper typing
|
|
1129
1223
|
gridConfig = computed(() => ({
|
|
1130
1224
|
id: 'academic-year-list-grid',
|
|
@@ -1221,6 +1315,8 @@ class AcademicYearListComponent {
|
|
|
1221
1315
|
}), ...(ngDevMode ? [{ debugName: "gridConfig" }] : []));
|
|
1222
1316
|
ngOnInit() {
|
|
1223
1317
|
console.log('🎓 Academic Year List Component initialized');
|
|
1318
|
+
// Initialize rights for academic year management
|
|
1319
|
+
this.rightsService.initializeRights('academic_year_list');
|
|
1224
1320
|
this.loadAcademicYears();
|
|
1225
1321
|
}
|
|
1226
1322
|
ngOnDestroy() {
|
|
@@ -1347,6 +1443,10 @@ class AcademicYearListComponent {
|
|
|
1347
1443
|
}
|
|
1348
1444
|
// Academic Year actions with proper typing
|
|
1349
1445
|
createAcademicYear() {
|
|
1446
|
+
if (!this.rightsService.hasRight('CREATE')) {
|
|
1447
|
+
this.notificationService.error('You do not have permission to create academic years');
|
|
1448
|
+
return;
|
|
1449
|
+
}
|
|
1350
1450
|
console.log('➕ Navigating to create academic year');
|
|
1351
1451
|
this.notificationService.info('Opening form to create a new academic year.');
|
|
1352
1452
|
this.router.navigate(['/control-panel/academic_year/create']);
|
|
@@ -1358,6 +1458,10 @@ class AcademicYearListComponent {
|
|
|
1358
1458
|
this.router.navigate(['/control-panel/academic_year/view', queryParams]);
|
|
1359
1459
|
}
|
|
1360
1460
|
editAcademicYear(academicYear) {
|
|
1461
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
1462
|
+
this.notificationService.error('You do not have permission to edit academic years');
|
|
1463
|
+
return;
|
|
1464
|
+
}
|
|
1361
1465
|
console.log('✏️ Editing academic year:', academicYear);
|
|
1362
1466
|
// Check if the academic year is locked
|
|
1363
1467
|
if (academicYear.acayr_islocked) {
|
|
@@ -1393,32 +1497,35 @@ class AcademicYearListComponent {
|
|
|
1393
1497
|
isLocked: academicYear.acayr_islocked,
|
|
1394
1498
|
isActive: academicYear.acayr_isactive
|
|
1395
1499
|
});
|
|
1396
|
-
const items = [
|
|
1397
|
-
|
|
1500
|
+
const items = [];
|
|
1501
|
+
if (this.canView()) {
|
|
1502
|
+
items.push({
|
|
1398
1503
|
id: 'view',
|
|
1399
1504
|
label: 'View Details',
|
|
1400
1505
|
icon: 'visibility',
|
|
1401
1506
|
iconColor: 'tw-text-gray-400',
|
|
1402
1507
|
textColor: 'tw-text-gray-700',
|
|
1403
1508
|
hoverBgColor: 'hover:tw-bg-gray-100'
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1509
|
+
});
|
|
1510
|
+
}
|
|
1511
|
+
if (this.canEdit()) {
|
|
1512
|
+
items.push({
|
|
1406
1513
|
id: 'edit',
|
|
1407
1514
|
label: 'Edit',
|
|
1408
1515
|
icon: 'edit',
|
|
1409
1516
|
iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-blue-400',
|
|
1410
1517
|
textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-blue-600',
|
|
1411
1518
|
hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-blue-50'
|
|
1412
|
-
}
|
|
1413
|
-
{
|
|
1519
|
+
});
|
|
1520
|
+
items.push({
|
|
1414
1521
|
id: 'toggle-status',
|
|
1415
1522
|
label: academicYear.acayr_isactive ? 'Deactivate' : 'Activate',
|
|
1416
1523
|
icon: academicYear.acayr_isactive ? 'toggle_off' : 'toggle_on',
|
|
1417
1524
|
iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-gray-400',
|
|
1418
1525
|
textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-gray-700',
|
|
1419
1526
|
hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-gray-100'
|
|
1420
|
-
}
|
|
1421
|
-
|
|
1527
|
+
});
|
|
1528
|
+
}
|
|
1422
1529
|
return items;
|
|
1423
1530
|
}
|
|
1424
1531
|
/**
|
|
@@ -1449,6 +1556,10 @@ class AcademicYearListComponent {
|
|
|
1449
1556
|
* Toggle academic year status (active/inactive)
|
|
1450
1557
|
*/
|
|
1451
1558
|
toggleAcademicYearStatus(academicYear) {
|
|
1559
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
1560
|
+
this.notificationService.error('You do not have permission to change academic year status');
|
|
1561
|
+
return;
|
|
1562
|
+
}
|
|
1452
1563
|
console.log('🔄 Toggling academic year status:', academicYear);
|
|
1453
1564
|
// Check if the academic year is locked
|
|
1454
1565
|
if (academicYear.acayr_islocked) {
|
|
@@ -1680,7 +1791,7 @@ class AcademicYearListComponent {
|
|
|
1680
1791
|
return 'Inactive';
|
|
1681
1792
|
}
|
|
1682
1793
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: AcademicYearListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1683
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: AcademicYearListComponent, isStandalone: true, selector: "cide-core-academic-year-list", viewQueries: [{ propertyName: "academicYearDetailsRendererTemplate", first: true, predicate: ["academicYearDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "dateRangeRendererTemplate", first: true, predicate: ["dateRangeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Academic Year Container -->\
|
|
1794
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: AcademicYearListComponent, isStandalone: true, selector: "cide-core-academic-year-list", viewQueries: [{ propertyName: "academicYearDetailsRendererTemplate", first: true, predicate: ["academicYearDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "dateRangeRendererTemplate", first: true, predicate: ["dateRangeRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Academic Year Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Academic Year Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n @if (canCreate()) {\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\n Create Academic Year\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid class=\"tw-h-full\" [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #academicYearDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.acayr_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.acayr_description || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #dateRangeRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ formatDate(row.acayr_from_date) }}</span>\n <span class=\"tw-text-gray-500\">to {{ formatDate(row.acayr_to_date) }}</span>\n <span class=\"tw-text-xs tw-text-gray-400\">{{ getDuration(row.acayr_from_date, row.acayr_to_date) }}</span>\n </div>\n</ng-template>\n\n<ng-template #statusRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-gap-1 tw-items-center\">\n <!-- Current Year Badge (Priority) -->\n @if (row.acayr_iscurrent) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-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 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">star</cide-ele-icon>\n Current Year\n </span>\n }\n \n <!-- Active/Inactive Status Badge -->\n <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\n [ngClass]=\"getActiveStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.acayr_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row.acayr_isactive ? 'Active' : 'Inactive' }}\n </span>\n \n <!-- Locked Status Badge (Additional info) -->\n @if (row.acayr_islocked) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>", styles: [":host{height:100%;display:flex;flex-direction:column}.academic-year-listing-container{height:100%;display:flex;flex-direction:column;overflow:hidden}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
1684
1795
|
}
|
|
1685
1796
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: AcademicYearListComponent, decorators: [{
|
|
1686
1797
|
type: Component,
|
|
@@ -1691,7 +1802,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
1691
1802
|
CideEleButtonComponent,
|
|
1692
1803
|
CideEleDataGridComponent,
|
|
1693
1804
|
CideEleDropdownComponent
|
|
1694
|
-
], template: "<!-- Academic Year Container -->\
|
|
1805
|
+
], template: "<!-- Academic Year Container -->\n<div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Header Section with Filters -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\n\n <!-- Title -->\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">school</cide-ele-icon>\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Academic Year Management</h5>\n </div>\n\n <!-- Actions -->\n <div\n class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\n @if (canCreate()) {\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\n Create Academic Year\n </button>\n }\n </div>\n </div>\n </div>\n </div>\n\n <!-- Main Content Area -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-h-full tw-relative\">\n\n <!-- Data Grid Component -->\n <div class=\"tw-h-full tw-overflow-auto\">\n <cide-ele-data-grid class=\"tw-h-full\" [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n\n </div>\n </div>\n\n</div>\n\n<!-- Template Renderers -->\n<ng-template #academicYearDetailsRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-w-full\">\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.acayr_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.acayr_description || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #dateRangeRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ formatDate(row.acayr_from_date) }}</span>\n <span class=\"tw-text-gray-500\">to {{ formatDate(row.acayr_to_date) }}</span>\n <span class=\"tw-text-xs tw-text-gray-400\">{{ getDuration(row.acayr_from_date, row.acayr_to_date) }}</span>\n </div>\n</ng-template>\n\n<ng-template #statusRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-gap-1 tw-items-center\">\n <!-- Current Year Badge (Priority) -->\n @if (row.acayr_iscurrent) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-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 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">star</cide-ele-icon>\n Current Year\n </span>\n }\n \n <!-- Active/Inactive Status Badge -->\n <span class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-text-center\"\n [ngClass]=\"getActiveStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.acayr_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row.acayr_isactive ? 'Active' : 'Inactive' }}\n </span>\n \n <!-- Locked Status Badge (Additional info) -->\n @if (row.acayr_islocked) {\n <span\n class=\"tw-inline-flex tw-items-center tw-justify-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-red-100 tw-text-red-800 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getActionDropdownItems(row)\"\n [config]=\"{ triggerIcon: 'more_vert', triggerSize: 'sm' }\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>", styles: [":host{height:100%;display:flex;flex-direction:column}.academic-year-listing-container{height:100%;display:flex;flex-direction:column;overflow:hidden}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"] }]
|
|
1695
1806
|
}] });
|
|
1696
1807
|
|
|
1697
1808
|
var academicYearList_component = /*#__PURE__*/Object.freeze({
|
|
@@ -1903,6 +2014,7 @@ class CideLytClassProgramBranchListComponent {
|
|
|
1903
2014
|
confirmationService = inject(ConfirmationService);
|
|
1904
2015
|
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
1905
2016
|
programClassService = inject(CideLytProgramClassService);
|
|
2017
|
+
rightsService = inject(RightsService);
|
|
1906
2018
|
// State management
|
|
1907
2019
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
1908
2020
|
error = signal(null, ...(ngDevMode ? [{ debugName: "error" }] : []));
|
|
@@ -2062,7 +2174,14 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2062
2174
|
}
|
|
2063
2175
|
return renderers;
|
|
2064
2176
|
}, ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
|
|
2177
|
+
// Rights computed signals
|
|
2178
|
+
canCreate = computed(() => this.rightsService.hasRight('CREATE'), ...(ngDevMode ? [{ debugName: "canCreate" }] : []));
|
|
2179
|
+
canEdit = computed(() => this.rightsService.hasRight('EDIT'), ...(ngDevMode ? [{ debugName: "canEdit" }] : []));
|
|
2180
|
+
canDelete = computed(() => this.rightsService.hasRight('DELETE'), ...(ngDevMode ? [{ debugName: "canDelete" }] : []));
|
|
2181
|
+
canView = computed(() => this.rightsService.hasRight('VIEW'), ...(ngDevMode ? [{ debugName: "canView" }] : []));
|
|
2065
2182
|
ngOnInit() {
|
|
2183
|
+
// Initialize rights for class program branch management
|
|
2184
|
+
this.rightsService.initializeRights('class_program_branch');
|
|
2066
2185
|
console.log('🏢 Class Program Branch List Component initialized');
|
|
2067
2186
|
this.initializeBreadcrumbData();
|
|
2068
2187
|
this.loadProgramClasses();
|
|
@@ -2384,6 +2503,10 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2384
2503
|
* Navigate to view branch
|
|
2385
2504
|
*/
|
|
2386
2505
|
onViewBranch(branch) {
|
|
2506
|
+
if (!this.rightsService.hasRight('VIEW')) {
|
|
2507
|
+
this.notificationService.error('You do not have permission to view class program branches');
|
|
2508
|
+
return;
|
|
2509
|
+
}
|
|
2387
2510
|
if (branch._id) {
|
|
2388
2511
|
const currentProgramId = this.programId();
|
|
2389
2512
|
const queryParams = generateStringFromObject({ acabrn_id: branch._id });
|
|
@@ -2399,6 +2522,10 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2399
2522
|
* Navigate to edit branch
|
|
2400
2523
|
*/
|
|
2401
2524
|
onEditBranch(branch) {
|
|
2525
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
2526
|
+
this.notificationService.error('You do not have permission to edit class program branches');
|
|
2527
|
+
return;
|
|
2528
|
+
}
|
|
2402
2529
|
if (branch._id) {
|
|
2403
2530
|
const currentProgramId = this.programId();
|
|
2404
2531
|
const queryParams = generateStringFromObject({ acabrn_id: branch._id });
|
|
@@ -2485,6 +2612,10 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2485
2612
|
* Toggle branch status
|
|
2486
2613
|
*/
|
|
2487
2614
|
toggleBranchStatus(branch) {
|
|
2615
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
2616
|
+
this.notificationService.error('You do not have permission to change class program branch status');
|
|
2617
|
+
return;
|
|
2618
|
+
}
|
|
2488
2619
|
if (!branch._id)
|
|
2489
2620
|
return;
|
|
2490
2621
|
const action = branch.acabrn_isactive ? 'deactivate' : 'activate';
|
|
@@ -2523,6 +2654,10 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2523
2654
|
* Toggle branch lock
|
|
2524
2655
|
*/
|
|
2525
2656
|
toggleBranchLock(branch) {
|
|
2657
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
2658
|
+
this.notificationService.error('You do not have permission to change class program branch lock status');
|
|
2659
|
+
return;
|
|
2660
|
+
}
|
|
2526
2661
|
if (!branch._id)
|
|
2527
2662
|
return;
|
|
2528
2663
|
const action = branch.acabrn_islocked ? 'unlock' : 'lock';
|
|
@@ -2561,6 +2696,10 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2561
2696
|
* Delete branch
|
|
2562
2697
|
*/
|
|
2563
2698
|
deleteBranch(branch) {
|
|
2699
|
+
if (!this.rightsService.hasRight('DELETE')) {
|
|
2700
|
+
this.notificationService.error('You do not have permission to delete class program branches');
|
|
2701
|
+
return;
|
|
2702
|
+
}
|
|
2564
2703
|
if (!branch._id)
|
|
2565
2704
|
return;
|
|
2566
2705
|
this.confirmationService.ask({
|
|
@@ -2595,7 +2734,7 @@ class CideLytClassProgramBranchListComponent {
|
|
|
2595
2734
|
});
|
|
2596
2735
|
}
|
|
2597
2736
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2598
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: CideLytClassProgramBranchListComponent, isStandalone: true, selector: "cide-academics-class-program-branch-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramRendererTemplate", first: true, predicate: ["classProgramRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Branch List Component -->\
|
|
2737
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "20.1.7", type: CideLytClassProgramBranchListComponent, isStandalone: true, selector: "cide-academics-class-program-branch-list", viewQueries: [{ propertyName: "dragHandleRendererTemplate", first: true, predicate: ["dragHandleRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramRendererTemplate", first: true, predicate: ["classProgramRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program (Optional)\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n", styles: [":host{height:100%;display:flex;flex-direction:column}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}.drag-handle{cursor:move}.drag-handle:hover{background-color:#0000000d;border-radius:4px}.tw-table tbody tr{cursor:pointer}.tw-table tbody tr:hover{background-color:#00000005}.tw-table tbody tr.selected{background-color:#3b82f61a}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: 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"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
2599
2738
|
}
|
|
2600
2739
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, decorators: [{
|
|
2601
2740
|
type: Component,
|
|
@@ -2608,7 +2747,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
2608
2747
|
CideEleDropdownComponent,
|
|
2609
2748
|
CideSelectComponent,
|
|
2610
2749
|
CideLytSharedWrapperComponent
|
|
2611
|
-
], template: "<!-- Class Program Branch List Component -->\
|
|
2750
|
+
], template: "<!-- Class Program Branch List Component -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"onCreateBranch($event)\">\n Create Branch\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-gap-4\">\n <div class=\"tw-w-64\">\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"programClasses()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onProgramClassChange($event)\"\n placeholder=\"Select Class Program (Optional)\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #dragHandleRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-justify-center tw-cursor-move drag-handle\" title=\"Drag to reorder\">\n <cide-ele-icon name=\"drag_indicator\" class=\"tw-w-4 tw-h-4 tw-text-gray-400 hover:tw-text-gray-600\"></cide-ele-icon>\n </div>\n</ng-template>\n\n\n<ng-template #classProgramRendererTemplate let-row=\"row\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row.acabrn_class_program_id_acacpm?.acacpm_alise_title || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\n <div class=\"tw-relative tw-inline-block\">\n <cide-ele-dropdown \n [items]=\"getBranchActionDropdownItems(row)\" \n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n </div>\n</ng-template>\n\n", styles: [":host{height:100%;display:flex;flex-direction:column}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}.drag-handle{cursor:move}.drag-handle:hover{background-color:#0000000d;border-radius:4px}.tw-table tbody tr{cursor:pointer}.tw-table tbody tr:hover{background-color:#00000005}.tw-table tbody tr.selected{background-color:#3b82f61a}\n"] }]
|
|
2612
2751
|
}] });
|
|
2613
2752
|
|
|
2614
2753
|
var classProgramBranchList_component = /*#__PURE__*/Object.freeze({
|
|
@@ -2629,6 +2768,7 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2629
2768
|
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
2630
2769
|
programClassService = inject(CideLytProgramClassService);
|
|
2631
2770
|
generalMasterService = inject(CideCoreGeneralMasterService);
|
|
2771
|
+
rightsService = inject(RightsService);
|
|
2632
2772
|
// Form and state management
|
|
2633
2773
|
branchForm;
|
|
2634
2774
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
@@ -2657,6 +2797,8 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
2657
2797
|
});
|
|
2658
2798
|
}
|
|
2659
2799
|
ngOnInit() {
|
|
2800
|
+
// Initialize rights for class program branch management
|
|
2801
|
+
this.rightsService.initializeRights('class_program_branch');
|
|
2660
2802
|
console.log('🏢 Class Program Branch Form Component initialized');
|
|
2661
2803
|
this.initializeComponent();
|
|
2662
2804
|
this.setupFormListeners();
|
|
@@ -3067,6 +3209,11 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
3067
3209
|
* Handle form submission
|
|
3068
3210
|
*/
|
|
3069
3211
|
onSubmit() {
|
|
3212
|
+
const requiredRight = this.isEditMode() ? 'EDIT' : 'CREATE';
|
|
3213
|
+
if (!this.rightsService.hasRight(requiredRight)) {
|
|
3214
|
+
this.notificationService.error(`You do not have permission to ${this.isEditMode() ? 'edit' : 'create'} class program branches`);
|
|
3215
|
+
return;
|
|
3216
|
+
}
|
|
3070
3217
|
if (this.isViewMode()) {
|
|
3071
3218
|
this.location.back();
|
|
3072
3219
|
return;
|
|
@@ -3221,7 +3368,7 @@ class CideLytClassProgramBranchFormComponent {
|
|
|
3221
3368
|
this.breadcrumbData.set(additionalItems);
|
|
3222
3369
|
}
|
|
3223
3370
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3224
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytClassProgramBranchFormComponent, isStandalone: true, selector: "cide-academics-class-program-branch-form", ngImport: i0, template: "<!-- \
|
|
3371
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytClassProgramBranchFormComponent, isStandalone: true, selector: "cide-academics-class-program-branch-form", ngImport: i0, template: "<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode() || isEditMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { 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: 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"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
3225
3372
|
}
|
|
3226
3373
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchFormComponent, decorators: [{
|
|
3227
3374
|
type: Component,
|
|
@@ -3233,7 +3380,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
3233
3380
|
CideIconComponent,
|
|
3234
3381
|
CideSelectComponent,
|
|
3235
3382
|
CideLytSharedWrapperComponent,
|
|
3236
|
-
], template: "<!-- \
|
|
3383
|
+
], template: "<!-- \n CLASS PROGRAM BRANCH FORM COMPONENT\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'class_program_branch' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"branchForm\"\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n\n <!-- Error Message -->\n @if (error()) {\n <div class=\"tw-mb-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-md\">\n <div class=\"tw-flex tw-items-start\">\n <cide-ele-icon name=\"error\"\n class=\"tw-text-red-400 tw-w-5 tw-h-5 tw-mt-0.5 tw-flex-shrink-0\"></cide-ele-icon>\n <div class=\"tw-ml-3\">\n <h3 class=\"tw-text-sm tw-font-medium tw-text-red-800 tw-m-0\">Error</h3>\n <p class=\"tw-text-sm tw-text-red-700 tw-mt-1 tw-m-0\">{{ error() }}</p>\n </div>\n </div>\n </div>\n }\n\n <!-- Basic Branch Information -->\n <div class=\"tw-space-y-6\">\n <!-- Class Program Selection -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program *</label>\n <cide-ele-select formControlName=\"acabrn_class_program_id_acacpm\" placeholder=\"Select class program\"\n [disabled]=\"isViewMode() || isEditMode()\" valueKey=\"_id\" labelKey=\"acacpm_alise_title\" [options]=\"programClasses()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Sequence will be automatically assigned based on the order in the listing\n </p>\n </div>\n </div>\n\n <!-- Standard Branch Name (SYGMS) -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-1 tw-gap-6\">\n <div class=\"tw-space-y-2\">\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Standard Branch Name</label>\n <cide-ele-select formControlName=\"acabrn_branch_id_sygms\" placeholder=\"Select standard branch name\"\n [disabled]=\"isViewMode()\" valueKey=\"_id\" labelKey=\"sygms_title\" [options]=\"branchMasters()\">\n </cide-ele-select>\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-mr-1\"></cide-ele-icon>\n Selecting a standard branch will auto-populate the branch name and code\n </p>\n </div>\n </div>\n\n <!-- Branch Name and Code -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div>\n <cide-ele-input label=\"Branch Name *\" formControlName=\"acabrn_name\"\n placeholder=\"e.g., Computer Science Branch\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-input label=\"Branch Code *\" formControlName=\"acabrn_code\" placeholder=\"e.g., CS\" size=\"md\"\n leadingIcon=\"code\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Status and Lock Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onActiveCardClick()\">\n <cide-ele-input formControlName=\"acabrn_isactive\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this branch</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\n [class.tw-cursor-not-allowed]=\"isViewMode()\" [class.tw-opacity-60]=\"isViewMode()\"\n (click)=\"onLockedCardClick()\">\n <cide-ele-input formControlName=\"acabrn_islocked\" type=\"checkbox\" size=\"md\" [disabled]=\"isViewMode()\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n {{ isViewMode() ? 'Close' : 'Cancel' }}\n </button>\n\n @if (!isViewMode()) {\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || branchForm.invalid\"\n [loading]=\"loading()\" leftIcon=\"save\">\n {{ submitButtonText }}\n </button>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>" }]
|
|
3237
3384
|
}], ctorParameters: () => [] });
|
|
3238
3385
|
|
|
3239
3386
|
var classProgramBranchForm_component = /*#__PURE__*/Object.freeze({
|
|
@@ -3466,6 +3613,8 @@ class ProgramTermSectionCreateComponent {
|
|
|
3466
3613
|
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
3467
3614
|
classProgramTermService = inject(CideLytClassProgramTermService);
|
|
3468
3615
|
programTermSectionService = inject(CideLytProgramTermSectionService);
|
|
3616
|
+
componentContextService = inject(ComponentContextService);
|
|
3617
|
+
rightsService = inject(RightsService);
|
|
3469
3618
|
programTermSectionForm;
|
|
3470
3619
|
activeTab = signal('basic', ...(ngDevMode ? [{ debugName: "activeTab" }] : []));
|
|
3471
3620
|
loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
|
|
@@ -3538,6 +3687,8 @@ class ProgramTermSectionCreateComponent {
|
|
|
3538
3687
|
});
|
|
3539
3688
|
}
|
|
3540
3689
|
ngOnInit() {
|
|
3690
|
+
// Initialize rights for program term section management
|
|
3691
|
+
this.rightsService.initializeRights('program_term_section');
|
|
3541
3692
|
console.log('🚀 Program Term Section Create Component - ngOnInit called');
|
|
3542
3693
|
this.initializeComponent();
|
|
3543
3694
|
this.updateBreadcrumbData();
|
|
@@ -4269,6 +4420,11 @@ class ProgramTermSectionCreateComponent {
|
|
|
4269
4420
|
this.activeTab.set(tab.id);
|
|
4270
4421
|
}
|
|
4271
4422
|
onSubmit() {
|
|
4423
|
+
const requiredRight = this.isEditMode() ? 'EDIT' : 'CREATE';
|
|
4424
|
+
if (!this.rightsService.hasRight(requiredRight)) {
|
|
4425
|
+
this.notificationService.error(`You do not have permission to ${this.isEditMode() ? 'edit' : 'create'} program term sections`);
|
|
4426
|
+
return;
|
|
4427
|
+
}
|
|
4272
4428
|
if (this.isViewMode()) {
|
|
4273
4429
|
this.router.navigate(['/control-panel/class-program-term']);
|
|
4274
4430
|
return;
|
|
@@ -4355,23 +4511,31 @@ class ProgramTermSectionCreateComponent {
|
|
|
4355
4511
|
});
|
|
4356
4512
|
}
|
|
4357
4513
|
resetForm() {
|
|
4358
|
-
this.
|
|
4359
|
-
|
|
4360
|
-
|
|
4361
|
-
|
|
4362
|
-
}
|
|
4514
|
+
if (this.isEditMode() && this.programTermSectionId()) {
|
|
4515
|
+
// Reload data in edit mode
|
|
4516
|
+
const queryData = { acapts_id: this.programTermSectionId() };
|
|
4517
|
+
this.loadProgramTermSectionForEdit(queryData);
|
|
4518
|
+
}
|
|
4519
|
+
else {
|
|
4520
|
+
// Reset to defaults in create mode
|
|
4521
|
+
this.programTermSectionForm.reset({
|
|
4522
|
+
acapts_isactive: true,
|
|
4523
|
+
acapts_iscurrent: false,
|
|
4524
|
+
acapts_islocked: false
|
|
4525
|
+
});
|
|
4526
|
+
}
|
|
4363
4527
|
}
|
|
4364
4528
|
/**
|
|
4365
4529
|
* Go back to program term section list
|
|
4366
4530
|
*/
|
|
4367
4531
|
goBackToProgramTermSectionList() {
|
|
4368
|
-
this.
|
|
4532
|
+
this.componentContextService.close(['/academics/class-program-term']);
|
|
4369
4533
|
}
|
|
4370
4534
|
/**
|
|
4371
4535
|
* Cancel form and navigate back to listing page
|
|
4372
4536
|
*/
|
|
4373
4537
|
cancelForm() {
|
|
4374
|
-
this.
|
|
4538
|
+
this.componentContextService.close(['/academics/class-program-term']);
|
|
4375
4539
|
}
|
|
4376
4540
|
/**
|
|
4377
4541
|
* Get page title based on mode
|
|
@@ -4400,7 +4564,7 @@ class ProgramTermSectionCreateComponent {
|
|
|
4400
4564
|
console.log('🧹 ProgramTermSectionCreateComponent: Component state cleaned up');
|
|
4401
4565
|
}
|
|
4402
4566
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionCreateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4403
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionCreateComponent, isStandalone: true, selector: "cide-academics-program-term-section-create", ngImport: i0, template: "<!-- \r\n PROGRAM TERM SECTION MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent tw-max-w-full tw-overflow-hidden\" [formGroup]=\"programTermSectionForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-max-w-full tw-px-2 tw-py-0 tw-overflow-x-hidden\">\r\n <div class=\"tw-w-full tw-max-w-full tw-overflow-x-hidden\">\r\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- Basic Program Term Section Information -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Program Class, Specialization, and Term at the top -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\" \r\n [class.md:tw-grid-cols-2]=\"(!showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))) || (isEditMode() && !hasParentTermInEditMode())\"\r\n [class.md:tw-grid-cols-3]=\"showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))\">\r\n <cide-ele-select \r\n label=\"Program Class *\" \r\n formControlName=\"acapts_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [options]=\"programClassOptions()\"\r\n [loading]=\"programClassLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n\r\n @if (showBranchDropdown()) {\r\n <cide-ele-select \r\n label=\"Specialization\" \r\n formControlName=\"acapts_class_program_branch_id_acabrn\" \r\n placeholder=\"Select specialization\"\r\n [options]=\"classProgramBranchOptions()\"\r\n [loading]=\"classProgramBranchLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n }\r\n\r\n @if ((!isEditMode() || (isEditMode() && hasParentTermInEditMode())) && showTermDropdown()) {\r\n <cide-ele-select \r\n label=\"Class Program Term *\" \r\n formControlName=\"acapts_parent_class_prog_term_acapt\" \r\n placeholder=\"Select class program term\"\r\n [options]=\"classProgramTermOptions()\"\r\n [loading]=\"classProgramTermLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n valueKey=\"_id\"\r\n labelKey=\"acapt_name\"\r\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n }\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\r\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\r\n placeholder=\"Enter detailed description of the section...\" rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this section</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_iscurrent\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('configuration') {\r\n <!-- Section Configuration -->\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\r\n </div>\r\n <div>\r\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\r\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-space-y-4\">\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\r\n <div class=\"tw-space-y-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Error Display -->\r\n @if (error()) {\r\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programTermSectionForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</cide-lyt-shared-wrapper>\r\n\r\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
4567
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionCreateComponent, isStandalone: true, selector: "cide-academics-program-term-section-create", ngImport: i0, template: "<!-- \n PROGRAM TERM SECTION MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent tw-max-w-full tw-overflow-hidden\"\n [formGroup]=\"programTermSectionForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-max-w-full tw-px-2 tw-py-0 tw-overflow-x-hidden\">\n <div class=\"tw-w-full tw-max-w-full tw-overflow-x-hidden\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class, Specialization, and Term at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\"\n [class.md:tw-grid-cols-2]=\"(!showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))) || (isEditMode() && !hasParentTermInEditMode())\"\n [class.md:tw-grid-cols-3]=\"showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))\">\n <cide-ele-select label=\"Program Class *\" formControlName=\"acapts_class_program_id_acacpm\"\n placeholder=\"Select program class\" [options]=\"programClassOptions()\" [loading]=\"programClassLoading()\"\n [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\" size=\"md\">\n </cide-ele-select>\n\n @if (showBranchDropdown()) {\n <cide-ele-select label=\"Specialization\" formControlName=\"acapts_class_program_branch_id_acabrn\"\n placeholder=\"Select specialization\" [options]=\"classProgramBranchOptions()\"\n [loading]=\"classProgramBranchLoading()\" [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\"\n size=\"md\">\n </cide-ele-select>\n }\n\n @if ((!isEditMode() || (isEditMode() && hasParentTermInEditMode())) && showTermDropdown()) {\n <cide-ele-select label=\"Class Program Term *\" formControlName=\"acapts_parent_class_prog_term_acapt\"\n placeholder=\"Select class program term\" [options]=\"classProgramTermOptions()\"\n [loading]=\"classProgramTermLoading()\" [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\"\n valueKey=\"_id\" labelKey=\"acapt_name\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n size=\"md\">\n </cide-ele-select>\n }\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this\n section</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programTermSectionForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\"\n [disabled]=\"loading() || programTermSectionForm.invalid\" [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { 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: CideEleTabComponent, selector: "cide-ele-tab", inputs: ["tabs", "activeTabId", "size", "variant", "fullWidth", "disabled"], outputs: ["tabChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }] });
|
|
4404
4568
|
}
|
|
4405
4569
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionCreateComponent, decorators: [{
|
|
4406
4570
|
type: Component,
|
|
@@ -4413,8 +4577,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
4413
4577
|
CideEleTabComponent,
|
|
4414
4578
|
CideIconComponent,
|
|
4415
4579
|
CideSelectComponent,
|
|
4416
|
-
CideLytSharedWrapperComponent
|
|
4417
|
-
], template: "<!-- \r\n PROGRAM TERM SECTION MASTER FORM\r\n \r\n Enterprise-Level Styling with Tailwind CSS\r\n Features: Responsive grids, proper typography, enhanced user experience\r\n-->\r\n\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent tw-max-w-full tw-overflow-hidden\" [formGroup]=\"programTermSectionForm\"\r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Tab Navigation -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-max-w-full tw-px-2 tw-py-0 tw-overflow-x-hidden\">\r\n <div class=\"tw-w-full tw-max-w-full tw-overflow-x-hidden\">\r\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\r\n (tabChange)=\"onTabChange($event)\">\r\n </cide-ele-tab>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Tab Content -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\r\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\r\n @switch (activeTab()) {\r\n\r\n @case ('basic') {\r\n <!-- Basic Program Term Section Information -->\r\n <div class=\"tw-space-y-6\">\r\n <!-- Program Class, Specialization, and Term at the top -->\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\" \r\n [class.md:tw-grid-cols-2]=\"(!showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))) || (isEditMode() && !hasParentTermInEditMode())\"\r\n [class.md:tw-grid-cols-3]=\"showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))\">\r\n <cide-ele-select \r\n label=\"Program Class *\" \r\n formControlName=\"acapts_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [options]=\"programClassOptions()\"\r\n [loading]=\"programClassLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n\r\n @if (showBranchDropdown()) {\r\n <cide-ele-select \r\n label=\"Specialization\" \r\n formControlName=\"acapts_class_program_branch_id_acabrn\" \r\n placeholder=\"Select specialization\"\r\n [options]=\"classProgramBranchOptions()\"\r\n [loading]=\"classProgramBranchLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n }\r\n\r\n @if ((!isEditMode() || (isEditMode() && hasParentTermInEditMode())) && showTermDropdown()) {\r\n <cide-ele-select \r\n label=\"Class Program Term *\" \r\n formControlName=\"acapts_parent_class_prog_term_acapt\" \r\n placeholder=\"Select class program term\"\r\n [options]=\"classProgramTermOptions()\"\r\n [loading]=\"classProgramTermLoading()\"\r\n [searchable]=\"true\"\r\n [disabled]=\"isViewMode() || isEditMode()\"\r\n valueKey=\"_id\"\r\n labelKey=\"acapt_name\"\r\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\r\n size=\"md\">\r\n </cide-ele-select>\r\n }\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\r\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\r\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\r\n placeholder=\"Enter detailed description of the section...\" rows=\"3\" size=\"md\">\r\n </cide-ele-textarea>\r\n </div>\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_isactive\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this section</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_iscurrent\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</span>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\r\n <cide-ele-input formControlName=\"acapts_islocked\" type=\"checkbox\" size=\"md\">\r\n </cide-ele-input>\r\n <div class=\"tw-flex tw-flex-col\">\r\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\r\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n @case ('configuration') {\r\n <!-- Section Configuration -->\r\n <div\r\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\r\n </div>\r\n <div>\r\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\r\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-space-y-4\">\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\r\n <div class=\"tw-space-y-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this section</p>\r\n </div>\r\n </div>\r\n \r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n\r\n <!-- Error Display -->\r\n @if (error()) {\r\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\r\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Form Actions -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\r\n [disabled]=\"loading()\">\r\n Reset Form\r\n </button>\r\n\r\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" [disabled]=\"loading() || programTermSectionForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</cide-lyt-shared-wrapper>\r\n\r\n" }]
|
|
4580
|
+
CideLytSharedWrapperComponent,
|
|
4581
|
+
CideFormFieldErrorComponent
|
|
4582
|
+
], template: "<!-- \n PROGRAM TERM SECTION MASTER FORM\n \n Enterprise-Level Styling with Tailwind CSS\n Features: Responsive grids, proper typography, enhanced user experience\n-->\n\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent tw-max-w-full tw-overflow-hidden\"\n [formGroup]=\"programTermSectionForm\" [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-max-w-full tw-px-2 tw-py-0 tw-overflow-x-hidden\">\n <div class=\"tw-w-full tw-max-w-full tw-overflow-x-hidden\">\n <cide-ele-tab [tabs]=\"programTermSectionTabs()\" [activeTabId]=\"activeTab()\" size=\"md\" variant=\"default\"\n (tabChange)=\"onTabChange($event)\">\n </cide-ele-tab>\n </div>\n </div>\n </div>\n\n <!-- Tab Content -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6 tw-overflow-y-auto tw-h-full\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Program Term Section Information -->\n <div class=\"tw-space-y-6\">\n <!-- Program Class, Specialization, and Term at the top -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\"\n [class.md:tw-grid-cols-2]=\"(!showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))) || (isEditMode() && !hasParentTermInEditMode())\"\n [class.md:tw-grid-cols-3]=\"showBranchDropdown() && (!isEditMode() || (isEditMode() && hasParentTermInEditMode()))\">\n <cide-ele-select label=\"Program Class *\" formControlName=\"acapts_class_program_id_acacpm\"\n placeholder=\"Select program class\" [options]=\"programClassOptions()\" [loading]=\"programClassLoading()\"\n [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\" size=\"md\">\n </cide-ele-select>\n\n @if (showBranchDropdown()) {\n <cide-ele-select label=\"Specialization\" formControlName=\"acapts_class_program_branch_id_acabrn\"\n placeholder=\"Select specialization\" [options]=\"classProgramBranchOptions()\"\n [loading]=\"classProgramBranchLoading()\" [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\"\n size=\"md\">\n </cide-ele-select>\n }\n\n @if ((!isEditMode() || (isEditMode() && hasParentTermInEditMode())) && showTermDropdown()) {\n <cide-ele-select label=\"Class Program Term *\" formControlName=\"acapts_parent_class_prog_term_acapt\"\n placeholder=\"Select class program term\" [options]=\"classProgramTermOptions()\"\n [loading]=\"classProgramTermLoading()\" [searchable]=\"true\" [disabled]=\"isViewMode() || isEditMode()\"\n valueKey=\"_id\" labelKey=\"acapt_name\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n size=\"md\">\n </cide-ele-select>\n }\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-6\">\n <cide-ele-input label=\"Section Code *\" formControlName=\"acapts_code\" placeholder=\"e.g., SEC-A, SEC-B\"\n size=\"md\" leadingIcon=\"code\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Section Name *\" formControlName=\"acapts_name\"\n placeholder=\"e.g., Section A, Section B\" size=\"md\" leadingIcon=\"group\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"acapts_description\"\n placeholder=\"Enter detailed description of the section...\" rows=\"3\" size=\"md\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-6\">\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_isactive\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_iscurrent\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Current</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Mark as current section</span>\n </div>\n </div>\n\n <div\n class=\"tw-flex tw-items-center tw-gap-3 tw-p-4 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"acapts_islocked\" type=\"checkbox\" size=\"md\">\n </cide-ele-input>\n <div class=\"tw-flex tw-flex-col\">\n <span class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Locked</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Prevent modifications</span>\n </div>\n </div>\n </div>\n </div>\n }\n\n @case ('configuration') {\n <!-- Section Configuration -->\n <div\n class=\"tw-bg-gradient-to-r tw-from-teal-50 tw-to-cyan-50 tw-border tw-border-teal-200 tw-rounded-xl tw-p-6\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-6\">\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-bg-teal-100 tw-p-2 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-6 tw-h-6\">tune</cide-ele-icon>\n </div>\n <div>\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-teal-900 tw-m-0\">Section Configuration</h6>\n <p class=\"tw-text-sm tw-text-teal-600 tw-m-0\">Configure section-specific settings and parameters</p>\n </div>\n </div>\n </div>\n\n <div class=\"tw-space-y-4\">\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-3\">Section Settings</h6>\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">people</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Student Capacity</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure maximum number of students for this\n section</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Schedule Settings</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Configure class timings and schedule preferences</p>\n </div>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">room</cide-ele-icon>\n <div>\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-m-0\">Room Assignment</p>\n <p class=\"tw-text-xs tw-text-gray-600 tw-m-0\">Assign specific rooms or classroom preferences</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n }\n }\n </div>\n\n <!-- Error Display -->\n @if (error()) {\n <div class=\"tw-mt-6 tw-p-4 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded-lg\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-icon variant=\"red\" size=\"sm\">error</cide-ele-icon>\n <span class=\"tw-text-sm tw-font-medium tw-text-red-800\">{{ error() }}</span>\n </div>\n </div>\n }\n </div>\n </div>\n\n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Form Validation Errors -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"programTermSectionForm\"></cide-form-field-error>\n </div>\n\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n @if (!isEditMode()) {\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n }\n\n <button cideEleButton type=\"button\" variant=\"secondary\" (click)=\"cancelForm()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\"\n [disabled]=\"loading() || programTermSectionForm.invalid\" [loading]=\"loading()\" leftIcon=\"save\">\n {{ isEditMode() ? 'Update Program Term Section' : 'Create Program Term Section' }}\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n</cide-lyt-shared-wrapper>" }]
|
|
4418
4583
|
}], ctorParameters: () => [] });
|
|
4419
4584
|
|
|
4420
4585
|
var programTermSectionCreate_component = /*#__PURE__*/Object.freeze({
|
|
@@ -4434,6 +4599,7 @@ class ProgramTermSectionListComponent {
|
|
|
4434
4599
|
classProgramMasterService = inject(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);
|
|
4435
4600
|
classProgramBranchService = inject(CideLytClassProgramBranchService);
|
|
4436
4601
|
classProgramTermService = inject(CideLytClassProgramTermService);
|
|
4602
|
+
rightsService = inject(RightsService);
|
|
4437
4603
|
// Modern ViewChild signals for template renderers (Angular 20 approach)
|
|
4438
4604
|
programTermSectionDetailsRendererTemplate = viewChild.required('programTermSectionDetailsRendererTemplate');
|
|
4439
4605
|
programTermSectionStatusRendererTemplate = viewChild.required('programTermSectionStatusRendererTemplate');
|
|
@@ -4765,7 +4931,14 @@ class ProgramTermSectionListComponent {
|
|
|
4765
4931
|
break;
|
|
4766
4932
|
}
|
|
4767
4933
|
}
|
|
4934
|
+
// Rights computed signals
|
|
4935
|
+
canCreate = computed(() => this.rightsService.hasRight('CREATE'), ...(ngDevMode ? [{ debugName: "canCreate" }] : []));
|
|
4936
|
+
canEdit = computed(() => this.rightsService.hasRight('EDIT'), ...(ngDevMode ? [{ debugName: "canEdit" }] : []));
|
|
4937
|
+
canDelete = computed(() => this.rightsService.hasRight('DELETE'), ...(ngDevMode ? [{ debugName: "canDelete" }] : []));
|
|
4938
|
+
canView = computed(() => this.rightsService.hasRight('VIEW'), ...(ngDevMode ? [{ debugName: "canView" }] : []));
|
|
4768
4939
|
ngOnInit() {
|
|
4940
|
+
// Initialize rights for program term section management
|
|
4941
|
+
this.rightsService.initializeRights('program_term_section');
|
|
4769
4942
|
this.initializeBreadcrumbData();
|
|
4770
4943
|
this.loadClassProgramMasters();
|
|
4771
4944
|
this.loadProgramTermSections();
|
|
@@ -4974,6 +5147,10 @@ class ProgramTermSectionListComponent {
|
|
|
4974
5147
|
* Create new program term section
|
|
4975
5148
|
*/
|
|
4976
5149
|
createProgramTermSection() {
|
|
5150
|
+
if (!this.rightsService.hasRight('CREATE')) {
|
|
5151
|
+
this.notificationService.error('You do not have permission to create program term sections');
|
|
5152
|
+
return;
|
|
5153
|
+
}
|
|
4977
5154
|
console.log('🔄 Create Program Term Section button clicked');
|
|
4978
5155
|
// Build query params with selected program class, branch, and term if available
|
|
4979
5156
|
const queryParams = {};
|
|
@@ -5017,6 +5194,10 @@ class ProgramTermSectionListComponent {
|
|
|
5017
5194
|
* Edit program term section
|
|
5018
5195
|
*/
|
|
5019
5196
|
editProgramTermSection(programTermSection) {
|
|
5197
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
5198
|
+
this.notificationService.error('You do not have permission to edit program term sections');
|
|
5199
|
+
return;
|
|
5200
|
+
}
|
|
5020
5201
|
if (!programTermSection._id) {
|
|
5021
5202
|
this.notificationService.error('Invalid section selected');
|
|
5022
5203
|
return;
|
|
@@ -5028,6 +5209,10 @@ class ProgramTermSectionListComponent {
|
|
|
5028
5209
|
* Delete program term section
|
|
5029
5210
|
*/
|
|
5030
5211
|
deleteProgramTermSection(programTermSection) {
|
|
5212
|
+
if (!this.rightsService.hasRight('DELETE')) {
|
|
5213
|
+
this.notificationService.error('You do not have permission to delete program term sections');
|
|
5214
|
+
return;
|
|
5215
|
+
}
|
|
5031
5216
|
this.confirmationService.confirmDelete(programTermSection?.acapts_name).then((confirmed) => {
|
|
5032
5217
|
if (confirmed) {
|
|
5033
5218
|
this.loading.set(true);
|
|
@@ -5061,6 +5246,10 @@ class ProgramTermSectionListComponent {
|
|
|
5061
5246
|
* Toggle program term section status
|
|
5062
5247
|
*/
|
|
5063
5248
|
toggleProgramTermSectionStatus(programTermSection) {
|
|
5249
|
+
if (!this.rightsService.hasRight('EDIT')) {
|
|
5250
|
+
this.notificationService.error('You do not have permission to change program term section status');
|
|
5251
|
+
return;
|
|
5252
|
+
}
|
|
5064
5253
|
this.loading.set(true);
|
|
5065
5254
|
const payload = {
|
|
5066
5255
|
acapts_id: programTermSection._id
|
|
@@ -5320,7 +5509,7 @@ class ProgramTermSectionListComponent {
|
|
|
5320
5509
|
}
|
|
5321
5510
|
}
|
|
5322
5511
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5323
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionListComponent, isStandalone: true, selector: "cide-academics-program-term-section-list", viewQueries: [{ propertyName: "programTermSectionDetailsRendererTemplate", first: true, predicate: ["programTermSectionDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programTermSectionStatusRendererTemplate", first: true, predicate: ["programTermSectionStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programClassRendererTemplate", first: true, predicate: ["programClassRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "termSpecializationRendererTemplate", first: true, predicate: ["termSpecializationRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramTermRendererTemplate", first: true, predicate: ["classProgramTermRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "parentClassProgramTermRendererTemplate", first: true, predicate: ["parentClassProgramTermRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Program Term Section Management Container -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n \r\n <!-- Action Buttons in Breadcrumb Area -->\r\n <div breadcrumb-actions>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\r\n Create Program Term Section\r\n </button>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\r\n <!-- Filter Section -->\r\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4\">\r\n <div>\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\r\n <cide-ele-select\r\n [options]=\"classProgramMastersOptions()\"\r\n [ngModel]=\"selectedProgramClassId() || ''\"\r\n (ngModelChange)=\"onClassProgramChange($event)\"\r\n placeholder=\"Select Class Program\"\r\n valueKey=\"_id\"\r\n labelKey=\"displayLabel\"\r\n [loading]=\"classProgramMastersLoading()\"\r\n [searchable]=\"true\"\r\n (searchChange)=\"onClassProgramMasterSearch($event)\">\r\n </cide-ele-select>\r\n </div>\r\n \r\n @if (showBranchDropdown()) {\r\n <div>\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\r\n <cide-ele-select\r\n [options]=\"classProgramBranchesOptions()\"\r\n [ngModel]=\"selectedBranchId() || ''\"\r\n (ngModelChange)=\"onBranchChange($event)\"\r\n placeholder=\"Select Specialization\"\r\n valueKey=\"_id\"\r\n labelKey=\"acabrn_name\"\r\n [loading]=\"classProgramBranchesLoading()\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n \r\n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId()) && showTermDropdown()) {\r\n <div>\r\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term (Leaf Only)</label>\r\n <cide-ele-select\r\n [options]=\"classProgramTermOptions()\"\r\n [ngModel]=\"selectedTermId() || ''\"\r\n (ngModelChange)=\"onTermChange($event)\"\r\n placeholder=\"Select Program Term (Leaf Only)\"\r\n valueKey=\"_id\"\r\n labelKey=\"acapt_name\"\r\n [loading]=\"classProgramTermsLoading()\"\r\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\r\n [searchable]=\"true\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Data Grid Section -->\r\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\r\n <cide-ele-data-grid\r\n class=\"tw-h-full\"\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</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <div class=\"tw-flex-shrink-0\">\r\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\r\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\r\n </div>\r\n </div>\r\n <div class=\"tw-min-w-0 tw-flex-1\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\r\n {{ row?.acapts_name }}\r\n </h6>\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\r\n {{ row?.acapts_description }}\r\n </p>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n @if (row?.acapts_iscurrent) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\r\n Current\r\n </span>\r\n }\r\n @if (row?.acapts_islocked) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\r\n Locked\r\n </span>\r\n }\r\n <span [ngClass]=\"{\r\n 'tw-bg-green-100 tw-text-green-800': row?.acapts_isactive,\r\n 'tw-bg-red-100 tw-text-red-800': !row?.acapts_isactive\r\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\r\n <cide-ele-icon [ngClass]=\"{\r\n 'tw-text-green-600': row?.acapts_isactive,\r\n 'tw-text-red-600': !row?.acapts_isactive\r\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\r\n {{ row?.acapts_isactive ? 'check_circle' : 'cancel' }}\r\n </cide-ele-icon>\r\n {{ row?.acapts_isactive ? 'Active' : 'Inactive' }}\r\n </span>\r\n </div>\r\n</ng-template>\r\n\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)=\"onDropdownItemClick($event, row)\"\r\n size=\"sm\"\r\n variant=\"ghost\"\r\n icon=\"more_vert\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n {{ row?.acapts_class_program_id_acacpm?.acacpm_alise_title || row?.acapts_class_program_id_acacpm?.acacpm_name || 'N/A' }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #termSpecializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn) {\r\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_name || row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_code || 'N/A' }}\r\n } @else {\r\n <span class=\"tw-text-gray-400\">-</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #classProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #parentClassProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\r\n <div class=\"tw-text-sm tw-text-gray-900\">\r\n @if (row?.acapts_parent_class_prog_term_acapt) {\r\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt) {\r\n @if (typeof row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt === 'object') {\r\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\r\n } @else {\r\n <span class=\"tw-text-gray-400\">-</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-gray-400\">-</span>\r\n }\r\n } @else {\r\n <span class=\"tw-text-gray-400\">-</span>\r\n }\r\n </div>\r\n</ng-template>\r\n", styles: [":host{height:100%;display:flex;flex-direction:column}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: 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", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
5512
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: ProgramTermSectionListComponent, isStandalone: true, selector: "cide-academics-program-term-section-list", viewQueries: [{ propertyName: "programTermSectionDetailsRendererTemplate", first: true, predicate: ["programTermSectionDetailsRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programTermSectionStatusRendererTemplate", first: true, predicate: ["programTermSectionStatusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "programClassRendererTemplate", first: true, predicate: ["programClassRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "termSpecializationRendererTemplate", first: true, predicate: ["termSpecializationRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "classProgramTermRendererTemplate", first: true, predicate: ["classProgramTermRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "parentClassProgramTermRendererTemplate", first: true, predicate: ["parentClassProgramTermRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4\">\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"displayLabel\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\n <cide-ele-select\n [options]=\"classProgramBranchesOptions()\"\n [ngModel]=\"selectedBranchId() || ''\"\n (ngModelChange)=\"onBranchChange($event)\"\n placeholder=\"Select Specialization\"\n valueKey=\"_id\"\n labelKey=\"acabrn_name\"\n [loading]=\"classProgramBranchesLoading()\">\n </cide-ele-select>\n </div>\n }\n \n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId()) && showTermDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term (Leaf Only)</label>\n <cide-ele-select\n [options]=\"classProgramTermOptions()\"\n [ngModel]=\"selectedTermId() || ''\"\n (ngModelChange)=\"onTermChange($event)\"\n placeholder=\"Select Program Term (Leaf Only)\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [loading]=\"classProgramTermsLoading()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n [searchable]=\"true\">\n </cide-ele-select>\n </div>\n }\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ row?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (row?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': row?.acapts_isactive,\n 'tw-text-red-600': !row?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_class_program_id_acacpm?.acacpm_alise_title || row?.acapts_class_program_id_acacpm?.acacpm_name || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #termSpecializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn) {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_name || row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n\n<ng-template #classProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #parentClassProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt) {\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt) {\n @if (typeof row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt === 'object') {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n", styles: [":host{height:100%;display:flex;flex-direction:column}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { 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: 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"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
|
|
5324
5513
|
}
|
|
5325
5514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: ProgramTermSectionListComponent, decorators: [{
|
|
5326
5515
|
type: Component,
|
|
@@ -5333,7 +5522,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
5333
5522
|
CideEleDropdownComponent,
|
|
5334
5523
|
CideSelectComponent,
|
|
5335
5524
|
CideLytSharedWrapperComponent
|
|
5336
|
-
], template: "<!-- Program Term Section Management Container -->\
|
|
5525
|
+
], template: "<!-- Program Term Section Management Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'program_term_section' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\" (btnClick)=\"createProgramTermSection()\">\n Create Program Term Section\n </button>\n </div>\n\n <!-- Main Content -->\n <div class=\"tw-flex tw-flex-col tw-w-full tw-h-full tw-overflow-hidden\">\n <!-- Filter Section -->\n <div class=\"tw-flex-shrink-0 tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-4\">\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Class Program</label>\n <cide-ele-select\n [options]=\"classProgramMastersOptions()\"\n [ngModel]=\"selectedProgramClassId() || ''\"\n (ngModelChange)=\"onClassProgramChange($event)\"\n placeholder=\"Select Class Program\"\n valueKey=\"_id\"\n labelKey=\"displayLabel\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\">\n </cide-ele-select>\n </div>\n \n @if (showBranchDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Specialization</label>\n <cide-ele-select\n [options]=\"classProgramBranchesOptions()\"\n [ngModel]=\"selectedBranchId() || ''\"\n (ngModelChange)=\"onBranchChange($event)\"\n placeholder=\"Select Specialization\"\n valueKey=\"_id\"\n labelKey=\"acabrn_name\"\n [loading]=\"classProgramBranchesLoading()\">\n </cide-ele-select>\n </div>\n }\n \n @if (selectedProgramClassId() && (!showBranchDropdown() || selectedBranchId()) && showTermDropdown()) {\n <div>\n <label class=\"tw-block tw-text-sm tw-font-medium tw-text-gray-700 tw-mb-2\">Program Term (Leaf Only)</label>\n <cide-ele-select\n [options]=\"classProgramTermOptions()\"\n [ngModel]=\"selectedTermId() || ''\"\n (ngModelChange)=\"onTermChange($event)\"\n placeholder=\"Select Program Term (Leaf Only)\"\n valueKey=\"_id\"\n labelKey=\"acapt_name\"\n [loading]=\"classProgramTermsLoading()\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\"\n [searchable]=\"true\">\n </cide-ele-select>\n </div>\n }\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-flex-1 tw-min-h-0 tw-p-0\">\n <cide-ele-data-grid\n class=\"tw-h-full\"\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #programTermSectionDetailsRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\n <div class=\"tw-flex-shrink-0\">\n <div class=\"tw-w-10 tw-h-10 tw-bg-teal-100 tw-rounded-lg tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-text-teal-600 tw-w-5 tw-h-5\">group</cide-ele-icon>\n </div>\n </div>\n <div class=\"tw-min-w-0 tw-flex-1\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-truncate tw-m-0\">\n {{ row?.acapts_name }}\n </h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-truncate tw-m-0\">\n {{ row?.acapts_description }}\n </p>\n </div>\n </div>\n</ng-template>\n\n<ng-template #programTermSectionStatusRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\n @if (row?.acapts_iscurrent) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-blue-100 tw-text-blue-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">star</cide-ele-icon>\n Current\n </span>\n }\n @if (row?.acapts_islocked) {\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-mr-1\">lock</cide-ele-icon>\n Locked\n </span>\n }\n <span [ngClass]=\"{\n 'tw-bg-green-100 tw-text-green-800': row?.acapts_isactive,\n 'tw-bg-red-100 tw-text-red-800': !row?.acapts_isactive\n }\" class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-text-xs tw-font-medium\">\n <cide-ele-icon [ngClass]=\"{\n 'tw-text-green-600': row?.acapts_isactive,\n 'tw-text-red-600': !row?.acapts_isactive\n }\" class=\"tw-w-3 tw-h-3 tw-mr-1\">\n {{ row?.acapts_isactive ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ row?.acapts_isactive ? 'Active' : 'Inactive' }}\n </span>\n </div>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <cide-ele-dropdown\n [items]=\"getActionDropdownItems(row)\"\n (itemClick)=\"onDropdownItemClick($event, row)\"\n size=\"sm\"\n variant=\"ghost\"\n icon=\"more_vert\">\n </cide-ele-dropdown>\n</ng-template>\n\n<ng-template #programClassRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_class_program_id_acacpm?.acacpm_alise_title || row?.acapts_class_program_id_acacpm?.acacpm_name || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #termSpecializationRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn) {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_name || row?.acapts_parent_class_prog_term_acapt?.acapt_class_program_branch_id_acabrn?.acabrn_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n\n<ng-template #classProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n </div>\n</ng-template>\n\n<ng-template #parentClassProgramTermRendererTemplate let-value=\"value\" let-row=\"row\" let-column=\"column\">\n <div class=\"tw-text-sm tw-text-gray-900\">\n @if (row?.acapts_parent_class_prog_term_acapt) {\n @if (row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt) {\n @if (typeof row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt === 'object') {\n {{ row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_name || row?.acapts_parent_class_prog_term_acapt?.acapt_parent_class_prog_term_acapt?.acapt_code || 'N/A' }}\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n } @else {\n <span class=\"tw-text-gray-400\">-</span>\n }\n </div>\n</ng-template>\n", styles: [":host{height:100%;display:flex;flex-direction:column}cide-ele-data-grid{flex:1;min-height:0;display:flex;flex-direction:column}\n"] }]
|
|
5337
5526
|
}] });
|
|
5338
5527
|
|
|
5339
5528
|
var programTermSectionList_component = /*#__PURE__*/Object.freeze({
|
|
@@ -6106,7 +6295,7 @@ class CideLytProgramSectionSelectorComponent {
|
|
|
6106
6295
|
});
|
|
6107
6296
|
}
|
|
6108
6297
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramSectionSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6109
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytProgramSectionSelectorComponent, isStandalone: true, selector: "cide-lyt-program-section-selector", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, classProgramControlName: { classPropertyName: "classProgramControlName", publicName: "classProgramControlName", isSignal: true, isRequired: false, transformFunction: null }, branchControlName: { classPropertyName: "branchControlName", publicName: "branchControlName", isSignal: true, isRequired: false, transformFunction: null }, termControlName: { classPropertyName: "termControlName", publicName: "termControlName", isSignal: true, isRequired: false, transformFunction: null }, sectionControlName: { classPropertyName: "sectionControlName", publicName: "sectionControlName", isSignal: true, isRequired: false, transformFunction: null }, academicYearId: { classPropertyName: "academicYearId", publicName: "academicYearId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, gridCols: { classPropertyName: "gridCols", publicName: "gridCols", isSignal: true, isRequired: false, transformFunction: null }, showAllPrograms: { classPropertyName: "showAllPrograms", publicName: "showAllPrograms", isSignal: true, isRequired: false, transformFunction: null }, includeInactive: { classPropertyName: "includeInactive", publicName: "includeInactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valuesChange: "valuesChange" }, ngImport: i0, template: "<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\
|
|
6298
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideLytProgramSectionSelectorComponent, isStandalone: true, selector: "cide-lyt-program-section-selector", inputs: { formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: true, transformFunction: null }, classProgramControlName: { classPropertyName: "classProgramControlName", publicName: "classProgramControlName", isSignal: true, isRequired: false, transformFunction: null }, branchControlName: { classPropertyName: "branchControlName", publicName: "branchControlName", isSignal: true, isRequired: false, transformFunction: null }, termControlName: { classPropertyName: "termControlName", publicName: "termControlName", isSignal: true, isRequired: false, transformFunction: null }, sectionControlName: { classPropertyName: "sectionControlName", publicName: "sectionControlName", isSignal: true, isRequired: false, transformFunction: null }, academicYearId: { classPropertyName: "academicYearId", publicName: "academicYearId", isSignal: true, isRequired: false, transformFunction: null }, entityId: { classPropertyName: "entityId", publicName: "entityId", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, showLabels: { classPropertyName: "showLabels", publicName: "showLabels", isSignal: true, isRequired: false, transformFunction: null }, gridCols: { classPropertyName: "gridCols", publicName: "gridCols", isSignal: true, isRequired: false, transformFunction: null }, showAllPrograms: { classPropertyName: "showAllPrograms", publicName: "showAllPrograms", isSignal: true, isRequired: false, transformFunction: null }, includeInactive: { classPropertyName: "includeInactive", publicName: "includeInactive", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valuesChange: "valuesChange" }, ngImport: i0, template: "<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\n <!-- Class/Program Dropdown -->\n <cide-ele-select \n [label]=\"showLabels() ? 'Program/Class' : ''\" \n [formControl]=\"getClassProgramControl()\"\n [options]=\"classProgramOptions()\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramSearch($event)\"\n placeholder=\"Search and select class/program\"\n [disabled]=\"disabled()\"\n size=\"sm\">\n </cide-ele-select>\n\n <!-- Branch/Specialization Dropdown (conditional) -->\n @if (showBranchDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Branch (Specialization)' : ''\" \n [formControl]=\"getBranchControl()\"\n [options]=\"classProgramBranches()\"\n [loading]=\"classProgramBranchesLoading()\"\n placeholder=\"Select branch\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n\n <!-- Program Term Dropdown (conditional) -->\n @if (showTermDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Program Term' : ''\" \n [formControl]=\"getTermControl()\"\n [options]=\"classProgramTerms()\"\n [loading]=\"classProgramTermsLoading()\"\n placeholder=\"Select term/semester\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\"\n valueKey=\"_id\"\n labelKey=\"label\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\n </cide-ele-select>\n }\n\n <!-- Section Dropdown (conditional) -->\n @if (hasSections()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Section' : ''\" \n [formControl]=\"getSectionControl()\"\n [options]=\"programTermSections()\"\n [loading]=\"programTermSectionsLoading()\"\n placeholder=\"Select section\"\n [disabled]=\"disabled() || !formGroup().get(termControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n</div>\n\n", styles: [".program-section-selector{display:grid;gap:1rem;width:100%;border:none;padding:0;margin:0;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { 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"] }] });
|
|
6110
6299
|
}
|
|
6111
6300
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytProgramSectionSelectorComponent, decorators: [{
|
|
6112
6301
|
type: Component,
|
|
@@ -6115,7 +6304,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
6115
6304
|
ReactiveFormsModule,
|
|
6116
6305
|
CideSelectComponent,
|
|
6117
6306
|
NgClass
|
|
6118
|
-
], template: "<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\
|
|
6307
|
+
], template: "<div class=\"program-section-selector\" [ngClass]=\"gridCols()\">\n <!-- Class/Program Dropdown -->\n <cide-ele-select \n [label]=\"showLabels() ? 'Program/Class' : ''\" \n [formControl]=\"getClassProgramControl()\"\n [options]=\"classProgramOptions()\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramSearch($event)\"\n placeholder=\"Search and select class/program\"\n [disabled]=\"disabled()\"\n size=\"sm\">\n </cide-ele-select>\n\n <!-- Branch/Specialization Dropdown (conditional) -->\n @if (showBranchDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Branch (Specialization)' : ''\" \n [formControl]=\"getBranchControl()\"\n [options]=\"classProgramBranches()\"\n [loading]=\"classProgramBranchesLoading()\"\n placeholder=\"Select branch\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n\n <!-- Program Term Dropdown (conditional) -->\n @if (showTermDropdown()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Program Term' : ''\" \n [formControl]=\"getTermControl()\"\n [options]=\"classProgramTerms()\"\n [loading]=\"classProgramTermsLoading()\"\n placeholder=\"Select term/semester\"\n [disabled]=\"disabled() || !formGroup().get(classProgramControlName())?.value\"\n size=\"sm\"\n valueKey=\"_id\"\n labelKey=\"label\"\n [treeView]=\"{ enabled: true, primaryKey: '_id', foreignKey: 'acapt_parent_class_prog_term_acapt' }\">\n </cide-ele-select>\n }\n\n <!-- Section Dropdown (conditional) -->\n @if (hasSections()) {\n <cide-ele-select \n [label]=\"showLabels() ? 'Section' : ''\" \n [formControl]=\"getSectionControl()\"\n [options]=\"programTermSections()\"\n [loading]=\"programTermSectionsLoading()\"\n placeholder=\"Select section\"\n [disabled]=\"disabled() || !formGroup().get(termControlName())?.value\"\n size=\"sm\">\n </cide-ele-select>\n }\n</div>\n\n", styles: [".program-section-selector{display:grid;gap:1rem;width:100%;border:none;padding:0;margin:0;background:transparent}\n"] }]
|
|
6119
6308
|
}], ctorParameters: () => [] });
|
|
6120
6309
|
|
|
6121
6310
|
/*
|
|
@@ -6127,4 +6316,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
6127
6316
|
*/
|
|
6128
6317
|
|
|
6129
6318
|
export { AcademicYearCreateComponent as A, CideLytProgramClassService as C, ProgramTermSectionCreateComponent as P, CideLytAcademicYearService as a, CideLytClassProgramBranchService as b, CideLytClassProgramTermService as c, academicsRoutes as d, AcademicYearListComponent as e, CideLytAcademicYearMappingService as f, CideLytClassProgramBranchListComponent as g, CideLytClassProgramBranchFormComponent as h, ProgramTermSectionListComponent as i, CideLytProgramTermSectionService as j, CideLytProgramSectionSelectorComponent as k };
|
|
6130
|
-
//# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-
|
|
6319
|
+
//# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-DTKiLHAW.mjs.map
|