@hmcts/ccpay-web-component 5.2.12 → 6.0.0-beta03
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/esm2022/hmcts-ccpay-web-component.mjs +5 -0
- package/esm2022/lib/components/add-remission/add-remission.component.mjs +1189 -0
- package/esm2022/lib/components/allocate-payments/allocate-payments.component.mjs +407 -0
- package/esm2022/lib/components/card-details/card-details.component.mjs +32 -0
- package/esm2022/lib/components/case-transactions/case-transactions.component.mjs +798 -0
- package/esm2022/lib/components/contact-details/contact-details.component.mjs +338 -0
- package/esm2022/lib/components/error-banner/error-banner.component.mjs +18 -0
- package/esm2022/lib/components/fee-summary/fee-summary.component.mjs +247 -0
- package/esm2022/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.mjs +195 -0
- package/esm2022/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.mjs +255 -0
- package/esm2022/lib/components/notification-preview/notification-preview.component.mjs +79 -0
- package/esm2022/lib/components/page-not-found.component.mjs +17 -0
- package/esm2022/lib/components/payment-list/payment-list.component.mjs +36 -0
- package/esm2022/lib/components/payment-view/payment-view.component.mjs +416 -0
- package/esm2022/lib/components/pba-details/pba-details.component.mjs +18 -0
- package/esm2022/lib/components/pba-payment/pba-payment.component.mjs +151 -0
- package/esm2022/lib/components/process-refund/process-refund.component.mjs +417 -0
- package/esm2022/lib/components/processed-payments/processed-payments.component.mjs +37 -0
- package/esm2022/lib/components/refund-list/refund-list.component.mjs +73 -0
- package/esm2022/lib/components/refund-status/refund-status.component.mjs +453 -0
- package/esm2022/lib/components/reports/reports.component.mjs +291 -0
- package/esm2022/lib/components/service-request/service-request.component.mjs +456 -0
- package/esm2022/lib/components/status-history/status-history.component.mjs +33 -0
- package/esm2022/lib/components/table/table.component.mjs +128 -0
- package/esm2022/lib/components/unprocessed-payments/unprocessed-payments.component.mjs +236 -0
- package/esm2022/lib/interfaces/AddRemissionRequest.mjs +17 -0
- package/esm2022/lib/interfaces/AddRetroRemissionRequest.mjs +9 -0
- package/esm2022/lib/interfaces/AllocatePaymentRequest.mjs +41 -0
- package/esm2022/lib/interfaces/IAllocationPaymentsRequest.mjs +20 -0
- package/esm2022/lib/interfaces/IPaymentStatus.mjs +12 -0
- package/esm2022/lib/interfaces/IPutNotificationRequest.mjs +13 -0
- package/esm2022/lib/interfaces/IResubmitRefundRequest.mjs +13 -0
- package/esm2022/lib/interfaces/IserviceRequestCardPayment.mjs +11 -0
- package/esm2022/lib/interfaces/IserviceRequestPbaPayment.mjs +15 -0
- package/esm2022/lib/interfaces/IssueRefundRequest.mjs +11 -0
- package/esm2022/lib/interfaces/NotificationPreviewRequest.mjs +45 -0
- package/esm2022/lib/interfaces/PayhubAntennaRequest.mjs +12 -0
- package/esm2022/lib/interfaces/PaymentToPayhubRequest.mjs +15 -0
- package/esm2022/lib/interfaces/PostIssueRefundRetroRemission.mjs +9 -0
- package/esm2022/lib/interfaces/PostRefundRetroRemission.mjs +18 -0
- package/esm2022/lib/interfaces/RefundsRequest.mjs +9 -0
- package/esm2022/lib/interfaces/UnidentifiedPaymentsRequest.mjs +16 -0
- package/esm2022/lib/interfaces/UnsolicitedPaymentsRequest.mjs +22 -0
- package/esm2022/lib/payment-lib.component.mjs +288 -0
- package/esm2022/lib/payment-lib.module.mjs +187 -0
- package/esm2022/lib/payment-lib.service.mjs +49 -0
- package/esm2022/lib/pipes/capitalize.pipe.mjs +18 -0
- package/esm2022/lib/pipes/ccd-hyphens.pipe.mjs +22 -0
- package/esm2022/lib/pipes/key-value.pipe.mjs +23 -0
- package/esm2022/lib/pipes/sanitize-html.pipe.mjs +20 -0
- package/esm2022/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.mjs +87 -0
- package/esm2022/lib/services/card-details/card-details.service.mjs +39 -0
- package/esm2022/lib/services/case-transactions/case-transactions.service.mjs +39 -0
- package/esm2022/lib/services/notification/notification.service.mjs +70 -0
- package/esm2022/lib/services/orderslist.service.mjs +154 -0
- package/esm2022/lib/services/payment-list/payment-list.service.mjs +40 -0
- package/esm2022/lib/services/payment-view/payment-view.service.mjs +152 -0
- package/esm2022/lib/services/refunds/refunds.service.mjs +117 -0
- package/{esm2015/lib/services/shared/error-handler.service.js → esm2022/lib/services/shared/error-handler.service.mjs} +9 -8
- package/esm2022/lib/services/shared/httpclient/webcomponent.http.client.mjs +64 -0
- package/esm2022/lib/services/shared/logger/console-logger.service.mjs +43 -0
- package/esm2022/lib/services/shared/logger/logger.service.mjs +23 -0
- package/esm2022/lib/services/status-history/status-history.service.mjs +41 -0
- package/esm2022/lib/services/xl-file/xl-file.service.mjs +153 -0
- package/fesm2022/hmcts-ccpay-web-component.mjs +7874 -0
- package/fesm2022/hmcts-ccpay-web-component.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/components/add-remission/add-remission.component.d.ts +5 -3
- package/lib/components/allocate-payments/allocate-payments.component.d.ts +5 -7
- package/lib/components/card-details/card-details.component.d.ts +3 -1
- package/lib/components/case-transactions/case-transactions.component.d.ts +4 -2
- package/lib/components/contact-details/contact-details.component.d.ts +4 -2
- package/lib/components/error-banner/error-banner.component.d.ts +3 -1
- package/lib/components/fee-summary/fee-summary.component.d.ts +4 -2
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts +4 -2
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts +4 -2
- package/lib/components/notification-preview/notification-preview.component.d.ts +4 -6
- package/lib/components/page-not-found.component.d.ts +3 -1
- package/lib/components/payment-list/payment-list.component.d.ts +4 -2
- package/lib/components/payment-view/payment-view.component.d.ts +4 -2
- package/lib/components/pba-details/pba-details.component.d.ts +3 -1
- package/lib/components/pba-payment/pba-payment.component.d.ts +4 -2
- package/lib/components/process-refund/process-refund.component.d.ts +4 -2
- package/lib/components/processed-payments/processed-payments.component.d.ts +3 -1
- package/lib/components/refund-list/refund-list.component.d.ts +3 -1
- package/lib/components/refund-status/refund-status.component.d.ts +4 -2
- package/lib/components/reports/reports.component.d.ts +4 -6
- package/lib/components/service-request/service-request.component.d.ts +4 -2
- package/lib/components/status-history/status-history.component.d.ts +4 -2
- package/lib/components/table/table.component.d.ts +4 -2
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts +4 -2
- package/lib/interfaces/AddRemissionRequest.d.ts +0 -1
- package/lib/interfaces/AddRetroRemissionRequest.d.ts +0 -1
- package/lib/interfaces/AllocatePaymentRequest.d.ts +0 -1
- package/lib/interfaces/IAllocationPaymentsRequest.d.ts +0 -1
- package/lib/interfaces/IBSPayments.d.ts +0 -1
- package/lib/interfaces/ICardDetails.d.ts +0 -1
- package/lib/interfaces/IFee.d.ts +0 -1
- package/lib/interfaces/INotificationPreview.d.ts +0 -1
- package/lib/interfaces/IOrderReferenceFee.d.ts +0 -1
- package/lib/interfaces/IPatchRefundAction.d.ts +0 -1
- package/lib/interfaces/IPayment.d.ts +0 -1
- package/lib/interfaces/IPaymentFailure.d.ts +0 -1
- package/lib/interfaces/IPaymentGroup.d.ts +0 -1
- package/lib/interfaces/IPaymentStatus.d.ts +0 -1
- package/lib/interfaces/IPaymentView.d.ts +0 -1
- package/lib/interfaces/IPayments.d.ts +0 -1
- package/lib/interfaces/IPutNotificationRequest.d.ts +0 -1
- package/lib/interfaces/IRefundAction.d.ts +0 -1
- package/lib/interfaces/IRefundContactDetails.d.ts +0 -1
- package/lib/interfaces/IRefundFee.d.ts +0 -1
- package/lib/interfaces/IRefundList.d.ts +0 -1
- package/lib/interfaces/IRefundReasons.d.ts +0 -1
- package/lib/interfaces/IRefundRejectReason.d.ts +0 -1
- package/lib/interfaces/IRefundStatus.d.ts +0 -1
- package/lib/interfaces/IRefundStatusHistory.d.ts +0 -1
- package/lib/interfaces/IRefundsNotifications.d.ts +0 -1
- package/lib/interfaces/IRemission.d.ts +0 -1
- package/lib/interfaces/IResubmitRefundRequest.d.ts +0 -1
- package/lib/interfaces/IStatusHistories.d.ts +0 -1
- package/lib/interfaces/IStatusHistory.d.ts +0 -1
- package/lib/interfaces/IserviceRequestCardPayment.d.ts +0 -1
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts +0 -1
- package/lib/interfaces/IssueRefundRequest.d.ts +0 -1
- package/lib/interfaces/NotificationPreviewRequest.d.ts +0 -1
- package/lib/interfaces/PayhubAntennaRequest.d.ts +0 -1
- package/lib/interfaces/PaymentToPayhubRequest.d.ts +0 -1
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts +0 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts +0 -1
- package/lib/interfaces/RefundsRequest.d.ts +0 -1
- package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts +0 -1
- package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts +0 -1
- package/lib/payment-lib.component.d.ts +3 -1
- package/lib/payment-lib.module.d.ts +40 -1
- package/lib/payment-lib.service.d.ts +3 -1
- package/lib/pipes/capitalize.pipe.d.ts +3 -1
- package/lib/pipes/ccd-hyphens.pipe.d.ts +3 -1
- package/lib/pipes/key-value.pipe.d.ts +3 -1
- package/lib/pipes/sanitize-html.pipe.d.ts +3 -1
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts +4 -2
- package/lib/services/card-details/card-details.service.d.ts +3 -1
- package/lib/services/case-transactions/case-transactions.service.d.ts +4 -2
- package/lib/services/notification/notification.service.d.ts +4 -2
- package/lib/services/orderslist.service.d.ts +3 -1
- package/lib/services/payment-list/payment-list.service.d.ts +3 -1
- package/lib/services/payment-view/payment-view.service.d.ts +3 -1
- package/lib/services/refunds/refunds.service.d.ts +4 -2
- package/lib/services/shared/error-handler.service.d.ts +3 -1
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts +3 -1
- package/lib/services/shared/logger/console-logger.service.d.ts +3 -1
- package/lib/services/shared/logger/logger.service.d.ts +3 -1
- package/lib/services/status-history/status-history.service.d.ts +3 -1
- package/lib/services/xl-file/xl-file.service.d.ts +3 -1
- package/package.json +17 -11
- package/public_api.d.ts +0 -1
- package/bundles/hmcts-ccpay-web-component.umd.js +0 -7550
- package/bundles/hmcts-ccpay-web-component.umd.js.map +0 -1
- package/bundles/hmcts-ccpay-web-component.umd.min.js +0 -2
- package/bundles/hmcts-ccpay-web-component.umd.min.js.map +0 -1
- package/esm2015/hmcts-ccpay-web-component.js +0 -47
- package/esm2015/lib/components/add-remission/add-remission.component.js +0 -1045
- package/esm2015/lib/components/allocate-payments/allocate-payments.component.js +0 -381
- package/esm2015/lib/components/card-details/card-details.component.js +0 -28
- package/esm2015/lib/components/case-transactions/case-transactions.component.js +0 -735
- package/esm2015/lib/components/contact-details/contact-details.component.js +0 -315
- package/esm2015/lib/components/error-banner/error-banner.component.js +0 -18
- package/esm2015/lib/components/fee-summary/fee-summary.component.js +0 -223
- package/esm2015/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.js +0 -184
- package/esm2015/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.js +0 -238
- package/esm2015/lib/components/notification-preview/notification-preview.component.js +0 -59
- package/esm2015/lib/components/page-not-found.component.js +0 -11
- package/esm2015/lib/components/payment-list/payment-list.component.js +0 -31
- package/esm2015/lib/components/payment-view/payment-view.component.js +0 -335
- package/esm2015/lib/components/pba-details/pba-details.component.js +0 -18
- package/esm2015/lib/components/pba-payment/pba-payment.component.js +0 -144
- package/esm2015/lib/components/process-refund/process-refund.component.js +0 -398
- package/esm2015/lib/components/processed-payments/processed-payments.component.js +0 -34
- package/esm2015/lib/components/refund-list/refund-list.component.js +0 -59
- package/esm2015/lib/components/refund-status/refund-status.component.js +0 -399
- package/esm2015/lib/components/reports/reports.component.js +0 -280
- package/esm2015/lib/components/service-request/service-request.component.js +0 -345
- package/esm2015/lib/components/status-history/status-history.component.js +0 -28
- package/esm2015/lib/components/table/table.component.js +0 -99
- package/esm2015/lib/components/unprocessed-payments/unprocessed-payments.component.js +0 -199
- package/esm2015/lib/interfaces/AddRemissionRequest.js +0 -10
- package/esm2015/lib/interfaces/AddRetroRemissionRequest.js +0 -7
- package/esm2015/lib/interfaces/AllocatePaymentRequest.js +0 -27
- package/esm2015/lib/interfaces/IAllocationPaymentsRequest.js +0 -14
- package/esm2015/lib/interfaces/IPaymentStatus.js +0 -3
- package/esm2015/lib/interfaces/IPutNotificationRequest.js +0 -11
- package/esm2015/lib/interfaces/IResubmitRefundRequest.js +0 -9
- package/esm2015/lib/interfaces/IserviceRequestCardPayment.js +0 -8
- package/esm2015/lib/interfaces/IserviceRequestPbaPayment.js +0 -10
- package/esm2015/lib/interfaces/IssueRefundRequest.js +0 -8
- package/esm2015/lib/interfaces/NotificationPreviewRequest.js +0 -37
- package/esm2015/lib/interfaces/PayhubAntennaRequest.js +0 -9
- package/esm2015/lib/interfaces/PaymentToPayhubRequest.js +0 -12
- package/esm2015/lib/interfaces/PostIssueRefundRetroRemission.js +0 -7
- package/esm2015/lib/interfaces/PostRefundRetroRemission.js +0 -11
- package/esm2015/lib/interfaces/RefundsRequest.js +0 -7
- package/esm2015/lib/interfaces/UnidentifiedPaymentsRequest.js +0 -12
- package/esm2015/lib/interfaces/UnsolicitedPaymentsRequest.js +0 -15
- package/esm2015/lib/payment-lib.component.js +0 -132
- package/esm2015/lib/payment-lib.module.js +0 -99
- package/esm2015/lib/payment-lib.service.js +0 -43
- package/esm2015/lib/pipes/capitalize.pipe.js +0 -14
- package/esm2015/lib/pipes/ccd-hyphens.pipe.js +0 -18
- package/esm2015/lib/pipes/key-value.pipe.js +0 -20
- package/esm2015/lib/pipes/sanitize-html.pipe.js +0 -17
- package/esm2015/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.js +0 -87
- package/esm2015/lib/services/card-details/card-details.service.js +0 -39
- package/esm2015/lib/services/case-transactions/case-transactions.service.js +0 -39
- package/esm2015/lib/services/notification/notification.service.js +0 -70
- package/esm2015/lib/services/orderslist.service.js +0 -154
- package/esm2015/lib/services/payment-list/payment-list.service.js +0 -39
- package/esm2015/lib/services/payment-view/payment-view.service.js +0 -150
- package/esm2015/lib/services/refunds/refunds.service.js +0 -117
- package/esm2015/lib/services/shared/httpclient/webcomponent.http.client.js +0 -61
- package/esm2015/lib/services/shared/logger/console-logger.service.js +0 -43
- package/esm2015/lib/services/shared/logger/logger.service.js +0 -17
- package/esm2015/lib/services/status-history/status-history.service.js +0 -41
- package/esm2015/lib/services/xl-file/xl-file.service.js +0 -151
- package/fesm2015/hmcts-ccpay-web-component.js +0 -6980
- package/fesm2015/hmcts-ccpay-web-component.js.map +0 -1
- package/hmcts-ccpay-web-component.d.ts +0 -47
- package/hmcts-ccpay-web-component.d.ts.map +0 -1
- package/hmcts-ccpay-web-component.metadata.json +0 -1
- package/lib/components/add-remission/add-remission.component.d.ts.map +0 -1
- package/lib/components/add-remission/add-remission.component.ngfactory.d.ts.map +0 -1
- package/lib/components/add-remission/add-remission.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/allocate-payments/allocate-payments.component.d.ts.map +0 -1
- package/lib/components/allocate-payments/allocate-payments.component.ngfactory.d.ts.map +0 -1
- package/lib/components/allocate-payments/allocate-payments.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/card-details/card-details.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/card-details/card-details.component.d.ts.map +0 -1
- package/lib/components/card-details/card-details.component.ngfactory.d.ts.map +0 -1
- package/lib/components/case-transactions/case-transactions.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/case-transactions/case-transactions.component.d.ts.map +0 -1
- package/lib/components/case-transactions/case-transactions.component.ngfactory.d.ts.map +0 -1
- package/lib/components/contact-details/contact-details.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/contact-details/contact-details.component.d.ts.map +0 -1
- package/lib/components/contact-details/contact-details.component.ngfactory.d.ts.map +0 -1
- package/lib/components/error-banner/error-banner.component.d.ts.map +0 -1
- package/lib/components/error-banner/error-banner.component.ngfactory.d.ts.map +0 -1
- package/lib/components/error-banner/error-banner.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/fee-summary/fee-summary.component.d.ts.map +0 -1
- package/lib/components/fee-summary/fee-summary.component.ngfactory.d.ts.map +0 -1
- package/lib/components/fee-summary/fee-summary.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.d.ts.map +0 -1
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.ngfactory.d.ts.map +0 -1
- package/lib/components/mark-unidentified-payment/mark-unidentified-payment.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.d.ts.map +0 -1
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.ngfactory.d.ts.map +0 -1
- package/lib/components/mark-unsolicited-payment/mark-unsolicited-payment.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/notification-preview/notification-preview.component.d.ts.map +0 -1
- package/lib/components/notification-preview/notification-preview.component.ngfactory.d.ts.map +0 -1
- package/lib/components/notification-preview/notification-preview.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/page-not-found.component.d.ts.map +0 -1
- package/lib/components/page-not-found.component.ngfactory.d.ts.map +0 -1
- package/lib/components/payment-list/payment-list.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/payment-list/payment-list.component.d.ts.map +0 -1
- package/lib/components/payment-list/payment-list.component.ngfactory.d.ts.map +0 -1
- package/lib/components/payment-view/payment-view.component.d.ts.map +0 -1
- package/lib/components/payment-view/payment-view.component.ngfactory.d.ts.map +0 -1
- package/lib/components/payment-view/payment-view.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/pba-details/pba-details.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/pba-details/pba-details.component.d.ts.map +0 -1
- package/lib/components/pba-details/pba-details.component.ngfactory.d.ts.map +0 -1
- package/lib/components/pba-payment/pba-payment.component.d.ts.map +0 -1
- package/lib/components/pba-payment/pba-payment.component.ngfactory.d.ts.map +0 -1
- package/lib/components/pba-payment/pba-payment.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/process-refund/process-refund.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/process-refund/process-refund.component.d.ts.map +0 -1
- package/lib/components/process-refund/process-refund.component.ngfactory.d.ts.map +0 -1
- package/lib/components/processed-payments/processed-payments.component.d.ts.map +0 -1
- package/lib/components/processed-payments/processed-payments.component.ngfactory.d.ts.map +0 -1
- package/lib/components/processed-payments/processed-payments.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/refund-list/refund-list.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/refund-list/refund-list.component.d.ts.map +0 -1
- package/lib/components/refund-list/refund-list.component.ngfactory.d.ts.map +0 -1
- package/lib/components/refund-status/refund-status.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/refund-status/refund-status.component.d.ts.map +0 -1
- package/lib/components/refund-status/refund-status.component.ngfactory.d.ts.map +0 -1
- package/lib/components/reports/reports.component.d.ts.map +0 -1
- package/lib/components/reports/reports.component.ngfactory.d.ts.map +0 -1
- package/lib/components/reports/reports.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/service-request/service-request.component.d.ts.map +0 -1
- package/lib/components/service-request/service-request.component.ngfactory.d.ts.map +0 -1
- package/lib/components/service-request/service-request.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/status-history/status-history.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/status-history/status-history.component.d.ts.map +0 -1
- package/lib/components/status-history/status-history.component.ngfactory.d.ts.map +0 -1
- package/lib/components/table/table.component.css.shim.ngstyle.d.ts.map +0 -1
- package/lib/components/table/table.component.d.ts.map +0 -1
- package/lib/components/table/table.component.ngfactory.d.ts.map +0 -1
- package/lib/components/unprocessed-payments/unprocessed-payments.component.d.ts.map +0 -1
- package/lib/components/unprocessed-payments/unprocessed-payments.component.ngfactory.d.ts.map +0 -1
- package/lib/components/unprocessed-payments/unprocessed-payments.component.scss.shim.ngstyle.d.ts.map +0 -1
- package/lib/interfaces/AddRemissionRequest.d.ts.map +0 -1
- package/lib/interfaces/AddRetroRemissionRequest.d.ts.map +0 -1
- package/lib/interfaces/AllocatePaymentRequest.d.ts.map +0 -1
- package/lib/interfaces/IAllocationPaymentsRequest.d.ts.map +0 -1
- package/lib/interfaces/IBSPayments.d.ts.map +0 -1
- package/lib/interfaces/ICardDetails.d.ts.map +0 -1
- package/lib/interfaces/IFee.d.ts.map +0 -1
- package/lib/interfaces/INotificationPreview.d.ts.map +0 -1
- package/lib/interfaces/IOrderReferenceFee.d.ts.map +0 -1
- package/lib/interfaces/IPatchRefundAction.d.ts.map +0 -1
- package/lib/interfaces/IPayment.d.ts.map +0 -1
- package/lib/interfaces/IPaymentFailure.d.ts.map +0 -1
- package/lib/interfaces/IPaymentGroup.d.ts.map +0 -1
- package/lib/interfaces/IPaymentStatus.d.ts.map +0 -1
- package/lib/interfaces/IPaymentView.d.ts.map +0 -1
- package/lib/interfaces/IPayments.d.ts.map +0 -1
- package/lib/interfaces/IPutNotificationRequest.d.ts.map +0 -1
- package/lib/interfaces/IRefundAction.d.ts.map +0 -1
- package/lib/interfaces/IRefundContactDetails.d.ts.map +0 -1
- package/lib/interfaces/IRefundFee.d.ts.map +0 -1
- package/lib/interfaces/IRefundList.d.ts.map +0 -1
- package/lib/interfaces/IRefundReasons.d.ts.map +0 -1
- package/lib/interfaces/IRefundRejectReason.d.ts.map +0 -1
- package/lib/interfaces/IRefundStatus.d.ts.map +0 -1
- package/lib/interfaces/IRefundStatusHistory.d.ts.map +0 -1
- package/lib/interfaces/IRefundsNotifications.d.ts.map +0 -1
- package/lib/interfaces/IRemission.d.ts.map +0 -1
- package/lib/interfaces/IResubmitRefundRequest.d.ts.map +0 -1
- package/lib/interfaces/IStatusHistories.d.ts.map +0 -1
- package/lib/interfaces/IStatusHistory.d.ts.map +0 -1
- package/lib/interfaces/IserviceRequestCardPayment.d.ts.map +0 -1
- package/lib/interfaces/IserviceRequestPbaPayment.d.ts.map +0 -1
- package/lib/interfaces/IssueRefundRequest.d.ts.map +0 -1
- package/lib/interfaces/NotificationPreviewRequest.d.ts.map +0 -1
- package/lib/interfaces/PayhubAntennaRequest.d.ts.map +0 -1
- package/lib/interfaces/PaymentToPayhubRequest.d.ts.map +0 -1
- package/lib/interfaces/PostIssueRefundRetroRemission.d.ts.map +0 -1
- package/lib/interfaces/PostRefundRetroRemission.d.ts.map +0 -1
- package/lib/interfaces/RefundsRequest.d.ts.map +0 -1
- package/lib/interfaces/UnidentifiedPaymentsRequest.d.ts.map +0 -1
- package/lib/interfaces/UnsolicitedPaymentsRequest.d.ts.map +0 -1
- package/lib/payment-lib.component.d.ts.map +0 -1
- package/lib/payment-lib.component.ngfactory.d.ts.map +0 -1
- package/lib/payment-lib.module.d.ts.map +0 -1
- package/lib/payment-lib.module.ngfactory.d.ts.map +0 -1
- package/lib/payment-lib.service.d.ts.map +0 -1
- package/lib/payment-lib.service.ngfactory.d.ts.map +0 -1
- package/lib/pipes/capitalize.pipe.d.ts.map +0 -1
- package/lib/pipes/capitalize.pipe.ngfactory.d.ts.map +0 -1
- package/lib/pipes/ccd-hyphens.pipe.d.ts.map +0 -1
- package/lib/pipes/ccd-hyphens.pipe.ngfactory.d.ts.map +0 -1
- package/lib/pipes/key-value.pipe.d.ts.map +0 -1
- package/lib/pipes/key-value.pipe.ngfactory.d.ts.map +0 -1
- package/lib/pipes/sanitize-html.pipe.d.ts.map +0 -1
- package/lib/pipes/sanitize-html.pipe.ngfactory.d.ts.map +0 -1
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.d.ts.map +0 -1
- package/lib/services/bulk-scaning-payment/bulk-scaning-payment.service.ngfactory.d.ts.map +0 -1
- package/lib/services/card-details/card-details.service.d.ts.map +0 -1
- package/lib/services/card-details/card-details.service.ngfactory.d.ts.map +0 -1
- package/lib/services/case-transactions/case-transactions.service.d.ts.map +0 -1
- package/lib/services/case-transactions/case-transactions.service.ngfactory.d.ts.map +0 -1
- package/lib/services/notification/notification.service.d.ts.map +0 -1
- package/lib/services/notification/notification.service.ngfactory.d.ts.map +0 -1
- package/lib/services/orderslist.service.d.ts.map +0 -1
- package/lib/services/orderslist.service.ngfactory.d.ts.map +0 -1
- package/lib/services/payment-list/payment-list.service.d.ts.map +0 -1
- package/lib/services/payment-list/payment-list.service.ngfactory.d.ts.map +0 -1
- package/lib/services/payment-view/payment-view.service.d.ts.map +0 -1
- package/lib/services/payment-view/payment-view.service.ngfactory.d.ts.map +0 -1
- package/lib/services/refunds/refunds.service.d.ts.map +0 -1
- package/lib/services/refunds/refunds.service.ngfactory.d.ts.map +0 -1
- package/lib/services/shared/error-handler.service.d.ts.map +0 -1
- package/lib/services/shared/error-handler.service.ngfactory.d.ts.map +0 -1
- package/lib/services/shared/httpclient/webcomponent.http.client.d.ts.map +0 -1
- package/lib/services/shared/httpclient/webcomponent.http.client.ngfactory.d.ts.map +0 -1
- package/lib/services/shared/logger/console-logger.service.d.ts.map +0 -1
- package/lib/services/shared/logger/console-logger.service.ngfactory.d.ts.map +0 -1
- package/lib/services/shared/logger/logger.service.d.ts.map +0 -1
- package/lib/services/shared/logger/logger.service.ngfactory.d.ts.map +0 -1
- package/lib/services/status-history/status-history.service.d.ts.map +0 -1
- package/lib/services/status-history/status-history.service.ngfactory.d.ts.map +0 -1
- package/lib/services/xl-file/xl-file.service.d.ts.map +0 -1
- package/lib/services/xl-file/xl-file.service.ngfactory.d.ts.map +0 -1
- package/public_api.d.ts.map +0 -1
- /package/{esm2015/lib/interfaces/IBSPayments.js → esm2022/lib/interfaces/IBSPayments.mjs} +0 -0
- /package/{esm2015/lib/interfaces/ICardDetails.js → esm2022/lib/interfaces/ICardDetails.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IFee.js → esm2022/lib/interfaces/IFee.mjs} +0 -0
- /package/{esm2015/lib/interfaces/INotificationPreview.js → esm2022/lib/interfaces/INotificationPreview.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IOrderReferenceFee.js → esm2022/lib/interfaces/IOrderReferenceFee.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPatchRefundAction.js → esm2022/lib/interfaces/IPatchRefundAction.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPayment.js → esm2022/lib/interfaces/IPayment.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPaymentFailure.js → esm2022/lib/interfaces/IPaymentFailure.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPaymentGroup.js → esm2022/lib/interfaces/IPaymentGroup.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPaymentView.js → esm2022/lib/interfaces/IPaymentView.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IPayments.js → esm2022/lib/interfaces/IPayments.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundAction.js → esm2022/lib/interfaces/IRefundAction.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundContactDetails.js → esm2022/lib/interfaces/IRefundContactDetails.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundFee.js → esm2022/lib/interfaces/IRefundFee.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundList.js → esm2022/lib/interfaces/IRefundList.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundReasons.js → esm2022/lib/interfaces/IRefundReasons.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundRejectReason.js → esm2022/lib/interfaces/IRefundRejectReason.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundStatus.js → esm2022/lib/interfaces/IRefundStatus.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundStatusHistory.js → esm2022/lib/interfaces/IRefundStatusHistory.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRefundsNotifications.js → esm2022/lib/interfaces/IRefundsNotifications.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IRemission.js → esm2022/lib/interfaces/IRemission.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IStatusHistories.js → esm2022/lib/interfaces/IStatusHistories.mjs} +0 -0
- /package/{esm2015/lib/interfaces/IStatusHistory.js → esm2022/lib/interfaces/IStatusHistory.mjs} +0 -0
- /package/{esm2015/public_api.js → esm2022/public_api.mjs} +0 -0
|
@@ -1,280 +0,0 @@
|
|
|
1
|
-
import { Component, Input } from '@angular/core';
|
|
2
|
-
import { FormBuilder, FormControl } from '@angular/forms';
|
|
3
|
-
import { formatDate } from "@angular/common";
|
|
4
|
-
import { BulkScaningPaymentService } from '../../services/bulk-scaning-payment/bulk-scaning-payment.service';
|
|
5
|
-
import { ErrorHandlerService } from '../../services/shared/error-handler.service';
|
|
6
|
-
import { PaymentViewService } from '../../services/payment-view/payment-view.service';
|
|
7
|
-
import { XlFileService } from '../../services/xl-file/xl-file.service';
|
|
8
|
-
export class ReportsComponent {
|
|
9
|
-
constructor(xlFileService, errorHandlerService, formBuilder, bulkScaningPaymentService, paymentViewService) {
|
|
10
|
-
this.xlFileService = xlFileService;
|
|
11
|
-
this.errorHandlerService = errorHandlerService;
|
|
12
|
-
this.formBuilder = formBuilder;
|
|
13
|
-
this.bulkScaningPaymentService = bulkScaningPaymentService;
|
|
14
|
-
this.paymentViewService = paymentViewService;
|
|
15
|
-
this.fmt = 'dd/MM/yyyy';
|
|
16
|
-
this.loc = 'en-US';
|
|
17
|
-
this.isDownLoadButtondisabled = false;
|
|
18
|
-
this.isStartDateLesthanEndDate = false;
|
|
19
|
-
this.isDateBetwnMonth = false;
|
|
20
|
-
this.isDateRangeBetnWeek = false;
|
|
21
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
22
|
-
this.paymentGroups = [];
|
|
23
|
-
}
|
|
24
|
-
ngOnInit() {
|
|
25
|
-
this.fromValidation();
|
|
26
|
-
}
|
|
27
|
-
getToday() {
|
|
28
|
-
return new Date().toISOString().split('T')[0];
|
|
29
|
-
}
|
|
30
|
-
getSelectedFromDate() {
|
|
31
|
-
this.validateDates(this.reportsForm.get('selectedreport').value);
|
|
32
|
-
}
|
|
33
|
-
validateDates(reportName) {
|
|
34
|
-
const selectedStartDate = this.tranformDate(this.reportsForm.get('startDate').value), selectedEndDate = this.tranformDate(this.reportsForm.get('endDate').value);
|
|
35
|
-
const isDateRangeMoreThanWeek = (new Date(selectedStartDate) - new Date(selectedEndDate)) / (1000 * 3600 * -24) > 7;
|
|
36
|
-
const isDateRangeMoreThanMonth = (new Date(selectedStartDate) - new Date(selectedEndDate)) / (1000 * 3600 * -24) > 30;
|
|
37
|
-
if (new Date(selectedStartDate) > new Date(selectedEndDate) && selectedEndDate !== '') {
|
|
38
|
-
this.reportsForm.get('startDate').setValue('');
|
|
39
|
-
this.isDateRangeBetnWeek = false;
|
|
40
|
-
this.isDateBetwnMonth = false;
|
|
41
|
-
this.isStartDateLesthanEndDate = true;
|
|
42
|
-
}
|
|
43
|
-
else if (reportName && reportName === 'SURPLUS_AND_SHORTFALL' && isDateRangeMoreThanWeek) {
|
|
44
|
-
this.isDateRangeBetnWeek = true;
|
|
45
|
-
this.isDateBetwnMonth = false;
|
|
46
|
-
this.isStartDateLesthanEndDate = false;
|
|
47
|
-
}
|
|
48
|
-
else if (reportName && reportName === 'PAYMENT_FAILURE_EVENT' && isDateRangeMoreThanMonth) {
|
|
49
|
-
this.isDateRangeBetnWeek = false;
|
|
50
|
-
this.isDateBetwnMonth = true;
|
|
51
|
-
this.isStartDateLesthanEndDate = false;
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
this.isDateBetwnMonth = false;
|
|
55
|
-
this.isDateRangeBetnWeek = false;
|
|
56
|
-
this.isStartDateLesthanEndDate = false;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
fromValidation() {
|
|
60
|
-
this.reportsForm = this.formBuilder.group({
|
|
61
|
-
selectedreport: new FormControl(''),
|
|
62
|
-
startDate: new FormControl(''),
|
|
63
|
-
endDate: new FormControl('')
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
downloadReport() {
|
|
67
|
-
this.isDownLoadButtondisabled = true;
|
|
68
|
-
const dataLossRptDefault = [{ loss_resp: '', payment_asset_dcn: '', env_ref: '', env_item: '', resp_service_id: '', resp_service_name: '', date_banked: '', bgc_batch: '', payment_method: '', amount: '' }], unProcessedRptDefault = [{ resp_service_id: '', resp_service_name: '', exception_ref: '', ccd_ref: '', date_banked: '', bgc_batch: '', payment_asset_dcn: '', env_ref: '', env_item: '', payment_method: '', amount: '' }], processedUnallocated = [{ resp_service_id: '', resp_service_name: '', allocation_status: '', receiving_office: '', allocation_reason: '', ccd_exception_ref: '', ccd_case_ref: '', payment_asset_dcn: '', env_ref: '', env_item: '', date_banked: '', bgc_batch: '', payment_method: '', amount: '', updated_by: '' }], shortFallsRptDefault = [{ resp_service_id: '', resp_service_name: '', surplus_shortfall: '', balance: '', payment_amount: '', ccd_case_reference: '', ccd_exception_reference: '', processed_date: '', reason: '', explanation: '', user_name: '' }], selectedReportName = this.reportsForm.get('selectedreport').value, selectedStartDate = this.tranformDate(this.reportsForm.get('startDate').value), selectedEndDate = this.tranformDate(this.reportsForm.get('endDate').value);
|
|
69
|
-
if (selectedReportName === 'PROCESSED_UNALLOCATED' || selectedReportName === 'SURPLUS_AND_SHORTFALL') {
|
|
70
|
-
this.paymentViewService.downloadSelectedReport(selectedReportName, selectedStartDate, selectedEndDate).subscribe(response => {
|
|
71
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
72
|
-
const result = JSON.parse(response);
|
|
73
|
-
let res = { data: this.applyDateFormat(result) };
|
|
74
|
-
if (res['data'].length === 0 && selectedReportName === 'PROCESSED_UNALLOCATED') {
|
|
75
|
-
res.data = processedUnallocated;
|
|
76
|
-
}
|
|
77
|
-
else if (res['data'].length === 0 && selectedReportName === 'SURPLUS_AND_SHORTFALL') {
|
|
78
|
-
res.data = shortFallsRptDefault;
|
|
79
|
-
}
|
|
80
|
-
if (result['data'].length > 0) {
|
|
81
|
-
for (var i = 0; i < res['data'].length; i++) {
|
|
82
|
-
if (res['data'][i]["payment_asset_dcn"] !== undefined) {
|
|
83
|
-
res['data'][i]['env_ref'] = res['data'][i]["payment_asset_dcn"].substr(0, 13);
|
|
84
|
-
res['data'][i]['env_item'] = res['data'][i]["payment_asset_dcn"].substr(13, 21);
|
|
85
|
-
}
|
|
86
|
-
if (res['data'][i]["amount"] !== undefined) {
|
|
87
|
-
res['data'][i]['amount'] = this.convertToFloatValue(res['data'][i]['amount']);
|
|
88
|
-
}
|
|
89
|
-
if (res['data'][i]["balance"] !== undefined) {
|
|
90
|
-
res['data'][i]['balance'] = this.convertToFloatValue(res['data'][i]["balance"]);
|
|
91
|
-
}
|
|
92
|
-
let Op = res['data'][i]["surplus_shortfall"];
|
|
93
|
-
if (Op !== undefined) {
|
|
94
|
-
res['data'][i]['surplus_shortfall'] = Op == "Surplus" ? "Over payment" : "Under payment";
|
|
95
|
-
}
|
|
96
|
-
if (res['data'][i]["payment_amount"] !== undefined) {
|
|
97
|
-
res['data'][i]['payment_amount'] = this.convertToFloatValue(res['data'][i]['payment_amount']);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
this.isDownLoadButtondisabled = false;
|
|
102
|
-
this.xlFileService.exportAsExcelFile(res['data'], this.getFileName(this.reportsForm.get('selectedreport').value, selectedStartDate, selectedEndDate));
|
|
103
|
-
}, (error) => {
|
|
104
|
-
this.isDownLoadButtondisabled = false;
|
|
105
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else if (selectedReportName === 'PAYMENT_FAILURE_EVENT') {
|
|
109
|
-
this.paymentViewService.downloadFailureReport(selectedStartDate, selectedEndDate).subscribe(response => {
|
|
110
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
111
|
-
const result = { data: JSON.parse(response)['payment_failure_report_list'] };
|
|
112
|
-
let res = { data: this.applyDateFormat(result) };
|
|
113
|
-
if (result['data'].length > 0) {
|
|
114
|
-
for (var i = 0; i < res['data'].length; i++) {
|
|
115
|
-
if (res['data'][i]["disputed_amount"] !== undefined) {
|
|
116
|
-
res['data'][i]['disputed_amount'] = this.convertToFloatValue(res['data'][i]["disputed_amount"]);
|
|
117
|
-
}
|
|
118
|
-
if (res['data'][i]["representment_status"] !== undefined) {
|
|
119
|
-
res['data'][i]['representment_status'] = res['data'][i]["representment_status"].toLowerCase() === 'yes' ? 'Success' : 'Failure';
|
|
120
|
-
}
|
|
121
|
-
if (res['data'][i]['representment_status'] === undefined) {
|
|
122
|
-
res['data'][i]['representment_status'] = 'No representment received';
|
|
123
|
-
}
|
|
124
|
-
if (res['data'][i]['representment_date'] === undefined) {
|
|
125
|
-
res['data'][i]['representment_date'] = 'N/A';
|
|
126
|
-
}
|
|
127
|
-
if (res['data'][i]['refund_reference'] === undefined) {
|
|
128
|
-
res['data'][i]['refund_reference'] = 'No refund available';
|
|
129
|
-
}
|
|
130
|
-
if (res['data'][i]['refund_amount'] === undefined) {
|
|
131
|
-
res['data'][i]['refund_amount'] = 'N/A';
|
|
132
|
-
}
|
|
133
|
-
if (res['data'][i]['refund_date'] === undefined) {
|
|
134
|
-
res['data'][i]['refund_date'] = 'N/A';
|
|
135
|
-
}
|
|
136
|
-
if (res['data'][i]['document_control_number'] === undefined) {
|
|
137
|
-
res['data'][i]['document_control_number'] = 'N/A';
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
this.isDownLoadButtondisabled = false;
|
|
142
|
-
this.xlFileService.exportAsExcelFile(res['data'], this.getFileName(this.reportsForm.get('selectedreport').value, selectedStartDate, selectedEndDate));
|
|
143
|
-
}, (error) => {
|
|
144
|
-
this.isDownLoadButtondisabled = false;
|
|
145
|
-
const errorContent = error.replace(/[^a-zA-Z ]/g, '').trim();
|
|
146
|
-
const statusCode = error.replace(/[^a-zA-Z0-9 ]/g, '').trim().split(' ')[0];
|
|
147
|
-
if (statusCode === '404') {
|
|
148
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, true, errorContent);
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
this.bulkScaningPaymentService.downloadSelectedReport(selectedReportName, selectedStartDate, selectedEndDate).subscribe(response => {
|
|
157
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(false, false, '');
|
|
158
|
-
const result = JSON.parse(response);
|
|
159
|
-
let res = { data: this.applyDateFormat(result) };
|
|
160
|
-
if (res['data'].length === 0 && selectedReportName === 'DATA_LOSS') {
|
|
161
|
-
res.data = dataLossRptDefault;
|
|
162
|
-
}
|
|
163
|
-
else if (res['data'].length === 0 && selectedReportName === 'UNPROCESSED') {
|
|
164
|
-
res.data = unProcessedRptDefault;
|
|
165
|
-
}
|
|
166
|
-
if (result['data'].length > 0) {
|
|
167
|
-
for (var i = 0; i < res['data'].length; i++) {
|
|
168
|
-
if (res['data'][i]["amount"] !== undefined) {
|
|
169
|
-
res['data'][i]['amount'] = this.convertToFloatValue(res['data'][i]['amount']);
|
|
170
|
-
}
|
|
171
|
-
if (res['data'][i]["payment_asset_dcn"] !== undefined) {
|
|
172
|
-
res['data'][i]['env_ref'] = res['data'][i]["payment_asset_dcn"].substr(0, 13);
|
|
173
|
-
res['data'][i]['env_item'] = res['data'][i]["payment_asset_dcn"].substr(13, 21);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
this.isDownLoadButtondisabled = false;
|
|
178
|
-
this.xlFileService.exportAsExcelFile(res['data'], this.getFileName(this.reportsForm.get('selectedreport').value, selectedStartDate, selectedEndDate));
|
|
179
|
-
}, (error) => {
|
|
180
|
-
this.isDownLoadButtondisabled = false;
|
|
181
|
-
this.errorMessage = this.errorHandlerService.getServerErrorMessage(true, false, '');
|
|
182
|
-
});
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
getFileName(selectedOption, startDate, endDate) {
|
|
186
|
-
const loc = 'en-US', stDt = formatDate(startDate, 'ddMMyy', loc), enDt = formatDate(endDate, 'ddMMyy', loc), now = new Date(), currentDate = formatDate(now, 'ddMMyy', loc), timestamp = `${currentDate}_${this.getTwodigit(now.getHours())}${this.getTwodigit(now.getMinutes())}${this.getTwodigit(now.getSeconds())}`, selectedOptionTxt = this.getCamelCaseString(selectedOption);
|
|
187
|
-
return selectedOptionTxt + '_' + stDt + '_To_' + enDt + '_Run_' + timestamp;
|
|
188
|
-
}
|
|
189
|
-
tranformDate(strDate) {
|
|
190
|
-
let result = '';
|
|
191
|
-
if (strDate) {
|
|
192
|
-
let parts = strDate.split('-');
|
|
193
|
-
result = `${parts[1]}/${parts[2]}/${parts[0]}`;
|
|
194
|
-
}
|
|
195
|
-
return result;
|
|
196
|
-
}
|
|
197
|
-
getTwodigit(input) {
|
|
198
|
-
return ("0" + input).slice(-2);
|
|
199
|
-
}
|
|
200
|
-
getCamelCaseString(selectedOption) {
|
|
201
|
-
let result;
|
|
202
|
-
switch (selectedOption) {
|
|
203
|
-
case 'UNPROCESSED': {
|
|
204
|
-
result = 'Unprocessed';
|
|
205
|
-
break;
|
|
206
|
-
}
|
|
207
|
-
case 'DATA_LOSS': {
|
|
208
|
-
result = 'Data_Loss';
|
|
209
|
-
break;
|
|
210
|
-
}
|
|
211
|
-
case 'PROCESSED_UNALLOCATED': {
|
|
212
|
-
result = 'Processed_Unallocated';
|
|
213
|
-
break;
|
|
214
|
-
}
|
|
215
|
-
case 'SURPLUS_AND_SHORTFALL': {
|
|
216
|
-
result = 'Over Payment_Under Payment';
|
|
217
|
-
break;
|
|
218
|
-
}
|
|
219
|
-
case 'PAYMENT_FAILURE_EVENT': {
|
|
220
|
-
result = 'Payment failure event';
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
default: {
|
|
224
|
-
result = selectedOption;
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
return result;
|
|
229
|
-
}
|
|
230
|
-
applyDateFormat(res) {
|
|
231
|
-
return res['data'].map(value => {
|
|
232
|
-
if (value['date_banked']) {
|
|
233
|
-
value['date_banked'] = formatDate(value['date_banked'], this.fmt, this.loc);
|
|
234
|
-
}
|
|
235
|
-
if (value['event_date'] && value['event_date'].indexOf(',') === -1) {
|
|
236
|
-
value['event_date'] = formatDate(value['event_date'], this.fmt, this.loc);
|
|
237
|
-
}
|
|
238
|
-
else if (value['event_date'] && value['event_date'].indexOf(',') !== -1) {
|
|
239
|
-
value['event_date'] = this.multiDateFormater(value['event_date']);
|
|
240
|
-
}
|
|
241
|
-
if (value['representment_date'] && value['representment_date'].indexOf(',') === -1) {
|
|
242
|
-
value['representment_date'] = formatDate(value['representment_date'], this.fmt, this.loc);
|
|
243
|
-
}
|
|
244
|
-
else if (value['representment_date'] && value['representment_date'].indexOf(',') !== -1) {
|
|
245
|
-
value['representment_date'] = this.multiDateFormater(value['representment_date']);
|
|
246
|
-
}
|
|
247
|
-
if (value['refund_date'] && value['refund_date'].indexOf(',') === -1) {
|
|
248
|
-
value['refund_date'] = formatDate(value['refund_date'], this.fmt, this.loc);
|
|
249
|
-
}
|
|
250
|
-
else if (value['refund_date'] && value['refund_date'].indexOf(',') !== -1) {
|
|
251
|
-
value['refund_date'] = this.multiDateFormater(value['refund_date']);
|
|
252
|
-
}
|
|
253
|
-
return value;
|
|
254
|
-
});
|
|
255
|
-
}
|
|
256
|
-
multiDateFormater(dateStr) {
|
|
257
|
-
return dateStr.split(',').map((date) => formatDate(date, this.fmt, this.loc)).join(',');
|
|
258
|
-
}
|
|
259
|
-
convertToFloatValue(amt) {
|
|
260
|
-
return amt ? Number.parseFloat(amt).toFixed(2) : '0.00';
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
ReportsComponent.decorators = [
|
|
264
|
-
{ type: Component, args: [{
|
|
265
|
-
selector: 'ccpay-reports',
|
|
266
|
-
template: "<div class=\"header\">\n <input #myInput type='hidden' class='iFrameDrivenImageValue' value='REPORTS'>\n <ccpay-error-banner *ngIf=\"errorMessage.showError\" [errorMessage]=\"errorMessage\"></ccpay-error-banner>\n <legend class=\"govuk-fieldset__legend--xl\">\n <h1 class=\"govuk-fieldset__heading\"> Choose the report type and date range</h1>\n </legend>\n</div>\n<form [formGroup]=\"reportsForm\">\n <div class=\"govuk-form-group\">\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\">\n <div class=\"govuk-radios__item\">\n <input \n required\n id=\"DataLoss\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('DATA_LOSS')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"DATA_LOSS\" \n data-aria-controls=\"DataLoss\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"DataLoss\">Data loss</label>\n <span class=\"form-hint\">Missing transactions where data has been received from only either of Exela or Bulk scan</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"UnprocessedTransactions\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n (click)=\"validateDates('UNPROCESSED')\"\n name=\"selectedreport\"\n type=\"radio\"\n value=\"UNPROCESSED\" \n data-aria-controls=\"UnprocessedTransactions\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"UnprocessedTransactions\">Unprocessed transactions</label>\n <span class=\"form-hint\">Transaction records that are still unprocessed by staff.</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ProcessedUnallocated\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('PROCESSED_UNALLOCATED')\"\n type=\"radio\"\n value=\"PROCESSED_UNALLOCATED\" \n data-aria-controls=\"ProcessedUnallocated\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ProcessedUnallocated\">Processed unallocated</label>\n <span class=\"form-hint\">Payments that are marked as \u2018Unidentified\u2019 or \u2018Transferred\u2019 (Unsolicited requests)</span>\n </div>\n\n <div class=\"govuk-radios__item\">\n <input \n id=\"ShortfallsandSurplus\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('SURPLUS_AND_SHORTFALL')\"\n type=\"radio\"\n value=\"SURPLUS_AND_SHORTFALL\" \n data-aria-controls=\"ShortfallsandSurplus\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"ShortfallsandSurplus\">Under payment and Over payment</label>\n <span class=\"form-hint\">Requests where balances are marked as Under payment/Over payment further case management.\n E.g: Refund approval, Customer contact</span>\n </div>\n <div class=\"govuk-radios__item\" *ngIf=\"ISPAYMENTSTATUSENABLED\">\n <input \n id=\"PaymentFailureEvent\"\n class=\"govuk-radios__input\"\n formControlName=\"selectedreport\"\n name=\"selectedreport\"\n (click)=\"validateDates('PAYMENT_FAILURE_EVENT')\"\n type=\"radio\"\n value=\"PAYMENT_FAILURE_EVENT\" \n data-aria-controls=\"PaymentFailureEvent\"/>\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"PaymentFailureEvent\">Payment failure event</label>\n <span class=\"form-hint\">Failed payment transaction details</span>\n </div>\n </div>\n </div>\n <div class=\"govuk-form-group\">\n <div class=\"datefrom\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-from\">Date from</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-from\" name=\"date-from\" type=\"date\" formControlName=\"startDate\" required/>\n </div>\n\n <div class=\"dateto\">\n <label class=\"govuk-label govuk-radios__label govuk-label--m\" for=\"date-to\">Date to</label>\n <input (change)=\"getSelectedFromDate()\" [max]=\"getToday()\" class=\"form-control\" id=\"date-to\" name=\"search\" type=\"date\" formControlName=\"endDate\" required/>\n </div>\n </div>\n <p class=\"inline-error-message\" *ngIf=\"isStartDateLesthanEndDate || isDateRangeBetnWeek || isDateBetwnMonth\">\n <span *ngIf=\"isStartDateLesthanEndDate\">Please select 'Date From' less than or equal to 'Date To'</span>\n <span *ngIf=\"isDateRangeBetnWeek\"> Please select the date range between 7 days</span>\n <span *ngIf=\"isDateBetwnMonth\"> Please select the date range between 30 days</span>\n </p>\n <div class=\"btnsubmit\">\n <button type=\"submit\" (click)=\"downloadReport()\" class=\"button\" [disabled]=\"!reportsForm.valid || isDownLoadButtondisabled || isStartDateLesthanEndDate || isDateRangeBetnWeek\">Download report</button>\n </div>\n </form>\n \n",
|
|
267
|
-
styles: [".govuk-radios__input:focus+.govuk-radios__label:before{border-width:4px;box-shadow:0 0 0 4px #ffaf00}.datefrom{width:50%;float:left}.dateto{width:50%;float:right}.govuk-label--m{font-size:large}.form-hint{padding-left:.7em}.header{margin-top:10px;margin-bottom:15px}.btnsubmit{margin-bottom:30px}.inline-error-message{color:#a71414;font-weight:700;margin-top:10px}"]
|
|
268
|
-
},] }
|
|
269
|
-
];
|
|
270
|
-
ReportsComponent.ctorParameters = () => [
|
|
271
|
-
{ type: XlFileService },
|
|
272
|
-
{ type: ErrorHandlerService },
|
|
273
|
-
{ type: FormBuilder },
|
|
274
|
-
{ type: BulkScaningPaymentService },
|
|
275
|
-
{ type: PaymentViewService }
|
|
276
|
-
];
|
|
277
|
-
ReportsComponent.propDecorators = {
|
|
278
|
-
ISPAYMENTSTATUSENABLED: [{ type: Input }]
|
|
279
|
-
};
|
|
280
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0cy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wYXltZW50LWxpYi9zcmMvbGliL2NvbXBvbmVudHMvcmVwb3J0cy9yZXBvcnRzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsV0FBVyxFQUFhLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUN0RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFRckUsTUFBTSxPQUFPLGdCQUFnQjtJQWdCM0IsWUFDVSxhQUE0QixFQUM1QixtQkFBd0MsRUFDeEMsV0FBd0IsRUFDeEIseUJBQW9ELEVBQ3BELGtCQUFzQztRQUp0QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1Qix3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMkI7UUFDcEQsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQW5CaEQsUUFBRyxHQUFHLFlBQVksQ0FBQztRQUNuQixRQUFHLEdBQUcsT0FBTyxDQUFDO1FBTWQsNkJBQXdCLEdBQVcsS0FBSyxDQUFDO1FBQ3pDLDhCQUF5QixHQUFZLEtBQUssQ0FBQztRQUMzQyxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsd0JBQW1CLEdB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QUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQUc7UUFDckIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDekQsQ0FBQzs7O1lBblNGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZUFBZTtnQkFDekIsMGdMQUF1Qzs7YUFFeEM7OztZQVBPLGFBQWE7WUFGWixtQkFBbUI7WUFKbkIsV0FBVztZQUdYLHlCQUF5QjtZQUV6QixrQkFBa0I7OztxQ0FVeEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBmb3JtYXREYXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHtJUGF5bWVudEdyb3VwfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lQYXltZW50R3JvdXAnO1xuaW1wb3J0IHsgQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1bGstc2NhbmluZy1wYXltZW50L2J1bGstc2NhbmluZy1wYXltZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRXJyb3JIYW5kbGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NoYXJlZC9lcnJvci1oYW5kbGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGF5bWVudFZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGF5bWVudC12aWV3L3BheW1lbnQtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7WGxGaWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMveGwtZmlsZS94bC1maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmluZFZhbHVlU3Vic2NyaWJlciB9IGZyb20gJ3J4anMvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjY3BheS1yZXBvcnRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZXBvcnRzLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIElTUEFZTUVOVFNUQVRVU0VOQUJMRUQ6IHN0cmluZztcbiAgZm10ID0gJ2RkL01NL3l5eXknO1xuICBsb2MgPSAnZW4tVVMnO1xuICByZXBvcnRzRm9ybTogRm9ybUdyb3VwO1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgZW5kRGF0ZTogc3RyaW5nO1xuICBlcnJvck1lYWFnc2U6IHN0cmluZztcbiAgY2NkQ2FzZU51bWJlcjogc3RyaW5nO1xuICBpc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQ6Qm9vbGVhbiA9IGZhbHNlO1xuICBpc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlOiBCb29sZWFuID0gZmFsc2U7XG4gIGlzRGF0ZUJldHduTW9udGg6IEJvb2xlYW4gPSBmYWxzZTtcbiAgaXNEYXRlUmFuZ2VCZXRuV2VlazogQm9vbGVhbiA9IGZhbHNlO1xuICBlcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKGZhbHNlLCBmYWxzZSwgJycpO1xuICBwYXltZW50R3JvdXBzOiBJUGF5bWVudEdyb3VwW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHhsRmlsZVNlcnZpY2U6IFhsRmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXJTZXJ2aWNlOiBFcnJvckhhbmRsZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYnVsa1NjYW5pbmdQYXltZW50U2VydmljZTogQnVsa1NjYW5pbmdQYXltZW50U2VydmljZSxcbiAgICBwcml2YXRlIHBheW1lbnRWaWV3U2VydmljZTogUGF5bWVudFZpZXdTZXJ2aWNlKSB7IH1cbiAgIFxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZnJvbVZhbGlkYXRpb24oKTtcblxuICAgfVxuXG4gIGdldFRvZGF5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdCgnVCcpWzBdO1xuIH1cblxuIGdldFNlbGVjdGVkRnJvbURhdGUoKTogdm9pZCB7XG4gdGhpcy52YWxpZGF0ZURhdGVzKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzZWxlY3RlZHJlcG9ydCcpLnZhbHVlKTtcbiB9XG5cbiB2YWxpZGF0ZURhdGVzKHJlcG9ydE5hbWUpe1xuICBjb25zdCBzZWxlY3RlZFN0YXJ0RGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdzdGFydERhdGUnKS52YWx1ZSksXG4gICAgc2VsZWN0ZWRFbmREYXRlID0gdGhpcy50cmFuZm9ybURhdGUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ2VuZERhdGUnKS52YWx1ZSk7XG4gIGNvbnN0IGlzRGF0ZVJhbmdlTW9yZVRoYW5XZWVrID0gKDxhbnk+bmV3IERhdGUoc2VsZWN0ZWRTdGFydERhdGUpIC0gPGFueT5uZXcgRGF0ZShzZWxlY3RlZEVuZERhdGUpKS8oMTAwMCAqIDM2MDAgKiAtMjQpID4gNztcbiAgY29uc3QgaXNEYXRlUmFuZ2VNb3JlVGhhbk1vbnRoID0gKDxhbnk+bmV3IERhdGUoc2VsZWN0ZWRTdGFydERhdGUpIC0gPGFueT5uZXcgRGF0ZShzZWxlY3RlZEVuZERhdGUpKS8oMTAwMCAqIDM2MDAgKiAtMjQpID4gMzA7XG4gIGlmKG5ldyBEYXRlKHNlbGVjdGVkU3RhcnREYXRlKSA+IG5ldyBEYXRlKHNlbGVjdGVkRW5kRGF0ZSkgJiYgc2VsZWN0ZWRFbmREYXRlICE9PSAnJyl7XG4gICAgdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3N0YXJ0RGF0ZScpLnNldFZhbHVlKCcnKTtcbiAgICB0aGlzLmlzRGF0ZVJhbmdlQmV0bldlZWsgPSBmYWxzZTtcbiAgICB0aGlzLmlzRGF0ZUJldHduTW9udGggPSBmYWxzZTtcbiAgICB0aGlzLmlzU3RhcnREYXRlTGVzdGhhbkVuZERhdGUgPSB0cnVlO1xuICB9IGVsc2UgaWYocmVwb3J0TmFtZSAmJiByZXBvcnROYW1lID09PSdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICYmIGlzRGF0ZVJhbmdlTW9yZVRoYW5XZWVrICkge1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IHRydWU7XG4gICAgdGhpcy5pc0RhdGVCZXR3bk1vbnRoID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH0gZWxzZSBpZihyZXBvcnROYW1lICYmIHJlcG9ydE5hbWUgPT09J1BBWU1FTlRfRkFJTFVSRV9FVkVOVCcgJiYgaXNEYXRlUmFuZ2VNb3JlVGhhbk1vbnRoICkge1xuICAgIHRoaXMuaXNEYXRlUmFuZ2VCZXRuV2VlayA9IGZhbHNlO1xuICAgIHRoaXMuaXNEYXRlQmV0d25Nb250aCA9IHRydWU7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5pc0RhdGVCZXR3bk1vbnRoID0gZmFsc2U7XG4gICAgdGhpcy5pc0RhdGVSYW5nZUJldG5XZWVrID0gZmFsc2U7XG4gICAgdGhpcy5pc1N0YXJ0RGF0ZUxlc3RoYW5FbmREYXRlID0gZmFsc2U7XG4gIH1cblxuIH1cblxuICBmcm9tVmFsaWRhdGlvbigpIHtcbiAgICB0aGlzLnJlcG9ydHNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBzZWxlY3RlZHJlcG9ydDogbmV3IEZvcm1Db250cm9sKCcnKSAsXG4gICAgICBzdGFydERhdGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBlbmREYXRlOiBuZXcgRm9ybUNvbnRyb2woJycpIFxuICAgIH0pO1xufVxuXG5kb3dubG9hZFJlcG9ydCgpe1xuICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IHRydWU7XG4gIGNvbnN0IGRhdGFMb3NzUnB0RGVmYXVsdCA9IFt7bG9zc19yZXNwOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGRhdGVfYmFua2VkOicnLGJnY19iYXRjaDonJyxwYXltZW50X21ldGhvZDonJyxhbW91bnQ6Jyd9XSxcbiAgICB1blByb2Nlc3NlZFJwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxleGNlcHRpb25fcmVmOicnLGNjZF9yZWY6JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycscGF5bWVudF9tZXRob2Q6JycsYW1vdW50OicnfV0sXG4gICAgcHJvY2Vzc2VkVW5hbGxvY2F0ZWQgPVt7cmVzcF9zZXJ2aWNlX2lkOicnLHJlc3Bfc2VydmljZV9uYW1lOicnLGFsbG9jYXRpb25fc3RhdHVzOicnLHJlY2VpdmluZ19vZmZpY2U6JycsYWxsb2NhdGlvbl9yZWFzb246JycsY2NkX2V4Y2VwdGlvbl9yZWY6JycsY2NkX2Nhc2VfcmVmOicnLHBheW1lbnRfYXNzZXRfZGNuOicnLGVudl9yZWY6JycsZW52X2l0ZW06JycsZGF0ZV9iYW5rZWQ6JycsYmdjX2JhdGNoOicnLHBheW1lbnRfbWV0aG9kOicnLGFtb3VudDonJyx1cGRhdGVkX2J5OicnfV0sXG4gICAgc2hvcnRGYWxsc1JwdERlZmF1bHQgPSBbe3Jlc3Bfc2VydmljZV9pZDonJyxyZXNwX3NlcnZpY2VfbmFtZTonJyxzdXJwbHVzX3Nob3J0ZmFsbDonJyxiYWxhbmNlOicnLHBheW1lbnRfYW1vdW50OicnLGNjZF9jYXNlX3JlZmVyZW5jZTonJyxjY2RfZXhjZXB0aW9uX3JlZmVyZW5jZTonJyxwcm9jZXNzZWRfZGF0ZTonJywgcmVhc29uOicnLCBleHBsYW5hdGlvbjonJywgdXNlcl9uYW1lOicnfV0sXG4gICAgc2VsZWN0ZWRSZXBvcnROYW1lID0gdGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsXG4gICAgc2VsZWN0ZWRTdGFydERhdGUgPSB0aGlzLnRyYW5mb3JtRGF0ZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc3RhcnREYXRlJykudmFsdWUpLFxuICAgIHNlbGVjdGVkRW5kRGF0ZSA9IHRoaXMudHJhbmZvcm1EYXRlKHRoaXMucmVwb3J0c0Zvcm0uZ2V0KCdlbmREYXRlJykudmFsdWUpO1xuXG4gICAgaWYoc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJyB8fCBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICl7XG4gICAgICB0aGlzLnBheW1lbnRWaWV3U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgbGV0IHJlcz0ge2RhdGE6IHRoaXMuYXBwbHlEYXRlRm9ybWF0KHJlc3VsdCl9O1xuICAgICAgICAgIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdQUk9DRVNTRURfVU5BTExPQ0FURUQnICl7XG4gICAgICAgICAgICByZXMuZGF0YT0gcHJvY2Vzc2VkVW5hbGxvY2F0ZWQ7XG4gICAgICAgICAgfSBlbHNlIGlmKHJlc1snZGF0YSddLmxlbmd0aCA9PT0gMCAmJiBzZWxlY3RlZFJlcG9ydE5hbWUgPT09ICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnICkge1xuICAgICAgICAgICAgcmVzLmRhdGE9IHNob3J0RmFsbHNScHREZWZhdWx0O1xuICAgICAgICAgIH0gXG4gICAgICAgICAgaWYocmVzdWx0WydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZm9yKCB2YXIgaT0wOyBpPCByZXNbJ2RhdGEnXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnZW52X3JlZiddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMCwxMyk7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Vudl9pdGVtJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigxMywyMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYocmVzWydkYXRhJ11baV1bXCJhbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydhbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVsnYW1vdW50J10pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYmFsYW5jZVwiXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2JhbGFuY2UnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVtcImJhbGFuY2VcIl0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBPcCA9IHJlc1snZGF0YSddW2ldW1wic3VycGx1c19zaG9ydGZhbGxcIl07XG4gICAgICAgICAgICAgIGlmKE9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsnc3VycGx1c19zaG9ydGZhbGwnXSA9IE9wID09XCJTdXJwbHVzXCIgPyBcIk92ZXIgcGF5bWVudFwiOlwiVW5kZXIgcGF5bWVudFwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wicGF5bWVudF9hbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydwYXltZW50X2Ftb3VudCddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldWydwYXltZW50X2Ftb3VudCddKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gXG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnhsRmlsZVNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUocmVzWydkYXRhJ10sIHRoaXMuZ2V0RmlsZU5hbWUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsIHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZSh0cnVlLCBmYWxzZSwgJycpO1xuICAgICAgICB9KVxuXG4gICAgfSBlbHNlIGlmKHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1BBWU1FTlRfRkFJTFVSRV9FVkVOVCcpIHtcblxuICAgICAgdGhpcy5wYXltZW50Vmlld1NlcnZpY2UuZG93bmxvYWRGYWlsdXJlUmVwb3J0KHNlbGVjdGVkU3RhcnREYXRlLHNlbGVjdGVkRW5kRGF0ZSkuc3Vic2NyaWJlKFxuICAgICAgICByZXNwb25zZSA9PiAge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gdGhpcy5lcnJvckhhbmRsZXJTZXJ2aWNlLmdldFNlcnZlckVycm9yTWVzc2FnZShmYWxzZSwgZmFsc2UsICcnKTtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSB7ZGF0YTogSlNPTi5wYXJzZShyZXNwb25zZSlbJ3BheW1lbnRfZmFpbHVyZV9yZXBvcnRfbGlzdCddfTtcbiAgICAgICAgICBsZXQgcmVzID0ge2RhdGE6IHRoaXMuYXBwbHlEYXRlRm9ybWF0KHJlc3VsdCl9O1xuICAgICAgICAgIGlmIChyZXN1bHRbJ2RhdGEnXS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaT0wOyBpPCByZXNbJ2RhdGEnXS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAocmVzWydkYXRhJ11baV1bXCJkaXNwdXRlZF9hbW91bnRcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydkaXNwdXRlZF9hbW91bnQnXSA9IHRoaXMuY29udmVydFRvRmxvYXRWYWx1ZShyZXNbJ2RhdGEnXVtpXVtcImRpc3B1dGVkX2Ftb3VudFwiXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc1snZGF0YSddW2ldW1wicmVwcmVzZW50bWVudF9zdGF0dXNcIl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydyZXByZXNlbnRtZW50X3N0YXR1cyddID0gcmVzWydkYXRhJ11baV1bXCJyZXByZXNlbnRtZW50X3N0YXR1c1wiXS50b0xvd2VyQ2FzZSgpID09PSAneWVzJyA/ICdTdWNjZXNzJyA6ICdGYWlsdXJlJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAocmVzWydkYXRhJ11baV1bJ3JlcHJlc2VudG1lbnRfc3RhdHVzJ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydyZXByZXNlbnRtZW50X3N0YXR1cyddID0gJ05vIHJlcHJlc2VudG1lbnQgcmVjZWl2ZWQnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNbJ2RhdGEnXVtpXVsncmVwcmVzZW50bWVudF9kYXRlJ10gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydyZXByZXNlbnRtZW50X2RhdGUnXSA9ICdOL0EnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNbJ2RhdGEnXVtpXVsncmVmdW5kX3JlZmVyZW5jZSddID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsncmVmdW5kX3JlZmVyZW5jZSddID0gJ05vIHJlZnVuZCBhdmFpbGFibGUnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNbJ2RhdGEnXVtpXVsncmVmdW5kX2Ftb3VudCddID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsncmVmdW5kX2Ftb3VudCddID0gJ04vQSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHJlc1snZGF0YSddW2ldWydyZWZ1bmRfZGF0ZSddID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXNbJ2RhdGEnXVtpXVsncmVmdW5kX2RhdGUnXSA9ICdOL0EnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChyZXNbJ2RhdGEnXVtpXVsnZG9jdW1lbnRfY29udHJvbF9udW1iZXInXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2RvY3VtZW50X2NvbnRyb2xfbnVtYmVyJ10gPSAnTi9BJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzRG93bkxvYWRCdXR0b25kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMueGxGaWxlU2VydmljZS5leHBvcnRBc0V4Y2VsRmlsZShyZXNbJ2RhdGEnXSwgdGhpcy5nZXRGaWxlTmFtZSh0aGlzLnJlcG9ydHNGb3JtLmdldCgnc2VsZWN0ZWRyZXBvcnQnKS52YWx1ZSwgc2VsZWN0ZWRTdGFydERhdGUsIHNlbGVjdGVkRW5kRGF0ZSApKTtcblxuICAgICAgICB9LFxuICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNEb3duTG9hZEJ1dHRvbmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgZXJyb3JDb250ZW50ID0gZXJyb3IucmVwbGFjZSgvW15hLXpBLVogXS9nLCAnJykudHJpbSgpO1xuICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSBlcnJvci5yZXBsYWNlKC9bXmEtekEtWjAtOSBdL2csICcnKS50cmltKCkuc3BsaXQoJyAnKVswXTtcbiAgICAgICAgICBpZihzdGF0dXNDb2RlID09PSAnNDA0Jykge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIHRydWUsIGVycm9yQ29udGVudCk7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmVycm9ySGFuZGxlclNlcnZpY2UuZ2V0U2VydmVyRXJyb3JNZXNzYWdlKHRydWUsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVsa1NjYW5pbmdQYXltZW50U2VydmljZS5kb3dubG9hZFNlbGVjdGVkUmVwb3J0KHNlbGVjdGVkUmVwb3J0TmFtZSxzZWxlY3RlZFN0YXJ0RGF0ZSxzZWxlY3RlZEVuZERhdGUpLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4gIHtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UoZmFsc2UsIGZhbHNlLCAnJyk7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gSlNPTi5wYXJzZShyZXNwb25zZSk7XG4gICAgICAgICAgbGV0IHJlcyA9IHtkYXRhOiB0aGlzLmFwcGx5RGF0ZUZvcm1hdChyZXN1bHQpfTtcbiAgICAgICAgICBpZihyZXNbJ2RhdGEnXS5sZW5ndGggPT09IDAgJiYgc2VsZWN0ZWRSZXBvcnROYW1lID09PSAnREFUQV9MT1NTJyApe1xuICAgICAgICAgICAgcmVzLmRhdGE9IGRhdGFMb3NzUnB0RGVmYXVsdDtcbiAgICAgICAgICB9IGVsc2UgaWYocmVzWydkYXRhJ10ubGVuZ3RoID09PSAwICYmIHNlbGVjdGVkUmVwb3J0TmFtZSA9PT0gJ1VOUFJPQ0VTU0VEJyl7XG4gICAgICAgICAgICByZXMuZGF0YSA9IHVuUHJvY2Vzc2VkUnB0RGVmYXVsdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYocmVzdWx0WydkYXRhJ10ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciggdmFyIGk9MDsgaTwgcmVzWydkYXRhJ10ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmKHJlc1snZGF0YSddW2ldW1wiYW1vdW50XCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmVzWydkYXRhJ11baV1bJ2Ftb3VudCddID0gdGhpcy5jb252ZXJ0VG9GbG9hdFZhbHVlKHJlc1snZGF0YSddW2ldWydhbW91bnQnXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZihyZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfcmVmJ10gPSByZXNbJ2RhdGEnXVtpXVtcInBheW1lbnRfYXNzZXRfZGNuXCJdLnN1YnN0cigwLDEzKTtcbiAgICAgICAgICAgIHJlc1snZGF0YSddW2ldWydlbnZfaXRlbSddID0gcmVzWydkYXRhJ11baV1bXCJwYXltZW50X2Fzc2V0X2RjblwiXS5zdWJzdHIoMTMsMjEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnhsRmlsZVNlcnZpY2UuZXhwb3J0QXNFeGNlbEZpbGUocmVzWydkYXRhJ10sIHRoaXMuZ2V0RmlsZU5hbWUodGhpcy5yZXBvcnRzRm9ybS5nZXQoJ3NlbGVjdGVkcmVwb3J0JykudmFsdWUsIHNlbGVjdGVkU3RhcnREYXRlLCBzZWxlY3RlZEVuZERhdGUgKSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0Rvd25Mb2FkQnV0dG9uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZXJyb3JIYW5kbGVyU2VydmljZS5nZXRTZXJ2ZXJFcnJvck1lc3NhZ2UodHJ1ZSwgZmFsc2UsICcnKTtcbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShzZWxlY3RlZE9wdGlvbjogc3RyaW5nLCBzdGFydERhdGU6IHN0cmluZywgZW5kRGF0ZTogc3RyaW5nICkge1xuICAgIGNvbnN0IGxvYyA9ICdlbi1VUycsXG4gICAgICBzdER0ID0gZm9ybWF0RGF0ZShzdGFydERhdGUsICdkZE1NeXknLCBsb2MpLFxuICAgICAgZW5EdCA9IGZvcm1hdERhdGUoZW5kRGF0ZSwgJ2RkTU15eScsIGxvYyksXG4gICAgICBub3cgPSBuZXcgRGF0ZSgpLFxuICAgICAgY3VycmVudERhdGUgPSBmb3JtYXREYXRlKG5vdywgJ2RkTU15eScsIGxvYyksXG4gICAgICB0aW1lc3RhbXAgPSBgJHtjdXJyZW50RGF0ZX1fJHt0aGlzLmdldFR3b2RpZ2l0KG5vdy5nZXRIb3VycygpKX0ke3RoaXMuZ2V0VHdvZGlnaXQobm93LmdldE1pbnV0ZXMoKSl9JHt0aGlzLmdldFR3b2RpZ2l0KG5vdy5nZXRTZWNvbmRzKCkpfWAsXG4gICAgICBzZWxlY3RlZE9wdGlvblR4dCA9IHRoaXMuZ2V0Q2FtZWxDYXNlU3RyaW5nKHNlbGVjdGVkT3B0aW9uKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHNlbGVjdGVkT3B0aW9uVHh0KydfJytzdER0KydfVG9fJytlbkR0KydfUnVuXycrIHRpbWVzdGFtcDtcbiAgfSBcbiAgdHJhbmZvcm1EYXRlKHN0ckRhdGU6IHN0cmluZykge1xuICAgIGxldCByZXN1bHQgPSAnJztcbiAgICBpZiAoc3RyRGF0ZSkge1xuICAgICAgbGV0IHBhcnRzID0gc3RyRGF0ZS5zcGxpdCgnLScpO1xuICAgICAgcmVzdWx0ID0gYCR7cGFydHNbMV19LyR7cGFydHNbMl19LyR7cGFydHNbMF19YDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBnZXRUd29kaWdpdChpbnB1dDogbnVtYmVyKXtcbiAgICByZXR1cm4gKFwiMFwiICsgaW5wdXQpLnNsaWNlKC0yKTtcbiAgfVxuICBnZXRDYW1lbENhc2VTdHJpbmcoc2VsZWN0ZWRPcHRpb24pIHtcbiAgICBsZXQgcmVzdWx0O1xuICAgIHN3aXRjaChzZWxlY3RlZE9wdGlvbikgeyBcbiAgICAgIGNhc2UgJ1VOUFJPQ0VTU0VEJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ1VucHJvY2Vzc2VkJztcbiAgICAgICAgYnJlYWs7IFxuICAgICAgfSBcbiAgICAgIGNhc2UgJ0RBVEFfTE9TUyc6IHsgXG4gICAgICAgIHJlc3VsdCA9ICdEYXRhX0xvc3MnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnUFJPQ0VTU0VEX1VOQUxMT0NBVEVEJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ1Byb2Nlc3NlZF9VbmFsbG9jYXRlZCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH0gXG4gICAgICBjYXNlICdTVVJQTFVTX0FORF9TSE9SVEZBTEwnOiB7IFxuICAgICAgICByZXN1bHQgPSAnT3ZlciBQYXltZW50X1VuZGVyIFBheW1lbnQnO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgICAgY2FzZSAnUEFZTUVOVF9GQUlMVVJFX0VWRU5UJzogeyBcbiAgICAgICAgcmVzdWx0ID0gJ1BheW1lbnQgZmFpbHVyZSBldmVudCc7XG4gICAgICAgIGJyZWFrOyBcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHsgXG4gICAgICAgIHJlc3VsdCA9IHNlbGVjdGVkT3B0aW9uO1xuICAgICAgICBicmVhazsgXG4gICAgICB9IFxuICAgfSBcbiAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgYXBwbHlEYXRlRm9ybWF0KHJlcykge1xuICAgIHJldHVybiByZXNbJ2RhdGEnXS5tYXAodmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlWydkYXRlX2JhbmtlZCddKSB7XG4gICAgICAgIHZhbHVlWydkYXRlX2JhbmtlZCddID0gZm9ybWF0RGF0ZSh2YWx1ZVsnZGF0ZV9iYW5rZWQnXSwgdGhpcy5mbXQsIHRoaXMubG9jKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZVsnZXZlbnRfZGF0ZSddICYmIHZhbHVlWydldmVudF9kYXRlJ10uaW5kZXhPZignLCcpID09PSAtMSkge1xuICAgICAgICB2YWx1ZVsnZXZlbnRfZGF0ZSddID0gZm9ybWF0RGF0ZSh2YWx1ZVsnZXZlbnRfZGF0ZSddLCB0aGlzLmZtdCwgdGhpcy5sb2MpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZVsnZXZlbnRfZGF0ZSddICYmIHZhbHVlWydldmVudF9kYXRlJ10uaW5kZXhPZignLCcpICE9PSAtMSkge1xuICAgICAgICB2YWx1ZVsnZXZlbnRfZGF0ZSddID0gdGhpcy5tdWx0aURhdGVGb3JtYXRlcih2YWx1ZVsnZXZlbnRfZGF0ZSddKVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVbJ3JlcHJlc2VudG1lbnRfZGF0ZSddICYmIHZhbHVlWydyZXByZXNlbnRtZW50X2RhdGUnXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgICAgIHZhbHVlWydyZXByZXNlbnRtZW50X2RhdGUnXSA9IGZvcm1hdERhdGUodmFsdWVbJ3JlcHJlc2VudG1lbnRfZGF0ZSddLCB0aGlzLmZtdCwgdGhpcy5sb2MpO1xuICAgICAgfSBlbHNlIGlmICh2YWx1ZVsncmVwcmVzZW50bWVudF9kYXRlJ10gJiYgdmFsdWVbJ3JlcHJlc2VudG1lbnRfZGF0ZSddLmluZGV4T2YoJywnKSAhPT0gLTEpIHtcbiAgICAgICAgdmFsdWVbJ3JlcHJlc2VudG1lbnRfZGF0ZSddID0gdGhpcy5tdWx0aURhdGVGb3JtYXRlcih2YWx1ZVsncmVwcmVzZW50bWVudF9kYXRlJ10pXG4gICAgICB9XG5cbiAgICAgIGlmICh2YWx1ZVsncmVmdW5kX2RhdGUnXSAmJiB2YWx1ZVsncmVmdW5kX2RhdGUnXS5pbmRleE9mKCcsJykgPT09IC0xKSB7XG4gICAgICAgIHZhbHVlWydyZWZ1bmRfZGF0ZSddID0gZm9ybWF0RGF0ZSh2YWx1ZVsncmVmdW5kX2RhdGUnXSwgdGhpcy5mbXQsIHRoaXMubG9jKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsdWVbJ3JlZnVuZF9kYXRlJ10gJiYgdmFsdWVbJ3JlZnVuZF9kYXRlJ10uaW5kZXhPZignLCcpICE9PSAtMSkge1xuICAgICAgICB2YWx1ZVsncmVmdW5kX2RhdGUnXSA9IHRoaXMubXVsdGlEYXRlRm9ybWF0ZXIodmFsdWVbJ3JlZnVuZF9kYXRlJ10pXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gIH1cbiAgbXVsdGlEYXRlRm9ybWF0ZXIoZGF0ZVN0cikge1xuICAgcmV0dXJuIGRhdGVTdHIuc3BsaXQoJywnKS5tYXAoKGRhdGUpID0+IGZvcm1hdERhdGUoZGF0ZSwgdGhpcy5mbXQsIHRoaXMubG9jKSkuam9pbignLCcpO1xuICB9XG4gIFxuICBjb252ZXJ0VG9GbG9hdFZhbHVlKGFtdCkge1xuICAgIHJldHVybiBhbXQgPyBOdW1iZXIucGFyc2VGbG9hdChhbXQpLnRvRml4ZWQoMik6ICcwLjAwJztcbiAgfVxufVxuIl19
|