cloud-ide-academics 0.0.55 → 0.0.56

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/fesm2022/{cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs → cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs} +6 -6
  2. package/fesm2022/cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs.map +1 -0
  3. package/fesm2022/cloud-ide-academics-bonafide-request-form.component-GiVehOPg.mjs +317 -0
  4. package/fesm2022/cloud-ide-academics-bonafide-request-form.component-GiVehOPg.mjs.map +1 -0
  5. package/fesm2022/{cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs → cloud-ide-academics-bonafide-request-list.component-CldJcpVL.mjs} +7 -7
  6. package/fesm2022/cloud-ide-academics-bonafide-request-list.component-CldJcpVL.mjs.map +1 -0
  7. package/fesm2022/{cloud-ide-academics-bonafide.service-DB6ySuGe.mjs → cloud-ide-academics-bonafide.service-CHPe3MPl.mjs} +4 -4
  8. package/fesm2022/{cloud-ide-academics-bonafide.service-DB6ySuGe.mjs.map → cloud-ide-academics-bonafide.service-CHPe3MPl.mjs.map} +1 -1
  9. package/fesm2022/{cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs → cloud-ide-academics-class-program-term-create.component-B-gGKnpJ.mjs} +9 -6
  10. package/fesm2022/cloud-ide-academics-class-program-term-create.component-B-gGKnpJ.mjs.map +1 -0
  11. package/fesm2022/{cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs → cloud-ide-academics-class-program-term-list.component-BFfAhZrq.mjs} +9 -8
  12. package/fesm2022/cloud-ide-academics-class-program-term-list.component-BFfAhZrq.mjs.map +1 -0
  13. package/fesm2022/{cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs → cloud-ide-academics-cloud-ide-academics-BVQ8sA0L.mjs} +404 -116
  14. package/fesm2022/cloud-ide-academics-cloud-ide-academics-BVQ8sA0L.mjs.map +1 -0
  15. package/fesm2022/{cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs → cloud-ide-academics-program-class-create.component-DIG3K1WR.mjs} +53 -26
  16. package/fesm2022/cloud-ide-academics-program-class-create.component-DIG3K1WR.mjs.map +1 -0
  17. package/fesm2022/{cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs → cloud-ide-academics-program-class-list.component-DZrSl_02.mjs} +188 -28
  18. package/fesm2022/cloud-ide-academics-program-class-list.component-DZrSl_02.mjs.map +1 -0
  19. package/fesm2022/cloud-ide-academics.mjs +1 -1
  20. package/index.d.ts +40 -0
  21. package/package.json +1 -1
  22. package/fesm2022/cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs.map +0 -1
  23. package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs +0 -317
  24. package/fesm2022/cloud-ide-academics-bonafide-request-form.component-CM3ISuhU.mjs.map +0 -1
  25. package/fesm2022/cloud-ide-academics-bonafide-request-list.component-DKYKgplL.mjs.map +0 -1
  26. package/fesm2022/cloud-ide-academics-class-program-term-create.component-1IuTrJUo.mjs.map +0 -1
  27. package/fesm2022/cloud-ide-academics-class-program-term-list.component-C1JWoKus.mjs.map +0 -1
  28. package/fesm2022/cloud-ide-academics-cloud-ide-academics-Dd-B1hBe.mjs.map +0 -1
  29. package/fesm2022/cloud-ide-academics-program-class-create.component-DT_-sBiQ.mjs.map +0 -1
  30. package/fesm2022/cloud-ide-academics-program-class-list.component-CaVWRJfR.mjs.map +0 -1
@@ -6,7 +6,7 @@ import { Router, ActivatedRoute } from '@angular/router';
6
6
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
7
7
  import { NotificationService, CideEleButtonComponent, CideIconComponent } from 'cloud-ide-element';
