@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.
Files changed (420) hide show
  1. package/.editorconfig +13 -0
  2. package/.gitmodules +0 -0
  3. package/.vscode/settings.json +4 -0
  4. package/README.md +27 -0
  5. package/angular.json +45 -0
  6. package/audit.config.json +6 -0
  7. package/codegen.yml +18 -0
  8. package/ng-package.json +7 -0
  9. package/package.json +84 -0
  10. package/projects/obtservices/README.md +24 -0
  11. package/projects/obtservices/angular/package.json +3 -0
  12. package/projects/obtservices/angular/src/classes.ts +3 -0
  13. package/projects/obtservices/angular/src/components/basket-panel.ts +139 -0
  14. package/projects/obtservices/angular/src/components/with-component.ts +40 -0
  15. package/projects/obtservices/angular/src/components.ts +2 -0
  16. package/projects/obtservices/angular/src/data.ts +5 -0
  17. package/projects/obtservices/angular/src/fetchers.ts +32 -0
  18. package/projects/obtservices/angular/src/lib/vendor/classes/environment.ts +5 -0
  19. package/projects/obtservices/angular/src/lib/vendor/classes/event-messenager.ts +11 -0
  20. package/projects/obtservices/angular/src/lib/vendor/classes/helpers.ts +87 -0
  21. package/projects/obtservices/angular/src/lib/vendor/data/airports.data.json +5508 -0
  22. package/projects/obtservices/angular/src/lib/vendor/data/animations.ts +38 -0
  23. package/projects/obtservices/angular/src/lib/vendor/data/booking-expected-responses.json +100 -0
  24. package/projects/obtservices/angular/src/lib/vendor/data/cities.data.json +31499 -0
  25. package/projects/obtservices/angular/src/lib/vendor/data/countries.json +1212 -0
  26. package/projects/obtservices/angular/src/lib/vendor/data/flight-booking.data.json +136 -0
  27. package/projects/obtservices/angular/src/lib/vendor/data/postcodes1.json +194 -0
  28. package/projects/obtservices/angular/src/lib/vendor/data/rail_addresses.json +2524 -0
  29. package/projects/obtservices/angular/src/lib/vendor/fetchers/basket-fetcher.ts +14 -0
  30. package/projects/obtservices/angular/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +15 -0
  31. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +17 -0
  32. package/projects/obtservices/angular/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +16 -0
  33. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +16 -0
  34. package/projects/obtservices/angular/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +16 -0
  35. package/projects/obtservices/angular/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +16 -0
  36. package/projects/obtservices/angular/src/lib/vendor/fetchers/flight-quote.fetcher.ts +16 -0
  37. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +16 -0
  38. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +16 -0
  39. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +18 -0
  40. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +16 -0
  41. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +16 -0
  42. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +16 -0
  43. package/projects/obtservices/angular/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +16 -0
  44. package/projects/obtservices/angular/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +16 -0
  45. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +17 -0
  46. package/projects/obtservices/angular/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +16 -0
  47. package/projects/obtservices/angular/src/lib/vendor/fetchers/irl-quote-fetcher.ts +16 -0
  48. package/projects/obtservices/angular/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +16 -0
  49. package/projects/obtservices/angular/src/lib/vendor/fetchers/parking-quote-fetcher.ts +16 -0
  50. package/projects/obtservices/angular/src/lib/vendor/fetchers/rail-quote-fetcher.ts +16 -0
  51. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airlines-fetcher.ts +14 -0
  52. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-airports-fetcher.ts +14 -0
  53. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-cities.fetcher.ts +16 -0
  54. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +14 -0
  55. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-depots.fetcher.ts +18 -0
  56. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +16 -0
  57. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +16 -0
  58. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +16 -0
  59. package/projects/obtservices/angular/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +16 -0
  60. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-addresses.fetcher.ts +16 -0
  61. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-fetcher.ts +14 -0
  62. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-message.fetcher.ts +16 -0
  63. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-products-fetcher.ts +16 -0
  64. package/projects/obtservices/angular/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +16 -0
  65. package/projects/obtservices/angular/src/lib/vendor/services/enterprise-basket.service.ts +133 -0
  66. package/projects/obtservices/angular/src/lib/vendor/services/hotel-avallibility.service.ts +19 -0
  67. package/projects/obtservices/angular/src/lib/vendor/services/http-call.service.ts +252 -0
  68. package/projects/obtservices/angular/src/lib/vendor/services/logon.service.ts +40 -0
  69. package/projects/obtservices/angular/src/lib/vendor/services/modal-opener.service.ts +9 -0
  70. package/projects/obtservices/angular/src/lib/vendor/services/my-bookings.service.ts +21 -0
  71. package/projects/obtservices/angular/src/lib/vendor/services/route-happy.service.ts +11 -0
  72. package/projects/obtservices/angular/src/lib/vendor/services/search.service.ts +213 -0
  73. package/projects/obtservices/angular/src/lib/vendor/services/storage.service.ts +82 -0
  74. package/projects/obtservices/angular/src/lib/vendor/services/user.service.ts +36 -0
  75. package/projects/obtservices/angular/src/lib/vendor/services/webtoken.service.ts +62 -0
  76. package/projects/obtservices/angular/src/lib/vendor/testers/postcode-validate.tester.ts +14 -0
  77. package/projects/obtservices/angular/src/lib/vendor/testers/validate-mi-free-value.tester.ts +14 -0
  78. package/projects/obtservices/angular/src/lib/vendor/types/graphql.angular.types.ts +11081 -0
  79. package/projects/obtservices/angular/src/lib/vendor/updaters/accept-new-price.updater.ts +14 -0
  80. package/projects/obtservices/angular/src/lib/vendor/updaters/add-item-to-basket.updater.ts +14 -0
  81. package/projects/obtservices/angular/src/lib/vendor/updaters/addUserToBasketItem.ts +14 -0
  82. package/projects/obtservices/angular/src/lib/vendor/updaters/book-basket-updater.ts +14 -0
  83. package/projects/obtservices/angular/src/lib/vendor/updaters/create-basket-updater.ts +14 -0
  84. package/projects/obtservices/angular/src/lib/vendor/updaters/move-basket-item-to-basket.ts +14 -0
  85. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-basket-updater.ts +14 -0
  86. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +14 -0
  87. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-recent-search.updater.ts +14 -0
  88. package/projects/obtservices/angular/src/lib/vendor/updaters/remove-user-address.updater.ts +14 -0
  89. package/projects/obtservices/angular/src/lib/vendor/updaters/revalidate-basket-updater.ts +14 -0
  90. package/projects/obtservices/angular/src/lib/vendor/updaters/save-recent-search.updater.ts +14 -0
  91. package/projects/obtservices/angular/src/lib/vendor/updaters/save-user-address.updater.ts +11 -0
  92. package/projects/obtservices/angular/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +14 -0
  93. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +14 -0
  94. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-group.ts +14 -0
  95. package/projects/obtservices/angular/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +15 -0
  96. package/projects/obtservices/angular/src/lib/vendor/updaters/set-payment-option.updater.ts +15 -0
  97. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-notes-updater.ts +14 -0
  98. package/projects/obtservices/angular/src/lib/vendor/updaters/update-basket-title-updater.ts +14 -0
  99. package/projects/obtservices/angular/src/obtservices.module.ts +131 -0
  100. package/projects/obtservices/angular/src/public_api.ts +8 -0
  101. package/projects/obtservices/angular/src/services.ts +11 -0
  102. package/projects/obtservices/angular/src/testers.ts +2 -0
  103. package/projects/obtservices/angular/src/types.ts +1 -0
  104. package/projects/obtservices/angular/src/updaters.ts +13 -0
  105. package/projects/obtservices/base/package.json +3 -0
  106. package/projects/obtservices/base/src/classes.ts +27 -0
  107. package/projects/obtservices/base/src/custom.d.ts +3 -0
  108. package/projects/obtservices/base/src/fetchers.ts +36 -0
  109. package/projects/obtservices/base/src/interfaces.ts +29 -0
  110. package/projects/obtservices/base/src/lib/vendor/classes/base-enterprise.ts +126 -0
  111. package/projects/obtservices/base/src/lib/vendor/classes/base-network-call.ts +40 -0
  112. package/projects/obtservices/base/src/lib/vendor/classes/basket-info-mi-details.impl.ts +68 -0
  113. package/projects/obtservices/base/src/lib/vendor/classes/bookable-basket.ts +343 -0
  114. package/projects/obtservices/base/src/lib/vendor/classes/cabhire-enterprise-search.ts +907 -0
  115. package/projects/obtservices/base/src/lib/vendor/classes/carhire-enterprise-search.ts +1597 -0
  116. package/projects/obtservices/base/src/lib/vendor/classes/empty-enterprise-search.ts +75 -0
  117. package/projects/obtservices/base/src/lib/vendor/classes/enviroment.ts +25 -0
  118. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-enterprise-search.ts +2126 -0
  119. package/projects/obtservices/base/src/lib/vendor/classes/eurostar-search-type.enum.ts +4 -0
  120. package/projects/obtservices/base/src/lib/vendor/classes/event-messenager.ts +23 -0
  121. package/projects/obtservices/base/src/lib/vendor/classes/flight-enterprise-search.ts +2399 -0
  122. package/projects/obtservices/base/src/lib/vendor/classes/flight-search-type.enum.ts +5 -0
  123. package/projects/obtservices/base/src/lib/vendor/classes/helpers.ts +1233 -0
  124. package/projects/obtservices/base/src/lib/vendor/classes/hotel-enterprise-search.ts +1370 -0
  125. package/projects/obtservices/base/src/lib/vendor/classes/irl-enterprise-search.ts +1380 -0
  126. package/projects/obtservices/base/src/lib/vendor/classes/limited-cache.class.ts +70 -0
  127. package/projects/obtservices/base/src/lib/vendor/classes/lounges-enterprise-search.ts +444 -0
  128. package/projects/obtservices/base/src/lib/vendor/classes/management-info-and-valid.ts +268 -0
  129. package/projects/obtservices/base/src/lib/vendor/classes/modal-types.enum.ts +28 -0
  130. package/projects/obtservices/base/src/lib/vendor/classes/parking-enterprise-search.ts +541 -0
  131. package/projects/obtservices/base/src/lib/vendor/classes/rail-direction.enum.ts +4 -0
  132. package/projects/obtservices/base/src/lib/vendor/classes/rail-enterprise-search.ts +1751 -0
  133. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-request.ts +146 -0
  134. package/projects/obtservices/base/src/lib/vendor/classes/routehappy-response.ts +128 -0
  135. package/projects/obtservices/base/src/lib/vendor/classes/supplementary-booking-info-impl.ts +375 -0
  136. package/projects/obtservices/base/src/lib/vendor/classes/user-favourite.enum.ts +12 -0
  137. package/projects/obtservices/base/src/lib/vendor/classes/validator.checker.ts +7 -0
  138. package/projects/obtservices/base/src/lib/vendor/data/airports.data.json +5508 -0
  139. package/projects/obtservices/base/src/lib/vendor/data/booking-expected-responses.json +100 -0
  140. package/projects/obtservices/base/src/lib/vendor/data/cities.data.json +31499 -0
  141. package/projects/obtservices/base/src/lib/vendor/data/countries.json +1212 -0
  142. package/projects/obtservices/base/src/lib/vendor/data/euro-stations.json +30 -0
  143. package/projects/obtservices/base/src/lib/vendor/data/flight-booking.data.json +136 -0
  144. package/projects/obtservices/base/src/lib/vendor/data/postcodes1.json +194 -0
  145. package/projects/obtservices/base/src/lib/vendor/data/rail_addresses.json +2524 -0
  146. package/projects/obtservices/base/src/lib/vendor/fetchers/basket-fetcher.ts +29 -0
  147. package/projects/obtservices/base/src/lib/vendor/fetchers/cabhire-quote-fetcher.ts +34 -0
  148. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-availability-detail.fetcher.ts +35 -0
  149. package/projects/obtservices/base/src/lib/vendor/fetchers/carhire-quote-fetcher.ts +34 -0
  150. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-office-names.fetcher.ts +34 -0
  151. package/projects/obtservices/base/src/lib/vendor/fetchers/conferma-quicklist.fetcher.ts +35 -0
  152. package/projects/obtservices/base/src/lib/vendor/fetchers/eurostar-quote.fetcher.ts +35 -0
  153. package/projects/obtservices/base/src/lib/vendor/fetchers/flight-quote.fetcher.ts +35 -0
  154. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-cards.fetcher.ts +35 -0
  155. package/projects/obtservices/base/src/lib/vendor/fetchers/get-rail-station.fetcher.ts +35 -0
  156. package/projects/obtservices/base/src/lib/vendor/fetchers/get-risk-alerts.fetcher.ts +35 -0
  157. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-company-offices.fetcher.ts +34 -0
  158. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-current-carbon-allowance.fetcher.ts +35 -0
  159. package/projects/obtservices/base/src/lib/vendor/fetchers/get-user-recent-searches.fetcher.ts +36 -0
  160. package/projects/obtservices/base/src/lib/vendor/fetchers/get-users-baskets-fetcher.ts +33 -0
  161. package/projects/obtservices/base/src/lib/vendor/fetchers/getMiAutoSugestions.fetcher.ts +35 -0
  162. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-avaliability-fetcher.ts +53 -0
  163. package/projects/obtservices/base/src/lib/vendor/fetchers/hotel-quote-fetcher.ts +35 -0
  164. package/projects/obtservices/base/src/lib/vendor/fetchers/irl-quote-fetcher.ts +34 -0
  165. package/projects/obtservices/base/src/lib/vendor/fetchers/list-fetchable-enterprise.ts +59 -0
  166. package/projects/obtservices/base/src/lib/vendor/fetchers/lounge-quote.fetcher.ts +34 -0
  167. package/projects/obtservices/base/src/lib/vendor/fetchers/object-fetchable-enterprise.ts +20 -0
  168. package/projects/obtservices/base/src/lib/vendor/fetchers/parking-quote-fetcher.ts +34 -0
  169. package/projects/obtservices/base/src/lib/vendor/fetchers/rail-quote-fetcher.ts +34 -0
  170. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airlines.fetcher.ts +30 -0
  171. package/projects/obtservices/base/src/lib/vendor/fetchers/search-airports-fetcher.ts +29 -0
  172. package/projects/obtservices/base/src/lib/vendor/fetchers/search-cities.fetcher.ts +34 -0
  173. package/projects/obtservices/base/src/lib/vendor/fetchers/search-conferma-cities.fetcher.ts +32 -0
  174. package/projects/obtservices/base/src/lib/vendor/fetchers/search-depots.fetcher.ts +34 -0
  175. package/projects/obtservices/base/src/lib/vendor/fetchers/search-hotel-chains.fetcher.ts +34 -0
  176. package/projects/obtservices/base/src/lib/vendor/fetchers/search-postcodes.fetcher.ts +37 -0
  177. package/projects/obtservices/base/src/lib/vendor/fetchers/search-rail-stations.fetcher.ts +35 -0
  178. package/projects/obtservices/base/src/lib/vendor/fetchers/search-users-can-book-for-fetcher.ts +35 -0
  179. package/projects/obtservices/base/src/lib/vendor/fetchers/user-addresses.fetcher.ts +34 -0
  180. package/projects/obtservices/base/src/lib/vendor/fetchers/user-fetcher.ts +27 -0
  181. package/projects/obtservices/base/src/lib/vendor/fetchers/user-message.fetcher.ts +34 -0
  182. package/projects/obtservices/base/src/lib/vendor/fetchers/user-products-fetcher.ts +35 -0
  183. package/projects/obtservices/base/src/lib/vendor/fetchers/user-ui-configs-fetcher.ts +35 -0
  184. package/projects/obtservices/base/src/lib/vendor/interfaces/Icabhire-enterprise-search.ts +174 -0
  185. package/projects/obtservices/base/src/lib/vendor/interfaces/Icarhire-enterprise-search.ts +143 -0
  186. package/projects/obtservices/base/src/lib/vendor/interfaces/Ienterprise-basket.service.ts +127 -0
  187. package/projects/obtservices/base/src/lib/vendor/interfaces/Ieurostar-enterprise-search.ts +197 -0
  188. package/projects/obtservices/base/src/lib/vendor/interfaces/Iflight-enterprise-search.ts +196 -0
  189. package/projects/obtservices/base/src/lib/vendor/interfaces/Ihotel-enterprise-search.ts +219 -0
  190. package/projects/obtservices/base/src/lib/vendor/interfaces/Iirl-enterprise-search.ts +135 -0
  191. package/projects/obtservices/base/src/lib/vendor/interfaces/Ilounges-enterprise-search.ts +58 -0
  192. package/projects/obtservices/base/src/lib/vendor/interfaces/Imybookings.service.ts +27 -0
  193. package/projects/obtservices/base/src/lib/vendor/interfaces/Iparking-enterprise-search.ts +72 -0
  194. package/projects/obtservices/base/src/lib/vendor/interfaces/Irail-enterprise-search.ts +161 -0
  195. package/projects/obtservices/base/src/lib/vendor/interfaces/Isearch.service.ts +178 -0
  196. package/projects/obtservices/base/src/lib/vendor/interfaces/Isupplementary-booking-info-impl.ts +63 -0
  197. package/projects/obtservices/base/src/lib/vendor/interfaces/Iuser.service.ts +87 -0
  198. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-classes.interface.ts +8 -0
  199. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-filters.interface.ts +11 -0
  200. package/projects/obtservices/base/src/lib/vendor/interfaces/car-hire-sort.interface.ts +4 -0
  201. package/projects/obtservices/base/src/lib/vendor/interfaces/cheapest-price.ts +4 -0
  202. package/projects/obtservices/base/src/lib/vendor/interfaces/code-name.ts +4 -0
  203. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-filters.interface.ts +41 -0
  204. package/projects/obtservices/base/src/lib/vendor/interfaces/flight-multi-destination.interface.ts +8 -0
  205. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-airport-express-stations.interface.ts +4 -0
  206. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-basket-item.interface.ts +79 -0
  207. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-journey-leg.interface.ts +6 -0
  208. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-recent-search-args.interface.ts +20 -0
  209. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-selected-ticket.interface.ts +11 -0
  210. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-group.interface.ts +29 -0
  211. package/projects/obtservices/base/src/lib/vendor/interfaces/rail-ticket-groups.interface.ts +5 -0
  212. package/projects/obtservices/base/src/lib/vendor/interfaces/search-objects.interface.ts +17 -0
  213. package/projects/obtservices/base/src/lib/vendor/interfaces/select-filter.interface.ts +5 -0
  214. package/projects/obtservices/base/src/lib/vendor/interfaces/user.data.ts +22 -0
  215. package/projects/obtservices/base/src/lib/vendor/interfaces/value-display.ts +4 -0
  216. package/projects/obtservices/base/src/lib/vendor/models/login.model.ts +97 -0
  217. package/projects/obtservices/base/src/lib/vendor/models/regexp.model.ts +13 -0
  218. package/projects/obtservices/base/src/lib/vendor/models/traveller.object.ts +61 -0
  219. package/projects/obtservices/base/src/lib/vendor/services/enterprise-basket.service.ts +1150 -0
  220. package/projects/obtservices/base/src/lib/vendor/services/hotel-avallibility.service.ts +251 -0
  221. package/projects/obtservices/base/src/lib/vendor/services/http-call.service.ts +57 -0
  222. package/projects/obtservices/base/src/lib/vendor/services/logon.service.ts +245 -0
  223. package/projects/obtservices/base/src/lib/vendor/services/modal-opener.service.ts +30 -0
  224. package/projects/obtservices/base/src/lib/vendor/services/my-bookings.service.ts +184 -0
  225. package/projects/obtservices/base/src/lib/vendor/services/routehappy.service.ts +275 -0
  226. package/projects/obtservices/base/src/lib/vendor/services/search.service.ts +2026 -0
  227. package/projects/obtservices/base/src/lib/vendor/services/storage.service.ts +15 -0
  228. package/projects/obtservices/base/src/lib/vendor/services/url.service.ts +12 -0
  229. package/projects/obtservices/base/src/lib/vendor/services/user.service.ts +354 -0
  230. package/projects/obtservices/base/src/lib/vendor/services/webtoken.service.ts +66 -0
  231. package/projects/obtservices/base/src/lib/vendor/testers/base.tester.ts +18 -0
  232. package/projects/obtservices/base/src/lib/vendor/testers/postcode-validate.tester.ts +24 -0
  233. package/projects/obtservices/base/src/lib/vendor/testers/validate-mi-free-value.tester.ts +23 -0
  234. package/projects/obtservices/base/src/lib/vendor/types/graphql.types.ts +6184 -0
  235. package/projects/obtservices/base/src/lib/vendor/types/types.ts +630 -0
  236. package/projects/obtservices/base/src/lib/vendor/updaters/accept-new-price.updater.ts +31 -0
  237. package/projects/obtservices/base/src/lib/vendor/updaters/add-item-to-basket.updater.ts +29 -0
  238. package/projects/obtservices/base/src/lib/vendor/updaters/addUserToBasketItem.ts +30 -0
  239. package/projects/obtservices/base/src/lib/vendor/updaters/book-basket-updater.ts +28 -0
  240. package/projects/obtservices/base/src/lib/vendor/updaters/create-basket-updater.ts +29 -0
  241. package/projects/obtservices/base/src/lib/vendor/updaters/move-basket-item-to-basket.ts +30 -0
  242. package/projects/obtservices/base/src/lib/vendor/updaters/object-updater-enterprise.ts +20 -0
  243. package/projects/obtservices/base/src/lib/vendor/updaters/remove-basket-updater.ts +29 -0
  244. package/projects/obtservices/base/src/lib/vendor/updaters/remove-item-from-basket.updater.ts +28 -0
  245. package/projects/obtservices/base/src/lib/vendor/updaters/remove-recent-search-updater.ts +29 -0
  246. package/projects/obtservices/base/src/lib/vendor/updaters/remove-user-address-updater.ts +29 -0
  247. package/projects/obtservices/base/src/lib/vendor/updaters/revalidate-basket-updater.ts +29 -0
  248. package/projects/obtservices/base/src/lib/vendor/updaters/save-recent-search-updater.ts +30 -0
  249. package/projects/obtservices/base/src/lib/vendor/updaters/save-user-address.updater.ts +30 -0
  250. package/projects/obtservices/base/src/lib/vendor/updaters/send-basket-for-approval.updater.ts +31 -0
  251. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-lead-passenger.updater.ts +30 -0
  252. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-group.ts +32 -0
  253. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-mi-value-updater.ts +30 -0
  254. package/projects/obtservices/base/src/lib/vendor/updaters/set-basket-item-paymenr-option.updater.ts +28 -0
  255. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-notes-updater.ts +30 -0
  256. package/projects/obtservices/base/src/lib/vendor/updaters/update-basket-title-updater.ts +30 -0
  257. package/projects/obtservices/base/src/models.ts +3 -0
  258. package/projects/obtservices/base/src/public_api.ts +8 -0
  259. package/projects/obtservices/base/src/services.ts +12 -0
  260. package/projects/obtservices/base/src/testers.ts +2 -0
  261. package/projects/obtservices/base/src/types.ts +1 -0
  262. package/projects/obtservices/base/src/updaters.ts +20 -0
  263. package/projects/obtservices/graphQL/autogenerated/index.js +2 -0
  264. package/projects/obtservices/graphQL/autogenerated/mutations/acceptNewPrice.gql +1580 -0
  265. package/projects/obtservices/graphQL/autogenerated/mutations/addItemToBasket.gql +1580 -0
  266. package/projects/obtservices/graphQL/autogenerated/mutations/addUsersToBasketItem.gql +1580 -0
  267. package/projects/obtservices/graphQL/autogenerated/mutations/bookBasket.gql +1580 -0
  268. package/projects/obtservices/graphQL/autogenerated/mutations/cancelBooking.gql +6 -0
  269. package/projects/obtservices/graphQL/autogenerated/mutations/confermaCreateCard.gql +23 -0
  270. package/projects/obtservices/graphQL/autogenerated/mutations/confermaDeleteCard.gql +3 -0
  271. package/projects/obtservices/graphQL/autogenerated/mutations/createBasket.gql +1580 -0
  272. package/projects/obtservices/graphQL/autogenerated/mutations/deleteBasket.gql +3 -0
  273. package/projects/obtservices/graphQL/autogenerated/mutations/deleteFavouriteSearch.gql +3 -0
  274. package/projects/obtservices/graphQL/autogenerated/mutations/deleteRecentSearch.gql +3 -0
  275. package/projects/obtservices/graphQL/autogenerated/mutations/deleteUserAddress.gql +3 -0
  276. package/projects/obtservices/graphQL/autogenerated/mutations/index.js +36 -0
  277. package/projects/obtservices/graphQL/autogenerated/mutations/moveItemToADifferentBasket.gql +1580 -0
  278. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemFromBasket.gql +1580 -0
  279. package/projects/obtservices/graphQL/autogenerated/mutations/removeItemsFromBasket.gql +1580 -0
  280. package/projects/obtservices/graphQL/autogenerated/mutations/removeUserFromBasketItem.gql +1580 -0
  281. package/projects/obtservices/graphQL/autogenerated/mutations/reopenBasket.gql +1580 -0
  282. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasket.gql +1580 -0
  283. package/projects/obtservices/graphQL/autogenerated/mutations/revalidateBasketItem.gql +1580 -0
  284. package/projects/obtservices/graphQL/autogenerated/mutations/saveFavouriteSearch.gql +348 -0
  285. package/projects/obtservices/graphQL/autogenerated/mutations/saveRecentSearch.gql +348 -0
  286. package/projects/obtservices/graphQL/autogenerated/mutations/saveUserAddress.gql +14 -0
  287. package/projects/obtservices/graphQL/autogenerated/mutations/sendBasketForApproval.gql +1580 -0
  288. package/projects/obtservices/graphQL/autogenerated/mutations/setAddressAsUserPrimary.gql +14 -0
  289. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemLeadPassenger.gql +1580 -0
  290. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIGroup.gql +1580 -0
  291. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemMIValue.gql +1580 -0
  292. package/projects/obtservices/graphQL/autogenerated/mutations/setBasketItemPaymentMethod.gql +1580 -0
  293. package/projects/obtservices/graphQL/autogenerated/mutations/setMIDefaultValue.gql +3 -0
  294. package/projects/obtservices/graphQL/autogenerated/mutations/setUserLanguage.gql +339 -0
  295. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketNotes.gql +1580 -0
  296. package/projects/obtservices/graphQL/autogenerated/mutations/updateBasketTitle.gql +1580 -0
  297. package/projects/obtservices/graphQL/autogenerated/queries/alive.gql +3 -0
  298. package/projects/obtservices/graphQL/autogenerated/queries/carHireAvailabilityDetailRequest.gql +42 -0
  299. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockClientHotels.gql +23 -0
  300. package/projects/obtservices/graphQL/autogenerated/queries/confermaBlockConsumerHotels.gql +23 -0
  301. package/projects/obtservices/graphQL/autogenerated/queries/confermaListCards.gql +11 -0
  302. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockClientHotels.gql +23 -0
  303. package/projects/obtservices/graphQL/autogenerated/queries/confermaUnblockConsumerHotels.gql +23 -0
  304. package/projects/obtservices/graphQL/autogenerated/queries/getCOVIDMicrositeToken.gql +3 -0
  305. package/projects/obtservices/graphQL/autogenerated/queries/getCancellationInfo.gql +7 -0
  306. package/projects/obtservices/graphQL/autogenerated/queries/getCarHireDepots.gql +13 -0
  307. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOffice.gql +50 -0
  308. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaOfficeNames.gql +26 -0
  309. package/projects/obtservices/graphQL/autogenerated/queries/getConfermaQuicklist.gql +131 -0
  310. package/projects/obtservices/graphQL/autogenerated/queries/getCountries.gql +8 -0
  311. package/projects/obtservices/graphQL/autogenerated/queries/getHotelAvailability.gql +78 -0
  312. package/projects/obtservices/graphQL/autogenerated/queries/getHotelChains.gql +3 -0
  313. package/projects/obtservices/graphQL/autogenerated/queries/getIRLSupplierStation.gql +28 -0
  314. package/projects/obtservices/graphQL/autogenerated/queries/getMultipleHotelsAvailability.gql +78 -0
  315. package/projects/obtservices/graphQL/autogenerated/queries/getPostcodeDetails.gql +25 -0
  316. package/projects/obtservices/graphQL/autogenerated/queries/getRailStation.gql +27 -0
  317. package/projects/obtservices/graphQL/autogenerated/queries/getRailcards.gql +6 -0
  318. package/projects/obtservices/graphQL/autogenerated/queries/getRiskAlerts.gql +17 -0
  319. package/projects/obtservices/graphQL/autogenerated/queries/getUser.gql +339 -0
  320. package/projects/obtservices/graphQL/autogenerated/queries/getUserAddresses.gql +14 -0
  321. package/projects/obtservices/graphQL/autogenerated/queries/getUserBasket.gql +1580 -0
  322. package/projects/obtservices/graphQL/autogenerated/queries/getUserBaskets.gql +1580 -0
  323. package/projects/obtservices/graphQL/autogenerated/queries/getUserCompanyOffices.gql +88 -0
  324. package/projects/obtservices/graphQL/autogenerated/queries/getUserCurrentCarbonAllowance.gql +524 -0
  325. package/projects/obtservices/graphQL/autogenerated/queries/getUserFavouriteSearches.gql +348 -0
  326. package/projects/obtservices/graphQL/autogenerated/queries/getUserMIAutoSuggestValues.gql +10 -0
  327. package/projects/obtservices/graphQL/autogenerated/queries/getUserMessages.gql +10 -0
  328. package/projects/obtservices/graphQL/autogenerated/queries/getUserPhoneNumbers.gql +13 -0
  329. package/projects/obtservices/graphQL/autogenerated/queries/getUserRecentSearches.gql +348 -0
  330. package/projects/obtservices/graphQL/autogenerated/queries/getUserServices.gql +16 -0
  331. package/projects/obtservices/graphQL/autogenerated/queries/getUserTravelRules.gql +111 -0
  332. package/projects/obtservices/graphQL/autogenerated/queries/getUserUIConfigs.gql +52 -0
  333. package/projects/obtservices/graphQL/autogenerated/queries/index.js +64 -0
  334. package/projects/obtservices/graphQL/autogenerated/queries/isPostcodeValid.gql +3 -0
  335. package/projects/obtservices/graphQL/autogenerated/queries/postcodeAutoSuggest.gql +3 -0
  336. package/projects/obtservices/graphQL/autogenerated/queries/searchAirlines.gql +32 -0
  337. package/projects/obtservices/graphQL/autogenerated/queries/searchAirports.gql +60 -0
  338. package/projects/obtservices/graphQL/autogenerated/queries/searchCabHire.gql +63 -0
  339. package/projects/obtservices/graphQL/autogenerated/queries/searchCarHire.gql +104 -0
  340. package/projects/obtservices/graphQL/autogenerated/queries/searchCities.gql +14 -0
  341. package/projects/obtservices/graphQL/autogenerated/queries/searchConfermaCities.gql +11 -0
  342. package/projects/obtservices/graphQL/autogenerated/queries/searchEurostar.gql +833 -0
  343. package/projects/obtservices/graphQL/autogenerated/queries/searchFastTrack.gql +46 -0
  344. package/projects/obtservices/graphQL/autogenerated/queries/searchFlights.gql +23 -0
  345. package/projects/obtservices/graphQL/autogenerated/queries/searchFlightsV2.gql +833 -0
  346. package/projects/obtservices/graphQL/autogenerated/queries/searchHotelChains.gql +3 -0
  347. package/projects/obtservices/graphQL/autogenerated/queries/searchHotels.gql +131 -0
  348. package/projects/obtservices/graphQL/autogenerated/queries/searchIRL.gql +514 -0
  349. package/projects/obtservices/graphQL/autogenerated/queries/searchIRLSupplierStations.gql +28 -0
  350. package/projects/obtservices/graphQL/autogenerated/queries/searchLounges.gql +89 -0
  351. package/projects/obtservices/graphQL/autogenerated/queries/searchParking.gql +70 -0
  352. package/projects/obtservices/graphQL/autogenerated/queries/searchPostcodes.gql +25 -0
  353. package/projects/obtservices/graphQL/autogenerated/queries/searchRail.gql +840 -0
  354. package/projects/obtservices/graphQL/autogenerated/queries/searchRailStations.gql +27 -0
  355. package/projects/obtservices/graphQL/autogenerated/queries/searchUserCanBookFor.gql +339 -0
  356. package/projects/obtservices/graphQL/autogenerated/queries/validateBasketItemMI.gql +3 -0
  357. package/projects/obtservices/graphQL/autogenerated/queries/validateUserMIFreeValue.gql +3 -0
  358. package/projects/obtservices/graphQL/documents/acceptNewPrice.graphql +5 -0
  359. package/projects/obtservices/graphQL/documents/addUserToBasketItem.graphql +9 -0
  360. package/projects/obtservices/graphQL/documents/basket.fragments.graphql +171 -0
  361. package/projects/obtservices/graphQL/documents/baskets.graphql +111 -0
  362. package/projects/obtservices/graphQL/documents/bookBasket.graphql +9 -0
  363. package/projects/obtservices/graphQL/documents/cabhire.graphql +66 -0
  364. package/projects/obtservices/graphQL/documents/carHireAvailabilityDetailRequest.graphql +44 -0
  365. package/projects/obtservices/graphQL/documents/carhire.graphql +117 -0
  366. package/projects/obtservices/graphQL/documents/deleteRecentSearch.graphql +3 -0
  367. package/projects/obtservices/graphQL/documents/deleteUserAddress.graphql +3 -0
  368. package/projects/obtservices/graphQL/documents/error.fragments.graphql +10 -0
  369. package/projects/obtservices/graphQL/documents/flights.graphql +830 -0
  370. package/projects/obtservices/graphQL/documents/getCarHireDepots.graphql +13 -0
  371. package/projects/obtservices/graphQL/documents/getConfermaOfficeNames.graphql +11 -0
  372. package/projects/obtservices/graphQL/documents/getConfermaQuicklist.graphql +108 -0
  373. package/projects/obtservices/graphQL/documents/getRailStation.graphql +31 -0
  374. package/projects/obtservices/graphQL/documents/getRailcards.graphql +6 -0
  375. package/projects/obtservices/graphQL/documents/getRiskAlerts.graphql +24 -0
  376. package/projects/obtservices/graphQL/documents/getUserAddresses.graphql +14 -0
  377. package/projects/obtservices/graphQL/documents/getUserCompanyOffices.graphql +18 -0
  378. package/projects/obtservices/graphQL/documents/getUserCurrentCarbonAllowance.graphql +29 -0
  379. package/projects/obtservices/graphQL/documents/getUserMIAutoSuggestValues.graphql +10 -0
  380. package/projects/obtservices/graphQL/documents/getUserPhoneNumbers.graphql +13 -0
  381. package/projects/obtservices/graphQL/documents/getUserRecentSearches.graphql +20 -0
  382. package/projects/obtservices/graphQL/documents/hotels.graphql +242 -0
  383. package/projects/obtservices/graphQL/documents/isPostcodeValid.graphql +3 -0
  384. package/projects/obtservices/graphQL/documents/lookups.graphql +54 -0
  385. package/projects/obtservices/graphQL/documents/lounges.graphql +88 -0
  386. package/projects/obtservices/graphQL/documents/moveItemToADifferentBasket.graphql +9 -0
  387. package/projects/obtservices/graphQL/documents/parking.graphql +79 -0
  388. package/projects/obtservices/graphQL/documents/rail.graphql +645 -0
  389. package/projects/obtservices/graphQL/documents/saveRecentSearch.graphql +5 -0
  390. package/projects/obtservices/graphQL/documents/saveUserAddress.graphql +14 -0
  391. package/projects/obtservices/graphQL/documents/searchAirlines.graphql +32 -0
  392. package/projects/obtservices/graphQL/documents/searchCities.graphql +14 -0
  393. package/projects/obtservices/graphQL/documents/searchConfermaCities.graphql +11 -0
  394. package/projects/obtservices/graphQL/documents/searchEurostar.graphql +810 -0
  395. package/projects/obtservices/graphQL/documents/searchHotelChains.graphql +3 -0
  396. package/projects/obtservices/graphQL/documents/searchIRL.graphql +521 -0
  397. package/projects/obtservices/graphQL/documents/searchPostcodes.graphql +7 -0
  398. package/projects/obtservices/graphQL/documents/searchRailStations.graphql +27 -0
  399. package/projects/obtservices/graphQL/documents/searchUserAddresses.graphql +14 -0
  400. package/projects/obtservices/graphQL/documents/set-basker-item-mi-group.graphql +9 -0
  401. package/projects/obtservices/graphQL/documents/setBasketItemLeadPassenger.graphql +5 -0
  402. package/projects/obtservices/graphQL/documents/setBasketItemMIValue.graphql +16 -0
  403. package/projects/obtservices/graphQL/documents/setBasketItemPaymentMethod.graphql +12 -0
  404. package/projects/obtservices/graphQL/documents/updateBasketNotes.graphql +10 -0
  405. package/projects/obtservices/graphQL/documents/updateBasketTitle.graphql +10 -0
  406. package/projects/obtservices/graphQL/documents/user.fragments.graphql +65 -0
  407. package/projects/obtservices/graphQL/documents/user.graphql +95 -0
  408. package/projects/obtservices/graphQL/documents/validateUserMIFreeValue.graphql +3 -0
  409. package/projects/obtservices/graphQL/schema/schema.graphql +2635 -0
  410. package/projects/obtservices/karma.conf.js +32 -0
  411. package/projects/obtservices/ng-package.json +7 -0
  412. package/projects/obtservices/package-lock.json +5 -0
  413. package/projects/obtservices/package.json +12 -0
  414. package/projects/obtservices/src/obtservices.ts +0 -0
  415. package/projects/obtservices/src/public_api.ts +1 -0
  416. package/projects/obtservices/tsconfig.lib.json +30 -0
  417. package/projects/obtservices/tsconfig.spec.json +17 -0
  418. package/projects/obtservices/tslint.json +17 -0
  419. package/tsconfig.json +36 -0
  420. 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
+ }