business-views.xml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Example: business-views.xml -->
  3. <views xmlns="ui-layout-definition">
  4. <!-- Base Entity View Pattern -->
  5. <view name="BaseEntityView" type="base" category="framework">
  6. <description>Base view pattern for CRUD operations on business entities</description>
  7. <metadata>
  8. <permissions>entity.read</permissions>
  9. </metadata>
  10. <data-context>
  11. <property name="currentEntity" type="object" scope="view" />
  12. <property name="entityList" type="IEnumerable" scope="view" />
  13. <property name="isLoading" type="bool" scope="view" />
  14. <property name="hasChanges" type="bool" scope="view" />
  15. </data-context>
  16. <windows>
  17. <window-ref name="BaseListWindow" role="main" default="true" />
  18. <window-ref name="BaseEditDialog" role="editor" modal="true" />
  19. <window-ref name="BaseViewDialog" role="viewer" modal="true" />
  20. </windows>
  21. <navigation>
  22. <action name="show-list" target="BaseListWindow" />
  23. <action name="edit-entity" target="BaseEditDialog" context="currentEntity" />
  24. <action name="view-entity" target="BaseViewDialog" context="currentEntity" />
  25. <action name="create-new" target="BaseEditDialog" />
  26. </navigation>
  27. <behaviors>
  28. <behavior name="refresh-data" scope="view" />
  29. <behavior name="save-changes" scope="view" />
  30. <behavior name="delete-entity" scope="view" />
  31. <behavior name="validate-entity" scope="view" />
  32. <behavior name="export-data" scope="view" />
  33. </behaviors>
  34. </view>
  35. <!-- Product Management View -->
  36. <view name="ProductView" type="business-entity" category="core" inherits="BaseEntityView">
  37. <description>Product management including inventory, pricing, and categorization</description>
  38. <metadata>
  39. <model-class>Product</model-class>
  40. <view-model-class>ProductViewModel</view-model-class>
  41. <controller-class>ProductController</controller-class>
  42. <permissions>product.read,product.write,product.delete</permissions>
  43. </metadata>
  44. <dependencies>
  45. <view-ref name="CategoryView" relationship="lookup" required="false">
  46. <interaction type="select-category" returns="category-id" />
  47. </view-ref>
  48. <view-ref name="SupplierView" relationship="reference" required="false">
  49. <interaction type="view-supplier" context="supplier-id" />
  50. </view-ref>
  51. <shared-component name="ImageUploadComponent" required="true" />
  52. <shared-component name="PriceHistoryComponent" required="false" />
  53. </dependencies>
  54. <data-context>
  55. <property name="currentProduct" type="Product" scope="view" />
  56. <property name="productList" type="ProductList" scope="view" />
  57. <property name="selectedCategory" type="Category" scope="shared" />
  58. <property name="priceHistory" type="PriceHistoryList" scope="view" />
  59. </data-context>
  60. <windows>
  61. <window-ref name="ProductListWindow" role="main" default="true" />
  62. <window-ref name="ProductEditDialog" role="editor" modal="true" />
  63. <window-ref name="ProductDetailsWindow" role="viewer" />
  64. <window-ref name="ProductCatalogWindow" role="catalog" />
  65. <window-ref name="ProductImportDialog" role="utility" modal="true" />
  66. </windows>
  67. <navigation>
  68. <!-- Override base actions with product-specific implementations -->
  69. <action name="edit-entity" target="ProductEditDialog" context="currentProduct" />
  70. <action name="view-entity" target="ProductDetailsWindow" context="currentProduct" />
  71. <!-- Add product-specific actions -->
  72. <action name="view-catalog" target="ProductCatalogWindow" />
  73. <action name="import-products" target="ProductImportDialog" />
  74. <action name="manage-inventory" target="ProductEditDialog" context="currentProduct" />
  75. </navigation>
  76. <behaviors>
  77. <!-- Inherit base behaviors and add product-specific ones -->
  78. <behavior name="update-inventory" scope="view" />
  79. <behavior name="calculate-pricing" scope="view" />
  80. <behavior name="generate-barcode" scope="view" />
  81. <behavior name="check-stock-levels" scope="view" />
  82. </behaviors>
  83. <communication>
  84. <publishes>
  85. <event name="product-saved" data="product-id" />
  86. <event name="product-deleted" data="product-id" />
  87. <event name="inventory-updated" data="product-id,new-quantity" />
  88. </publishes>
  89. <subscribes>
  90. <event name="category-changed" source="CategoryView" handler="refresh-product-list" />
  91. <event name="supplier-updated" source="SupplierView" handler="update-supplier-info" />
  92. </subscribes>
  93. </communication>
  94. </view>
  95. <!-- Category Management View -->
  96. <view name="CategoryView" type="business-entity" category="core" inherits="BaseEntityView">
  97. <description>Product category management with hierarchical structure</description>
  98. <metadata>
  99. <model-class>Category</model-class>
  100. <view-model-class>CategoryViewModel</view-model-class>
  101. <controller-class>CategoryController</controller-class>
  102. <permissions>category.read,category.write</permissions>
  103. </metadata>
  104. <data-context>
  105. <property name="currentCategory" type="Category" scope="view" />
  106. <property name="categoryTree" type="CategoryTree" scope="view" />
  107. <property name="selectedParentCategory" type="Category" scope="view" />
  108. </data-context>
  109. <windows>
  110. <window-ref name="CategoryTreeWindow" role="main" default="true" />
  111. <window-ref name="CategoryEditDialog" role="editor" modal="true" />
  112. <window-ref name="CategoryListDialog" role="utility" modal="true" />
  113. </windows>
  114. <navigation>
  115. <action name="show-tree" target="CategoryTreeWindow" />
  116. <action name="edit-category" target="CategoryEditDialog" context="currentCategory" />
  117. <action name="select-category" target="CategoryListDialog" />
  118. <action name="create-subcategory" target="CategoryEditDialog" context="selectedParentCategory" />
  119. </navigation>
  120. <behaviors>
  121. <behavior name="move-category" scope="view" />
  122. <behavior name="merge-categories" scope="view" />
  123. <behavior name="update-hierarchy" scope="view" />
  124. </behaviors>
  125. <communication>
  126. <publishes>
  127. <event name="category-selected" data="category-id" />
  128. <event name="category-moved" data="category-id,new-parent-id" />
  129. </publishes>
  130. </communication>
  131. </view>
  132. <!-- Customer Management View -->
  133. <view name="CustomerView" type="business-entity" category="core" inherits="BaseEntityView">
  134. <description>Customer relationship management including contacts and order history</description>
  135. <metadata>
  136. <model-class>Customer</model-class>
  137. <view-model-class>CustomerViewModel</view-model-class>
  138. <controller-class>CustomerController</controller-class>
  139. <permissions>customer.read,customer.write,customer.delete</permissions>
  140. </metadata>
  141. <dependencies>
  142. <view-ref name="OrderView" relationship="reference" required="false">
  143. <interaction type="view-orders" context="customer-id" />
  144. </view-ref>
  145. <shared-component name="AddressComponent" required="true" />
  146. <shared-component name="ContactHistoryComponent" required="false" />
  147. </dependencies>
  148. <data-context>
  149. <property name="currentCustomer" type="Customer" scope="view" />
  150. <property name="customerList" type="CustomerList" scope="view" />
  151. <property name="customerOrders" type="OrderList" scope="view" />
  152. <property name="contactHistory" type="ContactHistoryList" scope="view" />
  153. </data-context>
  154. <windows>
  155. <window-ref name="CustomerListWindow" role="main" default="true" />
  156. <window-ref name="CustomerEditDialog" role="editor" modal="true" />
  157. <window-ref name="CustomerDetailsWindow" role="viewer" />
  158. <window-ref name="CustomerSearchDialog" role="utility" modal="true" />
  159. </windows>
  160. <navigation>
  161. <action name="search-customers" target="CustomerSearchDialog" />
  162. <action name="view-orders" target="OrderView" context="currentCustomer" />
  163. <action name="send-marketing" target="CustomerDetailsWindow" context="currentCustomer" />
  164. </navigation>
  165. <behaviors>
  166. <behavior name="merge-customers" scope="view" />
  167. <behavior name="calculate-customer-value" scope="view" />
  168. <behavior name="generate-reports" scope="view" />
  169. </behaviors>
  170. <communication>
  171. <publishes>
  172. <event name="customer-selected" data="customer-id" />
  173. <event name="customer-updated" data="customer-id" />
  174. </publishes>
  175. <subscribes>
  176. <event name="order-created" source="OrderView" handler="refresh-customer-orders" />
  177. </subscribes>
  178. </communication>
  179. </view>
  180. <!-- Order Management View -->
  181. <view name="OrderView" type="business-entity" category="core" inherits="BaseEntityView">
  182. <description>Order processing including items, shipping, and payment tracking</description>
  183. <metadata>
  184. <model-class>Order</model-class>
  185. <view-model-class>OrderViewModel</view-model-class>
  186. <controller-class>OrderController</controller-class>
  187. <permissions>order.read,order.write,order.process</permissions>
  188. </metadata>
  189. <dependencies>
  190. <view-ref name="OrderItemView" relationship="detail" required="true">
  191. <interaction type="manage-items" context="current-order" />
  192. </view-ref>
  193. <view-ref name="CustomerView" relationship="reference" required="false">
  194. <interaction type="view-customer" context="customer-id" />
  195. </view-ref>
  196. <view-ref name="ProductView" relationship="lookup" required="false">
  197. <interaction type="select-product" returns="product-id" />
  198. </view-ref>
  199. <shared-component name="PaymentProcessingComponent" required="true" />
  200. <shared-component name="ShippingComponent" required="true" />
  201. </dependencies>
  202. <data-context>
  203. <property name="currentOrder" type="Order" scope="view" />
  204. <property name="orderList" type="OrderList" scope="view" />
  205. <property name="orderItems" type="OrderItemList" scope="shared" />
  206. <property name="paymentStatus" type="PaymentStatus" scope="view" />
  207. <property name="shippingInfo" type="ShippingInfo" scope="view" />
  208. </data-context>
  209. <windows>
  210. <window-ref name="OrderListWindow" role="main" default="true" />
  211. <window-ref name="OrderEditDialog" role="editor" modal="true" />
  212. <window-ref name="OrderDetailsWindow" role="viewer" />
  213. <window-ref name="OrderStatusDialog" role="utility" modal="true" />
  214. </windows>
  215. <navigation>
  216. <action name="process-payment" target="OrderEditDialog" context="currentOrder" />
  217. <action name="update-shipping" target="OrderEditDialog" context="currentOrder" />
  218. <action name="view-status" target="OrderStatusDialog" context="currentOrder" />
  219. <action name="print-invoice" target="OrderDetailsWindow" context="currentOrder" />
  220. </navigation>
  221. <behaviors>
  222. <behavior name="calculate-totals" scope="view" />
  223. <behavior name="process-order" scope="view" />
  224. <behavior name="generate-invoice" scope="view" />
  225. <behavior name="track-shipment" scope="view" />
  226. </behaviors>
  227. <communication>
  228. <publishes>
  229. <event name="order-created" data="order-id" />
  230. <event name="order-processed" data="order-id" />
  231. <event name="order-shipped" data="order-id,tracking-number" />
  232. </publishes>
  233. <subscribes>
  234. <event name="customer-changed" source="CustomerView" handler="update-customer-info" />
  235. <event name="inventory-updated" source="ProductView" handler="check-availability" />
  236. </subscribes>
  237. </communication>
  238. </view>
  239. <!-- Order Item Management View (Detail view) -->
  240. <view name="OrderItemView" type="business-entity" category="core">
  241. <description>Individual order item management within an order context</description>
  242. <metadata>
  243. <model-class>OrderItem</model-class>
  244. <view-model-class>OrderItemViewModel</view-model-class>
  245. <controller-class>OrderItemController</controller-class>
  246. <permissions>order.write</permissions>
  247. </metadata>
  248. <dependencies>
  249. <view-ref name="ProductView" relationship="lookup" required="true">
  250. <interaction type="select-product" returns="product-id,product-details" />
  251. </view-ref>
  252. </dependencies>
  253. <data-context>
  254. <property name="currentOrderItem" type="OrderItem" scope="view" />
  255. <property name="orderItemList" type="OrderItemList" scope="shared" />
  256. <property name="parentOrder" type="Order" scope="shared" />
  257. <property name="availableProducts" type="ProductList" scope="view" />
  258. </data-context>
  259. <windows>
  260. <window-ref name="OrderItemsGrid" role="main" default="true" />
  261. <window-ref name="OrderItemEditDialog" role="editor" modal="true" />
  262. </windows>
  263. <navigation>
  264. <action name="add-item" target="OrderItemEditDialog" />
  265. <action name="edit-item" target="OrderItemEditDialog" context="currentOrderItem" />
  266. <action name="select-product" target="ProductView" />
  267. </navigation>
  268. <behaviors>
  269. <behavior name="calculate-line-total" scope="view" />
  270. <behavior name="validate-quantity" scope="view" />
  271. <behavior name="check-availability" scope="view" />
  272. </behaviors>
  273. <communication>
  274. <publishes>
  275. <event name="item-added" data="order-item-id" />
  276. <event name="item-updated" data="order-item-id" />
  277. <event name="item-removed" data="order-item-id" />
  278. </publishes>
  279. <subscribes>
  280. <event name="product-selected" source="ProductView" handler="add-product-to-order" />
  281. <event name="order-changed" source="OrderView" handler="load-order-items" />
  282. </subscribes>
  283. </communication>
  284. </view>
  285. </views>