8
8
  import { RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
9
- import { C as CideAcademicsBonafideService } from './cloud-ide-academics-bonafide.service-DB6ySuGe.mjs';
9
+ import { C as CideAcademicsBonafideService } from './cloud-ide-academics-bonafide.service-CHPe3MPl.mjs';
10
10
  import { generateObjectFromString } from 'cloud-ide-lms-model';
11
11
 
12
12
  class CideAcademicsBonafideRequestDetailComponent {
@@ -198,10 +198,10 @@ class CideAcademicsBonafideRequestDetailComponent {
198
198
  goBack() {
199
199
  this.router.navigate(['/control-panel/bonafide']);
200
200
  }
201
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideRequestDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
202
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.1.7", type: CideAcademicsBonafideRequestDetailComponent, isStandalone: true, selector: "cide-academics-bonafide-request-detail", ngImport: i0, template: "<!-- Bonafide Request Detail with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_detail' }\">\r\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-bg-gray-50\">\r\n \r\n @if (loading()) {\r\n <!-- Loading State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-gray-300 dark:tw-text-gray-600 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-mt-4\">Loading request details...</p>\r\n </div>\r\n </div>\r\n } @else if (error()) {\r\n <!-- Error State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center tw-max-w-md\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-red-300 dark:tw-text-red-600\">error</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mt-4\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">{{ error() }}</p>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"goBack()\" class=\"tw-mt-4\">\r\n Back to List\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (request()) {\r\n @if (request(); as req) {\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">description</cide-ele-icon>\r\n <div>\r\n <h2 class=\"tw-text-xl tw-font-semibold tw-text-gray-900\">\r\n {{ req.abnr_request_number || 'Bonafide Request' }}\r\n </h2>\r\n <p class=\"tw-text-sm tw-text-gray-600\">\r\n {{ pageSubtitle() || 'Request details and workflow history' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span [class]=\"getStatusBadgeClass()\">\r\n {{ getStatusText() }}\r\n </span>\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"arrow_back\" (click)=\"goBack()\">\r\n Back\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Request Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">info</cide-ele-icon>\r\n Request Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Number</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_number || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Purpose</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_purpose || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n @if (req.abnr_completed_date) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Completed Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_completed_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Student Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-purple-500\">person</cide-ele-icon>\r\n Student Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student Name</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ getStudentName() }}</p>\r\n </div>\r\n @if (req.abnr_student_id) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student ID</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id }}</p>\r\n </div>\r\n }\r\n @if (req.abnr_student_id_auth?.user_emailid) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Email</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id_auth.user_emailid }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- File Downloads Card -->\r\n @if (canDownload() && (hasSoftCopy() || hasStampedCopy())) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-green-500\">download</cide-ele-icon>\r\n Certificate Downloads\r\n </h3>\r\n <div class=\"tw-space-y-3\">\r\n @if (hasSoftCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">description</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Soft Copy Certificate</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Generated certificate (HTML/PDF)</p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"visibility\" (click)=\"viewCertificate()\">\r\n View\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('soft-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (hasStampedCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-green-500\">stamp</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Stamped Copy</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Physical stamped certificate scan</p>\r\n </div>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('stamped-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Workflow History Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6 lg:tw-col-span-2\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-orange-500\">history</cide-ele-icon>\r\n Workflow History\r\n </h3>\r\n @if (loadingHistory()) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">Loading history...</p>\r\n </div>\r\n } @else if (history().length === 0) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300\">history</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">No workflow history available</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\">\r\n @for (item of history(); track item._id || $index) {\r\n <div class=\"tw-flex tw-items-start tw-space-x-4 tw-p-4 tw-border-l-4 tw-border-blue-500 tw-bg-gray-50 tw-rounded-r-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-500 tw-mt-1\">circle</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">{{ item.action_type || 'Action' }}</p>\r\n @if (item.action_date) {\r\n <p class=\"tw-text-xs tw-text-gray-500\">{{ item.action_date | date:'MMM dd, yyyy HH:mm' }}</p>\r\n }\r\n </div>\r\n @if (item.comments) {\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ item.comments }}</p>\r\n }\r\n @if (item.action_by) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">By: {{ item.action_by }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
201
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideAcademicsBonafideRequestDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
202
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideAcademicsBonafideRequestDetailComponent, isStandalone: true, selector: "cide-academics-bonafide-request-detail", ngImport: i0, template: "<!-- Bonafide Request Detail with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_detail' }\">\r\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-bg-gray-50\">\r\n \r\n @if (loading()) {\r\n <!-- Loading State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-gray-300 dark:tw-text-gray-600 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-mt-4\">Loading request details...</p>\r\n </div>\r\n </div>\r\n } @else if (error()) {\r\n <!-- Error State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center tw-max-w-md\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-red-300 dark:tw-text-red-600\">error</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mt-4\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">{{ error() }}</p>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"goBack()\" class=\"tw-mt-4\">\r\n Back to List\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (request()) {\r\n @if (request(); as req) {\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">description</cide-ele-icon>\r\n <div>\r\n <h2 class=\"tw-text-xl tw-font-semibold tw-text-gray-900\">\r\n {{ req.abnr_request_number || 'Bonafide Request' }}\r\n </h2>\r\n <p class=\"tw-text-sm tw-text-gray-600\">\r\n {{ pageSubtitle() || 'Request details and workflow history' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span [class]=\"getStatusBadgeClass()\">\r\n {{ getStatusText() }}\r\n </span>\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"arrow_back\" (click)=\"goBack()\">\r\n Back\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Request Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">info</cide-ele-icon>\r\n Request Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Number</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_number || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Purpose</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_purpose || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n @if (req.abnr_completed_date) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Completed Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_completed_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Student Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-purple-500\">person</cide-ele-icon>\r\n Student Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student Name</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ getStudentName() }}</p>\r\n </div>\r\n @if (req.abnr_student_id) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student ID</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id }}</p>\r\n </div>\r\n }\r\n @if (req.abnr_student_id_auth?.user_emailid) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Email</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id_auth.user_emailid }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- File Downloads Card -->\r\n @if (canDownload() && (hasSoftCopy() || hasStampedCopy())) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-green-500\">download</cide-ele-icon>\r\n Certificate Downloads\r\n </h3>\r\n <div class=\"tw-space-y-3\">\r\n @if (hasSoftCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">description</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Soft Copy Certificate</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Generated certificate (HTML/PDF)</p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"visibility\" (click)=\"viewCertificate()\">\r\n View\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('soft-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (hasStampedCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-green-500\">stamp</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Stamped Copy</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Physical stamped certificate scan</p>\r\n </div>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('stamped-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Workflow History Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6 lg:tw-col-span-2\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-orange-500\">history</cide-ele-icon>\r\n Workflow History\r\n </h3>\r\n @if (loadingHistory()) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">Loading history...</p>\r\n </div>\r\n } @else if (history().length === 0) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300\">history</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">No workflow history available</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\">\r\n @for (item of history(); track item._id || $index) {\r\n <div class=\"tw-flex tw-items-start tw-space-x-4 tw-p-4 tw-border-l-4 tw-border-blue-500 tw-bg-gray-50 tw-rounded-r-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-500 tw-mt-1\">circle</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">{{ item.action_type || 'Action' }}</p>\r\n @if (item.action_date) {\r\n <p class=\"tw-text-xs tw-text-gray-500\">{{ item.action_date | date:'MMM dd, yyyy HH:mm' }}</p>\r\n }\r\n </div>\r\n @if (item.comments) {\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ item.comments }}</p>\r\n }\r\n @if (item.action_by) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">By: {{ item.action_by }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n\r\n\r\n\r\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
203
203
  }
204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideAcademicsBonafideRequestDetailComponent, decorators: [{
204
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideAcademicsBonafideRequestDetailComponent, decorators: [{
205
205
  type: Component,
206
206
  args: [{ selector: 'cide-academics-bonafide-request-detail', standalone: true, imports: [
207
207
  CommonModule,
@@ -209,8 +209,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
209
209
  CideEleButtonComponent,
210
210
  CideIconComponent,
211
211
  CideLytSharedWrapperComponent
212
- ], template: "<!-- Bonafide Request Detail with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_detail' }\">\r\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-bg-gray-50\">\r\n \r\n @if (loading()) {\r\n <!-- Loading State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-gray-300 dark:tw-text-gray-600 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-mt-4\">Loading request details...</p>\r\n </div>\r\n </div>\r\n } @else if (error()) {\r\n <!-- Error State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center tw-max-w-md\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-red-300 dark:tw-text-red-600\">error</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mt-4\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">{{ error() }}</p>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"goBack()\" class=\"tw-mt-4\">\r\n Back to List\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (request()) {\r\n @if (request(); as req) {\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">description</cide-ele-icon>\r\n <div>\r\n <h2 class=\"tw-text-xl tw-font-semibold tw-text-gray-900\">\r\n {{ req.abnr_request_number || 'Bonafide Request' }}\r\n </h2>\r\n <p class=\"tw-text-sm tw-text-gray-600\">\r\n {{ pageSubtitle() || 'Request details and workflow history' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span [class]=\"getStatusBadgeClass()\">\r\n {{ getStatusText() }}\r\n </span>\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"arrow_back\" (click)=\"goBack()\">\r\n Back\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Request Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">info</cide-ele-icon>\r\n Request Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Number</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_number || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Purpose</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_purpose || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n @if (req.abnr_completed_date) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Completed Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_completed_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Student Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-purple-500\">person</cide-ele-icon>\r\n Student Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student Name</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ getStudentName() }}</p>\r\n </div>\r\n @if (req.abnr_student_id) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student ID</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id }}</p>\r\n </div>\r\n }\r\n @if (req.abnr_student_id_auth?.user_emailid) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Email</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id_auth.user_emailid }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- File Downloads Card -->\r\n @if (canDownload() && (hasSoftCopy() || hasStampedCopy())) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-green-500\">download</cide-ele-icon>\r\n Certificate Downloads\r\n </h3>\r\n <div class=\"tw-space-y-3\">\r\n @if (hasSoftCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">description</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Soft Copy Certificate</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Generated certificate (HTML/PDF)</p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"visibility\" (click)=\"viewCertificate()\">\r\n View\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('soft-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (hasStampedCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-green-500\">stamp</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Stamped Copy</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Physical stamped certificate scan</p>\r\n </div>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('stamped-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Workflow History Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6 lg:tw-col-span-2\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-orange-500\">history</cide-ele-icon>\r\n Workflow History\r\n </h3>\r\n @if (loadingHistory()) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">Loading history...</p>\r\n </div>\r\n } @else if (history().length === 0) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300\">history</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">No workflow history available</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\">\r\n @for (item of history(); track item._id || $index) {\r\n <div class=\"tw-flex tw-items-start tw-space-x-4 tw-p-4 tw-border-l-4 tw-border-blue-500 tw-bg-gray-50 tw-rounded-r-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-500 tw-mt-1\">circle</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">{{ item.action_type || 'Action' }}</p>\r\n @if (item.action_date) {\r\n <p class=\"tw-text-xs tw-text-gray-500\">{{ item.action_date | date:'MMM dd, yyyy HH:mm' }}</p>\r\n }\r\n </div>\r\n @if (item.comments) {\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ item.comments }}</p>\r\n }\r\n @if (item.action_by) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">By: {{ item.action_by }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
212
+ ], template: "<!-- Bonafide Request Detail with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_detail' }\">\r\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-bg-gray-50\">\r\n \r\n @if (loading()) {\r\n <!-- Loading State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-gray-300 dark:tw-text-gray-600 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-mt-4\">Loading request details...</p>\r\n </div>\r\n </div>\r\n } @else if (error()) {\r\n <!-- Error State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center tw-max-w-md\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-red-300 dark:tw-text-red-600\">error</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mt-4\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">{{ error() }}</p>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"goBack()\" class=\"tw-mt-4\">\r\n Back to List\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (request()) {\r\n @if (request(); as req) {\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">description</cide-ele-icon>\r\n <div>\r\n <h2 class=\"tw-text-xl tw-font-semibold tw-text-gray-900\">\r\n {{ req.abnr_request_number || 'Bonafide Request' }}\r\n </h2>\r\n <p class=\"tw-text-sm tw-text-gray-600\">\r\n {{ pageSubtitle() || 'Request details and workflow history' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span [class]=\"getStatusBadgeClass()\">\r\n {{ getStatusText() }}\r\n </span>\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"arrow_back\" (click)=\"goBack()\">\r\n Back\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Request Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">info</cide-ele-icon>\r\n Request Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Number</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_number || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Purpose</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_purpose || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n @if (req.abnr_completed_date) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Completed Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_completed_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Student Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-purple-500\">person</cide-ele-icon>\r\n Student Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student Name</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ getStudentName() }}</p>\r\n </div>\r\n @if (req.abnr_student_id) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student ID</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id }}</p>\r\n </div>\r\n }\r\n @if (req.abnr_student_id_auth?.user_emailid) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Email</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id_auth.user_emailid }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- File Downloads Card -->\r\n @if (canDownload() && (hasSoftCopy() || hasStampedCopy())) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-green-500\">download</cide-ele-icon>\r\n Certificate Downloads\r\n </h3>\r\n <div class=\"tw-space-y-3\">\r\n @if (hasSoftCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">description</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Soft Copy Certificate</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Generated certificate (HTML/PDF)</p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"visibility\" (click)=\"viewCertificate()\">\r\n View\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('soft-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (hasStampedCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-green-500\">stamp</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Stamped Copy</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Physical stamped certificate scan</p>\r\n </div>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('stamped-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Workflow History Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6 lg:tw-col-span-2\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-orange-500\">history</cide-ele-icon>\r\n Workflow History\r\n </h3>\r\n @if (loadingHistory()) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">Loading history...</p>\r\n </div>\r\n } @else if (history().length === 0) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300\">history</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">No workflow history available</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\">\r\n @for (item of history(); track item._id || $index) {\r\n <div class=\"tw-flex tw-items-start tw-space-x-4 tw-p-4 tw-border-l-4 tw-border-blue-500 tw-bg-gray-50 tw-rounded-r-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-500 tw-mt-1\">circle</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">{{ item.action_type || 'Action' }}</p>\r\n @if (item.action_date) {\r\n <p class=\"tw-text-xs tw-text-gray-500\">{{ item.action_date | date:'MMM dd, yyyy HH:mm' }}</p>\r\n }\r\n </div>\r\n @if (item.comments) {\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ item.comments }}</p>\r\n }\r\n @if (item.action_by) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">By: {{ item.action_by }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n\r\n\r\n\r\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
213
213
  }], ctorParameters: () => [] });
214
214
 
215
215
  export { CideAcademicsBonafideRequestDetailComponent };
216
- //# sourceMappingURL=cloud-ide-academics-bonafide-request-detail.component-BRG6AkHZ.mjs.map
216
+ //# sourceMappingURL=cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-ide-academics-bonafide-request-detail.component-Mh9qdY6v.mjs","sources":["../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-detail/bonafide-request-detail.component.ts","../../../projects/cloud-ide-academics/src/lib/collection/bonafide/components/bonafide-request-detail/bonafide-request-detail.component.html"],"sourcesContent":["import { Component, signal, DestroyRef, inject, computed, OnInit, effect } from '@angular/core';\r\nimport { CommonModule, DatePipe } from '@angular/common';\r\nimport { Router, ActivatedRoute } from '@angular/router';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CideEleButtonComponent, CideIconComponent, NotificationService } from 'cloud-ide-element';\r\nimport { RightsService, CideLytSharedService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';\r\nimport { CideAcademicsBonafideService } from '../../services/bonafide.service';\r\nimport { generateObjectFromString } from 'cloud-ide-lms-model';\r\n\r\n@Component({\r\n selector: 'cide-academics-bonafide-request-detail',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n DatePipe,\r\n CideEleButtonComponent,\r\n CideIconComponent,\r\n CideLytSharedWrapperComponent\r\n ],\r\n templateUrl: './bonafide-request-detail.component.html',\r\n styles: [`\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 CideAcademicsBonafideRequestDetailComponent implements OnInit {\r\n private destroyRef = inject(DestroyRef);\r\n private bonafideService = inject(CideAcademicsBonafideService);\r\n private router = inject(Router);\r\n private route = inject(ActivatedRoute);\r\n private rightsService = inject(RightsService);\r\n private sharedService = inject(CideLytSharedService);\r\n private notificationService = inject(NotificationService);\r\n\r\n request = signal<any>(null);\r\n history = signal<any[]>([]);\r\n loading = signal(false);\r\n loadingHistory = signal(false);\r\n error = signal<string | null>(null);\r\n \r\n // Page config\r\n pageTitle = signal<string>('');\r\n pageSubtitle = signal<string>('');\r\n pageCode = signal<string>('academics_bonafide_detail');\r\n \r\n canView = computed(() => this.rightsService.hasRight('VIEW'));\r\n canDownload = computed(() => this.rightsService.hasRight('DOWNLOAD'));\r\n\r\n hasSoftCopy = computed(() => {\r\n const req = this.request();\r\n return !!(req?.abnr_soft_copy_id_cyfm);\r\n });\r\n\r\n hasStampedCopy = computed(() => {\r\n const req = this.request();\r\n return !!(req?.abnr_stamped_copy_id_cyfm);\r\n });\r\n\r\n constructor() {\r\n // Watch for page data changes\r\n effect(() => {\r\n const currentPageCode = this.pageCode();\r\n if (!currentPageCode) return;\r\n\r\n const pageDataCache = this.sharedService.pageDataStore();\r\n const cachedData = pageDataCache[currentPageCode];\r\n const page = cachedData?.data?.page;\r\n \r\n if (page) {\r\n const cfgString = page?.sypg_configuration;\r\n if (cfgString) {\r\n try {\r\n const cfg = JSON.parse(cfgString);\r\n this.pageTitle.set(cfg.title || page?.sypg_title || '');\r\n this.pageSubtitle.set(cfg.subTitle || page?.sypg_desc || '');\r\n } catch (e) {\r\n console.warn('Invalid page config JSON', e);\r\n this.pageTitle.set(page?.sypg_title || '');\r\n this.pageSubtitle.set(page?.sypg_desc || '');\r\n }\r\n } else {\r\n this.pageTitle.set(page?.sypg_title || '');\r\n this.pageSubtitle.set(page?.sypg_desc || '');\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n // Initialize rights\r\n this.rightsService.initializeRights('academics_bonafide_detail');\r\n\r\n // Get request ID from route\r\n this.route.params.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(params => {\r\n const query = params['query'];\r\n if (query) {\r\n const queryObj = generateObjectFromString(query);\r\n const requestId = queryObj.abnr_id || queryObj._id;\r\n if (requestId) {\r\n this.loadRequest(requestId);\r\n this.loadHistory(requestId);\r\n } else {\r\n this.error.set('Request ID not found in route');\r\n }\r\n }\r\n });\r\n }\r\n\r\n loadRequest(requestId: string): void {\r\n this.loading.set(true);\r\n this.error.set(null);\r\n\r\n this.bonafideService.getRequestById(requestId)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.request.set(response.data);\r\n } else {\r\n this.error.set(response.message || 'Failed to load request');\r\n }\r\n this.loading.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error loading request:', err);\r\n this.error.set(err.message || 'Failed to load request');\r\n this.loading.set(false);\r\n }\r\n });\r\n }\r\n\r\n loadHistory(requestId: string): void {\r\n this.loadingHistory.set(true);\r\n\r\n this.bonafideService.getHistory(requestId)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (response) => {\r\n if (response.success) {\r\n this.history.set(Array.isArray(response.data) ? response.data : []);\r\n }\r\n this.loadingHistory.set(false);\r\n },\r\n error: (err) => {\r\n console.error('Error loading history:', err);\r\n this.history.set([]);\r\n this.loadingHistory.set(false);\r\n }\r\n });\r\n }\r\n\r\n getStatusText(): string {\r\n const req = this.request();\r\n if (!req) return 'N/A';\r\n const status = req.abnr_status_id_sygms;\r\n if (!status) return 'N/A';\r\n if (typeof status === 'string') return status;\r\n return status.sygms_title || status.sygms_code || 'N/A';\r\n }\r\n\r\n getStatusBadgeClass(): string {\r\n const statusText = this.getStatusText().toUpperCase();\r\n if (statusText.includes('PENDING')) {\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-yellow-100 tw-text-yellow-800 dark:tw-bg-yellow-900/30 dark:tw-text-yellow-300';\r\n } else if (statusText.includes('REVIEW')) {\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-blue-100 tw-text-blue-800 dark:tw-bg-blue-900/30 dark:tw-text-blue-300';\r\n } else if (statusText.includes('APPROVED')) {\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-green-100 tw-text-green-800 dark:tw-bg-green-900/30 dark:tw-text-green-300';\r\n } else if (statusText.includes('COMPLETED')) {\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-emerald-100 tw-text-emerald-800 dark:tw-bg-emerald-900/30 dark:tw-text-emerald-300';\r\n } else if (statusText.includes('REJECTED')) {\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-red-100 tw-text-red-800 dark:tw-bg-red-900/30 dark:tw-text-red-300';\r\n }\r\n return 'tw-inline-flex tw-items-center tw-px-3 tw-py-1 tw-rounded-full tw-text-sm tw-font-medium tw-bg-gray-100 tw-text-gray-800 dark:tw-bg-gray-700 dark:tw-text-gray-300';\r\n }\r\n\r\n getStudentName(): string {\r\n const req = this.request();\r\n if (!req) return 'N/A';\r\n const student = req.abnr_student_id_auth;\r\n if (!student) return 'N/A';\r\n if (typeof student === 'string') return student;\r\n return student.user_fullname || student.user_username || 'N/A';\r\n }\r\n\r\n downloadCertificate(fileType: 'soft-copy' | 'stamped-copy'): void {\r\n const req = this.request();\r\n if (!req || !req._id) {\r\n this.notificationService.error('Request ID not found');\r\n return;\r\n }\r\n\r\n try {\r\n this.bonafideService.downloadCertificate(req._id, fileType);\r\n this.notificationService.success(`Downloading ${fileType === 'soft-copy' ? 'soft copy' : 'stamped copy'}...`);\r\n } catch (error: any) {\r\n console.error('Error downloading certificate:', error);\r\n this.notificationService.error('Failed to download certificate');\r\n }\r\n }\r\n\r\n viewCertificate(): void {\r\n const req = this.request();\r\n if (!req || !req._id) {\r\n this.notificationService.error('Request ID not found');\r\n return;\r\n }\r\n\r\n if (!this.hasSoftCopy()) {\r\n this.notificationService.error('Soft copy not available');\r\n return;\r\n }\r\n\r\n // Open in new window for viewing/printing\r\n const url = this.bonafideService.getDownloadUrl(req._id, 'soft-copy');\r\n window.open(url, '_blank');\r\n }\r\n\r\n goBack(): void {\r\n this.router.navigate(['/control-panel/bonafide']);\r\n }\r\n}\r\n\r\n\r\n\r\n\r\n","<!-- Bonafide Request Detail with Shared Wrapper -->\r\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_detail' }\">\r\n <div class=\"tw-w-full tw-h-full tw-flex tw-flex-col tw-bg-gray-50\">\r\n \r\n @if (loading()) {\r\n <!-- Loading State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-gray-300 dark:tw-text-gray-600 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 dark:tw-text-gray-400 tw-mt-4\">Loading request details...</p>\r\n </div>\r\n </div>\r\n } @else if (error()) {\r\n <!-- Error State -->\r\n <div class=\"tw-flex tw-items-center tw-justify-center tw-h-full\">\r\n <div class=\"tw-text-center tw-max-w-md\">\r\n <cide-ele-icon class=\"tw-text-6xl tw-text-red-300 dark:tw-text-red-600\">error</cide-ele-icon>\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 dark:tw-text-gray-100 tw-mt-4\">Error</h3>\r\n <p class=\"tw-text-sm tw-text-gray-600 dark:tw-text-gray-400 tw-mt-2\">{{ error() }}</p>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" (click)=\"goBack()\" class=\"tw-mt-4\">\r\n Back to List\r\n </button>\r\n </div>\r\n </div>\r\n } @else if (request()) {\r\n @if (request(); as req) {\r\n <!-- Header Section -->\r\n <div class=\"tw-bg-white tw-border-b tw-border-gray-200 tw-px-6 tw-py-4\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-600\">description</cide-ele-icon>\r\n <div>\r\n <h2 class=\"tw-text-xl tw-font-semibold tw-text-gray-900\">\r\n {{ req.abnr_request_number || 'Bonafide Request' }}\r\n </h2>\r\n <p class=\"tw-text-sm tw-text-gray-600\">\r\n {{ pageSubtitle() || 'Request details and workflow history' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <span [class]=\"getStatusBadgeClass()\">\r\n {{ getStatusText() }}\r\n </span>\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"arrow_back\" (click)=\"goBack()\">\r\n Back\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Main Content -->\r\n <div class=\"tw-flex-1 tw-overflow-auto tw-p-6\">\r\n <div class=\"tw-grid tw-grid-cols-1 lg:tw-grid-cols-2 tw-gap-6\">\r\n \r\n <!-- Request Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">info</cide-ele-icon>\r\n Request Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Number</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_number || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Purpose</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_purpose || 'N/A' }}</p>\r\n </div>\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Request Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_request_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n @if (req.abnr_completed_date) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Completed Date</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_completed_date | date:'MMM dd, yyyy' }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- Student Information Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-purple-500\">person</cide-ele-icon>\r\n Student Information\r\n </h3>\r\n <div class=\"tw-space-y-4\">\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student Name</label>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900 tw-mt-1\">{{ getStudentName() }}</p>\r\n </div>\r\n @if (req.abnr_student_id) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Student ID</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id }}</p>\r\n </div>\r\n }\r\n @if (req.abnr_student_id_auth?.user_emailid) {\r\n <div>\r\n <label class=\"tw-text-xs tw-font-medium tw-text-gray-500 tw-uppercase tw-tracking-wide\">Email</label>\r\n <p class=\"tw-text-sm tw-text-gray-900 tw-mt-1\">{{ req.abnr_student_id_auth.user_emailid }}</p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n\r\n <!-- File Downloads Card -->\r\n @if (canDownload() && (hasSoftCopy() || hasStampedCopy())) {\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-green-500\">download</cide-ele-icon>\r\n Certificate Downloads\r\n </h3>\r\n <div class=\"tw-space-y-3\">\r\n @if (hasSoftCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-blue-500\">description</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Soft Copy Certificate</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Generated certificate (HTML/PDF)</p>\r\n </div>\r\n </div>\r\n <div class=\"tw-flex tw-items-center tw-space-x-2\">\r\n <button cideEleButton variant=\"ghost\" size=\"sm\" leftIcon=\"visibility\" (click)=\"viewCertificate()\">\r\n View\r\n </button>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('soft-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n </div>\r\n }\r\n @if (hasStampedCopy()) {\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-p-3 tw-bg-gray-50 tw-rounded-lg\">\r\n <div class=\"tw-flex tw-items-center tw-space-x-3\">\r\n <cide-ele-icon class=\"tw-text-green-500\">stamp</cide-ele-icon>\r\n <div>\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">Stamped Copy</p>\r\n <p class=\"tw-text-xs tw-text-gray-500\">Physical stamped certificate scan</p>\r\n </div>\r\n </div>\r\n <button cideEleButton variant=\"primary\" size=\"sm\" leftIcon=\"download\" (click)=\"downloadCertificate('stamped-copy')\">\r\n Download\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <!-- Workflow History Card -->\r\n <div class=\"tw-bg-white tw-rounded-lg tw-shadow tw-p-6 lg:tw-col-span-2\">\r\n <h3 class=\"tw-text-lg tw-font-semibold tw-text-gray-900 tw-mb-4 tw-flex tw-items-center tw-gap-2\">\r\n <cide-ele-icon class=\"tw-text-orange-500\">history</cide-ele-icon>\r\n Workflow History\r\n </h3>\r\n @if (loadingHistory()) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300 tw-animate-spin\">refresh</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">Loading history...</p>\r\n </div>\r\n } @else if (history().length === 0) {\r\n <div class=\"tw-text-center tw-py-8\">\r\n <cide-ele-icon class=\"tw-text-4xl tw-text-gray-300\">history</cide-ele-icon>\r\n <p class=\"tw-text-sm tw-text-gray-500 tw-mt-2\">No workflow history available</p>\r\n </div>\r\n } @else {\r\n <div class=\"tw-space-y-4\">\r\n @for (item of history(); track item._id || $index) {\r\n <div class=\"tw-flex tw-items-start tw-space-x-4 tw-p-4 tw-border-l-4 tw-border-blue-500 tw-bg-gray-50 tw-rounded-r-lg\">\r\n <cide-ele-icon class=\"tw-text-blue-500 tw-mt-1\">circle</cide-ele-icon>\r\n <div class=\"tw-flex-1\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between\">\r\n <p class=\"tw-text-sm tw-font-medium tw-text-gray-900\">{{ item.action_type || 'Action' }}</p>\r\n @if (item.action_date) {\r\n <p class=\"tw-text-xs tw-text-gray-500\">{{ item.action_date | date:'MMM dd, yyyy HH:mm' }}</p>\r\n }\r\n </div>\r\n @if (item.comments) {\r\n <p class=\"tw-text-xs tw-text-gray-600 tw-mt-1\">{{ item.comments }}</p>\r\n }\r\n @if (item.action_by) {\r\n <p class=\"tw-text-xs tw-text-gray-500 tw-mt-1\">By: {{ item.action_by }}</p>\r\n }\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n </div>\r\n </div>\r\n }\r\n }\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n\r\n\r\n\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,317 @@
1
+ import * as i0 from '@angular/core';
2
+ import { inject, DestroyRef, signal, computed, Component } from '@angular/core';
3
+ import { CommonModule } from '@angular/common';
4
+ import * as i1 from '@angular/forms';
5
+ import { FormBuilder, Validators, ReactiveFormsModule } from '@angular/forms';
6
+ import { Router } from '@angular/router';
7
+ import { HttpClient } from '@angular/common/http';
8
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
+ import { NotificationService, CideInputComponent, CideTextareaComponent, CideEleButtonComponent, CideFormFieldErrorComponent, CideSelectComponent } from 'cloud-ide-element';
10
+ import { AppStateHelperService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
11
+ import { C as CideAcademicsBonafideService } from './cloud-ide-academics-bonafide.service-CHPe3MPl.mjs';
12
+ import { generateStringFromObject, cidePath, hostManagerRoutesUrl, coreRoutesUrl } from 'cloud-ide-lms-model';
13
+ import { d as CideLytProgramSectionSelectorComponent } from './cloud-ide-academics-cloud-ide-academics-BVQ8sA0L.mjs';
14
+
15
+ class CideAcademicsBonafideRequestFormComponent {
16
+ destroyRef = inject(DestroyRef);
17
+ bonafideService = inject(CideAcademicsBonafideService);
18
+ fb = inject(FormBuilder);
19
+ router = inject(Router);
20
+ notificationService = inject(NotificationService);
21
+ appStateHelper = inject(AppStateHelperService);
22
+ http = inject(HttpClient);
23
+ form;
24
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
25
+ initializing = signal(true, ...(ngDevMode ? [{ debugName: "initializing" }] : []));
26
+ isStudentUser = signal(false, ...(ngDevMode ? [{ debugName: "isStudentUser" }] : []));
27
+ // Store student and entity IDs
28
+ studentId = null;
29
+ entityId = null;
30
+ // For non-student users: class/section/student selection
31
+ studentsList = signal([], ...(ngDevMode ? [{ debugName: "studentsList" }] : []));
32
+ studentsLoading = signal(false, ...(ngDevMode ? [{ debugName: "studentsLoading" }] : []));
33
+ selectedStudent = signal(null, ...(ngDevMode ? [{ debugName: "selectedStudent" }] : []));
34
+ // Computed: show class/section selector for non-student users
35
+ showClassSectionSelector = computed(() => !this.isStudentUser(), ...(ngDevMode ? [{ debugName: "showClassSectionSelector" }] : []));
36
+ showStudentSelector = computed(() => {
37
+ if (this.isStudentUser())
38
+ return false;
39
+ const formValue = this.form.value;
40
+ return !!(formValue.class_program_id || formValue.section_id);
41
+ }, ...(ngDevMode ? [{ debugName: "showStudentSelector" }] : []));
42
+ ngOnInit() {
43
+ // Initialize form with conditional fields
44
+ this.form = this.fb.group({
45
+ // Common fields
46
+ abnr_purpose: ['', Validators.required],
47
+ abnr_remarks: [''],
48
+ // For non-student users: class/section/student selection
49
+ class_program_id: [''],
50
+ branch_id: [''],
51
+ term_id: [''],
52
+ section_id: [''],
53
+ selected_student_id: ['']
54
+ });
55
+ // Watch for class/section changes to load students
56
+ this.setupClassSectionWatchers();
57
+ // Load student and entity data from admission
58
+ this.loadStudentAndEntityData();
59
+ }
60
+ /**
61
+ * Setup watchers for class/section changes to load students
62
+ */
63
+ setupClassSectionWatchers() {
64
+ // Watch for section_id changes to load students
65
+ this.form.get('section_id')?.valueChanges
66
+ .pipe(takeUntilDestroyed(this.destroyRef))
67
+ .subscribe(() => {
68
+ this.loadStudentsByClassSection();
69
+ });
70
+ // Watch for class_program_id changes (if section not available)
71
+ this.form.get('class_program_id')?.valueChanges
72
+ .pipe(takeUntilDestroyed(this.destroyRef))
73
+ .subscribe(() => {
74
+ // Reset section and student when class changes
75
+ this.form.patchValue({ section_id: '', selected_student_id: '' }, { emitEvent: false });
76
+ this.loadStudentsByClassSection();
77
+ });
78
+ }
79
+ /**
80
+ * Update validators based on user type
81
+ */
82
+ updateValidators() {
83
+ const isStudent = this.isStudentUser();
84
+ const studentControl = this.form.get('selected_student_id');
85
+ if (!isStudent && studentControl) {
86
+ // Non-student: make student selection required
87
+ studentControl.setValidators([Validators.required]);
88
+ }
89
+ else if (isStudent && studentControl) {
90
+ // Student: remove required validator
91
+ studentControl.clearValidators();
92
+ }
93
+ studentControl?.updateValueAndValidity({ emitEvent: false });
94
+ }
95
+ /**
96
+ * Load students based on selected class/section
97
+ */
98
+ loadStudentsByClassSection() {
99
+ const classProgramId = this.form.get('class_program_id')?.value;
100
+ const sectionId = this.form.get('section_id')?.value;
101
+ if (!classProgramId) {
102
+ this.studentsList.set([]);
103
+ this.form.patchValue({ selected_student_id: '' }, { emitEvent: false });
104
+ return;
105
+ }
106
+ this.studentsLoading.set(true);
107
+ // Build query params for admission list
108
+ const queryParams = {
109
+ admap_class_program_id_acacpm: classProgramId,
110
+ admap_isactive: true
111
+ };
112
+ if (sectionId) {
113
+ queryParams.admap_section_id_acapts = sectionId;
114
+ }
115
+ // Use generateStringFromObject to create encoded query string
116
+ const queryString = generateStringFromObject(queryParams);
117
+ const admissionUrl = cidePath.join([
118
+ hostManagerRoutesUrl.cideSuiteHost,
119
+ coreRoutesUrl.module,
120
+ 'admission',
121
+ queryString
122
+ ]);
123
+ this.http.get(admissionUrl)
124
+ .pipe(takeUntilDestroyed(this.destroyRef))
125
+ .subscribe({
126
+ next: (response) => {
127
+ if (response?.success && response?.data) {
128
+ const admissions = Array.isArray(response.data) ? response.data : [response.data];
129
+ // Map to student options
130
+ const students = admissions
131
+ .filter((adm) => adm.admap_student_id)
132
+ .map((adm) => ({
133
+ value: adm.admap_student_id,
134
+ label: `${adm.admap_first_name || ''} ${adm.admap_middle_name || ''} ${adm.admap_last_name || ''}`.trim() || adm.admap_student_id,
135
+ admission: adm
136
+ }));
137
+ this.studentsList.set(students);
138
+ }
139
+ else {
140
+ this.studentsList.set([]);
141
+ }
142
+ this.studentsLoading.set(false);
143
+ },
144
+ error: (err) => {
145
+ console.error('Error loading students:', err);
146
+ this.notificationService.error('Failed to load students. Please try again.');
147
+ this.studentsList.set([]);
148
+ this.studentsLoading.set(false);
149
+ }
150
+ });
151
+ }
152
+ /**
153
+ * Load student ID and entity ID from admission data
154
+ * Determines if user is a student or non-student
155
+ */
156
+ loadStudentAndEntityData() {
157
+ this.initializing.set(true);
158
+ // Get current user
159
+ const currentUser = this.appStateHelper.getCurrentUser();
160
+ if (!currentUser?._id) {
161
+ this.notificationService.error('User not authenticated');
162
+ this.initializing.set(false);
163
+ return;
164
+ }
165
+ // Get student ID from admission form using user_id
166
+ const userId = currentUser._id;
167
+ const queryParams = new URLSearchParams({ admap_user_id_auth: userId }).toString();
168
+ // Use the same pattern as fee components - admission is under core module
169
+ const admissionUrl = cidePath.join([
170
+ hostManagerRoutesUrl.cideSuiteHost,
171
+ coreRoutesUrl.module,
172
+ 'admission',
173
+ queryParams
174
+ ]);
175
+ this.http.get(admissionUrl)
176
+ .pipe(takeUntilDestroyed(this.destroyRef))
177
+ .subscribe({
178
+ next: (admissionResponse) => {
179
+ if (admissionResponse?.success && admissionResponse?.data) {
180
+ // Get admission data (might be array or single object)
181
+ const admissionData = Array.isArray(admissionResponse.data)
182
+ ? admissionResponse.data[0]
183
+ : admissionResponse.data;
184
+ // Check if user is a student (has student_id in admission)
185
+ const hasStudentId = !!(admissionData?.admap_student_id);
186
+ this.isStudentUser.set(hasStudentId);
187
+ // Update validators based on user type
188
+ this.updateValidators();
189
+ if (hasStudentId) {
190
+ // Student user: auto-populate student and entity IDs
191
+ this.studentId = admissionData.admap_student_id;
192
+ this.entityId = admissionData?.admap_entity_id_syen || null;
193
+ // If entity ID not found in admission, try to get from active entity
194
+ if (!this.entityId) {
195
+ const activeEntity = this.appStateHelper.activeEntity();
196
+ if (activeEntity?._id) {
197
+ this.entityId = activeEntity._id;
198
+ }
199
+ }
200
+ if (!this.entityId) {
201
+ this.notificationService.warning('Entity ID not found. Please contact administrator.');
202
+ }
203
+ }
204
+ else {
205
+ // Non-student user: need to select class/section/student
206
+ // Get entity ID from active entity
207
+ const activeEntity = this.appStateHelper.activeEntity();
208
+ if (activeEntity?._id) {
209
+ this.entityId = activeEntity._id;
210
+ }
211
+ else {
212
+ this.notificationService.warning('Entity ID not found. Please contact administrator.');
213
+ }
214
+ }
215
+ }
216
+ else {
217
+ // No admission data found - user is likely non-student
218
+ this.isStudentUser.set(false);
219
+ this.updateValidators();
220
+ const activeEntity = this.appStateHelper.activeEntity();
221
+ if (activeEntity?._id) {
222
+ this.entityId = activeEntity._id;
223
+ }
224
+ }
225
+ this.initializing.set(false);
226
+ },
227
+ error: (err) => {
228
+ console.error('Error loading admission data:', err);
229
+ // On error, assume non-student and get entity from active entity
230
+ this.isStudentUser.set(false);
231
+ this.updateValidators();
232
+ const activeEntity = this.appStateHelper.activeEntity();
233
+ if (activeEntity?._id) {
234
+ this.entityId = activeEntity._id;
235
+ }
236
+ this.initializing.set(false);
237
+ }
238
+ });
239
+ }
240
+ onSubmit() {
241
+ if (this.form.valid) {
242
+ // Determine student ID based on user type
243
+ let finalStudentId = null;
244
+ if (this.isStudentUser()) {
245
+ // Student user: use auto-fetched student ID
246
+ finalStudentId = this.studentId;
247
+ }
248
+ else {
249
+ // Non-student user: use selected student ID
250
+ finalStudentId = this.form.get('selected_student_id')?.value || null;
251
+ }
252
+ // Validate required data
253
+ if (!finalStudentId) {
254
+ if (this.isStudentUser()) {
255
+ this.notificationService.error('Student ID is required. Please ensure your admission is confirmed.');
256
+ }
257
+ else {
258
+ this.notificationService.error('Please select a student.');
259
+ }
260
+ return;
261
+ }
262
+ if (!this.entityId) {
263
+ this.notificationService.error('Entity ID is required. Please contact administrator.');
264
+ return;
265
+ }
266
+ this.loading.set(true);
267
+ // Build payload with all required fields
268
+ const payload = {
269
+ abnr_student_id_auth: finalStudentId,
270
+ abnr_entity_id_syen: this.entityId,
271
+ abnr_purpose: this.form.value.abnr_purpose,
272
+ abnr_remarks: this.form.value.abnr_remarks || ''
273
+ };
274
+ this.bonafideService.createRequest(payload)
275
+ .pipe(takeUntilDestroyed(this.destroyRef))
276
+ .subscribe({
277
+ next: (response) => {
278
+ if (response.success) {
279
+ this.notificationService.success('Bonafide request created successfully');
280
+ this.router.navigate(['/control-panel/bonafide']);
281
+ }
282
+ else {
283
+ this.notificationService.error(response.message || 'Failed to create request');
284
+ }
285
+ this.loading.set(false);
286
+ },
287
+ error: (err) => {
288
+ console.error('Error creating bonafide request:', err);
289
+ this.notificationService.error(err.error?.message || 'Failed to create request');
290
+ this.loading.set(false);
291
+ }
292
+ });
293
+ }
294
+ }
295
+ cancel() {
296
+ this.router.navigate(['/control-panel/bonafide']);
297
+ }
298
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideAcademicsBonafideRequestFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
299
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: CideAcademicsBonafideRequestFormComponent, isStandalone: true, selector: "cide-academics-bonafide-request-form", ngImport: i0, template: "<!-- Bonafide Request Form with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_form' }\">\n <div class=\"tw-w-full tw-h-full\">\n @if (initializing()) {\n <!-- Loading State -->\n <div class=\"tw-w-full tw-h-full tw-flex tw-items-center tw-justify-center\">\n <div class=\"tw-text-center\">\n <div class=\"tw-text-gray-600 tw-mb-2\">Loading student information...</div>\n <div class=\"tw-text-sm tw-text-gray-500\">Please wait</div>\n </div>\n </div>\n } @else {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\"\n [class.tw-opacity-60]=\"loading()\">\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 <!-- Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Class/Section Selector for Non-Student Users -->\n @if (showClassSectionSelector()) {\n <div class=\"tw-max-w-4xl\">\n <div class=\"tw-mb-4\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-700 tw-mb-2\">Select Class & Section</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">Select the class and section to find the student</p>\n </div>\n <cide-lyt-program-section-selector\n [formGroup]=\"form\"\n classProgramControlName=\"class_program_id\"\n branchControlName=\"branch_id\"\n termControlName=\"term_id\"\n sectionControlName=\"section_id\"\n [showLabels]=\"true\"\n [disabled]=\"loading()\">\n </cide-lyt-program-section-selector>\n </div>\n }\n \n <!-- Student Selection for Non-Student Users -->\n @if (showStudentSelector()) {\n <div class=\"tw-max-w-2xl\">\n <cide-ele-select\n label=\"Select Student\"\n formControlName=\"selected_student_id\"\n [options]=\"studentsList()\"\n [loading]=\"studentsLoading()\"\n placeholder=\"Select a student\"\n valueKey=\"value\"\n labelKey=\"label\"\n size=\"md\"\n [required]=\"true\"\n [disabled]=\"loading() || studentsLoading()\">\n </cide-ele-select>\n </div>\n }\n \n <!-- Purpose Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-input\n label=\"Purpose\"\n formControlName=\"abnr_purpose\"\n [required]=\"true\"\n placeholder=\"Enter purpose for bonafide certificate\"\n size=\"md\"\n [disabled]=\"loading()\">\n </cide-ele-input>\n </div>\n \n <!-- Remarks Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-textarea\n label=\"Remarks\"\n formControlName=\"abnr_remarks\"\n placeholder=\"Enter any additional remarks\"\n rows=\"4\"\n size=\"md\"\n [disabled]=\"loading()\">\n </cide-ele-textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Error Message -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"form\"></cide-form-field-error>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button \n cideEleButton \n type=\"button\" \n variant=\"secondary\" \n (click)=\"cancel()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n \n <button \n cideEleButton \n type=\"submit\" \n variant=\"primary\" \n [disabled]=\"!form.valid || loading()\"\n [loading]=\"loading()\"\n leftIcon=\"save\">\n Submit Request\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n }\n </div>\n</cide-lyt-shared-wrapper>\n\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideInputComponent, selector: "cide-ele-input", inputs: ["fill", "label", "labelHide", "disabled", "clearInput", "labelPlacement", "labelDir", "placeholder", "leadingIcon", "trailingIcon", "helperText", "helperTextCollapse", "hideHelperAndErrorText", "errorText", "maxlength", "minlength", "required", "autocapitalize", "autocomplete", "type", "width", "id", "ngModel", "option", "min", "max", "step", "size"], outputs: ["ngModelChange"] }, { kind: "component", type: CideTextareaComponent, selector: "cide-ele-textarea", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "minlength", "maxlength", "rows", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput"], outputs: ["ngModelChange"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideFormFieldErrorComponent, selector: "cide-form-field-error", inputs: ["control", "formGroup", "fieldName", "customMessages"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { kind: "component", type: CideLytProgramSectionSelectorComponent, selector: "cide-lyt-program-section-selector", inputs: ["formGroup", "classProgramControlName", "branchControlName", "termControlName", "sectionControlName", "academicYearId", "entityId", "disabled", "showLabels", "gridCols", "showAllPrograms", "includeInactive"], outputs: ["valuesChange"] }, { kind: "component", type: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }] });
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: CideAcademicsBonafideRequestFormComponent, decorators: [{
302
+ type: Component,
303
+ args: [{ selector: 'cide-academics-bonafide-request-form', standalone: true, imports: [
304
+ CommonModule,
305
+ ReactiveFormsModule,
306
+ CideInputComponent,
307
+ CideTextareaComponent,
308
+ CideEleButtonComponent,
309
+ CideFormFieldErrorComponent,
310
+ CideLytSharedWrapperComponent,
311
+ CideLytProgramSectionSelectorComponent,
312
+ CideSelectComponent
313
+ ], template: "<!-- Bonafide Request Form with Shared Wrapper -->\n<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'academics_bonafide_form' }\">\n <div class=\"tw-w-full tw-h-full\">\n @if (initializing()) {\n <!-- Loading State -->\n <div class=\"tw-w-full tw-h-full tw-flex tw-items-center tw-justify-center\">\n <div class=\"tw-text-center\">\n <div class=\"tw-text-gray-600 tw-mb-2\">Loading student information...</div>\n <div class=\"tw-text-sm tw-text-gray-500\">Please wait</div>\n </div>\n </div>\n } @else {\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\" class=\"tw-w-full tw-table tw-h-full tw-bg-transparent\"\n [class.tw-opacity-60]=\"loading()\">\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 <!-- Form Fields -->\n <div class=\"tw-space-y-6\">\n <!-- Class/Section Selector for Non-Student Users -->\n @if (showClassSectionSelector()) {\n <div class=\"tw-max-w-4xl\">\n <div class=\"tw-mb-4\">\n <h3 class=\"tw-text-sm tw-font-semibold tw-text-gray-700 tw-mb-2\">Select Class & Section</h3>\n <p class=\"tw-text-xs tw-text-gray-500\">Select the class and section to find the student</p>\n </div>\n <cide-lyt-program-section-selector\n [formGroup]=\"form\"\n classProgramControlName=\"class_program_id\"\n branchControlName=\"branch_id\"\n termControlName=\"term_id\"\n sectionControlName=\"section_id\"\n [showLabels]=\"true\"\n [disabled]=\"loading()\">\n </cide-lyt-program-section-selector>\n </div>\n }\n \n <!-- Student Selection for Non-Student Users -->\n @if (showStudentSelector()) {\n <div class=\"tw-max-w-2xl\">\n <cide-ele-select\n label=\"Select Student\"\n formControlName=\"selected_student_id\"\n [options]=\"studentsList()\"\n [loading]=\"studentsLoading()\"\n placeholder=\"Select a student\"\n valueKey=\"value\"\n labelKey=\"label\"\n size=\"md\"\n [required]=\"true\"\n [disabled]=\"loading() || studentsLoading()\">\n </cide-ele-select>\n </div>\n }\n \n <!-- Purpose Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-input\n label=\"Purpose\"\n formControlName=\"abnr_purpose\"\n [required]=\"true\"\n placeholder=\"Enter purpose for bonafide certificate\"\n size=\"md\"\n [disabled]=\"loading()\">\n </cide-ele-input>\n </div>\n \n <!-- Remarks Field -->\n <div class=\"tw-max-w-2xl\">\n <cide-ele-textarea\n label=\"Remarks\"\n formControlName=\"abnr_remarks\"\n placeholder=\"Enter any additional remarks\"\n rows=\"4\"\n size=\"md\"\n [disabled]=\"loading()\">\n </cide-ele-textarea>\n </div>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Form Actions -->\n <div class=\"tw-table-row tw-h-0\">\n <div class=\"tw-table-cell tw-w-full tw-px-6 tw-py-2 tw-bg-gray-50 tw-border-t tw-border-gray-200\">\n <div class=\"tw-flex tw-flex-col tw-gap-3\">\n <!-- Error Message -->\n <div class=\"tw-w-full\">\n <cide-form-field-error [formGroup]=\"form\"></cide-form-field-error>\n </div>\n \n <!-- Action Buttons -->\n <div class=\"tw-flex tw-justify-end tw-gap-4\">\n <button \n cideEleButton \n type=\"button\" \n variant=\"secondary\" \n (click)=\"cancel()\"\n [disabled]=\"loading()\">\n Cancel\n </button>\n \n <button \n cideEleButton \n type=\"submit\" \n variant=\"primary\" \n [disabled]=\"!form.valid || loading()\"\n [loading]=\"loading()\"\n leftIcon=\"save\">\n Submit Request\n </button>\n </div>\n </div>\n </div>\n </div>\n </form>\n }\n </div>\n</cide-lyt-shared-wrapper>\n\n", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}\n"] }]
314
+ }] });
315
+
316
+ export { CideAcademicsBonafideRequestFormComponent };
317
+ //# sourceMappingURL=cloud-ide-academics-bonafide-request-form.component-GiVehOPg.mjs.map