@things-factory/warehouse-base 8.0.3 → 8.0.6

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 (88) hide show
  1. package/dist-server/tsconfig.tsbuildinfo +1 -1
  2. package/package.json +8 -8
  3. package/server/constants/index.ts +0 -5
  4. package/server/constants/inventory.ts +0 -67
  5. package/server/constants/location.ts +0 -14
  6. package/server/constants/pallet.ts +0 -10
  7. package/server/constants/rule-type.ts +0 -5
  8. package/server/constants/tote.ts +0 -5
  9. package/server/controllers/ecommerce/ecommerce-controller.ts +0 -108
  10. package/server/controllers/ecommerce/index.ts +0 -2
  11. package/server/controllers/ecommerce/sellercraft-controller.ts +0 -100
  12. package/server/controllers/index.ts +0 -2
  13. package/server/controllers/warehouse-controller.ts +0 -181
  14. package/server/index.ts +0 -9
  15. package/server/middlewares/index.ts +0 -0
  16. package/server/migrations/index.ts +0 -9
  17. package/server/service/index.ts +0 -80
  18. package/server/service/inventory/index.ts +0 -6
  19. package/server/service/inventory/inventory-mutation.ts +0 -530
  20. package/server/service/inventory/inventory-query.ts +0 -1263
  21. package/server/service/inventory/inventory-types.ts +0 -367
  22. package/server/service/inventory/inventory.ts +0 -408
  23. package/server/service/inventory-change/index.ts +0 -6
  24. package/server/service/inventory-change/inventory-change-mutation.ts +0 -969
  25. package/server/service/inventory-change/inventory-change-query.ts +0 -93
  26. package/server/service/inventory-change/inventory-change-types.ts +0 -36
  27. package/server/service/inventory-change/inventory-change.ts +0 -164
  28. package/server/service/inventory-history/index.ts +0 -6
  29. package/server/service/inventory-history/inventory-history-mutation.ts +0 -116
  30. package/server/service/inventory-history/inventory-history-query.ts +0 -1845
  31. package/server/service/inventory-history/inventory-history-types.ts +0 -444
  32. package/server/service/inventory-history/inventory-history.ts +0 -203
  33. package/server/service/inventory-item/index.ts +0 -6
  34. package/server/service/inventory-item/inventory-item-mutation.ts +0 -217
  35. package/server/service/inventory-item/inventory-item-query.ts +0 -226
  36. package/server/service/inventory-item/inventory-item-type.ts +0 -74
  37. package/server/service/inventory-item/inventory-item.ts +0 -105
  38. package/server/service/inventory-item-change/index.ts +0 -6
  39. package/server/service/inventory-item-change/inventory-item-change-mutation.ts +0 -119
  40. package/server/service/inventory-item-change/inventory-item-change-query.ts +0 -47
  41. package/server/service/inventory-item-change/inventory-item-change-type.ts +0 -68
  42. package/server/service/inventory-item-change/inventory-item-change.ts +0 -92
  43. package/server/service/inventory-product/index.ts +0 -6
  44. package/server/service/inventory-product/inventory-product-mutation.ts +0 -116
  45. package/server/service/inventory-product/inventory-product-query.ts +0 -47
  46. package/server/service/inventory-product/inventory-product-type.ts +0 -59
  47. package/server/service/inventory-product/inventory-product.ts +0 -88
  48. package/server/service/location/index.ts +0 -6
  49. package/server/service/location/location-mutation.ts +0 -134
  50. package/server/service/location/location-query.ts +0 -244
  51. package/server/service/location/location-types.ts +0 -173
  52. package/server/service/location/location.ts +0 -121
  53. package/server/service/movement/index.ts +0 -6
  54. package/server/service/movement/movement-mutation.ts +0 -60
  55. package/server/service/movement/movement-query.ts +0 -263
  56. package/server/service/movement/movement-types.ts +0 -74
  57. package/server/service/movement/movement.ts +0 -81
  58. package/server/service/pallet/index.ts +0 -6
  59. package/server/service/pallet/pallet-mutation.ts +0 -242
  60. package/server/service/pallet/pallet-query.ts +0 -106
  61. package/server/service/pallet/pallet-types.ts +0 -80
  62. package/server/service/pallet/pallet.ts +0 -92
  63. package/server/service/pallet-count/index.ts +0 -6
  64. package/server/service/pallet-count/pallet-count-mutation.ts +0 -151
  65. package/server/service/pallet-count/pallet-count-query.ts +0 -45
  66. package/server/service/pallet-count/pallet-count-types.ts +0 -36
  67. package/server/service/pallet-count/pallet-count.ts +0 -70
  68. package/server/service/pallet-history/index.ts +0 -6
  69. package/server/service/pallet-history/pallet-history-mutation.ts +0 -114
  70. package/server/service/pallet-history/pallet-history-query.ts +0 -48
  71. package/server/service/pallet-history/pallet-history-types.ts +0 -36
  72. package/server/service/pallet-history/pallet-history.ts +0 -89
  73. package/server/service/reduced-inventory-history/index.ts +0 -3
  74. package/server/service/reduced-inventory-history/reduced-inventory-history.ts +0 -92
  75. package/server/service/tote/index.ts +0 -6
  76. package/server/service/tote/tote-mutation.ts +0 -201
  77. package/server/service/tote/tote-query.ts +0 -106
  78. package/server/service/tote/tote-types.ts +0 -44
  79. package/server/service/tote/tote.ts +0 -77
  80. package/server/service/warehouse/index.ts +0 -6
  81. package/server/service/warehouse/warehouse-mutation.ts +0 -152
  82. package/server/service/warehouse/warehouse-query.ts +0 -58
  83. package/server/service/warehouse/warehouse-types.ts +0 -50
  84. package/server/service/warehouse/warehouse.ts +0 -95
  85. package/server/utils/datetime-util.ts +0 -54
  86. package/server/utils/index.ts +0 -3
  87. package/server/utils/inventory-no-generator.ts +0 -15
  88. package/server/utils/inventory-util.ts +0 -490
