@sabstravtech/obtservices 0.0.0
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/.editorconfig +13 -0
- package/.gitmodules +0 -0
- package/.vscode/settings.json +4 -0
- package/README.md +27 -0
- package/angular.json +45 -0
- package/audit.config.json +6 -0
- package/codegen.yml +18 -0
- package/ng-package.json +7 -0
- package/package.json +84 -0
- package/projects/obtservices/README.md +24 -0
- package/projects/obtservices/angular/package.json +3 -0
- package/projects/obtservices/angular/src/classes.ts +3 -0
- package/projects/obtservices/angular/src/components/basket-panel.ts +139 -0
- package/projects/obtservices/angular/src/components/with-component.ts +40 -0
- package/projects/obtservices/angular/src/components.ts +2 -0
- package/projects/obtservices/angular/src/data.ts +5 -0
- package/projects/obtservices/angular/src/fetchers.ts +32 -0
- package/projects/obtservices/angular/src/lib/vendor/classes/environment.ts +5 -0
- package/projects/obtservices/angular/src/lib/vendor/classes/event-messenager.ts +11 -0
- package/projects/obtservices/angular/src/lib/vendor/classes/helpers.ts +87 -0
- package/projects/obtservices/angular/src/lib/vendor/data/airports.data.json +5508 -0
- package/projects/obtservices/angular/src/lib/vendor/data/animations.ts +38 -0
- package/projects/obtservices/angular/src/lib/vendor/data/booking-expected-responses.json +100 -0
- package/projects/obtservices/angular/src/lib/vendor/data/cities.data.json +31499 -0
- package/projects/obtservices/angular/src/lib/vendor/data/countries.json +1212 -0
- package/projects/obtservices/angular/src/lib/vendor/data/flight-booking.data.json +136 -0
- package/projects/obtservices/angular/src/lib/vendor/data/postcodes1.json +194 -0
- package/projects/obtservices/angular/src/lib/vendor/data/rail_addresses.json +2524 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/basket-fetcher.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +15 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +17 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/flight-quote.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +18 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +17 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/irl-quote-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/parking-quote-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/rail-quote-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airlines-fetcher.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airports-fetcher.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-cities.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-depots.fetcher.ts +18 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-addresses.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-fetcher.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-message.fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-products-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +16 -0
- package/projects/obtservices/angular/src/lib/vendor/services/enterprise-basket.service.ts +133 -0
- package/projects/obtservices/angular/src/lib/vendor/services/hotel-avallibility.service.ts +19 -0
- package/projects/obtservices/angular/src/lib/vendor/services/http-call.service.ts +252 -0
- package/projects/obtservices/angular/src/lib/vendor/services/logon.service.ts +40 -0
- package/projects/obtservices/angular/src/lib/vendor/services/modal-opener.service.ts +9 -0
- package/projects/obtservices/angular/src/lib/vendor/services/my-bookings.service.ts +21 -0
- package/projects/obtservices/angular/src/lib/vendor/services/route-happy.service.ts +11 -0
- package/projects/obtservices/angular/src/lib/vendor/services/search.service.ts +213 -0
- package/projects/obtservices/angular/src/lib/vendor/services/storage.service.ts +82 -0
- package/projects/obtservices/angular/src/lib/vendor/services/user.service.ts +36 -0
- package/projects/obtservices/angular/src/lib/vendor/services/webtoken.service.ts +62 -0
- package/projects/obtservices/angular/src/lib/vendor/testers/postcode-validate.tester.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/testers/validate-mi-free-value.tester.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/types/graphql.angular.types.ts +11081 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/accept-new-price.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/add-item-to-basket.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/addUserToBasketItem.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/book-basket-updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/create-basket-updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/move-basket-item-to-basket.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-basket-updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-recent-search.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/remove-user-address.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/revalidate-basket-updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/save-recent-search.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/save-user-address.updater.ts +11 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-group.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +15 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/set-payment-option.updater.ts +15 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-notes-updater.ts +14 -0
- package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-title-updater.ts +14 -0
- package/projects/obtservices/angular/src/obtservices.module.ts +131 -0
- package/projects/obtservices/angular/src/public_api.ts +8 -0
- package/projects/obtservices/angular/src/services.ts +11 -0
- package/projects/obtservices/angular/src/testers.ts +2 -0
- package/projects/obtservices/angular/src/types.ts +1 -0
- package/projects/obtservices/angular/src/updaters.ts +13 -0
- package/projects/obtservices/base/package.json +3 -0
- package/projects/obtservices/base/src/classes.ts +27 -0
- package/projects/obtservices/base/src/custom.d.ts +3 -0
- package/projects/obtservices/base/src/fetchers.ts +36 -0
- package/projects/obtservices/base/src/interfaces.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts +126 -0
- package/projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts +40 -0
- package/projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts +68 -0
- package/projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts +343 -0
- package/projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts +907 -0
- package/projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts +1597 -0
- package/projects/obtservices/base/src/lib/vendor/classes/empty-enterprise-search.ts +75 -0
- package/projects/obtservices/base/src/lib/vendor/classes/enviroment.ts +25 -0
- package/projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts +2126 -0
- package/projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts +23 -0
- package/projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts +2399 -0
- package/projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts +5 -0
- package/projects/obtservices/base/src/lib/vendor/classes/helpers.ts +1233 -0
- package/projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts +1370 -0
- package/projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts +1380 -0
- package/projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts +70 -0
- package/projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts +444 -0
- package/projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts +268 -0
- package/projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts +28 -0
- package/projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts +541 -0
- package/projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts +1751 -0
- package/projects/obtservices/base/src/lib/vendor/classes/routehappy-request.ts +146 -0
- package/projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts +128 -0
- package/projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts +375 -0
- package/projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts +12 -0
- package/projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts +7 -0
- package/projects/obtservices/base/src/lib/vendor/data/airports.data.json +5508 -0
- package/projects/obtservices/base/src/lib/vendor/data/booking-expected-responses.json +100 -0
- package/projects/obtservices/base/src/lib/vendor/data/cities.data.json +31499 -0
- package/projects/obtservices/base/src/lib/vendor/data/countries.json +1212 -0
- package/projects/obtservices/base/src/lib/vendor/data/euro-stations.json +30 -0
- package/projects/obtservices/base/src/lib/vendor/data/flight-booking.data.json +136 -0
- package/projects/obtservices/base/src/lib/vendor/data/postcodes1.json +194 -0
- package/projects/obtservices/base/src/lib/vendor/data/rail_addresses.json +2524 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +36 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +33 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +53 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts +59 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts +20 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +32 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +37 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts +27 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts +34 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +35 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts +174 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Icarhire-enterprise-search.ts +143 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ienterprise-basket.service.ts +127 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ieurostar-enterprise-search.ts +197 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iflight-enterprise-search.ts +196 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts +219 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iirl-enterprise-search.ts +135 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Ilounges-enterprise-search.ts +58 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Imybookings.service.ts +27 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iparking-enterprise-search.ts +72 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Irail-enterprise-search.ts +161 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Isearch.service.ts +178 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Isupplementary-booking-info-impl.ts +63 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/Iuser.service.ts +87 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-classes.interface.ts +8 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-filters.interface.ts +11 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-sort.interface.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/cheapest-price.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/code-name.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/flight-filters.interface.ts +41 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/flight-multi-destination.interface.ts +8 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-airport-express-stations.interface.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-basket-item.interface.ts +79 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-journey-leg.interface.ts +6 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-recent-search-args.interface.ts +20 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-selected-ticket.interface.ts +11 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-group.interface.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-groups.interface.ts +5 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/search-objects.interface.ts +17 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/select-filter.interface.ts +5 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/user.data.ts +22 -0
- package/projects/obtservices/base/src/lib/vendor/interfaces/value-display.ts +4 -0
- package/projects/obtservices/base/src/lib/vendor/models/login.model.ts +97 -0
- package/projects/obtservices/base/src/lib/vendor/models/regexp.model.ts +13 -0
- package/projects/obtservices/base/src/lib/vendor/models/traveller.object.ts +61 -0
- package/projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts +1150 -0
- package/projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts +251 -0
- package/projects/obtservices/base/src/lib/vendor/services/http-call.service.ts +57 -0
- package/projects/obtservices/base/src/lib/vendor/services/logon.service.ts +245 -0
- package/projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts +184 -0
- package/projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts +275 -0
- package/projects/obtservices/base/src/lib/vendor/services/search.service.ts +2026 -0
- package/projects/obtservices/base/src/lib/vendor/services/storage.service.ts +15 -0
- package/projects/obtservices/base/src/lib/vendor/services/url.service.ts +12 -0
- package/projects/obtservices/base/src/lib/vendor/services/user.service.ts +354 -0
- package/projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts +66 -0
- package/projects/obtservices/base/src/lib/vendor/testers/base.tester.ts +18 -0
- package/projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts +24 -0
- package/projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts +23 -0
- package/projects/obtservices/base/src/lib/vendor/types/graphql.types.ts +6184 -0
- package/projects/obtservices/base/src/lib/vendor/types/types.ts +630 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts +31 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts +28 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts +20 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +28 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts +29 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +31 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts +32 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts +28 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts +30 -0
- package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts +30 -0
- package/projects/obtservices/base/src/models.ts +3 -0
- package/projects/obtservices/base/src/public_api.ts +8 -0
- package/projects/obtservices/base/src/services.ts +12 -0
- package/projects/obtservices/base/src/testers.ts +2 -0
- package/projects/obtservices/base/src/types.ts +1 -0
- package/projects/obtservices/base/src/updaters.ts +20 -0
- package/projects/obtservices/graphQL/autogenerated/index.js +2 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/acceptNewPrice.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/addItemToBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/addUsersToBasketItem.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/bookBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/cancelBooking.gql +6 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/confermaCreateCard.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/confermaDeleteCard.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/createBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteBasket.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteFavouriteSearch.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteRecentSearch.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/deleteUserAddress.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/index.js +36 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/moveItemToADifferentBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/removeItemFromBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/removeItemsFromBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/removeUserFromBasketItem.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/reopenBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasketItem.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/saveFavouriteSearch.gql +348 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/saveRecentSearch.gql +348 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/saveUserAddress.gql +14 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/sendBasketForApproval.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setAddressAsUserPrimary.gql +14 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemLeadPassenger.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIGroup.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIValue.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemPaymentMethod.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setMIDefaultValue.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/setUserLanguage.gql +339 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketNotes.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketTitle.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/queries/alive.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/carHireAvailabilityDetailRequest.gql +42 -0
- package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockClientHotels.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockConsumerHotels.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/queries/confermaListCards.gql +11 -0
- package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockClientHotels.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockConsumerHotels.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getCOVIDMicrositeToken.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getCancellationInfo.gql +7 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getCarHireDepots.gql +13 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOffice.gql +50 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOfficeNames.gql +26 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getConfermaQuicklist.gql +131 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getCountries.gql +8 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getHotelAvailability.gql +78 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getHotelChains.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getIRLSupplierStation.gql +28 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getMultipleHotelsAvailability.gql +78 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getPostcodeDetails.gql +25 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getRailStation.gql +27 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getRailcards.gql +6 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getRiskAlerts.gql +17 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUser.gql +339 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserAddresses.gql +14 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserBasket.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserBaskets.gql +1580 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserCompanyOffices.gql +88 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserCurrentCarbonAllowance.gql +524 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserFavouriteSearches.gql +348 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserMIAutoSuggestValues.gql +10 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserMessages.gql +10 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserPhoneNumbers.gql +13 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserRecentSearches.gql +348 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserServices.gql +16 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserTravelRules.gql +111 -0
- package/projects/obtservices/graphQL/autogenerated/queries/getUserUIConfigs.gql +52 -0
- package/projects/obtservices/graphQL/autogenerated/queries/index.js +64 -0
- package/projects/obtservices/graphQL/autogenerated/queries/isPostcodeValid.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/postcodeAutoSuggest.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchAirlines.gql +32 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchAirports.gql +60 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchCabHire.gql +63 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchCarHire.gql +104 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchCities.gql +14 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchConfermaCities.gql +11 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchEurostar.gql +833 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchFastTrack.gql +46 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchFlights.gql +23 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchFlightsV2.gql +833 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchHotelChains.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchHotels.gql +131 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchIRL.gql +514 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchIRLSupplierStations.gql +28 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchLounges.gql +89 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchParking.gql +70 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchPostcodes.gql +25 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchRail.gql +840 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchRailStations.gql +27 -0
- package/projects/obtservices/graphQL/autogenerated/queries/searchUserCanBookFor.gql +339 -0
- package/projects/obtservices/graphQL/autogenerated/queries/validateBasketItemMI.gql +3 -0
- package/projects/obtservices/graphQL/autogenerated/queries/validateUserMIFreeValue.gql +3 -0
- package/projects/obtservices/graphQL/documents/acceptNewPrice.graphql +5 -0
- package/projects/obtservices/graphQL/documents/addUserToBasketItem.graphql +9 -0
- package/projects/obtservices/graphQL/documents/basket.fragments.graphql +171 -0
- package/projects/obtservices/graphQL/documents/baskets.graphql +111 -0
- package/projects/obtservices/graphQL/documents/bookBasket.graphql +9 -0
- package/projects/obtservices/graphQL/documents/cabhire.graphql +66 -0
- package/projects/obtservices/graphQL/documents/carHireAvailabilityDetailRequest.graphql +44 -0
- package/projects/obtservices/graphQL/documents/carhire.graphql +117 -0
- package/projects/obtservices/graphQL/documents/deleteRecentSearch.graphql +3 -0
- package/projects/obtservices/graphQL/documents/deleteUserAddress.graphql +3 -0
- package/projects/obtservices/graphQL/documents/error.fragments.graphql +10 -0
- package/projects/obtservices/graphQL/documents/flights.graphql +830 -0
- package/projects/obtservices/graphQL/documents/getCarHireDepots.graphql +13 -0
- package/projects/obtservices/graphQL/documents/getConfermaOfficeNames.graphql +11 -0
- package/projects/obtservices/graphQL/documents/getConfermaQuicklist.graphql +108 -0
- package/projects/obtservices/graphQL/documents/getRailStation.graphql +31 -0
- package/projects/obtservices/graphQL/documents/getRailcards.graphql +6 -0
- package/projects/obtservices/graphQL/documents/getRiskAlerts.graphql +24 -0
- package/projects/obtservices/graphQL/documents/getUserAddresses.graphql +14 -0
- package/projects/obtservices/graphQL/documents/getUserCompanyOffices.graphql +18 -0
- package/projects/obtservices/graphQL/documents/getUserCurrentCarbonAllowance.graphql +29 -0
- package/projects/obtservices/graphQL/documents/getUserMIAutoSuggestValues.graphql +10 -0
- package/projects/obtservices/graphQL/documents/getUserPhoneNumbers.graphql +13 -0
- package/projects/obtservices/graphQL/documents/getUserRecentSearches.graphql +20 -0
- package/projects/obtservices/graphQL/documents/hotels.graphql +242 -0
- package/projects/obtservices/graphQL/documents/isPostcodeValid.graphql +3 -0
- package/projects/obtservices/graphQL/documents/lookups.graphql +54 -0
- package/projects/obtservices/graphQL/documents/lounges.graphql +88 -0
- package/projects/obtservices/graphQL/documents/moveItemToADifferentBasket.graphql +9 -0
- package/projects/obtservices/graphQL/documents/parking.graphql +79 -0
- package/projects/obtservices/graphQL/documents/rail.graphql +645 -0
- package/projects/obtservices/graphQL/documents/saveRecentSearch.graphql +5 -0
- package/projects/obtservices/graphQL/documents/saveUserAddress.graphql +14 -0
- package/projects/obtservices/graphQL/documents/searchAirlines.graphql +32 -0
- package/projects/obtservices/graphQL/documents/searchCities.graphql +14 -0
- package/projects/obtservices/graphQL/documents/searchConfermaCities.graphql +11 -0
- package/projects/obtservices/graphQL/documents/searchEurostar.graphql +810 -0
- package/projects/obtservices/graphQL/documents/searchHotelChains.graphql +3 -0
- package/projects/obtservices/graphQL/documents/searchIRL.graphql +521 -0
- package/projects/obtservices/graphQL/documents/searchPostcodes.graphql +7 -0
- package/projects/obtservices/graphQL/documents/searchRailStations.graphql +27 -0
- package/projects/obtservices/graphQL/documents/searchUserAddresses.graphql +14 -0
- package/projects/obtservices/graphQL/documents/set-basker-item-mi-group.graphql +9 -0
- package/projects/obtservices/graphQL/documents/setBasketItemLeadPassenger.graphql +5 -0
- package/projects/obtservices/graphQL/documents/setBasketItemMIValue.graphql +16 -0
- package/projects/obtservices/graphQL/documents/setBasketItemPaymentMethod.graphql +12 -0
- package/projects/obtservices/graphQL/documents/updateBasketNotes.graphql +10 -0
- package/projects/obtservices/graphQL/documents/updateBasketTitle.graphql +10 -0
- package/projects/obtservices/graphQL/documents/user.fragments.graphql +65 -0
- package/projects/obtservices/graphQL/documents/user.graphql +95 -0
- package/projects/obtservices/graphQL/documents/validateUserMIFreeValue.graphql +3 -0
- package/projects/obtservices/graphQL/schema/schema.graphql +2635 -0
- package/projects/obtservices/karma.conf.js +32 -0
- package/projects/obtservices/ng-package.json +7 -0
- package/projects/obtservices/package-lock.json +5 -0
- package/projects/obtservices/package.json +12 -0
- package/projects/obtservices/src/obtservices.ts +0 -0
- package/projects/obtservices/src/public_api.ts +1 -0
- package/projects/obtservices/tsconfig.lib.json +30 -0
- package/projects/obtservices/tsconfig.spec.json +17 -0
- package/projects/obtservices/tslint.json +17 -0
- package/tsconfig.json +36 -0
- package/tslint.json +62 -0
|
@@ -0,0 +1,1233 @@
|
|
|
1
|
+
import moment from 'moment';
|
|
2
|
+
import _ from 'lodash';
|
|
3
|
+
|
|
4
|
+
import { Traveller } from '../models/traveller.object';
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
BasketDetails,
|
|
8
|
+
BasketItemManagementInfo
|
|
9
|
+
} from '../services/enterprise-basket.service';
|
|
10
|
+
import { ManagementInfoAndIsValid } from './management-info-and-valid';
|
|
11
|
+
import { UserServices } from '../interfaces/Iuser.service';
|
|
12
|
+
import {
|
|
13
|
+
FlightDirectionEnum,
|
|
14
|
+
MinMax,
|
|
15
|
+
NgbDateStruct,
|
|
16
|
+
Schema
|
|
17
|
+
} from '../types/types';
|
|
18
|
+
import {
|
|
19
|
+
Airport,
|
|
20
|
+
BasketItem,
|
|
21
|
+
FareConditions,
|
|
22
|
+
FlightItinerary,
|
|
23
|
+
FlightJourney,
|
|
24
|
+
PassengerType,
|
|
25
|
+
Service,
|
|
26
|
+
ServiceType,
|
|
27
|
+
UserPassengerTypeInput
|
|
28
|
+
} from '../types/graphql.types';
|
|
29
|
+
import { SupplementaryBookingInfoInterface } from '../interfaces/Isupplementary-booking-info-impl';
|
|
30
|
+
import { Memorise } from './limited-cache.class';
|
|
31
|
+
|
|
32
|
+
declare var hex_hmac_md5: any;
|
|
33
|
+
|
|
34
|
+
const FLIGHT_MAX_CHILD_AGE_YEARS = 16;
|
|
35
|
+
const RAIL_MAX_CHILD_AGE_YEARS = 12;
|
|
36
|
+
const EUROSTAR_MAX_CHILD_AGE_YEARS = 12;
|
|
37
|
+
const COACH_MAX_CHILD_AGE_YEARS = 15;
|
|
38
|
+
const LOUNGES_MAX_CHILD_AGE_YEARS = 12;
|
|
39
|
+
const FLIGHT_MAX_INFANT_AGE_YEARS = 0;
|
|
40
|
+
const RAIL_MAX_INFANT_AGE_YEARS = 0;
|
|
41
|
+
const COACH_MAX_INFANT_AGE_YEARS = 0;
|
|
42
|
+
const LOUNGES_MAX_INFANT_AGE_YEARS = 0;
|
|
43
|
+
|
|
44
|
+
const months = [
|
|
45
|
+
'Jan',
|
|
46
|
+
'Feb',
|
|
47
|
+
'Mar',
|
|
48
|
+
'Apr',
|
|
49
|
+
'May',
|
|
50
|
+
'Jun',
|
|
51
|
+
'Jul',
|
|
52
|
+
'Aug',
|
|
53
|
+
'Sep',
|
|
54
|
+
'Oct',
|
|
55
|
+
'Nov',
|
|
56
|
+
'Dec'
|
|
57
|
+
];
|
|
58
|
+
|
|
59
|
+
const full_months = [
|
|
60
|
+
'January',
|
|
61
|
+
'February',
|
|
62
|
+
'March',
|
|
63
|
+
'April',
|
|
64
|
+
'May',
|
|
65
|
+
'June',
|
|
66
|
+
'July',
|
|
67
|
+
'August',
|
|
68
|
+
'September',
|
|
69
|
+
'October',
|
|
70
|
+
'November',
|
|
71
|
+
'December'
|
|
72
|
+
];
|
|
73
|
+
|
|
74
|
+
const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
75
|
+
|
|
76
|
+
const full_weekdays = [
|
|
77
|
+
'Sunday',
|
|
78
|
+
'Monday',
|
|
79
|
+
'Tuesday',
|
|
80
|
+
'Wednesday',
|
|
81
|
+
'Thursday',
|
|
82
|
+
'Friday',
|
|
83
|
+
'Saturday'
|
|
84
|
+
];
|
|
85
|
+
|
|
86
|
+
export class BaseHelperRoutines {
|
|
87
|
+
static READ_DATE_FORMAT = 'dd, D MMM YYYY';
|
|
88
|
+
static READ_TIME_FORMAT = 'HH:mm';
|
|
89
|
+
static DATE_FORMAT = 'YYMMDD';
|
|
90
|
+
static ISO_DATA_FORMAT = 'YYYY-MM-DD';
|
|
91
|
+
static ISO_DATA_FORMAT_TIME = 'YYYY-MM-DD HH:mm';
|
|
92
|
+
static ISO_DATA_FORMAT_NO_HYPHANS = 'YYYYMMDD';
|
|
93
|
+
static TIME_FORMAT = 'HHmm';
|
|
94
|
+
static TIME_FORMAT_COLON = 'HH:mm';
|
|
95
|
+
static MMDDYY_DATE = 'DDMMYYYY';
|
|
96
|
+
|
|
97
|
+
minToHour(dur: number) {
|
|
98
|
+
return `${Math.floor(dur / 60)}h ${dur % 60}m`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
makeColonTime(time: string) {
|
|
102
|
+
return time.substring(0, 2) + ':' + time.substring(2, 4);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
nonNullMin(key: string, ...args: any[]) {
|
|
106
|
+
return args.reduce(
|
|
107
|
+
(current, item) => {
|
|
108
|
+
if (item && item[key]) {
|
|
109
|
+
if (current.min > Number(item[key])) {
|
|
110
|
+
return { item, min: Number(item[key]) };
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return current;
|
|
114
|
+
},
|
|
115
|
+
{ min: Number.MAX_SAFE_INTEGER, item: null }
|
|
116
|
+
).item;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
joinByComma(...attributes: any[]): string {
|
|
120
|
+
return attributes
|
|
121
|
+
.reduce((acc, attr) => {
|
|
122
|
+
if (_.isEmpty(attr)) {
|
|
123
|
+
acc += attr + ',';
|
|
124
|
+
}
|
|
125
|
+
return acc;
|
|
126
|
+
}, '')
|
|
127
|
+
.slice(0, -1);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
mutuallyInclude(a: string, b: string): boolean {
|
|
131
|
+
try {
|
|
132
|
+
return a.includes(b) || b.includes(a);
|
|
133
|
+
} catch (e) {
|
|
134
|
+
console.warn('Trying to mutually compare undefined variable.');
|
|
135
|
+
return false;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
findByKey(array: any[], key: string, value: string): any {
|
|
140
|
+
return array
|
|
141
|
+
.filter((item) => {
|
|
142
|
+
return item[key] === value;
|
|
143
|
+
})
|
|
144
|
+
.pop();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
dateToNgDate(date: Date): NgbDateStruct {
|
|
148
|
+
return {
|
|
149
|
+
year: date.getFullYear(),
|
|
150
|
+
month: date.getMonth() + 1,
|
|
151
|
+
day: date.getDate()
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
convertToYYMMDD(date: string) {
|
|
156
|
+
if (date.length > 6) {
|
|
157
|
+
return this.formatDate(this.yyyymmddTimeToMoment(date));
|
|
158
|
+
}
|
|
159
|
+
return date;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
formatDateToMMDDYYY(date: Date): string {
|
|
163
|
+
return moment(date).format(BaseHelperRoutines.MMDDYY_DATE);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
formatDate(date: moment.Moment): string {
|
|
167
|
+
date = moment(date);
|
|
168
|
+
return date.format(BaseHelperRoutines.DATE_FORMAT);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
formatTime(date: moment.Moment): string {
|
|
172
|
+
try {
|
|
173
|
+
return date.format(BaseHelperRoutines.TIME_FORMAT);
|
|
174
|
+
} catch (e) {
|
|
175
|
+
console.error(e);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
formatTimeColon(date: moment.Moment): string {
|
|
180
|
+
date = moment(date);
|
|
181
|
+
return date.format(BaseHelperRoutines.TIME_FORMAT_COLON);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
formatIsoDate(date: moment.Moment): string {
|
|
185
|
+
date = moment(date);
|
|
186
|
+
return date.format(BaseHelperRoutines.ISO_DATA_FORMAT);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
formatIsoDateTime(date: moment.Moment): string {
|
|
190
|
+
date = moment(date);
|
|
191
|
+
return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_TIME);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
formatIsoDateNoHyphans(date: moment.Moment): string {
|
|
195
|
+
date = moment(date);
|
|
196
|
+
return date.format(BaseHelperRoutines.ISO_DATA_FORMAT_NO_HYPHANS);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
generateTimesList(from = 0, to = 24, step = 15): string[] {
|
|
200
|
+
const dateTimeArray: string[] = [];
|
|
201
|
+
for (let hour = 0; hour < to - from; hour++) {
|
|
202
|
+
for (let minute = 0; minute < 60; minute += step) {
|
|
203
|
+
dateTimeArray.push(moment({ hour, minute }).format('HH:mm'));
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return dateTimeArray;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
momentToNgDate(date: moment.Moment): NgbDateStruct {
|
|
210
|
+
date = moment(date);
|
|
211
|
+
return this.dateToNgDate(date.toDate());
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
ngDateToDate(date: NgbDateStruct): Date {
|
|
215
|
+
return new Date(date.year, date.month - 1, date.day);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
ngDateToMoment(date: NgbDateStruct, time?: string): moment.Moment {
|
|
219
|
+
const mom = moment(this.ngDateToDate(date));
|
|
220
|
+
if (time) {
|
|
221
|
+
const times = time.split(':');
|
|
222
|
+
if (times.length === 2) {
|
|
223
|
+
mom.set('hours', Number(times[0])).set('minutes', Number(times[1]));
|
|
224
|
+
} else {
|
|
225
|
+
mom
|
|
226
|
+
.set('hours', Number(time.substr(0, 2)))
|
|
227
|
+
.set('minutes', Number(time.substr(2, 2)));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return mom;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
todayToNgbDateStruct(): NgbDateStruct {
|
|
234
|
+
const today = moment();
|
|
235
|
+
return { year: today.year(), month: today.month() + 1, day: today.date() };
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
objectToArray(object: Record<string, any>): Array<any> {
|
|
239
|
+
return Object.keys(object).map((i) => object[i]);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
yyyymmddToDate(value: string): Date {
|
|
243
|
+
return new Date(
|
|
244
|
+
Number(value.substring(0, 4)),
|
|
245
|
+
Number(value.substring(4, 6)) - 1,
|
|
246
|
+
Number(value.substring(6, 8))
|
|
247
|
+
);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
yyyymmddToMoment(value: string): moment.Moment {
|
|
251
|
+
return moment(this.yyyymmddToDate(value));
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
yymmddToMoment(value: string): moment.Moment {
|
|
255
|
+
return moment(value, 'YYMMDD');
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
yymmddToNgbDate(value: string): NgbDateStruct {
|
|
259
|
+
return this.momentToNgDate(this.yymmddToMoment(value));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
yymmdd_hhmmToMoment(date: string, time: string): moment.Moment {
|
|
263
|
+
return moment(`${date} ${time}`, 'YYMMDD HHmm');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
yyyymmdd_hhmmToMoment(date: string, time: string): moment.Moment {
|
|
267
|
+
return moment(`${date} ${time}`, 'YYYYMMDD HHmm');
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
yyyymmddToNgDate(value: string): NgbDateStruct {
|
|
271
|
+
return this.dateToNgDate(this.yyyymmddToDate(value));
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
yyyymmddTimeToNgDate(date: string, time: string): NgbDateStruct {
|
|
275
|
+
const dt = this.yyyymmddToMoment(date)
|
|
276
|
+
.add(Number(time.substring(0, 2)), 'hours')
|
|
277
|
+
.add(Number(time.substring(2, 4)), 'minutes');
|
|
278
|
+
return this.momentToNgDate(dt);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
yyyymmddTimeToMoment(date: string): moment.Moment {
|
|
282
|
+
if (date.length === 6) {
|
|
283
|
+
return moment(`${date}`, 'YYMMDD');
|
|
284
|
+
}
|
|
285
|
+
return moment(`${date}`, 'YYYYMMDD');
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
hhmmToTime(value: string): string {
|
|
289
|
+
return `${value.substring(0, 2)}:${value.substring(2, 4)}`;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
dateStringToyyyymmdd(d: string): string | null {
|
|
293
|
+
if (typeof d !== 'string') {
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
const m = /(\d{4})[-\/]?(\d{2})[-\/]?(\d{2})/.exec(d);
|
|
297
|
+
return m ? `${m[1]}${m[2]}${m[3]}` : null;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
timeStringTohh_mm(t: string): string | null {
|
|
301
|
+
if (typeof t !== 'string') {
|
|
302
|
+
return null;
|
|
303
|
+
}
|
|
304
|
+
const m = /(\d{2})[:-]?(\d{2})/.exec(t);
|
|
305
|
+
return m ? `${m[1]}:${m[2]}` : null;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
stringToBool(s: string): boolean {
|
|
309
|
+
return s && s !== 'false' && s !== '0' && s !== 'no' && s !== 'n';
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
clone<T = any>(toClone: T): T {
|
|
313
|
+
return _.cloneDeep(toClone) as T;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
replaceKeysInText(
|
|
317
|
+
text: string,
|
|
318
|
+
replacements: Record<string, string>
|
|
319
|
+
): string {
|
|
320
|
+
return Object.keys(replacements).reduce((current, key) => {
|
|
321
|
+
return current.replace('%' + key, replacements[key]);
|
|
322
|
+
}, text);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
getNextMinuets(date: moment.Moment = moment(), minutesToRound = 15) {
|
|
326
|
+
date.minute(Math.ceil(date.minute() / minutesToRound) * minutesToRound);
|
|
327
|
+
return date.format('HH:mm');
|
|
328
|
+
}
|
|
329
|
+
/********************************************************************************************
|
|
330
|
+
* Below are functions needed for generating the hashed number once token, taken as required *
|
|
331
|
+
* Don't Mess with these *
|
|
332
|
+
********************************************************************************************/
|
|
333
|
+
getNumberOnceValue(token: string): string {
|
|
334
|
+
const random_value = this.guid();
|
|
335
|
+
return random_value + '_' + hex_hmac_md5(token, random_value);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
guid(): any {
|
|
339
|
+
let random_hex = '';
|
|
340
|
+
|
|
341
|
+
for (let i = 0; i < 32; i++) {
|
|
342
|
+
random_hex += this.s4();
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return random_hex;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
s4(): any {
|
|
349
|
+
return Math.floor((1 + Math.random()) * 0x10000)
|
|
350
|
+
.toString(16)
|
|
351
|
+
.substring(1);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
capitaliseFirstLetter(word: string): string {
|
|
355
|
+
if (word.length > 0) {
|
|
356
|
+
return word[0].toUpperCase() + word.slice(1).toLowerCase();
|
|
357
|
+
} else {
|
|
358
|
+
return '';
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
fromObject(...args: any[]): any {
|
|
363
|
+
let data = args.shift();
|
|
364
|
+
for (let index = 0; data && index < args.length; index += 1) {
|
|
365
|
+
data = data[args[index]];
|
|
366
|
+
}
|
|
367
|
+
return data;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
momentRoundMinutes(time: moment.Moment, round: number): moment.Moment {
|
|
371
|
+
time = moment(time).startOf('minutes');
|
|
372
|
+
let diff = time.minutes() % round;
|
|
373
|
+
if (diff !== 0) {
|
|
374
|
+
diff = round - diff;
|
|
375
|
+
}
|
|
376
|
+
return time.add(diff, 'minute');
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
round(date: any, duration: any) {
|
|
380
|
+
return moment(Math.ceil(+date / +duration) * +duration);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
icsFold(body: string): string {
|
|
384
|
+
const lines = body.split(/\r\n/g);
|
|
385
|
+
return lines
|
|
386
|
+
.map((line) => {
|
|
387
|
+
let res = '';
|
|
388
|
+
const n = 72;
|
|
389
|
+
line = line.trim();
|
|
390
|
+
while (line.length > n) {
|
|
391
|
+
res += `${line.slice(0, n)}\r\n`;
|
|
392
|
+
line = ` ${line.slice(n).trim()}`;
|
|
393
|
+
}
|
|
394
|
+
if (line.trim()) {
|
|
395
|
+
res += line;
|
|
396
|
+
}
|
|
397
|
+
return res;
|
|
398
|
+
})
|
|
399
|
+
.join('\r\n');
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
splitAddressLine(
|
|
403
|
+
line: string,
|
|
404
|
+
len: number
|
|
405
|
+
): { line: string; residue: string } {
|
|
406
|
+
const res = {
|
|
407
|
+
line: line.replace(/\s+/g, ' ').trim(),
|
|
408
|
+
residue: ''
|
|
409
|
+
};
|
|
410
|
+
if (res.line.length > len) {
|
|
411
|
+
let i = res.line.slice(0, len).lastIndexOf(',');
|
|
412
|
+
if (i > 0) {
|
|
413
|
+
res.residue = res.line.slice(i + 1).trim();
|
|
414
|
+
res.line = res.line.slice(0, i).trim();
|
|
415
|
+
} else {
|
|
416
|
+
i = res.line.slice(0, len).lastIndexOf(' ');
|
|
417
|
+
if (i > 0) {
|
|
418
|
+
res.residue = res.line.slice(i + 1).trim();
|
|
419
|
+
res.line = res.line.slice(0, i);
|
|
420
|
+
} else {
|
|
421
|
+
res.residue = res.line.slice(len);
|
|
422
|
+
res.line = res.line.slice(0, len);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return res;
|
|
427
|
+
}
|
|
428
|
+
|
|
429
|
+
daysBetween(start: moment.Moment, end: moment.Moment): number {
|
|
430
|
+
return end.diff(start, 'days');
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
mapPromise<T = any, R = any>(
|
|
434
|
+
a: T[],
|
|
435
|
+
f: (val: T, index: number) => R | Promise<R>,
|
|
436
|
+
max?: number
|
|
437
|
+
): Promise<R[]> {
|
|
438
|
+
const it = a[Symbol.iterator]();
|
|
439
|
+
const result: R[] = [];
|
|
440
|
+
const buffer: Promise<R>[] = [];
|
|
441
|
+
let i = 0;
|
|
442
|
+
const nextf = (): Promise<R> => {
|
|
443
|
+
const next = it.next();
|
|
444
|
+
if (next.done) {
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const index = i++;
|
|
448
|
+
return Promise.resolve(f(next.value, index)).then((val) => {
|
|
449
|
+
result[index] = val;
|
|
450
|
+
return nextf();
|
|
451
|
+
});
|
|
452
|
+
};
|
|
453
|
+
while (!max || buffer.length <= max) {
|
|
454
|
+
const n = nextf();
|
|
455
|
+
if (n) {
|
|
456
|
+
buffer.push(n);
|
|
457
|
+
} else {
|
|
458
|
+
break;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
return Promise.all(buffer).then(() => {
|
|
462
|
+
return result;
|
|
463
|
+
});
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
mapSeriesPromise<T = any, R = any>(
|
|
467
|
+
a: T[],
|
|
468
|
+
f: (val: T, index: number) => R | Promise<R>
|
|
469
|
+
): Promise<R[]> {
|
|
470
|
+
return this.mapPromise(a, f, 1);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
obj2queryString(obj: any): string {
|
|
474
|
+
return _.reduce(
|
|
475
|
+
obj,
|
|
476
|
+
(a, v, k) => {
|
|
477
|
+
if (a !== '') {
|
|
478
|
+
a += '&';
|
|
479
|
+
}
|
|
480
|
+
return `${a}${encodeURIComponent(k)}=${encodeURIComponent(v)}`;
|
|
481
|
+
},
|
|
482
|
+
''
|
|
483
|
+
);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
stripPunctuation(s: string): string {
|
|
487
|
+
return s.replace(/[^a-zA-Z0-9\s]/g, '');
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
replaceAll(haystack: string, needle: string, replacement: string): string {
|
|
491
|
+
return haystack
|
|
492
|
+
? haystack.replace(new RegExp(needle, 'g'), replacement)
|
|
493
|
+
: null;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
dateTime(sabsDate: string, sabsTime: string): any {
|
|
497
|
+
const tempDate = sabsDate.match(/.{1,2}/g); // splits every 2 characters
|
|
498
|
+
const tempTime = sabsTime.match(/.{1,2}/g);
|
|
499
|
+
|
|
500
|
+
const newStr =
|
|
501
|
+
'20' +
|
|
502
|
+
tempDate[0] +
|
|
503
|
+
'-' +
|
|
504
|
+
tempDate[1] +
|
|
505
|
+
'-' +
|
|
506
|
+
tempDate[2] +
|
|
507
|
+
'T' +
|
|
508
|
+
tempTime[0] +
|
|
509
|
+
':' +
|
|
510
|
+
tempTime[1] +
|
|
511
|
+
':00';
|
|
512
|
+
return newStr;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
alternateJSONStringify(jsonObject: any): string {
|
|
516
|
+
let jsonString = JSON.stringify(jsonObject);
|
|
517
|
+
jsonString = jsonString.replace(/"/g, '`');
|
|
518
|
+
return jsonString;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// Convert object to array
|
|
522
|
+
ConvertObjectToArray(object: object): any[] {
|
|
523
|
+
let array = _.values(object);
|
|
524
|
+
array = _.flatten(array);
|
|
525
|
+
return array;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
addDay(dateStruct: NgbDateStruct): any {
|
|
529
|
+
const date = new Date(
|
|
530
|
+
dateStruct.year,
|
|
531
|
+
dateStruct.month - 1,
|
|
532
|
+
dateStruct.day + 1
|
|
533
|
+
);
|
|
534
|
+
const retDate = {
|
|
535
|
+
year: date.getFullYear(),
|
|
536
|
+
month: date.getMonth() + 1,
|
|
537
|
+
day: date.getDate()
|
|
538
|
+
};
|
|
539
|
+
//// console.log(retDate);
|
|
540
|
+
//// console.log(date);
|
|
541
|
+
return retDate;
|
|
542
|
+
}
|
|
543
|
+
|
|
544
|
+
hashCode(toCode: string): string {
|
|
545
|
+
let hash = 0;
|
|
546
|
+
|
|
547
|
+
for (let i = 0; i < toCode.length; i += 1) {
|
|
548
|
+
const char = toCode.charCodeAt(i);
|
|
549
|
+
// tslint:disable-next-line: no-bitwise
|
|
550
|
+
hash = (hash << 5) - hash + char;
|
|
551
|
+
// tslint:disable-next-line: no-bitwise
|
|
552
|
+
hash = hash & hash;
|
|
553
|
+
}
|
|
554
|
+
return hash.toString();
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
MMddyyToNgb(date: string): NgbDateStruct {
|
|
558
|
+
return this.momentToNgDate(moment(date, BaseHelperRoutines.MMDDYY_DATE));
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
selectedChildrenTravellers(
|
|
562
|
+
selectedTravellers: Traveller[],
|
|
563
|
+
type: ServiceType
|
|
564
|
+
) {
|
|
565
|
+
switch (type) {
|
|
566
|
+
// These types do not have a difference between adults and children. so always mark as adults.
|
|
567
|
+
case ServiceType.Hotel:
|
|
568
|
+
case ServiceType.Cab:
|
|
569
|
+
return [];
|
|
570
|
+
}
|
|
571
|
+
return selectedTravellers.filter(
|
|
572
|
+
(traveller: Traveller) => traveller.isChild
|
|
573
|
+
);
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
selectedTravellers(travellers: Traveller[], type: ServiceType) {
|
|
577
|
+
switch (type) {
|
|
578
|
+
// These types do not have a difference between adults and children. so always mark as adults.
|
|
579
|
+
case ServiceType.Hotel:
|
|
580
|
+
case ServiceType.Cab:
|
|
581
|
+
return { adults: travellers, children: [], infants: [] };
|
|
582
|
+
default:
|
|
583
|
+
return travellers.reduce(
|
|
584
|
+
(
|
|
585
|
+
accum: {
|
|
586
|
+
adults: Traveller[];
|
|
587
|
+
children: Traveller[];
|
|
588
|
+
infants: Traveller[];
|
|
589
|
+
},
|
|
590
|
+
traveller: Traveller
|
|
591
|
+
) => {
|
|
592
|
+
if (traveller.isChild) {
|
|
593
|
+
if (traveller.isInfant) {
|
|
594
|
+
accum.infants.push(traveller);
|
|
595
|
+
} else {
|
|
596
|
+
accum.children.push(traveller);
|
|
597
|
+
}
|
|
598
|
+
} else {
|
|
599
|
+
accum.adults.push(traveller);
|
|
600
|
+
}
|
|
601
|
+
return accum;
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
adults: [],
|
|
605
|
+
children: [],
|
|
606
|
+
infants: []
|
|
607
|
+
}
|
|
608
|
+
);
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
selectedAdultTravellers(selectedTravellers: Traveller[], type: ServiceType) {
|
|
612
|
+
switch (type) {
|
|
613
|
+
// These types do not have a difference between adults and children. so always mark as adults.
|
|
614
|
+
case ServiceType.Hotel:
|
|
615
|
+
case ServiceType.Cab:
|
|
616
|
+
return selectedTravellers;
|
|
617
|
+
}
|
|
618
|
+
return selectedTravellers.filter(
|
|
619
|
+
(traveller: Traveller) => !traveller.isChild && !traveller.isInfant
|
|
620
|
+
);
|
|
621
|
+
}
|
|
622
|
+
|
|
623
|
+
private _isChild(traveller: Traveller | Date, maxAge: number): boolean {
|
|
624
|
+
if (traveller instanceof Date) {
|
|
625
|
+
const adultDate = moment().add(-maxAge, 'years');
|
|
626
|
+
return adultDate.isBefore(
|
|
627
|
+
moment(traveller, BaseHelperRoutines.ISO_DATA_FORMAT),
|
|
628
|
+
'day'
|
|
629
|
+
);
|
|
630
|
+
} else {
|
|
631
|
+
return traveller.isChild;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
isChildFlight(traveller: Traveller): boolean {
|
|
636
|
+
return this._isChild(traveller, FLIGHT_MAX_CHILD_AGE_YEARS);
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
isChildRail(traveller: Traveller): boolean {
|
|
640
|
+
return this._isChild(traveller, RAIL_MAX_CHILD_AGE_YEARS);
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
isChildEurostar(traveller: Traveller): boolean {
|
|
644
|
+
return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
uniqBy(array: any[], value: string) {
|
|
648
|
+
return _.uniqBy(array, value);
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
isChild(traveller: Traveller | Date, travelType: ServiceType) {
|
|
652
|
+
switch (travelType) {
|
|
653
|
+
case ServiceType.Flight:
|
|
654
|
+
return this._isChild(traveller, FLIGHT_MAX_CHILD_AGE_YEARS);
|
|
655
|
+
case ServiceType.Rail:
|
|
656
|
+
return this._isChild(traveller, RAIL_MAX_CHILD_AGE_YEARS);
|
|
657
|
+
// case ServiceType.Eurostar:
|
|
658
|
+
// return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);
|
|
659
|
+
case ServiceType.Coach:
|
|
660
|
+
return this._isChild(traveller, COACH_MAX_CHILD_AGE_YEARS);
|
|
661
|
+
case ServiceType.Lounge:
|
|
662
|
+
return this._isChild(traveller, LOUNGES_MAX_CHILD_AGE_YEARS);
|
|
663
|
+
case ServiceType.Hotel:
|
|
664
|
+
case ServiceType.Cab:
|
|
665
|
+
return false;
|
|
666
|
+
default:
|
|
667
|
+
return false;
|
|
668
|
+
}
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
isInfant(traveller: Traveller | Date, travelType: ServiceType) {
|
|
672
|
+
switch (travelType) {
|
|
673
|
+
case ServiceType.Flight:
|
|
674
|
+
return this._isChild(traveller, FLIGHT_MAX_INFANT_AGE_YEARS);
|
|
675
|
+
case ServiceType.Rail:
|
|
676
|
+
return this._isChild(traveller, RAIL_MAX_INFANT_AGE_YEARS);
|
|
677
|
+
// case ServiceType.Eurostar:
|
|
678
|
+
// return this._isChild(traveller, EUROSTAR_MAX_CHILD_AGE_YEARS);
|
|
679
|
+
case ServiceType.Coach:
|
|
680
|
+
return this._isChild(traveller, COACH_MAX_INFANT_AGE_YEARS);
|
|
681
|
+
case ServiceType.Lounge:
|
|
682
|
+
return this._isChild(traveller, LOUNGES_MAX_INFANT_AGE_YEARS);
|
|
683
|
+
case ServiceType.Hotel:
|
|
684
|
+
case ServiceType.Cab:
|
|
685
|
+
return false;
|
|
686
|
+
default:
|
|
687
|
+
return false;
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
getAgeType(traveller: Traveller, travelType: ServiceType): any {
|
|
692
|
+
return this.isChild(traveller, travelType) ? 'C' : 'A';
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
getMaxChildAge(type: ServiceType): string {
|
|
696
|
+
switch (type) {
|
|
697
|
+
case ServiceType.Flight:
|
|
698
|
+
return moment()
|
|
699
|
+
.add(-FLIGHT_MAX_CHILD_AGE_YEARS + 1, 'years')
|
|
700
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
701
|
+
case ServiceType.Rail:
|
|
702
|
+
return moment()
|
|
703
|
+
.add(-RAIL_MAX_CHILD_AGE_YEARS + 1, 'years')
|
|
704
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
705
|
+
// case ServiceType.EUROSTAR:
|
|
706
|
+
// return moment().add(-EUROSTAR_MAX_CHILD_AGE_YEARS + 1, 'years').format(Helpers.MMDDYY_DATE);
|
|
707
|
+
case ServiceType.Coach:
|
|
708
|
+
return moment()
|
|
709
|
+
.add(-COACH_MAX_CHILD_AGE_YEARS + 1, 'years')
|
|
710
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
711
|
+
case ServiceType.Lounge:
|
|
712
|
+
return moment()
|
|
713
|
+
.add(-LOUNGES_MAX_CHILD_AGE_YEARS + 1, 'years')
|
|
714
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
getDefaultAdultAge(type: ServiceType): string {
|
|
719
|
+
switch (type) {
|
|
720
|
+
case ServiceType.Flight:
|
|
721
|
+
return moment()
|
|
722
|
+
.add(-FLIGHT_MAX_CHILD_AGE_YEARS - 10, 'years')
|
|
723
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
724
|
+
case ServiceType.Rail:
|
|
725
|
+
return moment()
|
|
726
|
+
.add(-RAIL_MAX_CHILD_AGE_YEARS - 10, 'years')
|
|
727
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
728
|
+
// case ServiceType.Eurostar:
|
|
729
|
+
// return moment().add(-EUROSTAR_MAX_CHILD_AGE_YEARS - 10, 'years').format(Helpers.MMDDYY_DATE);
|
|
730
|
+
case ServiceType.Coach:
|
|
731
|
+
return moment()
|
|
732
|
+
.add(-COACH_MAX_CHILD_AGE_YEARS - 10, 'years')
|
|
733
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
734
|
+
case ServiceType.Lounge:
|
|
735
|
+
return moment()
|
|
736
|
+
.add(-LOUNGES_MAX_CHILD_AGE_YEARS - 10, 'years')
|
|
737
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
738
|
+
case ServiceType.Hotel:
|
|
739
|
+
case ServiceType.Cab:
|
|
740
|
+
// These types do not have child places so
|
|
741
|
+
return moment()
|
|
742
|
+
.add(-18, 'years')
|
|
743
|
+
.format(BaseHelperRoutines.MMDDYY_DATE);
|
|
744
|
+
}
|
|
745
|
+
return moment().add(-18, 'years').format(BaseHelperRoutines.MMDDYY_DATE);
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
transform(
|
|
749
|
+
array: any[],
|
|
750
|
+
callback: _.MemoVoidArrayIterator<any, any[]>,
|
|
751
|
+
acc: any
|
|
752
|
+
): any[] {
|
|
753
|
+
return _.transform(array, callback, acc);
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
arrayToObject<T extends { [key: string]: any }>(
|
|
757
|
+
array: T[],
|
|
758
|
+
field: string
|
|
759
|
+
): { [key: string]: T } {
|
|
760
|
+
return array
|
|
761
|
+
.filter((data: T) => !!data)
|
|
762
|
+
.reduce((configs: { [key: string]: T }, configItem: T) => {
|
|
763
|
+
if (configItem && configItem[field]) {
|
|
764
|
+
configs[configItem[field]] = configItem;
|
|
765
|
+
return configs;
|
|
766
|
+
}
|
|
767
|
+
}, {});
|
|
768
|
+
}
|
|
769
|
+
|
|
770
|
+
arrayToObjectArray<T extends { [key: string]: any }>(
|
|
771
|
+
array: T[],
|
|
772
|
+
field: string
|
|
773
|
+
): { [key: string]: T[] } {
|
|
774
|
+
return array
|
|
775
|
+
.filter((data: T) => !!data)
|
|
776
|
+
.reduce((configs: { [key: string]: T[] }, configItem: T) => {
|
|
777
|
+
if (configItem && configItem[field]) {
|
|
778
|
+
configs[configItem[field]] = configs[configItem[field]] || [];
|
|
779
|
+
configs[configItem[field]].push(configItem);
|
|
780
|
+
return configs;
|
|
781
|
+
}
|
|
782
|
+
}, {});
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
getTerminals(airport: Airport): string[] {
|
|
786
|
+
return airport.terminals;
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
fieldFromObject(obj: object, field: string): string {
|
|
790
|
+
return (field || '')
|
|
791
|
+
.split('.')
|
|
792
|
+
.reduce((current: Record<string, any>, field1: string) => {
|
|
793
|
+
if (current && current[field1]) {
|
|
794
|
+
return current[field1];
|
|
795
|
+
}
|
|
796
|
+
return '';
|
|
797
|
+
}, obj);
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
mapFieldFromObject<K extends string | number | symbol, T>(field: K) {
|
|
801
|
+
return (obj: Record<K, any>): T => {
|
|
802
|
+
return obj[field];
|
|
803
|
+
};
|
|
804
|
+
}
|
|
805
|
+
|
|
806
|
+
removeNulls<T>(query: T): T {
|
|
807
|
+
return Object.keys(query).reduce((accum: T, key: string) => {
|
|
808
|
+
const value = (query as Record<string, any>)[key];
|
|
809
|
+
const data = Array.isArray(value)
|
|
810
|
+
? value.filter((item: any) => !!item) || null
|
|
811
|
+
: value;
|
|
812
|
+
if (
|
|
813
|
+
(data !== null && data !== undefined && data !== 'null') ||
|
|
814
|
+
(Array.isArray(data) && data.length > 0)
|
|
815
|
+
) {
|
|
816
|
+
(accum as Record<string, any>)[key] = data;
|
|
817
|
+
}
|
|
818
|
+
return accum;
|
|
819
|
+
}, {} as T);
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
getTravellersId(travellers: Traveller[]): string[] {
|
|
823
|
+
if (travellers) {
|
|
824
|
+
return travellers.reduce(
|
|
825
|
+
(previousValue: string[], currentValue: Traveller, idx: number) => {
|
|
826
|
+
return idx === 0 ? [currentValue.id] : [...previousValue, currentValue.id];
|
|
827
|
+
}, []);
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/**
|
|
832
|
+
* loop over the query object param and convert any moment date objects to date-time strings
|
|
833
|
+
* @param query
|
|
834
|
+
* @param debug
|
|
835
|
+
*/
|
|
836
|
+
sanitizeMomentDates(query: any, debug = false): any {
|
|
837
|
+
const sanitizedQuery = { ...query };
|
|
838
|
+
for (const [key, value] of Object.entries(sanitizedQuery)) {
|
|
839
|
+
if (moment.isMoment(value)) {
|
|
840
|
+
sanitizedQuery[key] = sanitizedQuery[key].toISOString();
|
|
841
|
+
}
|
|
842
|
+
}
|
|
843
|
+
if (debug) {
|
|
844
|
+
console.log('-- sanitizeMomentDates() called --');
|
|
845
|
+
console.log('original query: ', query);
|
|
846
|
+
console.log('sanitized query: ', sanitizedQuery);
|
|
847
|
+
}
|
|
848
|
+
return sanitizedQuery;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
toStrings<T>(toFormat: T, schema: Schema): T {
|
|
852
|
+
return Object.entries(schema.properties || {}).reduce(
|
|
853
|
+
(currentValue: T, [key, value]: [string, Schema]): T => {
|
|
854
|
+
const newValue = this._formatValue(
|
|
855
|
+
toFormat[key as keyof T],
|
|
856
|
+
value,
|
|
857
|
+
(schema.required || []).includes(key)
|
|
858
|
+
);
|
|
859
|
+
|
|
860
|
+
if (newValue !== null) {
|
|
861
|
+
currentValue[key as keyof T] = newValue;
|
|
862
|
+
}
|
|
863
|
+
return currentValue;
|
|
864
|
+
},
|
|
865
|
+
{} as T
|
|
866
|
+
);
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
private _formatValue(value: any, schema: Schema, isRequired: boolean): any {
|
|
870
|
+
switch (schema.type) {
|
|
871
|
+
case 'integer':
|
|
872
|
+
const tmp = Number.parseInt(value, 10);
|
|
873
|
+
return Number.isNaN(tmp) ? (isRequired ? 0 : null) : tmp;
|
|
874
|
+
case 'string':
|
|
875
|
+
const tmp1 = value ? value.toString() : null;
|
|
876
|
+
return tmp1 && tmp1.length > 0 ? tmp1 : isRequired ? '' : null;
|
|
877
|
+
case 'object':
|
|
878
|
+
return value ? this.toStrings(value, schema) : isRequired ? {} : null;
|
|
879
|
+
case 'array':
|
|
880
|
+
return value; // TODO write array translation
|
|
881
|
+
default:
|
|
882
|
+
return value;
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
makeTimeWindow(dateTime: moment.Moment, start: number, end: number): string {
|
|
887
|
+
const startTime = dateTime.clone().add(start, 'hour');
|
|
888
|
+
const endTime = dateTime.clone().add(end, 'hour');
|
|
889
|
+
|
|
890
|
+
return this.formatTime(startTime) + '-' + this.formatTime(endTime);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
inRange(tocheck: number, range: MinMax): boolean {
|
|
894
|
+
return tocheck >= range.min && tocheck <= range.max;
|
|
895
|
+
}
|
|
896
|
+
|
|
897
|
+
makeUsers(travellers: Traveller[]): UserPassengerTypeInput[] {
|
|
898
|
+
return travellers.map((traveller: Traveller): UserPassengerTypeInput => {
|
|
899
|
+
return {
|
|
900
|
+
id: traveller.id,
|
|
901
|
+
passengerType: traveller.isChild
|
|
902
|
+
? PassengerType.Child
|
|
903
|
+
: traveller.isInfant
|
|
904
|
+
? PassengerType.Infant
|
|
905
|
+
: PassengerType.Adult
|
|
906
|
+
};
|
|
907
|
+
});
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
makeMomentDayTime(addDay?: number, hh?: number, m?: number) {
|
|
911
|
+
const dt = moment();
|
|
912
|
+
|
|
913
|
+
if (addDay !== undefined) {
|
|
914
|
+
dt.add(addDay, 'day');
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
if (hh !== undefined) {
|
|
918
|
+
dt.set('hours', hh);
|
|
919
|
+
}
|
|
920
|
+
|
|
921
|
+
if (m !== undefined) {
|
|
922
|
+
dt.set('minutes', m);
|
|
923
|
+
}
|
|
924
|
+
|
|
925
|
+
return dt;
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
sanatizeReturns<T>(
|
|
929
|
+
defaults: T,
|
|
930
|
+
suppliedData: Partial<T>,
|
|
931
|
+
momentFields?: (keyof T)[]
|
|
932
|
+
): T {
|
|
933
|
+
const combined: T = Object.assign({}, defaults, suppliedData);
|
|
934
|
+
return (momentFields || []).reduce((current: T, next: keyof T) => {
|
|
935
|
+
const value = (current as any)[next];
|
|
936
|
+
(current as any)[next] = !value
|
|
937
|
+
? moment()
|
|
938
|
+
: typeof value === 'string'
|
|
939
|
+
? moment(value)
|
|
940
|
+
: value;
|
|
941
|
+
return current;
|
|
942
|
+
}, combined);
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
miIsValid(toCheck: ManagementInfoAndIsValid[]) {
|
|
946
|
+
return (
|
|
947
|
+
toCheck.length === 0 ||
|
|
948
|
+
!!toCheck.find((miItem: ManagementInfoAndIsValid) => {
|
|
949
|
+
return miItem.isValid();
|
|
950
|
+
})
|
|
951
|
+
);
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
isMiValid(
|
|
955
|
+
miPerItem: ManagementInfoAndIsValid[],
|
|
956
|
+
miPerUser: {
|
|
957
|
+
[key: string]: {
|
|
958
|
+
managementInfo: ManagementInfoAndIsValid[];
|
|
959
|
+
};
|
|
960
|
+
}
|
|
961
|
+
): boolean {
|
|
962
|
+
const userMis = Object.values(miPerUser || {});
|
|
963
|
+
return (
|
|
964
|
+
this.miIsValid(miPerItem) &&
|
|
965
|
+
(userMis.length === 0 ||
|
|
966
|
+
!!userMis.find(
|
|
967
|
+
(userMis1: { managementInfo: ManagementInfoAndIsValid[] }) => {
|
|
968
|
+
return this.miIsValid(userMis1.managementInfo);
|
|
969
|
+
}
|
|
970
|
+
))
|
|
971
|
+
);
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
needsMi(basket: BasketDetails, needsToViewMi: boolean): boolean {
|
|
975
|
+
return (
|
|
976
|
+
basket.basketInfoMiDetails.length > 0 &&
|
|
977
|
+
(needsToViewMi ||
|
|
978
|
+
!basket.basketInfoMiDetails.find(
|
|
979
|
+
(miDetail: BasketItemManagementInfo): boolean => {
|
|
980
|
+
return this.isMiValid(miDetail.miPerItem, miDetail.miPerUser);
|
|
981
|
+
}
|
|
982
|
+
))
|
|
983
|
+
);
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
findService(services: UserServices, id: string): Service {
|
|
987
|
+
return Object.values(services).reduce(
|
|
988
|
+
(current: Service, service1: Service[]): Service => {
|
|
989
|
+
return (
|
|
990
|
+
current ||
|
|
991
|
+
service1.find((service2: Service): boolean => {
|
|
992
|
+
return service2.id === id;
|
|
993
|
+
})
|
|
994
|
+
);
|
|
995
|
+
},
|
|
996
|
+
null as Service
|
|
997
|
+
);
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
allTrue(
|
|
1001
|
+
suppInfo: SupplementaryBookingInfoInterface[],
|
|
1002
|
+
filter: (suppInfo: SupplementaryBookingInfoInterface) => boolean
|
|
1003
|
+
): boolean {
|
|
1004
|
+
return suppInfo.filter(filter).length === suppInfo.length;
|
|
1005
|
+
}
|
|
1006
|
+
|
|
1007
|
+
joinFromAttribute<T>(
|
|
1008
|
+
joinCharacter: string,
|
|
1009
|
+
attribute: keyof T,
|
|
1010
|
+
array: T[]
|
|
1011
|
+
): string {
|
|
1012
|
+
return array.map((item: T) => item[attribute]).join(joinCharacter);
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
/**
|
|
1016
|
+
* @description - split up an array into equal parts
|
|
1017
|
+
* @param array - the array to split up
|
|
1018
|
+
* @param size - the size of the constituant parts
|
|
1019
|
+
* @param includeRemainder - wether or not to include any remaing results - default true
|
|
1020
|
+
*/
|
|
1021
|
+
splitUpArray(
|
|
1022
|
+
array: any[],
|
|
1023
|
+
size: number,
|
|
1024
|
+
includeRemainder: boolean = true
|
|
1025
|
+
): any[] {
|
|
1026
|
+
const arrayCopy = _.cloneDeep(array); // lodash clone deep
|
|
1027
|
+
let newArray = [];
|
|
1028
|
+
|
|
1029
|
+
if (arrayCopy.length > size) {
|
|
1030
|
+
while (arrayCopy.length >= size) {
|
|
1031
|
+
newArray.push(arrayCopy.splice(0, size));
|
|
1032
|
+
}
|
|
1033
|
+
|
|
1034
|
+
// add any remaining
|
|
1035
|
+
if (arrayCopy.length && includeRemainder) {
|
|
1036
|
+
newArray.push(arrayCopy);
|
|
1037
|
+
}
|
|
1038
|
+
} else {
|
|
1039
|
+
newArray = arrayCopy;
|
|
1040
|
+
}
|
|
1041
|
+
|
|
1042
|
+
return newArray;
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
@Memorise()
|
|
1046
|
+
getTimeDifference(depDateTime: string, arrDateTime: string): number {
|
|
1047
|
+
return moment(depDateTime).diff(moment(arrDateTime), 'minutes');
|
|
1048
|
+
}
|
|
1049
|
+
|
|
1050
|
+
@Memorise()
|
|
1051
|
+
dayDifference(dept: string, arr: string): string {
|
|
1052
|
+
const diff = moment(arr)
|
|
1053
|
+
.startOf('day')
|
|
1054
|
+
.diff(moment(dept).startOf('day'), 'day');
|
|
1055
|
+
return diff > 0 ? diff.toString() : '';
|
|
1056
|
+
}
|
|
1057
|
+
|
|
1058
|
+
@Memorise()
|
|
1059
|
+
makeFareRules(flight: FlightItinerary, direction: FlightDirectionEnum) {
|
|
1060
|
+
const flights =
|
|
1061
|
+
direction === FlightDirectionEnum.Outbound
|
|
1062
|
+
? flight.outboundFlights
|
|
1063
|
+
: flight.inboundFlights;
|
|
1064
|
+
const rules = flights.reduce(
|
|
1065
|
+
(current: FareConditions, next: FlightJourney) => {
|
|
1066
|
+
current.cancellation = current.cancellation.concat(
|
|
1067
|
+
next.fareConditions?.cancellation || []
|
|
1068
|
+
);
|
|
1069
|
+
current.change = current.change.concat(
|
|
1070
|
+
next.fareConditions?.change || []
|
|
1071
|
+
);
|
|
1072
|
+
current.noShow = current.noShow.concat(
|
|
1073
|
+
next.fareConditions?.noShow || []
|
|
1074
|
+
);
|
|
1075
|
+
current.upgrade = current.upgrade.concat(
|
|
1076
|
+
next.fareConditions?.upgrade || []
|
|
1077
|
+
);
|
|
1078
|
+
current.other = current.other.concat(next.fareConditions?.other || []);
|
|
1079
|
+
return current;
|
|
1080
|
+
},
|
|
1081
|
+
{
|
|
1082
|
+
cancellation: [],
|
|
1083
|
+
change: [],
|
|
1084
|
+
noShow: [],
|
|
1085
|
+
upgrade: [],
|
|
1086
|
+
other: []
|
|
1087
|
+
}
|
|
1088
|
+
);
|
|
1089
|
+
return { rules, flights };
|
|
1090
|
+
}
|
|
1091
|
+
|
|
1092
|
+
/**
|
|
1093
|
+
* @desc - generates ics file content
|
|
1094
|
+
*/
|
|
1095
|
+
generateIcsFileContents(basketItems: BasketItem[]): string {
|
|
1096
|
+
const icsBodyContent = this.generateIcsFileBodyContent(basketItems);
|
|
1097
|
+
return [
|
|
1098
|
+
'BEGIN:VCALENDAR\r\n',
|
|
1099
|
+
'PRODID:-//Micros Travel//SABS Corporate - MMXIII//EN\r\n',
|
|
1100
|
+
'VERSION:2.0\r\n',
|
|
1101
|
+
'METHOD:REQUEST\r\n',
|
|
1102
|
+
icsBodyContent,
|
|
1103
|
+
'END:VCALENDAR\r\n'
|
|
1104
|
+
].join('');
|
|
1105
|
+
}
|
|
1106
|
+
|
|
1107
|
+
/**
|
|
1108
|
+
* @desc - generates ics file body content based on the provided basketItems param
|
|
1109
|
+
*/
|
|
1110
|
+
generateIcsFileBodyContent(basketItems: BasketItem[]): string {
|
|
1111
|
+
// TODO: currently only basket items with ServiceType.Lounge are handled. See below to TODOs for remaining tasks
|
|
1112
|
+
const bodyContent: string[] = [];
|
|
1113
|
+
|
|
1114
|
+
// generate calendar data for each basket item
|
|
1115
|
+
basketItems.map((basketItem, index) => {
|
|
1116
|
+
const data = {
|
|
1117
|
+
dStart: '',
|
|
1118
|
+
dEnd: '',
|
|
1119
|
+
locationFrom: '',
|
|
1120
|
+
locationTo: '',
|
|
1121
|
+
basketId: '',
|
|
1122
|
+
description: '',
|
|
1123
|
+
serviceType: '',
|
|
1124
|
+
summary: ''
|
|
1125
|
+
};
|
|
1126
|
+
|
|
1127
|
+
const { type } = basketItem.service;
|
|
1128
|
+
|
|
1129
|
+
// populate data object depending on the service type in the basket
|
|
1130
|
+
switch (type) {
|
|
1131
|
+
case ServiceType.Lounge:
|
|
1132
|
+
const {
|
|
1133
|
+
adults,
|
|
1134
|
+
children,
|
|
1135
|
+
bookingThirdPartyReference,
|
|
1136
|
+
detail,
|
|
1137
|
+
service
|
|
1138
|
+
} = basketItem;
|
|
1139
|
+
data.basketId = basketItem.id;
|
|
1140
|
+
data.dStart = detail?.arrivalDatetime;
|
|
1141
|
+
data.dEnd = '';
|
|
1142
|
+
data.summary = `Airport Lounge - ${detail.name}`;
|
|
1143
|
+
data.serviceType = service.type.toLowerCase();
|
|
1144
|
+
data.description = [
|
|
1145
|
+
`Lounge: ${detail.name}\r\n`,
|
|
1146
|
+
`Starts: ${detail.arrivalDatetime}\r\n`,
|
|
1147
|
+
`Adults: ${adults}\r\n`,
|
|
1148
|
+
`Children: ${children}\r\n`,
|
|
1149
|
+
`Booking Ref: ${bookingThirdPartyReference}`
|
|
1150
|
+
].join('');
|
|
1151
|
+
break;
|
|
1152
|
+
case ServiceType.Cab:
|
|
1153
|
+
// TODO: handle this case
|
|
1154
|
+
// hint: see logic in icalendar.component.ts file on lighting current version
|
|
1155
|
+
case ServiceType.Car:
|
|
1156
|
+
// TODO: handle this case
|
|
1157
|
+
case ServiceType.Coach:
|
|
1158
|
+
// TODO: handle this case
|
|
1159
|
+
case ServiceType.FastTrack:
|
|
1160
|
+
// TODO: handle this case
|
|
1161
|
+
case ServiceType.Flight:
|
|
1162
|
+
// TODO: handle this case
|
|
1163
|
+
case ServiceType.Hotel:
|
|
1164
|
+
// TODO: handle this case
|
|
1165
|
+
case ServiceType.InternationalRail:
|
|
1166
|
+
// TODO: handle this case
|
|
1167
|
+
case ServiceType.Parking:
|
|
1168
|
+
// TODO: handle this case
|
|
1169
|
+
case ServiceType.Rail:
|
|
1170
|
+
// TODO: handle this case
|
|
1171
|
+
}
|
|
1172
|
+
|
|
1173
|
+
bodyContent.push(
|
|
1174
|
+
[
|
|
1175
|
+
'BEGIN:VEVENT\r\n',
|
|
1176
|
+
data.dStart
|
|
1177
|
+
? `DTSTART:${moment(data.dStart).format('YYYYMMDDTHHmmss')}\r\n`
|
|
1178
|
+
: '',
|
|
1179
|
+
data.dEnd
|
|
1180
|
+
? `DTEND:${moment(data.dEnd).format('YYYYMMDDTHHmmss')}\r\n`
|
|
1181
|
+
: '',
|
|
1182
|
+
'ORGANIZER;CN="Do not reply to this email":mailto:do_not_reply@sabscorp.com\r\n',
|
|
1183
|
+
data.locationTo && data.locationFrom
|
|
1184
|
+
? `LOCATION: ${data.locationTo} to ${data.locationFrom} \r\n`
|
|
1185
|
+
: '',
|
|
1186
|
+
'TRANSP:OPAQUE\r\n',
|
|
1187
|
+
'SEQUENCE:0\r\n',
|
|
1188
|
+
`UID:${data.serviceType}_${index}_${data.basketId}@sabscorp.com\r\n`,
|
|
1189
|
+
`DTSTAMP:${moment().format('YYYYMMDDTHHmmss')}\r\n`,
|
|
1190
|
+
`DESCRIPTION:${data.description}\r\n`,
|
|
1191
|
+
`SUMMARY:${data.summary}\r\n`,
|
|
1192
|
+
'END:VEVENT\r\n'
|
|
1193
|
+
].join('')
|
|
1194
|
+
);
|
|
1195
|
+
});
|
|
1196
|
+
|
|
1197
|
+
return bodyContent.join('');
|
|
1198
|
+
}
|
|
1199
|
+
|
|
1200
|
+
/**
|
|
1201
|
+
* @desc - creates an element in memory and triggers click event to download ics file
|
|
1202
|
+
*/
|
|
1203
|
+
downloadIcs(filename: string, text: string) {
|
|
1204
|
+
const element = document.createElement('a');
|
|
1205
|
+
element.setAttribute(
|
|
1206
|
+
'href',
|
|
1207
|
+
'data:text/plain;charset=utf-8,' + encodeURIComponent(text)
|
|
1208
|
+
);
|
|
1209
|
+
element.setAttribute('download', filename);
|
|
1210
|
+
element.setAttribute('target', '_blank');
|
|
1211
|
+
element.style.display = 'none';
|
|
1212
|
+
element.click();
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
/**
|
|
1216
|
+
* @description - split a string on capitals
|
|
1217
|
+
* @param rawString - the string we want to split
|
|
1218
|
+
* @param join - whether or not to joing the split into one string, seperated by a space
|
|
1219
|
+
* @returns string/string[]
|
|
1220
|
+
*/
|
|
1221
|
+
splitStringOnCapitals(
|
|
1222
|
+
rawString: string,
|
|
1223
|
+
join: boolean = false
|
|
1224
|
+
): string | string[] {
|
|
1225
|
+
const splitString = rawString.split(/(?=[A-Z])/);
|
|
1226
|
+
|
|
1227
|
+
if (join) {
|
|
1228
|
+
return splitString.join(' ');
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
return splitString;
|
|
1232
|
+
}
|
|
1233
|
+
}
|