cloud-ide-academics 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (20) hide show
  1. package/fesm2022/cloud-ide-academics-class-program-term-create.component-D3PfbSMN.mjs +578 -0
  2. package/fesm2022/cloud-ide-academics-class-program-term-create.component-D3PfbSMN.mjs.map +1 -0
  3. package/fesm2022/cloud-ide-academics-class-program-term-list.component-Cpbyavgd.mjs +404 -0
  4. package/fesm2022/cloud-ide-academics-class-program-term-list.component-Cpbyavgd.mjs.map +1 -0
  5. package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs +111 -0
  6. package/fesm2022/cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs.map +1 -0
  7. package/fesm2022/cloud-ide-academics-cloud-ide-academics-BP1hZ-yx.mjs +2802 -0
  8. package/fesm2022/cloud-ide-academics-cloud-ide-academics-BP1hZ-yx.mjs.map +1 -0
  9. package/fesm2022/cloud-ide-academics-program-class-create.component-Ds8vN9sL.mjs +391 -0
  10. package/fesm2022/cloud-ide-academics-program-class-create.component-Ds8vN9sL.mjs.map +1 -0
  11. package/fesm2022/cloud-ide-academics-program-class-list.component-C6VyX4hH.mjs +433 -0
  12. package/fesm2022/cloud-ide-academics-program-class-list.component-C6VyX4hH.mjs.map +1 -0
  13. package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dg9Pjwj5.mjs +211 -0
  14. package/fesm2022/cloud-ide-academics-program-term-section-create.component-Dg9Pjwj5.mjs.map +1 -0
  15. package/fesm2022/cloud-ide-academics-program-term-section-list.component-xVeeeGDV.mjs +478 -0
  16. package/fesm2022/cloud-ide-academics-program-term-section-list.component-xVeeeGDV.mjs.map +1 -0
  17. package/fesm2022/cloud-ide-academics.mjs +1 -1535
  18. package/fesm2022/cloud-ide-academics.mjs.map +1 -1
  19. package/index.d.ts +239 -2
  20. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-academics.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/cloud-ide-academics.routes.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/services/academic-year-mapping.service.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-create/academic-year-create.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/components/academic-year-list/academic-year-list.component.html","../../../projects/cloud-ide-academics/src/lib/collection/academic-year-management/index.ts","../../../projects/cloud-ide-academics/src/public-api.ts","../../../projects/cloud-ide-academics/src/cloud-ide-academics.ts"],"sourcesContent":["import { Route } from '@angular/router';\r\nimport { authGuard } from 'cloud-ide-auth';\r\nexport const academicsRoutes: Route[] = [\r\n // Academic Year Management Routes\r\n {\r\n path: 'academic_year',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-list/academic-year-list.component').then(c => c.AcademicYearListComponent),\r\n title: 'Academic Year Management',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/create',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Create Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/edit/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'Edit Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n },\r\n {\r\n path: 'academic_year/view/:query',\r\n loadComponent: () => import('./collection/academic-year-management/components/academic-year-create/academic-year-create.component').then(c => c.AcademicYearCreateComponent),\r\n title: 'View Academic Year',\r\n canActivate: [authGuard],\r\n data: {\r\n reuseTab: true,\r\n sypg_page_code: \"academic_year_list\"\r\n }\r\n }\r\n];\r\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport {\n cidePath,\n academicsRoutesUrl,\n hostManagerRoutesUrl,\n generateStringFromObject,\n type academicYearControllerResponse,\n type MAcademicYear,\n type academicYearByIdControllerResponse,\n type MAcademicYearGetByIdPayload,\n type academicYearInsertUpdateControllerResponse,\n type MAcademicYearInsertUpdatePayload,\n type academicYearDeleteControllerResponse,\n type MAcademicYearDeletePayload,\n type academicYearToggleStatusControllerResponse,\n type MAcademicYearToggleStatusPayload,\n type MAcademicYearMappingInsertUpdatePayload,\n type academicYearMappingInsertUpdateControllerResponse\n} from 'cloud-ide-lms-model';\n\n// Types\ninterface AcademicYearMapping {\n _id?: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked?: boolean;\n acayrmp_iscurrent?: boolean;\n}\n\ninterface AcademicYearWithMappings {\n acayr_academic_year_mappings?: AcademicYearMapping[];\n [key: string]: any;\n}\n\ninterface DeleteMappingPayload {\n acayrmp_id: string;\n}\n\ninterface ToggleMappingPayload {\n acayrmp_id: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideLytAcademicYearService {\n private http = inject(HttpClient);\n\n /**\n * Get list of academic years\n * @param payload - Query parameters for filtering/pagination\n * @returns Observable of academic year list response\n */\n getAcademicYearList(payload: MAcademicYear): Observable<academicYearControllerResponse> {\n console.log(\"payload\", payload)\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYear,\n query\n ]);\n\n return this.http.get(url);\n }\n\n /**\n * Get academic year by ID\n * @param payload - Academic year ID payload\n * @returns Observable of academic year data\n */\n getAcademicYearById(payload: MAcademicYearGetByIdPayload): Observable<academicYearByIdControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYear,\n 'byId',\n query\n ]);\n\n return this.http.get(url);\n }\n\n /**\n * Create or update academic year\n * @param data - Academic year data to save\n * @returns Observable of the save response\n */\n saveUpdateAcademicYear(data: MAcademicYearInsertUpdatePayload): Observable<academicYearInsertUpdateControllerResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYear\n ]);\n\n return this.http.post(url, data);\n }\n\n /**\n * Create or update academic year with mappings\n * @param data - Academic year data with mappings\n * @returns Observable of the save response\n */\n saveUpdateAcademicYearWithMappings(data: AcademicYearWithMappings): Observable<academicYearInsertUpdateControllerResponse> {\n // Extract mappings from the data\n const mappings = data.acayr_academic_year_mappings || [];\n const academicYearData = { ...data } as MAcademicYearInsertUpdatePayload;\n delete (academicYearData as any).acayr_academic_year_mappings;\n\n // First save/update the academic year\n return this.saveUpdateAcademicYear(academicYearData).pipe(\n switchMap((academicYearResponse) => {\n if (!academicYearResponse.success || !academicYearResponse.data) {\n return of(academicYearResponse);\n }\n\n const academicYearId = academicYearResponse.data._id;\n \n // If no mappings, return the academic year response\n if (mappings.length === 0) {\n return of(academicYearResponse);\n }\n\n // Process mappings\n const mappingObservables = mappings.map((mapping: AcademicYearMapping) => {\n const mappingPayload: MAcademicYearMappingInsertUpdatePayload = {\n _id: mapping._id && !mapping._id.startsWith('temp_') ? mapping._id : undefined,\n acayrmp_academic_year_id_acayr: academicYearId,\n acayrmp_entity_id_syen: mapping.acayrmp_entity_id_syen,\n acayrmp_islocked: mapping.acayrmp_islocked || false,\n acayrmp_iscurrent: mapping.acayrmp_iscurrent || false\n };\n\n const mappingUrl = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYearMapping\n ]);\n\n return this.http.post(mappingUrl, mappingPayload).pipe(\n catchError((error) => {\n console.error('Error saving mapping:', error);\n return of({ success: false, error });\n })\n );\n });\n\n // Execute all mapping operations\n return forkJoin(mappingObservables).pipe(\n map((mappingResponses: any) => {\n // Check if all mappings were successful\n const allMappingsSuccessful = mappingResponses.every((response: any) => response.success);\n \n if (allMappingsSuccessful) {\n return {\n ...academicYearResponse,\n message: 'Academic year and mappings saved successfully'\n };\n } else {\n return {\n ...academicYearResponse,\n message: 'Academic year saved but some mappings failed',\n mappingErrors: mappingResponses.filter((response: any) => !response.success)\n } as any;\n }\n })\n );\n }),\n catchError((error) => {\n console.error('Error in saveUpdateAcademicYearWithMappings:', error);\n return of({\n success: false,\n code: 500 as any,\n message: 'Error saving academic year with mappings',\n error\n } as any);\n })\n );\n }\n\n /**\n * Delete academic year\n * @param payload - Academic year ID payload\n * @returns Observable of the delete response\n */\n deleteAcademicYear(payload: MAcademicYearDeletePayload): Observable<academicYearDeleteControllerResponse> {\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYear,\n 'delete',\n query\n ]);\n\n return this.http.delete(url);\n }\n\n /**\n * Toggle academic year status\n * @param payload - Academic year ID payload\n * @returns Observable of the toggle response\n */\n toggleAcademicYearStatus(payload: MAcademicYearToggleStatusPayload): Observable<academicYearToggleStatusControllerResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYear,\n 'toggle-status'\n ]);\n\n console.log('🔄 Making PATCH request to toggle academic year status:', { url, payload });\n return this.http.patch(url, payload);\n }\n\n /**\n * Delete academic year mapping\n * @param payload - Academic year mapping ID payload\n * @returns Observable of the delete response\n */\n deleteAcademicYearMapping(payload: DeleteMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYearMapping\n ]);\n\n return this.http.delete(url, { body: payload });\n }\n\n /**\n * Toggle academic year mapping status\n * @param payload - Academic year mapping ID payload\n * @returns Observable of the toggle response\n */\n toggleAcademicYearMappingStatus(payload: ToggleMappingPayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.academicYearMapping,\n 'toggle-status'\n ]);\n\n console.log('🔄 Making PATCH request to toggle academic year mapping status:', { url, payload });\n return this.http.patch(url, payload);\n }\n}\n","import { Injectable, inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport {\r\n cidePath,\r\n academicsRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n academicYearMappingControllerResponse,\r\n MAcademicYearMapping,\r\n academicYearMappingByIdControllerResponse,\r\n MAcademicYearMappingGetByIdPayload,\r\n academicYearMappingInsertUpdateControllerResponse,\r\n MAcademicYearMappingInsertUpdatePayload,\r\n academicYearMappingDeleteControllerResponse,\r\n MAcademicYearMappingDeletePayload,\r\n academicYearMappingToggleStatusControllerResponse,\r\n MAcademicYearMappingToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideLytAcademicYearMappingService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of academic year mappings\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of academic year mapping list response\r\n */\r\n getAcademicYearMappingList(payload: MAcademicYearMapping): Observable<academicYearMappingControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get academic year mapping by ID\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of academic year mapping data\r\n */\r\n getAcademicYearMappingById(payload: MAcademicYearMappingGetByIdPayload): Observable<academicYearMappingByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'byId',\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Create or update academic year mapping\r\n * @param data - Academic year mapping data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateAcademicYearMapping(data: MAcademicYearMappingInsertUpdatePayload): Observable<academicYearMappingInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete academic year mapping\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteAcademicYearMapping(payload: MAcademicYearMappingDeletePayload): Observable<academicYearMappingDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'delete',\r\n query\r\n ]);\r\n\r\n return this.http.delete(url);\r\n }\r\n\r\n /**\r\n * Toggle academic year mapping status\r\n * @param payload - Academic year mapping ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleAcademicYearMappingStatus(payload: MAcademicYearMappingToggleStatusPayload): Observable<academicYearMappingToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n academicsRoutesUrl.module,\r\n academicsRoutesUrl.academicYearMapping,\r\n 'toggle-status'\r\n ]);\r\n\r\n return this.http.post(url, payload);\r\n }\r\n}\r\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n type OnDestroy as OnDestroyType \n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { \n FormBuilder, \n FormGroup, \n ReactiveFormsModule, \n Validators, \n FormArray,\n type AbstractControl \n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { Observable, forkJoin, of, type OperatorFunction } from 'rxjs';\nimport { map, catchError, switchMap } from 'rxjs/operators';\nimport { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideEleTabComponent, \n type TabItem, \n CideIconComponent \n} from 'cloud-ide-element';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\nimport { CideLytAcademicYearMappingService } from '../../services/academic-year-mapping.service';\nimport { CideCoreEntityManagementService } from 'cloud-ide-core';\nimport {\n type MAcademicYearInsertUpdatePayload,\n type MAcademicYearGetByIdPayload,\n type academicYearByIdControllerResponse,\n generateObjectFromString\n} from 'cloud-ide-lms-model';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\n\n// Types\ninterface AcademicYearMapping {\n _id?: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked?: boolean;\n acayrmp_iscurrent?: boolean;\n}\n\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\n\n@Component({\n selector: 'cide-core-academic-year-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent\n ],\n templateUrl: './academic-year-create.component.html'\n})\nexport class AcademicYearCreateComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly academicYearMappingService = inject(CideLytAcademicYearMappingService);\n private readonly entityService = inject(CideCoreEntityManagementService);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n\n // Form and state management with proper typing\n academicYearForm!: FormGroup;\n readonly activeTab = signal<string>('basic');\n readonly loading = signal<boolean>(false);\n readonly error = signal<string | null>(null);\n\n // Academic year information from route\n readonly academicYearId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly originalMappings = signal<AcademicYearMapping[]>([]); // Track original mappings for deletion\n\n // Entity options for dropdown\n readonly entityOptions = signal<Entity[]>([]);\n\n constructor() {\n this.academicYearForm = this.fb.group({\n // Basic Academic Year Information\n acayr_code: ['', [Validators.required]],\n acayr_name: ['', [Validators.required]],\n acayr_description: [''],\n acayr_from_date: ['', [Validators.required]],\n acayr_to_date: ['', [Validators.required]],\n acayr_isactive: [true],\n acayr_iscurrent: [false],\n acayr_islocked: [false],\n \n // Academic Year Mapping Information\n acayr_academic_year_mappings: this.fb.array([])\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n // Get academic year information from route (for edit mode)\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n console.log(queryParams, 'queryParams');\n\n if (queryParams) {\n // Query parameters passed (following page-controls pattern)\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.acayr_id) {\n this.academicYearId.set(queryData.acayr_id as string);\n this.isEditMode.set(true);\n this.loadAcademicYearData(queryData.acayr_id as string);\n }\n } else {\n // Create mode\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n console.log('🏢 Loading dropdown options');\n // Load entity options\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log(`🏢 entities:`, response.data);\n this.entityOptions.set(response.data || []);\n }\n },\n error: (error) => console.error('Error loading entities:', error)\n });\n }\n\n /**\n * Load academic year data for edit mode\n */\n private loadAcademicYearData(academicYearId: string): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MAcademicYearGetByIdPayload = {\n acayr_id: academicYearId\n };\n\n // Load academic year data\n this.academicYearService.getAcademicYearById(payload).subscribe({\n next: (response: academicYearByIdControllerResponse) => {\n if (response?.success && response.data) {\n console.log('📚 Academic year data loaded:', response.data);\n this.populateFormWithAcademicYearData(response.data);\n \n // Load existing mappings for this academic year\n this.loadAcademicYearMappings(academicYearId);\n } else {\n console.error('❌ Failed to load academic year data');\n this.error.set('Failed to load academic year data');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error loading academic year data:', error);\n this.error.set('Error loading academic year data');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Load academic year mappings for edit mode\n */\n private loadAcademicYearMappings(academicYearId: string): void {\n const mappingPayload: any = {\n acayrmp_academic_year_id_acayr: academicYearId\n };\n\n this.academicYearMappingService.getAcademicYearMappingList(mappingPayload).subscribe({\n next: (response: any) => {\n if (response?.success && response.data) {\n console.log('🔗 Academic year mappings loaded:', response.data);\n this.populateFormWithMappingsData(response.data);\n } else {\n console.warn('⚠️ No mappings found for this academic year');\n }\n this.loading.set(false);\n },\n error: (error: any) => {\n console.error('❌ Error loading academic year mappings:', error);\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Populate form with academic year data\n */\n private populateFormWithAcademicYearData(data: any): void {\n if (data) {\n this.academicYearForm.patchValue({\n acayr_code: data.acayr_code || '',\n acayr_name: data.acayr_name || '',\n acayr_description: data.acayr_description || '',\n acayr_from_date: data.acayr_from_date ? new Date(data.acayr_from_date).toISOString().split('T')[0] : '',\n acayr_to_date: data.acayr_to_date ? new Date(data.acayr_to_date).toISOString().split('T')[0] : '',\n acayr_isactive: data.acayr_isactive ?? true,\n acayr_iscurrent: data.acayr_iscurrent ?? false,\n acayr_islocked: data.acayr_islocked ?? false\n });\n }\n }\n\n /**\n * Populate form with mappings data\n */\n private populateFormWithMappingsData(mappings: any[]): void {\n if (mappings && Array.isArray(mappings)) {\n // Store original mappings for deletion tracking\n this.originalMappings.set([...mappings]);\n \n // Clear existing mappings\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n \n // Add existing mappings\n mappings.forEach((mapping: any) => {\n const mappingGroup = this.fb.group({\n _id: [mapping._id || ''],\n acayrmp_academic_year_id_acayr: [mapping.acayrmp_academic_year_id_acayr || this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: [mapping.acayrmp_entity_id_syen || '', [Validators.required]],\n acayrmp_islocked: [mapping.acayrmp_islocked ?? false],\n acayrmp_iscurrent: [mapping.acayrmp_iscurrent ?? false]\n });\n this.academicYearMappingsArray.push(mappingGroup);\n });\n }\n }\n\n /**\n * Tab configuration\n */\n academicYearTabs() {\n return [\n { id: 'basic', label: 'Academic Year Details', icon: 'school' },\n { id: 'mapping', label: 'Mapping Configuration', icon: 'link' }\n ];\n }\n\n onTabChange(tab: TabItem) {\n this.activeTab.set(tab.id);\n }\n\n\n\n\n\n onSubmit() {\n // Clear any previous errors\n this.error.set(null);\n \n if (this.academicYearForm.valid && this.validateMappings()) {\n this.loading.set(true);\n\n const formData = this.academicYearForm.value;\n\n // Prepare payload with mappings\n const payload: MAcademicYearInsertUpdatePayload = {\n ...formData,\n _id: this.isEditMode() ? this.academicYearId() : undefined,\n acayr_academic_year_mappings: this.getAcademicYearMappingsValue()\n };\n\n console.log('📤 Submitting academic year with mappings:', payload);\n\n // First delete removed mappings, then save/update academic year\n this.deleteRemovedMappings().pipe(\n switchMap(() => {\n // After deleting removed mappings, save/update the academic year\n return this.academicYearService.saveUpdateAcademicYearWithMappings(payload);\n })\n ).subscribe({\n next: (response) => {\n if (response?.success) {\n console.log('✅ Academic year and mappings saved successfully:', response.data);\n \n // Check if there were any mapping errors\n if ((response as any).mappingErrors && (response as any).mappingErrors.length > 0) {\n console.warn('⚠️ Some mappings failed:', (response as any).mappingErrors);\n this.error.set('Academic year saved but some mappings failed. Please check the mappings.');\n } else {\n this.goBackToAcademicYearList();\n }\n } else {\n console.error('❌ Failed to save academic year');\n this.error.set(response?.message || 'Failed to save academic year');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error saving academic year:', error);\n this.error.set('Error saving academic year');\n this.loading.set(false);\n }\n });\n } else {\n console.warn('Form is invalid');\n this.markFormGroupTouched();\n }\n }\n\n /**\n * Mark all form controls as touched to trigger validation display\n */\n private markFormGroupTouched(): void {\n Object.keys(this.academicYearForm.controls).forEach(key => {\n const control = this.academicYearForm.get(key);\n control?.markAsTouched();\n });\n }\n\n resetForm() {\n this.academicYearForm.reset({\n acayr_isactive: true,\n acayr_iscurrent: false,\n acayr_islocked: false\n });\n \n // Clear the mappings array\n while (this.academicYearMappingsArray.length !== 0) {\n this.academicYearMappingsArray.removeAt(0);\n }\n\n // Reset academic year ID\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n \n // Reset entity options to show all entities again\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Go back to academic year list\n */\n goBackToAcademicYearList(): void {\n this.router.navigate(['/control-panel/academic-year']);\n }\n\n /**\n * Cancel form and optionally navigate back\n */\n cancelForm(): void {\n if (this.isEditMode()) {\n this.goBackToAcademicYearList();\n } else {\n this.resetForm();\n }\n }\n\n /**\n * Get page title based on mode\n */\n getPageTitle(): string {\n return this.isEditMode() ? 'Edit Academic Year' : 'Create New Academic Year';\n }\n\n /**\n * Getter methods for form arrays\n */\n get academicYearMappingsArray(): FormArray {\n return this.academicYearForm.get('acayr_academic_year_mappings') as FormArray;\n }\n\n /**\n * Add new academic year mapping\n */\n addAcademicYearMapping(): void {\n // Check if there are any available entities to map\n const availableEntities = this.getAvailableEntityCount(this.academicYearMappingsArray.length);\n if (availableEntities === 0) {\n console.warn('No available entities to map');\n return;\n }\n\n // Generate a temporary ID for new mappings\n const tempId = 'temp_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);\n \n const academicYearMapping = this.fb.group({\n _id: [tempId],\n acayrmp_academic_year_id_acayr: [this.academicYearId() || '', [Validators.required]],\n acayrmp_entity_id_syen: ['', [Validators.required]],\n acayrmp_islocked: [false],\n acayrmp_iscurrent: [false]\n });\n this.academicYearMappingsArray.push(academicYearMapping);\n }\n\n /**\n * Update academic year ID in all existing mappings when academic year ID changes\n */\n private updateMappingsAcademicYearId(newAcademicYearId: string): void {\n const mappingsArray = this.academicYearMappingsArray;\n mappingsArray.controls.forEach((control: any) => {\n if (control.get('acayrmp_academic_year_id_acayr')) {\n control.get('acayrmp_academic_year_id_acayr').setValue(newAcademicYearId);\n }\n });\n }\n\n /**\n * Get form array value for validation or submission\n */\n getAcademicYearMappingsValue(): any[] {\n return this.academicYearMappingsArray.value;\n }\n\n /**\n * Check if mappings array has any invalid controls\n */\n isMappingsArrayValid(): boolean {\n return this.academicYearMappingsArray.valid;\n }\n\n /**\n * Set academic year ID for all existing mappings\n * This is useful when the academic year ID is generated after creation\n */\n setAcademicYearIdForMappings(academicYearId: string): void {\n this.academicYearId.set(academicYearId);\n this.updateMappingsAcademicYearId(academicYearId);\n }\n\n /**\n * Validate that all mappings have required fields\n */\n validateMappings(): boolean {\n const mappings = this.academicYearMappingsArray.controls;\n \n // Check if there are any mappings\n if (mappings.length === 0) {\n return true; // No mappings is valid\n }\n\n // Validate each mapping\n for (let i = 0; i < mappings.length; i++) {\n const mapping = mappings[i] as any;\n \n // Check required fields\n if (!mapping.get('acayrmp_entity_id_syen')?.value) {\n console.warn(`Mapping ${i + 1} is missing entity selection`);\n this.error.set(`Mapping ${i + 1} requires an entity selection`);\n return false;\n }\n\n // Check for duplicate entity selections\n const currentEntityId = mapping.get('acayrmp_entity_id_syen')?.value;\n const duplicateIndex = this.findDuplicateEntitySelection(currentEntityId, i);\n if (duplicateIndex !== -1) {\n console.warn(`Mapping ${i + 1} has duplicate entity selection with mapping ${duplicateIndex + 1}`);\n this.error.set(`Mapping ${i + 1} has duplicate entity selection with mapping ${duplicateIndex + 1}`);\n return false;\n }\n }\n \n return true;\n }\n\n /**\n * Find duplicate entity selection in mappings\n */\n private findDuplicateEntitySelection(entityId: string, currentIndex: number): number {\n const mappings = this.academicYearMappingsArray.controls;\n \n for (let i = 0; i < mappings.length; i++) {\n if (i !== currentIndex) {\n const mapping = mappings[i] as any;\n if (mapping.get('acayrmp_entity_id_syen')?.value === entityId) {\n return i;\n }\n }\n }\n \n return -1;\n }\n\n /**\n * Remove academic year mapping\n */\n removeAcademicYearMapping(index: number): void {\n this.academicYearMappingsArray.removeAt(index);\n // Update entity options after removal to re-enable previously selected entities\n this.updateEntityOptionsForMappings();\n }\n\n /**\n * Handle entity selection change for a specific mapping\n */\n onMappingEntityChange(event: any, mappingIndex: number): void {\n const selectedEntityId = event?.value || event;\n if (selectedEntityId) {\n console.log(`🏢 Entity selected for mapping ${mappingIndex}:`, selectedEntityId);\n // Trigger change detection to update other mappings' entity options\n this.updateEntityOptionsForMappings();\n }\n }\n\n /**\n * Get filtered entity options excluding already selected entities in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns Entity options excluding already selected entities\n */\n getFilteredEntityOptions(currentMappingIndex: number): any[] {\n const allEntities = this.entityOptions();\n if (!allEntities || allEntities.length === 0) {\n return [];\n }\n\n // Get all currently selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = this.getSelectedEntityIds(currentMappingIndex);\n \n console.log(`🔍 Filtering entities for mapping ${currentMappingIndex}:`, {\n totalEntities: allEntities.length,\n selectedEntityIds,\n availableEntities: allEntities.length - selectedEntityIds.length\n });\n\n // Return only entities that are not already selected in other mappings\n return allEntities.filter((entity: any) => {\n const entityId = entity._id;\n const isAlreadySelected = selectedEntityIds.includes(entityId);\n \n if (isAlreadySelected) {\n console.log(`🚫 Entity \"${entity.syen_name}\" (${entityId}) is already selected in another mapping - excluding from options`);\n }\n \n return !isAlreadySelected;\n });\n }\n\n /**\n * Get all currently selected entity IDs from other mappings\n */\n private getSelectedEntityIds(excludeMappingIndex: number): string[] {\n const mappingsArray = this.academicYearMappingsArray;\n const selectedIds: string[] = [];\n \n mappingsArray.controls.forEach((control: any, index: number) => {\n if (index !== excludeMappingIndex) {\n const entityId = control.get('acayrmp_entity_id_syen')?.value;\n if (entityId) {\n selectedIds.push(entityId);\n }\n }\n });\n \n return selectedIds;\n }\n\n /**\n * Update entity options for all mappings to prevent duplicates\n */\n private updateEntityOptionsForMappings(): void {\n // This method triggers change detection to update the UI\n // The actual filtering is done in getEntityOptionsForMapping method\n console.log('🔄 Updating entity options for all mappings');\n }\n\n /**\n * Check if an entity is disabled for a specific mapping\n */\n isEntityDisabled(entityId: string, mappingIndex: number): boolean {\n const selectedEntityIds = this.getSelectedEntityIds(mappingIndex);\n return selectedEntityIds.includes(entityId);\n }\n\n /**\n * Get the count of available entities for a specific mapping\n */\n getAvailableEntityCount(mappingIndex: number): number {\n const availableEntities = this.getFilteredEntityOptions(mappingIndex);\n return availableEntities.length;\n }\n\n /**\n * Get the count of total entities\n */\n getTotalEntityCount(): number {\n return this.entityOptions().length;\n }\n\n /**\n * Check if all entities are already selected in other mappings\n * @param currentMappingIndex The index of the current mapping being edited\n * @returns True if all entities are already selected\n */\n isAllEntitiesSelected(currentMappingIndex: number): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs from other mappings (excluding current mapping)\n const selectedEntityIds = currentMappings\n .map((mapping: any, index: number) => {\n if (index !== currentMappingIndex && mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Check if all entities are already mapped (for disabling Add Entity Mapping button)\n * @returns True if all entities are already mapped\n */\n isAllEntitiesMapped(): boolean {\n const allEntities = this.entityOptions();\n const currentMappings = this.academicYearMappingsArray.value;\n\n // Get all selected entity IDs\n const selectedEntityIds = currentMappings\n .map((mapping: any) => {\n if (mapping.acayrmp_entity_id_syen) {\n return mapping.acayrmp_entity_id_syen;\n }\n return null;\n })\n .filter((id: string | null) => id !== null && id !== '');\n\n // Check if all entities are selected\n return allEntities.length > 0 && selectedEntityIds.length >= allEntities.length;\n }\n\n /**\n * Cleanup when component is destroyed\n * This ensures that when the component is destroyed (e.g., tab closed),\n * all state is properly reset to prevent old data from persisting\n */\n ngOnDestroy(): void {\n console.log('🧹 AcademicYearCreateComponent: Cleaning up component state');\n\n // Reset all signals to their initial state\n this.activeTab.set('basic');\n this.loading.set(false);\n this.error.set(null);\n this.academicYearId.set('');\n this.isEditMode.set(false);\n this.originalMappings.set([]);\n this.entityOptions.set([]);\n\n // Reset form to initial state\n this.resetForm();\n\n console.log('🧹 AcademicYearCreateComponent: Component state cleaned up');\n }\n\n /**\n * Delete removed academic year mappings\n */\n private deleteRemovedMappings(): Observable<any[]> {\n const originalMappings = this.originalMappings();\n const currentMappings = this.getAcademicYearMappingsValue();\n \n // Find mappings that were removed (exist in original but not in current)\n const removedMappings = originalMappings.filter(originalMapping => {\n return !currentMappings.some(currentMapping => \n currentMapping._id === originalMapping._id && originalMapping._id\n );\n });\n\n console.log('🗑️ Mappings to delete:', removedMappings);\n\n if (removedMappings.length === 0) {\n return of([]);\n }\n\n // Create delete observables for each removed mapping\n const deleteObservables = removedMappings.map(mapping => {\n return this.academicYearService.deleteAcademicYearMapping({ \n acayrmp_id: mapping._id || '' \n }).pipe(\n catchError(error => {\n console.error('❌ Error deleting mapping:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n return forkJoin(deleteObservables);\n }\n}\n","<!-- \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\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-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)=\"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 </form>\n </div>","import { \n Component, \n signal, \n computed, \n viewChild, \n TemplateRef, \n DestroyRef, \n inject, \n OnInit,\n type OnDestroy \n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { forkJoin, of, type Observable } from 'rxjs';\nimport { catchError, switchMap, map } from 'rxjs/operators';\nimport { \n CideEleDataGridComponent, \n CideIconComponent, \n CideEleButtonComponent, \n type GridConfiguration, \n type GridEvent, \n CideEleDropdownComponent, \n type DropdownItem, \n type TemplateContext, \n type DropdownConfig, \n ConfirmationService,\n NotificationService \n } from 'cloud-ide-element';\nimport { \n type AcaAcademicYear, \n generateStringFromObject, \n type MAcademicYear \n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService } from 'cloud-ide-layout';\nimport { CideLytAcademicYearService } from '../../services/academic-year.service';\n\n// Types\ninterface AcademicYear {\n _id?: string;\n acayr_code?: string;\n acayr_name?: string;\n acayr_description?: string;\n acayr_from_date?: string | Date;\n acayr_to_date?: string | Date;\n acayr_isactive?: boolean;\n acayr_iscurrent?: boolean;\n acayr_islocked?: boolean;\n}\n\ninterface AcademicYearMapping {\n _id: string;\n acayrmp_academic_year_id_acayr: string;\n acayrmp_entity_id_syen: string;\n acayrmp_islocked: boolean;\n acayrmp_iscurrent: boolean;\n}\n\ninterface ApiResponse<T> {\n success: boolean;\n code: number;\n data: T;\n total?: number;\n pageIndex?: number;\n pageSize?: number;\n message: string;\n}\n\n@Component({\n selector: 'cide-core-academic-year-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent\n ],\n templateUrl: './academic-year-list.component.html',\n styles: [`\n .academic-year-listing-container {\n @apply tw-w-full tw-h-full;\n }\n \n :host {\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\n }\n `]\n})\nexport class AcademicYearListComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection using inject()\n private readonly destroyRef = inject(DestroyRef);\n private readonly academicYearService = inject(CideLytAcademicYearService);\n private readonly router = inject(Router);\n private readonly appState = inject(AppStateHelperService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly notificationService = inject(NotificationService);\n\n // Modern ViewChild signals for template renderers (Angular 20 approach)\n readonly academicYearDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('academicYearDetailsRendererTemplate');\n readonly dateRangeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('dateRangeRendererTemplate');\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Modern Angular 20+ state management using signals with proper typing\n readonly academicYears = signal<AcademicYear[]>([]);\n readonly loading = signal<boolean>(false);\n readonly error = signal<string | null>(null);\n\n // Server-side pagination state using signals\n readonly currentPage = signal<number>(1);\n readonly pageSize = signal<number>(10);\n readonly totalItems = signal<number>(0);\n readonly totalPages = signal<number>(0);\n\n // Server-side search state using signals\n readonly searchQuery = signal<string>('');\n\n // Server-side sorting state using signals\n readonly sortColumn = signal<string>('acayr_name');\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\n\n // Server-side filtering state using signals\n readonly selectedStatusFilter = signal<string>('');\n\n // Filter options using computed signal for better performance\n readonly statusFilterOptions = computed(() => [\n { value: '', label: 'All Status' },\n { value: 'active', label: 'Active Years' },\n { value: 'inactive', label: 'Inactive Years' },\n { value: 'current', label: 'Current Year' },\n { value: 'locked', label: 'Locked Years' }\n ]);\n\n\n\n // Modern Angular 20+ grid configuration using computed signal with proper typing\n readonly gridConfig = computed<GridConfiguration<AcademicYear>>(() => ({\n id: 'academic-year-list-grid',\n columns: [\n {\n key: 'acayr_code',\n header: 'Academic Year Code',\n type: 'text',\n width: '140px',\n truncate: true,\n align: 'left',\n sortable: true\n },\n {\n key: 'details',\n header: 'Academic Year Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'academicYearDetailsRenderer',\n sortable: true\n },\n {\n key: 'date_range',\n header: 'Date Range',\n type: 'custom',\n width: '200px',\n truncate: false,\n align: 'left',\n renderer: 'dateRangeRenderer',\n sortable: true\n },\n {\n key: 'acayr_isactive',\n header: 'Status',\n type: 'custom',\n width: '140px',\n truncate: false,\n align: 'center',\n renderer: 'statusRenderer'\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: '80px',\n truncate: false,\n align: 'center',\n renderer: 'actionsDropdownRenderer'\n }\n ],\n data: this.academicYears(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: this.pageSize(),\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search by code, name, or description...',\n searchableColumns: ['acayr_code', 'acayr_name', 'acayr_description'],\n debounceMs: 300,\n showClearButton: true\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: this.loading()\n },\n scroll: {\n enabled: true,\n maxHeight: '',\n minHeight: '',\n stickyHeader: true,\n virtualScroll: false,\n rowHeight: 50\n },\n export: {\n enabled: true,\n formats: ['csv', 'excel', 'pdf'],\n filename: 'academic-years',\n includeHeaders: true\n },\n responsive: true,\n striped: false,\n bordered: true,\n compact: false,\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\n }));\n\n ngOnInit(): void {\n console.log('🎓 Academic Year List Component initialized');\n this.loadAcademicYears();\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n /**\n * Load academic years from API\n */\n loadAcademicYears(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MAcademicYear = {\n pageIndex: this.currentPage(),\n pageSize: this.pageSize(),\n query: this.searchQuery() || \"\",\n sort: {\n key: this.sortColumn(),\n order: this.sortDirection()\n }\n };\n\n this.academicYearService.getAcademicYearList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('📚 Academic years loaded:', response.data);\n console.log('📊 Pagination info:', {\n total: response.total,\n pageIndex: response.pageIndex,\n pageSize: response.pageSize\n });\n \n this.academicYears.set(response.data);\n this.totalItems.set(response.total || 0);\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n \n // Show success notification if data was loaded successfully\n if (response.data.length > 0) {\n this.notificationService.success(`Loaded ${response.data.length} academic year(s) successfully.`);\n }\n } else {\n console.warn('⚠️ No academic year data received');\n this.academicYears.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.warning('No academic years found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('❌ Error loading academic years:', error);\n this.error.set('Failed to load academic years. Please try again.');\n this.academicYears.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.error('Failed to load academic years. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n\n\n\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n academicYearDetailsRenderer: this.academicYearDetailsRendererTemplate(),\n dateRangeRenderer: this.dateRangeRendererTemplate(),\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\n\n /**\n * Handle grid events\n */\n onGridEvent(event: GridEvent<any>): void {\n switch (event.type) {\n case 'pageChange':\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\n this.currentPage.set(event.data['pageIndex'] as number);\n this.pageSize.set(event.data['pageSize'] as number);\n this.loadAcademicYears();\n }\n break;\n case 'search':\n if (event.data && typeof event.data === 'string') {\n this.searchQuery.set(event.data);\n this.currentPage.set(1);\n this.loadAcademicYears();\n }\n break;\n case 'refresh':\n this.loadAcademicYears();\n break;\n case 'action':\n // Handle action events if needed\n console.log('Action event:', event);\n break;\n case 'rowClick':\n // Handle row click events if needed\n console.log('Row click event:', event);\n break;\n case 'sort':\n if (event.data && typeof event.data === 'object' && 'column' in event.data && 'direction' in event.data) {\n this.sortColumn.set(event.data['column'] as string);\n this.sortDirection.set(event.data['direction'] as 'asc' | 'desc');\n this.currentPage.set(1); // Reset to first page when sorting\n this.loadAcademicYears();\n }\n break;\n case 'export':\n if (event.data && typeof event.data === 'string') {\n this.handleExport(event.data);\n }\n break;\n default:\n console.log('🔄 Unhandled grid event:', event.type);\n }\n }\n\n // Filter handlers\n onStatusFilterChange(): void {\n console.log('🔍 Status filter changed:', this.selectedStatusFilter());\n this.currentPage.set(1); // Reset to first page when filtering\n this.loadAcademicYears();\n }\n\n clearFilters(): void {\n console.log('🧹 Clearing filters');\n this.selectedStatusFilter.set('');\n this.searchQuery.set('');\n this.currentPage.set(1);\n this.loadAcademicYears();\n }\n\n // Academic Year actions with proper typing\n createAcademicYear(): void {\n console.log('➕ Navigating to create academic year');\n this.notificationService.info('Opening form to create a new academic year.');\n this.router.navigate(['/control-panel/academic_year/create']);\n }\n\n viewAcademicYear(academicYear: AcademicYear): void {\n console.log('👁️ Viewing academic year:', academicYear);\n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for viewing.`);\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\n this.router.navigate(['/control-panel/academic_year/view', queryParams]);\n }\n\n editAcademicYear(academicYear: AcademicYear): void {\n console.log('✏️ Editing academic year:', academicYear);\n \n // Check if the academic year is locked\n if (academicYear.acayr_islocked) {\n this.notificationService.error(`Cannot edit \"${academicYear.acayr_name}\" - This academic year is locked and cannot be modified. Please contact an administrator to unlock it first.`);\n return;\n }\n \n this.notificationService.info(`Opening academic year \"${academicYear.acayr_name}\" for editing.`);\n const queryParams = generateStringFromObject({ acayr_id: academicYear._id });\n this.router.navigate(['/control-panel/academic_year/edit', queryParams]);\n }\n\n\n /**\n * Get dropdown configuration\n */\n getDropdownConfig(): DropdownConfig {\n return {\n triggerIcon: 'more_vert',\n triggerSize: 'sm',\n // menuPosition: 'right' as const,\n // forcePosition: 'bottom' as const,\n // offsetX: 0,\n // offsetY: 1,\n // usePortal: true,\n // showArrow: false\n };\n }\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(academicYear: AcademicYear): DropdownItem[] {\n console.log('🔽 Generating dropdown items for:', academicYear.acayr_name);\n console.log('🔽 Academic year data:', {\n isCurrent: academicYear.acayr_iscurrent,\n isLocked: academicYear.acayr_islocked,\n isActive: academicYear.acayr_isactive\n });\n \n const items: DropdownItem[] = [\n {\n id: 'view',\n label: 'View Details',\n icon: 'visibility',\n iconColor: 'tw-text-gray-400',\n textColor: 'tw-text-gray-700',\n hoverBgColor: 'hover:tw-bg-gray-100'\n },\n {\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-blue-400',\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-blue-600',\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-blue-50'\n },\n {\n id: 'toggle-status',\n label: academicYear.acayr_isactive ? 'Deactivate' : 'Activate',\n icon: academicYear.acayr_isactive ? 'toggle_off' : 'toggle_on',\n iconColor: academicYear?.acayr_islocked ? 'tw-text-gray-300' : 'tw-text-gray-400',\n textColor: academicYear?.acayr_islocked ? 'tw-text-gray-400' : 'tw-text-gray-700',\n hoverBgColor: academicYear?.acayr_islocked ? 'hover:tw-bg-gray-50' : 'hover:tw-bg-gray-100'\n }\n ];\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, academicYear: AcademicYear): void {\n console.log('🖱️ Dropdown item clicked:', item.id, 'for academic year:', academicYear.acayr_name);\n \n // Check if item is disabled\n if (item.disabled) {\n console.log('⚠️ Item is disabled, ignoring click');\n return;\n }\n \n switch (item.id) {\n case 'view':\n this.viewAcademicYear(academicYear);\n break;\n case 'edit':\n this.editAcademicYear(academicYear);\n break;\n case 'toggle-status':\n this.toggleAcademicYearStatus(academicYear);\n break;\n default:\n console.log('❓ Unknown dropdown item clicked:', item.id);\n }\n }\n\n /**\n * Toggle academic year status (active/inactive)\n */\n toggleAcademicYearStatus(academicYear: AcademicYear): void {\n console.log('🔄 Toggling academic year status:', academicYear);\n \n // Check if the academic year is locked\n if (academicYear.acayr_islocked) {\n this.notificationService.error(`Cannot ${academicYear.acayr_isactive ? 'deactivate' : 'activate'} \"${academicYear.acayr_name}\" - This academic year is locked and its status cannot be changed. Please contact an administrator to unlock it first.`);\n return;\n }\n \n const action = academicYear.acayr_isactive ? 'deactivate' : 'activate';\n const actionText = academicYear.acayr_isactive ? 'Deactivate' : 'Activate';\n \n // Show confirmation dialog\n console.log('🔔 Showing confirmation dialog for toggle status');\n this.confirmationService.ask({\n title: `${actionText} Academic Year`,\n message: `Are you sure you want to ${action} the academic year \"${academicYear.acayr_name}\"?${!academicYear.acayr_isactive ? '\\n\\nThis will also deactivate all associated mappings.' : ''}`,\n confirmText: actionText,\n cancelText: 'Cancel',\n type: academicYear.acayr_isactive ? 'warning' : 'info'\n }).then((confirmed: boolean) => {\n console.log('🔔 Confirmation dialog result:', confirmed);\n if (confirmed) {\n this.loading.set(true);\n \n // First toggle the academic year status\n console.log('🔄 Calling toggleAcademicYearStatus with ID:', academicYear._id);\n this.academicYearService.toggleAcademicYearStatus({ acayr_id: academicYear._id }).subscribe({\n next: (response) => {\n console.log('🔄 Toggle academic year status response:', response);\n if (response?.success) {\n console.log('✅ Academic year status toggled successfully');\n \n // If deactivating, also toggle status of all academic year mappings\n if (!academicYear.acayr_isactive) { // If we're deactivating (was active, now inactive)\n this.toggleAcademicYearMappingsStatus(academicYear._id || '', false);\n } else {\n // If activating, just reload the list\n this.notificationService.success(`Academic year \"${academicYear.acayr_name}\" has been activated successfully.`);\n this.loadAcademicYears();\n }\n } else {\n console.error('❌ Failed to toggle academic year status');\n this.notificationService.error(response?.message || 'Failed to toggle academic year status');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('❌ Error toggling academic year status:', error);\n console.error('❌ Error details:', { \n status: error.status, \n message: error.message, \n error: error.error \n });\n this.notificationService.error('Failed to toggle academic year status. Please try again.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Toggle status of all academic year mappings for a specific academic year\n */\n private toggleAcademicYearMappingsStatus(academicYearId: string, isActive: boolean): void {\n console.log(`🔄 Toggling mappings status for academic year ${academicYearId} to ${isActive ? 'active' : 'inactive'}`);\n \n // Get all mappings for this academic year and toggle their status\n // For now, we'll reload the academic year data to get the mappings\n // In a real implementation, you might want to get mappings separately\n this.academicYearService.getAcademicYearById({ acayr_id: academicYearId }).subscribe({\n next: (response) => {\n if (response?.success && response.data && (response.data as any).acayr_academic_year_mappings) {\n const mappings = (response.data as any).acayr_academic_year_mappings;\n console.log('📋 Found mappings to toggle:', mappings);\n \n // Toggle each mapping's status\n const toggleObservables = mappings.map((mapping: any) => {\n return this.academicYearService.toggleAcademicYearMappingStatus({ \n acayrmp_id: mapping._id \n }).pipe(\n catchError(error => {\n console.error('❌ Error toggling mapping status:', error);\n return of({ success: false, error, mappingId: mapping._id });\n })\n );\n });\n\n if (toggleObservables.length > 0) {\n forkJoin(toggleObservables).subscribe(\n (results) => {\n console.log('✅ All mapping statuses toggled:', results);\n const resultsArray = results as any[];\n const failedCount = resultsArray.filter((result: any) => !result.success).length;\n if (failedCount === 0) {\n this.notificationService.success(`Academic year and all ${resultsArray.length} associated mappings have been deactivated successfully.`);\n } else {\n this.notificationService.warning(`Academic year deactivated, but ${failedCount} out of ${resultsArray.length} mappings failed to update.`);\n }\n this.loadAcademicYears(); // Reload the list\n },\n (error) => {\n console.error('❌ Error toggling mapping statuses:', error);\n this.notificationService.error('Academic year deactivated, but failed to update some mappings.');\n this.loadAcademicYears(); // Still reload the list\n }\n );\n } else {\n this.notificationService.success('Academic year has been deactivated successfully.');\n this.loadAcademicYears(); // No mappings to toggle, just reload\n }\n } else {\n this.notificationService.success('Academic year has been deactivated successfully.');\n this.loadAcademicYears(); // No mappings found, just reload\n }\n },\n error: (error) => {\n console.error('❌ Error getting academic year mappings:', error);\n this.notificationService.error('Academic year deactivated, but failed to update mappings.');\n this.loadAcademicYears(); // Still reload the list\n }\n });\n }\n\n // Export handler\n private handleExport(format: string): void {\n console.log(`📤 Exporting academic years as ${format}`);\n \n const data = this.academicYears().map(item => ({\n 'Academic Year Code': item.acayr_code,\n 'Academic Year Name': item.acayr_name,\n 'Description': item.acayr_description,\n 'From Date': this.formatDate(item?.acayr_from_date || \"\"),\n 'To Date': this.formatDate(item?.acayr_to_date || \"\"),\n 'Duration': this.getDuration(item?.acayr_from_date || \"\", item?.acayr_to_date || \"\"),\n 'Status': this.getStatusText(item),\n 'Is Current': item.acayr_iscurrent ? 'Yes' : 'No',\n 'Is Active': item.acayr_isactive ? 'Yes' : 'No',\n 'Is Locked': item.acayr_islocked ? 'Yes' : 'No'\n }));\n\n // Create filename with timestamp\n const timestamp = new Date().toISOString().split('T')[0];\n const filename = `academic-years-${timestamp}`;\n\n switch (format.toLowerCase()) {\n case 'csv':\n this.exportToCSV(data, filename);\n break;\n case 'excel':\n this.exportToExcel(data, filename);\n break;\n case 'pdf':\n this.exportToPDF(data, filename);\n break;\n default:\n console.warn(`Unsupported export format: ${format}`);\n }\n }\n\n private exportToCSV(data: any[], filename: string): void {\n const headers = Object.keys(data[0] || {});\n const csvContent = [\n headers.join(','),\n ...data.map(row => headers.map(header => `\"${row[header] || ''}\"`).join(','))\n ].join('\\n');\n\n this.downloadFile(csvContent, `${filename}.csv`, 'text/csv');\n }\n\n private exportToExcel(data: any[], filename: string): void {\n // For Excel export, you might want to use a library like xlsx\n // For now, we'll export as CSV with .xlsx extension\n this.exportToCSV(data, filename);\n }\n\n private exportToPDF(data: any[], filename: string): void {\n // For PDF export, you might want to use a library like jsPDF\n // For now, we'll export as CSV\n this.exportToCSV(data, filename);\n }\n\n private downloadFile(content: string, filename: string, mimeType: string): void {\n const blob = new Blob([content], { type: mimeType });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n }\n\n // Utility methods with proper typing\n formatDate(date: string | Date | null | undefined): string {\n if (!date) return '-';\n return new Date(date).toLocaleDateString('en-US', {\n year: 'numeric',\n month: 'short',\n day: 'numeric'\n });\n }\n\n getDuration(fromDate: string | Date | null | undefined, toDate: string | Date | null | undefined): string {\n if (!fromDate || !toDate) return '';\n \n const from = new Date(fromDate);\n const to = new Date(toDate);\n const diffTime = Math.abs(to.getTime() - from.getTime());\n const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24));\n const months = Math.floor(diffDays / 30);\n const years = Math.floor(months / 12);\n \n if (years > 0) {\n return `${years} year${years > 1 ? 's' : ''}`;\n } else if (months > 0) {\n return `${months} month${months > 1 ? 's' : ''}`;\n } else {\n return `${diffDays} day${diffDays > 1 ? 's' : ''}`;\n }\n }\n\n getStatusBadgeClass(academicYear: AcademicYear): string {\n if (academicYear.acayr_iscurrent) return 'tw-bg-green-100 tw-text-green-800';\n if (academicYear.acayr_islocked) return 'tw-bg-red-100 tw-text-red-800';\n if (academicYear.acayr_isactive) return 'tw-bg-blue-100 tw-text-blue-800';\n return 'tw-bg-gray-100 tw-text-gray-800';\n }\n\n getActiveStatusBadgeClass(academicYear: AcademicYear): string {\n if (academicYear.acayr_isactive) {\n return 'tw-bg-green-100 tw-text-green-800';\n } else {\n return 'tw-bg-orange-100 tw-text-orange-800';\n }\n }\n\n getStatusText(academicYear: AcademicYear): string {\n if (academicYear.acayr_iscurrent) return 'Current';\n if (academicYear.acayr_islocked) return 'Locked';\n if (academicYear.acayr_isactive) return 'Active';\n return 'Inactive';\n }\n}\n","<!-- 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 <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createAcademicYear()\">\n Create Academic Year\n </button>\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 [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>","// Academic Year Management Components\nexport * from './components/academic-year-create/academic-year-create.component';\nexport * from './components/academic-year-list/academic-year-list.component';\n\n// Academic Year Management Services\nexport * from './services/academic-year.service';\nexport * from './services/academic-year-mapping.service';\n","/*\r\n * Public API Surface of cloud-ide-academics\r\n */\r\nexport * from './lib/cloud-ide-academics.routes';\r\nexport * from './lib/collection/academic-year-management';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-academics.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/index.d.ts CHANGED
@@ -4,7 +4,7 @@ import { OnInit, OnDestroy, TemplateRef } from '@angular/core';
4
4
  import { FormGroup, FormArray } from '@angular/forms';
5
5
  import { TabItem, TemplateContext, GridConfiguration, GridEvent, DropdownConfig, DropdownItem } from 'cloud-ide-element';
6
6
  import { Observable } from 'rxjs';
7
- import { MAcademicYear, academicYearControllerResponse, MAcademicYearGetByIdPayload, academicYearByIdControllerResponse, MAcademicYearInsertUpdatePayload, academicYearInsertUpdateControllerResponse, MAcademicYearDeletePayload, academicYearDeleteControllerResponse, MAcademicYearToggleStatusPayload, academicYearToggleStatusControllerResponse, academicYearMappingInsertUpdateControllerResponse, MAcademicYearMapping, academicYearMappingControllerResponse, MAcademicYearMappingGetByIdPayload, academicYearMappingByIdControllerResponse, MAcademicYearMappingInsertUpdatePayload, MAcademicYearMappingDeletePayload, academicYearMappingDeleteControllerResponse, MAcademicYearMappingToggleStatusPayload, academicYearMappingToggleStatusControllerResponse } from 'cloud-ide-lms-model';
7
+ import { MAcademicYear, academicYearControllerResponse, MAcademicYearGetByIdPayload, academicYearByIdControllerResponse, MAcademicYearInsertUpdatePayload, academicYearInsertUpdateControllerResponse, MAcademicYearDeletePayload, academicYearDeleteControllerResponse, MAcademicYearToggleStatusPayload, academicYearToggleStatusControllerResponse, academicYearMappingInsertUpdateControllerResponse, MAcademicYearMapping, academicYearMappingControllerResponse, MAcademicYearMappingGetByIdPayload, academicYearMappingByIdControllerResponse, MAcademicYearMappingInsertUpdatePayload, MAcademicYearMappingDeletePayload, academicYearMappingDeleteControllerResponse, MAcademicYearMappingToggleStatusPayload, academicYearMappingToggleStatusControllerResponse, AcaClassPrgBranchResponse, AcaClassPrgBranchListPayload, classPrgBranchControllerResponse, AcaClassPrgBranchGetByIdPayload, classPrgBranchByIdControllerResponse, AcaClassPrgBranchInsertUpdatePayload, classPrgBranchInsertUpdateControllerResponse, AcaClassPrgBranchDeletePayload, classPrgBranchDeleteControllerResponse, AcaClassPrgBranchToggleStatusPayload, classPrgBranchToggleStatusControllerResponse, AcaClassPrgBranchToggleLockPayload, classPrgBranchToggleLockControllerResponse } from 'cloud-ide-lms-model';
8
8
 
9
9
  declare const academicsRoutes: Route[];
10
10
 
@@ -374,4 +374,241 @@ declare class CideLytAcademicYearMappingService {
374
374
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideLytAcademicYearMappingService>;
375
375
  }
376
376
 
377
- export { AcademicYearCreateComponent, AcademicYearListComponent, CideLytAcademicYearMappingService, CideLytAcademicYearService, academicsRoutes };
377
+ interface ClassProgramBranch {
378
+ _id?: string;
379
+ acabrn_class_program_id_acacpm?: any;
380
+ acabrn_name?: string;
381
+ acabrn_code?: string;
382
+ acabrn_sequence?: number;
383
+ acabrn_isactive?: boolean;
384
+ acabrn_islocked?: boolean;
385
+ }
386
+ declare class CideLytClassProgramBranchListComponent implements OnInit {
387
+ private destroyRef;
388
+ private router;
389
+ private route;
390
+ private appState;
391
+ private notificationService;
392
+ private confirmationService;
393
+ private classProgramBranchService;
394
+ loading: _angular_core.WritableSignal<boolean>;
395
+ error: _angular_core.WritableSignal<string | null>;
396
+ branches: _angular_core.WritableSignal<ClassProgramBranch[]>;
397
+ totalCount: _angular_core.WritableSignal<number>;
398
+ programId: _angular_core.WritableSignal<string | null>;
399
+ dragHandleRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>> | undefined>;
400
+ classProgramRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>> | undefined>;
401
+ actionsDropdownRendererTemplate: _angular_core.Signal<TemplateRef<TemplateContext<Record<string, unknown>>> | undefined>;
402
+ gridConfig: _angular_core.WritableSignal<GridConfiguration<ClassProgramBranch>>;
403
+ templateRenderers: _angular_core.Signal<Record<string, TemplateRef<TemplateContext<Record<string, unknown>>>>>;
404
+ ngOnInit(): void;
405
+ /**
406
+ * Check route parameters for program ID
407
+ */
408
+ private checkRouteParams;
409
+ /**
410
+ * Load branches from API
411
+ */
412
+ private loadBranches;
413
+ /**
414
+ * Update grid data
415
+ */
416
+ private updateGridData;
417
+ /**
418
+ * Handle grid events
419
+ */
420
+ onGridEvent(event: GridEvent<ClassProgramBranch>): void;
421
+ /**
422
+ * Handle refresh
423
+ */
424
+ onRefresh(): void;
425
+ /**
426
+ * Handle page change
427
+ */
428
+ onPageChange(event: any): void;
429
+ /**
430
+ * Handle search
431
+ */
432
+ onSearch(event: any): void;
433
+ /**
434
+ * Handle row reorder (drag and drop)
435
+ */
436
+ onRowReorder(event: any): void;
437
+ /**
438
+ * Update sequence order for branches
439
+ */
440
+ private updateSequenceOrder;
441
+ /**
442
+ * Navigate to create branch
443
+ */
444
+ onCreateBranch(): void;
445
+ /**
446
+ * Navigate to view branch
447
+ */
448
+ onViewBranch(branch: ClassProgramBranch): void;
449
+ /**
450
+ * Navigate to edit branch
451
+ */
452
+ onEditBranch(branch: ClassProgramBranch): void;
453
+ /**
454
+ * Navigate to manage term for branch
455
+ */
456
+ onManageTerm(branch: ClassProgramBranch): void;
457
+ /**
458
+ * Get dropdown items for branch actions
459
+ */
460
+ getBranchActionDropdownItems(branch: AcaClassPrgBranchResponse): DropdownItem[];
461
+ /**
462
+ * Handle dropdown item click
463
+ */
464
+ onDropdownItemClick(item: DropdownItem, branch: ClassProgramBranch): void;
465
+ /**
466
+ * Toggle branch status
467
+ */
468
+ private toggleBranchStatus;
469
+ /**
470
+ * Toggle branch lock
471
+ */
472
+ private toggleBranchLock;
473
+ /**
474
+ * Delete branch
475
+ */
476
+ private deleteBranch;
477
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideLytClassProgramBranchListComponent, never>;
478
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CideLytClassProgramBranchListComponent, "cide-academics-class-program-branch-list", never, {}, {}, never, never, true, never>;
479
+ }
480
+
481
+ interface ProgramClass {
482
+ _id?: string;
483
+ acacpm_name?: string;
484
+ acacpm_code?: string;
485
+ acacpm_description?: string;
486
+ }
487
+ declare class CideLytClassProgramBranchFormComponent implements OnInit, OnDestroy {
488
+ private destroyRef;
489
+ private fb;
490
+ private router;
491
+ private route;
492
+ private location;
493
+ private appState;
494
+ private notificationService;
495
+ private confirmationService;
496
+ private classProgramBranchService;
497
+ private programClassService;
498
+ branchForm: FormGroup;
499
+ loading: _angular_core.WritableSignal<boolean>;
500
+ error: _angular_core.WritableSignal<string | null>;
501
+ isEditMode: _angular_core.WritableSignal<boolean>;
502
+ isViewMode: _angular_core.WritableSignal<boolean>;
503
+ branchId: _angular_core.WritableSignal<string | null>;
504
+ programClasses: _angular_core.WritableSignal<ProgramClass[]>;
505
+ constructor();
506
+ ngOnInit(): void;
507
+ ngOnDestroy(): void;
508
+ /**
509
+ * Initialize component
510
+ */
511
+ private initializeComponent;
512
+ /**
513
+ * Check route parameters to determine mode
514
+ */
515
+ private checkRouteParams;
516
+ /**
517
+ * Load master data
518
+ */
519
+ private loadMasterData;
520
+ /**
521
+ * Load program classes
522
+ */
523
+ private loadProgramClasses;
524
+ /**
525
+ * Load branch for viewing
526
+ */
527
+ private loadBranchForView;
528
+ /**
529
+ * Load branch for editing
530
+ */
531
+ private loadBranchForEdit;
532
+ /**
533
+ * Load branch data
534
+ */
535
+ private loadBranchData;
536
+ /**
537
+ * Get form title
538
+ */
539
+ get formTitle(): string;
540
+ /**
541
+ * Get submit button text
542
+ */
543
+ get submitButtonText(): string;
544
+ /**
545
+ * Handle form submission
546
+ */
547
+ onSubmit(): void;
548
+ /**
549
+ * Save branch
550
+ */
551
+ private saveBranch;
552
+ /**
553
+ * Handle cancel
554
+ */
555
+ onCancel(): void;
556
+ /**
557
+ * Reset form to initial state
558
+ */
559
+ resetForm(): void;
560
+ /**
561
+ * Toggle active status on card click
562
+ */
563
+ onActiveCardClick(): void;
564
+ /**
565
+ * Toggle locked status on card click
566
+ */
567
+ onLockedCardClick(): void;
568
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideLytClassProgramBranchFormComponent, never>;
569
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<CideLytClassProgramBranchFormComponent, "cide-academics-class-program-branch-form", never, {}, {}, never, never, true, never>;
570
+ }
571
+
572
+ declare class CideLytClassProgramBranchService {
573
+ private http;
574
+ /**
575
+ * Get list of class program branches
576
+ * @param payload - Query parameters for filtering/pagination
577
+ * @returns Observable of class program branch list response
578
+ */
579
+ getClassProgramBranchList(payload: AcaClassPrgBranchListPayload): Observable<classPrgBranchControllerResponse>;
580
+ /**
581
+ * Get class program branch by ID
582
+ * @param payload - Class program branch ID payload
583
+ * @returns Observable of class program branch data
584
+ */
585
+ getClassProgramBranchById(payload: AcaClassPrgBranchGetByIdPayload): Observable<classPrgBranchByIdControllerResponse>;
586
+ /**
587
+ * Create or update class program branch
588
+ * @param data - Class program branch data to save
589
+ * @returns Observable of the save response
590
+ */
591
+ saveClassProgramBranch(data: AcaClassPrgBranchInsertUpdatePayload): Observable<classPrgBranchInsertUpdateControllerResponse>;
592
+ /**
593
+ * Delete class program branch
594
+ * @param payload - Class program branch delete payload
595
+ * @returns Observable of the delete response
596
+ */
597
+ deleteClassProgramBranch(payload: AcaClassPrgBranchDeletePayload): Observable<classPrgBranchDeleteControllerResponse>;
598
+ /**
599
+ * Toggle class program branch status (active/inactive)
600
+ * @param payload - Class program branch toggle status payload
601
+ * @returns Observable of the toggle status response
602
+ */
603
+ toggleClassProgramBranchStatus(payload: AcaClassPrgBranchToggleStatusPayload): Observable<classPrgBranchToggleStatusControllerResponse>;
604
+ /**
605
+ * Toggle class program branch lock
606
+ * @param payload - Class program branch toggle lock payload
607
+ * @returns Observable of the toggle lock response
608
+ */
609
+ toggleClassProgramBranchLock(payload: AcaClassPrgBranchToggleLockPayload): Observable<classPrgBranchToggleLockControllerResponse>;
610
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<CideLytClassProgramBranchService, never>;
611
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<CideLytClassProgramBranchService>;
612
+ }
613
+
614
+ export { AcademicYearCreateComponent, AcademicYearListComponent, CideLytAcademicYearMappingService, CideLytAcademicYearService, CideLytClassProgramBranchFormComponent, CideLytClassProgramBranchListComponent, CideLytClassProgramBranchService, academicsRoutes };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloud-ide-academics",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^20.1.0",
6
6
  "@angular/core": "^20.1.0"