@@ -1,60 +0,0 @@
1
- import { Arg, Ctx, Directive, Mutation, Resolver } from 'type-graphql'
2
- import { In } from 'typeorm'
3
-
4
- import { getPermittedBizplaceIds } from '@things-factory/biz-base'
5
- import { getRepository } from '@things-factory/shell'
6
-
7
- import { Inventory } from '../inventory/inventory'
8
- import { Movement } from './movement'
9
- import { MovementPatch, NewMovement } from './movement-types'
10
-
11
- @Resolver(Movement)
12
- export class MovementMutation {
13
- @Directive('@privilege(category: "movement", privilege: "mutation")')
14
- @Directive('@transaction')
15
- @Mutation(returns => Movement)
16
- async createMovement(@Arg('movement') movement: NewMovement, @Ctx() context: ResolverContext): Promise<Movement> {
17
- const { domain, user } = context.state
18
- return await getRepository(Movement).save({
19
- ...movement,
20
- domain,
21
- creator: user,
22
- updater: user
23
- })
24
- }
25
-
26
- @Directive('@privilege(category: "movement", privilege: "mutation")')
27
- @Directive('@transaction')
28
- @Mutation(returns => Movement)
29
- async updateMovement(
30
- @Arg('id') id: string,
31
- @Arg('patch') patch: MovementPatch,
32
- @Ctx() context: ResolverContext
33
- ): Promise<Movement> {
34
- const movement = await getRepository(Movement).findOne({
35
- where: {
36
- domain: { id: context.state.domain.id },
37
- id,
38
- bizplace: { id: In(await getPermittedBizplaceIds(context.state.domain, context.state.user)) }
39
- }
40
- })
41
-
42
- if (patch.inventory && patch.inventory.id) {
43
- patch.inventory = await getRepository(Inventory).findOneBy({ id: patch.inventory.id })
44
- }
45
-
46
- return await getRepository(Movement).save({
47
- ...movement,
48
- ...patch,
49
- updater: context.state.user
50
- })
51
- }
52
-
53
- @Directive('@privilege(category: "movement", privilege: "mutation")')
54
- @Directive('@transaction')
55
- @Mutation(returns => Boolean)
56
- async deleteMovement(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Boolean> {
57
- await getRepository(Movement).delete(name)
58
- return true
59
- }
60
- }
@@ -1,263 +0,0 @@
1
- import { Arg, Args, Ctx, Directive, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
- import { In } from 'typeorm'
3
-
4
- import { User } from '@things-factory/auth-base'
5
- import { getPermittedBizplaceIds } from '@things-factory/biz-base'
6
- import { convertListParams, Domain, getRepository, ListParam } from '@things-factory/shell'
7
-
8
- import { InventoryHistory } from '../inventory-history/inventory-history'
9
- import { Movement } from './movement'
10
- import { MovementCount, MovementList } from './movement-types'
11
-
12
- @Resolver(Movement)
13
- export class MovementQuery {
14
- @Directive('@privilege(category: "movement", privilege: "query", domainOwnerGranted: true)')
15
- @Query(returns => MovementList)
16
- async movements(@Args(type => ListParam) params: ListParam, @Ctx() context: ResolverContext): Promise<MovementList> {
17
- const convertedParams = convertListParams(params)
18
- convertedParams.where.bizplace = In(await getPermittedBizplaceIds(context.state.domain, context.state.user))
19
-
20
- const [items, total] = await getRepository(Movement).findAndCount({
21
- ...convertedParams,
22
- relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']
23
- })
24
- return { items, total }
25
- }
26
-
27
- @Directive('@privilege(category: "movement", privilege: "query", domainOwnerGranted: true)')
28
- @Query(returns => Movement)
29
- async movement(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Movement> {
30
- const { domain, user } = context.state
31
-
32
- return await getRepository(Movement).findOne({
33
- where: {
34
- domain: { id: domain.id },
35
- /* name,*/
36
- bizplace: { id: In(await getPermittedBizplaceIds(domain, user)) }
37
- },
38
- relations: ['domain', 'bizplace', 'inventory', 'creator', 'updater']
39
- })
40
- }
41
-
42
- @Query(returns => [MovementCount])
43
- async inboundMovementsCounter(
44
- @Args(type => ListParam) params: ListParam,
45
- @Ctx() context: ResolverContext
46
- ): Promise<MovementCount[]> {
47
- const { domain, user } = context.state
48
-
49
- let bizplaces = (await getPermittedBizplaceIds(domain, user))
50
- .map(bizplace => {
51
- return "'" + bizplace.trim() + "'"
52
- })
53
- .join(',')
54
-
55
- let startDate = new Date()
56
- let endDate = new Date()
57
- startDate.setDate(startDate.getDate() - 30)
58
- startDate.setHours(0)
59
- startDate.setMinutes(0)
60
- startDate.setSeconds(0)
61
- const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`
62
-
63
- const counter = await getRepository(InventoryHistory).query(`
64
- select inbound_date, count(*) from(
65
- select date(ih.created_at) inbound_date from inventory_histories ih
66
- where ih.bizplace_id in (${bizplaces})
67
- and ih.transaction_type in ('NEW', 'PUTAWAY')
68
- and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'
69
- and domain_id = '${domain.id}'
70
- ) as foo
71
- group by inbound_date
72
- order by inbound_date asc
73
- `)
74
-
75
- let items = []
76
- for (let i = 0; i < 30; i++) {
77
- const month = startDate.toLocaleString('default', { month: 'short' })
78
- const day = startDate.getDate()
79
-
80
- items.push({
81
- date: `${month} ${day.toString().padStart(2, '0')}`,
82
- count: '0'
83
- })
84
- startDate.setDate(startDate.getDate() + 1)
85
- }
86
-
87
- let compareDate = new Date()
88
- compareDate.setDate(compareDate.getDate() - 30)
89
- compareDate.setHours(0)
90
- compareDate.setMinutes(0)
91
- compareDate.setSeconds(0)
92
-
93
- items = items.map((item: { date: string; count: number }) => {
94
- item.count =
95
- counter.find(ctr => ctr.inbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0
96
-
97
- compareDate.setDate(compareDate.getDate() + 1)
98
-
99
- return item
100
- })
101
-
102
- return items
103
- }
104
-
105
- @Query(returns => [MovementCount])
106
- async outboundMovementsCounter(
107
- @Args(type => ListParam) params: ListParam,
108
- @Ctx() context: ResolverContext
109
- ): Promise<MovementCount[]> {
110
- const { domain, user } = context.state
111
-
112
- let bizplaces = (await getPermittedBizplaceIds(domain, user))
113
- .map(bizplace => {
114
- return "'" + bizplace.trim() + "'"
115
- })
116
- .join(',')
117
-
118
- let startDate = new Date()
119
- let endDate = new Date()
120
- startDate.setDate(startDate.getDate() - 30)
121
- startDate.setHours(0)
122
- startDate.setMinutes(0)
123
- startDate.setSeconds(0)
124
- const timeNow = `${endDate.getHours()}:${endDate.getMinutes()}:${endDate.getSeconds()}`
125
-
126
- const counter = await getRepository(InventoryHistory).query(`
127
- select outbound_date, count(*) from(
128
- select date(ih.created_at) outbound_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id
129
- from inventory_histories ih
130
- inner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id
131
- where ih.domain_id='${domain.id}'
132
- and iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'
133
- ) as src
134
- where rn = 1
135
- and created_at between '${startDate.toLocaleDateString()} 00:00:00' and '${endDate.toLocaleDateString()} ${timeNow}'
136
- group by src.outbound_date
137
- order by src.outbound_date
138
- `)
139
-
140
- let items = []
141
- for (let i = 0; i < 30; i++) {
142
- const month = startDate.toLocaleString('default', { month: 'short' })
143
- const day = startDate.getDate()
144
-
145
- items.push({
146
- date: `${month} ${day.toString().padStart(2, '0')}`,
147
- count: '0'
148
- })
149
- startDate.setDate(startDate.getDate() + 1)
150
- }
151
-
152
- let compareDate = new Date()
153
- compareDate.setDate(compareDate.getDate() - 30)
154
- compareDate.setHours(0)
155
- compareDate.setMinutes(0)
156
- compareDate.setSeconds(0)
157
-
158
- items = items.map((item: { date: string; count: number }) => {
159
- item.count =
160
- counter.find(ctr => ctr.outbound_date.toLocaleDateString() === compareDate.toLocaleDateString())?.count || 0
161
-
162
- compareDate.setDate(compareDate.getDate() + 1)
163
-
164
- return item
165
- })
166
-
167
- return items
168
- }
169
-
170
- @Query(returns => [MovementCount])
171
- async weeklyMovementsCounter(
172
- @Arg('month') month: number,
173
- @Arg('year') year: number,
174
- @Ctx() context: ResolverContext
175
- ): Promise<MovementCount[]> {
176
- const { domain, user } = context.state
177
-
178
- let bizplaces = (await getPermittedBizplaceIds(domain, user))
179
- .map(bizplace => {
180
- return "'" + bizplace.trim() + "'"
181
- })
182
- .join(',')
183
-
184
- if (!month && !year) {
185
- // if user didn't specify the month and year, set default as last month
186
- var firstOfMonth = new Date()
187
- var lastOfMonth = new Date()
188
-
189
- firstOfMonth.setMonth(firstOfMonth.getMonth() - 1)
190
- firstOfMonth.setDate(1)
191
- lastOfMonth.setDate(0)
192
- } else {
193
- var firstOfMonth = new Date(year, month - 1, 1)
194
- var lastOfMonth = new Date(year, month, 0)
195
- }
196
-
197
- // get data from database
198
- const data = await getRepository(InventoryHistory).query(`
199
- select movement_date, sum(outbound_count) as outbound_count, sum(inbound_count) as inbound_count from (
200
- select movement_date, count(*) as outbound_count, 0 as inbound_count from(
201
- select date(ih.created_at) movement_date, row_number() over(partition by ih.pallet_id order by ih.created_at desc) as rn, ih.*, iv.bizplace_id
202
- from inventory_histories ih
203
- inner join inventories iv on iv.pallet_id = ih.pallet_id and iv.domain_id = ih.domain_id
204
- where ih.domain_id = '${domain.id}'
205
- and iv.bizplace_id in (${bizplaces}) and ih.status = 'TERMINATED'
206
- ) as src
207
- where rn = 1
208
- and created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'
209
- group by movement_date
210
- union all
211
- select movement_date, 0 as outbound_count, count(*) as inbound_count from(
212
- select date(ih.created_at) movement_date from inventory_histories ih
213
- where ih.bizplace_id in (${bizplaces})
214
- and ih.transaction_type in ('NEW', 'PUTAWAY')
215
- and created_at between '${firstOfMonth.toLocaleDateString()} 00:00:00' and '${lastOfMonth.toLocaleDateString()} 23:59:59'
216
- and domain_id = '${domain.id}'
217
- ) as foo
218
- group by movement_date
219
- order by movement_date
220
- ) src
221
- group by movement_date
222
- `)
223
-
224
- let movements = [
225
- { week: 'Week 01', ...getMovementByWeek(data, [0, 7]) },
226
- { week: 'Week 02', ...getMovementByWeek(data, [8, 14]) },
227
- { week: 'Week 03', ...getMovementByWeek(data, [15, 21]) },
228
- { week: 'Week 04', ...getMovementByWeek(data, [21, 31]) }
229
- ]
230
-
231
- // return total 4 weeks of in/outbound movements for a specific month
232
- return movements
233
- }
234
-
235
- @FieldResolver(type => Domain)
236
- async domain(@Root() movement: Movement) {
237
- return await getRepository(Domain).findOneBy({ id: movement.domainId })
238
- }
239
-
240
- @FieldResolver(type => User)
241
- async updater(@Root() movement: Movement) {
242
- return await getRepository(User).findOneBy({ id: movement.updaterId })
243
- }
244
-
245
- @FieldResolver(type => User)
246
- async creator(@Root() movement: Movement) {
247
- return await getRepository(User).findOneBy({ id: movement.creatorId })
248
- }
249
- }
250
-
251
- function getMovementByWeek(data, range): { inbound: number; outbound: number } {
252
- return data
253
- .filter(item => item.movement_date.getDate() > range[0] && item.movement_date.getDate() <= range[1])
254
- .reduce(
255
- (inout: { inbound: number; outbound: number }, curr) => {
256
- inout.inbound += Number(curr.inbound_count)
257
- inout.outbound += Number(curr.outbound_count)
258
-
259
- return inout
260
- },
261
- { inbound: 0, outbound: 0 }
262
- )
263
- }
@@ -1,74 +0,0 @@
1
- import { Field, InputType, Int, ObjectType } from 'type-graphql'
2
-
3
- import { ObjectRef } from '@things-factory/shell'
4
-
5
- import { Movement } from './movement'
6
-
7
- @ObjectType()
8
- export class MovementCount {
9
- @Field({ nullable: true })
10
- date?: string
11
-
12
- @Field({ nullable: true })
13
- count?: string
14
-
15
- @Field({ nullable: true })
16
- week?: string
17
-
18
- @Field(type => Int, { nullable: true })
19
- inbound?: number
20
-
21
- @Field(type => Int, { nullable: true })
22
- outbound?: number
23
- }
24
-
25
- @ObjectType()
26
- export class MovementList {
27
- @Field(type => [Movement], { nullable: true })
28
- items?: Movement[]
29
-
30
- @Field(type => Int, { nullable: true })
31
- total?: number
32
- }
33
-
34
- @InputType()
35
- export class MovementPatch {
36
- @Field({ nullable: true })
37
- id?: string
38
-
39
- @Field(type => ObjectRef, { nullable: true })
40
- bizplace?: ObjectRef
41
-
42
- @Field(type => ObjectRef, { nullable: true })
43
- inventory?: ObjectRef
44
-
45
- @Field(type => Int, { nullable: true })
46
- inQty?: number
47
-
48
- @Field(type => Int, { nullable: true })
49
- outQty?: number
50
-
51
- @Field({ nullable: true })
52
- descrtiption?: string
53
- }
54
-
55
- @InputType()
56
- export class NewMovement {
57
- @Field({ nullable: true })
58
- id?: string
59
-
60
- @Field(type => ObjectRef, { nullable: true })
61
- bizplace?: ObjectRef
62
-
63
- @Field(type => ObjectRef, { nullable: true })
64
- inventory?: ObjectRef
65
-
66
- @Field(type => Int)
67
- inQty: number
68
-
69
- @Field(type => Int)
70
- outQty: number
71
-
72
- @Field({ nullable: true })
73
- description?: string
74
- }
@@ -1,81 +0,0 @@
1
- import { Field, Float, ID, ObjectType } from 'type-graphql'
2
- import {
3
- Column,
4
- CreateDateColumn,
5
- Entity,
6
- Index,
7
- ManyToOne,
8
- PrimaryGeneratedColumn,
9
- RelationId,
10
- UpdateDateColumn
11
- } from 'typeorm'
12
-
13
- import { User } from '@things-factory/auth-base'
14
- import { Bizplace } from '@things-factory/biz-base'
15
- import { Domain, roundTransformer } from '@things-factory/shell'
16
-
17
- import { Inventory } from '../inventory/inventory'
18
-
19
- @Entity()
20
- @Index('ix_movement_0', (movement: Movement) => [movement.domain], { unique: true })
21
- @ObjectType()
22
- export class Movement {
23
- @PrimaryGeneratedColumn('uuid')
24
- @Field(type => ID)
25
- id: string
26
-
27
- @ManyToOne(type => Domain)
28
- @Field(type => Domain)
29
- domain: Domain
30
-
31
- @RelationId((movement: Movement) => movement.domain)
32
- domainId: string
33
-
34
- @ManyToOne(type => Bizplace)
35
- @Field()
36
- bizplace: Bizplace
37
-
38
- @ManyToOne(type => Inventory)
39
- @Field()
40
- inventory: Inventory
41
-
42
- @Column('float', { transformer: roundTransformer })
43
- @Field(type => Float)
44
- inQty: number
45
-
46
- @Column('float', { transformer: roundTransformer })
47
- @Field(type => Float)
48
- outQty: number
49
-
50
- @Column({
51
- nullable: true
52
- })
53
- @Field({ nullable: true })
54
- description: string
55
-
56
- @ManyToOne(type => User, {
57
- nullable: true
58
- })
59
- @Field({ nullable: true })
60
- creator: User
61
-
62
- @RelationId((movement: Movement) => movement.creator)
63
- creatorId: string
64
-
65
- @ManyToOne(type => User, {
66
- nullable: true
67
- })
68
- @Field({ nullable: true })
69
- updater: User
70
-
71
- @RelationId((movement: Movement) => movement.updater)
72
- updaterId: string
73
-
74
- @CreateDateColumn()
75
- @Field({ nullable: true })
76
- createdAt: Date
77
-
78
- @UpdateDateColumn()
79
- @Field({ nullable: true })
80
- updatedAt: Date
81
- }
@@ -1,6 +0,0 @@
1
- import { Pallet } from './pallet'
2
- import { PalletMutation } from './pallet-mutation'
3
- import { PalletQuery } from './pallet-query'
4
-
5
- export const entities = [Pallet]
6
- export const resolvers = [PalletQuery, PalletMutation]