@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,1150 @@
1
+ import moment from 'moment';
2
+ import Ajv from 'ajv';
3
+ import { BehaviorSubject, Observable, Observer, Subject } from 'rxjs';
4
+ import { switchMap, take, tap, map } from 'rxjs/operators';
5
+
6
+ import {
7
+ AddItemToBasket,
8
+ Basket,
9
+ BasketItem,
10
+ BasketStatus,
11
+ ManagementInfo,
12
+ PassengerType,
13
+ PaymentMethod,
14
+ Service,
15
+ ServiceType,
16
+ SetBasketItemMiValue,
17
+ SupplementaryBookingInfo
18
+ } from '../types/graphql.types';
19
+ import {
20
+ GetMiAutoSugestionArray,
21
+ GetUserBasketItemResult,
22
+ GetUserBasketResult,
23
+ MenuSlideEnum,
24
+ UserBasketResult
25
+ } from '../types/types';
26
+ import { ManagementInfoAndIsValid } from '../classes/management-info-and-valid';
27
+ import { ModalTypes } from '../classes/modal-types.enum';
28
+ import { SupplementaryBookingInfoImpl } from '../classes/supplementary-booking-info-impl';
29
+ import { BasketInfoMiDetailsImpl } from '../classes/basket-info-mi-details.impl';
30
+ import { BaseHelperRoutines } from '../classes/helpers';
31
+ import { BaseModalOpenerService } from './modal-opener.service';
32
+ import {
33
+ BaseGetUserFetcher,
34
+ SearchGetUserFetcherType
35
+ } from '../fetchers/user-fetcher';
36
+ import {
37
+ AcceptNewPriceFetcherType,
38
+ BaseAcceptNewPriceUpdater
39
+ } from '../updaters/accept-new-price.updater';
40
+ import {
41
+ BaseGetBasketFetcher,
42
+ GetBasketFetcherType
43
+ } from '../fetchers/basket-fetcher';
44
+ import {
45
+ BaseGetUserBasketsFetcher,
46
+ GetUserBasketsFetcherType
47
+ } from '../fetchers/get-users-baskets-fetcher';
48
+ import {
49
+ BaseGetMiAutoSugestionFetcher,
50
+ MiAutoSuggestFetcherType
51
+ } from '../fetchers/getMiAutoSugestions.fetcher';
52
+ import {
53
+ AddItemToBasketFetcherType,
54
+ BaseAddItemToBasketUpdater
55
+ } from '../updaters/add-item-to-basket.updater';
56
+ import {
57
+ AddUserBasketFetcherType,
58
+ BaseAddUserToBasketItemUpdater
59
+ } from '../updaters/addUserToBasketItem';
60
+ import {
61
+ SetBasketItemLeadPassengerFetcherType,
62
+ BaseSetBasketItemLeadPassengerUpdater
63
+ } from '../updaters/set-basket-item-lead-passenger.updater';
64
+ import {
65
+ BaseBookBasketUpdater,
66
+ BookBasketFetcherType
67
+ } from '../updaters/book-basket-updater';
68
+ import {
69
+ BaseCreateBasketUpdater,
70
+ CreateBasketFetcherType
71
+ } from '../updaters/create-basket-updater';
72
+ import {
73
+ BaseDeleteBasketUpdater,
74
+ DeleteBasketFetcherType
75
+ } from '../updaters/remove-basket-updater';
76
+ import {
77
+ BaseRemoveItemFromBasketUpdater,
78
+ DeleteBasketItemFetcherType
79
+ } from '../updaters/remove-item-from-basket.updater';
80
+ import {
81
+ BaseRevalidateBasketUpdater,
82
+ RevalidateBasketFetcherType
83
+ } from '../updaters/revalidate-basket-updater';
84
+ import {
85
+ BaseSendBasketForApprovalUpdater,
86
+ SendBasketApprovalFetcherType
87
+ } from '../updaters/send-basket-for-approval.updater';
88
+ import {
89
+ BaseSetBasketItemMiGroupUpdater,
90
+ SetBasketItMiGroupFetcherType
91
+ } from '../updaters/set-basket-item-mi-group';
92
+ import { Traveller } from '../models/traveller.object';
93
+ import { SearchObject } from '../interfaces/search-objects.interface';
94
+ import {
95
+ BaseSetBasketItemMiValueUpdater,
96
+ SetBasketItMiFetcherType
97
+ } from '../updaters/set-basket-item-mi-value-updater';
98
+ import {
99
+ BaseValidateMiFreeValueTester,
100
+ ValidateMiFetcherType
101
+ } from '../testers/validate-mi-free-value.tester';
102
+ import { EnterpriseSearchServiceInterface } from '../interfaces/Isearch.service';
103
+ import {
104
+ FullUserDetails,
105
+ UserServiceInterface
106
+ } from '../interfaces/Iuser.service';
107
+ import {
108
+ EnterpriseBasketServiceInterface,
109
+ InternalBasketInterface
110
+ } from '../interfaces/Ienterprise-basket.service';
111
+ import { SupplementaryBookingInfoInterface } from '../interfaces/Isupplementary-booking-info-impl';
112
+ import {
113
+ BasemoveBasketItemToBasket,
114
+ MoveItemToADifferentBasketType
115
+ } from '../updaters/move-basket-item-to-basket';
116
+ import {
117
+ BaseUpdateBasketNotesType,
118
+ BaseUpdateBasketNoteUpdater
119
+ } from '../updaters/update-basket-notes-updater';
120
+ import {
121
+ BaseUpdateBasketTitleType,
122
+ BaseUpdateBasketTitleUpdater
123
+ } from '../updaters/update-basket-title-updater';
124
+ import {
125
+ BaseSetPaymentOptionUpdater,
126
+ SetBasketItemPaymentMethodType
127
+ } from '../updaters/set-basket-item-paymenr-option.updater';
128
+ const TEMPID = 'TEMPID_';
129
+
130
+ export interface BasketAndItem {
131
+ basketId: string;
132
+ item: BasketItem;
133
+ }
134
+ export interface MiGroupDetail {
135
+ type: ServiceType;
136
+ options: string[];
137
+ basketItem: BasketItem;
138
+ value: string;
139
+ }
140
+ export interface BasketItemManagementInfo {
141
+ miPerItem: ManagementInfoAndIsValid[];
142
+ miPerUser: {
143
+ [key: string]: {
144
+ managementInfo: ManagementInfoAndIsValid[];
145
+ supplementaryBookingInfo?: SupplementaryBookingInfoInterface;
146
+ };
147
+ };
148
+ users: string[];
149
+ basketItem: BasketItem;
150
+ }
151
+
152
+ export interface BasketInformation {
153
+ prices: { [key: string]: number };
154
+ mixedCurrency: boolean;
155
+ count: number;
156
+ miGroups: MiGroupDetail[];
157
+ basketInfoMiDetails: BasketInfoMiDetailsImpl[];
158
+ suppInfo: SupplementaryBookingInfoInterface[];
159
+ }
160
+
161
+ export interface BasketPricesList {
162
+ type: ServiceType;
163
+ price: number;
164
+ currency?: string;
165
+ text: string;
166
+ }
167
+
168
+ export interface BasketPrices {
169
+ total: number;
170
+ currency?: string;
171
+ list: BasketPricesList[];
172
+ }
173
+
174
+ export type BasketDetails = UserBasketResult & BasketInformation;
175
+ export class InternalBasket<Q extends SearchGetUserFetcherType>
176
+ implements BasketInformation, InternalBasketInterface
177
+ {
178
+ subject: BehaviorSubject<BasketDetails>;
179
+ id?: string;
180
+ tempid?: string;
181
+ title: string;
182
+ prices: { [key: string]: number };
183
+ mixedCurrency: boolean;
184
+ count: number;
185
+ miGroups: MiGroupDetail[];
186
+ basketInfoMiDetails: BasketInfoMiDetailsImpl[];
187
+ suppInfo: SupplementaryBookingInfoInterface[];
188
+ grandTotal: { [key: string]: number };
189
+ constructor(
190
+ basket: UserBasketResult,
191
+ private helpers: BaseHelperRoutines,
192
+ private basketService: EnterpriseBasketServiceInterface,
193
+ private getUserFetcher: BaseGetUserFetcher<Q>
194
+ ) {
195
+ Object.assign(this, {
196
+ subject: new BehaviorSubject<BasketDetails>({
197
+ ...basket,
198
+ prices: {},
199
+ mixedCurrency: false,
200
+ count: 0,
201
+ miGroups: [],
202
+ basketInfoMiDetails: [],
203
+ suppInfo: []
204
+ }),
205
+ tempid: basket.id,
206
+ id: basket.id,
207
+ title: basket.title,
208
+ prices: {},
209
+ mixedCurrency: false,
210
+ count: 0,
211
+ miGroups: [],
212
+ basketInfoMiDetails: [],
213
+ suppInfo: []
214
+ });
215
+ this.next(basket);
216
+ }
217
+
218
+ destructor() {
219
+ this.subject.complete();
220
+ }
221
+
222
+ next(basket: UserBasketResult) {
223
+ basket = this.helpers.clone(basket);
224
+ if (
225
+ basket.status === BasketStatus.Approved &&
226
+ basket.basketItems[0].perItemPhoneNumber === undefined
227
+ ) {
228
+ // We're in approved state so we need to make sure we have the supplement stuff
229
+ this.basketService
230
+ .getBasket({ id: basket.id, withSupplemental: true })
231
+ .subscribe((newBasket: UserBasketResult) => {
232
+ this.next(newBasket);
233
+ });
234
+ return;
235
+ }
236
+ this.id = basket.id;
237
+ this.title = basket.title;
238
+ const toSend: BasketDetails = {
239
+ ...basket,
240
+ ...(basket.basketItems || []).reduce(
241
+ (accum: BasketInformation, item: BasketItem, index: number) => {
242
+ if (!accum.prices[item.currency]) {
243
+ accum.prices[item.currency] = 0;
244
+ }
245
+ accum.prices[item.currency] += item.price;
246
+
247
+ accum.suppInfo.push(
248
+ new SupplementaryBookingInfoImpl(
249
+ item,
250
+ this.helpers,
251
+ this.getUserFetcher
252
+ )
253
+ );
254
+ if (item.miGroupsAvailable && item.miGroupsAvailable.length > 0) {
255
+ accum.miGroups.push({
256
+ type: item.service.type,
257
+ options: item.miGroupsAvailable,
258
+ basketItem: item,
259
+ value: item.miGroupSelected || ''
260
+ });
261
+ }
262
+ if (item.managementInfo?.length > 0 && item.users?.length > 0) {
263
+ accum.basketInfoMiDetails.push(
264
+ new BasketInfoMiDetailsImpl(
265
+ item,
266
+ this.basketService,
267
+ this.helpers
268
+ )
269
+ );
270
+ }
271
+ return accum;
272
+ },
273
+ {
274
+ prices: {},
275
+ mixedCurrency: false,
276
+ count: basket.basketItems?.length || 0,
277
+ miGroups: [],
278
+ basketInfoMiDetails: [],
279
+ suppInfo: []
280
+ }
281
+ )
282
+ };
283
+ toSend.mixedCurrency = Object.keys(toSend.prices).length > 1;
284
+ this.subject.next(toSend);
285
+ }
286
+ }
287
+
288
+ export abstract class BaseEnterpriseBasketService<
289
+ ANPU_Q extends AcceptNewPriceFetcherType,
290
+ AITB_Q extends AddItemToBasketFetcherType,
291
+ AUTB_Q extends AddUserBasketFetcherType,
292
+ CB_Q extends CreateBasketFetcherType,
293
+ GB_Q extends GetBasketFetcherType,
294
+ BB_Q extends BookBasketFetcherType,
295
+ DB_Q extends DeleteBasketFetcherType,
296
+ GAS_Q extends MiAutoSuggestFetcherType,
297
+ RIB_Q extends DeleteBasketItemFetcherType,
298
+ RVB_Q extends RevalidateBasketFetcherType,
299
+ SBMI_Q extends SetBasketItMiGroupFetcherType,
300
+ SVMI_Q extends SetBasketItMiFetcherType,
301
+ VMI_Q extends ValidateMiFetcherType,
302
+ SBA_Q extends SendBasketApprovalFetcherType,
303
+ GU_Q extends SearchGetUserFetcherType,
304
+ GUB_Q extends GetUserBasketsFetcherType,
305
+ SBLP_Q extends SetBasketItemLeadPassengerFetcherType,
306
+ MITDB_Q extends MoveItemToADifferentBasketType,
307
+ UBN_Q extends BaseUpdateBasketNotesType,
308
+ UBT_Q extends BaseUpdateBasketTitleType,
309
+ SBM_Q extends SetBasketItemPaymentMethodType
310
+ > implements EnterpriseBasketServiceInterface
311
+ {
312
+ private currentBaskets: InternalBasket<GU_Q>[] = [];
313
+
314
+ highlightBasketItemsEmitter: Subject<GetUserBasketItemResult[]> = new Subject<
315
+ GetUserBasketItemResult[]
316
+ >();
317
+
318
+ basketChangeEmitter: BehaviorSubject<string> = new BehaviorSubject<string>(
319
+ ''
320
+ );
321
+
322
+ private get currentBasketID(): string {
323
+ return this.basketChangeEmitter.value;
324
+ }
325
+
326
+ private set currentBasketID(value: string) {
327
+ if (value !== this.currentBasketID) {
328
+ // this prevents the emitter getting stuck in a loop - casuing browser overloads
329
+ this.basketChangeEmitter.next(value);
330
+ }
331
+ }
332
+
333
+ baskets = new BehaviorSubject<InternalBasket<GU_Q>[]>([]);
334
+
335
+ basketList: BasketPricesList[] = [
336
+ {
337
+ type: ServiceType.Flight,
338
+ text: 'FLIGHTS',
339
+ price: 0
340
+ },
341
+ {
342
+ type: ServiceType.Rail,
343
+ text: 'RAIL',
344
+ price: 0
345
+ },
346
+ {
347
+ type: ServiceType.Hotel,
348
+ text: 'HOTELS',
349
+ price: 0
350
+ },
351
+ {
352
+ type: ServiceType.Cab,
353
+ text: 'TAXIS',
354
+ price: 0
355
+ },
356
+ {
357
+ type: ServiceType.Car,
358
+ text: 'CARS',
359
+ price: 0
360
+ },
361
+ {
362
+ type: ServiceType.InternationalRail,
363
+ text: 'EUROSTAR',
364
+ price: 0
365
+ },
366
+ {
367
+ type: ServiceType.Parking,
368
+ text: 'PARKING',
369
+ price: 0
370
+ },
371
+ {
372
+ type: ServiceType.Lounge,
373
+ text: 'LOUNGES',
374
+ price: 0
375
+ },
376
+ {
377
+ type: ServiceType.Coach,
378
+ text: 'COACH',
379
+ price: 0
380
+ },
381
+ {
382
+ type: ServiceType.FastTrack,
383
+ text: 'FAST_TRACK',
384
+ price: 0
385
+ }
386
+ ];
387
+
388
+ basketPrices: BehaviorSubject<BasketPrices> =
389
+ new BehaviorSubject<BasketPrices>({ total: null, list: this.basketList });
390
+
391
+ menuState = MenuSlideEnum.OUT;
392
+
393
+ constructor(
394
+ private acceptNewPriceUpdater: BaseAcceptNewPriceUpdater<ANPU_Q>,
395
+ private addItemToBasketUpdater: BaseAddItemToBasketUpdater<AITB_Q>,
396
+ private addUserToBasketItem: BaseAddUserToBasketItemUpdater<AUTB_Q>,
397
+ private basketCreator: BaseCreateBasketUpdater<CB_Q>,
398
+ public basketFetcher: BaseGetBasketFetcher<GB_Q>,
399
+ private bookBasketUpdater: BaseBookBasketUpdater<BB_Q>,
400
+ private deleteBasketUpdater: BaseDeleteBasketUpdater<DB_Q>,
401
+ private getMiAutoSugestionFetcher: BaseGetMiAutoSugestionFetcher<GAS_Q>,
402
+ private helpers: BaseHelperRoutines,
403
+ private removeItemFromBasketUpdater: BaseRemoveItemFromBasketUpdater<RIB_Q>,
404
+ private revalidateBasketUpdater: BaseRevalidateBasketUpdater<RVB_Q>,
405
+ private setBasketItemMiGroupUpdater: BaseSetBasketItemMiGroupUpdater<SBMI_Q>,
406
+ private setBasketItemMiValueUpdater: BaseSetBasketItemMiValueUpdater<SVMI_Q>,
407
+ private validateMiFreeValue: BaseValidateMiFreeValueTester<VMI_Q>,
408
+ private sendBasketForApprovalUpdater: BaseSendBasketForApprovalUpdater<SBA_Q>,
409
+ private getUserFetcher: BaseGetUserFetcher<GU_Q>,
410
+ private getUserBasketsFetcher: BaseGetUserBasketsFetcher<GUB_Q>,
411
+ private SetBasketItemLeadPassenger: BaseSetBasketItemLeadPassengerUpdater<SBLP_Q>,
412
+ private moveItemToADifferentBasket: BasemoveBasketItemToBasket<MITDB_Q>,
413
+ private updateBasketNotesUpdater: BaseUpdateBasketNoteUpdater<UBN_Q>,
414
+ private updateBasketTitleUpdater: BaseUpdateBasketTitleUpdater<UBT_Q>,
415
+ private setPaymentMethodUpdater: BaseSetPaymentOptionUpdater<SBM_Q>,
416
+ private userService: UserServiceInterface,
417
+ private modalService: BaseModalOpenerService
418
+ ) {
419
+ this.userService.changeUser.subscribe({
420
+ next: (userDetails: FullUserDetails) => {
421
+ this.reset();
422
+ }
423
+ });
424
+ }
425
+
426
+ public reset() {
427
+ if (this.userService.getfullUserDetails(false).userData.value) {
428
+ this.getUserBasketsFetcher
429
+ .fetchList({
430
+ basketStatus: BasketStatus.Open,
431
+ user: this.userService
432
+ .getfullUserDetails(true)
433
+ .userData.value.user_id.toString()
434
+ })
435
+ .pipe(take(1))
436
+ .subscribe(
437
+ (baskets: UserBasketResult[]) => {
438
+ this.currentBaskets = baskets.map((basket: UserBasketResult) => {
439
+ if (basket) {
440
+ let intBasket = this.findBasket(basket.id);
441
+ if (!intBasket) {
442
+ intBasket = new InternalBasket(
443
+ basket,
444
+ this.helpers,
445
+ this,
446
+ this.getUserFetcher
447
+ );
448
+
449
+ this.currentBaskets.push(intBasket);
450
+ }
451
+ return intBasket;
452
+ }
453
+ });
454
+
455
+ this.baskets.next(this.currentBaskets);
456
+
457
+ if (this.currentBaskets.length > 0) {
458
+ this.currentBasketID = this.currentBaskets[0].id;
459
+ } else {
460
+ this.currentBasketID = null;
461
+ }
462
+
463
+ this.basketChangeEmitter.next(this.currentBasketID);
464
+ },
465
+ (error: any) => {
466
+ console.error(error);
467
+ }
468
+ );
469
+ } else {
470
+ this.currentBaskets.forEach((basket: InternalBasketInterface) =>
471
+ basket.subject.unsubscribe()
472
+ );
473
+ this.currentBaskets = [];
474
+ this.currentBasketID = null;
475
+ this.baskets.next(this.currentBaskets);
476
+ this.basketChangeEmitter.next(this.currentBasketID);
477
+ }
478
+ }
479
+
480
+ public async getAllOpenBaskets(user_id: string): Promise<UserBasketResult[]> {
481
+ // let intBasket = this.findBasket(user_id)
482
+ return this.getUserBasketsFetcher
483
+ .fetchList({ basketStatus: BasketStatus.Open, user: user_id })
484
+ .pipe(
485
+ take(1),
486
+ map((results: UserBasketResult[]) => {
487
+ if (results.length) {
488
+ results.forEach((result: UserBasketResult) => {
489
+ if (!this.findBasket(result.id)) {
490
+ const intBasket = new InternalBasket(
491
+ result,
492
+ this.helpers,
493
+ this,
494
+ this.getUserFetcher
495
+ );
496
+ this.currentBaskets.push(intBasket);
497
+ }
498
+ });
499
+ } else {
500
+ const intBasket = new InternalBasket(
501
+ {
502
+ id: user_id,
503
+ basketItems: []
504
+ } as BasketDetails,
505
+ this.helpers,
506
+ this,
507
+ this.getUserFetcher
508
+ );
509
+ this.currentBaskets.push(intBasket);
510
+ }
511
+
512
+ return results;
513
+ })
514
+ )
515
+ .toPromise();
516
+ }
517
+
518
+ public async addToBasket(
519
+ item: AddItemToBasket.Variables,
520
+ intBasket: InternalBasket<GU_Q>,
521
+ searchService: EnterpriseSearchServiceInterface,
522
+ travellers: Traveller[] = []
523
+ ): Promise<boolean> {
524
+ if (travellers?.length > 0) {
525
+ item.users = this.helpers.makeUsers(travellers);
526
+ item.leadPassenger = item.users[0].id;
527
+ }
528
+ item = this.checkDetails(item);
529
+ if (item && intBasket) {
530
+ this.addItemToBasketUpdater
531
+ .updateOne(item)
532
+ .pipe(take(1))
533
+ .subscribe(
534
+ (newBasket: Partial<UserBasketResult>) => {
535
+ intBasket.next({
536
+ ...intBasket.subject.value,
537
+ ...newBasket
538
+ });
539
+ const service = this.userService.findService(item.service).type;
540
+ searchService.search_objects[service].booking_chosen = true;
541
+ searchService.search_objects[service].chosen = false;
542
+ const bi: GetUserBasketItemResult[] = newBasket.basketItems;
543
+ this.highlightBasketItemsEmitter.next(bi);
544
+ this.basketChangeEmitter.next(this.currentBasketID);
545
+ },
546
+ (error: any) => {
547
+ console.error(error);
548
+ intBasket.subject.next(intBasket.subject.value);
549
+ }
550
+ );
551
+ }
552
+ return false;
553
+ }
554
+
555
+ loadBasket(id: string): void {
556
+ let intBasket = this.findBasket(id);
557
+ if (!intBasket) {
558
+ intBasket = new InternalBasket(
559
+ {
560
+ id,
561
+ basketItems: []
562
+ } as BasketDetails,
563
+ this.helpers,
564
+ this,
565
+ this.getUserFetcher
566
+ );
567
+ this.currentBaskets.push(intBasket);
568
+ }
569
+ this.basketFetcher
570
+ .fetchOne({ id })
571
+ .subscribe((newBasket: UserBasketResult) => {
572
+ intBasket.next(newBasket);
573
+ });
574
+ }
575
+
576
+ subsribeToBasket(id: string, observer: Observer<BasketDetails>): void {
577
+ const intBasket = this.findBasket(id);
578
+ if (intBasket) {
579
+ intBasket.subject.subscribe(observer);
580
+ }
581
+ }
582
+
583
+ removeExpiredItems(id: string): void {
584
+ const intBasket = this.findBasket(id);
585
+ intBasket.subject.value.basketItems
586
+ .filter((basketItem: BasketItem): boolean => {
587
+ return (
588
+ basketItem.latestValidationPriceDifference !== 0 || basketItem.expired
589
+ );
590
+ })
591
+ .forEach((basketItem: BasketItem) => {
592
+ this.removeBasketItem(id, basketItem);
593
+ });
594
+ }
595
+
596
+ removeBasketItem(basketId: string, item: BasketItem): void {
597
+ const intBasket: InternalBasket<GU_Q> = this.findBasket(basketId);
598
+ this.removeItemFromBasketUpdater
599
+ .updateOne({ basketItem: item.id })
600
+ .subscribe((newBasket: Basket) => {
601
+ intBasket.next({
602
+ ...intBasket.subject.value,
603
+ ...newBasket
604
+ });
605
+ this.basketChangeEmitter.next(basketId);
606
+ });
607
+ }
608
+
609
+ public async getDefaultBasket(
610
+ getBookedBasket: boolean = false
611
+ ): Promise<InternalBasket<GU_Q>> {
612
+ const internalBasket: InternalBasket<GU_Q> = null;
613
+ // console.log(this.currentBasketID);
614
+ return await this.findOrCreateBasket(
615
+ this.currentBasketID,
616
+ getBookedBasket
617
+ ).then((data) => {
618
+ return data;
619
+ });
620
+ }
621
+
622
+ private findBasket(id: string): InternalBasket<GU_Q> {
623
+ return this.currentBaskets.find((basket: InternalBasket<GU_Q>) => {
624
+ return basket.id === id || basket.tempid === id;
625
+ });
626
+ }
627
+
628
+ private async findOrCreateBasket(
629
+ id?: string,
630
+ getBookedBasket: boolean = false
631
+ ): Promise<InternalBasket<GU_Q>> {
632
+ let basket: InternalBasket<GU_Q> = null;
633
+ if (!id) {
634
+ const allOpenBaskets = await this.getAllOpenBaskets(
635
+ this.userService
636
+ .getfullUserDetails(true)
637
+ .userData.value.user_id.toString()
638
+ );
639
+
640
+ // find the last updated basket
641
+ if (!allOpenBaskets?.length) {
642
+ basket = await this.createBasket();
643
+ this.currentBaskets.push(basket);
644
+ this.baskets.next(this.currentBaskets);
645
+ } else {
646
+ // baskets are already sorted by last updated - return the last updated basket
647
+ basket = this.findBasket(allOpenBaskets[0].id);
648
+
649
+ if (basket.subject.value.status === 'BOOKED' && !getBookedBasket) {
650
+ console.warn(
651
+ '+++ Retrieved basket is in booked status - creating a new one +++'
652
+ );
653
+ basket = await this.createBasket();
654
+ this.currentBaskets.push(basket);
655
+ }
656
+ this.baskets.next(this.currentBaskets);
657
+ }
658
+ } else {
659
+ basket = this.findBasket(id);
660
+ // console.log('+++ Found Basket: ', basket, ' +++');
661
+ }
662
+
663
+ return basket;
664
+ }
665
+
666
+ public async createBasket(): Promise<InternalBasket<GU_Q>> {
667
+ const basket: UserBasketResult = {
668
+ id: TEMPID + moment().unix().toString(),
669
+ owner: null,
670
+ reference: null,
671
+ title: null,
672
+ notes: null,
673
+ createdAt: null,
674
+ updatedAt: null,
675
+ basketItems: [],
676
+ status: null,
677
+ validated: false
678
+ };
679
+
680
+ const intBasket = new InternalBasket<GU_Q>(
681
+ basket,
682
+ this.helpers,
683
+ this,
684
+ this.getUserFetcher
685
+ );
686
+ // { subject: new BehaviorSubject<Basket>(basket), tempid: basket.id, id: basket.id, title: basket.id };
687
+
688
+ const toReturn = await this.createBasketOnDB(intBasket);
689
+ this.currentBaskets.push(toReturn);
690
+ this.baskets.next(this.currentBaskets);
691
+ this.basketChangeEmitter.next(toReturn.id);
692
+ return toReturn;
693
+ }
694
+
695
+ private createBasketOnDB(
696
+ intBasket: InternalBasket<GU_Q>
697
+ ): Promise<InternalBasket<GU_Q>> {
698
+ return new Promise((resolve, reject) => {
699
+ this.basketCreator
700
+ .updateOne({})
701
+ .pipe(take(1))
702
+ .subscribe(
703
+ (basket: UserBasketResult) => {
704
+ intBasket.id = basket.id;
705
+ intBasket.next(basket);
706
+ resolve(intBasket);
707
+ },
708
+ (error: any) => {
709
+ reject(error);
710
+ },
711
+ () => {}
712
+ );
713
+ });
714
+ }
715
+
716
+ toggleMenu(): void {
717
+ if (
718
+ this.menuState === MenuSlideEnum.IN ||
719
+ this.menuState === MenuSlideEnum.FLAT
720
+ ) {
721
+ this.menuState = MenuSlideEnum.OUT;
722
+ } else {
723
+ this.menuState = MenuSlideEnum.IN;
724
+ }
725
+ }
726
+
727
+ closeMenu(): void {
728
+ this.menuState = MenuSlideEnum.IN;
729
+ }
730
+
731
+ getLatestBasketItemForTypes(
732
+ basketItems: BasketItem[]
733
+ ): Record<ServiceType, BasketItem> {
734
+ return (basketItems || []).reduce(
735
+ (
736
+ latestItems: Record<ServiceType, BasketItem>,
737
+ basketItem: BasketItem
738
+ ) => {
739
+ latestItems[basketItem.service.type] = basketItem;
740
+ return latestItems;
741
+ },
742
+ {} as Record<ServiceType, BasketItem>
743
+ );
744
+ }
745
+
746
+ private checkDetails(
747
+ item: AddItemToBasket.Variables
748
+ ): AddItemToBasket.Variables {
749
+ const serviceToCheck: Service = this.userService.findService(item.service);
750
+ if (!serviceToCheck) {
751
+ console.error('Unable to find service for basket item : ' + item.service);
752
+ return null;
753
+ }
754
+
755
+ // check the item.detail object against the relevant service detailSchema using Ajv
756
+ const ajv = new Ajv();
757
+ const validateDetailSchema = ajv.compile(serviceToCheck.detailSchema);
758
+ const validateSearchSchema = ajv.compile(serviceToCheck.searchQuerySchema);
759
+
760
+ // if there are any moment date objects in the searchQuery object convert these to date-time strings
761
+ item.searchQuery = this.helpers.sanitizeMomentDates(item.searchQuery);
762
+
763
+ if (!validateSearchSchema(item.searchQuery)) {
764
+ const error = `Item searchQuery is not valid for ${serviceToCheck.name} search schema.`;
765
+ console.warn('searchSchema', serviceToCheck.searchQuerySchema);
766
+ console.warn('item.searchQuery', item.searchQuery);
767
+ console.log(validateSearchSchema.errors);
768
+ this.modalService.open(ModalTypes.ModalErrorComponent, {}, { error });
769
+ return null;
770
+ }
771
+
772
+ if (!validateDetailSchema(item.detail)) {
773
+ const error = `Item detail is not valid for ${serviceToCheck.name} detail schema.`;
774
+ console.warn('detailSchema', serviceToCheck.detailSchema);
775
+ console.warn('item.detail', item.detail);
776
+ console.log('Schema errors', validateDetailSchema.errors);
777
+ this.modalService.open(ModalTypes.ModalErrorComponent, {}, { error });
778
+ return null;
779
+ }
780
+ return item;
781
+ }
782
+
783
+ getNumberItemsForBasket(basket: InternalBasket<GU_Q> = null): number {
784
+ basket = basket || this.findBasket(this.currentBasketID);
785
+ return basket?.subject.value.basketItems.length || 0;
786
+ }
787
+
788
+ async removeBasket(basketid: string) {
789
+ if (basketid) {
790
+ await this.deleteBasketUpdater
791
+ .updateOne({ id: basketid })
792
+ .pipe(
793
+ take(1),
794
+ switchMap((data: any): any => {
795
+ this.findBasket(basketid)?.destructor();
796
+ this.currentBaskets = this.currentBaskets.filter((intBa) => {
797
+ return intBa.id !== basketid;
798
+ });
799
+ this.baskets.next(this.currentBaskets);
800
+ if (basketid === this.currentBasketID) {
801
+ this.currentBasketID = this.currentBaskets[0]?.id || null;
802
+ this.basketChangeEmitter.next(this.currentBasketID);
803
+ }
804
+ return data;
805
+ })
806
+ )
807
+ .toPromise();
808
+ }
809
+ }
810
+
811
+ continueSearchAndBook(
812
+ basketItems: any[],
813
+ itiniaryUrl: string[],
814
+ searchService: EnterpriseSearchServiceInterface
815
+ ): string[] {
816
+ const latestBasketItems = this.getLatestBasketItemForTypes(basketItems);
817
+ const nextSearch: SearchObject =
818
+ searchService.getHighestSearchPriorityObject(latestBasketItems);
819
+ if (nextSearch) {
820
+ (searchService.searches as any)[
821
+ nextSearch.type
822
+ ].updateFromPreviousSearches(latestBasketItems);
823
+ return [nextSearch.searchUrl];
824
+ } else {
825
+ return itiniaryUrl;
826
+ }
827
+ }
828
+
829
+ addTravellers(
830
+ basketid: string,
831
+ basketItem: BasketItem,
832
+ travellers: Traveller[],
833
+ index: number = 0
834
+ ): void {
835
+ const basket = this.findBasket(basketid);
836
+ if (index < travellers.length) {
837
+ const traveller = travellers[index];
838
+ const passengerType: PassengerType = traveller.isChild
839
+ ? PassengerType.Child
840
+ : traveller.isInfant
841
+ ? PassengerType.Infant
842
+ : PassengerType.Adult;
843
+
844
+ this.addUserToBasketItem
845
+ .updateOne({
846
+ basketItem: basketItem.id,
847
+ users: [
848
+ {
849
+ id: traveller.id,
850
+ passengerType
851
+ }
852
+ ],
853
+ withSupplemental: false
854
+ })
855
+ .subscribe(
856
+ () => {},
857
+ () => {},
858
+ () => {
859
+ this.addTravellers(basket.id, basketItem, travellers, index + 1);
860
+ }
861
+ );
862
+ } else {
863
+ this.basketFetcher.fetchOne({ id: basket.id }).subscribe(
864
+ (basket1: GetUserBasketResult) => {
865
+ basket.subject.next({ ...basket.subject.value, ...basket1 });
866
+ },
867
+ (_) => {},
868
+ () => {
869
+ basket.next(basket.subject.value);
870
+ }
871
+ );
872
+ }
873
+ }
874
+
875
+ setLeadPassenger(
876
+ basketid: string,
877
+ basketItem: BasketItem,
878
+ travellers: Traveller,
879
+ index: number = 0
880
+ ): void {
881
+ const basket = this.findBasket(basketid);
882
+ if (index < 1) {
883
+ this.SetBasketItemLeadPassenger.updateOne({
884
+ id: basketItem.id,
885
+ user: travellers.id,
886
+ withSupplemental: false
887
+ }).subscribe(
888
+ () => {},
889
+ () => {},
890
+ () => {
891
+ this.setLeadPassenger(basket.id, basketItem, travellers, index + 1);
892
+ }
893
+ );
894
+ } else {
895
+ this.basketFetcher.fetchOne({ id: basket.id }).subscribe(
896
+ (basket1: GetUserBasketResult) => {
897
+ basket.subject.next({ ...basket.subject.value, ...basket1 });
898
+ },
899
+ (_) => {},
900
+ () => {
901
+ basket.next(basket.subject.value);
902
+ }
903
+ );
904
+ }
905
+ }
906
+
907
+ updateBasket(
908
+ basketid: string,
909
+ obs: Observable<BasketDetails>
910
+ ): Promise<void> {
911
+ return new Promise<void>((resolve, reject) => {
912
+ obs.pipe(take(1)).subscribe(
913
+ (basket: BasketDetails) => {
914
+ const intBasket = this.findBasket(basketid);
915
+ intBasket.next(basket);
916
+ resolve();
917
+ },
918
+ (error: any) => {
919
+ console.error(error);
920
+ const intBasket = this.findBasket(basketid);
921
+ intBasket.next(intBasket.subject.value);
922
+ reject(error);
923
+ },
924
+ () => {}
925
+ );
926
+ });
927
+ }
928
+
929
+ revalidate(basketid: string): void {
930
+ this.updateBasket(
931
+ basketid,
932
+ this.revalidateBasketUpdater.updateOne({ id: basketid })
933
+ );
934
+ }
935
+
936
+ setBasketItemMiGroup(
937
+ basketid: string,
938
+ basketItemid: string,
939
+ group: string
940
+ ): void {
941
+ this.updateBasket(
942
+ basketid,
943
+ this.setBasketItemMiGroupUpdater.updateOne({
944
+ basketItem: basketItemid,
945
+ group
946
+ })
947
+ );
948
+ }
949
+
950
+ acceptNewPrice(basketid: string, item: BasketItem): void {
951
+ this.updateBasket(
952
+ basketid,
953
+ this.acceptNewPriceUpdater.updateOne({ id: item.id })
954
+ );
955
+ }
956
+
957
+ validateFreeValeMi(
958
+ miItem: ManagementInfo,
959
+ freeValue: string
960
+ ): Promise<boolean> {
961
+ return new Promise((resolve, reject) => {
962
+ this.validateMiFreeValue
963
+ .test({ mi: miItem.id, freeValue })
964
+ .subscribe(resolve, reject);
965
+ });
966
+ }
967
+
968
+ setMiFreeValue(
969
+ basketid: string,
970
+ miItem: ManagementInfo,
971
+ freeValue: string,
972
+ userId: string = null
973
+ ) {
974
+ const intBasket = this.findBasket(basketid);
975
+ const args: SetBasketItemMiValue.Variables = {
976
+ mi: miItem.id,
977
+ miFreeValue: freeValue
978
+ };
979
+ if (!!userId) {
980
+ args.user = userId;
981
+ }
982
+ this.setBasketItemMiValueUpdater
983
+ .updateOne(args)
984
+ .pipe(take(1))
985
+ .subscribe(
986
+ (basket: BasketDetails) => {
987
+ intBasket.next(basket);
988
+ },
989
+ (_) => {},
990
+ () => {
991
+ intBasket.next(intBasket.subject.value);
992
+ }
993
+ );
994
+ }
995
+
996
+ setMiSelectedValue(
997
+ basketid: string,
998
+ miItem: ManagementInfo,
999
+ selectedValue: string,
1000
+ userId: string = null
1001
+ ) {
1002
+ const args: SetBasketItemMiValue.Variables = {
1003
+ mi: miItem.id,
1004
+ miValue: selectedValue
1005
+ };
1006
+ if (!!userId) {
1007
+ args.user = userId;
1008
+ }
1009
+ this.updateBasket(
1010
+ basketid,
1011
+ this.setBasketItemMiValueUpdater.updateOne(args)
1012
+ );
1013
+ }
1014
+
1015
+ getMiAutoSugestions(
1016
+ miId: string,
1017
+ partialLabel: string,
1018
+ isLoading: BehaviorSubject<boolean>
1019
+ ): Observable<GetMiAutoSugestionArray> {
1020
+ isLoading?.next(true);
1021
+
1022
+ return this.getMiAutoSugestionFetcher
1023
+ .fetchList({ mi: miId, partialLabel })
1024
+ .pipe(
1025
+ tap((_) => {
1026
+ isLoading?.next(false);
1027
+ })
1028
+ );
1029
+ }
1030
+
1031
+ saveMiData(basketId: string, bmiArray: BasketItemManagementInfo[]) {
1032
+ bmiArray.forEach((bmi: BasketItemManagementInfo) => {
1033
+ bmi.miPerItem.forEach((item: ManagementInfoAndIsValid) => {
1034
+ item.save(basketId, null);
1035
+ });
1036
+ bmi.users.forEach((user: string) => {
1037
+ bmi.miPerUser[user].managementInfo.forEach(
1038
+ (item: ManagementInfoAndIsValid) => {
1039
+ item.save(basketId, user);
1040
+ }
1041
+ );
1042
+ });
1043
+ });
1044
+ }
1045
+
1046
+ sendBasketForApproval(basketid: string) {
1047
+ this.updateBasket(
1048
+ basketid,
1049
+ this.sendBasketForApprovalUpdater
1050
+ .updateOne({ basket: basketid })
1051
+ .pipe(take(1))
1052
+ );
1053
+ }
1054
+
1055
+ setBasketItemPaymentOption(
1056
+ basket: BasketDetails,
1057
+ basketItem: BasketItem,
1058
+ paymentMethod: string
1059
+ ): Promise<void> {
1060
+ return this.updateBasket(
1061
+ basket.id,
1062
+ this.setPaymentMethodUpdater.updateOne({
1063
+ basketItem: basketItem.id,
1064
+ paymentMethod
1065
+ })
1066
+ );
1067
+ }
1068
+
1069
+ bookBasket(basketid: string, supplementaryInfo: SupplementaryBookingInfo[]) {
1070
+ this.updateBasket(
1071
+ basketid,
1072
+ this.bookBasketUpdater.updateOne({ id: basketid, supplementaryInfo })
1073
+ );
1074
+ }
1075
+
1076
+ moveBasketItem(
1077
+ originalBasketId: string,
1078
+ basketItem: BasketItem,
1079
+ basketIdToMoveTo: string
1080
+ ): void {
1081
+ this.moveItemToADifferentBasket
1082
+ .updateOne({
1083
+ basketItem: basketItem.id,
1084
+ newBasket: basketIdToMoveTo
1085
+ })
1086
+ .subscribe(() => {
1087
+ this.loadBasket(originalBasketId);
1088
+ this.loadBasket(basketIdToMoveTo);
1089
+ });
1090
+ }
1091
+
1092
+ updateBasketNotes(basketId: string, notes: string): void {
1093
+ this.updateBasket(
1094
+ basketId,
1095
+ this.updateBasketNotesUpdater.updateOne({ id: basketId, notes })
1096
+ );
1097
+ }
1098
+
1099
+ updateBasketTitle(basketId: string, title: string): void {
1100
+ this.updateBasket(
1101
+ basketId,
1102
+ this.updateBasketTitleUpdater.updateOne({ id: basketId, newTitle: title })
1103
+ );
1104
+ }
1105
+ getBasket(query: {
1106
+ id: string;
1107
+ withSupplemental: true;
1108
+ }): Observable<GetUserBasketResult> {
1109
+ return this.basketFetcher.fetchOne(query);
1110
+ }
1111
+
1112
+ atLeastOneSearchChosen(): boolean {
1113
+ const intBasket: InternalBasketInterface = this.findBasket(
1114
+ this.currentBasketID
1115
+ );
1116
+ return intBasket?.subject.value.basketItems.length > 0;
1117
+ }
1118
+
1119
+ public getBasketStats(index: number): BehaviorSubject<BasketPrices> {
1120
+ const basketPricesObj =
1121
+ this.baskets.value[index]?.subject?.value?.prices || {};
1122
+ const basketPricesKey = Object.keys(basketPricesObj)[0];
1123
+ if (basketPricesKey) {
1124
+ this.basketPrices.value.currency = basketPricesKey;
1125
+ this.basketPrices.value.total =
1126
+ this.baskets.value[index].subject.value.prices[basketPricesKey];
1127
+ } else {
1128
+ this.basketPrices.value.total = 0;
1129
+ }
1130
+
1131
+ this.basketPrices.value.list.forEach((keys) => {
1132
+ keys.price = this.baskets.value[index]?.subject?.value?.basketItems
1133
+ .filter((item) => item.service.type === keys.type)
1134
+ .reduce((sum, current) => sum + current.price, 0);
1135
+ });
1136
+ return this.basketPrices;
1137
+ }
1138
+ }
1139
+
1140
+ interface DetailSchemaProperties {
1141
+ type?: 'string' | 'number' | 'integer' | 'array';
1142
+ $ref?: string;
1143
+ format?: string;
1144
+ }
1145
+ interface DetailSchema {
1146
+ $defs?: { [key: string]: DetailSchema };
1147
+ additionalProperties: boolean;
1148
+ properties: { [key: string]: DetailSchemaProperties };
1149
+ required: string[];
1150
+ }