cloud-ide-fees 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-ide-fees.mjs","sources":["../../../projects/cloud-ide-fees/src/lib/cloud-ide-fees.ts","../../../projects/cloud-ide-fees/src/lib/cloud-ide-fees.routes.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-structure-management/services/fee-structure.service.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-structure-management/components/fee-structure-list/fee-structure-list.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-structure-management/components/fee-structure-list/fee-structure-list.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-assignment-management/components/fee-assignment-list/fee-assignment-list.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-assignment-management/components/fee-assignment-list/fee-assignment-list.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/services/fee-payment.service.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/components/fee-payment-list/fee-payment-list.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/components/fee-payment-list/fee-payment-list.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/components/fee-payment-process/fee-payment-process.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/components/fee-payment-process/fee-payment-process.component.html","../../../projects/cloud-ide-fees/src/lib/collection/fee-payment-management/components/fee-payment-view/fee-payment-view.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/discount-management/components/discount-rules/discount-rules.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/receipt-template/components/template-designer/template-designer.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/receipt-template/components/template-designer/template-designer.component.html","../../../projects/cloud-ide-fees/src/lib/collection/reports/components/collection-report/collection-report.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/reports/components/collection-report/collection-report.component.html","../../../projects/cloud-ide-fees/src/lib/collection/student-fees/components/my-fee-statement/my-fee-statement.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/student-fees/components/my-fee-statement/my-fee-statement.component.html","../../../projects/cloud-ide-fees/src/lib/collection/student-fees/components/my-online-payment/my-online-payment.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/student-fees/components/my-online-payment/my-online-payment.component.html","../../../projects/cloud-ide-fees/src/public-api.ts","../../../projects/cloud-ide-fees/src/cloud-ide-fees.ts"],"sourcesContent":["import { Component } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'lib-cloud-ide-fees',\r\n imports: [],\r\n template: `\r\n <p>\r\n cloud-ide-fees works!\r\n </p>\r\n `,\r\n styles: ``\r\n})\r\nexport class CloudIdeFees {\r\n\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { authGuard } from 'cloud-ide-auth';\r\n\r\nexport const feesRoutes: Route[] = [\r\n // Fee Structure Management Routes\r\n {\r\n path: 'structure',\r\n loadComponent: () => import('./collection/fee-structure-management/components/fee-structure-list/fee-structure-list.component').then(c => c.FeeStructureListComponent),\r\n title: 'Fee Structure Management',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_structure\" }\r\n },\r\n {\r\n path: 'structure/create',\r\n loadComponent: () => import('./collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component').then(c => c.FeeStructureCreateComponent),\r\n title: 'Create Fee Structure',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_structure\" }\r\n },\r\n {\r\n path: 'structure/edit/:query',\r\n loadComponent: () => import('./collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component').then(c => c.FeeStructureCreateComponent),\r\n title: 'Edit Fee Structure',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_structure\" }\r\n },\r\n {\r\n path: 'structure/view/:query',\r\n loadComponent: () => import('./collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component').then(c => c.FeeStructureCreateComponent),\r\n title: 'View Fee Structure',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_structure\" }\r\n },\r\n // Fee Assignment Routes\r\n {\r\n path: 'assignment',\r\n loadComponent: () => import('./collection/fee-assignment-management/components/fee-assignment-list/fee-assignment-list.component').then(c => c.FeeAssignmentListComponent),\r\n title: 'Fee Assignment Management',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_assignment\" }\r\n },\r\n {\r\n path: 'assignment/create',\r\n loadComponent: () => import('./collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component').then(c => c.FeeAssignmentCreateComponent),\r\n title: 'Assign Fee to Student',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_assignment\" }\r\n },\r\n {\r\n path: 'assignment/edit/:query',\r\n loadComponent: () => import('./collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component').then(c => c.FeeAssignmentCreateComponent),\r\n title: 'Edit Fee Assignment',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_assignment\" }\r\n },\r\n {\r\n path: 'assignment/view/:query',\r\n loadComponent: () => import('./collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component').then(c => c.FeeAssignmentCreateComponent),\r\n title: 'View Fee Assignment',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_assignment\" }\r\n },\r\n // Fee Payment Management Routes\r\n {\r\n path: 'payment',\r\n loadComponent: () => import('./collection/fee-payment-management/components/fee-payment-list/fee-payment-list.component').then(c => c.FeePaymentListComponent),\r\n title: 'Fee Payment Management',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_payment\" }\r\n },\r\n {\r\n path: 'payment/process',\r\n loadComponent: () => import('./collection/fee-payment-management/components/fee-payment-process/fee-payment-process.component').then(c => c.FeePaymentProcessComponent),\r\n title: 'Process Fee Payment',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_payment\" }\r\n },\r\n {\r\n path: 'payment/view/:query',\r\n loadComponent: () => import('./collection/fee-payment-management/components/fee-payment-view/fee-payment-view.component').then(c => c.FeePaymentViewComponent),\r\n title: 'View Fee Payment',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_payment\" }\r\n },\r\n // Discount & Scholarship Management\r\n {\r\n path: 'discounts',\r\n loadComponent: () => import('./collection/discount-management/components/discount-rules/discount-rules.component').then(c => c.DiscountRulesComponent),\r\n title: 'Discount & Scholarship Management',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_discounts\" }\r\n },\r\n // Receipt Template Designer\r\n {\r\n path: 'receipt-template',\r\n loadComponent: () => import('./collection/receipt-template/components/template-designer/template-designer.component').then(c => c.TemplateDesignerComponent),\r\n title: 'Receipt Template Designer',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"receipt_template\" }\r\n },\r\n // Reports\r\n {\r\n path: 'collection',\r\n loadComponent: () => import('./collection/reports/components/collection-report/collection-report.component').then(c => c.CollectionReportComponent),\r\n title: 'Fee Collection Report',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"fee_reports\" }\r\n },\r\n // Student Fees (Integrated into Dashboard)\r\n {\r\n path: 'statement',\r\n loadComponent: () => import('./collection/student-fees/components/my-fee-statement/my-fee-statement.component').then(c => c.MyFeeStatementComponent),\r\n title: 'My Fee Statement',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"my_fee_statement\" }\r\n },\r\n {\r\n path: 'payment',\r\n loadComponent: () => import('./collection/student-fees/components/my-online-payment/my-online-payment.component').then(c => c.MyOnlinePaymentComponent),\r\n title: 'Online Fee Payment',\r\n canActivate: [authGuard],\r\n data: { reuseTab: true, sypg_page_code: \"my_online_payment\" }\r\n }\r\n];\r\n\r\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 feesRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type feeStructureControllerResponse,\r\n type MFeeStructure,\r\n type feeStructureByIdControllerResponse,\r\n type MFeeStructureGetByIdPayload,\r\n type feeStructureInsertUpdateControllerResponse,\r\n type MFeeStructureInsertUpdatePayload,\r\n type feeStructureDeleteControllerResponse,\r\n type MFeeStructureDeletePayload,\r\n type feeStructureToggleStatusControllerResponse,\r\n type MFeeStructureToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideFeeFeeStructureService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of fee structures\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee structure list response\r\n */\r\n getFeeStructureList(payload: MFeeStructure): Observable<feeStructureControllerResponse> {\r\n console.log(\"payload\", payload)\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.structure,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get fee structure by ID\r\n * @param payload - Fee structure ID payload\r\n * @returns Observable of fee structure data\r\n */\r\n getFeeStructureById(payload: MFeeStructureGetByIdPayload): Observable<feeStructureByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.structure,\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 fee structure\r\n * @param data - Fee structure data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeeStructure(data: MFeeStructureInsertUpdatePayload): Observable<feeStructureInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.structure\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete fee structure\r\n * @param payload - Fee structure ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteFeeStructure(payload: MFeeStructureDeletePayload): Observable<feeStructureDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.structure,\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 fee structure status\r\n * @param payload - Fee structure ID payload\r\n * @returns Observable of the toggle response\r\n */\r\n toggleFeeStructureStatus(payload: MFeeStructureToggleStatusPayload): Observable<feeStructureToggleStatusControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.structure,\r\n 'toggle-status'\r\n ]);\r\n\r\n console.log('๐Ÿ”„ Making PATCH request to toggle fee structure status:', { url, payload });\r\n return this.http.patch(url, payload);\r\n }\r\n}\r\n\r\n","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 { \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 FeeStructure, \n generateStringFromObject, \n MFeeStructure \n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideFeeFeeStructureService } from '../../services/fee-structure.service';\n\n// Types\ninterface FeeStructureData {\n _id?: string;\n fees_structure_code?: string;\n fees_structure_name?: string;\n fees_structure_description?: string;\n fees_scope_type?: 'ENTITY' | 'CLASS_PROGRAM' | 'SECTION' | 'STUDENT_CATEGORY';\n fees_scope_id?: string;\n fees_academic_year_id_acayr?: string;\n fees_entity_id_syen?: string;\n fees_is_active?: boolean;\n fees_created_at?: Date;\n fees_updated_at?: Date;\n total_amount?: number;\n version?: number;\n is_template?: 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-fee-structure-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './fee-structure-list.component.html',\n styles: [`\n .fee-structure-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 FeeStructureListComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection using inject()\n private readonly destroyRef = inject(DestroyRef);\n private readonly feeStructureService = inject(CideFeeFeeStructureService);\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 feeStructureDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('feeStructureDetailsRendererTemplate');\n readonly scopeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('scopeRendererTemplate');\n readonly amountRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('amountRendererTemplate');\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Breadcrumb data for shared wrapper\n readonly breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Modern Angular 20+ state management using signals with proper typing\n readonly feeStructures = signal<FeeStructureData[]>([]);\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>('fees_structure_name');\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\n\n // Server-side filtering state using signals\n readonly selectedStatusFilter = signal<string>('');\n readonly selectedAcademicYearFilter = signal<string>('');\n readonly selectedScopeTypeFilter = 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' },\n { value: 'inactive', label: 'Inactive' },\n { value: 'draft', label: 'Draft' }\n ]);\n\n // Modern Angular 20+ grid configuration using computed signal with proper typing\n readonly gridConfig = computed<GridConfiguration<FeeStructureData>>(() => ({\n id: 'fee-structure-list-grid',\n columns: [\n {\n key: 'fees_structure_code',\n header: 'Code',\n type: 'text',\n width: '140px',\n truncate: true,\n align: 'left',\n sortable: true\n },\n {\n key: 'details',\n header: 'Fee Structure Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'feeStructureDetailsRenderer',\n sortable: true\n },\n {\n key: 'scope',\n header: 'Scope',\n type: 'custom',\n width: '200px',\n truncate: false,\n align: 'left',\n renderer: 'scopeRenderer',\n sortable: false\n },\n {\n key: 'total_amount',\n header: 'Total Amount',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'right',\n renderer: 'amountRenderer',\n sortable: true\n },\n {\n key: 'fees_is_active',\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.feeStructures(),\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: ['fees_structure_code', 'fees_structure_name', 'fees_structure_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: 'fee-structures',\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('๐Ÿ’ฐ Fee Structure List Component initialized');\n this.initializeBreadcrumbData();\n this.loadFeeStructures();\n }\n\n private initializeBreadcrumbData(): void {\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n /**\n * Load fee structures from API\n */\n loadFeeStructures(): void {\n this.loading.set(true);\n this.error.set(null);\n\n const payload: MFeeStructure = new MFeeStructure({\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 // Add filters as additional properties (will be sent in query string)\n const filterParams: any = {};\n if (this.selectedStatusFilter()) {\n filterParams.fees_is_active = this.selectedStatusFilter() === 'active';\n }\n if (this.selectedAcademicYearFilter()) {\n filterParams.fees_academic_year_id_acayr = this.selectedAcademicYearFilter();\n }\n if (this.selectedScopeTypeFilter()) {\n filterParams.fees_scope_type = this.selectedScopeTypeFilter();\n }\n \n // Merge filter params into payload\n Object.assign(payload, filterParams);\n\n this.feeStructureService.getFeeStructureList(payload)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n console.log('๐Ÿ’ฐ Fee structures loaded:', response.data);\n console.log('๐Ÿ“Š Pagination info:', {\n total: response.total,\n pageIndex: response.pageIndex,\n pageSize: response.pageSize\n });\n \n this.feeStructures.set(response.data);\n this.totalItems.set(response.total || 0);\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\n \n if (response.data.length > 0) {\n this.notificationService.success(`Loaded ${response.data.length} fee structure(s) successfully.`);\n }\n } else {\n console.warn('โš ๏ธ No fee structure data received');\n this.feeStructures.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.warning('No fee structures found.');\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('โŒ Error loading fee structures:', error);\n this.error.set('Failed to load fee structures. Please try again.');\n this.feeStructures.set([]);\n this.totalItems.set(0);\n this.totalPages.set(0);\n this.notificationService.error('Failed to load fee structures. Please try again.');\n this.loading.set(false);\n }\n });\n }\n\n // Computed template renderers for grid\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n feeStructureDetailsRenderer: this.feeStructureDetailsRendererTemplate(),\n scopeRenderer: this.scopeRendererTemplate(),\n amountRenderer: this.amountRendererTemplate(),\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.loadFeeStructures();\n }\n break;\n case 'search':\n this.searchQuery.set(event.data as string);\n this.currentPage.set(1);\n this.loadFeeStructures();\n break;\n case 'refresh':\n this.loadFeeStructures();\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);\n this.loadFeeStructures();\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);\n this.loadFeeStructures();\n }\n\n clearFilters(): void {\n console.log('๐Ÿงน Clearing filters');\n this.selectedStatusFilter.set('');\n this.selectedAcademicYearFilter.set('');\n this.selectedScopeTypeFilter.set('');\n this.searchQuery.set('');\n this.currentPage.set(1);\n this.loadFeeStructures();\n }\n\n // Fee Structure actions with proper typing\n createFeeStructure(): void {\n console.log('โž• Navigating to create fee structure');\n this.notificationService.info('Opening form to create a new fee structure.');\n this.router.navigate(['/control-panel/structure/create']);\n }\n\n viewFeeStructure(feeStructure: FeeStructureData): void {\n console.log('๐Ÿ‘๏ธ Viewing fee structure:', feeStructure);\n this.notificationService.info(`Opening fee structure \"${feeStructure.fees_structure_name}\" for viewing.`);\n const queryParams = generateStringFromObject({ fees_id: feeStructure._id });\n this.router.navigate(['/control-panel/structure/view', queryParams]);\n }\n\n editFeeStructure(feeStructure: FeeStructureData): void {\n console.log('โœ๏ธ Editing fee structure:', feeStructure);\n this.notificationService.info(`Opening fee structure \"${feeStructure.fees_structure_name}\" for editing.`);\n const queryParams = generateStringFromObject({ fees_id: feeStructure._id });\n this.router.navigate(['/control-panel/structure/edit', queryParams]);\n }\n\n copyFeeStructure(feeStructure: FeeStructureData): void {\n console.log('๐Ÿ“‹ Copying fee structure:', feeStructure);\n this.notificationService.info(`Copying fee structure \"${feeStructure.fees_structure_name}\".`);\n // Navigate to create with copy flag\n const queryParams = generateStringFromObject({ copy_from: feeStructure._id });\n this.router.navigate(['/control-panel/structure/create', queryParams]);\n }\n\n deleteFeeStructure(feeStructure: FeeStructureData): void {\n console.log('๐Ÿ—‘๏ธ Deleting fee structure:', feeStructure);\n \n this.confirmationService.ask({\n title: 'Delete Fee Structure',\n message: `Are you sure you want to delete the fee structure \"${feeStructure.fees_structure_name}\"? This action cannot be undone.`,\n confirmText: 'Delete',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.loading.set(true);\n \n this.feeStructureService.deleteFeeStructure({ fees_id: feeStructure._id }).subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success(`Fee structure \"${feeStructure.fees_structure_name}\" deleted successfully.`);\n this.loadFeeStructures();\n } else {\n this.notificationService.error(response?.message || 'Failed to delete fee structure');\n this.loading.set(false);\n }\n },\n error: (error) => {\n console.error('โŒ Error deleting fee structure:', error);\n this.notificationService.error('Failed to delete fee structure. Please try again.');\n this.loading.set(false);\n }\n });\n }\n });\n }\n\n /**\n * Get dropdown configuration\n */\n getDropdownConfig(): DropdownConfig {\n return {\n triggerIcon: 'more_vert',\n triggerSize: 'sm'\n };\n }\n\n /**\n * Get action dropdown items\n */\n getActionDropdownItems(feeStructure: FeeStructureData): DropdownItem[] {\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: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'copy',\n label: 'Copy',\n icon: 'content_copy',\n iconColor: 'tw-text-green-400',\n textColor: 'tw-text-green-600',\n hoverBgColor: 'hover:tw-bg-green-50'\n },\n {\n id: 'delete',\n label: 'Delete',\n icon: 'delete',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n return items;\n }\n\n /**\n * Handle dropdown item click\n */\n onDropdownItemClick(item: DropdownItem, feeStructure: FeeStructureData): void {\n console.log('๐Ÿ–ฑ๏ธ Dropdown item clicked:', item.id, 'for fee structure:', feeStructure.fees_structure_name);\n \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.viewFeeStructure(feeStructure);\n break;\n case 'edit':\n this.editFeeStructure(feeStructure);\n break;\n case 'copy':\n this.copyFeeStructure(feeStructure);\n break;\n case 'delete':\n this.deleteFeeStructure(feeStructure);\n break;\n default:\n console.log('โ“ Unknown dropdown item clicked:', item.id);\n }\n }\n\n // Export handler\n private handleExport(format: string): void {\n console.log(`๐Ÿ“ค Exporting fee structures as ${format}`);\n \n const data = this.feeStructures().map(item => ({\n 'Code': item.fees_structure_code,\n 'Name': item.fees_structure_name,\n 'Description': item.fees_structure_description,\n 'Scope Type': item.fees_scope_type,\n 'Total Amount': item.total_amount || 0,\n 'Status': item.fees_is_active ? 'Active' : 'Inactive',\n 'Is Template': item.is_template ? 'Yes' : 'No',\n 'Created At': this.formatDate(item.fees_created_at)\n }));\n\n const timestamp = new Date().toISOString().split('T')[0];\n const filename = `fee-structures-${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 this.exportToCSV(data, filename);\n }\n\n private exportToPDF(data: any[], filename: string): void {\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\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 getStatusBadgeClass(feeStructure: FeeStructureData): string {\n if (feeStructure.fees_is_active) {\n return 'tw-bg-green-100 tw-text-green-800';\n }\n return 'tw-bg-gray-100 tw-text-gray-800';\n }\n\n getStatusText(feeStructure: FeeStructureData): string {\n if (feeStructure.fees_is_active) return 'Active';\n return 'Inactive';\n }\n\n formatCurrency(amount: number | undefined): string {\n if (!amount) return 'โ‚น0.00';\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n}\n","<!-- Fee Structure Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_structure' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"createFeeStructure()\">\n Create Fee Structure\n </button>\n </div>\n\n <div class=\"tw-table tw-w-full tw-h-full\">\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</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #feeStructureDetailsRendererTemplate 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.fees_structure_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.fees_structure_description || 'No description' }}</div>\n </div>\n</ng-template>\n\n<ng-template #scopeRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm\">\n <span class=\"tw-text-gray-900 tw-font-medium\">{{ row.fees_scope_type || 'N/A' }}</span>\n @if (row.fees_scope_id) {\n <span class=\"tw-text-gray-500\">ID: {{ row.fees_scope_id }}</span>\n }\n </div>\n</ng-template>\n\n<ng-template #amountRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm tw-items-end\">\n <span class=\"tw-text-gray-900 tw-font-semibold\">{{ formatCurrency(row.total_amount) }}</span>\n @if (row.version) {\n <span class=\"tw-text-xs tw-text-gray-400\">v{{ row.version }}</span>\n }\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 <!-- 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]=\"getStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.fees_is_active ? 'check_circle' : 'cancel' }}\n </cide-ele-icon>\n {{ getStatusText(row) }}\n </span>\n \n <!-- Template Badge -->\n @if (row.is_template) {\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-purple-100 tw-text-purple-800 tw-text-center\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">description</cide-ele-icon>\n Template\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]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n computed\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 { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideEleTabComponent, \n type TabItem, \n CideIconComponent,\n NotificationService,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { CideFeeFeeStructureService } from '../../services/fee-structure.service';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService, ACADEMIC_YEAR_SERVICE_TOKEN, type IAcademicYearService, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IClassProgramMasterService } from 'cloud-ide-shared';\nimport { AppStateService } from 'cloud-ide-layout';\nimport {\n MFeeStructureInsertUpdatePayload,\n type MFeeStructureGetByIdPayload,\n type feeStructureByIdControllerResponse,\n generateObjectFromString,\n generateStringFromObject,\n MAcademicYear,\n MClassProgramMaster,\n classProgramMasterControllerResponse,\n AcaClassProgramMasterResponse,\n academicsRoutesUrl,\n type classPrgBranchControllerResponse,\n AcaClassPrgBranchListPayload,\n type AcaClassPrgBranchResponse,\n type classProgramTermControllerResponse,\n type MClassProgramTerm,\n type AcaClassProgramTermReponse,\n selectSearchType\n} from 'cloud-ide-lms-model';\nimport { HttpClient } from '@angular/common/http';\nimport { cidePath, hostManagerRoutesUrl } from 'cloud-ide-lms-model';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\n\n// Types\ninterface FeeStructureItem {\n feesi_item_code?: string;\n feesi_item_name?: string;\n feesi_category?: 'TUITION' | 'EXAM' | 'LIBRARY' | 'LAB' | 'SPORTS' | 'TRANSPORT' | 'HOSTEL' | 'OTHER';\n feesi_amount?: number;\n feesi_due_date_offset_days?: number;\n feesi_collection_start_offset_days?: number;\n feesi_collection_end_offset_days?: number;\n feesi_is_mandatory?: boolean;\n feesi_is_refundable?: boolean;\n feesi_display_order?: number;\n}\n\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\ninterface AcademicYear {\n _id?: string;\n acayr_name?: string;\n acayr_code?: string;\n acayr_iscurrent?: boolean;\n}\n\ninterface ClassProgramConfiguration {\n semesterType?: boolean;\n branchType?: boolean;\n [key: string]: unknown;\n}\n\ninterface SelectOption {\n value: string | number;\n label: string;\n disabled?: boolean;\n}\n\n@Component({\n selector: 'cide-fee-structure-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideEleTabComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './fee-structure-create.component.html'\n})\nexport class FeeStructureCreateComponent implements OnInit, OnDestroy {\n // Modern Angular 20+ dependency injection\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly feeStructureService = inject(CideFeeFeeStructureService);\n private readonly entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private readonly academicYearService = inject<IAcademicYearService>(ACADEMIC_YEAR_SERVICE_TOKEN);\n private readonly classProgramMasterService = inject<IClassProgramMasterService>(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\n private readonly http = inject(HttpClient);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly appStateService = inject(AppStateService);\n\n // Form and state management\n feeStructureForm!: FormGroup;\n readonly activeTab = signal<string>('basic');\n readonly loading = signal<boolean>(false);\n readonly submitting = signal<boolean>(false);\n\n // Fee structure information from route\n readonly feeStructureId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly isViewMode = signal<boolean>(false);\n\n // Breadcrumb data for shared wrapper\n readonly breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n // Dropdown options\n readonly entityOptions = signal<Entity[]>([]);\n readonly academicYearOptions = signal<AcademicYear[]>([]);\n readonly entityLoading = signal<boolean>(false);\n readonly academicYearLoading = signal<boolean>(false);\n\n // Class Program Master options\n readonly classProgramMasters = signal<AcaClassProgramMasterResponse[]>([]);\n readonly classProgramMastersLoading = signal<boolean>(false);\n readonly classProgramMastersOptions = computed<SelectOption[]>(() => {\n return this.classProgramMasters().map(cp => ({\n value: cp._id || '',\n label: cp.acacpm_alise_title || ''\n }));\n });\n\n // Selected class program configuration\n readonly selectedClassProgram = signal<AcaClassProgramMasterResponse | null>(null);\n\n // Branches for selected program\n readonly classProgramBranches = signal<SelectOption[]>([]);\n readonly classProgramBranchesLoading = signal<boolean>(false);\n\n // Terms for selected program/branch\n readonly classProgramTerms = signal<SelectOption[]>([]);\n readonly classProgramTermsLoading = signal<boolean>(false);\n\n // Computed signals to check if branch should be shown\n readonly showBranchDropdown = computed(() => {\n const program = this.selectedClassProgram();\n if (!program) return false;\n \n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n return config?.branchType === true;\n });\n\n // Computed signals to check if semester/term dropdown should be shown\n readonly showSemesterDropdown = computed(() => {\n const program = this.selectedClassProgram();\n if (!program) return false;\n \n const generalMaster = program.acacpm_class_program_id_sygms || (program as any).acacpm_class_program_id_sygmt;\n if (!generalMaster || typeof generalMaster !== 'object') return false;\n \n let config: ClassProgramConfiguration | undefined;\n if ('sygms_configuration' in generalMaster) {\n const configValue = generalMaster.sygms_configuration;\n if (typeof configValue === 'string') {\n try {\n config = JSON.parse(configValue) as ClassProgramConfiguration;\n } catch {\n return false;\n }\n } else if (typeof configValue === 'object' && configValue !== null) {\n config = configValue as ClassProgramConfiguration;\n }\n }\n \n return config?.semesterType === true;\n });\n\n // Computed signal to check if entity dropdown should be shown\n // Show entity dropdown for both ENTITY and CLASS_PROGRAM scope types\n readonly showEntityDropdown = computed(() => {\n const scopeType = this.feeStructureForm.get('fees_scope_type')?.value;\n return scopeType === 'ENTITY' || scopeType === 'CLASS_PROGRAM';\n });\n\n // Computed signal to check if entity dropdown should be enabled\n // Entity is disabled when scope type is ENTITY (uses active entity)\n // Entity is enabled when scope type is CLASS_PROGRAM (user can select)\n readonly isEntityDropdownEnabled = computed(() => {\n return this.feeStructureForm.get('fees_scope_type')?.value === 'CLASS_PROGRAM';\n });\n\n // Computed signal to check if class program dropdown should be shown\n readonly showClassProgramDropdown = computed(() => {\n return this.feeStructureForm.get('fees_scope_type')?.value === 'CLASS_PROGRAM';\n });\n\n // Fee category options\n readonly feeCategoryOptions = [\n { value: 'TUITION', label: 'Tuition Fee' },\n { value: 'EXAM', label: 'Exam Fee' },\n { value: 'LIBRARY', label: 'Library Fee' },\n { value: 'LAB', label: 'Lab Fee' },\n { value: 'SPORTS', label: 'Sports Fee' },\n { value: 'TRANSPORT', label: 'Transport Fee' },\n { value: 'HOSTEL', label: 'Hostel Fee' },\n { value: 'OTHER', label: 'Other' }\n ];\n\n // Scope type options\n readonly scopeTypeOptions = [\n { value: 'ENTITY', label: 'Entity' },\n { value: 'CLASS_PROGRAM', label: 'Class/Program' },\n { value: 'SECTION', label: 'Section' },\n { value: 'STUDENT_CATEGORY', label: 'Student Category' }\n ];\n\n // Tabs configuration\n feeStructureTabs(): TabItem[] {\n return [\n {\n id: 'basic',\n label: 'Basic Information',\n icon: 'info'\n },\n {\n id: 'items',\n label: 'Fee Items',\n icon: 'list'\n }\n ];\n }\n\n // Computed for fee items form array\n get feeItemsArray(): FormArray {\n return this.feeStructureForm.get('fee_items') as FormArray;\n }\n\n // Computed for total amount\n readonly totalAmount = computed(() => {\n const items = this.feeItemsArray.controls;\n let total = 0;\n items.forEach(control => {\n const amount = control.get('feesi_amount')?.value || 0;\n total += parseFloat(amount) || 0;\n });\n return total;\n });\n\n constructor() {\n this.initializeForm();\n }\n\n private initializeForm(): void {\n this.feeStructureForm = this.fb.group({\n // Basic Information\n fees_structure_code: [''],\n fees_structure_name: [''],\n fees_structure_description: [''],\n fees_scope_type: ['ENTITY'],\n fees_scope_id: [''],\n fees_class_program_id_acacpm: [''], // For CLASS_PROGRAM scope\n fees_class_program_branch_id_acabrn: [''], // For branch selection\n fees_class_program_term_id_acapt: [''], // For term/semester selection\n fees_academic_year_id_acayr: [''],\n fees_entity_id_syen: [''],\n fees_is_active: [true],\n \n // Fee Items\n fee_items: this.fb.array([this.createFeeItemFormGroup()])\n });\n\n // Listen for scope type changes to reset dependent fields\n this.feeStructureForm.get('fees_scope_type')?.valueChanges.subscribe(scopeType => {\n // Reset scope-dependent fields when scope type changes\n this.feeStructureForm.patchValue({\n fees_scope_id: '',\n fees_class_program_id_acacpm: '',\n fees_class_program_branch_id_acabrn: '',\n fees_class_program_term_id_acapt: ''\n });\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.classProgramTerms.set([]);\n\n // Handle entity dropdown visibility and value\n const activeEntity = this.appStateService.activeEntity();\n if (scopeType === 'ENTITY' && activeEntity?._id) {\n this.feeStructureForm.patchValue({\n fees_entity_id_syen: activeEntity._id\n });\n this.feeStructureForm.get('fees_entity_id_syen')?.disable();\n } else if (scopeType === 'CLASS_PROGRAM') {\n // For CLASS_PROGRAM, enable entity dropdown and use selected entity\n this.feeStructureForm.get('fees_entity_id_syen')?.enable();\n // If no entity selected yet, use active entity as default\n const currentEntityId = this.feeStructureForm.get('fees_entity_id_syen')?.value;\n if (!currentEntityId && activeEntity?._id) {\n this.feeStructureForm.patchValue({\n fees_entity_id_syen: activeEntity._id\n });\n }\n // Load class program masters with selected entity\n const academicYearId = this.feeStructureForm.get('fees_academic_year_id_acayr')?.value;\n const selectedEntityId = currentEntityId || activeEntity?._id;\n if (academicYearId && selectedEntityId) {\n this.loadClassProgramMasters(academicYearId, selectedEntityId);\n }\n } else {\n this.feeStructureForm.get('fees_entity_id_syen')?.enable();\n this.feeStructureForm.patchValue({\n fees_entity_id_syen: ''\n });\n }\n });\n\n // Listen for entity selection changes when scope type is CLASS_PROGRAM\n // Reload class programs when entity changes\n this.feeStructureForm.get('fees_entity_id_syen')?.valueChanges.subscribe(entityId => {\n const scopeType = this.feeStructureForm.get('fees_scope_type')?.value;\n if (scopeType === 'CLASS_PROGRAM' && entityId) {\n const academicYearId = this.feeStructureForm.get('fees_academic_year_id_acayr')?.value;\n if (academicYearId) {\n // Clear class program selection when entity changes\n this.feeStructureForm.patchValue({\n fees_class_program_id_acacpm: '',\n fees_class_program_branch_id_acabrn: '',\n fees_class_program_term_id_acapt: ''\n });\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.classProgramTerms.set([]);\n // Reload class programs for the new entity\n this.loadClassProgramMasters(academicYearId, entityId as string);\n }\n }\n });\n\n // Listen for class program selection changes\n this.feeStructureForm.get('fees_class_program_id_acacpm')?.valueChanges.subscribe(classProgramId => {\n this.onClassProgramChange(classProgramId as string);\n });\n\n // Listen for branch selection changes\n this.feeStructureForm.get('fees_class_program_branch_id_acabrn')?.valueChanges.subscribe(branchId => {\n this.onBranchChange(branchId as string);\n });\n }\n\n private createFeeItemFormGroup(): FormGroup {\n return this.fb.group({\n feesi_item_code: [''],\n feesi_item_name: [''],\n feesi_description: [''],\n feesi_category: ['TUITION'],\n feesi_amount: [0],\n feesi_due_date_offset_days: [0],\n feesi_collection_start_offset_days: [0],\n feesi_collection_end_offset_days: [30],\n feesi_is_mandatory: [true],\n feesi_is_refundable: [false],\n feesi_is_installment_allowed: [false],\n feesi_installment_count: [1],\n feesi_tax_applicable: [false],\n feesi_tax_percentage: [0],\n feesi_display_order: [0]\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n /**\n * Initialize component\n */\n private initializeComponent(): void {\n this.updateBreadcrumbData();\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 const queryData = generateObjectFromString(queryParams);\n if (queryData?.fees_id) {\n this.feeStructureId.set(queryData.fees_id as string);\n this.isEditMode.set(true);\n this.loadFeeStructureData(queryData.fees_id as string);\n } else if (queryData?.copy_from) {\n // Copy mode\n this.loadFeeStructureData(queryData.copy_from as string, true);\n }\n } else {\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n\n // Check if view mode\n const path = this.route.snapshot.url.map(segment => segment.path).join('/');\n this.isViewMode.set(path.includes('view'));\n \n if (this.isViewMode()) {\n this.feeStructureForm.disable();\n }\n\n // Update breadcrumb after mode is determined\n this.updateBreadcrumbData();\n }\n\n /**\n * Load dropdown options\n */\n private loadDropdownOptions(): void {\n // Get active entity from app state\n const activeEntity = this.appStateService.activeEntity();\n\n // Load entity options\n this.entityLoading.set(true);\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.entityOptions.set(response.data);\n }\n this.entityLoading.set(false);\n },\n error: () => {\n this.entityLoading.set(false);\n }\n });\n\n // If scope type is ENTITY, set and disable entity control\n if (this.feeStructureForm.get('fees_scope_type')?.value === 'ENTITY' && activeEntity?._id) {\n this.feeStructureForm.patchValue({\n fees_entity_id_syen: activeEntity._id\n });\n this.feeStructureForm.get('fees_entity_id_syen')?.disable();\n }\n\n // Load academic year options and set current one\n this.academicYearLoading.set(true);\n const academicYearPayload: MAcademicYear = {\n pageIndex: 1,\n pageSize: 100,\n pagination: false\n };\n this.academicYearService.getAcademicYearList(academicYearPayload).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.academicYearOptions.set(response.data);\n \n // Find and set current academic year (where acayr_iscurrent is true)\n const currentAcademicYear = response.data.find((ay: AcademicYear) => ay.acayr_iscurrent === true);\n if (currentAcademicYear?._id) {\n this.feeStructureForm.patchValue({\n fees_academic_year_id_acayr: currentAcademicYear._id\n });\n // Disable academic year control\n this.feeStructureForm.get('fees_academic_year_id_acayr')?.disable();\n }\n }\n this.academicYearLoading.set(false);\n },\n error: () => {\n this.academicYearLoading.set(false);\n }\n });\n }\n\n /**\n * Load class program masters\n */\n private loadClassProgramMasters(academicYearId: string, entityId?: string): void {\n this.classProgramMastersLoading.set(true);\n \n const payload: Partial<MClassProgramMaster> = {\n acacpm_academic_year_id_acayr: academicYearId,\n acacpm_entity_id_syen: entityId || this.appStateService.activeEntity()?._id || '',\n acacpm_isactive: true\n };\n\n this.classProgramMasterService.searchClassProgramMasters(payload).subscribe({\n next: (response: classProgramMasterControllerResponse) => {\n if (response?.success && response.data) {\n const dataArray: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramMasters.set(dataArray);\n } else {\n this.classProgramMasters.set([]);\n }\n this.classProgramMastersLoading.set(false);\n },\n error: () => {\n this.classProgramMasters.set([]);\n this.classProgramMastersLoading.set(false);\n }\n });\n }\n\n /**\n * Handle class program selection change\n */\n onClassProgramChange(classProgramId: string | null | undefined): void {\n // Clear previous selections\n this.selectedClassProgram.set(null);\n this.classProgramBranches.set([]);\n this.classProgramTerms.set([]);\n this.feeStructureForm.patchValue({\n fees_class_program_branch_id_acabrn: '',\n fees_class_program_term_id_acapt: ''\n });\n\n if (!classProgramId) {\n return;\n }\n\n // Find the selected program from the list\n const selectedProgram = this.classProgramMasters().find(cp => cp._id === classProgramId);\n if (!selectedProgram) {\n return;\n }\n\n this.selectedClassProgram.set(selectedProgram);\n\n // Load branches if branchType is true\n if (this.showBranchDropdown()) {\n this.loadClassProgramBranches(classProgramId);\n } else {\n // If no branch dropdown, check if we need to load terms directly\n // Terms are typically loaded based on branch, but if no branch is required\n // and semesterType is true, we might need to load terms differently\n // For now, terms will be loaded when branch is selected\n }\n }\n\n /**\n * Load class program branches\n */\n private loadClassProgramBranches(classProgramId: string): void {\n this.classProgramBranchesLoading.set(true);\n \n const payload = new AcaClassPrgBranchListPayload({\n acabrn_class_program_id_acacpm: classProgramId,\n pagination: false\n });\n\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.classProgramBranch,\n query\n ]);\n\n this.http.get<classPrgBranchControllerResponse>(url).subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const branches: AcaClassPrgBranchResponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramBranches.set(branches.map((branch: AcaClassPrgBranchResponse) => ({\n value: branch._id || '',\n label: branch.acabrn_name || branch.acabrn_code || ''\n })));\n } else {\n this.classProgramBranches.set([]);\n }\n this.classProgramBranchesLoading.set(false);\n },\n error: () => {\n this.classProgramBranches.set([]);\n this.classProgramBranchesLoading.set(false);\n }\n });\n }\n\n /**\n * Handle branch selection change - load terms for selected branch\n */\n onBranchChange(branchId: string | null | undefined): void {\n this.classProgramTerms.set([]);\n this.feeStructureForm.patchValue({ fees_class_program_term_id_acapt: '' });\n\n if (!branchId || !this.showSemesterDropdown()) {\n return;\n }\n\n const classProgramId = this.feeStructureForm.get('fees_class_program_id_acacpm')?.value;\n if (classProgramId) {\n this.loadClassProgramTerms(classProgramId, branchId);\n }\n }\n\n /**\n * Load class program terms\n */\n private loadClassProgramTerms(classProgramId: string, branchId: string): void {\n this.classProgramTermsLoading.set(true);\n \n const payload: Partial<MClassProgramTerm> = {\n acapt_class_prg_branch_acabrn: branchId || undefined,\n pagination: false\n } as Partial<MClassProgramTerm>;\n\n const query = generateStringFromObject(payload);\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n academicsRoutesUrl.module,\n academicsRoutesUrl.classProgramTerm,\n query\n ]);\n\n this.http.get<classProgramTermControllerResponse>(url).subscribe({\n next: (response) => {\n if (response?.success && response?.data) {\n const terms: AcaClassProgramTermReponse[] = Array.isArray(response.data) ? response.data : [];\n this.classProgramTerms.set(terms.map((term: AcaClassProgramTermReponse) => ({\n value: term._id || '',\n label: term.acapt_name || term.acapt_code || ''\n })));\n } else {\n this.classProgramTerms.set([]);\n }\n this.classProgramTermsLoading.set(false);\n },\n error: () => {\n this.classProgramTerms.set([]);\n this.classProgramTermsLoading.set(false);\n }\n });\n }\n\n /**\n * Handle class program search\n */\n onClassProgramMasterSearch(event: selectSearchType): void {\n const academicYearId = this.feeStructureForm.get('fees_academic_year_id_acayr')?.value;\n // Use selected entity from form if available, otherwise fall back to active entity\n const selectedEntityId = this.feeStructureForm.get('fees_entity_id_syen')?.value;\n const entityId = selectedEntityId || this.appStateService.activeEntity()?._id;\n \n if (!academicYearId) {\n return;\n }\n\n this.loadClassProgramMasters(academicYearId, entityId);\n }\n\n /**\n * Load fee structure data for edit/view\n */\n private loadFeeStructureData(id: string, isCopy: boolean = false): void {\n this.loading.set(true);\n this.feeStructureService.getFeeStructureById({ fees_id: id }).subscribe({\n next: (response: feeStructureByIdControllerResponse) => {\n if (response?.success && response.data) {\n const data = response.data;\n \n // Patch basic form values\n // Note: Entity and Academic Year are disabled and set from app state, so we don't override them\n this.feeStructureForm.patchValue({\n fees_structure_code: isCopy ? '' : (data.fees_structure_code || ''),\n fees_structure_name: isCopy ? `${data.fees_structure_name} (Copy)` : data.fees_structure_name,\n fees_structure_description: data.fees_structure_description || '',\n fees_scope_type: data.fees_scope_type || 'ENTITY',\n fees_scope_id: data.fees_scope_id || '',\n fees_is_active: data.fees_is_active ?? true\n // fees_academic_year_id_acayr and fees_entity_id_syen are set from app state and disabled\n });\n\n // Load fee items if available\n // Note: This would come from a separate API call to get fee structure items\n // For now, we'll keep the default item\n \n if (!isCopy) {\n this.feeStructureId.set(id);\n }\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading fee structure:', error);\n this.notificationService.error('Failed to load fee structure data.');\n this.loading.set(false);\n }\n });\n }\n\n /**\n * Handle tab change\n */\n onTabChange(tab: TabItem): void {\n this.activeTab.set(tab.id);\n }\n\n /**\n * Add new fee item\n */\n addFeeItem(): void {\n this.feeItemsArray.push(this.createFeeItemFormGroup());\n this.notificationService.info('Fee item added. Please fill in the details.');\n }\n\n /**\n * Remove fee item\n */\n removeFeeItem(index: number): void {\n if (this.feeItemsArray.length > 1) {\n this.confirmationService.ask({\n title: 'Remove Fee Item',\n message: 'Are you sure you want to remove this fee item?',\n confirmText: 'Remove',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.feeItemsArray.removeAt(index);\n this.notificationService.success('Fee item removed.');\n }\n });\n } else {\n this.notificationService.warning('At least one fee item is required.');\n }\n }\n\n /**\n * Move fee item up\n */\n moveItemUp(index: number): void {\n if (index > 0) {\n const items = this.feeItemsArray;\n const item = items.at(index);\n items.removeAt(index);\n items.insert(index - 1, item);\n }\n }\n\n /**\n * Move fee item down\n */\n moveItemDown(index: number): void {\n if (index < this.feeItemsArray.length - 1) {\n const items = this.feeItemsArray;\n const item = items.at(index);\n items.removeAt(index);\n items.insert(index + 1, item);\n }\n }\n\n /**\n * Handle form submission\n */\n onSubmit(): void {\n if (this.submitting()) {\n return;\n }\n\n this.submitting.set(true);\n\n // Get form value, including disabled controls\n const formValue = this.feeStructureForm.getRawValue();\n \n // Determine scope_id based on scope_type\n let scopeId = formValue.fees_scope_id;\n if (formValue.fees_scope_type === 'ENTITY') {\n scopeId = formValue.fees_entity_id_syen;\n } else if (formValue.fees_scope_type === 'CLASS_PROGRAM') {\n scopeId = formValue.fees_class_program_id_acacpm;\n }\n \n const payload: MFeeStructureInsertUpdatePayload = new MFeeStructureInsertUpdatePayload({\n _id: this.isEditMode() ? this.feeStructureId() : undefined,\n fees_structure_code: formValue.fees_structure_code,\n fees_structure_name: formValue.fees_structure_name,\n fees_structure_description: formValue.fees_structure_description,\n fees_scope_type: formValue.fees_scope_type,\n fees_scope_id: scopeId,\n fees_academic_year_id_acayr: formValue.fees_academic_year_id_acayr,\n fees_entity_id_syen: formValue.fees_entity_id_syen,\n fees_is_active: formValue.fees_is_active ?? true\n });\n\n this.feeStructureService.saveUpdateFeeStructure(payload).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n const savedData = response.data;\n const structureCode = savedData.fees_structure_code || 'N/A';\n const structureId = savedData._id || 'N/A';\n \n // Show confirmation dialog with generated structure code and ID\n this.confirmationService.ask({\n title: 'Fee Structure Saved Successfully!',\n message: `Fee structure has been ${this.isEditMode() ? 'updated' : 'created'} successfully.\\n\\nStructure Code: ${structureCode}\\nStructure ID: ${structureId}`,\n confirmText: 'OK',\n cancelText: 'Cancel',\n type: 'success'\n }).then((confirmed: boolean) => {\n if (!confirmed) {\n this.submitting.set(false);\n return;\n }\n // Update form with generated structure code and ID\n if (savedData.fees_structure_code) {\n this.feeStructureForm.patchValue({\n fees_structure_code: savedData.fees_structure_code\n });\n }\n \n // Update fee structure ID and switch to edit mode\n if (savedData._id) {\n this.feeStructureId.set(savedData._id);\n this.isEditMode.set(true);\n this.updateBreadcrumbData();\n }\n \n this.submitting.set(false);\n });\n } else {\n this.notificationService.error(response?.message || 'Failed to save fee structure.');\n this.submitting.set(false);\n }\n },\n error: (error) => {\n console.error('Error saving fee structure:', error);\n this.notificationService.error('Failed to save fee structure. Please try again.');\n this.submitting.set(false);\n }\n });\n }\n\n /**\n * Reset form to initial state\n */\n resetForm(): void {\n if (this.feeStructureForm.dirty) {\n this.confirmationService.ask({\n title: 'Reset Form?',\n message: 'Are you sure you want to reset the form? All unsaved changes will be lost.',\n confirmText: 'Reset',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.feeStructureForm.reset({\n fees_is_active: true\n });\n \n // Clear fee items array\n while (this.feeItemsArray.length !== 0) {\n this.feeItemsArray.removeAt(0);\n }\n \n // Add one default fee item\n this.feeItemsArray.push(this.createFeeItemFormGroup());\n \n // Reset state\n this.feeStructureId.set('');\n this.isEditMode.set(false);\n this.activeTab.set('basic');\n \n this.notificationService.info('Form has been reset.');\n }\n });\n }\n }\n\n /**\n * Cancel and navigate back\n */\n onCancel(): void {\n if (this.feeStructureForm.dirty) {\n this.confirmationService.ask({\n title: 'Discard Changes?',\n message: 'You have unsaved changes. Are you sure you want to leave?',\n confirmText: 'Discard',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.router.navigate(['/control-panel/structure']);\n }\n });\n } else {\n this.router.navigate(['/control-panel/structure']);\n }\n }\n\n /**\n * Get entity options for select\n */\n getEntityOptions(): Array<{ value: string; label: string }> {\n return this.entityOptions().map(entity => ({\n value: entity._id || '',\n label: `${entity.syen_name || ''} (${entity.syen_code || ''})`\n }));\n }\n\n /**\n * Get academic year options for select\n */\n getAcademicYearOptions(): Array<{ value: string; label: string }> {\n return this.academicYearOptions().map(ay => ({\n value: ay._id || '',\n label: `${ay.acayr_name || ''} (${ay.acayr_code || ''})`\n }));\n }\n\n /**\n * Format currency\n */\n formatCurrency(amount: number): string {\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n if (this.isEditMode() || this.isViewMode()) {\n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n }\n } else {\n // Create mode\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n\n this.breadcrumbData.set(additionalItems);\n }\n}\n","<!-- Fee Structure Form -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_structure' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"feeStructureForm\" \n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Tab Navigation -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-2 tw-py-0\">\n <cide-ele-tab [tabs]=\"feeStructureTabs()\" [activeTabId]=\"activeTab()\" size=\"sm\" 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-4 tw-py-4\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n @switch (activeTab()) {\n\n @case ('basic') {\n <!-- Basic Information -->\n <div class=\"tw-space-y-4\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input label=\"Fee Structure Code\" formControlName=\"fees_structure_code\"\n placeholder=\"Auto-generated by API\" size=\"sm\" leadingIcon=\"code\" [disabled]=\"isEditMode()\">\n </cide-ele-input>\n\n <cide-ele-input label=\"Fee Structure Name\" formControlName=\"fees_structure_name\"\n placeholder=\"e.g., Grade 10 Fee Structure 2024-25\" size=\"sm\" leadingIcon=\"account_balance\">\n </cide-ele-input>\n </div>\n\n <div>\n <cide-ele-textarea label=\"Description\" formControlName=\"fees_structure_description\"\n placeholder=\"Enter detailed description of the fee structure...\"\n rows=\"2\" size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Scope Type\" \n formControlName=\"fees_scope_type\"\n [options]=\"scopeTypeOptions\"\n size=\"sm\"\n leadingIcon=\"category\">\n </cide-ele-select>\n\n @if (showEntityDropdown()) {\n <cide-ele-select \n label=\"Entity\" \n formControlName=\"fees_entity_id_syen\"\n [options]=\"getEntityOptions()\"\n [loading]=\"entityLoading()\"\n [disabled]=\"!isEntityDropdownEnabled()\"\n size=\"sm\"\n leadingIcon=\"business\">\n </cide-ele-select>\n }\n\n @if (showClassProgramDropdown()) {\n <cide-ele-select \n label=\"Class/Program\" \n formControlName=\"fees_class_program_id_acacpm\"\n [options]=\"classProgramMastersOptions()\"\n [loading]=\"classProgramMastersLoading()\"\n [searchable]=\"true\"\n (searchChange)=\"onClassProgramMasterSearch($event)\"\n placeholder=\"Search and select class/program\"\n size=\"sm\"\n leadingIcon=\"school\">\n </cide-ele-select>\n }\n\n @if (!showEntityDropdown() && !showClassProgramDropdown()) {\n <cide-ele-input \n label=\"Scope ID\" \n formControlName=\"fees_scope_id\"\n placeholder=\"Enter scope ID if applicable\"\n size=\"sm\"\n leadingIcon=\"tag\">\n </cide-ele-input>\n }\n </div>\n\n @if (showClassProgramDropdown() && showBranchDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Branch\" \n formControlName=\"fees_class_program_branch_id_acabrn\"\n [options]=\"classProgramBranches()\"\n [loading]=\"classProgramBranchesLoading()\"\n placeholder=\"Select branch\"\n size=\"sm\"\n leadingIcon=\"account_tree\">\n </cide-ele-select>\n </div>\n }\n\n @if (showClassProgramDropdown() && showSemesterDropdown()) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Term/Semester\" \n formControlName=\"fees_class_program_term_id_acapt\"\n [options]=\"classProgramTerms()\"\n [loading]=\"classProgramTermsLoading()\"\n placeholder=\"Select term/semester\"\n size=\"sm\"\n leadingIcon=\"calendar_month\">\n </cide-ele-select>\n </div>\n }\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Academic Year\" \n formControlName=\"fees_academic_year_id_acayr\"\n [options]=\"getAcademicYearOptions()\"\n [loading]=\"academicYearLoading()\"\n [disabled]=\"true\"\n size=\"sm\"\n leadingIcon=\"calendar_today\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-3 tw-p-3 tw-bg-gray-50 tw-rounded-lg tw-border tw-border-gray-200\">\n <cide-ele-input formControlName=\"fees_is_active\" type=\"checkbox\" 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\">Active</span>\n <span class=\"tw-text-xs tw-text-gray-500\">Enable/disable this fee structure</span>\n </div>\n </div>\n </div>\n }\n\n @case ('items') {\n <!-- Fee Items Section -->\n <div class=\"tw-space-y-3\">\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <div>\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-m-0\">Fee Items</h6>\n <p class=\"tw-text-xs tw-text-gray-500 tw-m-0\">Configure individual fee items for this structure</p>\n </div>\n <div class=\"tw-flex tw-items-center tw-gap-3\">\n <div class=\"tw-text-right\">\n <div class=\"tw-text-xs tw-text-gray-500\">Total Amount</div>\n <div class=\"tw-text-base tw-font-bold tw-text-green-600\">{{ formatCurrency(totalAmount()) }}</div>\n </div>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" leftIcon=\"add\"\n (click)=\"addFeeItem()\">\n Add Fee Item\n </button>\n </div>\n </div>\n\n <div formArrayName=\"fee_items\" class=\"tw-space-y-2 tw-max-h-[calc(100vh-300px)] tw-overflow-y-auto tw-pr-2\">\n @for (item of feeItemsArray.controls; track $index) {\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm hover:tw-shadow-md tw-transition-shadow tw-p-3\"\n [formGroupName]=\"$index\">\n \n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-2\">\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <div class=\"tw-bg-blue-100 tw-p-1.5 tw-rounded\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">receipt</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-gray-900\">Item #{{ $index + 1 }}</h6>\n </div>\n <div class=\"tw-flex tw-items-center tw-gap-1\">\n @if ($index > 0) {\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" \n (click)=\"moveItemUp($index)\" title=\"Move Up\">\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_upward</cide-ele-icon>\n </button>\n }\n @if ($index < feeItemsArray.length - 1) {\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" \n (click)=\"moveItemDown($index)\" title=\"Move Down\">\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">arrow_downward</cide-ele-icon>\n </button>\n }\n <button cideEleButton type=\"button\" variant=\"danger\" size=\"xs\" leftIcon=\"delete\"\n (click)=\"removeFeeItem($index)\"\n [disabled]=\"feeItemsArray.length === 1\">\n Remove\n </button>\n </div>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-2\">\n <cide-ele-input \n label=\"Item Code\" \n formControlName=\"feesi_item_code\"\n placeholder=\"Auto-generated or enter code\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input \n label=\"Item Name\" \n formControlName=\"feesi_item_name\"\n placeholder=\"e.g., Tuition Fee - Term 1\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-mt-2\">\n <cide-ele-textarea \n label=\"Description\" \n formControlName=\"feesi_description\"\n placeholder=\"Enter item description...\"\n rows=\"1\" \n size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-2 tw-mt-2\">\n <cide-ele-select \n label=\"Category\" \n formControlName=\"feesi_category\"\n [options]=\"feeCategoryOptions\"\n size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input \n label=\"Amount\" \n formControlName=\"feesi_amount\"\n type=\"number\"\n placeholder=\"0.00\"\n size=\"sm\"\n leadingIcon=\"currency_rupee\">\n </cide-ele-input>\n\n <cide-ele-input \n label=\"Due Date Offset (Days)\" \n formControlName=\"feesi_due_date_offset_days\"\n type=\"number\"\n placeholder=\"0\"\n size=\"sm\"\n title=\"Days from assignment date\">\n </cide-ele-input>\n </div>\n\n <!-- Collection Window -->\n <div class=\"tw-mt-2 tw-p-2 tw-bg-blue-50 tw-rounded tw-border tw-border-blue-200\">\n <div class=\"tw-flex tw-items-center tw-gap-1.5 tw-mb-2\">\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-4 tw-h-4\">schedule</cide-ele-icon>\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-blue-900 tw-m-0\">Collection Window</h6>\n </div>\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-2\">\n <cide-ele-input \n label=\"Collection Start Offset (Days)\" \n formControlName=\"feesi_collection_start_offset_days\"\n type=\"number\"\n placeholder=\"0\"\n size=\"sm\"\n title=\"Days before due date when collection can start\">\n </cide-ele-input>\n\n <cide-ele-input \n label=\"Collection End Offset (Days)\" \n formControlName=\"feesi_collection_end_offset_days\"\n type=\"number\"\n placeholder=\"30\"\n size=\"sm\"\n title=\"Days after due date when collection window ends\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Additional Options -->\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-3 tw-gap-2 tw-mt-2\">\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-2 tw-bg-gray-50 tw-rounded\">\n <cide-ele-input formControlName=\"feesi_is_mandatory\" type=\"checkbox\" size=\"sm\">\n </cide-ele-input>\n <span class=\"tw-text-xs tw-text-gray-700\">Mandatory</span>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-2 tw-bg-gray-50 tw-rounded\">\n <cide-ele-input formControlName=\"feesi_is_refundable\" type=\"checkbox\" size=\"sm\">\n </cide-ele-input>\n <span class=\"tw-text-xs tw-text-gray-700\">Refundable</span>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-2 tw-bg-gray-50 tw-rounded\">\n <cide-ele-input formControlName=\"feesi_is_installment_allowed\" type=\"checkbox\" size=\"sm\">\n </cide-ele-input>\n <span class=\"tw-text-xs tw-text-gray-700\">Installment Allowed</span>\n </div>\n </div>\n\n @if (item.get('feesi_is_installment_allowed')?.value) {\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-2 tw-mt-2\">\n <cide-ele-input \n label=\"Installment Count\" \n formControlName=\"feesi_installment_count\"\n type=\"number\"\n placeholder=\"1\"\n size=\"sm\">\n </cide-ele-input>\n\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-2 tw-bg-gray-50 tw-rounded\">\n <cide-ele-input formControlName=\"feesi_tax_applicable\" type=\"checkbox\" size=\"sm\">\n </cide-ele-input>\n <span class=\"tw-text-xs tw-text-gray-700\">Tax Applicable</span>\n </div>\n </div>\n }\n\n @if (item.get('feesi_tax_applicable')?.value) {\n <div class=\"tw-mt-2\">\n <cide-ele-input \n label=\"Tax Percentage\" \n formControlName=\"feesi_tax_percentage\"\n type=\"number\"\n placeholder=\"0\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n }\n </div>\n }\n </div>\n\n @if (feeItemsArray.length === 0) {\n <div class=\"tw-text-center tw-py-8 tw-text-gray-500\">\n <div class=\"tw-bg-white tw-p-3 tw-rounded-full tw-w-12 tw-h-12 tw-mx-auto tw-mb-3 tw-flex tw-items-center tw-justify-center\">\n <cide-ele-icon class=\"tw-w-6 tw-h-6 tw-text-gray-400\">receipt</cide-ele-icon>\n </div>\n <h6 class=\"tw-text-sm tw-font-medium tw-text-gray-600 tw-mb-1\">No Fee Items Yet</h6>\n <p class=\"tw-text-xs tw-text-gray-500\">Click \"Add Fee Item\" to start adding fee items to this structure.</p>\n </div>\n }\n </div>\n }\n }\n \n <!-- Form Validation Errors -->\n @if (!isViewMode()) {\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-3 tw-mt-6\">\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\" \n [disabled]=\"submitting() || loading()\" \n [loading]=\"submitting()\" \n leftIcon=\"save\">\n {{ isEditMode() ? 'Update Fee Structure' : 'Create Fee Structure' }}\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>\n\n","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 { \n CideEleDataGridComponent, \n CideIconComponent, \n CideEleButtonComponent, \n CideSelectComponent,\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 generateStringFromObject\n} from 'cloud-ide-lms-model';\nimport { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { ACADEMIC_YEAR_SERVICE_TOKEN, type IAcademicYearService, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IClassProgramMasterService } from 'cloud-ide-shared';\n\n// Types\ninterface FeeAssignmentData {\n _id?: string;\n feeas_student_id?: string;\n student_name?: string;\n student_id?: string;\n class?: string;\n section?: string;\n fee_structure_name?: string;\n feeas_amount_original?: number;\n feeas_amount_paid?: number;\n feeas_amount_remaining?: number;\n feeas_due_date?: Date;\n feeas_status?: 'PENDING' | 'PARTIALLY_PAID' | 'PAID' | 'WAIVED' | 'CANCELLED';\n}\n\n@Component({\n selector: 'cide-fee-assignment-list',\n standalone: true,\n imports: [\n CommonModule,\n FormsModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideEleDropdownComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './fee-assignment-list.component.html',\n styles: [`\n .fee-assignment-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 FeeAssignmentListComponent implements OnInit, OnDestroy {\n private readonly destroyRef = inject(DestroyRef);\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 private readonly academicYearService = inject<IAcademicYearService>(ACADEMIC_YEAR_SERVICE_TOKEN);\n private readonly classProgramService = inject<IClassProgramMasterService>(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\n\n readonly studentDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('studentDetailsRendererTemplate');\n readonly amountRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('amountRendererTemplate');\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\n\n // Breadcrumb data for shared wrapper\n readonly breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n readonly feeAssignments = signal<FeeAssignmentData[]>([]);\n readonly loading = signal<boolean>(false);\n readonly error = signal<string | null>(null);\n\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 readonly searchQuery = signal<string>('');\n readonly sortColumn = signal<string>('student_name');\n readonly sortDirection = signal<'asc' | 'desc'>('asc');\n\n readonly selectedStatusFilter = signal<string>('');\n readonly selectedAcademicYearFilter = signal<string>('');\n readonly selectedClassFilter = signal<string>('');\n readonly selectedSectionFilter = signal<string>('');\n\n readonly academicYearOptions = signal<Array<{value: string; label: string}>>([]);\n readonly classOptions = signal<Array<{value: string; label: string}>>([]);\n readonly sectionOptions = signal<Array<{value: string; label: string}>>([]);\n\n readonly stats = computed(() => ({\n total: this.feeAssignments().length,\n pending: this.feeAssignments().filter(a => a.feeas_status === 'PENDING').length,\n partial: this.feeAssignments().filter(a => a.feeas_status === 'PARTIALLY_PAID').length,\n paid: this.feeAssignments().filter(a => a.feeas_status === 'PAID').length\n }));\n\n readonly gridConfig = computed<GridConfiguration<FeeAssignmentData>>(() => ({\n id: 'fee-assignment-list-grid',\n columns: [\n {\n key: 'student_id',\n header: 'Student ID',\n type: 'text',\n width: '120px',\n truncate: true,\n align: 'left',\n sortable: true\n },\n {\n key: 'student',\n header: 'Student Details',\n type: 'custom',\n width: 'auto',\n truncate: true,\n align: 'left',\n renderer: 'studentDetailsRenderer',\n sortable: true\n },\n {\n key: 'fee_structure_name',\n header: 'Fee Structure',\n type: 'text',\n width: '200px',\n truncate: true,\n align: 'left',\n sortable: true\n },\n {\n key: 'total_amount',\n header: 'Total Amount',\n type: 'custom',\n width: '150px',\n truncate: false,\n align: 'right',\n renderer: 'amountRenderer',\n sortable: true\n },\n {\n key: 'feeas_due_date',\n header: 'Due Date',\n type: 'date',\n width: '120px',\n truncate: false,\n align: 'left',\n sortable: true\n },\n {\n key: 'feeas_status',\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.feeAssignments(),\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 student name, ID...',\n searchableColumns: ['student_name', 'student_id'],\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: 'fee-assignments',\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('๐Ÿ’ฐ Fee Assignment List Component initialized');\n this.initializeBreadcrumbData();\n this.loadDropdownOptions();\n this.loadFeeAssignments();\n }\n\n private initializeBreadcrumbData(): void {\n this.breadcrumbData.set([\n {\n id: 'list',\n label: 'List',\n icon: 'list',\n url: undefined\n }\n ]);\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n private loadDropdownOptions(): void {\n // Load academic years\n this.academicYearService.getAcademicYearList({ pageIndex: 1, pageSize: 100, pagination: false }).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.academicYearOptions.set(response.data.map(ay => ({\n value: ay._id || '',\n label: `${ay.acayr_name || ''} (${ay.acayr_code || ''})`\n })));\n }\n }\n });\n\n // Load class programs\n this.classProgramService.searchClassProgramMasters({ pagination: false }).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.classOptions.set(response.data.map(cp => ({\n value: cp._id || '',\n label: cp.acacpm_alise_title || ''\n })));\n }\n }\n });\n }\n\n loadFeeAssignments(): void {\n this.loading.set(true);\n this.error.set(null);\n\n // TODO: Implement API call to get fee assignments\n // For now, mock data\n setTimeout(() => {\n this.feeAssignments.set([\n {\n _id: '1',\n feeas_student_id: 'STU001',\n student_name: 'John Doe',\n student_id: 'STU001',\n class: 'Class 10',\n section: 'A',\n fee_structure_name: 'Term 1 Fees',\n feeas_amount_original: 50000,\n feeas_amount_paid: 30000,\n feeas_amount_remaining: 20000,\n feeas_due_date: new Date('2024-12-31'),\n feeas_status: 'PARTIALLY_PAID'\n },\n {\n _id: '2',\n feeas_student_id: 'STU002',\n student_name: 'Jane Smith',\n student_id: 'STU002',\n class: 'Class 10',\n section: 'B',\n fee_structure_name: 'Term 1 Fees',\n feeas_amount_original: 50000,\n feeas_amount_paid: 50000,\n feeas_amount_remaining: 0,\n feeas_due_date: new Date('2024-12-31'),\n feeas_status: 'PAID'\n },\n {\n _id: '3',\n feeas_student_id: 'STU003',\n student_name: 'Bob Johnson',\n student_id: 'STU003',\n class: 'Class 9',\n section: 'A',\n fee_structure_name: 'Term 1 Fees',\n feeas_amount_original: 45000,\n feeas_amount_paid: 0,\n feeas_amount_remaining: 45000,\n feeas_due_date: new Date('2024-12-31'),\n feeas_status: 'PENDING'\n }\n ]);\n this.totalItems.set(3);\n this.totalPages.set(1);\n this.loading.set(false);\n }, 500);\n }\n\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\n studentDetailsRenderer: this.studentDetailsRendererTemplate(),\n amountRenderer: this.amountRendererTemplate(),\n statusRenderer: this.statusRendererTemplate(),\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\n }));\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.loadFeeAssignments();\n }\n break;\n case 'search':\n this.searchQuery.set(event.data as string);\n this.currentPage.set(1);\n this.loadFeeAssignments();\n break;\n case 'refresh':\n this.loadFeeAssignments();\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);\n this.loadFeeAssignments();\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 onStatusFilterChange(value: string | number | string[] | null | undefined): void {\n this.selectedStatusFilter.set(String(value || ''));\n this.currentPage.set(1);\n this.loadFeeAssignments();\n }\n\n onAcademicYearFilterChange(value: string | number | string[] | null | undefined): void {\n this.selectedAcademicYearFilter.set(String(value || ''));\n this.currentPage.set(1);\n this.loadFeeAssignments();\n }\n\n onClassFilterChange(value: string | number | string[] | null | undefined): void {\n this.selectedClassFilter.set(String(value || ''));\n this.currentPage.set(1);\n this.loadFeeAssignments();\n }\n\n onSectionFilterChange(value: string | number | string[] | null | undefined): void {\n this.selectedSectionFilter.set(String(value || ''));\n this.currentPage.set(1);\n this.loadFeeAssignments();\n }\n\n clearFilters(): void {\n this.selectedStatusFilter.set('');\n this.selectedAcademicYearFilter.set('');\n this.selectedClassFilter.set('');\n this.selectedSectionFilter.set('');\n this.searchQuery.set('');\n this.currentPage.set(1);\n this.loadFeeAssignments();\n }\n\n navigateToAssign(): void {\n this.router.navigate(['/control-panel/assignment/create']);\n }\n\n bulkAssign(): void {\n this.notificationService.info('Bulk assignment feature will open in a new window.');\n }\n\n viewDetails(assignment: FeeAssignmentData): void {\n console.log('View details:', assignment);\n const queryParams = generateStringFromObject({ feeas_id: assignment._id });\n this.router.navigate(['/control-panel/assignment/view', queryParams]);\n }\n\n modifyAssignment(assignment: FeeAssignmentData): void {\n console.log('Modify assignment:', assignment);\n const queryParams = generateStringFromObject({ feeas_id: assignment._id });\n this.router.navigate(['/control-panel/assignment/edit', queryParams]);\n }\n\n waiveOff(assignment: FeeAssignmentData): void {\n this.confirmationService.ask({\n title: 'Waive Off Fee',\n message: `Are you sure you want to waive off the fee for ${assignment.student_name}? This action cannot be undone.`,\n confirmText: 'Waive Off',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n // TODO: Implement waive off API call\n this.notificationService.success('Fee waived off successfully.');\n this.loadFeeAssignments();\n }\n });\n }\n\n getDropdownConfig(): DropdownConfig {\n return {\n triggerIcon: 'more_vert',\n triggerSize: 'sm'\n };\n }\n\n getActionDropdownItems(assignment: FeeAssignmentData): DropdownItem[] {\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: 'modify',\n label: 'Modify',\n icon: 'edit',\n iconColor: 'tw-text-blue-400',\n textColor: 'tw-text-blue-600',\n hoverBgColor: 'hover:tw-bg-blue-50'\n },\n {\n id: 'waive',\n label: 'Waive Off',\n icon: 'cancel',\n iconColor: 'tw-text-red-400',\n textColor: 'tw-text-red-600',\n hoverBgColor: 'hover:tw-bg-red-50'\n }\n ];\n return items;\n }\n\n onDropdownItemClick(item: DropdownItem, assignment: FeeAssignmentData): void {\n switch (item.id) {\n case 'view':\n this.viewDetails(assignment);\n break;\n case 'modify':\n this.modifyAssignment(assignment);\n break;\n case 'waive':\n this.waiveOff(assignment);\n break;\n default:\n console.log('โ“ Unknown dropdown item clicked:', item.id);\n }\n }\n\n private handleExport(format: string): void {\n console.log(`๐Ÿ“ค Exporting fee assignments as ${format}`);\n // TODO: Implement export functionality\n }\n\n formatCurrency(amount: number | undefined): string {\n if (!amount) return 'โ‚น0.00';\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n\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 getStatusBadgeClass(assignment: FeeAssignmentData): string {\n switch (assignment.feeas_status) {\n case 'PAID':\n return 'tw-bg-green-100 tw-text-green-800';\n case 'PARTIALLY_PAID':\n return 'tw-bg-blue-100 tw-text-blue-800';\n case 'PENDING':\n return 'tw-bg-yellow-100 tw-text-yellow-800';\n case 'WAIVED':\n return 'tw-bg-purple-100 tw-text-purple-800';\n case 'CANCELLED':\n return 'tw-bg-red-100 tw-text-red-800';\n default:\n return 'tw-bg-gray-100 tw-text-gray-800';\n }\n }\n\n getStatusText(assignment: FeeAssignmentData): string {\n return assignment.feeas_status || 'Unknown';\n }\n}\n","<!-- Fee Assignment Container -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_assignment' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"navigateToAssign()\">\n Assign Fees\n </button>\n <button cideEleButton variant=\"secondary\" size=\"sm\" leftIcon=\"group_add\" (click)=\"bulkAssign()\">\n Bulk Assignment\n </button>\n </div>\n\n <div class=\"tw-table tw-w-full tw-h-full\">\n\n <!-- Stats Row -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-bg-gray-50 tw-border-b tw-border-gray-200\">\n <div class=\"tw-grid tw-grid-cols-1 sm:tw-grid-cols-4 tw-gap-4\">\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-border-gray-200\">\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Total Assigned</div>\n <div class=\"tw-text-2xl tw-font-bold tw-text-gray-900\">{{ stats().total }}</div>\n </div>\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-border-gray-200\">\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Pending</div>\n <div class=\"tw-text-2xl tw-font-bold tw-text-yellow-600\">{{ stats().pending }}</div>\n </div>\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-border-gray-200\">\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Partially Paid</div>\n <div class=\"tw-text-2xl tw-font-bold tw-text-blue-600\">{{ stats().partial }}</div>\n </div>\n <div class=\"tw-bg-white tw-p-4 tw-rounded-lg tw-border tw-border-gray-200\">\n <div class=\"tw-text-xs tw-text-gray-500 tw-mb-1\">Paid</div>\n <div class=\"tw-text-2xl tw-font-bold tw-text-green-600\">{{ stats().paid }}</div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Filters Row -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-px-6 tw-py-4 tw-bg-gray-50 tw-border-b tw-border-gray-200\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-4 tw-gap-4\">\n <cide-ele-select \n label=\"Academic Year\" \n [options]=\"academicYearOptions()\"\n [ngModel]=\"selectedAcademicYearFilter()\"\n (ngModelChange)=\"onAcademicYearFilterChange($event)\"\n size=\"sm\"\n placeholder=\"All Academic Years\">\n </cide-ele-select>\n\n <cide-ele-select \n label=\"Class/Program\" \n [options]=\"classOptions()\"\n [ngModel]=\"selectedClassFilter()\"\n (ngModelChange)=\"onClassFilterChange($event)\"\n size=\"sm\"\n placeholder=\"All Classes\">\n </cide-ele-select>\n\n <cide-ele-select \n label=\"Section\" \n [options]=\"sectionOptions()\"\n [ngModel]=\"selectedSectionFilter()\"\n (ngModelChange)=\"onSectionFilterChange($event)\"\n size=\"sm\"\n placeholder=\"All Sections\">\n </cide-ele-select>\n\n <cide-ele-select \n label=\"Status\" \n [options]=\"[\n {value: '', label: 'All Status'},\n {value: 'PENDING', label: 'Pending'},\n {value: 'PARTIALLY_PAID', label: 'Partially Paid'},\n {value: 'PAID', label: 'Paid'},\n {value: 'WAIVED', label: 'Waived'}\n ]\"\n [ngModel]=\"selectedStatusFilter()\"\n (ngModelChange)=\"onStatusFilterChange($event)\"\n size=\"sm\"\n placeholder=\"All Status\">\n </cide-ele-select>\n </div>\n <div class=\"tw-mt-3\">\n <button cideEleButton variant=\"ghost\" size=\"xs\" (click)=\"clearFilters()\">\n Clear Filters\n </button>\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</cide-lyt-shared-wrapper>\n\n<!-- Template Renderers -->\n<ng-template #studentDetailsRendererTemplate 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.student_name || 'N/A' }}</div>\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">{{ row.class || '' }} / {{ row.section || '' }}</div>\n </div>\n</ng-template>\n\n<ng-template #amountRendererTemplate let-row=\"row\">\n <div class=\"tw-flex tw-flex-col tw-text-sm tw-items-end\">\n <span class=\"tw-text-gray-900 tw-font-semibold\">{{ formatCurrency(row.feeas_amount_original) }}</span>\n <div class=\"tw-text-xs tw-text-gray-500\">\n Paid: {{ formatCurrency(row.feeas_amount_paid) }}\n </div>\n <div class=\"tw-text-xs tw-font-semibold\" [ngClass]=\"row.feeas_amount_remaining > 0 ? 'tw-text-red-600' : 'tw-text-green-600'\">\n Outstanding: {{ formatCurrency(row.feeas_amount_remaining) }}\n </div>\n </div>\n</ng-template>\n\n<ng-template #statusRendererTemplate let-row=\"row\">\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]=\"getStatusBadgeClass(row)\">\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\n {{ row.feeas_status === 'PAID' ? 'check_circle' : \n row.feeas_status === 'PARTIALLY_PAID' ? 'schedule' : \n row.feeas_status === 'PENDING' ? 'pending' : 'cancel' }}\n </cide-ele-icon>\n {{ getStatusText(row) }}\n </span>\n</ng-template>\n\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\n <cide-ele-dropdown \n [items]=\"getActionDropdownItems(row)\"\n [config]=\"getDropdownConfig()\"\n (itemClick)=\"onDropdownItemClick($event, row)\">\n </cide-ele-dropdown>\n</ng-template>\n\n","import { \n Component, \n inject, \n signal, \n OnInit, \n DestroyRef, \n OnDestroy,\n computed\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { \n FormBuilder, \n FormGroup, \n ReactiveFormsModule, \n Validators\n} from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { \n CideTextareaComponent, \n CideEleButtonComponent, \n CideIconComponent,\n NotificationService,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { ENTITY_SERVICE_TOKEN, type IEntityService, ACADEMIC_YEAR_SERVICE_TOKEN, type IAcademicYearService } from 'cloud-ide-shared';\nimport {\n generateObjectFromString,\n generateStringFromObject,\n MAcademicYear\n} from 'cloud-ide-lms-model';\nimport { CideSelectComponent } from 'cloud-ide-element';\nimport { CideInputComponent } from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\nimport { CideFeeFeeStructureService } from '../../../fee-structure-management/services/fee-structure.service';\n\n// Types\ninterface Entity {\n _id?: string;\n syen_name?: string;\n syen_code?: string;\n}\n\ninterface AcademicYear {\n _id?: string;\n acayr_name?: string;\n acayr_code?: string;\n}\n\ninterface FeeStructure {\n _id?: string;\n fees_structure_name?: string;\n fees_structure_code?: string;\n}\n\n@Component({\n selector: 'cide-fee-assignment-create',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './fee-assignment-create.component.html'\n})\nexport class FeeAssignmentCreateComponent implements OnInit, OnDestroy {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly entityService = inject<IEntityService>(ENTITY_SERVICE_TOKEN);\n private readonly academicYearService = inject<IAcademicYearService>(ACADEMIC_YEAR_SERVICE_TOKEN);\n private readonly feeStructureService = inject(CideFeeFeeStructureService);\n\n assignmentForm!: FormGroup;\n readonly loading = signal<boolean>(false);\n readonly submitting = signal<boolean>(false);\n\n readonly assignmentId = signal<string>('');\n readonly isEditMode = signal<boolean>(false);\n readonly isViewMode = signal<boolean>(false);\n\n // Breadcrumb data for shared wrapper\n readonly breadcrumbData = signal<{ id: string; label: string; icon?: string; url?: string }[]>([]);\n\n readonly entityOptions = signal<Entity[]>([]);\n readonly academicYearOptions = signal<AcademicYear[]>([]);\n readonly feeStructureOptions = signal<FeeStructure[]>([]);\n readonly entityLoading = signal<boolean>(false);\n readonly academicYearLoading = signal<boolean>(false);\n readonly feeStructureLoading = signal<boolean>(false);\n\n readonly feeSourceOptions = [\n { value: 'STRUCTURE', label: 'From Fee Structure' },\n { value: 'CUSTOM', label: 'Custom Fee' }\n ];\n\n readonly feeCategoryOptions = [\n { value: 'TUITION', label: 'Tuition' },\n { value: 'EXAM', label: 'Exam' },\n { value: 'LIBRARY', label: 'Library' },\n { value: 'LAB', label: 'Lab' },\n { value: 'SPORTS', label: 'Sports' },\n { value: 'TRANSPORT', label: 'Transport' },\n { value: 'HOSTEL', label: 'Hostel' },\n { value: 'OTHER', label: 'Other' }\n ];\n\n readonly feeTypeOptions = [\n { value: 'ONE_TIME', label: 'One Time' },\n { value: 'RECURRING', label: 'Recurring' }\n ];\n\n readonly showCustomFeeFields = computed(() => {\n return this.assignmentForm?.get('fee_source')?.value === 'CUSTOM';\n });\n\n readonly showFeeStructureField = computed(() => {\n return this.assignmentForm?.get('fee_source')?.value === 'STRUCTURE';\n });\n\n readonly totalAmount = computed(() => {\n const original = parseFloat(this.assignmentForm?.get('feeas_original_amount')?.value || '0') || 0;\n const discount = parseFloat(this.assignmentForm?.get('feeas_discount_amount')?.value || '0') || 0;\n const scholarship = parseFloat(this.assignmentForm?.get('feeas_scholarship_amount')?.value || '0') || 0;\n return Math.max(0, original - discount - scholarship);\n });\n\n constructor() {\n this.initializeForm();\n }\n\n private initializeForm(): void {\n this.assignmentForm = this.fb.group({\n // Student Information\n student_id: ['', [Validators.required]],\n student_search: [''],\n feeas_academic_year_id_acayr: ['', [Validators.required]],\n \n // Fee Information\n fee_source: ['STRUCTURE', [Validators.required]],\n feeas_fee_structure_id_feest: [''],\n \n // Custom Fee Fields\n feeas_fee_category_sygms: [''],\n feeas_fee_name: [''],\n feeas_fee_type: ['ONE_TIME'],\n feeas_original_amount: [0, [Validators.required, Validators.min(0)]],\n \n // Payment Details\n feeas_due_date: ['', [Validators.required]],\n feeas_installment_count: [1, [Validators.min(1), Validators.max(12)]],\n \n // Discounts & Scholarships\n feeas_discount_amount: [0, [Validators.min(0)]],\n feeas_scholarship_amount: [0, [Validators.min(0)]],\n \n // Additional\n feeas_remarks: ['']\n });\n\n // Set conditional validators based on fee source\n this.assignmentForm.get('fee_source')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(source => {\n if (source === 'STRUCTURE') {\n this.assignmentForm.get('feeas_fee_structure_id_feest')?.setValidators([Validators.required]);\n this.assignmentForm.get('feeas_fee_category_sygms')?.clearValidators();\n this.assignmentForm.get('feeas_fee_name')?.clearValidators();\n this.assignmentForm.get('feeas_original_amount')?.clearValidators();\n } else if (source === 'CUSTOM') {\n this.assignmentForm.get('feeas_fee_structure_id_feest')?.clearValidators();\n this.assignmentForm.get('feeas_fee_category_sygms')?.setValidators([Validators.required]);\n this.assignmentForm.get('feeas_fee_name')?.setValidators([Validators.required]);\n this.assignmentForm.get('feeas_original_amount')?.setValidators([Validators.required, Validators.min(0)]);\n }\n this.assignmentForm.updateValueAndValidity();\n });\n }\n\n ngOnInit(): void {\n this.initializeComponent();\n }\n\n ngOnDestroy(): void {\n // Cleanup if needed\n }\n\n private initializeComponent(): void {\n this.updateBreadcrumbData();\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\n const queryParams = params['query'];\n \n if (queryParams) {\n const queryData = generateObjectFromString(queryParams);\n if (queryData?.feeas_id) {\n this.assignmentId.set(queryData.feeas_id as string);\n this.isEditMode.set(true);\n this.loadAssignmentData(queryData.feeas_id as string);\n }\n } else {\n this.isEditMode.set(false);\n }\n\n // Always load dropdown options\n this.loadDropdownOptions();\n });\n\n // Check if view mode\n const path = this.route.snapshot.url.map(segment => segment.path).join('/');\n this.isViewMode.set(path.includes('view'));\n \n if (this.isViewMode()) {\n this.assignmentForm.disable();\n }\n\n // Update breadcrumb after mode is determined\n this.updateBreadcrumbData();\n }\n\n private loadDropdownOptions(): void {\n // Load entity options\n this.entityLoading.set(true);\n this.entityService.getEntityList({}).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.entityOptions.set(response.data);\n }\n this.entityLoading.set(false);\n },\n error: () => {\n this.entityLoading.set(false);\n }\n });\n\n // Load academic year options\n this.academicYearLoading.set(true);\n const academicYearPayload: MAcademicYear = {\n pageIndex: 1,\n pageSize: 100,\n pagination: false\n };\n this.academicYearService.getAcademicYearList(academicYearPayload).subscribe({\n next: (response) => {\n if (response?.success && response.data) {\n this.academicYearOptions.set(response.data);\n }\n this.academicYearLoading.set(false);\n },\n error: () => {\n this.academicYearLoading.set(false);\n }\n });\n\n // Load fee structure options\n this.loadFeeStructures();\n }\n\n private loadFeeStructures(): void {\n this.feeStructureLoading.set(true);\n // TODO: Implement API call to get fee structures\n // For now, mock data\n setTimeout(() => {\n this.feeStructureOptions.set([\n { _id: '1', fees_structure_name: 'Term 1 Fees', fees_structure_code: 'FS001' },\n { _id: '2', fees_structure_name: 'Term 2 Fees', fees_structure_code: 'FS002' }\n ]);\n this.feeStructureLoading.set(false);\n }, 500);\n }\n\n private loadAssignmentData(id: string): void {\n this.loading.set(true);\n // TODO: Implement API call to get assignment data\n this.loading.set(false);\n }\n\n onStudentSearch(query: string | number | boolean | null | undefined): void {\n const searchQuery = String(query || '');\n if (searchQuery.length < 3) return;\n \n this.loading.set(true);\n // TODO: Implement student search API call\n setTimeout(() => {\n this.assignmentForm.patchValue({ student_id: 'STU001' });\n this.loading.set(false);\n }, 500);\n }\n\n onSubmit(): void {\n if (this.assignmentForm.invalid || this.submitting()) {\n this.assignmentForm.markAllAsTouched();\n this.notificationService.warning('Please fill in all required fields correctly.');\n return;\n }\n\n this.submitting.set(true);\n\n const formValue = this.assignmentForm.value;\n \n // TODO: Implement API call to save assignment\n setTimeout(() => {\n this.notificationService.success(\n `Fee assignment ${this.isEditMode() ? 'updated' : 'created'} successfully!`\n );\n this.router.navigate(['/control-panel/assignment']);\n }, 1000);\n }\n\n resetForm(): void {\n if (this.assignmentForm.dirty) {\n this.confirmationService.ask({\n title: 'Reset Form?',\n message: 'Are you sure you want to reset the form? All unsaved changes will be lost.',\n confirmText: 'Reset',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.assignmentForm.reset({\n fee_source: 'STRUCTURE',\n feeas_fee_type: 'ONE_TIME',\n feeas_original_amount: 0,\n feeas_discount_amount: 0,\n feeas_scholarship_amount: 0,\n feeas_installment_count: 1\n });\n this.assignmentId.set('');\n this.isEditMode.set(false);\n this.notificationService.info('Form has been reset.');\n }\n });\n }\n }\n\n onCancel(): void {\n if (this.assignmentForm.dirty) {\n this.confirmationService.ask({\n title: 'Discard Changes?',\n message: 'You have unsaved changes. Are you sure you want to leave?',\n confirmText: 'Discard',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.router.navigate(['/control-panel/assignment']);\n }\n });\n } else {\n this.router.navigate(['/control-panel/assignment']);\n }\n }\n\n getAcademicYearOptions(): Array<{ value: string; label: string }> {\n return this.academicYearOptions().map(ay => ({\n value: ay._id || '',\n label: `${ay.acayr_name || ''} (${ay.acayr_code || ''})`\n }));\n }\n\n getFeeStructureOptions(): Array<{ value: string; label: string }> {\n return this.feeStructureOptions().map(fs => ({\n value: fs._id || '',\n label: `${fs.fees_structure_name || ''} (${fs.fees_structure_code || ''})`\n }));\n }\n\n formatCurrency(amount: number): string {\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n\n /**\n * Update breadcrumb data based on mode\n */\n private updateBreadcrumbData(): void {\n const additionalItems: { id: string; label: string; icon?: string; url?: string }[] = [];\n\n if (this.isEditMode() || this.isViewMode()) {\n if (this.isViewMode()) {\n additionalItems.push({\n id: 'view',\n label: 'View',\n icon: 'visibility',\n url: undefined\n });\n } else {\n additionalItems.push({\n id: 'edit',\n label: 'Edit',\n icon: 'edit',\n url: undefined\n });\n }\n } else {\n // Create mode\n additionalItems.push({\n id: 'create',\n label: 'Create',\n icon: 'add',\n url: undefined\n });\n }\n\n this.breadcrumbData.set(additionalItems);\n }\n}\n\n","<!-- Fee Assignment Form -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_assignment' }\"\n [breadcrumb_data]=\"breadcrumbData()\">\n <div class=\"tw-w-full tw-h-full\">\n <form class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\" [formGroup]=\"assignmentForm\" \n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\n\n <!-- Form Content -->\n <div class=\"tw-table-row\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-6\">\n <div class=\"tw-transition-opacity tw-duration-300\" [class.tw-opacity-60]=\"loading()\">\n <div class=\"tw-space-y-6\">\n\n <!-- Student Information -->\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Student Information</h6>\n \n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <div>\n <cide-ele-input \n label=\"Student *\" \n formControlName=\"student_search\"\n placeholder=\"Search student...\"\n size=\"sm\"\n leadingIcon=\"search\"\n (ngModelChange)=\"onStudentSearch($event)\">\n </cide-ele-input>\n </div>\n\n <cide-ele-select \n label=\"Academic Year *\" \n formControlName=\"feeas_academic_year_id_acayr\"\n [options]=\"getAcademicYearOptions()\"\n [loading]=\"academicYearLoading()\"\n size=\"sm\"\n leadingIcon=\"calendar_today\">\n </cide-ele-select>\n </div>\n </div>\n\n <!-- Fee Information -->\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Fee Information</h6>\n \n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Fee Source *\" \n formControlName=\"fee_source\"\n [options]=\"feeSourceOptions\"\n size=\"sm\"\n leadingIcon=\"source\">\n </cide-ele-select>\n\n @if (showFeeStructureField()) {\n <cide-ele-select \n label=\"Fee Structure *\" \n formControlName=\"feeas_fee_structure_id_feest\"\n [options]=\"getFeeStructureOptions()\"\n [loading]=\"feeStructureLoading()\"\n size=\"sm\">\n </cide-ele-select>\n }\n </div>\n\n <!-- Custom Fee Fields -->\n @if (showCustomFeeFields()) {\n <div class=\"tw-mt-4 tw-space-y-4\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Fee Category *\" \n formControlName=\"feeas_fee_category_sygms\"\n [options]=\"feeCategoryOptions\"\n size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input \n label=\"Fee Name *\" \n formControlName=\"feeas_fee_name\"\n placeholder=\"Enter fee name\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-select \n label=\"Fee Type *\" \n formControlName=\"feeas_fee_type\"\n [options]=\"feeTypeOptions\"\n size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-input \n label=\"Amount *\" \n formControlName=\"feeas_original_amount\"\n type=\"number\"\n placeholder=\"0.00\"\n size=\"sm\"\n leadingIcon=\"currency_rupee\">\n </cide-ele-input>\n </div>\n </div>\n }\n </div>\n\n <!-- Payment Details -->\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Payment Details</h6>\n \n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input \n label=\"Due Date *\" \n formControlName=\"feeas_due_date\"\n type=\"date\"\n size=\"sm\"\n leadingIcon=\"calendar_today\">\n </cide-ele-input>\n\n <cide-ele-input \n label=\"Installments\" \n formControlName=\"feeas_installment_count\"\n type=\"number\"\n placeholder=\"1\"\n min=\"1\"\n max=\"12\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Discounts & Scholarships -->\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Discounts & Scholarships</h6>\n \n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\n <cide-ele-input \n label=\"Discount Amount\" \n formControlName=\"feeas_discount_amount\"\n type=\"number\"\n placeholder=\"0.00\"\n min=\"0\"\n size=\"sm\"\n leadingIcon=\"percent\">\n </cide-ele-input>\n\n <cide-ele-input \n label=\"Scholarship Amount\" \n formControlName=\"feeas_scholarship_amount\"\n type=\"number\"\n placeholder=\"0.00\"\n min=\"0\"\n size=\"sm\"\n leadingIcon=\"school\">\n </cide-ele-input>\n </div>\n </div>\n\n <!-- Amount Summary -->\n <div class=\"tw-bg-gradient-to-r tw-from-blue-50 tw-to-indigo-50 tw-rounded-lg tw-border tw-border-blue-200 tw-p-4\">\n <h6 class=\"tw-text-base tw-font-semibold tw-text-blue-900 tw-mb-3\">Amount Summary</h6>\n \n <div class=\"tw-space-y-2\">\n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-1\">\n <span class=\"tw-text-sm tw-text-gray-700\">Original Amount:</span>\n <span class=\"tw-font-semibold tw-text-gray-900\">{{ formatCurrency(assignmentForm.get('feeas_original_amount')?.value || 0) }}</span>\n </div>\n \n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-1\">\n <span class=\"tw-text-sm tw-text-gray-700\">Discount:</span>\n <span class=\"tw-font-semibold tw-text-red-600\">-{{ formatCurrency(assignmentForm.get('feeas_discount_amount')?.value || 0) }}</span>\n </div>\n \n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-1\">\n <span class=\"tw-text-sm tw-text-gray-700\">Scholarship:</span>\n <span class=\"tw-font-semibold tw-text-red-600\">-{{ formatCurrency(assignmentForm.get('feeas_scholarship_amount')?.value || 0) }}</span>\n </div>\n \n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-2 tw-border-t-2 tw-border-blue-300 tw-mt-2\">\n <span class=\"tw-text-base tw-font-bold tw-text-blue-900\">Total Amount:</span>\n <span class=\"tw-text-xl tw-font-bold tw-text-blue-700\">{{ formatCurrency(totalAmount()) }}</span>\n </div>\n </div>\n </div>\n\n <!-- Remarks -->\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\n <cide-ele-textarea \n label=\"Remarks\" \n formControlName=\"feeas_remarks\"\n placeholder=\"Enter any additional remarks...\"\n rows=\"2\" \n size=\"sm\">\n </cide-ele-textarea>\n </div>\n\n </div>\n\n <!-- Form Validation Errors -->\n @if (!isViewMode()) {\n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-3 tw-mt-6\">\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"resetForm()\" leftIcon=\"refresh\"\n [disabled]=\"loading()\">\n Reset Form\n </button>\n\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"onCancel()\" leftIcon=\"close\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\" \n [disabled]=\"submitting() || assignmentForm.invalid || loading()\" \n [loading]=\"submitting()\" \n leftIcon=\"save\">\n {{ isEditMode() ? 'Update Assignment' : 'Assign Fee' }}\n </button>\n </div>\n }\n </div>\n </div>\n </div>\n </form>\n </div>\n</cide-lyt-shared-wrapper>\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 feesRoutesUrl,\r\n hostManagerRoutesUrl,\r\n generateStringFromObject,\r\n type feePaymentControllerResponse,\r\n type MFeePayment,\r\n type feePaymentByIdControllerResponse,\r\n type MFeePaymentGetByIdPayload,\r\n type feePaymentInsertUpdateControllerResponse,\r\n type MFeePaymentInsertUpdatePayload,\r\n type feePaymentDeleteControllerResponse,\r\n type MFeePaymentDeletePayload\r\n} from 'cloud-ide-lms-model';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CideFeeFeePaymentService {\r\n private http = inject(HttpClient);\r\n\r\n /**\r\n * Get list of fee payments\r\n * @param payload - Query parameters for filtering/pagination\r\n * @returns Observable of fee payment list response\r\n */\r\n getFeePaymentList(payload: MFeePayment): Observable<feePaymentControllerResponse> {\r\n console.log(\"payload\", payload)\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.payment,\r\n query\r\n ]);\r\n\r\n return this.http.get(url);\r\n }\r\n\r\n /**\r\n * Get fee payment by ID\r\n * @param payload - Fee payment ID payload\r\n * @returns Observable of fee payment data\r\n */\r\n getFeePaymentById(payload: MFeePaymentGetByIdPayload): Observable<feePaymentByIdControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.payment,\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 fee payment\r\n * @param data - Fee payment data to save\r\n * @returns Observable of the save response\r\n */\r\n saveUpdateFeePayment(data: MFeePaymentInsertUpdatePayload): Observable<feePaymentInsertUpdateControllerResponse> {\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.payment\r\n ]);\r\n\r\n return this.http.post(url, data);\r\n }\r\n\r\n /**\r\n * Delete fee payment\r\n * @param payload - Fee payment ID payload\r\n * @returns Observable of the delete response\r\n */\r\n deleteFeePayment(payload: MFeePaymentDeletePayload): Observable<feePaymentDeleteControllerResponse> {\r\n const query = generateStringFromObject(payload);\r\n const url = cidePath.join([\r\n hostManagerRoutesUrl.cideSuiteHost,\r\n feesRoutesUrl.module,\r\n feesRoutesUrl.payment,\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","import { \r\n Component, \r\n signal, \r\n computed, \r\n viewChild, \r\n TemplateRef, \r\n DestroyRef, \r\n inject, \r\n OnInit,\r\n type OnDestroy \r\n} from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Router } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { \r\n CideEleDataGridComponent, \r\n CideIconComponent, \r\n CideEleButtonComponent, \r\n type GridConfiguration, \r\n type GridEvent, \r\n CideEleDropdownComponent, \r\n type DropdownItem, \r\n type TemplateContext, \r\n type DropdownConfig, \r\n ConfirmationService,\r\n NotificationService \r\n} from 'cloud-ide-element';\r\nimport { \r\n generateStringFromObject, \r\n MFeePayment \r\n} from 'cloud-ide-lms-model';\r\nimport { AppStateHelperService } from 'cloud-ide-layout';\r\nimport { CideFeeFeePaymentService } from '../../services/fee-payment.service';\r\n\r\n// Types\r\ninterface FeePaymentData {\r\n _id?: string;\r\n feepay_receipt_number?: string;\r\n feepay_student_id?: string;\r\n student_name?: string;\r\n feepay_payment_date?: Date;\r\n feepay_payment_mode?: string;\r\n feepay_total_amount?: number;\r\n feepay_late_fee_amount?: number;\r\n feepay_status?: string;\r\n feepay_payment_reference?: string;\r\n is_reconciled?: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-fee-payment-list',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDataGridComponent,\r\n CideEleDropdownComponent\r\n ],\r\n templateUrl: './fee-payment-list.component.html',\r\n styles: [`\r\n .fee-payment-listing-container {\r\n @apply tw-w-full tw-h-full;\r\n }\r\n \r\n :host {\r\n @apply tw-w-full tw-h-full tw-flex tw-flex-col;\r\n }\r\n `]\r\n})\r\nexport class FeePaymentListComponent implements OnInit, OnDestroy {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly feePaymentService = inject(CideFeeFeePaymentService);\r\n private readonly router = inject(Router);\r\n private readonly appState = inject(AppStateHelperService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n readonly paymentDetailsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('paymentDetailsRendererTemplate');\r\n readonly amountRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('amountRendererTemplate');\r\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\r\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n\r\n readonly feePayments = signal<FeePaymentData[]>([]);\r\n readonly loading = signal<boolean>(false);\r\n readonly error = signal<string | null>(null);\r\n\r\n readonly currentPage = signal<number>(1);\r\n readonly pageSize = signal<number>(10);\r\n readonly totalItems = signal<number>(0);\r\n readonly totalPages = signal<number>(0);\r\n\r\n readonly searchQuery = signal<string>('');\r\n readonly sortColumn = signal<string>('feepay_payment_date');\r\n readonly sortDirection = signal<'asc' | 'desc'>('desc');\r\n\r\n readonly selectedStatusFilter = signal<string>('');\r\n readonly selectedPaymentModeFilter = signal<string>('');\r\n\r\n readonly gridConfig = computed<GridConfiguration<FeePaymentData>>(() => ({\r\n id: 'fee-payment-list-grid',\r\n columns: [\r\n {\r\n key: 'feepay_receipt_number',\r\n header: 'Receipt #',\r\n type: 'text',\r\n width: '140px',\r\n truncate: true,\r\n align: 'left',\r\n sortable: true\r\n },\r\n {\r\n key: 'details',\r\n header: 'Payment Details',\r\n type: 'custom',\r\n width: 'auto',\r\n truncate: true,\r\n align: 'left',\r\n renderer: 'paymentDetailsRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'feepay_payment_date',\r\n header: 'Payment Date',\r\n type: 'date',\r\n width: '140px',\r\n truncate: false,\r\n align: 'left',\r\n sortable: true\r\n },\r\n {\r\n key: 'feepay_payment_mode',\r\n header: 'Payment Mode',\r\n type: 'text',\r\n width: '120px',\r\n truncate: false,\r\n align: 'left',\r\n sortable: true\r\n },\r\n {\r\n key: 'total_amount',\r\n header: 'Total Amount',\r\n type: 'custom',\r\n width: '150px',\r\n truncate: false,\r\n align: 'right',\r\n renderer: 'amountRenderer',\r\n sortable: true\r\n },\r\n {\r\n key: 'feepay_status',\r\n header: 'Status',\r\n type: 'custom',\r\n width: '140px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'statusRenderer'\r\n },\r\n {\r\n key: 'actions',\r\n header: 'Actions',\r\n type: 'custom',\r\n width: '80px',\r\n truncate: false,\r\n align: 'center',\r\n renderer: 'actionsDropdownRenderer'\r\n }\r\n ],\r\n data: this.feePayments(),\r\n trackBy: '_id',\r\n pagination: {\r\n enabled: true,\r\n pageSize: this.pageSize(),\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: true,\r\n showPageInfo: true,\r\n showRefresh: true\r\n },\r\n search: {\r\n enabled: true,\r\n placeholder: 'Search by receipt number, student name...',\r\n searchableColumns: ['feepay_receipt_number', 'student_name'],\r\n debounceMs: 300,\r\n showClearButton: true\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: this.loading()\r\n },\r\n scroll: {\r\n enabled: true,\r\n maxHeight: '',\r\n minHeight: '',\r\n stickyHeader: true,\r\n virtualScroll: false,\r\n rowHeight: 50\r\n },\r\n export: {\r\n enabled: true,\r\n formats: ['csv', 'excel', 'pdf'],\r\n filename: 'fee-payments',\r\n includeHeaders: true\r\n },\r\n responsive: true,\r\n striped: false,\r\n bordered: true,\r\n compact: false,\r\n tableClass: 'tw-table-fixed tw-w-full tw-rounded-none'\r\n }));\r\n\r\n ngOnInit(): void {\r\n console.log('๐Ÿ’ฐ Fee Payment List Component initialized');\r\n this.loadFeePayments();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n // Cleanup if needed\r\n }\r\n\r\n loadFeePayments(): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n const payload: MFeePayment = new MFeePayment({\r\n pageIndex: this.currentPage(),\r\n pageSize: this.pageSize(),\r\n query: this.searchQuery() || \"\",\r\n sort: {\r\n key: this.sortColumn(),\r\n order: this.sortDirection()\r\n }\r\n });\r\n\r\n // Add filters\r\n const filterParams: any = {};\r\n if (this.selectedStatusFilter()) {\r\n filterParams.feepay_status = this.selectedStatusFilter();\r\n }\r\n if (this.selectedPaymentModeFilter()) {\r\n filterParams.feepay_payment_mode = this.selectedPaymentModeFilter();\r\n }\r\n Object.assign(payload, filterParams);\r\n\r\n this.feePaymentService.getFeePaymentList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response?.success && response.data) {\r\n console.log('๐Ÿ’ฐ Fee payments loaded:', response.data);\r\n this.feePayments.set(response.data);\r\n this.totalItems.set(response.total || 0);\r\n this.totalPages.set(Math.ceil((response.total || 0) / this.pageSize()));\r\n \r\n if (response.data.length > 0) {\r\n this.notificationService.success(`Loaded ${response.data.length} payment(s) successfully.`);\r\n }\r\n } else {\r\n this.feePayments.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.warning('No payments found.');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (error) => {\r\n console.error('โŒ Error loading fee payments:', error);\r\n this.error.set('Failed to load fee payments. Please try again.');\r\n this.feePayments.set([]);\r\n this.totalItems.set(0);\r\n this.totalPages.set(0);\r\n this.notificationService.error('Failed to load fee payments. Please try again.');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n templateRenderers = computed((): Record<string, TemplateRef<TemplateContext>> => ({\r\n paymentDetailsRenderer: this.paymentDetailsRendererTemplate(),\r\n amountRenderer: this.amountRendererTemplate(),\r\n statusRenderer: this.statusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate()\r\n }));\r\n\r\n onGridEvent(event: GridEvent<any>): void {\r\n switch (event.type) {\r\n case 'pageChange':\r\n if (event.data && typeof event.data === 'object' && 'pageIndex' in event.data && 'pageSize' in event.data) {\r\n this.currentPage.set(event.data['pageIndex'] as number);\r\n this.pageSize.set(event.data['pageSize'] as number);\r\n this.loadFeePayments();\r\n }\r\n break;\r\n case 'search':\r\n this.searchQuery.set(event.data as string);\r\n this.currentPage.set(1);\r\n this.loadFeePayments();\r\n break;\r\n case 'refresh':\r\n this.loadFeePayments();\r\n break;\r\n case 'sort':\r\n if (event.data && typeof event.data === 'object' && 'column' in event.data && 'direction' in event.data) {\r\n this.sortColumn.set(event.data['column'] as string);\r\n this.sortDirection.set(event.data['direction'] as 'asc' | 'desc');\r\n this.currentPage.set(1);\r\n this.loadFeePayments();\r\n }\r\n break;\r\n case 'export':\r\n if (event.data && typeof event.data === 'string') {\r\n this.handleExport(event.data);\r\n }\r\n break;\r\n default:\r\n console.log('๐Ÿ”„ Unhandled grid event:', event.type);\r\n }\r\n }\r\n\r\n onStatusFilterChange(): void {\r\n this.currentPage.set(1);\r\n this.loadFeePayments();\r\n }\r\n\r\n onPaymentModeFilterChange(): void {\r\n this.currentPage.set(1);\r\n this.loadFeePayments();\r\n }\r\n\r\n clearFilters(): void {\r\n this.selectedStatusFilter.set('');\r\n this.selectedPaymentModeFilter.set('');\r\n this.searchQuery.set('');\r\n this.currentPage.set(1);\r\n this.loadFeePayments();\r\n }\r\n\r\n processPayment(): void {\r\n this.router.navigate(['/control-panel/payment/process']);\r\n }\r\n\r\n viewPayment(payment: FeePaymentData): void {\r\n const queryParams = generateStringFromObject({ feepay_id: payment._id });\r\n this.router.navigate(['/control-panel/payment/view', queryParams]);\r\n }\r\n\r\n printReceipt(payment: FeePaymentData): void {\r\n console.log('Print receipt:', payment);\r\n this.notificationService.info(`Printing receipt ${payment.feepay_receipt_number}`);\r\n }\r\n\r\n reconcilePayment(payment: FeePaymentData): void {\r\n this.confirmationService.ask({\r\n title: 'Reconcile Payment',\r\n message: `Are you sure you want to mark payment ${payment.feepay_receipt_number} as reconciled?`,\r\n confirmText: 'Reconcile',\r\n cancelText: 'Cancel',\r\n type: 'info'\r\n }).then((confirmed: boolean) => {\r\n if (confirmed) {\r\n // TODO: Implement reconcile API call\r\n this.notificationService.success('Payment reconciled successfully.');\r\n this.loadFeePayments();\r\n }\r\n });\r\n }\r\n\r\n getDropdownConfig(): DropdownConfig {\r\n return {\r\n triggerIcon: 'more_vert',\r\n triggerSize: 'sm'\r\n };\r\n }\r\n\r\n getActionDropdownItems(payment: FeePaymentData): DropdownItem[] {\r\n const items: DropdownItem[] = [\r\n {\r\n id: 'view',\r\n label: 'View Details',\r\n icon: 'visibility',\r\n iconColor: 'tw-text-gray-400',\r\n textColor: 'tw-text-gray-700',\r\n hoverBgColor: 'hover:tw-bg-gray-100'\r\n },\r\n {\r\n id: 'receipt',\r\n label: 'Print Receipt',\r\n icon: 'print',\r\n iconColor: 'tw-text-blue-400',\r\n textColor: 'tw-text-blue-600',\r\n hoverBgColor: 'hover:tw-bg-blue-50'\r\n }\r\n ];\r\n\r\n if (!payment.is_reconciled) {\r\n items.push({\r\n id: 'reconcile',\r\n label: 'Reconcile',\r\n icon: 'check_circle',\r\n iconColor: 'tw-text-green-400',\r\n textColor: 'tw-text-green-600',\r\n hoverBgColor: 'hover:tw-bg-green-50'\r\n });\r\n }\r\n\r\n return items;\r\n }\r\n\r\n onDropdownItemClick(item: DropdownItem, payment: FeePaymentData): void {\r\n switch (item.id) {\r\n case 'view':\r\n this.viewPayment(payment);\r\n break;\r\n case 'receipt':\r\n this.printReceipt(payment);\r\n break;\r\n case 'reconcile':\r\n this.reconcilePayment(payment);\r\n break;\r\n default:\r\n console.log('โ“ Unknown dropdown item clicked:', item.id);\r\n }\r\n }\r\n\r\n private handleExport(format: string): void {\r\n console.log(`๐Ÿ“ค Exporting fee payments as ${format}`);\r\n // TODO: Implement export functionality\r\n }\r\n\r\n formatCurrency(amount: number | undefined): string {\r\n if (!amount) return 'โ‚น0.00';\r\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\r\n }\r\n\r\n formatDate(date: string | Date | null | undefined): string {\r\n if (!date) return '-';\r\n return new Date(date).toLocaleDateString('en-US', {\r\n year: 'numeric',\r\n month: 'short',\r\n day: 'numeric'\r\n });\r\n }\r\n\r\n getStatusBadgeClass(payment: FeePaymentData): string {\r\n switch (payment.feepay_status) {\r\n case 'SUCCESS':\r\n case 'COMPLETED':\r\n return 'tw-bg-green-100 tw-text-green-800';\r\n case 'PENDING':\r\n return 'tw-bg-yellow-100 tw-text-yellow-800';\r\n case 'FAILED':\r\n return 'tw-bg-red-100 tw-text-red-800';\r\n default:\r\n return 'tw-bg-gray-100 tw-text-gray-800';\r\n }\r\n }\r\n\r\n getStatusText(payment: FeePaymentData): string {\r\n return payment.feepay_status || 'Unknown';\r\n }\r\n}\r\n","<!-- Fee Payment Container -->\r\n<div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-h-0\">\r\n <div class=\"tw-table-cell 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-blue-600 tw-w-5 tw-h-5\">payment</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Payment Management</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 <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"add\" (click)=\"processPayment()\">\r\n Record Payment\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-h-full tw-relative\">\r\n\r\n <!-- Data Grid Component -->\r\n <div class=\"tw-h-full tw-overflow-auto\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #paymentDetailsRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-w-full\">\r\n <div class=\"tw-font-medium tw-text-gray-900\">{{ row.student_name || 'N/A' }}</div>\r\n <div class=\"tw-text-sm tw-text-gray-500 tw-truncate\">ID: {{ row.feepay_student_id || 'N/A' }}</div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #amountRendererTemplate let-row=\"row\">\r\n <div class=\"tw-flex tw-flex-col tw-text-sm tw-items-end\">\r\n <span class=\"tw-text-gray-900 tw-font-semibold\">{{ formatCurrency(row.feepay_total_amount) }}</span>\r\n @if (row.feepay_late_fee_amount && row.feepay_late_fee_amount > 0) {\r\n <span class=\"tw-text-xs tw-text-red-600\">Late Fee: {{ formatCurrency(row.feepay_late_fee_amount) }}</span>\r\n }\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\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\"\r\n [ngClass]=\"getStatusBadgeClass(row)\">\r\n <cide-ele-icon size=\"2xs\" class=\"tw-mr-1\">\r\n {{ row.feepay_status === 'SUCCESS' || row.feepay_status === 'COMPLETED' ? 'check_circle' : \r\n row.feepay_status === 'PENDING' ? 'schedule' : 'error' }}\r\n </cide-ele-icon>\r\n {{ getStatusText(row) }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\" let-value=\"value\">\r\n <cide-ele-dropdown \r\n [items]=\"getActionDropdownItems(row)\"\r\n [config]=\"getDropdownConfig()\"\r\n (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n","import { Component, inject, signal, OnInit, computed, DestroyRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormBuilder, FormGroup, FormArray, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n NotificationService,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { CideFeeFeePaymentService } from '../../services/fee-payment.service';\nimport { FeePayment, MFeePaymentInsertUpdatePayload } from 'cloud-ide-lms-model';\n\n// Types\ninterface OutstandingFee {\n id: string;\n assignment_id?: string;\n fee_head: string;\n fee_category: string;\n due_date: Date;\n outstanding_amount: number;\n late_fee: number;\n penalty?: number;\n is_overdue: boolean;\n}\n\ninterface Student {\n _id: string;\n name: string;\n student_id: string;\n class?: string;\n section?: string;\n}\n\n@Component({\n selector: 'cide-fee-payment-process',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent\n ],\n templateUrl: './fee-payment-process.component.html'\n})\nexport class FeePaymentProcessComponent implements OnInit {\n private readonly destroyRef = inject(DestroyRef);\n private readonly fb = inject(FormBuilder);\n private readonly router = inject(Router);\n private readonly feePaymentService = inject(CideFeeFeePaymentService);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n\n paymentForm: FormGroup = this.fb.group({\n student_id: ['', [Validators.required]],\n student_search: [''],\n feepay_payment_date: [new Date().toISOString().split('T')[0], [Validators.required]],\n feepay_payment_mode: ['CASH', [Validators.required]],\n feepay_payment_method: ['CASH', [Validators.required]],\n feepay_payment_reference: [''],\n feepay_bank_name: [''],\n feepay_bank_branch_name: [''],\n feepay_bank_ifsc_code: [''],\n feepay_instrument_date: [''],\n feepay_cheque_number: [''],\n feepay_cheque_date: [''],\n feepay_bank_account_number: [''],\n feepay_transaction_reference: [''],\n feepay_discount_percentage: [0, [Validators.min(0), Validators.max(100)]],\n feepay_discount_on: [''],\n feepay_discount_reason: [''],\n feepay_remarks: [''],\n pay_full_outstanding: [false],\n fee_items: this.fb.array([])\n });\n\n loading = signal<boolean>(false);\n submitting = signal<boolean>(false);\n selectedStudent = signal<Student | null>(null);\n outstandingFees = signal<OutstandingFee[]>([]);\n showChequeDetails = signal<boolean>(false);\n showBankDetails = signal<boolean>(false);\n\n // Payment method options\n readonly paymentMethodOptions = [\n { value: 'CASH', label: 'Cash' },\n { value: 'CHEQUE', label: 'Cheque' },\n { value: 'DD', label: 'DD' },\n { value: 'ONLINE', label: 'Online' },\n { value: 'CARD', label: 'Card' },\n { value: 'UPI', label: 'UPI' },\n { value: 'NET_BANKING', label: 'Net Banking' },\n { value: 'BANK_TRANSFER', label: 'Bank Transfer' }\n ];\n\n // Computed values\n readonly selectedFeeItems = computed(() => {\n const items = this.feeItemsArray.controls;\n return items.filter((control, index) => {\n const isSelected = control.get('is_selected')?.value;\n return isSelected;\n });\n });\n\n readonly totalFeeAmount = computed(() => {\n let total = 0;\n this.feeItemsArray.controls.forEach(control => {\n if (control.get('is_selected')?.value) {\n total += parseFloat(control.get('amount_paid')?.value || '0');\n }\n });\n return total;\n });\n\n readonly totalLateFee = computed(() => {\n let total = 0;\n this.feeItemsArray.controls.forEach(control => {\n if (control.get('is_selected')?.value) {\n total += parseFloat(control.get('late_fee')?.value || '0');\n }\n });\n return total;\n });\n\n readonly totalPenalty = computed(() => {\n let total = 0;\n this.feeItemsArray.controls.forEach(control => {\n if (control.get('is_selected')?.value) {\n total += parseFloat(control.get('penalty')?.value || '0');\n }\n });\n return total;\n });\n\n readonly totalPayable = computed(() => {\n return this.totalFeeAmount() + this.totalLateFee() + this.totalPenalty();\n });\n\n // Get fee items form array\n get feeItemsArray(): FormArray {\n return this.paymentForm.get('fee_items') as FormArray;\n }\n\n ngOnInit(): void {\n this.setupPaymentMethodListener();\n }\n\n private setupPaymentMethodListener(): void {\n this.paymentForm.get('feepay_payment_method')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(method => {\n this.showChequeDetails.set(method === 'CHEQUE' || method === 'DD');\n this.showBankDetails.set(method === 'BANK_TRANSFER' || method === 'NET_BANKING');\n\n // Set required validators based on payment method\n if (this.showChequeDetails()) {\n this.paymentForm.get('feepay_cheque_number')?.setValidators([Validators.required]);\n this.paymentForm.get('feepay_cheque_date')?.setValidators([Validators.required]);\n this.paymentForm.get('feepay_bank_name')?.setValidators([Validators.required]);\n } else {\n this.paymentForm.get('feepay_cheque_number')?.clearValidators();\n this.paymentForm.get('feepay_cheque_date')?.clearValidators();\n this.paymentForm.get('feepay_bank_name')?.clearValidators();\n }\n\n if (this.showBankDetails()) {\n this.paymentForm.get('feepay_transaction_reference')?.setValidators([Validators.required]);\n } else {\n this.paymentForm.get('feepay_transaction_reference')?.clearValidators();\n }\n\n this.paymentForm.updateValueAndValidity();\n });\n }\n\n onStudentSearch(query: string | number | boolean | null | undefined): void {\n const searchQuery = String(query || '');\n if (searchQuery.length < 3) return;\n\n this.loading.set(true);\n // TODO: Implement student search API call\n // For now, mock data\n setTimeout(() => {\n const mockStudent: Student = {\n _id: 'STU001',\n name: 'John Doe',\n student_id: 'STU001',\n class: 'Class 10',\n section: 'A'\n };\n this.selectedStudent.set(mockStudent);\n this.paymentForm.patchValue({ student_id: mockStudent._id });\n this.loadOutstandingFees(mockStudent._id);\n this.loading.set(false);\n }, 500);\n }\n\n private loadOutstandingFees(studentId: string): void {\n this.loading.set(true);\n // TODO: Implement API call to get outstanding fees\n // Mock data\n setTimeout(() => {\n const mockFees: OutstandingFee[] = [\n {\n id: '1',\n assignment_id: 'ASSIGN001',\n fee_head: 'Tuition Fee - Semester 1',\n fee_category: 'TUITION',\n due_date: new Date('2024-12-15'),\n outstanding_amount: 25000,\n late_fee: 0,\n penalty: 0,\n is_overdue: false\n },\n {\n id: '2',\n assignment_id: 'ASSIGN002',\n fee_head: 'Library Fee',\n fee_category: 'LIBRARY',\n due_date: new Date('2024-12-10'),\n outstanding_amount: 2000,\n late_fee: 0,\n penalty: 0,\n is_overdue: true\n },\n {\n id: '3',\n assignment_id: 'ASSIGN003',\n fee_head: 'Late Fee',\n fee_category: 'OTHER',\n due_date: new Date('2024-12-10'),\n outstanding_amount: 500,\n late_fee: 500,\n penalty: 0,\n is_overdue: true\n }\n ];\n\n this.outstandingFees.set(mockFees);\n this.initializeFeeItems(mockFees);\n this.loading.set(false);\n }, 500);\n }\n\n private initializeFeeItems(fees: OutstandingFee[]): void {\n // Clear existing items\n while (this.feeItemsArray.length !== 0) {\n this.feeItemsArray.removeAt(0);\n }\n\n // Add fee items\n fees.forEach(fee => {\n const itemGroup = this.fb.group({\n assignment_id: [fee.assignment_id],\n fee_head: [fee.fee_head],\n fee_category: [fee.fee_category],\n outstanding_amount: [fee.outstanding_amount],\n is_selected: [false],\n amount_paid: [fee.outstanding_amount, [Validators.required, Validators.min(0)]],\n late_fee: [fee.late_fee],\n penalty: [fee.penalty || 0]\n });\n\n // Set max validator for amount_paid\n itemGroup.get('amount_paid')?.setValidators([\n Validators.required,\n Validators.min(0),\n Validators.max(fee.outstanding_amount)\n ]);\n\n this.feeItemsArray.push(itemGroup);\n });\n }\n\n togglePayFullOutstanding(): void {\n const payFull = this.paymentForm.get('pay_full_outstanding')?.value;\n\n this.feeItemsArray.controls.forEach(control => {\n control.patchValue({ is_selected: payFull });\n if (payFull) {\n const outstanding = control.get('outstanding_amount')?.value || 0;\n control.patchValue({ amount_paid: outstanding });\n }\n });\n }\n\n selectAllFees(): void {\n this.feeItemsArray.controls.forEach(control => {\n control.patchValue({ is_selected: true });\n const outstanding = control.get('outstanding_amount')?.value || 0;\n control.patchValue({ amount_paid: outstanding });\n });\n }\n\n clearAllFees(): void {\n this.feeItemsArray.controls.forEach(control => {\n control.patchValue({ is_selected: false, amount_paid: 0 });\n });\n this.paymentForm.patchValue({ pay_full_outstanding: false });\n }\n\n toggleFeeItem(index: number): void {\n const control = this.feeItemsArray.at(index);\n const isSelected = control.get('is_selected')?.value;\n control.patchValue({ is_selected: !isSelected });\n\n if (!isSelected) {\n const outstanding = control.get('outstanding_amount')?.value || 0;\n control.patchValue({ amount_paid: outstanding });\n } else {\n control.patchValue({ amount_paid: 0 });\n }\n }\n\n onAmountChange(index: number, value: string | number | boolean | null | undefined): void {\n const control = this.feeItemsArray.at(index);\n const outstanding = control.get('outstanding_amount')?.value || 0;\n const numValue = parseFloat(String(value || '0')) || 0;\n\n if (numValue > outstanding) {\n control.patchValue({ amount_paid: outstanding });\n this.notificationService.warning('Amount cannot exceed outstanding amount.');\n }\n }\n\n onSubmit(): void {\n if (this.paymentForm.invalid || this.submitting()) {\n this.paymentForm.markAllAsTouched();\n this.notificationService.warning('Please fill in all required fields correctly.');\n return;\n }\n\n if (this.selectedFeeItems().length === 0) {\n this.notificationService.warning('Please select at least one fee item to pay.');\n return;\n }\n\n if (this.totalPayable() <= 0) {\n this.notificationService.warning('Total payable amount must be greater than zero.');\n return;\n }\n\n this.submitting.set(true);\n\n const formValue = this.paymentForm.value;\n const selectedItems = this.feeItemsArray.controls\n .map((control, index) => ({ control, index }))\n .filter(({ control }) => control.get('is_selected')?.value)\n .map(({ control, index }) => ({\n assignment_id: control.get('assignment_id')?.value,\n amount_paid: control.get('amount_paid')?.value,\n late_fee: control.get('late_fee')?.value,\n penalty: control.get('penalty')?.value\n }));\n\n // Create payload with all fields - using Record to allow all schema fields\n const payloadData = {\n feepay_student_id: formValue.student_id,\n feepay_payment_date: new Date(formValue.feepay_payment_date),\n feepay_payment_mode: formValue.feepay_payment_mode,\n feepay_payment_reference: formValue.feepay_payment_reference ||\n formValue.feepay_cheque_number ||\n formValue.feepay_transaction_reference,\n feepay_bank_name: formValue.feepay_bank_name,\n feepay_bank_branch_name: formValue.feepay_bank_branch_name,\n feepay_bank_ifsc_code: formValue.feepay_bank_ifsc_code,\n feepay_instrument_date: formValue.feepay_instrument_date ? new Date(formValue.feepay_instrument_date) : undefined,\n feepay_cheque_number: formValue.feepay_cheque_number,\n feepay_cheque_date: formValue.feepay_cheque_date ? new Date(formValue.feepay_cheque_date) : undefined,\n feepay_bank_account_number: formValue.feepay_bank_account_number,\n feepay_transaction_reference: formValue.feepay_transaction_reference,\n feepay_discount_percentage: formValue.feepay_discount_percentage || 0,\n feepay_discount_on: formValue.feepay_discount_on,\n feepay_discount_reason: formValue.feepay_discount_reason,\n feepay_total_amount: this.totalPayable(),\n feepay_late_fee_amount: this.totalLateFee(),\n feepay_status: 'SUCCESS' as const,\n feepay_remarks: formValue.feepay_remarks\n } as FeePayment;\n\n const payload: MFeePaymentInsertUpdatePayload = new MFeePaymentInsertUpdatePayload(payloadData);\n\n this.feePaymentService.saveUpdateFeePayment(payload).subscribe({\n next: (response) => {\n if (response?.success) {\n this.notificationService.success('Payment recorded successfully!');\n this.router.navigate(['/control-panel/payment']);\n } else {\n this.notificationService.error(response?.message || 'Failed to record payment.');\n this.submitting.set(false);\n }\n },\n error: (error) => {\n console.error('Error recording payment:', error);\n this.notificationService.error('Failed to record payment. Please try again.');\n this.submitting.set(false);\n }\n });\n }\n\n onCancel(): void {\n if (this.paymentForm.dirty) {\n this.confirmationService.ask({\n title: 'Discard Changes?',\n message: 'You have unsaved changes. Are you sure you want to leave?',\n confirmText: 'Discard',\n cancelText: 'Cancel',\n type: 'warning'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.router.navigate(['/control-panel/payment']);\n }\n });\n } else {\n this.router.navigate(['/control-panel/payment']);\n }\n }\n\n formatCurrency(amount: number): string {\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n\n isOverdue(date: Date): boolean {\n return new Date(date) < new Date();\n }\n}\n","<!-- Payment Process Form -->\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]=\"paymentForm\" \r\n [class.tw-opacity-60]=\"loading()\" (ngSubmit)=\"onSubmit()\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-w-full tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">payment</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Record Payment</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0 sm:tw-space-x-3\">\r\n <!-- Back button or other actions can be added here if needed -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- 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 <div class=\"tw-space-y-4\">\r\n\r\n <!-- Student Information -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\r\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Student Information</h6>\r\n \r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <div>\r\n <cide-ele-input \r\n label=\"Search Student *\" \r\n formControlName=\"student_search\"\r\n placeholder=\"Enter student name or ID...\"\r\n size=\"sm\"\r\n leadingIcon=\"search\"\r\n (ngModelChange)=\"onStudentSearch($event)\">\r\n </cide-ele-input>\r\n \r\n @if (selectedStudent()) {\r\n <div class=\"tw-mt-2 tw-p-2 tw-bg-green-50 tw-border tw-border-green-200 tw-rounded\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-green-900\">{{ selectedStudent()?.name }}</div>\r\n <div class=\"tw-text-xs tw-text-green-700\">ID: {{ selectedStudent()?.student_id }}</div>\r\n @if (selectedStudent()?.class) {\r\n <div class=\"tw-text-xs tw-text-green-600\">{{ selectedStudent()?.class }} / {{ selectedStudent()?.section }}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n <cide-ele-input \r\n label=\"Payment Date *\" \r\n formControlName=\"feepay_payment_date\"\r\n type=\"date\"\r\n size=\"sm\"\r\n leadingIcon=\"calendar_today\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n\r\n <!-- Fee Selection -->\r\n @if (selectedStudent() && outstandingFees().length > 0) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-3\">\r\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900\">Select Fees to Pay</h6>\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-input \r\n formControlName=\"pay_full_outstanding\" \r\n type=\"checkbox\" \r\n size=\"sm\"\r\n (change)=\"togglePayFullOutstanding()\">\r\n </cide-ele-input>\r\n <span class=\"tw-text-sm tw-text-gray-700\">Pay full outstanding</span>\r\n </div>\r\n <button cideEleButton type=\"button\" variant=\"success\" size=\"xs\" (click)=\"selectAllFees()\">\r\n Select All\r\n </button>\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"xs\" (click)=\"clearAllFees()\">\r\n Clear\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div formArrayName=\"fee_items\" class=\"tw-space-y-2 tw-max-h-80 tw-overflow-y-auto tw-border tw-border-gray-200 tw-rounded-lg tw-p-3\">\r\n @for (item of feeItemsArray.controls; track $index) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-2 tw-bg-gray-50 tw-rounded tw-border tw-border-gray-200\"\r\n [formGroupName]=\"$index\">\r\n \r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-flex-1\">\r\n <cide-ele-input \r\n formControlName=\"is_selected\" \r\n type=\"checkbox\" \r\n size=\"sm\"\r\n (change)=\"toggleFeeItem($index)\">\r\n </cide-ele-input>\r\n \r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-sm tw-font-medium tw-text-gray-900\">\r\n {{ item.get('fee_head')?.value }}\r\n </div>\r\n <div class=\"tw-text-xs tw-text-gray-500\">\r\n Outstanding: {{ formatCurrency(item.get('outstanding_amount')?.value || 0) }}\r\n @if (item.get('late_fee')?.value > 0) {\r\n <span class=\"tw-text-red-600\"> | Late Fee: {{ formatCurrency(item.get('late_fee')?.value) }}</span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-input \r\n formControlName=\"amount_paid\"\r\n type=\"number\"\r\n placeholder=\"0.00\"\r\n size=\"sm\"\r\n [disabled]=\"!item.get('is_selected')?.value\"\r\n (ngModelChange)=\"onAmountChange($index, $event)\"\r\n class=\"tw-w-28\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Payment Details -->\r\n @if (selectedStudent()) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-p-4\">\r\n <h6 class=\"tw-text-base tw-font-semibold tw-text-gray-900 tw-mb-3\">Payment Details</h6>\r\n \r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4\">\r\n <cide-ele-select \r\n label=\"Payment Method *\" \r\n formControlName=\"feepay_payment_method\"\r\n [options]=\"paymentMethodOptions\"\r\n size=\"sm\"\r\n leadingIcon=\"payment\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select \r\n label=\"Payment Mode *\" \r\n formControlName=\"feepay_payment_mode\"\r\n [options]=\"[{value: 'OFFLINE', label: 'Offline'}, {value: 'ONLINE', label: 'Online'}]\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <!-- Cheque/DD Details -->\r\n @if (showChequeDetails()) {\r\n <div class=\"tw-mt-4 tw-p-3 tw-bg-blue-50 tw-rounded tw-border tw-border-blue-200\">\r\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-blue-900 tw-mb-3\">Cheque/DD Details</h6>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input \r\n label=\"Cheque/DD Number *\" \r\n formControlName=\"feepay_cheque_number\"\r\n placeholder=\"Enter cheque/DD number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input \r\n label=\"Cheque/DD Date *\" \r\n formControlName=\"feepay_cheque_date\"\r\n type=\"date\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mt-3\">\r\n <cide-ele-input \r\n label=\"Bank Name *\" \r\n formControlName=\"feepay_bank_name\"\r\n placeholder=\"Enter bank name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input \r\n label=\"Branch Name *\" \r\n formControlName=\"feepay_bank_branch_name\"\r\n placeholder=\"Enter branch name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-mt-3\">\r\n <cide-ele-input \r\n label=\"IFSC Code *\" \r\n formControlName=\"feepay_bank_ifsc_code\"\r\n placeholder=\"Enter IFSC code\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-mt-3\">\r\n <cide-ele-input \r\n label=\"Instrument Date *\" \r\n formControlName=\"feepay_instrument_date\"\r\n type=\"date\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Bank Transfer Details -->\r\n @if (showBankDetails()) {\r\n <div class=\"tw-mt-4 tw-p-3 tw-bg-green-50 tw-rounded tw-border tw-border-green-200\">\r\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-green-900 tw-mb-3\">Bank Transfer Details</h6>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input \r\n label=\"Bank Name\" \r\n formControlName=\"feepay_bank_name\"\r\n placeholder=\"Enter bank name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input \r\n label=\"Branch Name\" \r\n formControlName=\"feepay_bank_branch_name\"\r\n placeholder=\"Enter branch name\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3 tw-mt-3\">\r\n <cide-ele-input \r\n label=\"IFSC Code\" \r\n formControlName=\"feepay_bank_ifsc_code\"\r\n placeholder=\"Enter IFSC code\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input \r\n label=\"Account Number\" \r\n formControlName=\"feepay_bank_account_number\"\r\n placeholder=\"Enter account number\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n <div class=\"tw-mt-3\">\r\n <cide-ele-input \r\n label=\"Transaction Reference *\" \r\n formControlName=\"feepay_transaction_reference\"\r\n placeholder=\"Enter transaction reference\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Discount Section -->\r\n <div class=\"tw-mt-4 tw-p-3 tw-bg-purple-50 tw-rounded tw-border tw-border-purple-200\">\r\n <h6 class=\"tw-text-xs tw-font-semibold tw-text-purple-900 tw-mb-3\">Discount Information</h6>\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input \r\n label=\"Discount (%)\" \r\n formControlName=\"feepay_discount_percentage\"\r\n type=\"number\"\r\n placeholder=\"0\"\r\n size=\"sm\"\r\n [min]=\"0\"\r\n [max]=\"100\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select \r\n label=\"Discount On\" \r\n formControlName=\"feepay_discount_on\"\r\n [options]=\"[{value: 'SUB_TOTAL', label: 'Sub Total'}, {value: 'FEE_HEAD', label: 'Fee Head'}, {value: 'TOTAL', label: 'Total'}, {value: 'INSTALLMENT', label: 'Installment'}]\"\r\n size=\"sm\">\r\n </cide-ele-select>\r\n </div>\r\n <div class=\"tw-mt-3\">\r\n <cide-ele-textarea \r\n label=\"Discount Reason\" \r\n formControlName=\"feepay_discount_reason\"\r\n placeholder=\"Enter reason for discount...\"\r\n rows=\"2\"\r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Payment Reference -->\r\n <div class=\"tw-mt-4\">\r\n <cide-ele-input \r\n label=\"Payment Reference\" \r\n formControlName=\"feepay_payment_reference\"\r\n placeholder=\"Enter payment reference number\"\r\n size=\"sm\"\r\n leadingIcon=\"receipt\">\r\n </cide-ele-input>\r\n </div>\r\n\r\n <!-- Remarks -->\r\n <div class=\"tw-mt-4\">\r\n <cide-ele-textarea \r\n label=\"Remarks\" \r\n formControlName=\"feepay_remarks\"\r\n placeholder=\"Enter any additional remarks...\"\r\n rows=\"2\" \r\n size=\"sm\">\r\n </cide-ele-textarea>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Payment Summary -->\r\n @if (selectedStudent() && selectedFeeItems().length > 0) {\r\n <div class=\"tw-bg-gradient-to-r tw-from-green-50 tw-to-emerald-50 tw-rounded-lg tw-border tw-border-green-200 tw-p-4\">\r\n <h6 class=\"tw-text-base tw-font-semibold tw-text-green-900 tw-mb-3\">Payment Summary</h6>\r\n \r\n <div class=\"tw-space-y-3\">\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-2 tw-border-b tw-border-green-200\">\r\n <span class=\"tw-text-gray-700\">Fee Amount:</span>\r\n <span class=\"tw-font-semibold tw-text-gray-900\">{{ formatCurrency(totalFeeAmount()) }}</span>\r\n </div>\r\n \r\n @if (totalLateFee() > 0) {\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-2 tw-border-b tw-border-green-200\">\r\n <span class=\"tw-text-gray-700\">Late Fee Amount:</span>\r\n <span class=\"tw-font-semibold tw-text-red-600\">{{ formatCurrency(totalLateFee()) }}</span>\r\n </div>\r\n }\r\n \r\n @if (totalPenalty() > 0) {\r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-2 tw-border-b tw-border-green-200\">\r\n <span class=\"tw-text-gray-700\">Penalty Amount:</span>\r\n <span class=\"tw-font-semibold tw-text-red-600\">{{ formatCurrency(totalPenalty()) }}</span>\r\n </div>\r\n }\r\n \r\n <div class=\"tw-flex tw-justify-between tw-items-center tw-py-3 tw-border-t-2 tw-border-green-300 tw-mt-2\">\r\n <span class=\"tw-text-lg tw-font-bold tw-text-green-900\">Total Payable:</span>\r\n <span class=\"tw-text-2xl tw-font-bold tw-text-green-700\">{{ formatCurrency(totalPayable()) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- Form Validation Errors -->\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-justify-end tw-gap-3 tw-mt-6\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"onCancel()\" leftIcon=\"close\"\r\n [disabled]=\"loading()\">\r\n Cancel\r\n </button>\r\n\r\n <button cideEleButton type=\"submit\" variant=\"primary\" size=\"sm\" \r\n [disabled]=\"submitting() || paymentForm.invalid || selectedFeeItems().length === 0 || loading()\" \r\n [loading]=\"submitting()\" \r\n leftIcon=\"save\">\r\n {{ submitting() ? 'Processing...' : 'Record Payment' }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</div>\r\n\r\n","import { Component, inject, signal, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { CideFeeFeePaymentService } from '../../services/fee-payment.service';\nimport { generateObjectFromString } from 'cloud-ide-lms-model';\n\n@Component({\n selector: 'cide-fee-payment-view',\n standalone: true,\n imports: [CommonModule],\n template: `\n <div class=\"fee-payment-view-container\">\n <h1>View Fee Payment</h1>\n <p>Fee Payment View Component - Under Development</p>\n @if (loading()) {\n <p>Loading...</p>\n } @else if (feePayment()) {\n <div class=\"payment-details\">\n <p><strong>Receipt Number:</strong> {{ feePayment()?.feepay_receipt_number }}</p>\n <p><strong>Student ID:</strong> {{ feePayment()?.feepay_student_id }}</p>\n <p><strong>Payment Mode:</strong> {{ feePayment()?.feepay_payment_mode }}</p>\n <p><strong>Amount:</strong> {{ feePayment()?.feepay_total_amount }}</p>\n <p><strong>Status:</strong> {{ feePayment()?.feepay_status }}</p>\n </div>\n }\n <button (click)=\"goBack()\">Back to List</button>\n </div>\n `,\n styles: [`\n .fee-payment-view-container {\n padding: 20px;\n }\n .payment-details {\n margin: 20px 0;\n padding: 20px;\n border: 1px solid #ddd;\n border-radius: 4px;\n }\n .payment-details p {\n margin: 10px 0;\n }\n button {\n padding: 8px 16px;\n }\n `]\n})\nexport class FeePaymentViewComponent implements OnInit {\n private route = inject(ActivatedRoute);\n private router = inject(Router);\n private feePaymentService = inject(CideFeeFeePaymentService);\n\n loading = signal<boolean>(false);\n feePayment = signal<any>(null);\n\n ngOnInit(): void {\n const query = this.route.snapshot.paramMap.get('query');\n if (query) {\n try {\n const parsed = generateObjectFromString(query);\n if (parsed?.feepay_id) {\n this.loadFeePayment(parsed.feepay_id);\n }\n } catch (error) {\n console.error('Error parsing query:', error);\n }\n }\n }\n\n private loadFeePayment(id: string): void {\n this.loading.set(true);\n this.feePaymentService.getFeePaymentById({ feepay_id: id }).subscribe({\n next: (response) => {\n if (response.success && response.data) {\n this.feePayment.set(response.data);\n }\n this.loading.set(false);\n },\n error: (error) => {\n console.error('Error loading fee payment:', error);\n this.loading.set(false);\n }\n });\n }\n\n goBack(): void {\n this.router.navigate(['/control-panel/payment']);\n }\n}\n\n","import { Component, inject, signal, OnInit } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'cide-discount-rules',\r\n standalone: true,\r\n imports: [CommonModule, ReactiveFormsModule],\r\n template: `\r\n <div class=\"discount-rules-container\">\r\n <div class=\"header\">\r\n <h1>Discount Rules Management</h1>\r\n <button class=\"btn btn-primary\" (click)=\"openRuleModal()\">Create New Rule</button>\r\n </div>\r\n\r\n <!-- Tabs -->\r\n <div class=\"tabs\">\r\n <button class=\"tab\" [class.active]=\"activeTab() === 'rules'\" (click)=\"activeTab.set('rules')\">Discount Rules</button>\r\n <button class=\"tab\" [class.active]=\"activeTab() === 'applied'\" (click)=\"activeTab.set('applied')\">Applied Discounts</button>\r\n <button class=\"tab\" [class.active]=\"activeTab() === 'scholarships'\" (click)=\"activeTab.set('scholarships')\">Scholarships</button>\r\n </div>\r\n\r\n <!-- Rules Tab -->\r\n @if (activeTab() === 'rules') {\r\n <div class=\"rules-section\">\r\n <div class=\"table-container\">\r\n <table>\r\n <thead>\r\n <tr>\r\n <th>Rule Name</th>\r\n <th>Rule Code</th>\r\n <th>Discount Type</th>\r\n <th>Discount Value</th>\r\n <th>Applies To</th>\r\n <th>Priority</th>\r\n <th>Auto Apply</th>\r\n <th>Status</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for (rule of discountRules(); track rule.id) {\r\n <tr>\r\n <td>{{ rule.name }}</td>\r\n <td>{{ rule.code }}</td>\r\n <td><span class=\"badge\">{{ rule.discount_type }}</span></td>\r\n <td class=\"discount-value\">{{ rule.discount_type === 'PERCENTAGE' ? rule.value + '%' : 'โ‚น' + rule.value }}</td>\r\n <td>{{ rule.applies_to }}</td>\r\n <td><span class=\"priority\">{{ rule.priority }}</span></td>\r\n <td><span class=\"status-badge\" [class.active]=\"rule.auto_apply\">{{ rule.auto_apply ? 'Yes' : 'No' }}</span></td>\r\n <td><span class=\"status-badge\" [class.active]=\"rule.status === 'ACTIVE'\">{{ rule.status }}</span></td>\r\n <td>\r\n <button class=\"btn-icon\" (click)=\"editRule(rule)\">โœ๏ธ</button>\r\n <button class=\"btn-icon\" (click)=\"toggleRuleStatus(rule)\">๐Ÿ”„</button>\r\n <button class=\"btn-icon\" (click)=\"deleteRule(rule)\">๐Ÿ—‘๏ธ</button>\r\n </td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Rule Modal -->\r\n @if (showRuleModal()) {\r\n <div class=\"modal-overlay\" (click)=\"closeRuleModal()\">\r\n <div class=\"modal-content\" (click)=\"$event.stopPropagation()\">\r\n <div class=\"modal-header\">\r\n <h2>{{ editingRule() ? 'Edit' : 'Create' }} Discount Rule</h2>\r\n <button class=\"close-btn\" (click)=\"closeRuleModal()\">ร—</button>\r\n </div>\r\n <form [formGroup]=\"ruleForm\" class=\"modal-body\">\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label>Rule Name *</label>\r\n <input type=\"text\" formControlName=\"rule_name\" placeholder=\"e.g., Sibling Discount\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Rule Code *</label>\r\n <input type=\"text\" formControlName=\"rule_code\" placeholder=\"e.g., SIBLING_DISC\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Description</label>\r\n <textarea formControlName=\"description\" rows=\"3\" placeholder=\"Describe the discount rule...\"></textarea>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label>Discount Type *</label>\r\n <select formControlName=\"discount_type\">\r\n <option value=\"PERCENTAGE\">Percentage</option>\r\n <option value=\"FIXED_AMOUNT\">Fixed Amount</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Discount Value *</label>\r\n <input type=\"number\" formControlName=\"discount_value\" placeholder=\"Enter value\" />\r\n </div>\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Applies To Fee Categories *</label>\r\n <select formControlName=\"applies_to\" multiple>\r\n <option value=\"ALL\">All Categories</option>\r\n <option value=\"TUITION\">Tuition</option>\r\n <option value=\"EXAM\">Exam Fees</option>\r\n <option value=\"LIBRARY\">Library</option>\r\n <option value=\"LAB\">Lab</option>\r\n <option value=\"SPORTS\">Sports</option>\r\n <option value=\"TRANSPORT\">Transport</option>\r\n </select>\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Criteria (JSON Format)</label>\r\n <textarea formControlName=\"criteria_json\" rows=\"4\" placeholder='{\"sibling_count\": \">= 1\", \"staff_role\": \"TEACHER\"}'></textarea>\r\n <small>Define conditions for automatic discount application</small>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label>Priority</label>\r\n <input type=\"number\" formControlName=\"priority\" placeholder=\"1\" />\r\n <small>Higher priority rules apply first</small>\r\n </div>\r\n <div class=\"form-group checkbox-group\">\r\n <label><input type=\"checkbox\" formControlName=\"auto_apply\" /> Auto Apply</label>\r\n <label><input type=\"checkbox\" formControlName=\"stackable\" /> Stackable with other discounts</label>\r\n </div>\r\n </div>\r\n <div class=\"form-row\">\r\n <div class=\"form-group\">\r\n <label>Valid From</label>\r\n <input type=\"date\" formControlName=\"valid_from\" />\r\n </div>\r\n <div class=\"form-group\">\r\n <label>Valid To</label>\r\n <input type=\"date\" formControlName=\"valid_to\" />\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" (click)=\"closeRuleModal()\">Cancel</button>\r\n <button class=\"btn btn-primary\" (click)=\"saveRule()\" [disabled]=\"ruleForm.invalid\">Save Rule</button>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n `,\r\n styles: [`\r\n .discount-rules-container { padding: 20px; }\r\n .header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; }\r\n .btn { padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; font-size: 14px; }\r\n .btn-primary { background: #007bff; color: white; }\r\n .btn-secondary { background: #6c757d; color: white; }\r\n .tabs { display: flex; gap: 10px; margin-bottom: 20px; border-bottom: 2px solid #e0e0e0; }\r\n .tab { padding: 12px 24px; background: none; border: none; border-bottom: 3px solid transparent; cursor: pointer; font-weight: 500; }\r\n .tab.active { border-bottom-color: #007bff; color: #007bff; }\r\n .table-container { overflow-x: auto; background: white; border-radius: 8px; border: 1px solid #e0e0e0; }\r\n table { width: 100%; border-collapse: collapse; }\r\n thead { background: #f8f9fa; }\r\n th { padding: 12px; text-align: left; font-weight: 600; border-bottom: 2px solid #dee2e6; }\r\n td { padding: 12px; border-bottom: 1px solid #dee2e6; }\r\n .badge { padding: 4px 12px; border-radius: 12px; font-size: 12px; background: #e3f2fd; color: #1976d2; }\r\n .discount-value { font-weight: 600; color: #28a745; }\r\n .priority { display: inline-block; width: 30px; height: 30px; line-height: 30px; text-align: center; background: #ffc107; color: white; border-radius: 50%; font-weight: bold; }\r\n .status-badge { padding: 4px 12px; border-radius: 12px; font-size: 12px; background: #f8d7da; color: #721c24; }\r\n .status-badge.active { background: #d4edda; color: #155724; }\r\n .btn-icon { background: none; border: none; cursor: pointer; font-size: 18px; padding: 4px; }\r\n .modal-overlay { position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); display: flex; align-items: center; justify-content: center; z-index: 1000; }\r\n .modal-content { background: white; border-radius: 8px; max-width: 800px; width: 90%; max-height: 90vh; overflow-y: auto; }\r\n .modal-header { display: flex; justify-content: space-between; align-items: center; padding: 20px; border-bottom: 1px solid #e0e0e0; }\r\n .close-btn { background: none; border: none; font-size: 28px; cursor: pointer; color: #666; }\r\n .modal-body { padding: 20px; }\r\n .modal-footer { display: flex; justify-content: flex-end; gap: 10px; padding: 20px; border-top: 1px solid #e0e0e0; }\r\n .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; }\r\n .form-group { margin-bottom: 15px; }\r\n .form-group label { display: block; margin-bottom: 5px; font-weight: 500; font-size: 14px; }\r\n .form-group input, .form-group select, .form-group textarea { width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; }\r\n .form-group small { color: #666; font-size: 12px; }\r\n .checkbox-group { display: flex; flex-direction: column; gap: 8px; }\r\n .checkbox-group label { display: flex; align-items: center; gap: 8px; }\r\n `]\r\n})\r\nexport class DiscountRulesComponent implements OnInit {\r\n private fb = inject(FormBuilder);\r\n\r\n activeTab = signal<string>('rules');\r\n showRuleModal = signal<boolean>(false);\r\n editingRule = signal<any>(null);\r\n discountRules = signal<any[]>([]);\r\n\r\n ruleForm: FormGroup = this.fb.group({\r\n rule_name: ['', Validators.required],\r\n rule_code: ['', Validators.required],\r\n description: [''],\r\n discount_type: ['PERCENTAGE', Validators.required],\r\n discount_value: ['', [Validators.required, Validators.min(0)]],\r\n applies_to: [['ALL'], Validators.required],\r\n criteria_json: [''],\r\n priority: [1],\r\n auto_apply: [false],\r\n stackable: [false],\r\n valid_from: [''],\r\n valid_to: ['']\r\n });\r\n\r\n ngOnInit(): void {\r\n this.loadDiscountRules();\r\n }\r\n\r\n private loadDiscountRules(): void {\r\n // Mock data - replace with actual API call\r\n this.discountRules.set([\r\n { id: 1, name: 'Sibling 20% on term fees', code: 'SIBLING_TERM_20', discount_type: 'PERCENTAGE', value: 20, applies_to: 'Term Fees', priority: 1, auto_apply: true, status: 'ACTIVE' },\r\n { id: 2, name: 'Teachers 1st child โ‚น2000 on exam fees', code: 'TEACHER_EXAM_2000', discount_type: 'FIXED_AMOUNT', value: 2000, applies_to: 'Exam Fees', priority: 2, auto_apply: true, status: 'ACTIVE' },\r\n { id: 3, name: 'Early Payment Discount', code: 'EARLY_PAY_10', discount_type: 'PERCENTAGE', value: 10, applies_to: 'All', priority: 3, auto_apply: false, status: 'ACTIVE' }\r\n ]);\r\n }\r\n\r\n openRuleModal(): void {\r\n this.editingRule.set(null);\r\n this.ruleForm.reset({ discount_type: 'PERCENTAGE', priority: 1, applies_to: ['ALL'] });\r\n this.showRuleModal.set(true);\r\n }\r\n\r\n closeRuleModal(): void {\r\n this.showRuleModal.set(false);\r\n }\r\n\r\n editRule(rule: any): void {\r\n this.editingRule.set(rule);\r\n this.ruleForm.patchValue(rule);\r\n this.showRuleModal.set(true);\r\n }\r\n\r\n saveRule(): void {\r\n if (this.ruleForm.valid) {\r\n console.log('Saving rule:', this.ruleForm.value);\r\n this.closeRuleModal();\r\n this.loadDiscountRules();\r\n }\r\n }\r\n\r\n toggleRuleStatus(rule: any): void {\r\n console.log('Toggle status:', rule);\r\n }\r\n\r\n deleteRule(rule: any): void {\r\n if (confirm('Are you sure you want to delete this rule?')) {\r\n console.log('Delete rule:', rule);\r\n }\r\n }\r\n}\r\n\r\n","import { Component, inject, signal, OnInit, OnDestroy, computed, ViewChild, ElementRef, input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DestroyRef } from '@angular/core';\nimport {\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n NotificationService,\n ConfirmationService\n} from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent, CideLytSharedWrapperSetupParam } from 'cloud-ide-layout';\n\ninterface TagCategory {\n id: string;\n name: string;\n icon: string;\n tags: Tag[];\n}\n\ninterface Tag {\n code: string;\n description: string;\n example?: string;\n}\n\n@Component({\n selector: 'cide-receipt-template-designer',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideTextareaComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideSelectComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './template-designer.component.html',\n styleUrl: './template-designer.component.scss'\n})\nexport class TemplateDesignerComponent extends CideLytSharedWrapperComponent implements OnInit, OnDestroy {\n public override shared_wrapper_setup_param = input<Partial<CideLytSharedWrapperSetupParam>>({\n sypg_page_code: \"receipt_template\"\n });\n private readonly fb = inject(FormBuilder);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n private readonly destroyRef = inject(DestroyRef);\n \n @ViewChild('htmlEditor', { static: false }) htmlEditorRef?: ElementRef<HTMLTextAreaElement>;\n\n templateForm: FormGroup = this.fb.group({\n template_name: ['', Validators.required],\n template_code: ['', Validators.required],\n template_type: ['PAYMENT', Validators.required],\n template_for: ['BOTH'],\n is_default: [false],\n template_html: ['', Validators.required],\n css_styles: [''],\n tag_search: [''], // For tag search input\n preview_type: ['STUDENT'] // For preview type selector\n });\n\n readonly activeCategory = signal<string>('entity');\n readonly tagSearchQuery = signal<string>('');\n readonly loading = signal<boolean>(false);\n readonly saving = signal<boolean>(false);\n\n readonly tagCategories: TagCategory[] = [\n {\n id: 'entity',\n name: 'Entity/School',\n icon: 'business',\n tags: [\n { code: '[school_id]', description: 'School ID', example: 'SCH001' },\n { code: '[school_name]', description: 'School Name', example: 'Dream Dale Public School' },\n { code: '[school_logo]', description: 'School Logo URL', example: 'https://...' },\n { code: '[school_address]', description: 'School Address', example: 'Shastrinagar, Bhandara' },\n { code: '[school_phone]', description: 'School Phone', example: '+91-1234567890' }\n ]\n },\n {\n id: 'student',\n name: 'Student Info',\n icon: 'person',\n tags: [\n { code: '[fullName]', description: 'Full Name', example: 'AASHI SANJAY NANDURKAR' },\n { code: '[gender]', description: 'Gender', example: 'Female' },\n { code: '[mother_name]', description: 'Mother Name', example: 'Mother Name' },\n { code: '[father_name]', description: 'Father Name', example: 'SANJAY NANDURKAR' },\n { code: '[nationality]', description: 'Nationality', example: 'Indian' },\n { code: '[dob]', description: 'Date of Birth', example: '01/01/2010' },\n { code: '[current_address]', description: 'Current Address', example: '123 Main Street' },\n { code: '[permanant_address]', description: 'Permanent Address', example: '123 Main Street' }\n ]\n },\n {\n id: 'academic',\n name: 'Academic',\n icon: 'school',\n tags: [\n { code: '[academicYear_name]', description: 'Academic Year', example: 'AY 2023-2024' },\n { code: '[class_name]', description: 'Class Name', example: '4th' },\n { code: '[section_name]', description: 'Section Name', example: 'A' }\n ]\n },\n {\n id: 'fee',\n name: 'Fee Details',\n icon: 'receipt',\n tags: [\n { code: '[fees_heads_name_0]', description: 'Fee Head Name (Index 0)', example: 'Yearly Fees' },\n { code: '[fees_heads_value_0]', description: 'Fee Head Value (Index 0)', example: '14300' },\n { code: '[total]', description: 'Total Amount', example: '17500.00' },\n { code: '[installment_name]', description: 'Installment Name', example: '1ST INSTALL(APRIL)' },\n { code: '[from_date]', description: 'From Date', example: '01/04/2024' },\n { code: '[to_date]', description: 'To Date', example: '30/04/2024' },\n { code: '[sub_amount]', description: 'Sub Amount', example: '7000.00' }\n ]\n },\n {\n id: 'payment',\n name: 'Payment',\n icon: 'payment',\n tags: [\n { code: '[date_of_transaction]', description: 'Transaction Date', example: '09/12/2023' },\n { code: '[payment_id]', description: 'Payment ID', example: 'PAY-2024-001' },\n { code: '[payment_mode]', description: 'Payment Mode', example: 'Cash' },\n { code: '[transaction_no]', description: 'Transaction Number', example: 'TXN-123456' },\n { code: '[bank_name]', description: 'Bank Name', example: 'State Bank of India' },\n { code: '[branch_name]', description: 'Branch Name', example: 'Bhandara Main Branch' },\n { code: '[ifsc_code]', description: 'IFSC Code', example: 'SBIN0001234' }\n ]\n },\n {\n id: 'latefee',\n name: 'Late Fee',\n icon: 'schedule',\n tags: [\n { code: '[late_fees_total]', description: 'Late Fees Total', example: '0.00' },\n { code: '[late_fees]', description: 'Late Fees', example: '0.00' },\n { code: '[late_fees_type]', description: 'Late Fees Type', example: 'Fixed Amount' },\n { code: '[late_fees_days]', description: 'Late Fees Days', example: '0' },\n { code: '[total_late_fees]', description: 'Total Late Fees', example: '0.00' }\n ]\n },\n {\n id: 'amount',\n name: 'Amount',\n icon: 'currency_rupee',\n tags: [\n { code: '[valid_amount]', description: 'Valid Amount', example: '17500.00' },\n { code: '[amount_in_words]', description: 'Amount in Words', example: 'Seventeen Thousand...' },\n { code: '[total_discount]', description: 'Total Discount', example: '0.00' }\n ]\n },\n {\n id: 'receipt',\n name: 'Receipt',\n icon: 'description',\n tags: [\n { code: '[reciept_no]', description: 'Receipt Number', example: 'RCP-2024-001234' },\n { code: '[udias_no]', description: 'UDIAS Number', example: 'UDIAS-2024-001' }\n ]\n }\n ];\n\n readonly filteredTags = computed(() => {\n const category = this.tagCategories.find(cat => cat.id === this.activeCategory());\n if (!category) return [];\n \n const query = this.tagSearchQuery().toLowerCase();\n if (!query) return category.tags;\n \n return category.tags.filter(tag => \n tag.code.toLowerCase().includes(query) || \n tag.description.toLowerCase().includes(query)\n );\n });\n\n readonly previewHtml = computed(() => {\n const htmlContent = this.getPreviewWithSampleData();\n return this.sanitizer.bypassSecurityTrustHtml(htmlContent);\n });\n\n constructor() {\n super();\n }\n\n override ngOnInit(): void {\n super.ngOnInit();\n this.loadDefaultTemplate();\n this.setupFormListeners();\n }\n\n private setupFormListeners(): void {\n // Listen to tag search changes\n this.templateForm.get('tag_search')?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((query: string) => {\n this.onTagSearch(query || '');\n });\n }\n\n ngOnDestroy(): void {\n // Cleanup handled by takeUntilDestroyed\n }\n\n insertTag(tag: Tag): void {\n const textarea = this.htmlEditorRef?.nativeElement;\n if (!textarea) return;\n\n const start = textarea.selectionStart;\n const end = textarea.selectionEnd;\n const currentValue = this.templateForm.get('template_html')?.value || '';\n const newValue = currentValue.substring(0, start) + tag.code + currentValue.substring(end);\n \n this.templateForm.patchValue({ template_html: newValue });\n \n // Restore cursor position after tag insertion\n setTimeout(() => {\n textarea.focus();\n const newPosition = start + tag.code.length;\n textarea.setSelectionRange(newPosition, newPosition);\n }, 0);\n }\n\n private getPreviewWithSampleData(): string {\n let html = this.templateForm.get('template_html')?.value || '';\n \n // Sample data for all tags\n const sampleData: Record<string, string> = {\n '[school_id]': 'SCH001',\n '[school_name]': 'Dream Dale Public School, Bhandara',\n '[school_logo]': 'https://via.placeholder.com/150',\n '[school_address]': 'Shastrinagar, Near Dasara maidan, Bhandara-441904',\n '[school_phone]': '+91-1234567890',\n '[fullName]': 'AASHI SANJAY NANDURKAR',\n '[gender]': 'Female',\n '[mother_name]': 'Mother Name',\n '[father_name]': 'SANJAY NANDURKAR',\n '[nationality]': 'Indian',\n '[dob]': '01/01/2010',\n '[current_address]': '123 Main Street, Bhandara',\n '[permanant_address]': '123 Main Street, Bhandara',\n '[academicYear_name]': 'AY 2023-2024',\n '[class_name]': '4th',\n '[section_name]': 'A',\n '[fees_heads_name_0]': 'Yearly Fees',\n '[fees_heads_value_0]': '14300',\n '[total]': '17500.00',\n '[installment_name]': '1ST INSTALL(APRIL)',\n '[from_date]': '01/04/2024',\n '[to_date]': '30/04/2024',\n '[sub_amount]': '7000.00',\n '[date_of_transaction]': '09/12/2023',\n '[payment_id]': 'PAY-2024-001',\n '[payment_mode]': 'Cash',\n '[transaction_no]': 'TXN-123456',\n '[bank_name]': 'State Bank of India',\n '[branch_name]': 'Bhandara Main Branch',\n '[ifsc_code]': 'SBIN0001234',\n '[late_fees_total]': '0.00',\n '[late_fees]': '0.00',\n '[late_fees_type]': 'Fixed Amount',\n '[late_fees_days]': '0',\n '[total_late_fees]': '0.00',\n '[valid_amount]': '17500.00',\n '[amount_in_words]': 'Seventeen Thousand Five Hundred Rupees Only',\n '[total_discount]': '0.00',\n '[reciept_no]': 'RCP-2024-001234',\n '[udias_no]': 'UDIAS-2024-001'\n };\n\n // Replace all tags with sample data\n Object.entries(sampleData).forEach(([tag, value]) => {\n const escapedTag = tag.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n html = html.replace(new RegExp(escapedTag, 'g'), value);\n });\n\n return html;\n }\n\n private loadDefaultTemplate(): void {\n const defaultTemplate = `<!DOCTYPE html>\n<html>\n<head>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; }\n .receipt-header { text-align: center; border-bottom: 2px solid #000; padding-bottom: 15px; margin-bottom: 20px; }\n .receipt-body { margin: 20px 0; }\n .receipt-footer { margin-top: 30px; text-align: center; border-top: 1px solid #000; padding-top: 15px; }\n table { width: 100%; border-collapse: collapse; margin: 15px 0; }\n table td { padding: 8px; }\n .label { font-weight: bold; }\n .amount { font-size: 18px; font-weight: bold; }\n </style>\n</head>\n<body>\n <div class=\"receipt-header\">\n <h2>[school_name]</h2>\n <p>[school_address]</p>\n <h3>FEE RECEIPT</h3>\n </div>\n <div class=\"receipt-body\">\n <table>\n <tr><td class=\"label\">Receipt No:</td><td>[reciept_no]</td></tr>\n <tr><td class=\"label\">Date:</td><td>[date_of_transaction]</td></tr>\n <tr><td class=\"label\">Student Name:</td><td>[fullName]</td></tr>\n <tr><td class=\"label\">Class/Section:</td><td>[class_name] [section_name]</td></tr>\n <tr><td class=\"label\">Payment Mode:</td><td>[payment_mode]</td></tr>\n </table>\n <table>\n <tr><td class=\"label\">Total Amount:</td><td class=\"amount\">โ‚น[total]</td></tr>\n <tr><td class=\"label\">Amount in Words:</td><td>[amount_in_words]</td></tr>\n </table>\n </div>\n <div class=\"receipt-footer\">\n <p>Authorised Signature</p>\n </div>\n</body>\n</html>`;\n\n this.templateForm.patchValue({\n template_name: 'Default Receipt Template',\n template_code: 'DEFAULT_RECEIPT',\n template_type: 'PAYMENT',\n template_html: defaultTemplate\n });\n }\n\n onCategoryChange(categoryId: string): void {\n this.activeCategory.set(categoryId);\n this.tagSearchQuery.set(''); // Clear search when changing category\n }\n\n onTagSearch(query: string): void {\n this.tagSearchQuery.set(query);\n }\n\n saveTemplate(): void {\n if (this.templateForm.invalid) {\n this.templateForm.markAllAsTouched();\n this.notificationService.warning('Please fill all required fields.');\n return;\n }\n\n this.saving.set(true);\n // TODO: Implement API call to save template\n setTimeout(() => {\n this.notificationService.success('Template saved successfully!');\n this.saving.set(false);\n }, 1000);\n }\n\n loadTemplates(): void {\n this.notificationService.info('Load templates functionality coming soon.');\n }\n}\n","<!-- Receipt Template Designer -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"shared_wrapper_setup_param()\">\n \n <!-- Action Buttons in Breadcrumb Area -->\n <div breadcrumb-actions>\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"loadTemplates()\" leftIcon=\"folder_open\">\n Load Template\n </button>\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" (click)=\"saveTemplate()\" leftIcon=\"save\"\n [disabled]=\"saving() || templateForm.invalid\" [loading]=\"saving()\">\n Save Template\n </button>\n </div>\n\n <!-- Main Content - Three Column Layout -->\n <div class=\"tw-w-full tw-h-full tw-p-4\">\n <div class=\"tw-grid tw-grid-cols-12 tw-gap-4 tw-h-full\">\n \n <!-- Left Sidebar - Tag Categories & Tags -->\n <div class=\"tw-col-span-12 lg:tw-col-span-3 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden tw-flex tw-flex-col\">\n <!-- Tag Categories Header -->\n <div class=\"tw-p-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-2\">Available Tags</h6>\n <cide-ele-input\n formControlName=\"tag_search\"\n placeholder=\"Search tags...\"\n size=\"sm\"\n leadingIcon=\"search\">\n </cide-ele-input>\n </div>\n\n <!-- Category Tabs -->\n <div class=\"tw-flex tw-flex-wrap tw-gap-1 tw-p-2 tw-border-b tw-border-gray-200 tw-bg-gray-50 tw-overflow-x-auto\">\n @for (category of tagCategories; track category.id) {\n <button\n type=\"button\"\n class=\"tw-px-2 tw-py-1 tw-text-xs tw-font-medium tw-rounded tw-transition-colors tw-whitespace-nowrap\"\n [class.tw-bg-blue-100]=\"activeCategory() === category.id\"\n [class.tw-text-blue-700]=\"activeCategory() === category.id\"\n [class.tw-bg-gray-100]=\"activeCategory() !== category.id\"\n [class.tw-text-gray-700]=\"activeCategory() !== category.id\"\n (click)=\"onCategoryChange(category.id)\"\n [title]=\"category.name\">\n <cide-ele-icon class=\"tw-w-3 tw-h-3 tw-inline-block tw-mr-1\">{{ category.icon }}</cide-ele-icon>\n <span class=\"tw-hidden sm:tw-inline\">{{ category.name }}</span>\n </button>\n }\n </div>\n\n <!-- Tags List -->\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-2\">\n @if (filteredTags().length > 0) {\n <div class=\"tw-space-y-1\">\n @for (tag of filteredTags(); track tag.code) {\n <button\n type=\"button\"\n class=\"tw-w-full tw-text-left tw-p-2 tw-rounded tw-border tw-border-gray-200 tw-bg-white hover:tw-bg-blue-50 hover:tw-border-blue-300 tw-transition-colors tw-cursor-pointer tw-group\"\n (click)=\"insertTag(tag)\"\n [title]=\"tag.description\">\n <div class=\"tw-flex tw-items-start tw-justify-between tw-gap-2\">\n <div class=\"tw-flex-1 tw-min-w-0\">\n <code class=\"tw-text-xs tw-font-mono tw-text-blue-600 tw-font-semibold tw-block tw-break-all\">\n {{ tag.code }}\n </code>\n <span class=\"tw-text-xs tw-text-gray-600 tw-block tw-mt-1\">{{ tag.description }}</span>\n @if (tag.example) {\n <span class=\"tw-text-xs tw-text-gray-400 tw-block tw-mt-0.5\">e.g., {{ tag.example }}</span>\n }\n </div>\n <cide-ele-icon class=\"tw-w-4 tw-h-4 tw-text-gray-400 group-hover:tw-text-blue-600 tw-flex-shrink-0 tw-mt-0.5\">add_circle</cide-ele-icon>\n </div>\n </button>\n }\n </div>\n } @else {\n <div class=\"tw-text-center tw-py-8 tw-text-gray-500\">\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-mx-auto tw-mb-2 tw-text-gray-400\">search_off</cide-ele-icon>\n <p class=\"tw-text-xs\">No tags found</p>\n </div>\n }\n </div>\n </div>\n\n <!-- Middle Column - HTML Editor -->\n <div class=\"tw-col-span-12 lg:tw-col-span-5 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col tw-overflow-hidden\">\n <div class=\"tw-p-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-mb-4\">Template Configuration</h6>\n \n <form [formGroup]=\"templateForm\" class=\"tw-space-y-3\">\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n <cide-ele-input\n label=\"Template Name *\"\n formControlName=\"template_name\"\n placeholder=\"e.g., Standard Receipt\"\n size=\"sm\">\n </cide-ele-input>\n\n <cide-ele-input\n label=\"Template Code *\"\n formControlName=\"template_code\"\n placeholder=\"e.g., STD_RECEIPT_01\"\n size=\"sm\">\n </cide-ele-input>\n </div>\n\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-3\">\n <cide-ele-select\n label=\"Template Type *\"\n formControlName=\"template_type\"\n [options]=\"[{value: 'PAYMENT', label: 'Payment Receipt'}, {value: 'REFUND', label: 'Refund Receipt'}, {value: 'PROVISIONAL', label: 'Provisional Receipt'}]\"\n size=\"sm\">\n </cide-ele-select>\n\n <cide-ele-select\n label=\"Template For\"\n formControlName=\"template_for\"\n [options]=\"[{value: 'STUDENT', label: 'Student'}, {value: 'OFFICE', label: 'Office'}, {value: 'BOTH', label: 'Both'}]\"\n size=\"sm\">\n </cide-ele-select>\n </div>\n\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-p-2 tw-bg-gray-50 tw-rounded\">\n <cide-ele-input formControlName=\"is_default\" type=\"checkbox\" size=\"sm\"></cide-ele-input>\n <span class=\"tw-text-xs tw-text-gray-700\">Set as Default Template</span>\n </div>\n </form>\n </div>\n\n <div class=\"tw-flex-1 tw-flex tw-flex-col tw-overflow-hidden\">\n <div class=\"tw-p-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">HTML Template *</h6>\n <span class=\"tw-text-xs tw-text-gray-500\">Click tags on left to insert</span>\n </div>\n </div>\n <div class=\"tw-flex-1 tw-p-3 tw-overflow-hidden\">\n <cide-ele-textarea\n #htmlEditor\n formControlName=\"template_html\"\n placeholder=\"Enter HTML template code here... Use tags from the left sidebar.\"\n rows=\"20\"\n size=\"sm\"\n class=\"tw-h-full tw-font-mono tw-text-xs\">\n </cide-ele-textarea>\n </div>\n </div>\n </div>\n\n <!-- Right Column - Live Preview -->\n <div class=\"tw-col-span-12 lg:tw-col-span-4 tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-flex tw-flex-col tw-overflow-hidden\">\n <div class=\"tw-p-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\n <div class=\"tw-flex tw-items-center tw-justify-between\">\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900\">Live Preview</h6>\n <div class=\"tw-flex tw-items-center tw-gap-2\">\n <cide-ele-select\n formControlName=\"preview_type\"\n [options]=\"[{value: 'STUDENT', label: 'Student'}, {value: 'OFFICE', label: 'Office'}]\"\n size=\"xs\"\n class=\"tw-w-24\">\n </cide-ele-select>\n <cide-ele-icon class=\"tw-w-4 tw-h-4 tw-text-gray-400\" title=\"Auto-refreshes on template change\">sync</cide-ele-icon>\n </div>\n </div>\n </div>\n \n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4 tw-bg-gray-50\">\n <div class=\"tw-bg-white tw-shadow-sm tw-rounded tw-p-4 tw-min-h-full\" [innerHTML]=\"previewHtml()\"></div>\n </div>\n </div>\n\n </div>\n </div>\n</cide-lyt-shared-wrapper>\n\n","import { Component, inject, signal, OnInit, computed } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ReactiveFormsModule, FormBuilder, FormGroup } from '@angular/forms';\r\nimport {\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideEleButtonComponent,\r\n CideIconComponent,\r\n CideEleDataGridComponent,\r\n type GridConfiguration,\r\n type GridEvent,\r\n type SelectOption,\r\n NotificationService\r\n} from 'cloud-ide-element';\r\nimport { ACADEMIC_YEAR_SERVICE_TOKEN, CLASS_PROGRAM_MASTER_SERVICE_TOKEN, type IAcademicYearService, type IClassProgramMasterService } from 'cloud-ide-shared';\r\nimport { type academicYearControllerResponse, type AcaAcademicYear, type classProgramMasterControllerResponse, type AcaClassProgramMasterResponse } from 'cloud-ide-lms-model';\r\n\r\ninterface CollectionByDateData {\r\n date: Date;\r\n receipt_count: number;\r\n cash: number;\r\n online: number;\r\n cheque: number;\r\n other: number;\r\n total: number;\r\n}\r\n\r\ninterface CollectionByClassData {\r\n class: string;\r\n student_count: number;\r\n receipt_count: number;\r\n total: number;\r\n average: number;\r\n}\r\n\r\n@Component({\r\n selector: 'cide-collection-report',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ReactiveFormsModule,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideEleButtonComponent,\r\n CideIconComponent,\r\n CideEleDataGridComponent\r\n ],\r\n templateUrl: './collection-report.component.html',\r\n styleUrl: './collection-report.component.scss'\r\n})\r\nexport class CollectionReportComponent implements OnInit {\r\n private readonly fb = inject(FormBuilder);\r\n private readonly academicYearService = inject<IAcademicYearService>(ACADEMIC_YEAR_SERVICE_TOKEN);\r\n private readonly classProgramService = inject<IClassProgramMasterService>(CLASS_PROGRAM_MASTER_SERVICE_TOKEN);\r\n private readonly notificationService = inject(NotificationService);\r\n\r\n filterForm: FormGroup = this.fb.group({\r\n date_from: [''],\r\n date_to: [''],\r\n academic_year: [''],\r\n class_program: [''],\r\n payment_mode: ['']\r\n });\r\n\r\n readonly loading = signal<boolean>(false);\r\n readonly collectionByDate = signal<CollectionByDateData[]>([]);\r\n readonly collectionByClass = signal<CollectionByClassData[]>([]);\r\n readonly academicYearOptions = signal<SelectOption[]>([]);\r\n readonly classOptions = signal<SelectOption[]>([]);\r\n\r\n readonly paymentModeOptions = [\r\n { value: '', label: 'All Modes' },\r\n { value: 'CASH', label: 'Cash' },\r\n { value: 'ONLINE', label: 'Online' },\r\n { value: 'CHEQUE', label: 'Cheque' },\r\n { value: 'DD', label: 'DD' },\r\n { value: 'UPI', label: 'UPI' },\r\n { value: 'CARD', label: 'Card' },\r\n { value: 'NET_BANKING', label: 'Net Banking' },\r\n { value: 'BANK_TRANSFER', label: 'Bank Transfer' }\r\n ];\r\n\r\n readonly summary = computed(() => {\r\n const byDate = this.collectionByDate();\r\n return {\r\n total_collection: byDate.reduce((sum, row) => sum + row.total, 0),\r\n total_receipts: byDate.reduce((sum, row) => sum + row.receipt_count, 0),\r\n online_payments: byDate.reduce((sum, row) => sum + row.online, 0),\r\n cash_payments: byDate.reduce((sum, row) => sum + row.cash, 0)\r\n };\r\n });\r\n\r\n readonly totalReceipts = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.receipt_count, 0)\r\n );\r\n \r\n readonly totalCash = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.cash, 0)\r\n );\r\n \r\n readonly totalOnline = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.online, 0)\r\n );\r\n \r\n readonly totalCheque = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.cheque, 0)\r\n );\r\n \r\n readonly totalOther = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.other, 0)\r\n );\r\n \r\n readonly grandTotal = computed(() => \r\n this.collectionByDate().reduce((sum, row) => sum + row.total, 0)\r\n );\r\n\r\n // Grid configuration for Collection by Date\r\n readonly dateGridConfig = computed<GridConfiguration<CollectionByDateData>>(() => ({\r\n id: 'collection-by-date-grid',\r\n columns: [\r\n {\r\n key: 'date',\r\n header: 'Date',\r\n type: 'date',\r\n width: '120px',\r\n sortable: true\r\n },\r\n {\r\n key: 'receipt_count',\r\n header: 'Total Receipts',\r\n type: 'number',\r\n width: '120px',\r\n align: 'center',\r\n sortable: true\r\n },\r\n {\r\n key: 'cash',\r\n header: 'Cash',\r\n type: 'number',\r\n width: '120px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n },\r\n {\r\n key: 'online',\r\n header: 'Online',\r\n type: 'number',\r\n width: '120px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n },\r\n {\r\n key: 'cheque',\r\n header: 'Cheque',\r\n type: 'number',\r\n width: '120px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n },\r\n {\r\n key: 'other',\r\n header: 'Other',\r\n type: 'number',\r\n width: '120px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n },\r\n {\r\n key: 'total',\r\n header: 'Total Amount',\r\n type: 'number',\r\n width: '140px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n }\r\n ],\r\n data: this.collectionByDate(),\r\n trackBy: 'date',\r\n pagination: {\r\n enabled: false,\r\n pageSize: 10,\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: false,\r\n showPageInfo: false,\r\n showRefresh: false\r\n },\r\n search: {\r\n enabled: false,\r\n placeholder: 'Search...',\r\n searchableColumns: [],\r\n debounceMs: 300\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: false\r\n },\r\n responsive: true\r\n }));\r\n\r\n // Grid configuration for Collection by Class\r\n readonly classGridConfig = computed<GridConfiguration<CollectionByClassData>>(() => ({\r\n id: 'collection-by-class-grid',\r\n columns: [\r\n {\r\n key: 'class',\r\n header: 'Class/Program',\r\n type: 'text',\r\n width: '200px',\r\n sortable: true\r\n },\r\n {\r\n key: 'student_count',\r\n header: 'Total Students',\r\n type: 'number',\r\n width: '140px',\r\n align: 'center',\r\n sortable: true\r\n },\r\n {\r\n key: 'receipt_count',\r\n header: 'Receipts',\r\n type: 'number',\r\n width: '120px',\r\n align: 'center',\r\n sortable: true\r\n },\r\n {\r\n key: 'total',\r\n header: 'Total Collected',\r\n type: 'number',\r\n width: '150px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n },\r\n {\r\n key: 'average',\r\n header: 'Average per Student',\r\n type: 'number',\r\n width: '160px',\r\n align: 'right',\r\n sortable: true,\r\n formatter: {\r\n type: 'currency',\r\n format: 'INR'\r\n }\r\n }\r\n ],\r\n data: this.collectionByClass(),\r\n trackBy: 'class',\r\n pagination: {\r\n enabled: false,\r\n pageSize: 10,\r\n pageSizeOptions: [10, 25, 50, 100],\r\n showQuickJump: false,\r\n showPageInfo: false,\r\n showRefresh: false\r\n },\r\n search: {\r\n enabled: false,\r\n placeholder: 'Search...',\r\n searchableColumns: [],\r\n debounceMs: 300\r\n },\r\n loading: {\r\n useDefer: true,\r\n skeletonRows: 5,\r\n showOverlay: false\r\n },\r\n responsive: true\r\n }));\r\n\r\n ngOnInit(): void {\r\n this.loadAcademicYears();\r\n this.loadClassPrograms();\r\n this.loadReportData();\r\n }\r\n\r\n private loadAcademicYears(): void {\r\n this.academicYearService.getAcademicYearList({ pageIndex: 1, pageSize: 100, pagination: false }).subscribe({\r\n next: (response: academicYearControllerResponse) => {\r\n if (response?.success && response?.data) {\r\n const academicYears: AcaAcademicYear[] = Array.isArray(response.data) ? response.data : [];\r\n this.academicYearOptions.set([\r\n { value: '', label: 'All Years' },\r\n ...academicYears.map((ay: AcaAcademicYear) => ({\r\n value: ay._id || '',\r\n label: `${ay.acayr_name || ''} (${ay.acayr_code || ''})`\r\n }))\r\n ]);\r\n }\r\n },\r\n error: () => {\r\n this.academicYearOptions.set([{ value: '', label: 'All Years' }]);\r\n }\r\n });\r\n }\r\n\r\n private loadClassPrograms(): void {\r\n this.classProgramService.searchClassProgramMasters({ pagination: false }).subscribe({\r\n next: (response: classProgramMasterControllerResponse) => {\r\n if (response?.success && response?.data) {\r\n const classPrograms: AcaClassProgramMasterResponse[] = Array.isArray(response.data) ? response.data : [];\r\n this.classOptions.set([\r\n { value: '', label: 'All Classes' },\r\n ...classPrograms.map((cp: AcaClassProgramMasterResponse) => ({\r\n value: cp._id || '',\r\n label: cp.acacpm_alise_title || ''\r\n }))\r\n ]);\r\n }\r\n },\r\n error: () => {\r\n this.classOptions.set([{ value: '', label: 'All Classes' }]);\r\n }\r\n });\r\n }\r\n\r\n private loadReportData(): void {\r\n this.loading.set(true);\r\n // Mock data - TODO: Replace with API call\r\n setTimeout(() => {\r\n this.collectionByDate.set([\r\n { date: new Date('2024-11-10'), receipt_count: 25, cash: 150000, online: 200000, cheque: 50000, other: 0, total: 400000 },\r\n { date: new Date('2024-11-11'), receipt_count: 30, cash: 180000, online: 250000, cheque: 70000, other: 0, total: 500000 },\r\n { date: new Date('2024-11-12'), receipt_count: 28, cash: 170000, online: 230000, cheque: 60000, other: 0, total: 460000 }\r\n ]);\r\n\r\n this.collectionByClass.set([\r\n { class: 'Class 10', student_count: 120, receipt_count: 45, total: 600000, average: 5000 },\r\n { class: 'Class 11', student_count: 100, receipt_count: 38, total: 500000, average: 5000 },\r\n { class: 'Class 12', student_count: 90, receipt_count: 35, total: 450000, average: 5000 }\r\n ]);\r\n this.loading.set(false);\r\n }, 500);\r\n }\r\n\r\n applyFilters(): void {\r\n this.loading.set(true);\r\n // TODO: Implement API call with filters\r\n setTimeout(() => {\r\n this.loadReportData();\r\n this.notificationService.success('Report generated successfully');\r\n }, 500);\r\n }\r\n\r\n exportToPDF(): void {\r\n this.notificationService.info('PDF export functionality will be implemented');\r\n }\r\n\r\n exportToExcel(): void {\r\n this.notificationService.info('Excel export functionality will be implemented');\r\n }\r\n\r\n onGridEvent(event: GridEvent<CollectionByDateData | CollectionByClassData>): void {\r\n // Handle grid events if needed\r\n console.log('Grid event:', event);\r\n }\r\n\r\n formatCurrency(amount: number): string {\r\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\r\n }\r\n}\r\n","<!-- Collection Report Container -->\r\n<div class=\"tw-w-full tw-h-full\">\r\n <div class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-w-full tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">assessment</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Fee Collection Report</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"exportToPDF()\" leftIcon=\"picture_as_pdf\">\r\n Export PDF\r\n </button>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" (click)=\"exportToExcel()\" leftIcon=\"table_chart\">\r\n Export Excel\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Filters Section -->\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-4 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <form [formGroup]=\"filterForm\" class=\"tw-space-y-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-5 tw-gap-4\">\r\n <cide-ele-input\r\n label=\"Date From\"\r\n formControlName=\"date_from\"\r\n type=\"date\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-input\r\n label=\"Date To\"\r\n formControlName=\"date_to\"\r\n type=\"date\"\r\n size=\"sm\">\r\n </cide-ele-input>\r\n\r\n <cide-ele-select\r\n label=\"Academic Year\"\r\n formControlName=\"academic_year\"\r\n [options]=\"academicYearOptions()\"\r\n size=\"sm\"\r\n placeholder=\"All Years\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select\r\n label=\"Class/Program\"\r\n formControlName=\"class_program\"\r\n [options]=\"classOptions()\"\r\n size=\"sm\"\r\n placeholder=\"All Classes\">\r\n </cide-ele-select>\r\n\r\n <cide-ele-select\r\n label=\"Payment Mode\"\r\n formControlName=\"payment_mode\"\r\n [options]=\"paymentModeOptions\"\r\n size=\"sm\"\r\n placeholder=\"All Modes\">\r\n </cide-ele-select>\r\n </div>\r\n\r\n <div class=\"tw-flex tw-justify-end\">\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" (click)=\"applyFilters()\" leftIcon=\"search\"\r\n [disabled]=\"loading()\" [loading]=\"loading()\">\r\n Generate Report\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary Cards -->\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-4 tw-border-b tw-border-gray-200\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\r\n <!-- Total Collection Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-green-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-6 tw-h-6\">account_balance_wallet</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Total Collection</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-green-600\">{{ formatCurrency(summary().total_collection) }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Total Receipts Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-blue-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">receipt</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Total Receipts</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-blue-600\">{{ summary().total_receipts }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Online Payments Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-cyan-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-cyan-600 tw-w-6 tw-h-6\">language</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Online Payments</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-cyan-600\">{{ formatCurrency(summary().online_payments) }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Cash Payments Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-yellow-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-yellow-600 tw-w-6 tw-h-6\">money</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Cash Payments</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-yellow-600\">{{ formatCurrency(summary().cash_payments) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-4\">\r\n <div class=\"tw-space-y-6\">\r\n \r\n <!-- Collection by Date Section -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Collection by Date</h6>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <cide-ele-data-grid \r\n [config]=\"dateGridConfig()\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n \r\n <!-- Footer Totals -->\r\n <div class=\"tw-mt-4 tw-pt-4 tw-border-t tw-border-gray-200\">\r\n <div class=\"tw-grid tw-grid-cols-7 tw-gap-4 tw-text-sm\">\r\n <div class=\"tw-font-semibold tw-text-gray-900\">TOTAL</div>\r\n <div class=\"tw-font-semibold tw-text-center tw-text-gray-900\">{{ totalReceipts() }}</div>\r\n <div class=\"tw-font-semibold tw-text-right tw-text-gray-900\">{{ formatCurrency(totalCash()) }}</div>\r\n <div class=\"tw-font-semibold tw-text-right tw-text-gray-900\">{{ formatCurrency(totalOnline()) }}</div>\r\n <div class=\"tw-font-semibold tw-text-right tw-text-gray-900\">{{ formatCurrency(totalCheque()) }}</div>\r\n <div class=\"tw-font-semibold tw-text-right tw-text-gray-900\">{{ formatCurrency(totalOther()) }}</div>\r\n <div class=\"tw-font-semibold tw-text-right tw-text-green-600\">{{ formatCurrency(grandTotal()) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Collection by Class Section -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Collection by Class/Program</h6>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <cide-ele-data-grid \r\n [config]=\"classGridConfig()\" \r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","import { Component, inject, signal, OnInit, computed, viewChild, TemplateRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport {\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n type GridConfiguration,\n type GridEvent,\n type TemplateContext,\n NotificationService\n} from 'cloud-ide-element';\nimport { CideLytSharedWrapperComponent } from 'cloud-ide-layout';\n\ninterface FeeDetailData {\n _id?: string;\n fee_head: string;\n amount: number;\n discount: number;\n net_amount: number;\n paid: number;\n outstanding: number;\n due_date: Date;\n status: 'PAID' | 'PENDING' | 'PARTIALLY_PAID' | 'OVERDUE';\n [key: string]: unknown;\n}\n\ninterface PaymentHistoryData {\n _id?: string;\n receipt_number: string;\n date: Date;\n amount: number;\n mode: string;\n reference: string;\n [key: string]: unknown;\n}\n\n@Component({\n selector: 'cide-my-fee-statement',\n standalone: true,\n imports: [\n CommonModule,\n CideIconComponent,\n CideEleButtonComponent,\n CideEleDataGridComponent,\n CideLytSharedWrapperComponent\n ],\n templateUrl: './my-fee-statement.component.html',\n styleUrl: './my-fee-statement.component.scss'\n})\nexport class MyFeeStatementComponent implements OnInit {\n private readonly router = inject(Router);\n private readonly notificationService = inject(NotificationService);\n\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\n readonly actionsRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsRendererTemplate');\n readonly paymentHistoryRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('paymentHistoryRendererTemplate');\n\n readonly loading = signal<boolean>(false);\n readonly studentInfo = signal<{\n id: string;\n name: string;\n class: string;\n section: string;\n avatar: string;\n }>({\n id: 'STU-2024-001',\n name: 'John Doe',\n class: 'Class 10',\n section: 'A',\n avatar: ''\n });\n\n readonly feeDetails = signal<FeeDetailData[]>([]);\n readonly paymentHistory = signal<PaymentHistoryData[]>([]);\n\n readonly feeSummary = computed(() => {\n const details = this.feeDetails();\n return {\n total_fees: details.reduce((sum, fee) => sum + fee.amount, 0),\n paid_amount: details.reduce((sum, fee) => sum + fee.paid, 0),\n outstanding: details.reduce((sum, fee) => sum + fee.outstanding, 0),\n discount: details.reduce((sum, fee) => sum + fee.discount, 0)\n };\n });\n\n readonly feeDetailsGridConfig = computed<GridConfiguration<FeeDetailData>>(() => ({\n id: 'my-fee-details-grid',\n columns: [\n {\n key: 'fee_head',\n header: 'Fee Head',\n type: 'text',\n width: '200px',\n sortable: true\n },\n {\n key: 'amount',\n header: 'Amount',\n type: 'number',\n width: '120px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'discount',\n header: 'Discount',\n type: 'number',\n width: '120px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'net_amount',\n header: 'Net Amount',\n type: 'number',\n width: '130px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'paid',\n header: 'Paid',\n type: 'number',\n width: '120px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'outstanding',\n header: 'Outstanding',\n type: 'number',\n width: '130px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'due_date',\n header: 'Due Date',\n type: 'date',\n width: '120px',\n sortable: true\n },\n {\n key: 'status',\n header: 'Status',\n type: 'custom',\n width: '140px',\n align: 'center',\n renderer: 'statusRenderer'\n }\n ],\n data: this.feeDetails(),\n trackBy: '_id',\n pagination: {\n enabled: false,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: false,\n showPageInfo: false,\n showRefresh: false\n },\n search: {\n enabled: false,\n placeholder: 'Search...',\n searchableColumns: [],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true\n }));\n\n readonly paymentHistoryGridConfig = computed<GridConfiguration<PaymentHistoryData>>(() => ({\n id: 'payment-history-grid',\n columns: [\n {\n key: 'receipt_number',\n header: 'Receipt Number',\n type: 'text',\n width: '150px',\n sortable: true\n },\n {\n key: 'date',\n header: 'Date',\n type: 'date',\n width: '150px',\n sortable: true\n },\n {\n key: 'amount',\n header: 'Amount',\n type: 'number',\n width: '120px',\n align: 'right',\n sortable: true,\n formatter: {\n type: 'currency',\n format: 'INR'\n }\n },\n {\n key: 'mode',\n header: 'Payment Mode',\n type: 'text',\n width: '150px',\n sortable: true\n },\n {\n key: 'reference',\n header: 'Reference',\n type: 'text',\n width: '150px',\n sortable: true\n },\n {\n key: 'actions',\n header: 'Actions',\n type: 'custom',\n width: '120px',\n align: 'center',\n renderer: 'paymentHistoryRenderer'\n }\n ],\n data: this.paymentHistory(),\n trackBy: '_id',\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search...',\n searchableColumns: ['receipt_number', 'mode'],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true\n }));\n\n readonly templateRenderers = computed(() => ({\n statusRenderer: this.statusRendererTemplate(),\n paymentHistoryRenderer: this.paymentHistoryRendererTemplate()\n }));\n\n ngOnInit(): void {\n this.loadFeeDetails();\n this.loadPaymentHistory();\n }\n\n private loadFeeDetails(): void {\n this.loading.set(true);\n // TODO: Load from API\n setTimeout(() => {\n const today = new Date();\n this.feeDetails.set([\n {\n _id: '1',\n fee_head: 'Tuition Fee - Term 1',\n amount: 30000,\n discount: 2000,\n net_amount: 28000,\n paid: 28000,\n outstanding: 0,\n due_date: new Date(today.getFullYear(), today.getMonth() - 1, 15),\n status: 'PAID'\n },\n {\n _id: '2',\n fee_head: 'Exam Fee',\n amount: 5000,\n discount: 0,\n net_amount: 5000,\n paid: 3000,\n outstanding: 2000,\n due_date: new Date(today.getFullYear(), today.getMonth(), 5),\n status: 'PARTIALLY_PAID'\n },\n {\n _id: '3',\n fee_head: 'Lab Fee',\n amount: 10000,\n discount: 0,\n net_amount: 10000,\n paid: 0,\n outstanding: 10000,\n due_date: new Date(today.getFullYear(), today.getMonth() - 1, 20),\n status: 'OVERDUE'\n }\n ]);\n this.loading.set(false);\n }, 500);\n }\n\n private loadPaymentHistory(): void {\n // TODO: Load from API\n this.paymentHistory.set([\n {\n _id: '1',\n receipt_number: 'RCP-2024-001234',\n date: new Date('2024-11-01'),\n amount: 28000,\n mode: 'Cash',\n reference: 'CASH-001'\n },\n {\n _id: '2',\n receipt_number: 'RCP-2024-001235',\n date: new Date('2024-11-05'),\n amount: 3000,\n mode: 'Online',\n reference: 'TXN-123456'\n }\n ]);\n }\n\n makePayment(): void {\n this.router.navigate(['/control-panel/payment']);\n }\n\n downloadReceipt(payment: PaymentHistoryData): void {\n this.notificationService.info(`Downloading receipt: ${payment.receipt_number}`);\n // TODO: Implement receipt download\n }\n\n isOverdue(fee: FeeDetailData): boolean {\n return new Date(fee.due_date) < new Date() && fee.outstanding > 0;\n }\n\n formatCurrency(amount: number): string {\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n\n onGridEvent(event: GridEvent<Record<string, unknown>>): void {\n console.log('Grid event:', event);\n }\n}\n\n","<!-- My Fee Statement Container with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'my_fee_statement' }\">\r\n \r\n <!-- Action Buttons in Breadcrumb Area -->\r\n <div breadcrumb-actions>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" (click)=\"makePayment()\" leftIcon=\"payment\"\r\n [disabled]=\"feeSummary().outstanding === 0 || loading()\">\r\n Make Payment\r\n </button>\r\n </div>\r\n\r\n <div class=\"tw-table tw-w-full tw-h-full\">\r\n\r\n <!-- Student Info Section -->\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-4 tw-border-b tw-border-gray-200 tw-bg-gradient-to-r tw-from-blue-50 tw-to-purple-50\">\r\n <div class=\"tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-w-16 tw-h-16 tw-rounded-full tw-bg-blue-100 tw-flex tw-items-center tw-justify-center tw-border-2 tw-border-white tw-shadow-sm\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-8 tw-h-8\">person</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <h6 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-1\">{{ studentInfo().name }}</h6>\r\n <div class=\"tw-flex tw-flex-wrap tw-gap-4 tw-text-sm tw-text-gray-600\">\r\n <span><strong>Student ID:</strong> {{ studentInfo().id }}</span>\r\n <span><strong>Class:</strong> {{ studentInfo().class }}</span>\r\n <span><strong>Section:</strong> {{ studentInfo().section }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Summary Cards -->\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-4 tw-border-b tw-border-gray-200\">\r\n <div class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 lg:tw-grid-cols-4 tw-gap-4\">\r\n <!-- Total Fees Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-blue-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-6 tw-h-6\">account_balance_wallet</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Total Fees</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-blue-600\">{{ formatCurrency(feeSummary().total_fees) }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Paid Amount Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-green-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-green-600 tw-w-6 tw-h-6\">check_circle</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Paid Amount</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-green-600\">{{ formatCurrency(feeSummary().paid_amount) }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Outstanding Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-red-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-red-600 tw-w-6 tw-h-6\">warning</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Outstanding</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-red-600\">{{ formatCurrency(feeSummary().outstanding) }}</div>\r\n </div>\r\n </div>\r\n\r\n <!-- Discount Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-p-4 tw-flex tw-items-center tw-gap-4\">\r\n <div class=\"tw-bg-yellow-100 tw-rounded-full tw-p-3\">\r\n <cide-ele-icon class=\"tw-text-yellow-600 tw-w-6 tw-h-6\">local_offer</cide-ele-icon>\r\n </div>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-text-xs tw-text-gray-600 tw-mb-1\">Total Discount</div>\r\n <div class=\"tw-text-xl tw-font-bold tw-text-yellow-600\">{{ formatCurrency(feeSummary().discount) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-4\">\r\n <div class=\"tw-space-y-6\">\r\n \r\n <!-- Fee Details Section -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Fee Details</h6>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <cide-ele-data-grid \r\n [config]=\"feeDetailsGridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n\r\n <!-- Payment History Section -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Payment History</h6>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <cide-ele-data-grid \r\n [config]=\"paymentHistoryGridConfig()\" \r\n [templateRenderers]=\"templateRenderers()\"\r\n (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Template Renderers -->\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2.5 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium\"\r\n [class.tw-bg-green-100]=\"row.status === 'PAID'\"\r\n [class.tw-text-green-800]=\"row.status === 'PAID'\"\r\n [class.tw-bg-yellow-100]=\"row.status === 'PENDING' || row.status === 'PARTIALLY_PAID'\"\r\n [class.tw-text-yellow-800]=\"row.status === 'PENDING' || row.status === 'PARTIALLY_PAID'\"\r\n [class.tw-bg-red-100]=\"row.status === 'OVERDUE'\"\r\n [class.tw-text-red-800]=\"row.status === 'OVERDUE'\">\r\n {{ row.status === 'PARTIALLY_PAID' ? 'PARTIALLY PAID' : row.status }}\r\n </span>\r\n</ng-template>\r\n\r\n<ng-template #actionsRendererTemplate let-row=\"row\">\r\n <!-- Actions if needed -->\r\n</ng-template>\r\n\r\n<ng-template #paymentHistoryRendererTemplate let-row=\"row\">\r\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" (click)=\"downloadReceipt(row)\" leftIcon=\"download\">\r\n Download\r\n </button>\r\n</ng-template>\r\n\r\n","import { Component, inject, signal, OnInit, computed } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Router } from '@angular/router';\nimport {\n CideInputComponent,\n CideSelectComponent,\n CideEleButtonComponent,\n CideIconComponent,\n NotificationService,\n ConfirmationService\n} from 'cloud-ide-element';\n\ninterface OutstandingFee {\n id: string;\n fee_head: string;\n due_date: Date;\n outstanding: number;\n late_fee: number;\n is_overdue: boolean;\n}\n\n@Component({\n selector: 'cide-my-online-payment',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n CideInputComponent,\n CideSelectComponent,\n CideEleButtonComponent,\n CideIconComponent\n ],\n templateUrl: './my-online-payment.component.html',\n styleUrl: './my-online-payment.component.scss'\n})\nexport class MyOnlinePaymentComponent implements OnInit {\n private readonly fb = inject(FormBuilder);\n private readonly router = inject(Router);\n private readonly notificationService = inject(NotificationService);\n private readonly confirmationService = inject(ConfirmationService);\n\n readonly loading = signal<boolean>(false);\n readonly submitting = signal<boolean>(false);\n readonly selectedFees = signal<Set<string>>(new Set());\n readonly outstandingFees = signal<OutstandingFee[]>([]);\n\n paymentForm: FormGroup = this.fb.group({\n payment_method: ['', [Validators.required]],\n upi_id: [''],\n card_number: [''],\n expiry: [''],\n cvv: [''],\n bank: ['']\n });\n\n readonly paymentMethodOptions = [\n { value: 'UPI', label: 'UPI' },\n { value: 'CARD', label: 'Debit/Credit Card' },\n { value: 'NET_BANKING', label: 'Net Banking' }\n ];\n\n readonly bankOptions = [\n { value: 'SBI', label: 'State Bank of India' },\n { value: 'HDFC', label: 'HDFC Bank' },\n { value: 'ICICI', label: 'ICICI Bank' },\n { value: 'AXIS', label: 'Axis Bank' },\n { value: 'PNB', label: 'Punjab National Bank' }\n ];\n\n readonly selectedCount = computed(() => this.selectedFees().size);\n\n readonly totalFeeAmount = computed(() => {\n return this.outstandingFees()\n .filter(fee => this.selectedFees().has(fee.id))\n .reduce((sum, fee) => sum + fee.outstanding, 0);\n });\n\n readonly totalLateFee = computed(() => {\n return this.outstandingFees()\n .filter(fee => this.selectedFees().has(fee.id))\n .reduce((sum, fee) => sum + fee.late_fee, 0);\n });\n\n readonly subtotal = computed(() => this.totalFeeAmount() + this.totalLateFee());\n\n readonly convenienceFee = computed(() => {\n return Math.round(this.subtotal() * 0.02 * 100) / 100; // 2% convenience fee\n });\n\n readonly totalPayable = computed(() => this.subtotal() + this.convenienceFee());\n\n readonly selectedPaymentMethod = computed(() => this.paymentForm.get('payment_method')?.value);\n\n ngOnInit(): void {\n this.loadOutstandingFees();\n }\n\n private loadOutstandingFees(): void {\n this.loading.set(true);\n // TODO: Load from API\n setTimeout(() => {\n this.outstandingFees.set([\n {\n id: '1',\n fee_head: 'Exam Fee',\n due_date: new Date('2024-11-05'),\n outstanding: 2000,\n late_fee: 100,\n is_overdue: true\n },\n {\n id: '2',\n fee_head: 'Lab Fee',\n due_date: new Date('2024-12-15'),\n outstanding: 10000,\n late_fee: 0,\n is_overdue: false\n }\n ]);\n this.loading.set(false);\n }, 500);\n }\n\n isSelected(fee: OutstandingFee): boolean {\n return this.selectedFees().has(fee.id);\n }\n\n toggleFee(fee: OutstandingFee): void {\n const newSet = new Set(this.selectedFees());\n if (newSet.has(fee.id)) {\n newSet.delete(fee.id);\n } else {\n newSet.add(fee.id);\n }\n this.selectedFees.set(newSet);\n }\n\n selectAll(): void {\n const allIds = new Set(this.outstandingFees().map(f => f.id));\n this.selectedFees.set(allIds);\n }\n\n selectOverdue(): void {\n const overdueIds = new Set(\n this.outstandingFees()\n .filter(f => f.is_overdue)\n .map(f => f.id)\n );\n this.selectedFees.set(overdueIds);\n }\n\n clearSelection(): void {\n this.selectedFees.set(new Set());\n }\n\n selectPaymentMethod(method: string): void {\n this.paymentForm.patchValue({ payment_method: method });\n \n // Clear other method fields\n if (method !== 'UPI') this.paymentForm.patchValue({ upi_id: '' });\n if (method !== 'CARD') {\n this.paymentForm.patchValue({ card_number: '', expiry: '', cvv: '' });\n }\n if (method !== 'NET_BANKING') this.paymentForm.patchValue({ bank: '' });\n }\n\n canProceed(): boolean {\n return this.selectedCount() > 0 && \n this.paymentForm.get('payment_method')?.value &&\n this.paymentForm.valid;\n }\n\n proceedToPayment(): void {\n if (!this.canProceed()) {\n this.notificationService.warning('Please select fees and payment method');\n return;\n }\n\n this.confirmationService.ask({\n title: 'Confirm Payment',\n message: `Do you want to proceed with payment of ${this.formatCurrency(this.totalPayable())}?`,\n confirmText: 'Pay Now',\n cancelText: 'Cancel',\n type: 'info'\n }).then((confirmed: boolean) => {\n if (confirmed) {\n this.submitPayment();\n }\n });\n }\n\n private submitPayment(): void {\n this.submitting.set(true);\n // TODO: Implement payment gateway integration\n setTimeout(() => {\n this.notificationService.success('Payment processed successfully!');\n this.router.navigate(['/control-panel/statement']);\n this.submitting.set(false);\n }, 2000);\n }\n\n cancel(): void {\n this.router.navigate(['/control-panel/my-fees/statement']);\n }\n\n isOverdue(fee: OutstandingFee): boolean {\n return fee.is_overdue;\n }\n\n formatCurrency(amount: number): string {\n return `โ‚น${amount.toLocaleString('en-IN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;\n }\n}\n\n","<!-- My Online Payment Container -->\r\n<div class=\"tw-w-full tw-h-full\">\r\n <div class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\">\r\n\r\n <!-- Header Section -->\r\n <div class=\"tw-table-row tw-w-full tw-h-0\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <div class=\"tw-flex tw-flex-col sm:tw-flex-row tw-justify-between tw-items-start sm:tw-items-center tw-space-y-3 sm:tw-space-y-0\">\r\n \r\n <!-- Title -->\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <cide-ele-icon class=\"tw-text-blue-600 tw-w-5 tw-h-5\">payment</cide-ele-icon>\r\n <h5 class=\"tw-text-base tw-font-medium tw-text-gray-900 tw-m-0\">Online Fee Payment</h5>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"tw-flex tw-items-center tw-gap-3\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"cancel()\" leftIcon=\"arrow_back\">\r\n Back to Statement\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content Area -->\r\n <div class=\"tw-table-row\">\r\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-4\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Left Panel - Fee Selection -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden tw-flex tw-flex-col\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Select Fees to Pay</h6>\r\n </div>\r\n \r\n <!-- Quick Actions -->\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50 tw-flex tw-gap-2\">\r\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" (click)=\"selectAll()\">\r\n Select All\r\n </button>\r\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" (click)=\"selectOverdue()\">\r\n Select Overdue\r\n </button>\r\n <button cideEleButton type=\"button\" variant=\"ghost\" size=\"xs\" (click)=\"clearSelection()\">\r\n Clear\r\n </button>\r\n </div>\r\n\r\n <!-- Fee Items List -->\r\n <div class=\"tw-flex-1 tw-overflow-y-auto tw-p-4 tw-space-y-3\">\r\n @if (outstandingFees().length === 0) {\r\n <div class=\"tw-text-center tw-py-8 tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-w-12 tw-h-12 tw-mx-auto tw-mb-2 tw-text-gray-400\">check_circle</cide-ele-icon>\r\n <p class=\"tw-text-sm\">No outstanding fees</p>\r\n </div>\r\n } @else {\r\n @for (fee of outstandingFees(); track fee.id) {\r\n <div class=\"tw-p-3 tw-rounded-lg tw-border-2 tw-cursor-pointer tw-transition-colors\"\r\n [class.tw-border-blue-500]=\"isSelected(fee)\"\r\n [class.tw-bg-blue-50]=\"isSelected(fee)\"\r\n [class.tw-border-yellow-400]=\"!isSelected(fee) && isOverdue(fee)\"\r\n [class.tw-bg-yellow-50]=\"!isSelected(fee) && isOverdue(fee)\"\r\n [class.tw-border-gray-200]=\"!isSelected(fee) && !isOverdue(fee)\"\r\n (click)=\"toggleFee(fee)\">\r\n <div class=\"tw-flex tw-items-start tw-justify-between tw-gap-3\">\r\n <div class=\"tw-flex tw-items-start tw-gap-3 tw-flex-1\">\r\n <input \r\n type=\"checkbox\" \r\n [checked]=\"isSelected(fee)\"\r\n (change)=\"toggleFee(fee); $event.stopPropagation()\"\r\n class=\"tw-mt-1\">\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-gap-2 tw-mb-1\">\r\n <span class=\"tw-font-medium tw-text-gray-900\">{{ fee.fee_head }}</span>\r\n @if (isOverdue(fee)) {\r\n <span class=\"tw-inline-flex tw-items-center tw-px-2 tw-py-0.5 tw-rounded-full tw-text-xs tw-font-medium tw-bg-yellow-100 tw-text-yellow-800\">\r\n Overdue\r\n </span>\r\n }\r\n </div>\r\n <div class=\"tw-text-xs tw-text-gray-600\">\r\n Due Date: {{ fee.due_date | date:'dd/MM/yyyy' }}\r\n </div>\r\n @if (fee.late_fee > 0) {\r\n <div class=\"tw-text-xs tw-text-red-600 tw-mt-1\">\r\n Late Fee: {{ formatCurrency(fee.late_fee) }}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div class=\"tw-text-right\">\r\n <div class=\"tw-font-semibold tw-text-gray-900\">{{ formatCurrency(fee.outstanding) }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Right Panel - Payment Summary & Gateway -->\r\n <div class=\"tw-space-y-4\">\r\n \r\n <!-- Payment Summary Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Payment Summary</h6>\r\n </div>\r\n <div class=\"tw-p-4 tw-space-y-3\">\r\n <div class=\"tw-flex tw-justify-between tw-text-sm\">\r\n <span class=\"tw-text-gray-600\">Selected Items</span>\r\n <span class=\"tw-font-medium tw-text-gray-900\">{{ selectedCount() }}</span>\r\n </div>\r\n <div class=\"tw-flex tw-justify-between tw-text-sm\">\r\n <span class=\"tw-text-gray-600\">Fee Amount</span>\r\n <span class=\"tw-font-medium tw-text-gray-900\">{{ formatCurrency(totalFeeAmount()) }}</span>\r\n </div>\r\n @if (totalLateFee() > 0) {\r\n <div class=\"tw-flex tw-justify-between tw-text-sm tw-text-red-600\">\r\n <span>Late Fee</span>\r\n <span class=\"tw-font-medium\">{{ formatCurrency(totalLateFee()) }}</span>\r\n </div>\r\n }\r\n <div class=\"tw-flex tw-justify-between tw-text-sm tw-font-semibold tw-pt-2 tw-border-t tw-border-gray-200\">\r\n <span>Subtotal</span>\r\n <span>{{ formatCurrency(subtotal()) }}</span>\r\n </div>\r\n @if (convenienceFee() > 0) {\r\n <div class=\"tw-flex tw-justify-between tw-text-sm\">\r\n <span class=\"tw-text-gray-600\">Convenience Fee (2%)</span>\r\n <span class=\"tw-font-medium tw-text-gray-900\">{{ formatCurrency(convenienceFee()) }}</span>\r\n </div>\r\n }\r\n <div class=\"tw-flex tw-justify-between tw-text-lg tw-font-bold tw-pt-3 tw-border-t-2 tw-border-gray-300 tw-text-green-600\">\r\n <span>Total Payable</span>\r\n <span>{{ formatCurrency(totalPayable()) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Payment Method Selection -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-border tw-border-gray-200 tw-shadow-sm tw-overflow-hidden\">\r\n <div class=\"tw-px-4 tw-py-3 tw-border-b tw-border-gray-200 tw-bg-gray-50\">\r\n <h6 class=\"tw-text-sm tw-font-semibold tw-text-gray-900 tw-m-0\">Select Payment Method</h6>\r\n </div>\r\n <div class=\"tw-p-4\">\r\n <form [formGroup]=\"paymentForm\" class=\"tw-space-y-4\">\r\n \r\n <!-- Payment Method Cards -->\r\n <div class=\"tw-grid tw-grid-cols-3 tw-gap-3 tw-mb-4\">\r\n @for (method of paymentMethodOptions; track method.value) {\r\n <button\r\n type=\"button\"\r\n class=\"tw-p-4 tw-rounded-lg tw-border-2 tw-text-center tw-transition-colors\"\r\n [class.tw-border-blue-500]=\"selectedPaymentMethod() === method.value\"\r\n [class.tw-bg-blue-50]=\"selectedPaymentMethod() === method.value\"\r\n [class.tw-border-gray-200]=\"selectedPaymentMethod() !== method.value\"\r\n (click)=\"selectPaymentMethod(method.value)\">\r\n <cide-ele-icon class=\"tw-w-8 tw-h-8 tw-mx-auto tw-mb-2\"\r\n [class.tw-text-blue-600]=\"selectedPaymentMethod() === method.value\"\r\n [class.tw-text-gray-400]=\"selectedPaymentMethod() !== method.value\">\r\n @switch (method.value) {\r\n @case ('UPI') { account_balance_wallet }\r\n @case ('CARD') { credit_card }\r\n @case ('NET_BANKING') { account_balance }\r\n }\r\n </cide-ele-icon>\r\n <div class=\"tw-text-xs tw-font-medium\">{{ method.label }}</div>\r\n </button>\r\n }\r\n </div>\r\n\r\n <!-- UPI Details -->\r\n @if (selectedPaymentMethod() === 'UPI') {\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-200\">\r\n <cide-ele-input\r\n label=\"UPI ID *\"\r\n formControlName=\"upi_id\"\r\n placeholder=\"username@upi\"\r\n size=\"sm\"\r\n [required]=\"true\">\r\n </cide-ele-input>\r\n </div>\r\n }\r\n\r\n <!-- Card Details -->\r\n @if (selectedPaymentMethod() === 'CARD') {\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-200 tw-space-y-3\">\r\n <cide-ele-input\r\n label=\"Card Number *\"\r\n formControlName=\"card_number\"\r\n placeholder=\"1234 5678 9012 3456\"\r\n size=\"sm\"\r\n maxLength=\"19\"\r\n [required]=\"true\">\r\n </cide-ele-input>\r\n <div class=\"tw-grid tw-grid-cols-2 tw-gap-3\">\r\n <cide-ele-input\r\n label=\"Expiry Date *\"\r\n formControlName=\"expiry\"\r\n placeholder=\"MM/YY\"\r\n size=\"sm\"\r\n maxLength=\"5\"\r\n [required]=\"true\">\r\n </cide-ele-input>\r\n <cide-ele-input\r\n label=\"CVV *\"\r\n formControlName=\"cvv\"\r\n type=\"password\"\r\n placeholder=\"***\"\r\n size=\"sm\"\r\n maxLength=\"3\"\r\n [required]=\"true\">\r\n </cide-ele-input>\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Net Banking Details -->\r\n @if (selectedPaymentMethod() === 'NET_BANKING') {\r\n <div class=\"tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-200\">\r\n <cide-ele-select\r\n label=\"Select Bank *\"\r\n formControlName=\"bank\"\r\n [options]=\"bankOptions\"\r\n size=\"sm\"\r\n placeholder=\"Select Bank\"\r\n [required]=\"true\">\r\n </cide-ele-select>\r\n </div>\r\n }\r\n\r\n <!-- Action Buttons -->\r\n <div class=\"tw-flex tw-gap-3 tw-pt-4\">\r\n <button cideEleButton type=\"button\" variant=\"secondary\" size=\"sm\" (click)=\"cancel()\" class=\"tw-flex-1\">\r\n Cancel\r\n </button>\r\n <button cideEleButton type=\"button\" variant=\"primary\" size=\"sm\" (click)=\"proceedToPayment()\"\r\n [disabled]=\"!canProceed() || submitting()\" [loading]=\"submitting()\" class=\"tw-flex-1\" leftIcon=\"payment\">\r\n Pay {{ formatCurrency(totalPayable()) }}\r\n </button>\r\n </div>\r\n\r\n <!-- Security Info -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-gap-2 tw-pt-2 tw-text-xs tw-text-gray-500\">\r\n <cide-ele-icon class=\"tw-w-4 tw-h-4\">lock</cide-ele-icon>\r\n <span>Secure payment powered by Razorpay</span>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n","/*\r\n * Public API Surface of cloud-ide-fees\r\n */\r\n\r\nexport * from './lib/cloud-ide-fees';\r\n\r\n// Routes\r\nexport * from './lib/cloud-ide-fees.routes';\r\n\r\n// Fee Structure Management\r\nexport * from './lib/collection/fee-structure-management/services/fee-structure.service';\r\nexport * from './lib/collection/fee-structure-management/components/fee-structure-list/fee-structure-list.component';\r\nexport * from './lib/collection/fee-structure-management/components/fee-structure-create/fee-structure-create.component';\r\n\r\n// Fee Assignment Management\r\nexport * from './lib/collection/fee-assignment-management/components/fee-assignment-list/fee-assignment-list.component';\r\nexport * from './lib/collection/fee-assignment-management/components/fee-assignment-create/fee-assignment-create.component';\r\n\r\n// Fee Payment Management\r\nexport * from './lib/collection/fee-payment-management/services/fee-payment.service';\r\nexport * from './lib/collection/fee-payment-management/components/fee-payment-list/fee-payment-list.component';\r\nexport * from './lib/collection/fee-payment-management/components/fee-payment-process/fee-payment-process.component';\r\nexport * from './lib/collection/fee-payment-management/components/fee-payment-view/fee-payment-view.component';\r\n\r\n// Discount Management\r\nexport * from './lib/collection/discount-management/components/discount-rules/discount-rules.component';\r\n\r\n// Receipt Template\r\nexport * from './lib/collection/receipt-template/components/template-designer/template-designer.component';\r\n\r\n// Reports\r\nexport * from './lib/collection/reports/components/collection-report/collection-report.component';\r\n\r\n// Student Fees (Integrated into Dashboard)\r\nexport * from './lib/collection/student-fees/components/my-fee-statement/my-fee-statement.component';\r\nexport * from './lib/collection/student-fees/components/my-online-payment/my-online-payment.component';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i1"],"mappings":"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"}