@things-factory/worksheet-base 5.0.0-alpha.5 → 5.0.0-alpha.52

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 (243) hide show
  1. package/dist-server/constants/template.js +1 -0
  2. package/dist-server/constants/template.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +24 -10
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-worksheet-controller.js +22 -13
  6. package/dist-server/controllers/inbound/putaway-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +309 -4
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/index.js +2 -0
  10. package/dist-server/controllers/index.js.map +1 -1
  11. package/dist-server/controllers/outbound/loading-worksheet-controller.js +56 -9
  12. package/dist-server/controllers/outbound/loading-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/outbound/packing-worksheet-controller.js +172 -7
  14. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  15. package/dist-server/controllers/outbound/picking-worksheet-controller.js +500 -18
  16. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  17. package/dist-server/controllers/outbound/returning-worksheet-controller.js +11 -1
  18. package/dist-server/controllers/outbound/returning-worksheet-controller.js.map +1 -1
  19. package/dist-server/controllers/outbound/sorting-worksheet-controller.js +215 -12
  20. package/dist-server/controllers/outbound/sorting-worksheet-controller.js.map +1 -1
  21. package/dist-server/controllers/render-fm-grn.js +229 -0
  22. package/dist-server/controllers/render-fm-grn.js.map +1 -0
  23. package/dist-server/controllers/render-grn.js +77 -45
  24. package/dist-server/controllers/render-grn.js.map +1 -1
  25. package/dist-server/controllers/render-invoices.js +103 -65
  26. package/dist-server/controllers/render-invoices.js.map +1 -1
  27. package/dist-server/controllers/render-manifest.js +12 -5
  28. package/dist-server/controllers/render-manifest.js.map +1 -1
  29. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  30. package/dist-server/controllers/render-orientage-grn.js +1 -0
  31. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  32. package/dist-server/controllers/render-po.js +147 -0
  33. package/dist-server/controllers/render-po.js.map +1 -0
  34. package/dist-server/controllers/render-ro-do.js +65 -1
  35. package/dist-server/controllers/render-ro-do.js.map +1 -1
  36. package/dist-server/controllers/worksheet-controller.js +23 -1
  37. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  38. package/dist-server/entities/index.js +2 -1
  39. package/dist-server/entities/index.js.map +1 -1
  40. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js +174 -0
  41. package/dist-server/entities/warehouse-bizplace-onhand-inventory.js.map +1 -0
  42. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js +14 -1
  43. package/dist-server/graphql/resolvers/worksheet/batch-picking-worksheet.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js +17 -0
  45. package/dist-server/graphql/resolvers/worksheet/cancel-draft-release-order.js.map +1 -0
  46. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js +12 -4
  47. package/dist-server/graphql/resolvers/worksheet/cycle-count-adjustment.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js +30 -1
  49. package/dist-server/graphql/resolvers/worksheet/find-release-orders-by-task-no.js.map +1 -1
  50. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js +27 -23
  51. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.js.map +1 -1
  52. package/dist-server/graphql/resolvers/worksheet/index.js +2 -1
  53. package/dist-server/graphql/resolvers/worksheet/index.js.map +1 -1
  54. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js +3 -0
  55. package/dist-server/graphql/resolvers/worksheet/inventories-by-pallet.js.map +1 -1
  56. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js +48 -2
  57. package/dist-server/graphql/resolvers/worksheet/loading/complete-loading.js.map +1 -1
  58. package/dist-server/graphql/resolvers/worksheet/loading/loading.js +3 -10
  59. package/dist-server/graphql/resolvers/worksheet/loading/loading.js.map +1 -1
  60. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js +55 -21
  61. package/dist-server/graphql/resolvers/worksheet/loading-worksheet.js.map +1 -1
  62. package/dist-server/graphql/resolvers/worksheet/packing/index.js +2 -1
  63. package/dist-server/graphql/resolvers/worksheet/packing/index.js.map +1 -1
  64. package/dist-server/graphql/resolvers/worksheet/packing/packing.js +4 -4
  65. package/dist-server/graphql/resolvers/worksheet/packing/packing.js.map +1 -1
  66. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js +4 -4
  67. package/dist-server/graphql/resolvers/worksheet/packing/scan-product-packing.js.map +1 -1
  68. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js +15 -0
  69. package/dist-server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.js.map +1 -0
  70. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +153 -132
  71. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  72. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js +2 -5
  73. package/dist-server/graphql/resolvers/worksheet/palletizing-pallets.js.map +1 -1
  74. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +13 -10
  75. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  76. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js +1 -1
  77. package/dist-server/graphql/resolvers/worksheet/picking/complete-batch-picking.js.map +1 -1
  78. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +14 -25
  79. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  80. package/dist-server/graphql/resolvers/worksheet/picking/index.js +3 -1
  81. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  82. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js +49 -58
  83. package/dist-server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.js.map +1 -1
  84. package/dist-server/graphql/resolvers/worksheet/picking/picking.js +4 -4
  85. package/dist-server/graphql/resolvers/worksheet/picking/picking.js.map +1 -1
  86. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js +4 -4
  87. package/dist-server/graphql/resolvers/worksheet/picking/scan-product-picking.js.map +1 -1
  88. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js +15 -0
  89. package/dist-server/graphql/resolvers/worksheet/picking/seal-tote.js.map +1 -0
  90. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js +15 -0
  91. package/dist-server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.js.map +1 -0
  92. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +10 -1
  93. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  94. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js +36 -0
  95. package/dist-server/graphql/resolvers/worksheet/putaway/complete-putaway.js.map +1 -1
  96. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js +11 -6
  97. package/dist-server/graphql/resolvers/worksheet/sorting/complete-order-sorting.js.map +1 -1
  98. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js +4 -4
  99. package/dist-server/graphql/resolvers/worksheet/sorting/scan-product-sorting.js.map +1 -1
  100. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js +4 -4
  101. package/dist-server/graphql/resolvers/worksheet/sorting/sorting-product.js.map +1 -1
  102. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +6 -0
  103. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  104. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js +3 -2
  105. package/dist-server/graphql/resolvers/worksheet/unloaded-inventories.js.map +1 -1
  106. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js +0 -21
  107. package/dist-server/graphql/resolvers/worksheet/unloading/complete-unloading.js.map +1 -1
  108. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +3 -1
  109. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  110. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js +15 -0
  111. package/dist-server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.js.map +1 -0
  112. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js +15 -0
  113. package/dist-server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.js.map +1 -0
  114. package/dist-server/graphql/resolvers/worksheet/unloading/unload.js.map +1 -1
  115. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +3 -1
  116. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  117. package/dist-server/graphql/resolvers/worksheet/worksheet.js +2 -0
  118. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  119. package/dist-server/graphql/resolvers/worksheet/worksheets.js +45 -5
  120. package/dist-server/graphql/resolvers/worksheet/worksheets.js.map +1 -1
  121. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js +13 -8
  122. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.js.map +1 -1
  123. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js +19 -4
  124. package/dist-server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.js.map +1 -1
  125. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js +24 -34
  126. package/dist-server/graphql/resolvers/worksheet-detail/generate-pallet-id.js.map +1 -1
  127. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js +12 -3
  128. package/dist-server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.js.map +1 -1
  129. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js +10 -2
  130. package/dist-server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.js.map +1 -1
  131. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js +2 -5
  132. package/dist-server/graphql/resolvers/worksheet-movement/create-worksheet-movement.js.map +1 -1
  133. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js +11 -0
  134. package/dist-server/graphql/types/worksheet/find-release-orders-by-task-no.js.map +1 -0
  135. package/dist-server/graphql/types/worksheet/index.js +52 -11
  136. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  137. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js +1 -0
  138. package/dist-server/graphql/types/worksheet/loaded-worksheet-detail.js.map +1 -1
  139. package/dist-server/graphql/types/worksheet/picking-assignment-status.js +2 -2
  140. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js +8 -3
  141. package/dist-server/graphql/types/worksheet/worksheet-detail-info.js.map +1 -1
  142. package/dist-server/graphql/types/worksheet/worksheet-info.js +3 -0
  143. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  144. package/dist-server/graphql/types/worksheet/worksheet-patch.js +1 -0
  145. package/dist-server/graphql/types/worksheet/worksheet-patch.js.map +1 -1
  146. package/dist-server/graphql/types/worksheet/worksheet.js +1 -0
  147. package/dist-server/graphql/types/worksheet/worksheet.js.map +1 -1
  148. package/dist-server/graphql/types/worksheet-detail/index.js +0 -2
  149. package/dist-server/graphql/types/worksheet-detail/index.js.map +1 -1
  150. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js +5 -2
  151. package/dist-server/graphql/types/worksheet-detail/inventory-detail.js.map +1 -1
  152. package/dist-server/graphql/types/worksheet-detail/worksheet-detail-patch.js +1 -1
  153. package/dist-server/index.js +5 -0
  154. package/dist-server/index.js.map +1 -1
  155. package/dist-server/routes.js +12 -0
  156. package/dist-server/routes.js.map +1 -1
  157. package/dist-server/utils/inventory-util.js +14 -25
  158. package/dist-server/utils/inventory-util.js.map +1 -1
  159. package/dist-server/utils/worksheet-no-generator.js +25 -28
  160. package/dist-server/utils/worksheet-no-generator.js.map +1 -1
  161. package/package.json +17 -17
  162. package/server/constants/template.ts +1 -0
  163. package/server/controllers/ecommerce/sellercraft-controller.ts +38 -10
  164. package/server/controllers/inbound/putaway-worksheet-controller.ts +27 -13
  165. package/server/controllers/inbound/unloading-worksheet-controller.ts +376 -8
  166. package/server/controllers/index.ts +3 -0
  167. package/server/controllers/outbound/loading-worksheet-controller.ts +94 -15
  168. package/server/controllers/outbound/packing-worksheet-controller.ts +224 -9
  169. package/server/controllers/outbound/picking-worksheet-controller.ts +653 -24
  170. package/server/controllers/outbound/returning-worksheet-controller.ts +12 -1
  171. package/server/controllers/outbound/sorting-worksheet-controller.ts +303 -18
  172. package/server/controllers/render-fm-grn.ts +266 -0
  173. package/server/controllers/render-grn.ts +95 -52
  174. package/server/controllers/render-invoices.ts +119 -72
  175. package/server/controllers/render-manifest.ts +12 -5
  176. package/server/controllers/render-orientage-do.ts +11 -11
  177. package/server/controllers/render-orientage-grn.ts +12 -11
  178. package/server/controllers/render-po.ts +170 -0
  179. package/server/controllers/render-ro-do.ts +93 -8
  180. package/server/controllers/worksheet-controller.ts +32 -3
  181. package/server/entities/index.ts +2 -1
  182. package/server/entities/warehouse-bizplace-onhand-inventory.ts +147 -0
  183. package/server/graphql/resolvers/worksheet/batch-picking-worksheet.ts +14 -0
  184. package/server/graphql/resolvers/worksheet/cancel-draft-release-order.ts +27 -0
  185. package/server/graphql/resolvers/worksheet/cycle-count-adjustment.ts +15 -5
  186. package/server/graphql/resolvers/worksheet/find-release-orders-by-task-no.ts +35 -2
  187. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-arrival-notice-worksheet.ts +35 -25
  188. package/server/graphql/resolvers/worksheet/index.ts +3 -1
  189. package/server/graphql/resolvers/worksheet/inventories-by-pallet.ts +2 -0
  190. package/server/graphql/resolvers/worksheet/loading/complete-loading.ts +67 -8
  191. package/server/graphql/resolvers/worksheet/loading/loading.ts +5 -12
  192. package/server/graphql/resolvers/worksheet/loading-worksheet.ts +66 -13
  193. package/server/graphql/resolvers/worksheet/packing/index.ts +3 -1
  194. package/server/graphql/resolvers/worksheet/packing/packing.ts +5 -4
  195. package/server/graphql/resolvers/worksheet/packing/scan-product-packing.ts +9 -4
  196. package/server/graphql/resolvers/worksheet/packing/undo-serial-number-packing.ts +24 -0
  197. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +167 -145
  198. package/server/graphql/resolvers/worksheet/palletizing-pallets.ts +2 -2
  199. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +15 -11
  200. package/server/graphql/resolvers/worksheet/picking/complete-batch-picking.ts +1 -1
  201. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +18 -31
  202. package/server/graphql/resolvers/worksheet/picking/index.ts +5 -1
  203. package/server/graphql/resolvers/worksheet/picking/picking-assignment-status-by-user.ts +62 -61
  204. package/server/graphql/resolvers/worksheet/picking/picking.ts +30 -4
  205. package/server/graphql/resolvers/worksheet/picking/scan-product-picking.ts +7 -4
  206. package/server/graphql/resolvers/worksheet/picking/seal-tote.ts +25 -0
  207. package/server/graphql/resolvers/worksheet/picking/undo-serial-number-picking.ts +24 -0
  208. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +13 -2
  209. package/server/graphql/resolvers/worksheet/putaway/complete-putaway.ts +45 -2
  210. package/server/graphql/resolvers/worksheet/sorting/complete-order-sorting.ts +13 -9
  211. package/server/graphql/resolvers/worksheet/sorting/scan-product-sorting.ts +6 -4
  212. package/server/graphql/resolvers/worksheet/sorting/sorting-product.ts +6 -4
  213. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +6 -0
  214. package/server/graphql/resolvers/worksheet/unloaded-inventories.ts +6 -2
  215. package/server/graphql/resolvers/worksheet/unloading/complete-unloading.ts +0 -25
  216. package/server/graphql/resolvers/worksheet/unloading/index.ts +4 -0
  217. package/server/graphql/resolvers/worksheet/unloading/scan-serial-number-unload.ts +26 -0
  218. package/server/graphql/resolvers/worksheet/unloading/undo-serial-number-unload.ts +24 -0
  219. package/server/graphql/resolvers/worksheet/unloading/unload.ts +3 -1
  220. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +3 -1
  221. package/server/graphql/resolvers/worksheet/worksheet.ts +2 -0
  222. package/server/graphql/resolvers/worksheet/worksheets.ts +64 -5
  223. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details-by-bulk.ts +30 -14
  224. package/server/graphql/resolvers/worksheet-detail/generate-batch-picking-worksheet-details.ts +39 -11
  225. package/server/graphql/resolvers/worksheet-detail/generate-pallet-id.ts +46 -49
  226. package/server/graphql/resolvers/worksheet-detail/generate-picking-worksheet-details.ts +15 -3
  227. package/server/graphql/resolvers/worksheet-detail/generate-release-good-worksheet-details.ts +18 -1
  228. package/server/graphql/resolvers/worksheet-movement/create-worksheet-movement.ts +2 -2
  229. package/server/graphql/types/worksheet/find-release-orders-by-task-no.ts +8 -0
  230. package/server/graphql/types/worksheet/index.ts +52 -11
  231. package/server/graphql/types/worksheet/loaded-worksheet-detail.ts +1 -0
  232. package/server/graphql/types/worksheet/picking-assignment-status.ts +2 -2
  233. package/server/graphql/types/worksheet/worksheet-detail-info.ts +8 -3
  234. package/server/graphql/types/worksheet/worksheet-info.ts +3 -0
  235. package/server/graphql/types/worksheet/worksheet-patch.ts +1 -0
  236. package/server/graphql/types/worksheet/worksheet.ts +1 -0
  237. package/server/graphql/types/worksheet-detail/index.ts +0 -2
  238. package/server/graphql/types/worksheet-detail/inventory-detail.ts +5 -2
  239. package/server/graphql/types/worksheet-detail/worksheet-detail-patch.ts +1 -1
  240. package/server/index.ts +5 -0
  241. package/server/routes.ts +17 -0
  242. package/server/utils/inventory-util.ts +15 -23
  243. package/server/utils/worksheet-no-generator.ts +25 -25
