@vendure/admin-ui 2.0.0-next.2 → 2.0.0-next.21

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 (341) hide show
  1. package/catalog/catalog.module.d.ts +15 -11
  2. package/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.d.ts +22 -0
  3. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.d.ts +41 -0
  4. package/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.d.ts +4 -0
  5. package/catalog/components/collection-contents/collection-contents.component.d.ts +10 -2
  6. package/catalog/components/collection-detail/collection-detail.component.d.ts +13 -4
  7. package/catalog/components/collection-list/collection-list-bulk-actions.d.ts +6 -0
  8. package/catalog/components/collection-list/collection-list.component.d.ts +9 -5
  9. package/catalog/components/collection-tree/array-to-tree.d.ts +1 -1
  10. package/catalog/components/collection-tree/collection-tree-node.component.d.ts +14 -6
  11. package/catalog/components/collection-tree/collection-tree.component.d.ts +4 -1
  12. package/catalog/components/facet-list/facet-list-bulk-actions.d.ts +5 -0
  13. package/catalog/components/facet-list/facet-list.component.d.ts +2 -1
  14. package/catalog/components/generate-product-variants/generate-product-variants.component.d.ts +3 -3
  15. package/catalog/components/option-value-input/option-value-input.component.d.ts +21 -9
  16. package/catalog/components/product-detail/product-detail.component.d.ts +1 -1
  17. package/catalog/components/product-list/product-list-bulk-actions.d.ts +6 -0
  18. package/catalog/components/product-list/product-list.component.d.ts +4 -2
  19. package/catalog/components/product-variants-editor/product-variants-editor.component.d.ts +22 -12
  20. package/catalog/components/product-variants-list/product-variants-list.component.d.ts +1 -0
  21. package/catalog/public_api.d.ts +6 -1
  22. package/core/common/component-registry-types.d.ts +1 -1
  23. package/core/common/generated-types.d.ts +3184 -195
  24. package/core/common/utilities/bulk-action-utils.d.ts +19 -0
  25. package/core/common/utilities/configurable-operation-utils.d.ts +7 -2
  26. package/core/common/utilities/selection-manager.d.ts +30 -0
  27. package/core/common/version.d.ts +1 -1
  28. package/core/components/app-shell/app-shell.component.d.ts +1 -0
  29. package/core/data/definitions/collection-definitions.d.ts +4 -0
  30. package/core/data/definitions/facet-definitions.d.ts +3 -0
  31. package/core/data/definitions/order-definitions.d.ts +14 -0
  32. package/core/data/definitions/product-definitions.d.ts +2 -0
  33. package/core/data/providers/collection-data.service.d.ts +7 -0
  34. package/core/data/providers/facet-data.service.d.ts +3 -0
  35. package/core/data/providers/order-data.service.d.ts +18 -0
  36. package/core/data/providers/product-data.service.d.ts +2 -0
  37. package/core/providers/bulk-action-registry/bulk-action-registry.service.d.ts +9 -0
  38. package/core/providers/bulk-action-registry/bulk-action-types.d.ts +149 -0
  39. package/core/providers/bulk-action-registry/register-bulk-action.d.ts +53 -0
  40. package/core/providers/local-storage/local-storage.service.d.ts +1 -0
  41. package/core/providers/modal/modal.types.d.ts +2 -0
  42. package/core/providers/nav-builder/nav-builder-types.d.ts +1 -0
  43. package/core/public_api.d.ts +24 -1
  44. package/core/shared/components/asset-gallery/asset-gallery.component.d.ts +27 -3
  45. package/core/shared/components/bulk-action-menu/bulk-action-menu.component.d.ts +32 -0
  46. package/core/shared/components/configurable-input/configurable-input.component.d.ts +8 -3
  47. package/core/shared/components/custom-field-control/custom-field-control.component.d.ts +6 -2
  48. package/core/shared/components/data-table/data-table.component.d.ts +29 -7
  49. package/core/shared/components/dropdown/dropdown-menu.component.d.ts +2 -1
  50. package/core/shared/components/facet-value-selector/facet-value-selector.component.d.ts +3 -2
  51. package/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.d.ts +38 -0
  52. package/{catalog → core/shared}/components/product-search-input/product-search-input.component.d.ts +1 -1
  53. package/core/shared/components/radio-card/radio-card-fieldset.component.d.ts +24 -0
  54. package/core/shared/components/radio-card/radio-card.component.d.ts +22 -0
  55. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.d.ts +31 -0
  56. package/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.d.ts +34 -0
  57. package/core/shared/components/rich-text-editor/prosemirror/custom-nodes.d.ts +4 -0
  58. package/core/shared/components/rich-text-editor/prosemirror/inputrules.d.ts +5 -5
  59. package/core/shared/components/rich-text-editor/prosemirror/menu/links.d.ts +1 -1
  60. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.d.ts +12 -0
  61. package/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.d.ts +9 -0
  62. package/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.d.ts +14 -0
  63. package/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.d.ts +7 -0
  64. package/core/shared/components/rich-text-editor/prosemirror/plugins/link-select-plugin.d.ts +1 -1
  65. package/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.d.ts +7 -0
  66. package/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.d.ts +13 -0
  67. package/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.d.ts +7 -3
  68. package/core/shared/components/rich-text-editor/prosemirror/types.d.ts +0 -2
  69. package/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.d.ts +21 -0
  70. package/core/shared/components/rich-text-editor/rich-text-editor.component.d.ts +6 -2
  71. package/core/shared/components/select-toggle/select-toggle.component.d.ts +2 -1
  72. package/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.d.ts +30 -0
  73. package/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.d.ts +22 -0
  74. package/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.d.ts +5 -17
  75. package/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.d.ts +28 -0
  76. package/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.d.ts +2 -0
  77. package/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.d.ts +23 -0
  78. package/core/shared/dynamic-form-inputs/register-dynamic-input-components.d.ts +5 -1
  79. package/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.d.ts +6 -3
  80. package/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.d.ts +10 -2
  81. package/core/shared/pipes/custom-field-description.pipe.d.ts +11 -0
  82. package/core/shared/pipes/custom-field-label.pipe.d.ts +4 -10
  83. package/core/shared/shared.module.d.ts +68 -57
  84. package/customer/components/customer-group-list/customer-group-list.component.d.ts +6 -4
  85. package/customer/components/customer-group-member-list/customer-group-member-list.component.d.ts +11 -4
  86. package/esm2020/catalog/catalog.module.mjs +31 -10
  87. package/esm2020/catalog/components/apply-facet-dialog/apply-facet-dialog.component.mjs +1 -1
  88. package/esm2020/catalog/components/assets/assets.component.mjs +2 -2
  89. package/esm2020/catalog/components/assign-products-to-channel-dialog/assign-products-to-channel-dialog.component.mjs +4 -1
  90. package/esm2020/catalog/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +50 -0
  91. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.component.mjs +84 -0
  92. package/esm2020/catalog/components/bulk-add-facet-values-dialog/bulk-add-facet-values-dialog.graphql.mjs +69 -0
  93. package/esm2020/catalog/components/collection-contents/collection-contents.component.mjs +61 -13
  94. package/esm2020/catalog/components/collection-detail/collection-detail.component.mjs +70 -32
  95. package/esm2020/catalog/components/collection-list/collection-list-bulk-actions.mjs +143 -0
  96. package/esm2020/catalog/components/collection-list/collection-list.component.mjs +46 -12
  97. package/esm2020/catalog/components/collection-tree/array-to-tree.mjs +3 -3
  98. package/esm2020/catalog/components/collection-tree/collection-tree-node.component.mjs +36 -10
  99. package/esm2020/catalog/components/collection-tree/collection-tree.component.mjs +9 -4
  100. package/esm2020/catalog/components/facet-detail/facet-detail.component.mjs +3 -3
  101. package/esm2020/catalog/components/facet-list/facet-list-bulk-actions.mjs +202 -0
  102. package/esm2020/catalog/components/facet-list/facet-list.component.mjs +14 -5
  103. package/esm2020/catalog/components/generate-product-variants/generate-product-variants.component.mjs +12 -4
  104. package/esm2020/catalog/components/option-value-input/option-value-input.component.mjs +70 -11
  105. package/esm2020/catalog/components/product-detail/product-detail.component.mjs +36 -24
  106. package/esm2020/catalog/components/product-list/product-list-bulk-actions.mjs +168 -0
  107. package/esm2020/catalog/components/product-list/product-list.component.mjs +13 -9
  108. package/esm2020/catalog/components/product-variants-editor/product-variants-editor.component.mjs +130 -19
  109. package/esm2020/catalog/components/product-variants-list/product-variants-list.component.mjs +9 -3
  110. package/esm2020/catalog/providers/routing/collection-resolver.mjs +2 -1
  111. package/esm2020/catalog/public_api.mjs +7 -2
  112. package/esm2020/core/app.component.module.mjs +1 -1
  113. package/esm2020/core/common/base-detail.component.mjs +1 -1
  114. package/esm2020/core/common/component-registry-types.mjs +1 -1
  115. package/esm2020/core/common/deactivate-aware.mjs +1 -1
  116. package/esm2020/core/common/generated-types.mjs +31 -1
  117. package/esm2020/core/common/introspection-result.mjs +296 -189
  118. package/esm2020/core/common/utilities/bulk-action-utils.mjs +35 -0
  119. package/esm2020/core/common/utilities/configurable-operation-utils.mjs +37 -10
  120. package/esm2020/core/common/utilities/selection-manager.mjs +96 -0
  121. package/esm2020/core/common/version.mjs +2 -2
  122. package/esm2020/core/components/app-shell/app-shell.component.mjs +6 -5
  123. package/esm2020/core/components/breadcrumb/breadcrumb.component.mjs +2 -2
  124. package/esm2020/core/components/channel-switcher/channel-switcher.component.mjs +1 -1
  125. package/esm2020/core/components/main-nav/main-nav.component.mjs +3 -3
  126. package/esm2020/core/components/user-menu/user-menu.component.mjs +1 -1
  127. package/esm2020/core/core.module.mjs +1 -1
  128. package/esm2020/core/data/definitions/collection-definitions.mjs +47 -1
  129. package/esm2020/core/data/definitions/facet-definitions.mjs +31 -1
  130. package/esm2020/core/data/definitions/order-definitions.mjs +583 -455
  131. package/esm2020/core/data/definitions/product-definitions.mjs +23 -1
  132. package/esm2020/core/data/definitions/shared-definitions.mjs +29 -28
  133. package/esm2020/core/data/providers/collection-data.service.mjs +20 -2
  134. package/esm2020/core/data/providers/customer-data.service.mjs +6 -1
  135. package/esm2020/core/data/providers/facet-data.service.mjs +18 -2
  136. package/esm2020/core/data/providers/order-data.service.mjs +43 -2
  137. package/esm2020/core/data/providers/product-data.service.mjs +10 -2
  138. package/esm2020/core/data/providers/promotion-data.service.mjs +1 -1
  139. package/esm2020/core/data/utils/remove-readonly-custom-fields.mjs +8 -1
  140. package/esm2020/core/providers/bulk-action-registry/bulk-action-registry.service.mjs +28 -0
  141. package/esm2020/core/providers/bulk-action-registry/bulk-action-types.mjs +2 -0
  142. package/esm2020/core/providers/bulk-action-registry/register-bulk-action.mjs +63 -0
  143. package/esm2020/core/providers/dashboard-widget/dashboard-widget.service.mjs +1 -4
  144. package/esm2020/core/providers/local-storage/local-storage.service.mjs +1 -1
  145. package/esm2020/core/providers/modal/modal.service.mjs +2 -1
  146. package/esm2020/core/providers/modal/modal.types.mjs +1 -1
  147. package/esm2020/core/providers/nav-builder/nav-builder-types.mjs +1 -1
  148. package/esm2020/core/public_api.mjs +25 -2
  149. package/esm2020/core/shared/components/action-bar/action-bar.component.mjs +7 -15
  150. package/esm2020/core/shared/components/address-form/address-form.component.mjs +3 -3
  151. package/esm2020/core/shared/components/asset-gallery/asset-gallery.component.mjs +34 -51
  152. package/esm2020/core/shared/components/asset-preview/asset-preview.component.mjs +4 -4
  153. package/esm2020/core/shared/components/asset-preview-links/asset-preview-links.component.mjs +1 -1
  154. package/esm2020/core/shared/components/bulk-action-menu/bulk-action-menu.component.mjs +97 -0
  155. package/esm2020/core/shared/components/configurable-input/configurable-input.component.mjs +22 -10
  156. package/esm2020/core/shared/components/custom-field-control/custom-field-control.component.mjs +18 -10
  157. package/esm2020/core/shared/components/data-table/data-table.component.mjs +64 -14
  158. package/esm2020/core/shared/components/datetime-picker/datetime-picker.component.mjs +1 -1
  159. package/esm2020/core/shared/components/dropdown/dropdown-menu.component.mjs +26 -23
  160. package/esm2020/core/shared/components/dropdown/dropdown-trigger.directive.mjs +1 -1
  161. package/esm2020/core/shared/components/entity-info/entity-info.component.mjs +1 -1
  162. package/esm2020/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +13 -6
  163. package/esm2020/core/shared/components/formatted-address/formatted-address.component.mjs +3 -3
  164. package/esm2020/core/shared/components/help-tooltip/help-tooltip.component.mjs +2 -2
  165. package/esm2020/core/shared/components/history-entry-detail/history-entry-detail.component.mjs +1 -1
  166. package/esm2020/core/shared/components/language-selector/language-selector.component.mjs +3 -3
  167. package/esm2020/core/shared/components/object-tree/object-tree.component.mjs +1 -1
  168. package/esm2020/core/shared/components/order-state-label/order-state-label.component.mjs +2 -1
  169. package/esm2020/core/shared/components/product-multi-selector-dialog/product-multi-selector-dialog.component.mjs +135 -0
  170. package/esm2020/core/shared/components/product-search-input/product-search-input.component.mjs +108 -0
  171. package/esm2020/core/shared/components/product-variant-selector/product-variant-selector.component.mjs +2 -2
  172. package/esm2020/core/shared/components/radio-card/radio-card-fieldset.component.mjs +54 -0
  173. package/esm2020/core/shared/components/radio-card/radio-card.component.mjs +53 -0
  174. package/esm2020/core/shared/components/rich-text-editor/external-image-dialog/external-image-dialog.component.mjs +3 -3
  175. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.component.mjs +136 -0
  176. package/esm2020/core/shared/components/rich-text-editor/prosemirror/context-menu/context-menu.service.mjs +46 -0
  177. package/esm2020/core/shared/components/rich-text-editor/prosemirror/custom-nodes.mjs +57 -0
  178. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/links.mjs +4 -4
  179. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-common.mjs +22 -1
  180. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu-plugin.mjs +12 -0
  181. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/menu.mjs +73 -18
  182. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/sub-menu-with-icon.mjs +16 -0
  183. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/image-plugin.mjs +100 -0
  184. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/raw-editor-plugin.mjs +96 -0
  185. package/esm2020/core/shared/components/rich-text-editor/prosemirror/plugins/tables-plugin.mjs +166 -0
  186. package/esm2020/core/shared/components/rich-text-editor/prosemirror/prosemirror.service.mjs +47 -18
  187. package/esm2020/core/shared/components/rich-text-editor/prosemirror/types.mjs +1 -1
  188. package/esm2020/core/shared/components/rich-text-editor/raw-html-dialog/raw-html-dialog.component.mjs +59 -0
  189. package/esm2020/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +22 -10
  190. package/esm2020/core/shared/components/select-toggle/select-toggle.component.mjs +6 -3
  191. package/esm2020/core/shared/components/simple-dialog/simple-dialog.component.mjs +3 -3
  192. package/esm2020/core/shared/components/ui-extension-point/ui-extension-point.component.mjs +1 -1
  193. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/base-code-editor-form-input.component.mjs +57 -0
  194. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/html-editor-form-input.component.mjs +63 -0
  195. package/esm2020/core/shared/dynamic-form-inputs/code-editor-form-input/json-editor-form-input.component.mjs +48 -83
  196. package/esm2020/core/shared/dynamic-form-inputs/combination-mode-form-input/combination-mode-form-input.component.mjs +45 -0
  197. package/esm2020/core/shared/dynamic-form-inputs/dynamic-form-input/dynamic-form-input.component.mjs +3 -3
  198. package/esm2020/core/shared/dynamic-form-inputs/facet-value-form-input/facet-value-form-input.component.mjs +12 -3
  199. package/esm2020/core/shared/dynamic-form-inputs/product-multi-selector-form-input/product-multi-selector-form-input.component.mjs +48 -0
  200. package/esm2020/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +7 -1
  201. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/asset/relation-asset-input.component.mjs +11 -9
  202. package/esm2020/core/shared/dynamic-form-inputs/relation-form-input/generic/relation-generic-input.component.mjs +1 -1
  203. package/esm2020/core/shared/dynamic-form-inputs/select-form-input/select-form-input.component.mjs +21 -11
  204. package/esm2020/core/shared/pipes/custom-field-description.pipe.mjs +30 -0
  205. package/esm2020/core/shared/pipes/custom-field-label.pipe.mjs +7 -19
  206. package/esm2020/core/shared/pipes/locale-currency.pipe.mjs +10 -2
  207. package/esm2020/core/shared/pipes/state-i18n-token.pipe.mjs +2 -1
  208. package/esm2020/core/shared/shared.module.mjs +49 -5
  209. package/esm2020/customer/components/address-card/address-card.component.mjs +1 -1
  210. package/esm2020/customer/components/customer-detail/customer-detail.component.mjs +1 -1
  211. package/esm2020/customer/components/customer-group-list/customer-group-list.component.mjs +33 -18
  212. package/esm2020/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +3 -3
  213. package/esm2020/customer/components/customer-history/customer-history.component.mjs +1 -1
  214. package/esm2020/customer/components/customer-list/customer-list.component.mjs +3 -3
  215. package/esm2020/dashboard/components/dashboard/dashboard.component.mjs +2 -2
  216. package/esm2020/dashboard/components/dashboard-widget/dashboard-widget.component.mjs +2 -2
  217. package/esm2020/dashboard/dashboard.module.mjs +6 -2
  218. package/esm2020/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
  219. package/esm2020/dashboard/widgets/order-summary-widget/order-summary-widget.component.mjs +2 -2
  220. package/esm2020/login/components/login/login.component.mjs +3 -3
  221. package/esm2020/marketing/components/promotion-detail/promotion-detail.component.mjs +3 -3
  222. package/esm2020/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
  223. package/esm2020/order/components/cancel-order-dialog/cancel-order-dialog.component.mjs +1 -1
  224. package/esm2020/order/components/coupon-code-selector/coupon-code-selector.component.mjs +42 -0
  225. package/esm2020/order/components/draft-order-detail/draft-order-detail.component.mjs +187 -0
  226. package/esm2020/order/components/draft-order-variant-selector/draft-order-variant-selector.component.mjs +59 -0
  227. package/esm2020/order/components/fulfill-order-dialog/fulfill-order-dialog.component.mjs +7 -3
  228. package/esm2020/order/components/fulfillment-card/fulfillment-card.component.mjs +1 -1
  229. package/esm2020/order/components/fulfillment-detail/fulfillment-detail.component.mjs +8 -17
  230. package/esm2020/order/components/line-fulfillment/line-fulfillment.component.mjs +8 -22
  231. package/esm2020/order/components/order-custom-fields-card/order-custom-fields-card.component.mjs +30 -6
  232. package/esm2020/order/components/order-detail/order-detail.component.mjs +80 -40
  233. package/esm2020/order/components/order-editor/order-editor.component.mjs +15 -14
  234. package/esm2020/order/components/order-edits-preview-dialog/order-edits-preview-dialog.component.mjs +1 -1
  235. package/esm2020/order/components/order-history/order-history.component.mjs +1 -1
  236. package/esm2020/order/components/order-list/order-list.component.mjs +40 -17
  237. package/esm2020/order/components/order-payment-card/order-payment-card.component.mjs +3 -3
  238. package/esm2020/order/components/order-table/order-table.component.mjs +29 -6
  239. package/esm2020/order/components/refund-order-dialog/refund-order-dialog.component.mjs +2 -2
  240. package/esm2020/order/components/select-address-dialog/select-address-dialog.component.mjs +89 -0
  241. package/esm2020/order/components/select-address-dialog/select-address-dialog.graphql.mjs +14 -0
  242. package/esm2020/order/components/select-customer-dialog/select-customer-dialog.component.mjs +59 -0
  243. package/esm2020/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.mjs +31 -0
  244. package/esm2020/order/order.module.mjs +20 -2
  245. package/esm2020/order/order.routes.mjs +23 -4
  246. package/esm2020/order/providers/routing/order-resolver.mjs +29 -11
  247. package/esm2020/order/providers/routing/order.guard.mjs +37 -0
  248. package/esm2020/order/public_api.mjs +9 -1
  249. package/esm2020/settings/components/administrator-list/administrator-list.component.mjs +1 -1
  250. package/esm2020/settings/components/channel-list/channel-list.component.mjs +1 -1
  251. package/esm2020/settings/components/country-list/country-list.component.mjs +3 -3
  252. package/esm2020/settings/components/payment-method-detail/payment-method-detail.component.mjs +1 -1
  253. package/esm2020/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
  254. package/esm2020/settings/components/permission-grid/permission-grid.component.mjs +1 -1
  255. package/esm2020/settings/components/profile/profile.component.mjs +3 -3
  256. package/esm2020/settings/components/role-list/role-list.component.mjs +1 -1
  257. package/esm2020/settings/components/shipping-method-detail/shipping-method-detail.component.mjs +4 -2
  258. package/esm2020/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
  259. package/esm2020/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
  260. package/esm2020/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
  261. package/esm2020/settings/components/zone-detail-dialog/zone-detail-dialog.component.mjs +2 -2
  262. package/esm2020/settings/components/zone-list/zone-list.component.mjs +3 -3
  263. package/esm2020/settings/components/zone-member-list/zone-member-list.component.mjs +3 -3
  264. package/esm2020/system/components/health-check/health-check.component.mjs +2 -2
  265. package/esm2020/system/components/job-list/job-list.component.mjs +1 -1
  266. package/fesm2015/vendure-admin-ui-catalog.mjs +1206 -228
  267. package/fesm2015/vendure-admin-ui-catalog.mjs.map +1 -1
  268. package/fesm2015/vendure-admin-ui-core.mjs +9451 -7332
  269. package/fesm2015/vendure-admin-ui-core.mjs.map +1 -1
  270. package/fesm2015/vendure-admin-ui-customer.mjs +36 -23
  271. package/fesm2015/vendure-admin-ui-customer.mjs.map +1 -1
  272. package/fesm2015/vendure-admin-ui-dashboard.mjs +11 -7
  273. package/fesm2015/vendure-admin-ui-dashboard.mjs.map +1 -1
  274. package/fesm2015/vendure-admin-ui-login.mjs +2 -2
  275. package/fesm2015/vendure-admin-ui-login.mjs.map +1 -1
  276. package/fesm2015/vendure-admin-ui-marketing.mjs +3 -3
  277. package/fesm2015/vendure-admin-ui-marketing.mjs.map +1 -1
  278. package/fesm2015/vendure-admin-ui-order.mjs +1184 -599
  279. package/fesm2015/vendure-admin-ui-order.mjs.map +1 -1
  280. package/fesm2015/vendure-admin-ui-settings.mjs +21 -19
  281. package/fesm2015/vendure-admin-ui-settings.mjs.map +1 -1
  282. package/fesm2015/vendure-admin-ui-system.mjs +3 -3
  283. package/fesm2020/vendure-admin-ui-catalog.mjs +1190 -230
  284. package/fesm2020/vendure-admin-ui-catalog.mjs.map +1 -1
  285. package/fesm2020/vendure-admin-ui-core.mjs +9539 -7437
  286. package/fesm2020/vendure-admin-ui-core.mjs.map +1 -1
  287. package/fesm2020/vendure-admin-ui-customer.mjs +36 -23
  288. package/fesm2020/vendure-admin-ui-customer.mjs.map +1 -1
  289. package/fesm2020/vendure-admin-ui-dashboard.mjs +11 -7
  290. package/fesm2020/vendure-admin-ui-dashboard.mjs.map +1 -1
  291. package/fesm2020/vendure-admin-ui-login.mjs +2 -2
  292. package/fesm2020/vendure-admin-ui-login.mjs.map +1 -1
  293. package/fesm2020/vendure-admin-ui-marketing.mjs +3 -3
  294. package/fesm2020/vendure-admin-ui-marketing.mjs.map +1 -1
  295. package/fesm2020/vendure-admin-ui-order.mjs +1194 -614
  296. package/fesm2020/vendure-admin-ui-order.mjs.map +1 -1
  297. package/fesm2020/vendure-admin-ui-settings.mjs +21 -19
  298. package/fesm2020/vendure-admin-ui-settings.mjs.map +1 -1
  299. package/fesm2020/vendure-admin-ui-system.mjs +3 -3
  300. package/order/components/coupon-code-selector/coupon-code-selector.component.d.ts +21 -0
  301. package/order/components/draft-order-detail/draft-order-detail.component.d.ts +52 -0
  302. package/order/components/draft-order-variant-selector/draft-order-variant-selector.component.d.ts +24 -0
  303. package/order/components/order-custom-fields-card/order-custom-fields-card.component.d.ts +4 -2
  304. package/order/components/order-editor/order-editor.component.d.ts +1 -6
  305. package/order/components/order-list/order-list.component.d.ts +2 -0
  306. package/order/components/order-table/order-table.component.d.ts +12 -2
  307. package/order/components/select-address-dialog/select-address-dialog.component.d.ts +27 -0
  308. package/order/components/select-address-dialog/select-address-dialog.graphql.d.ts +1 -0
  309. package/order/components/select-customer-dialog/select-customer-dialog.component.d.ts +25 -0
  310. package/order/components/select-shipping-method-dialog/select-shipping-method-dialog.component.d.ts +19 -0
  311. package/order/order.module.d.ts +9 -3
  312. package/order/providers/routing/order-resolver.d.ts +8 -3
  313. package/order/providers/routing/order.guard.d.ts +12 -0
  314. package/order/public_api.d.ts +8 -0
  315. package/package.json +13 -12
  316. package/settings/components/zone-member-list/zone-member-list.component.d.ts +3 -1
  317. package/static/i18n-messages/cs.json +50 -3
  318. package/static/i18n-messages/de.json +53 -3
  319. package/static/i18n-messages/en.json +55 -8
  320. package/static/i18n-messages/es.json +50 -3
  321. package/static/i18n-messages/fr.json +50 -3
  322. package/static/i18n-messages/it.json +50 -3
  323. package/static/i18n-messages/pl.json +50 -3
  324. package/static/i18n-messages/pt_BR.json +50 -3
  325. package/static/i18n-messages/pt_PT.json +50 -3
  326. package/static/i18n-messages/ru.json +50 -3
  327. package/static/i18n-messages/uk.json +50 -3
  328. package/static/i18n-messages/zh_Hans.json +50 -3
  329. package/static/i18n-messages/zh_Hant.json +50 -3
  330. package/static/styles/_variables.scss +4 -0
  331. package/static/styles/global/_forms.scss +8 -7
  332. package/static/styles/global/_overrides.scss +11 -1
  333. package/static/styles/global/_sass-overrides.scss +3 -0
  334. package/static/styles/global/_utilities.scss +14 -0
  335. package/static/styles/styles.scss +1 -0
  336. package/static/styles/theme/default.scss +13 -1
  337. package/static/styles/ui-extension-theme.scss +1 -0
  338. package/static/theme.min.css +1 -1
  339. package/core/shared/components/rich-text-editor/prosemirror/menu/images.d.ts +0 -4
  340. package/esm2020/catalog/components/product-search-input/product-search-input.component.mjs +0 -107
  341. package/esm2020/core/shared/components/rich-text-editor/prosemirror/menu/images.mjs +0 -36
@@ -1 +1 @@
1
- {"version":3,"file":"vendure-admin-ui-order.mjs","sources":["../../src/lib/order/src/components/add-manual-payment-dialog/add-manual-payment-dialog.component.ts","../../src/lib/order/src/components/add-manual-payment-dialog/add-manual-payment-dialog.component.html","../../src/lib/order/src/components/cancel-order-dialog/cancel-order-dialog.component.ts","../../src/lib/order/src/components/cancel-order-dialog/cancel-order-dialog.component.html","../../src/lib/order/src/components/fulfill-order-dialog/fulfill-order-dialog.component.ts","../../src/lib/order/src/components/fulfill-order-dialog/fulfill-order-dialog.component.html","../../src/lib/order/src/components/fulfillment-state-label/fulfillment-state-label.component.ts","../../src/lib/order/src/components/fulfillment-state-label/fulfillment-state-label.component.html","../../src/lib/order/src/components/simple-item-list/simple-item-list.component.ts","../../src/lib/order/src/components/simple-item-list/simple-item-list.component.html","../../src/lib/order/src/components/fulfillment-detail/fulfillment-detail.component.ts","../../src/lib/order/src/components/fulfillment-detail/fulfillment-detail.component.html","../../src/lib/order/src/components/fulfillment-card/fulfillment-card.component.ts","../../src/lib/order/src/components/fulfillment-card/fulfillment-card.component.html","../../src/lib/order/src/components/line-fulfillment/line-fulfillment.component.ts","../../src/lib/order/src/components/line-fulfillment/line-fulfillment.component.html","../../src/lib/order/src/components/line-refunds/line-refunds.component.ts","../../src/lib/order/src/components/line-refunds/line-refunds.component.html","../../src/lib/order/src/components/modification-detail/modification-detail.component.ts","../../src/lib/order/src/components/modification-detail/modification-detail.component.html","../../src/lib/order/src/components/order-custom-fields-card/order-custom-fields-card.component.ts","../../src/lib/order/src/components/order-custom-fields-card/order-custom-fields-card.component.html","../../src/lib/order/src/components/order-process-graph/constants.ts","../../src/lib/order/src/components/order-process-graph/order-process-node.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-node.component.html","../../src/lib/order/src/components/order-process-graph/order-process-edge.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-edge.component.html","../../src/lib/order/src/components/order-process-graph/order-process-graph.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-graph.component.html","../../src/lib/order/src/components/order-process-graph-dialog/order-process-graph-dialog.component.ts","../../src/lib/order/src/components/order-process-graph-dialog/order-process-graph-dialog.component.html","../../src/lib/order/src/components/refund-order-dialog/refund-order-dialog.component.ts","../../src/lib/order/src/components/refund-order-dialog/refund-order-dialog.component.html","../../src/lib/order/src/components/settle-refund-dialog/settle-refund-dialog.component.ts","../../src/lib/order/src/components/settle-refund-dialog/settle-refund-dialog.component.html","../../src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.ts","../../src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.html","../../src/lib/order/src/providers/order-transition.service.ts","../../src/lib/order/src/components/order-table/order-table.component.ts","../../src/lib/order/src/components/order-table/order-table.component.html","../../src/lib/order/src/components/payment-detail/payment-detail.component.ts","../../src/lib/order/src/components/payment-detail/payment-detail.component.html","../../src/lib/order/src/components/order-history/order-history.component.ts","../../src/lib/order/src/components/order-history/order-history.component.html","../../src/lib/order/src/components/payment-state-label/payment-state-label.component.ts","../../src/lib/order/src/components/payment-state-label/payment-state-label.component.html","../../src/lib/order/src/components/refund-state-label/refund-state-label.component.ts","../../src/lib/order/src/components/refund-state-label/refund-state-label.component.html","../../src/lib/order/src/components/order-payment-card/order-payment-card.component.ts","../../src/lib/order/src/components/order-payment-card/order-payment-card.component.html","../../src/lib/order/src/components/order-detail/order-detail.component.ts","../../src/lib/order/src/components/order-detail/order-detail.component.html","../../src/lib/order/src/components/order-edits-preview-dialog/order-edits-preview-dialog.component.ts","../../src/lib/order/src/components/order-edits-preview-dialog/order-edits-preview-dialog.component.html","../../src/lib/order/src/components/order-editor/order-editor.component.ts","../../src/lib/order/src/components/order-editor/order-editor.component.html","../../src/lib/order/src/components/order-list/order-list.component.ts","../../src/lib/order/src/components/order-list/order-list.component.html","../../src/lib/order/src/providers/routing/order-resolver.ts","../../src/lib/order/src/order.routes.ts","../../src/lib/order/src/order.module.ts","../../src/lib/order/src/public_api.ts","../../src/lib/order/src/vendure-admin-ui-order.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n Dialog,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n ManualPaymentInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-add-manual-payment-dialog',\r\n templateUrl: './add-manual-payment-dialog.component.html',\r\n styleUrls: ['./add-manual-payment-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddManualPaymentDialogComponent implements OnInit, Dialog<Omit<ManualPaymentInput, 'orderId'>> {\r\n // populated by ModalService call\r\n outstandingAmount: number;\r\n currencyCode: CurrencyCode;\r\n\r\n resolveWith: (result?: Omit<ManualPaymentInput, 'orderId'>) => void;\r\n form = new FormGroup({\r\n method: new FormControl('', Validators.required),\r\n transactionId: new FormControl('', Validators.required),\r\n });\r\n paymentMethods$: Observable<Array<ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>>>;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.paymentMethods$ = this.dataService.settings\r\n .getPaymentMethods(999)\r\n .mapSingle(data => data.paymentMethods.items);\r\n }\r\n\r\n submit() {\r\n const formValue = this.form.value;\r\n this.resolveWith({\r\n method: formValue.method,\r\n transactionId: formValue.transactionId,\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.add-payment-to-order' | translate }}</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'order.payment-method' | translate\" for=\"method\">\r\n <ng-select\r\n [items]=\"paymentMethods$ | async\"\r\n bindLabel=\"code\"\r\n autofocus\r\n bindValue=\"code\"\r\n [addTag]=\"true\"\r\n formControlName=\"method\"\r\n ></ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'order.transaction-id' | translate\" for=\"transactionId\">\r\n <input id=\"transactionId\" type=\"text\" formControlName=\"transactionId\" />\r\n </vdr-form-field>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" class=\"btn btn-primary\" [disabled]=\"form.invalid || form.pristine\">\r\n {{ 'order.add-payment' | translate }} ({{ outstandingAmount | localeCurrency: currencyCode }})\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CancelOrderInput,\n Dialog,\n getAppConfig,\n I18nService,\n OrderDetailFragment,\n OrderLineInput,\n} from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-cancel-order-dialog',\n templateUrl: './cancel-order-dialog.component.html',\n styleUrls: ['./cancel-order-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CancelOrderDialogComponent implements OnInit, Dialog<CancelOrderInput> {\n order: OrderDetailFragment;\n cancelAll = true;\n resolveWith: (result?: CancelOrderInput) => void;\n reason: string;\n lineQuantities: { [lineId: string]: number } = {};\n reasons: string[] = getAppConfig().cancellationReasons ?? [\n _('order.cancel-reason-customer-request'),\n _('order.cancel-reason-not-available'),\n ];\n\n get selectionCount(): number {\n return Object.values(this.lineQuantities).reduce((sum, n) => sum + n, 0);\n }\n\n constructor(private i18nService: I18nService) {\n this.reasons = this.reasons.map(r => this.i18nService.translate(r));\n }\n\n ngOnInit() {\n this.lineQuantities = this.order.lines.reduce((result, line) => {\n return { ...result, [line.id]: line.quantity };\n }, {});\n }\n\n radioChanged() {\n if (this.cancelAll) {\n for (const line of this.order.lines) {\n this.lineQuantities[line.id] = line.quantity;\n }\n } else {\n for (const line of this.order.lines) {\n this.lineQuantities[line.id] = 0;\n }\n }\n }\n\n checkIfAllSelected() {\n for (const [lineId, quantity] of Object.entries(this.lineQuantities)) {\n const quantityInOrder = this.order.lines.find(line => line.id === lineId)?.quantity;\n if (quantityInOrder && quantity < quantityInOrder) {\n return;\n }\n }\n // If we got here, all of the selected quantities are equal to the order\n // line quantities, i.e. everything is selected.\n this.cancelAll = true;\n }\n\n select() {\n this.resolveWith({\n orderId: this.order.id,\n lines: this.getLineInputs(),\n reason: this.reason,\n cancelShipping: this.cancelAll,\n });\n }\n\n cancel() {\n this.resolveWith();\n }\n\n private getLineInputs(): OrderLineInput[] | undefined {\n if (this.order.active) {\n return;\n }\n return Object.entries(this.lineQuantities)\n .map(([orderLineId, quantity]) => ({\n orderLineId,\n quantity,\n }))\n .filter(l => 0 < l.quantity);\n }\n}\n","<ng-template vdrDialogTitle>{{ 'order.cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"fulfillment-wrapper\">\r\n <div class=\"order-lines\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let line of order.lines\"\r\n class=\"order-line\"\r\n [class.is-disabled]=\"cancelAll\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">{{ line.quantity }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle fulfil\">\r\n <input\r\n *ngIf=\"line.quantity > 0 && !order.active; else nonEditable\"\r\n [(ngModel)]=\"lineQuantities[line.id]\"\r\n (input)=\"checkIfAllSelected()\"\r\n [disabled]=\"cancelAll\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n />\r\n <ng-template #nonEditable>{{ line.quantity }}</ng-template>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"cancellation-details\">\r\n <ng-container *ngIf=\"order.active !== true\">\r\n <clr-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n clrRadio\r\n [value]=\"true\"\r\n [(ngModel)]=\"cancelAll\"\r\n name=\"options\"\r\n (ngModelChange)=\"radioChanged()\"\r\n />\r\n <label>{{ 'order.cancel-entire-order' | translate }}</label>\r\n </clr-radio-wrapper>\r\n <clr-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n clrRadio\r\n [value]=\"false\"\r\n [(ngModel)]=\"cancelAll\"\r\n name=\"options\"\r\n (ngModelChange)=\"radioChanged()\"\r\n />\r\n <label>{{ 'order.cancel-specified-items' | translate }}</label>\r\n </clr-radio-wrapper>\r\n </ng-container>\r\n <label class=\"clr-control-label\">{{ 'order.cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"select()\"\r\n [disabled]=\"!reason || (!order.active && selectionCount === 0)\"\r\n class=\"btn btn-primary\"\r\n >\r\n <ng-container *ngIf=\"!order.active\">\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"order.active\">\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-container>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n configurableOperationValueIsValid,\r\n DataService,\r\n Dialog,\r\n FulfillOrderInput,\r\n GlobalFlag,\r\n OrderDetailFragment,\r\n toConfigurableOperationInput,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfill-order-dialog',\r\n templateUrl: './fulfill-order-dialog.component.html',\r\n styleUrls: ['./fulfill-order-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillOrderDialogComponent implements Dialog<FulfillOrderInput>, OnInit {\r\n resolveWith: (result?: FulfillOrderInput) => void;\r\n fulfillmentHandlerDef: ConfigurableOperationDefinition;\r\n fulfillmentHandler: ConfigurableOperation;\r\n fulfillmentHandlerControl = new FormControl();\r\n fulfillmentQuantities: { [lineId: string]: { fulfillCount: number; max: number } } = {};\r\n\r\n // Provided by modalService.fromComponent() call\r\n order: OrderDetailFragment;\r\n\r\n constructor(private dataService: DataService, private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.dataService.settings.getGlobalSettings().single$.subscribe(({ globalSettings }) => {\r\n this.fulfillmentQuantities = this.order.lines.reduce((result, line) => {\r\n const fulfillCount = this.getFulfillableCount(line, globalSettings.trackInventory);\r\n return {\r\n ...result,\r\n [line.id]: { fulfillCount, max: fulfillCount },\r\n };\r\n }, {});\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n this.dataService.shippingMethod\r\n .getShippingMethodOperations()\r\n .mapSingle(data => data.fulfillmentHandlers)\r\n .subscribe(handlers => {\r\n this.fulfillmentHandlerDef =\r\n handlers.find(\r\n h => h.code === this.order.shippingLines[0]?.shippingMethod?.fulfillmentHandlerCode,\r\n ) || handlers[0];\r\n this.fulfillmentHandler = configurableDefinitionToInstance(this.fulfillmentHandlerDef);\r\n this.fulfillmentHandlerControl.patchValue(this.fulfillmentHandler);\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n getFulfillableCount(line: OrderDetailFragment['lines'][number], globalTrackInventory: boolean): number {\r\n const { trackInventory, stockOnHand } = line.productVariant;\r\n const effectiveTracInventory =\r\n trackInventory === GlobalFlag.INHERIT ? globalTrackInventory : trackInventory === GlobalFlag.TRUE;\r\n\r\n const unfulfilledCount = this.getUnfulfilledCount(line);\r\n return effectiveTracInventory ? Math.min(unfulfilledCount, stockOnHand) : unfulfilledCount;\r\n }\r\n\r\n getUnfulfilledCount(line: OrderDetailFragment['lines'][number]): number {\r\n const fulfilled = line.items.reduce((sum, item) => sum + (item.fulfillment ? 1 : 0), 0);\r\n return line.quantity - fulfilled;\r\n }\r\n\r\n canSubmit(): boolean {\r\n const totalCount = Object.values(this.fulfillmentQuantities).reduce(\r\n (total, { fulfillCount }) => total + fulfillCount,\r\n 0,\r\n );\r\n const formIsValid =\r\n configurableOperationValueIsValid(\r\n this.fulfillmentHandlerDef,\r\n this.fulfillmentHandlerControl.value,\r\n ) && this.fulfillmentHandlerControl.valid;\r\n return formIsValid && 0 < totalCount;\r\n }\r\n\r\n select() {\r\n const lines = Object.entries(this.fulfillmentQuantities).map(([orderLineId, { fulfillCount }]) => ({\r\n orderLineId,\r\n quantity: fulfillCount,\r\n }));\r\n this.resolveWith({\r\n lines,\r\n handler: toConfigurableOperationInput(\r\n this.fulfillmentHandler,\r\n this.fulfillmentHandlerControl.value,\r\n ),\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.fulfill-order' | translate }}</ng-template>\r\n\r\n<div class=\"fulfillment-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unfulfilled' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n <th>{{ 'order.fulfill' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let line of order.lines\"\r\n class=\"order-line\"\r\n [class.ignore]=\"getUnfulfilledCount(line) === 0\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img *ngIf=\"line.featuredAsset\" [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">{{ getUnfulfilledCount(line) }}</td>\r\n <td class=\"align-middle quantity\">{{ line.productVariant.stockOnHand }}</td>\r\n <td class=\"align-middle fulfil\">\r\n <input\r\n *ngIf=\"fulfillmentQuantities[line.id]\"\r\n [disabled]=\"getUnfulfilledCount(line) === 0\"\r\n [(ngModel)]=\"fulfillmentQuantities[line.id].fulfillCount\"\r\n type=\"number\"\r\n [max]=\"fulfillmentQuantities[line.id].max\"\r\n min=\"0\"\r\n />\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"shipping-details\">\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6>{{ 'order.shipping-method' | translate }}</h6>\r\n {{ order.shippingLines[0]?.shippingMethod?.name }}\r\n <strong>{{ order.shipping | localeCurrency: order.currencyCode }}</strong>\r\n <vdr-configurable-input\r\n [operationDefinition]=\"fulfillmentHandlerDef\"\r\n [operation]=\"fulfillmentHandler\"\r\n [formControl]=\"fulfillmentHandlerControl\"\r\n [removable]=\"false\"\r\n ></vdr-configurable-input>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n {{ 'order.create-fulfillment' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-state-label',\r\n templateUrl: './fulfillment-state-label.component.html',\r\n styleUrls: ['./fulfillment-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Pending':\r\n case 'Shipped':\r\n return 'warning';\r\n case 'Delivered':\r\n return 'success';\r\n case 'Cancelled':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Delivered'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-simple-item-list',\r\n templateUrl: './simple-item-list.component.html',\r\n styleUrls: ['./simple-item-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SimpleItemListComponent {\r\n @Input() items: Array<{ name: string; quantity: number }>;\r\n}\r\n","<div class=\"items-list\">\r\n <ul>\r\n <li *ngFor=\"let item of items\" [title]=\"item.name\">\r\n <div class=\"quantity\">{{ item.quantity }}</div>\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n {{ item.name }}\r\n </li>\r\n </ul>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { CustomFieldConfig, OrderDetailFragment, ServerConfigService } from '@vendure/admin-ui/core';\r\nimport { isObject } from '@vendure/common/lib/shared-utils';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-detail',\r\n templateUrl: './fulfillment-detail.component.html',\r\n styleUrls: ['./fulfillment-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentDetailComponent implements OnInit, OnChanges {\r\n @Input() fulfillmentId: string;\r\n @Input() order: OrderDetailFragment;\r\n\r\n customFieldConfig: CustomFieldConfig[] = [];\r\n customFieldFormGroup = new FormGroup({});\r\n\r\n constructor(private serverConfigService: ServerConfigService) {}\r\n\r\n ngOnInit() {\r\n this.customFieldConfig = this.serverConfigService.getCustomFieldsFor('Fulfillment');\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.buildCustomFieldsFormGroup();\r\n }\r\n\r\n get fulfillment(): NonNullable<OrderDetailFragment['fulfillments']>[number] | undefined | null {\r\n return this.order.fulfillments && this.order.fulfillments.find(f => f.id === this.fulfillmentId);\r\n }\r\n\r\n get items(): Array<{ name: string; quantity: number }> {\r\n const itemMap = new Map<string, number>();\r\n const fulfillmentItemIds = this.fulfillment?.orderItems.map(i => i.id);\r\n for (const line of this.order.lines) {\r\n for (const item of line.items) {\r\n if (fulfillmentItemIds?.includes(item.id)) {\r\n const count = itemMap.get(line.productVariant.name);\r\n if (count != null) {\r\n itemMap.set(line.productVariant.name, count + 1);\r\n } else {\r\n itemMap.set(line.productVariant.name, 1);\r\n }\r\n }\r\n }\r\n }\r\n return Array.from(itemMap.entries()).map(([name, quantity]) => ({ name, quantity }));\r\n }\r\n\r\n buildCustomFieldsFormGroup() {\r\n const customFields = (this.fulfillment as any).customFields;\r\n for (const fieldDef of this.serverConfigService.getCustomFieldsFor('Fulfillment')) {\r\n this.customFieldFormGroup.addControl(fieldDef.name, new FormControl(customFields[fieldDef.name]));\r\n }\r\n }\r\n\r\n customFieldIsObject(customField: unknown) {\r\n return Array.isArray(customField) || isObject(customField);\r\n }\r\n}\r\n","<vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ fulfillment?.createdAt | localeDate: 'medium' }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.fulfillment-method' | translate\">\r\n {{ fulfillment?.method }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"fulfillment?.trackingCode\" [label]=\"'order.tracking-code' | translate\">\r\n {{ fulfillment?.trackingCode }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n<ng-container *ngFor=\"let customField of customFieldConfig\">\r\n <vdr-custom-field-control\r\n *ngIf=\"customFieldFormGroup.get(customField.name)\"\r\n [readonly]=\"true\"\r\n [compact]=\"true\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"customFieldFormGroup\"\r\n ></vdr-custom-field-control>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FulfillmentFragment, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-card',\r\n templateUrl: './fulfillment-card.component.html',\r\n styleUrls: ['./fulfillment-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentCardComponent {\r\n @Input() fulfillment: FulfillmentFragment | undefined;\r\n @Input() order: OrderDetailFragment;\r\n @Output() transitionState = new EventEmitter<string>();\r\n\r\n nextSuggestedState(): string | undefined {\r\n if (!this.fulfillment) {\r\n return;\r\n }\r\n const { nextStates } = this.fulfillment;\r\n const namedStateOrDefault = (targetState: string) =>\r\n nextStates.includes(targetState) ? targetState : nextStates[0];\r\n switch (this.fulfillment?.state) {\r\n case 'Pending':\r\n return namedStateOrDefault('Shipped');\r\n case 'Shipped':\r\n return namedStateOrDefault('Delivered');\r\n default:\r\n return nextStates.find(s => s !== 'Cancelled');\r\n }\r\n }\r\n\r\n nextOtherStates(): string[] {\r\n if (!this.fulfillment) {\r\n return [];\r\n }\r\n const suggested = this.nextSuggestedState();\r\n return this.fulfillment.nextStates.filter(s => s !== suggested);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header fulfillment-header\">\r\n <div>{{ 'order.fulfillment' | translate }}</div>\r\n <div class=\"fulfillment-state\">\r\n <vdr-fulfillment-state-label [state]=\"fulfillment?.state\"></vdr-fulfillment-state-label>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-fulfillment-detail\r\n *ngIf=\"!!fulfillment\"\r\n [fulfillmentId]=\"fulfillment?.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"fulfillment?.nextStates.length\">\r\n <ng-container *ngIf=\"nextSuggestedState() as suggestedState\">\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"transitionState.emit(suggestedState)\">\r\n {{ 'order.set-fulfillment-state' | translate: { state: (suggestedState | stateI18nToken | translate) } }}\r\n </button>\r\n </ng-container>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngFor=\"let nextState of nextOtherStates()\">\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionState.emit(nextState)\"\r\n >\r\n <ng-container *ngIf=\"nextState !== 'Cancelled'; else cancel\">\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{ 'order.transition-to-state' | translate: { state: (nextState | stateI18nToken | translate) } }}\r\n </ng-container>\r\n <ng-template #cancel>\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n {{ 'order.cancel-fulfillment' | translate }}\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\nexport type FulfillmentStatus = 'full' | 'partial' | 'none';\r\ntype Fulfillment = NonNullable<OrderDetailFragment['fulfillments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-line-fulfillment',\r\n templateUrl: './line-fulfillment.component.html',\r\n styleUrls: ['./line-fulfillment.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LineFulfillmentComponent implements OnChanges {\r\n @Input() line: OrderDetailFragment['lines'][number];\r\n @Input() orderState: string;\r\n fulfilledCount = 0;\r\n fulfillmentStatus: FulfillmentStatus;\r\n fulfillments: Array<{\r\n count: number;\r\n fulfillment: Fulfillment;\r\n }> = [];\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.line) {\r\n this.fulfilledCount = this.getDeliveredCount(this.line);\r\n this.fulfillmentStatus = this.getFulfillmentStatus(this.fulfilledCount, this.line.items.length);\r\n this.fulfillments = this.getFulfillments(this.line);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the number of items in an OrderLine which are fulfilled.\r\n */\r\n private getDeliveredCount(line: OrderDetailFragment['lines'][number]): number {\r\n return line.items.reduce((sum, item) => sum + (item.fulfillment ? 1 : 0), 0);\r\n }\r\n\r\n private getFulfillmentStatus(fulfilledCount: number, lineQuantity: number): FulfillmentStatus {\r\n if (fulfilledCount === lineQuantity) {\r\n return 'full';\r\n }\r\n if (0 < fulfilledCount && fulfilledCount < lineQuantity) {\r\n return 'partial';\r\n }\r\n return 'none';\r\n }\r\n\r\n private getFulfillments(\r\n line: OrderDetailFragment['lines'][number],\r\n ): Array<{ count: number; fulfillment: Fulfillment }> {\r\n const counts: { [fulfillmentId: string]: number } = {};\r\n\r\n for (const item of line.items) {\r\n if (item.fulfillment) {\r\n if (counts[item.fulfillment.id] === undefined) {\r\n counts[item.fulfillment.id] = 1;\r\n } else {\r\n counts[item.fulfillment.id]++;\r\n }\r\n }\r\n }\r\n const all = line.items.reduce((fulfillments, item) => {\r\n return item.fulfillment ? [...fulfillments, item.fulfillment] : fulfillments;\r\n }, [] as Fulfillment[]);\r\n\r\n return Object.entries(counts).map(([id, count]) => {\r\n return {\r\n count,\r\n // tslint:disable-next-line:no-non-null-assertion\r\n fulfillment: all.find(f => f.id === id)!,\r\n };\r\n });\r\n }\r\n}\r\n","<vdr-dropdown class=\"search-settings-menu\" *ngIf=\"fulfilledCount || orderState === 'PartiallyDelivered'\">\r\n <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon *ngIf=\"fulfillmentStatus === 'full'\" class=\"item-fulfilled\" shape=\"check-circle\"></clr-icon>\r\n <clr-icon\r\n *ngIf=\"fulfillmentStatus === 'partial'\"\r\n class=\"item-partially-fulfilled\"\r\n shape=\"check-circle\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"fulfillmentStatus === 'none'\"\r\n class=\"item-not-fulfilled\"\r\n shape=\"exclamation-circle\"\r\n ></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'full'\">\r\n {{ 'order.line-fulfillment-all' | translate }}\r\n </label>\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'partial'\">\r\n {{\r\n 'order.line-fulfillment-partial' | translate: { total: line.quantity, count: fulfilledCount }\r\n }}\r\n </label>\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'none'\">\r\n {{ 'order.line-fulfillment-none' | translate }}\r\n </label>\r\n <div class=\"fulfillment-detail\" *ngFor=\"let item of fulfillments\">\r\n <div class=\"fulfillment-title\">\r\n {{ 'order.fulfillment' | translate }} #{{ item.fulfillment.id }} ({{\r\n 'order.item-count' | translate: { count: item.count }\r\n }})\r\n </div>\r\n <vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ item.fulfillment.createdAt | localeDate: 'medium' }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.fulfillment-method' | translate\">\r\n {{ item.fulfillment.method }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n *ngIf=\"item.fulfillment.trackingCode\"\r\n [label]=\"'order.tracking-code' | translate\"\r\n >\r\n {{ item.fulfillment.trackingCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-line-refunds',\r\n templateUrl: './line-refunds.component.html',\r\n styleUrls: ['./line-refunds.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LineRefundsComponent {\r\n @Input() line: OrderDetailFragment['lines'][number];\r\n @Input() payments: OrderDetailFragment['payments'];\r\n\r\n getRefundedCount(): number {\r\n const refunds =\r\n this.payments?.reduce(\r\n (all, payment) => [...all, ...payment.refunds],\r\n [] as NonNullable<OrderDetailFragment['payments']>[number]['refunds'],\r\n ) ?? [];\r\n return this.line.items.filter(i => {\r\n if (i.refundId === null && !i.cancelled) {\r\n return false;\r\n }\r\n if (i.refundId) {\r\n const refund = refunds.find(r => r.id === i.refundId);\r\n if (refund?.state === 'Failed') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }).length;\r\n }\r\n}\r\n","<span *ngIf=\"getRefundedCount()\" [title]=\"'order.refunded-count' | translate: { count: getRefundedCount() }\">\r\n <clr-icon shape=\"redo\" class=\"is-solid\" dir=\"down\"></clr-icon>\r\n</span>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-modification-detail',\r\n templateUrl: './modification-detail.component.html',\r\n styleUrls: ['./modification-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ModificationDetailComponent implements OnChanges {\r\n @Input() order: OrderDetailFragment;\r\n @Input() modification: OrderDetailFragment['modifications'][number];\r\n private addedItems = new Map<OrderDetailFragment['lines'][number], number>();\r\n private removedItems = new Map<OrderDetailFragment['lines'][number], number>();\r\n\r\n ngOnChanges(): void {\r\n const { added, removed } = this.getModifiedLines();\r\n this.addedItems = added;\r\n this.removedItems = removed;\r\n }\r\n\r\n getSurcharge(id: string) {\r\n return this.order.surcharges.find(m => m.id === id);\r\n }\r\n\r\n getAddedItems() {\r\n return [...this.addedItems.entries()].map(([line, count]) => {\r\n return { name: line.productVariant.name, quantity: count };\r\n });\r\n }\r\n\r\n getRemovedItems() {\r\n return [...this.removedItems.entries()].map(([line, count]) => {\r\n return { name: line.productVariant.name, quantity: count };\r\n });\r\n }\r\n\r\n private getModifiedLines() {\r\n const added = new Map<OrderDetailFragment['lines'][number], number>();\r\n const removed = new Map<OrderDetailFragment['lines'][number], number>();\r\n for (const _item of this.modification.orderItems || []) {\r\n const result = this.getOrderLineAndItem(_item.id);\r\n if (result) {\r\n const { line, item } = result;\r\n if (item.cancelled) {\r\n const count = removed.get(line) ?? 0;\r\n removed.set(line, count + 1);\r\n } else {\r\n const count = added.get(line) ?? 0;\r\n added.set(line, count + 1);\r\n }\r\n }\r\n }\r\n return { added, removed };\r\n }\r\n\r\n private getOrderLineAndItem(itemId: string) {\r\n for (const line of this.order.lines) {\r\n const item = line.items.find(i => i.id === itemId);\r\n if (item) {\r\n return { line, item };\r\n }\r\n }\r\n }\r\n}\r\n","<vdr-labeled-data [label]=\"'common.ID' | translate\">{{ modification.id }}</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"modification.note\" [label]=\"'order.note' | translate\">{{\r\n modification.note\r\n}}</vdr-labeled-data>\r\n<vdr-labeled-data *ngFor=\"let surcharge of modification.surcharges\" [label]=\"'order.surcharges' | translate\">\r\n {{ getSurcharge(surcharge.id)?.description }}\r\n {{ getSurcharge(surcharge.id)?.priceWithTax | localeCurrency: order.currencyCode }}</vdr-labeled-data\r\n>\r\n<vdr-labeled-data *ngIf=\"getAddedItems().length\" [label]=\"'order.added-items' | translate\">\r\n <vdr-simple-item-list [items]=\"getAddedItems()\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"getRemovedItems().length\" [label]=\"'order.removed-items' | translate\">\r\n <vdr-simple-item-list [items]=\"getRemovedItems()\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { CustomFieldConfig } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-order-custom-fields-card',\r\n templateUrl: './order-custom-fields-card.component.html',\r\n styleUrls: ['./order-custom-fields-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderCustomFieldsCardComponent implements OnInit {\r\n @Input() customFieldsConfig: CustomFieldConfig[] = [];\r\n @Input() customFieldValues: { [name: string]: any } = {};\r\n @Output() updateClick = new EventEmitter<any>();\r\n customFieldForm: FormGroup;\r\n editable = false;\r\n constructor(private formBuilder: FormBuilder) {}\r\n\r\n ngOnInit() {\r\n this.customFieldForm = this.formBuilder.group({});\r\n for (const field of this.customFieldsConfig) {\r\n this.customFieldForm.addControl(\r\n field.name,\r\n this.formBuilder.control(this.customFieldValues[field.name]),\r\n );\r\n }\r\n }\r\n\r\n onUpdateClick() {\r\n this.updateClick.emit(this.customFieldForm.value);\r\n this.customFieldForm.markAsPristine();\r\n this.editable = false;\r\n }\r\n}\r\n","<div class=\"card\" *ngIf=\"customFieldsConfig.length\">\r\n <div class=\"card-header\">\r\n {{ 'common.custom-fields' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text custom-field-form\" [class.editable]=\"editable\">\r\n <ng-container *ngFor=\"let customField of customFieldsConfig\">\r\n <vdr-custom-field-control\r\n entityName=\"Order\"\r\n [customFieldsFormGroup]=\"customFieldForm\"\r\n [compact]=\"true\"\r\n [readonly]=\"customField.readonly || !editable\"\r\n [customField]=\"customField\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-sm btn-secondary\" (click)=\"editable = true\" *ngIf=\"!editable\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <button\r\n class=\"btn btn-sm btn-primary\"\r\n (click)=\"onUpdateClick()\"\r\n *ngIf=\"editable\"\r\n [disabled]=\"customFieldForm.pristine || customFieldForm.invalid\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","export const NODE_HEIGHT = 72;\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { NODE_HEIGHT } from './constants';\r\nimport { StateNode } from './types';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-node',\r\n templateUrl: './order-process-node.component.html',\r\n styleUrls: ['./order-process-node.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessNodeComponent implements OnChanges {\r\n @Input() node: StateNode;\r\n @Input() index: number;\r\n @Input() active: boolean;\r\n active$ = new BehaviorSubject<boolean>(false);\r\n activeTarget$ = new BehaviorSubject<boolean>(false);\r\n isCancellable = false;\r\n // We use a class field here to prevent the\r\n // i18n extractor from extracting a \"Cancelled\" key\r\n cancelledState = 'Cancelled';\r\n\r\n constructor(private elementRef: ElementRef<HTMLDivElement>) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.isCancellable = !!this.node.to.find((s) => s.name === 'Cancelled');\r\n if (changes.active) {\r\n this.active$.next(this.active);\r\n }\r\n }\r\n\r\n getPos(origin: 'top' | 'bottom' = 'top'): { x: number; y: number } {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const nodeHeight =\r\n this.elementRef.nativeElement.querySelector('.node')?.getBoundingClientRect().height ?? 0;\r\n return {\r\n x: 10,\r\n y: this.index * NODE_HEIGHT + (origin === 'bottom' ? nodeHeight : 0),\r\n };\r\n }\r\n\r\n getStyle() {\r\n const pos = this.getPos();\r\n return {\r\n 'top.px': pos.y,\r\n 'left.px': pos.x,\r\n };\r\n }\r\n}\r\n","<div class=\"node-wrapper\" [ngStyle]=\"getStyle()\" [class.active]=\"active$ | async\">\r\n <div\r\n class=\"node\"\r\n [class.active-target]=\"activeTarget$ | async\"\r\n >\r\n {{ node.name | stateI18nToken | translate }}\r\n </div>\r\n <div class=\"cancelled-wrapper\" *ngIf=\"isCancellable\">\r\n <div class=\"cancelled-edge\">\r\n </div>\r\n <clr-icon shape=\"dot-circle\"></clr-icon>\r\n <div class=\"cancelled-node\">\r\n {{ cancelledState | stateI18nToken | translate }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport { OrderProcessNodeComponent } from './order-process-node.component';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-edge',\r\n templateUrl: './order-process-edge.component.html',\r\n styleUrls: ['./order-process-edge.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessEdgeComponent implements OnInit {\r\n @Input() from: OrderProcessNodeComponent;\r\n @Input() to: OrderProcessNodeComponent;\r\n @Input() index: number;\r\n active$: Observable<boolean>;\r\n\r\n ngOnInit() {\r\n this.active$ = this.from.active$\r\n .asObservable()\r\n .pipe(tap((active) => this.to.activeTarget$.next(active)));\r\n }\r\n\r\n getStyle() {\r\n const direction = this.from.index < this.to.index ? 'down' : 'up';\r\n const startPos = this.from.getPos(direction === 'down' ? 'bottom' : 'top');\r\n const endPos = this.to.getPos(direction === 'down' ? 'top' : 'bottom');\r\n const dX = Math.abs(startPos.x - endPos.x);\r\n const dY = Math.abs(startPos.y - endPos.y);\r\n const length = Math.sqrt(dX ** 2 + dY ** 2);\r\n return {\r\n 'top.px': startPos.y,\r\n 'left.px': startPos.x + (direction === 'down' ? 10 : 40) + this.index * 12,\r\n 'height.px': length,\r\n 'width.px': 1,\r\n ...(direction === 'up'\r\n ? {\r\n transform: 'rotateZ(180deg)',\r\n 'transform-origin': 'top',\r\n }\r\n : {}),\r\n };\r\n }\r\n}\r\n","<div\r\n [attr.data-from]=\"from.node.name\"\r\n [attr.data-to]=\"to.node.name\"\r\n [ngStyle]=\"getStyle()\"\r\n [class.active]=\"active$ | async\"\r\n class=\"edge\">\r\n <clr-icon shape=\"arrow\" flip=\"vertical\" class=\"arrow\"></clr-icon>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { OrderProcessState } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { NODE_HEIGHT } from './constants';\r\nimport { OrderProcessNodeComponent } from './order-process-node.component';\r\nimport { StateNode } from './types';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-graph',\r\n templateUrl: './order-process-graph.component.html',\r\n styleUrls: ['./order-process-graph.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessGraphComponent implements OnInit, OnChanges, AfterViewInit {\r\n @Input() states: OrderProcessState[];\r\n @Input() initialState?: string;\r\n setActiveState$ = new BehaviorSubject<string | undefined>(undefined);\r\n activeState$: Observable<string | undefined>;\r\n nodes: StateNode[] = [];\r\n edges: Array<{ from: OrderProcessNodeComponent; to: OrderProcessNodeComponent; index: number }> = [];\r\n\r\n @ViewChildren(OrderProcessNodeComponent) nodeComponents: QueryList<OrderProcessNodeComponent>;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n @HostBinding('style.height.px')\r\n get outerHeight(): number {\r\n return this.nodes.length * NODE_HEIGHT;\r\n }\r\n\r\n ngOnInit() {\r\n this.setActiveState$.next(this.initialState);\r\n this.activeState$ = this.setActiveState$.pipe(debounceTime(150));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.populateNodes();\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.populateEdges());\r\n }\r\n\r\n onMouseOver(stateName: string) {\r\n this.setActiveState$.next(stateName);\r\n }\r\n\r\n onMouseOut() {\r\n this.setActiveState$.next(this.initialState);\r\n }\r\n\r\n getNodeFor(state: string): OrderProcessNodeComponent | undefined {\r\n if (this.nodeComponents) {\r\n return this.nodeComponents.find((n) => n.node.name === state);\r\n }\r\n }\r\n\r\n private populateNodes() {\r\n const stateNodeMap = new Map<string, StateNode>();\r\n for (const state of this.states) {\r\n stateNodeMap.set(state.name, {\r\n name: state.name,\r\n to: [],\r\n });\r\n }\r\n\r\n for (const [name, stateNode] of stateNodeMap.entries()) {\r\n const targets = this.states.find((s) => s.name === name)?.to ?? [];\r\n for (const target of targets) {\r\n const targetNode = stateNodeMap.get(target);\r\n if (targetNode) {\r\n stateNode.to.push(targetNode);\r\n }\r\n }\r\n }\r\n this.nodes = [...stateNodeMap.values()].filter((n) => n.name !== 'Cancelled');\r\n }\r\n\r\n private populateEdges() {\r\n for (const node of this.nodes) {\r\n const nodeCmp = this.getNodeFor(node.name);\r\n let index = 0;\r\n for (const to of node.to) {\r\n const toCmp = this.getNodeFor(to.name);\r\n if (nodeCmp && toCmp && nodeCmp !== toCmp) {\r\n this.edges.push({\r\n to: toCmp,\r\n from: nodeCmp,\r\n index,\r\n });\r\n index++;\r\n }\r\n }\r\n }\r\n this.edges = [...this.edges];\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<ng-container *ngFor=\"let state of nodes; let i = index\">\r\n <vdr-order-process-node\r\n [node]=\"state\"\r\n [index]=\"i\"\r\n [active]=\"(activeState$ | async) === state.name\"\r\n (mouseenter)=\"onMouseOver(state.name)\"\r\n (mouseleave)=\"onMouseOut()\"\r\n ></vdr-order-process-node>\r\n</ng-container>\r\n<ng-container *ngFor=\"let edge of edges\">\r\n <vdr-order-process-edge [from]=\"edge.from\" [to]=\"edge.to\" [index]=\"edge.index\"></vdr-order-process-edge>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n CancelOrderInput,\r\n DataService,\r\n Dialog,\r\n OrderProcessState,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-graph-dialog',\r\n templateUrl: './order-process-graph-dialog.component.html',\r\n styleUrls: ['./order-process-graph-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessGraphDialogComponent implements OnInit, Dialog<void> {\r\n activeState: string;\r\n states: OrderProcessState[] = [];\r\n constructor(private serverConfigService: ServerConfigService) {}\r\n\r\n ngOnInit(): void {\r\n this.states = this.serverConfigService.getOrderProcessStates();\r\n }\r\n\r\n resolveWith: (result: void | undefined) => void;\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.order-state-diagram' | translate }}</ng-template>\r\n\r\n<vdr-order-process-graph [states]=\"states\" [initialState]=\"activeState\"></vdr-order-process-graph>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n CancelOrderInput,\n Dialog,\n getAppConfig,\n I18nService,\n OrderDetailFragment,\n OrderLineInput,\n RefundOrderInput,\n} from '@vendure/admin-ui/core';\nimport { summate } from '@vendure/common/lib/shared-utils';\n\ntype SelectionLine = { quantity: number; refund: boolean; cancel: boolean };\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\n\n@Component({\n selector: 'vdr-refund-order-dialog',\n templateUrl: './refund-order-dialog.component.html',\n styleUrls: ['./refund-order-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RefundOrderDialogComponent\n implements OnInit, Dialog<{ cancel: CancelOrderInput; refund: RefundOrderInput }>\n{\n order: OrderDetailFragment;\n resolveWith: (result?: { cancel: CancelOrderInput; refund: RefundOrderInput }) => void;\n reason: string;\n settledPayments: Payment[];\n selectedPayment: Payment;\n lineQuantities: { [lineId: string]: SelectionLine } = {};\n refundShipping = false;\n adjustment = 0;\n reasons = getAppConfig().cancellationReasons ?? [\n _('order.refund-reason-customer-request'),\n _('order.refund-reason-not-available'),\n ];\n\n constructor(private i18nService: I18nService) {\n this.reasons = this.reasons.map(r => this.i18nService.translate(r));\n }\n\n get refundTotal(): number {\n const itemTotal = this.order.lines.reduce((total, line) => {\n const lineRef = this.lineQuantities[line.id];\n const refundCount = (lineRef.refund && lineRef.quantity) || 0;\n return total + line.proratedUnitPriceWithTax * refundCount;\n }, 0);\n return itemTotal + (this.refundShipping ? this.order.shippingWithTax : 0) + this.adjustment;\n }\n\n get settledPaymentsTotal(): number {\n return this.settledPayments\n .map(payment => {\n const paymentTotal = payment.amount;\n const alreadyRefundedTotal = summate(\n payment.refunds.filter(r => r.state !== 'Failed') as Array<\n Required<Payment['refunds'][number]>\n >,\n 'total',\n );\n return paymentTotal - alreadyRefundedTotal;\n })\n .reduce((sum, amount) => sum + amount, 0);\n }\n\n lineCanBeRefundedOrCancelled(line: OrderDetailFragment['lines'][number]): boolean {\n const refunds =\n this.order.payments?.reduce(\n (all, payment) => [...all, ...payment.refunds],\n [] as Payment['refunds'],\n ) ?? [];\n\n const refundable = line.items.filter(i => {\n if (i.cancelled) {\n return false;\n }\n if (i.refundId == null) {\n return true;\n }\n const refund = refunds.find(r => r.id === i.refundId);\n return refund?.state === 'Failed';\n });\n return 0 < refundable.length;\n }\n\n ngOnInit() {\n this.lineQuantities = this.order.lines.reduce((result, line) => {\n return {\n ...result,\n [line.id]: {\n quantity: 0,\n refund: false,\n cancel: false,\n },\n };\n }, {});\n this.settledPayments = (this.order.payments || []).filter(p => p.state === 'Settled');\n if (this.settledPayments.length) {\n this.selectedPayment = this.settledPayments[0];\n }\n }\n\n handleZeroQuantity(line?: SelectionLine) {\n if (line?.quantity === 0) {\n line.cancel = false;\n line.refund = false;\n }\n }\n\n isRefunding(): boolean {\n const result = Object.values(this.lineQuantities).reduce((isRefunding, line) => {\n return isRefunding || (0 < line.quantity && line.refund);\n }, false);\n return result;\n }\n\n isCancelling(): boolean {\n const result = Object.values(this.lineQuantities).reduce((isCancelling, line) => {\n return isCancelling || (0 < line.quantity && line.cancel);\n }, false);\n return result;\n }\n\n canSubmit(): boolean {\n if (this.isRefunding()) {\n return !!(\n this.selectedPayment &&\n this.reason &&\n 0 < this.refundTotal &&\n this.refundTotal <= this.settledPaymentsTotal\n );\n } else if (this.isCancelling()) {\n return !!this.reason;\n }\n return false;\n }\n\n select() {\n const payment = this.selectedPayment;\n if (payment) {\n const refundLines = this.getOrderLineInput(line => line.refund);\n const cancelLines = this.getOrderLineInput(line => line.cancel);\n\n this.resolveWith({\n refund: {\n lines: refundLines,\n reason: this.reason,\n shipping: this.refundShipping ? this.order.shippingWithTax : 0,\n adjustment: this.adjustment,\n paymentId: payment.id,\n },\n cancel: {\n lines: cancelLines,\n orderId: this.order.id,\n reason: this.reason,\n cancelShipping: this.refundShipping,\n },\n });\n }\n }\n\n cancel() {\n this.resolveWith();\n }\n\n private getOrderLineInput(filterFn: (line: SelectionLine) => boolean): OrderLineInput[] {\n return Object.entries(this.lineQuantities)\n .filter(([orderLineId, line]) => 0 < line.quantity && filterFn(line))\n .map(([orderLineId, line]) => ({\n orderLineId,\n quantity: line.quantity,\n }));\n }\n}\n","<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.prorated-unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.refund' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of order.lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <div class=\"prorated-wrapper\">\r\n {{ line.proratedUnitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number: '1.0-2'\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity-col\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [(ngModel)]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (input)=\"handleZeroQuantity(lineQuantities[line.id])\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].refund\"\r\n />\r\n </div>\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"refund-details mt4\" [class.faded]=\"!isRefunding() && !isCancelling()\">\r\n <div>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [disabled]=\"!isRefunding() && !isCancelling()\"\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n\r\n <div>\r\n <clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\" [disabled]=\"!isRefunding()\">\r\n <option\r\n *ngFor=\"let payment of settledPayments\"\r\n [ngValue]=\"payment\"\r\n [disabled]=\"payment.state !== 'Settled'\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"refundShipping\" [disabled]=\"!isRefunding()\" />\r\n <label>\r\n {{ 'order.refund-shipping' | translate }} ({{\r\n order.shippingWithTax | localeCurrency: order.currencyCode\r\n }})\r\n </label>\r\n </clr-checkbox-wrapper>\r\n <clr-input-container>\r\n <label>{{ 'order.refund-adjustment' | translate }}</label>\r\n <vdr-currency-input\r\n clrInput\r\n [disabled]=\"!isRefunding()\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"adjustment\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n <div class=\"totals\" [class.disabled]=\"!isRefunding()\">\r\n <div class=\"order-total\">\r\n {{ 'order.payment-amount' | translate }}:\r\n {{ selectedPayment.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total\">\r\n {{ 'order.refund-total' | translate }}:\r\n {{ refundTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total-error\" *ngIf=\"refundTotal < 0 || settledPaymentsTotal < refundTotal\">\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency: order.currencyCode,\r\n max: settledPaymentsTotal | localeCurrency: order.currencyCode\r\n }\r\n }}\r\n </div>\r\n <div class=\"refund-total-warning\" *ngIf=\"selectedPayment.amount < refundTotal\">\r\n {{ 'order.refund-total-warning' | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n <ng-container *ngIf=\"isRefunding(); else cancelling\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate: { amount: refundTotal | localeCurrency: order.currencyCode }\r\n }}\r\n </ng-container>\r\n <ng-template #cancelling>\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { Dialog, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-settle-refund-dialog',\r\n templateUrl: './settle-refund-dialog.component.html',\r\n styleUrls: ['./settle-refund-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SettleRefundDialogComponent implements Dialog<string> {\r\n resolveWith: (result?: string) => void;\r\n transactionId = '';\r\n refund: NonNullable<OrderDetailFragment['payments']>[number]['refunds'][number];\r\n\r\n submit() {\r\n this.resolveWith(this.transactionId);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.settle-refund' | translate }}</ng-template>\r\n<p class=\"instruction\">\r\n {{ 'order.settle-refund-manual-instructions' | translate: { method: refund.method } }}\r\n</p>\r\n<clr-input-container>\r\n <label>{{ 'order.transaction-id' | translate }}</label>\r\n <input clrInput name=\"transactionId\" [(ngModel)]=\"transactionId\" />\r\n</clr-input-container>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" [disabled]=\"!transactionId\" class=\"btn btn-primary\">\r\n {{ 'order.settle-refund' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { Dialog } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-order-state-select-dialog',\n templateUrl: './order-state-select-dialog.component.html',\n styleUrls: ['./order-state-select-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OrderStateSelectDialogComponent implements Dialog<string> {\n resolveWith: (result?: string) => void;\n nextStates: string[] = [];\n message = '';\n cancellable: boolean;\n selectedState = '';\n\n select() {\n if (this.selectedState) {\n this.resolveWith(this.selectedState);\n }\n }\n\n cancel() {\n this.resolveWith();\n }\n}\n","<ng-template vdrDialogTitle>{{ 'order.select-state' | translate }}</ng-template>\r\n<p>{{ message | translate }}</p>\r\n<clr-select-container>\r\n <select clrSelect name=\"state\" [(ngModel)]=\"selectedState\">\r\n <option *ngFor=\"let state of nextStates\" [value]=\"state\">\r\n {{ state | stateI18nToken | translate }}\r\n </option>\r\n </select>\r\n</clr-select-container>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"submit\" *ngIf=\"cancellable\" (click)=\"cancel()\" class=\"btn btn-secondary\">\r\n {{ 'common.cancel' | translate }}\r\n </button>\r\n <button type=\"submit\" (click)=\"select()\" class=\"btn btn-primary\" [disabled]=\"!selectedState\">\r\n {{ 'order.transition-to-state' | translate: { state: (selectedState | stateI18nToken | translate) } }}\r\n </button>\r\n</ng-template>\r\n","import { Injectable } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DataService,\n HistoryEntryType,\n I18nService,\n ModalService,\n NotificationService,\n SortOrder,\n} from '@vendure/admin-ui/core';\nimport { EMPTY } from 'rxjs';\nimport { catchError, delay, map, retryWhen, switchMap, take } from 'rxjs/operators';\n\nimport { OrderStateSelectDialogComponent } from '../components/order-state-select-dialog/order-state-select-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OrderTransitionService {\n constructor(\n private dataService: DataService,\n private modalService: ModalService,\n private notificationService: NotificationService,\n private i18nService: I18nService,\n ) {}\n\n /**\n * Attempts to transition the Order to the last state it was in before it was transitioned\n * to the \"Modifying\" state. If this fails, a manual prompt is used.\n */\n transitionToPreModifyingState(orderId: string, nextStates: string[]) {\n return this.getPreModifyingState(orderId).pipe(\n switchMap(state => {\n const manualTransitionOptions = {\n orderId,\n nextStates,\n message: this.i18nService.translate(\n _('order.unable-to-transition-to-state-try-another'),\n { state },\n ),\n cancellable: false,\n retry: 10,\n };\n if (state) {\n return this.transitionToStateOrThrow(orderId, state).pipe(\n catchError(err => this.manuallyTransitionToState(manualTransitionOptions)),\n );\n } else {\n return this.manuallyTransitionToState(manualTransitionOptions);\n }\n }),\n );\n }\n\n /**\n * Displays a modal for manually selecting the next state.\n */\n manuallyTransitionToState(options: {\n orderId: string;\n nextStates: string[];\n message: string;\n cancellable: boolean;\n retry: number;\n }) {\n return this.modalService\n .fromComponent(OrderStateSelectDialogComponent, {\n locals: {\n nextStates: options.nextStates,\n cancellable: options.cancellable,\n message: options.message,\n },\n closable: false,\n size: 'md',\n })\n .pipe(\n switchMap(result => {\n if (result) {\n return this.transitionToStateOrThrow(options.orderId, result);\n } else {\n if (!options.cancellable) {\n throw new Error(`An order state must be selected`);\n } else {\n return EMPTY;\n }\n }\n }),\n retryWhen(errors => errors.pipe(delay(2000), take(options.retry))),\n );\n }\n\n /**\n * Attempts to get the last state the Order was in before it was transitioned\n * to the \"Modifying\" state.\n */\n private getPreModifyingState(orderId: string) {\n return this.dataService.order\n .getOrderHistory(orderId, {\n filter: {\n type: {\n eq: HistoryEntryType.ORDER_STATE_TRANSITION,\n },\n },\n sort: {\n createdAt: SortOrder.DESC,\n },\n })\n .mapSingle(result => result.order)\n .pipe(\n map(result => {\n const item = result?.history.items.find(i => i.data.to === 'Modifying');\n if (item) {\n return item.data.from as string;\n } else {\n return;\n }\n }),\n );\n }\n\n private transitionToStateOrThrow(orderId: string, state: string) {\n return this.dataService.order.transitionToState(orderId, state).pipe(\n map(({ transitionOrderToState }) => {\n switch (transitionOrderToState?.__typename) {\n case 'Order':\n return transitionOrderToState?.state;\n case 'OrderStateTransitionError':\n this.notificationService.error(transitionOrderToState?.transitionError);\n throw new Error(transitionOrderToState?.transitionError);\n }\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { AdjustmentType, CustomFieldConfig, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-order-table',\r\n templateUrl: './order-table.component.html',\r\n styleUrls: ['./order-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderTableComponent implements OnInit {\r\n @Input() order: OrderDetailFragment;\r\n @Input() orderLineCustomFields: CustomFieldConfig[];\r\n orderLineCustomFieldsVisible = false;\r\n customFieldsForLine: {\r\n [lineId: string]: Array<{ config: CustomFieldConfig; formGroup: FormGroup; value: any }>;\r\n } = {};\r\n\r\n get visibleOrderLineCustomFields(): CustomFieldConfig[] {\r\n return this.orderLineCustomFieldsVisible ? this.orderLineCustomFields : [];\r\n }\r\n\r\n get showElided(): boolean {\r\n return !this.orderLineCustomFieldsVisible && 0 < this.orderLineCustomFields.length;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.orderLineCustomFieldsVisible = this.orderLineCustomFields.length < 2;\r\n this.getLineCustomFields();\r\n }\r\n\r\n toggleOrderLineCustomFields() {\r\n this.orderLineCustomFieldsVisible = !this.orderLineCustomFieldsVisible;\r\n }\r\n\r\n getLineDiscounts(line: OrderDetailFragment['lines'][number]) {\r\n return line.discounts.filter(a => a.type === AdjustmentType.PROMOTION);\r\n }\r\n\r\n private getLineCustomFields() {\r\n for (const line of this.order.lines) {\r\n const formGroup = new FormGroup({});\r\n const result = this.orderLineCustomFields\r\n .map(config => {\r\n const value = (line as any).customFields[config.name];\r\n formGroup.addControl(config.name, new FormControl(value));\r\n return {\r\n config,\r\n formGroup,\r\n value,\r\n };\r\n })\r\n .filter(field => {\r\n return this.orderLineCustomFieldsVisible ? true : field.value != null;\r\n });\r\n this.customFieldsForLine[line.id] = result;\r\n }\r\n }\r\n\r\n getPromotionLink(promotion: OrderDetailFragment['discounts'][number]): any[] {\r\n const id = promotion.adjustmentSource.split(':')[1];\r\n return ['/marketing', 'promotions', id];\r\n }\r\n\r\n getCouponCodeForAdjustment(\r\n order: OrderDetailFragment,\r\n promotionAdjustment: OrderDetailFragment['discounts'][number],\r\n ): string | undefined {\r\n const id = promotionAdjustment.adjustmentSource.split(':')[1];\r\n const promotion = order.promotions.find(p => p.id === id);\r\n if (promotion) {\r\n return promotion.couponCode || undefined;\r\n }\r\n }\r\n}\r\n","<table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let line of order.lines\">\r\n <tr class=\"order-line\" [class.is-cancelled]=\"line.quantity === 0\">\r\n <td class=\"align-middle thumb\">\r\n <img *ngIf=\"line.featuredAsset\" [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment [line]=\"line\" [orderState]=\"order.state\"></vdr-line-fulfillment>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n\r\n <ng-container *ngIf=\"getLineDiscounts(line) as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n {{ 'order.promotions-applied' | translate }}\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n <a class=\"promotion-name\" [routerLink]=\"getPromotionLink(discount)\">{{\r\n discount.description\r\n }}</a>\r\n <div class=\"promotion-amount\">\r\n {{ discount.amountWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ discount.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <ng-container *ngIf=\"customFieldsForLine[line.id] as customFields\">\r\n <tr *ngIf=\"customFields.length\">\r\n <td colspan=\"6\" class=\"custom-fields-row\">\r\n <div class=\"order-line-custom-fields\">\r\n <div class=\"custom-field\" *ngFor=\"let field of customFields\">\r\n <vdr-custom-field-control\r\n [compact]=\"true\"\r\n [readonly]=\"true\"\r\n [customField]=\"field.config\"\r\n [customFieldsFormGroup]=\"field.formGroup\"\r\n ></vdr-custom-field-control>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\" colspan=\"2\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <ng-container *ngFor=\"let discount of order.discounts\">\r\n <tr class=\"order-adjustment\" *ngIf=\"discount.type !== 'OTHER'\">\r\n <td colspan=\"5\" class=\"left clr-align-middle\">\r\n <a [routerLink]=\"getPromotionLink(discount)\">{{ discount.description }}</a>\r\n <vdr-chip *ngIf=\"getCouponCodeForAdjustment(order, discount) as couponCode\">{{\r\n couponCode\r\n }}</vdr-chip>\r\n </td>\r\n <td class=\"clr-align-middle\">\r\n {{ discount.amountWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ discount.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr class=\"sub-total\">\r\n <td class=\"left clr-align-middle\">{{ 'order.sub-total' | translate }}</td>\r\n <td colspan=\"4\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.subTotalWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.subTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"total\">\r\n <td class=\"left clr-align-middle\">{{ 'order.total' | translate }}</td>\r\n <td colspan=\"4\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.totalWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.total | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { CurrencyCode, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-payment-detail',\r\n templateUrl: './payment-detail.component.html',\r\n styleUrls: ['./payment-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentDetailComponent {\r\n @Input() payment: NonNullable<OrderDetailFragment['payments']>[number];\r\n @Input() currencyCode: CurrencyCode;\r\n}\r\n","<vdr-labeled-data [label]=\"'order.payment-method' | translate\">\r\n {{ payment.method }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.amount' | translate\">\r\n {{ payment.amount | localeCurrency: currencyCode }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"payment.errorMessage\" [label]=\"'order.error-message' | translate\">\r\n {{ payment.errorMessage }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"payment.transactionId\" [label]=\"'order.transaction-id' | translate\">\r\n {{ payment.transactionId }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.payment-metadata' | translate\">\r\n <vdr-object-tree [value]=\"payment.metadata\"></vdr-object-tree>\r\n</vdr-labeled-data>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n GetOrderHistoryQuery,\r\n HistoryEntry,\r\n HistoryEntryType,\r\n OrderDetailFragment,\r\n TimelineDisplayType,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype OrderHistoryItem = NonNullable<GetOrderHistoryQuery['order']>['history']['items'][number];\r\n\r\n@Component({\r\n selector: 'vdr-order-history',\r\n templateUrl: './order-history.component.html',\r\n styleUrls: ['./order-history.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderHistoryComponent {\r\n @Input() order: OrderDetailFragment;\r\n @Input() history: OrderHistoryItem[];\r\n @Output() addNote = new EventEmitter<{ note: string; isPublic: boolean }>();\r\n @Output() updateNote = new EventEmitter<HistoryEntry>();\r\n @Output() deleteNote = new EventEmitter<HistoryEntry>();\r\n note = '';\r\n noteIsPrivate = true;\r\n expanded = false;\r\n readonly type = HistoryEntryType;\r\n\r\n getDisplayType(entry: OrderHistoryItem): TimelineDisplayType {\r\n if (entry.type === HistoryEntryType.ORDER_STATE_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return 'success';\r\n }\r\n if (entry.data.to === 'Cancelled') {\r\n return 'error';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return 'success';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {\r\n if (entry.data.to === 'Declined' || entry.data.to === 'Cancelled') {\r\n return 'error';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_CANCELLATION) {\r\n return 'error';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_REFUND_TRANSITION) {\r\n return 'warning';\r\n }\r\n return 'default';\r\n }\r\n\r\n getTimelineIcon(entry: OrderHistoryItem) {\r\n if (entry.type === HistoryEntryType.ORDER_STATE_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return ['success-standard', 'is-solid'];\r\n }\r\n if (entry.data.to === 'Cancelled') {\r\n return 'ban';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {\r\n if (entry.data.to === 'Settled') {\r\n return 'credit-card';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_NOTE) {\r\n return 'note';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_MODIFIED) {\r\n return 'pencil';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) {\r\n if (entry.data.to === 'Shipped') {\r\n return 'truck';\r\n }\r\n if (entry.data.to === 'Delivered') {\r\n return 'truck';\r\n }\r\n }\r\n }\r\n\r\n isFeatured(entry: OrderHistoryItem): boolean {\r\n switch (entry.type) {\r\n case HistoryEntryType.ORDER_STATE_TRANSITION: {\r\n return (\r\n entry.data.to === 'Delivered' ||\r\n entry.data.to === 'Cancelled' ||\r\n entry.data.to === 'Settled'\r\n );\r\n }\r\n case HistoryEntryType.ORDER_PAYMENT_TRANSITION:\r\n return entry.data.to === 'Settled' || entry.data.to === 'Cancelled';\r\n case HistoryEntryType.ORDER_FULFILLMENT_TRANSITION:\r\n return entry.data.to === 'Delivered' || entry.data.to === 'Shipped';\r\n case HistoryEntryType.ORDER_NOTE:\r\n case HistoryEntryType.ORDER_MODIFIED:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n getFulfillment(\r\n entry: OrderHistoryItem,\r\n ): NonNullable<OrderDetailFragment['fulfillments']>[number] | undefined {\r\n if (\r\n (entry.type === HistoryEntryType.ORDER_FULFILLMENT ||\r\n entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) &&\r\n this.order.fulfillments\r\n ) {\r\n return this.order.fulfillments.find(f => f.id === entry.data.fulfillmentId);\r\n }\r\n }\r\n\r\n getPayment(entry: OrderHistoryItem): NonNullable<OrderDetailFragment['payments']>[number] | undefined {\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION && this.order.payments) {\r\n return this.order.payments.find(p => p.id === entry.data.paymentId);\r\n }\r\n }\r\n\r\n getCancelledItems(entry: OrderHistoryItem): Array<{ name: string; quantity: number }> {\r\n const itemMap = new Map<string, number>();\r\n const cancelledItemIds: string[] = entry.data.orderItemIds;\r\n for (const line of this.order.lines) {\r\n for (const item of line.items) {\r\n if (cancelledItemIds.includes(item.id)) {\r\n const count = itemMap.get(line.productVariant.name);\r\n if (count != null) {\r\n itemMap.set(line.productVariant.name, count + 1);\r\n } else {\r\n itemMap.set(line.productVariant.name, 1);\r\n }\r\n }\r\n }\r\n }\r\n return Array.from(itemMap.entries()).map(([name, quantity]) => ({ name, quantity }));\r\n }\r\n\r\n getModification(id: string) {\r\n return this.order.modifications.find(m => m.id === id);\r\n }\r\n\r\n getName(entry: OrderHistoryItem): string {\r\n const { administrator } = entry;\r\n if (administrator) {\r\n return `${administrator.firstName} ${administrator.lastName}`;\r\n } else {\r\n const customer = this.order.customer;\r\n if (customer) {\r\n return `${customer.firstName} ${customer.lastName}`;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n addNoteToOrder() {\r\n this.addNote.emit({ note: this.note, isPublic: !this.noteIsPrivate });\r\n this.note = '';\r\n this.noteIsPrivate = true;\r\n }\r\n}\r\n","<h4>{{ 'order.order-history' | translate }}</h4>\r\n<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"getModification(entry.data.modificationId) as modification\">\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{ modification.priceChange | localeCurrency: order.currencyCode }}</strong>\r\n <vdr-chip colorType=\"success\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n {{ 'order.transaction-id' | translate }}: {{ getPayment(entry)?.transactionId }}\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n {{\r\n 'order.history-refund-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to, id: entry.data.refundId }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{ 'order.history-items-cancelled' | translate: { count: entry.data.orderItemIds.length } }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-payment-state-label',\r\n templateUrl: './payment-state-label.component.html',\r\n styleUrls: ['./payment-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Authorized':\r\n return 'warning';\r\n case 'Settled':\r\n return 'success';\r\n case 'Declined':\r\n case 'Cancelled':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-refund-state-label',\r\n templateUrl: './refund-state-label.component.html',\r\n styleUrls: ['./refund-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RefundStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Pending':\r\n return 'warning';\r\n case 'Settled':\r\n return 'success';\r\n case 'Failed':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CurrencyCode, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-order-payment-card',\r\n templateUrl: './order-payment-card.component.html',\r\n styleUrls: ['./order-payment-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderPaymentCardComponent {\r\n @Input() payment: Payment;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() settlePayment = new EventEmitter<Payment>();\r\n @Output() transitionPaymentState = new EventEmitter<{ payment: Payment; state: string }>();\r\n @Output() settleRefund = new EventEmitter<Payment['refunds'][number]>();\r\n\r\n refundHasMetadata(refund?: Payment['refunds'][number]): boolean {\r\n return !!refund && Object.keys(refund.metadata).length > 0;\r\n }\r\n\r\n nextOtherStates(): string[] {\r\n if (!this.payment) {\r\n return [];\r\n }\r\n return this.payment.nextStates.filter(s => s !== 'Settled');\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header payment-header\">\r\n <div>\r\n {{ 'order.payment' | translate }}\r\n <ng-container *ngIf=\"payment.transactionId\">#{{ payment.transactionId }}</ng-container>\r\n </div>\r\n <div class=\"payment-state\">\r\n <vdr-payment-state-label [state]=\"payment.state\"></vdr-payment-state-label>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-payment-detail [payment]=\"payment\" [currencyCode]=\"currencyCode\"></vdr-payment-detail>\r\n </div>\r\n <ng-container *ngFor=\"let refund of payment.refunds\">\r\n <div class=\"card-header payment-header\">\r\n <clr-icon shape=\"redo\" class=\"refund-icon\" dir=\"down\"></clr-icon>\r\n {{ 'order.refund' | translate }} #{{ refund.id }}\r\n <div class=\"clr-flex-fill\"></div>\r\n <vdr-refund-state-label [state]=\"refund.state\"></vdr-refund-state-label>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ refund.createdAt | localeDate: 'medium' }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-total' | translate\">\r\n {{ refund.total | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.transaction-id' | translate\" *ngIf=\"refund.transactionId\">\r\n {{ refund.transactionId }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-reason' | translate\" *ngIf=\"refund.reason\">\r\n {{ refund.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-metadata' | translate\" *ngIf=\"refundHasMetadata(refund)\">\r\n <vdr-object-tree [value]=\"refund.metadata\"></vdr-object-tree>\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"refund.state === 'Pending'\">\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"settleRefund.emit(refund)\">\r\n {{ 'order.settle-refund' | translate }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <div class=\"card-footer\" *ngIf=\"payment.nextStates.length\">\r\n <button\r\n class=\"btn btn-sm btn-primary\"\r\n *ngIf=\"payment.nextStates.includes('Settled')\"\r\n (click)=\"settlePayment.emit(payment)\"\r\n >\r\n {{ 'order.settle-payment' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngFor=\"let nextState of nextOtherStates()\">\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionPaymentState.emit({ payment: payment, state: nextState })\"\r\n >\r\n <ng-container *ngIf=\"nextState !== 'Cancelled'; else cancel\">\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </ng-container>\r\n <ng-template #cancel>\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n {{ 'order.cancel-payment' | translate }}\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n CancelOrderMutation,\r\n CustomFieldConfig,\r\n DataService,\r\n EditNoteDialogComponent,\r\n GetOrderHistoryQuery,\r\n GetOrderQuery,\r\n HistoryEntry,\r\n ModalService,\r\n NotificationService,\r\n Order,\r\n OrderDetailFragment,\r\n OrderLineFragment,\r\n Refund,\r\n RefundOrderMutation,\r\n ServerConfigService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever, summate } from '@vendure/common/lib/shared-utils';\r\nimport { EMPTY, merge, Observable, of, Subject } from 'rxjs';\r\nimport { map, mapTo, startWith, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { OrderTransitionService } from '../../providers/order-transition.service';\r\nimport { AddManualPaymentDialogComponent } from '../add-manual-payment-dialog/add-manual-payment-dialog.component';\r\nimport { CancelOrderDialogComponent } from '../cancel-order-dialog/cancel-order-dialog.component';\r\nimport { FulfillOrderDialogComponent } from '../fulfill-order-dialog/fulfill-order-dialog.component';\r\nimport { OrderProcessGraphDialogComponent } from '../order-process-graph-dialog/order-process-graph-dialog.component';\r\nimport { RefundOrderDialogComponent } from '../refund-order-dialog/refund-order-dialog.component';\r\nimport { SettleRefundDialogComponent } from '../settle-refund-dialog/settle-refund-dialog.component';\r\n\r\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-order-detail',\r\n templateUrl: './order-detail.component.html',\r\n styleUrls: ['./order-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderDetailComponent\r\n extends BaseDetailComponent<OrderDetailFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm = new FormGroup({});\r\n history$: Observable<NonNullable<GetOrderHistoryQuery['order']>['history']['items'] | undefined>;\r\n nextStates$: Observable<string[]>;\r\n fetchHistory = new Subject<void>();\r\n customFields: CustomFieldConfig[];\r\n orderLineCustomFields: CustomFieldConfig[];\r\n private readonly defaultStates = [\r\n 'AddingItems',\r\n 'ArrangingPayment',\r\n 'PaymentAuthorized',\r\n 'PaymentSettled',\r\n 'PartiallyShipped',\r\n 'Shipped',\r\n 'PartiallyDelivered',\r\n 'Delivered',\r\n 'Cancelled',\r\n 'Modifying',\r\n 'ArrangingAdditionalPayment',\r\n ];\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private orderTransitionService: OrderTransitionService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.entity$.pipe(take(1)).subscribe(order => {\r\n if (order.state === 'Modifying') {\r\n this.router.navigate(['./', 'modify'], { relativeTo: this.route });\r\n }\r\n });\r\n this.customFields = this.getCustomFieldConfig('Order');\r\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\r\n this.history$ = this.fetchHistory.pipe(\r\n startWith(null),\r\n switchMap(() => {\r\n return this.dataService.order\r\n .getOrderHistory(this.id, {\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n })\r\n .mapStream(data => data.order?.history.items);\r\n }),\r\n );\r\n this.nextStates$ = this.entity$.pipe(\r\n map(order => {\r\n const isInCustomState = !this.defaultStates.includes(order.state);\r\n return isInCustomState\r\n ? order.nextStates\r\n : order.nextStates.filter(s => !this.defaultStates.includes(s));\r\n }),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n openStateDiagram() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order =>\r\n this.modalService.fromComponent(OrderProcessGraphDialogComponent, {\r\n closable: true,\r\n locals: {\r\n activeState: order.state,\r\n },\r\n }),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n\r\n transitionToState(state: string) {\r\n this.dataService.order.transitionToState(this.id, state).subscribe(({ transitionOrderToState }) => {\r\n switch (transitionOrderToState?.__typename) {\r\n case 'Order':\r\n this.notificationService.success(_('order.transitioned-to-state-success'), { state });\r\n this.fetchHistory.next();\r\n break;\r\n case 'OrderStateTransitionError':\r\n this.notificationService.error(transitionOrderToState.transitionError);\r\n }\r\n });\r\n }\r\n\r\n manuallyTransitionToState(order: OrderDetailFragment) {\r\n this.orderTransitionService\r\n .manuallyTransitionToState({\r\n orderId: order.id,\r\n nextStates: order.nextStates,\r\n cancellable: true,\r\n message: _('order.manually-transition-to-state-message'),\r\n retry: 0,\r\n })\r\n .subscribe();\r\n }\r\n\r\n transitionToModifying() {\r\n this.dataService.order\r\n .transitionToState(this.id, 'Modifying')\r\n .subscribe(({ transitionOrderToState }) => {\r\n switch (transitionOrderToState?.__typename) {\r\n case 'Order':\r\n this.router.navigate(['./modify'], { relativeTo: this.route });\r\n break;\r\n case 'OrderStateTransitionError':\r\n this.notificationService.error(transitionOrderToState.transitionError);\r\n }\r\n });\r\n }\r\n\r\n updateCustomFields(customFieldsValue: any) {\r\n this.dataService.order\r\n .updateOrderCustomFields({\r\n id: this.id,\r\n customFields: customFieldsValue,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Order' });\r\n });\r\n }\r\n\r\n getOrderAddressLines(orderAddress?: { [key: string]: string }): string[] {\r\n if (!orderAddress) {\r\n return [];\r\n }\r\n return Object.values(orderAddress)\r\n .filter(val => val !== 'OrderAddress')\r\n .filter(line => !!line);\r\n }\r\n\r\n settlePayment(payment: Payment) {\r\n this.dataService.order.settlePayment(payment.id).subscribe(({ settlePayment }) => {\r\n switch (settlePayment.__typename) {\r\n case 'Payment':\r\n if (settlePayment.state === 'Settled') {\r\n this.notificationService.success(_('order.settle-payment-success'));\r\n } else {\r\n this.notificationService.error(_('order.settle-payment-error'));\r\n }\r\n this.dataService.order.getOrder(this.id).single$.subscribe();\r\n this.fetchHistory.next();\r\n break;\r\n case 'OrderStateTransitionError':\r\n case 'PaymentStateTransitionError':\r\n case 'SettlePaymentError':\r\n this.notificationService.error(settlePayment.message);\r\n }\r\n });\r\n }\r\n\r\n transitionPaymentState({ payment, state }: { payment: Payment; state: string }) {\r\n this.dataService.order\r\n .transitionPaymentToState(payment.id, state)\r\n .subscribe(({ transitionPaymentToState }) => {\r\n switch (transitionPaymentToState.__typename) {\r\n case 'Payment':\r\n this.notificationService.success(_('order.transitioned-payment-to-state-success'), {\r\n state,\r\n });\r\n this.dataService.order.getOrder(this.id).single$.subscribe();\r\n this.fetchHistory.next();\r\n break;\r\n case 'PaymentStateTransitionError':\r\n this.notificationService.error(transitionPaymentToState.message);\r\n break;\r\n }\r\n });\r\n }\r\n\r\n canAddFulfillment(order: OrderDetailFragment): boolean {\r\n const allItemsFulfilled = order.lines\r\n .reduce((items, line) => [...items, ...line.items], [] as OrderLineFragment['items'])\r\n .every(item => !!item.fulfillment || item.cancelled);\r\n return (\r\n !allItemsFulfilled &&\r\n !this.hasUnsettledModifications(order) &&\r\n this.outstandingPaymentAmount(order) === 0 &&\r\n (order.nextStates.includes('Shipped') ||\r\n order.nextStates.includes('PartiallyShipped') ||\r\n order.nextStates.includes('Delivered'))\r\n );\r\n }\r\n\r\n hasUnsettledModifications(order: OrderDetailFragment): boolean {\r\n return 0 < order.modifications.filter(m => !m.isSettled).length;\r\n }\r\n\r\n getOutstandingModificationAmount(order: OrderDetailFragment): number {\r\n return summate(\r\n order.modifications.filter(m => !m.isSettled),\r\n 'priceChange',\r\n );\r\n }\r\n\r\n outstandingPaymentAmount(order: OrderDetailFragment): number {\r\n const paymentIsValid = (p: Payment): boolean =>\r\n p.state !== 'Cancelled' && p.state !== 'Declined' && p.state !== 'Error';\r\n\r\n let amountCovered = 0;\r\n for (const payment of order.payments?.filter(paymentIsValid) ?? []) {\r\n const refunds = payment.refunds.filter(r => r.state !== 'Failed') ?? [];\r\n const refundsTotal = summate(refunds as Array<Required<Refund>>, 'total');\r\n amountCovered += payment.amount - refundsTotal;\r\n }\r\n return order.totalWithTax - amountCovered;\r\n }\r\n\r\n addManualPayment(order: OrderDetailFragment) {\r\n const priorState = order.state;\r\n this.modalService\r\n .fromComponent(AddManualPaymentDialogComponent, {\r\n closable: true,\r\n locals: {\r\n outstandingAmount: this.outstandingPaymentAmount(order),\r\n currencyCode: order.currencyCode,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.order.addManualPaymentToOrder({\r\n orderId: this.id,\r\n transactionId: result.transactionId,\r\n method: result.method,\r\n metadata: result.metadata || {},\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n switchMap(({ addManualPaymentToOrder }) => {\r\n switch (addManualPaymentToOrder.__typename) {\r\n case 'Order':\r\n this.notificationService.success(_('order.add-payment-to-order-success'));\r\n if (priorState === 'ArrangingAdditionalPayment') {\r\n return this.orderTransitionService.transitionToPreModifyingState(\r\n order.id,\r\n order.nextStates,\r\n );\r\n } else {\r\n return this.dataService.order\r\n .transitionToState(this.id, 'PaymentSettled')\r\n .pipe(mapTo('PaymentSettled'));\r\n }\r\n case 'ManualPaymentStateError':\r\n this.notificationService.error(addManualPaymentToOrder.message);\r\n return EMPTY;\r\n default:\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.refetchOrder({ result });\r\n }\r\n });\r\n }\r\n\r\n fulfillOrder() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order => {\r\n return this.modalService.fromComponent(FulfillOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n });\r\n }),\r\n switchMap(input => {\r\n if (input) {\r\n return this.dataService.order.createFulfillment(input);\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n switchMap(result => this.refetchOrder(result).pipe(mapTo(result))),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n const { addFulfillmentToOrder } = result;\r\n switch (addFulfillmentToOrder.__typename) {\r\n case 'Fulfillment':\r\n this.notificationService.success(_('order.create-fulfillment-success'));\r\n break;\r\n case 'EmptyOrderLineSelectionError':\r\n case 'InsufficientStockOnHandError':\r\n case 'ItemsAlreadyFulfilledError':\r\n case 'InvalidFulfillmentHandlerError':\r\n this.notificationService.error(addFulfillmentToOrder.message);\r\n break;\r\n case 'FulfillmentStateTransitionError':\r\n this.notificationService.error(addFulfillmentToOrder.transitionError);\r\n break;\r\n case 'CreateFulfillmentError':\r\n this.notificationService.error(addFulfillmentToOrder.fulfillmentHandlerError);\r\n break;\r\n case undefined:\r\n this.notificationService.error(JSON.stringify(addFulfillmentToOrder));\r\n break;\r\n default:\r\n assertNever(addFulfillmentToOrder);\r\n }\r\n }\r\n });\r\n }\r\n\r\n transitionFulfillment(id: string, state: string) {\r\n this.dataService.order\r\n .transitionFulfillmentToState(id, state)\r\n .pipe(switchMap(result => this.refetchOrder(result)))\r\n .subscribe(() => {\r\n this.notificationService.success(_('order.successfully-updated-fulfillment'));\r\n });\r\n }\r\n\r\n cancelOrRefund(order: OrderDetailFragment) {\r\n const isRefundable = this.orderHasSettledPayments(order);\r\n if (order.state === 'PaymentAuthorized' || order.active === true || !isRefundable) {\r\n this.cancelOrder(order);\r\n } else {\r\n this.refundOrder(order);\r\n }\r\n }\r\n\r\n settleRefund(refund: Payment['refunds'][number]) {\r\n this.modalService\r\n .fromComponent(SettleRefundDialogComponent, {\r\n size: 'md',\r\n locals: {\r\n refund,\r\n },\r\n })\r\n .pipe(\r\n switchMap(transactionId => {\r\n if (transactionId) {\r\n return this.dataService.order.settleRefund(\r\n {\r\n transactionId,\r\n id: refund.id,\r\n },\r\n this.id,\r\n );\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n // switchMap(result => this.refetchOrder(result)),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.notificationService.success(_('order.settle-refund-success'));\r\n }\r\n });\r\n }\r\n\r\n addNote(event: { note: string; isPublic: boolean }) {\r\n const { note, isPublic } = event;\r\n this.dataService.order\r\n .addNoteToOrder({\r\n id: this.id,\r\n note,\r\n isPublic,\r\n })\r\n .pipe(switchMap(result => this.refetchOrder(result)))\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n updateNote(entry: HistoryEntry) {\r\n this.modalService\r\n .fromComponent(EditNoteDialogComponent, {\r\n closable: true,\r\n locals: {\r\n displayPrivacyControls: true,\r\n note: entry.data.note,\r\n noteIsPrivate: !entry.isPublic,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.order.updateOrderNote({\r\n noteId: entry.id,\r\n isPublic: !result.isPrivate,\r\n note: result.note,\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n deleteNote(entry: HistoryEntry) {\r\n return this.modalService\r\n .dialog({\r\n title: _('common.confirm-delete-note'),\r\n body: entry.data.note,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(switchMap(res => (res ? this.dataService.order.deleteOrderNote(entry.id) : EMPTY)))\r\n .subscribe(() => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n orderHasSettledPayments(order: OrderDetailFragment): boolean {\r\n return !!order.payments?.find(p => p.state === 'Settled');\r\n }\r\n\r\n private cancelOrder(order: OrderDetailFragment) {\r\n this.modalService\r\n .fromComponent(CancelOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n })\r\n .pipe(\r\n switchMap(input => {\r\n if (input) {\r\n return this.dataService.order.cancelOrder(input);\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n switchMap(result => this.refetchOrder(result)),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.notificationService.success(_('order.cancelled-order-success'));\r\n }\r\n });\r\n }\r\n\r\n private refundOrder(order: OrderDetailFragment) {\r\n this.modalService\r\n .fromComponent(RefundOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n })\r\n .pipe(\r\n switchMap(input => {\r\n if (!input) {\r\n return of(undefined);\r\n }\r\n\r\n const operations: Array<\r\n Observable<RefundOrderMutation['refundOrder'] | CancelOrderMutation['cancelOrder']>\r\n > = [];\r\n if (input.refund.lines.length) {\r\n operations.push(\r\n this.dataService.order\r\n .refundOrder(input.refund)\r\n .pipe(map(res => res.refundOrder)),\r\n );\r\n }\r\n if (input.cancel.lines?.length) {\r\n operations.push(\r\n this.dataService.order\r\n .cancelOrder(input.cancel)\r\n .pipe(map(res => res.cancelOrder)),\r\n );\r\n }\r\n return merge(...operations);\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n switch (result.__typename) {\r\n case 'Order':\r\n this.refetchOrder(result).subscribe();\r\n this.notificationService.success(_('order.cancelled-order-success'));\r\n break;\r\n case 'Refund':\r\n this.refetchOrder(result).subscribe();\r\n if (result.state === 'Failed') {\r\n this.notificationService.error(_('order.refund-order-failed'));\r\n } else {\r\n this.notificationService.success(_('order.refund-order-success'));\r\n }\r\n break;\r\n case 'QuantityTooGreatError':\r\n case 'MultipleOrderError':\r\n case 'OrderStateTransitionError':\r\n case 'CancelActiveOrderError':\r\n case 'EmptyOrderLineSelectionError':\r\n case 'AlreadyRefundedError':\r\n case 'NothingToRefundError':\r\n case 'PaymentOrderMismatchError':\r\n case 'RefundOrderStateError':\r\n case 'RefundStateTransitionError':\r\n this.notificationService.error(result.message);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private refetchOrder(result: object | undefined): Observable<GetOrderQuery | undefined> {\r\n this.fetchHistory.next();\r\n if (result) {\r\n return this.dataService.order.getOrder(this.id).single$;\r\n } else {\r\n return of(undefined);\r\n }\r\n }\r\n\r\n protected setFormValues(entity: OrderDetailFragment): void {\r\n // empty\r\n }\r\n}\r\n","<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\">\r\n <button\r\n class=\"icon-button\"\r\n (click)=\"openStateDiagram()\"\r\n [title]=\"'order.order-state-diagram' | translate\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n </button>\r\n </vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n (order.state === 'ArrangingPayment' || order.state === 'ArrangingAdditionalPayment') &&\r\n (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))\r\n \"\r\n (click)=\"addManualPayment(order)\"\r\n >\r\n {{ 'order.add-payment-to-order' | translate }}\r\n ({{ outstandingPaymentAmount(order) | localeCurrency: order.currencyCode }})\r\n </button>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n order.active === false &&\r\n order.state !== 'ArrangingAdditionalPayment' &&\r\n 0 < outstandingPaymentAmount(order)\r\n \"\r\n (click)=\"transitionToState('ArrangingAdditionalPayment')\"\r\n >\r\n {{ 'order.arrange-additional-payment' | translate }}\r\n </button>\r\n <button class=\"btn btn-primary\" (click)=\"fulfillOrder()\" [disabled]=\"!canAddFulfillment(order)\">\r\n {{ 'order.fulfill-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngIf=\"order.nextStates.includes('Modifying')\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"transitionToModifying()\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'order.modify-order' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n *ngIf=\"order.nextStates.includes('Cancelled')\"\r\n (click)=\"cancelOrRefund(order)\"\r\n >\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n <ng-container *ngIf=\"orderHasSettledPayments(order); else cancelOnly\">\r\n {{ 'order.refund-and-cancel-order' | translate }}\r\n </ng-container>\r\n <ng-template #cancelOnly>\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-template>\r\n </button>\r\n\r\n <ng-container *ngIf=\"(nextStates$ | async)?.length\">\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n *ngFor=\"let nextState of nextStates$ | async\"\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionToState(nextState)\"\r\n >\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </button>\r\n </ng-container>\r\n <div class=\"dropdown-divider\"></div>\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"manuallyTransitionToState(order)\">\r\n <clr-icon shape=\"step-forward-2\" class=\"is-warning\"></clr-icon>\r\n {{ 'order.manually-transition-to-state' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n ></vdr-order-table>\r\n <h4>{{ 'order.tax-summary' | translate }}</h4>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency: order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency: order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-order-history\r\n [order]=\"order\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNote($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-order-history>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.customer' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n <h6 *ngIf=\"getOrderAddressLines(order.shippingAddress).length\">\r\n {{ 'order.shipping-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6 *ngIf=\"getOrderAddressLines(order.billingAddress).length\">\r\n {{ 'order.billing-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.billingAddress\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.payments && order.payments.length\">\r\n <vdr-order-payment-card\r\n *ngFor=\"let payment of order.payments\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [payment]=\"payment\"\r\n (settlePayment)=\"settlePayment($event)\"\r\n (transitionPaymentState)=\"transitionPaymentState($event)\"\r\n (settleRefund)=\"settleRefund($event)\"\r\n ></vdr-order-payment-card>\r\n </ng-container>\r\n <ng-container *ngFor=\"let fulfillment of order.fulfillments\">\r\n <vdr-fulfillment-card\r\n [fulfillment]=\"fulfillment\"\r\n [order]=\"order\"\r\n (transitionState)=\"transitionFulfillment(fulfillment.id, $event)\"\r\n ></vdr-fulfillment-card>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { CustomFieldConfig, Dialog, ModifyOrderInput, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\nexport enum OrderEditResultType {\r\n Refund,\r\n Payment,\r\n PriceUnchanged,\r\n Cancel,\r\n}\r\n\r\ninterface OrderEditsRefundResult {\r\n result: OrderEditResultType.Refund;\r\n refundPaymentId: string;\r\n refundNote?: string;\r\n}\r\ninterface OrderEditsPaymentResult {\r\n result: OrderEditResultType.Payment;\r\n}\r\ninterface OrderEditsPriceUnchangedResult {\r\n result: OrderEditResultType.PriceUnchanged;\r\n}\r\ninterface OrderEditsCancelResult {\r\n result: OrderEditResultType.Cancel;\r\n}\r\ntype OrderEditResult =\r\n | OrderEditsRefundResult\r\n | OrderEditsPaymentResult\r\n | OrderEditsPriceUnchangedResult\r\n | OrderEditsCancelResult;\r\n\r\n@Component({\r\n selector: 'vdr-order-edits-preview-dialog',\r\n templateUrl: './order-edits-preview-dialog.component.html',\r\n styleUrls: ['./order-edits-preview-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderEditsPreviewDialogComponent implements OnInit, Dialog<OrderEditResult> {\r\n // Passed in via the modalService\r\n order: OrderDetailFragment;\r\n originalTotalWithTax: number;\r\n orderLineCustomFields: CustomFieldConfig[];\r\n modifyOrderInput: ModifyOrderInput;\r\n\r\n selectedPayment?: NonNullable<OrderDetailFragment['payments']>[number];\r\n refundNote: string;\r\n resolveWith: (result?: OrderEditResult) => void;\r\n\r\n get priceDifference(): number {\r\n return this.order.totalWithTax - this.originalTotalWithTax;\r\n }\r\n\r\n ngOnInit() {\r\n this.refundNote = this.modifyOrderInput.note || '';\r\n }\r\n\r\n cancel() {\r\n this.resolveWith({\r\n result: OrderEditResultType.Cancel,\r\n });\r\n }\r\n\r\n submit() {\r\n if (0 < this.priceDifference) {\r\n this.resolveWith({\r\n result: OrderEditResultType.Payment,\r\n });\r\n } else if (this.priceDifference < 0) {\r\n this.resolveWith({\r\n result: OrderEditResultType.Refund,\r\n // tslint:disable-next-line:no-non-null-assertion\r\n refundPaymentId: this.selectedPayment!.id,\r\n refundNote: this.refundNote,\r\n });\r\n } else {\r\n this.resolveWith({\r\n result: OrderEditResultType.PriceUnchanged,\r\n });\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.confirm-modifications' | translate }}</ng-template>\r\n<vdr-order-table [order]=\"order\" [orderLineCustomFields]=\"orderLineCustomFields\"></vdr-order-table>\r\n\r\n<h4 class=\"h4\">\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{ priceDifference | localeCurrency: order.currencyCode }}</strong>\r\n</h4>\r\n<div *ngIf=\"priceDifference < 0\">\r\n<clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\">\r\n <option\r\n *ngFor=\"let payment of order.payments\"\r\n [ngValue]=\"payment\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n</clr-select-container>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <textarea [(ngModel)]=\"refundNote\" name=\"refundNote\" clrTextarea required></textarea>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" [disabled]=\"priceDifference < 0 && !selectedPayment\" class=\"btn btn-primary\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\n AddItemInput,\n AdjustOrderLineInput,\n BaseDetailComponent,\n CustomFieldConfig,\n DataService,\n ErrorResult,\n GetAvailableCountriesQuery,\n HistoryEntryType,\n LanguageCode,\n ModalService,\n ModifyOrderInput,\n NotificationService,\n OrderAddressFragment,\n OrderDetailFragment,\n ProductSelectorSearchQuery,\n ServerConfigService,\n SortOrder,\n SurchargeInput,\n} from '@vendure/admin-ui/core';\nimport { assertNever, notNullOrUndefined } from '@vendure/common/lib/shared-utils';\nimport { concat, EMPTY, Observable, of, Subject } from 'rxjs';\nimport {\n distinctUntilChanged,\n map,\n mapTo,\n shareReplay,\n startWith,\n switchMap,\n takeUntil,\n} from 'rxjs/operators';\n\nimport { OrderTransitionService } from '../../providers/order-transition.service';\nimport {\n OrderEditResultType,\n OrderEditsPreviewDialogComponent,\n} from '../order-edits-preview-dialog/order-edits-preview-dialog.component';\n\ntype ProductSelectorItem = ProductSelectorSearchQuery['search']['items'][number];\n\ninterface AddedLine {\n productVariantId: string;\n productAsset?: ProductSelectorItem['productAsset'] | null;\n productVariantName: string;\n sku: string;\n priceWithTax: number;\n price: number;\n quantity: number;\n}\n\ntype ModifyOrderData = Omit<ModifyOrderInput, 'addItems' | 'adjustOrderLines'> & {\n addItems: Array<AddItemInput & { customFields?: any }>;\n adjustOrderLines: Array<AdjustOrderLineInput & { customFields?: any }>;\n};\n\n@Component({\n selector: 'vdr-order-editor',\n templateUrl: './order-editor.component.html',\n styleUrls: ['./order-editor.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OrderEditorComponent\n extends BaseDetailComponent<OrderDetailFragment>\n implements OnInit, OnDestroy\n{\n availableCountries$: Observable<GetAvailableCountriesQuery['countries']['items']>;\n availableCouponCodes$: Observable<Array<{ code: string; promotionName: string }>>;\n couponCodeInput$ = new Subject<string>();\n addressCustomFields: CustomFieldConfig[];\n detailForm = new FormGroup({});\n couponCodesControl = new FormControl();\n orderLineCustomFieldsFormArray: FormArray;\n addItemCustomFieldsFormArray: FormArray;\n addItemCustomFieldsForm: FormGroup;\n addItemSelectedVariant: ProductSelectorItem | undefined;\n orderLineCustomFields: CustomFieldConfig[];\n modifyOrderInput: ModifyOrderData = {\n dryRun: true,\n orderId: '',\n addItems: [],\n adjustOrderLines: [],\n surcharges: [],\n note: '',\n updateShippingAddress: {},\n updateBillingAddress: {},\n };\n surchargeForm: FormGroup;\n shippingAddressForm: FormGroup;\n billingAddressForm: FormGroup;\n note = '';\n recalculateShipping = true;\n previousState: string;\n private addedVariants = new Map<string, ProductSelectorItem>();\n\n constructor(\n router: Router,\n route: ActivatedRoute,\n serverConfigService: ServerConfigService,\n private changeDetector: ChangeDetectorRef,\n protected dataService: DataService,\n private notificationService: NotificationService,\n private modalService: ModalService,\n private orderTransitionService: OrderTransitionService,\n ) {\n super(route, router, serverConfigService, dataService);\n }\n\n get addedLines(): AddedLine[] {\n const getSinglePriceValue = (price: ProductSelectorItem['price']) =>\n price.__typename === 'SinglePrice' ? price.value : 0;\n return (this.modifyOrderInput.addItems || [])\n .map(row => {\n const variantInfo = this.addedVariants.get(row.productVariantId);\n if (variantInfo) {\n return {\n ...variantInfo,\n price: getSinglePriceValue(variantInfo.price),\n priceWithTax: getSinglePriceValue(variantInfo.priceWithTax),\n quantity: row.quantity,\n };\n }\n })\n .filter(notNullOrUndefined);\n }\n\n ngOnInit(): void {\n this.init();\n this.addressCustomFields = this.getCustomFieldConfig('Address');\n this.modifyOrderInput.orderId = this.route.snapshot.paramMap.get('id') as string;\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\n this.entity$.pipe(takeUntil(this.destroy$)).subscribe(order => {\n if (order.couponCodes.length) {\n this.couponCodesControl.setValue(order.couponCodes);\n }\n this.surchargeForm = new FormGroup({\n description: new FormControl('', Validators.required),\n sku: new FormControl(''),\n price: new FormControl(0, Validators.required),\n priceIncludesTax: new FormControl(true),\n taxRate: new FormControl(0),\n taxDescription: new FormControl(''),\n });\n if (!this.shippingAddressForm) {\n this.shippingAddressForm = new FormGroup({\n fullName: new FormControl(order.shippingAddress?.fullName),\n company: new FormControl(order.shippingAddress?.company),\n streetLine1: new FormControl(order.shippingAddress?.streetLine1),\n streetLine2: new FormControl(order.shippingAddress?.streetLine2),\n city: new FormControl(order.shippingAddress?.city),\n province: new FormControl(order.shippingAddress?.province),\n postalCode: new FormControl(order.shippingAddress?.postalCode),\n countryCode: new FormControl(order.shippingAddress?.countryCode),\n phoneNumber: new FormControl(order.shippingAddress?.phoneNumber),\n });\n this.addAddressCustomFieldsFormGroup(this.shippingAddressForm, order.shippingAddress);\n }\n if (!this.billingAddressForm) {\n this.billingAddressForm = new FormGroup({\n fullName: new FormControl(order.billingAddress?.fullName),\n company: new FormControl(order.billingAddress?.company),\n streetLine1: new FormControl(order.billingAddress?.streetLine1),\n streetLine2: new FormControl(order.billingAddress?.streetLine2),\n city: new FormControl(order.billingAddress?.city),\n province: new FormControl(order.billingAddress?.province),\n postalCode: new FormControl(order.billingAddress?.postalCode),\n countryCode: new FormControl(order.billingAddress?.countryCode),\n phoneNumber: new FormControl(order.billingAddress?.phoneNumber),\n });\n this.addAddressCustomFieldsFormGroup(this.billingAddressForm, order.billingAddress);\n }\n this.orderLineCustomFieldsFormArray = new FormArray([]);\n for (const line of order.lines) {\n const formGroup = new FormGroup({});\n for (const { name } of this.orderLineCustomFields) {\n formGroup.addControl(name, new FormControl((line as any).customFields[name]));\n }\n formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n let modifyRow = this.modifyOrderInput.adjustOrderLines.find(\n l => l.orderLineId === line.id,\n );\n if (!modifyRow) {\n modifyRow = {\n orderLineId: line.id,\n quantity: line.quantity,\n };\n this.modifyOrderInput.adjustOrderLines.push(modifyRow);\n }\n if (this.orderLineCustomFields.length) {\n modifyRow.customFields = value;\n }\n });\n this.orderLineCustomFieldsFormArray.push(formGroup);\n }\n });\n this.availableCouponCodes$ = concat(\n this.couponCodeInput$.pipe(\n distinctUntilChanged(),\n switchMap(\n term =>\n this.dataService.promotion.getPromotions(10, 0, {\n couponCode: { contains: term },\n }).single$,\n ),\n map(({ promotions }) =>\n // tslint:disable-next-line:no-non-null-assertion\n promotions.items.map(p => ({ code: p.couponCode!, promotionName: p.name })),\n ),\n startWith([]),\n ),\n );\n this.addItemCustomFieldsFormArray = new FormArray([]);\n this.addItemCustomFieldsForm = new FormGroup({});\n for (const customField of this.orderLineCustomFields) {\n this.addItemCustomFieldsForm.addControl(customField.name, new FormControl());\n }\n this.availableCountries$ = this.dataService.settings\n .getAvailableCountries()\n .mapSingle(result => result.countries.items)\n .pipe(shareReplay(1));\n this.dataService.order\n .getOrderHistory(this.id, {\n take: 1,\n sort: {\n createdAt: SortOrder.DESC,\n },\n filter: { type: { eq: HistoryEntryType.ORDER_STATE_TRANSITION } },\n })\n .single$.subscribe(({ order }) => {\n this.previousState = order?.history.items[0].data.from;\n });\n }\n\n ngOnDestroy(): void {\n this.destroy();\n }\n\n transitionToPriorState(order: OrderDetailFragment) {\n this.orderTransitionService\n .transitionToPreModifyingState(order.id, order.nextStates)\n .subscribe(result => {\n this.router.navigate(['..'], { relativeTo: this.route });\n });\n }\n\n canPreviewChanges(): boolean {\n const { addItems, adjustOrderLines, surcharges } = this.modifyOrderInput;\n return (\n !!addItems?.length ||\n !!surcharges?.length ||\n !!adjustOrderLines?.length ||\n (this.shippingAddressForm.dirty && this.shippingAddressForm.valid) ||\n (this.billingAddressForm.dirty && this.billingAddressForm.valid) ||\n this.couponCodesControl.dirty\n );\n }\n\n isLineModified(line: OrderDetailFragment['lines'][number]): boolean {\n return !!this.modifyOrderInput.adjustOrderLines?.find(\n l => l.orderLineId === line.id && l.quantity !== line.quantity,\n );\n }\n\n updateLineQuantity(line: OrderDetailFragment['lines'][number], quantity: string) {\n const { adjustOrderLines } = this.modifyOrderInput;\n let row = adjustOrderLines?.find(l => l.orderLineId === line.id);\n if (row && +quantity === line.quantity) {\n // Remove the modification if the quantity is the same as\n // the original order\n adjustOrderLines?.splice(adjustOrderLines?.indexOf(row), 1);\n }\n if (!row) {\n row = { orderLineId: line.id, quantity: +quantity };\n adjustOrderLines?.push(row);\n }\n row.quantity = +quantity;\n }\n\n updateAddedItemQuantity(item: AddedLine, quantity: string) {\n const row = this.modifyOrderInput.addItems?.find(l => l.productVariantId === item.productVariantId);\n if (row) {\n row.quantity = +quantity;\n }\n }\n\n trackByProductVariantId(index: number, item: AddedLine) {\n return item.productVariantId;\n }\n\n getSelectedItemPrice(result: ProductSelectorItem | undefined): number {\n switch (result?.priceWithTax.__typename) {\n case 'SinglePrice':\n return result.priceWithTax.value;\n default:\n return 0;\n }\n }\n\n addItemToOrder(result: ProductSelectorItem | undefined) {\n if (!result) {\n return;\n }\n const customFields = this.orderLineCustomFields.length\n ? this.addItemCustomFieldsForm.value\n : undefined;\n let row = this.modifyOrderInput.addItems?.find(l =>\n this.isMatchingAddItemRow(l, result, customFields),\n );\n if (!row) {\n row = { productVariantId: result.productVariantId, quantity: 1 };\n if (customFields) {\n row.customFields = customFields;\n }\n this.modifyOrderInput.addItems?.push(row);\n } else {\n row.quantity++;\n }\n if (customFields) {\n const formGroup = new FormGroup({});\n for (const [key, value] of Object.entries(customFields)) {\n formGroup.addControl(key, new FormControl(value));\n }\n this.addItemCustomFieldsFormArray.push(formGroup);\n formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n if (row) {\n row.customFields = value;\n }\n });\n }\n this.addItemCustomFieldsForm.reset({});\n this.addItemSelectedVariant = undefined;\n this.addedVariants.set(result.productVariantId, result);\n }\n\n private isMatchingAddItemRow(\n row: ModifyOrderData['addItems'][number],\n result: ProductSelectorItem,\n customFields: any,\n ): boolean {\n return (\n row.productVariantId === result.productVariantId &&\n JSON.stringify(row.customFields) === JSON.stringify(customFields)\n );\n }\n\n removeAddedItem(index: number) {\n this.modifyOrderInput.addItems.splice(index, 1);\n if (-1 < index) {\n this.addItemCustomFieldsFormArray.removeAt(index);\n }\n }\n\n getSurchargePrices(surcharge: SurchargeInput) {\n const priceWithTax = surcharge.priceIncludesTax\n ? surcharge.price\n : Math.round(surcharge.price * ((100 + (surcharge.taxRate || 0)) / 100));\n const price = surcharge.priceIncludesTax\n ? Math.round(surcharge.price / ((100 + (surcharge.taxRate || 0)) / 100))\n : surcharge.price;\n return {\n price,\n priceWithTax,\n };\n }\n\n addSurcharge(value: any) {\n this.modifyOrderInput.surcharges?.push(value);\n this.surchargeForm.reset({\n price: 0,\n priceIncludesTax: true,\n taxRate: 0,\n });\n }\n\n removeSurcharge(index: number) {\n this.modifyOrderInput.surcharges?.splice(index, 1);\n }\n\n previewAndModify(order: OrderDetailFragment) {\n const input: ModifyOrderInput = {\n ...this.modifyOrderInput,\n ...(this.billingAddressForm.dirty ? { updateBillingAddress: this.billingAddressForm.value } : {}),\n ...(this.shippingAddressForm.dirty\n ? { updateShippingAddress: this.shippingAddressForm.value }\n : {}),\n dryRun: true,\n couponCodes: this.couponCodesControl.dirty ? this.couponCodesControl.value : undefined,\n note: this.note ?? '',\n options: {\n recalculateShipping: this.recalculateShipping,\n },\n };\n const originalTotalWithTax = order.totalWithTax;\n this.dataService.order\n .modifyOrder(input)\n .pipe(\n switchMap(({ modifyOrder }) => {\n switch (modifyOrder.__typename) {\n case 'Order':\n return this.modalService.fromComponent(OrderEditsPreviewDialogComponent, {\n size: 'xl',\n closable: false,\n locals: {\n originalTotalWithTax,\n order: modifyOrder,\n orderLineCustomFields: this.orderLineCustomFields,\n modifyOrderInput: input,\n },\n });\n case 'InsufficientStockError':\n case 'NegativeQuantityError':\n case 'NoChangesSpecifiedError':\n case 'OrderLimitError':\n case 'OrderModificationStateError':\n case 'PaymentMethodMissingError':\n case 'RefundPaymentIdMissingError':\n case 'CouponCodeLimitError':\n case 'CouponCodeExpiredError':\n case 'CouponCodeInvalidError': {\n this.notificationService.error(modifyOrder.message);\n return of(false as const);\n }\n case null:\n case undefined:\n return of(false as const);\n default:\n assertNever(modifyOrder);\n }\n }),\n switchMap(result => {\n if (!result || result.result === OrderEditResultType.Cancel) {\n // re-fetch so that the preview values get overwritten in the cache.\n return this.dataService.order.getOrder(this.id).mapSingle(() => false);\n } else {\n // Do the modification\n const wetRunInput = {\n ...input,\n dryRun: false,\n };\n if (result.result === OrderEditResultType.Refund) {\n wetRunInput.refund = {\n paymentId: result.refundPaymentId,\n reason: result.refundNote,\n };\n }\n return this.dataService.order.modifyOrder(wetRunInput).pipe(\n switchMap(({ modifyOrder }) => {\n if (modifyOrder.__typename === 'Order') {\n const priceDelta = modifyOrder.totalWithTax - originalTotalWithTax;\n const nextState =\n 0 < priceDelta ? 'ArrangingAdditionalPayment' : this.previousState;\n\n return this.dataService.order\n .transitionToState(order.id, nextState)\n .pipe(mapTo(true));\n } else {\n this.notificationService.error((modifyOrder as ErrorResult).message);\n return EMPTY;\n }\n }),\n );\n }\n }),\n )\n .subscribe(result => {\n if (result) {\n this.router.navigate(['../'], { relativeTo: this.route });\n }\n });\n }\n\n private addAddressCustomFieldsFormGroup(\n parentFormGroup: FormGroup,\n address?: OrderAddressFragment | null,\n ) {\n if (address && this.addressCustomFields.length) {\n const addressCustomFieldsFormGroup = new FormGroup({});\n for (const customFieldDef of this.addressCustomFields) {\n const name = customFieldDef.name;\n const value = (address as any).customFields?.[name];\n addressCustomFieldsFormGroup.addControl(name, new FormControl(value));\n }\n parentFormGroup.addControl('customFields', addressCustomFieldsFormGroup);\n }\n }\n\n protected setFormValues(entity: OrderDetailFragment, languageCode: LanguageCode): void {\n /* not used */\n }\n}\n","<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-variant-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-variant-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"couponCodesControl\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip> {{ item.promotionName }}\r\n </ng-template>\r\n </ng-select>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\"\r\n ><vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input\r\n ></vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\"\r\n ><vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\" /></vdr-affixed-input\r\n ></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetOrderListQuery,\r\n ItemOf,\r\n LocalStorageService,\r\n OrderListOptions,\r\n ServerConfigService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Order } from '@vendure/common/lib/generated-types';\r\nimport { merge, Observable } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\r\n\r\ninterface OrderFilterConfig {\r\n active?: boolean;\r\n states?: string[];\r\n}\r\n\r\ninterface FilterPreset {\r\n name: string;\r\n label: string;\r\n config: OrderFilterConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-order-list',\r\n templateUrl: './order-list.component.html',\r\n styleUrls: ['./order-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderListComponent\r\n extends BaseListComponent<GetOrderListQuery, ItemOf<GetOrderListQuery, 'orders'>>\r\n implements OnInit\r\n{\r\n searchOrderCodeControl = new FormControl('');\r\n searchLastNameControl = new FormControl('');\r\n customFilterForm: FormGroup;\r\n orderStates = this.serverConfigService.getOrderProcessStates().map(item => item.name);\r\n filterPresets: FilterPreset[] = [\r\n {\r\n name: 'open',\r\n label: _('order.filter-preset-open'),\r\n config: {\r\n active: false,\r\n states: this.orderStates.filter(\r\n s => s !== 'Delivered' && s !== 'Cancelled' && s !== 'Shipped',\r\n ),\r\n },\r\n },\r\n {\r\n name: 'shipped',\r\n label: _('order.filter-preset-shipped'),\r\n config: {\r\n active: false,\r\n states: ['Shipped'],\r\n },\r\n },\r\n {\r\n name: 'completed',\r\n label: _('order.filter-preset-completed'),\r\n config: {\r\n active: false,\r\n states: ['Delivered', 'Cancelled'],\r\n },\r\n },\r\n {\r\n name: 'active',\r\n label: _('order.filter-preset-active'),\r\n config: {\r\n active: true,\r\n },\r\n },\r\n ];\r\n activePreset$: Observable<string>;\r\n\r\n constructor(\r\n private serverConfigService: ServerConfigService,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n // tslint:disable-next-line:no-shadowed-variable\r\n (take, skip) => this.dataService.order.getOrders({ take, skip }).refetchOnChannelChange(),\r\n data => data.orders,\r\n // tslint:disable-next-line:no-shadowed-variable\r\n (skip, take) =>\r\n this.createQueryOptions(\r\n skip,\r\n take,\r\n this.searchOrderCodeControl.value,\r\n this.searchLastNameControl.value,\r\n this.route.snapshot.queryParamMap.get('filter') || 'open',\r\n ),\r\n );\r\n const lastFilters = this.localStorageService.get('orderListLastCustomFilters');\r\n if (lastFilters) {\r\n this.setQueryParam(lastFilters, { replaceUrl: true });\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.activePreset$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('filter') || 'open'),\r\n distinctUntilChanged(),\r\n );\r\n const searchTerms$ = merge(\r\n this.searchOrderCodeControl.valueChanges,\r\n this.searchLastNameControl.valueChanges,\r\n ).pipe(\r\n filter(value => 2 < value.length || value.length === 0),\r\n debounceTime(250),\r\n );\r\n merge(searchTerms$, this.route.queryParamMap)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(val => {\r\n this.refresh();\r\n });\r\n\r\n const queryParamMap = this.route.snapshot.queryParamMap;\r\n this.customFilterForm = new FormGroup({\r\n states: new FormControl(queryParamMap.getAll('states') ?? []),\r\n placedAtStart: new FormControl(queryParamMap.get('placedAtStart')),\r\n placedAtEnd: new FormControl(queryParamMap.get('placedAtEnd')),\r\n });\r\n }\r\n\r\n selectFilterPreset(presetName: string) {\r\n const lastCustomFilters = this.localStorageService.get('orderListLastCustomFilters') ?? {};\r\n const emptyCustomFilters = { states: undefined, placedAtStart: undefined, placedAtEnd: undefined };\r\n const filters = presetName === 'custom' ? lastCustomFilters : emptyCustomFilters;\r\n this.setQueryParam(\r\n {\r\n filter: presetName,\r\n page: 1,\r\n ...filters,\r\n },\r\n { replaceUrl: true },\r\n );\r\n }\r\n\r\n applyCustomFilters() {\r\n const formValue = this.customFilterForm.value;\r\n const customFilters = {\r\n states: formValue.states,\r\n placedAtStart: formValue.placedAtStart,\r\n placedAtEnd: formValue.placedAtEnd,\r\n };\r\n this.setQueryParam({\r\n filter: 'custom',\r\n ...customFilters,\r\n });\r\n this.customFilterForm.markAsPristine();\r\n this.localStorageService.set('orderListLastCustomFilters', customFilters);\r\n }\r\n\r\n private createQueryOptions(\r\n // tslint:disable-next-line:no-shadowed-variable\r\n skip: number,\r\n take: number,\r\n orderCodeSearchTerm: string,\r\n customerNameSearchTerm: string,\r\n activeFilterPreset?: string,\r\n ): { options: OrderListOptions } {\r\n const filterConfig = this.filterPresets.find(p => p.name === activeFilterPreset);\r\n // tslint:disable-next-line:no-shadowed-variable\r\n const filter: any = {};\r\n if (filterConfig) {\r\n if (filterConfig.config.active != null) {\r\n filter.active = {\r\n eq: filterConfig.config.active,\r\n };\r\n }\r\n if (filterConfig.config.states) {\r\n filter.state = {\r\n in: filterConfig.config.states,\r\n };\r\n }\r\n } else if (activeFilterPreset === 'custom') {\r\n const queryParams = this.route.snapshot.queryParamMap;\r\n const states = queryParams.getAll('states') ?? [];\r\n const placedAtStart = queryParams.get('placedAtStart');\r\n const placedAtEnd = queryParams.get('placedAtEnd');\r\n if (states.length) {\r\n filter.state = {\r\n in: states,\r\n };\r\n }\r\n if (placedAtStart && placedAtEnd) {\r\n filter.orderPlacedAt = {\r\n between: {\r\n start: placedAtStart,\r\n end: placedAtEnd,\r\n },\r\n };\r\n } else if (placedAtStart) {\r\n filter.orderPlacedAt = {\r\n after: placedAtStart,\r\n };\r\n } else if (placedAtEnd) {\r\n filter.orderPlacedAt = {\r\n before: placedAtEnd,\r\n };\r\n }\r\n }\r\n if (customerNameSearchTerm) {\r\n filter.customerLastName = {\r\n contains: customerNameSearchTerm,\r\n };\r\n }\r\n if (orderCodeSearchTerm) {\r\n filter.code = {\r\n contains: orderCodeSearchTerm,\r\n };\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(filter ?? {}),\r\n },\r\n sort: {\r\n updatedAt: SortOrder.DESC,\r\n },\r\n },\r\n };\r\n }\r\n\r\n getShippingNames(order: Order) {\r\n if (order.shippingLines.length) {\r\n return order.shippingLines.map(shippingLine => shippingLine.shippingMethod.name).join(', ');\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"search-form\">\r\n <div class=\"btn-group btn-outline-primary\" *ngIf=\"activePreset$ | async as activePreset\">\r\n <button\r\n class=\"btn\"\r\n *ngFor=\"let preset of filterPresets\"\r\n [class.btn-primary]=\"activePreset === preset.name\"\r\n (click)=\"selectFilterPreset(preset.name)\"\r\n >\r\n {{ preset.label | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n [class.btn-primary]=\"activePreset === 'custom'\"\r\n (click)=\"selectFilterPreset('custom')\"\r\n >\r\n {{ 'order.filter-custom' | translate }}\r\n <clr-icon shape=\"angle down\"></clr-icon>\r\n </button>\r\n </div>\r\n\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchOrderCodeControl\"\r\n [placeholder]=\"'order.search-by-order-code' | translate\"\r\n class=\"search-input\"\r\n />\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchLastNameControl\"\r\n [placeholder]=\"'order.search-by-customer-last-name' | translate\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n <div class=\"custom-filters\" [class.expanded]=\"(activePreset$ | async) === 'custom'\">\r\n <form [formGroup]=\"customFilterForm\">\r\n <div class=\"flex align-center\">\r\n <ng-select\r\n [items]=\"orderStates\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n formControlName=\"states\"\r\n [placeholder]=\"'state.all-orders' | translate\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">{{ item | stateI18nToken | translate }}</ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label\"> {{ item | stateI18nToken | translate }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\">×</span>\r\n </ng-template>\r\n </ng-select>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"customFilterForm.pristine\"\r\n (click)=\"applyCustomFilters()\"\r\n >\r\n {{ 'order.apply-filters' | translate }}\r\n <clr-icon shape=\"filter\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <div>\r\n <label>{{ 'order.placed-at-start' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtStart\"></vdr-datetime-picker>\r\n </div>\r\n <div>\r\n <label>{{ 'order.placed-at-end' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtEnd\"></vdr-datetime-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.customer' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.placed-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.shipping' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">{{ order.code }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.total | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.updatedAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | localeDate: 'medium' }}</td>\r\n <td class=\"left align-middle\">{{ getShippingNames(order) }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"order.state === 'Modifying' ? ['./', order.id, 'modify'] : ['./', order.id]\"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { BaseEntityResolver, DataService, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n/**\r\n * Resolves the id from the path into a Customer entity.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OrderResolver extends BaseEntityResolver<OrderDetailFragment> {\r\n constructor(router: Router, dataService: DataService) {\r\n super(\r\n router,\r\n {\r\n __typename: 'Order',\r\n id: '',\r\n code: '',\r\n createdAt: '',\r\n updatedAt: '',\r\n total: 0,\r\n } as any,\r\n id => dataService.order.getOrder(id).mapStream(data => data.order),\r\n );\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BreadcrumbLabelLinkPair,\r\n CanDeactivateDetailGuard,\r\n createResolveData,\r\n detailBreadcrumb,\r\n OrderDetailFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { OrderDetailComponent } from './components/order-detail/order-detail.component';\r\nimport { OrderEditorComponent } from './components/order-editor/order-editor.component';\r\nimport { OrderListComponent } from './components/order-list/order-list.component';\r\nimport { OrderResolver } from './providers/routing/order-resolver';\r\n\r\nexport const orderRoutes: Route[] = [\r\n {\r\n path: '',\r\n component: OrderListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.orders'),\r\n },\r\n },\r\n {\r\n path: ':id',\r\n component: OrderDetailComponent,\r\n resolve: createResolveData(OrderResolver),\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: orderBreadcrumb,\r\n },\r\n },\r\n {\r\n path: ':id/modify',\r\n component: OrderEditorComponent,\r\n resolve: createResolveData(OrderResolver),\r\n // canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: modifyingOrderBreadcrumb,\r\n },\r\n },\r\n];\r\n\r\nexport function orderBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<OrderDetailFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.orders',\r\n getName: order => order.code,\r\n route: '',\r\n });\r\n}\r\n\r\nexport function modifyingOrderBreadcrumb(data: any, params: any) {\r\n return orderBreadcrumb(data, params).pipe(\r\n map((breadcrumbs: BreadcrumbLabelLinkPair[]) => {\r\n const modifiedBreadcrumbs = breadcrumbs.slice();\r\n modifiedBreadcrumbs[0].link[0] = '../';\r\n modifiedBreadcrumbs[1].link[0] = '../orders';\r\n return modifiedBreadcrumbs.concat({ label: _('breadcrumb.modifying'), link: [''] });\r\n }) as any,\r\n );\r\n}\r\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedModule } from '@vendure/admin-ui/core';\n\nimport { AddManualPaymentDialogComponent } from './components/add-manual-payment-dialog/add-manual-payment-dialog.component';\nimport { CancelOrderDialogComponent } from './components/cancel-order-dialog/cancel-order-dialog.component';\nimport { FulfillOrderDialogComponent } from './components/fulfill-order-dialog/fulfill-order-dialog.component';\nimport { FulfillmentCardComponent } from './components/fulfillment-card/fulfillment-card.component';\nimport { FulfillmentDetailComponent } from './components/fulfillment-detail/fulfillment-detail.component';\nimport { FulfillmentStateLabelComponent } from './components/fulfillment-state-label/fulfillment-state-label.component';\nimport { LineFulfillmentComponent } from './components/line-fulfillment/line-fulfillment.component';\nimport { LineRefundsComponent } from './components/line-refunds/line-refunds.component';\nimport { ModificationDetailComponent } from './components/modification-detail/modification-detail.component';\nimport { OrderCustomFieldsCardComponent } from './components/order-custom-fields-card/order-custom-fields-card.component';\nimport { OrderDetailComponent } from './components/order-detail/order-detail.component';\nimport { OrderEditorComponent } from './components/order-editor/order-editor.component';\nimport { OrderEditsPreviewDialogComponent } from './components/order-edits-preview-dialog/order-edits-preview-dialog.component';\nimport { OrderHistoryComponent } from './components/order-history/order-history.component';\nimport { OrderListComponent } from './components/order-list/order-list.component';\nimport { OrderPaymentCardComponent } from './components/order-payment-card/order-payment-card.component';\nimport { OrderProcessGraphDialogComponent } from './components/order-process-graph-dialog/order-process-graph-dialog.component';\nimport { OrderProcessEdgeComponent } from './components/order-process-graph/order-process-edge.component';\nimport { OrderProcessGraphComponent } from './components/order-process-graph/order-process-graph.component';\nimport { OrderProcessNodeComponent } from './components/order-process-graph/order-process-node.component';\nimport { OrderStateSelectDialogComponent } from './components/order-state-select-dialog/order-state-select-dialog.component';\nimport { OrderTableComponent } from './components/order-table/order-table.component';\nimport { PaymentDetailComponent } from './components/payment-detail/payment-detail.component';\nimport { PaymentStateLabelComponent } from './components/payment-state-label/payment-state-label.component';\nimport { RefundOrderDialogComponent } from './components/refund-order-dialog/refund-order-dialog.component';\nimport { RefundStateLabelComponent } from './components/refund-state-label/refund-state-label.component';\nimport { SettleRefundDialogComponent } from './components/settle-refund-dialog/settle-refund-dialog.component';\nimport { SimpleItemListComponent } from './components/simple-item-list/simple-item-list.component';\nimport { orderRoutes } from './order.routes';\n\n@NgModule({\n imports: [SharedModule, RouterModule.forChild(orderRoutes)],\n declarations: [\n OrderListComponent,\n OrderDetailComponent,\n FulfillOrderDialogComponent,\n LineFulfillmentComponent,\n RefundOrderDialogComponent,\n CancelOrderDialogComponent,\n PaymentStateLabelComponent,\n LineRefundsComponent,\n OrderPaymentCardComponent,\n RefundStateLabelComponent,\n SettleRefundDialogComponent,\n OrderHistoryComponent,\n FulfillmentDetailComponent,\n PaymentDetailComponent,\n SimpleItemListComponent,\n OrderCustomFieldsCardComponent,\n OrderProcessGraphComponent,\n OrderProcessNodeComponent,\n OrderProcessEdgeComponent,\n OrderProcessGraphDialogComponent,\n FulfillmentStateLabelComponent,\n FulfillmentCardComponent,\n OrderEditorComponent,\n OrderTableComponent,\n OrderEditsPreviewDialogComponent,\n ModificationDetailComponent,\n AddManualPaymentDialogComponent,\n OrderStateSelectDialogComponent,\n ],\n})\nexport class OrderModule {}\n","// This file was generated by the build-public-api.ts script\nexport * from './components/add-manual-payment-dialog/add-manual-payment-dialog.component';\nexport * from './components/cancel-order-dialog/cancel-order-dialog.component';\nexport * from './components/fulfill-order-dialog/fulfill-order-dialog.component';\nexport * from './components/fulfillment-card/fulfillment-card.component';\nexport * from './components/fulfillment-detail/fulfillment-detail.component';\nexport * from './components/fulfillment-state-label/fulfillment-state-label.component';\nexport * from './components/line-fulfillment/line-fulfillment.component';\nexport * from './components/line-refunds/line-refunds.component';\nexport * from './components/modification-detail/modification-detail.component';\nexport * from './components/order-custom-fields-card/order-custom-fields-card.component';\nexport * from './components/order-detail/order-detail.component';\nexport * from './components/order-editor/order-editor.component';\nexport * from './components/order-edits-preview-dialog/order-edits-preview-dialog.component';\nexport * from './components/order-history/order-history.component';\nexport * from './components/order-list/order-list.component';\nexport * from './components/order-payment-card/order-payment-card.component';\nexport * from './components/order-process-graph/constants';\nexport * from './components/order-process-graph/order-process-edge.component';\nexport * from './components/order-process-graph/order-process-graph.component';\nexport * from './components/order-process-graph/order-process-node.component';\nexport * from './components/order-process-graph/types';\nexport * from './components/order-process-graph-dialog/order-process-graph-dialog.component';\nexport * from './components/order-state-select-dialog/order-state-select-dialog.component';\nexport * from './components/order-table/order-table.component';\nexport * from './components/payment-detail/payment-detail.component';\nexport * from './components/payment-state-label/payment-state-label.component';\nexport * from './components/refund-order-dialog/refund-order-dialog.component';\nexport * from './components/refund-state-label/refund-state-label.component';\nexport * from './components/settle-refund-dialog/settle-refund-dialog.component';\nexport * from './components/simple-item-list/simple-item-list.component';\nexport * from './order.module';\nexport * from './order.routes';\nexport * from './providers/order-transition.service';\nexport * from './providers/routing/order-resolver';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}
1
+ {"version":3,"file":"vendure-admin-ui-order.mjs","sources":["../../src/lib/order/src/components/add-manual-payment-dialog/add-manual-payment-dialog.component.ts","../../src/lib/order/src/components/add-manual-payment-dialog/add-manual-payment-dialog.component.html","../../src/lib/order/src/components/cancel-order-dialog/cancel-order-dialog.component.ts","../../src/lib/order/src/components/cancel-order-dialog/cancel-order-dialog.component.html","../../src/lib/order/src/components/coupon-code-selector/coupon-code-selector.component.ts","../../src/lib/order/src/components/coupon-code-selector/coupon-code-selector.component.html","../../src/lib/order/src/components/select-address-dialog/select-address-dialog.graphql.ts","../../src/lib/order/src/components/select-address-dialog/select-address-dialog.component.ts","../../src/lib/order/src/components/select-address-dialog/select-address-dialog.component.html","../../src/lib/order/src/components/select-customer-dialog/select-customer-dialog.component.ts","../../src/lib/order/src/components/select-customer-dialog/select-customer-dialog.component.html","../../src/lib/order/src/components/select-shipping-method-dialog/select-shipping-method-dialog.component.ts","../../src/lib/order/src/components/select-shipping-method-dialog/select-shipping-method-dialog.component.html","../../src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.ts","../../src/lib/order/src/components/order-state-select-dialog/order-state-select-dialog.component.html","../../src/lib/order/src/providers/order-transition.service.ts","../../src/lib/order/src/components/draft-order-variant-selector/draft-order-variant-selector.component.ts","../../src/lib/order/src/components/draft-order-variant-selector/draft-order-variant-selector.component.html","../../src/lib/order/src/components/line-refunds/line-refunds.component.ts","../../src/lib/order/src/components/line-refunds/line-refunds.component.html","../../src/lib/order/src/components/line-fulfillment/line-fulfillment.component.ts","../../src/lib/order/src/components/line-fulfillment/line-fulfillment.component.html","../../src/lib/order/src/components/order-table/order-table.component.ts","../../src/lib/order/src/components/order-table/order-table.component.html","../../src/lib/order/src/components/order-custom-fields-card/order-custom-fields-card.component.ts","../../src/lib/order/src/components/order-custom-fields-card/order-custom-fields-card.component.html","../../src/lib/order/src/components/draft-order-detail/draft-order-detail.component.ts","../../src/lib/order/src/components/draft-order-detail/draft-order-detail.component.html","../../src/lib/order/src/components/fulfill-order-dialog/fulfill-order-dialog.component.ts","../../src/lib/order/src/components/fulfill-order-dialog/fulfill-order-dialog.component.html","../../src/lib/order/src/components/fulfillment-state-label/fulfillment-state-label.component.ts","../../src/lib/order/src/components/fulfillment-state-label/fulfillment-state-label.component.html","../../src/lib/order/src/components/simple-item-list/simple-item-list.component.ts","../../src/lib/order/src/components/simple-item-list/simple-item-list.component.html","../../src/lib/order/src/components/fulfillment-detail/fulfillment-detail.component.ts","../../src/lib/order/src/components/fulfillment-detail/fulfillment-detail.component.html","../../src/lib/order/src/components/fulfillment-card/fulfillment-card.component.ts","../../src/lib/order/src/components/fulfillment-card/fulfillment-card.component.html","../../src/lib/order/src/components/modification-detail/modification-detail.component.ts","../../src/lib/order/src/components/modification-detail/modification-detail.component.html","../../src/lib/order/src/components/order-process-graph/constants.ts","../../src/lib/order/src/components/order-process-graph/order-process-node.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-node.component.html","../../src/lib/order/src/components/order-process-graph/order-process-edge.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-edge.component.html","../../src/lib/order/src/components/order-process-graph/order-process-graph.component.ts","../../src/lib/order/src/components/order-process-graph/order-process-graph.component.html","../../src/lib/order/src/components/order-process-graph-dialog/order-process-graph-dialog.component.ts","../../src/lib/order/src/components/order-process-graph-dialog/order-process-graph-dialog.component.html","../../src/lib/order/src/components/refund-order-dialog/refund-order-dialog.component.ts","../../src/lib/order/src/components/refund-order-dialog/refund-order-dialog.component.html","../../src/lib/order/src/components/settle-refund-dialog/settle-refund-dialog.component.ts","../../src/lib/order/src/components/settle-refund-dialog/settle-refund-dialog.component.html","../../src/lib/order/src/components/payment-detail/payment-detail.component.ts","../../src/lib/order/src/components/payment-detail/payment-detail.component.html","../../src/lib/order/src/components/order-history/order-history.component.ts","../../src/lib/order/src/components/order-history/order-history.component.html","../../src/lib/order/src/components/payment-state-label/payment-state-label.component.ts","../../src/lib/order/src/components/payment-state-label/payment-state-label.component.html","../../src/lib/order/src/components/refund-state-label/refund-state-label.component.ts","../../src/lib/order/src/components/refund-state-label/refund-state-label.component.html","../../src/lib/order/src/components/order-payment-card/order-payment-card.component.ts","../../src/lib/order/src/components/order-payment-card/order-payment-card.component.html","../../src/lib/order/src/components/order-detail/order-detail.component.ts","../../src/lib/order/src/components/order-detail/order-detail.component.html","../../src/lib/order/src/components/order-edits-preview-dialog/order-edits-preview-dialog.component.ts","../../src/lib/order/src/components/order-edits-preview-dialog/order-edits-preview-dialog.component.html","../../src/lib/order/src/components/order-editor/order-editor.component.ts","../../src/lib/order/src/components/order-editor/order-editor.component.html","../../src/lib/order/src/components/order-list/order-list.component.ts","../../src/lib/order/src/components/order-list/order-list.component.html","../../src/lib/order/src/providers/routing/order-resolver.ts","../../src/lib/order/src/providers/routing/order.guard.ts","../../src/lib/order/src/order.routes.ts","../../src/lib/order/src/order.module.ts","../../src/lib/order/src/public_api.ts","../../src/lib/order/src/vendure-admin-ui-order.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n CurrencyCode,\r\n DataService,\r\n Dialog,\r\n GetPaymentMethodListQuery,\r\n ItemOf,\r\n ManualPaymentInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-add-manual-payment-dialog',\r\n templateUrl: './add-manual-payment-dialog.component.html',\r\n styleUrls: ['./add-manual-payment-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class AddManualPaymentDialogComponent implements OnInit, Dialog<Omit<ManualPaymentInput, 'orderId'>> {\r\n // populated by ModalService call\r\n outstandingAmount: number;\r\n currencyCode: CurrencyCode;\r\n\r\n resolveWith: (result?: Omit<ManualPaymentInput, 'orderId'>) => void;\r\n form = new FormGroup({\r\n method: new FormControl('', Validators.required),\r\n transactionId: new FormControl('', Validators.required),\r\n });\r\n paymentMethods$: Observable<Array<ItemOf<GetPaymentMethodListQuery, 'paymentMethods'>>>;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.paymentMethods$ = this.dataService.settings\r\n .getPaymentMethods(999)\r\n .mapSingle(data => data.paymentMethods.items);\r\n }\r\n\r\n submit() {\r\n const formValue = this.form.value;\r\n this.resolveWith({\r\n method: formValue.method,\r\n transactionId: formValue.transactionId,\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.add-payment-to-order' | translate }}</ng-template>\r\n<form [formGroup]=\"form\">\r\n <vdr-form-field [label]=\"'order.payment-method' | translate\" for=\"method\">\r\n <ng-select\r\n [items]=\"paymentMethods$ | async\"\r\n bindLabel=\"code\"\r\n autofocus\r\n bindValue=\"code\"\r\n [addTag]=\"true\"\r\n formControlName=\"method\"\r\n ></ng-select>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'order.transaction-id' | translate\" for=\"transactionId\">\r\n <input id=\"transactionId\" type=\"text\" formControlName=\"transactionId\" />\r\n </vdr-form-field>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" class=\"btn btn-primary\" [disabled]=\"form.invalid || form.pristine\">\r\n {{ 'order.add-payment' | translate }} ({{ outstandingAmount | localeCurrency: currencyCode }})\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CancelOrderInput,\r\n Dialog,\r\n getAppConfig,\r\n I18nService,\r\n OrderDetailFragment,\r\n OrderLineInput,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-cancel-order-dialog',\r\n templateUrl: './cancel-order-dialog.component.html',\r\n styleUrls: ['./cancel-order-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CancelOrderDialogComponent implements OnInit, Dialog<CancelOrderInput> {\r\n order: OrderDetailFragment;\r\n cancelAll = true;\r\n resolveWith: (result?: CancelOrderInput) => void;\r\n reason: string;\r\n lineQuantities: { [lineId: string]: number } = {};\r\n reasons: string[] = getAppConfig().cancellationReasons ?? [\r\n _('order.cancel-reason-customer-request'),\r\n _('order.cancel-reason-not-available'),\r\n ];\r\n\r\n get selectionCount(): number {\r\n return Object.values(this.lineQuantities).reduce((sum, n) => sum + n, 0);\r\n }\r\n\r\n constructor(private i18nService: I18nService) {\r\n this.reasons = this.reasons.map(r => this.i18nService.translate(r));\r\n }\r\n\r\n ngOnInit() {\r\n this.lineQuantities = this.order.lines.reduce((result, line) => {\r\n return { ...result, [line.id]: line.quantity };\r\n }, {});\r\n }\r\n\r\n radioChanged() {\r\n if (this.cancelAll) {\r\n for (const line of this.order.lines) {\r\n this.lineQuantities[line.id] = line.quantity;\r\n }\r\n } else {\r\n for (const line of this.order.lines) {\r\n this.lineQuantities[line.id] = 0;\r\n }\r\n }\r\n }\r\n\r\n checkIfAllSelected() {\r\n for (const [lineId, quantity] of Object.entries(this.lineQuantities)) {\r\n const quantityInOrder = this.order.lines.find(line => line.id === lineId)?.quantity;\r\n if (quantityInOrder && quantity < quantityInOrder) {\r\n return;\r\n }\r\n }\r\n // If we got here, all of the selected quantities are equal to the order\r\n // line quantities, i.e. everything is selected.\r\n this.cancelAll = true;\r\n }\r\n\r\n select() {\r\n this.resolveWith({\r\n orderId: this.order.id,\r\n lines: this.getLineInputs(),\r\n reason: this.reason,\r\n cancelShipping: this.cancelAll,\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private getLineInputs(): OrderLineInput[] | undefined {\r\n if (this.order.active) {\r\n return;\r\n }\r\n return Object.entries(this.lineQuantities)\r\n .map(([orderLineId, quantity]) => ({\r\n orderLineId,\r\n quantity,\r\n }))\r\n .filter(l => 0 < l.quantity);\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"fulfillment-wrapper\">\r\n <div class=\"order-lines\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let line of order.lines\"\r\n class=\"order-line\"\r\n [class.is-disabled]=\"cancelAll\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">{{ line.quantity }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle fulfil\">\r\n <input\r\n *ngIf=\"line.quantity > 0 && !order.active; else nonEditable\"\r\n [(ngModel)]=\"lineQuantities[line.id]\"\r\n (input)=\"checkIfAllSelected()\"\r\n [disabled]=\"cancelAll\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n />\r\n <ng-template #nonEditable>{{ line.quantity }}</ng-template>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"cancellation-details\">\r\n <ng-container *ngIf=\"order.active !== true\">\r\n <clr-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n clrRadio\r\n [value]=\"true\"\r\n [(ngModel)]=\"cancelAll\"\r\n name=\"options\"\r\n (ngModelChange)=\"radioChanged()\"\r\n />\r\n <label>{{ 'order.cancel-entire-order' | translate }}</label>\r\n </clr-radio-wrapper>\r\n <clr-radio-wrapper>\r\n <input\r\n type=\"radio\"\r\n clrRadio\r\n [value]=\"false\"\r\n [(ngModel)]=\"cancelAll\"\r\n name=\"options\"\r\n (ngModelChange)=\"radioChanged()\"\r\n />\r\n <label>{{ 'order.cancel-specified-items' | translate }}</label>\r\n </clr-radio-wrapper>\r\n </ng-container>\r\n <label class=\"clr-control-label\">{{ 'order.cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"select()\"\r\n [disabled]=\"!reason || (!order.active && selectionCount === 0)\"\r\n class=\"btn btn-primary\"\r\n >\r\n <ng-container *ngIf=\"!order.active\">\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-container>\r\n <ng-container *ngIf=\"order.active\">\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-container>\r\n </button>\r\n</ng-template>\r\n","import { Component, OnInit, ChangeDetectionStrategy, Input, Output, EventEmitter } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { concat, Observable, Subject } from 'rxjs';\r\nimport { distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-coupon-code-selector',\r\n templateUrl: './coupon-code-selector.component.html',\r\n styleUrls: ['./coupon-code-selector.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class CouponCodeSelectorComponent implements OnInit {\r\n @Input() couponCodes: string[];\r\n @Input() control: FormControl | undefined;\r\n @Output() addCouponCode = new EventEmitter<string>();\r\n @Output() removeCouponCode = new EventEmitter<string>();\r\n availableCouponCodes$: Observable<Array<{ code: string; promotionName: string }>>;\r\n couponCodeInput$ = new Subject<string>();\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.availableCouponCodes$ = concat(\r\n this.couponCodeInput$.pipe(\r\n distinctUntilChanged(),\r\n switchMap(\r\n term =>\r\n this.dataService.promotion.getPromotions(10, 0, {\r\n couponCode: { contains: term },\r\n }).single$,\r\n ),\r\n map(({ promotions }) =>\r\n // tslint:disable-next-line:no-non-null-assertion\r\n promotions.items.map(p => ({ code: p.couponCode!, promotionName: p.name })),\r\n ),\r\n startWith([]),\r\n ),\r\n );\r\n if (!this.control) {\r\n this.control = new FormControl(this.couponCodes ?? []);\r\n }\r\n }\r\n}\r\n","<ng-select\r\n [items]=\"availableCouponCodes$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"code\"\r\n bindValue=\"code\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [minTermLength]=\"2\"\r\n typeToSearchText=\"\"\r\n [typeahead]=\"couponCodeInput$\"\r\n [formControl]=\"control\"\r\n (add)=\"addCouponCode.emit($event.code)\"\r\n (remove)=\"removeCouponCode.emit($event.value?.code)\"\r\n>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <vdr-chip>{{ item.code }}</vdr-chip>\r\n {{ item.promotionName }}\r\n </ng-template>\r\n</ng-select>\r\n","import { ADDRESS_FRAGMENT } from '@vendure/admin-ui/core';\r\nimport { gql } from 'apollo-angular';\r\n\r\nexport const GET_CUSTOMER_ADDRESSES = gql`\r\n query GetCustomerAddresses($customerId: ID!) {\r\n customer(id: $customerId) {\r\n id\r\n addresses {\r\n ...Address\r\n }\r\n }\r\n }\r\n ${ADDRESS_FRAGMENT}\r\n`;\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport {\r\n AddressFragment,\r\n CreateAddressInput,\r\n CreateCustomerInput,\r\n DataService,\r\n Dialog,\r\n GetAvailableCountriesQuery,\r\n GetCustomerAddressesQuery,\r\n GetCustomerAddressesQueryVariables,\r\n OrderAddressFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { pick } from '@vendure/common/lib/pick';\r\nimport { Observable, of } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport { Customer } from '../select-customer-dialog/select-customer-dialog.component';\r\n\r\nimport { GET_CUSTOMER_ADDRESSES } from './select-address-dialog.graphql';\r\n\r\n@Component({\r\n selector: 'vdr-select-address-dialog',\r\n templateUrl: './select-address-dialog.component.html',\r\n styleUrls: ['./select-address-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectAddressDialogComponent implements OnInit, Dialog<CreateAddressInput> {\r\n resolveWith: (result?: CreateAddressInput) => void;\r\n availableCountries$: Observable<GetAvailableCountriesQuery['countries']['items']>;\r\n addresses$: Observable<AddressFragment[]>;\r\n customerId: string | undefined;\r\n currentAddress: OrderAddressFragment | undefined;\r\n addressForm: FormGroup;\r\n selectedAddress: AddressFragment | undefined;\r\n useExisting = true;\r\n createNew = false;\r\n\r\n constructor(private dataService: DataService, private formBuilder: FormBuilder) {}\r\n\r\n ngOnInit(): void {\r\n this.addressForm = this.formBuilder.group({\r\n fullName: [this.currentAddress?.fullName ?? ''],\r\n company: [this.currentAddress?.company ?? ''],\r\n streetLine1: [this.currentAddress?.streetLine1 ?? '', Validators.required],\r\n streetLine2: [this.currentAddress?.streetLine2 ?? ''],\r\n city: [this.currentAddress?.city ?? '', Validators.required],\r\n province: [this.currentAddress?.province ?? ''],\r\n postalCode: [this.currentAddress?.postalCode ?? '', Validators.required],\r\n countryCode: [this.currentAddress?.countryCode ?? '', Validators.required],\r\n phoneNumber: [this.currentAddress?.phoneNumber ?? ''],\r\n });\r\n this.useExisting = !!this.customerId;\r\n this.addresses$ = this.customerId\r\n ? this.dataService\r\n .query<GetCustomerAddressesQuery, GetCustomerAddressesQueryVariables>(\r\n GET_CUSTOMER_ADDRESSES,\r\n { customerId: this.customerId },\r\n )\r\n .mapSingle(({ customer }) => customer?.addresses ?? [])\r\n .pipe(\r\n tap(addresses => {\r\n if (this.currentAddress) {\r\n this.selectedAddress = addresses.find(\r\n a =>\r\n a.streetLine1 === this.currentAddress?.streetLine1 &&\r\n a.postalCode === this.currentAddress?.postalCode,\r\n );\r\n }\r\n if (addresses.length === 0) {\r\n this.createNew = true;\r\n this.useExisting = false;\r\n }\r\n }),\r\n )\r\n : of([]);\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(({ countries }) => countries.items);\r\n }\r\n\r\n trackByFn(item: Customer) {\r\n return item.id;\r\n }\r\n\r\n addressIdFn(item: AddressFragment) {\r\n return item.streetLine1 + item.postalCode;\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n select() {\r\n if (this.useExisting && this.selectedAddress) {\r\n this.resolveWith({\r\n ...pick(this.selectedAddress, [\r\n 'fullName',\r\n 'company',\r\n 'streetLine1',\r\n 'streetLine2',\r\n 'city',\r\n 'province',\r\n 'phoneNumber',\r\n 'postalCode',\r\n ]),\r\n countryCode: this.selectedAddress.country.code,\r\n });\r\n }\r\n if (this.createNew && this.addressForm.valid) {\r\n const formValue = this.addressForm.value;\r\n this.resolveWith(formValue);\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.select-address' | translate }}</ng-template>\r\n\r\n<clr-tabs *ngIf=\"addresses$ | async as addresses\">\r\n <clr-tab *ngIf=\"customerId && addresses.length\">\r\n <button clrTabLink>{{ 'order.existing-address' | translate }}</button>\r\n <ng-template [(clrIfActive)]=\"useExisting\">\r\n <clr-tab-content>\r\n <vdr-radio-card-fieldset\r\n class=\"block mt4\"\r\n [idFn]=\"addressIdFn\"\r\n [selectedItemId]=\"selectedAddress && addressIdFn(selectedAddress)\"\r\n (selectItem)=\"selectedAddress = $event\"\r\n >\r\n <vdr-radio-card *ngFor=\"let address of addresses\" [item]=\"address\">\r\n <vdr-formatted-address [address]=\"address\"></vdr-formatted-address>\r\n </vdr-radio-card>\r\n </vdr-radio-card-fieldset>\r\n </clr-tab-content>\r\n </ng-template>\r\n </clr-tab>\r\n <clr-tab>\r\n <button clrTabLink>{{ 'customer.create-new-address' | translate }}</button>\r\n\r\n <ng-template [(clrIfActive)]=\"createNew\">\r\n <clr-tab-content>\r\n <vdr-address-form\r\n [formGroup]=\"addressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n ></vdr-address-form>\r\n </clr-tab-content>\r\n </ng-template>\r\n </clr-tab>\r\n</clr-tabs>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"select()\"\r\n [disabled]=\"(useExisting && !selectedAddress) || (createNew && addressForm.invalid)\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.okay' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\r\nimport { CreateCustomerInput, DataService, Dialog, GetCustomerListQuery } from '@vendure/admin-ui/core';\r\nimport { concat, Observable, of, Subject } from 'rxjs';\r\nimport { catchError, debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\r\n\r\nexport type Customer = GetCustomerListQuery['customers']['items'][number];\r\n\r\n@Component({\r\n selector: 'vdr-select-customer-dialog',\r\n templateUrl: './select-customer-dialog.component.html',\r\n styleUrls: ['./select-customer-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectCustomerDialogComponent implements OnInit, Dialog<Customer | CreateCustomerInput> {\r\n resolveWith: (result?: Customer | CreateCustomerInput) => void;\r\n customerForm: FormGroup;\r\n customers$: Observable<Customer[]>;\r\n isLoading = false;\r\n input$ = new Subject<string>();\r\n selectedCustomer: Customer[] = [];\r\n useExisting = true;\r\n createNew = false;\r\n\r\n constructor(private dataService: DataService, private formBuilder: FormBuilder) {\r\n this.customerForm = this.formBuilder.group({\r\n title: '',\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n phoneNumber: '',\r\n emailAddress: ['', [Validators.required, Validators.email]],\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n this.customers$ = concat(\r\n of([]), // default items\r\n this.input$.pipe(\r\n debounceTime(200),\r\n distinctUntilChanged(),\r\n tap(() => (this.isLoading = true)),\r\n switchMap(term =>\r\n this.dataService.customer\r\n .getCustomerList(10, 0, term)\r\n .mapStream(({ customers }) => customers.items)\r\n .pipe(\r\n catchError(() => of([])), // empty list on error\r\n tap(() => (this.isLoading = false)),\r\n ),\r\n ),\r\n ),\r\n );\r\n }\r\n\r\n trackByFn(item: Customer) {\r\n return item.id;\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n select() {\r\n if (this.useExisting && this.selectedCustomer.length === 1) {\r\n this.resolveWith(this.selectedCustomer[0]);\r\n }\r\n if (this.createNew && this.customerForm.valid) {\r\n const formValue = this.customerForm.value;\r\n this.resolveWith(formValue);\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.set-customer-for-order' | translate }}</ng-template>\r\n\r\n<clr-tabs>\r\n <clr-tab>\r\n <button clrTabLink>{{ 'order.existing-customer' | translate }}</button>\r\n\r\n <ng-template [(clrIfActive)]=\"useExisting\">\r\n <clr-tab-content>\r\n <ng-select\r\n [items]=\"customers$ | async\"\r\n appendTo=\"body\"\r\n bindLabel=\"name\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n [hideSelected]=\"true\"\r\n [trackByFn]=\"trackByFn\"\r\n [minTermLength]=\"2\"\r\n [loading]=\"isLoading\"\r\n [typeahead]=\"input$\"\r\n [(ngModel)]=\"selectedCustomer\"\r\n class=\"mt4\"\r\n >\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon\r\n ><span class=\"ml2 mr2\">{{ item.firstName }} {{ item.lastName }}</span>\r\n <vdr-chip>{{ item.emailAddress }}</vdr-chip>\r\n </ng-template>\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <clr-icon shape=\"user\" class=\"is-solid\"></clr-icon\r\n ><span class=\"ml2 mr2\">{{ item.firstName }} {{ item.lastName }}</span>\r\n <vdr-chip>{{ item.emailAddress }}</vdr-chip>\r\n </ng-template>\r\n </ng-select>\r\n </clr-tab-content>\r\n </ng-template>\r\n </clr-tab>\r\n <clr-tab>\r\n <button clrTabLink>{{ 'customer.create-new-customer' | translate }}</button>\r\n\r\n <ng-template [(clrIfActive)]=\"createNew\">\r\n <clr-tab-content>\r\n <form [formGroup]=\"customerForm\">\r\n <vdr-form-field [label]=\"'customer.title' | translate\" for=\"title\">\r\n <input id=\"title\" type=\"text\" formControlName=\"title\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.first-name' | translate\" for=\"firstName\">\r\n <input id=\"firstName\" type=\"text\" formControlName=\"firstName\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.last-name' | translate\" for=\"lastName\">\r\n <input id=\"lastName\" type=\"text\" formControlName=\"lastName\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.email-address' | translate\" for=\"emailAddress\">\r\n <input id=\"emailAddress\" type=\"text\" formControlName=\"emailAddress\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'customer.phone-number' | translate\" for=\"phoneNumber\">\r\n <input id=\"phoneNumber\" type=\"text\" formControlName=\"phoneNumber\" />\r\n </vdr-form-field>\r\n </form>\r\n </clr-tab-content>\r\n </ng-template>\r\n </clr-tab>\r\n</clr-tabs>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"select()\"\r\n [disabled]=\"(useExisting && selectedCustomer.length === 0) || (createNew && customerForm.invalid)\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.okay' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';\r\nimport {\r\n CreateAddressInput,\r\n CurrencyCode,\r\n Dialog,\r\n DraftOrderEligibleShippingMethodsQuery,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype ShippingMethodQuote =\r\n DraftOrderEligibleShippingMethodsQuery['eligibleShippingMethodsForDraftOrder'][number];\r\n\r\n@Component({\r\n selector: 'vdr-select-shipping-method-dialog',\r\n templateUrl: './select-shipping-method-dialog.component.html',\r\n styleUrls: ['./select-shipping-method-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SelectShippingMethodDialogComponent implements OnInit, Dialog<string> {\r\n resolveWith: (result?: string) => void;\r\n eligibleShippingMethods: ShippingMethodQuote[];\r\n currentSelectionId: string;\r\n currencyCode: CurrencyCode;\r\n selectedMethod: ShippingMethodQuote | undefined;\r\n constructor() {}\r\n\r\n ngOnInit(): void {\r\n if (this.currentSelectionId) {\r\n this.selectedMethod = this.eligibleShippingMethods.find(m => m.id === this.currentSelectionId);\r\n }\r\n }\r\n\r\n methodIdFn(item: ShippingMethodQuote) {\r\n return item.id;\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n select() {\r\n if (this.selectedMethod) {\r\n this.resolveWith(this.selectedMethod.id);\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.select-shipping-method' | translate }}</ng-template>\r\n<vdr-radio-card-fieldset\r\n [idFn]=\"methodIdFn\"\r\n [selectedItemId]=\"selectedMethod?.id\"\r\n (selectItem)=\"selectedMethod = $event\"\r\n>\r\n <vdr-radio-card *ngFor=\"let quote of eligibleShippingMethods\" [item]=\"quote\">\r\n <div class=\"result-details\">\r\n <vdr-labeled-data [label]=\"'settings.shipping-method' | translate\">\r\n {{ quote.name }}\r\n </vdr-labeled-data>\r\n <div class=\"price-row\">\r\n <vdr-labeled-data [label]=\"'common.price' | translate\">\r\n {{ quote.price | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'common.price-with-tax' | translate\">\r\n {{ quote.priceWithTax | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n <vdr-object-tree *ngIf=\"quote.metadata\" [value]=\"quote.metadata\"></vdr-object-tree>\r\n </div>\r\n </vdr-radio-card>\r\n</vdr-radio-card-fieldset>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button\r\n type=\"submit\"\r\n (click)=\"select()\"\r\n [disabled]=\"!selectedMethod\"\r\n class=\"btn btn-primary\"\r\n >\r\n {{ 'common.okay' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\nimport { Dialog } from '@vendure/admin-ui/core';\n\n@Component({\n selector: 'vdr-order-state-select-dialog',\n templateUrl: './order-state-select-dialog.component.html',\n styleUrls: ['./order-state-select-dialog.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class OrderStateSelectDialogComponent implements Dialog<string> {\n resolveWith: (result?: string) => void;\n nextStates: string[] = [];\n message = '';\n cancellable: boolean;\n selectedState = '';\n\n select() {\n if (this.selectedState) {\n this.resolveWith(this.selectedState);\n }\n }\n\n cancel() {\n this.resolveWith();\n }\n}\n","<ng-template vdrDialogTitle>{{ 'order.select-state' | translate }}</ng-template>\r\n<p>{{ message | translate }}</p>\r\n<clr-select-container>\r\n <select clrSelect name=\"state\" [(ngModel)]=\"selectedState\">\r\n <option *ngFor=\"let state of nextStates\" [value]=\"state\">\r\n {{ state | stateI18nToken | translate }}\r\n </option>\r\n </select>\r\n</clr-select-container>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"submit\" *ngIf=\"cancellable\" (click)=\"cancel()\" class=\"btn btn-secondary\">\r\n {{ 'common.cancel' | translate }}\r\n </button>\r\n <button type=\"submit\" (click)=\"select()\" class=\"btn btn-primary\" [disabled]=\"!selectedState\">\r\n {{ 'order.transition-to-state' | translate: { state: (selectedState | stateI18nToken | translate) } }}\r\n </button>\r\n</ng-template>\r\n","import { Injectable } from '@angular/core';\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\nimport {\n DataService,\n HistoryEntryType,\n I18nService,\n ModalService,\n NotificationService,\n SortOrder,\n} from '@vendure/admin-ui/core';\nimport { EMPTY } from 'rxjs';\nimport { catchError, delay, map, retryWhen, switchMap, take } from 'rxjs/operators';\n\nimport { OrderStateSelectDialogComponent } from '../components/order-state-select-dialog/order-state-select-dialog.component';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class OrderTransitionService {\n constructor(\n private dataService: DataService,\n private modalService: ModalService,\n private notificationService: NotificationService,\n private i18nService: I18nService,\n ) {}\n\n /**\n * Attempts to transition the Order to the last state it was in before it was transitioned\n * to the \"Modifying\" state. If this fails, a manual prompt is used.\n */\n transitionToPreModifyingState(orderId: string, nextStates: string[]) {\n return this.getPreModifyingState(orderId).pipe(\n switchMap(state => {\n const manualTransitionOptions = {\n orderId,\n nextStates,\n message: this.i18nService.translate(\n _('order.unable-to-transition-to-state-try-another'),\n { state },\n ),\n cancellable: false,\n retry: 10,\n };\n if (state) {\n return this.transitionToStateOrThrow(orderId, state).pipe(\n catchError(err => this.manuallyTransitionToState(manualTransitionOptions)),\n );\n } else {\n return this.manuallyTransitionToState(manualTransitionOptions);\n }\n }),\n );\n }\n\n /**\n * Displays a modal for manually selecting the next state.\n */\n manuallyTransitionToState(options: {\n orderId: string;\n nextStates: string[];\n message: string;\n cancellable: boolean;\n retry: number;\n }) {\n return this.modalService\n .fromComponent(OrderStateSelectDialogComponent, {\n locals: {\n nextStates: options.nextStates,\n cancellable: options.cancellable,\n message: options.message,\n },\n closable: false,\n size: 'md',\n })\n .pipe(\n switchMap(result => {\n if (result) {\n return this.transitionToStateOrThrow(options.orderId, result);\n } else {\n if (!options.cancellable) {\n throw new Error(`An order state must be selected`);\n } else {\n return EMPTY;\n }\n }\n }),\n retryWhen(errors => errors.pipe(delay(2000), take(options.retry))),\n );\n }\n\n /**\n * Attempts to get the last state the Order was in before it was transitioned\n * to the \"Modifying\" state.\n */\n private getPreModifyingState(orderId: string) {\n return this.dataService.order\n .getOrderHistory(orderId, {\n filter: {\n type: {\n eq: HistoryEntryType.ORDER_STATE_TRANSITION,\n },\n },\n sort: {\n createdAt: SortOrder.DESC,\n },\n })\n .mapSingle(result => result.order)\n .pipe(\n map(result => {\n const item = result?.history.items.find(i => i.data.to === 'Modifying');\n if (item) {\n return item.data.from as string;\n } else {\n return;\n }\n }),\n );\n }\n\n private transitionToStateOrThrow(orderId: string, state: string) {\n return this.dataService.order.transitionToState(orderId, state).pipe(\n map(({ transitionOrderToState }) => {\n switch (transitionOrderToState?.__typename) {\n case 'Order':\n return transitionOrderToState?.state;\n case 'OrderStateTransitionError':\n this.notificationService.error(transitionOrderToState?.transitionError);\n throw new Error(transitionOrderToState?.transitionError);\n }\n }),\n );\n }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { CurrencyCode, CustomFieldConfig, DataService, GetProductVariantQuery } from '@vendure/admin-ui/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n selector: 'vdr-draft-order-variant-selector',\r\n templateUrl: './draft-order-variant-selector.component.html',\r\n styleUrls: ['./draft-order-variant-selector.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DraftOrderVariantSelectorComponent implements OnInit {\r\n @Input() currencyCode: CurrencyCode;\r\n @Input() orderLineCustomFields: CustomFieldConfig[];\r\n @Output() addItem = new EventEmitter<{ productVariantId: string; quantity: number; customFields: any }>();\r\n customFieldsFormGroup = new FormGroup({});\r\n selectedVariant$: Observable<GetProductVariantQuery['productVariant']>;\r\n selectedVariantId$ = new Subject<string | undefined>();\r\n quantity = 1;\r\n constructor(private dataService: DataService) {}\r\n\r\n ngOnInit(): void {\r\n this.selectedVariant$ = this.selectedVariantId$.pipe(\r\n switchMap(id => {\r\n if (id) {\r\n return this.dataService.product\r\n .getProductVariant(id)\r\n .mapSingle(({ productVariant }) => productVariant);\r\n } else {\r\n return [undefined];\r\n }\r\n }),\r\n );\r\n for (const customField of this.orderLineCustomFields) {\r\n this.customFieldsFormGroup.addControl(customField.name, new FormControl(''));\r\n }\r\n }\r\n\r\n addItemClick(selectedVariant: GetProductVariantQuery['productVariant']) {\r\n if (selectedVariant) {\r\n this.addItem.emit({\r\n productVariantId: selectedVariant.id,\r\n quantity: this.quantity,\r\n customFields: this.orderLineCustomFields.length\r\n ? this.customFieldsFormGroup.value\r\n : undefined,\r\n });\r\n this.selectedVariantId$.next(undefined);\r\n this.customFieldsFormGroup.reset();\r\n }\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-block\">\r\n <h4 class=\"card-title\">{{ 'order.add-item-to-order' | translate }}</h4>\r\n <vdr-product-variant-selector\r\n (productSelected)=\"selectedVariantId$.next($event.productVariantId)\"\r\n ></vdr-product-variant-selector>\r\n </div>\r\n <div class=\"card-block\" *ngIf=\"selectedVariant$ | async as selectedVariant\">\r\n <div class=\"variant-details\">\r\n <img class=\"mr2\" [src]=\"selectedVariant.featuredAsset || selectedVariant.product.featuredAsset | assetPreview: 32\">\r\n <div class=\"details\">\r\n <div>{{ selectedVariant?.name }}</div>\r\n <div class=\"small\">{{ selectedVariant?.sku }}</div>\r\n </div>\r\n <div class=\"details ml4\">\r\n <div class=\"small\">\r\n {{ 'catalog.stock-on-hand' | translate }}: {{ selectedVariant.stockOnHand }}\r\n </div>\r\n <div class=\"small\">\r\n {{ 'catalog.stock-allocated' | translate }}: {{ selectedVariant.stockAllocated }}\r\n </div>\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <div class=\"details\">\r\n <div>{{ selectedVariant?.priceWithTax | localeCurrency: currencyCode }}</div>\r\n <div class=\"small\" [title]=\"'order.net-price' | translate\">\r\n {{ selectedVariant?.price | localeCurrency: currencyCode }}\r\n </div>\r\n </div>\r\n <div>\r\n <input [disabled]=\"!selectedVariant\" type=\"number\" min=\"0\" [(ngModel)]=\"quantity\" />\r\n </div>\r\n <button\r\n [disabled]=\"!selectedVariant\"\r\n class=\"btn btn-small btn-primary\"\r\n (click)=\"addItemClick(selectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </div>\r\n <ng-container *ngIf=\"orderLineCustomFields.length\">\r\n <div class=\"custom-field\" *ngFor=\"let field of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [compact]=\"true\"\r\n [readonly]=\"false\"\r\n [customField]=\"field\"\r\n [customFieldsFormGroup]=\"customFieldsFormGroup\"\r\n ></vdr-custom-field-control>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-line-refunds',\r\n templateUrl: './line-refunds.component.html',\r\n styleUrls: ['./line-refunds.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LineRefundsComponent {\r\n @Input() line: OrderDetailFragment['lines'][number];\r\n @Input() payments: OrderDetailFragment['payments'];\r\n\r\n getRefundedCount(): number {\r\n const refunds =\r\n this.payments?.reduce(\r\n (all, payment) => [...all, ...payment.refunds],\r\n [] as NonNullable<OrderDetailFragment['payments']>[number]['refunds'],\r\n ) ?? [];\r\n return this.line.items.filter(i => {\r\n if (i.refundId === null && !i.cancelled) {\r\n return false;\r\n }\r\n if (i.refundId) {\r\n const refund = refunds.find(r => r.id === i.refundId);\r\n if (refund?.state === 'Failed') {\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }).length;\r\n }\r\n}\r\n","<span *ngIf=\"getRefundedCount()\" [title]=\"'order.refunded-count' | translate: { count: getRefundedCount() }\">\r\n <clr-icon shape=\"redo\" class=\"is-solid\" dir=\"down\"></clr-icon>\r\n</span>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, SimpleChanges } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\nimport { unique } from '@vendure/common/lib/unique';\r\n\r\nexport type FulfillmentStatus = 'full' | 'partial' | 'none';\r\ntype Fulfillment = NonNullable<OrderDetailFragment['fulfillments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-line-fulfillment',\r\n templateUrl: './line-fulfillment.component.html',\r\n styleUrls: ['./line-fulfillment.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class LineFulfillmentComponent implements OnChanges {\r\n @Input() line: OrderDetailFragment['lines'][number];\r\n @Input() orderState: string;\r\n fulfilledCount = 0;\r\n fulfillmentStatus: FulfillmentStatus;\r\n fulfillments: Array<{\r\n count: number;\r\n fulfillment: Fulfillment;\r\n }> = [];\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (this.line) {\r\n this.fulfilledCount = this.getDeliveredCount(this.line);\r\n this.fulfillmentStatus = this.getFulfillmentStatus(this.fulfilledCount, this.line.items.length);\r\n this.fulfillments = this.getFulfillments(this.line);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the number of items in an OrderLine which are fulfilled.\r\n */\r\n private getDeliveredCount(line: OrderDetailFragment['lines'][number]): number {\r\n return (\r\n line.fulfillments?.reduce(\r\n (sum, fulfillment) =>\r\n sum + (fulfillment.summary.find(s => s.orderLine.id === line.id)?.quantity ?? 0),\r\n 0,\r\n ) ?? 0\r\n );\r\n }\r\n\r\n private getFulfillmentStatus(fulfilledCount: number, lineQuantity: number): FulfillmentStatus {\r\n if (fulfilledCount === lineQuantity) {\r\n return 'full';\r\n }\r\n if (0 < fulfilledCount && fulfilledCount < lineQuantity) {\r\n return 'partial';\r\n }\r\n return 'none';\r\n }\r\n\r\n private getFulfillments(\r\n line: OrderDetailFragment['lines'][number],\r\n ): Array<{ count: number; fulfillment: NonNullable<OrderDetailFragment['fulfillments']>[number] }> {\r\n return (\r\n line.fulfillments?.map(fulfillment => {\r\n const summaryLine = fulfillment.summary.find(s => s.orderLine.id === line.id);\r\n return {\r\n count: summaryLine?.quantity ?? 0,\r\n fulfillment,\r\n };\r\n }) ?? []\r\n );\r\n }\r\n}\r\n","<vdr-dropdown class=\"search-settings-menu\" *ngIf=\"fulfilledCount || orderState === 'PartiallyDelivered'\">\r\n <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon *ngIf=\"fulfillmentStatus === 'full'\" class=\"item-fulfilled\" shape=\"check-circle\"></clr-icon>\r\n <clr-icon\r\n *ngIf=\"fulfillmentStatus === 'partial'\"\r\n class=\"item-partially-fulfilled\"\r\n shape=\"check-circle\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"fulfillmentStatus === 'none'\"\r\n class=\"item-not-fulfilled\"\r\n shape=\"exclamation-circle\"\r\n ></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'full'\">\r\n {{ 'order.line-fulfillment-all' | translate }}\r\n </label>\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'partial'\">\r\n {{\r\n 'order.line-fulfillment-partial' | translate: { total: line.quantity, count: fulfilledCount }\r\n }}\r\n </label>\r\n <label class=\"dropdown-header\" *ngIf=\"fulfillmentStatus === 'none'\">\r\n {{ 'order.line-fulfillment-none' | translate }}\r\n </label>\r\n <div class=\"fulfillment-detail\" *ngFor=\"let item of fulfillments\">\r\n <div class=\"fulfillment-title\">\r\n {{ 'order.fulfillment' | translate }} #{{ item.fulfillment.id }} ({{\r\n 'order.item-count' | translate: { count: item.count }\r\n }})\r\n </div>\r\n <vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ item.fulfillment.createdAt | localeDate: 'medium' }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.fulfillment-method' | translate\">\r\n {{ item.fulfillment.method }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data\r\n *ngIf=\"item.fulfillment.trackingCode\"\r\n [label]=\"'order.tracking-code' | translate\"\r\n >\r\n {{ item.fulfillment.trackingCode }}\r\n </vdr-labeled-data>\r\n </div>\r\n </vdr-dropdown-menu>\r\n</vdr-dropdown>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { AdjustmentType, CustomFieldConfig, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-order-table',\r\n templateUrl: './order-table.component.html',\r\n styleUrls: ['./order-table.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderTableComponent implements OnInit {\r\n @Input() order: OrderDetailFragment;\r\n @Input() orderLineCustomFields: CustomFieldConfig[];\r\n @Input() isDraft = false;\r\n @Output() adjust = new EventEmitter<{ lineId: string; quantity: number }>();\r\n @Output() remove = new EventEmitter<{ lineId: string }>();\r\n orderLineCustomFieldsVisible = false;\r\n customFieldsForLine: {\r\n [lineId: string]: Array<{ config: CustomFieldConfig; formGroup: FormGroup; value: any }>;\r\n } = {};\r\n\r\n get visibleOrderLineCustomFields(): CustomFieldConfig[] {\r\n return this.orderLineCustomFieldsVisible ? this.orderLineCustomFields : [];\r\n }\r\n\r\n get showElided(): boolean {\r\n return !this.orderLineCustomFieldsVisible && 0 < this.orderLineCustomFields.length;\r\n }\r\n\r\n ngOnInit(): void {\r\n this.orderLineCustomFieldsVisible = this.orderLineCustomFields.length < 2;\r\n this.getLineCustomFields();\r\n }\r\n\r\n draftInputBlur(line: OrderDetailFragment['lines'][number], quantity: number) {\r\n if (line.quantity !== quantity) {\r\n this.adjust.emit({ lineId: line.id, quantity });\r\n }\r\n }\r\n\r\n toggleOrderLineCustomFields() {\r\n this.orderLineCustomFieldsVisible = !this.orderLineCustomFieldsVisible;\r\n }\r\n\r\n getLineDiscounts(line: OrderDetailFragment['lines'][number]) {\r\n return line.discounts.filter(a => a.type === AdjustmentType.PROMOTION);\r\n }\r\n\r\n private getLineCustomFields() {\r\n for (const line of this.order.lines) {\r\n const formGroup = new FormGroup({});\r\n const result = this.orderLineCustomFields\r\n .map(config => {\r\n const value = (line as any).customFields[config.name];\r\n formGroup.addControl(config.name, new FormControl(value));\r\n return {\r\n config,\r\n formGroup,\r\n value,\r\n };\r\n })\r\n .filter(field => {\r\n return this.orderLineCustomFieldsVisible ? true : field.value != null;\r\n });\r\n this.customFieldsForLine[line.id] = result;\r\n }\r\n }\r\n\r\n getPromotionLink(promotion: OrderDetailFragment['discounts'][number]): any[] {\r\n const id = promotion.adjustmentSource.split(':')[1];\r\n return ['/marketing', 'promotions', id];\r\n }\r\n\r\n getCouponCodeForAdjustment(\r\n order: OrderDetailFragment,\r\n promotionAdjustment: OrderDetailFragment['discounts'][number],\r\n ): string | undefined {\r\n const id = promotionAdjustment.adjustmentSource.split(':')[1];\r\n const promotion = order.promotions.find(p => p.id === id);\r\n if (promotion) {\r\n return promotion.couponCode || undefined;\r\n }\r\n }\r\n\r\n getShippingNames(order: OrderDetailFragment) {\r\n if (order.shippingLines.length) {\r\n return order.shippingLines.map(shippingLine => shippingLine.shippingMethod.name).join(', ');\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","<table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let line of order.lines\">\r\n <tr class=\"order-line\" [class.is-cancelled]=\"line.quantity === 0\">\r\n <td class=\"align-middle thumb\">\r\n <img *ngIf=\"line.featuredAsset\" [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <ng-container *ngIf=\"!isDraft; else draft\">\r\n {{ line.quantity }}\r\n </ng-container>\r\n <ng-template #draft>\r\n <div class=\"flex\">\r\n <input\r\n class=\"draft-qty\"\r\n type=\"number\"\r\n min=\"0\"\r\n #qtyInput\r\n [value]=\"line.quantity\"\r\n (blur)=\"draftInputBlur(line, qtyInput.valueAsNumber)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"remove.emit({ lineId: line.id })\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </div>\r\n </ng-template>\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment [line]=\"line\" [orderState]=\"order.state\"></vdr-line-fulfillment>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n\r\n <ng-container *ngIf=\"getLineDiscounts(line) as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n {{ 'order.promotions-applied' | translate }}\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n <a class=\"promotion-name\" [routerLink]=\"getPromotionLink(discount)\">{{\r\n discount.description\r\n }}</a>\r\n <div class=\"promotion-amount\">\r\n {{ discount.amountWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ discount.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <ng-container *ngIf=\"customFieldsForLine[line.id] as customFields\">\r\n <tr *ngIf=\"customFields.length\">\r\n <td colspan=\"6\" class=\"custom-fields-row\">\r\n <div class=\"order-line-custom-fields\">\r\n <div class=\"custom-field\" *ngFor=\"let field of customFields\">\r\n <vdr-custom-field-control\r\n [compact]=\"true\"\r\n [readonly]=\"true\"\r\n [customField]=\"field.config\"\r\n [customFieldsFormGroup]=\"field.formGroup\"\r\n ></vdr-custom-field-control>\r\n </div>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\" colspan=\"2\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <ng-container *ngFor=\"let discount of order.discounts\">\r\n <tr class=\"order-adjustment\" *ngIf=\"discount.type !== 'OTHER'\">\r\n <td colspan=\"5\" class=\"left clr-align-middle\">\r\n <a [routerLink]=\"getPromotionLink(discount)\">{{ discount.description }}</a>\r\n <vdr-chip *ngIf=\"getCouponCodeForAdjustment(order, discount) as couponCode\">{{\r\n couponCode\r\n }}</vdr-chip>\r\n </td>\r\n <td class=\"clr-align-middle\">\r\n {{ discount.amountWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ discount.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n <tr class=\"sub-total\">\r\n <td class=\"left clr-align-middle\">{{ 'order.sub-total' | translate }}</td>\r\n <td colspan=\"4\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.subTotalWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.subTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ getShippingNames(order) }}</td>\r\n <td colspan=\"3\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"total\">\r\n <td class=\"left clr-align-middle\">{{ 'order.total' | translate }}</td>\r\n <td colspan=\"4\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.totalWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.total | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n</table>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { FormBuilder, FormGroup } from '@angular/forms';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport { CustomFieldConfig, ModalService } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-order-custom-fields-card',\r\n templateUrl: './order-custom-fields-card.component.html',\r\n styleUrls: ['./order-custom-fields-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderCustomFieldsCardComponent implements OnInit {\r\n @Input() customFieldsConfig: CustomFieldConfig[] = [];\r\n @Input() customFieldValues: { [name: string]: any } = {};\r\n @Output() updateClick = new EventEmitter<any>();\r\n customFieldForm: FormGroup;\r\n editable = false;\r\n constructor(private formBuilder: FormBuilder, private modalService: ModalService) {}\r\n\r\n ngOnInit() {\r\n this.customFieldForm = this.formBuilder.group({});\r\n for (const field of this.customFieldsConfig) {\r\n this.customFieldForm.addControl(\r\n field.name,\r\n this.formBuilder.control(this.customFieldValues[field.name]),\r\n );\r\n }\r\n }\r\n\r\n onUpdateClick() {\r\n this.updateClick.emit(this.customFieldForm.value);\r\n this.customFieldForm.markAsPristine();\r\n this.editable = false;\r\n }\r\n\r\n onCancelClick() {\r\n if (this.customFieldForm.dirty) {\r\n this.modalService\r\n .dialog({\r\n title: _('catalog.confirm-cancel'),\r\n buttons: [\r\n { type: 'secondary', label: _('common.keep-editing') },\r\n { type: 'danger', label: _('common.discard-changes'), returnValue: true },\r\n ],\r\n })\r\n .subscribe(result => {\r\n if (result) {\r\n this.customFieldForm.reset();\r\n this.customFieldForm.markAsPristine();\r\n this.editable = false;\r\n }\r\n });\r\n } else {\r\n this.editable = false;\r\n }\r\n }\r\n}\r\n","<div class=\"card\" *ngIf=\"customFieldsConfig.length\">\r\n <div class=\"card-header\">\r\n {{ 'common.custom-fields' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text custom-field-form\" [class.editable]=\"editable\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Order\"\r\n [customFields]=\"customFieldsConfig\"\r\n [customFieldsFormGroup]=\"customFieldForm\"\r\n [readonly]=\"!editable\"\r\n [compact]=\"true\"\r\n ></vdr-tabbed-custom-fields>\r\n </div>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button class=\"btn btn-sm btn-secondary\" (click)=\"editable = true\" *ngIf=\"!editable\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <button\r\n class=\"btn btn-sm btn-primary\"\r\n (click)=\"onUpdateClick()\"\r\n *ngIf=\"editable\"\r\n [disabled]=\"customFieldForm.pristine || customFieldForm.invalid\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'common.update' | translate }}\r\n </button>\r\n <button\r\n class=\"btn btn-sm btn-secondary\"\r\n (click)=\"onCancelClick()\"\r\n *ngIf=\"editable\"\r\n >\r\n <clr-icon shape=\"times\"></clr-icon>\r\n {{ 'common.cancel' | translate }}\r\n </button>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n CustomFieldConfig,\r\n DataService,\r\n DeletionResult,\r\n DraftOrderEligibleShippingMethodsQuery,\r\n ModalService,\r\n NotificationService,\r\n Order,\r\n OrderDetailFragment,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { combineLatest, Observable, Subject } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\n\r\nimport { OrderTransitionService } from '../../providers/order-transition.service';\r\nimport { SelectAddressDialogComponent } from '../select-address-dialog/select-address-dialog.component';\r\nimport { SelectCustomerDialogComponent } from '../select-customer-dialog/select-customer-dialog.component';\r\nimport { SelectShippingMethodDialogComponent } from '../select-shipping-method-dialog/select-shipping-method-dialog.component';\r\n\r\n@Component({\r\n selector: 'vdr-draft-order-detail',\r\n templateUrl: './draft-order-detail.component.html',\r\n styleUrls: ['./draft-order-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class DraftOrderDetailComponent\r\n extends BaseDetailComponent<OrderDetailFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm = new FormGroup({});\r\n eligibleShippingMethods$: Observable<\r\n DraftOrderEligibleShippingMethodsQuery['eligibleShippingMethodsForDraftOrder']\r\n >;\r\n nextStates$: Observable<string[]>;\r\n fetchHistory = new Subject<void>();\r\n customFields: CustomFieldConfig[];\r\n orderLineCustomFields: CustomFieldConfig[];\r\n displayCouponCodeInput = false;\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private orderTransitionService: OrderTransitionService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\r\n this.eligibleShippingMethods$ = this.entity$.pipe(\r\n switchMap(order =>\r\n this.dataService.order\r\n .getDraftOrderEligibleShippingMethods(order.id)\r\n .mapSingle(\r\n ({ eligibleShippingMethodsForDraftOrder }) => eligibleShippingMethodsForDraftOrder,\r\n ),\r\n ),\r\n );\r\n this.customFields = this.getCustomFieldConfig('Order');\r\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n addItemToOrder(event: { productVariantId: string; quantity: number; customFields: any }) {\r\n this.dataService.order.addItemToDraftOrder(this.id, event).subscribe(result => {\r\n if (result.addItemToDraftOrder.__typename !== 'Order') {\r\n this.notificationService.error((result.addItemToDraftOrder as any).message);\r\n }\r\n });\r\n }\r\n\r\n adjustOrderLine(event: { lineId: string; quantity: number }) {\r\n this.dataService.order\r\n .adjustDraftOrderLine(this.id, { orderLineId: event.lineId, quantity: event.quantity })\r\n .subscribe(result => {\r\n if (result.adjustDraftOrderLine.__typename !== 'Order') {\r\n this.notificationService.error((result.adjustDraftOrderLine as any).message);\r\n }\r\n });\r\n }\r\n\r\n removeOrderLine(event: { lineId: string }) {\r\n this.dataService.order.removeDraftOrderLine(this.id, event.lineId).subscribe(result => {\r\n if (result.removeDraftOrderLine.__typename !== 'Order') {\r\n this.notificationService.error((result.removeDraftOrderLine as any).message);\r\n }\r\n });\r\n }\r\n\r\n getOrderAddressLines(orderAddress?: { [key: string]: string }): string[] {\r\n if (!orderAddress) {\r\n return [];\r\n }\r\n return Object.values(orderAddress)\r\n .filter(val => val !== 'OrderAddress')\r\n .filter(line => !!line);\r\n }\r\n\r\n setCustomer() {\r\n this.modalService.fromComponent(SelectCustomerDialogComponent).subscribe(result => {\r\n if (this.hasId(result)) {\r\n this.dataService.order\r\n .setCustomerForDraftOrder(this.id, { customerId: result.id })\r\n .subscribe();\r\n } else if (result) {\r\n this.dataService.order.setCustomerForDraftOrder(this.id, { input: result }).subscribe();\r\n }\r\n });\r\n }\r\n\r\n setShippingAddress() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order => {\r\n return this.modalService.fromComponent(SelectAddressDialogComponent, {\r\n locals: {\r\n customerId: order.customer?.id,\r\n currentAddress: order.shippingAddress ?? undefined,\r\n },\r\n });\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.dataService.order.setDraftOrderShippingAddress(this.id, result).subscribe();\r\n }\r\n });\r\n }\r\n\r\n setBillingAddress() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order => {\r\n return this.modalService.fromComponent(SelectAddressDialogComponent, {\r\n locals: {\r\n customerId: order.customer?.id,\r\n currentAddress: order.billingAddress ?? undefined,\r\n },\r\n });\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.dataService.order.setDraftOrderBillingAddress(this.id, result).subscribe();\r\n }\r\n });\r\n }\r\n\r\n applyCouponCode(couponCode: string) {\r\n this.dataService.order.applyCouponCodeToDraftOrder(this.id, couponCode).subscribe();\r\n }\r\n\r\n removeCouponCode(couponCode: string) {\r\n this.dataService.order.removeCouponCodeFromDraftOrder(this.id, couponCode).subscribe();\r\n }\r\n\r\n setShippingMethod() {\r\n combineLatest(this.entity$, this.eligibleShippingMethods$)\r\n .pipe(\r\n take(1),\r\n switchMap(([order, methods]) =>\r\n this.modalService.fromComponent(SelectShippingMethodDialogComponent, {\r\n locals: {\r\n eligibleShippingMethods: methods,\r\n currencyCode: order.currencyCode,\r\n currentSelectionId: order.shippingLines?.[0]?.shippingMethod.id,\r\n },\r\n }),\r\n ),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.dataService.order.setDraftOrderShippingMethod(this.id, result).subscribe();\r\n }\r\n });\r\n }\r\n\r\n updateCustomFields(customFieldsValue: any) {\r\n this.dataService.order\r\n .updateOrderCustomFields({\r\n id: this.id,\r\n customFields: customFieldsValue,\r\n })\r\n .subscribe();\r\n }\r\n\r\n deleteOrder() {\r\n this.dataService.order.deleteDraftOrder(this.id).subscribe(({ deleteDraftOrder }) => {\r\n if (deleteDraftOrder.result === DeletionResult.DELETED) {\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Order',\r\n });\r\n this.router.navigate(['/orders']);\r\n } else if (deleteDraftOrder.message) {\r\n this.notificationService.error(deleteDraftOrder.message);\r\n }\r\n });\r\n }\r\n\r\n completeOrder() {\r\n this.dataService.order\r\n .transitionToState(this.id, 'ArrangingPayment')\r\n .subscribe(({ transitionOrderToState }) => {\r\n if (transitionOrderToState?.__typename === 'Order') {\r\n this.router.navigate(['/orders', this.id]);\r\n } else if (transitionOrderToState?.__typename === 'OrderStateTransitionError') {\r\n this.notificationService.error(transitionOrderToState.transitionError);\r\n }\r\n });\r\n }\r\n\r\n private hasId<T extends { id: string }>(input: T | any): input is { id: string } {\r\n return typeof input === 'object' && !!input.id;\r\n }\r\n\r\n protected setFormValues(entity: OrderDetailFragment): void {\r\n // empty\r\n }\r\n}\r\n","<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button\r\n class=\"btn btn-primary\"\r\n (click)=\"completeOrder()\"\r\n [disabled]=\"!order.customer || !order.lines.length || !order.shippingLines.length\"\r\n >\r\n <clr-icon shape=\"check\"></clr-icon>\r\n {{ 'order.complete-draft-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"deleteOrder()\">\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'order.delete-draft-order' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <vdr-draft-order-variant-selector\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [currencyCode]=\"order.currencyCode\"\r\n (addItem)=\"addItemToOrder($event)\"\r\n ></vdr-draft-order-variant-selector>\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n [isDraft]=\"true\"\r\n (adjust)=\"adjustOrderLine($event)\"\r\n (remove)=\"removeOrderLine($event)\"\r\n ></vdr-order-table>\r\n <div class=\"flex\">\r\n <button\r\n *ngIf=\"order.couponCodes.length === 0 && !displayCouponCodeInput\"\r\n class=\"btn btn-link btn-sm mr2\"\r\n (click)=\"displayCouponCodeInput = !displayCouponCodeInput\"\r\n >\r\n {{ 'order.set-coupon-codes' | translate }}\r\n </button>\r\n <div *ngIf=\"order.couponCodes.length || displayCouponCodeInput\">\r\n <label>{{ 'order.set-coupon-codes' | translate }}</label>\r\n <vdr-coupon-code-selector\r\n [couponCodes]=\"order.couponCodes\"\r\n (addCouponCode)=\"applyCouponCode($event)\"\r\n (removeCouponCode)=\"removeCouponCode($event)\"\r\n ></vdr-coupon-code-selector>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.taxSummary.length\">\r\n <h4>{{ 'order.tax-summary' | translate }}</h4>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency: order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency: order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <clr-icon *ngIf=\"!order.customer\" shape=\"unknown-status\" class=\"is-warning\"></clr-icon>\r\n <clr-icon *ngIf=\"order.customer\" shape=\"check\" class=\"is-success\"></clr-icon>\r\n {{ 'order.customer' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-customer-label\r\n class=\"block mb2\"\r\n *ngIf=\"order.customer\"\r\n [customer]=\"order.customer\"\r\n ></vdr-customer-label>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setCustomer()\">\r\n {{ 'order.set-customer-for-order' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <h4 class=\"card-title\">\r\n <clr-icon\r\n *ngIf=\"!order.billingAddress.streetLine1\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.billingAddress.streetLine1\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n {{ 'order.billing-address' | translate }}\r\n </h4>\r\n <div class=\"card-text\">\r\n <vdr-formatted-address\r\n class=\"block mb2\"\r\n *ngIf=\"order.billingAddress\"\r\n [address]=\"order.billingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setBillingAddress()\">\r\n {{ 'order.set-billing-address' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <clr-icon\r\n *ngIf=\"!order.shippingAddress.streetLine1 || !order.shippingLines.length\"\r\n shape=\"unknown-status\"\r\n class=\"is-warning\"\r\n ></clr-icon>\r\n <clr-icon\r\n *ngIf=\"order.shippingAddress.streetLine1 && order.shippingLines.length\"\r\n shape=\"check\"\r\n class=\"is-success\"\r\n ></clr-icon>\r\n {{ 'order.shipping' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-formatted-address\r\n class=\"block mb2\"\r\n *ngIf=\"order.shippingAddress\"\r\n [address]=\"order.shippingAddress\"\r\n ></vdr-formatted-address>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setShippingAddress()\">\r\n {{ 'order.set-shipping-address' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <div *ngFor=\"let shippingLine of order.shippingLines\">\r\n {{ shippingLine.shippingMethod.name }}\r\n </div>\r\n <button class=\"btn btn-link btn-sm\" (click)=\"setShippingMethod()\">\r\n {{ 'order.set-shipping-method' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit } from '@angular/core';\r\nimport { FormControl } from '@angular/forms';\r\nimport {\r\n configurableDefinitionToInstance,\r\n ConfigurableOperation,\r\n ConfigurableOperationDefinition,\r\n configurableOperationValueIsValid,\r\n DataService,\r\n Dialog,\r\n FulfillOrderInput,\r\n GlobalFlag,\r\n OrderDetailFragment,\r\n toConfigurableOperationInput,\r\n} from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfill-order-dialog',\r\n templateUrl: './fulfill-order-dialog.component.html',\r\n styleUrls: ['./fulfill-order-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillOrderDialogComponent implements Dialog<FulfillOrderInput>, OnInit {\r\n resolveWith: (result?: FulfillOrderInput) => void;\r\n fulfillmentHandlerDef: ConfigurableOperationDefinition;\r\n fulfillmentHandler: ConfigurableOperation;\r\n fulfillmentHandlerControl = new FormControl();\r\n fulfillmentQuantities: { [lineId: string]: { fulfillCount: number; max: number } } = {};\r\n\r\n // Provided by modalService.fromComponent() call\r\n order: OrderDetailFragment;\r\n\r\n constructor(private dataService: DataService, private changeDetector: ChangeDetectorRef) {}\r\n\r\n ngOnInit(): void {\r\n this.dataService.settings.getGlobalSettings().single$.subscribe(({ globalSettings }) => {\r\n this.fulfillmentQuantities = this.order.lines.reduce((result, line) => {\r\n const fulfillCount = this.getFulfillableCount(line, globalSettings.trackInventory);\r\n return {\r\n ...result,\r\n [line.id]: { fulfillCount, max: fulfillCount },\r\n };\r\n }, {});\r\n this.changeDetector.markForCheck();\r\n });\r\n\r\n this.dataService.shippingMethod\r\n .getShippingMethodOperations()\r\n .mapSingle(data => data.fulfillmentHandlers)\r\n .subscribe(handlers => {\r\n this.fulfillmentHandlerDef =\r\n handlers.find(\r\n h => h.code === this.order.shippingLines[0]?.shippingMethod?.fulfillmentHandlerCode,\r\n ) || handlers[0];\r\n this.fulfillmentHandler = configurableDefinitionToInstance(this.fulfillmentHandlerDef);\r\n this.fulfillmentHandlerControl.patchValue(this.fulfillmentHandler);\r\n this.changeDetector.markForCheck();\r\n });\r\n }\r\n\r\n getFulfillableCount(line: OrderDetailFragment['lines'][number], globalTrackInventory: boolean): number {\r\n const { trackInventory, stockOnHand } = line.productVariant;\r\n const effectiveTracInventory =\r\n trackInventory === GlobalFlag.INHERIT ? globalTrackInventory : trackInventory === GlobalFlag.TRUE;\r\n\r\n const unfulfilledCount = this.getUnfulfilledCount(line);\r\n return effectiveTracInventory ? Math.min(unfulfilledCount, stockOnHand) : unfulfilledCount;\r\n }\r\n\r\n getUnfulfilledCount(line: OrderDetailFragment['lines'][number]): number {\r\n const fulfilled =\r\n line.fulfillments\r\n ?.map(f => f.summary)\r\n .flat()\r\n .filter(row => row.orderLine.id === line.id)\r\n .reduce((sum, row) => sum + row.quantity, 0) ?? 0;\r\n return line.quantity - fulfilled;\r\n }\r\n\r\n canSubmit(): boolean {\r\n const totalCount = Object.values(this.fulfillmentQuantities).reduce(\r\n (total, { fulfillCount }) => total + fulfillCount,\r\n 0,\r\n );\r\n const formIsValid =\r\n configurableOperationValueIsValid(\r\n this.fulfillmentHandlerDef,\r\n this.fulfillmentHandlerControl.value,\r\n ) && this.fulfillmentHandlerControl.valid;\r\n return formIsValid && 0 < totalCount;\r\n }\r\n\r\n select() {\r\n const lines = Object.entries(this.fulfillmentQuantities).map(([orderLineId, { fulfillCount }]) => ({\r\n orderLineId,\r\n quantity: fulfillCount,\r\n }));\r\n this.resolveWith({\r\n lines,\r\n handler: toConfigurableOperationInput(\r\n this.fulfillmentHandler,\r\n this.fulfillmentHandlerControl.value,\r\n ),\r\n });\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.fulfill-order' | translate }}</ng-template>\r\n\r\n<div class=\"fulfillment-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unfulfilled' | translate }}</th>\r\n <th>{{ 'catalog.stock-on-hand' | translate }}</th>\r\n <th>{{ 'order.fulfill' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr\r\n *ngFor=\"let line of order.lines\"\r\n class=\"order-line\"\r\n [class.ignore]=\"getUnfulfilledCount(line) === 0\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img *ngIf=\"line.featuredAsset\" [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">{{ getUnfulfilledCount(line) }}</td>\r\n <td class=\"align-middle quantity\">{{ line.productVariant.stockOnHand }}</td>\r\n <td class=\"align-middle fulfil\">\r\n <input\r\n *ngIf=\"fulfillmentQuantities[line.id]\"\r\n [disabled]=\"getUnfulfilledCount(line) === 0\"\r\n [(ngModel)]=\"fulfillmentQuantities[line.id].fulfillCount\"\r\n type=\"number\"\r\n [max]=\"fulfillmentQuantities[line.id].max\"\r\n min=\"0\"\r\n />\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"shipping-details\">\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6>{{ 'order.shipping-method' | translate }}</h6>\r\n {{ order.shippingLines[0]?.shippingMethod?.name }}\r\n <strong>{{ order.shipping | localeCurrency: order.currencyCode }}</strong>\r\n <vdr-configurable-input\r\n [operationDefinition]=\"fulfillmentHandlerDef\"\r\n [operation]=\"fulfillmentHandler\"\r\n [formControl]=\"fulfillmentHandlerControl\"\r\n [removable]=\"false\"\r\n ></vdr-configurable-input>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n {{ 'order.create-fulfillment' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-state-label',\r\n templateUrl: './fulfillment-state-label.component.html',\r\n styleUrls: ['./fulfillment-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Pending':\r\n case 'Shipped':\r\n return 'warning';\r\n case 'Delivered':\r\n return 'success';\r\n case 'Cancelled':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Delivered'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-simple-item-list',\r\n templateUrl: './simple-item-list.component.html',\r\n styleUrls: ['./simple-item-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SimpleItemListComponent {\r\n @Input() items: Array<{ name: string; quantity: number }>;\r\n}\r\n","<div class=\"items-list\">\r\n <ul>\r\n <li *ngFor=\"let item of items\" [title]=\"item.name\">\r\n <div class=\"quantity\">{{ item.quantity }}</div>\r\n <clr-icon shape=\"times\" size=\"12\"></clr-icon>\r\n {{ item.name }}\r\n </li>\r\n </ul>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { CustomFieldConfig, OrderDetailFragment, ServerConfigService } from '@vendure/admin-ui/core';\r\nimport { isObject } from '@vendure/common/lib/shared-utils';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-detail',\r\n templateUrl: './fulfillment-detail.component.html',\r\n styleUrls: ['./fulfillment-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentDetailComponent implements OnInit, OnChanges {\r\n @Input() fulfillmentId: string;\r\n @Input() order: OrderDetailFragment;\r\n\r\n customFieldConfig: CustomFieldConfig[] = [];\r\n customFieldFormGroup = new FormGroup({});\r\n\r\n constructor(private serverConfigService: ServerConfigService) {}\r\n\r\n ngOnInit() {\r\n this.customFieldConfig = this.serverConfigService.getCustomFieldsFor('Fulfillment');\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.buildCustomFieldsFormGroup();\r\n }\r\n\r\n get fulfillment(): NonNullable<OrderDetailFragment['fulfillments']>[number] | undefined | null {\r\n return this.order.fulfillments && this.order.fulfillments.find(f => f.id === this.fulfillmentId);\r\n }\r\n\r\n get items(): Array<{ name: string; quantity: number }> {\r\n return (\r\n this.fulfillment?.summary.map(row => {\r\n return {\r\n name:\r\n this.order.lines.find(line => line.id === row.orderLine.id)?.productVariant.name ??\r\n '',\r\n quantity: row.quantity,\r\n };\r\n }) ?? []\r\n );\r\n }\r\n\r\n buildCustomFieldsFormGroup() {\r\n const customFields = (this.fulfillment as any).customFields;\r\n for (const fieldDef of this.serverConfigService.getCustomFieldsFor('Fulfillment')) {\r\n this.customFieldFormGroup.addControl(fieldDef.name, new FormControl(customFields[fieldDef.name]));\r\n }\r\n }\r\n\r\n customFieldIsObject(customField: unknown) {\r\n return Array.isArray(customField) || isObject(customField);\r\n }\r\n}\r\n","<vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ fulfillment?.createdAt | localeDate: 'medium' }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.fulfillment-method' | translate\">\r\n {{ fulfillment?.method }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"fulfillment?.trackingCode\" [label]=\"'order.tracking-code' | translate\">\r\n {{ fulfillment?.trackingCode }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n<ng-container *ngFor=\"let customField of customFieldConfig\">\r\n <vdr-custom-field-control\r\n *ngIf=\"customFieldFormGroup.get(customField.name)\"\r\n [readonly]=\"true\"\r\n [compact]=\"true\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"customFieldFormGroup\"\r\n ></vdr-custom-field-control>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FulfillmentFragment, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-fulfillment-card',\r\n templateUrl: './fulfillment-card.component.html',\r\n styleUrls: ['./fulfillment-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class FulfillmentCardComponent {\r\n @Input() fulfillment: FulfillmentFragment | undefined;\r\n @Input() order: OrderDetailFragment;\r\n @Output() transitionState = new EventEmitter<string>();\r\n\r\n nextSuggestedState(): string | undefined {\r\n if (!this.fulfillment) {\r\n return;\r\n }\r\n const { nextStates } = this.fulfillment;\r\n const namedStateOrDefault = (targetState: string) =>\r\n nextStates.includes(targetState) ? targetState : nextStates[0];\r\n switch (this.fulfillment?.state) {\r\n case 'Pending':\r\n return namedStateOrDefault('Shipped');\r\n case 'Shipped':\r\n return namedStateOrDefault('Delivered');\r\n default:\r\n return nextStates.find(s => s !== 'Cancelled');\r\n }\r\n }\r\n\r\n nextOtherStates(): string[] {\r\n if (!this.fulfillment) {\r\n return [];\r\n }\r\n const suggested = this.nextSuggestedState();\r\n return this.fulfillment.nextStates.filter(s => s !== suggested);\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header fulfillment-header\">\r\n <div>{{ 'order.fulfillment' | translate }}</div>\r\n <div class=\"fulfillment-state\">\r\n <vdr-fulfillment-state-label [state]=\"fulfillment?.state\"></vdr-fulfillment-state-label>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-fulfillment-detail\r\n *ngIf=\"!!fulfillment\"\r\n [fulfillmentId]=\"fulfillment?.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"fulfillment?.nextStates.length\">\r\n <ng-container *ngIf=\"nextSuggestedState() as suggestedState\">\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"transitionState.emit(suggestedState)\">\r\n {{ 'order.set-fulfillment-state' | translate: { state: (suggestedState | stateI18nToken | translate) } }}\r\n </button>\r\n </ng-container>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngFor=\"let nextState of nextOtherStates()\">\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionState.emit(nextState)\"\r\n >\r\n <ng-container *ngIf=\"nextState !== 'Cancelled'; else cancel\">\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{ 'order.transition-to-state' | translate: { state: (nextState | stateI18nToken | translate) } }}\r\n </ng-container>\r\n <ng-template #cancel>\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n {{ 'order.cancel-fulfillment' | translate }}\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnChanges, OnInit } from '@angular/core';\r\nimport { OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-modification-detail',\r\n templateUrl: './modification-detail.component.html',\r\n styleUrls: ['./modification-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ModificationDetailComponent implements OnChanges {\r\n @Input() order: OrderDetailFragment;\r\n @Input() modification: OrderDetailFragment['modifications'][number];\r\n private addedItems = new Map<OrderDetailFragment['lines'][number], number>();\r\n private removedItems = new Map<OrderDetailFragment['lines'][number], number>();\r\n\r\n ngOnChanges(): void {\r\n const { added, removed } = this.getModifiedLines();\r\n this.addedItems = added;\r\n this.removedItems = removed;\r\n }\r\n\r\n getSurcharge(id: string) {\r\n return this.order.surcharges.find(m => m.id === id);\r\n }\r\n\r\n getAddedItems() {\r\n return [...this.addedItems.entries()].map(([line, count]) => {\r\n return { name: line.productVariant.name, quantity: count };\r\n });\r\n }\r\n\r\n getRemovedItems() {\r\n return [...this.removedItems.entries()].map(([line, count]) => {\r\n return { name: line.productVariant.name, quantity: count };\r\n });\r\n }\r\n\r\n private getModifiedLines() {\r\n const added = new Map<OrderDetailFragment['lines'][number], number>();\r\n const removed = new Map<OrderDetailFragment['lines'][number], number>();\r\n for (const _item of this.modification.orderItems || []) {\r\n const result = this.getOrderLineAndItem(_item.id);\r\n if (result) {\r\n const { line, item } = result;\r\n if (item.cancelled) {\r\n const count = removed.get(line) ?? 0;\r\n removed.set(line, count + 1);\r\n } else {\r\n const count = added.get(line) ?? 0;\r\n added.set(line, count + 1);\r\n }\r\n }\r\n }\r\n return { added, removed };\r\n }\r\n\r\n private getOrderLineAndItem(itemId: string) {\r\n for (const line of this.order.lines) {\r\n const item = line.items.find(i => i.id === itemId);\r\n if (item) {\r\n return { line, item };\r\n }\r\n }\r\n }\r\n}\r\n","<vdr-labeled-data [label]=\"'common.ID' | translate\">{{ modification.id }}</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"modification.note\" [label]=\"'order.note' | translate\">{{\r\n modification.note\r\n}}</vdr-labeled-data>\r\n<vdr-labeled-data *ngFor=\"let surcharge of modification.surcharges\" [label]=\"'order.surcharges' | translate\">\r\n {{ getSurcharge(surcharge.id)?.description }}\r\n {{ getSurcharge(surcharge.id)?.priceWithTax | localeCurrency: order.currencyCode }}</vdr-labeled-data\r\n>\r\n<vdr-labeled-data *ngIf=\"getAddedItems().length\" [label]=\"'order.added-items' | translate\">\r\n <vdr-simple-item-list [items]=\"getAddedItems()\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"getRemovedItems().length\" [label]=\"'order.removed-items' | translate\">\r\n <vdr-simple-item-list [items]=\"getRemovedItems()\"></vdr-simple-item-list>\r\n</vdr-labeled-data>\r\n","export const NODE_HEIGHT = 72;\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnChanges,\r\n SimpleChanges,\r\n} from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\n\r\nimport { NODE_HEIGHT } from './constants';\r\nimport { StateNode } from './types';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-node',\r\n templateUrl: './order-process-node.component.html',\r\n styleUrls: ['./order-process-node.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessNodeComponent implements OnChanges {\r\n @Input() node: StateNode;\r\n @Input() index: number;\r\n @Input() active: boolean;\r\n active$ = new BehaviorSubject<boolean>(false);\r\n activeTarget$ = new BehaviorSubject<boolean>(false);\r\n isCancellable = false;\r\n // We use a class field here to prevent the\r\n // i18n extractor from extracting a \"Cancelled\" key\r\n cancelledState = 'Cancelled';\r\n\r\n constructor(private elementRef: ElementRef<HTMLDivElement>) {}\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.isCancellable = !!this.node.to.find((s) => s.name === 'Cancelled');\r\n if (changes.active) {\r\n this.active$.next(this.active);\r\n }\r\n }\r\n\r\n getPos(origin: 'top' | 'bottom' = 'top'): { x: number; y: number } {\r\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\r\n const nodeHeight =\r\n this.elementRef.nativeElement.querySelector('.node')?.getBoundingClientRect().height ?? 0;\r\n return {\r\n x: 10,\r\n y: this.index * NODE_HEIGHT + (origin === 'bottom' ? nodeHeight : 0),\r\n };\r\n }\r\n\r\n getStyle() {\r\n const pos = this.getPos();\r\n return {\r\n 'top.px': pos.y,\r\n 'left.px': pos.x,\r\n };\r\n }\r\n}\r\n","<div class=\"node-wrapper\" [ngStyle]=\"getStyle()\" [class.active]=\"active$ | async\">\r\n <div\r\n class=\"node\"\r\n [class.active-target]=\"activeTarget$ | async\"\r\n >\r\n {{ node.name | stateI18nToken | translate }}\r\n </div>\r\n <div class=\"cancelled-wrapper\" *ngIf=\"isCancellable\">\r\n <div class=\"cancelled-edge\">\r\n </div>\r\n <clr-icon shape=\"dot-circle\"></clr-icon>\r\n <div class=\"cancelled-node\">\r\n {{ cancelledState | stateI18nToken | translate }}\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\n\r\nimport { OrderProcessNodeComponent } from './order-process-node.component';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-edge',\r\n templateUrl: './order-process-edge.component.html',\r\n styleUrls: ['./order-process-edge.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessEdgeComponent implements OnInit {\r\n @Input() from: OrderProcessNodeComponent;\r\n @Input() to: OrderProcessNodeComponent;\r\n @Input() index: number;\r\n active$: Observable<boolean>;\r\n\r\n ngOnInit() {\r\n this.active$ = this.from.active$\r\n .asObservable()\r\n .pipe(tap((active) => this.to.activeTarget$.next(active)));\r\n }\r\n\r\n getStyle() {\r\n const direction = this.from.index < this.to.index ? 'down' : 'up';\r\n const startPos = this.from.getPos(direction === 'down' ? 'bottom' : 'top');\r\n const endPos = this.to.getPos(direction === 'down' ? 'top' : 'bottom');\r\n const dX = Math.abs(startPos.x - endPos.x);\r\n const dY = Math.abs(startPos.y - endPos.y);\r\n const length = Math.sqrt(dX ** 2 + dY ** 2);\r\n return {\r\n 'top.px': startPos.y,\r\n 'left.px': startPos.x + (direction === 'down' ? 10 : 40) + this.index * 12,\r\n 'height.px': length,\r\n 'width.px': 1,\r\n ...(direction === 'up'\r\n ? {\r\n transform: 'rotateZ(180deg)',\r\n 'transform-origin': 'top',\r\n }\r\n : {}),\r\n };\r\n }\r\n}\r\n","<div\r\n [attr.data-from]=\"from.node.name\"\r\n [attr.data-to]=\"to.node.name\"\r\n [ngStyle]=\"getStyle()\"\r\n [class.active]=\"active$ | async\"\r\n class=\"edge\">\r\n <clr-icon shape=\"arrow\" flip=\"vertical\" class=\"arrow\"></clr-icon>\r\n</div>\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n HostBinding,\r\n Input,\r\n OnChanges,\r\n OnInit,\r\n QueryList,\r\n SimpleChanges,\r\n ViewChildren,\r\n} from '@angular/core';\r\nimport { OrderProcessState } from '@vendure/admin-ui/core';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { debounceTime } from 'rxjs/operators';\r\n\r\nimport { NODE_HEIGHT } from './constants';\r\nimport { OrderProcessNodeComponent } from './order-process-node.component';\r\nimport { StateNode } from './types';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-graph',\r\n templateUrl: './order-process-graph.component.html',\r\n styleUrls: ['./order-process-graph.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessGraphComponent implements OnInit, OnChanges, AfterViewInit {\r\n @Input() states: OrderProcessState[];\r\n @Input() initialState?: string;\r\n setActiveState$ = new BehaviorSubject<string | undefined>(undefined);\r\n activeState$: Observable<string | undefined>;\r\n nodes: StateNode[] = [];\r\n edges: Array<{ from: OrderProcessNodeComponent; to: OrderProcessNodeComponent; index: number }> = [];\r\n\r\n @ViewChildren(OrderProcessNodeComponent) nodeComponents: QueryList<OrderProcessNodeComponent>;\r\n\r\n constructor(private changeDetector: ChangeDetectorRef) {}\r\n\r\n @HostBinding('style.height.px')\r\n get outerHeight(): number {\r\n return this.nodes.length * NODE_HEIGHT;\r\n }\r\n\r\n ngOnInit() {\r\n this.setActiveState$.next(this.initialState);\r\n this.activeState$ = this.setActiveState$.pipe(debounceTime(150));\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.populateNodes();\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => this.populateEdges());\r\n }\r\n\r\n onMouseOver(stateName: string) {\r\n this.setActiveState$.next(stateName);\r\n }\r\n\r\n onMouseOut() {\r\n this.setActiveState$.next(this.initialState);\r\n }\r\n\r\n getNodeFor(state: string): OrderProcessNodeComponent | undefined {\r\n if (this.nodeComponents) {\r\n return this.nodeComponents.find((n) => n.node.name === state);\r\n }\r\n }\r\n\r\n private populateNodes() {\r\n const stateNodeMap = new Map<string, StateNode>();\r\n for (const state of this.states) {\r\n stateNodeMap.set(state.name, {\r\n name: state.name,\r\n to: [],\r\n });\r\n }\r\n\r\n for (const [name, stateNode] of stateNodeMap.entries()) {\r\n const targets = this.states.find((s) => s.name === name)?.to ?? [];\r\n for (const target of targets) {\r\n const targetNode = stateNodeMap.get(target);\r\n if (targetNode) {\r\n stateNode.to.push(targetNode);\r\n }\r\n }\r\n }\r\n this.nodes = [...stateNodeMap.values()].filter((n) => n.name !== 'Cancelled');\r\n }\r\n\r\n private populateEdges() {\r\n for (const node of this.nodes) {\r\n const nodeCmp = this.getNodeFor(node.name);\r\n let index = 0;\r\n for (const to of node.to) {\r\n const toCmp = this.getNodeFor(to.name);\r\n if (nodeCmp && toCmp && nodeCmp !== toCmp) {\r\n this.edges.push({\r\n to: toCmp,\r\n from: nodeCmp,\r\n index,\r\n });\r\n index++;\r\n }\r\n }\r\n }\r\n this.edges = [...this.edges];\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<ng-container *ngFor=\"let state of nodes; let i = index\">\r\n <vdr-order-process-node\r\n [node]=\"state\"\r\n [index]=\"i\"\r\n [active]=\"(activeState$ | async) === state.name\"\r\n (mouseenter)=\"onMouseOver(state.name)\"\r\n (mouseleave)=\"onMouseOut()\"\r\n ></vdr-order-process-node>\r\n</ng-container>\r\n<ng-container *ngFor=\"let edge of edges\">\r\n <vdr-order-process-edge [from]=\"edge.from\" [to]=\"edge.to\" [index]=\"edge.index\"></vdr-order-process-edge>\r\n</ng-container>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport {\r\n CancelOrderInput,\r\n DataService,\r\n Dialog,\r\n OrderProcessState,\r\n ServerConfigService,\r\n} from '@vendure/admin-ui/core';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'vdr-order-process-graph-dialog',\r\n templateUrl: './order-process-graph-dialog.component.html',\r\n styleUrls: ['./order-process-graph-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderProcessGraphDialogComponent implements OnInit, Dialog<void> {\r\n activeState: string;\r\n states: OrderProcessState[] = [];\r\n constructor(private serverConfigService: ServerConfigService) {}\r\n\r\n ngOnInit(): void {\r\n this.states = this.serverConfigService.getOrderProcessStates();\r\n }\r\n\r\n resolveWith: (result: void | undefined) => void;\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.order-state-diagram' | translate }}</ng-template>\r\n\r\n<vdr-order-process-graph [states]=\"states\" [initialState]=\"activeState\"></vdr-order-process-graph>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n CancelOrderInput,\r\n Dialog,\r\n getAppConfig,\r\n I18nService,\r\n OrderDetailFragment,\r\n OrderLineInput,\r\n RefundOrderInput,\r\n} from '@vendure/admin-ui/core';\r\nimport { summate } from '@vendure/common/lib/shared-utils';\r\n\r\ntype SelectionLine = { quantity: number; refund: boolean; cancel: boolean };\r\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-refund-order-dialog',\r\n templateUrl: './refund-order-dialog.component.html',\r\n styleUrls: ['./refund-order-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RefundOrderDialogComponent\r\n implements OnInit, Dialog<{ cancel: CancelOrderInput; refund: RefundOrderInput }>\r\n{\r\n order: OrderDetailFragment;\r\n resolveWith: (result?: { cancel: CancelOrderInput; refund: RefundOrderInput }) => void;\r\n reason: string;\r\n settledPayments: Payment[];\r\n selectedPayment: Payment;\r\n lineQuantities: { [lineId: string]: SelectionLine } = {};\r\n refundShipping = false;\r\n adjustment = 0;\r\n reasons = getAppConfig().cancellationReasons ?? [\r\n _('order.refund-reason-customer-request'),\r\n _('order.refund-reason-not-available'),\r\n ];\r\n\r\n constructor(private i18nService: I18nService) {\r\n this.reasons = this.reasons.map(r => this.i18nService.translate(r));\r\n }\r\n\r\n get refundTotal(): number {\r\n const itemTotal = this.order.lines.reduce((total, line) => {\r\n const lineRef = this.lineQuantities[line.id];\r\n const refundCount = (lineRef.refund && lineRef.quantity) || 0;\r\n return total + line.proratedUnitPriceWithTax * refundCount;\r\n }, 0);\r\n return itemTotal + (this.refundShipping ? this.order.shippingWithTax : 0) + this.adjustment;\r\n }\r\n\r\n get settledPaymentsTotal(): number {\r\n return this.settledPayments\r\n .map(payment => {\r\n const paymentTotal = payment.amount;\r\n const alreadyRefundedTotal = summate(\r\n payment.refunds.filter(r => r.state !== 'Failed') as Array<\r\n Required<Payment['refunds'][number]>\r\n >,\r\n 'total',\r\n );\r\n return paymentTotal - alreadyRefundedTotal;\r\n })\r\n .reduce((sum, amount) => sum + amount, 0);\r\n }\r\n\r\n lineCanBeRefundedOrCancelled(line: OrderDetailFragment['lines'][number]): boolean {\r\n const refunds =\r\n this.order.payments?.reduce(\r\n (all, payment) => [...all, ...payment.refunds],\r\n [] as Payment['refunds'],\r\n ) ?? [];\r\n\r\n const refundable = line.items.filter(i => {\r\n if (i.cancelled) {\r\n return false;\r\n }\r\n if (i.refundId == null) {\r\n return true;\r\n }\r\n const refund = refunds.find(r => r.id === i.refundId);\r\n return refund?.state === 'Failed';\r\n });\r\n return 0 < refundable.length;\r\n }\r\n\r\n ngOnInit() {\r\n this.lineQuantities = this.order.lines.reduce((result, line) => {\r\n return {\r\n ...result,\r\n [line.id]: {\r\n quantity: 0,\r\n refund: false,\r\n cancel: false,\r\n },\r\n };\r\n }, {});\r\n this.settledPayments = (this.order.payments || []).filter(p => p.state === 'Settled');\r\n if (this.settledPayments.length) {\r\n this.selectedPayment = this.settledPayments[0];\r\n }\r\n }\r\n\r\n handleZeroQuantity(line?: SelectionLine) {\r\n if (line?.quantity === 0) {\r\n line.cancel = false;\r\n line.refund = false;\r\n }\r\n }\r\n\r\n isRefunding(): boolean {\r\n const result = Object.values(this.lineQuantities).reduce((isRefunding, line) => {\r\n return isRefunding || (0 < line.quantity && line.refund);\r\n }, false);\r\n return result;\r\n }\r\n\r\n isCancelling(): boolean {\r\n const result = Object.values(this.lineQuantities).reduce((isCancelling, line) => {\r\n return isCancelling || (0 < line.quantity && line.cancel);\r\n }, false);\r\n return result;\r\n }\r\n\r\n canSubmit(): boolean {\r\n if (this.isRefunding()) {\r\n return !!(\r\n this.selectedPayment &&\r\n this.reason &&\r\n 0 < this.refundTotal &&\r\n this.refundTotal <= this.settledPaymentsTotal\r\n );\r\n } else if (this.isCancelling()) {\r\n return !!this.reason;\r\n }\r\n return false;\r\n }\r\n\r\n select() {\r\n const payment = this.selectedPayment;\r\n if (payment) {\r\n const refundLines = this.getOrderLineInput(line => line.refund);\r\n const cancelLines = this.getOrderLineInput(line => line.cancel);\r\n\r\n this.resolveWith({\r\n refund: {\r\n lines: refundLines,\r\n reason: this.reason,\r\n shipping: this.refundShipping ? this.order.shippingWithTax : 0,\r\n adjustment: this.adjustment,\r\n paymentId: payment.id,\r\n },\r\n cancel: {\r\n lines: cancelLines,\r\n orderId: this.order.id,\r\n reason: this.reason,\r\n cancelShipping: this.refundShipping,\r\n },\r\n });\r\n }\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n\r\n private getOrderLineInput(filterFn: (line: SelectionLine) => boolean): OrderLineInput[] {\r\n return Object.entries(this.lineQuantities)\r\n .filter(([orderLineId, line]) => 0 < line.quantity && filterFn(line))\r\n .map(([orderLineId, line]) => ({\r\n orderLineId,\r\n quantity: line.quantity,\r\n }));\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.refund-and-cancel-order' | translate }}</ng-template>\r\n\r\n<div class=\"refund-wrapper\">\r\n <div class=\"order-table\">\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.prorated-unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th>{{ 'order.refund' | translate }}</th>\r\n <th>{{ 'order.cancel' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tr *ngFor=\"let line of order.lines\" class=\"order-line\">\r\n <td class=\"align-middle thumb\">\r\n <img [src]=\"line.featuredAsset | assetPreview: 'tiny'\" />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.quantity }}\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <div class=\"prorated-wrapper\">\r\n {{ line.proratedUnitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <ng-container *ngIf=\"line.discounts as discounts\">\r\n <vdr-dropdown *ngIf=\"discounts.length\">\r\n <div class=\"promotions-label\" vdrDropdownTrigger>\r\n <button class=\"icon-button\"><clr-icon shape=\"info\"></clr-icon></button>\r\n </div>\r\n <vdr-dropdown-menu>\r\n <div class=\"line-promotion\" *ngFor=\"let discount of discounts\">\r\n {{ discount.description }}\r\n <div class=\"promotion-amount\">\r\n {{\r\n discount.amount / 100 / line.quantity\r\n | number: '1.0-2'\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </ng-container>\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity-col\">\r\n <input\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n [(ngModel)]=\"lineQuantities[line.id].quantity\"\r\n type=\"number\"\r\n [max]=\"line.quantity\"\r\n min=\"0\"\r\n (input)=\"handleZeroQuantity(lineQuantities[line.id])\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].refund\"\r\n />\r\n </div>\r\n </td>\r\n <td class=\"align-middle\">\r\n <div class=\"cancel-checkbox-wrapper\">\r\n <input\r\n type=\"checkbox\"\r\n *ngIf=\"lineCanBeRefundedOrCancelled(line)\"\r\n clrCheckbox\r\n [disabled]=\"0 === lineQuantities[line.id].quantity\"\r\n [(ngModel)]=\"lineQuantities[line.id].cancel\"\r\n />\r\n </div>\r\n </td>\r\n </tr>\r\n </table>\r\n </div>\r\n <div class=\"refund-details mt4\" [class.faded]=\"!isRefunding() && !isCancelling()\">\r\n <div>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <ng-select\r\n [disabled]=\"!isRefunding() && !isCancelling()\"\r\n [items]=\"reasons\"\r\n bindLabel=\"name\"\r\n autofocus\r\n [placeholder]=\"'order.refund-cancellation-reason-required' | translate\"\r\n bindValue=\"id\"\r\n [addTag]=\"true\"\r\n [(ngModel)]=\"reason\"\r\n ></ng-select>\r\n </div>\r\n\r\n <div>\r\n <clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\" [disabled]=\"!isRefunding()\">\r\n <option\r\n *ngFor=\"let payment of settledPayments\"\r\n [ngValue]=\"payment\"\r\n [disabled]=\"payment.state !== 'Settled'\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n </clr-select-container>\r\n\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"refundShipping\" [disabled]=\"!isRefunding()\" />\r\n <label>\r\n {{ 'order.refund-shipping' | translate }} ({{\r\n order.shippingWithTax | localeCurrency: order.currencyCode\r\n }})\r\n </label>\r\n </clr-checkbox-wrapper>\r\n <clr-input-container>\r\n <label>{{ 'order.refund-adjustment' | translate }}</label>\r\n <vdr-currency-input\r\n clrInput\r\n [disabled]=\"!isRefunding()\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [(ngModel)]=\"adjustment\"\r\n ></vdr-currency-input>\r\n </clr-input-container>\r\n <div class=\"totals\" [class.disabled]=\"!isRefunding()\">\r\n <div class=\"order-total\">\r\n {{ 'order.payment-amount' | translate }}:\r\n {{ selectedPayment.amount | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total\">\r\n {{ 'order.refund-total' | translate }}:\r\n {{ refundTotal | localeCurrency: order.currencyCode }}\r\n </div>\r\n <div class=\"refund-total-error\" *ngIf=\"refundTotal < 0 || settledPaymentsTotal < refundTotal\">\r\n {{\r\n 'order.refund-total-error'\r\n | translate\r\n : {\r\n min: 0 | currency: order.currencyCode,\r\n max: settledPaymentsTotal | localeCurrency: order.currencyCode\r\n }\r\n }}\r\n </div>\r\n <div class=\"refund-total-warning\" *ngIf=\"selectedPayment.amount < refundTotal\">\r\n {{ 'order.refund-total-warning' | translate }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"select()\" [disabled]=\"!canSubmit()\" class=\"btn btn-primary\">\r\n <ng-container *ngIf=\"isRefunding(); else cancelling\">\r\n {{\r\n 'order.refund-with-amount'\r\n | translate: { amount: refundTotal | localeCurrency: order.currencyCode }\r\n }}\r\n </ng-container>\r\n <ng-template #cancelling>\r\n {{ 'order.cancel-selected-items' | translate }}\r\n </ng-template>\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { Dialog, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-settle-refund-dialog',\r\n templateUrl: './settle-refund-dialog.component.html',\r\n styleUrls: ['./settle-refund-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SettleRefundDialogComponent implements Dialog<string> {\r\n resolveWith: (result?: string) => void;\r\n transactionId = '';\r\n refund: NonNullable<OrderDetailFragment['payments']>[number]['refunds'][number];\r\n\r\n submit() {\r\n this.resolveWith(this.transactionId);\r\n }\r\n\r\n cancel() {\r\n this.resolveWith();\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.settle-refund' | translate }}</ng-template>\r\n<p class=\"instruction\">\r\n {{ 'order.settle-refund-manual-instructions' | translate: { method: refund.method } }}\r\n</p>\r\n<clr-input-container>\r\n <label>{{ 'order.transaction-id' | translate }}</label>\r\n <input clrInput name=\"transactionId\" [(ngModel)]=\"transactionId\" />\r\n</clr-input-container>\r\n\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" [disabled]=\"!transactionId\" class=\"btn btn-primary\">\r\n {{ 'order.settle-refund' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\nimport { CurrencyCode, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\n@Component({\r\n selector: 'vdr-payment-detail',\r\n templateUrl: './payment-detail.component.html',\r\n styleUrls: ['./payment-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentDetailComponent {\r\n @Input() payment: NonNullable<OrderDetailFragment['payments']>[number];\r\n @Input() currencyCode: CurrencyCode;\r\n}\r\n","<vdr-labeled-data [label]=\"'order.payment-method' | translate\">\r\n {{ payment.method }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.amount' | translate\">\r\n {{ payment.amount | localeCurrency: currencyCode }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"payment.errorMessage\" [label]=\"'order.error-message' | translate\">\r\n {{ payment.errorMessage }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data *ngIf=\"payment.transactionId\" [label]=\"'order.transaction-id' | translate\">\r\n {{ payment.transactionId }}\r\n</vdr-labeled-data>\r\n<vdr-labeled-data [label]=\"'order.payment-metadata' | translate\">\r\n <vdr-object-tree [value]=\"payment.metadata\"></vdr-object-tree>\r\n</vdr-labeled-data>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport {\r\n GetOrderHistoryQuery,\r\n HistoryEntry,\r\n HistoryEntryType,\r\n OrderDetailFragment,\r\n TimelineDisplayType,\r\n} from '@vendure/admin-ui/core';\r\n\r\ntype OrderHistoryItem = NonNullable<GetOrderHistoryQuery['order']>['history']['items'][number];\r\n\r\n@Component({\r\n selector: 'vdr-order-history',\r\n templateUrl: './order-history.component.html',\r\n styleUrls: ['./order-history.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderHistoryComponent {\r\n @Input() order: OrderDetailFragment;\r\n @Input() history: OrderHistoryItem[];\r\n @Output() addNote = new EventEmitter<{ note: string; isPublic: boolean }>();\r\n @Output() updateNote = new EventEmitter<HistoryEntry>();\r\n @Output() deleteNote = new EventEmitter<HistoryEntry>();\r\n note = '';\r\n noteIsPrivate = true;\r\n expanded = false;\r\n readonly type = HistoryEntryType;\r\n\r\n getDisplayType(entry: OrderHistoryItem): TimelineDisplayType {\r\n if (entry.type === HistoryEntryType.ORDER_STATE_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return 'success';\r\n }\r\n if (entry.data.to === 'Cancelled') {\r\n return 'error';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return 'success';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {\r\n if (entry.data.to === 'Declined' || entry.data.to === 'Cancelled') {\r\n return 'error';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_CANCELLATION) {\r\n return 'error';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_REFUND_TRANSITION) {\r\n return 'warning';\r\n }\r\n return 'default';\r\n }\r\n\r\n getTimelineIcon(entry: OrderHistoryItem) {\r\n if (entry.type === HistoryEntryType.ORDER_STATE_TRANSITION) {\r\n if (entry.data.to === 'Delivered') {\r\n return ['success-standard', 'is-solid'];\r\n }\r\n if (entry.data.to === 'Cancelled') {\r\n return 'ban';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION) {\r\n if (entry.data.to === 'Settled') {\r\n return 'credit-card';\r\n }\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_NOTE) {\r\n return 'note';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_MODIFIED) {\r\n return 'pencil';\r\n }\r\n if (entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) {\r\n if (entry.data.to === 'Shipped') {\r\n return 'truck';\r\n }\r\n if (entry.data.to === 'Delivered') {\r\n return 'truck';\r\n }\r\n }\r\n }\r\n\r\n isFeatured(entry: OrderHistoryItem): boolean {\r\n switch (entry.type) {\r\n case HistoryEntryType.ORDER_STATE_TRANSITION: {\r\n return (\r\n entry.data.to === 'Delivered' ||\r\n entry.data.to === 'Cancelled' ||\r\n entry.data.to === 'Settled'\r\n );\r\n }\r\n case HistoryEntryType.ORDER_PAYMENT_TRANSITION:\r\n return entry.data.to === 'Settled' || entry.data.to === 'Cancelled';\r\n case HistoryEntryType.ORDER_FULFILLMENT_TRANSITION:\r\n return entry.data.to === 'Delivered' || entry.data.to === 'Shipped';\r\n case HistoryEntryType.ORDER_NOTE:\r\n case HistoryEntryType.ORDER_MODIFIED:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n getFulfillment(\r\n entry: OrderHistoryItem,\r\n ): NonNullable<OrderDetailFragment['fulfillments']>[number] | undefined {\r\n if (\r\n (entry.type === HistoryEntryType.ORDER_FULFILLMENT ||\r\n entry.type === HistoryEntryType.ORDER_FULFILLMENT_TRANSITION) &&\r\n this.order.fulfillments\r\n ) {\r\n return this.order.fulfillments.find(f => f.id === entry.data.fulfillmentId);\r\n }\r\n }\r\n\r\n getPayment(entry: OrderHistoryItem): NonNullable<OrderDetailFragment['payments']>[number] | undefined {\r\n if (entry.type === HistoryEntryType.ORDER_PAYMENT_TRANSITION && this.order.payments) {\r\n return this.order.payments.find(p => p.id === entry.data.paymentId);\r\n }\r\n }\r\n\r\n getCancelledItems(entry: OrderHistoryItem): Array<{ name: string; quantity: number }> {\r\n const itemMap = new Map<string, number>();\r\n const cancelledItemIds: string[] = entry.data.orderItemIds;\r\n for (const line of this.order.lines) {\r\n for (const item of line.items) {\r\n if (cancelledItemIds.includes(item.id)) {\r\n const count = itemMap.get(line.productVariant.name);\r\n if (count != null) {\r\n itemMap.set(line.productVariant.name, count + 1);\r\n } else {\r\n itemMap.set(line.productVariant.name, 1);\r\n }\r\n }\r\n }\r\n }\r\n return Array.from(itemMap.entries()).map(([name, quantity]) => ({ name, quantity }));\r\n }\r\n\r\n getModification(id: string) {\r\n return this.order.modifications.find(m => m.id === id);\r\n }\r\n\r\n getName(entry: OrderHistoryItem): string {\r\n const { administrator } = entry;\r\n if (administrator) {\r\n return `${administrator.firstName} ${administrator.lastName}`;\r\n } else {\r\n const customer = this.order.customer;\r\n if (customer) {\r\n return `${customer.firstName} ${customer.lastName}`;\r\n }\r\n }\r\n return '';\r\n }\r\n\r\n addNoteToOrder() {\r\n this.addNote.emit({ note: this.note, isPublic: !this.noteIsPrivate });\r\n this.note = '';\r\n this.noteIsPrivate = true;\r\n }\r\n}\r\n","<h4>{{ 'order.order-history' | translate }}</h4>\r\n<div class=\"entry-list\" [class.expanded]=\"expanded\">\r\n <vdr-timeline-entry iconShape=\"note\" displayType=\"muted\" [featured]=\"true\">\r\n <div class=\"note-entry\">\r\n <textarea [(ngModel)]=\"note\" name=\"note\" class=\"note\"></textarea>\r\n <button class=\"btn btn-secondary\" [disabled]=\"!note\" (click)=\"addNoteToOrder()\">\r\n {{ 'common.add-note' | translate }}\r\n </button>\r\n </div>\r\n <div class=\"visibility-select\">\r\n <clr-checkbox-wrapper>\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"noteIsPrivate\" />\r\n <label>{{ 'order.note-is-private' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n <span *ngIf=\"noteIsPrivate\" class=\"private\">\r\n {{ 'order.note-only-visible-to-administrators' | translate }}\r\n </span>\r\n <span *ngIf=\"!noteIsPrivate\" class=\"public\">\r\n {{ 'order.note-visible-to-customer' | translate }}\r\n </span>\r\n </div>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry\r\n *ngFor=\"let entry of history\"\r\n [displayType]=\"getDisplayType(entry)\"\r\n [iconShape]=\"getTimelineIcon(entry)\"\r\n [createdAt]=\"entry.createdAt\"\r\n [name]=\"getName(entry)\"\r\n [featured]=\"isFeatured(entry)\"\r\n [collapsed]=\"!expanded && !isFeatured(entry)\"\r\n (expandClick)=\"expanded = !expanded\"\r\n >\r\n <ng-container [ngSwitch]=\"entry.type\">\r\n <ng-container *ngSwitchCase=\"type.ORDER_STATE_TRANSITION\">\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Delivered'\">\r\n {{ 'order.history-order-fulfilled' | translate }}\r\n </div>\r\n <div class=\"title\" *ngIf=\"entry.data.to === 'Cancelled'\">\r\n {{ 'order.history-order-cancelled' | translate }}\r\n </div>\r\n <ng-template [ngIf]=\"entry.data.to !== 'Cancelled' && entry.data.to !== 'Delivered'\">\r\n {{\r\n 'order.history-order-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_MODIFIED\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-modified' | translate }}\r\n </div>\r\n <ng-container *ngIf=\"getModification(entry.data.modificationId) as modification\">\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{ modification.priceChange | localeCurrency: order.currencyCode }}</strong>\r\n <vdr-chip colorType=\"success\" *ngIf=\"modification.isSettled\">{{\r\n 'order.modification-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip colorType=\"error\" *ngIf=\"!modification.isSettled\">{{\r\n 'order.modification-not-settled' | translate\r\n }}</vdr-chip>\r\n <vdr-history-entry-detail>\r\n <vdr-modification-detail\r\n [order]=\"order\"\r\n [modification]=\"modification\"\r\n ></vdr-modification-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_PAYMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Settled'; else regularPaymentTransition\">\r\n <div class=\"title\">\r\n {{ 'order.history-payment-settled' | translate }}\r\n </div>\r\n {{ 'order.transaction-id' | translate }}: {{ getPayment(entry)?.transactionId }}\r\n <vdr-history-entry-detail *ngIf=\"getPayment(entry) as payment\">\r\n <vdr-payment-detail\r\n [payment]=\"payment\"\r\n [currencyCode]=\"order.currencyCode\"\r\n ></vdr-payment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-template #regularPaymentTransition>\r\n {{\r\n 'order.history-payment-transition'\r\n | translate\r\n : {\r\n from: entry.data.from,\r\n to: entry.data.to,\r\n id: getPayment(entry)?.transactionId\r\n }\r\n }}\r\n </ng-template>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_REFUND_TRANSITION\">\r\n {{\r\n 'order.history-refund-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to, id: entry.data.refundId }\r\n }}\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_CANCELLATION\">\r\n {{ 'order.history-items-cancelled' | translate: { count: entry.data.orderItemIds.length } }}\r\n <vdr-history-entry-detail *ngIf=\"getCancelledItems(entry) as items\">\r\n <vdr-labeled-data [label]=\"'order.cancellation-reason' | translate\">\r\n {{ entry.data.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.contents' | translate\">\r\n <vdr-simple-item-list [items]=\"items\"></vdr-simple-item-list>\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.shipping-cancelled' | translate\">\r\n {{ entry.data.shippingCancelled }}\r\n </vdr-labeled-data>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT\">\r\n {{ 'order.history-fulfillment-created' | translate }}\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_FULFILLMENT_TRANSITION\">\r\n <ng-container *ngIf=\"entry.data.to === 'Delivered'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-delivered' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to === 'Shipped'\">\r\n <div class=\"title\">\r\n {{ 'order.history-fulfillment-shipped' | translate }}\r\n </div>\r\n {{ 'order.tracking-code' | translate }}: {{ getFulfillment(entry)?.trackingCode }}\r\n </ng-container>\r\n <ng-container *ngIf=\"entry.data.to !== 'Delivered' && entry.data.to !== 'Shipped'\">\r\n {{\r\n 'order.history-fulfillment-transition'\r\n | translate: { from: entry.data.from, to: entry.data.to }\r\n }}\r\n </ng-container>\r\n <vdr-history-entry-detail *ngIf=\"getFulfillment(entry) as fulfillment\">\r\n <vdr-fulfillment-detail\r\n [fulfillmentId]=\"fulfillment.id\"\r\n [order]=\"order\"\r\n ></vdr-fulfillment-detail>\r\n </vdr-history-entry-detail>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_NOTE\">\r\n <div class=\"flex\">\r\n <div class=\"note-text\">\r\n <span *ngIf=\"entry.isPublic\" class=\"note-visibility public\">{{\r\n 'common.public' | translate\r\n }}</span>\r\n <span *ngIf=\"!entry.isPublic\" class=\"note-visibility private\">{{\r\n 'common.private' | translate\r\n }}</span>\r\n {{ entry.data.note }}\r\n </div>\r\n <div class=\"flex-spacer\"></div>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"updateNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"edit\"></clr-icon>\r\n {{ 'common.edit' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n class=\"button\"\r\n vdrDropdownItem\r\n (click)=\"deleteNote.emit(entry)\"\r\n [disabled]=\"!('UpdateOrder' | hasPermission)\"\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_APPLIED\">\r\n {{ 'order.history-coupon-code-applied' | translate }}:\r\n <vdr-chip>\r\n <a [routerLink]=\"['/marketing', 'promotions', entry.data.promotionId]\">{{\r\n entry.data.couponCode\r\n }}</a>\r\n </vdr-chip>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"type.ORDER_COUPON_REMOVED\">\r\n {{ 'order.history-coupon-code-removed' | translate }}:\r\n <vdr-chip\r\n ><span class=\"cancelled-coupon-code\">{{ entry.data.couponCode }}</span></vdr-chip\r\n >\r\n </ng-container>\r\n </ng-container>\r\n </vdr-timeline-entry>\r\n <vdr-timeline-entry [isLast]=\"true\" [createdAt]=\"order.createdAt\" [featured]=\"true\">\r\n <div class=\"title\">\r\n {{ 'order.history-order-created' | translate }}\r\n </div>\r\n </vdr-timeline-entry>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-payment-state-label',\r\n templateUrl: './payment-state-label.component.html',\r\n styleUrls: ['./payment-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class PaymentStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Authorized':\r\n return 'warning';\r\n case 'Settled':\r\n return 'success';\r\n case 'Declined':\r\n case 'Cancelled':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdr-refund-state-label',\r\n templateUrl: './refund-state-label.component.html',\r\n styleUrls: ['./refund-state-label.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class RefundStateLabelComponent {\r\n @Input() state: string;\r\n\r\n get chipColorType() {\r\n switch (this.state) {\r\n case 'Pending':\r\n return 'warning';\r\n case 'Settled':\r\n return 'success';\r\n case 'Failed':\r\n return 'error';\r\n }\r\n }\r\n}\r\n","<vdr-chip [title]=\"'order.payment-state' | translate\" [colorType]=\"chipColorType\">\r\n <clr-icon shape=\"check-circle\" *ngIf=\"state === 'Settled'\"></clr-icon>\r\n {{ state | stateI18nToken | translate }}\r\n</vdr-chip>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { CurrencyCode, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-order-payment-card',\r\n templateUrl: './order-payment-card.component.html',\r\n styleUrls: ['./order-payment-card.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderPaymentCardComponent {\r\n @Input() payment: Payment;\r\n @Input() currencyCode: CurrencyCode;\r\n @Output() settlePayment = new EventEmitter<Payment>();\r\n @Output() transitionPaymentState = new EventEmitter<{ payment: Payment; state: string }>();\r\n @Output() settleRefund = new EventEmitter<Payment['refunds'][number]>();\r\n\r\n refundHasMetadata(refund?: Payment['refunds'][number]): boolean {\r\n return !!refund && Object.keys(refund.metadata).length > 0;\r\n }\r\n\r\n nextOtherStates(): string[] {\r\n if (!this.payment) {\r\n return [];\r\n }\r\n return this.payment.nextStates.filter(s => s !== 'Settled' && s !== 'Error');\r\n }\r\n}\r\n","<div class=\"card\">\r\n <div class=\"card-header payment-header\">\r\n <div>\r\n {{ 'order.payment' | translate }}\r\n <ng-container *ngIf=\"payment.transactionId\">#{{ payment.transactionId }}</ng-container>\r\n </div>\r\n <div class=\"payment-state\">\r\n <vdr-payment-state-label [state]=\"payment.state\"></vdr-payment-state-label>\r\n </div>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-payment-detail [payment]=\"payment\" [currencyCode]=\"currencyCode\"></vdr-payment-detail>\r\n </div>\r\n <ng-container *ngFor=\"let refund of payment.refunds\">\r\n <div class=\"card-header payment-header\">\r\n <clr-icon shape=\"redo\" class=\"refund-icon\" dir=\"down\"></clr-icon>\r\n {{ 'order.refund' | translate }} #{{ refund.id }}\r\n <div class=\"clr-flex-fill\"></div>\r\n <vdr-refund-state-label [state]=\"refund.state\"></vdr-refund-state-label>\r\n </div>\r\n <div class=\"card-block\">\r\n <vdr-labeled-data [label]=\"'common.created-at' | translate\">\r\n {{ refund.createdAt | localeDate: 'medium' }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-total' | translate\">\r\n {{ refund.total | localeCurrency: currencyCode }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.transaction-id' | translate\" *ngIf=\"refund.transactionId\">\r\n {{ refund.transactionId }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-reason' | translate\" *ngIf=\"refund.reason\">\r\n {{ refund.reason }}\r\n </vdr-labeled-data>\r\n <vdr-labeled-data [label]=\"'order.refund-metadata' | translate\" *ngIf=\"refundHasMetadata(refund)\">\r\n <vdr-object-tree [value]=\"refund.metadata\"></vdr-object-tree>\r\n </vdr-labeled-data>\r\n </div>\r\n <div class=\"card-footer\" *ngIf=\"refund.state === 'Pending'\">\r\n <button class=\"btn btn-sm btn-primary\" (click)=\"settleRefund.emit(refund)\">\r\n {{ 'order.settle-refund' | translate }}\r\n </button>\r\n </div>\r\n </ng-container>\r\n <div class=\"card-footer\" *ngIf=\"payment.nextStates.length\">\r\n <button\r\n class=\"btn btn-sm btn-primary\"\r\n *ngIf=\"payment.nextStates.includes('Settled')\"\r\n (click)=\"settlePayment.emit(payment)\"\r\n >\r\n {{ 'order.settle-payment' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngFor=\"let nextState of nextOtherStates()\">\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionPaymentState.emit({ payment: payment, state: nextState })\"\r\n >\r\n <ng-container *ngIf=\"nextState !== 'Cancelled'; else cancel\">\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </ng-container>\r\n <ng-template #cancel>\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n {{ 'order.cancel-payment' | translate }}\r\n </ng-template>\r\n </button>\r\n </ng-container>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseDetailComponent,\r\n CancelOrderMutation,\r\n CustomFieldConfig,\r\n DataService,\r\n EditNoteDialogComponent,\r\n FulfillmentFragment,\r\n FulfillmentLineSummary,\r\n GetOrderHistoryQuery,\r\n GetOrderQuery,\r\n HistoryEntry,\r\n ModalService,\r\n NotificationService,\r\n Order,\r\n OrderDetailFragment,\r\n OrderLineFragment,\r\n Refund,\r\n RefundOrderMutation,\r\n ServerConfigService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { pick } from '@vendure/common/lib/pick';\r\nimport { assertNever, summate } from '@vendure/common/lib/shared-utils';\r\nimport { EMPTY, merge, Observable, of, Subject } from 'rxjs';\r\nimport { map, mapTo, startWith, switchMap, take } from 'rxjs/operators';\r\n\r\nimport { OrderTransitionService } from '../../providers/order-transition.service';\r\nimport { AddManualPaymentDialogComponent } from '../add-manual-payment-dialog/add-manual-payment-dialog.component';\r\nimport { CancelOrderDialogComponent } from '../cancel-order-dialog/cancel-order-dialog.component';\r\nimport { FulfillOrderDialogComponent } from '../fulfill-order-dialog/fulfill-order-dialog.component';\r\nimport { OrderProcessGraphDialogComponent } from '../order-process-graph-dialog/order-process-graph-dialog.component';\r\nimport { RefundOrderDialogComponent } from '../refund-order-dialog/refund-order-dialog.component';\r\nimport { SettleRefundDialogComponent } from '../settle-refund-dialog/settle-refund-dialog.component';\r\n\r\ntype Payment = NonNullable<OrderDetailFragment['payments']>[number];\r\n\r\n@Component({\r\n selector: 'vdr-order-detail',\r\n templateUrl: './order-detail.component.html',\r\n styleUrls: ['./order-detail.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderDetailComponent\r\n extends BaseDetailComponent<OrderDetailFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n detailForm = new FormGroup({});\r\n history$: Observable<NonNullable<GetOrderHistoryQuery['order']>['history']['items'] | undefined>;\r\n nextStates$: Observable<string[]>;\r\n fetchHistory = new Subject<void>();\r\n customFields: CustomFieldConfig[];\r\n orderLineCustomFields: CustomFieldConfig[];\r\n private readonly defaultStates = [\r\n 'AddingItems',\r\n 'ArrangingPayment',\r\n 'PaymentAuthorized',\r\n 'PaymentSettled',\r\n 'PartiallyShipped',\r\n 'Shipped',\r\n 'PartiallyDelivered',\r\n 'Delivered',\r\n 'Cancelled',\r\n 'Modifying',\r\n 'ArrangingAdditionalPayment',\r\n ];\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private orderTransitionService: OrderTransitionService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n }\r\n\r\n ngOnInit() {\r\n this.init();\r\n this.entity$.pipe(take(1)).subscribe(order => {\r\n if (order.state === 'Modifying') {\r\n this.router.navigate(['./', 'modify'], { relativeTo: this.route });\r\n }\r\n });\r\n this.customFields = this.getCustomFieldConfig('Order');\r\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\r\n this.history$ = this.fetchHistory.pipe(\r\n startWith(null),\r\n switchMap(() => {\r\n return this.dataService.order\r\n .getOrderHistory(this.id, {\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n })\r\n .mapStream(data => data.order?.history.items);\r\n }),\r\n );\r\n this.nextStates$ = this.entity$.pipe(\r\n map(order => {\r\n const isInCustomState = !this.defaultStates.includes(order.state);\r\n return isInCustomState\r\n ? order.nextStates\r\n : order.nextStates.filter(s => !this.defaultStates.includes(s));\r\n }),\r\n );\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy();\r\n }\r\n\r\n openStateDiagram() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order =>\r\n this.modalService.fromComponent(OrderProcessGraphDialogComponent, {\r\n closable: true,\r\n locals: {\r\n activeState: order.state,\r\n },\r\n }),\r\n ),\r\n )\r\n .subscribe();\r\n }\r\n\r\n transitionToState(state: string) {\r\n this.dataService.order.transitionToState(this.id, state).subscribe(({ transitionOrderToState }) => {\r\n switch (transitionOrderToState?.__typename) {\r\n case 'Order':\r\n this.notificationService.success(_('order.transitioned-to-state-success'), { state });\r\n this.fetchHistory.next();\r\n break;\r\n case 'OrderStateTransitionError':\r\n this.notificationService.error(transitionOrderToState.transitionError);\r\n }\r\n });\r\n }\r\n\r\n manuallyTransitionToState(order: OrderDetailFragment) {\r\n this.orderTransitionService\r\n .manuallyTransitionToState({\r\n orderId: order.id,\r\n nextStates: order.nextStates,\r\n cancellable: true,\r\n message: _('order.manually-transition-to-state-message'),\r\n retry: 0,\r\n })\r\n .subscribe();\r\n }\r\n\r\n transitionToModifying() {\r\n this.dataService.order\r\n .transitionToState(this.id, 'Modifying')\r\n .subscribe(({ transitionOrderToState }) => {\r\n switch (transitionOrderToState?.__typename) {\r\n case 'Order':\r\n this.router.navigate(['./modify'], { relativeTo: this.route });\r\n break;\r\n case 'OrderStateTransitionError':\r\n this.notificationService.error(transitionOrderToState.transitionError);\r\n }\r\n });\r\n }\r\n\r\n updateCustomFields(customFieldsValue: any) {\r\n this.dataService.order\r\n .updateOrderCustomFields({\r\n id: this.id,\r\n customFields: customFieldsValue,\r\n })\r\n .subscribe(() => {\r\n this.notificationService.success(_('common.notify-update-success'), { entity: 'Order' });\r\n });\r\n }\r\n\r\n getOrderAddressLines(orderAddress?: { [key: string]: string }): string[] {\r\n if (!orderAddress) {\r\n return [];\r\n }\r\n return Object.values(orderAddress)\r\n .filter(val => val !== 'OrderAddress')\r\n .filter(line => !!line);\r\n }\r\n\r\n settlePayment(payment: Payment) {\r\n this.dataService.order.settlePayment(payment.id).subscribe(({ settlePayment }) => {\r\n switch (settlePayment.__typename) {\r\n case 'Payment':\r\n if (settlePayment.state === 'Settled') {\r\n this.notificationService.success(_('order.settle-payment-success'));\r\n } else {\r\n this.notificationService.error(_('order.settle-payment-error'));\r\n }\r\n this.dataService.order.getOrder(this.id).single$.subscribe();\r\n this.fetchHistory.next();\r\n break;\r\n case 'OrderStateTransitionError':\r\n case 'PaymentStateTransitionError':\r\n case 'SettlePaymentError':\r\n this.notificationService.error(settlePayment.message);\r\n }\r\n });\r\n }\r\n\r\n transitionPaymentState({ payment, state }: { payment: Payment; state: string }) {\r\n if (state === 'Cancelled') {\r\n this.dataService.order.cancelPayment(payment.id).subscribe(({ cancelPayment }) => {\r\n switch (cancelPayment.__typename) {\r\n case 'Payment':\r\n this.notificationService.success(_('order.transitioned-payment-to-state-success'), {\r\n state,\r\n });\r\n this.dataService.order.getOrder(this.id).single$.subscribe();\r\n this.fetchHistory.next();\r\n break;\r\n case 'PaymentStateTransitionError':\r\n this.notificationService.error(cancelPayment.transitionError);\r\n break;\r\n case 'CancelPaymentError':\r\n this.notificationService.error(cancelPayment.paymentErrorMessage);\r\n break;\r\n }\r\n });\r\n } else {\r\n this.dataService.order\r\n .transitionPaymentToState(payment.id, state)\r\n .subscribe(({ transitionPaymentToState }) => {\r\n switch (transitionPaymentToState.__typename) {\r\n case 'Payment':\r\n this.notificationService.success(\r\n _('order.transitioned-payment-to-state-success'),\r\n {\r\n state,\r\n },\r\n );\r\n this.dataService.order.getOrder(this.id).single$.subscribe();\r\n this.fetchHistory.next();\r\n break;\r\n case 'PaymentStateTransitionError':\r\n this.notificationService.error(transitionPaymentToState.message);\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n canAddFulfillment(order: OrderDetailFragment): boolean {\r\n const allFulfillmentSummaryRows: FulfillmentFragment['summary'] = (order.fulfillments ?? []).reduce(\r\n (all, fulfillment) => [...all, ...fulfillment.summary],\r\n [] as FulfillmentFragment['summary'],\r\n );\r\n let allItemsFulfilled = true;\r\n for (const line of order.lines) {\r\n const totalFulfilledCount = allFulfillmentSummaryRows\r\n .filter(row => row.orderLine.id === line.id)\r\n .reduce((sum, row) => sum + row.quantity, 0);\r\n if (totalFulfilledCount < line.quantity) {\r\n allItemsFulfilled = false;\r\n }\r\n }\r\n return (\r\n !allItemsFulfilled &&\r\n !this.hasUnsettledModifications(order) &&\r\n this.outstandingPaymentAmount(order) === 0 &&\r\n (order.nextStates.includes('Shipped') ||\r\n order.nextStates.includes('PartiallyShipped') ||\r\n order.nextStates.includes('Delivered'))\r\n );\r\n }\r\n\r\n hasUnsettledModifications(order: OrderDetailFragment): boolean {\r\n return 0 < order.modifications.filter(m => !m.isSettled).length;\r\n }\r\n\r\n getOutstandingModificationAmount(order: OrderDetailFragment): number {\r\n return summate(\r\n order.modifications.filter(m => !m.isSettled),\r\n 'priceChange',\r\n );\r\n }\r\n\r\n outstandingPaymentAmount(order: OrderDetailFragment): number {\r\n const paymentIsValid = (p: Payment): boolean =>\r\n p.state !== 'Cancelled' && p.state !== 'Declined' && p.state !== 'Error';\r\n\r\n let amountCovered = 0;\r\n for (const payment of order.payments?.filter(paymentIsValid) ?? []) {\r\n const refunds = payment.refunds.filter(r => r.state !== 'Failed') ?? [];\r\n const refundsTotal = summate(refunds as Array<Required<Refund>>, 'total');\r\n amountCovered += payment.amount - refundsTotal;\r\n }\r\n return order.totalWithTax - amountCovered;\r\n }\r\n\r\n addManualPayment(order: OrderDetailFragment) {\r\n const priorState = order.state;\r\n this.modalService\r\n .fromComponent(AddManualPaymentDialogComponent, {\r\n closable: true,\r\n locals: {\r\n outstandingAmount: this.outstandingPaymentAmount(order),\r\n currencyCode: order.currencyCode,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.order.addManualPaymentToOrder({\r\n orderId: this.id,\r\n transactionId: result.transactionId,\r\n method: result.method,\r\n metadata: result.metadata || {},\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n switchMap(({ addManualPaymentToOrder }) => {\r\n switch (addManualPaymentToOrder.__typename) {\r\n case 'Order':\r\n this.notificationService.success(_('order.add-payment-to-order-success'));\r\n if (priorState === 'ArrangingAdditionalPayment') {\r\n return this.orderTransitionService.transitionToPreModifyingState(\r\n order.id,\r\n order.nextStates,\r\n );\r\n } else {\r\n return this.dataService.order\r\n .transitionToState(this.id, 'PaymentSettled')\r\n .pipe(mapTo('PaymentSettled'));\r\n }\r\n case 'ManualPaymentStateError':\r\n this.notificationService.error(addManualPaymentToOrder.message);\r\n return EMPTY;\r\n default:\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.refetchOrder({ result });\r\n }\r\n });\r\n }\r\n\r\n fulfillOrder() {\r\n this.entity$\r\n .pipe(\r\n take(1),\r\n switchMap(order => {\r\n return this.modalService.fromComponent(FulfillOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n });\r\n }),\r\n switchMap(input => {\r\n if (input) {\r\n return this.dataService.order.createFulfillment(input);\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n switchMap(result => this.refetchOrder(result).pipe(mapTo(result))),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n const { addFulfillmentToOrder } = result;\r\n switch (addFulfillmentToOrder.__typename) {\r\n case 'Fulfillment':\r\n this.notificationService.success(_('order.create-fulfillment-success'));\r\n break;\r\n case 'EmptyOrderLineSelectionError':\r\n case 'InsufficientStockOnHandError':\r\n case 'ItemsAlreadyFulfilledError':\r\n case 'InvalidFulfillmentHandlerError':\r\n this.notificationService.error(addFulfillmentToOrder.message);\r\n break;\r\n case 'FulfillmentStateTransitionError':\r\n this.notificationService.error(addFulfillmentToOrder.transitionError);\r\n break;\r\n case 'CreateFulfillmentError':\r\n this.notificationService.error(addFulfillmentToOrder.fulfillmentHandlerError);\r\n break;\r\n case undefined:\r\n this.notificationService.error(JSON.stringify(addFulfillmentToOrder));\r\n break;\r\n default:\r\n assertNever(addFulfillmentToOrder);\r\n }\r\n }\r\n });\r\n }\r\n\r\n transitionFulfillment(id: string, state: string) {\r\n this.dataService.order\r\n .transitionFulfillmentToState(id, state)\r\n .pipe(switchMap(result => this.refetchOrder(result)))\r\n .subscribe(() => {\r\n this.notificationService.success(_('order.successfully-updated-fulfillment'));\r\n });\r\n }\r\n\r\n cancelOrRefund(order: OrderDetailFragment) {\r\n const isRefundable = this.orderHasSettledPayments(order);\r\n if (order.state === 'PaymentAuthorized' || order.active === true || !isRefundable) {\r\n this.cancelOrder(order);\r\n } else {\r\n this.refundOrder(order);\r\n }\r\n }\r\n\r\n settleRefund(refund: Payment['refunds'][number]) {\r\n this.modalService\r\n .fromComponent(SettleRefundDialogComponent, {\r\n size: 'md',\r\n locals: {\r\n refund,\r\n },\r\n })\r\n .pipe(\r\n switchMap(transactionId => {\r\n if (transactionId) {\r\n return this.dataService.order.settleRefund(\r\n {\r\n transactionId,\r\n id: refund.id,\r\n },\r\n this.id,\r\n );\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n // switchMap(result => this.refetchOrder(result)),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.notificationService.success(_('order.settle-refund-success'));\r\n }\r\n });\r\n }\r\n\r\n addNote(event: { note: string; isPublic: boolean }) {\r\n const { note, isPublic } = event;\r\n this.dataService.order\r\n .addNoteToOrder({\r\n id: this.id,\r\n note,\r\n isPublic,\r\n })\r\n .pipe(switchMap(result => this.refetchOrder(result)))\r\n .subscribe(result => {\r\n this.notificationService.success(_('common.notify-create-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n updateNote(entry: HistoryEntry) {\r\n this.modalService\r\n .fromComponent(EditNoteDialogComponent, {\r\n closable: true,\r\n locals: {\r\n displayPrivacyControls: true,\r\n note: entry.data.note,\r\n noteIsPrivate: !entry.isPublic,\r\n },\r\n })\r\n .pipe(\r\n switchMap(result => {\r\n if (result) {\r\n return this.dataService.order.updateOrderNote({\r\n noteId: entry.id,\r\n isPublic: !result.isPrivate,\r\n note: result.note,\r\n });\r\n } else {\r\n return EMPTY;\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-update-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n deleteNote(entry: HistoryEntry) {\r\n return this.modalService\r\n .dialog({\r\n title: _('common.confirm-delete-note'),\r\n body: entry.data.note,\r\n buttons: [\r\n { type: 'secondary', label: _('common.cancel') },\r\n { type: 'danger', label: _('common.delete'), returnValue: true },\r\n ],\r\n })\r\n .pipe(switchMap(res => (res ? this.dataService.order.deleteOrderNote(entry.id) : EMPTY)))\r\n .subscribe(() => {\r\n this.fetchHistory.next();\r\n this.notificationService.success(_('common.notify-delete-success'), {\r\n entity: 'Note',\r\n });\r\n });\r\n }\r\n\r\n orderHasSettledPayments(order: OrderDetailFragment): boolean {\r\n return !!order.payments?.find(p => p.state === 'Settled');\r\n }\r\n\r\n private cancelOrder(order: OrderDetailFragment) {\r\n this.modalService\r\n .fromComponent(CancelOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n })\r\n .pipe(\r\n switchMap(input => {\r\n if (input) {\r\n return this.dataService.order.cancelOrder(input);\r\n } else {\r\n return of(undefined);\r\n }\r\n }),\r\n switchMap(result => this.refetchOrder(result)),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.notificationService.success(_('order.cancelled-order-success'));\r\n }\r\n });\r\n }\r\n\r\n private refundOrder(order: OrderDetailFragment) {\r\n this.modalService\r\n .fromComponent(RefundOrderDialogComponent, {\r\n size: 'xl',\r\n locals: {\r\n order,\r\n },\r\n })\r\n .pipe(\r\n switchMap(input => {\r\n if (!input) {\r\n return of(undefined);\r\n }\r\n\r\n if (input.cancel.lines?.length) {\r\n return this.dataService.order.cancelOrder(input.cancel).pipe(\r\n map(res => {\r\n const result = res.cancelOrder;\r\n switch (result.__typename) {\r\n case 'Order':\r\n this.refetchOrder(result).subscribe();\r\n this.notificationService.success(_('order.cancelled-order-success'));\r\n return input;\r\n case 'CancelActiveOrderError':\r\n case 'QuantityTooGreatError':\r\n case 'MultipleOrderError':\r\n case 'OrderStateTransitionError':\r\n case 'EmptyOrderLineSelectionError':\r\n this.notificationService.error(result.message);\r\n return undefined;\r\n }\r\n }),\r\n );\r\n } else {\r\n return [input];\r\n }\r\n }),\r\n switchMap(input => {\r\n if (!input) {\r\n return of(undefined);\r\n }\r\n if (input.refund.lines.length) {\r\n return this.dataService.order\r\n .refundOrder(input.refund)\r\n .pipe(map(res => res.refundOrder));\r\n } else {\r\n return [undefined];\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n switch (result.__typename) {\r\n case 'Refund':\r\n this.refetchOrder(result).subscribe();\r\n if (result.state === 'Failed') {\r\n this.notificationService.error(_('order.refund-order-failed'));\r\n } else {\r\n this.notificationService.success(_('order.refund-order-success'));\r\n }\r\n break;\r\n case 'AlreadyRefundedError':\r\n case 'NothingToRefundError':\r\n case 'PaymentOrderMismatchError':\r\n case 'RefundOrderStateError':\r\n case 'RefundStateTransitionError':\r\n this.notificationService.error(result.message);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n\r\n private refetchOrder(result: object | undefined): Observable<GetOrderQuery | undefined> {\r\n this.fetchHistory.next();\r\n if (result) {\r\n return this.dataService.order.getOrder(this.id).single$;\r\n } else {\r\n return of(undefined);\r\n }\r\n }\r\n\r\n protected setFormValues(entity: OrderDetailFragment): void {\r\n // empty\r\n }\r\n}\r\n","<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\">\r\n <button\r\n class=\"icon-button\"\r\n (click)=\"openStateDiagram()\"\r\n [title]=\"'order.order-state-diagram' | translate\"\r\n >\r\n <clr-icon shape=\"list\"></clr-icon>\r\n </button>\r\n </vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-detail\"></vdr-action-bar-items>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n (order.state === 'ArrangingPayment' || order.state === 'ArrangingAdditionalPayment') &&\r\n (hasUnsettledModifications(order) || 0 < outstandingPaymentAmount(order))\r\n \"\r\n (click)=\"addManualPayment(order)\"\r\n >\r\n {{ 'order.add-payment-to-order' | translate }}\r\n ({{ outstandingPaymentAmount(order) | localeCurrency: order.currencyCode }})\r\n </button>\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"\r\n order.active === false &&\r\n order.state !== 'ArrangingAdditionalPayment' &&\r\n order.state !== 'ArrangingPayment' &&\r\n 0 < outstandingPaymentAmount(order)\r\n \"\r\n (click)=\"transitionToState('ArrangingAdditionalPayment')\"\r\n >\r\n {{ 'order.arrange-additional-payment' | translate }}\r\n </button>\r\n <button class=\"btn btn-primary\" (click)=\"fulfillOrder()\" [disabled]=\"!canAddFulfillment(order)\">\r\n {{ 'order.fulfill-order' | translate }}\r\n </button>\r\n <vdr-dropdown>\r\n <button class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <ng-container *ngIf=\"order.nextStates.includes('Modifying')\">\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"transitionToModifying()\">\r\n <clr-icon shape=\"pencil\"></clr-icon>\r\n {{ 'order.modify-order' | translate }}\r\n </button>\r\n <div class=\"dropdown-divider\"></div>\r\n </ng-container>\r\n <button\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n *ngIf=\"order.nextStates.includes('Cancelled')\"\r\n (click)=\"cancelOrRefund(order)\"\r\n >\r\n <clr-icon shape=\"error-standard\" class=\"is-error\"></clr-icon>\r\n <ng-container *ngIf=\"orderHasSettledPayments(order); else cancelOnly\">\r\n {{ 'order.refund-and-cancel-order' | translate }}\r\n </ng-container>\r\n <ng-template #cancelOnly>\r\n {{ 'order.cancel-order' | translate }}\r\n </ng-template>\r\n </button>\r\n\r\n <ng-container *ngIf=\"(nextStates$ | async)?.length\">\r\n <div class=\"dropdown-divider\"></div>\r\n <button\r\n *ngFor=\"let nextState of nextStates$ | async\"\r\n type=\"button\"\r\n class=\"btn\"\r\n vdrDropdownItem\r\n (click)=\"transitionToState(nextState)\"\r\n >\r\n <clr-icon shape=\"step-forward-2\"></clr-icon>\r\n {{\r\n 'order.transition-to-state'\r\n | translate: { state: (nextState | stateI18nToken | translate) }\r\n }}\r\n </button>\r\n </ng-container>\r\n <div class=\"dropdown-divider\"></div>\r\n <button type=\"button\" class=\"btn\" vdrDropdownItem (click)=\"manuallyTransitionToState(order)\">\r\n <clr-icon shape=\"step-forward-2\" class=\"is-warning\"></clr-icon>\r\n {{ 'order.manually-transition-to-state' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <vdr-order-table\r\n [order]=\"order\"\r\n [orderLineCustomFields]=\"orderLineCustomFields\"\r\n ></vdr-order-table>\r\n <h4>{{ 'order.tax-summary' | translate }}</h4>\r\n <table class=\"table\">\r\n <thead>\r\n <tr>\r\n <th>{{ 'common.description' | translate }}</th>\r\n <th>{{ 'order.tax-rate' | translate }}</th>\r\n <th>{{ 'order.tax-base' | translate }}</th>\r\n <th>{{ 'order.tax-total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of order.taxSummary\">\r\n <td>{{ row.description }}</td>\r\n <td>{{ row.taxRate / 100 | percent }}</td>\r\n <td>{{ row.taxBase | localeCurrency: order.currencyCode }}</td>\r\n <td>{{ row.taxTotal | localeCurrency: order.currencyCode }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"order-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-order-history\r\n [order]=\"order\"\r\n [history]=\"history$ | async\"\r\n (addNote)=\"addNote($event)\"\r\n (updateNote)=\"updateNote($event)\"\r\n (deleteNote)=\"deleteNote($event)\"\r\n ></vdr-order-history>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <vdr-order-custom-fields-card\r\n [customFieldsConfig]=\"customFields\"\r\n [customFieldValues]=\"order.customFields\"\r\n (updateClick)=\"updateCustomFields($event)\"\r\n ></vdr-order-custom-fields-card>\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.customer' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <div class=\"card-text\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n <h6 *ngIf=\"getOrderAddressLines(order.shippingAddress).length\">\r\n {{ 'order.shipping-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.shippingAddress\"></vdr-formatted-address>\r\n <h6 *ngIf=\"getOrderAddressLines(order.billingAddress).length\">\r\n {{ 'order.billing-address' | translate }}\r\n </h6>\r\n <vdr-formatted-address [address]=\"order.billingAddress\"></vdr-formatted-address>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"order.payments && order.payments.length\">\r\n <vdr-order-payment-card\r\n *ngFor=\"let payment of order.payments\"\r\n [currencyCode]=\"order.currencyCode\"\r\n [payment]=\"payment\"\r\n (settlePayment)=\"settlePayment($event)\"\r\n (transitionPaymentState)=\"transitionPaymentState($event)\"\r\n (settleRefund)=\"settleRefund($event)\"\r\n ></vdr-order-payment-card>\r\n </ng-container>\r\n <ng-container *ngFor=\"let fulfillment of order.fulfillments\">\r\n <vdr-fulfillment-card\r\n [fulfillment]=\"fulfillment\"\r\n [order]=\"order\"\r\n (transitionState)=\"transitionFulfillment(fulfillment.id, $event)\"\r\n ></vdr-fulfillment-card>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { CustomFieldConfig, Dialog, ModifyOrderInput, OrderDetailFragment } from '@vendure/admin-ui/core';\r\n\r\nexport enum OrderEditResultType {\r\n Refund,\r\n Payment,\r\n PriceUnchanged,\r\n Cancel,\r\n}\r\n\r\ninterface OrderEditsRefundResult {\r\n result: OrderEditResultType.Refund;\r\n refundPaymentId: string;\r\n refundNote?: string;\r\n}\r\ninterface OrderEditsPaymentResult {\r\n result: OrderEditResultType.Payment;\r\n}\r\ninterface OrderEditsPriceUnchangedResult {\r\n result: OrderEditResultType.PriceUnchanged;\r\n}\r\ninterface OrderEditsCancelResult {\r\n result: OrderEditResultType.Cancel;\r\n}\r\ntype OrderEditResult =\r\n | OrderEditsRefundResult\r\n | OrderEditsPaymentResult\r\n | OrderEditsPriceUnchangedResult\r\n | OrderEditsCancelResult;\r\n\r\n@Component({\r\n selector: 'vdr-order-edits-preview-dialog',\r\n templateUrl: './order-edits-preview-dialog.component.html',\r\n styleUrls: ['./order-edits-preview-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderEditsPreviewDialogComponent implements OnInit, Dialog<OrderEditResult> {\r\n // Passed in via the modalService\r\n order: OrderDetailFragment;\r\n originalTotalWithTax: number;\r\n orderLineCustomFields: CustomFieldConfig[];\r\n modifyOrderInput: ModifyOrderInput;\r\n\r\n selectedPayment?: NonNullable<OrderDetailFragment['payments']>[number];\r\n refundNote: string;\r\n resolveWith: (result?: OrderEditResult) => void;\r\n\r\n get priceDifference(): number {\r\n return this.order.totalWithTax - this.originalTotalWithTax;\r\n }\r\n\r\n ngOnInit() {\r\n this.refundNote = this.modifyOrderInput.note || '';\r\n }\r\n\r\n cancel() {\r\n this.resolveWith({\r\n result: OrderEditResultType.Cancel,\r\n });\r\n }\r\n\r\n submit() {\r\n if (0 < this.priceDifference) {\r\n this.resolveWith({\r\n result: OrderEditResultType.Payment,\r\n });\r\n } else if (this.priceDifference < 0) {\r\n this.resolveWith({\r\n result: OrderEditResultType.Refund,\r\n // tslint:disable-next-line:no-non-null-assertion\r\n refundPaymentId: this.selectedPayment!.id,\r\n refundNote: this.refundNote,\r\n });\r\n } else {\r\n this.resolveWith({\r\n result: OrderEditResultType.PriceUnchanged,\r\n });\r\n }\r\n }\r\n}\r\n","<ng-template vdrDialogTitle>{{ 'order.confirm-modifications' | translate }}</ng-template>\r\n<vdr-order-table [order]=\"order\" [orderLineCustomFields]=\"orderLineCustomFields\"></vdr-order-table>\r\n\r\n<h4 class=\"h4\">\r\n {{ 'order.modify-order-price-difference' | translate }}:\r\n <strong>{{ priceDifference | localeCurrency: order.currencyCode }}</strong>\r\n</h4>\r\n<div *ngIf=\"priceDifference < 0\">\r\n<clr-select-container>\r\n <label>{{ 'order.payment-to-refund' | translate }}</label>\r\n <select clrSelect name=\"options\" [(ngModel)]=\"selectedPayment\">\r\n <option\r\n *ngFor=\"let payment of order.payments\"\r\n [ngValue]=\"payment\"\r\n >\r\n #{{ payment.id }} {{ payment.method }}:\r\n {{ payment.amount | localeCurrency: order.currencyCode }}\r\n </option>\r\n </select>\r\n</clr-select-container>\r\n <label class=\"clr-control-label\">{{ 'order.refund-cancellation-reason' | translate }}</label>\r\n <textarea [(ngModel)]=\"refundNote\" name=\"refundNote\" clrTextarea required></textarea>\r\n</div>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"submit()\" [disabled]=\"priceDifference < 0 && !selectedPayment\" class=\"btn btn-primary\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { FormArray, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport {\r\n AddItemInput,\r\n AdjustOrderLineInput,\r\n BaseDetailComponent,\r\n CustomFieldConfig,\r\n DataService,\r\n ErrorResult,\r\n GetAvailableCountriesQuery,\r\n HistoryEntryType,\r\n LanguageCode,\r\n ModalService,\r\n ModifyOrderInput,\r\n NotificationService,\r\n OrderAddressFragment,\r\n OrderDetailFragment,\r\n ProductSelectorSearchQuery,\r\n ServerConfigService,\r\n SortOrder,\r\n SurchargeInput,\r\n transformRelationCustomFieldInputs,\r\n} from '@vendure/admin-ui/core';\r\nimport { assertNever, notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { simpleDeepClone } from '@vendure/common/lib/simple-deep-clone';\r\nimport { concat, EMPTY, Observable, of, Subject } from 'rxjs';\r\nimport {\r\n distinctUntilChanged,\r\n map,\r\n mapTo,\r\n shareReplay,\r\n startWith,\r\n switchMap,\r\n takeUntil,\r\n} from 'rxjs/operators';\r\n\r\nimport { OrderTransitionService } from '../../providers/order-transition.service';\r\nimport {\r\n OrderEditResultType,\r\n OrderEditsPreviewDialogComponent,\r\n} from '../order-edits-preview-dialog/order-edits-preview-dialog.component';\r\n\r\ntype ProductSelectorItem = ProductSelectorSearchQuery['search']['items'][number];\r\n\r\ninterface AddedLine {\r\n productVariantId: string;\r\n productAsset?: ProductSelectorItem['productAsset'] | null;\r\n productVariantName: string;\r\n sku: string;\r\n priceWithTax: number;\r\n price: number;\r\n quantity: number;\r\n}\r\n\r\ntype ModifyOrderData = Omit<ModifyOrderInput, 'addItems' | 'adjustOrderLines'> & {\r\n addItems: Array<AddItemInput & { customFields?: any }>;\r\n adjustOrderLines: Array<AdjustOrderLineInput & { customFields?: any }>;\r\n};\r\n\r\n@Component({\r\n selector: 'vdr-order-editor',\r\n templateUrl: './order-editor.component.html',\r\n styleUrls: ['./order-editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderEditorComponent\r\n extends BaseDetailComponent<OrderDetailFragment>\r\n implements OnInit, OnDestroy\r\n{\r\n availableCountries$: Observable<GetAvailableCountriesQuery['countries']['items']>;\r\n addressCustomFields: CustomFieldConfig[];\r\n detailForm = new FormGroup({});\r\n couponCodesControl = new FormControl();\r\n orderLineCustomFieldsFormArray: FormArray;\r\n addItemCustomFieldsFormArray: FormArray;\r\n addItemCustomFieldsForm: FormGroup;\r\n addItemSelectedVariant: ProductSelectorItem | undefined;\r\n orderLineCustomFields: CustomFieldConfig[];\r\n modifyOrderInput: ModifyOrderData = {\r\n dryRun: true,\r\n orderId: '',\r\n addItems: [],\r\n adjustOrderLines: [],\r\n surcharges: [],\r\n note: '',\r\n updateShippingAddress: {},\r\n updateBillingAddress: {},\r\n };\r\n surchargeForm: FormGroup;\r\n shippingAddressForm: FormGroup;\r\n billingAddressForm: FormGroup;\r\n note = '';\r\n recalculateShipping = true;\r\n previousState: string;\r\n private addedVariants = new Map<string, ProductSelectorItem>();\r\n\r\n constructor(\r\n router: Router,\r\n route: ActivatedRoute,\r\n serverConfigService: ServerConfigService,\r\n private changeDetector: ChangeDetectorRef,\r\n protected dataService: DataService,\r\n private notificationService: NotificationService,\r\n private modalService: ModalService,\r\n private orderTransitionService: OrderTransitionService,\r\n ) {\r\n super(route, router, serverConfigService, dataService);\r\n }\r\n\r\n get addedLines(): AddedLine[] {\r\n const getSinglePriceValue = (price: ProductSelectorItem['price']) =>\r\n price.__typename === 'SinglePrice' ? price.value : 0;\r\n return (this.modifyOrderInput.addItems || [])\r\n .map(row => {\r\n const variantInfo = this.addedVariants.get(row.productVariantId);\r\n if (variantInfo) {\r\n return {\r\n ...variantInfo,\r\n price: getSinglePriceValue(variantInfo.price),\r\n priceWithTax: getSinglePriceValue(variantInfo.priceWithTax),\r\n quantity: row.quantity,\r\n };\r\n }\r\n })\r\n .filter(notNullOrUndefined);\r\n }\r\n\r\n ngOnInit(): void {\r\n this.init();\r\n this.addressCustomFields = this.getCustomFieldConfig('Address');\r\n this.modifyOrderInput.orderId = this.route.snapshot.paramMap.get('id') as string;\r\n this.orderLineCustomFields = this.getCustomFieldConfig('OrderLine');\r\n this.entity$.pipe(takeUntil(this.destroy$)).subscribe(order => {\r\n if (order.couponCodes.length) {\r\n this.couponCodesControl.setValue(order.couponCodes);\r\n }\r\n this.surchargeForm = new FormGroup({\r\n description: new FormControl('', Validators.required),\r\n sku: new FormControl(''),\r\n price: new FormControl(0, Validators.required),\r\n priceIncludesTax: new FormControl(true),\r\n taxRate: new FormControl(0),\r\n taxDescription: new FormControl(''),\r\n });\r\n if (!this.shippingAddressForm) {\r\n this.shippingAddressForm = new FormGroup({\r\n fullName: new FormControl(order.shippingAddress?.fullName),\r\n company: new FormControl(order.shippingAddress?.company),\r\n streetLine1: new FormControl(order.shippingAddress?.streetLine1),\r\n streetLine2: new FormControl(order.shippingAddress?.streetLine2),\r\n city: new FormControl(order.shippingAddress?.city),\r\n province: new FormControl(order.shippingAddress?.province),\r\n postalCode: new FormControl(order.shippingAddress?.postalCode),\r\n countryCode: new FormControl(order.shippingAddress?.countryCode),\r\n phoneNumber: new FormControl(order.shippingAddress?.phoneNumber),\r\n });\r\n this.addAddressCustomFieldsFormGroup(this.shippingAddressForm, order.shippingAddress);\r\n }\r\n if (!this.billingAddressForm) {\r\n this.billingAddressForm = new FormGroup({\r\n fullName: new FormControl(order.billingAddress?.fullName),\r\n company: new FormControl(order.billingAddress?.company),\r\n streetLine1: new FormControl(order.billingAddress?.streetLine1),\r\n streetLine2: new FormControl(order.billingAddress?.streetLine2),\r\n city: new FormControl(order.billingAddress?.city),\r\n province: new FormControl(order.billingAddress?.province),\r\n postalCode: new FormControl(order.billingAddress?.postalCode),\r\n countryCode: new FormControl(order.billingAddress?.countryCode),\r\n phoneNumber: new FormControl(order.billingAddress?.phoneNumber),\r\n });\r\n this.addAddressCustomFieldsFormGroup(this.billingAddressForm, order.billingAddress);\r\n }\r\n this.orderLineCustomFieldsFormArray = new FormArray([]);\r\n for (const line of order.lines) {\r\n const formGroup = new FormGroup({});\r\n for (const { name } of this.orderLineCustomFields) {\r\n formGroup.addControl(name, new FormControl((line as any).customFields[name]));\r\n }\r\n formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\r\n let modifyRow = this.modifyOrderInput.adjustOrderLines.find(\r\n l => l.orderLineId === line.id,\r\n );\r\n if (!modifyRow) {\r\n modifyRow = {\r\n orderLineId: line.id,\r\n quantity: line.quantity,\r\n };\r\n this.modifyOrderInput.adjustOrderLines.push(modifyRow);\r\n }\r\n if (this.orderLineCustomFields.length) {\r\n modifyRow.customFields = value;\r\n }\r\n });\r\n this.orderLineCustomFieldsFormArray.push(formGroup);\r\n }\r\n });\r\n\r\n this.addItemCustomFieldsFormArray = new FormArray([]);\r\n this.addItemCustomFieldsForm = new FormGroup({});\r\n for (const customField of this.orderLineCustomFields) {\r\n this.addItemCustomFieldsForm.addControl(customField.name, new FormControl());\r\n }\r\n this.availableCountries$ = this.dataService.settings\r\n .getAvailableCountries()\r\n .mapSingle(result => result.countries.items)\r\n .pipe(shareReplay(1));\r\n this.dataService.order\r\n .getOrderHistory(this.id, {\r\n take: 1,\r\n sort: {\r\n createdAt: SortOrder.DESC,\r\n },\r\n filter: { type: { eq: HistoryEntryType.ORDER_STATE_TRANSITION } },\r\n })\r\n .single$.subscribe(({ order }) => {\r\n this.previousState = order?.history.items[0].data.from;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy();\r\n }\r\n\r\n transitionToPriorState(order: OrderDetailFragment) {\r\n this.orderTransitionService\r\n .transitionToPreModifyingState(order.id, order.nextStates)\r\n .subscribe(result => {\r\n this.router.navigate(['..'], { relativeTo: this.route });\r\n });\r\n }\r\n\r\n canPreviewChanges(): boolean {\r\n const { addItems, adjustOrderLines, surcharges } = this.modifyOrderInput;\r\n return (\r\n !!addItems?.length ||\r\n !!surcharges?.length ||\r\n !!adjustOrderLines?.length ||\r\n (this.shippingAddressForm.dirty && this.shippingAddressForm.valid) ||\r\n (this.billingAddressForm.dirty && this.billingAddressForm.valid) ||\r\n this.couponCodesControl.dirty\r\n );\r\n }\r\n\r\n isLineModified(line: OrderDetailFragment['lines'][number]): boolean {\r\n return !!this.modifyOrderInput.adjustOrderLines?.find(\r\n l => l.orderLineId === line.id && l.quantity !== line.quantity,\r\n );\r\n }\r\n\r\n updateLineQuantity(line: OrderDetailFragment['lines'][number], quantity: string) {\r\n const { adjustOrderLines } = this.modifyOrderInput;\r\n let row = adjustOrderLines?.find(l => l.orderLineId === line.id);\r\n if (row && +quantity === line.quantity) {\r\n // Remove the modification if the quantity is the same as\r\n // the original order\r\n adjustOrderLines?.splice(adjustOrderLines?.indexOf(row), 1);\r\n }\r\n if (!row) {\r\n row = { orderLineId: line.id, quantity: +quantity };\r\n adjustOrderLines?.push(row);\r\n }\r\n row.quantity = +quantity;\r\n }\r\n\r\n updateAddedItemQuantity(item: AddedLine, quantity: string) {\r\n const row = this.modifyOrderInput.addItems?.find(l => l.productVariantId === item.productVariantId);\r\n if (row) {\r\n row.quantity = +quantity;\r\n }\r\n }\r\n\r\n trackByProductVariantId(index: number, item: AddedLine) {\r\n return item.productVariantId;\r\n }\r\n\r\n getSelectedItemPrice(result: ProductSelectorItem | undefined): number {\r\n switch (result?.priceWithTax.__typename) {\r\n case 'SinglePrice':\r\n return result.priceWithTax.value;\r\n default:\r\n return 0;\r\n }\r\n }\r\n\r\n addItemToOrder(result: ProductSelectorItem | undefined) {\r\n if (!result) {\r\n return;\r\n }\r\n const customFields = this.orderLineCustomFields.length\r\n ? this.addItemCustomFieldsForm.value\r\n : undefined;\r\n let row = this.modifyOrderInput.addItems?.find(l =>\r\n this.isMatchingAddItemRow(l, result, customFields),\r\n );\r\n if (!row) {\r\n row = { productVariantId: result.productVariantId, quantity: 1 };\r\n if (customFields) {\r\n row.customFields = customFields;\r\n }\r\n this.modifyOrderInput.addItems?.push(row);\r\n } else {\r\n row.quantity++;\r\n }\r\n if (customFields) {\r\n const formGroup = new FormGroup({});\r\n for (const [key, value] of Object.entries(customFields)) {\r\n formGroup.addControl(key, new FormControl(value));\r\n }\r\n this.addItemCustomFieldsFormArray.push(formGroup);\r\n formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\r\n if (row) {\r\n row.customFields = value;\r\n }\r\n });\r\n }\r\n this.addItemCustomFieldsForm.reset({});\r\n this.addItemSelectedVariant = undefined;\r\n this.addedVariants.set(result.productVariantId, result);\r\n }\r\n\r\n private isMatchingAddItemRow(\r\n row: ModifyOrderData['addItems'][number],\r\n result: ProductSelectorItem,\r\n customFields: any,\r\n ): boolean {\r\n return (\r\n row.productVariantId === result.productVariantId &&\r\n JSON.stringify(row.customFields) === JSON.stringify(customFields)\r\n );\r\n }\r\n\r\n removeAddedItem(index: number) {\r\n this.modifyOrderInput.addItems.splice(index, 1);\r\n if (-1 < index) {\r\n this.addItemCustomFieldsFormArray.removeAt(index);\r\n }\r\n }\r\n\r\n getSurchargePrices(surcharge: SurchargeInput) {\r\n const priceWithTax = surcharge.priceIncludesTax\r\n ? surcharge.price\r\n : Math.round(surcharge.price * ((100 + (surcharge.taxRate || 0)) / 100));\r\n const price = surcharge.priceIncludesTax\r\n ? Math.round(surcharge.price / ((100 + (surcharge.taxRate || 0)) / 100))\r\n : surcharge.price;\r\n return {\r\n price,\r\n priceWithTax,\r\n };\r\n }\r\n\r\n addSurcharge(value: any) {\r\n this.modifyOrderInput.surcharges?.push(value);\r\n this.surchargeForm.reset({\r\n price: 0,\r\n priceIncludesTax: true,\r\n taxRate: 0,\r\n });\r\n }\r\n\r\n removeSurcharge(index: number) {\r\n this.modifyOrderInput.surcharges?.splice(index, 1);\r\n }\r\n\r\n previewAndModify(order: OrderDetailFragment) {\r\n const modifyOrderInput: ModifyOrderData = {\r\n ...this.modifyOrderInput,\r\n adjustOrderLines: this.modifyOrderInput.adjustOrderLines.map(line => {\r\n return transformRelationCustomFieldInputs(simpleDeepClone(line), this.orderLineCustomFields);\r\n }),\r\n };\r\n const input: ModifyOrderInput = {\r\n ...modifyOrderInput,\r\n ...(this.billingAddressForm.dirty ? { updateBillingAddress: this.billingAddressForm.value } : {}),\r\n ...(this.shippingAddressForm.dirty\r\n ? { updateShippingAddress: this.shippingAddressForm.value }\r\n : {}),\r\n dryRun: true,\r\n couponCodes: this.couponCodesControl.dirty ? this.couponCodesControl.value : undefined,\r\n note: this.note ?? '',\r\n options: {\r\n recalculateShipping: this.recalculateShipping,\r\n },\r\n };\r\n const originalTotalWithTax = order.totalWithTax;\r\n this.dataService.order\r\n .modifyOrder(input)\r\n .pipe(\r\n switchMap(({ modifyOrder }) => {\r\n switch (modifyOrder.__typename) {\r\n case 'Order':\r\n return this.modalService.fromComponent(OrderEditsPreviewDialogComponent, {\r\n size: 'xl',\r\n closable: false,\r\n locals: {\r\n originalTotalWithTax,\r\n order: modifyOrder,\r\n orderLineCustomFields: this.orderLineCustomFields,\r\n modifyOrderInput: input,\r\n },\r\n });\r\n case 'InsufficientStockError':\r\n case 'NegativeQuantityError':\r\n case 'NoChangesSpecifiedError':\r\n case 'OrderLimitError':\r\n case 'OrderModificationStateError':\r\n case 'PaymentMethodMissingError':\r\n case 'RefundPaymentIdMissingError':\r\n case 'CouponCodeLimitError':\r\n case 'CouponCodeExpiredError':\r\n case 'CouponCodeInvalidError': {\r\n this.notificationService.error(modifyOrder.message);\r\n return of(false as const);\r\n }\r\n case null:\r\n case undefined:\r\n return of(false as const);\r\n default:\r\n assertNever(modifyOrder);\r\n }\r\n }),\r\n switchMap(result => {\r\n if (!result || result.result === OrderEditResultType.Cancel) {\r\n // re-fetch so that the preview values get overwritten in the cache.\r\n return this.dataService.order.getOrder(this.id).mapSingle(() => false);\r\n } else {\r\n // Do the modification\r\n const wetRunInput = {\r\n ...input,\r\n dryRun: false,\r\n };\r\n if (result.result === OrderEditResultType.Refund) {\r\n wetRunInput.refund = {\r\n paymentId: result.refundPaymentId,\r\n reason: result.refundNote,\r\n };\r\n }\r\n return this.dataService.order.modifyOrder(wetRunInput).pipe(\r\n switchMap(({ modifyOrder }) => {\r\n if (modifyOrder.__typename === 'Order') {\r\n const priceDelta = modifyOrder.totalWithTax - originalTotalWithTax;\r\n const nextState =\r\n 0 < priceDelta ? 'ArrangingAdditionalPayment' : this.previousState;\r\n\r\n return this.dataService.order\r\n .transitionToState(order.id, nextState)\r\n .pipe(mapTo(true));\r\n } else {\r\n this.notificationService.error((modifyOrder as ErrorResult).message);\r\n return EMPTY;\r\n }\r\n }),\r\n );\r\n }\r\n }),\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.router.navigate(['../'], { relativeTo: this.route });\r\n }\r\n });\r\n }\r\n\r\n private addAddressCustomFieldsFormGroup(\r\n parentFormGroup: FormGroup,\r\n address?: OrderAddressFragment | null,\r\n ) {\r\n if (address && this.addressCustomFields.length) {\r\n const addressCustomFieldsFormGroup = new FormGroup({});\r\n for (const customFieldDef of this.addressCustomFields) {\r\n const name = customFieldDef.name;\r\n const value = (address as any).customFields?.[name];\r\n addressCustomFieldsFormGroup.addControl(name, new FormControl(value));\r\n }\r\n parentFormGroup.addControl('customFields', addressCustomFieldsFormGroup);\r\n }\r\n }\r\n\r\n protected setFormValues(entity: OrderDetailFragment, languageCode: LanguageCode): void {\r\n /* not used */\r\n }\r\n}\r\n","<vdr-action-bar *ngIf=\"entity$ | async as order\">\r\n <vdr-ab-left>\r\n <div class=\"flex clr-align-items-center\">\r\n <vdr-entity-info [entity]=\"entity$ | async\"></vdr-entity-info>\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </div>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <button class=\"btn btn-secondary\" (click)=\"transitionToPriorState(order)\">\r\n {{ 'order.cancel-modification' | translate }}\r\n </button>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<div *ngIf=\"entity$ | async as order\">\r\n <div class=\"clr-row\">\r\n <div class=\"clr-col-lg-8\">\r\n <table class=\"order-table table\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'order.product-name' | translate }}</th>\r\n <th>{{ 'order.product-sku' | translate }}</th>\r\n <th>{{ 'order.unit-price' | translate }}</th>\r\n <th>{{ 'order.quantity' | translate }}</th>\r\n <th *ngIf=\"orderLineCustomFields.length\">{{ 'common.custom-fields' | translate }}</th>\r\n <th>{{ 'order.total' | translate }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let line of order.lines; let i = index\"\r\n class=\"order-line\"\r\n [class.is-cancelled]=\"line.quantity === 0\"\r\n [class.modified]=\"isLineModified(line)\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"line.featuredAsset\"\r\n [src]=\"line.featuredAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ line.productVariant.name }}</td>\r\n <td class=\"align-middle sku\">{{ line.productVariant.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ line.unitPriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.unitPrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"line.quantity\"\r\n (input)=\"updateLineQuantity(line, $event.target.value)\"\r\n />\r\n <vdr-line-refunds [line]=\"line\" [payments]=\"order.payments\"></vdr-line-refunds>\r\n <vdr-line-fulfillment\r\n [line]=\"line\"\r\n [orderState]=\"order.state\"\r\n ></vdr-line-fulfillment>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"OrderLine\"\r\n [customFields]=\"orderLineCustomFields\"\r\n [customFieldsFormGroup]=\"orderLineCustomFieldsFormArray.get([i])\"\r\n [compact]=\"true\"\r\n ></vdr-tabbed-custom-fields>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{ line.linePriceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ line.linePrice | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n *ngFor=\"let addedLine of addedLines; trackBy: trackByProductVariantId; let i = index\"\r\n class=\"modified\"\r\n >\r\n <td class=\"align-middle thumb\">\r\n <img\r\n *ngIf=\"addedLine.productAsset\"\r\n [src]=\"addedLine.productAsset | assetPreview: 'tiny'\"\r\n />\r\n </td>\r\n <td class=\"align-middle name\">{{ addedLine.productVariantName }}</td>\r\n <td class=\"align-middle sku\">{{ addedLine.sku }}</td>\r\n <td class=\"align-middle unit-price\">\r\n {{ addedLine.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ addedLine.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n <td class=\"align-middle quantity\">\r\n <input\r\n type=\"number\"\r\n min=\"0\"\r\n [value]=\"addedLine.quantity\"\r\n (input)=\"updateAddedItemQuantity(addedLine, $event.target.value)\"\r\n />\r\n <button class=\"icon-button\" (click)=\"removeAddedItem(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td *ngIf=\"orderLineCustomFields.length\" class=\"order-line-custom-field align-middle\">\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsFormArray.get([i])\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n </td>\r\n <td class=\"align-middle total\">\r\n {{\r\n (addedLine.priceWithTax * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{\r\n (addedLine.price * addedLine.quantity) / 100\r\n | currency: order.currencyCode\r\n }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr class=\"surcharge\" *ngFor=\"let surcharge of order.surcharges\">\r\n <td class=\"align-middle name left\" colspan=\"2\">{{ surcharge.description }}</td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n {{ surcharge.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surcharge.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n <tr\r\n class=\"surcharge modified\"\r\n *ngFor=\"let surcharge of modifyOrderInput.surcharges; let i = index\"\r\n >\r\n <td class=\"align-middle name left\" colspan=\"2\">\r\n {{ surcharge.description }}\r\n <button class=\"icon-button\" (click)=\"removeSurcharge(i)\">\r\n <clr-icon shape=\"trash\"></clr-icon>\r\n </button>\r\n </td>\r\n <td class=\"align-middle sku\">{{ surcharge.sku }}</td>\r\n <td class=\"align-middle\"></td>\r\n <td></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"align-middle total\">\r\n <ng-container *ngIf=\"getSurchargePrices(surcharge) as surchargePrice\">\r\n {{ surchargePrice.priceWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ surchargePrice.price | localeCurrency: order.currencyCode }}\r\n </div>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n <tr class=\"shipping\">\r\n <td class=\"left clr-align-middle\">{{ 'order.shipping' | translate }}</td>\r\n <td class=\"clr-align-middle\">{{ order.shippingLines[0]?.shippingMethod?.name }}</td>\r\n <td colspan=\"3\"></td>\r\n <td *ngIf=\"orderLineCustomFields.length\"></td>\r\n <td class=\"clr-align-middle\">\r\n {{ order.shippingWithTax | localeCurrency: order.currencyCode }}\r\n <div class=\"net-price\" [title]=\"'order.net-price' | translate\">\r\n {{ order.shipping | localeCurrency: order.currencyCode }}\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <h4 class=\"mb2\">{{ 'order.modifications' | translate }}</h4>\r\n <clr-accordion>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-item-to-order' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-product-variant-selector class=\"mb4\" (productSelected)=\"addItemSelectedVariant = $event\">\r\n </vdr-product-variant-selector>\r\n <div *ngIf=\"addItemSelectedVariant\" class=\"flex mb4\">\r\n <img\r\n *ngIf=\"addItemSelectedVariant.productAsset as asset\"\r\n [src]=\"asset | assetPreview: 'tiny'\"\r\n class=\"mr4\"\r\n />\r\n <div>\r\n <strong class=\"mr4\">{{ addItemSelectedVariant.productVariantName }}</strong>\r\n <small>{{ addItemSelectedVariant.sku }}</small>\r\n <div>\r\n {{\r\n getSelectedItemPrice(addItemSelectedVariant)\r\n | localeCurrency: order.currencyCode\r\n }}\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container *ngFor=\"let customField of orderLineCustomFields\">\r\n <vdr-custom-field-control\r\n [readonly]=\"!addItemSelectedVariant\"\r\n [customField]=\"customField\"\r\n [customFieldsFormGroup]=\"addItemCustomFieldsForm\"\r\n entityName=\"OrderLine\"\r\n [compact]=\"true\"\r\n ></vdr-custom-field-control>\r\n </ng-container>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"!addItemSelectedVariant || addItemCustomFieldsForm.invalid\"\r\n (click)=\"addItemToOrder(addItemSelectedVariant)\"\r\n >\r\n {{ 'order.add-item-to-order' | translate }}\r\n </button>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.set-coupon-codes' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-coupon-code-selector\r\n [control]=\"couponCodesControl\"\r\n ></vdr-coupon-code-selector>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.add-surcharge' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <form [formGroup]=\"surchargeForm\" (submit)=\"addSurcharge(surchargeForm.value)\">\r\n <vdr-form-field [label]=\"'common.description' | translate\" for=\"description\"\r\n ><input id=\"description\" type=\"text\" formControlName=\"description\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.product-sku' | translate\" for=\"sku\"\r\n ><input id=\"sku\" type=\"text\" formControlName=\"sku\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'common.price' | translate\" for=\"price\">\r\n <vdr-currency-input\r\n [currencyCode]=\"order.currencyCode\"\r\n id=\"price\"\r\n formControlName=\"price\"\r\n ></vdr-currency-input>\r\n </vdr-form-field>\r\n <vdr-form-field\r\n [label]=\"\r\n 'catalog.price-includes-tax-at'\r\n | translate: { rate: surchargeForm.get('taxRate')?.value }\r\n \"\r\n for=\"priceIncludesTax\"\r\n ><input\r\n id=\"priceIncludesTax\"\r\n type=\"checkbox\"\r\n clrCheckbox\r\n formControlName=\"priceIncludesTax\"\r\n /></vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-rate' | translate\" for=\"taxRate\">\r\n <vdr-affixed-input suffix=\"%\"\r\n ><input\r\n id=\"taxRate\"\r\n type=\"number\"\r\n min=\"0\"\r\n max=\"100\"\r\n formControlName=\"taxRate\"\r\n /></vdr-affixed-input>\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'order.tax-description' | translate\" for=\"taxDescription\"\r\n ><input id=\"taxDescription\" type=\"text\" formControlName=\"taxDescription\"\r\n /></vdr-form-field>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"\r\n surchargeForm.invalid ||\r\n surchargeForm.pristine ||\r\n surchargeForm.get('price')?.value === 0\r\n \"\r\n >\r\n {{ 'order.add-surcharge' | translate }}\r\n </button>\r\n </form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-shipping-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"shippingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n <clr-accordion-panel>\r\n <clr-accordion-title>{{ 'order.edit-billing-address' | translate }}</clr-accordion-title>\r\n <clr-accordion-content *clrIfExpanded>\r\n <vdr-address-form\r\n [formGroup]=\"billingAddressForm\"\r\n [availableCountries]=\"availableCountries$ | async\"\r\n [customFields]=\"addressCustomFields\"\r\n ></vdr-address-form>\r\n </clr-accordion-content>\r\n </clr-accordion-panel>\r\n </clr-accordion>\r\n </div>\r\n <div class=\"clr-col-lg-4 order-cards\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n {{ 'order.modification-summary' | translate }}\r\n </div>\r\n <div class=\"card-block\">\r\n <ul>\r\n <li *ngIf=\"modifyOrderInput.addItems?.length\">\r\n {{\r\n 'order.modification-adding-items'\r\n | translate: { count: modifyOrderInput.addItems?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.adjustOrderLines?.length\">\r\n {{\r\n 'order.modification-adjusting-lines'\r\n | translate: { count: modifyOrderInput.adjustOrderLines?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"modifyOrderInput.surcharges?.length\">\r\n {{\r\n 'order.modification-adding-surcharges'\r\n | translate: { count: modifyOrderInput.surcharges?.length }\r\n }}\r\n </li>\r\n <li *ngIf=\"shippingAddressForm.dirty\">\r\n {{ 'order.modification-updating-shipping-address' | translate }}\r\n </li>\r\n <li *ngIf=\"billingAddressForm.dirty\">\r\n {{ 'order.modification-updating-billing-address' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"card-block\">\r\n <label class=\"clr-control-label\">{{ 'order.note' | translate }}</label>\r\n <textarea [(ngModel)]=\"note\" name=\"note\" clrTextarea required></textarea>\r\n <clr-checkbox-wrapper class=\"\">\r\n <input type=\"checkbox\" clrCheckbox [(ngModel)]=\"recalculateShipping\" />\r\n <label>{{ 'order.modification-recalculate-shipping' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <div class=\"card-footer\">\r\n <button\r\n class=\"btn btn-primary\"\r\n [disabled]=\"!canPreviewChanges()\"\r\n (click)=\"previewAndModify(order)\"\r\n >\r\n {{ 'order.preview-changes' | translate }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core';\r\nimport { FormControl, FormGroup } from '@angular/forms';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BaseListComponent,\r\n DataService,\r\n GetOrderListQuery,\r\n ItemOf,\r\n LocalStorageService,\r\n LogicalOperator,\r\n OrderListOptions,\r\n ServerConfigService,\r\n SortOrder,\r\n} from '@vendure/admin-ui/core';\r\nimport { Order } from '@vendure/common/lib/generated-types';\r\nimport { merge, Observable } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged, filter, map, takeUntil } from 'rxjs/operators';\r\n\r\ninterface OrderFilterConfig {\r\n active?: boolean;\r\n states?: string[];\r\n}\r\n\r\ninterface FilterPreset {\r\n name: string;\r\n label: string;\r\n config: OrderFilterConfig;\r\n}\r\n\r\n@Component({\r\n selector: 'vdr-order-list',\r\n templateUrl: './order-list.component.html',\r\n styleUrls: ['./order-list.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class OrderListComponent\r\n extends BaseListComponent<GetOrderListQuery, ItemOf<GetOrderListQuery, 'orders'>>\r\n implements OnInit\r\n{\r\n searchControl = new FormControl('');\r\n searchOrderCodeControl = new FormControl('');\r\n searchLastNameControl = new FormControl('');\r\n customFilterForm: FormGroup;\r\n orderStates = this.serverConfigService.getOrderProcessStates().map(item => item.name);\r\n filterPresets: FilterPreset[] = [\r\n {\r\n name: 'open',\r\n label: _('order.filter-preset-open'),\r\n config: {\r\n active: false,\r\n states: this.orderStates.filter(\r\n s => s !== 'Delivered' && s !== 'Cancelled' && s !== 'Shipped' && s !== 'Draft',\r\n ),\r\n },\r\n },\r\n {\r\n name: 'shipped',\r\n label: _('order.filter-preset-shipped'),\r\n config: {\r\n active: false,\r\n states: ['Shipped'],\r\n },\r\n },\r\n {\r\n name: 'completed',\r\n label: _('order.filter-preset-completed'),\r\n config: {\r\n active: false,\r\n states: ['Delivered', 'Cancelled'],\r\n },\r\n },\r\n {\r\n name: 'active',\r\n label: _('order.filter-preset-active'),\r\n config: {\r\n active: true,\r\n },\r\n },\r\n {\r\n name: 'draft',\r\n label: _('order.filter-preset-draft'),\r\n config: {\r\n active: false,\r\n states: ['Draft'],\r\n },\r\n },\r\n ];\r\n activePreset$: Observable<string>;\r\n canCreateDraftOrder = false;\r\n\r\n constructor(\r\n private serverConfigService: ServerConfigService,\r\n private dataService: DataService,\r\n private localStorageService: LocalStorageService,\r\n router: Router,\r\n route: ActivatedRoute,\r\n ) {\r\n super(router, route);\r\n super.setQueryFn(\r\n // tslint:disable-next-line:no-shadowed-variable\r\n (take, skip) => this.dataService.order.getOrders({ take, skip }).refetchOnChannelChange(),\r\n data => data.orders,\r\n // tslint:disable-next-line:no-shadowed-variable\r\n (skip, take) =>\r\n this.createQueryOptions(\r\n skip,\r\n take,\r\n this.searchControl.value,\r\n this.route.snapshot.queryParamMap.get('filter') || 'open',\r\n ),\r\n );\r\n const lastFilters = this.localStorageService.get('orderListLastCustomFilters');\r\n if (lastFilters) {\r\n this.setQueryParam(lastFilters, { replaceUrl: true });\r\n }\r\n this.canCreateDraftOrder = !!this.serverConfigService\r\n .getOrderProcessStates()\r\n .find(state => state.name === 'Created')\r\n ?.to.includes('Draft');\r\n if (!this.canCreateDraftOrder) {\r\n this.filterPresets = this.filterPresets.filter(p => p.name !== 'draft');\r\n }\r\n }\r\n\r\n ngOnInit() {\r\n super.ngOnInit();\r\n this.activePreset$ = this.route.queryParamMap.pipe(\r\n map(qpm => qpm.get('filter') || 'open'),\r\n distinctUntilChanged(),\r\n );\r\n const searchTerms$ = merge(this.searchControl.valueChanges).pipe(\r\n filter(value => 2 < value.length || value.length === 0),\r\n debounceTime(250),\r\n );\r\n merge(searchTerms$, this.route.queryParamMap)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(val => {\r\n this.refresh();\r\n });\r\n\r\n const queryParamMap = this.route.snapshot.queryParamMap;\r\n this.customFilterForm = new FormGroup({\r\n states: new FormControl(queryParamMap.getAll('states') ?? []),\r\n placedAtStart: new FormControl(queryParamMap.get('placedAtStart')),\r\n placedAtEnd: new FormControl(queryParamMap.get('placedAtEnd')),\r\n });\r\n }\r\n\r\n selectFilterPreset(presetName: string) {\r\n const lastCustomFilters = this.localStorageService.get('orderListLastCustomFilters') ?? {};\r\n const emptyCustomFilters = { states: undefined, placedAtStart: undefined, placedAtEnd: undefined };\r\n const filters = presetName === 'custom' ? lastCustomFilters : emptyCustomFilters;\r\n this.setQueryParam(\r\n {\r\n filter: presetName,\r\n page: 1,\r\n ...filters,\r\n },\r\n { replaceUrl: true },\r\n );\r\n }\r\n\r\n applyCustomFilters() {\r\n const formValue = this.customFilterForm.value;\r\n const customFilters = {\r\n states: formValue.states,\r\n placedAtStart: formValue.placedAtStart,\r\n placedAtEnd: formValue.placedAtEnd,\r\n };\r\n this.setQueryParam({\r\n filter: 'custom',\r\n ...customFilters,\r\n });\r\n this.customFilterForm.markAsPristine();\r\n this.localStorageService.set('orderListLastCustomFilters', customFilters);\r\n }\r\n\r\n private createQueryOptions(\r\n // tslint:disable-next-line:no-shadowed-variable\r\n skip: number,\r\n take: number,\r\n searchTerm: string,\r\n activeFilterPreset?: string,\r\n ): { options: OrderListOptions } {\r\n const filterConfig = this.filterPresets.find(p => p.name === activeFilterPreset);\r\n // tslint:disable-next-line:no-shadowed-variable\r\n let filter: any = {};\r\n let filterOperator: LogicalOperator = LogicalOperator.AND;\r\n if (filterConfig) {\r\n if (filterConfig.config.active != null) {\r\n filter.active = {\r\n eq: filterConfig.config.active,\r\n };\r\n }\r\n if (filterConfig.config.states) {\r\n filter.state = {\r\n in: filterConfig.config.states,\r\n };\r\n }\r\n } else if (activeFilterPreset === 'custom') {\r\n const queryParams = this.route.snapshot.queryParamMap;\r\n const states = queryParams.getAll('states') ?? [];\r\n const placedAtStart = queryParams.get('placedAtStart');\r\n const placedAtEnd = queryParams.get('placedAtEnd');\r\n if (states.length) {\r\n filter.state = {\r\n in: states,\r\n };\r\n }\r\n if (placedAtStart && placedAtEnd) {\r\n filter.orderPlacedAt = {\r\n between: {\r\n start: placedAtStart,\r\n end: placedAtEnd,\r\n },\r\n };\r\n } else if (placedAtStart) {\r\n filter.orderPlacedAt = {\r\n after: placedAtStart,\r\n };\r\n } else if (placedAtEnd) {\r\n filter.orderPlacedAt = {\r\n before: placedAtEnd,\r\n };\r\n }\r\n }\r\n if (searchTerm) {\r\n filter = {\r\n customerLastName: {\r\n contains: searchTerm,\r\n },\r\n transactionId: {\r\n contains: searchTerm,\r\n },\r\n code: {\r\n contains: searchTerm,\r\n },\r\n };\r\n filterOperator = LogicalOperator.OR;\r\n }\r\n return {\r\n options: {\r\n skip,\r\n take,\r\n filter: {\r\n ...(filter ?? {}),\r\n },\r\n sort: {\r\n updatedAt: SortOrder.DESC,\r\n },\r\n filterOperator,\r\n },\r\n };\r\n }\r\n\r\n getShippingNames(order: Order) {\r\n if (order.shippingLines.length) {\r\n return order.shippingLines.map(shippingLine => shippingLine.shippingMethod.name).join(', ');\r\n } else {\r\n return '';\r\n }\r\n }\r\n}\r\n","<vdr-action-bar>\r\n <vdr-ab-left>\r\n <div class=\"search-form\">\r\n <div class=\"filter-presets btn-group btn-outline-primary\" *ngIf=\"activePreset$ | async as activePreset\">\r\n <button\r\n class=\"btn\"\r\n *ngFor=\"let preset of filterPresets\"\r\n [class.btn-primary]=\"activePreset === preset.name\"\r\n (click)=\"selectFilterPreset(preset.name)\"\r\n >\r\n {{ preset.label | translate }}\r\n </button>\r\n <button\r\n class=\"btn\"\r\n [class.btn-primary]=\"activePreset === 'custom'\"\r\n (click)=\"selectFilterPreset('custom')\"\r\n >\r\n {{ 'order.filter-custom' | translate }}\r\n <clr-icon shape=\"angle down\"></clr-icon>\r\n </button>\r\n </div>\r\n <input\r\n type=\"text\"\r\n name=\"searchTerm\"\r\n [formControl]=\"searchControl\"\r\n [placeholder]=\"'order.search-by-order-filters' | translate\"\r\n class=\"search-input\"\r\n />\r\n </div>\r\n <div class=\"custom-filters\" [class.expanded]=\"(activePreset$ | async) === 'custom'\">\r\n <form [formGroup]=\"customFilterForm\">\r\n <div class=\"flex align-center\">\r\n <ng-select\r\n [items]=\"orderStates\"\r\n appendTo=\"body\"\r\n [addTag]=\"false\"\r\n [multiple]=\"true\"\r\n formControlName=\"states\"\r\n [placeholder]=\"'state.all-orders' | translate\"\r\n [clearable]=\"true\"\r\n [searchable]=\"false\"\r\n >\r\n <ng-template ng-option-tmp let-item=\"item\">{{\r\n item | stateI18nToken | translate\r\n }}</ng-template>\r\n <ng-template ng-label-tmp let-item=\"item\" let-clear=\"clear\">\r\n <span class=\"ng-value-label\"> {{ item | stateI18nToken | translate }}</span>\r\n <span class=\"ng-value-icon right\" (click)=\"clear(item)\" aria-hidden=\"true\"\r\n >×</span\r\n >\r\n </ng-template>\r\n </ng-select>\r\n <button\r\n class=\"btn btn-secondary\"\r\n [disabled]=\"customFilterForm.pristine\"\r\n (click)=\"applyCustomFilters()\"\r\n >\r\n {{ 'order.apply-filters' | translate }}\r\n <clr-icon shape=\"filter\"></clr-icon>\r\n </button>\r\n </div>\r\n <div class=\"flex\">\r\n <div>\r\n <label>{{ 'order.placed-at-start' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtStart\"></vdr-datetime-picker>\r\n </div>\r\n <div>\r\n <label>{{ 'order.placed-at-end' | translate }}</label>\r\n <vdr-datetime-picker formControlName=\"placedAtEnd\"></vdr-datetime-picker>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"order-list\"></vdr-action-bar-items>\r\n <ng-container *ngIf=\"canCreateDraftOrder\">\r\n <a class=\"btn btn-primary mt1\" *vdrIfPermissions=\"['CreateOrder']\" [routerLink]=\"['./draft/create']\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-draft-order' | translate }}\r\n </a>\r\n </ng-container>\r\n </vdr-ab-right>\r\n</vdr-action-bar>\r\n\r\n<vdr-data-table\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n>\r\n <vdr-dt-column>{{ 'common.code' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.customer' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.state' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.total' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'common.updated-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.placed-at' | translate }}</vdr-dt-column>\r\n <vdr-dt-column>{{ 'order.shipping' | translate }}</vdr-dt-column>\r\n <vdr-dt-column></vdr-dt-column>\r\n <ng-template let-order=\"item\">\r\n <td class=\"left align-middle\">{{ order.code }}</td>\r\n <td class=\"left align-middle\">\r\n <vdr-customer-label [customer]=\"order.customer\"></vdr-customer-label>\r\n </td>\r\n <td class=\"left align-middle\">\r\n <vdr-order-state-label [state]=\"order.state\"></vdr-order-state-label>\r\n </td>\r\n <td class=\"left align-middle\">{{ order.totalWithTax | localeCurrency: order.currencyCode }}</td>\r\n <td class=\"left align-middle\">{{ order.updatedAt | timeAgo }}</td>\r\n <td class=\"left align-middle\">{{ order.orderPlacedAt | localeDate: 'medium' }}</td>\r\n <td class=\"left align-middle\">{{ getShippingNames(order) }}</td>\r\n <td class=\"right align-middle\">\r\n <vdr-table-row-action\r\n iconShape=\"shopping-cart\"\r\n [label]=\"'common.open' | translate\"\r\n [linkTo]=\"\r\n order.state === 'Modifying'\r\n ? ['./', order.id, 'modify']\r\n : order.state === 'Draft'\r\n ? ['./draft', order.id]\r\n : ['./', order.id]\r\n \"\r\n ></vdr-table-row-action>\r\n </td>\r\n </ng-template>\r\n</vdr-data-table>\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n ActivatedRouteSnapshot,\r\n ActivationStart,\r\n Resolve,\r\n Router,\r\n RouterStateSnapshot,\r\n} from '@angular/router';\r\nimport { DataService, OrderDetailFragment } from '@vendure/admin-ui/core';\r\nimport { notNullOrUndefined } from '@vendure/common/lib/shared-utils';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { filter, map, shareReplay, switchMap, take, takeUntil } from 'rxjs/operators';\r\nimport { DraftOrderDetailComponent } from '../../components/draft-order-detail/draft-order-detail.component';\r\n\r\n/**\r\n * Resolves the id from the path into a Customer entity.\r\n */\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OrderResolver implements Resolve<Observable<OrderDetailFragment>> {\r\n constructor(private router: Router, private dataService: DataService) {}\r\n\r\n /** @internal */\r\n resolve(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<Observable<OrderDetailFragment>> {\r\n const id = route.paramMap.get('id');\r\n\r\n // Complete the entity stream upon navigating away\r\n const navigateAway$ = this.router.events.pipe(filter(event => event instanceof ActivationStart));\r\n\r\n const stream = this.dataService.order\r\n .getOrder(id!)\r\n .mapStream(data => data.order)\r\n .pipe(\r\n switchMap(order => {\r\n if (order?.state === 'Draft' && route.component !== DraftOrderDetailComponent) {\r\n // Make sure Draft orders only get displayed with the DraftOrderDetailComponent\r\n this.router.navigate(['/orders/draft', id]);\r\n return EMPTY;\r\n } else {\r\n return [order];\r\n }\r\n }),\r\n takeUntil(navigateAway$),\r\n filter(notNullOrUndefined),\r\n shareReplay(1),\r\n );\r\n\r\n return stream.pipe(\r\n take(1),\r\n map(() => stream),\r\n );\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, Router, RouterStateSnapshot, UrlTree } from '@angular/router';\r\nimport { DataService } from '@vendure/admin-ui/core';\r\nimport { EMPTY, Observable } from 'rxjs';\r\nimport { map, mergeMapTo, tap } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class OrderGuard implements CanActivate {\r\n constructor(private dataService: DataService, private router: Router) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot,\r\n ): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {\r\n const isDraft = state.url.includes('orders/draft');\r\n const id = route.paramMap.get('id');\r\n if (isDraft) {\r\n if (id === 'create') {\r\n return this.dataService.order\r\n .createDraftOrder()\r\n .pipe(\r\n map(({ createDraftOrder }) =>\r\n this.router.parseUrl(`/orders/draft/${createDraftOrder.id}`),\r\n ),\r\n );\r\n } else {\r\n return true;\r\n }\r\n } else {\r\n return true;\r\n }\r\n }\r\n}\r\n","import { Route } from '@angular/router';\r\nimport { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';\r\nimport {\r\n BreadcrumbLabelLinkPair,\r\n CanDeactivateDetailGuard,\r\n detailBreadcrumb,\r\n OrderDetailFragment,\r\n} from '@vendure/admin-ui/core';\r\nimport { map } from 'rxjs/operators';\r\n\r\nimport { DraftOrderDetailComponent } from './components/draft-order-detail/draft-order-detail.component';\r\nimport { OrderDetailComponent } from './components/order-detail/order-detail.component';\r\nimport { OrderEditorComponent } from './components/order-editor/order-editor.component';\r\nimport { OrderListComponent } from './components/order-list/order-list.component';\r\nimport { OrderResolver } from './providers/routing/order-resolver';\r\nimport { OrderGuard } from './providers/routing/order.guard';\r\n\r\nexport const orderRoutes: Route[] = [\r\n {\r\n path: '',\r\n component: OrderListComponent,\r\n data: {\r\n breadcrumb: _('breadcrumb.orders'),\r\n },\r\n },\r\n {\r\n path: 'draft/:id',\r\n component: DraftOrderDetailComponent,\r\n resolve: {\r\n entity: OrderResolver,\r\n },\r\n canActivate: [OrderGuard],\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: orderBreadcrumb,\r\n },\r\n },\r\n {\r\n path: ':id',\r\n component: OrderDetailComponent,\r\n resolve: {\r\n entity: OrderResolver,\r\n },\r\n canActivate: [OrderGuard],\r\n canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: orderBreadcrumb,\r\n },\r\n },\r\n {\r\n path: ':id/modify',\r\n component: OrderEditorComponent,\r\n resolve: {\r\n entity: OrderResolver,\r\n },\r\n // canDeactivate: [CanDeactivateDetailGuard],\r\n data: {\r\n breadcrumb: modifyingOrderBreadcrumb,\r\n },\r\n },\r\n];\r\n\r\nexport function orderBreadcrumb(data: any, params: any) {\r\n return detailBreadcrumb<OrderDetailFragment>({\r\n entity: data.entity,\r\n id: params.id,\r\n breadcrumbKey: 'breadcrumb.orders',\r\n getName: order => order.code,\r\n route: '',\r\n });\r\n}\r\n\r\nexport function modifyingOrderBreadcrumb(data: any, params: any) {\r\n return orderBreadcrumb(data, params).pipe(\r\n map((breadcrumbs: BreadcrumbLabelLinkPair[]) => {\r\n const modifiedBreadcrumbs = breadcrumbs.slice();\r\n modifiedBreadcrumbs[0].link[0] = '../';\r\n modifiedBreadcrumbs[1].link[0] = '../orders';\r\n return modifiedBreadcrumbs.concat({ label: _('breadcrumb.modifying'), link: [''] });\r\n }) as any,\r\n );\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { SharedModule } from '@vendure/admin-ui/core';\r\n\r\nimport { AddManualPaymentDialogComponent } from './components/add-manual-payment-dialog/add-manual-payment-dialog.component';\r\nimport { CancelOrderDialogComponent } from './components/cancel-order-dialog/cancel-order-dialog.component';\r\nimport { DraftOrderDetailComponent } from './components/draft-order-detail/draft-order-detail.component';\r\nimport { DraftOrderVariantSelectorComponent } from './components/draft-order-variant-selector/draft-order-variant-selector.component';\r\nimport { FulfillOrderDialogComponent } from './components/fulfill-order-dialog/fulfill-order-dialog.component';\r\nimport { FulfillmentCardComponent } from './components/fulfillment-card/fulfillment-card.component';\r\nimport { FulfillmentDetailComponent } from './components/fulfillment-detail/fulfillment-detail.component';\r\nimport { FulfillmentStateLabelComponent } from './components/fulfillment-state-label/fulfillment-state-label.component';\r\nimport { LineFulfillmentComponent } from './components/line-fulfillment/line-fulfillment.component';\r\nimport { LineRefundsComponent } from './components/line-refunds/line-refunds.component';\r\nimport { ModificationDetailComponent } from './components/modification-detail/modification-detail.component';\r\nimport { OrderCustomFieldsCardComponent } from './components/order-custom-fields-card/order-custom-fields-card.component';\r\nimport { OrderDetailComponent } from './components/order-detail/order-detail.component';\r\nimport { OrderEditorComponent } from './components/order-editor/order-editor.component';\r\nimport { OrderEditsPreviewDialogComponent } from './components/order-edits-preview-dialog/order-edits-preview-dialog.component';\r\nimport { OrderHistoryComponent } from './components/order-history/order-history.component';\r\nimport { OrderListComponent } from './components/order-list/order-list.component';\r\nimport { OrderPaymentCardComponent } from './components/order-payment-card/order-payment-card.component';\r\nimport { OrderProcessGraphDialogComponent } from './components/order-process-graph-dialog/order-process-graph-dialog.component';\r\nimport { OrderProcessEdgeComponent } from './components/order-process-graph/order-process-edge.component';\r\nimport { OrderProcessGraphComponent } from './components/order-process-graph/order-process-graph.component';\r\nimport { OrderProcessNodeComponent } from './components/order-process-graph/order-process-node.component';\r\nimport { OrderStateSelectDialogComponent } from './components/order-state-select-dialog/order-state-select-dialog.component';\r\nimport { OrderTableComponent } from './components/order-table/order-table.component';\r\nimport { PaymentDetailComponent } from './components/payment-detail/payment-detail.component';\r\nimport { PaymentStateLabelComponent } from './components/payment-state-label/payment-state-label.component';\r\nimport { RefundOrderDialogComponent } from './components/refund-order-dialog/refund-order-dialog.component';\r\nimport { RefundStateLabelComponent } from './components/refund-state-label/refund-state-label.component';\r\nimport { SelectCustomerDialogComponent } from './components/select-customer-dialog/select-customer-dialog.component';\r\nimport { SettleRefundDialogComponent } from './components/settle-refund-dialog/settle-refund-dialog.component';\r\nimport { SimpleItemListComponent } from './components/simple-item-list/simple-item-list.component';\r\nimport { orderRoutes } from './order.routes';\r\nimport { SelectAddressDialogComponent } from './components/select-address-dialog/select-address-dialog.component';\r\nimport { CouponCodeSelectorComponent } from './components/coupon-code-selector/coupon-code-selector.component';\r\nimport { SelectShippingMethodDialogComponent } from './components/select-shipping-method-dialog/select-shipping-method-dialog.component';\r\n\r\n@NgModule({\r\n imports: [SharedModule, RouterModule.forChild(orderRoutes)],\r\n declarations: [\r\n OrderListComponent,\r\n OrderDetailComponent,\r\n FulfillOrderDialogComponent,\r\n LineFulfillmentComponent,\r\n RefundOrderDialogComponent,\r\n CancelOrderDialogComponent,\r\n PaymentStateLabelComponent,\r\n LineRefundsComponent,\r\n OrderPaymentCardComponent,\r\n RefundStateLabelComponent,\r\n SettleRefundDialogComponent,\r\n OrderHistoryComponent,\r\n FulfillmentDetailComponent,\r\n PaymentDetailComponent,\r\n SimpleItemListComponent,\r\n OrderCustomFieldsCardComponent,\r\n OrderProcessGraphComponent,\r\n OrderProcessNodeComponent,\r\n OrderProcessEdgeComponent,\r\n OrderProcessGraphDialogComponent,\r\n FulfillmentStateLabelComponent,\r\n FulfillmentCardComponent,\r\n OrderEditorComponent,\r\n OrderTableComponent,\r\n OrderEditsPreviewDialogComponent,\r\n ModificationDetailComponent,\r\n AddManualPaymentDialogComponent,\r\n OrderStateSelectDialogComponent,\r\n DraftOrderDetailComponent,\r\n DraftOrderVariantSelectorComponent,\r\n SelectCustomerDialogComponent,\r\n SelectAddressDialogComponent,\r\n CouponCodeSelectorComponent,\r\n SelectShippingMethodDialogComponent,\r\n ],\r\n})\r\nexport class OrderModule {}\r\n","// This file was generated by the build-public-api.ts script\nexport * from './components/add-manual-payment-dialog/add-manual-payment-dialog.component';\nexport * from './components/cancel-order-dialog/cancel-order-dialog.component';\nexport * from './components/coupon-code-selector/coupon-code-selector.component';\nexport * from './components/draft-order-detail/draft-order-detail.component';\nexport * from './components/draft-order-variant-selector/draft-order-variant-selector.component';\nexport * from './components/fulfill-order-dialog/fulfill-order-dialog.component';\nexport * from './components/fulfillment-card/fulfillment-card.component';\nexport * from './components/fulfillment-detail/fulfillment-detail.component';\nexport * from './components/fulfillment-state-label/fulfillment-state-label.component';\nexport * from './components/line-fulfillment/line-fulfillment.component';\nexport * from './components/line-refunds/line-refunds.component';\nexport * from './components/modification-detail/modification-detail.component';\nexport * from './components/order-custom-fields-card/order-custom-fields-card.component';\nexport * from './components/order-detail/order-detail.component';\nexport * from './components/order-editor/order-editor.component';\nexport * from './components/order-edits-preview-dialog/order-edits-preview-dialog.component';\nexport * from './components/order-history/order-history.component';\nexport * from './components/order-list/order-list.component';\nexport * from './components/order-payment-card/order-payment-card.component';\nexport * from './components/order-process-graph/constants';\nexport * from './components/order-process-graph/order-process-edge.component';\nexport * from './components/order-process-graph/order-process-graph.component';\nexport * from './components/order-process-graph/order-process-node.component';\nexport * from './components/order-process-graph/types';\nexport * from './components/order-process-graph-dialog/order-process-graph-dialog.component';\nexport * from './components/order-state-select-dialog/order-state-select-dialog.component';\nexport * from './components/order-table/order-table.component';\nexport * from './components/payment-detail/payment-detail.component';\nexport * from './components/payment-state-label/payment-state-label.component';\nexport * from './components/refund-order-dialog/refund-order-dialog.component';\nexport * from './components/refund-state-label/refund-state-label.component';\nexport * from './components/select-address-dialog/select-address-dialog.component';\nexport * from './components/select-address-dialog/select-address-dialog.graphql';\nexport * from './components/select-customer-dialog/select-customer-dialog.component';\nexport * from './components/select-shipping-method-dialog/select-shipping-method-dialog.component';\nexport * from './components/settle-refund-dialog/settle-refund-dialog.component';\nexport * from './components/simple-item-list/simple-item-list.component';\nexport * from './order.module';\nexport * from './order.routes';\nexport * from './providers/order-transition.service';\nexport * from './providers/routing/order-resolver';\nexport * from './providers/routing/order.guard';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["_"],"mappings":"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"}