cabloy 5.1.131 → 5.1.133

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 (210) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-worktree-environment/SKILL.md +6 -6
  3. package/.claude/skills/cabloy-worktree-environment/evals/evals.json +2 -2
  4. package/.github/workflows/vona-test-pg.yml +1 -1
  5. package/.github/workflows/vona-test-sqlite3.yml +1 -1
  6. package/CHANGELOG.md +28 -0
  7. package/cabloy-docs/backend/dto-guide.md +39 -4
  8. package/cabloy-docs/backend/dto-infer-generation.md +29 -0
  9. package/cabloy-docs/backend/openapi-guide.md +16 -0
  10. package/cabloy-docs/backend/validation-guide.md +45 -0
  11. package/cabloy-docs/frontend/environment-config-guide.md +8 -15
  12. package/cabloy-docs/frontend/navigation-guards-guide.md +3 -3
  13. package/cabloy-docs/frontend/page-route-guide.md +4 -4
  14. package/cabloy-docs/frontend/ssr-env.md +22 -29
  15. package/cabloy-docs/frontend/theme-guide.md +4 -4
  16. package/cabloy-docs/frontend/zova-router-under-the-hood.md +1 -1
  17. package/cabloy-docs/fullstack/deploy-cloudflare-docker.md +6 -6
  18. package/cabloy-docs/fullstack/parallel-worktree-environment.md +2 -2
  19. package/e2e/specs/a-commerce/commerce.spec.ts +479 -17
  20. package/e2e/specs/cabloy-basic/basic.spec.ts +30 -5
  21. package/package.json +7 -7
  22. package/vona/.claude/skills/detect-ssr-leak/SKILL.md +1 -1
  23. package/vona/packages-vona/vona/package.json +1 -1
  24. package/vona/pnpm-lock.yaml +120 -10
  25. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuCreate.tsx +3 -1
  26. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuSelectResItem.tsx +13 -1
  27. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuUpdate.tsx +3 -1
  28. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/skuView.tsx +13 -1
  29. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/sku.tsx +6 -0
  30. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/skuPresentation.test.ts +227 -0
  31. package/vona/src/suite/a-commerce/modules/commerce-member/src/.metadata/index.ts +46 -36
  32. package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressSelectResItem.tsx +5 -13
  33. package/vona/src/suite/a-commerce/modules/commerce-member/src/service/address.ts +16 -1
  34. package/vona/src/suite/a-commerce/modules/commerce-member/test/addressPresentation.test.ts +210 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/commercePayScene.ts +13 -2
  36. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +12 -0
  37. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/service/coupon.ts +7 -1
  38. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +45 -2
  39. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +23 -0
  40. package/vona/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +23 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/order.ts +31 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAdminLineBase.tsx +56 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAdminLineResItem.tsx +17 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderAdminLineView.tsx +13 -0
  45. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderSelectResItem.tsx +26 -2
  46. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderView.tsx +197 -3
  47. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundRecoveryAction.tsx +19 -0
  48. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/refundRecoveryView.tsx +70 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditSelectResItem.tsx +7 -1
  50. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockAuditView.tsx +21 -1
  51. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceSelectResItem.tsx +7 -1
  52. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/stockBalanceView.tsx +3 -1
  53. package/vona/src/suite/a-commerce/modules/commerce-trade/src/entity/order.tsx +12 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +15 -2
  55. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +215 -3
  56. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockAudit.ts +25 -2
  57. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/stockBalance.ts +14 -3
  58. package/vona/src/suite/a-commerce/modules/commerce-trade/test/checkoutReservation.test.ts +4 -4
  59. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderPresentation.test.ts +358 -0
  60. package/vona/src/suite/a-commerce/modules/commerce-trade/test/orderSnapshot.test.ts +8 -8
  61. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +5 -1
  62. package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +50 -1
  63. package/vona/src/suite/a-commerce/modules/commerce-trade/test/stockPresentation.test.ts +324 -0
  64. package/vona/src/suite/a-home/modules/home-base/package.json +3 -2
  65. package/vona/src/suite/a-home/modules/home-base/src/.metadata/index.ts +93 -16
  66. package/vona/src/suite/a-home/modules/home-base/src/controller/siteCatalog.ts +21 -0
  67. package/vona/src/suite/a-home/modules/home-base/src/dto/siteCatalogSelectRes.ts +11 -0
  68. package/vona/src/suite/a-home/modules/home-base/src/dto/siteCatalogSelectResItem.ts +15 -0
  69. package/vona/src/suite/a-home/modules/home-base/src/service/siteCatalog.ts +29 -0
  70. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/src/bean/ssrSite.admin.ts +3 -0
  71. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/src/config/locale/en-us.ts +1 -0
  72. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/src/config/locale/zh-cn.ts +1 -0
  73. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/src/bean/ssrSite.web.ts +3 -0
  74. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/src/config/locale/en-us.ts +1 -0
  75. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/src/config/locale/zh-cn.ts +1 -0
  76. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/cli/ssrSite/boilerplate/{{sceneName}}.{{beanName}}.ts_ +1 -0
  77. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  78. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/types/env.ts +1 -3
  79. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/types/ssrSite.ts +2 -1
  80. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  81. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  82. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/index.ts +67 -0
  83. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/bean.payProvider.ts +1 -0
  84. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/bean.payScene.ts +5 -4
  85. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.index.ts +8 -0
  86. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.version.ts +22 -0
  87. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/schedule.providerOperationDispatch.ts +1 -1
  88. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/paymentSession.tsx +6 -0
  89. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperation.tsx +3 -0
  90. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperationRecoveryAudit.tsx +53 -0
  91. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/refundOperation.tsx +6 -0
  92. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/model/providerOperationRecoveryAudit.ts +12 -0
  93. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentSession.ts +6 -2
  94. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +236 -30
  95. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/refundOperation.ts +8 -5
  96. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/webhook.ts +34 -0
  97. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payProvider.ts +4 -0
  98. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +6 -0
  99. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  100. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/bean/payProvider.mock.ts +15 -7
  101. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/service/payMock.ts +9 -5
  102. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  103. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/bean/payProvider.paypal.ts +289 -86
  104. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/lib/paypalGateway.ts +9 -1
  105. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
  106. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  107. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
  108. package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/types/rest.ts +1 -0
  109. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +1 -1
  110. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/utils.ts +12 -0
  111. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  112. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +5 -1
  113. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +5 -1
  114. package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +1 -1
  115. package/vona/src/suite-vendor/a-vona/modules/a-validation/src/bean/bean.validator.ts +60 -1
  116. package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +1 -1
  117. package/vona/src/suite-vendor/a-vona/modules/a-web/src/lib/decorator/bean.ts +7 -4
  118. package/vona/src/suite-vendor/a-vona/modules/a-web/src/types/dto.ts +2 -1
  119. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  120. package/zova/env/.env +3 -5
  121. package/zova/env/.env.cabloyBasicAdmin +1 -4
  122. package/zova/env/.env.cabloyBasicWeb +1 -5
  123. package/zova/env/.env.cabloyCommerce +1 -5
  124. package/zova/env/.env.cabloyCommerceAdmin +1 -4
  125. package/zova/env/.env.ssr.admin +1 -4
  126. package/zova/env/.env.ssr.web +1 -5
  127. package/zova/package.original.json +1 -1
  128. package/zova/packages-utils/zova-jsx/package.json +2 -2
  129. package/zova/packages-zova/zova/package.json +3 -3
  130. package/zova/packages-zova/zova-core/package.json +2 -1
  131. package/zova/packages-zova/zova-core/src/core/component/locale.ts +10 -4
  132. package/zova/packages-zova/zova-core/src/core/sys/config.ts +14 -6
  133. package/zova/packages-zova/zova-core/src/types/utils/env.ts +4 -2
  134. package/zova/pnpm-lock.yaml +24 -21
  135. package/zova/src/front/config/config/config.ts +22 -7
  136. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/routes.ts +2 -2
  137. package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/schemas.ts +16 -8
  138. package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/types.ts +150 -216
  139. package/zova/src/suite/a-commerce/modules/commerce-member/src/model/addressMine.ts +1 -2
  140. package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +5 -8
  141. package/zova/src/suite/a-commerce/modules/commerce-member/src/routes.ts +1 -1
  142. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/model/coupon.ts +1 -2
  143. package/zova/src/suite/a-commerce/modules/commerce-siteadmin/src/routes.ts +3 -1
  144. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +3 -0
  145. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeOrder.ts +72 -0
  146. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +8 -0
  147. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +226 -16
  148. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeOrder.ts +15 -0
  149. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +155 -36
  150. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/en-us.ts +7 -0
  151. package/zova/src/suite/a-commerce/modules/commerce-trade/src/config/locale/zh-cn.ts +7 -0
  152. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/cart.ts +3 -4
  153. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +42 -0
  154. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/orderMine.ts +2 -4
  155. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +5 -1
  156. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +14 -10
  157. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +5 -8
  158. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/orders/controller.tsx +5 -8
  159. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +151 -24
  160. package/zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts +5 -5
  161. package/zova/src/suite/a-demo/modules/demo-basic/src/routes.ts +26 -7
  162. package/zova/src/suite/a-demo/modules/demo-todo/src/routes.ts +2 -2
  163. package/zova/src/suite/a-devui/modules/devui-adapter/src/bean/meta.themeHandler.ts +1 -1
  164. package/zova/src/suite/a-home/modules/home-base/package.json +1 -0
  165. package/zova/src/suite/a-home/modules/home-base/src/routes.ts +5 -0
  166. package/zova/src/suite/a-home/modules/home-base/src/service/routerGuards.ts +1 -1
  167. package/zova/src/suite/a-home/modules/home-base/src/service/ssrLayout.ts +18 -14
  168. package/zova/src/suite/a-home/modules/home-indexadmin/src/routes.ts +1 -1
  169. package/zova/src/suite/a-home/modules/home-indexweb/src/routes.ts +1 -0
  170. package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/controller.tsx +12 -4
  171. package/zova/src/suite/a-home/modules/home-layoutadmin/src/config/config.ts +8 -0
  172. package/zova/src/suite/a-home/modules/home-layoutadmin/src/model/layout.ts +5 -8
  173. package/zova/src/suite/a-home/modules/home-layoutempty/src/.metadata/index.ts +10 -3
  174. package/zova/src/suite/a-home/modules/home-layoutempty/src/component/layoutEmpty/controller.tsx +9 -3
  175. package/zova/src/suite/a-home/modules/home-layoutempty/src/config/config.ts +12 -0
  176. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +13 -8
  177. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +1 -1
  178. package/zova/src/suite/a-home/modules/home-layoutweb/src/config/config.ts +4 -0
  179. package/zova/src/suite/a-home/modules/home-layoutweb/src/model/layout.ts +5 -8
  180. package/zova/src/suite/a-home/modules/home-login/src/routes.ts +1 -0
  181. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +2 -3
  182. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/routes.ts +3 -1
  183. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  184. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +1 -1
  185. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/routes.ts +3 -0
  186. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  187. package/zova/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  188. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentSession.ts +2 -2
  189. package/zova/src/suite-vendor/a-pay/package.json +2 -2
  190. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +1 -1
  191. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/src/bean/interceptor.jwt.ts +1 -1
  192. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +1 -1
  193. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +1 -1
  194. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +1 -0
  195. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  196. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/config/config.ts +1 -17
  197. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/bodyReadyObserver.ts +27 -0
  198. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/index.ts +2 -0
  199. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +33 -0
  200. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrMetaStore.ts +3 -35
  201. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrProfile.ts +38 -0
  202. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/monkey.ts +10 -0
  203. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/types/config.ts +3 -10
  204. package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/types/ssr.ts +17 -8
  205. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
  206. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +33 -18
  207. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +1 -1
  208. package/zova/src/suite-vendor/a-zova/modules/a-style/src/bean/bean.theme.ts +2 -2
  209. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  210. package/zova/src/suite-vendor/a-zova/package.json +7 -7