@@ -0,0 +1,266 @@
1
+ import FormData from 'form-data'
2
+ import _ from 'lodash'
3
+ import fetch from 'node-fetch'
4
+ import { getRepository, IsNull, Not } from 'typeorm'
5
+
6
+ import { Attachment, STORAGE } from '@things-factory/attachment-base'
7
+ import { Partner } from '@things-factory/auth-base'
8
+ import { Bizplace, ContactPoint } from '@things-factory/biz-base'
9
+ import { config } from '@things-factory/env'
10
+ import { ArrivalNotice, GoodsReceivalNote, ORDER_STATUS, OrderProduct } from '@things-factory/sales-base'
11
+ import { Domain } from '@things-factory/shell'
12
+ import { InventoryItem, ReducedInventoryHistory } from '@things-factory/warehouse-base'
13
+
14
+ import { TEMPLATE_TYPE, WORKSHEET_TYPE } from '../constants'
15
+ import { Worksheet } from '../entities'
16
+ import { DateTimeConverter } from '../utils/datetime-util'
17
+
18
+ const REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')
19
+
20
+ export async function renderFmGRN({ grnNo, timezoneOffSet }, context: any) {
21
+ // 1. find domain
22
+ const domain: Domain = await getRepository(Domain).findOne({
23
+ where: { id: context.state.domain.id }
24
+ })
25
+
26
+ // 2. find grn
27
+ const foundGRN: GoodsReceivalNote = await getRepository(GoodsReceivalNote).findOne({
28
+ where: { domain, name: grnNo },
29
+ relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'arrivalNotice']
30
+ })
31
+
32
+ // 3. find GAN
33
+ const foundGAN: ArrivalNotice = foundGRN.arrivalNotice
34
+ const ownRefNo = foundGAN.refNo
35
+
36
+ const foundInventoryItem: InventoryItem[] = await getRepository(InventoryItem).query(
37
+ `select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`
38
+ )
39
+
40
+ // 4. find customer bizplace
41
+ const partnerBiz: Bizplace = foundGRN.bizplace
42
+
43
+ const partnerDomain: Partner = await getRepository(Partner).findOne({
44
+ where: { partnerDomain: partnerBiz.domain, domain },
45
+ relations: ['domain']
46
+ })
47
+
48
+ const domainOwner: Domain = partnerDomain.domain
49
+ const domainBizplace: Bizplace = await getRepository(Bizplace).findOne({
50
+ where: { domain: domainOwner },
51
+ relations: ['company']
52
+ })
53
+
54
+ const qbReducedInventory = getRepository(ReducedInventoryHistory)
55
+ .createQueryBuilder('ivh')
56
+ .select('product_id', 'productId')
57
+ .addSelect('batch_id', 'batchId')
58
+ .addSelect('reusable_pallet_id', 'reusablePalletId')
59
+ .addSelect('packing_type', 'packingType')
60
+ .addSelect('sum(qty)', 'qty')
61
+ .addSelect('sum(uom_value)', 'uomValue')
62
+ .addSelect('uom', 'uom')
63
+ .addSelect('expiration_date', 'expiryDate')
64
+ .addSelect('count(distinct pallet_id)', 'pallet')
65
+ .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, 'palletId')
66
+ .where('ivh.domain_id = :domainId', { domainId: domain.id })
67
+ .andWhere('ivh.ref_order_id = :refOrderId', { refOrderId: foundGAN.id })
68
+ .andWhere(`ivh.transaction_type = 'UNLOADING'`)
69
+ .groupBy('reusable_pallet_id')
70
+ .addGroupBy('product_id')
71
+ .addGroupBy('batch_id')
72
+ .addGroupBy('packing_type')
73
+ .addGroupBy('uom')
74
+ .addGroupBy('expiration_date')
75
+ .getRawMany()
76
+
77
+ // 5. find domain contact point
78
+ const foundCP: ContactPoint = await getRepository(ContactPoint).findOne({
79
+ where: { domain, bizplace: domainBizplace }
80
+ })
81
+
82
+ // 5. find domain contact point
83
+ const foundPartnerCP: ContactPoint = await getRepository(ContactPoint).findOne({
84
+ where: { domain, bizplace: partnerBiz }
85
+ })
86
+
87
+ // 6. find unloading worksheet
88
+ const foundWS: Worksheet = await getRepository(Worksheet).findOne({
89
+ where: { domain, arrivalNotice: foundGAN, type: WORKSHEET_TYPE.UNLOADING, status: ORDER_STATUS.DONE },
90
+ relations: ['worksheetDetails', 'updater']
91
+ })
92
+
93
+ // find putaway worksheet
94
+ const foundPutawayWS: Worksheet = await getRepository(Worksheet).findOne({
95
+ where: { domain, arrivalNotice: foundGAN, type: WORKSHEET_TYPE.PUTAWAY, status: ORDER_STATUS.DONE },
96
+ relations: ['worksheetDetails', 'updater']
97
+ })
98
+
99
+ const targetProducts: OrderProduct[] = await getRepository(OrderProduct).find({
100
+ where: { domain, arrivalNotice: foundGAN, actualPalletQty: Not(IsNull()), actualPackQty: Not(IsNull()) },
101
+ relations: ['product']
102
+ })
103
+
104
+ // 7. find grn template based on category
105
+ const foundTemplate: Attachment = await getRepository(Attachment).findOne({
106
+ where: { domain, category: TEMPLATE_TYPE.GRN_TEMPLATE }
107
+ })
108
+
109
+ // 8. find grn logo
110
+ const foundLogo: Attachment = await getRepository(Attachment).findOne({
111
+ where: {
112
+ domain,
113
+ category: TEMPLATE_TYPE.LOGO
114
+ }
115
+ })
116
+
117
+ // 9. find signature
118
+ const foundSignature: Attachment = await getRepository(Attachment).findOne({
119
+ where: {
120
+ domain,
121
+ category: TEMPLATE_TYPE.SIGNATURE
122
+ }
123
+ })
124
+
125
+ const foundCop: Attachment = await getRepository(Attachment).findOne({
126
+ where: {
127
+ domain,
128
+ category: TEMPLATE_TYPE.COP
129
+ }
130
+ })
131
+
132
+ const inboundInventories: any[] = await qbReducedInventory
133
+
134
+ const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')
135
+
136
+ let logo = null
137
+ if (foundLogo?.path) {
138
+ logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))
139
+ }
140
+
141
+ let signature = null
142
+ if (foundSignature?.path) {
143
+ signature = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundSignature.path, 'base64'))
144
+ }
145
+
146
+ let cop = null
147
+ if (foundCop?.path) {
148
+ cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))
149
+ }
150
+
151
+ const filterInventoryItem = _.groupBy(foundInventoryItem, i => i.sku)
152
+
153
+ const tempIndexArr = []
154
+
155
+ const tempTotalQuantity = []
156
+
157
+ Object.keys(filterInventoryItem).forEach(k => {
158
+ const tempIndex = foundInventoryItem.findIndex(i => {
159
+ return i.sku == k
160
+ })
161
+
162
+ tempIndexArr.push(tempIndex)
163
+ })
164
+
165
+ Object.values(filterInventoryItem).forEach(k => {
166
+ const tempQuantity = k.length
167
+
168
+ tempTotalQuantity.push(tempQuantity)
169
+ })
170
+
171
+ tempIndexArr.forEach((t, index) => {
172
+ if (t >= 0) foundInventoryItem[t].totalQuantity = tempTotalQuantity[index]
173
+ })
174
+
175
+ const data = {
176
+ logo_url: logo,
177
+ sign_url: signature,
178
+ cop_url: cop,
179
+ customer_biz: partnerBiz.name,
180
+ customer_address: partnerBiz.address,
181
+ company_domain: domainBizplace.company.name,
182
+ company_phone: foundCP.phone,
183
+ company_email: foundCP.email,
184
+ company_brn: domainBizplace.company.brn,
185
+ company_address: domainBizplace.company.address,
186
+ warehouse_address: foundCP.address,
187
+ warehouse_address2: foundCP.address2,
188
+ warehouse_postcode: foundCP.postCode,
189
+ warehouse_city: foundCP.city,
190
+ warehouse_state: foundCP.state,
191
+ warehouse_phone: foundCP.phone,
192
+ warehouse_fax: foundCP.fax,
193
+ warehouse_email: foundCP.email,
194
+ order_no: foundGRN.name,
195
+ gan_no: foundGAN.name,
196
+ gan_accepted_at: foundGAN.acceptedAt ? DateTimeConverter.datetime(foundGAN.acceptedAt, timezoneOffSet) : '',
197
+ unload_date: DateTimeConverter.date(foundWS.endedAt),
198
+ ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,
199
+ ref_no_only: ownRefNo ? ` ${foundGAN.refNo}` : '',
200
+ ref_no1: foundGAN.refNo2 ? `${foundGAN.refNo2}` : '',
201
+ ref_no2: foundGAN.refNo3 ? `${foundGAN.refNo3}` : '',
202
+ received_date: DateTimeConverter.date(foundWS.endedAt),
203
+ truck_no: foundGAN.truckNo || '',
204
+ container_no: foundGAN.containerNo || '',
205
+ container_size: foundGAN.containerSize || '',
206
+ delivery_order_no: foundGAN.deliveryOrderNo ? foundGAN.deliveryOrderNo : '',
207
+ account_no: foundPartnerCP ? foundPartnerCP.accountNo : '',
208
+ unloaded_by: foundWS ? foundWS.updater.name : '',
209
+ putaway_by: foundPutawayWS ? foundPutawayWS.updater.name : '',
210
+ product_list: targetProducts
211
+ .reduce((acc, item) => {
212
+ acc.push(
213
+ ...inboundInventories
214
+ .filter(
215
+ ih =>
216
+ ih.productId == item.product.id &&
217
+ ih.batchId == item.batchId &&
218
+ ih.packingType == item.packingType &&
219
+ ih.uom == item.uom
220
+ )
221
+ .map(unloadInvHistory => {
222
+ return {
223
+ product_sku: `${item.product.sku}`,
224
+ product_brand_sku: `${item.product.brandSku}`,
225
+ product_name: `${item.product.name}(${item.product.description})`,
226
+ product_desc: item.product.description,
227
+ product_nameOnly: item.product.name,
228
+ product_type: item.packingType,
229
+ product_size: item.packingSize,
230
+ product_batch: item.batchId,
231
+ batch_id_ref: item?.batchIdRef ? item.batchIdRef : '',
232
+ pallet_qty: item.actualPalletQty,
233
+ product_qty: unloadInvHistory.qty || item.actualPackQty,
234
+ product_pack_qty: item.packQty,
235
+ descrepancy_qty: (unloadInvHistory.qty || item.actualPackQty) - item.packQty,
236
+ product_unit_uom_value: `${Math.round(item.uomValue * 100) / 100}`,
237
+ product_total_uom_value: `${
238
+ Math.round((unloadInvHistory.uomValue || item.uomValue * item.actualPackQty) * 100) / 100
239
+ }`,
240
+ product_uom: `${unloadInvHistory.uom || item.uom}`,
241
+ product_gross_weight: item.product.grossWeight || null,
242
+ unit_price: item.unitPrice || null,
243
+ expiry_date: unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != '' ? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0] : '',
244
+ manufacture_date: item.manufactureDate,
245
+ reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
246
+ remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
247
+ }
248
+ })
249
+ )
250
+ return acc
251
+ }, [])
252
+ .map((item, idx) => ({ list_no: idx + 1, ...item })),
253
+ serialNumber: foundInventoryItem
254
+ }
255
+
256
+ const formData = new FormData()
257
+ formData.append('template', template)
258
+ formData.append('jsonString', JSON.stringify(data))
259
+
260
+ const response = await fetch(REPORT_API_URL, {
261
+ method: 'POST',
262
+ body: formData
263
+ })
264
+
265
+ return await response.text()
266
+ }
@@ -1,7 +1,8 @@
1
+ import _ from 'lodash'
1
2
  import FormData from 'form-data'
