@almatar/smart-booking-dashboard 0.0.1 → 0.0.2-alpha.3
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/lib/components/action-card/action-card.component.mjs +3 -3
- package/esm2022/lib/components/add-note-dialog/add-note-dialog.component.mjs +3 -3
- package/esm2022/lib/components/almatar-aside/aside-back-button.service.mjs +24 -0
- package/esm2022/lib/components/almatar-aside/aside.component.mjs +122 -0
- package/esm2022/lib/components/booking-input/booking-input.component.mjs +4 -3
- package/esm2022/lib/components/cancel-dialog/cancel-dialog.component.mjs +53 -4
- package/esm2022/lib/components/data-search/data-search.component.mjs +3 -3
- package/esm2022/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.mjs +544 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.mjs +43 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.mjs +296 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.mjs +88 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.mjs +242 -0
- package/esm2022/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.mjs +48 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.mjs +129 -0
- package/esm2022/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.mjs +321 -0
- package/esm2022/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.mjs +52 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.mjs +9 -0
- package/esm2022/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.mjs +7 -0
- package/esm2022/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.mjs +2 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.mjs +457 -0
- package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs +55 -0
- package/esm2022/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.mjs +48 -0
- package/esm2022/lib/components/reissue-dialog/reissue-dialog.component.mjs +135 -0
- package/esm2022/lib/components/reissue-dialog/reissue-upgrade.store.mjs +305 -0
- package/esm2022/lib/components/reissue-dialog/reissue.store.mjs +349 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.mjs +45 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.mjs +140 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.mjs +16 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.mjs +104 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.mjs +44 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.mjs +193 -0
- package/esm2022/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.mjs +88 -0
- package/esm2022/lib/components/result-panel/result-panel.component.mjs +3 -3
- package/esm2022/lib/components/shared/components/confirm-modal/confirm-modal.component.mjs +75 -0
- package/esm2022/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.mjs +46 -0
- package/esm2022/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.mjs +9 -0
- package/esm2022/lib/components/shared/interfaces/i-flight-refund-details.mjs +86 -0
- package/esm2022/lib/components/shared/models/cancel-hotel-booking.model.mjs +7 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.mjs +27 -0
- package/esm2022/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.mjs +17 -0
- package/esm2022/lib/components/workflow-actions/workflow-actions.component.mjs +5 -3
- package/esm2022/lib/config/dashboard.config.mjs +3 -1
- package/esm2022/lib/config/hotel-actions.config.mjs +21 -1
- package/esm2022/lib/models/booking.types.mjs +73 -2
- package/esm2022/lib/models/reissue.types.mjs +2 -0
- package/esm2022/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.mjs +31 -7
- package/esm2022/lib/services/booking.service.mjs +6 -2
- package/esm2022/lib/services/reissue.service.mjs +142 -0
- package/esm2022/lib/services/toast.service.mjs +15 -7
- package/esm2022/lib/shared/components/currency-code-icon/currency-code-icon.component.mjs +35 -0
- package/esm2022/lib/shared/enums/brand-enums.enum.mjs +7 -0
- package/esm2022/lib/shared/environments/environment.mjs +10 -0
- package/esm2022/lib/shared/models/index.mjs +6 -0
- package/esm2022/lib/shared/modules/almatar-icon/almatar-icon.module.mjs +36 -0
- package/esm2022/lib/shared/modules/loader/loader.module.mjs +43 -0
- package/esm2022/lib/shared/pipes/exchange.pipe.mjs +49 -0
- package/esm2022/lib/shared/services/api.service.mjs +42 -0
- package/esm2022/lib/shared/services/shared.service.mjs +34 -0
- package/esm2022/lib/shared/services/translation.service.mjs +61 -0
- package/esm2022/lib/shared/services/webengage-tracking.service.mjs +28 -0
- package/esm2022/lib/shared/store/selectors/currency.selectors.mjs +9 -0
- package/esm2022/lib/utils/reissue-format.mjs +64 -0
- package/esm2022/lib/utils/reissue-url.builder.mjs +314 -0
- package/esm2022/public-api.mjs +3 -1
- package/fesm2022/almatar-smart-booking-dashboard.mjs +5387 -395
- package/fesm2022/almatar-smart-booking-dashboard.mjs.map +1 -1
- package/lib/components/action-dialog/action-dialog.component.d.ts +1 -1
- package/lib/components/almatar-aside/aside-back-button.service.d.ts +11 -0
- package/lib/components/almatar-aside/aside.component.d.ts +46 -0
- package/lib/components/cancel-dialog/cancel-dialog.component.d.ts +7 -0
- package/lib/components/hotel-cancel/almatar-hotel-auto-cancellation.component.d.ts +97 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-method/almatar-hotel-auto-cancellation-refund-method.component.d.ts +25 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-refund-summary/almatar-hotel-auto-cancellation-refund-summary.component.d.ts +91 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/almatar-hotel-auto-cancellation-select-rooms.component.d.ts +39 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-non-refundable-room/almatar-hotel-auto-cancellation-non-refundable-room.component.d.ts +44 -0
- package/lib/components/hotel-cancel/components/almatar-hotel-auto-cancellation-select-rooms/components/almatar-hotel-auto-cancellation-refundable-room/almatar-hotel-auto-cancellation-refundable-room.component.d.ts +19 -0
- package/lib/components/hotel-cancel/components/hotel-content/hotel-content.component.d.ts +38 -0
- package/lib/components/hotel-cancel/components/hotel-refund-method-selector/hotel-refund-method-selector.component.d.ts +142 -0
- package/lib/components/hotel-cancel/components/result-overlay/result-overlay.component.d.ts +23 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-endpoints.enum.d.ts +7 -0
- package/lib/components/hotel-cancel/enums/almatar-hotel-auto-cancellation-step.enum.d.ts +5 -0
- package/lib/components/hotel-cancel/interfaces/i-almatar-hotel-auto-cancellation.interface.d.ts +252 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation-endpoints.service.d.ts +88 -0
- package/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.d.ts +21 -0
- package/lib/components/hotel-itinerary-card/hotel-itinerary-card.component.d.ts +16 -0
- package/lib/components/reissue-dialog/reissue-dialog.component.d.ts +34 -0
- package/lib/components/reissue-dialog/reissue-upgrade.store.d.ts +96 -0
- package/lib/components/reissue-dialog/reissue.store.d.ts +124 -0
- package/lib/components/reissue-dialog/steps/reissue-date-step/reissue-date-step.component.d.ts +11 -0
- package/lib/components/reissue-dialog/steps/reissue-legs-step/reissue-legs-step.component.d.ts +16 -0
- package/lib/components/reissue-dialog/steps/reissue-notice/reissue-notice.component.d.ts +8 -0
- package/lib/components/reissue-dialog/steps/reissue-route-step/reissue-route-step.component.d.ts +21 -0
- package/lib/components/reissue-dialog/steps/reissue-service-step/reissue-service-step.component.d.ts +17 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-confirm-step/reissue-upgrade-confirm-step.component.d.ts +28 -0
- package/lib/components/reissue-dialog/steps/reissue-upgrade-step/reissue-upgrade-step.component.d.ts +13 -0
- package/lib/components/result-panel/result-panel.component.d.ts +1 -1
- package/lib/components/shared/components/confirm-modal/confirm-modal.component.d.ts +17 -0
- package/lib/components/shared/components/manage-booking-failed-modal/manage-booking-failed-modal.component.d.ts +10 -0
- package/lib/components/shared/enums/hotel-manage-booking-aside-tab.enum.d.ts +7 -0
- package/lib/components/shared/interfaces/i-flight-refund-details.d.ts +73 -0
- package/lib/components/shared/models/cancel-hotel-booking.model.d.ts +6 -0
- package/lib/components/shared/services/hotel-manage-booking/hotel-manage-booking.service.d.ts +11 -0
- package/lib/components/shared/services/hotel-manage-booking-endpoints/hotel-manage-booking-endpoints.service.d.ts +7 -0
- package/lib/components/workflow-actions/workflow-actions.component.d.ts +3 -1
- package/lib/config/dashboard.config.d.ts +29 -0
- package/lib/models/booking.types.d.ts +28 -0
- package/lib/models/reissue.types.d.ts +147 -0
- package/lib/pages/smart-booking-dashboard/smart-booking-dashboard.component.d.ts +5 -1
- package/lib/services/reissue.service.d.ts +45 -0
- package/lib/services/toast.service.d.ts +14 -1
- package/lib/shared/components/currency-code-icon/currency-code-icon.component.d.ts +13 -0
- package/lib/shared/enums/brand-enums.enum.d.ts +5 -0
- package/lib/shared/environments/environment.d.ts +7 -0
- package/lib/shared/models/index.d.ts +11 -0
- package/lib/shared/modules/almatar-icon/almatar-icon.module.d.ts +13 -0
- package/lib/shared/modules/loader/loader.module.d.ts +13 -0
- package/lib/shared/pipes/exchange.pipe.d.ts +17 -0
- package/lib/shared/services/api.service.d.ts +43 -0
- package/lib/shared/services/shared.service.d.ts +12 -0
- package/lib/shared/services/translation.service.d.ts +17 -0
- package/lib/shared/services/webengage-tracking.service.d.ts +8 -0
- package/lib/shared/store/selectors/currency.selectors.d.ts +2 -0
- package/lib/utils/reissue-format.d.ts +28 -0
- package/lib/utils/reissue-url.builder.d.ts +24 -0
- package/package.json +9 -24
- package/public-api.d.ts +5 -1
- package/LICENSE +0 -21
- package/README.md +0 -132
|
@@ -0,0 +1,457 @@
|
|
|
1
|
+
import { Injectable, inject, signal, computed } from '@angular/core';
|
|
2
|
+
import { map, catchError, throwError } from 'rxjs';
|
|
3
|
+
import { ApiService } from '../../../shared/services/api.service';
|
|
4
|
+
import { SBD_CONFIG } from '../../../config/dashboard.config';
|
|
5
|
+
import { ActivatedRoute } from '@angular/router';
|
|
6
|
+
import { environments } from '../../../shared/environments/environment';
|
|
7
|
+
import { HotelManageBookingService } from '../../shared/services/hotel-manage-booking/hotel-manage-booking.service';
|
|
8
|
+
import { AlmatarHotelAutoCancellationEndpointsEnum } from '../enums/almatar-hotel-auto-cancellation-endpoints.enum';
|
|
9
|
+
import { resolveMyTripsViewedEntrySourceFromQueryParams } from '../../../shared/services/webengage-tracking.service';
|
|
10
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class AlmatarHotelAutoCancellationEndpointsService {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.api = inject(ApiService);
|
|
15
|
+
this.apiBase = inject(SBD_CONFIG).apiBase;
|
|
16
|
+
this.route = inject(ActivatedRoute);
|
|
17
|
+
this.hotelManageBookingService = inject(HotelManageBookingService);
|
|
18
|
+
this._almatarBookingId = signal('');
|
|
19
|
+
this._confirmationNumber = signal('');
|
|
20
|
+
this._isNusukFlow = signal(environments.isTenant || false);
|
|
21
|
+
this._selectedPackageIds = signal([]);
|
|
22
|
+
this.almatarBookingId = computed(() => this._almatarBookingId());
|
|
23
|
+
this.confirmationNumber = computed(() => this._confirmationNumber());
|
|
24
|
+
this.isNusukFlow = computed(() => this._isNusukFlow());
|
|
25
|
+
this.initializeBookingData();
|
|
26
|
+
}
|
|
27
|
+
initializeBookingData() {
|
|
28
|
+
this.hotelManageBookingService.selectedHotelBooking
|
|
29
|
+
.pipe(takeUntilDestroyed())
|
|
30
|
+
.subscribe((selectedHotelBooking) => {
|
|
31
|
+
// console.log('Selected Hotel Booking:', selectedHotelBooking);
|
|
32
|
+
if (selectedHotelBooking) {
|
|
33
|
+
this._almatarBookingId.set(selectedHotelBooking.bookingId || '');
|
|
34
|
+
this._confirmationNumber.set(selectedHotelBooking.bookingId || '');
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Full URL of an endpoint from the enum. The enum paths start with `/api/`, which is the default `apiBase`; a host
|
|
40
|
+
* that serves the API somewhere else (Helix: its own API origin) sets `apiBase`, so that part is swapped for it.
|
|
41
|
+
*/
|
|
42
|
+
resolveEndpoint(path) {
|
|
43
|
+
return `${this.apiBase.replace(/\/+$/, '')}/${path.replace(/^\/?api\//, '')}`;
|
|
44
|
+
}
|
|
45
|
+
getRefundDetails(packageIds = []) {
|
|
46
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.getRefundDetails);
|
|
47
|
+
const payload = {
|
|
48
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
49
|
+
''}`,
|
|
50
|
+
product: 'hotels',
|
|
51
|
+
packageIds: [...new Set(packageIds)] // Ensure unique package IDs
|
|
52
|
+
};
|
|
53
|
+
// return of({
|
|
54
|
+
// data: {
|
|
55
|
+
// bookingId: 144368,
|
|
56
|
+
// currency: 'SAR',
|
|
57
|
+
// status: 'Partially refunded',
|
|
58
|
+
// message: 'Refund details calculated successfully',
|
|
59
|
+
// flags: {
|
|
60
|
+
// refundable: true,
|
|
61
|
+
// partial: false,
|
|
62
|
+
// goldenGift: false
|
|
63
|
+
// },
|
|
64
|
+
// selection: {
|
|
65
|
+
// packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95']
|
|
66
|
+
// },
|
|
67
|
+
// totals: {
|
|
68
|
+
// paid: 6866,
|
|
69
|
+
// beforeCoupon: 6865.61,
|
|
70
|
+
// roomsBooked: 4,
|
|
71
|
+
// coupon: 0,
|
|
72
|
+
// gifts: 0,
|
|
73
|
+
// serviceFee: 0,
|
|
74
|
+
// wallet: 0,
|
|
75
|
+
// card: 0,
|
|
76
|
+
// tabby: 0,
|
|
77
|
+
// tamara: 220,
|
|
78
|
+
// mokafa: 0,
|
|
79
|
+
// qitaf: 0,
|
|
80
|
+
// wala: 0,
|
|
81
|
+
// hassad: 0,
|
|
82
|
+
// anb: 0,
|
|
83
|
+
// ygg: 0
|
|
84
|
+
// },
|
|
85
|
+
// previous: [
|
|
86
|
+
// {
|
|
87
|
+
// packageId: '5eb33d59-2607-4057-9d26-4f7be745f67f',
|
|
88
|
+
// roomName: 'Standard Room',
|
|
89
|
+
// cancelledAt: '2026-09-02T13:42:54.848Z',
|
|
90
|
+
// amount: 2990.79,
|
|
91
|
+
// fee: 0,
|
|
92
|
+
// refunded: 2990.79
|
|
93
|
+
// }
|
|
94
|
+
// ],
|
|
95
|
+
// current: {
|
|
96
|
+
// rooms: [
|
|
97
|
+
// {
|
|
98
|
+
// packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
|
|
99
|
+
// roomId: '0229e622-a89a-469d-adb8-8615deb971ca',
|
|
100
|
+
// roomName: 'Scene Room Twin',
|
|
101
|
+
// basis: 'Room only RO',
|
|
102
|
+
// pax: {
|
|
103
|
+
// adults: 2,
|
|
104
|
+
// children: 0,
|
|
105
|
+
// total: 2
|
|
106
|
+
// },
|
|
107
|
+
// nights: 4,
|
|
108
|
+
// amount: 1887.61,
|
|
109
|
+
// fee: 0,
|
|
110
|
+
// serviceFee: 50,
|
|
111
|
+
// refund: 1887.61,
|
|
112
|
+
// refundable: true,
|
|
113
|
+
// route: 'AUTO'
|
|
114
|
+
// },
|
|
115
|
+
// {
|
|
116
|
+
// packageId: 'f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95',
|
|
117
|
+
// roomId: 'b8aed26e-d91a-4234-ae37-94b2c6232dbd',
|
|
118
|
+
// roomName: 'Scene Room Twin',
|
|
119
|
+
// basis: 'Room only RO',
|
|
120
|
+
// pax: {
|
|
121
|
+
// adults: 2,
|
|
122
|
+
// children: 0,
|
|
123
|
+
// total: 2
|
|
124
|
+
// },
|
|
125
|
+
// nights: 4,
|
|
126
|
+
// amount: 1887.6,
|
|
127
|
+
// fee: 0,
|
|
128
|
+
// serviceFee: 50,
|
|
129
|
+
// refund: 1887.6,
|
|
130
|
+
// refundable: true,
|
|
131
|
+
// route: 'AUTO'
|
|
132
|
+
// }
|
|
133
|
+
// ],
|
|
134
|
+
// amount: 3775.21,
|
|
135
|
+
// fee: 0,
|
|
136
|
+
// surcharge: 0,
|
|
137
|
+
// refund: 3775.21
|
|
138
|
+
// },
|
|
139
|
+
// payout: {
|
|
140
|
+
// alreadyRefunded: 2990.79,
|
|
141
|
+
// current: 1600,
|
|
142
|
+
// afterThis: 6766,
|
|
143
|
+
// feesTotal: 0,
|
|
144
|
+
// wallet: 0,
|
|
145
|
+
// card: 0,
|
|
146
|
+
// tabby: 0,
|
|
147
|
+
// tamara: 200,
|
|
148
|
+
// amwal: 0,
|
|
149
|
+
// mis: 0,
|
|
150
|
+
// bnplManual: 0,
|
|
151
|
+
// loyaltyToWallet: 600,
|
|
152
|
+
// note: null
|
|
153
|
+
// },
|
|
154
|
+
// summaries: [
|
|
155
|
+
// {
|
|
156
|
+
// code: 'CARD',
|
|
157
|
+
// label: 'Card',
|
|
158
|
+
// paid: 6866,
|
|
159
|
+
// refund: 3775.21,
|
|
160
|
+
// refundable: true,
|
|
161
|
+
// gateway: 'CH'
|
|
162
|
+
// },
|
|
163
|
+
// {
|
|
164
|
+
// code: 'SERVICE_FEE',
|
|
165
|
+
// label: 'Service Fee',
|
|
166
|
+
// paid: 100,
|
|
167
|
+
// refund: 0,
|
|
168
|
+
// refundable: false
|
|
169
|
+
// }
|
|
170
|
+
// ],
|
|
171
|
+
// gifts: []
|
|
172
|
+
// },
|
|
173
|
+
// status: 200,
|
|
174
|
+
// errors: null
|
|
175
|
+
// });
|
|
176
|
+
return this.api
|
|
177
|
+
.post({
|
|
178
|
+
endpoint,
|
|
179
|
+
...payload
|
|
180
|
+
})
|
|
181
|
+
.pipe(catchError((error) => this.handleError(error, 'Failed to get refund details')));
|
|
182
|
+
}
|
|
183
|
+
mapApiResponseToRooms(data) {
|
|
184
|
+
return this.getAllRooms(data);
|
|
185
|
+
}
|
|
186
|
+
mapApiResponseToRefundSummary(data) {
|
|
187
|
+
return {
|
|
188
|
+
totalPaid: data.totals?.paid || 0,
|
|
189
|
+
totalRefund: data.current?.refund || data.current?.refund || 0,
|
|
190
|
+
totalFees: data.current?.fee || 0,
|
|
191
|
+
rooms: this.getAllRooms(data),
|
|
192
|
+
packages: this.getAllPackages(data),
|
|
193
|
+
summaries: data.summaries,
|
|
194
|
+
payout: data.payout,
|
|
195
|
+
totals: data.totals,
|
|
196
|
+
// Additional breakdown fields
|
|
197
|
+
coupon: data.totals?.coupon || 0,
|
|
198
|
+
giftsTotal: data.totals?.gifts || 0,
|
|
199
|
+
giftsDetails: data.gifts || [],
|
|
200
|
+
serviceFee: data.totals?.serviceFee || 0,
|
|
201
|
+
surcharge: data.current?.surcharge || 0,
|
|
202
|
+
goldenGift: data.flags?.goldenGift || false,
|
|
203
|
+
previousRooms: data.previous || []
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
getAllPackages(data) {
|
|
207
|
+
const packages = [];
|
|
208
|
+
const packageMap = new Map();
|
|
209
|
+
// Process previous (cancelled) rooms - group by packageId
|
|
210
|
+
if (data.previous?.length) {
|
|
211
|
+
data.previous.forEach((room) => {
|
|
212
|
+
const existingPkg = packageMap.get(room.packageId);
|
|
213
|
+
if (existingPkg) {
|
|
214
|
+
existingPkg.rooms.push({
|
|
215
|
+
roomId: room.roomId || room.packageId,
|
|
216
|
+
roomName: room.roomName,
|
|
217
|
+
basis: room.basis,
|
|
218
|
+
nights: room.nights
|
|
219
|
+
});
|
|
220
|
+
existingPkg.amount += room.amount || 0;
|
|
221
|
+
existingPkg.fee += room.fee || 0;
|
|
222
|
+
existingPkg.refund += room.refunded || 0;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
packageMap.set(room.packageId, {
|
|
226
|
+
packageId: room.packageId,
|
|
227
|
+
packageName: room.roomName,
|
|
228
|
+
rooms: [
|
|
229
|
+
{
|
|
230
|
+
roomId: room.roomId || room.packageId,
|
|
231
|
+
roomName: room.roomName,
|
|
232
|
+
basis: room.basis,
|
|
233
|
+
nights: room.nights
|
|
234
|
+
}
|
|
235
|
+
],
|
|
236
|
+
amount: room.amount || 0,
|
|
237
|
+
fee: room.fee || 0,
|
|
238
|
+
serviceFee: 0,
|
|
239
|
+
refund: room.refunded || 0,
|
|
240
|
+
refundable: false,
|
|
241
|
+
cancelledBefore: true,
|
|
242
|
+
cancellationDate: room.cancelledAt
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// Process current rooms - group by packageId
|
|
248
|
+
if (data.current?.rooms?.length) {
|
|
249
|
+
data.current.rooms.forEach((room) => {
|
|
250
|
+
const existingPkg = packageMap.get(room.packageId);
|
|
251
|
+
if (existingPkg && !existingPkg.cancelledBefore) {
|
|
252
|
+
existingPkg.rooms.push({
|
|
253
|
+
roomId: room.roomId || room.packageId,
|
|
254
|
+
roomName: room.roomName,
|
|
255
|
+
basis: room.basis,
|
|
256
|
+
nights: room.nights,
|
|
257
|
+
pax: room.pax,
|
|
258
|
+
adults: room.pax?.adults,
|
|
259
|
+
children: room.pax?.children
|
|
260
|
+
});
|
|
261
|
+
existingPkg.amount += room.amount || 0;
|
|
262
|
+
existingPkg.fee += room.fee || 0;
|
|
263
|
+
existingPkg.serviceFee += room.serviceFee || 0;
|
|
264
|
+
existingPkg.refund += room.refund || 0;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
packageMap.set(room.packageId, {
|
|
268
|
+
packageId: room.packageId,
|
|
269
|
+
packageName: room.roomName,
|
|
270
|
+
rooms: [
|
|
271
|
+
{
|
|
272
|
+
roomId: room.roomId || room.packageId,
|
|
273
|
+
roomName: room.roomName,
|
|
274
|
+
basis: room.basis,
|
|
275
|
+
nights: room.nights,
|
|
276
|
+
pax: room.pax,
|
|
277
|
+
adults: room.pax?.adults,
|
|
278
|
+
children: room.pax?.children
|
|
279
|
+
}
|
|
280
|
+
],
|
|
281
|
+
amount: room.amount || 0,
|
|
282
|
+
fee: room.fee || 0,
|
|
283
|
+
serviceFee: room.serviceFee || 0,
|
|
284
|
+
refund: room.refund || 0,
|
|
285
|
+
refundable: room.refundable,
|
|
286
|
+
route: room.route,
|
|
287
|
+
cancelledBefore: false,
|
|
288
|
+
cancellationDate: new Date().toISOString()
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
packageMap.forEach((pkg) => packages.push(pkg));
|
|
294
|
+
return packages;
|
|
295
|
+
}
|
|
296
|
+
getAllRooms(data) {
|
|
297
|
+
const allRooms = [];
|
|
298
|
+
if (data.previous?.length) {
|
|
299
|
+
data.previous.forEach((room) => {
|
|
300
|
+
allRooms.push({
|
|
301
|
+
packageId: room.packageId,
|
|
302
|
+
roomId: room?.roomId,
|
|
303
|
+
roomName: room.roomName,
|
|
304
|
+
isRefundable: false,
|
|
305
|
+
isSelected: false,
|
|
306
|
+
cancelledBefore: true,
|
|
307
|
+
roomAmount: room.amount,
|
|
308
|
+
cancellationFee: room.fee,
|
|
309
|
+
refundAmount: room.refunded,
|
|
310
|
+
currentCancellation: false,
|
|
311
|
+
cancellationDate: room.cancelledAt,
|
|
312
|
+
nights: room.nights ?? 1
|
|
313
|
+
});
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
if (data.current?.rooms?.length) {
|
|
317
|
+
data.current.rooms.forEach((room) => {
|
|
318
|
+
allRooms.push({
|
|
319
|
+
packageId: room.packageId,
|
|
320
|
+
roomId: room?.roomId,
|
|
321
|
+
roomName: room.roomName,
|
|
322
|
+
isRefundable: room.refundable,
|
|
323
|
+
isSelected: false,
|
|
324
|
+
roomAmount: room.amount,
|
|
325
|
+
cancellationFee: room.fee,
|
|
326
|
+
cancelledBefore: false,
|
|
327
|
+
refundAmount: room.refund,
|
|
328
|
+
route: room.route,
|
|
329
|
+
currentCancellation: true,
|
|
330
|
+
cancellationDate: `${new Date()}`,
|
|
331
|
+
nights: room.nights ?? 1
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
return allRooms;
|
|
336
|
+
}
|
|
337
|
+
processAutoCancellation(packageIds, refundOption = 'originalPaymentMethod') {
|
|
338
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation);
|
|
339
|
+
const uniquePackageIds = [...new Set(packageIds)]; // Ensure unique package IDs
|
|
340
|
+
const payload = {
|
|
341
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
342
|
+
''}`,
|
|
343
|
+
product: 'hotels',
|
|
344
|
+
packageIds: uniquePackageIds,
|
|
345
|
+
preferredPaymentMethod: refundOption
|
|
346
|
+
};
|
|
347
|
+
this._selectedPackageIds.set(uniquePackageIds);
|
|
348
|
+
// return of({
|
|
349
|
+
// data: {
|
|
350
|
+
// error: '1',
|
|
351
|
+
// message:
|
|
352
|
+
// 'Cancel requested — supplier cancellation failed; ticket created',
|
|
353
|
+
// bookingId: 144368,
|
|
354
|
+
// preferredPaymentMethod: 'wallet',
|
|
355
|
+
// cancel: {
|
|
356
|
+
// status: 'failed',
|
|
357
|
+
// packageIds: ['f03838bd-ea8d-4fe5-bfc8-dd31c9bdee95'],
|
|
358
|
+
// },
|
|
359
|
+
// refund: {
|
|
360
|
+
// status: 'skipped',
|
|
361
|
+
// bookingStatus: 'Cancelled',
|
|
362
|
+
// amount: 1050,
|
|
363
|
+
// currency: 'SAR',
|
|
364
|
+
// breakdown: {
|
|
365
|
+
// wallet: 750,
|
|
366
|
+
// mokafa: 200,
|
|
367
|
+
// qitaf: 100,
|
|
368
|
+
// card: 0,
|
|
369
|
+
// tabby: 0,
|
|
370
|
+
// tamara: 0,
|
|
371
|
+
// },
|
|
372
|
+
// },
|
|
373
|
+
// },
|
|
374
|
+
// status: 200,
|
|
375
|
+
// errors: null,
|
|
376
|
+
// });
|
|
377
|
+
return this.api
|
|
378
|
+
.post({
|
|
379
|
+
endpoint,
|
|
380
|
+
...payload
|
|
381
|
+
})
|
|
382
|
+
.pipe(map((response) => {
|
|
383
|
+
this._selectedPackageIds.set([]);
|
|
384
|
+
return response;
|
|
385
|
+
}), catchError((error) => this.handleError(error, 'Failed to process cancellation')));
|
|
386
|
+
}
|
|
387
|
+
processNonRefundableCancellation(packageId, attachmentUrl, language = 'en') {
|
|
388
|
+
const endpoint = this.resolveEndpoint(AlmatarHotelAutoCancellationEndpointsEnum.processAutoCancellation);
|
|
389
|
+
const payload = {
|
|
390
|
+
bookingId: `${this.hotelManageBookingService.selectedHotelBooking.value?.bookingId ||
|
|
391
|
+
''}`,
|
|
392
|
+
product: 'hotels',
|
|
393
|
+
packageIds: [packageId],
|
|
394
|
+
preferredPaymentMethod: 'originalPaymentMethod',
|
|
395
|
+
processedMode: 'auto',
|
|
396
|
+
language,
|
|
397
|
+
attachmentUrl
|
|
398
|
+
};
|
|
399
|
+
return this.api
|
|
400
|
+
.post({
|
|
401
|
+
endpoint,
|
|
402
|
+
...payload
|
|
403
|
+
})
|
|
404
|
+
.pipe(catchError((error) => this.handleError(error, 'Failed to process non-refundable cancellation')));
|
|
405
|
+
}
|
|
406
|
+
calculateLocalRefundSummary(rooms) {
|
|
407
|
+
const selectedRooms = rooms.filter((room) => room.isSelected);
|
|
408
|
+
const totalPaid = rooms.reduce((sum, room) => sum + room.roomAmount, 0);
|
|
409
|
+
const totalRefund = selectedRooms.reduce((sum, room) => sum + room.refundAmount, 0);
|
|
410
|
+
return {
|
|
411
|
+
totalPaid,
|
|
412
|
+
totalRefund,
|
|
413
|
+
rooms: selectedRooms.map((room) => ({
|
|
414
|
+
...room,
|
|
415
|
+
currentCancellation: true,
|
|
416
|
+
cancellationDate: new Date().toISOString()
|
|
417
|
+
}))
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
getSelectedPackageIds() {
|
|
421
|
+
return this._selectedPackageIds();
|
|
422
|
+
}
|
|
423
|
+
clearSelectedPackageIds() {
|
|
424
|
+
this._selectedPackageIds.set([]);
|
|
425
|
+
}
|
|
426
|
+
getEntrySourceDeviceBrand() {
|
|
427
|
+
return {
|
|
428
|
+
entrySource: this.getEntrySource(),
|
|
429
|
+
device: this.getDevice()
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
getEntrySource() {
|
|
433
|
+
return resolveMyTripsViewedEntrySourceFromQueryParams(this.route.snapshot.queryParams);
|
|
434
|
+
}
|
|
435
|
+
getDevice() {
|
|
436
|
+
let device = 'web';
|
|
437
|
+
if (this.route.snapshot.queryParams['mobileAuth']) {
|
|
438
|
+
device = this.route.snapshot.queryParams['device'] || 'mobile';
|
|
439
|
+
}
|
|
440
|
+
localStorage.setItem('deviceType', device);
|
|
441
|
+
return device;
|
|
442
|
+
}
|
|
443
|
+
handleError(error, message) {
|
|
444
|
+
// console.log(message, error);
|
|
445
|
+
const errorMessage = error?.error?.message || error?.message || message;
|
|
446
|
+
return throwError(() => new Error(errorMessage));
|
|
447
|
+
}
|
|
448
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
449
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, providedIn: 'root' }); }
|
|
450
|
+
}
|
|
451
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationEndpointsService, decorators: [{
|
|
452
|
+
type: Injectable,
|
|
453
|
+
args: [{
|
|
454
|
+
providedIn: 'root'
|
|
455
|
+
}]
|
|
456
|
+
}], ctorParameters: () => [] });
|
|
457
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LWJvb2tpbmctZGFzaGJvYXJkL3NyYy9saWIvY29tcG9uZW50cy9ob3RlbC1jYW5jZWwvc2VydmljZXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBTSxNQUFNLE1BQU0sQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0seUVBQXlFLENBQUM7QUFDcEgsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFRcEgsT0FBTyxFQUFFLDhDQUE4QyxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDckgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBK0RoRSxNQUFNLE9BQU8sNENBQTRDO0lBb0J2RDtRQW5CaUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNyQyxVQUFLLEdBQUcs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QyxXQUFXLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztZQUNsRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVLEVBQUUsT0FBZTtRQUM3QywrQkFBK0I7UUFDL0IsTUFBTSxZQUFZLEdBQ2hCLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxJQUFJLEtBQUssRUFBRSxPQUFPLElBQUksT0FBTyxDQUFDO1FBQ3JELE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDbkQsQ0FBQzsrR0EvZ0JVLDRDQUE0QzttSEFBNUMsNENBQTRDLGNBRjNDLE1BQU07OzRGQUVQLDRDQUE0QztrQkFIeEQsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QsIHNpZ25hbCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgY2F0Y2hFcnJvciwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwaVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgU0JEX0NPTkZJRyB9IGZyb20gJy4uLy4uLy4uL2NvbmZpZy9kYXNoYm9hcmQuY29uZmlnJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGVudmlyb25tZW50cyB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsgSG90ZWxNYW5hZ2VCb29raW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9ob3RlbC1tYW5hZ2UtYm9va2luZy9ob3RlbC1tYW5hZ2UtYm9va2luZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtIH0gZnJvbSAnLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1lbmRwb2ludHMuZW51bSc7XG5pbXBvcnQge1xuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb20sXG4gIElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlLFxuICBJUmVmdW5kRGV0YWlsc0FwaVJlc3BvbnNlLFxuICBJUmVmdW5kRGV0YWlsc0RhdGFcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pLWFsbWF0YXItaG90ZWwtYXV0by1jYW5jZWxsYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IHJlc29sdmVNeVRyaXBzVmlld2VkRW50cnlTb3VyY2VGcm9tUXVlcnlQYXJhbXMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvc2VydmljZXMvd2ViZW5nYWdlLXRyYWNraW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZWZ1bmREZXRhaWxzUmVxdWVzdCB7XG4gIGJvb2tpbmdJZDogc3RyaW5nO1xuICBwcm9kdWN0OiAnaG90ZWxzJztcbiAgcGFja2FnZUlkczogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVByb2Nlc3NDYW5jZWxsYXRpb25SZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUGF5bWVudE1ldGhvZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUHJvY2Vzc05vblJlZnVuZGFibGVDYW5jZWxsYXRpb25SZXF1ZXN0IHtcbiAgYm9va2luZ0lkOiBzdHJpbmc7XG4gIHByb2R1Y3Q6ICdob3RlbHMnO1xuICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogc3RyaW5nO1xuICBwcm9jZXNzZWRNb2RlOiAnYXV0byc7XG4gIGxhbmd1YWdlOiBzdHJpbmc7XG4gIGF0dGFjaG1lbnRVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZSB7XG4gIHN0YXR1czogbnVtYmVyO1xuICBkYXRhOiB7XG4gICAgZXJyb3I6IHN0cmluZztcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgYm9va2luZ0lkOiBudW1iZXI7XG4gICAgcHJlZmVycmVkUGF5bWVudE1ldGhvZDogc3RyaW5nO1xuICAgIGlzV2hhdHNBcHA/OiBib29sZWFuO1xuICAgIGNhbmNlbDoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHJlZnVuZDoge1xuICAgICAgc3RhdHVzOiBzdHJpbmc7XG4gICAgICBib29raW5nU3RhdHVzOiBzdHJpbmc7XG4gICAgICBhbW91bnQ6IG51bWJlcjtcbiAgICAgIGN1cnJlbmN5OiBzdHJpbmc7XG4gICAgICBicmVha2Rvd246IHtcbiAgICAgICAgd2FsbGV0OiBudW1iZXI7XG4gICAgICAgIG1va2FmYTogbnVtYmVyO1xuICAgICAgICBxaXRhZjogbnVtYmVyO1xuICAgICAgICBjYXJkOiBudW1iZXI7XG4gICAgICAgIHRhYmJ5OiBudW1iZXI7XG4gICAgICAgIHRhbWFyYTogbnVtYmVyO1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xuICBlcnJvcnM6IGFueTtcbn1cblxuaW50ZXJmYWNlIElFbnRyeVNvdXJjZURldmljZUJyYW5kIHtcbiAgZW50cnlTb3VyY2U6IHN0cmluZztcbiAgZGV2aWNlOiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcGkgPSBpbmplY3QoQXBpU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpQmFzZSA9IGluamVjdChTQkRfQ09ORklHKS5hcGlCYXNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBob3RlbE1hbmFnZUJvb2tpbmdTZXJ2aWNlID0gaW5qZWN0KFxuICAgIEhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2VcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9hbG1hdGFyQm9va2luZ0lkID0gc2lnbmFsPHN0cmluZz4oJycpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maXJtYXRpb25OdW1iZXIgPSBzaWduYWw8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzTnVzdWtGbG93ID0gc2lnbmFsPGJvb2xlYW4+KFxuICAgIGVudmlyb25tZW50cy5pc1RlbmFudCB8fCBmYWxzZVxuICApO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGVkUGFja2FnZUlkcyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGFsbWF0YXJCb29raW5nSWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9hbG1hdGFyQm9va2luZ0lkKCkpO1xuICByZWFkb25seSBjb25maXJtYXRpb25OdW1iZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLl9jb25maXJtYXRpb25OdW1iZXIoKSk7XG4gIHJlYWRvbmx5IGlzTnVzdWtGbG93ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5faXNOdXN1a0Zsb3coKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplQm9va2luZ0RhdGEoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUJvb2tpbmdEYXRhKCk6IHZvaWQge1xuICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZ1xuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChzZWxlY3RlZEhvdGVsQm9va2luZzogYW55KSA9PiB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTZWxlY3RlZCBIb3RlbCBCb29raW5nOicsIHNlbGVjdGVkSG90ZWxCb29raW5nKTtcbiAgICAgICAgaWYgKHNlbGVjdGVkSG90ZWxCb29raW5nKSB7XG4gICAgICAgICAgdGhpcy5fYWxtYXRhckJvb2tpbmdJZC5zZXQoc2VsZWN0ZWRIb3RlbEJvb2tpbmcuYm9va2luZ0lkIHx8ICcnKTtcbiAgICAgICAgICB0aGlzLl9jb25maXJtYXRpb25OdW1iZXIuc2V0KHNlbGVjdGVkSG90ZWxCb29raW5nLmJvb2tpbmdJZCB8fCAnJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1bGwgVVJMIG9mIGFuIGVuZHBvaW50IGZyb20gdGhlIGVudW0uIFRoZSBlbnVtIHBhdGhzIHN0YXJ0IHdpdGggYC9hcGkvYCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQgYGFwaUJhc2VgOyBhIGhvc3RcbiAgICogdGhhdCBzZXJ2ZXMgdGhlIEFQSSBzb21ld2hlcmUgZWxzZSAoSGVsaXg6IGl0cyBvd24gQVBJIG9yaWdpbikgc2V0cyBgYXBpQmFzZWAsIHNvIHRoYXQgcGFydCBpcyBzd2FwcGVkIGZvciBpdC5cbiAgICovXG4gIHJlc29sdmVFbmRwb2ludChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLmFwaUJhc2UucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cGF0aC5yZXBsYWNlKC9eXFwvP2FwaVxcLy8sICcnKX1gO1xuICB9XG5cbiAgZ2V0UmVmdW5kRGV0YWlscyhcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXSA9IFtdXG4gICk6IE9ic2VydmFibGU8SVJlZnVuZERldGFpbHNBcGlSZXNwb25zZT4ge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdGhpcy5yZXNvbHZlRW5kcG9pbnQoXG4gICAgICBBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uRW5kcG9pbnRzRW51bS5nZXRSZWZ1bmREZXRhaWxzXG4gICAgKTtcblxuICAgIGNvbnN0IHBheWxvYWQ6IElSZWZ1bmREZXRhaWxzUmVxdWVzdCA9IHtcbiAgICAgIGJvb2tpbmdJZDogYCR7XG4gICAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZy52YWx1ZT8uYm9va2luZ0lkIHx8XG4gICAgICAgICcnXG4gICAgICB9YCxcbiAgICAgIHByb2R1Y3Q6ICdob3RlbHMnLFxuICAgICAgcGFja2FnZUlkczogWy4uLm5ldyBTZXQocGFja2FnZUlkcyldIC8vIEVuc3VyZSB1bmlxdWUgcGFja2FnZSBJRHNcbiAgICB9O1xuXG4gICAgLy8gcmV0dXJuIG9mKHtcbiAgICAvLyAgIGRhdGE6IHtcbiAgICAvLyAgICAgYm9va2luZ0lkOiAxNDQzNjgsXG4gICAgLy8gICAgIGN1cnJlbmN5OiAnU0FSJyxcbiAgICAvLyAgICAgc3RhdHVzOiAnUGFydGlhbGx5IHJlZnVuZGVkJyxcbiAgICAvLyAgICAgbWVzc2FnZTogJ1JlZnVuZCBkZXRhaWxzIGNhbGN1bGF0ZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAvLyAgICAgZmxhZ3M6IHtcbiAgICAvLyAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgIHBhcnRpYWw6IGZhbHNlLFxuICAgIC8vICAgICAgIGdvbGRlbkdpZnQ6IGZhbHNlXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHNlbGVjdGlvbjoge1xuICAgIC8vICAgICAgIHBhY2thZ2VJZHM6IFsnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1J11cbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgdG90YWxzOiB7XG4gICAgLy8gICAgICAgcGFpZDogNjg2NixcbiAgICAvLyAgICAgICBiZWZvcmVDb3Vwb246IDY4NjUuNjEsXG4gICAgLy8gICAgICAgcm9vbXNCb29rZWQ6IDQsXG4gICAgLy8gICAgICAgY291cG9uOiAwLFxuICAgIC8vICAgICAgIGdpZnRzOiAwLFxuICAgIC8vICAgICAgIHNlcnZpY2VGZWU6IDAsXG4gICAgLy8gICAgICAgd2FsbGV0OiAwLFxuICAgIC8vICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgdGFiYnk6IDAsXG4gICAgLy8gICAgICAgdGFtYXJhOiAyMjAsXG4gICAgLy8gICAgICAgbW9rYWZhOiAwLFxuICAgIC8vICAgICAgIHFpdGFmOiAwLFxuICAgIC8vICAgICAgIHdhbGE6IDAsXG4gICAgLy8gICAgICAgaGFzc2FkOiAwLFxuICAgIC8vICAgICAgIGFuYjogMCxcbiAgICAvLyAgICAgICB5Z2c6IDBcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgcHJldmlvdXM6IFtcbiAgICAvLyAgICAgICB7XG4gICAgLy8gICAgICAgICBwYWNrYWdlSWQ6ICc1ZWIzM2Q1OS0yNjA3LTQwNTctOWQyNi00ZjdiZTc0NWY2N2YnLFxuICAgIC8vICAgICAgICAgcm9vbU5hbWU6ICdTdGFuZGFyZCBSb29tJyxcbiAgICAvLyAgICAgICAgIGNhbmNlbGxlZEF0OiAnMjAyNi0wOS0wMlQxMzo0Mjo1NC44NDhaJyxcbiAgICAvLyAgICAgICAgIGFtb3VudDogMjk5MC43OSxcbiAgICAvLyAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZGVkOiAyOTkwLjc5XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICBdLFxuICAgIC8vICAgICBjdXJyZW50OiB7XG4gICAgLy8gICAgICAgcm9vbXM6IFtcbiAgICAvLyAgICAgICAgIHtcbiAgICAvLyAgICAgICAgICAgcGFja2FnZUlkOiAnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1JyxcbiAgICAvLyAgICAgICAgICAgcm9vbUlkOiAnMDIyOWU2MjItYTg5YS00NjlkLWFkYjgtODYxNWRlYjk3MWNhJyxcbiAgICAvLyAgICAgICAgICAgcm9vbU5hbWU6ICdTY2VuZSBSb29tIFR3aW4nLFxuICAgIC8vICAgICAgICAgICBiYXNpczogJ1Jvb20gb25seSBSTycsXG4gICAgLy8gICAgICAgICAgIHBheDoge1xuICAgIC8vICAgICAgICAgICAgIGFkdWx0czogMixcbiAgICAvLyAgICAgICAgICAgICBjaGlsZHJlbjogMCxcbiAgICAvLyAgICAgICAgICAgICB0b3RhbDogMlxuICAgIC8vICAgICAgICAgICB9LFxuICAgIC8vICAgICAgICAgICBuaWdodHM6IDQsXG4gICAgLy8gICAgICAgICAgIGFtb3VudDogMTg4Ny42MSxcbiAgICAvLyAgICAgICAgICAgZmVlOiAwLFxuICAgIC8vICAgICAgICAgICBzZXJ2aWNlRmVlOiA1MCxcbiAgICAvLyAgICAgICAgICAgcmVmdW5kOiAxODg3LjYxLFxuICAgIC8vICAgICAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgICAgICByb3V0ZTogJ0FVVE8nXG4gICAgLy8gICAgICAgICB9LFxuICAgIC8vICAgICAgICAge1xuICAgIC8vICAgICAgICAgICBwYWNrYWdlSWQ6ICdmMDM4MzhiZC1lYThkLTRmZTUtYmZjOC1kZDMxYzliZGVlOTUnLFxuICAgIC8vICAgICAgICAgICByb29tSWQ6ICdiOGFlZDI2ZS1kOTFhLTQyMzQtYWUzNy05NGIyYzYyMzJkYmQnLFxuICAgIC8vICAgICAgICAgICByb29tTmFtZTogJ1NjZW5lIFJvb20gVHdpbicsXG4gICAgLy8gICAgICAgICAgIGJhc2lzOiAnUm9vbSBvbmx5IFJPJyxcbiAgICAvLyAgICAgICAgICAgcGF4OiB7XG4gICAgLy8gICAgICAgICAgICAgYWR1bHRzOiAyLFxuICAgIC8vICAgICAgICAgICAgIGNoaWxkcmVuOiAwLFxuICAgIC8vICAgICAgICAgICAgIHRvdGFsOiAyXG4gICAgLy8gICAgICAgICAgIH0sXG4gICAgLy8gICAgICAgICAgIG5pZ2h0czogNCxcbiAgICAvLyAgICAgICAgICAgYW1vdW50OiAxODg3LjYsXG4gICAgLy8gICAgICAgICAgIGZlZTogMCxcbiAgICAvLyAgICAgICAgICAgc2VydmljZUZlZTogNTAsXG4gICAgLy8gICAgICAgICAgIHJlZnVuZDogMTg4Ny42LFxuICAgIC8vICAgICAgICAgICByZWZ1bmRhYmxlOiB0cnVlLFxuICAgIC8vICAgICAgICAgICByb3V0ZTogJ0FVVE8nXG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgICAgXSxcbiAgICAvLyAgICAgICBhbW91bnQ6IDM3NzUuMjEsXG4gICAgLy8gICAgICAgZmVlOiAwLFxuICAgIC8vICAgICAgIHN1cmNoYXJnZTogMCxcbiAgICAvLyAgICAgICByZWZ1bmQ6IDM3NzUuMjFcbiAgICAvLyAgICAgfSxcbiAgICAvLyAgICAgcGF5b3V0OiB7XG4gICAgLy8gICAgICAgYWxyZWFkeVJlZnVuZGVkOiAyOTkwLjc5LFxuICAgIC8vICAgICAgIGN1cnJlbnQ6IDE2MDAsXG4gICAgLy8gICAgICAgYWZ0ZXJUaGlzOiA2NzY2LFxuICAgIC8vICAgICAgIGZlZXNUb3RhbDogMCxcbiAgICAvLyAgICAgICB3YWxsZXQ6IDAsXG4gICAgLy8gICAgICAgY2FyZDogMCxcbiAgICAvLyAgICAgICB0YWJieTogMCxcbiAgICAvLyAgICAgICB0YW1hcmE6IDIwMCxcbiAgICAvLyAgICAgICBhbXdhbDogMCxcbiAgICAvLyAgICAgICBtaXM6IDAsXG4gICAgLy8gICAgICAgYm5wbE1hbnVhbDogMCxcbiAgICAvLyAgICAgICBsb3lhbHR5VG9XYWxsZXQ6IDYwMCxcbiAgICAvLyAgICAgICBub3RlOiBudWxsXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHN1bW1hcmllczogW1xuICAgIC8vICAgICAgIHtcbiAgICAvLyAgICAgICAgIGNvZGU6ICdDQVJEJyxcbiAgICAvLyAgICAgICAgIGxhYmVsOiAnQ2FyZCcsXG4gICAgLy8gICAgICAgICBwYWlkOiA2ODY2LFxuICAgIC8vICAgICAgICAgcmVmdW5kOiAzNzc1LjIxLFxuICAgIC8vICAgICAgICAgcmVmdW5kYWJsZTogdHJ1ZSxcbiAgICAvLyAgICAgICAgIGdhdGV3YXk6ICdDSCdcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICAgIHtcbiAgICAvLyAgICAgICAgIGNvZGU6ICdTRVJWSUNFX0ZFRScsXG4gICAgLy8gICAgICAgICBsYWJlbDogJ1NlcnZpY2UgRmVlJyxcbiAgICAvLyAgICAgICAgIHBhaWQ6IDEwMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZDogMCxcbiAgICAvLyAgICAgICAgIHJlZnVuZGFibGU6IGZhbHNlXG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICBdLFxuICAgIC8vICAgICBnaWZ0czogW11cbiAgICAvLyAgIH0sXG4gICAgLy8gICBzdGF0dXM6IDIwMCxcbiAgICAvLyAgIGVycm9yczogbnVsbFxuICAgIC8vIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpXG4gICAgICAucG9zdDxJUmVmdW5kRGV0YWlsc0FwaVJlc3BvbnNlPih7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICAuLi5wYXlsb2FkXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsICdGYWlsZWQgdG8gZ2V0IHJlZnVuZCBkZXRhaWxzJylcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIG1hcEFwaVJlc3BvbnNlVG9Sb29tcyhcbiAgICBkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGFcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10ge1xuICAgIHJldHVybiB0aGlzLmdldEFsbFJvb21zKGRhdGEpO1xuICB9XG5cbiAgbWFwQXBpUmVzcG9uc2VUb1JlZnVuZFN1bW1hcnkoXG4gICAgZGF0YTogSVJlZnVuZERldGFpbHNEYXRhXG4gICk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUGFpZDogZGF0YS50b3RhbHM/LnBhaWQgfHwgMCxcbiAgICAgIHRvdGFsUmVmdW5kOiBkYXRhLmN1cnJlbnQ/LnJlZnVuZCB8fCBkYXRhLmN1cnJlbnQ/LnJlZnVuZCB8fCAwLFxuICAgICAgdG90YWxGZWVzOiBkYXRhLmN1cnJlbnQ/LmZlZSB8fCAwLFxuICAgICAgcm9vbXM6IHRoaXMuZ2V0QWxsUm9vbXMoZGF0YSksXG4gICAgICBwYWNrYWdlczogdGhpcy5nZXRBbGxQYWNrYWdlcyhkYXRhKSxcbiAgICAgIHN1bW1hcmllczogZGF0YS5zdW1tYXJpZXMsXG4gICAgICBwYXlvdXQ6IGRhdGEucGF5b3V0LFxuICAgICAgdG90YWxzOiBkYXRhLnRvdGFscyxcbiAgICAgIC8vIEFkZGl0aW9uYWwgYnJlYWtkb3duIGZpZWxkc1xuICAgICAgY291cG9uOiBkYXRhLnRvdGFscz8uY291cG9uIHx8IDAsXG4gICAgICBnaWZ0c1RvdGFsOiBkYXRhLnRvdGFscz8uZ2lmdHMgfHwgMCxcbiAgICAgIGdpZnRzRGV0YWlsczogZGF0YS5naWZ0cyB8fCBbXSxcbiAgICAgIHNlcnZpY2VGZWU6IGRhdGEudG90YWxzPy5zZXJ2aWNlRmVlIHx8IDAsXG4gICAgICBzdXJjaGFyZ2U6IGRhdGEuY3VycmVudD8uc3VyY2hhcmdlIHx8IDAsXG4gICAgICBnb2xkZW5HaWZ0OiBkYXRhLmZsYWdzPy5nb2xkZW5HaWZ0IHx8IGZhbHNlLFxuICAgICAgcHJldmlvdXNSb29tczogZGF0YS5wcmV2aW91cyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXRBbGxQYWNrYWdlcyhcbiAgICBkYXRhOiBJUmVmdW5kRGV0YWlsc0RhdGFcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlW10ge1xuICAgIGNvbnN0IHBhY2thZ2VzOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFBhY2thZ2VbXSA9IFtdO1xuICAgIGNvbnN0IHBhY2thZ2VNYXAgPSBuZXcgTWFwPFxuICAgICAgc3RyaW5nLFxuICAgICAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRQYWNrYWdlXG4gICAgPigpO1xuXG4gICAgLy8gUHJvY2VzcyBwcmV2aW91cyAoY2FuY2VsbGVkKSByb29tcyAtIGdyb3VwIGJ5IHBhY2thZ2VJZFxuICAgIGlmIChkYXRhLnByZXZpb3VzPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEucHJldmlvdXMuZm9yRWFjaCgocm9vbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGtnID0gcGFja2FnZU1hcC5nZXQocm9vbS5wYWNrYWdlSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQa2cpIHtcbiAgICAgICAgICBleGlzdGluZ1BrZy5yb29tcy5wdXNoKHtcbiAgICAgICAgICAgIHJvb21JZDogcm9vbS5yb29tSWQgfHwgcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0c1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLmFtb3VudCArPSByb29tLmFtb3VudCB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLmZlZSArPSByb29tLmZlZSB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJlZnVuZCArPSByb29tLnJlZnVuZGVkIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFja2FnZU1hcC5zZXQocm9vbS5wYWNrYWdlSWQsIHtcbiAgICAgICAgICAgIHBhY2thZ2VJZDogcm9vbS5wYWNrYWdlSWQsXG4gICAgICAgICAgICBwYWNrYWdlTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgIHJvb21zOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByb29tSWQ6IHJvb20ucm9vbUlkIHx8IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgICAgIGJhc2lzOiByb29tLmJhc2lzLFxuICAgICAgICAgICAgICAgIG5pZ2h0czogcm9vbS5uaWdodHNcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFtb3VudDogcm9vbS5hbW91bnQgfHwgMCxcbiAgICAgICAgICAgIGZlZTogcm9vbS5mZWUgfHwgMCxcbiAgICAgICAgICAgIHNlcnZpY2VGZWU6IDAsXG4gICAgICAgICAgICByZWZ1bmQ6IHJvb20ucmVmdW5kZWQgfHwgMCxcbiAgICAgICAgICAgIHJlZnVuZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiB0cnVlLFxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogcm9vbS5jYW5jZWxsZWRBdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGN1cnJlbnQgcm9vbXMgLSBncm91cCBieSBwYWNrYWdlSWRcbiAgICBpZiAoZGF0YS5jdXJyZW50Py5yb29tcz8ubGVuZ3RoKSB7XG4gICAgICBkYXRhLmN1cnJlbnQucm9vbXMuZm9yRWFjaCgocm9vbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nUGtnID0gcGFja2FnZU1hcC5nZXQocm9vbS5wYWNrYWdlSWQpO1xuICAgICAgICBpZiAoZXhpc3RpbmdQa2cgJiYgIWV4aXN0aW5nUGtnLmNhbmNlbGxlZEJlZm9yZSkge1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJvb21zLnB1c2goe1xuICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgICAgYmFzaXM6IHJvb20uYmFzaXMsXG4gICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzLFxuICAgICAgICAgICAgcGF4OiByb29tLnBheCxcbiAgICAgICAgICAgIGFkdWx0czogcm9vbS5wYXg/LmFkdWx0cyxcbiAgICAgICAgICAgIGNoaWxkcmVuOiByb29tLnBheD8uY2hpbGRyZW5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBleGlzdGluZ1BrZy5hbW91bnQgKz0gcm9vbS5hbW91bnQgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5mZWUgKz0gcm9vbS5mZWUgfHwgMDtcbiAgICAgICAgICBleGlzdGluZ1BrZy5zZXJ2aWNlRmVlICs9IHJvb20uc2VydmljZUZlZSB8fCAwO1xuICAgICAgICAgIGV4aXN0aW5nUGtnLnJlZnVuZCArPSByb29tLnJlZnVuZCB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhY2thZ2VNYXAuc2V0KHJvb20ucGFja2FnZUlkLCB7XG4gICAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgICAgcGFja2FnZU5hbWU6IHJvb20ucm9vbU5hbWUsXG4gICAgICAgICAgICByb29tczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcm9vbUlkOiByb29tLnJvb21JZCB8fCByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICAgICAgICBiYXNpczogcm9vbS5iYXNpcyxcbiAgICAgICAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzLFxuICAgICAgICAgICAgICAgIHBheDogcm9vbS5wYXgsXG4gICAgICAgICAgICAgICAgYWR1bHRzOiByb29tLnBheD8uYWR1bHRzLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiByb29tLnBheD8uY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGFtb3VudDogcm9vbS5hbW91bnQgfHwgMCxcbiAgICAgICAgICAgIGZlZTogcm9vbS5mZWUgfHwgMCxcbiAgICAgICAgICAgIHNlcnZpY2VGZWU6IHJvb20uc2VydmljZUZlZSB8fCAwLFxuICAgICAgICAgICAgcmVmdW5kOiByb29tLnJlZnVuZCB8fCAwLFxuICAgICAgICAgICAgcmVmdW5kYWJsZTogcm9vbS5yZWZ1bmRhYmxlLFxuICAgICAgICAgICAgcm91dGU6IHJvb20ucm91dGUsXG4gICAgICAgICAgICBjYW5jZWxsZWRCZWZvcmU6IGZhbHNlLFxuICAgICAgICAgICAgY2FuY2VsbGF0aW9uRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHBhY2thZ2VNYXAuZm9yRWFjaCgocGtnKSA9PiBwYWNrYWdlcy5wdXNoKHBrZykpO1xuICAgIHJldHVybiBwYWNrYWdlcztcbiAgfVxuXG4gIGdldEFsbFJvb21zKGRhdGE6IElSZWZ1bmREZXRhaWxzRGF0YSk6IElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdIHtcbiAgICBjb25zdCBhbGxSb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10gPSBbXTtcblxuICAgIGlmIChkYXRhLnByZXZpb3VzPy5sZW5ndGgpIHtcbiAgICAgIGRhdGEucHJldmlvdXMuZm9yRWFjaCgocm9vbSkgPT4ge1xuICAgICAgICBhbGxSb29tcy5wdXNoKHtcbiAgICAgICAgICBwYWNrYWdlSWQ6IHJvb20ucGFja2FnZUlkLFxuICAgICAgICAgIHJvb21JZDogcm9vbT8ucm9vbUlkLFxuICAgICAgICAgIHJvb21OYW1lOiByb29tLnJvb21OYW1lLFxuICAgICAgICAgIGlzUmVmdW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgY2FuY2VsbGVkQmVmb3JlOiB0cnVlLFxuICAgICAgICAgIHJvb21BbW91bnQ6IHJvb20uYW1vdW50LFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkZlZTogcm9vbS5mZWUsXG4gICAgICAgICAgcmVmdW5kQW1vdW50OiByb29tLnJlZnVuZGVkLFxuICAgICAgICAgIGN1cnJlbnRDYW5jZWxsYXRpb246IGZhbHNlLFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IHJvb20uY2FuY2VsbGVkQXQsXG4gICAgICAgICAgbmlnaHRzOiByb29tLm5pZ2h0cyA/PyAxXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEuY3VycmVudD8ucm9vbXM/Lmxlbmd0aCkge1xuICAgICAgZGF0YS5jdXJyZW50LnJvb21zLmZvckVhY2goKHJvb20pID0+IHtcbiAgICAgICAgYWxsUm9vbXMucHVzaCh7XG4gICAgICAgICAgcGFja2FnZUlkOiByb29tLnBhY2thZ2VJZCxcbiAgICAgICAgICByb29tSWQ6IHJvb20/LnJvb21JZCxcbiAgICAgICAgICByb29tTmFtZTogcm9vbS5yb29tTmFtZSxcbiAgICAgICAgICBpc1JlZnVuZGFibGU6IHJvb20ucmVmdW5kYWJsZSxcbiAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICByb29tQW1vdW50OiByb29tLmFtb3VudCxcbiAgICAgICAgICBjYW5jZWxsYXRpb25GZWU6IHJvb20uZmVlLFxuICAgICAgICAgIGNhbmNlbGxlZEJlZm9yZTogZmFsc2UsXG4gICAgICAgICAgcmVmdW5kQW1vdW50OiByb29tLnJlZnVuZCxcbiAgICAgICAgICByb3V0ZTogcm9vbS5yb3V0ZSxcbiAgICAgICAgICBjdXJyZW50Q2FuY2VsbGF0aW9uOiB0cnVlLFxuICAgICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IGAke25ldyBEYXRlKCl9YCxcbiAgICAgICAgICBuaWdodHM6IHJvb20ubmlnaHRzID8/IDFcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWxsUm9vbXM7XG4gIH1cblxuICBwcm9jZXNzQXV0b0NhbmNlbGxhdGlvbihcbiAgICBwYWNrYWdlSWRzOiBzdHJpbmdbXSxcbiAgICByZWZ1bmRPcHRpb24gPSAnb3JpZ2luYWxQYXltZW50TWV0aG9kJ1xuICApOiBPYnNlcnZhYmxlPElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPiB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSB0aGlzLnJlc29sdmVFbmRwb2ludChcbiAgICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25FbmRwb2ludHNFbnVtLnByb2Nlc3NBdXRvQ2FuY2VsbGF0aW9uXG4gICAgKTtcblxuICAgIGNvbnN0IHVuaXF1ZVBhY2thZ2VJZHMgPSBbLi4ubmV3IFNldChwYWNrYWdlSWRzKV07IC8vIEVuc3VyZSB1bmlxdWUgcGFja2FnZSBJRHNcbiAgICBjb25zdCBwYXlsb2FkOiBJUHJvY2Vzc0NhbmNlbGxhdGlvblJlcXVlc3QgPSB7XG4gICAgICBib29raW5nSWQ6IGAke1xuICAgICAgICB0aGlzLmhvdGVsTWFuYWdlQm9va2luZ1NlcnZpY2Uuc2VsZWN0ZWRIb3RlbEJvb2tpbmcudmFsdWU/LmJvb2tpbmdJZCB8fFxuICAgICAgICAnJ1xuICAgICAgfWAsXG4gICAgICBwcm9kdWN0OiAnaG90ZWxzJyxcbiAgICAgIHBhY2thZ2VJZHM6IHVuaXF1ZVBhY2thZ2VJZHMsXG4gICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiByZWZ1bmRPcHRpb25cbiAgICB9O1xuXG4gICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldCh1bmlxdWVQYWNrYWdlSWRzKTtcblxuICAgIC8vIHJldHVybiBvZih7XG4gICAgLy8gICBkYXRhOiB7XG4gICAgLy8gICAgIGVycm9yOiAnMScsXG4gICAgLy8gICAgIG1lc3NhZ2U6XG4gICAgLy8gICAgICAgJ0NhbmNlbCByZXF1ZXN0ZWQg4oCUIHN1cHBsaWVyIGNhbmNlbGxhdGlvbiBmYWlsZWQ7IHRpY2tldCBjcmVhdGVkJyxcbiAgICAvLyAgICAgYm9va2luZ0lkOiAxNDQzNjgsXG4gICAgLy8gICAgIHByZWZlcnJlZFBheW1lbnRNZXRob2Q6ICd3YWxsZXQnLFxuICAgIC8vICAgICBjYW5jZWw6IHtcbiAgICAvLyAgICAgICBzdGF0dXM6ICdmYWlsZWQnLFxuICAgIC8vICAgICAgIHBhY2thZ2VJZHM6IFsnZjAzODM4YmQtZWE4ZC00ZmU1LWJmYzgtZGQzMWM5YmRlZTk1J10sXG4gICAgLy8gICAgIH0sXG4gICAgLy8gICAgIHJlZnVuZDoge1xuICAgIC8vICAgICAgIHN0YXR1czogJ3NraXBwZWQnLFxuICAgIC8vICAgICAgIGJvb2tpbmdTdGF0dXM6ICdDYW5jZWxsZWQnLFxuICAgIC8vICAgICAgIGFtb3VudDogMTA1MCxcbiAgICAvLyAgICAgICBjdXJyZW5jeTogJ1NBUicsXG4gICAgLy8gICAgICAgYnJlYWtkb3duOiB7XG4gICAgLy8gICAgICAgICB3YWxsZXQ6IDc1MCxcbiAgICAvLyAgICAgICAgIG1va2FmYTogMjAwLFxuICAgIC8vICAgICAgICAgcWl0YWY6IDEwMCxcbiAgICAvLyAgICAgICAgIGNhcmQ6IDAsXG4gICAgLy8gICAgICAgICB0YWJieTogMCxcbiAgICAvLyAgICAgICAgIHRhbWFyYTogMCxcbiAgICAvLyAgICAgICB9LFxuICAgIC8vICAgICB9LFxuICAgIC8vICAgfSxcbiAgICAvLyAgIHN0YXR1czogMjAwLFxuICAgIC8vICAgZXJyb3JzOiBudWxsLFxuICAgIC8vIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYXBpXG4gICAgICAucG9zdDxJQXV0b0NhbmNlbGxhdGlvblByb2Nlc3NSZXNwb25zZT4oe1xuICAgICAgICBlbmRwb2ludCxcbiAgICAgICAgLi4ucGF5bG9hZFxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldChbXSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+XG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgJ0ZhaWxlZCB0byBwcm9jZXNzIGNhbmNlbGxhdGlvbicpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBwcm9jZXNzTm9uUmVmdW5kYWJsZUNhbmNlbGxhdGlvbihcbiAgICBwYWNrYWdlSWQ6IHN0cmluZyxcbiAgICBhdHRhY2htZW50VXJsOiBzdHJpbmcsXG4gICAgbGFuZ3VhZ2UgPSAnZW4nXG4gICk6IE9ic2VydmFibGU8SUF1dG9DYW5jZWxsYXRpb25Qcm9jZXNzUmVzcG9uc2U+IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRoaXMucmVzb2x2ZUVuZHBvaW50KFxuICAgICAgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkVuZHBvaW50c0VudW0ucHJvY2Vzc0F1dG9DYW5jZWxsYXRpb25cbiAgICApO1xuXG4gICAgY29uc3QgcGF5bG9hZDogSVByb2Nlc3NOb25SZWZ1bmRhYmxlQ2FuY2VsbGF0aW9uUmVxdWVzdCA9IHtcbiAgICAgIGJvb2tpbmdJZDogYCR7XG4gICAgICAgIHRoaXMuaG90ZWxNYW5hZ2VCb29raW5nU2VydmljZS5zZWxlY3RlZEhvdGVsQm9va2luZy52YWx1ZT8uYm9va2luZ0lkIHx8XG4gICAgICAgICcnXG4gICAgICB9YCxcbiAgICAgIHByb2R1Y3Q6ICdob3RlbHMnLFxuICAgICAgcGFja2FnZUlkczogW3BhY2thZ2VJZF0sXG4gICAgICBwcmVmZXJyZWRQYXltZW50TWV0aG9kOiAnb3JpZ2luYWxQYXltZW50TWV0aG9kJyxcbiAgICAgIHByb2Nlc3NlZE1vZGU6ICdhdXRvJyxcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgYXR0YWNobWVudFVybFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5hcGlcbiAgICAgIC5wb3N0PElBdXRvQ2FuY2VsbGF0aW9uUHJvY2Vzc1Jlc3BvbnNlPih7XG4gICAgICAgIGVuZHBvaW50LFxuICAgICAgICAuLi5wYXlsb2FkXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PlxuICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICdGYWlsZWQgdG8gcHJvY2VzcyBub24tcmVmdW5kYWJsZSBjYW5jZWxsYXRpb24nXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgY2FsY3VsYXRlTG9jYWxSZWZ1bmRTdW1tYXJ5KFxuICAgIHJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXVxuICApOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJlZnVuZFN1bW1hcnkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm9vbXMgPSByb29tcy5maWx0ZXIoKHJvb20pID0+IHJvb20uaXNTZWxlY3RlZCk7XG4gICAgY29uc3QgdG90YWxQYWlkID0gcm9vbXMucmVkdWNlKChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucm9vbUFtb3VudCwgMCk7XG4gICAgY29uc3QgdG90YWxSZWZ1bmQgPSBzZWxlY3RlZFJvb21zLnJlZHVjZShcbiAgICAgIChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucmVmdW5kQW1vdW50LFxuICAgICAgMFxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdG90YWxQYWlkLFxuICAgICAgdG90YWxSZWZ1bmQsXG4gICAgICByb29tczogc2VsZWN0ZWRSb29tcy5tYXAoKHJvb20pID0+ICh7XG4gICAgICAgIC4uLnJvb20sXG4gICAgICAgIGN1cnJlbnRDYW5jZWxsYXRpb246IHRydWUsXG4gICAgICAgIGNhbmNlbGxhdGlvbkRhdGU6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSkpXG4gICAgfTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkUGFja2FnZUlkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkUGFja2FnZUlkcygpO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZFBhY2thZ2VJZHMoKTogdm9pZCB7XG4gICAgdGhpcy5fc2VsZWN0ZWRQYWNrYWdlSWRzLnNldChbXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEVudHJ5U291cmNlRGV2aWNlQnJhbmQoKTogSUVudHJ5U291cmNlRGV2aWNlQnJhbmQge1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeVNvdXJjZTogdGhpcy5nZXRFbnRyeVNvdXJjZSgpLFxuICAgICAgZGV2aWNlOiB0aGlzLmdldERldmljZSgpXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW50cnlTb3VyY2UoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcmVzb2x2ZU15VHJpcHNWaWV3ZWRFbnRyeVNvdXJjZUZyb21RdWVyeVBhcmFtcyhcbiAgICAgIHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZXZpY2UoKTogc3RyaW5nIHtcbiAgICBsZXQgZGV2aWNlID0gJ3dlYic7XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNbJ21vYmlsZUF1dGgnXSkge1xuICAgICAgZGV2aWNlID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZGV2aWNlJ10gfHwgJ21vYmlsZSc7XG4gICAgfVxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdkZXZpY2VUeXBlJywgZGV2aWNlKTtcbiAgICByZXR1cm4gZGV2aWNlO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBtZXNzYWdlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPG5ldmVyPiB7XG4gICAgLy8gY29uc29sZS5sb2cobWVzc2FnZSwgZXJyb3IpO1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XG4gICAgICBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3I/Lm1lc3NhZ2UgfHwgbWVzc2FnZTtcbiAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gIH1cbn1cbiJdfQ==
|
package/esm2022/lib/components/hotel-cancel/services/almatar-hotel-auto-cancellation.service.mjs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Injectable, signal, computed } from '@angular/core';
|
|
2
|
+
import { AlmatarHotelAutoCancellationStepEnum } from '../enums/almatar-hotel-auto-cancellation-step.enum';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class AlmatarHotelAutoCancellationService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.currentStep = signal(AlmatarHotelAutoCancellationStepEnum.selectRooms);
|
|
7
|
+
this.selectedRooms = signal([]);
|
|
8
|
+
this.hotelInfo = signal(null);
|
|
9
|
+
this.refundSummary = signal(null);
|
|
10
|
+
this.selectedRoomsCount = computed(() => this.selectedRooms().filter((room) => room.isSelected).length);
|
|
11
|
+
this.hasSelectedRooms = computed(() => this.selectedRoomsCount() > 0);
|
|
12
|
+
this.totalRefundAmount = computed(() => {
|
|
13
|
+
const summary = this.refundSummary();
|
|
14
|
+
return summary?.totalRefund ?? 0;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
setCurrentStep(step) {
|
|
18
|
+
this.currentStep.set(step);
|
|
19
|
+
}
|
|
20
|
+
setSelectedRooms(rooms) {
|
|
21
|
+
this.selectedRooms.set(rooms);
|
|
22
|
+
}
|
|
23
|
+
setHotelInfo(info) {
|
|
24
|
+
this.hotelInfo.set(info);
|
|
25
|
+
}
|
|
26
|
+
setRefundSummary(summary) {
|
|
27
|
+
this.refundSummary.set(summary);
|
|
28
|
+
}
|
|
29
|
+
toggleRoomSelection(packageId) {
|
|
30
|
+
this.selectedRooms.update((rooms) => rooms.map((room) => room.packageId === packageId
|
|
31
|
+
? { ...room, isSelected: !room.isSelected }
|
|
32
|
+
: room));
|
|
33
|
+
}
|
|
34
|
+
calculateRefundSummary(rooms, totalPaid) {
|
|
35
|
+
const selected = rooms.filter((room) => room.isSelected);
|
|
36
|
+
const totalRefund = selected.reduce((sum, room) => sum + room.refundAmount, 0);
|
|
37
|
+
return {
|
|
38
|
+
totalPaid,
|
|
39
|
+
totalRefund,
|
|
40
|
+
rooms: selected,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
reset() {
|
|
44
|
+
this.currentStep.set(AlmatarHotelAutoCancellationStepEnum.selectRooms);
|
|
45
|
+
this.selectedRooms.set([]);
|
|
46
|
+
this.hotelInfo.set(null);
|
|
47
|
+
this.refundSummary.set(null);
|
|
48
|
+
}
|
|
49
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
50
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService }); }
|
|
51
|
+
}
|
|
52
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlmatarHotelAutoCancellationService, decorators: [{
|
|
53
|
+
type: Injectable
|
|
54
|
+
}] });
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYm9va2luZy1kYXNoYm9hcmQvc3JjL2xpYi9jb21wb25lbnRzL2hvdGVsLWNhbmNlbC9zZXJ2aWNlcy9hbG1hdGFyLWhvdGVsLWF1dG8tY2FuY2VsbGF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztBQVExRyxNQUFNLE9BQU8sbUNBQW1DO0lBRGhEO1FBRVcsZ0JBQVcsR0FBRyxNQUFNLENBQzNCLG9DQUFvQyxDQUFDLFdBQVcsQ0FDakQsQ0FBQztRQUVPLGtCQUFhLEdBQUcsTUFBTSxDQUFzQyxFQUFFLENBQUMsQ0FBQztRQUNoRSxjQUFTLEdBQUcsTUFBTSxDQUN6QixJQUFJLENBQ0wsQ0FBQztRQUVPLGtCQUFhLEdBQ3BCLE1BQU0sQ0FBb0QsSUFBSSxDQUFDLENBQUM7UUFFekQsdUJBQWtCLEdBQUcsUUFBUSxDQUNwQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUNwRSxDQUFDO1FBRU8scUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRWpFLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDekMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxFQUFFLFdBQVcsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7S0FtREo7SUFqREMsY0FBYyxDQUFDLElBQTBDO1FBQ3ZELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUEwQztRQUN6RCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsWUFBWSxDQUFDLElBQTRDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFtRDtRQUNsRSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0MsQ0FBQyxDQUFDLElBQUksQ0FDVCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsc0JBQXNCLENBQ3BCLEtBQTBDLEVBQzFDLFNBQWlCO1FBRWpCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6RCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUN0QyxDQUFDLENBQ0YsQ0FBQztRQUVGLE9BQU87WUFDTCxTQUFTO1lBQ1QsV0FBVztZQUNYLEtBQUssRUFBRSxRQUFRO1NBQ2hCLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7K0dBeEVVLG1DQUFtQzttSEFBbkMsbUNBQW1DOzs0RkFBbkMsbUNBQW1DO2tCQUQvQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgc2lnbmFsLCBjb21wdXRlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblN0ZXBFbnVtIH0gZnJvbSAnLi4vZW51bXMvYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi1zdGVwLmVudW0nO1xuaW1wb3J0IHtcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tLFxuICBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyxcbiAgSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5LFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2ktYWxtYXRhci1ob3RlbC1hdXRvLWNhbmNlbGxhdGlvbi5pbnRlcmZhY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblNlcnZpY2Uge1xuICByZWFkb25seSBjdXJyZW50U3RlcCA9IHNpZ25hbDxBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0+KFxuICAgIEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bS5zZWxlY3RSb29tcyxcbiAgKTtcblxuICByZWFkb25seSBzZWxlY3RlZFJvb21zID0gc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUm9vbVtdPihbXSk7XG4gIHJlYWRvbmx5IGhvdGVsSW5mbyA9IHNpZ25hbDxJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyB8IG51bGw+KFxuICAgIG51bGwsXG4gICk7XG5cbiAgcmVhZG9ubHkgcmVmdW5kU3VtbWFyeSA9XG4gICAgc2lnbmFsPElBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uUmVmdW5kU3VtbWFyeSB8IG51bGw+KG51bGwpO1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkUm9vbXNDb3VudCA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VsZWN0ZWRSb29tcygpLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKS5sZW5ndGgsXG4gICk7XG5cbiAgcmVhZG9ubHkgaGFzU2VsZWN0ZWRSb29tcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc2VsZWN0ZWRSb29tc0NvdW50KCkgPiAwKTtcblxuICByZWFkb25seSB0b3RhbFJlZnVuZEFtb3VudCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5yZWZ1bmRTdW1tYXJ5KCk7XG4gICAgcmV0dXJuIHN1bW1hcnk/LnRvdGFsUmVmdW5kID8/IDA7XG4gIH0pO1xuXG4gIHNldEN1cnJlbnRTdGVwKHN0ZXA6IEFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25TdGVwRW51bSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFN0ZXAuc2V0KHN0ZXApO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb29tcyhyb29tczogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25Sb29tW10pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMuc2V0KHJvb21zKTtcbiAgfVxuXG4gIHNldEhvdGVsSW5mbyhpbmZvOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvbkhvdGVsSW5mbyk6IHZvaWQge1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChpbmZvKTtcbiAgfVxuXG4gIHNldFJlZnVuZFN1bW1hcnkoc3VtbWFyeTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5KTogdm9pZCB7XG4gICAgdGhpcy5yZWZ1bmRTdW1tYXJ5LnNldChzdW1tYXJ5KTtcbiAgfVxuXG4gIHRvZ2dsZVJvb21TZWxlY3Rpb24ocGFja2FnZUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUm9vbXMudXBkYXRlKChyb29tcykgPT5cbiAgICAgIHJvb21zLm1hcCgocm9vbSkgPT5cbiAgICAgICAgcm9vbS5wYWNrYWdlSWQgPT09IHBhY2thZ2VJZFxuICAgICAgICAgID8geyAuLi5yb29tLCBpc1NlbGVjdGVkOiAhcm9vbS5pc1NlbGVjdGVkIH1cbiAgICAgICAgICA6IHJvb20sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBjYWxjdWxhdGVSZWZ1bmRTdW1tYXJ5KFxuICAgIHJvb21zOiBJQWxtYXRhckhvdGVsQXV0b0NhbmNlbGxhdGlvblJvb21bXSxcbiAgICB0b3RhbFBhaWQ6IG51bWJlcixcbiAgKTogSUFsbWF0YXJIb3RlbEF1dG9DYW5jZWxsYXRpb25SZWZ1bmRTdW1tYXJ5IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHJvb21zLmZpbHRlcigocm9vbSkgPT4gcm9vbS5pc1NlbGVjdGVkKTtcbiAgICBjb25zdCB0b3RhbFJlZnVuZCA9IHNlbGVjdGVkLnJlZHVjZShcbiAgICAgIChzdW0sIHJvb20pID0+IHN1bSArIHJvb20ucmVmdW5kQW1vdW50LFxuICAgICAgMCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRvdGFsUGFpZCxcbiAgICAgIHRvdGFsUmVmdW5kLFxuICAgICAgcm9vbXM6IHNlbGVjdGVkLFxuICAgIH07XG4gIH1cblxuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRTdGVwLnNldChBbG1hdGFySG90ZWxBdXRvQ2FuY2VsbGF0aW9uU3RlcEVudW0uc2VsZWN0Um9vbXMpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb29tcy5zZXQoW10pO1xuICAgIHRoaXMuaG90ZWxJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnJlZnVuZFN1bW1hcnkuc2V0KG51bGwpO1xuICB9XG59XG4iXX0=
|