cloud-ide-fees 0.0.41 → 0.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-fees-cloud-ide-fees-Cyb9Q9l7.mjs → cloud-ide-fees-cloud-ide-fees-DwymPnFD.mjs} +18 -16
- package/fesm2022/cloud-ide-fees-cloud-ide-fees-DwymPnFD.mjs.map +1 -0
- package/fesm2022/{cloud-ide-fees-discount-rule-manager.component-CTgMTze9.mjs → cloud-ide-fees-discount-rule-manager.component-B2322yJN.mjs} +3 -3
- package/fesm2022/{cloud-ide-fees-discount-rule-manager.component-CTgMTze9.mjs.map → cloud-ide-fees-discount-rule-manager.component-B2322yJN.mjs.map} +1 -1
- package/fesm2022/cloud-ide-fees.mjs +1 -1
- package/package.json +1 -1
- package/README.md +0 -63
- package/fesm2022/cloud-ide-fees-cloud-ide-fees-Cyb9Q9l7.mjs.map +0 -1
|
@@ -8,7 +8,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
8
8
|
import { ConfirmationService, NotificationService, CideIconComponent, CideEleButtonComponent, CideEleDataGridComponent, CideEleDropdownComponent, CideInputComponent, CideSelectComponent, CideTextareaComponent } from 'cloud-ide-element';
|
|
9
9
|
import { MFeeDiscountRule, MFeeDiscountRuleInsertUpdatePayload, MFeeDiscountRuleToggleStatusPayload, MFeeDiscountRuleDeletePayload } from 'cloud-ide-lms-model';
|
|
10
10
|
import { AppStateHelperService, RightsService, CideLytSharedWrapperComponent } from 'cloud-ide-layout';
|
|
11
|
-
import { C as CideFeeDiscountRuleService } from './cloud-ide-fees-cloud-ide-fees-
|
|
11
|
+
import { C as CideFeeDiscountRuleService } from './cloud-ide-fees-cloud-ide-fees-DwymPnFD.mjs';
|
|
12
12
|
|
|
13
13
|
class DiscountRuleManagerComponent {
|
|
14
14
|
fb = inject(FormBuilder);
|
|
@@ -252,7 +252,7 @@ class DiscountRuleManagerComponent {
|
|
|
252
252
|
modeRenderer: this.modeRendererTemplate()
|
|
253
253
|
}), ...(ngDevMode ? [{ debugName: "templateRenderers" }] : []));
|
|
254
254
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DiscountRuleManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
255
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DiscountRuleManagerComponent, isStandalone: true, selector: "cide-discount-rule-manager", viewQueries: [{ propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "discountValueRendererTemplate", first: true, predicate: ["discountValueRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "modeRendererTemplate", first: true, predicate: ["modeRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_discount_rule' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n\r\n <div class=\"tw-p-4 tw-flex tw-flex-col tw-gap-4 tw-h-[calc(100vh-140px)]\">\r\n <!-- Header Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center\">\r\n <h2 class=\"tw-text-lg tw-font-bold tw-text-gray-800\">Discount Rules</h2>\r\n <button cideEleButton variant=\"primary\" (click)=\"openCreateModal()\">\r\n <cide-ele-icon size=\"sm\">add</cide-ele-icon> Create New Rule\r\n </button>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-overflow-hidden tw-flex-1\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Status Renderer -->\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-px-2 tw-py-1 tw-rounded-full tw-text-[10px] tw-font-bold\"\r\n [ngClass]=\"row.feedr_status === 'ACTIVE' ? 'tw-bg-green-100 tw-text-green-700' : 'tw-bg-gray-100 tw-text-gray-600'\">\r\n {{ row.feedr_status }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Discount Value Renderer -->\r\n<ng-template #discountValueRendererTemplate let-row=\"row\">\r\n <div class=\"tw-font-bold\"\r\n [ngClass]=\"row.feedr_discount_type === 'PERCENTAGE' ? 'tw-text-blue-600' : 'tw-text-green-600'\">\r\n {{ row.feedr_discount_type === 'PERCENTAGE' ? row.feedr_discount_value + '%' : '\u20B9' + row.feedr_discount_value }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Mode Renderer -->\r\n<ng-template #modeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-xs tw-font-medium\">\r\n {{ row.feedr_mode === 'AUTOMATIC' ? '\uD83D\uDE80 Automatic' : '\u2699\uFE0F Manual' }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Create/Edit Modal -->\r\n@if (showModal()) {\r\n<div class=\"tw-fixed tw-inset-0 tw-bg-black/50 tw-flex tw-items-center tw-justify-center tw-z-[1000] tw-p-4\">\r\n <div class=\"tw-bg-white tw-rounded-2xl tw-shadow-2xl tw-w-full tw-max-w-2xl tw-overflow-hidden\">\r\n <!-- Modal Header -->\r\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center tw-bg-gray-50/50\">\r\n <h3 class=\"tw-text-base tw-font-bold tw-text-gray-800\">\r\n {{ isEditing() ? 'Edit' : 'Create' }} Discount Rule\r\n </h3>\r\n <button (click)=\"closeModal()\" class=\"tw-text-gray-400 hover:tw-text-gray-600\">\r\n <cide-ele-icon>close</cide-ele-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"rule-form-container\">\r\n <form [formGroup]=\"ruleForm\" class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-p-2\">\r\n <cide-ele-input formControlName=\"feedr_name\" label=\"Rule Name\" placeholder=\"e.g., Sibling Discount\"\r\n size=\"sm\" class=\"tw-col-span-2\"></cide-ele-input>\r\n <cide-ele-input formControlName=\"feedr_code\" label=\"Rule Code\" placeholder=\"e.g., SIB-10\"\r\n size=\"sm\"></cide-ele-input>\r\n <cide-ele-select formControlName=\"feedr_mode\" label=\"Application Mode\" [options]=\"modeOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n\r\n <cide-ele-select formControlName=\"feedr_discount_type\" label=\"Discount Type\"\r\n [options]=\"discountTypeOptions()\" size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_discount_value\" label=\"Value\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <cide-ele-select formControlName=\"feedr_stacking\" label=\"Stacking Logic\" [options]=\"stackingOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_priority\" label=\"Priority\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <div\r\n class=\"tw-col-span-2 tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-100 tw-flex tw-items-center tw-gap-3\">\r\n <input type=\"checkbox\" formControlName=\"feedr_approval_req\" class=\"tw-w-4 tw-h-4\">\r\n <div class=\"tw-text-xs tw-text-blue-800\">\r\n <strong>Require Approval?</strong>\r\n <p>If checked, manual application by staff will need manager approval.</p>\r\n </div>\r\n </div>\r\n\r\n <cide-ele-textarea formControlName=\"feedr_description\" label=\"Description\"\r\n placeholder=\"Notes about this discount...\" [rows]=\"2\" size=\"sm\"\r\n class=\"tw-col-span-2\"></cide-ele-textarea>\r\n\r\n <div class=\"tw-col-span-2 tw-mt-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-1\">\r\n <label class=\"tw-text-xs tw-font-bold tw-text-gray-600\">Criteria JSON (Advanced Logic)</label>\r\n <span class=\"tw-text-[10px] tw-text-blue-500 tw-italic\">JSON Array or Object</span>\r\n </div>\r\n <cide-ele-textarea formControlName=\"feedr_criteria_json\"\r\n placeholder='Example: {\"field\": \"admap_is_rte_scheme\", \"operator\": \"==\", \"value\": true}'\r\n [rows]=\"3\" size=\"sm\"></cide-ele-textarea>\r\n <p class=\"tw-text-[10px] tw-text-gray-400 tw-mt-1\">\r\n Use field names from student admission data. Operators: ==, !=, >, <, in, contains. </p>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"tw-p-4 tw-bg-gray-50 tw-border-t tw-border-gray-100 tw-flex tw-justify-end tw-gap-3\">\r\n <button cideEleButton variant=\"ghost\" (click)=\"closeModal()\" [disabled]=\"submitting()\">Cancel</button>\r\n <button cideEleButton variant=\"primary\" (click)=\"onSubmit()\" [loading]=\"submitting()\"\r\n [disabled]=\"ruleForm.invalid\">\r\n {{ isEditing() ? 'Update' : 'Create' }} Rule\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}.rule-form-container{@apply tw-max-h-[80vh] tw-overflow-y-auto tw-p-2;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated", "adaptive"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: 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"] }] });
|
|
255
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.15", type: DiscountRuleManagerComponent, isStandalone: true, selector: "cide-discount-rule-manager", viewQueries: [{ propertyName: "statusRendererTemplate", first: true, predicate: ["statusRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "actionsDropdownRendererTemplate", first: true, predicate: ["actionsDropdownRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "discountValueRendererTemplate", first: true, predicate: ["discountValueRendererTemplate"], descendants: true, isSignal: true }, { propertyName: "modeRendererTemplate", first: true, predicate: ["modeRendererTemplate"], descendants: true, isSignal: true }], ngImport: i0, template: "<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_discount_rule' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n\r\n <div class=\"tw-p-4 tw-flex tw-flex-col tw-gap-4 tw-h-[calc(100vh-140px)]\">\r\n <!-- Header Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center\">\r\n <h2 class=\"tw-text-lg tw-font-bold tw-text-gray-800\">Discount Rules</h2>\r\n <button cideEleButton variant=\"primary\" (click)=\"openCreateModal()\">\r\n <cide-ele-icon size=\"sm\">add</cide-ele-icon> Create New Rule\r\n </button>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-overflow-hidden tw-flex-1\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Status Renderer -->\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-px-2 tw-py-1 tw-rounded-full tw-text-[10px] tw-font-bold\"\r\n [ngClass]=\"row.feedr_status === 'ACTIVE' ? 'tw-bg-green-100 tw-text-green-700' : 'tw-bg-gray-100 tw-text-gray-600'\">\r\n {{ row.feedr_status }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Discount Value Renderer -->\r\n<ng-template #discountValueRendererTemplate let-row=\"row\">\r\n <div class=\"tw-font-bold\"\r\n [ngClass]=\"row.feedr_discount_type === 'PERCENTAGE' ? 'tw-text-blue-600' : 'tw-text-green-600'\">\r\n {{ row.feedr_discount_type === 'PERCENTAGE' ? row.feedr_discount_value + '%' : '\u20B9' + row.feedr_discount_value }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Mode Renderer -->\r\n<ng-template #modeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-xs tw-font-medium\">\r\n {{ row.feedr_mode === 'AUTOMATIC' ? '\uD83D\uDE80 Automatic' : '\u2699\uFE0F Manual' }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Create/Edit Modal -->\r\n@if (showModal()) {\r\n<div class=\"tw-fixed tw-inset-0 tw-bg-black/50 tw-flex tw-items-center tw-justify-center tw-z-[1000] tw-p-4\">\r\n <div class=\"tw-bg-white tw-rounded-2xl tw-shadow-2xl tw-w-full tw-max-w-2xl tw-overflow-hidden\">\r\n <!-- Modal Header -->\r\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center tw-bg-gray-50/50\">\r\n <h3 class=\"tw-text-base tw-font-bold tw-text-gray-800\">\r\n {{ isEditing() ? 'Edit' : 'Create' }} Discount Rule\r\n </h3>\r\n <button (click)=\"closeModal()\" class=\"tw-text-gray-400 hover:tw-text-gray-600\">\r\n <cide-ele-icon>close</cide-ele-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"rule-form-container\">\r\n <form [formGroup]=\"ruleForm\" class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-p-2\">\r\n <cide-ele-input formControlName=\"feedr_name\" label=\"Rule Name\" placeholder=\"e.g., Sibling Discount\"\r\n size=\"sm\" class=\"tw-col-span-2\"></cide-ele-input>\r\n <cide-ele-input formControlName=\"feedr_code\" label=\"Rule Code\" placeholder=\"e.g., SIB-10\"\r\n size=\"sm\"></cide-ele-input>\r\n <cide-ele-select formControlName=\"feedr_mode\" label=\"Application Mode\" [options]=\"modeOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n\r\n <cide-ele-select formControlName=\"feedr_discount_type\" label=\"Discount Type\"\r\n [options]=\"discountTypeOptions()\" size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_discount_value\" label=\"Value\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <cide-ele-select formControlName=\"feedr_stacking\" label=\"Stacking Logic\" [options]=\"stackingOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_priority\" label=\"Priority\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <div\r\n class=\"tw-col-span-2 tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-100 tw-flex tw-items-center tw-gap-3\">\r\n <input type=\"checkbox\" formControlName=\"feedr_approval_req\" class=\"tw-w-4 tw-h-4\">\r\n <div class=\"tw-text-xs tw-text-blue-800\">\r\n <strong>Require Approval?</strong>\r\n <p>If checked, manual application by staff will need manager approval.</p>\r\n </div>\r\n </div>\r\n\r\n <cide-ele-textarea formControlName=\"feedr_description\" label=\"Description\"\r\n placeholder=\"Notes about this discount...\" [rows]=\"2\" size=\"sm\"\r\n class=\"tw-col-span-2\"></cide-ele-textarea>\r\n\r\n <div class=\"tw-col-span-2 tw-mt-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-1\">\r\n <label class=\"tw-text-xs tw-font-bold tw-text-gray-600\">Criteria JSON (Advanced Logic)</label>\r\n <span class=\"tw-text-[10px] tw-text-blue-500 tw-italic\">JSON Array or Object</span>\r\n </div>\r\n <cide-ele-textarea formControlName=\"feedr_criteria_json\"\r\n placeholder='Example: {\"field\": \"admap_is_rte_scheme\", \"operator\": \"==\", \"value\": true}'\r\n [rows]=\"3\" size=\"sm\"></cide-ele-textarea>\r\n <p class=\"tw-text-[10px] tw-text-gray-400 tw-mt-1\">\r\n Use field names from student admission data. Operators: ==, !=, >, <, in, contains. </p>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"tw-p-4 tw-bg-gray-50 tw-border-t tw-border-gray-100 tw-flex tw-justify-end tw-gap-3\">\r\n <button cideEleButton variant=\"ghost\" (click)=\"closeModal()\" [disabled]=\"submitting()\">Cancel</button>\r\n <button cideEleButton variant=\"primary\" (click)=\"onSubmit()\" [loading]=\"submitting()\"\r\n [disabled]=\"ruleForm.invalid\">\r\n {{ isEditing() ? 'Update' : 'Create' }} Rule\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}", styles: [":host{@apply tw-w-full tw-h-full tw-flex tw-flex-col;}.rule-form-container{@apply tw-max-h-[80vh] tw-overflow-y-auto tw-p-2;}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip", "name"] }, { 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", "adaptive"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }, { kind: "component", type: CideLytSharedWrapperComponent, selector: "cide-lyt-shared-wrapper", inputs: ["shared_wrapper_setup_param", "breadcrumb_data"] }, { 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: CideSelectComponent, selector: "cide-ele-select", inputs: ["label", "labelHide", "placeholder", "helperText", "errorText", "required", "disabled", "id", "ngModel", "size", "fill", "labelPlacement", "labelDir", "leadingIcon", "trailingIcon", "clearInput", "options", "multiple", "searchable", "showSearchInput", "loading", "valueKey", "labelKey", "treeView"], outputs: ["ngModelChange", "change", "searchChange"] }, { kind: "component", type: 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"] }] });
|
|
256
256
|
}
|
|
257
257
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: DiscountRuleManagerComponent, decorators: [{
|
|
258
258
|
type: Component,
|
|
@@ -272,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImpo
|
|
|
272
272
|
}], propDecorators: { statusRendererTemplate: [{ type: i0.ViewChild, args: ['statusRendererTemplate', { isSignal: true }] }], actionsDropdownRendererTemplate: [{ type: i0.ViewChild, args: ['actionsDropdownRendererTemplate', { isSignal: true }] }], discountValueRendererTemplate: [{ type: i0.ViewChild, args: ['discountValueRendererTemplate', { isSignal: true }] }], modeRendererTemplate: [{ type: i0.ViewChild, args: ['modeRendererTemplate', { isSignal: true }] }] } });
|
|
273
273
|
|
|
274
274
|
export { DiscountRuleManagerComponent };
|
|
275
|
-
//# sourceMappingURL=cloud-ide-fees-discount-rule-manager.component-
|
|
275
|
+
//# sourceMappingURL=cloud-ide-fees-discount-rule-manager.component-B2322yJN.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloud-ide-fees-discount-rule-manager.component-CTgMTze9.mjs","sources":["../../../projects/cloud-ide-fees/src/lib/collection/discount-management/components/discount-rule-manager/discount-rule-manager.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/discount-management/components/discount-rule-manager/discount-rule-manager.component.html"],"sourcesContent":["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, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\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 ConfirmationService,\r\n NotificationService,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideTextareaComponent\r\n} from 'cloud-ide-element';\r\nimport {\r\n FeeDiscountRule,\r\n MFeeDiscountRule,\r\n MFeeDiscountRuleGetByIdPayload,\r\n MFeeDiscountRuleInsertUpdatePayload,\r\n MFeeDiscountRuleDeletePayload,\r\n MFeeDiscountRuleToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\nimport { AppStateHelperService, CideLytSharedWrapperComponent, RightsService } from 'cloud-ide-layout';\r\nimport { CideFeeDiscountRuleService } from '../../services/discount-rule.service';\r\n\r\n@Component({\r\n selector: 'cide-discount-rule-manager',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDataGridComponent,\r\n CideEleDropdownComponent,\r\n CideLytSharedWrapperComponent,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideTextareaComponent\r\n ],\r\n templateUrl: './discount-rule-manager.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 .rule-form-container {\r\n @apply tw-max-h-[80vh] tw-overflow-y-auto tw-p-2;\r\n }\r\n `]\r\n})\r\nexport class DiscountRuleManagerComponent implements OnInit, OnDestroy {\r\n private readonly fb = inject(FormBuilder);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly discountRuleService = inject(CideFeeDiscountRuleService);\r\n private readonly appState = inject(AppStateHelperService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly notificationService = inject(NotificationService);\r\n private readonly rightsService = inject(RightsService);\r\n\r\n // ViewChild templates for grid\r\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\r\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n readonly discountValueRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('discountValueRendererTemplate');\r\n readonly modeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('modeRendererTemplate');\r\n\r\n // State signals\r\n readonly discountRules = signal<FeeDiscountRule[]>([]);\r\n readonly loading = signal<boolean>(false);\r\n readonly showModal = signal<boolean>(false);\r\n readonly isEditing = signal<boolean>(false);\r\n readonly submitting = signal<boolean>(false);\r\n\r\n // Pagination and search\r\n readonly currentPage = signal<number>(1);\r\n readonly pageSize = signal<number>(10);\r\n readonly totalItems = signal<number>(0);\r\n readonly searchQuery = signal<string>('');\r\n\r\n readonly breadcrumbData = signal([\r\n { id: 'list', label: 'Discount Rules', icon: 'percent' }\r\n ]);\r\n\r\n // Rule Form\r\n ruleForm: FormGroup = this.fb.group({\r\n _id: [null],\r\n feedr_name: ['', Validators.required],\r\n feedr_code: ['', Validators.required],\r\n feedr_description: [''],\r\n feedr_discount_type: ['PERCENTAGE', Validators.required],\r\n feedr_discount_value: [0, [Validators.required, Validators.min(0)]],\r\n feedr_mode: ['MANUAL', Validators.required],\r\n feedr_status: ['ACTIVE'],\r\n feedr_priority: [1],\r\n feedr_approval_req: [false],\r\n feedr_stacking: ['STACKABLE'],\r\n feedr_criteria_json: ['']\r\n });\r\n\r\n // Configuration options\r\n readonly discountTypeOptions = signal([\r\n { value: 'PERCENTAGE', label: 'Percentage (%)' },\r\n { value: 'FIXED_AMOUNT', label: 'Fixed Amount (₹)' }\r\n ]);\r\n\r\n readonly modeOptions = signal([\r\n { value: 'MANUAL', label: 'Manual Selection' },\r\n { value: 'AUTOMATIC', label: 'Automatic Application' }\r\n ]);\r\n\r\n readonly stackingOptions = signal([\r\n { value: 'STACKABLE', label: 'Stackable' },\r\n { value: 'EXCLUSIVE', label: 'Exclusive (Only this)' },\r\n { value: 'MAX_OF', label: 'Max Of (Best for student)' }\r\n ]);\r\n\r\n readonly gridConfig = computed<GridConfiguration<FeeDiscountRule>>(() => ({\r\n id: 'discount-rule-grid',\r\n columns: [\r\n { key: 'feedr_code', header: 'Code', type: 'text', width: '120px', sortable: true },\r\n { key: 'feedr_name', header: 'Rule Name', type: 'text', width: 'auto', sortable: true },\r\n { key: 'discount_value', header: 'Value', type: 'custom', width: '120px', renderer: 'discountValueRenderer' },\r\n { key: 'feedr_mode', header: 'Mode', type: 'custom', width: '120px', renderer: 'modeRenderer' },\r\n { key: 'feedr_status', header: 'Status', type: 'custom', width: '120px', renderer: 'statusRenderer' },\r\n { key: 'actions', header: 'Actions', type: 'custom', width: '80px', renderer: 'actionsDropdownRenderer' }\r\n ],\r\n data: this.discountRules(),\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 rules...',\r\n searchableColumns: ['feedr_name', 'feedr_code', 'feedr_description']\r\n },\r\n loading: {\r\n showOverlay: this.loading(),\r\n useDefer: true,\r\n skeletonRows: 5\r\n },\r\n responsive: true\r\n }));\r\n\r\n ngOnInit(): void {\r\n this.rightsService.initializeRights('fee_discount_rule');\r\n this.loadDiscountRules();\r\n }\r\n\r\n ngOnDestroy(): void { }\r\n\r\n loadDiscountRules(): void {\r\n this.loading.set(true);\r\n const payload = new MFeeDiscountRule({\r\n pageIndex: this.currentPage(),\r\n pageSize: this.pageSize(),\r\n query: this.searchQuery(),\r\n feedr_entity_id_syen: this.appState.activeEntity()?._id\r\n });\r\n\r\n this.discountRuleService.getDiscountRuleList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (res: any) => {\r\n if (res.success) {\r\n this.discountRules.set(res.data || []);\r\n this.totalItems.set(res.total || 0);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: () => this.loading.set(false)\r\n });\r\n }\r\n\r\n onGridEvent(event: GridEvent<any>): void {\r\n if (event.type === 'pageChange') {\r\n const pageData = event.data as { pageIndex: number, pageSize: number };\r\n this.currentPage.set(pageData.pageIndex);\r\n this.pageSize.set(pageData.pageSize);\r\n this.loadDiscountRules();\r\n } else if (event.type === 'search') {\r\n this.searchQuery.set(event.data as string);\r\n this.currentPage.set(1);\r\n this.loadDiscountRules();\r\n }\r\n }\r\n\r\n openCreateModal(): void {\r\n this.isEditing.set(false);\r\n this.ruleForm.reset({\r\n feedr_discount_type: 'PERCENTAGE',\r\n feedr_mode: 'MANUAL',\r\n feedr_status: 'ACTIVE',\r\n feedr_priority: 1,\r\n feedr_stacking: 'STACKABLE',\r\n feedr_approval_req: false\r\n });\r\n this.showModal.set(true);\r\n }\r\n\r\n editRule(rule: FeeDiscountRule): void {\r\n this.isEditing.set(true);\r\n this.ruleForm.patchValue(rule);\r\n this.showModal.set(true);\r\n }\r\n\r\n closeModal(): void {\r\n this.showModal.set(false);\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.ruleForm.invalid) return;\r\n\r\n this.submitting.set(true);\r\n const payload = new MFeeDiscountRuleInsertUpdatePayload(this.ruleForm.value);\r\n payload.feedr_entity_id_syen = this.appState.activeEntity()?._id;\r\n\r\n this.discountRuleService.saveDiscountRule(payload)\r\n .subscribe({\r\n next: (res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Discount rule saved successfully');\r\n this.showModal.set(false);\r\n this.loadDiscountRules();\r\n }\r\n this.submitting.set(false);\r\n },\r\n error: () => this.submitting.set(false)\r\n });\r\n }\r\n\r\n toggleStatus(rule: FeeDiscountRule): void {\r\n const payload = new MFeeDiscountRuleToggleStatusPayload({ feedr_id: rule._id });\r\n this.discountRuleService.toggleDiscountRuleStatus(payload).subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Status updated');\r\n this.loadDiscountRules();\r\n }\r\n });\r\n }\r\n\r\n deleteRule(rule: FeeDiscountRule): void {\r\n this.confirmationService.ask({\r\n title: 'Delete Rule',\r\n message: `Are you sure you want to delete \"${rule.feedr_name}\"?`,\r\n type: 'warning'\r\n }).then(confirmed => {\r\n if (confirmed) {\r\n const payload = new MFeeDiscountRuleDeletePayload({ feedr_id: rule._id });\r\n this.discountRuleService.deleteDiscountRule(payload).subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Rule deleted');\r\n this.loadDiscountRules();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getActionDropdownItems(rule: FeeDiscountRule): DropdownItem[] {\r\n const items: DropdownItem[] = [\r\n { id: 'edit', label: 'Edit', icon: 'edit' },\r\n { id: 'toggle', label: rule.feedr_status === 'ACTIVE' ? 'Deactivate' : 'Activate', icon: 'sync_alt' }\r\n ];\r\n\r\n // Only show sync for active automatic rules\r\n if (rule.feedr_status === 'ACTIVE' && rule.feedr_mode === 'AUTOMATIC') {\r\n items.push({ id: 'sync', label: 'Sync Rule', icon: 'sync' });\r\n }\r\n\r\n items.push({ id: 'delete', label: 'Delete', icon: 'delete', textColor: 'tw-text-red-600' });\r\n return items;\r\n }\r\n\r\n onDropdownItemClick(item: DropdownItem, rule: FeeDiscountRule): void {\r\n if (item.id === 'edit') this.editRule(rule);\r\n else if (item.id === 'toggle') this.toggleStatus(rule);\r\n else if (item.id === 'delete') this.deleteRule(rule);\r\n else if (item.id === 'sync') this.onSyncRule(rule);\r\n }\r\n\r\n onSyncRule(rule: FeeDiscountRule): void {\r\n if (!rule._id) return;\r\n\r\n this.confirmationService.ask({\r\n title: 'Sync Rule',\r\n message: `Do you want to sync \"${rule.feedr_name}\" with all existing UNPAID assignments? This will re-evaluate criteria and update amounts.`,\r\n type: 'info'\r\n }).then(confirmed => {\r\n if (confirmed) {\r\n this.notificationService.info('Syncing in progress...');\r\n this.discountRuleService.syncDiscountRule({ feedr_id: rule._id! })\r\n .subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success(res.message || 'Sync completed successfully');\r\n } else {\r\n this.notificationService.error(res.message || 'Sync failed');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n templateRenderers = computed(() => ({\r\n statusRenderer: this.statusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate(),\r\n discountValueRenderer: this.discountValueRendererTemplate(),\r\n modeRenderer: this.modeRendererTemplate()\r\n }));\r\n}\r\n","<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_discount_rule' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n\r\n <div class=\"tw-p-4 tw-flex tw-flex-col tw-gap-4 tw-h-[calc(100vh-140px)]\">\r\n <!-- Header Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center\">\r\n <h2 class=\"tw-text-lg tw-font-bold tw-text-gray-800\">Discount Rules</h2>\r\n <button cideEleButton variant=\"primary\" (click)=\"openCreateModal()\">\r\n <cide-ele-icon size=\"sm\">add</cide-ele-icon> Create New Rule\r\n </button>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-overflow-hidden tw-flex-1\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Status Renderer -->\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-px-2 tw-py-1 tw-rounded-full tw-text-[10px] tw-font-bold\"\r\n [ngClass]=\"row.feedr_status === 'ACTIVE' ? 'tw-bg-green-100 tw-text-green-700' : 'tw-bg-gray-100 tw-text-gray-600'\">\r\n {{ row.feedr_status }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Discount Value Renderer -->\r\n<ng-template #discountValueRendererTemplate let-row=\"row\">\r\n <div class=\"tw-font-bold\"\r\n [ngClass]=\"row.feedr_discount_type === 'PERCENTAGE' ? 'tw-text-blue-600' : 'tw-text-green-600'\">\r\n {{ row.feedr_discount_type === 'PERCENTAGE' ? row.feedr_discount_value + '%' : '₹' + row.feedr_discount_value }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Mode Renderer -->\r\n<ng-template #modeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-xs tw-font-medium\">\r\n {{ row.feedr_mode === 'AUTOMATIC' ? '🚀 Automatic' : '⚙️ Manual' }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Create/Edit Modal -->\r\n@if (showModal()) {\r\n<div class=\"tw-fixed tw-inset-0 tw-bg-black/50 tw-flex tw-items-center tw-justify-center tw-z-[1000] tw-p-4\">\r\n <div class=\"tw-bg-white tw-rounded-2xl tw-shadow-2xl tw-w-full tw-max-w-2xl tw-overflow-hidden\">\r\n <!-- Modal Header -->\r\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center tw-bg-gray-50/50\">\r\n <h3 class=\"tw-text-base tw-font-bold tw-text-gray-800\">\r\n {{ isEditing() ? 'Edit' : 'Create' }} Discount Rule\r\n </h3>\r\n <button (click)=\"closeModal()\" class=\"tw-text-gray-400 hover:tw-text-gray-600\">\r\n <cide-ele-icon>close</cide-ele-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"rule-form-container\">\r\n <form [formGroup]=\"ruleForm\" class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-p-2\">\r\n <cide-ele-input formControlName=\"feedr_name\" label=\"Rule Name\" placeholder=\"e.g., Sibling Discount\"\r\n size=\"sm\" class=\"tw-col-span-2\"></cide-ele-input>\r\n <cide-ele-input formControlName=\"feedr_code\" label=\"Rule Code\" placeholder=\"e.g., SIB-10\"\r\n size=\"sm\"></cide-ele-input>\r\n <cide-ele-select formControlName=\"feedr_mode\" label=\"Application Mode\" [options]=\"modeOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n\r\n <cide-ele-select formControlName=\"feedr_discount_type\" label=\"Discount Type\"\r\n [options]=\"discountTypeOptions()\" size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_discount_value\" label=\"Value\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <cide-ele-select formControlName=\"feedr_stacking\" label=\"Stacking Logic\" [options]=\"stackingOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_priority\" label=\"Priority\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <div\r\n class=\"tw-col-span-2 tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-100 tw-flex tw-items-center tw-gap-3\">\r\n <input type=\"checkbox\" formControlName=\"feedr_approval_req\" class=\"tw-w-4 tw-h-4\">\r\n <div class=\"tw-text-xs tw-text-blue-800\">\r\n <strong>Require Approval?</strong>\r\n <p>If checked, manual application by staff will need manager approval.</p>\r\n </div>\r\n </div>\r\n\r\n <cide-ele-textarea formControlName=\"feedr_description\" label=\"Description\"\r\n placeholder=\"Notes about this discount...\" [rows]=\"2\" size=\"sm\"\r\n class=\"tw-col-span-2\"></cide-ele-textarea>\r\n\r\n <div class=\"tw-col-span-2 tw-mt-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-1\">\r\n <label class=\"tw-text-xs tw-font-bold tw-text-gray-600\">Criteria JSON (Advanced Logic)</label>\r\n <span class=\"tw-text-[10px] tw-text-blue-500 tw-italic\">JSON Array or Object</span>\r\n </div>\r\n <cide-ele-textarea formControlName=\"feedr_criteria_json\"\r\n placeholder='Example: {\"field\": \"admap_is_rte_scheme\", \"operator\": \"==\", \"value\": true}'\r\n [rows]=\"3\" size=\"sm\"></cide-ele-textarea>\r\n <p class=\"tw-text-[10px] tw-text-gray-400 tw-mt-1\">\r\n Use field names from student admission data. Operators: ==, !=, >, <, in, contains. </p>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"tw-p-4 tw-bg-gray-50 tw-border-t tw-border-gray-100 tw-flex tw-justify-end tw-gap-3\">\r\n <button cideEleButton variant=\"ghost\" (click)=\"closeModal()\" [disabled]=\"submitting()\">Cancel</button>\r\n <button cideEleButton variant=\"primary\" (click)=\"onSubmit()\" [loading]=\"submitting()\"\r\n [disabled]=\"ruleForm.invalid\">\r\n {{ isEditing() ? 'Update' : 'Create' }} Rule\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}"],"names":["i2"],"mappings":";;;;;;;;;;;;MAkEa,4BAA4B,CAAA;AACpB,IAAA,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC;AACxB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,mBAAmB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACxD,IAAA,QAAQ,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACxC,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;;AAG7C,IAAA,sBAAsB,GAAG,SAAS,CAAC,QAAQ,CAA+B,wBAAwB,CAAC;AACnG,IAAA,+BAA+B,GAAG,SAAS,CAAC,QAAQ,CAA+B,iCAAiC,CAAC;AACrH,IAAA,6BAA6B,GAAG,SAAS,CAAC,QAAQ,CAA+B,+BAA+B,CAAC;AACjH,IAAA,oBAAoB,GAAG,SAAS,CAAC,QAAQ,CAA+B,sBAAsB,CAAC;;AAG/F,IAAA,aAAa,GAAG,MAAM,CAAoB,EAAE,yDAAC;AAC7C,IAAA,OAAO,GAAG,MAAM,CAAU,KAAK,mDAAC;AAChC,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,qDAAC;AAClC,IAAA,UAAU,GAAG,MAAM,CAAU,KAAK,sDAAC;;AAGnC,IAAA,WAAW,GAAG,MAAM,CAAS,CAAC,uDAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAS,EAAE,oDAAC;AAC7B,IAAA,UAAU,GAAG,MAAM,CAAS,CAAC,sDAAC;AAC9B,IAAA,WAAW,GAAG,MAAM,CAAS,EAAE,uDAAC;IAEhC,cAAc,GAAG,MAAM,CAAC;QAC7B,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS;AACzD,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;;AAGF,IAAA,QAAQ,GAAc,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;QAChC,GAAG,EAAE,CAAC,IAAI,CAAC;AACX,QAAA,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;AACrC,QAAA,UAAU,EAAE,CAAC,EAAE,EAAE,UAAU,CAAC,QAAQ,CAAC;QACrC,iBAAiB,EAAE,CAAC,EAAE,CAAC;AACvB,QAAA,mBAAmB,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC;AACxD,QAAA,oBAAoB,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,QAAA,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC;QAC3C,YAAY,EAAE,CAAC,QAAQ,CAAC;QACxB,cAAc,EAAE,CAAC,CAAC,CAAC;QACnB,kBAAkB,EAAE,CAAC,KAAK,CAAC;QAC3B,cAAc,EAAE,CAAC,WAAW,CAAC;QAC7B,mBAAmB,EAAE,CAAC,EAAE;AAC3B,KAAA,CAAC;;IAGO,mBAAmB,GAAG,MAAM,CAAC;AAClC,QAAA,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE;AAChD,QAAA,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB;AACrD,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,qBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEO,WAAW,GAAG,MAAM,CAAC;AAC1B,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE;AAC9C,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB;AACvD,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,aAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEO,eAAe,GAAG,MAAM,CAAC;AAC9B,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;AAC1C,QAAA,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,uBAAuB,EAAE;AACtD,QAAA,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B;AACxD,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,iBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;AAEO,IAAA,UAAU,GAAG,QAAQ,CAAqC,OAAO;AACtE,QAAA,EAAE,EAAE,oBAAoB;AACxB,QAAA,OAAO,EAAE;AACL,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;AACnF,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;AACvF,YAAA,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE;AAC7G,YAAA,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE;AAC/F,YAAA,EAAE,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AACrG,YAAA,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB;AAC1G,SAAA;AACD,QAAA,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE;AAC1B,QAAA,UAAU,EAAE;AACR,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AAChB,SAAA;AACD,QAAA,MAAM,EAAE;AACJ,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,iBAAiB;AAC9B,YAAA,iBAAiB,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,mBAAmB;AACtE,SAAA;AACD,QAAA,OAAO,EAAE;AACL,YAAA,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE;AACjB,SAAA;AACD,QAAA,UAAU,EAAE;AACf,KAAA,CAAC,sDAAC;IAEH,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,mBAAmB,CAAC;QACxD,IAAI,CAAC,iBAAiB,EAAE;IAC5B;AAEA,IAAA,WAAW,KAAW;IAEtB,iBAAiB,GAAA;AACb,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;AACjC,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE;AAC7B,YAAA,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;AACzB,YAAA,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE;YACzB,oBAAoB,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE;AACvD,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,CAAC,OAAO;AAC/C,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACP,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACf,gBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;oBACb,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;oBACtC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;gBACvC;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAC3B,CAAC;YACD,KAAK,EAAE,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK;AACtC,SAAA,CAAC;IACV;AAEA,IAAA,WAAW,CAAC,KAAqB,EAAA;AAC7B,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;AAC7B,YAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAA+C;YACtE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACpC,IAAI,CAAC,iBAAiB,EAAE;QAC5B;AAAO,aAAA,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;YAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAc,CAAC;AAC1C,YAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,iBAAiB,EAAE;QAC5B;IACJ;IAEA,eAAe,GAAA;AACX,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;AAChB,YAAA,mBAAmB,EAAE,YAAY;AACjC,YAAA,UAAU,EAAE,QAAQ;AACpB,YAAA,YAAY,EAAE,QAAQ;AACtB,YAAA,cAAc,EAAE,CAAC;AACjB,YAAA,cAAc,EAAE,WAAW;AAC3B,YAAA,kBAAkB,EAAE;AACvB,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;AAEA,IAAA,QAAQ,CAAC,IAAqB,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;AAC9B,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;IAC5B;IAEA,UAAU,GAAA;AACN,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;IAC7B;IAEA,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE;AAE3B,QAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,mCAAmC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5E,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,GAAG;AAEhE,QAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,OAAO;AAC5C,aAAA,SAAS,CAAC;AACP,YAAA,IAAI,EAAE,CAAC,GAAQ,KAAI;AACf,gBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,oBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,kCAAkC,CAAC;AACpE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;oBACzB,IAAI,CAAC,iBAAiB,EAAE;gBAC5B;AACA,gBAAA,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;YAC9B,CAAC;YACD,KAAK,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK;AACzC,SAAA,CAAC;IACV;AAEA,IAAA,YAAY,CAAC,IAAqB,EAAA;AAC9B,QAAA,MAAM,OAAO,GAAG,IAAI,mCAAmC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AAC/E,QAAA,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AAC9E,YAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,gBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,gBAAgB,CAAC;gBAClD,IAAI,CAAC,iBAAiB,EAAE;YAC5B;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,UAAU,CAAC,IAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AACzB,YAAA,KAAK,EAAE,aAAa;AACpB,YAAA,OAAO,EAAE,CAAA,iCAAA,EAAoC,IAAI,CAAC,UAAU,CAAA,EAAA,CAAI;AAChE,YAAA,IAAI,EAAE;AACT,SAAA,CAAC,CAAC,IAAI,CAAC,SAAS,IAAG;YAChB,IAAI,SAAS,EAAE;AACX,gBAAA,MAAM,OAAO,GAAG,IAAI,6BAA6B,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;AACzE,gBAAA,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,GAAQ,KAAI;AACxE,oBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;AACb,wBAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC;wBAChD,IAAI,CAAC,iBAAiB,EAAE;oBAC5B;AACJ,gBAAA,CAAC,CAAC;YACN;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,sBAAsB,CAAC,IAAqB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAmB;YAC1B,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;YAC3C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,KAAK,QAAQ,GAAG,YAAY,GAAG,UAAU,EAAE,IAAI,EAAE,UAAU;SACtG;;AAGD,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,WAAW,EAAE;AACnE,YAAA,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAChE;QAEA,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;AAC3F,QAAA,OAAO,KAAK;IAChB;IAEA,mBAAmB,CAAC,IAAkB,EAAE,IAAqB,EAAA;AACzD,QAAA,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACtC,aAAA,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACjD,aAAA,IAAI,IAAI,CAAC,EAAE,KAAK,QAAQ;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AAC/C,aAAA,IAAI,IAAI,CAAC,EAAE,KAAK,MAAM;AAAE,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACtD;AAEA,IAAA,UAAU,CAAC,IAAqB,EAAA;QAC5B,IAAI,CAAC,IAAI,CAAC,GAAG;YAAE;AAEf,QAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC;AACzB,YAAA,KAAK,EAAE,WAAW;AAClB,YAAA,OAAO,EAAE,CAAA,qBAAA,EAAwB,IAAI,CAAC,UAAU,CAAA,0FAAA,CAA4F;AAC5I,YAAA,IAAI,EAAE;AACT,SAAA,CAAC,CAAC,IAAI,CAAC,SAAS,IAAG;YAChB,IAAI,SAAS,EAAE;AACX,gBAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,wBAAwB,CAAC;AACvD,gBAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAI,EAAE;AAC5D,qBAAA,SAAS,CAAC,CAAC,GAAQ,KAAI;AACpB,oBAAA,IAAI,GAAG,CAAC,OAAO,EAAE;wBACb,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,6BAA6B,CAAC;oBAClF;yBAAO;wBACH,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,aAAa,CAAC;oBAChE;AACJ,gBAAA,CAAC,CAAC;YACV;AACJ,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,iBAAiB,GAAG,QAAQ,CAAC,OAAO;AAChC,QAAA,cAAc,EAAE,IAAI,CAAC,sBAAsB,EAAE;AAC7C,QAAA,uBAAuB,EAAE,IAAI,CAAC,+BAA+B,EAAE;AAC/D,QAAA,qBAAqB,EAAE,IAAI,CAAC,6BAA6B,EAAE;AAC3D,QAAA,YAAY,EAAE,IAAI,CAAC,oBAAoB;AAC1C,KAAA,CAAC,6DAAC;wGArQM,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAA5B,4BAA4B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,wBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iCAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iCAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,+BAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,+BAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,sBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,sBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EClEzC,68NA0HC,EAAA,MAAA,EAAA,CAAA,iIAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,ED9EO,YAAY,4HACZ,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,aAAA,EAAA,QAAA,EAAA,8CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,4BAAA,EAAA,QAAA,EAAA,uGAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACX,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,iBAAiB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACjB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,6BAA6B,+HAC7B,kBAAkB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,wBAAA,EAAA,WAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,MAAA,EAAA,OAAA,EAAA,IAAA,EAAA,SAAA,EAAA,QAAA,EAAA,KAAA,EAAA,KAAA,EAAA,MAAA,EAAA,MAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,mBAAmB,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACnB,qBAAqB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,YAAA,EAAA,WAAA,EAAA,UAAA,EAAA,UAAA,EAAA,WAAA,EAAA,WAAA,EAAA,MAAA,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,aAAA,EAAA,cAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;4FAYhB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBA1BxC,SAAS;+BACI,4BAA4B,EAAA,UAAA,EAC1B,IAAI,EAAA,OAAA,EACP;wBACL,YAAY;wBACZ,WAAW;wBACX,mBAAmB;wBACnB,iBAAiB;wBACjB,sBAAsB;wBACtB,wBAAwB;wBACxB,wBAAwB;wBACxB,6BAA6B;wBAC7B,kBAAkB;wBAClB,mBAAmB;wBACnB;AACH,qBAAA,EAAA,QAAA,EAAA,68NAAA,EAAA,MAAA,EAAA,CAAA,iIAAA,CAAA,EAAA;AAqBkF,SAAA,CAAA,EAAA,cAAA,EAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CAAA,wBAAwB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,+BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACf,iCAAiC,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,6BAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,IAAA,EAAA,CACnC,+BAA+B,8EACxC,sBAAsB,EAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"cloud-ide-fees-discount-rule-manager.component-B2322yJN.mjs","sources":["../../../projects/cloud-ide-fees/src/lib/collection/discount-management/components/discount-rule-manager/discount-rule-manager.component.ts","../../../projects/cloud-ide-fees/src/lib/collection/discount-management/components/discount-rule-manager/discount-rule-manager.component.html"],"sourcesContent":["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, ReactiveFormsModule, FormBuilder, FormGroup, Validators } from '@angular/forms';\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 ConfirmationService,\r\n NotificationService,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideTextareaComponent\r\n} from 'cloud-ide-element';\r\nimport {\r\n FeeDiscountRule,\r\n MFeeDiscountRule,\r\n MFeeDiscountRuleGetByIdPayload,\r\n MFeeDiscountRuleInsertUpdatePayload,\r\n MFeeDiscountRuleDeletePayload,\r\n MFeeDiscountRuleToggleStatusPayload\r\n} from 'cloud-ide-lms-model';\r\nimport { AppStateHelperService, CideLytSharedWrapperComponent, RightsService } from 'cloud-ide-layout';\r\nimport { CideFeeDiscountRuleService } from '../../services/discount-rule.service';\r\n\r\n@Component({\r\n selector: 'cide-discount-rule-manager',\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n CideIconComponent,\r\n CideEleButtonComponent,\r\n CideEleDataGridComponent,\r\n CideEleDropdownComponent,\r\n CideLytSharedWrapperComponent,\r\n CideInputComponent,\r\n CideSelectComponent,\r\n CideTextareaComponent\r\n ],\r\n templateUrl: './discount-rule-manager.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 .rule-form-container {\r\n @apply tw-max-h-[80vh] tw-overflow-y-auto tw-p-2;\r\n }\r\n `]\r\n})\r\nexport class DiscountRuleManagerComponent implements OnInit, OnDestroy {\r\n private readonly fb = inject(FormBuilder);\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly discountRuleService = inject(CideFeeDiscountRuleService);\r\n private readonly appState = inject(AppStateHelperService);\r\n private readonly confirmationService = inject(ConfirmationService);\r\n private readonly notificationService = inject(NotificationService);\r\n private readonly rightsService = inject(RightsService);\r\n\r\n // ViewChild templates for grid\r\n readonly statusRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('statusRendererTemplate');\r\n readonly actionsDropdownRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('actionsDropdownRendererTemplate');\r\n readonly discountValueRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('discountValueRendererTemplate');\r\n readonly modeRendererTemplate = viewChild.required<TemplateRef<TemplateContext>>('modeRendererTemplate');\r\n\r\n // State signals\r\n readonly discountRules = signal<FeeDiscountRule[]>([]);\r\n readonly loading = signal<boolean>(false);\r\n readonly showModal = signal<boolean>(false);\r\n readonly isEditing = signal<boolean>(false);\r\n readonly submitting = signal<boolean>(false);\r\n\r\n // Pagination and search\r\n readonly currentPage = signal<number>(1);\r\n readonly pageSize = signal<number>(10);\r\n readonly totalItems = signal<number>(0);\r\n readonly searchQuery = signal<string>('');\r\n\r\n readonly breadcrumbData = signal([\r\n { id: 'list', label: 'Discount Rules', icon: 'percent' }\r\n ]);\r\n\r\n // Rule Form\r\n ruleForm: FormGroup = this.fb.group({\r\n _id: [null],\r\n feedr_name: ['', Validators.required],\r\n feedr_code: ['', Validators.required],\r\n feedr_description: [''],\r\n feedr_discount_type: ['PERCENTAGE', Validators.required],\r\n feedr_discount_value: [0, [Validators.required, Validators.min(0)]],\r\n feedr_mode: ['MANUAL', Validators.required],\r\n feedr_status: ['ACTIVE'],\r\n feedr_priority: [1],\r\n feedr_approval_req: [false],\r\n feedr_stacking: ['STACKABLE'],\r\n feedr_criteria_json: ['']\r\n });\r\n\r\n // Configuration options\r\n readonly discountTypeOptions = signal([\r\n { value: 'PERCENTAGE', label: 'Percentage (%)' },\r\n { value: 'FIXED_AMOUNT', label: 'Fixed Amount (₹)' }\r\n ]);\r\n\r\n readonly modeOptions = signal([\r\n { value: 'MANUAL', label: 'Manual Selection' },\r\n { value: 'AUTOMATIC', label: 'Automatic Application' }\r\n ]);\r\n\r\n readonly stackingOptions = signal([\r\n { value: 'STACKABLE', label: 'Stackable' },\r\n { value: 'EXCLUSIVE', label: 'Exclusive (Only this)' },\r\n { value: 'MAX_OF', label: 'Max Of (Best for student)' }\r\n ]);\r\n\r\n readonly gridConfig = computed<GridConfiguration<FeeDiscountRule>>(() => ({\r\n id: 'discount-rule-grid',\r\n columns: [\r\n { key: 'feedr_code', header: 'Code', type: 'text', width: '120px', sortable: true },\r\n { key: 'feedr_name', header: 'Rule Name', type: 'text', width: 'auto', sortable: true },\r\n { key: 'discount_value', header: 'Value', type: 'custom', width: '120px', renderer: 'discountValueRenderer' },\r\n { key: 'feedr_mode', header: 'Mode', type: 'custom', width: '120px', renderer: 'modeRenderer' },\r\n { key: 'feedr_status', header: 'Status', type: 'custom', width: '120px', renderer: 'statusRenderer' },\r\n { key: 'actions', header: 'Actions', type: 'custom', width: '80px', renderer: 'actionsDropdownRenderer' }\r\n ],\r\n data: this.discountRules(),\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 rules...',\r\n searchableColumns: ['feedr_name', 'feedr_code', 'feedr_description']\r\n },\r\n loading: {\r\n showOverlay: this.loading(),\r\n useDefer: true,\r\n skeletonRows: 5\r\n },\r\n responsive: true\r\n }));\r\n\r\n ngOnInit(): void {\r\n this.rightsService.initializeRights('fee_discount_rule');\r\n this.loadDiscountRules();\r\n }\r\n\r\n ngOnDestroy(): void { }\r\n\r\n loadDiscountRules(): void {\r\n this.loading.set(true);\r\n const payload = new MFeeDiscountRule({\r\n pageIndex: this.currentPage(),\r\n pageSize: this.pageSize(),\r\n query: this.searchQuery(),\r\n feedr_entity_id_syen: this.appState.activeEntity()?._id\r\n });\r\n\r\n this.discountRuleService.getDiscountRuleList(payload)\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (res: any) => {\r\n if (res.success) {\r\n this.discountRules.set(res.data || []);\r\n this.totalItems.set(res.total || 0);\r\n }\r\n this.loading.set(false);\r\n },\r\n error: () => this.loading.set(false)\r\n });\r\n }\r\n\r\n onGridEvent(event: GridEvent<any>): void {\r\n if (event.type === 'pageChange') {\r\n const pageData = event.data as { pageIndex: number, pageSize: number };\r\n this.currentPage.set(pageData.pageIndex);\r\n this.pageSize.set(pageData.pageSize);\r\n this.loadDiscountRules();\r\n } else if (event.type === 'search') {\r\n this.searchQuery.set(event.data as string);\r\n this.currentPage.set(1);\r\n this.loadDiscountRules();\r\n }\r\n }\r\n\r\n openCreateModal(): void {\r\n this.isEditing.set(false);\r\n this.ruleForm.reset({\r\n feedr_discount_type: 'PERCENTAGE',\r\n feedr_mode: 'MANUAL',\r\n feedr_status: 'ACTIVE',\r\n feedr_priority: 1,\r\n feedr_stacking: 'STACKABLE',\r\n feedr_approval_req: false\r\n });\r\n this.showModal.set(true);\r\n }\r\n\r\n editRule(rule: FeeDiscountRule): void {\r\n this.isEditing.set(true);\r\n this.ruleForm.patchValue(rule);\r\n this.showModal.set(true);\r\n }\r\n\r\n closeModal(): void {\r\n this.showModal.set(false);\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.ruleForm.invalid) return;\r\n\r\n this.submitting.set(true);\r\n const payload = new MFeeDiscountRuleInsertUpdatePayload(this.ruleForm.value);\r\n payload.feedr_entity_id_syen = this.appState.activeEntity()?._id;\r\n\r\n this.discountRuleService.saveDiscountRule(payload)\r\n .subscribe({\r\n next: (res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Discount rule saved successfully');\r\n this.showModal.set(false);\r\n this.loadDiscountRules();\r\n }\r\n this.submitting.set(false);\r\n },\r\n error: () => this.submitting.set(false)\r\n });\r\n }\r\n\r\n toggleStatus(rule: FeeDiscountRule): void {\r\n const payload = new MFeeDiscountRuleToggleStatusPayload({ feedr_id: rule._id });\r\n this.discountRuleService.toggleDiscountRuleStatus(payload).subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Status updated');\r\n this.loadDiscountRules();\r\n }\r\n });\r\n }\r\n\r\n deleteRule(rule: FeeDiscountRule): void {\r\n this.confirmationService.ask({\r\n title: 'Delete Rule',\r\n message: `Are you sure you want to delete \"${rule.feedr_name}\"?`,\r\n type: 'warning'\r\n }).then(confirmed => {\r\n if (confirmed) {\r\n const payload = new MFeeDiscountRuleDeletePayload({ feedr_id: rule._id });\r\n this.discountRuleService.deleteDiscountRule(payload).subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success('Rule deleted');\r\n this.loadDiscountRules();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n getActionDropdownItems(rule: FeeDiscountRule): DropdownItem[] {\r\n const items: DropdownItem[] = [\r\n { id: 'edit', label: 'Edit', icon: 'edit' },\r\n { id: 'toggle', label: rule.feedr_status === 'ACTIVE' ? 'Deactivate' : 'Activate', icon: 'sync_alt' }\r\n ];\r\n\r\n // Only show sync for active automatic rules\r\n if (rule.feedr_status === 'ACTIVE' && rule.feedr_mode === 'AUTOMATIC') {\r\n items.push({ id: 'sync', label: 'Sync Rule', icon: 'sync' });\r\n }\r\n\r\n items.push({ id: 'delete', label: 'Delete', icon: 'delete', textColor: 'tw-text-red-600' });\r\n return items;\r\n }\r\n\r\n onDropdownItemClick(item: DropdownItem, rule: FeeDiscountRule): void {\r\n if (item.id === 'edit') this.editRule(rule);\r\n else if (item.id === 'toggle') this.toggleStatus(rule);\r\n else if (item.id === 'delete') this.deleteRule(rule);\r\n else if (item.id === 'sync') this.onSyncRule(rule);\r\n }\r\n\r\n onSyncRule(rule: FeeDiscountRule): void {\r\n if (!rule._id) return;\r\n\r\n this.confirmationService.ask({\r\n title: 'Sync Rule',\r\n message: `Do you want to sync \"${rule.feedr_name}\" with all existing UNPAID assignments? This will re-evaluate criteria and update amounts.`,\r\n type: 'info'\r\n }).then(confirmed => {\r\n if (confirmed) {\r\n this.notificationService.info('Syncing in progress...');\r\n this.discountRuleService.syncDiscountRule({ feedr_id: rule._id! })\r\n .subscribe((res: any) => {\r\n if (res.success) {\r\n this.notificationService.success(res.message || 'Sync completed successfully');\r\n } else {\r\n this.notificationService.error(res.message || 'Sync failed');\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n templateRenderers = computed(() => ({\r\n statusRenderer: this.statusRendererTemplate(),\r\n actionsDropdownRenderer: this.actionsDropdownRendererTemplate(),\r\n discountValueRenderer: this.discountValueRendererTemplate(),\r\n modeRenderer: this.modeRendererTemplate()\r\n }));\r\n}\r\n","<cide-lyt-shared-wrapper [shared_wrapper_setup_param]=\"{ sypg_page_code: 'fee_discount_rule' }\"\r\n [breadcrumb_data]=\"breadcrumbData()\">\r\n\r\n <div class=\"tw-p-4 tw-flex tw-flex-col tw-gap-4 tw-h-[calc(100vh-140px)]\">\r\n <!-- Header Actions -->\r\n <div class=\"tw-flex tw-justify-between tw-items-center\">\r\n <h2 class=\"tw-text-lg tw-font-bold tw-text-gray-800\">Discount Rules</h2>\r\n <button cideEleButton variant=\"primary\" (click)=\"openCreateModal()\">\r\n <cide-ele-icon size=\"sm\">add</cide-ele-icon> Create New Rule\r\n </button>\r\n </div>\r\n\r\n <!-- Data Grid -->\r\n <div class=\"tw-bg-white tw-rounded-xl tw-border tw-border-gray-200 tw-overflow-hidden tw-flex-1\">\r\n <cide-ele-data-grid [config]=\"gridConfig()\" [templateRenderers]=\"templateRenderers()\"\r\n [serverSidePagination]=\"true\" [totalServerItems]=\"totalItems()\" [currentServerPage]=\"currentPage()\"\r\n [currentServerPageSize]=\"pageSize()\" (gridEvent)=\"onGridEvent($event)\">\r\n </cide-ele-data-grid>\r\n </div>\r\n </div>\r\n</cide-lyt-shared-wrapper>\r\n\r\n<!-- Status Renderer -->\r\n<ng-template #statusRendererTemplate let-row=\"row\">\r\n <span class=\"tw-px-2 tw-py-1 tw-rounded-full tw-text-[10px] tw-font-bold\"\r\n [ngClass]=\"row.feedr_status === 'ACTIVE' ? 'tw-bg-green-100 tw-text-green-700' : 'tw-bg-gray-100 tw-text-gray-600'\">\r\n {{ row.feedr_status }}\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Discount Value Renderer -->\r\n<ng-template #discountValueRendererTemplate let-row=\"row\">\r\n <div class=\"tw-font-bold\"\r\n [ngClass]=\"row.feedr_discount_type === 'PERCENTAGE' ? 'tw-text-blue-600' : 'tw-text-green-600'\">\r\n {{ row.feedr_discount_type === 'PERCENTAGE' ? row.feedr_discount_value + '%' : '₹' + row.feedr_discount_value }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Mode Renderer -->\r\n<ng-template #modeRendererTemplate let-row=\"row\">\r\n <div class=\"tw-text-xs tw-font-medium\">\r\n {{ row.feedr_mode === 'AUTOMATIC' ? '🚀 Automatic' : '⚙️ Manual' }}\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Actions Dropdown -->\r\n<ng-template #actionsDropdownRendererTemplate let-row=\"row\">\r\n <cide-ele-dropdown [items]=\"getActionDropdownItems(row)\" (itemClick)=\"onDropdownItemClick($event, row)\">\r\n </cide-ele-dropdown>\r\n</ng-template>\r\n\r\n<!-- Create/Edit Modal -->\r\n@if (showModal()) {\r\n<div class=\"tw-fixed tw-inset-0 tw-bg-black/50 tw-flex tw-items-center tw-justify-center tw-z-[1000] tw-p-4\">\r\n <div class=\"tw-bg-white tw-rounded-2xl tw-shadow-2xl tw-w-full tw-max-w-2xl tw-overflow-hidden\">\r\n <!-- Modal Header -->\r\n <div class=\"tw-p-4 tw-border-b tw-border-gray-100 tw-flex tw-justify-between tw-items-center tw-bg-gray-50/50\">\r\n <h3 class=\"tw-text-base tw-font-bold tw-text-gray-800\">\r\n {{ isEditing() ? 'Edit' : 'Create' }} Discount Rule\r\n </h3>\r\n <button (click)=\"closeModal()\" class=\"tw-text-gray-400 hover:tw-text-gray-600\">\r\n <cide-ele-icon>close</cide-ele-icon>\r\n </button>\r\n </div>\r\n\r\n <!-- Modal Body -->\r\n <div class=\"rule-form-container\">\r\n <form [formGroup]=\"ruleForm\" class=\"tw-grid tw-grid-cols-1 md:tw-grid-cols-2 tw-gap-4 tw-p-2\">\r\n <cide-ele-input formControlName=\"feedr_name\" label=\"Rule Name\" placeholder=\"e.g., Sibling Discount\"\r\n size=\"sm\" class=\"tw-col-span-2\"></cide-ele-input>\r\n <cide-ele-input formControlName=\"feedr_code\" label=\"Rule Code\" placeholder=\"e.g., SIB-10\"\r\n size=\"sm\"></cide-ele-input>\r\n <cide-ele-select formControlName=\"feedr_mode\" label=\"Application Mode\" [options]=\"modeOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n\r\n <cide-ele-select formControlName=\"feedr_discount_type\" label=\"Discount Type\"\r\n [options]=\"discountTypeOptions()\" size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_discount_value\" label=\"Value\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <cide-ele-select formControlName=\"feedr_stacking\" label=\"Stacking Logic\" [options]=\"stackingOptions()\"\r\n size=\"sm\"></cide-ele-select>\r\n <cide-ele-input formControlName=\"feedr_priority\" label=\"Priority\" type=\"number\"\r\n size=\"sm\"></cide-ele-input>\r\n\r\n <div\r\n class=\"tw-col-span-2 tw-p-3 tw-bg-blue-50 tw-rounded-lg tw-border tw-border-blue-100 tw-flex tw-items-center tw-gap-3\">\r\n <input type=\"checkbox\" formControlName=\"feedr_approval_req\" class=\"tw-w-4 tw-h-4\">\r\n <div class=\"tw-text-xs tw-text-blue-800\">\r\n <strong>Require Approval?</strong>\r\n <p>If checked, manual application by staff will need manager approval.</p>\r\n </div>\r\n </div>\r\n\r\n <cide-ele-textarea formControlName=\"feedr_description\" label=\"Description\"\r\n placeholder=\"Notes about this discount...\" [rows]=\"2\" size=\"sm\"\r\n class=\"tw-col-span-2\"></cide-ele-textarea>\r\n\r\n <div class=\"tw-col-span-2 tw-mt-2\">\r\n <div class=\"tw-flex tw-items-center tw-justify-between tw-mb-1\">\r\n <label class=\"tw-text-xs tw-font-bold tw-text-gray-600\">Criteria JSON (Advanced Logic)</label>\r\n <span class=\"tw-text-[10px] tw-text-blue-500 tw-italic\">JSON Array or Object</span>\r\n </div>\r\n <cide-ele-textarea formControlName=\"feedr_criteria_json\"\r\n placeholder='Example: {\"field\": \"admap_is_rte_scheme\", \"operator\": \"==\", \"value\": true}'\r\n [rows]=\"3\" size=\"sm\"></cide-ele-textarea>\r\n <p class=\"tw-text-[10px] tw-text-gray-400 tw-mt-1\">\r\n Use field names from student admission data. Operators: ==, !=, >, <, in, contains. </p>\r\n </div>\r\n </form>\r\n </div>\r\n\r\n <!-- Modal Footer -->\r\n <div class=\"tw-p-4 tw-bg-gray-50 tw-border-t tw-border-gray-100 tw-flex tw-justify-end tw-gap-3\">\r\n <button cideEleButton variant=\"ghost\" (click)=\"closeModal()\" [disabled]=\"submitting()\">Cancel</button>\r\n <button cideEleButton variant=\"primary\" (click)=\"onSubmit()\" [loading]=\"submitting()\"\r\n [disabled]=\"ruleForm.invalid\">\r\n {{ isEditing() ? 'Update' : 'Create' }} Rule\r\n </button>\r\n </div>\r\n </div>\r\n</div>\r\n}"],"names":["i2"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { d as CideFeeFeeAssignmentService, h as CideFeeFeePaymentService, b as CideFeeFeeStructureService, a as CloudIdeFees, l as CollectionReportComponent, D as DiscountRulesComponent, o as FeeApplicableFeesComponent, g as FeeAssignmentCreateComponent, e as FeeAssignmentListComponent, n as FeeDetailsViewerComponent, i as FeePaymentListComponent, j as FeePaymentProcessComponent, k as FeePaymentViewComponent, c as FeeStructureCreateComponent, F as FeeStructureListComponent, M as MyFeeStatementComponent, m as MyOnlinePaymentComponent, R as ReceiptTemplateService, S as StudentSelectionWrapperComponent, T as TemplateDesignerComponent, f as feesRoutes } from './cloud-ide-fees-cloud-ide-fees-
|
|
1
|
+
export { d as CideFeeFeeAssignmentService, h as CideFeeFeePaymentService, b as CideFeeFeeStructureService, a as CloudIdeFees, l as CollectionReportComponent, D as DiscountRulesComponent, o as FeeApplicableFeesComponent, g as FeeAssignmentCreateComponent, e as FeeAssignmentListComponent, n as FeeDetailsViewerComponent, i as FeePaymentListComponent, j as FeePaymentProcessComponent, k as FeePaymentViewComponent, c as FeeStructureCreateComponent, F as FeeStructureListComponent, M as MyFeeStatementComponent, m as MyOnlinePaymentComponent, R as ReceiptTemplateService, S as StudentSelectionWrapperComponent, T as TemplateDesignerComponent, f as feesRoutes } from './cloud-ide-fees-cloud-ide-fees-DwymPnFD.mjs';
|
|
2
2
|
//# sourceMappingURL=cloud-ide-fees.mjs.map
|
package/package.json
CHANGED
package/README.md
DELETED
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
# CloudIdeFees
|
|
2
|
-
|
|
3
|
-
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
|
|
4
|
-
|
|
5
|
-
## Code scaffolding
|
|
6
|
-
|
|
7
|
-
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
ng generate component component-name
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
For a complete list of available schematics (such as `components`, `directives`, or `pipes`), run:
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
ng generate --help
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Building
|
|
20
|
-
|
|
21
|
-
To build the library, run:
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
ng build cloud-ide-fees
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
This command will compile your project, and the build artifacts will be placed in the `dist/` directory.
|
|
28
|
-
|
|
29
|
-
### Publishing the Library
|
|
30
|
-
|
|
31
|
-
Once the project is built, you can publish your library by following these steps:
|
|
32
|
-
|
|
33
|
-
1. Navigate to the `dist` directory:
|
|
34
|
-
```bash
|
|
35
|
-
cd dist/cloud-ide-fees
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
2. Run the `npm publish` command to publish your library to the npm registry:
|
|
39
|
-
```bash
|
|
40
|
-
npm publish
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
## Running unit tests
|
|
44
|
-
|
|
45
|
-
To execute unit tests with the [Karma](https://karma-runner.github.io) test runner, use the following command:
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
ng test
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
## Running end-to-end tests
|
|
52
|
-
|
|
53
|
-
For end-to-end (e2e) testing, run:
|
|
54
|
-
|
|
55
|
-
```bash
|
|
56
|
-
ng e2e
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
Angular CLI does not come with an end-to-end testing framework by default. You can choose one that suits your needs.
|
|
60
|
-
|
|
61
|
-
## Additional Resources
|
|
62
|
-
|
|
63
|
-
For more information on using the Angular CLI, including detailed command references, visit the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|