2
3
  import fetch from 'node-fetch'
3
4
  import { getRepository, IsNull, Not } from 'typeorm'
4
-
5
+ import { InventoryItem } from '@things-factory/warehouse-base'
5
6
  import { Attachment, STORAGE } from '@things-factory/attachment-base'
6
7
  import { Partner } from '@things-factory/auth-base'
7
8
  import { Bizplace, ContactPoint } from '@things-factory/biz-base'
@@ -32,6 +33,10 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
32
33
  const foundGAN: ArrivalNotice = foundGRN.arrivalNotice
33
34
  const ownRefNo = foundGAN.refNo
34
35
 
36
+ const foundInventoryItem: InventoryItem[] = await getRepository(InventoryItem).query(
37
+ `select row_number() over (partition by p.sku) as "seq",p.sku,p.brand_sku, ii.serial_number from inventory_items ii left join products p on ii.product_id = p.id where inbound_order_id = '${foundGAN.id}' group by p.sku,ii.serial_number,p.brand_sku`
38
+ )
39
+
35
40
  // 4. find customer bizplace
36
41
  const partnerBiz: Bizplace = foundGRN.bizplace
37
42
 
@@ -47,25 +52,26 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
47
52
  })
48
53
 
49
54
  const qbReducedInventory = getRepository(ReducedInventoryHistory)
