@things-factory/integration-accounting 4.3.113-alpha.0 → 4.3.122

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 (150) hide show
  1. package/client/pages/create-account-popup.js +10 -5
  2. package/dist-server/constants/account.js +13 -0
  3. package/dist-server/constants/account.js.map +1 -0
  4. package/dist-server/constants/index.js +18 -0
  5. package/dist-server/constants/index.js.map +1 -0
  6. package/dist-server/controllers/accounting-api/index.js +63 -0
  7. package/dist-server/controllers/accounting-api/index.js.map +1 -1
  8. package/dist-server/controllers/index.js +2 -0
  9. package/dist-server/controllers/index.js.map +1 -1
  10. package/dist-server/controllers/xilnex/apis/goods-received/create-goods-received-note.js +44 -0
  11. package/dist-server/controllers/xilnex/apis/goods-received/create-goods-received-note.js.map +1 -0
  12. package/dist-server/controllers/xilnex/apis/goods-received/index.js +18 -0
  13. package/dist-server/controllers/xilnex/apis/goods-received/index.js.map +1 -0
  14. package/dist-server/controllers/xilnex/apis/index.js +25 -0
  15. package/dist-server/controllers/xilnex/apis/index.js.map +1 -0
  16. package/dist-server/controllers/xilnex/apis/purchase-order/get-purchase-order.js +41 -0
  17. package/dist-server/controllers/xilnex/apis/purchase-order/get-purchase-order.js.map +1 -0
  18. package/dist-server/controllers/xilnex/apis/purchase-order/index.js +18 -0
  19. package/dist-server/controllers/xilnex/apis/purchase-order/index.js.map +1 -0
  20. package/dist-server/controllers/xilnex/apis/sales/get-sale.js +18 -0
  21. package/dist-server/controllers/xilnex/apis/sales/get-sale.js.map +1 -0
  22. package/dist-server/controllers/xilnex/apis/sales/index.js +18 -0
  23. package/dist-server/controllers/xilnex/apis/sales/index.js.map +1 -0
  24. package/dist-server/controllers/xilnex/apis/sales-order/create-sales-order.js +63 -0
  25. package/dist-server/controllers/xilnex/apis/sales-order/create-sales-order.js.map +1 -0
  26. package/dist-server/controllers/xilnex/apis/sales-order/index.js +19 -0
  27. package/dist-server/controllers/xilnex/apis/sales-order/index.js.map +1 -0
  28. package/dist-server/controllers/xilnex/apis/sales-order/post-sales-order-to-sales-invoice.js +24 -0
  29. package/dist-server/controllers/xilnex/apis/sales-order/post-sales-order-to-sales-invoice.js.map +1 -0
  30. package/dist-server/controllers/xilnex/apis/sales-return/create-sales-return.js +44 -0
  31. package/dist-server/controllers/xilnex/apis/sales-return/create-sales-return.js.map +1 -0
  32. package/dist-server/controllers/xilnex/apis/sales-return/index.js +18 -0
  33. package/dist-server/controllers/xilnex/apis/sales-return/index.js.map +1 -0
  34. package/dist-server/controllers/xilnex/apis/shipment/create-shipment.js +30 -0
  35. package/dist-server/controllers/xilnex/apis/shipment/create-shipment.js.map +1 -0
  36. package/dist-server/controllers/xilnex/apis/shipment/index.js +18 -0
  37. package/dist-server/controllers/xilnex/apis/shipment/index.js.map +1 -0
  38. package/dist-server/controllers/xilnex/apis/stock-request/get-stock-request.js +20 -0
  39. package/dist-server/controllers/xilnex/apis/stock-request/get-stock-request.js.map +1 -0
  40. package/dist-server/controllers/xilnex/apis/stock-request/index.js +18 -0
  41. package/dist-server/controllers/xilnex/apis/stock-request/index.js.map +1 -0
  42. package/dist-server/controllers/xilnex/apis/stocks/create-stock-adjust-record.js +45 -0
  43. package/dist-server/controllers/xilnex/apis/stocks/create-stock-adjust-record.js.map +1 -0
  44. package/dist-server/controllers/xilnex/apis/stocks/index.js +18 -0
  45. package/dist-server/controllers/xilnex/apis/stocks/index.js.map +1 -0
  46. package/dist-server/controllers/xilnex/apis/transfer-note/create-transfer-note.js +43 -0
  47. package/dist-server/controllers/xilnex/apis/transfer-note/create-transfer-note.js.map +1 -0
  48. package/dist-server/controllers/xilnex/apis/transfer-note/index.js +18 -0
  49. package/dist-server/controllers/xilnex/apis/transfer-note/index.js.map +1 -0
  50. package/dist-server/controllers/xilnex/index.js +34 -0
  51. package/dist-server/controllers/xilnex/index.js.map +1 -0
  52. package/dist-server/controllers/xilnex/platform-action.js +41 -0
  53. package/dist-server/controllers/xilnex/platform-action.js.map +1 -0
  54. package/dist-server/controllers/xilnex/xilnex.js +71 -0
  55. package/dist-server/controllers/xilnex/xilnex.js.map +1 -0
  56. package/dist-server/entities/account-webhook-order.js +76 -0
  57. package/dist-server/entities/account-webhook-order.js.map +1 -0
  58. package/dist-server/entities/account.js +11 -2
  59. package/dist-server/entities/account.js.map +1 -1
  60. package/dist-server/entities/index.js +4 -2
  61. package/dist-server/entities/index.js.map +1 -1
  62. package/dist-server/graphql/resolvers/account-webhook-order/account-webhook-order.js +15 -0
  63. package/dist-server/graphql/resolvers/account-webhook-order/account-webhook-order.js.map +1 -0
  64. package/dist-server/graphql/resolvers/account-webhook-order/account-webhook-orders.js +14 -0
  65. package/dist-server/graphql/resolvers/account-webhook-order/account-webhook-orders.js.map +1 -0
  66. package/dist-server/graphql/resolvers/account-webhook-order/create-account-webhook-order.js +12 -0
  67. package/dist-server/graphql/resolvers/account-webhook-order/create-account-webhook-order.js.map +1 -0
  68. package/dist-server/graphql/resolvers/account-webhook-order/delete-account-webhook-order.js +16 -0
  69. package/dist-server/graphql/resolvers/account-webhook-order/delete-account-webhook-order.js.map +1 -0
  70. package/dist-server/graphql/resolvers/account-webhook-order/delete-account-webhook-orders.js +19 -0
  71. package/dist-server/graphql/resolvers/account-webhook-order/delete-account-webhook-orders.js.map +1 -0
  72. package/dist-server/graphql/resolvers/account-webhook-order/index.js +13 -0
  73. package/dist-server/graphql/resolvers/account-webhook-order/index.js.map +1 -0
  74. package/dist-server/graphql/resolvers/account-webhook-order/update-account-webhook-order.js +15 -0
  75. package/dist-server/graphql/resolvers/account-webhook-order/update-account-webhook-order.js.map +1 -0
  76. package/dist-server/graphql/resolvers/account-webhook-order/update-multiple-account-webhook-orders.js +30 -0
  77. package/dist-server/graphql/resolvers/account-webhook-order/update-multiple-account-webhook-orders.js.map +1 -0
  78. package/dist-server/graphql/resolvers/index.js +3 -2
  79. package/dist-server/graphql/resolvers/index.js.map +1 -1
  80. package/dist-server/graphql/types/account-webhook-order/account-webhook-order-list.js +14 -0
  81. package/dist-server/graphql/types/account-webhook-order/account-webhook-order-list.js.map +1 -0
  82. package/dist-server/graphql/types/account-webhook-order/account-webhook-order-patch.js +18 -0
  83. package/dist-server/graphql/types/account-webhook-order/account-webhook-order-patch.js.map +1 -0
  84. package/dist-server/graphql/types/account-webhook-order/account-webhook-order.js +22 -0
  85. package/dist-server/graphql/types/account-webhook-order/account-webhook-order.js.map +1 -0
  86. package/dist-server/graphql/types/account-webhook-order/index.js +35 -0
  87. package/dist-server/graphql/types/account-webhook-order/index.js.map +1 -0
  88. package/dist-server/graphql/types/account-webhook-order/new-account-webhook-order.js +16 -0
  89. package/dist-server/graphql/types/account-webhook-order/new-account-webhook-order.js.map +1 -0
  90. package/dist-server/graphql/types/accounting/account-patch.js +1 -0
  91. package/dist-server/graphql/types/accounting/account-patch.js.map +1 -1
  92. package/dist-server/graphql/types/accounting/account.js +1 -0
  93. package/dist-server/graphql/types/accounting/account.js.map +1 -1
  94. package/dist-server/graphql/types/accounting/new-account.js +1 -0
  95. package/dist-server/graphql/types/accounting/new-account.js.map +1 -1
  96. package/dist-server/graphql/types/index.js +10 -3
  97. package/dist-server/graphql/types/index.js.map +1 -1
  98. package/dist-server/index.js +3 -2
  99. package/dist-server/index.js.map +1 -1
  100. package/package.json +15 -15
  101. package/server/constants/account.ts +10 -0
  102. package/server/constants/index.ts +1 -0
  103. package/server/controllers/accounting-api/index.ts +27 -0
  104. package/server/controllers/index.ts +2 -0
  105. package/server/controllers/xilnex/apis/goods-received/create-goods-received-note.ts +42 -0
  106. package/server/controllers/xilnex/apis/goods-received/index.ts +1 -0
  107. package/server/controllers/xilnex/apis/index.ts +8 -0
  108. package/server/controllers/xilnex/apis/purchase-order/get-purchase-order.ts +39 -0
  109. package/server/controllers/xilnex/apis/purchase-order/index.ts +1 -0
  110. package/server/controllers/xilnex/apis/sales/get-sale.ts +13 -0
  111. package/server/controllers/xilnex/apis/sales/index.ts +1 -0
  112. package/server/controllers/xilnex/apis/sales-order/create-sales-order.ts +61 -0
  113. package/server/controllers/xilnex/apis/sales-order/index.ts +2 -0
  114. package/server/controllers/xilnex/apis/sales-order/post-sales-order-to-sales-invoice.ts +22 -0
  115. package/server/controllers/xilnex/apis/sales-return/create-sales-return.ts +40 -0
  116. package/server/controllers/xilnex/apis/sales-return/index.ts +1 -0
  117. package/server/controllers/xilnex/apis/shipment/create-shipment.ts +28 -0
  118. package/server/controllers/xilnex/apis/shipment/index.ts +1 -0
  119. package/server/controllers/xilnex/apis/stock-request/get-stock-request.ts +15 -0
  120. package/server/controllers/xilnex/apis/stock-request/index.ts +1 -0
  121. package/server/controllers/xilnex/apis/stocks/create-stock-adjust-record.ts +42 -0
  122. package/server/controllers/xilnex/apis/stocks/index.ts +1 -0
  123. package/server/controllers/xilnex/apis/transfer-note/create-transfer-note.ts +40 -0
  124. package/server/controllers/xilnex/apis/transfer-note/index.ts +1 -0
  125. package/server/controllers/xilnex/index.ts +7 -0
  126. package/server/controllers/xilnex/platform-action.ts +46 -0
  127. package/server/controllers/xilnex/xilnex.ts +86 -0
  128. package/server/entities/account-webhook-order.ts +55 -0
  129. package/server/entities/account.ts +12 -2
  130. package/server/entities/index.ts +3 -2
  131. package/server/graphql/resolvers/account-webhook-order/account-webhook-order.ts +14 -0
  132. package/server/graphql/resolvers/account-webhook-order/account-webhook-orders.ts +16 -0
  133. package/server/graphql/resolvers/account-webhook-order/create-account-webhook-order.ts +16 -0
  134. package/server/graphql/resolvers/account-webhook-order/delete-account-webhook-order.ts +20 -0
  135. package/server/graphql/resolvers/account-webhook-order/delete-account-webhook-orders.ts +23 -0
  136. package/server/graphql/resolvers/account-webhook-order/index.ts +20 -0
  137. package/server/graphql/resolvers/account-webhook-order/update-account-webhook-order.ts +18 -0
  138. package/server/graphql/resolvers/account-webhook-order/update-multiple-account-webhook-orders.ts +44 -0
  139. package/server/graphql/resolvers/index.ts +3 -2
  140. package/server/graphql/types/account-webhook-order/account-webhook-order-list.ts +8 -0
  141. package/server/graphql/types/account-webhook-order/account-webhook-order-patch.ts +12 -0
  142. package/server/graphql/types/account-webhook-order/account-webhook-order.ts +16 -0
  143. package/server/graphql/types/account-webhook-order/index.ts +34 -0
  144. package/server/graphql/types/account-webhook-order/new-account-webhook-order.ts +10 -0
  145. package/server/graphql/types/accounting/account-patch.ts +1 -0
  146. package/server/graphql/types/accounting/account.ts +1 -0
  147. package/server/graphql/types/accounting/new-account.ts +1 -0
  148. package/server/graphql/types/index.ts +10 -3
  149. package/server/index.ts +4 -3
  150. package/client/themes/layout-theme.css +0 -92
