@aglyn/plugins-commerce 1.0.0-beta.284 → 1.0.0-beta.287

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/README.md +1 -1
  2. package/package.json +13 -13
  3. package/src/lib/components/cart.js +25 -12
  4. package/src/lib/components/cart.js.map +1 -1
  5. package/src/lib/components/commerce-console-page.js +70 -13
  6. package/src/lib/components/commerce-console-page.js.map +1 -1
  7. package/src/lib/components/console/order-detail-dialog.component.js +2 -1
  8. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  9. package/src/lib/components/console/payment-methods-card.component.js +1 -1
  10. package/src/lib/components/console/payment-methods-card.component.js.map +1 -1
  11. package/src/lib/components/console/pos/pos-cart-panel.component.d.ts +5 -0
  12. package/src/lib/components/console/pos/pos-cart-panel.component.js +18 -12
  13. package/src/lib/components/console/pos/pos-cart-panel.component.js.map +1 -1
  14. package/src/lib/components/console/pos/pos-hardware-api.d.ts +76 -5
  15. package/src/lib/components/console/pos/pos-hardware-api.js +53 -11
  16. package/src/lib/components/console/pos/pos-hardware-api.js.map +1 -1
  17. package/src/lib/components/console/pos/pos-hardware-buyer.component.d.ts +18 -0
  18. package/src/lib/components/console/pos/pos-hardware-buyer.component.js +629 -0
  19. package/src/lib/components/console/pos/pos-hardware-buyer.component.js.map +1 -0
  20. package/src/lib/components/console/pos/pos-hardware-sale-api.d.ts +162 -0
  21. package/src/lib/components/console/pos/pos-hardware-sale-api.js +122 -0
  22. package/src/lib/components/console/pos/pos-hardware-sale-api.js.map +1 -0
  23. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.d.ts +39 -0
  24. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js +251 -0
  25. package/src/lib/components/console/pos/pos-hardware-sale-terms.component.js.map +1 -0
  26. package/src/lib/components/console/pos/use-pos-display.js +50 -0
  27. package/src/lib/components/console/pos/use-pos-display.js.map +1 -1
  28. package/src/lib/components/console/pos-cellular-control.component.d.ts +41 -0
  29. package/src/lib/components/console/pos-cellular-control.component.js +211 -0
  30. package/src/lib/components/console/pos-cellular-control.component.js.map +1 -0
  31. package/src/lib/components/console/pos-devices-card.component.d.ts +9 -1
  32. package/src/lib/components/console/pos-devices-card.component.js +47 -15
  33. package/src/lib/components/console/pos-devices-card.component.js.map +1 -1
  34. package/src/lib/components/console/pos-display/pos-display-api.d.ts +6 -0
  35. package/src/lib/components/console/pos-display/pos-display-api.js +8 -1
  36. package/src/lib/components/console/pos-display/pos-display-api.js.map +1 -1
  37. package/src/lib/components/console/pos-display-page.component.d.ts +13 -0
  38. package/src/lib/components/console/pos-display-page.component.js +44 -2
  39. package/src/lib/components/console/pos-display-page.component.js.map +1 -1
  40. package/src/lib/components/console/pos-hardware-card.component.d.ts +12 -4
  41. package/src/lib/components/console/pos-hardware-card.component.js +157 -36
  42. package/src/lib/components/console/pos-hardware-card.component.js.map +1 -1
  43. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js +360 -80
  44. package/src/lib/components/console/pos-hardware-orders-staff-page.component.js.map +1 -1
  45. package/src/lib/components/console/pos-hardware-terms-page.component.d.ts +34 -0
  46. package/src/lib/components/console/pos-hardware-terms-page.component.js +257 -0
  47. package/src/lib/components/console/pos-hardware-terms-page.component.js.map +1 -0
  48. package/src/lib/components/console/pos-hardware-terms-sign-page.component.d.ts +27 -0
  49. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js +104 -0
  50. package/src/lib/components/console/pos-hardware-terms-sign-page.component.js.map +1 -0
  51. package/src/lib/components/console/pos-hardware-waiting-card.component.d.ts +24 -0
  52. package/src/lib/components/console/pos-hardware-waiting-card.component.js +205 -0
  53. package/src/lib/components/console/pos-hardware-waiting-card.component.js.map +1 -0
  54. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js +297 -201
  55. package/src/lib/components/console/pos-ops/pos-check-in-dialog.component.js.map +1 -1
  56. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.d.ts +3 -0
  57. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js +260 -92
  58. package/src/lib/components/console/pos-ops/pos-check-ins-card.component.js.map +1 -1
  59. package/src/lib/components/console/pos-ops/pos-operations-bar.component.d.ts +9 -0
  60. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js +15 -6
  61. package/src/lib/components/console/pos-ops/pos-operations-bar.component.js.map +1 -1
  62. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.d.ts +25 -0
  63. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js +136 -0
  64. package/src/lib/components/console/pos-ops/pos-rain-check-dialog.component.js.map +1 -0
  65. package/src/lib/components/console/pos-ops/pos-shift-panel.component.d.ts +6 -0
  66. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js +48 -31
  67. package/src/lib/components/console/pos-ops/pos-shift-panel.component.js.map +1 -1
  68. package/src/lib/components/console/pos-page.component.d.ts +1 -1
  69. package/src/lib/components/console/pos-page.component.js +63 -12
  70. package/src/lib/components/console/pos-page.component.js.map +1 -1
  71. package/src/lib/components/console/pos-reader-splash-setting.component.js +1 -1
  72. package/src/lib/components/console/pos-reader-splash-setting.component.js.map +1 -1
  73. package/src/lib/components/console/product-check-in-fields.component.d.ts +4 -2
  74. package/src/lib/components/console/product-check-in-fields.component.js +60 -14
  75. package/src/lib/components/console/product-check-in-fields.component.js.map +1 -1
  76. package/src/lib/components/console/product-editor-dialog.component.js +44 -1
  77. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  78. package/src/lib/components/console/product-hardware-sku-field.component.d.ts +19 -0
  79. package/src/lib/components/console/product-hardware-sku-field.component.js +92 -0
  80. package/src/lib/components/console/product-hardware-sku-field.component.js.map +1 -0
  81. package/src/lib/components/console/product-kiosk-offer-field.component.d.ts +22 -0
  82. package/src/lib/components/console/product-kiosk-offer-field.component.js +94 -0
  83. package/src/lib/components/console/product-kiosk-offer-field.component.js.map +1 -0
  84. package/src/lib/components/console/product-register-fields.component.d.ts +4 -0
  85. package/src/lib/components/console/product-register-fields.component.js +31 -2
  86. package/src/lib/components/console/product-register-fields.component.js.map +1 -1
  87. package/src/lib/components/console/products-hub-card.component.js +11 -2
  88. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  89. package/src/lib/components/console/register-hardware-card.component.d.ts +11 -0
  90. package/src/lib/components/console/register-hardware-card.component.js +56 -27
  91. package/src/lib/components/console/register-hardware-card.component.js.map +1 -1
  92. package/src/lib/components/console/reservation-guests-dialog.component.d.ts +28 -0
  93. package/src/lib/components/console/reservation-guests-dialog.component.js +189 -0
  94. package/src/lib/components/console/reservation-guests-dialog.component.js.map +1 -0
  95. package/src/lib/components/console/reservations-card.component.d.ts +9 -0
  96. package/src/lib/components/console/reservations-card.component.js +158 -23
  97. package/src/lib/components/console/reservations-card.component.js.map +1 -1
  98. package/src/lib/components/console/shippingeasy-card.component.js +1 -1
  99. package/src/lib/components/console/shippingeasy-card.component.js.map +1 -1
  100. package/src/lib/components/console/shipstation-card.component.d.ts +1 -1
  101. package/src/lib/components/console/shipstation-card.component.js +3 -3
  102. package/src/lib/components/console/shipstation-card.component.js.map +1 -1
  103. package/src/lib/components/product-detail.d.ts +4 -0
  104. package/src/lib/components/product-detail.js +40 -5
  105. package/src/lib/components/product-detail.js.map +1 -1
  106. package/src/lib/components/product-reviews.js +28 -11
  107. package/src/lib/components/product-reviews.js.map +1 -1
  108. package/src/lib/components/reservation-widget.js +28 -5
  109. package/src/lib/components/reservation-widget.js.map +1 -1
  110. package/src/lib/components/use-day-picker.d.ts +25 -0
  111. package/src/lib/components/use-day-picker.js +57 -0
  112. package/src/lib/components/use-day-picker.js.map +1 -0
  113. package/src/lib/constants/operator-alerts.d.ts +55 -0
  114. package/src/lib/constants/operator-alerts.js +156 -1
  115. package/src/lib/constants/operator-alerts.js.map +1 -1
  116. package/src/lib/declarations.console-server.js +54 -1
  117. package/src/lib/declarations.console-server.js.map +1 -1
  118. package/src/lib/declarations.d.ts +4 -2
  119. package/src/lib/declarations.js +11 -4
  120. package/src/lib/declarations.js.map +1 -1
  121. package/src/lib/declarations.server.js +9 -0
  122. package/src/lib/declarations.server.js.map +1 -1
  123. package/src/lib/model/commerce-cart.d.ts +9 -1
  124. package/src/lib/model/commerce-cart.js +4 -3
  125. package/src/lib/model/commerce-cart.js.map +1 -1
  126. package/src/lib/model/commerce-check-in-product.d.ts +26 -0
  127. package/src/lib/model/commerce-check-in-product.js +64 -2
  128. package/src/lib/model/commerce-check-in-product.js.map +1 -1
  129. package/src/lib/model/commerce-check-in-record.d.ts +127 -0
  130. package/src/lib/model/commerce-check-in-record.js +36 -0
  131. package/src/lib/model/commerce-check-in-record.js.map +1 -0
  132. package/src/lib/model/commerce-check-in.d.ts +91 -87
  133. package/src/lib/model/commerce-check-in.js +186 -62
  134. package/src/lib/model/commerce-check-in.js.map +1 -1
  135. package/src/lib/model/commerce-kiosk-offer.d.ts +31 -0
  136. package/src/lib/model/commerce-kiosk-offer.js +35 -0
  137. package/src/lib/model/commerce-kiosk-offer.js.map +1 -0
  138. package/src/lib/model/commerce-orders.d.ts +76 -0
  139. package/src/lib/model/commerce-orders.js +6 -0
  140. package/src/lib/model/commerce-orders.js.map +1 -1
  141. package/src/lib/model/commerce-pos-day-report.d.ts +54 -1
  142. package/src/lib/model/commerce-pos-day-report.js +39 -2
  143. package/src/lib/model/commerce-pos-day-report.js.map +1 -1
  144. package/src/lib/model/commerce-pos-offline.d.ts +1 -1
  145. package/src/lib/model/commerce-pos-offline.js +6 -1
  146. package/src/lib/model/commerce-pos-offline.js.map +1 -1
  147. package/src/lib/model/commerce-pos-ops.js +3 -2
  148. package/src/lib/model/commerce-pos-ops.js.map +1 -1
  149. package/src/lib/model/commerce-pos.d.ts +36 -3
  150. package/src/lib/model/commerce-pos.js +14 -6
  151. package/src/lib/model/commerce-pos.js.map +1 -1
  152. package/src/lib/model/commerce-receipt.js +3 -2
  153. package/src/lib/model/commerce-receipt.js.map +1 -1
  154. package/src/lib/model/commerce-reservations.d.ts +69 -4
  155. package/src/lib/model/commerce-reservations.js +57 -5
  156. package/src/lib/model/commerce-reservations.js.map +1 -1
  157. package/src/lib/model/commerce.d.ts +66 -0
  158. package/src/lib/model/commerce.js +15 -0
  159. package/src/lib/model/commerce.js.map +1 -1
  160. package/src/lib/model/order-list-fields.d.ts +11 -0
  161. package/src/lib/model/order-list-fields.js +17 -1
  162. package/src/lib/model/order-list-fields.js.map +1 -1
  163. package/src/lib/model/own-store-tax-summary.d.ts +152 -0
  164. package/src/lib/model/own-store-tax-summary.js +288 -0
  165. package/src/lib/model/own-store-tax-summary.js.map +1 -0
  166. package/src/lib/model/plugin-permissions.d.ts +67 -0
  167. package/src/lib/model/plugin-permissions.js +224 -7
  168. package/src/lib/model/plugin-permissions.js.map +1 -1
  169. package/src/lib/model/pos-cellular.d.ts +223 -0
  170. package/src/lib/model/pos-cellular.js +293 -0
  171. package/src/lib/model/pos-cellular.js.map +1 -0
  172. package/src/lib/model/pos-hardware-in-person.d.ts +98 -0
  173. package/src/lib/model/pos-hardware-in-person.js +224 -0
  174. package/src/lib/model/pos-hardware-in-person.js.map +1 -0
  175. package/src/lib/model/pos-hardware-tax-summary.d.ts +166 -0
  176. package/src/lib/model/pos-hardware-tax-summary.js +225 -0
  177. package/src/lib/model/pos-hardware-tax-summary.js.map +1 -0
  178. package/src/lib/model/pos-hardware-terms.d.ts +74 -0
  179. package/src/lib/model/pos-hardware-terms.js +115 -0
  180. package/src/lib/model/pos-hardware-terms.js.map +1 -0
  181. package/src/lib/model/pos-hardware.d.ts +349 -7
  182. package/src/lib/model/pos-hardware.js +291 -20
  183. package/src/lib/model/pos-hardware.js.map +1 -1
  184. package/src/lib/model/product-write.d.ts +10 -0
  185. package/src/lib/model/product-write.js +4 -2
  186. package/src/lib/model/product-write.js.map +1 -1
  187. package/src/lib/plugin.js +16 -0
  188. package/src/lib/plugin.js.map +1 -1
  189. package/src/lib/server/billing-webhook.js +25 -1
  190. package/src/lib/server/billing-webhook.js.map +1 -1
  191. package/src/lib/server/cancel-order.js +7 -5
  192. package/src/lib/server/cancel-order.js.map +1 -1
  193. package/src/lib/server/cart-checkout.js +20 -8
  194. package/src/lib/server/cart-checkout.js.map +1 -1
  195. package/src/lib/server/cart.js +29 -0
  196. package/src/lib/server/cart.js.map +1 -1
  197. package/src/lib/server/checkout.js +42 -13
  198. package/src/lib/server/checkout.js.map +1 -1
  199. package/src/lib/server/collection-membership.d.ts +4 -0
  200. package/src/lib/server/collection-membership.js +5 -10
  201. package/src/lib/server/collection-membership.js.map +1 -1
  202. package/src/lib/server/commerce-site-keys.d.ts +29 -0
  203. package/src/lib/server/commerce-site-keys.js +40 -0
  204. package/src/lib/server/commerce-site-keys.js.map +1 -0
  205. package/src/lib/server/draft-order.js +8 -5
  206. package/src/lib/server/draft-order.js.map +1 -1
  207. package/src/lib/server/fulfill-order.js +7 -5
  208. package/src/lib/server/fulfill-order.js.map +1 -1
  209. package/src/lib/server/gift-cards.js +8 -5
  210. package/src/lib/server/gift-cards.js.map +1 -1
  211. package/src/lib/server/local-fulfillment-status.js +9 -6
  212. package/src/lib/server/local-fulfillment-status.js.map +1 -1
  213. package/src/lib/server/member-post.js +6 -5
  214. package/src/lib/server/member-post.js.map +1 -1
  215. package/src/lib/server/membership-admin-password.d.ts +4 -2
  216. package/src/lib/server/membership-admin-password.js +10 -8
  217. package/src/lib/server/membership-admin-password.js.map +1 -1
  218. package/src/lib/server/membership-admin-remove.d.ts +7 -5
  219. package/src/lib/server/membership-admin-remove.js +9 -9
  220. package/src/lib/server/membership-admin-remove.js.map +1 -1
  221. package/src/lib/server/order-notifications.js +5 -2
  222. package/src/lib/server/order-notifications.js.map +1 -1
  223. package/src/lib/server/order-print.js +7 -5
  224. package/src/lib/server/order-print.js.map +1 -1
  225. package/src/lib/server/order-receipt-send.js +8 -5
  226. package/src/lib/server/order-receipt-send.js.map +1 -1
  227. package/src/lib/server/orders-shipping-prepare.js +9 -6
  228. package/src/lib/server/orders-shipping-prepare.js.map +1 -1
  229. package/src/lib/server/own-store-tax-return-source.d.ts +47 -0
  230. package/src/lib/server/own-store-tax-return-source.js +312 -0
  231. package/src/lib/server/own-store-tax-return-source.js.map +1 -0
  232. package/src/lib/server/payment-methods.js +13 -9
  233. package/src/lib/server/payment-methods.js.map +1 -1
  234. package/src/lib/server/pos-auth.d.ts +37 -6
  235. package/src/lib/server/pos-auth.js +40 -15
  236. package/src/lib/server/pos-auth.js.map +1 -1
  237. package/src/lib/server/pos-cellular-billing.d.ts +81 -0
  238. package/src/lib/server/pos-cellular-billing.js +711 -0
  239. package/src/lib/server/pos-cellular-billing.js.map +1 -0
  240. package/src/lib/server/pos-cellular-notify.d.ts +47 -0
  241. package/src/lib/server/pos-cellular-notify.js +150 -0
  242. package/src/lib/server/pos-cellular-notify.js.map +1 -0
  243. package/src/lib/server/pos-cellular.d.ts +88 -0
  244. package/src/lib/server/pos-cellular.js +339 -0
  245. package/src/lib/server/pos-cellular.js.map +1 -0
  246. package/src/lib/server/pos-check-in.d.ts +5 -1
  247. package/src/lib/server/pos-check-in.js +296 -28
  248. package/src/lib/server/pos-check-in.js.map +1 -1
  249. package/src/lib/server/pos-day-report.js +29 -3
  250. package/src/lib/server/pos-day-report.js.map +1 -1
  251. package/src/lib/server/pos-display.d.ts +16 -0
  252. package/src/lib/server/pos-display.js +129 -2
  253. package/src/lib/server/pos-display.js.map +1 -1
  254. package/src/lib/server/pos-hardware-admin.d.ts +10 -1
  255. package/src/lib/server/pos-hardware-admin.js +250 -84
  256. package/src/lib/server/pos-hardware-admin.js.map +1 -1
  257. package/src/lib/server/pos-hardware-attach.d.ts +105 -0
  258. package/src/lib/server/pos-hardware-attach.js +443 -0
  259. package/src/lib/server/pos-hardware-attach.js.map +1 -0
  260. package/src/lib/server/pos-hardware-buyer-lookup.d.ts +58 -0
  261. package/src/lib/server/pos-hardware-buyer-lookup.js +180 -0
  262. package/src/lib/server/pos-hardware-buyer-lookup.js.map +1 -0
  263. package/src/lib/server/pos-hardware-buyer-record.d.ts +29 -0
  264. package/src/lib/server/pos-hardware-buyer-record.js +86 -0
  265. package/src/lib/server/pos-hardware-buyer-record.js.map +1 -0
  266. package/src/lib/server/pos-hardware-cancel.d.ts +58 -0
  267. package/src/lib/server/pos-hardware-cancel.js +147 -0
  268. package/src/lib/server/pos-hardware-cancel.js.map +1 -0
  269. package/src/lib/server/pos-hardware-closure-notices.d.ts +27 -0
  270. package/src/lib/server/pos-hardware-closure-notices.js +85 -0
  271. package/src/lib/server/pos-hardware-closure-notices.js.map +1 -0
  272. package/src/lib/server/pos-hardware-closure.d.ts +60 -0
  273. package/src/lib/server/pos-hardware-closure.js +153 -0
  274. package/src/lib/server/pos-hardware-closure.js.map +1 -0
  275. package/src/lib/server/pos-hardware-in-person.d.ts +61 -0
  276. package/src/lib/server/pos-hardware-in-person.js +236 -0
  277. package/src/lib/server/pos-hardware-in-person.js.map +1 -0
  278. package/src/lib/server/pos-hardware-notify.d.ts +40 -2
  279. package/src/lib/server/pos-hardware-notify.js +195 -14
  280. package/src/lib/server/pos-hardware-notify.js.map +1 -1
  281. package/src/lib/server/pos-hardware-readers.d.ts +115 -0
  282. package/src/lib/server/pos-hardware-readers.js +430 -0
  283. package/src/lib/server/pos-hardware-readers.js.map +1 -0
  284. package/src/lib/server/pos-hardware-returns.d.ts +116 -0
  285. package/src/lib/server/pos-hardware-returns.js +502 -0
  286. package/src/lib/server/pos-hardware-returns.js.map +1 -0
  287. package/src/lib/server/pos-hardware-sale-fields.d.ts +28 -0
  288. package/src/lib/server/pos-hardware-sale-fields.js +44 -0
  289. package/src/lib/server/pos-hardware-sale-fields.js.map +1 -0
  290. package/src/lib/server/pos-hardware-sale.d.ts +54 -0
  291. package/src/lib/server/pos-hardware-sale.js +369 -0
  292. package/src/lib/server/pos-hardware-sale.js.map +1 -0
  293. package/src/lib/server/pos-hardware-tax-return-source.d.ts +99 -0
  294. package/src/lib/server/pos-hardware-tax-return-source.js +462 -0
  295. package/src/lib/server/pos-hardware-tax-return-source.js.map +1 -0
  296. package/src/lib/server/pos-hardware-terms.d.ts +64 -0
  297. package/src/lib/server/pos-hardware-terms.js +154 -0
  298. package/src/lib/server/pos-hardware-terms.js.map +1 -0
  299. package/src/lib/server/pos-hardware-user-eraser.d.ts +3 -0
  300. package/src/lib/server/pos-hardware-user-eraser.js +31 -7
  301. package/src/lib/server/pos-hardware-user-eraser.js.map +1 -1
  302. package/src/lib/server/pos-hardware-webhook.d.ts +5 -0
  303. package/src/lib/server/pos-hardware-webhook.js +51 -6
  304. package/src/lib/server/pos-hardware-webhook.js.map +1 -1
  305. package/src/lib/server/pos-hardware.d.ts +74 -1
  306. package/src/lib/server/pos-hardware.js +175 -10
  307. package/src/lib/server/pos-hardware.js.map +1 -1
  308. package/src/lib/server/pos-kiosk.d.ts +2 -0
  309. package/src/lib/server/pos-kiosk.js +17 -12
  310. package/src/lib/server/pos-kiosk.js.map +1 -1
  311. package/src/lib/server/pos-offline-card-order.d.ts +64 -0
  312. package/src/lib/server/pos-offline-card-order.js +102 -0
  313. package/src/lib/server/pos-offline-card-order.js.map +1 -0
  314. package/src/lib/server/pos-offline-card-reconcile.d.ts +67 -1
  315. package/src/lib/server/pos-offline-card-reconcile.js +215 -18
  316. package/src/lib/server/pos-offline-card-reconcile.js.map +1 -1
  317. package/src/lib/server/pos-offline-sync.d.ts +39 -0
  318. package/src/lib/server/pos-offline-sync.js +190 -55
  319. package/src/lib/server/pos-offline-sync.js.map +1 -1
  320. package/src/lib/server/pos-ops-gate.d.ts +15 -4
  321. package/src/lib/server/pos-ops-gate.js +42 -9
  322. package/src/lib/server/pos-ops-gate.js.map +1 -1
  323. package/src/lib/server/pos-ops-routes.js +24 -0
  324. package/src/lib/server/pos-ops-routes.js.map +1 -1
  325. package/src/lib/server/pos-order-refund-ids.d.ts +28 -0
  326. package/src/lib/server/pos-order-refund-ids.js +31 -0
  327. package/src/lib/server/pos-order-refund-ids.js.map +1 -0
  328. package/src/lib/server/pos-order.js +52 -49
  329. package/src/lib/server/pos-order.js.map +1 -1
  330. package/src/lib/server/pos-payment.js +1 -1
  331. package/src/lib/server/pos-payment.js.map +1 -1
  332. package/src/lib/server/pos-reader-splash-admin.js +30 -32
  333. package/src/lib/server/pos-reader-splash-admin.js.map +1 -1
  334. package/src/lib/server/pos-reader-splash-images-route.d.ts +17 -0
  335. package/src/lib/server/pos-reader-splash-images-route.js +113 -0
  336. package/src/lib/server/pos-reader-splash-images-route.js.map +1 -0
  337. package/src/lib/server/pos-reader-splash-images.d.ts +51 -0
  338. package/src/lib/server/pos-reader-splash-images.js +123 -0
  339. package/src/lib/server/pos-reader-splash-images.js.map +1 -0
  340. package/src/lib/server/pos-reader-splash.d.ts +68 -1
  341. package/src/lib/server/pos-reader-splash.js +182 -11
  342. package/src/lib/server/pos-reader-splash.js.map +1 -1
  343. package/src/lib/server/pos-readers.d.ts +29 -0
  344. package/src/lib/server/pos-readers.js +134 -35
  345. package/src/lib/server/pos-readers.js.map +1 -1
  346. package/src/lib/server/pos-return.d.ts +10 -0
  347. package/src/lib/server/pos-return.js +26 -1
  348. package/src/lib/server/pos-return.js.map +1 -1
  349. package/src/lib/server/pos-sale.js +6 -1
  350. package/src/lib/server/pos-sale.js.map +1 -1
  351. package/src/lib/server/pos-shift.js +11 -0
  352. package/src/lib/server/pos-shift.js.map +1 -1
  353. package/src/lib/server/pos-staff-pin.js +25 -20
  354. package/src/lib/server/pos-staff-pin.js.map +1 -1
  355. package/src/lib/server/pos-terminal.d.ts +14 -4
  356. package/src/lib/server/pos-terminal.js +34 -38
  357. package/src/lib/server/pos-terminal.js.map +1 -1
  358. package/src/lib/server/printers.d.ts +7 -3
  359. package/src/lib/server/printers.js +18 -12
  360. package/src/lib/server/printers.js.map +1 -1
  361. package/src/lib/server/product-drafts.d.ts +11 -1
  362. package/src/lib/server/product-drafts.js +12 -8
  363. package/src/lib/server/product-drafts.js.map +1 -1
  364. package/src/lib/server/product.d.ts +15 -1
  365. package/src/lib/server/product.js +16 -3
  366. package/src/lib/server/product.js.map +1 -1
  367. package/src/lib/server/products-write.d.ts +26 -2
  368. package/src/lib/server/products-write.js +19 -7
  369. package/src/lib/server/products-write.js.map +1 -1
  370. package/src/lib/server/refund.js +34 -11
  371. package/src/lib/server/refund.js.map +1 -1
  372. package/src/lib/server/reservation-availability-query.d.ts +8 -0
  373. package/src/lib/server/reservation-availability-query.js +11 -1
  374. package/src/lib/server/reservation-availability-query.js.map +1 -1
  375. package/src/lib/server/reservation-availability.d.ts +1 -1
  376. package/src/lib/server/reservation-availability.js +7 -2
  377. package/src/lib/server/reservation-availability.js.map +1 -1
  378. package/src/lib/server/reservation-guests.d.ts +32 -0
  379. package/src/lib/server/reservation-guests.js +285 -0
  380. package/src/lib/server/reservation-guests.js.map +1 -0
  381. package/src/lib/server/reservation-walk-in.d.ts +11 -1
  382. package/src/lib/server/reservation-walk-in.js +56 -12
  383. package/src/lib/server/reservation-walk-in.js.map +1 -1
  384. package/src/lib/server/reserve.js +18 -5
  385. package/src/lib/server/reserve.js.map +1 -1
  386. package/src/lib/server/returns.js +9 -6
  387. package/src/lib/server/returns.js.map +1 -1
  388. package/src/lib/server/reviews.d.ts +22 -2
  389. package/src/lib/server/reviews.js +88 -20
  390. package/src/lib/server/reviews.js.map +1 -1
  391. package/src/lib/server/shipping-connectors.js +10 -11
  392. package/src/lib/server/shipping-connectors.js.map +1 -1
  393. package/src/lib/server/site-page-resolver.js +20 -3
  394. package/src/lib/server/site-page-resolver.js.map +1 -1
  395. package/src/lib/server/store-day.d.ts +33 -0
  396. package/src/lib/server/store-day.js +46 -0
  397. package/src/lib/server/store-day.js.map +1 -0
  398. package/src/lib/server/store-setup-ai-writer.d.ts +2 -1
  399. package/src/lib/server/store-setup-ai-writer.js +5 -6
  400. package/src/lib/server/store-setup-ai-writer.js.map +1 -1
  401. package/src/lib/server/storefront-tax.d.ts +13 -0
  402. package/src/lib/server/storefront-tax.js +8 -1
  403. package/src/lib/server/storefront-tax.js.map +1 -1
  404. package/src/lib/server/tax-return-source.d.ts +32 -3
  405. package/src/lib/server/tax-return-source.js +99 -20
  406. package/src/lib/server/tax-return-source.js.map +1 -1
  407. package/src/lib/server.js +100 -2
  408. package/src/lib/server.js.map +1 -1
  409. package/src/lib/testing/fake-firestore.js +58 -16
  410. package/src/lib/testing/fake-firestore.js.map +1 -1
  411. package/src/lib/testing/pos-ops-memory-firestore.js +18 -4
  412. package/src/lib/testing/pos-ops-memory-firestore.js.map +1 -1
  413. package/src/lib/testing/site-register-permissions.d.ts +29 -0
  414. package/src/lib/testing/site-register-permissions.js +38 -0
  415. package/src/lib/testing/site-register-permissions.js.map +1 -0
  416. package/src/lib/transfer/tracking.server.js +8 -5
  417. package/src/lib/transfer/tracking.server.js.map +1 -1
  418. package/src/lib/utils/add-to-cart.d.ts +2 -0
  419. package/src/lib/utils/add-to-cart.js +6 -3
  420. package/src/lib/utils/add-to-cart.js.map +1 -1
