cloud-ide-academics 0.0.20 → 0.0.21

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.
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
8
8
  import { NotificationService, ConfirmationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent } from 'cloud-ide-element';
9
9
  import { AppStateHelperService } from 'cloud-ide-layout';
10
10
  import { ENTITY_SERVICE_TOKEN } from 'cloud-ide-shared';
11
- import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs';
11
+ import { b as CideLytClassProgramBranchService, C as CideLytProgramClassService } from './cloud-ide-academics-cloud-ide-academics-COFzfbQg.mjs';
12
12
  import { C as CideLytClassProgramTermService } from './cloud-ide-academics-class-program-term.service-BW4PJQEM.mjs';
13
13
  import { generateObjectFromString } from 'cloud-ide-lms-model';
14
14
 
@@ -575,4 +575,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
575
575
  }], ctorParameters: () => [] });
576
576
 
577
577
  export { ClassProgramTermCreateComponent };
578
- //# sourceMappingURL=cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs.map
578
+ //# sourceMappingURL=cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.html"],"sourcesContent":["import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\r\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\r\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\r\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.service';\r\nimport { Observable, forkJoin, of } from 'rxjs';\r\nimport { map, catchError, switchMap } from 'rxjs/operators';\r\nimport { \r\n type AcaClassPrgBranchListPayload,\r\n type AcaClassPrgBranchResponse,\r\n type MClassProgramTermInsertUpdatePayload,\r\n generateObjectFromString\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Interfaces based on the model files\r\ninterface ClassProgramTerm {\r\n _id?: string;\r\n acapt_code?: string;\r\n acapt_name?: string;\r\n acapt_description?: string;\r\n acapt_class_program_id_acacpm?: string;\r\n acapt_class_program_branch_id_acabrn?: string;\r\n acapt_parent_class_prog_term_acapt?: string;\r\n acapt_sequence?: number;\r\n acapt_start_date?: string;\r\n acapt_end_date?: string;\r\n acapt_isactive?: boolean;\r\n acapt_islocked?: boolean;\r\n}\r\n\r\ninterface ProgramClass {\r\n _id?: string;\r\n acacpm_name?: string;\r\n acacpm_code?: string;\r\n acacpm_alise_title?: string;\r\n}\r\n\r\ninterface ClassProgramBranch {\r\n _id?: string;\r\n acabrn_name?: string;\r\n acabrn_code?: string;\r\n acabrn_class_program_id_acacpm?: any;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cide-academics-class-program-term-create',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n CideInputComponent,\r\n CideTextareaComponent,\r\n CideEleButtonComponent,\r\n CideIconComponent,\r\n CideSelectComponent\r\n ],\r\n templateUrl: './class-program-term-create.component.html'\r\n})\r\nexport class ClassProgramTermCreateComponent implements OnInit, OnDestroy {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private fb = inject(FormBuilder);\r\n private entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n private appState = inject(AppStateHelperService);\r\n private notificationService = inject(NotificationService);\r\n private confirmationService = inject(ConfirmationService);\r\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\r\n private programClassService = inject(CideLytProgramClassService);\r\n private classProgramTermService = inject(CideLytClassProgramTermService);\r\n\r\n classProgramTermForm: FormGroup;\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n\r\n // Class program term information from route\r\n classProgramTermId = signal<string>('');\r\n isEditMode = signal(false);\r\n isViewMode = signal(false);\r\n\r\n // Data signals\r\n programClasses = signal<ProgramClass[]>([]);\r\n classProgramBranches = signal<ClassProgramBranch[]>([]);\r\n\r\n // Options for dropdowns\r\n programClassOptions = signal<ProgramClass[]>([]);\r\n branchOptions = signal<ClassProgramBranch[]>([]);\r\n parentTermOptions = signal<ClassProgramTerm[]>([]);\r\n\r\n // Route parameters\r\n acabrnId = signal<string | null>(null);\r\n acacpmId = signal<string | null>(null);\r\n\r\n // Date constraints\r\n endDateMinDate = signal<string>('');\r\n\r\n constructor() {\r\n this.classProgramTermForm = this.fb.group({\r\n // Basic Class Program Term Information\r\n acapt_code: ['', [Validators.required]],\r\n acapt_name: ['', [Validators.required]],\r\n acapt_description: [''],\r\n acapt_class_program_id_acacpm: ['', [Validators.required]],\r\n acapt_class_program_branch_id_acabrn: ['', [Validators.required]],\r\n acapt_parent_class_prog_term_acapt: [''],\r\n acapt_start_date: [''],\r\n acapt_end_date: [''],\r\n acapt_isactive: [true],\r\n acapt_islocked: [false]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeComponent();\r\n this.setupFormSubscriptions();\r\n }\r\n\r\n /**\r\n * Setup form subscriptions for dependent dropdowns\r\n */\r\n private setupFormSubscriptions(): void {\r\n // Watch for program class changes to filter branches\r\n this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(programClassId => {\r\n if (programClassId) {\r\n this.loadBranchesForProgramClass(programClassId);\r\n // Clear branch selection when program class changes\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_branch_id_acabrn: ''\r\n });\r\n } else {\r\n this.branchOptions.set([]);\r\n }\r\n });\r\n\r\n // Watch for branch changes to determine parent term\r\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(branchId => {\r\n if (branchId) {\r\n this.determineParentTerm(branchId);\r\n } else {\r\n // Clear parent term when branch is cleared\r\n this.classProgramTermForm.patchValue({\r\n acapt_parent_class_prog_term_acapt: ''\r\n });\r\n }\r\n });\r\n\r\n // Watch for parent term changes to set date constraints\r\n this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(parentTermId => {\r\n this.loadParentTermDetails(parentTermId);\r\n });\r\n\r\n // Watch for start date changes to set minimum date for end date\r\n this.classProgramTermForm.get('acapt_start_date')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(startDate => {\r\n this.updateEndDateMinDate(startDate);\r\n });\r\n }\r\n\r\n /**\r\n * Initialize component\r\n */\r\n private initializeComponent(): void {\r\n // Check route parameters to determine mode\r\n this.checkRouteParams();\r\n \r\n const url = this.router.url;\r\n const queryParams = this.route.snapshot.queryParams;\r\n \r\n if (url.includes('/view/')) {\r\n this.isViewMode.set(true);\r\n this.loadClassProgramTermForView(queryParams);\r\n } else if (url.includes('/edit/')) {\r\n this.isEditMode.set(true);\r\n this.loadClassProgramTermForEdit(queryParams);\r\n } else {\r\n // Create mode\r\n this.isEditMode.set(false);\r\n this.isViewMode.set(false);\r\n }\r\n\r\n // Load dropdown options\r\n this.loadDropdownOptions();\r\n }\r\n\r\n /**\r\n * Check route parameters for acabrn_id and acacpm_id\r\n */\r\n private checkRouteParams(): void {\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\r\n\r\n if (queryParams) {\r\n // Query parameters passed (following page-controls pattern)\r\n const queryData = generateObjectFromString(queryParams);\r\n console.log('🏢 Class Program Term Create params from route:', queryData);\r\n \r\n if (queryData?.acabrn_id) {\r\n this.acabrnId.set(queryData.acabrn_id as string);\r\n console.log('🏢 Branch ID from route:', queryData.acabrn_id);\r\n }\r\n \r\n if (queryData?.acacpm_id) {\r\n this.acacpmId.set(queryData.acacpm_id as string);\r\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load class program term for viewing\r\n */\r\n private loadClassProgramTermForView(queryParams: any): void {\r\n // Implementation for view mode\r\n this.classProgramTermForm.disable();\r\n }\r\n\r\n /**\r\n * Load class program term for editing\r\n */\r\n private loadClassProgramTermForEdit(queryParams: any): void {\r\n // Implementation for edit mode\r\n }\r\n\r\n /**\r\n * Load dropdown options\r\n */\r\n private loadDropdownOptions(): void {\r\n // Load program classes\r\n this.loadProgramClasses();\r\n \r\n // Load branches\r\n this.loadClassProgramBranches();\r\n }\r\n\r\n /**\r\n * Load program classes\r\n */\r\n private loadProgramClasses(): void {\r\n this.programClassService.getProgramClassList({ pagination: false })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n console.log('✅ Program classes loaded:', response);\r\n if (response?.success && response.data) {\r\n this.programClassOptions.set(response.data as ProgramClass[]);\r\n \r\n // Pre-select program class if provided in route\r\n const acacpmId = this.acacpmId();\r\n if (acacpmId) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_id_acacpm: acacpmId\r\n });\r\n }\r\n } else {\r\n console.warn('⚠️ No program class data received');\r\n this.programClassOptions.set([]);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error loading program classes:', error);\r\n this.programClassOptions.set([]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load class program branches\r\n */\r\n private loadClassProgramBranches(): void {\r\n const acacpmId = this.acacpmId();\r\n if (acacpmId) {\r\n this.loadBranchesForProgramClass(acacpmId);\r\n }\r\n }\r\n\r\n /**\r\n * Load branches for a specific program class\r\n */\r\n private loadBranchesForProgramClass(programClassId: string): void {\r\n const payload: AcaClassPrgBranchListPayload = {\r\n pagination: false,\r\n pageIndex: 0,\r\n pageSize: 100,\r\n acabrn_class_program_id_acacpm: programClassId\r\n };\r\n\r\n this.classProgramBranchService.getClassProgramBranchList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response: any) => {\r\n console.log('✅ Class program branches loaded for program class:', programClassId, response);\r\n if (response?.success && response.data) {\r\n this.branchOptions.set(response.data as ClassProgramBranch[]);\r\n \r\n // Pre-select branch if provided in route and not already set\r\n const acabrnId = this.acabrnId();\r\n const currentBranchId = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\r\n if (acabrnId && !currentBranchId) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_branch_id_acabrn: acabrnId\r\n });\r\n }\r\n } else {\r\n console.warn('⚠️ No branch data received');\r\n this.branchOptions.set([]);\r\n }\r\n },\r\n error: (error: any) => {\r\n console.error('❌ Error loading branches:', error);\r\n this.branchOptions.set([]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Determine parent term based on selected branch\r\n * This method will be called internally when branch is selected\r\n */\r\n private determineParentTerm(branchId: string): void {\r\n // Find the selected branch from the options\r\n const selectedBranch = this.branchOptions().find(branch => branch._id === branchId);\r\n \r\n if (selectedBranch) {\r\n console.log('🏢 Determining parent term for branch:', selectedBranch.acabrn_name);\r\n \r\n // Load existing terms for this branch to find potential parent terms\r\n this.loadParentTermsForBranch(branchId);\r\n }\r\n }\r\n\r\n /**\r\n * Load parent terms for a specific branch\r\n */\r\n private loadParentTermsForBranch(branchId: string): void {\r\n // TODO: Implement API call to get existing terms for the branch\r\n // This will help determine which terms can be parent terms\r\n console.log('🏢 Loading parent terms for branch:', branchId);\r\n \r\n // Example implementation - replace with actual API call\r\n // const payload = {\r\n // acabrn_id: branchId,\r\n // pagination: false\r\n // };\r\n \r\n // this.classProgramTermService.getClassProgramTermList(payload)\r\n // .pipe(takeUntilDestroyed(this.destroyRef))\r\n // .subscribe({\r\n // next: (response) => {\r\n // if (response?.success && response.data) {\r\n // // Filter terms that can be parent terms (e.g., terms without parent)\r\n // const parentTerms = response.data.filter(term => !term.acapt_parent_class_prog_term_acapt);\r\n // this.parentTermOptions.set(parentTerms);\r\n // }\r\n // },\r\n // error: (error) => {\r\n // console.error('❌ Error loading parent terms:', error);\r\n // this.parentTermOptions.set([]);\r\n // }\r\n // });\r\n \r\n // For now, set empty array\r\n this.parentTermOptions.set([]);\r\n }\r\n\r\n /**\r\n * Load parent term details for date validation\r\n * This method will be called when a parent term is selected\r\n */\r\n private loadParentTermDetails(parentTermId: string): void {\r\n if (!parentTermId) {\r\n // Clear date constraints when no parent is selected\r\n this.clearDateConstraints();\r\n return;\r\n }\r\n\r\n // TODO: Implement API call to get parent term details\r\n // For now, we'll use mock data or implement based on your API\r\n console.log('🏢 Loading parent term details for ID:', parentTermId);\r\n \r\n // Example implementation - replace with actual API call\r\n // this.classProgramTermService.getClassProgramTermById({ _id: parentTermId })\r\n // .pipe(takeUntilDestroyed(this.destroyRef))\r\n // .subscribe({\r\n // next: (response) => {\r\n // if (response?.success && response.data) {\r\n // const parentTerm = response.data;\r\n // this.setDateConstraints(parentTerm.acapt_start_date, parentTerm.acapt_end_date);\r\n // }\r\n // },\r\n // error: (error) => {\r\n // console.error('❌ Error loading parent term details:', error);\r\n // }\r\n // });\r\n }\r\n\r\n /**\r\n * Set date constraints based on parent term dates\r\n */\r\n private setDateConstraints(parentStartDate: string, parentEndDate: string): void {\r\n console.log('🏢 Setting date constraints:', { parentStartDate, parentEndDate });\r\n \r\n // Update form validation to ensure child dates are within parent range\r\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\r\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\r\n \r\n if (startDateControl && endDateControl) {\r\n // Add custom validators for date range\r\n startDateControl.setValidators([\r\n this.dateRangeValidator(parentStartDate, parentEndDate, 'start')\r\n ]);\r\n endDateControl.setValidators([\r\n this.dateRangeValidator(parentStartDate, parentEndDate, 'end')\r\n ]);\r\n \r\n // Update validation\r\n startDateControl.updateValueAndValidity();\r\n endDateControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Clear date constraints when no parent is selected\r\n */\r\n private clearDateConstraints(): void {\r\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\r\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\r\n \r\n if (startDateControl && endDateControl) {\r\n // Remove custom validators\r\n startDateControl.clearValidators();\r\n endDateControl.clearValidators();\r\n \r\n // Update validation\r\n startDateControl.updateValueAndValidity();\r\n endDateControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Custom validator for date range constraints\r\n */\r\n private dateRangeValidator(parentStartDate: string, parentEndDate: string, dateType: 'start' | 'end') {\r\n return (control: any) => {\r\n if (!control.value || !parentStartDate || !parentEndDate) {\r\n return null; // No validation if no date or parent dates\r\n }\r\n\r\n const selectedDate = new Date(control.value);\r\n const parentStart = new Date(parentStartDate);\r\n const parentEnd = new Date(parentEndDate);\r\n\r\n if (dateType === 'start') {\r\n // Start date should be >= parent start date and < parent end date\r\n if (selectedDate < parentStart || selectedDate >= parentEnd) {\r\n return { \r\n dateRangeError: { \r\n message: `Start date must be between ${parentStartDate} and ${parentEndDate}` \r\n } \r\n };\r\n }\r\n } else if (dateType === 'end') {\r\n // End date should be > parent start date and <= parent end date\r\n if (selectedDate <= parentStart || selectedDate > parentEnd) {\r\n return { \r\n dateRangeError: { \r\n message: `End date must be between ${parentStartDate} and ${parentEndDate}` \r\n } \r\n };\r\n }\r\n }\r\n\r\n return null; // Valid\r\n };\r\n }\r\n\r\n /**\r\n * Update minimum date for end date based on start date\r\n */\r\n private updateEndDateMinDate(startDate: string): void {\r\n if (startDate) {\r\n // Set the minimum date for end date to be the start date\r\n this.endDateMinDate.set(startDate);\r\n \r\n // If end date is already set and is before the new start date, clear it\r\n const endDate = this.classProgramTermForm.get('acapt_end_date')?.value;\r\n if (endDate && endDate < startDate) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_end_date: ''\r\n });\r\n }\r\n \r\n console.log('🏢 Updated end date minimum date to:', startDate);\r\n } else {\r\n // Clear minimum date constraint if no start date\r\n this.endDateMinDate.set('');\r\n }\r\n }\r\n\r\n\r\n onSubmit() {\r\n if (this.isViewMode()) {\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n return;\r\n }\r\n\r\n if (this.classProgramTermForm.invalid) {\r\n this.notificationService.error('Please fill in all required fields correctly.');\r\n this.markFormGroupTouched();\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const formData = this.classProgramTermForm.value;\r\n console.log('Class Program Term Form Data:', formData);\r\n\r\n // Prepare payload for API call\r\n const payload: MClassProgramTermInsertUpdatePayload = {\r\n acapt_code: formData.acapt_code,\r\n acapt_name: formData.acapt_name,\r\n acapt_class_program_id_acacpm: formData.acapt_class_program_id_acacpm,\r\n acapt_class_prg_branch_acabrn: formData.acapt_class_program_branch_id_acabrn,\r\n acapt_parent_class_prog_term_acapt: formData.acapt_parent_class_prog_term_acapt || null,\r\n acapt_start_date: formData.acapt_start_date,\r\n acapt_end_date: formData.acapt_end_date,\r\n acapt_isactive: formData.acapt_isactive,\r\n acapt_islocked: formData.acapt_islocked\r\n };\r\n\r\n // Add _id for edit mode\r\n if (this.isEditMode() && this.classProgramTermId()) {\r\n payload._id = this.classProgramTermId();\r\n }\r\n\r\n console.log('API Payload:', payload);\r\n\r\n // Make API call\r\n this.classProgramTermService.saveClassProgramTerm(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response: any) => {\r\n console.log('✅ Class program term saved successfully:', response);\r\n \r\n if (response?.success) {\r\n const action = this.isEditMode() ? 'updated' : 'created';\r\n this.notificationService.success(`Class program term has been ${action} successfully.`);\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n } else {\r\n this.error.set(response?.message || 'Failed to save class program term');\r\n this.notificationService.error(response?.message || 'Failed to save class program term');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error: any) => {\r\n console.error('❌ Error saving class program term:', error);\r\n this.error.set('Failed to save class program term');\r\n this.notificationService.error('Failed to save class program term. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all form controls as touched to trigger validation display\r\n */\r\n private markFormGroupTouched(): void {\r\n Object.keys(this.classProgramTermForm.controls).forEach(key => {\r\n const control = this.classProgramTermForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n resetForm() {\r\n this.classProgramTermForm.reset({\r\n acapt_isactive: true,\r\n acapt_islocked: false\r\n });\r\n \r\n // Clear options when form is reset\r\n this.branchOptions.set([]);\r\n this.parentTermOptions.set([]);\r\n \r\n // Clear date constraints\r\n this.clearDateConstraints();\r\n this.endDateMinDate.set('');\r\n }\r\n\r\n /**\r\n * Go back to class program term list\r\n */\r\n goBackToClassProgramTermList(): void {\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n }\r\n\r\n /**\r\n * Cancel form and optionally navigate back\r\n */\r\n cancelForm(): void {\r\n if (this.isEditMode()) {\r\n this.goBackToClassProgramTermList();\r\n } else {\r\n this.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Get page title based on mode\r\n */\r\n getPageTitle(): string {\r\n if (this.isViewMode()) return 'View Class Program Term';\r\n return this.isEditMode() ? 'Edit Class Program Term' : 'Create New Class Program Term';\r\n }\r\n\r\n /**\r\n * Handle Active card click to toggle checkbox\r\n */\r\n onActiveCardClick(): void {\r\n if (this.isViewMode()) {\r\n return; // Don't allow changes in view mode\r\n }\r\n \r\n const currentValue = this.classProgramTermForm.get('acapt_isactive')?.value;\r\n this.classProgramTermForm.patchValue({\r\n acapt_isactive: !currentValue\r\n });\r\n }\r\n\r\n /**\r\n * Handle Locked card click to toggle checkbox\r\n */\r\n onLockedCardClick(): void {\r\n if (this.isViewMode()) {\r\n return; // Don't allow changes in view mode\r\n }\r\n \r\n const currentValue = this.classProgramTermForm.get('acapt_islocked')?.value;\r\n this.classProgramTermForm.patchValue({\r\n acapt_islocked: !currentValue\r\n });\r\n }\r\n\r\n /**\r\n * Cleanup when component is destroyed\r\n */\r\n ngOnDestroy(): void {\r\n console.log('🧹 ClassProgramTermCreateComponent: Cleaning up component state');\r\n\r\n // Reset all signals to their initial state\r\n this.loading.set(false);\r\n this.error.set(null);\r\n this.classProgramTermId.set('');\r\n this.isEditMode.set(false);\r\n this.programClassOptions.set([]);\r\n this.branchOptions.set([]);\r\n this.parentTermOptions.set([]);\r\n\r\n // Reset form to initial state\r\n this.resetForm();\r\n\r\n console.log('🧹 ClassProgramTermCreateComponent: Component state cleaned up');\r\n }\r\n}\r\n","<!-- \r\n CLASS PROGRAM TERM 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]=\"classProgramTermForm\"\r\n [class.tw-opacity-60]=\"loading()\" (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\r\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\">\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-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\r\n {{ getPageTitle() }}\r\n </h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\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\">\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 <!-- Form 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 <!-- Class Program Term 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=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\r\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\r\n placeholder=\"Enter detailed description of the term...\" 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 id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\r\n size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\r\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-blue-700\">\r\n Sequence will be automatically managed through drag-and-drop on the listing page\r\n </span>\r\n </div>\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 <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Program Class *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acacpm_alise_title\" \r\n [options]=\"programClassOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_branch_id_acabrn\" \r\n placeholder=\"Select branch\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acabrn_name\" \r\n [options]=\"branchOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 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 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_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 term</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 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_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 </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() || classProgramTermForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/class-program-term-management/components/class-program-term-create/class-program-term-create.component.html"],"sourcesContent":["import { Component, inject, signal, OnInit, DestroyRef, OnDestroy } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormBuilder, FormGroup, FormArray, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideIconComponent, CideSelectComponent, NotificationService, ConfirmationService } from 'cloud-ide-element';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { ENTITY_SERVICE_TOKEN, type IEntityService } from 'cloud-ide-shared';\r\nimport { CideLytClassProgramBranchService } from '../../../class-program-branch-management/services/class-program-branch.service';\r\nimport { CideLytProgramClassService } from '../../../program-class-management/services/program-class.service';\r\nimport { CideLytClassProgramTermService } from '../../services/class-program-term.service';\r\nimport { Observable, forkJoin, of } from 'rxjs';\r\nimport { map, catchError, switchMap } from 'rxjs/operators';\r\nimport { \r\n type AcaClassPrgBranchListPayload,\r\n type AcaClassPrgBranchResponse,\r\n type MClassProgramTermInsertUpdatePayload,\r\n generateObjectFromString\r\n} from 'cloud-ide-lms-model';\r\n\r\n// Interfaces based on the model files\r\ninterface ClassProgramTerm {\r\n _id?: string;\r\n acapt_code?: string;\r\n acapt_name?: string;\r\n acapt_description?: string;\r\n acapt_class_program_id_acacpm?: string;\r\n acapt_class_program_branch_id_acabrn?: string;\r\n acapt_parent_class_prog_term_acapt?: string;\r\n acapt_sequence?: number;\r\n acapt_start_date?: string;\r\n acapt_end_date?: string;\r\n acapt_isactive?: boolean;\r\n acapt_islocked?: boolean;\r\n}\r\n\r\ninterface ProgramClass {\r\n _id?: string;\r\n acacpm_name?: string;\r\n acacpm_code?: string;\r\n acacpm_alise_title?: string;\r\n}\r\n\r\ninterface ClassProgramBranch {\r\n _id?: string;\r\n acabrn_name?: string;\r\n acabrn_code?: string;\r\n acabrn_class_program_id_acacpm?: any;\r\n}\r\n\r\n\r\n@Component({\r\n selector: 'cide-academics-class-program-term-create',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n CideInputComponent,\r\n CideTextareaComponent,\r\n CideEleButtonComponent,\r\n CideIconComponent,\r\n CideSelectComponent\r\n ],\r\n templateUrl: './class-program-term-create.component.html'\r\n})\r\nexport class ClassProgramTermCreateComponent implements OnInit, OnDestroy {\r\n // Dependency injection\r\n private destroyRef = inject(DestroyRef);\r\n private fb = inject(FormBuilder);\r\n private entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n private appState = inject(AppStateHelperService);\r\n private notificationService = inject(NotificationService);\r\n private confirmationService = inject(ConfirmationService);\r\n private classProgramBranchService = inject(CideLytClassProgramBranchService);\r\n private programClassService = inject(CideLytProgramClassService);\r\n private classProgramTermService = inject(CideLytClassProgramTermService);\r\n\r\n classProgramTermForm: FormGroup;\r\n loading = signal(false);\r\n error = signal<string | null>(null);\r\n\r\n // Class program term information from route\r\n classProgramTermId = signal<string>('');\r\n isEditMode = signal(false);\r\n isViewMode = signal(false);\r\n\r\n // Data signals\r\n programClasses = signal<ProgramClass[]>([]);\r\n classProgramBranches = signal<ClassProgramBranch[]>([]);\r\n\r\n // Options for dropdowns\r\n programClassOptions = signal<ProgramClass[]>([]);\r\n branchOptions = signal<ClassProgramBranch[]>([]);\r\n parentTermOptions = signal<ClassProgramTerm[]>([]);\r\n\r\n // Route parameters\r\n acabrnId = signal<string | null>(null);\r\n acacpmId = signal<string | null>(null);\r\n\r\n // Date constraints\r\n endDateMinDate = signal<string>('');\r\n\r\n constructor() {\r\n this.classProgramTermForm = this.fb.group({\r\n // Basic Class Program Term Information\r\n acapt_code: ['', [Validators.required]],\r\n acapt_name: ['', [Validators.required]],\r\n acapt_description: [''],\r\n acapt_class_program_id_acacpm: ['', [Validators.required]],\r\n acapt_class_program_branch_id_acabrn: ['', [Validators.required]],\r\n acapt_parent_class_prog_term_acapt: [''],\r\n acapt_start_date: [''],\r\n acapt_end_date: [''],\r\n acapt_isactive: [true],\r\n acapt_islocked: [false]\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.initializeComponent();\r\n this.setupFormSubscriptions();\r\n }\r\n\r\n /**\r\n * Setup form subscriptions for dependent dropdowns\r\n */\r\n private setupFormSubscriptions(): void {\r\n // Watch for program class changes to filter branches\r\n this.classProgramTermForm.get('acapt_class_program_id_acacpm')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(programClassId => {\r\n if (programClassId) {\r\n this.loadBranchesForProgramClass(programClassId);\r\n // Clear branch selection when program class changes\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_branch_id_acabrn: ''\r\n });\r\n } else {\r\n this.branchOptions.set([]);\r\n }\r\n });\r\n\r\n // Watch for branch changes to determine parent term\r\n this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(branchId => {\r\n if (branchId) {\r\n this.determineParentTerm(branchId);\r\n } else {\r\n // Clear parent term when branch is cleared\r\n this.classProgramTermForm.patchValue({\r\n acapt_parent_class_prog_term_acapt: ''\r\n });\r\n }\r\n });\r\n\r\n // Watch for parent term changes to set date constraints\r\n this.classProgramTermForm.get('acapt_parent_class_prog_term_acapt')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(parentTermId => {\r\n this.loadParentTermDetails(parentTermId);\r\n });\r\n\r\n // Watch for start date changes to set minimum date for end date\r\n this.classProgramTermForm.get('acapt_start_date')?.valueChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(startDate => {\r\n this.updateEndDateMinDate(startDate);\r\n });\r\n }\r\n\r\n /**\r\n * Initialize component\r\n */\r\n private initializeComponent(): void {\r\n // Check route parameters to determine mode\r\n this.checkRouteParams();\r\n \r\n const url = this.router.url;\r\n const queryParams = this.route.snapshot.queryParams;\r\n \r\n if (url.includes('/view/')) {\r\n this.isViewMode.set(true);\r\n this.loadClassProgramTermForView(queryParams);\r\n } else if (url.includes('/edit/')) {\r\n this.isEditMode.set(true);\r\n this.loadClassProgramTermForEdit(queryParams);\r\n } else {\r\n // Create mode\r\n this.isEditMode.set(false);\r\n this.isViewMode.set(false);\r\n }\r\n\r\n // Load dropdown options\r\n this.loadDropdownOptions();\r\n }\r\n\r\n /**\r\n * Check route parameters for acabrn_id and acacpm_id\r\n */\r\n private checkRouteParams(): void {\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const queryParams = params['query'];\r\n console.log('🏢 Route params:', params, 'queryParams:', queryParams);\r\n\r\n if (queryParams) {\r\n // Query parameters passed (following page-controls pattern)\r\n const queryData = generateObjectFromString(queryParams);\r\n console.log('🏢 Class Program Term Create params from route:', queryData);\r\n \r\n if (queryData?.acabrn_id) {\r\n this.acabrnId.set(queryData.acabrn_id as string);\r\n console.log('🏢 Branch ID from route:', queryData.acabrn_id);\r\n }\r\n \r\n if (queryData?.acacpm_id) {\r\n this.acacpmId.set(queryData.acacpm_id as string);\r\n console.log('🏢 Class Program ID from route:', queryData.acacpm_id);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load class program term for viewing\r\n */\r\n private loadClassProgramTermForView(queryParams: any): void {\r\n // Implementation for view mode\r\n this.classProgramTermForm.disable();\r\n }\r\n\r\n /**\r\n * Load class program term for editing\r\n */\r\n private loadClassProgramTermForEdit(queryParams: any): void {\r\n // Implementation for edit mode\r\n }\r\n\r\n /**\r\n * Load dropdown options\r\n */\r\n private loadDropdownOptions(): void {\r\n // Load program classes\r\n this.loadProgramClasses();\r\n \r\n // Load branches\r\n this.loadClassProgramBranches();\r\n }\r\n\r\n /**\r\n * Load program classes\r\n */\r\n private loadProgramClasses(): void {\r\n this.programClassService.getProgramClassList({ pagination: false })\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n console.log('✅ Program classes loaded:', response);\r\n if (response?.success && response.data) {\r\n this.programClassOptions.set(response.data as ProgramClass[]);\r\n \r\n // Pre-select program class if provided in route\r\n const acacpmId = this.acacpmId();\r\n if (acacpmId) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_id_acacpm: acacpmId\r\n });\r\n }\r\n } else {\r\n console.warn('⚠️ No program class data received');\r\n this.programClassOptions.set([]);\r\n }\r\n },\r\n error: (error) => {\r\n console.error('❌ Error loading program classes:', error);\r\n this.programClassOptions.set([]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Load class program branches\r\n */\r\n private loadClassProgramBranches(): void {\r\n const acacpmId = this.acacpmId();\r\n if (acacpmId) {\r\n this.loadBranchesForProgramClass(acacpmId);\r\n }\r\n }\r\n\r\n /**\r\n * Load branches for a specific program class\r\n */\r\n private loadBranchesForProgramClass(programClassId: string): void {\r\n const payload: AcaClassPrgBranchListPayload = {\r\n pagination: false,\r\n pageIndex: 0,\r\n pageSize: 100,\r\n acabrn_class_program_id_acacpm: programClassId\r\n };\r\n\r\n this.classProgramBranchService.getClassProgramBranchList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response: any) => {\r\n console.log('✅ Class program branches loaded for program class:', programClassId, response);\r\n if (response?.success && response.data) {\r\n this.branchOptions.set(response.data as ClassProgramBranch[]);\r\n \r\n // Pre-select branch if provided in route and not already set\r\n const acabrnId = this.acabrnId();\r\n const currentBranchId = this.classProgramTermForm.get('acapt_class_program_branch_id_acabrn')?.value;\r\n if (acabrnId && !currentBranchId) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_class_program_branch_id_acabrn: acabrnId\r\n });\r\n }\r\n } else {\r\n console.warn('⚠️ No branch data received');\r\n this.branchOptions.set([]);\r\n }\r\n },\r\n error: (error: any) => {\r\n console.error('❌ Error loading branches:', error);\r\n this.branchOptions.set([]);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Determine parent term based on selected branch\r\n * This method will be called internally when branch is selected\r\n */\r\n private determineParentTerm(branchId: string): void {\r\n // Find the selected branch from the options\r\n const selectedBranch = this.branchOptions().find(branch => branch._id === branchId);\r\n \r\n if (selectedBranch) {\r\n console.log('🏢 Determining parent term for branch:', selectedBranch.acabrn_name);\r\n \r\n // Load existing terms for this branch to find potential parent terms\r\n this.loadParentTermsForBranch(branchId);\r\n }\r\n }\r\n\r\n /**\r\n * Load parent terms for a specific branch\r\n */\r\n private loadParentTermsForBranch(branchId: string): void {\r\n // TODO: Implement API call to get existing terms for the branch\r\n // This will help determine which terms can be parent terms\r\n console.log('🏢 Loading parent terms for branch:', branchId);\r\n \r\n // Example implementation - replace with actual API call\r\n // const payload = {\r\n // acabrn_id: branchId,\r\n // pagination: false\r\n // };\r\n \r\n // this.classProgramTermService.getClassProgramTermList(payload)\r\n // .pipe(takeUntilDestroyed(this.destroyRef))\r\n // .subscribe({\r\n // next: (response) => {\r\n // if (response?.success && response.data) {\r\n // // Filter terms that can be parent terms (e.g., terms without parent)\r\n // const parentTerms = response.data.filter(term => !term.acapt_parent_class_prog_term_acapt);\r\n // this.parentTermOptions.set(parentTerms);\r\n // }\r\n // },\r\n // error: (error) => {\r\n // console.error('❌ Error loading parent terms:', error);\r\n // this.parentTermOptions.set([]);\r\n // }\r\n // });\r\n \r\n // For now, set empty array\r\n this.parentTermOptions.set([]);\r\n }\r\n\r\n /**\r\n * Load parent term details for date validation\r\n * This method will be called when a parent term is selected\r\n */\r\n private loadParentTermDetails(parentTermId: string): void {\r\n if (!parentTermId) {\r\n // Clear date constraints when no parent is selected\r\n this.clearDateConstraints();\r\n return;\r\n }\r\n\r\n // TODO: Implement API call to get parent term details\r\n // For now, we'll use mock data or implement based on your API\r\n console.log('🏢 Loading parent term details for ID:', parentTermId);\r\n \r\n // Example implementation - replace with actual API call\r\n // this.classProgramTermService.getClassProgramTermById({ _id: parentTermId })\r\n // .pipe(takeUntilDestroyed(this.destroyRef))\r\n // .subscribe({\r\n // next: (response) => {\r\n // if (response?.success && response.data) {\r\n // const parentTerm = response.data;\r\n // this.setDateConstraints(parentTerm.acapt_start_date, parentTerm.acapt_end_date);\r\n // }\r\n // },\r\n // error: (error) => {\r\n // console.error('❌ Error loading parent term details:', error);\r\n // }\r\n // });\r\n }\r\n\r\n /**\r\n * Set date constraints based on parent term dates\r\n */\r\n private setDateConstraints(parentStartDate: string, parentEndDate: string): void {\r\n console.log('🏢 Setting date constraints:', { parentStartDate, parentEndDate });\r\n \r\n // Update form validation to ensure child dates are within parent range\r\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\r\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\r\n \r\n if (startDateControl && endDateControl) {\r\n // Add custom validators for date range\r\n startDateControl.setValidators([\r\n this.dateRangeValidator(parentStartDate, parentEndDate, 'start')\r\n ]);\r\n endDateControl.setValidators([\r\n this.dateRangeValidator(parentStartDate, parentEndDate, 'end')\r\n ]);\r\n \r\n // Update validation\r\n startDateControl.updateValueAndValidity();\r\n endDateControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Clear date constraints when no parent is selected\r\n */\r\n private clearDateConstraints(): void {\r\n const startDateControl = this.classProgramTermForm.get('acapt_start_date');\r\n const endDateControl = this.classProgramTermForm.get('acapt_end_date');\r\n \r\n if (startDateControl && endDateControl) {\r\n // Remove custom validators\r\n startDateControl.clearValidators();\r\n endDateControl.clearValidators();\r\n \r\n // Update validation\r\n startDateControl.updateValueAndValidity();\r\n endDateControl.updateValueAndValidity();\r\n }\r\n }\r\n\r\n /**\r\n * Custom validator for date range constraints\r\n */\r\n private dateRangeValidator(parentStartDate: string, parentEndDate: string, dateType: 'start' | 'end') {\r\n return (control: any) => {\r\n if (!control.value || !parentStartDate || !parentEndDate) {\r\n return null; // No validation if no date or parent dates\r\n }\r\n\r\n const selectedDate = new Date(control.value);\r\n const parentStart = new Date(parentStartDate);\r\n const parentEnd = new Date(parentEndDate);\r\n\r\n if (dateType === 'start') {\r\n // Start date should be >= parent start date and < parent end date\r\n if (selectedDate < parentStart || selectedDate >= parentEnd) {\r\n return { \r\n dateRangeError: { \r\n message: `Start date must be between ${parentStartDate} and ${parentEndDate}` \r\n } \r\n };\r\n }\r\n } else if (dateType === 'end') {\r\n // End date should be > parent start date and <= parent end date\r\n if (selectedDate <= parentStart || selectedDate > parentEnd) {\r\n return { \r\n dateRangeError: { \r\n message: `End date must be between ${parentStartDate} and ${parentEndDate}` \r\n } \r\n };\r\n }\r\n }\r\n\r\n return null; // Valid\r\n };\r\n }\r\n\r\n /**\r\n * Update minimum date for end date based on start date\r\n */\r\n private updateEndDateMinDate(startDate: string): void {\r\n if (startDate) {\r\n // Set the minimum date for end date to be the start date\r\n this.endDateMinDate.set(startDate);\r\n \r\n // If end date is already set and is before the new start date, clear it\r\n const endDate = this.classProgramTermForm.get('acapt_end_date')?.value;\r\n if (endDate && endDate < startDate) {\r\n this.classProgramTermForm.patchValue({\r\n acapt_end_date: ''\r\n });\r\n }\r\n \r\n console.log('🏢 Updated end date minimum date to:', startDate);\r\n } else {\r\n // Clear minimum date constraint if no start date\r\n this.endDateMinDate.set('');\r\n }\r\n }\r\n\r\n\r\n onSubmit() {\r\n if (this.isViewMode()) {\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n return;\r\n }\r\n\r\n if (this.classProgramTermForm.invalid) {\r\n this.notificationService.error('Please fill in all required fields correctly.');\r\n this.markFormGroupTouched();\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const formData = this.classProgramTermForm.value;\r\n console.log('Class Program Term Form Data:', formData);\r\n\r\n // Prepare payload for API call\r\n const payload: MClassProgramTermInsertUpdatePayload = {\r\n acapt_code: formData.acapt_code,\r\n acapt_name: formData.acapt_name,\r\n acapt_class_program_id_acacpm: formData.acapt_class_program_id_acacpm,\r\n acapt_class_prg_branch_acabrn: formData.acapt_class_program_branch_id_acabrn,\r\n acapt_parent_class_prog_term_acapt: formData.acapt_parent_class_prog_term_acapt || null,\r\n acapt_start_date: formData.acapt_start_date,\r\n acapt_end_date: formData.acapt_end_date,\r\n acapt_isactive: formData.acapt_isactive,\r\n acapt_islocked: formData.acapt_islocked\r\n };\r\n\r\n // Add _id for edit mode\r\n if (this.isEditMode() && this.classProgramTermId()) {\r\n payload._id = this.classProgramTermId();\r\n }\r\n\r\n console.log('API Payload:', payload);\r\n\r\n // Make API call\r\n this.classProgramTermService.saveClassProgramTerm(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response: any) => {\r\n console.log('✅ Class program term saved successfully:', response);\r\n \r\n if (response?.success) {\r\n const action = this.isEditMode() ? 'updated' : 'created';\r\n this.notificationService.success(`Class program term has been ${action} successfully.`);\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n } else {\r\n this.error.set(response?.message || 'Failed to save class program term');\r\n this.notificationService.error(response?.message || 'Failed to save class program term');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error: any) => {\r\n console.error('❌ Error saving class program term:', error);\r\n this.error.set('Failed to save class program term');\r\n this.notificationService.error('Failed to save class program term. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Mark all form controls as touched to trigger validation display\r\n */\r\n private markFormGroupTouched(): void {\r\n Object.keys(this.classProgramTermForm.controls).forEach(key => {\r\n const control = this.classProgramTermForm.get(key);\r\n control?.markAsTouched();\r\n });\r\n }\r\n\r\n resetForm() {\r\n this.classProgramTermForm.reset({\r\n acapt_isactive: true,\r\n acapt_islocked: false\r\n });\r\n \r\n // Clear options when form is reset\r\n this.branchOptions.set([]);\r\n this.parentTermOptions.set([]);\r\n \r\n // Clear date constraints\r\n this.clearDateConstraints();\r\n this.endDateMinDate.set('');\r\n }\r\n\r\n /**\r\n * Go back to class program term list\r\n */\r\n goBackToClassProgramTermList(): void {\r\n this.router.navigate(['/control-panel/program-term-section-management']);\r\n }\r\n\r\n /**\r\n * Cancel form and optionally navigate back\r\n */\r\n cancelForm(): void {\r\n if (this.isEditMode()) {\r\n this.goBackToClassProgramTermList();\r\n } else {\r\n this.resetForm();\r\n }\r\n }\r\n\r\n /**\r\n * Get page title based on mode\r\n */\r\n getPageTitle(): string {\r\n if (this.isViewMode()) return 'View Class Program Term';\r\n return this.isEditMode() ? 'Edit Class Program Term' : 'Create New Class Program Term';\r\n }\r\n\r\n /**\r\n * Handle Active card click to toggle checkbox\r\n */\r\n onActiveCardClick(): void {\r\n if (this.isViewMode()) {\r\n return; // Don't allow changes in view mode\r\n }\r\n \r\n const currentValue = this.classProgramTermForm.get('acapt_isactive')?.value;\r\n this.classProgramTermForm.patchValue({\r\n acapt_isactive: !currentValue\r\n });\r\n }\r\n\r\n /**\r\n * Handle Locked card click to toggle checkbox\r\n */\r\n onLockedCardClick(): void {\r\n if (this.isViewMode()) {\r\n return; // Don't allow changes in view mode\r\n }\r\n \r\n const currentValue = this.classProgramTermForm.get('acapt_islocked')?.value;\r\n this.classProgramTermForm.patchValue({\r\n acapt_islocked: !currentValue\r\n });\r\n }\r\n\r\n /**\r\n * Cleanup when component is destroyed\r\n */\r\n ngOnDestroy(): void {\r\n console.log('🧹 ClassProgramTermCreateComponent: Cleaning up component state');\r\n\r\n // Reset all signals to their initial state\r\n this.loading.set(false);\r\n this.error.set(null);\r\n this.classProgramTermId.set('');\r\n this.isEditMode.set(false);\r\n this.programClassOptions.set([]);\r\n this.branchOptions.set([]);\r\n this.parentTermOptions.set([]);\r\n\r\n // Reset form to initial state\r\n this.resetForm();\r\n\r\n console.log('🧹 ClassProgramTermCreateComponent: Component state cleaned up');\r\n }\r\n}\r\n","<!-- \r\n CLASS PROGRAM TERM 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]=\"classProgramTermForm\"\r\n [class.tw-opacity-60]=\"loading()\" (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\r\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\">\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-orange-600 tw-w-5 tw-h-5\">schedule</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">\r\n {{ getPageTitle() }}\r\n </h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div\r\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\">\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 <!-- Form 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 <!-- Class Program Term 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=\"Term Code *\" formControlName=\"acapt_code\" placeholder=\"e.g., T1, T2, T3\"\r\n size=\"md\" leadingIcon=\"code\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input label=\"Term Name *\" formControlName=\"acapt_name\"\r\n placeholder=\"e.g., First Term, Second Term\" size=\"md\" leadingIcon=\"schedule\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div>\r\n <cide-ele-textarea label=\"Description\" formControlName=\"acapt_description\"\r\n placeholder=\"Enter detailed description of the term...\" 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 id=\"acapt_start_date\" label=\"Start Date\" formControlName=\"acapt_start_date\" type=\"date\"\r\n size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input id=\"acapt_end_date\" label=\"End Date\" formControlName=\"acapt_end_date\" type=\"date\"\r\n [min]=\"endDateMinDate()\" size=\"md\" leadingIcon=\"event\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon name=\"info\" class=\"tw-w-4 tw-h-4 tw-text-blue-500\"></cide-ele-icon>\r\n <span class=\"tw-text-sm tw-text-blue-700\">\r\n Sequence will be automatically managed through drag-and-drop on the listing page\r\n </span>\r\n </div>\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 <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Program Class *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_id_acacpm\" \r\n placeholder=\"Select program class\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acacpm_alise_title\" \r\n [options]=\"programClassOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-space-y-2\">\r\n <label class=\"tw-text-sm tw-font-medium tw-text-gray-700\">Class Program Branch *</label>\r\n <cide-ele-select \r\n formControlName=\"acapt_class_program_branch_id_acabrn\" \r\n placeholder=\"Select branch\"\r\n [disabled]=\"isViewMode()\" \r\n valueKey=\"_id\" \r\n labelKey=\"acabrn_name\" \r\n [options]=\"branchOptions()\">\r\n </cide-ele-select>\r\n </div>\r\n </div>\r\n\r\n\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 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 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onActiveCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_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 term</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 tw-cursor-pointer hover:tw-bg-gray-100 tw-transition-colors tw-duration-200\"\r\n [class.tw-cursor-not-allowed]=\"isViewMode()\"\r\n [class.tw-opacity-60]=\"isViewMode()\"\r\n (click)=\"onLockedCardClick()\">\r\n <cide-ele-input formControlName=\"acapt_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 </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() || classProgramTermForm.invalid\"\r\n [loading]=\"loading()\" leftIcon=\"save\">\r\n {{ isEditMode() ? 'Update Class Program Term' : 'Create Class Program Term' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n"],"names":[],"mappings":"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"}
@@ -59,7 +59,7 @@ const academicsRoutes = [
59
59
  },