@@ -323,8 +323,8 @@ declare module 'vona-module-commerce-trade' {
323
323
  }
324
324
  export interface IModelOptionsOrder {
325
325
  relations: {
326
- lines: IModelRelationHasMany<'commerce-trade:orderLine', 'orderId', false, '*', undefined, undefined, undefined>;
327
- shipment: IModelRelationHasOne<'commerce-trade:shipment', 'orderId', false, '*'>;
326
+ lines: IModelRelationHasMany<'commerce-trade:orderLine', 'orderId', false, 'id'|'skuCodeSnapshot'|'titleSnapshot'|'skuAttributesSnapshot'|'unitPriceCents'|'quantity'|'eligibleSubtotalCents'|'lineTotalCents', undefined, undefined, undefined>;
327
+ shipment: IModelRelationHasOne<'commerce-trade:shipment', 'orderId', false, 'id'|'carrier'|'trackingNumber'|'shippedAt'>;
328
328
  };
329
329
  }
330
330
  export interface ModelCart {
@@ -838,6 +838,9 @@ export * from '../dto/checkoutPaymentMethod.tsx';
838
838
  export * from '../dto/checkoutPaymentMethods.tsx';
839
839
  export * from '../dto/checkoutResult.tsx';
840
840
  export * from '../dto/orderAddressSnapshot.tsx';
841
+ export * from '../dto/orderAdminLineBase.tsx';
842
+ export * from '../dto/orderAdminLineResItem.tsx';
843
+ export * from '../dto/orderAdminLineView.tsx';
841
844
  export * from '../dto/orderCouponSnapshot.tsx';
842
845
  export * from '../dto/orderDetail.tsx';
843
846
  export * from '../dto/orderLineSkuAttributeSnapshot.tsx';
@@ -852,6 +855,8 @@ export * from '../dto/orderView.tsx';
852
855
  export * from '../dto/paymentOutcomeCreate.tsx';
853
856
  export * from '../dto/paymentOutcomeResult.tsx';
854
857
  export * from '../dto/refundOutcomeCreate.tsx';
858
+ export * from '../dto/refundRecoveryAction.tsx';
859
+ export * from '../dto/refundRecoveryView.tsx';
855
860
  export * from '../dto/refundRequestCreate.tsx';
856
861
  export * from '../dto/refundResult.tsx';
857
862
  export * from '../dto/refundReview.tsx';
@@ -878,6 +883,9 @@ import type { IDtoOptionsCheckoutPaymentMethod } from '../dto/checkoutPaymentMet
878
883
  import type { IDtoOptionsCheckoutPaymentMethods } from '../dto/checkoutPaymentMethods.tsx';
879
884
  import type { IDtoOptionsCheckoutResult } from '../dto/checkoutResult.tsx';
880
885
  import type { IDtoOptionsOrderAddressSnapshot } from '../dto/orderAddressSnapshot.tsx';
886
+ import type { IDtoOptionsOrderAdminLineBase } from '../dto/orderAdminLineBase.tsx';
887
+ import type { IDtoOptionsOrderAdminLineResItem } from '../dto/orderAdminLineResItem.tsx';
888
+ import type { IDtoOptionsOrderAdminLineView } from '../dto/orderAdminLineView.tsx';
881
889
  import type { IDtoOptionsOrderCouponSnapshot } from '../dto/orderCouponSnapshot.tsx';
882
890
  import type { IDtoOptionsOrderDetail } from '../dto/orderDetail.tsx';
883
891
  import type { IDtoOptionsOrderLineSkuAttributeSnapshot } from '../dto/orderLineSkuAttributeSnapshot.tsx';
@@ -892,6 +900,8 @@ import type { IDtoOptionsOrderView } from '../dto/orderView.tsx';
892
900
  import type { IDtoOptionsPaymentOutcomeCreate } from '../dto/paymentOutcomeCreate.tsx';
893
901
  import type { IDtoOptionsPaymentOutcomeResult } from '../dto/paymentOutcomeResult.tsx';
894
902
  import type { IDtoOptionsRefundOutcomeCreate } from '../dto/refundOutcomeCreate.tsx';
903
+ import type { IDtoOptionsRefundRecoveryAction } from '../dto/refundRecoveryAction.tsx';
904
+ import type { IDtoOptionsRefundRecoveryView } from '../dto/refundRecoveryView.tsx';
895
905
  import type { IDtoOptionsRefundRequestCreate } from '../dto/refundRequestCreate.tsx';
896
906
  import type { IDtoOptionsRefundResult } from '../dto/refundResult.tsx';
897
907
  import type { IDtoOptionsRefundReview } from '../dto/refundReview.tsx';
@@ -922,6 +932,9 @@ declare module 'vona-module-a-web' {
922
932
  'commerce-trade:checkoutPaymentMethods': IDtoOptionsCheckoutPaymentMethods;
923
933
  'commerce-trade:checkoutResult': IDtoOptionsCheckoutResult;
924
934
  'commerce-trade:orderAddressSnapshot': IDtoOptionsOrderAddressSnapshot;
935
+ 'commerce-trade:orderAdminLineBase': IDtoOptionsOrderAdminLineBase;
936
+ 'commerce-trade:orderAdminLineResItem': IDtoOptionsOrderAdminLineResItem;
937
+ 'commerce-trade:orderAdminLineView': IDtoOptionsOrderAdminLineView;
925
938
  'commerce-trade:orderCouponSnapshot': IDtoOptionsOrderCouponSnapshot;
926
939
  'commerce-trade:orderDetail': IDtoOptionsOrderDetail;
927
940
  'commerce-trade:orderLineSkuAttributeSnapshot': IDtoOptionsOrderLineSkuAttributeSnapshot;
@@ -936,6 +949,8 @@ declare module 'vona-module-a-web' {
936
949
  'commerce-trade:paymentOutcomeCreate': IDtoOptionsPaymentOutcomeCreate;
937
950
  'commerce-trade:paymentOutcomeResult': IDtoOptionsPaymentOutcomeResult;
938
951
  'commerce-trade:refundOutcomeCreate': IDtoOptionsRefundOutcomeCreate;
952
+ 'commerce-trade:refundRecoveryAction': IDtoOptionsRefundRecoveryAction;
953
+ 'commerce-trade:refundRecoveryView': IDtoOptionsRefundRecoveryView;
939
954
  'commerce-trade:refundRequestCreate': IDtoOptionsRefundRequestCreate;
940
955
  'commerce-trade:refundResult': IDtoOptionsRefundResult;
941
956
  'commerce-trade:refundReview': IDtoOptionsRefundReview;
@@ -971,6 +986,9 @@ import type { DtoCheckoutPaymentMethod } from '../dto/checkoutPaymentMethod.tsx'
971
986
  import type { DtoCheckoutPaymentMethods } from '../dto/checkoutPaymentMethods.tsx';
972
987
  import type { DtoCheckoutResult } from '../dto/checkoutResult.tsx';
973
988
  import type { DtoOrderAddressSnapshot } from '../dto/orderAddressSnapshot.tsx';
989
+ import type { DtoOrderAdminLineBase } from '../dto/orderAdminLineBase.tsx';
990
+ import type { DtoOrderAdminLineResItem } from '../dto/orderAdminLineResItem.tsx';
991
+ import type { DtoOrderAdminLineView } from '../dto/orderAdminLineView.tsx';
974
992
  import type { DtoOrderCouponSnapshot } from '../dto/orderCouponSnapshot.tsx';
975
993
  import type { DtoOrderDetail } from '../dto/orderDetail.tsx';
976
994
  import type { DtoOrderLineSkuAttributeSnapshot } from '../dto/orderLineSkuAttributeSnapshot.tsx';
@@ -985,6 +1003,8 @@ import type { DtoOrderView } from '../dto/orderView.tsx';
985
1003
  import type { DtoPaymentOutcomeCreate } from '../dto/paymentOutcomeCreate.tsx';
986
1004
  import type { DtoPaymentOutcomeResult } from '../dto/paymentOutcomeResult.tsx';
987
1005
  import type { DtoRefundOutcomeCreate } from '../dto/refundOutcomeCreate.tsx';
1006
+ import type { DtoRefundRecoveryAction } from '../dto/refundRecoveryAction.tsx';
1007
+ import type { DtoRefundRecoveryView } from '../dto/refundRecoveryView.tsx';
988
1008
  import type { DtoRefundRequestCreate } from '../dto/refundRequestCreate.tsx';
989
1009
  import type { DtoRefundResult } from '../dto/refundResult.tsx';
990
1010
  import type { DtoRefundReview } from '../dto/refundReview.tsx';
@@ -1040,6 +1060,18 @@ declare module 'vona-module-commerce-trade' {
1040
1060
  fields?: TypeEntityOptionsFields<DtoOrderAddressSnapshot, IDtoOptionsOrderAddressSnapshot[TypeSymbolKeyFieldsMore]>;
1041
1061
  }
1042
1062
 
1063
+ export interface IDtoOptionsOrderAdminLineBase {
1064
+ fields?: TypeEntityOptionsFields<DtoOrderAdminLineBase, IDtoOptionsOrderAdminLineBase[TypeSymbolKeyFieldsMore]>;
1065
+ }
1066
+
1067
+ export interface IDtoOptionsOrderAdminLineResItem {
1068
+ fields?: TypeEntityOptionsFields<DtoOrderAdminLineResItem, IDtoOptionsOrderAdminLineResItem[TypeSymbolKeyFieldsMore]>;
1069
+ }
1070
+
1071
+ export interface IDtoOptionsOrderAdminLineView {
1072
+ fields?: TypeEntityOptionsFields<DtoOrderAdminLineView, IDtoOptionsOrderAdminLineView[TypeSymbolKeyFieldsMore]>;
1073
+ }
1074
+
1043
1075
  export interface IDtoOptionsOrderCouponSnapshot {
1044
1076
  fields?: TypeEntityOptionsFields<DtoOrderCouponSnapshot, IDtoOptionsOrderCouponSnapshot[TypeSymbolKeyFieldsMore]>;
1045
1077
  }
@@ -1096,6 +1128,14 @@ declare module 'vona-module-commerce-trade' {
1096
1128
  fields?: TypeEntityOptionsFields<DtoRefundOutcomeCreate, IDtoOptionsRefundOutcomeCreate[TypeSymbolKeyFieldsMore]>;
1097
1129
  }
1098
1130
 
1131
+ export interface IDtoOptionsRefundRecoveryAction {
1132
+ fields?: TypeEntityOptionsFields<DtoRefundRecoveryAction, IDtoOptionsRefundRecoveryAction[TypeSymbolKeyFieldsMore]>;
1133
+ }
1134
+
1135
+ export interface IDtoOptionsRefundRecoveryView {
1136
+ fields?: TypeEntityOptionsFields<DtoRefundRecoveryView, IDtoOptionsRefundRecoveryView[TypeSymbolKeyFieldsMore]>;
1137
+ }
1138
+
1099
1139
  export interface IDtoOptionsRefundRequestCreate {
1100
1140
  fields?: TypeEntityOptionsFields<DtoRefundRequestCreate, IDtoOptionsRefundRequestCreate[TypeSymbolKeyFieldsMore]>;
1101
1141
  }
@@ -1286,6 +1326,7 @@ declare module 'vona-module-a-web' {
1286
1326
  '/commerce/trade/checkout/payment-methods': undefined;
1287
1327
  '/commerce/trade/order/mine': undefined;
1288
1328
  '/commerce/trade/order/viewMine/:id': undefined;
1329
+ '/commerce/trade/order/:id/refundRecovery': undefined;
1289
1330
  '/commerce/trade/order': undefined;
1290
1331
  '/commerce/trade/order/:id': undefined;
1291
1332
  '/commerce/trade/stockAudit': undefined;
@@ -1300,6 +1341,8 @@ export interface IApiPathPostRecord{
1300
1341
  '/commerce/trade/order/:id/approveRefund': undefined;
1301
1342
  '/commerce/trade/order/:id/rejectRefund': undefined;
1302
1343
  '/commerce/trade/order/:id/executeRefund': undefined;
1344
+ '/commerce/trade/order/:id/reconcileRefund': undefined;
1345
+ '/commerce/trade/order/:id/retryRefund': undefined;
1303
1346
  '/commerce/trade/order/:id/ship': undefined;
1304
1347
  '/commerce/trade/stockBalance/adjustStock': undefined;
1305
1348
  }
@@ -17,14 +17,32 @@ export default {
17
17
  OnHand: 'On Hand',
18
18
  Operations: 'Operations',
19
19
  Order: 'Order',
20
+ OrderAddress: 'Delivery address',
21
+ OrderCoupon: 'Coupon snapshot',
22
+ OrderDates: 'Record dates',
23
+ OrderFulfillment: 'Fulfillment',
20
24
  OrderLine: 'Order line',
21
25
  OrderLineId: 'Order line ID',
26
+ OrderLines: 'Purchased lines',
27
+ OrderMoney: 'Money summary',
28
+ OrderReservation: 'Reservation',
29
+ OrderState: 'Order state',
30
+ OrderStateAwaitingPayment: 'Awaiting payment',
31
+ OrderStateCancelled: 'Cancelled',
32
+ OrderStateExpired: 'Expired',
33
+ OrderStatePaid: 'Paid',
34
+ OrderStateRefundApproved: 'Refund approved',
35
+ OrderStateRefundRejected: 'Refund rejected',
36
+ OrderStateRefundRequested: 'Refund requested',
37
+ OrderStateRefunded: 'Refunded',
38
+ OrderStateShipped: 'Shipped',
22
39
  PayableTotalCents: 'Payable total (cents)',
23
40
  PriorAvailable: 'Prior Available',
24
41
  PriorOnHand: 'Prior On Hand',
25
42
  PriorReserved: 'Prior Reserved',
26
43
  Quantity: 'Quantity',
27
44
  Reason: 'Reason',
45
+ ReservationExpiresAt: 'Reservation deadline',
28
46
  ReservationState: 'Reservation State',
29
47
  Reserved: 'Reserved',
30
48
  SkuId: 'SKU ID',
@@ -34,5 +52,10 @@ export default {
34
52
  StockOperation: 'Stock Operation',
35
53
  StockReservation: 'Stock Reservation',
36
54
  StockReservationId: 'Stock Reservation ID',
55
+ SkuAttributesSnapshot: 'SKU attributes',
56
+ SkuCodeSnapshot: 'SKU code',
57
+ TitleSnapshot: 'Product title',
58
+ UnitPriceCents: 'Unit price (cents)',
59
+ LineTotalCents: 'Line total (cents)',
37
60
  UpdateCartItem: 'Update Cart Item',
38
61
  };
@@ -17,14 +17,32 @@ export default {
17
17
  OnHand: '现货库存',
18
18
  Operations: '操作',
19
19
  Order: '订单',
20
+ OrderAddress: '收货地址',
21
+ OrderCoupon: '优惠券快照',
22
+ OrderDates: '记录时间',
23
+ OrderFulfillment: '履约信息',
20
24
  OrderLine: '订单行',
21
25
  OrderLineId: '订单行 ID',
26
+ OrderLines: '购买商品',
27
+ OrderMoney: '金额汇总',
28
+ OrderReservation: '库存预留',
29
+ OrderState: '订单状态',
30
+ OrderStateAwaitingPayment: '待支付',
31
+ OrderStateCancelled: '已取消',
32
+ OrderStateExpired: '已过期',
33
+ OrderStatePaid: '已支付',
34
+ OrderStateRefundApproved: '退款已批准',
35
+ OrderStateRefundRejected: '退款被拒绝',
36
+ OrderStateRefundRequested: '申请退款',
37
+ OrderStateRefunded: '已退款',
38
+ OrderStateShipped: '已发货',
22
39
  PayableTotalCents: '应付总额(分)',
23
40
  PriorAvailable: '变更前可用库存',
24
41
  PriorOnHand: '变更前现货库存',
25
42
  PriorReserved: '变更前预留库存',
26
43
  Quantity: '数量',
27
44
  Reason: '原因',
45
+ ReservationExpiresAt: '预留截止时间',
28
46
  ReservationState: '预留状态',
29
47
  Reserved: '预留库存',
30
48
  SkuId: 'SKU ID',
@@ -34,5 +52,10 @@ export default {
34
52
  StockOperation: '库存操作',
35
53
  StockReservation: '库存预留',
36
54
  StockReservationId: '库存预留 ID',
55
+ SkuAttributesSnapshot: 'SKU 属性',
56
+ SkuCodeSnapshot: 'SKU 编码',
57
+ TitleSnapshot: '商品标题',
58
+ UnitPriceCents: '单价(分)',
59
+ LineTotalCents: '行金额(分)',
37
60
  UpdateCartItem: '更新购物车商品',
38
61
  };
@@ -16,6 +16,8 @@ import { DtoOrderSelectReq } from '../dto/orderSelectReq.tsx';
16
16
  import { DtoOrderSelectRes } from '../dto/orderSelectRes.tsx';
17
17
  import { DtoOrderShip } from '../dto/orderShip.tsx';
18
18
  import { DtoOrderView } from '../dto/orderView.tsx';
19
+ import { DtoRefundRecoveryAction } from '../dto/refundRecoveryAction.tsx';
20
+ import { DtoRefundRecoveryView } from '../dto/refundRecoveryView.tsx';
19
21
  import { DtoRefundRequestCreate } from '../dto/refundRequestCreate.tsx';
20
22
  import { DtoRefundResult } from '../dto/refundResult.tsx';
21
23
  import { DtoRefundReview } from '../dto/refundReview.tsx';
@@ -80,6 +82,35 @@ export class ControllerOrder extends BeanBase {
80
82
  return await this.scope.service.order.executeRefund(id);
81
83
  }
82
84
 
85
+ @Web.get(':id/refundRecovery')
86
+ @Api.body(DtoRefundRecoveryView)
87
+ @Passport.systemAdmin()
88
+ async refundRecovery(
89
+ @Arg.param('id', v.tableIdentity()) id: TableIdentity,
90
+ ): Promise<DtoRefundRecoveryView> {
91
+ return await this.scope.service.order.refundRecovery(id);
92
+ }
93
+
94
+ @Web.post(':id/reconcileRefund')
95
+ @Api.body(DtoRefundRecoveryView)
96
+ @Passport.systemAdmin()
97
+ async reconcileRefund(
98
+ @Arg.param('id', v.tableIdentity()) id: TableIdentity,
99
+ @Arg.body(DtoRefundRecoveryAction) command: DtoRefundRecoveryAction,
100
+ ): Promise<DtoRefundRecoveryView> {
101
+ return await this.scope.service.order.reconcileRefund(id, command);
102
+ }
103
+
104
+ @Web.post(':id/retryRefund')
105
+ @Api.body(DtoRefundRecoveryView)
106
+ @Passport.systemAdmin()
107
+ async retryRefund(
108
+ @Arg.param('id', v.tableIdentity()) id: TableIdentity,
109
+ @Arg.body(DtoRefundRecoveryAction) command: DtoRefundRecoveryAction,
110
+ ): Promise<DtoRefundRecoveryView> {
111
+ return await this.scope.service.order.retryRefund(id, command);
112
+ }
113
+
83
114
  @Web.post(':id/ship')
84
115
  @Api.body(DtoShipmentView)
85
116
  @Passport.systemAdmin()
@@ -0,0 +1,56 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { $makeMetadata, v } from 'vona-module-a-openapiutils';
4
+ import { $Dto } from 'vona-module-a-orm';
5
+ import { Dto } from 'vona-module-a-web';
6
+ import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
7
+
8
+ import { $locale } from '../.metadata/locales.ts';
9
+ import { ModelOrderLine } from '../model/orderLine.ts';
10
+
11
+ const currencyRendererOptions = { fixed: 2, exp: 2, zero: 2 };
12
+
13
+ export interface IDtoOptionsOrderAdminLineBase extends IDecoratorDtoOptions {}
14
+
15
+ @Dto<IDtoOptionsOrderAdminLineBase>({
16
+ fields: {
17
+ id: $makeMetadata(ZovaRender.visible(false)),
18
+ skuCodeSnapshot: $makeMetadata(v.title($locale('SkuCodeSnapshot')), ZovaRender.order(2)),
19
+ titleSnapshot: $makeMetadata(v.title($locale('TitleSnapshot')), ZovaRender.order(3)),
20
+ skuAttributesSnapshot: $makeMetadata(
21
+ v.title($locale('SkuAttributesSnapshot')),
22
+ ZovaRender.order(4),
23
+ ),
24
+ unitPriceCents: $makeMetadata(
25
+ v.title($locale('UnitPriceCents')),
26
+ ZovaRender.order(5),
27
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
28
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
29
+ ),
30
+ quantity: $makeMetadata(v.title($locale('Quantity')), ZovaRender.order(6)),
31
+ eligibleSubtotalCents: $makeMetadata(
32
+ v.title($locale('EligibleSubtotalCents')),
33
+ ZovaRender.order(7),
34
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
35
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
36
+ ),
37
+ lineTotalCents: $makeMetadata(
38
+ v.title($locale('LineTotalCents')),
39
+ ZovaRender.order(8),
40
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
41
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
42
+ ),
43
+ },
44
+ })
45
+ export class DtoOrderAdminLineBase extends $Dto.get(() => ModelOrderLine, {
46
+ columns: [
47
+ 'id',
48
+ 'skuCodeSnapshot',
49
+ 'titleSnapshot',
50
+ 'skuAttributesSnapshot',
51
+ 'unitPriceCents',
52
+ 'quantity',
53
+ 'eligibleSubtotalCents',
54
+ 'lineTotalCents',
55
+ ],
56
+ }) {}
@@ -0,0 +1,17 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Dto } from 'vona-module-a-web';
4
+ import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
5
+
6
+ import { DtoOrderAdminLineBase } from './orderAdminLineBase.tsx';
7
+
8
+ export interface IDtoOptionsOrderAdminLineResItem extends IDecoratorDtoOptions {}
9
+
10
+ @Dto<IDtoOptionsOrderAdminLineResItem>({
11
+ blocks: [
12
+ ZovaRender.block('basic-details:blockDetails', {
13
+ blocks: [ZovaRender.block('basic-details:blockTable')],
14
+ }),
15
+ ],
16
+ })
17
+ export class DtoOrderAdminLineResItem extends DtoOrderAdminLineBase {}
@@ -0,0 +1,13 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Dto } from 'vona-module-a-web';
4
+ import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
5
+
6
+ import { DtoOrderAdminLineBase } from './orderAdminLineBase.tsx';
7
+
8
+ export interface IDtoOptionsOrderAdminLineView extends IDecoratorDtoOptions {}
9
+
10
+ @Dto<IDtoOptionsOrderAdminLineView>({
11
+ blocks: [ZovaRender.block('basic-details:blockForm')],
12
+ })
13
+ export class DtoOrderAdminLineView extends DtoOrderAdminLineBase {}
@@ -1,13 +1,16 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
- import { Api, v } from 'vona-module-a-openapiutils';
3
+ import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
4
4
  import { $Dto } from 'vona-module-a-orm';
5
5
  import { Dto } from 'vona-module-a-web';
6
6
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
7
7
 
8
8
  import { $locale } from '../.metadata/locales.ts';
9
+ import { orderStateItems } from '../entity/order.tsx';
9
10
  import { ModelOrder } from '../model/order.ts';
10
11
 
12
+ const currencyRendererOptions = { fixed: 2, exp: 2, zero: 2 };
13
+
11
14
  export interface IDtoOptionsOrderSelectResItem extends IDecoratorDtoOptions {}
12
15
 
13
16
  @Dto<IDtoOptionsOrderSelectResItem>({
@@ -42,8 +45,29 @@ export interface IDtoOptionsOrderSelectResItem extends IDecoratorDtoOptions {}
42
45
  ],
43
46
  }),
44
47
  ],
48
+ fields: {
49
+ id: $makeMetadata(ZovaRender.order(1, 'core'), ZovaRender.cell('basic-table:actionView')),
50
+ state: $makeMetadata(
51
+ v.title($locale('OrderState')),
52
+ ZovaRender.order(2),
53
+ ZovaRender.cell('basic-select:select', { items: orderStateItems }),
54
+ ),
55
+ payableTotalCents: $makeMetadata(
56
+ v.title($locale('PayableTotalCents')),
57
+ ZovaRender.order(3),
58
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
59
+ ),
60
+ reservationExpiresAt: $makeMetadata(
61
+ v.title($locale('ReservationExpiresAt')),
62
+ ZovaRender.order(4),
63
+ ZovaRender.cell('basic-date:date'),
64
+ ),
65
+ createdAt: $makeMetadata(ZovaRender.order(5), ZovaRender.cell('basic-date:date')),
66
+ },
45
67
  })