@@ -0,0 +1,22 @@
1
+ import { AccountingAPI } from '../../../accounting-api'
2
+
3
+ export function postSalesOrderToSalesInvoice() {
4
+ return {
5
+ method: 'post',
6
+ path: '/salesorder/{orderId}/invoice/{outlet}',
7
+ denormalize(req, { accounting }) {
8
+ let accountInfo: any = accounting?.accountInfo ? JSON.parse(accounting.accountInfo) : {}
9
+ return {
10
+ resource: { orderId: req.orderId, outlet: accountInfo?.outlet || 'MAIN BRANCH' }
11
+ }
12
+ },
13
+ async normalize(res, { accounting }) {
14
+ let data = res.data
15
+
16
+ const sale = await AccountingAPI.getSale(accounting, { orderId: data.salesId })
17
+ data.sale = { ...sale.sale }
18
+
19
+ return data
20
+ }
21
+ }
22
+ }
@@ -0,0 +1,40 @@
1
+ export function createSalesReturn() {
2
+ return {
3
+ method: 'post',
4
+ path: '/sales/salesreturn',
5
+ denormalize(req, { accounting }) {
6
+ const { releaseGood, orderProducts } = req
7
+ let accountInfo: any = accounting?.accountInfo ? JSON.parse(accounting.accountInfo) : {}
8
+ let sale: any = {
9
+ id: releaseGood?.refNo3,
10
+ dateTime: releaseGood.updatedAt,
11
+ term: 0,
12
+ status: 'CONFIRMED',
13
+ outlet: accountInfo?.outlet || 'MAIN BRANCH',
14
+ salesPerson: accountInfo?.clientName,
15
+ recipientContact: releaseGood?.phone1,
16
+ recipientName: releaseGood?.attentionTo,
17
+ items: orderProducts.map(op => {
18
+ return {
19
+ id: op?.refItemId,
20
+ unitPrice: op?.sellingPrice,
21
+ quantity: -op?.pickedQty,
22
+ deliveryQuantity: 0,
23
+ discountAmount: 0,
24
+ remark: op?.remark,
25
+ enterPrice: op?.sellingPrice,
26
+ discountRemark: '',
27
+ totalDiscountAmount: 0
28
+ }
29
+ })
30
+ }
31
+
32
+ return {
33
+ payload: { sale }
34
+ }
35
+ },
36
+ normalize(res) {
37
+ return res.data
38
+ }
39
+ }
40
+ }
@@ -0,0 +1 @@
1
+ export * from './create-sales-return'
@@ -0,0 +1,28 @@
1
+ export function createShipment() {
2
+ return {
3
+ method: 'post',
4
+ path: '/shipment',
5
+ denormalize(req, { accounting }) {
6
+ const { releaseGood, orderProducts } = req
7
+ let accountInfo: any = accounting?.accountInfo ? JSON.parse(accounting.accountInfo) : {}
8
+
9
+ let shipmentItems: any = orderProducts.map(op => {
10
+ return {
11
+ documentId: op.refItemId,
12
+ shippingQuantity: op.releaseQty
13
+ }
14
+ })
15
+
16
+ let shipment: any = {
17
+ shippingOutlet: accountInfo?.outlet || 'MAIN BRANCH',
18
+ documentId: releaseGood.refNo3,
19
+ shippingDateTime: new Date()
20
+ }
21
+
22
+ return { payload: { shipment: { ...shipment, shipmentItems } } }
23
+ },
24
+ normalize(res) {
25
+ return res
26
+ }
27
+ }
28
+ }
@@ -0,0 +1 @@
1
+ export * from './create-shipment'
@@ -0,0 +1,15 @@
1
+ export function getStockRequest() {
2
+ return {
3
+ method: 'get',
4
+ path: '/stockrequest/{orderId}',
5
+ denormalize(req) {
6
+ const { orderId } = req
7
+ return { resource: { orderId } }
8
+ },
9
+ normalize(res) {
10
+ const { data } = res
11
+ let stockRequest: any = data.stockRequest
12
+ return stockRequest
13
+ }
14
+ }
15
+ }
@@ -0,0 +1 @@
1
+ export * from './get-stock-request'
@@ -0,0 +1,42 @@
1
+ export function createStockAdjustRecord() {
2
+ return {
3
+ method: 'post',
4
+ path: '/stocks/stockadjustment',
5
+ denormalize(req) {
6
+ const { xilnexInv } = req
7
+
8
+ let adjustQuantity: number = xilnexInv.changedQty - xilnexInv.originalQty
9
+ let stocksTakeTitle: any = {
10
+ recordItems: [],
11
+ adjustItems: [
12
+ {
13
+ adjustQuantity: xilnexInv.adjustQuantity,
14
+ adjustType: adjustQuantity >= 0 ? 'AdjustUp' : 'AdjustDown',
15
+ remark: '',
16
+ itemId: xilnexInv.productDetail.refCode,
17
+ itemCode: xilnexInv.product.sku,
18
+ name: xilnexInv.product.name,
19
+ stockAdjustType: 'Normal',
20
+ uom: xilnexInv?.uom ? xilnexInv.uom : xilnexInv.productDetail.uom,
21
+ uomQuantity: xilnexInv?.packingSize ? xilnexInv.packingSize : xilnexInv.productDetail.packingSize,
22
+ batchNo: xilnexInv?.batchId ? xilnexInv.batchId : null,
23
+ batchExpiryDate: xilnexInv?.expirationDate ? xilnexInv.expirationDate : null,
24
+ dateTime: xilnexInv.createdAt
25
+ }
26
+ ],
27
+ description: 'Stock Adjustment',
28
+ dateTime: xilnexInv.createdAt,
29
+ remarks: '',
30
+ stockTakeType: 'StockAdjustment',
31
+ status: 'COMPLETED'
32
+ }
33
+
34
+ return {
35
+ payload: { stocksTakeTitle }
36
+ }
37
+ },
38
+ normalize(res) {
39
+ return res
40
+ }
41
+ }
42
+ }
@@ -0,0 +1 @@
1
+ export * from './create-stock-adjust-record'
@@ -0,0 +1,40 @@
1
+ export function createTransferNote() {
2
+ return {
3
+ method: 'post',
4
+ path: '/TransferNote',
5
+ denormalize(req) {
6
+ const { releaseGood, deliveryOrder, orderInventories } = req
7
+
8
+ let transferNote: any = {
9
+ transferTo: deliveryOrder.attentionTo,
10
+ transferBy: '',
11
+ transferDate: '',
12
+ receiveDate: '',
13
+ transferFrom: '',
14
+ status: deliveryOrder.status,
15
+ remarks: deliveryOrder.remark,
16
+ type: 'Transfer',
17
+ toCompany: deliveryOrder.attentionCompany,
18
+ fromCompany: '',
19
+ transferType: '',
20
+ lastUpdateDateTime: deliveryOrder.deliveryOrderDateTime,
21
+ etaDate: deliveryOrder.deliveryDate,
22
+ totalQuantity: 1,
23
+ totalPrice: 0,
24
+ transferItems: orderInventories
25
+ }
26
+
27
+ return {
28
+ payload: {
29
+ clientId: '',
30
+ transferNote,
31
+ deliveryOrderNumber: deliveryOrder.name,
32
+ deliveryOrderDate: deliveryOrder.deliveryDate
33
+ }
34
+ }
35
+ },
36
+ normalize(res) {
37
+ return res
38
+ }
39
+ }
40
+ }
@@ -0,0 +1 @@
1
+ export * from './create-transfer-note'
@@ -0,0 +1,7 @@
1
+ import { AccountingAPI } from '../accounting-api'
2
+ import * as APIS from './apis'
3
+ import { action } from './platform-action'
4
+
5
+ export * from './xilnex'
6
+
7
+ AccountingAPI.registerPlatform('xilnex', action, APIS)
@@ -0,0 +1,46 @@
1
+ import { config, logger } from '@things-factory/env'
2
+
3
+ import { Xilnex } from './xilnex'
4
+
5
+ const xilnexConfig = config.get('accountingIntegrationXilnex', {})
6
+ const { apiKey, apiSecret } = xilnexConfig
7
+
8
+ function substitute(path, obj) {
9
+ var props = []
10
+ var re = /{([^}]+)}/g
11
+ var text
12
+
13
+ while ((text = re.exec(path))) {
14
+ props.push(text[1])
15
+ }
16
+
17
+ var result = path
18
+ props.forEach(prop => {
19
+ let value = obj[prop.trim()]
20
+ result = result.replace(`{${prop}}`, value === undefined ? '' : value)
21
+ })
22
+
23
+ return result
24
+ }
25
+
26
+ async function _action({ accounting, method = 'get', path, request }) {
27
+ const client = new Xilnex({
28
+ accessToken: accounting.accessToken,
29
+ appId: accounting.accountId
30
+ })
31
+
32
+ const { resource = {}, payload = {} } = request
33
+
34
+ path = substitute(path, resource)
35
+
36
+ return await client[method](path, payload)
37
+ }
38
+
39
+ export const action = async ({ accounting, method = 'get', path, request }) => {
40
+ try {
41
+ return await _action({ accounting, method, path, request })
42
+ } catch (ex) {
43
+ logger.error(`Xilnex: action: ${ex}`)
44
+ throw ex
45
+ }
46
+ }
@@ -0,0 +1,86 @@
1
+ import crypto from 'crypto'
2
+ import fetch from 'node-fetch'
3
+
4
+ const ENDPOINT = `https://api.xilnex.com/logic/v2`
5
+ const debug = require('debug')('things-factory:integration-accounting:xilnex')
6
+
7
+ export type XilnexConfig = {
8
+ accessToken?: string
9
+ appId?: string
10
+ secretKey?: string
11
+ }
12
+
13
+ export class Xilnex {
14
+ private config: XilnexConfig
15
+
16
+ constructor(config: XilnexConfig) {
17
+ this.config = {
18
+ ...config
19
+ }
20
+ }
21
+
22
+ isValidSignature(data, secret, signature) {
23
+ let hmac = crypto.createHmac('sha256', secret).update(JSON.stringify(data)).digest('hex')
24
+
25
+ return hmac === signature
26
+ }
27
+
28
+ async get(path: string, data: any) {
29
+ const { accessToken, appId } = this.config
30
+
31
+ const qs = Object.entries(data)
32
+ .map(([k, v]) => `${k}=${encodeURIComponent(String(v))}`)
33
+ .join('&')
34
+
35
+ const endpoint = `${ENDPOINT}${path}${qs ? '?' + qs : ''}`
36
+ debug('endpoint', endpoint)
37
+
38
+ const response = await fetch(endpoint, {
39
+ method: 'get',
40
+ headers: {
41
+ 'Content-Type': 'application/json',
42
+ token: accessToken,
43
+ appid: appId,
44
+ auth: '5'
45
+ }
46
+ })
47
+
48
+ if (response.ok) {
49
+ const result = await response.json()
50
+ return result
51
+ } else {
52
+ const result = await response.text()
53
+ throw new Error(`(${response.status}) ${result}`)
54
+ }
55
+ }
56
+
57
+ async post(path: string, data: any = {}) {
58
+ const { accessToken, appId } = this.config
59
+
60
+ debug('data', data)
61
+
62
+ const jsondata = JSON.stringify(data)
63
+
64
+ const endpoint = `${ENDPOINT}${path}`
65
+ debug('endpoint', endpoint)
66
+
67
+ const response = await fetch(endpoint, {
68
+ method: 'post',
69
+ headers: {
70
+ 'Content-Type': 'application/json',
71
+ token: accessToken,
72
+ appid: appId,
73
+ auth: '5'
74
+ },
75
+ body: jsondata
76
+ })
77
+
78
+ if (response.ok) {
79
+ const result = await response.json()
80
+ return result
81
+ } else {
82
+ const result = await response.text()
83
+ throw new Error(`(${response.status}) ${result}`)
84
+ }
85
+ }
86
+ }
@@ -0,0 +1,55 @@
1
+ import { Field } from 'type-graphql'
2
+ import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
3
+
4
+ import { User } from '@things-factory/auth-base'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { ACCOUNT_PLATFORM, ACCOUNT_SYNC_STATUS } from '../constants/account'
8
+
9
+ @Entity()
10
+ @Index(
11
+ 'ix_account_webhook_order_0',
12
+ (accountWebhook: AccountWebhookOrder) => [accountWebhook.domain, accountWebhook.name],
13
+ { unique: true }
14
+ )
15
+ export class AccountWebhookOrder {
16
+ @PrimaryGeneratedColumn('uuid')
17
+ id: string
18
+
19
+ @ManyToOne(type => Domain)
20
+ domain: Domain
21
+
22
+ @Column({
23
+ nullable: true
24
+ })
25
+ request: string
26
+
27
+ @Column({ default: ACCOUNT_PLATFORM.OTHERS })
28
+ @Field()
29
+ platform: string
30
+
31
+ @Column({
32
+ nullable: true,
33
+ default: ACCOUNT_SYNC_STATUS.FAILED
34
+ })
35
+ status: string
36
+
37
+ @Column()
38
+ name: string
39
+
40
+ @CreateDateColumn()
41
+ createdAt: Date
42
+
43
+ @UpdateDateColumn()
44
+ updatedAt: Date
45
+
46
+ @ManyToOne(type => User, {
47
+ nullable: true
48
+ })
49
+ creator: User
50
+
51
+ @ManyToOne(type => User, {
52
+ nullable: true
53
+ })
54
+ updater: User
55
+ }
@@ -1,6 +1,10 @@
1
+ import { Field } from 'type-graphql'
2
+ import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
3
+
1
4
  import { User } from '@things-factory/auth-base'