50
- .createQueryBuilder(`ivh`)
51
- .select(`product_id`, `productId`)
52
- .addSelect(`batch_id`, `batchId`)
53
- .addSelect(`reusable_pallet_id`, `reusablePalletId`)
54
- .addSelect(`packing_type`, `packingType`)
55
- .addSelect(`sum(qty)`, `qty`)
56
- .addSelect(`sum(uom_value)`, `uomValue`)
57
- .addSelect(`uom`, `uom`)
58
- .addSelect(`count(distinct pallet_id)`, `pallet`)
59
- .addSelect(`string_agg(distinct expiration_date::varchar,', ' order by expiration_date::varchar)`, `expiryDate`)
60
- .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, `palletId`)
61
- .where(`ivh.domain_id = :domainId`, { domainId: domain.id })
62
- .andWhere(`ivh.ref_order_id = :refOrderId`, { refOrderId: foundGAN.id })
55
+ .createQueryBuilder('ivh')
56
+ .select('product_id', 'productId')
57
+ .addSelect('batch_id', 'batchId')
58
+ .addSelect('reusable_pallet_id', 'reusablePalletId')
59
+ .addSelect('packing_type', 'packingType')
60
+ .addSelect('sum(qty)', 'qty')
61
+ .addSelect('sum(uom_value)', 'uomValue')
62
+ .addSelect('uom', 'uom')
63
+ .addSelect('count(distinct pallet_id)', 'pallet')
64
+ .addSelect(`string_agg(distinct expiration_date::varchar,', ' order by expiration_date::varchar)`, 'expiryDate')
65
+ .addSelect(`string_agg(distinct pallet_id::varchar,', ' order by pallet_id::varchar)`, 'palletId')
66
+ .where('ivh.domain_id = :domainId', { domainId: domain.id })
67
+ .andWhere('ivh.ref_order_id = :refOrderId', { refOrderId: foundGAN.id })
63
68
  .andWhere(`ivh.transaction_type = 'UNLOADING'`)