60
60
  {
61
61
  path: 'program-class-management',
62
- loadComponent: () => import('./cloud-ide-academics-program-class-list.component-Cbt7ptxQ.mjs').then(c => c.ProgramClassListComponent),
62
+ loadComponent: () => import('./cloud-ide-academics-program-class-list.component-DPUjW-UV.mjs').then(c => c.ProgramClassListComponent),
63
63
  title: 'Program Class Management',
64
64
  canActivate: [authGuard],
65
65
  data: {
@@ -69,7 +69,7 @@ const academicsRoutes = [
69
69
  },
70
70
  {
71
71
  path: 'program-class-management/create',
72
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
72
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-DZGdqzE7.mjs').then(c => c.ProgramClassCreateComponent),
73
73
  title: 'Create Program Class',
74
74
  canActivate: [authGuard],
75
75
  data: {
@@ -79,7 +79,7 @@ const academicsRoutes = [
79
79
  },
80
80
  {
81
81
  path: 'program-class-management/edit/:query',
82
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
82
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-DZGdqzE7.mjs').then(c => c.ProgramClassCreateComponent),
83
83
  title: 'Edit Program Class',
84
84
  canActivate: [authGuard],
85
85
  data: {
@@ -89,7 +89,7 @@ const academicsRoutes = [
89
89
  },
90
90
  {
91
91
  path: 'program-class-management/view/:query',
92
- loadComponent: () => import('./cloud-ide-academics-program-class-create.component-C1FnWsj4.mjs').then(c => c.ProgramClassCreateComponent),
92
+ loadComponent: () => import('./cloud-ide-academics-program-class-create.component-DZGdqzE7.mjs').then(c => c.ProgramClassCreateComponent),
93
93
  title: 'View Program Class',
94
94
  canActivate: [authGuard],
95
95
  data: {
@@ -99,7 +99,7 @@ const academicsRoutes = [
99
99
  },
100
100
  {
101
101
  path: 'program-term-management/create',
102
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
102
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs').then(c => c.ClassProgramTermCreateComponent),
103
103
  title: 'Create Class Program Term',
104
104
  canActivate: [authGuard],
105
105
  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-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
112
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs').then(c => c.ClassProgramTermCreateComponent),
113
113
  title: 'Edit Class Program Term',
114
114
  canActivate: [authGuard],
115
115
  data: {
@@ -119,7 +119,7 @@ const academicsRoutes = [
119
119
  },
120
120
  {
121
121
  path: 'program-term-management/view/:query',
122
- loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component-DiWhmhG_.mjs').then(c => c.ClassProgramTermCreateComponent),
122
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-create.component--_32xUHz.mjs').then(c => c.ClassProgramTermCreateComponent),
123
123
  title: 'View Class Program Term',
124
124
  canActivate: [authGuard],
125
125
  data: {
@@ -127,6 +127,16 @@ const academicsRoutes = [
127
127
  sypg_page_code: "class_program_term_list"
128
128
  }
129
129
  },
130
+ {
131
+ path: 'program-term-management',
132
+ loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs').then(c => c.ClassProgramTermListComponent),
133
+ title: 'Class Program Term Management',
134
+ canActivate: [authGuard],
135
+ data: {
136
+ reuseTab: true,
137
+ sypg_page_code: "class_program_term_list"
138
+ }
139
+ },
130
140
  {
131
141
  path: 'program-term-management/:query',
132
142
  loadComponent: () => import('./cloud-ide-academics-class-program-term-list.component-CaWAHMHN.mjs').then(c => c.ClassProgramTermListComponent),
@@ -2001,12 +2011,11 @@ class CideLytClassProgramBranchListComponent {
2001
2011
  },
2002
2012
  scroll: {
2003
2013
  enabled: true,
2004
- maxHeight: '600px',
2005
- minHeight: '400px',
2006
2014
  stickyHeader: true,
2007
2015
  virtualScroll: false,
2008
2016
  rowHeight: 50
2009
2017
  },
2018
+ fullHeight: true,
2010
2019
  responsive: true,
2011
2020
  striped: true,
2012
2021
  bordered: true,
@@ -2514,7 +2523,7 @@ class CideLytClassProgramBranchListComponent {
2514
2523
  });
2515
2524
  }
2516
2525
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2517
- 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-table tw-w-full tw-h-full\">\n <!-- Filter Section -->\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 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\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\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: [".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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
2526
+ 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\">\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\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\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 [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: [".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.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { 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"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }] });
2518
2527
  }
2519
2528
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideLytClassProgramBranchListComponent, decorators: [{
2520
2529
  type: Component,
@@ -2527,7 +2536,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
2527
2536
  CideEleDropdownComponent,
2528
2537
  CideSelectComponent,
2529
2538
  CideLytSharedWrapperComponent
2530
- ], 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-table tw-w-full tw-h-full\">\n <!-- Filter Section -->\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 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\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\n </cide-ele-select>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Data Grid Section -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-p-0\">\n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n [templateRenderers]=\"templateRenderers()\"\n (gridEvent)=\"onGridEvent($event)\">\n </cide-ele-data-grid>\n </div>\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: [".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"] }]
2539
+ ], 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\">\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\"\n valueKey=\"_id\"\n labelKey=\"acacpm_alise_title\"\n [required]=\"true\">\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 [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: [".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"] }]
2531
2540
  }] });
2532
2541
 
2533
2542
  var classProgramBranchList_component = /*#__PURE__*/Object.freeze({
@@ -3080,4 +3089,4 @@ var classProgramBranchForm_component = /*#__PURE__*/Object.freeze({
3080
3089
  */
3081
3090
 
3082
3091
  export { AcademicYearCreateComponent as A, CideLytProgramClassService as C, CideLytAcademicYearService as a, CideLytClassProgramBranchService as b, academicsRoutes as c, AcademicYearListComponent as d, CideLytAcademicYearMappingService as e, CideLytClassProgramBranchListComponent as f, CideLytClassProgramBranchFormComponent as g };
3083
- //# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-SBTPvNBh.mjs.map
3092
+ //# sourceMappingURL=cloud-ide-academics-cloud-ide-academics-COFzfbQg.mjs.map