@@ -16,8 +16,9 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
16
16
  * limitations under the License.
17
17
  */ import { resolveSiteTimeZone } from "@aglyn/aglyn/app-utils/collection-entry-date";
18
18
  import { zonedDayKey } from "@aglyn/shared-util-timestamp/zoned-time";
19
- import { changedCheckInCustomerFields, checkInCustomerKey, checkInCustomers, checkInDayCsv, checkInDayMs, checkInDayTotals, checkInSearchToken, CHECK_IN_BATCH_MAX, CHECK_IN_DAY_CEILING, CHECK_IN_SEARCH_CUSTOMERS, CHECK_IN_SEARCH_ROWS, dueCheckInsForOrder, dueCheckInsForReservation, newCheckInDocument, normalizeWristband, sortCheckInRows } from "../model/commerce-check-in.js";
19
+ import { changedCheckInCustomerFields, checkInCustomerKey, checkInCustomers, checkInDayCsv, checkInDayMs, checkInDayTotals, checkInSearchToken, CHECK_IN_BATCH_MAX, CHECK_IN_DAY_CEILING, CHECK_IN_SEARCH_CUSTOMERS, CHECK_IN_SEARCH_ROWS, dueCheckInsForOrder, dueCheckInsForReservation, newCheckInDocument, normalizeWristband, rainCheckProblem, sortCheckInRows, STAY_CHECK_IN_SETTINGS_DOC, storedStayCheckIns } from "../model/commerce-check-in.js";
20
20
  import { posDayReportRange } from "../model/commerce-pos-day-report.js";