64
- .groupBy(`reusable_pallet_id`)
65
- .addGroupBy(`product_id`)
66
- .addGroupBy(`batch_id`)
67
- .addGroupBy(`packing_type`)
68
- .addGroupBy(`uom`)
69
+ .groupBy('reusable_pallet_id')
70
+ .addGroupBy('product_id')
71
+ .addGroupBy('batch_id')
72
+ .addGroupBy('packing_type')
73
+ .addGroupBy('uom')
74
+ .addGroupBy('expiration_date')
69
75
  .getRawMany()
70
76
 
71
77
  // 5. find domain contact point
@@ -142,6 +148,30 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
142
148
  cop = 'data:' + foundSignature.mimetype + ';base64,' + (await STORAGE.readFile(foundCop.path, 'base64'))
143
149
  }
144
150
 
151
+ const filterInventoryItem = _.groupBy(foundInventoryItem, i => i.sku)
152
+
153
+ const tempIndexArr = []
154
+
155
+ const tempTotalQuantity = []
156
+
157
+ Object.keys(filterInventoryItem).forEach(k => {
158
+ const tempIndex = foundInventoryItem.findIndex(i => {
159
+ return i.sku == k
160
+ })
161
+
162
+ tempIndexArr.push(tempIndex)
163
+ })
164
+
165
+ Object.values(filterInventoryItem).forEach(k => {
166
+ const tempQuantity = k.length
167
+
168
+ tempTotalQuantity.push(tempQuantity)
169
+ })
170
+
171
+ tempIndexArr.forEach((t, index) => {
172
+ if (t >= 0) foundInventoryItem[t].totalQuantity = tempTotalQuantity[index]
173
+ })
174
+
145
175
  const data = {
146
176
  logo_url: logo,
147
177
  sign_url: signature,
@@ -166,6 +196,7 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
166
196
  gan_accepted_at: foundGAN.acceptedAt ? DateTimeConverter.datetime(foundGAN.acceptedAt, timezoneOffSet) : '',
167
197
  unload_date: DateTimeConverter.date(foundWS.endedAt),
168
198
  ref_no: ownRefNo ? `${foundGAN.name} / ${foundGAN.refNo}` : `${foundGAN.name}`,
199
+ ref_no_only: ownRefNo ? ` ${foundGAN.refNo}` : '',
169
200
  ref_no1: foundGAN.refNo2 ? `${foundGAN.refNo2}` : '',
170
201
  ref_no2: foundGAN.refNo3 ? `${foundGAN.refNo3}` : '',
171
202
  received_date: DateTimeConverter.date(foundWS.endedAt),
@@ -176,39 +207,51 @@ export async function renderGRN({ grnNo, timezoneOffSet }, context: any) {
176
207
  account_no: foundPartnerCP ? foundPartnerCP.accountNo : '',
177
208
  unloaded_by: foundWS ? foundWS.updater.name : '',
178
209
  putaway_by: foundPutawayWS ? foundPutawayWS.updater.name : '',
179
- product_list: targetProducts.map((item, idx) => {
180
- let unloadInvHistory = inboundInventories.find(
181
- ih =>
182
- ih.productId == item.product.id &&
183
- ih.batchId == item.batchId &&
184
- ih.packingType == item.packingType &&
185
- ih.uom == item.uom
186
- )
187
-
188
- return {
189
- list_no: idx + 1,
190
- product_sku: `${item.product.sku}`,
191
- product_name: `${item.product.name}(${item.product.description})`,
192
- product_desc: item.product.description,
193
- product_nameOnly: item.product.name,
194
- product_type: item.packingType,
195
- product_size: item.packingSize,
196
- product_batch: item.batchId,
197
- batch_id_ref: item?.batchIdRef ? item.batchIdRef : '',
198
- pallet_qty: item.actualPalletQty,
199
- product_qty: unloadInvHistory.qty || item.actualPackQty,
200
- product_unit_uom_value: `${Math.round(item.uomValue * 100) / 100}`,
201
- product_total_uom_value: `${
202
- Math.round((unloadInvHistory.uomValue || item.uomValue * item.actualPackQty) * 100) / 100
203
- }`,
204
- product_uom: `${unloadInvHistory.uom || item.uom}`,
205
- product_gross_weight: item.product.grossWeight || null,
206
- unit_price: item.unitPrice || null,
207
- expiry_date: unloadInvHistory.expiryDate || '',
208
- reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
209
- remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
210
- }
211
- })
210
+ product_list: targetProducts
211
+ .reduce((acc, item) => {
212
+ acc.push(
213
+ ...inboundInventories
214
+ .filter(
215
+ ih =>
216
+ ih.productId == item.product.id &&
217
+ ih.batchId == item.batchId &&
218
+ ih.packingType == item.packingType &&
219
+ ih.uom == item.uom
220
+ )
221
+ .map(unloadInvHistory => {
222
+ return {
223
+ product_sku: `${item.product.sku}`,
224
+ product_brand_sku: `${item.product.brandSku}`,
225
+ product_name: `${item.product.name}(${item.product.description})`,
226
+ product_desc: item.product.description,
227
+ product_nameOnly: item.product.name,
228
+ product_type: item.packingType,
229
+ product_size: item.packingSize,
230
+ product_batch: item.batchId,
231
+ batch_id_ref: item?.batchIdRef ? item.batchIdRef : '',
232
+ pallet_qty: item.actualPalletQty,
233
+ product_qty: unloadInvHistory.qty || item.actualPackQty,
234
+ product_unit_uom_value: `${Math.round(item.uomValue * 100) / 100}`,
235
+ product_total_uom_value: `${
236
+ Math.round((unloadInvHistory.uomValue || item.uomValue * item.actualPackQty) * 100) / 100
237
+ }`,
238
+ product_uom: `${unloadInvHistory.uom || item.uom}`,
239
+ product_gross_weight: item.product.grossWeight || null,
240
+ unit_price: item.unitPrice || null,
241
+ expiry_date:
242
+ unloadInvHistory.expiryDate && unloadInvHistory.expiryDate != ''
243
+ ? new Date(unloadInvHistory.expiryDate).toISOString().split('T')[0]
244
+ : '',
245
+ manufacture_date: item.manufactureDate,
246
+ reusable_pallet_id: unloadInvHistory.reusablePalletId || '',
247
+ remark: (item.remark ? item.remark : '') + (item.issue ? ' [Issue]: ' + item.issue : '')
248
+ }
249
+ })
250
+ )
251
+ return acc
252
+ }, [])
253
+ .map((item, idx) => ({ list_no: idx + 1, ...item })),
254
+ serialNumber: foundInventoryItem
212
255
  }
213
256
 
214
257
  const formData = new FormData()