@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
@@ -1,11 +1,11 @@
1
1
  import FormData from 'form-data'
2
2
  import fetch from 'node-fetch'
3
- import { getRepository } from 'typeorm'
3
+ import { getRepository, SelectQueryBuilder } from 'typeorm'
4
4
 
5
5
  import { Attachment, STORAGE } from '@things-factory/attachment-base'
6
6
  import { Bizplace } from '@things-factory/biz-base'
7
7
  import { config } from '@things-factory/env'
8
- import { Invoice, ReleaseGood } from '@things-factory/sales-base'
8
+ import { InvoiceProduct, ReleaseGood } from '@things-factory/sales-base'
9
9
  import { Domain } from '@things-factory/shell'
10
10
 
11
11
  import { TEMPLATE_TYPE } from '../constants'
@@ -22,20 +22,34 @@ export async function renderInvoices({ req, timezoneOffSet }, context: any) {
22
22
  let result = await Promise.all(
23
23
  req.roIds.map(async roId => {
24
24
  try {
25
- const foundReleaseGoods: ReleaseGood = await getRepository(ReleaseGood).findOne({
26
- where: { domain, id: roId },
27
- relations: ['domain', 'bizplace', 'bizplace.domain', 'bizplace.company', 'bizplace.company.domain']
28
- })
29
-
30
- if (foundReleaseGoods) {
31
- const foundInvoice: Invoice = await getRepository(Invoice).findOne({
32
- where: { releaseGood: foundReleaseGoods },
33
- relations: ['invoiceProducts', 'invoiceProducts.product', 'domain', 'creator', 'updater']
34
- })
35
-
36
- const partnerBiz: Bizplace = foundReleaseGoods.bizplace
25
+ const qb: SelectQueryBuilder<ReleaseGood> = await getRepository(ReleaseGood)
26
+ .createQueryBuilder('rg')
27
+ .innerJoinAndSelect('rg.domain', 'domain')
28
+ .innerJoinAndSelect('rg.bizplace', 'bizplace')
29
+ .innerJoinAndSelect('bizplace.domain', 'bizplace_domain')
30
+ .innerJoinAndSelect('bizplace.company', 'company')
31
+ .innerJoinAndSelect('company.domain', 'company_domain')
32
+ .innerJoinAndSelect('invoices', 'iv', 'rg.ref_no = iv.ref_no_1')
33
+ .leftJoinAndSelect('marketplace_orders', 'mo', 'rg.id = mo.release_order_id::uuid')
34
+ .leftJoinAndSelect('marketplace_order_shippings', 'mos', 'rg.id = mos.release_order_id::uuid')
35
+ .leftJoinAndSelect('mo.fulfillmentCenter', 'fc')
36
+ .where('rg.id = :roId')
37
+ .andWhere('rg.domain = :domainId')
38
+ .setParameters({ roId, domainId: domain.id })
39
+
40
+ let record: any = await qb.getRawOne()
41
+
42
+ if (record) {
43
+ const partnerBiz: Partial<Bizplace> = {
44
+ id: record.bizplace_id,
45
+ name: record.bizplace_name,
46
+ address: record.bizplace_address
47
+ }
37
48
 
38
- const partnerCompanyDomain: Domain = foundReleaseGoods.bizplace.company.domain
49
+ const partnerCompanyDomain: Partial<Domain> = {
50
+ id: record.company_domain_id,
51
+ name: record.company_domain_name
52
+ }
39
53
 
40
54
  const foundTemplate: Attachment = await getRepository(Attachment).findOne({
41
55
  where: { domain: partnerCompanyDomain, category: TEMPLATE_TYPE.INVOICE_TEMPLATE }
@@ -44,43 +58,74 @@ export async function renderInvoices({ req, timezoneOffSet }, context: any) {
44
58
  const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')
45
59
 
46
60
  let fullBillingAddress = [
47
- foundInvoice.billingAddress1,
48
- foundInvoice.billingAddress2,
49
- foundInvoice.billingAddress3,
50
- foundInvoice.billingAddress4,
51
- foundInvoice.billingAddress5
61
+ record.iv_billing_address_1,
62
+ record.iv_billing_address_2,
63
+ record.iv_billing_address_3,
64
+ record.iv_billing_address_4,
65
+ record.iv_billing_address_5
52
66
  ]
53
67
 
54
68
  let fullDeliveryAddress = [
55
- foundInvoice.deliveryAddress1,
56
- foundInvoice.deliveryAddress2,
57
- foundInvoice.deliveryAddress3,
58
- foundInvoice.deliveryAddress4,
59
- foundInvoice.deliveryAddress5
69
+ record.iv_delivery_address_1,
70
+ record.iv_delivery_address_2,
71
+ record.iv_delivery_address_3,
72
+ record.iv_delivery_address_4,
73
+ record.iv_delivery_address_5
60
74
  ]
61
75
 
62
- let date = DateTimeConverter.date(
63
- new Date((foundInvoice.issuedOn || foundInvoice.createdAt) - timezoneOffSet)
76
+ const qb: SelectQueryBuilder<InvoiceProduct> = await getRepository(InvoiceProduct)
77
+ .createQueryBuilder('ip')
78
+ .innerJoin('invoices', 'iv', 'iv.id = ip.invoice_id')
79
+ .leftJoin('release_goods', 'rg', 'rg.ref_no = iv.ref_no_1')
80
+ .where('rg.id = :roId')
81
+ .andWhere('rg.domain = :domainId')
82
+ .setParameters({ roId, domainId: domain.id })
83
+
84
+ let items: any[] = await qb.getRawMany()
85
+
86
+ const product_list = items.map((item, idx) => {
87
+ return {
88
+ list_no: idx + 1,
89
+ product_sku: item.ip_sku,
90
+ product_name: item.ip_name,
91
+ product_desc: item.ip_description,
92
+ product_qty: item.ip_qty,
93
+ product_other_charges: item.ip_other_charges,
94
+ product_paid_price: getRoundedValue(item.ip_paid_price || item.ip_unit_price),
95
+ product_unit_price: getRoundedValue(item.ip_unit_price),
96
+ product_total_paid_price: getRoundedValue(
97
+ (item.ip_paid_price || item.ip_unit_price) * parseInt(item.ip_qty || 0)
98
+ ),
99
+ product_total_unit_price: getRoundedValue(item.ip_unit_price * parseInt(item.ip_qty || 0)),
100
+ original_price: getRoundedValue(parseFloat(item.ip_unit_price || 0)),
101
+ product_discount: getRoundedValue(parseFloat(item.ip_discount || 0)),
102
+ shipping_fee_paid_by_customer: getRoundedValue(parseFloat(item.ip_shipping_fee_paid_by_customer || 0))
103
+ }
104
+ })
105
+
106
+ const sumProductTotalPaidPrice: number = product_list.reduce(
107
+ (total, item) => total + item.product_total_paid_price,
108
+ 0
64
109
  )
110
+
111
+ let date = DateTimeConverter.date(new Date((record.iv_issued_on || record.iv_created_at) - timezoneOffSet))
65
112
  const data = {
66
- order_no: foundReleaseGoods.name,
67
- ref_no: foundReleaseGoods.refNo,
68
- deliver_to: foundInvoice.deliverTo,
69
- deliver_to_phone: foundInvoice.deliverToPhone || '',
70
- bill_to: foundInvoice.billTo,
71
- bill_to_phone: foundInvoice.billToPhone || '',
113
+ order_no: record.rg_name,
114
+ ref_no: record.rg_ref_no,
115
+ from: record.iv_from,
72
116
  customer_address: partnerBiz.address,
73
- delivery_date: date,
74
- store_name: foundInvoice.from,
75
- billing_address_1: foundInvoice.billingAddress1,
76
- billing_address_2: foundInvoice.billingAddress2,
77
- billing_address_3: foundInvoice.billingAddress3,
78
- billing_address_4: foundInvoice.billingAddress4,
79
- billing_address_5: foundInvoice.billingAddress5,
80
- billing_postcode: foundInvoice.billingPostcode,
81
- billing_city: foundInvoice.billingCity,
82
- billing_state: foundInvoice.billingState,
83
- billing_country: foundInvoice.billingCountry,
117
+ store_name: record.iv_from,
118
+ bill_to: record.iv_bill_to,
119
+ bill_to_phone: record.iv_bill_to_phone,
120
+ billing_address_1: record.iv_billing_address_1,
121
+ billing_address_2: record.iv_billing_address_2,
122
+ billing_address_3: record.iv_billing_address_3,
123
+ billing_address_4: record.iv_billing_address_4,
124
+ billing_address_5: record.iv_billing_address_5,
125
+ billing_postcode: record.iv_billing_postcode,
126
+ billing_city: record.iv_billing_city,
127
+ billing_state: record.iv_billing_state,
128
+ billing_country: record.iv_billing_country,
84
129
  full_billing_address: fullBillingAddress
85
130
  .reduce((acc, itm) => {
86
131
  if (itm && itm.trim() != '') {
@@ -90,15 +135,18 @@ export async function renderInvoices({ req, timezoneOffSet }, context: any) {
90
135
  return acc
91
136
  }, [])
92
137
  .join(' '),
93
- delivery_address_1: foundInvoice.deliveryAddress1,
94
- delivery_address_2: foundInvoice.deliveryAddress2,
95
- delivery_address_3: foundInvoice.deliveryAddress3,
96
- delivery_address_4: foundInvoice.deliveryAddress4,
97
- delivery_address_5: foundInvoice.deliveryAddress5,
98
- delivery_postcode: foundInvoice.deliveryPostcode,
99
- delivery_city: foundInvoice.deliveryCity,
100
- delivery_state: foundInvoice.deliveryState,
101
- delivery_country: foundInvoice.deliveryCountry,
138
+ delivery_date: date,
139
+ deliver_to: record.iv_deliver_to,
140
+ deliver_to_phone: record.iv_deliver_to_phone,
141
+ delivery_address_1: record.iv_delivery_address_1,
142
+ delivery_address_2: record.iv_delivery_address_2,
143
+ delivery_address_3: record.iv_delivery_address_3,
144
+ delivery_address_4: record.iv_delivery_address_4,
145
+ delivery_address_5: record.iv_delivery_address_5,
146
+ delivery_postcode: record.iv_delivery_postcode,
147
+ delivery_city: record.iv_delivery_city,
148
+ delivery_state: record.iv_delivery_state,
149
+ delivery_country: record.iv_delivery_country,
102
150
  full_delivery_address: fullDeliveryAddress
103
151
  .reduce((acc, itm) => {
104
152
  if (itm && itm.trim() != '') {
@@ -108,22 +156,16 @@ export async function renderInvoices({ req, timezoneOffSet }, context: any) {
108
156
  return acc
109
157
  }, [])
110
158
  .join(' '),
111
- product_list: foundInvoice.invoiceProducts.map((item, idx) => {
112
- return {
113
- list_no: idx + 1,
114
- product_sku: item.sku,
115
- product_name: item.name,
116
- product_desc: item.description,
117
- product_qty: item.qty,
118
- product_other_charges: item.otherCharges,
119
- product_paid_price: parseFloat(item.paidPrice || item.unitPrice).toFixed(2),
120
- product_unit_price: parseFloat(item.unitPrice).toFixed(2),
121
- product_total_paid_price: (
122
- parseFloat(item.paidPrice || item.unitPrice) * parseFloat(item.qty)
123
- ).toFixed(2),
124
- product_total_unit_price: (parseFloat(item.unitPrice) * parseFloat(item.qty)).toFixed(2)
125
- }
126
- })
159
+ fulfillment_center: record.fc_name,
160
+ voucher_amount: getRoundedValue(parseFloat(record.mo_voucher_amount || 0)),
161
+ actual_shipping_fee: getRoundedValue(parseFloat(record.mos_actual_shipping_fee || 0)),
162
+ sub_total: sumProductTotalPaidPrice,
163
+ grand_total: getRoundedValue(
164
+ sumProductTotalPaidPrice -
165
+ parseFloat(record.mo_voucher_amount || 0) +
166
+ parseFloat(record.mos_actual_shipping_fee || 0)
167
+ ),
168
+ product_list
127
169
  }
128
170
 
129
171
  const formData = new FormData()
@@ -137,18 +179,23 @@ export async function renderInvoices({ req, timezoneOffSet }, context: any) {
137
179
 
138
180
  return await response.text()
139
181
  }
140
- return ''
182
+ return null
141
183
  } catch (ex) {
142
- return ''
184
+ return null
143
185
  }
144
186
  })
145
187
  )
146
188
 
147
- if (result.length <= 0) {
189
+ if (result.filter(x => x != null).length <= 0) {
148
190
  throw Error('No invoice found!')
149
191
  }
192
+
150
193
  return result.join()
151
194
  } catch (ex) {
152
195
  throw ex
153
196
  }
154
197
  }
198
+
199
+ function getRoundedValue(value = 0) {
200
+ return Math.round((value + Number.EPSILON) * 100) / 100
201
+ }
@@ -6,6 +6,7 @@ import { Attachment, STORAGE } from '@things-factory/attachment-base'
6
6
  import { config } from '@things-factory/env'
7
7
  import { Manifest, ReleaseGood } from '@things-factory/sales-base'
8
8
  import { Domain } from '@things-factory/shell'
9
+ import { Bizplace, getCompanyBizplace } from '@things-factory/biz-base'
9
10
 
10
11
  import { TEMPLATE_TYPE } from '../constants'
11
12
  import { DateTimeConverter } from '../utils/datetime-util'
@@ -25,8 +26,9 @@ export async function renderManifest({ manifestNo }, context: any) {
25
26
  })
26
27
 
27
28
  // find release good
28
- const releaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
29
- where: { domain, manifest }
29
+ let releaseGoods: ReleaseGood[] = await getRepository(ReleaseGood).find({
30
+ where: { domain, manifest },
31
+ relations: ['bizplace']
30
32
  })
31
33
 
32
34
  // 7. find grn template based on category
@@ -41,7 +43,9 @@ export async function renderManifest({ manifestNo }, context: any) {
41
43
  manifest_no: manifest?.name,
42
44
  manifest_date: DateTimeConverter.date(manifest?.createdAt).toString(),
43
45
  total_list: releaseGoods?.length || 0,
44
- product_list: releaseGoods.map((item, idx) => {
46
+ product_list: await Promise.all (releaseGoods.map(async(item, idx) => {
47
+ const customerBizplaceId: string = item.bizplace.id
48
+ const custCompanyBizplace: Bizplace = await getCompanyBizplace(null, null, customerBizplaceId)
45
49
  return {
46
50
  list_no: idx + 1,
47
51
  order_no: item?.refNo,
@@ -50,9 +54,12 @@ export async function renderManifest({ manifestNo }, context: any) {
50
54
  delivery_date: DateTimeConverter.date(manifest?.dispatchedAt).toString(),
51
55
  attention_to: item?.attentionTo,
52
56
  delivery_address: item?.deliveryAddress1,
53
- postal_code_city: `${item?.postalCode}, ${item?.city}`
57
+ postal_code_city: `${item?.postalCode}, ${item?.city}`,
58
+ remark: item?.remark,
59
+ status: item?.status,
60
+ company_domain_name: custCompanyBizplace.domain.name
54
61
  }
55
- })
62
+ }))
56
63
  }
57
64
 
58
65
  const formData = new FormData()
@@ -150,20 +150,20 @@ export async function renderOrientageDO({ doNo }, context: any) {
150
150
  pack_size: matchedProductDetail
151
151
  ? matchedProductDetail.uomValue
152
152
  ? matchedProductDetail.uomValue +
153
- ' ' +
154
- matchedProductDetail.uom +
155
- (inventory.product.volumeSize
156
- ? ' x ' + (parseFloat(inventory.product.volumeSize) / 100).toFixed(2) + ' L'
157
- : '')
153
+ ' ' +
154
+ matchedProductDetail.uom +
155
+ (inventory.product.volumeSize
156
+ ? ' x ' + (parseFloat(inventory.product.volumeSize) / 100).toFixed(2) + ' L'
157
+ : '')
158
158
  : null
159
159
  : inventory.product.primaryValue
160
- ? inventory.product.primaryValue +
160
+ ? inventory.product.primaryValue +
161
161
  ' ' +
162
162
  inventory.product.primaryUnit +
163
163
  (inventory.product.volumeSize
164
164
  ? ' x ' + (parseFloat(inventory.product.volumeSize) / 100).toFixed(2) + ' L'
165
165
  : '')
166
- : null,
166
+ : null,
167
167
  aux_value_3: matchedProductDetail ? matchedProductDetail.auxValue3 : inventory.product.auxValue3,
168
168
  product_qty: targetInventory.inventory.warehouse !== 'DAMAGE ZONE' ? targetInventory.releaseQty : 0,
169
169
  product_qty_damage: targetInventory.inventory.warehouse === 'DAMAGE ZONE' ? targetInventory.releaseQty : 0,
@@ -176,15 +176,15 @@ export async function renderOrientageDO({ doNo }, context: any) {
176
176
  ? matchedProductDetail.volume
177
177
  : 0
178
178
  : inventory?.product?.volume
179
- ? inventory.product.volume
180
- : 0,
179
+ ? inventory.product.volume
180
+ : 0,
181
181
  total_volume: matchedProductDetail
182
182
  ? matchedProductDetail.volume
183
183
  ? Number((matchedProductDetail.volume * targetInventory.releaseQty).toFixed(4))
184
184
  : 0
185
185
  : inventory?.product?.volume
186
- ? Number((inventory.product.volume * targetInventory.releaseQty).toFixed(4))
187
- : 0,
186
+ ? Number((inventory.product.volume * targetInventory.releaseQty).toFixed(4))
187
+ : 0,
188
188
  remark: targetInventory.remark,
189
189
  inventory_remark: inventory.remark,
190
190
  cross_docking: targetInventory.crossDocking,
@@ -123,16 +123,16 @@ export async function renderOrientageGRN({ grnNo }, context: any) {
123
123
  pack_size: matchedProductDetail
124
124
  ? matchedProductDetail.uomValue
125
125
  ? matchedProductDetail.uomValue +
126
- ' ' +
127
- matchedProductDetail.uom +
128
- (item.product.volumeSize ? ' x ' + (parseFloat(item.product.volumeSize) / 100).toFixed(2) + ' L' : '')
126
+ ' ' +
127
+ matchedProductDetail.uom +
128
+ (item.product.volumeSize ? ' x ' + (parseFloat(item.product.volumeSize) / 100).toFixed(2) + ' L' : '')
129
129
  : null
130
130
  : item.product.primaryValue
131
- ? item.product.primaryValue +
131
+ ? item.product.primaryValue +
132
132
  ' ' +
133
133
  item.product.primaryUnit +
134
134
  (item.product.volumeSize ? ' x ' + (parseFloat(item.product.volumeSize) / 100).toFixed(2) + ' L' : '')
135
- : null,
135
+ : null,
136
136
  pack_qty: item.packQty ? item.packQty : 0,
137
137
  actual_pack_qty: item.actualPackQty ? item.actualPackQty : 0,
138
138
  container_no: foundGAN.containerNo ? foundGAN.containerNo : '',
@@ -142,23 +142,24 @@ export async function renderOrientageGRN({ grnNo }, context: any) {
142
142
  ? matchedProductDetail.volume
143
143
  : 0
144
144
  : item?.product?.volume
145
- ? item.product.volume
146
- : 0,
145
+ ? item.product.volume
146
+ : 0,
147
147
  total_volume: matchedProductDetail
148
148
  ? matchedProductDetail.volume
149
149
  ? Number((matchedProductDetail.volume * item.actualPackQty).toFixed(4))
150
150
  : 0
151
151
  : item?.product?.volume
152
- ? Number((item.product.volume * item.actualPackQty).toFixed(4))
153
- : 0,
152
+ ? Number((item.product.volume * item.actualPackQty).toFixed(4))
153
+ : 0,
154
+ manufacture_year: item.manufactureDate ? new Date(item.manufactureDate).getFullYear() : null,
154
155
  manufacture_date: item.manufactureDate ? item.manufactureDate : null,
155
156
  literage: matchedProductDetail
156
157
  ? matchedProductDetail.packingSize
157
158
  ? parseFloat(matchedProductDetail.packingSize) * parseFloat(item.product.volumeSize)
158
159
  : 0
159
160
  : item.packingSize
160
- ? parseFloat(item.packingSize) * parseFloat(item.product.volumeSize)
161
- : 0,
161
+ ? parseFloat(item.packingSize) * parseFloat(item.product.volumeSize)
162
+ : 0,
162
163
  remark: item.remark || ''
163
164
  }
164
165
  })
@@ -0,0 +1,170 @@
1
+ import FormData from 'form-data'
2
+ import fetch from 'node-fetch'
3
+ import { getRepository, SelectQueryBuilder } from 'typeorm'
4
+
5
+ import { Attachment, STORAGE } from '@things-factory/attachment-base'
6
+ import { Bizplace } from '@things-factory/biz-base'
7
+ import { config } from '@things-factory/env'
8
+ import { InvoiceProduct, ReleaseGood, PurchaseOrder, PurchaseOrderOtherCharge, OrderProduct } from '@things-factory/sales-base'
9
+
10
+ import { Domain } from '@things-factory/shell'
11
+
12
+ import { TEMPLATE_TYPE } from '../constants'
13
+ import { DateTimeConverter } from '../utils/datetime-util'
14
+
15
+ const REPORT_API_URL = config.get('reportApiUrl', 'http://localhost:8888/rest/report/show_html')
16
+
17
+ export async function renderPO({ req, timezoneOffSet }, context: any) {
18
+ try {
19
+ const domain: Domain = await getRepository(Domain).findOne({
20
+ where: { id: context.state.domain.id }
21
+ })
22
+
23
+ let result = await Promise.all(
24
+ req.poIds.map(async poId => {
25
+ try {
26
+ const qb: SelectQueryBuilder<PurchaseOrder> = await getRepository(PurchaseOrder)
27
+ .createQueryBuilder('po')
28
+ .innerJoinAndSelect('po.domain', 'domain')
29
+ .innerJoinAndSelect('po.bizplace', 'bizplace')
30
+ .innerJoinAndSelect('bizplace.domain', 'bizplace_domain')
31
+ .innerJoinAndSelect('bizplace.company', 'company')
32
+ .innerJoinAndSelect('company.domain', 'company_domain')
33
+ .leftJoinAndSelect('contact_points', 'cp', 'po.supplier_id = cp.id')
34
+ .where('po.id = :poId')
35
+ .andWhere('po.domain = :domainId')
36
+ .setParameters({ poId, domainId: domain.id })
37
+
38
+ let record: any = await qb.getRawOne()
39
+
40
+ if (record) {
41
+ const partnerBiz: Partial<Bizplace> = {
42
+ id: record.bizplace_id,
43
+ name: record.bizplace_name,
44
+ address: record.bizplace_address,
45
+ domain: { id: record.bizplace_domain_id }
46
+ }
47
+
48
+ const foundTemplate: Attachment = await getRepository(Attachment).findOne({
49
+ where: { domain: partnerBiz.domain, category: TEMPLATE_TYPE.PO_TEMPLATE }
50
+ })
51
+
52
+ const foundLogo: Attachment = await getRepository(Attachment).findOne({
53
+ where: {
54
+ domain: partnerBiz.domain,
55
+ category: TEMPLATE_TYPE.LOGO
56
+ }
57
+ })
58
+
59
+ let logo = null
60
+ if (foundLogo?.path) {
61
+ logo = 'data:' + foundLogo.mimetype + ';base64,' + (await STORAGE.readFile(foundLogo.path, 'base64'))
62
+ }
63
+
64
+ const template = await STORAGE.readFile(foundTemplate.path, 'utf-8')
65
+
66
+ const poocQb: SelectQueryBuilder<PurchaseOrderOtherCharge> = await getRepository(PurchaseOrderOtherCharge)
67
+ .createQueryBuilder('pooc')
68
+ .where('pooc.purchase_order_id = :poId')
69
+ .andWhere('pooc.apply_in_items = false')
70
+ .setParameters({ poId })
71
+
72
+ let poOtherCharges: any[] = await poocQb.getRawMany()
73
+
74
+
75
+ const qb: SelectQueryBuilder<OrderProduct> = await getRepository(OrderProduct)
76
+ .createQueryBuilder('op')
77
+ .innerJoin('domains', 'd', 'op.domain_id = d.id')
78
+ .leftJoinAndSelect('purchase_orders', 'po', 'po.id = op.purchase_order_id')
79
+ .leftJoinAndSelect('products', 'p', 'op.product_id = p.id')
80
+ .where('op.purchase_order_id = :poId')
81
+ .andWhere('op.domain = :domainId')
82
+ .setParameters({ poId, domainId: domain.id })
83
+
84
+ let items: any[] = await qb.getRawMany()
85
+
86
+ const product_list = items.map((item, idx) => {
87
+ return {
88
+ list_no: idx + 1,
89
+ product_sku: item.p_sku,
90
+ product_name: item.p_name,
91
+ product_desc: item.p_description,
92
+ product_qty: item.op_pack_qty,
93
+ product_uom: item.op_uom,
94
+ product_other_charges: item.ip_other_charges,
95
+ product_unit_price: (item.op_unit_price).toFixed(2),
96
+ product_total_price: ((((item.op_unit_price || 0) * item.op_pack_qty) - (item.op_discount_amt || 0)) * (1 + (item.op_tax_rate / 100))).toFixed(2),
97
+ product_tax_rate: item.op_tax_rate,
98
+ product_disc_amt: item.op_discount_amt
99
+ }
100
+ })
101
+
102
+
103
+ let date = DateTimeConverter.date(new Date(record.po_created_at - timezoneOffSet))
104
+ let eta = DateTimeConverter.date(new Date(record.po_eta_date))
105
+
106
+ let subtotal = getRoundedValue(
107
+ product_list.reduce((init, item) => {
108
+ return (init += parseFloat(item.product_total_price))
109
+ }, 0) || 0
110
+ )
111
+
112
+ const data = {
113
+ logo_url: logo,
114
+ company_name: record.company_description,
115
+ company_address: record.company_address,
116
+ company_postal_code: record.company_postal_code,
117
+ po_number: record.po_name,
118
+ po_order_date: date,
119
+ po_delivery_date: eta,
120
+ ref_no: record.po_ref_no,
121
+ cp_company_name: record.cp_company_name,
122
+ cp_address: record.cp_address2 ? [record.cp_address, record.cp_address2].join(', ') : record.cp_address,
123
+ cp_contact_name: record.cp_name,
124
+ cp_email: record.cp_email,
125
+ cp_phone_number: record.cp_phone,
126
+ product_list,
127
+ charges_list: [
128
+ {
129
+ field: 'SUBTOTAL', value: subtotal.toFixed(2)
130
+ },
131
+ ...poOtherCharges.map(itm => { return { field: itm.pooc_name.toUpperCase(), value: itm.pooc_total_amt.toFixed(2) } }),
132
+ {
133
+ field: 'TOTAL', value: (poOtherCharges.reduce((init, item) => {
134
+ return init += (item.pooc_total_amt)
135
+ }, subtotal) || 0).toFixed(2),
136
+ },
137
+ ]
138
+ }
139
+
140
+ const formData = new FormData()
141
+ formData.append('template', template)
142
+ formData.append('jsonString', JSON.stringify(data))
143
+
144
+ const response = await fetch(REPORT_API_URL, {
145
+ method: 'POST',
146
+ body: formData
147
+ })
148
+
149
+ return await response.text()
150
+ }
151
+ return null
152
+ } catch (ex) {
153
+ return null
154
+ }
155
+ })
156
+ )
157
+
158
+ if (result.filter(x => x != null).length <= 0) {
159
+ throw Error('No purchase order found!')
160
+ }
161
+
162
+ return result.join()
163
+ } catch (ex) {
164
+ throw ex
165
+ }
166
+ }
167
+
168
+ function getRoundedValue(value = 0) {
169
+ return Math.round((value + Number.EPSILON) * 100) / 100
170
+ }