21
+ import { readStayCheckInMode as readStayCheckInModeValue, stayChecksInPerGuest, STAY_CHECK_IN_MODES } from "../model/commerce-reservations.js";
21
22
  import { authorizePosOps, defaultPosOpsDeps, posOpsBody, posOpsCleanId, posOpsIdempotencyKey, resolvePosCashier } from "./pos-ops-gate.js";
22
23
  import { onPosSaleCompleted } from "./pos-sale.js";
23
24
  /*==========================================
@@ -28,6 +29,9 @@ import { onPosSaleCompleted } from "./pos-sale.js";
28
29
  * POST { hostId, action: 'check_in', checkIns: [{ id, wristband? }], registerId?, cashierAssertion? }
29
30
  * POST { hostId, action: 'undo', id }
30
31
  * POST { hostId, action: 'wristband', id, wristband }
32
+ * POST { hostId, action: 'stay_mode', mode: 'resource' | 'stay' | 'guest', day? }
33
+ * POST { hostId, action: 'rain_check', id, kind: 'open' | 'date', day? }
34
+ * POST { hostId, action: 'undo_rain_check', id }
31
35
  * GET ?hostId=…&day=YYYY-MM-DD[&format=csv] the day's list
32
36
  *
33
37
  * `day` is today in the site's time zone when absent. Who may use it is who
@@ -42,11 +46,21 @@ import { onPosSaleCompleted } from "./pos-sale.js";
42
46
  *
43
47
  * - a register sale, the moment it completes (the sale-completed seam);
44
48
  * - and every source, by {@link reconcileCheckInDay}: the day's orders
45
- * (`createdAtMs` in the day, the automatic single-field index) and the
46
- * stays that began within a year before it (`checkInDayMs`, likewise),
47
- * at most every {@link CHECK_IN_RECONCILE_MS} per day, on the next search
48
- * or list. So an online order paid a minute ago is found on the next
49
- * search after that.
49
+ * (`createdAtMs` in the day, the automatic single-field index), the
50
+ * orders bought on another day for this one (`useDayKeys array-contains`
51
+ * the day, likewise automatic) and the stays that began within a year
52
+ * before it (`checkInDayMs`, likewise), at most every
53
+ * {@link CHECK_IN_RECONCILE_MS} per day, on the next search or list. So
54
+ * an online order paid a minute ago is found on the next search after
55
+ * that.
56
+ *
57
+ * RAIN CHECKS (`rain_check`, `undo_rain_check`) move one person's pass to a
58
+ * later day, or leave it open for any later day; an open one is found on a
59
+ * later day by `rainCheckOpen == true` and `dayKey <` the day, beside the
60
+ * day's own (indexes: rainCheckOpen, searchTokens, dayKey; and
61
+ * rainCheckOpen, customerKey, dayKey). Checking in an open one claims it on
62
+ * the day it is used. Each is a transaction on the one document, gated as
63
+ * check-in is.
50
64
  *
51
65
  * Reconciling only ever CREATES what is missing, refreshes a waiting
52
66
  * person's name and address, and removes a waiting person whose order was
@@ -85,6 +99,12 @@ const queryValue = (value)=>{
85
99
  timeZone
86
100
  };
87
101
  }
102
+ // Where the store's stay check-in control lives, beside the rules that read it.
103
+ export { STAY_CHECK_IN_SETTINGS_DOC };
104
+ /** The store's control for how stays are checked in; each resource's own setting when unset. */ export async function readStayCheckInMode(hostRef) {
105
+ const snapshot = await hostRef.collection('settings').doc(STAY_CHECK_IN_SETTINGS_DOC).get();
106
+ return readStayCheckInModeValue(snapshot.exists ? snapshot.get('stays') : undefined);
107
+ }
88
108
  /** Reads documents by reference, a few hundred at a time. */ async function readAll(firestore, refs) {
89
109
  const out = [];
90
110
  for(let at = 0; at < refs.length; at += 300){
@@ -156,13 +176,24 @@ const isAlreadyExists = (error)=>{
156
176
  }
157
177
  const dayMs = (_checkInDayMs = checkInDayMs(day.dayKey)) != null ? _checkInDayMs : 0;
158
178
  const checkIns = hostRef.collection('checkIns');
159
- const [ordersSnapshot, staysSnapshot, existingSnapshot] = await Promise.all([
179
+ const [ordersSnapshot, forTheDaySnapshot, staysSnapshot, existingSnapshot] = await Promise.all([
160
180
  hostRef.collection('orders').where('createdAtMs', '>=', day.startMs).where('createdAtMs', '<', day.endMs).orderBy('createdAtMs').limit(CHECK_IN_DAY_CEILING + 1).get(),
181
+ // Passes bought on another day for this one: the days the buyer chose,
182
+ // stamped on the order by every creator (`withOrderListFields`).
183
+ hostRef.collection('orders').where('useDayKeys', 'array-contains', day.dayKey).limit(CHECK_IN_DAY_CEILING + 1).get(),
161
184
  hostRef.collection('reservations').where('checkInDayMs', '<=', dayMs).where('checkInDayMs', '>', dayMs - STAY_LOOKBACK_MS).orderBy('checkInDayMs', 'desc').limit(CHECK_IN_DAY_CEILING + 1).get(),
162
185
  checkIns.where('dayKey', '==', day.dayKey).limit(CHECK_IN_DAY_CEILING + 1).get()
163
186
  ]);
164
- const truncated = ordersSnapshot.docs.length > CHECK_IN_DAY_CEILING || staysSnapshot.docs.length > CHECK_IN_DAY_CEILING || existingSnapshot.docs.length > CHECK_IN_DAY_CEILING;
165
- const orders = ordersSnapshot.docs.slice(0, CHECK_IN_DAY_CEILING);
187
+ const truncated = ordersSnapshot.docs.length > CHECK_IN_DAY_CEILING || forTheDaySnapshot.docs.length > CHECK_IN_DAY_CEILING || staysSnapshot.docs.length > CHECK_IN_DAY_CEILING || existingSnapshot.docs.length > CHECK_IN_DAY_CEILING;
188
+ const orders = [
189
+ ...new Map([
190
+ ...ordersSnapshot.docs.slice(0, CHECK_IN_DAY_CEILING),
191
+ ...forTheDaySnapshot.docs.slice(0, CHECK_IN_DAY_CEILING)
192
+ ].map((doc)=>[
193
+ doc.id,
194
+ doc
195
+ ])).values()
196
+ ];
166
197
  const stays = staysSnapshot.docs.slice(0, CHECK_IN_DAY_CEILING);
167
198
  const products = await productsFor(deps, hostRef, orders.map((doc)=>doc.data()));
168
199
  const resourceIds = [
@@ -172,33 +203,56 @@ const isAlreadyExists = (error)=>{
172
203
  }).filter((id)=>posOpsCleanId(id)))
173
204
  ];
174
205
  const resourceNames = new Map();
206
+ const perGuestResources = new Set();
207
+ // How stays are checked in (AGL-4043): the store's control, else each
208
+ // resource's own setting. Read only on a day with stays to check in.
209
+ const stayMode = stays.length ? await readStayCheckInMode(hostRef) : 'resource';
175
210
  for (const snapshot of (await readAll(deps.firestore(), resourceIds.map((id)=>hostRef.collection('resources').doc(id))))){
176
211
  var _snapshot_get;
177
- if (snapshot.exists) resourceNames.set(snapshot.id, String((_snapshot_get = snapshot.get('name')) != null ? _snapshot_get : ''));
212
+ if (!snapshot.exists) continue;
213
+ resourceNames.set(snapshot.id, String((_snapshot_get = snapshot.get('name')) != null ? _snapshot_get : ''));
214
+ if (stayChecksInPerGuest(snapshot.data(), stayMode)) perGuestResources.add(snapshot.id);
178
215
  }
179
216
  const due = new Map();
217
+ // Every unit the orders read still owe, on whatever day: a pass moved here
218
+ // or away by a rain check, or bought for another day, is owed but not due
219
+ // today, and a waiting one is removed only when its order no longer owes it.
220
+ const owed = new Set();
180
221
  const readOrders = new Set();
181
222
  const readStays = new Set();
182
223
  for (const doc of orders){
224
+ var _order_createdAtMs;
183
225
  readOrders.add(doc.id);
226
+ const order = doc.data();
184
227
  for (const [id, entry] of dueCheckInsForOrder({
185
228
  orderId: doc.id,
186
- order: doc.data(),
229
+ order,
187
230
  products,
188
- dayKey: day.dayKey
231
+ // The day it was bought, on the site's calendar: the day a line the
232
+ // buyer chose no day for is due.
233
+ purchaseDayKey: zonedDayKey(Number((_order_createdAtMs = order.createdAtMs) != null ? _order_createdAtMs : day.startMs), day.timeZone)
189
234
  })){
190
- due.set(id, entry);
235
+ owed.add(id);
236
+ if (entry.dayKey === day.dayKey) due.set(id, entry);
191
237
  }
192
238
  }
239
+ // Each stay's check-ins already stored on the day: a guest checked in keeps
240
+ // their place when the stay's count comes down (`stayCheckInPlan`).
241
+ const storedByStay = storedStayCheckIns(existingSnapshot.docs.slice(0, CHECK_IN_DAY_CEILING));
193
242
  for (const doc of stays){
194
- var _resourceNames_get, _doc_get;
243
+ var _doc_get, _resourceNames_get, _storedByStay_get;
195
244
  readStays.add(doc.id);
245
+ const resourceId = String((_doc_get = doc.get('resourceId')) != null ? _doc_get : '');
196
246
  for (const [id, entry] of dueCheckInsForReservation({
197
247
  reservationId: doc.id,
198
248
  reservation: doc.data(),
199
- resourceName: (_resourceNames_get = resourceNames.get(String((_doc_get = doc.get('resourceId')) != null ? _doc_get : ''))) != null ? _resourceNames_get : null,
200
- dayKey: day.dayKey
249
+ resourceName: (_resourceNames_get = resourceNames.get(resourceId)) != null ? _resourceNames_get : null,
250
+ dayKey: day.dayKey,
251
+ // A resource gone since the stay was booked is checked in once per stay.
252
+ perGuest: perGuestResources.has(resourceId) || stayMode === 'guest' && !resourceNames.has(resourceId),
253
+ existing: (_storedByStay_get = storedByStay.get(doc.id)) != null ? _storedByStay_get : []
201
254
  })){
255
+ owed.add(id);
202
256
  due.set(id, entry);
203
257
  }
204
258
  }
@@ -213,7 +267,7 @@ const isAlreadyExists = (error)=>{
213
267
  const wanted = due.get(doc.id);
214
268
  if (!wanted) {
215
269
  const sourceRead = stored.source === 'order' && stored.orderId && readOrders.has(stored.orderId) || stored.source === 'reservation' && stored.reservationId && readStays.has(stored.reservationId);
216
- return sourceRead ? [
270
+ return sourceRead && !owed.has(doc.id) ? [
217
271
  {
218
272
  ref: doc.ref,
219
273
  patch: null
@@ -272,12 +326,12 @@ const isAlreadyExists = (error)=>{
272
326
  deps.orgForHost(hostId)
273
327
  ]);
274
328
  const timeZone = resolveSiteTimeZone((_ref = owner == null ? void 0 : owner.org) != null ? _ref : null, (_host_data = host.data()) != null ? _host_data : null);
275
- const dayKey = zonedDayKey(Number((_event_order_createdAtMs = event.order.createdAtMs) != null ? _event_order_createdAtMs : deps.now()), timeZone);
329
+ const purchaseDayKey = zonedDayKey(Number((_event_order_createdAtMs = event.order.createdAtMs) != null ? _event_order_createdAtMs : deps.now()), timeZone);
276
330
  const due = dueCheckInsForOrder({
277
331
  orderId,
278
332
  order: event.order,
279
333
  products,
280
- dayKey
334
+ purchaseDayKey
281
335
  });
282
336
  if (!due.size) return 0;
283
337
  return createMissing(hostRef.collection('checkIns'), due, new Set(), deps.now());
@@ -299,6 +353,22 @@ let subscribed = false;
299
353
  *=========================================*/ const rowOf = (doc)=>_extends({}, doc.data(), {
300
354
  id: doc.id
301
355
  });
356
+ /**
357
+ * The open rain checks from days before `dayKey` that also match `field`:
358
+ * passes good on any later day, which a later day's search and customer
359
+ * lookup offer beside the day's own (`rainCheckOpen`, the field, `dayKey`).
360
+ */ function openRainChecks(checkIns, dayKey, field, ceiling) {
361
+ const open = checkIns.where('rainCheckOpen', '==', true);
362
+ const matched = field.name === 'searchTokens' ? open.where('searchTokens', 'array-contains', field.token) : open.where('customerKey', '==', field.key);
363
+ return matched.where('dayKey', '<', dayKey).limit(ceiling).get();
364
+ }
365
+ /** The rows of several snapshots, each once. */ function uniqueRows(...snapshots) {
366
+ const rows = new Map();
367
+ for (const snapshot of snapshots)for (const doc of snapshot.docs)rows.set(doc.id, rowOf(doc));
368
+ return [
369
+ ...rows.values()
370
+ ];
371
+ }
302
372
  /** Who checks people in: the member a PIN put at the register, else the signed-in one. */ async function checkerOf(deps, staff, body) {
303
373
  const registerId = posOpsCleanId(body['registerId']);
304
374
  const uid = registerId ? (await resolvePosCashier(deps, staff, registerId, body['cashierAssertion'])).cashierId : staff.uid;
@@ -351,13 +421,19 @@ export async function handlePosCheckIn(deps, req) {
351
421
  };
352
422
  }
353
423
  await reconcileCheckInDay(deps, staff.hostRef, day);
354
- const snapshot = await checkIns.where('dayKey', '==', day.dayKey).where('searchTokens', 'array-contains', token).limit(CHECK_IN_SEARCH_ROWS).get();
424
+ const [snapshot, rainChecks] = await Promise.all([
425
+ checkIns.where('dayKey', '==', day.dayKey).where('searchTokens', 'array-contains', token).limit(CHECK_IN_SEARCH_ROWS).get(),
426
+ openRainChecks(checkIns, day.dayKey, {
427
+ name: 'searchTokens',
428
+ token
429
+ }, CHECK_IN_SEARCH_ROWS)
430
+ ]);
355
431
  return {
356
432
  status: 200,
357
433
  body: {
358
434
  dayKey: day.dayKey,
359
435
  timeZone: day.timeZone,
360
- customers: checkInCustomers(snapshot.docs.map(rowOf)).slice(0, CHECK_IN_SEARCH_CUSTOMERS)
436
+ customers: checkInCustomers(uniqueRows(snapshot, rainChecks)).slice(0, CHECK_IN_SEARCH_CUSTOMERS)
361
437
  }
362
438
  };
363
439
  }
@@ -393,8 +469,14 @@ export async function handlePosCheckIn(deps, req) {
393
469
  onlyIfUsed: body['reconcile'] === 'if-used'
394
470
  });
395
471
  }
396
- const snapshot = await checkIns.where('dayKey', '==', day.dayKey).where('customerKey', '==', customerKey).limit(CHECK_IN_DAY_CEILING).get();
397
- const rows = sortCheckInRows(snapshot.docs.map(rowOf));
472
+ const [snapshot, rainChecks] = await Promise.all([
473
+ checkIns.where('dayKey', '==', day.dayKey).where('customerKey', '==', customerKey).limit(CHECK_IN_DAY_CEILING).get(),
474
+ openRainChecks(checkIns, day.dayKey, {
475
+ name: 'customerKey',
476
+ key: customerKey
477
+ }, CHECK_IN_SEARCH_ROWS)
478
+ ]);
479
+ const rows = sortCheckInRows(uniqueRows(snapshot, rainChecks));
398
480
  return {
399
481
  status: 200,
400
482
  body: {
@@ -442,6 +524,15 @@ export async function handlePosCheckIn(deps, req) {
442
524
  }
443
525
  const attempt = posOpsIdempotencyKey(req) || null;
444
526
  const checker = await checkerOf(deps, staff, body);
527
+ // The day the window is working: an open rain check checked in is used
528
+ // on it, and moves to it.
529
+ const workingDay = await readCheckInDay(deps, staff.hostRef, staff.org, body['day']);
530
+ if ('error' in workingDay) return {
531
+ status: 400,
532
+ body: {
533
+ error: workingDay.error
534
+ }
535
+ };
445
536
  const nowMs = deps.now();
446
537
  const outcome = await deps.firestore().runTransaction(async (transaction)=>{
447
538
  const done = [];
@@ -461,7 +552,7 @@ export async function handlePosCheckIn(deps, req) {
461
552
  else already.push(row);
462
553
  continue;
463
554
  }
464
- const patch = {
555
+ const patch = _extends({
465
556
  status: 'checked_in',
466
557
  checkedInAtMs: nowMs,
467
558
  checkedInBy: checker.uid,
@@ -469,7 +560,13 @@ export async function handlePosCheckIn(deps, req) {
469
560
  wristband,
470
561
  checkInAttempt: attempt,
471
562
  updatedAtMs: nowMs
472
- };
563
+ }, row.rainCheckOpen === true && row.rainCheck ? {
564
+ dayKey: workingDay.dayKey,
565
+ rainCheckOpen: false,
566
+ rainCheck: _extends({}, row.rainCheck, {
567
+ claimedDayKey: workingDay.dayKey
568
+ })
569
+ } : {});
473
570
  writes.push({
474
571
  ref,
475
572
  patch
@@ -526,6 +623,7 @@ export async function handlePosCheckIn(deps, req) {
526
623
  const ref = checkIns.doc(id);
527
624
  const outcome = await deps.firestore().runTransaction(async (transaction)=>{
528
625
  var _ref;
626
+ var _row_rainCheck;
529
627
  const snapshot = await transaction.get(ref);
530
628
  if (!snapshot.exists) return {
531
629
  status: 404,
@@ -538,7 +636,16 @@ export async function handlePosCheckIn(deps, req) {
538
636
  error: 'They are not checked in yet.'
539
637
  };
540
638
  }
541
- const patch = action === 'undo' ? {
639
+ // Undoing the check-in of a rain check used today opens it again, on
640
+ // the day it waited on.
641
+ const reopened = ((_row_rainCheck = row.rainCheck) == null ? void 0 : _row_rainCheck.kind) === 'open' && row.rainCheck.claimedDayKey ? {
642
+ dayKey: row.rainCheck.fromDayKey,
643
+ rainCheckOpen: true,
644
+ rainCheck: _extends({}, row.rainCheck, {
645
+ claimedDayKey: null
646
+ })
647
+ } : {};
648
+ const patch = action === 'undo' ? _extends({
542
649
  status: 'expected',
543
650
  checkedInAtMs: null,
544
651
  checkedInBy: null,
@@ -548,7 +655,7 @@ export async function handlePosCheckIn(deps, req) {
548
655
  undoneAtMs: nowMs,
549
656
  undoneBy: (_ref = checker == null ? void 0 : checker.uid) != null ? _ref : staff.uid,
550
657
  updatedAtMs: nowMs
551
- } : {
658
+ }, reopened) : {
552
659
  wristband,
553
660
  updatedAtMs: nowMs
554
661
  };
@@ -571,6 +678,162 @@ export async function handlePosCheckIn(deps, req) {
571
678
  }
572
679
  };
573
680
  }
681
+ case 'stay_mode':
682
+ {
683
+ // The store's quick control for stays (AGL-4043): one check-in per
684
+ // stay, one per guest, or each resource's own setting. The day asked
685
+ // for is brought in line at once, so the window sees the change.
686
+ const mode = body['mode'];
687
+ if (!STAY_CHECK_IN_MODES.includes(mode)) {
688
+ return {
689
+ status: 400,
690
+ body: {
691
+ error: 'Choose per resource, one per stay or one per guest.'
692
+ }
693
+ };
694
+ }
695
+ const day = await readCheckInDay(deps, staff.hostRef, staff.org, body['day']);
696
+ if ('error' in day) return {
697
+ status: 400,
698
+ body: {
699
+ error: day.error
700
+ }
701
+ };
702
+ await staff.hostRef.collection('settings').doc(STAY_CHECK_IN_SETTINGS_DOC).set({
703
+ stays: mode,
704
+ updatedAtMs: deps.now(),
705
+ updatedBy: staff.uid
706
+ }, {
707
+ merge: true
708
+ });
709
+ await reconcileCheckInDay(deps, staff.hostRef, day, {
710
+ force: true
711
+ });
712
+ return {
713
+ status: 200,
714
+ body: {
715
+ stayCheckIn: mode,
716
+ dayKey: day.dayKey
717
+ }
718
+ };
719
+ }
720
+ case 'rain_check':
721
+ case 'undo_rain_check':
722
+ {
723
+ var _body_day;
724
+ const id = cleanCheckInId(body['id']);
725
+ if (!id) return {
726
+ status: 400,
727
+ body: {
728
+ error: 'That is not a check-in.'
729
+ }
730
+ };
731
+ const kind = body['kind'] === 'date' ? 'date' : body['kind'] === 'open' ? 'open' : null;
732
+ if (action === 'rain_check' && !kind) {
733
+ return {
734
+ status: 400,
735
+ body: {
736
+ error: 'Choose an open rain check or a new day.'
737
+ }
738
+ };
739
+ }
740
+ const askedDay = String((_body_day = body['day']) != null ? _body_day : '').trim();
741
+ // Today on the store's calendar: a pass is never moved to a day that
742
+ // has passed.
743
+ const today = await readCheckInDay(deps, staff.hostRef, staff.org, '');
744
+ if ('error' in today) return {
745
+ status: 400,
746
+ body: {
747
+ error: today.error
748
+ }
749
+ };
750
+ const checker = await checkerOf(deps, staff, body);
751
+ const nowMs = deps.now();
752
+ const ref = checkIns.doc(id);
753
+ const outcome = await deps.firestore().runTransaction(async (transaction)=>{
754
+ var _row_rainCheck;
755
+ const snapshot = await transaction.get(ref);
756
+ if (!snapshot.exists) return {
757
+ status: 404,
758
+ error: 'That check-in is no longer due.'
759
+ };
760
+ const row = rowOf(snapshot);
761
+ if (action === 'undo_rain_check') {
762
+ // Nothing to take back: already undone, and a retry says so the same way.
763
+ if (!row.rainCheck) return {
764
+ status: 200,
765
+ row
766
+ };
767
+ if (row.status !== 'expected') {
768
+ return {
769
+ status: 409,
770
+ error: 'They are already checked in. Undo the check-in first.'
771
+ };
772
+ }
773
+ const patch = {
774
+ dayKey: row.rainCheck.fromDayKey,
775
+ rainCheck: null,
776
+ rainCheckOpen: false,
777
+ rainCheckUndoneAtMs: nowMs,
778
+ rainCheckUndoneBy: checker.uid,
779
+ updatedAtMs: nowMs
780
+ };
781
+ transaction.update(ref, patch);
782
+ return {
783
+ status: 200,
784
+ row: _extends({}, row, patch)
785
+ };
786
+ }
787
+ // The same rain check asked again (a retried tap) answers what it made.
788
+ if (row.status === 'expected' && (kind === 'open' && row.rainCheckOpen === true || kind === 'date' && ((_row_rainCheck = row.rainCheck) == null ? void 0 : _row_rainCheck.kind) === 'date' && row.rainCheck.toDayKey === askedDay)) {
789
+ return {
790
+ status: 200,
791
+ row
792
+ };
793
+ }
794
+ const problem = rainCheckProblem(row, {
795
+ kind: kind,
796
+ dayKey: askedDay
797
+ }, today.dayKey);
798
+ if (problem) return {
799
+ status: row.status === 'expected' ? 400 : 409,
800
+ error: problem
801
+ };
802
+ const rainCheck = {
803
+ kind: kind,
804
+ fromDayKey: row.dayKey,
805
+ toDayKey: kind === 'date' ? askedDay : null,
806
+ claimedDayKey: null,
807
+ byUid: checker.uid,
808
+ byName: checker.name || null,
809
+ atMs: nowMs
810
+ };
811
+ const patch = _extends({}, kind === 'date' ? {
812
+ dayKey: askedDay
813
+ } : {}, {
814
+ rainCheck,
815
+ rainCheckOpen: kind === 'open',
816
+ updatedAtMs: nowMs
817
+ });
818
+ transaction.update(ref, patch);
819
+ return {
820
+ status: 200,
821
+ row: _extends({}, row, patch)
822
+ };
823
+ });
824
+ if ('error' in outcome) return {
825
+ status: outcome.status,
826
+ body: {
827
+ error: outcome.error
828
+ }
829
+ };
830
+ return {
831
+ status: 200,
832
+ body: {
833
+ checkIn: outcome.row
834
+ }
835
+ };
836
+ }
574
837
  default:
575
838
  return {
576
839
  status: 400,
@@ -609,7 +872,10 @@ async function handleDayList(deps, req) {
609
872
  };
610
873
  const { truncated } = await reconcileCheckInDay(deps, staff.hostRef, day);
611
874
  const snapshot = await staff.hostRef.collection('checkIns').where('dayKey', '==', day.dayKey).limit(CHECK_IN_DAY_CEILING + 1).get();
612
- const rows = sortCheckInRows(snapshot.docs.slice(0, CHECK_IN_DAY_CEILING).map(rowOf));
875
+ const [rows, stayCheckIn] = await Promise.all([
876
+ Promise.resolve(sortCheckInRows(snapshot.docs.slice(0, CHECK_IN_DAY_CEILING).map(rowOf))),
877
+ readStayCheckInMode(staff.hostRef)
878
+ ]);
613
879
  if (format === 'csv') {
614
880
  return {
615
881
  status: 200,
@@ -624,6 +890,8 @@ async function handleDayList(deps, req) {
624
890
  timeZone: day.timeZone,
625
891
  totals: checkInDayTotals(rows),
626
892
  checkIns: rows,
893
+ // How stays are checked in, for the screen's quick control.
894
+ stayCheckIn,
627
895
  truncated: truncated || snapshot.docs.length > CHECK_IN_DAY_CEILING
628
896
  }
629
897
  };