46
- export class DtoOrderSelectResItem extends $Dto.get(() => ModelOrder) {
68
+ export class DtoOrderSelectResItem extends $Dto.get(() => ModelOrder, {
69
+ columns: ['id', 'state', 'payableTotalCents', 'reservationExpiresAt', 'createdAt'],
70
+ }) {
47
71
  @Api.field(
48
72
  v.title($locale('Operations')),
49
73
  ZovaRender.order(1, 'max'),
@@ -1,10 +1,18 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { Api, v } from 'vona-module-a-openapiutils';
3
4
  import { $Dto } from 'vona-module-a-orm';
4
5
  import { Dto } from 'vona-module-a-web';
5
6
  import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
6
7
 
8
+ import type { EntityOrder } from '../entity/order.tsx';
9
+
10
+ import { $locale } from '../.metadata/locales.ts';
11
+ import { orderStateItems } from '../entity/order.tsx';
7
12
  import { ModelOrder } from '../model/order.ts';
13
+ import { DtoOrderAdminLineResItem } from './orderAdminLineResItem.tsx';
14
+
15
+ const currencyRendererOptions = { fixed: 2, exp: 2, zero: 2 };
8
16
 
9
17
  export interface IDtoOptionsOrderView extends IDecoratorDtoOptions {}
10
18
 
@@ -12,7 +20,110 @@ export interface IDtoOptionsOrderView extends IDecoratorDtoOptions {}
12
20
  blocks: [
13
21
  ZovaRender.block('basic-pageentry:blockPageEntry', {
14
22
  blocks: [
15
- ZovaRender.block('basic-pageentry:blockForm'),
23
+ ZovaRender.block('basic-pageentry:blockForm', {
24
+ blocks: [
25
+ ZovaRender.block('basic-form:blockFormLayout', {
26
+ formLayout: {
27
+ children: [
28
+ {
29
+ type: 'group',
30
+ title: $locale('Order'),
31
+ children: [
32
+ {
33
+ type: 'section',
34
+ columns: { default: 1, md: 2 },
35
+ children: [
36
+ { type: 'field', name: 'id' },
37
+ { type: 'field', name: 'state' },
38
+ ],
39
+ },
40
+ ],
41
+ },
42
+ {
43
+ type: 'group',
44
+ title: $locale('OrderMoney'),
45
+ children: [
46
+ {
47
+ type: 'section',
48
+ columns: { default: 1, md: 2 },
49
+ children: [
50
+ { type: 'field', name: 'currency' },
51
+ { type: 'field', name: 'eligibleSubtotalCents' },
52
+ { type: 'field', name: 'discountCents' },
53
+ { type: 'field', name: 'payableTotalCents' },
54
+ ],
55
+ },
56
+ ],
57
+ },
58
+ {
59
+ type: 'group',
60
+ title: $locale('OrderReservation'),
61
+ children: [
62
+ {
63
+ type: 'section',
64
+ children: [{ type: 'field', name: 'reservationExpiresAt' }],
65
+ },
66
+ ],
67
+ },
68
+ {
69
+ type: 'group',
70
+ title: $locale('OrderAddress'),
71
+ children: [
72
+ {
73
+ type: 'section',
74
+ children: [{ type: 'field', name: 'addressSnapshot' }],
75
+ },
76
+ ],
77
+ },
78
+ {
79
+ type: 'group',
80
+ title: $locale('OrderCoupon'),
81
+ children: [
82
+ {
83
+ type: 'section',
84
+ children: [{ type: 'field', name: 'couponSnapshot' }],
85
+ },
86
+ ],
87
+ },
88
+ {
89
+ type: 'group',
90
+ title: $locale('OrderLines'),
91
+ children: [
92
+ {
93
+ type: 'section',
94
+ children: [{ type: 'field', name: 'lines' }],
95
+ },
96
+ ],
97
+ },
98
+ {
99
+ type: 'group',
100
+ title: $locale('OrderFulfillment'),
101
+ children: [
102
+ {
103
+ type: 'section',
104
+ children: [{ type: 'field', name: 'shipment' }],
105
+ },
106
+ ],
107
+ },
108
+ {
109
+ type: 'group',
110
+ title: $locale('OrderDates'),
111
+ children: [
112
+ {
113
+ type: 'section',
114
+ columns: { default: 1, md: 2 },
115
+ children: [
116
+ { type: 'field', name: 'createdAt' },
117
+ { type: 'field', name: 'updatedAt' },
118
+ ],
119
+ },
120
+ ],
121
+ },
122
+ ],
123
+ },
124
+ }),
125
+ ],
126
+ }),
16
127
  ZovaRender.block('basic-pageentry:blockToolbarRow', {
17
128
  actions: [
18
129
  ZovaRender.formActionRow('basic-form:actionBack', { permission: { public: true } }),
@@ -23,5 +134,88 @@ export interface IDtoOptionsOrderView extends IDecoratorDtoOptions {}
23
134
  ],
24
135
  })
25
136
  export class DtoOrderView extends $Dto.get(() => ModelOrder, {
26
- include: { shipment: true },
27
- }) {}
137
+ columns: [
138
+ 'id',
139
+ 'state',
140
+ 'currency',
141
+ 'eligibleSubtotalCents',
142
+ 'discountCents',
143
+ 'payableTotalCents',
144
+ 'reservationExpiresAt',
145
+ 'addressSnapshot',
146
+ 'couponSnapshot',
147
+ 'createdAt',
148
+ 'updatedAt',
149
+ ],
150
+ include: {
151
+ shipment: true,
152
+ lines: true,
153
+ },
154
+ }) {
155
+ @Api.field(
156
+ v.title($locale('OrderState')),
157
+ ZovaRender.order(2),
158
+ ZovaRender.field('basic-select:formFieldSelect', { items: orderStateItems }),
159
+ ZovaRender.cell('basic-select:select', { items: orderStateItems }),
160
+ )
161
+ declare state: EntityOrder['state'];
162
+
163
+ @Api.field(v.title($locale('Currency')), ZovaRender.order(3))
164
+ declare currency: EntityOrder['currency'];
165
+
166
+ @Api.field(
167
+ v.title($locale('EligibleSubtotalCents')),
168
+ ZovaRender.order(4),
169
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
170
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
171
+ )
172
+ declare eligibleSubtotalCents: number;
173
+
174
+ @Api.field(
175
+ v.title($locale('DiscountCents')),
176
+ ZovaRender.order(5),
177
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
178
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
179
+ )
180
+ declare discountCents: number;
181
+
182
+ @Api.field(
183
+ v.title($locale('PayableTotalCents')),
184
+ ZovaRender.order(6),
185
+ ZovaRender.field('basic-currency:formFieldCurrency', currencyRendererOptions),
186
+ ZovaRender.cell('basic-currency:currency', currencyRendererOptions),
187
+ )
188
+ declare payableTotalCents: number;
189
+
190
+ @Api.field(
191
+ v.title($locale('ReservationExpiresAt')),
192
+ ZovaRender.order(7),
193
+ ZovaRender.field('basic-date:formFieldDate'),
194
+ ZovaRender.cell('basic-date:date'),
195
+ )
196
+ declare reservationExpiresAt: Date;
197
+
198
+ @Api.field(
199
+ v.title($locale('OrderLines')),
200
+ ZovaRender.order(8),
201
+ ZovaRender.field('basic-details:formFieldDetails'),
202
+ )
203
+ declare lines: DtoOrderAdminLineResItem[];
204
+
205
+ @Api.field(
206
+ ZovaRender.order(9),
207
+ ZovaRender.field('basic-date:formFieldDate'),
208
+ ZovaRender.cell('basic-date:date'),
209
+ )
210
+ declare createdAt: Date;
211
+
212
+ @Api.field(
213
+ ZovaRender.order(10),
214
+ ZovaRender.field('basic-date:formFieldDate'),
215
+ ZovaRender.cell('basic-date:date'),
216
+ )
217
+ declare updatedAt: Date;
218
+
219
+ @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoOrderAdminLineResItem))
220
+ _lines?: DtoOrderAdminLineResItem[];
221
+ }
@@ -0,0 +1,19 @@
1
+ import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
+
3
+ import { Api, v } from 'vona-module-a-openapiutils';
4
+ import { Dto } from 'vona-module-a-web';
5
+ import { z } from 'zod';
6
+
7
+ export interface IDtoOptionsRefundRecoveryAction extends IDecoratorDtoOptions {}
8
+
9
+ @Dto<IDtoOptionsRefundRecoveryAction>()
10
+ export class DtoRefundRecoveryAction {
11
+ @Api.field(v.required(), v.min(1), v.max(255))
12
+ reason: string;
13
+
14
+ @Api.field(v.required(), v.min(1), v.max(100))
15
+ actionIdempotencyKey: string;
16
+
17
+ @Api.field(v.optional(), z.boolean())
18
+ acknowledgeRetryRisk?: boolean;
19
+ }