2
5
  import { Domain } from '@things-factory/shell'
3
- import { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, UpdateDateColumn } from 'typeorm'
6
+
7
+ import { ACCOUNT_PLATFORM } from '../constants/account'
4
8
 
5
9
  @Entity()
6
10
  @Index('ix_account_0', (account: Account) => [account.domain, account.name], { unique: true })
@@ -11,7 +15,8 @@ export class Account {
11
15
  @ManyToOne(type => Domain)
12
16
  domain: Domain
13
17
 
14
- @Column()
18
+ @Column({ default: ACCOUNT_PLATFORM.OTHERS })
19
+ @Field()
15
20
  platform: string
16
21
 
17
22
  @Column({
@@ -40,6 +45,11 @@ export class Account {
40
45
  })
41
46
  accessToken: string
42
47
 
48
+ @Column({
49
+ nullable: true
50
+ })
51
+ webhookKey: string
52
+
43
53
  @Column({ default: false, nullable: true })
44
54
  trackedInventory: Boolean
45
55
 
@@ -1,5 +1,6 @@
1
1
  import { Account } from './account'
2
+ import { AccountWebhookOrder } from './account-webhook-order'
2
3
 
3
- export const entities = [Account]
4
+ export const entities = [Account, AccountWebhookOrder]
4
5
 
5
- export { Account }
6
+ export { Account, AccountWebhookOrder }
@@ -0,0 +1,14 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { AccountWebhookOrder } from '../../../entities'
4
+
5
+ export const accountWebhookOrderResolver = {
6
+ async accountWebhookOrder(_: any, { id }, context: any) {
7
+ const repository = getRepository(AccountWebhookOrder)
8
+
9
+ return await getRepository(AccountWebhookOrder).findOne({
10
+ where: { domain: context.state.domain, id },
11
+ relations: ['domain', 'creator', 'updater']
12
+ })
13
+ }
14
+ }
@@ -0,0 +1,16 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { convertListParams, ListParam } from '@things-factory/shell'
4
+
5
+ import { AccountWebhookOrder } from '../../../entities'
6
+
7
+ export const accountWebhookOrdersResolver = {
8
+ async accountWebhookOrders(_: any, params: ListParam, context: any) {
9
+ const convertedParams = convertListParams(params, context.state.domain.id)
10
+ const [items, total] = await getRepository(AccountWebhookOrder).findAndCount({
11
+ ...convertedParams,
12
+ relations: ['domain', 'creator', 'updater']
13
+ })
14
+ return { items, total }
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { ACCOUNTING_STATUS } from '../../../controllers'
4
+ import { AccountWebhookOrder } from '../../../entities'
5
+
6
+ export const createAccountWebhookOrder = {
7
+ async createAccountWebhookOrder(_: any, { account }, context: any) {
8
+ return await getRepository(AccountWebhookOrder).save({
9
+ status: ACCOUNTING_STATUS.INACTIVE,
10
+ ...account,
11
+ domain: context.state.domain,
12
+ creator: context.state.user,
13
+ updater: context.state.user
14
+ })
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { ACCOUNTING_STATUS } from '../../../controllers'
4
+ import { AccountWebhookOrder } from '../../../entities'
5
+
6
+ export const deleteAccountWebhookOrder = {
7
+ async deleteAccountWebhookOrder(_: any, { id }, context: any) {
8
+ const foundAccountWebhookOrder: AccountWebhookOrder = await getRepository(AccountWebhookOrder).findOne({
9
+ where: { domain: context.state.domain, id }
10
+ })
11
+
12
+ await getRepository(AccountWebhookOrder).save({
13
+ ...foundAccountWebhookOrder,
14
+ status: ACCOUNTING_STATUS.TERMINATED,
15
+ updater: context.state.user
16
+ })
17
+
18
+ return true
19
+ }
20
+ }
@@ -0,0 +1,23 @@
1
+ import { getRepository, In } from 'typeorm'
2
+
3
+ import { ACCOUNTING_STATUS } from '../../../controllers'
4
+ import { AccountWebhookOrder } from '../../../entities'
5
+
6
+ export const deleteAccountWebhookOrders = {
7
+ async deleteAccountWebhookOrders(_: any, { ids }, context: any) {
8
+ let foundAccountWebhookOrders: AccountWebhookOrder[] = await getRepository(AccountWebhookOrder).find({
9
+ where: { domain: context.state.domain, id: In(ids) }
10
+ })
11
+
12
+ const updatedAccountWebhookOrder = foundAccountWebhookOrders.map((accountWebhookOrder: AccountWebhookOrder) => {
13
+ return {
14
+ ...accountWebhookOrder,
15
+ status: ACCOUNTING_STATUS.TERMINATED,
16
+ updater: context.state.user
17
+ }
18
+ })
19
+
20
+ await getRepository(AccountWebhookOrder).save(updatedAccountWebhookOrder)
21
+ return true
22
+ }
23
+ }
@@ -0,0 +1,20 @@
1
+ import { accountWebhookOrderResolver } from './account-webhook-order'
2
+ import { accountWebhookOrdersResolver } from './account-webhook-orders'
3
+ import { createAccountWebhookOrder } from './create-account-webhook-order'
4
+ import { deleteAccountWebhookOrder } from './delete-account-webhook-order'
5
+ import { deleteAccountWebhookOrders } from './delete-account-webhook-orders'
6
+ import { updateAccountWebhookOrder } from './update-account-webhook-order'
7
+ import { updateMultipleAccountWebhookOrders } from './update-multiple-account-webhook-orders'
8
+
9
+ export const Query = {
10
+ ...accountWebhookOrdersResolver,
11
+ ...accountWebhookOrderResolver
12
+ }
13
+
14
+ export const Mutation = {
15
+ ...updateAccountWebhookOrder,
16
+ ...updateMultipleAccountWebhookOrders,
17
+ ...createAccountWebhookOrder,
18
+ ...deleteAccountWebhookOrder,
19
+ ...deleteAccountWebhookOrders
20
+ }
@@ -0,0 +1,18 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { AccountWebhookOrder } from '../../../entities'
4
+
5
+ export const updateAccountWebhookOrder = {
6
+ async updateAccountWebhookOrder(_: any, { name, patch }, context: any) {
7
+ const repository = getRepository(AccountWebhookOrder)
8
+ const accountWebhookOrder: any = await repository.findOne({
9
+ where: { domain: context.state.domain, name }
10
+ })
11
+
12
+ return await repository.save({
13
+ ...accountWebhookOrder,
14
+ ...patch,
15
+ updater: context.state.user
16
+ })
17
+ }
18
+ }
@@ -0,0 +1,44 @@
1
+ import { getRepository } from 'typeorm'
2
+
3
+ import { AccountWebhookOrder } from '../../../entities'
4
+
5
+ export const updateMultipleAccountWebhookOrders = {
6
+ async updateMultipleAccountWebhookOrders(_: any, { patches }, context: any) {
7
+ let results = []
8
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
9
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
10
+ const accountWebhookOrderRepo = getRepository(AccountWebhookOrder)
11
+
12
+ if (_createRecords.length > 0) {
13
+ for (let i = 0; i < _createRecords.length; i++) {
14
+ const newRecord = _createRecords[i]
15
+
16
+ const result = await accountWebhookOrderRepo.save({
17
+ ...newRecord,
18
+ domain: context.state.domain,
19
+ creator: context.state.user,
20
+ updater: context.state.user
21
+ })
22
+
23
+ results.push({ ...result, cuFlag: '+' })
24
+ }
25
+ }
26
+
27
+ if (_updateRecords.length > 0) {
28
+ for (let i = 0; i < _updateRecords.length; i++) {
29
+ const newRecord = _updateRecords[i]
30
+ const accountWebhookOrder: AccountWebhookOrder = await accountWebhookOrderRepo.findOne(newRecord.id)
31
+
32
+ const result = await accountWebhookOrderRepo.save({
33
+ ...accountWebhookOrder,
34
+ ...newRecord,
35
+ updater: context.state.user
36
+ })
37
+
38
+ results.push({ ...result, cuFlag: 'M' })
39
+ }
40
+ }
41
+
42
+ return results
43
+ }
44
+ }
@@ -1,5 +1,6 @@
1
+ import * as AccountWebhookOrder from './account-webhook-order'
1
2
  import * as Accounting from './accounting'
2
3
 
3
- export const queries = [Accounting.Query]
4
+ export const queries = [Accounting.Query, AccountWebhookOrder.Query]
4
5
 
5
- export const mutations = [Accounting.Mutation]
6
+ export const mutations = [Accounting.Mutation, AccountWebhookOrder.Mutation]
@@ -0,0 +1,8 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const AccountWebhookOrderList = gql`
4
+ type AccountWebhookOrderList {
5
+ items: [AccountWebhookOrder]
6
+ total: Int
7
+ }
8
+ `
@@ -0,0 +1,12 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const AccountWebhookOrderPatch = gql`
4
+ input AccountWebhookOrderPatch {
5
+ id: String
6
+ name: String
7
+ platform: String
8
+ request: String
9
+ status: String
10
+ cuFlag: String
11
+ }
12
+ `