@things-factory/id-rule-base 6.1.84 → 6.1.87

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 (31) hide show
  1. package/dist-server/service/doc-number/doc-number-mutation.js +112 -0
  2. package/dist-server/service/doc-number/doc-number-mutation.js.map +1 -0
  3. package/dist-server/service/doc-number/doc-number-query.js +167 -0
  4. package/dist-server/service/doc-number/doc-number-query.js.map +1 -0
  5. package/dist-server/service/doc-number/doc-number-type.js +161 -0
  6. package/dist-server/service/doc-number/doc-number-type.js.map +1 -0
  7. package/dist-server/service/doc-number/doc-number.js +175 -0
  8. package/dist-server/service/doc-number/doc-number.js.map +1 -0
  9. package/dist-server/service/doc-number/index.js +9 -0
  10. package/dist-server/service/doc-number/index.js.map +1 -0
  11. package/dist-server/service/id-rule/id-rule-types.js +0 -1
  12. package/dist-server/service/id-rule/id-rule-types.js.map +1 -1
  13. package/dist-server/service/id-rule/id-rule.js +3 -33
  14. package/dist-server/service/id-rule/id-rule.js.map +1 -1
  15. package/dist-server/service/index.js +4 -2
  16. package/dist-server/service/index.js.map +1 -1
  17. package/dist-server/tsconfig.tsbuildinfo +1 -1
  18. package/package.json +2 -2
  19. package/server/service/doc-number/doc-number-mutation.ts +121 -0
  20. package/server/service/doc-number/doc-number-query.ts +145 -0
  21. package/server/service/doc-number/doc-number-type.ts +116 -0
  22. package/server/service/doc-number/doc-number.ts +164 -0
  23. package/server/service/doc-number/index.ts +7 -0
  24. package/server/service/id-rule/id-rule-types.ts +2 -3
  25. package/server/service/id-rule/id-rule.ts +3 -35
  26. package/server/service/index.ts +4 -2
  27. package/translations/en.json +15 -0
  28. package/translations/ja.json +15 -0
  29. package/translations/ko.json +16 -1
  30. package/translations/ms.json +16 -1
  31. package/translations/zh.json +16 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/id-rule-base",
3
- "version": "6.1.84",
3
+ "version": "6.1.87",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -33,5 +33,5 @@
33
33
  "devDependencies": {
34
34
  "@types/codemirror": "^5.60.5"
35
35
  },
36
- "gitHead": "66cd7dd022e34cbd91dcd66e71320305be11873c"
36
+ "gitHead": "7bd2bd5ae49b9a2d60383bdb0022bc0227fd094e"
37
37
  }
@@ -0,0 +1,121 @@
1
+
2
+ import { Resolver, Mutation, Arg, Ctx, Directive } from 'type-graphql'
3
+ import { In } from 'typeorm'
4
+ import { DocNumber } from './doc-number'
5
+ import { NewDocNumber, DocNumberPatch } from './doc-number-type'
6
+ import { Domain, getRepository } from '@things-factory/shell'
7
+ import { User } from '@things-factory/auth-base'
8
+
9
+ @Resolver(DocNumber)
10
+ export class DocNumberMutation {
11
+ @Directive('@transaction')
12
+ @Mutation(returns => DocNumber, { description: 'To create new DocNumber' })
13
+ async createDocNumber(@Arg('docNumber') docNumber: NewDocNumber, @Ctx() context: any): Promise<DocNumber> {
14
+ const { domain, user, tx } = context.state
15
+
16
+ return await tx.getRepository(DocNumber).save({
17
+ ...docNumber,
18
+ domain,
19
+ creator: user,
20
+ updater: user
21
+ })
22
+ }
23
+
24
+ @Directive('@transaction')
25
+ @Mutation(returns => DocNumber, { description: 'To modify DocNumber information' })
26
+ async updateDocNumber(
27
+ @Arg('id') id: string,
28
+ @Arg('patch') patch: DocNumberPatch,
29
+ @Ctx() context: any
30
+ ): Promise<DocNumber> {
31
+ const { domain, user, tx } = context.state
32
+
33
+ const repository = tx.getRepository(DocNumber)
34
+ const docNumber = await repository.findOne(
35
+ {
36
+ where: { domain: { id: domain.id }, id },
37
+ relations: ['domain','updater','creator']
38
+ }
39
+ )
40
+
41
+ return await repository.save({
42
+ ...docNumber,
43
+ ...patch,
44
+ updater: user
45
+ })
46
+ }
47
+
48
+ @Directive('@transaction')
49
+ @Mutation(returns => [DocNumber], { description: "To modify multiple DocNumbers' information" })
50
+ async updateMultipleDocNumber(
51
+ @Arg('patches', type => [DocNumberPatch]) patches: DocNumberPatch[],
52
+ @Ctx() context: any
53
+ ): Promise<DocNumber[]> {
54
+ const { domain, user, tx } = context.state
55
+
56
+ let results = []
57
+ const _createRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === '+')
58
+ const _updateRecords = patches.filter((patch: any) => patch.cuFlag.toUpperCase() === 'M')
59
+ const docNumberRepo = tx.getRepository(DocNumber)
60
+
61
+ if (_createRecords.length > 0) {
62
+ for (let i = 0; i < _createRecords.length; i++) {
63
+ const newRecord = _createRecords[i]
64
+
65
+ const result = await docNumberRepo.save({
66
+ ...newRecord,
67
+ domain,
68
+ creator: user,
69
+ updater: user
70
+ })
71
+
72
+ results.push({ ...result, cuFlag: '+' })
73
+ }
74
+ }
75
+
76
+ if (_updateRecords.length > 0) {
77
+ for (let i = 0; i < _updateRecords.length; i++) {
78
+ const updRecord = _updateRecords[i]
79
+ const docNumber = await docNumberRepo.findOne({
80
+ where: { domain: { id: domain.id }, id:updRecord.id },
81
+ relations: ['domain','updater','creator']
82
+ })
83
+
84
+ const result = await docNumberRepo.save({
85
+ ...docNumber,
86
+ ...updRecord,
87
+ updater: user
88
+ })
89
+
90
+ results.push({ ...result, cuFlag: 'M' })
91
+ }
92
+ }
93
+
94
+ return results
95
+ }
96
+
97
+ @Directive('@transaction')
98
+ @Mutation(returns => Boolean, { description: 'To delete DocNumber' })
99
+ async deleteDocNumber(@Arg('id') id: string, @Ctx() context: any): Promise<boolean> {
100
+ const { domain, tx, user } = context.state
101
+ await tx.getRepository(DocNumber).remove({ domain, id, updater:user })
102
+ return true
103
+ }
104
+
105
+ @Directive('@transaction')
106
+ @Mutation(returns => Boolean, { description: 'To delete multiple docNumbers' })
107
+ async deleteDocNumbers(
108
+ @Arg('ids', type => [String]) ids: string[],
109
+ @Ctx() context: any
110
+ ): Promise<boolean> {
111
+ const { domain, tx, user } = context.state
112
+
113
+ let delEntitis = ids.map(id=>{
114
+ return {domain,id,updater:user}
115
+ })
116
+
117
+ await tx.getRepository(DocNumber).remove(delEntitis)
118
+
119
+ return true
120
+ }
121
+ }
@@ -0,0 +1,145 @@
1
+
2
+ import { Resolver, Query, FieldResolver, Root, Args, Arg, Ctx, Directive } from 'type-graphql'
3
+ import { ListParam, convertListParams, getRepository, getQueryBuilderFromListParams } from '@things-factory/shell'
4
+ import { DocNumber } from './doc-number'
5
+ import { DocNumberList } from './doc-number-type'
6
+
7
+ import { User } from '@things-factory/auth-base'
8
+ import { Domain } from '@things-factory/shell'
9
+
10
+
11
+ @Resolver(DocNumber)
12
+ export class DocNumberQuery {
13
+ @Query(returns => DocNumber, { description: 'To fetch a DocNumber' })
14
+ async docNumber(@Arg('id') id: string, @Ctx() context: any): Promise<DocNumber> {
15
+ const { domain } = context.state
16
+ return await getRepository(DocNumber).findOne({
17
+ where: { domain: { id: domain.id }, id }
18
+ })
19
+ }
20
+
21
+ @Query(returns => DocNumberList, { description: 'To fetch multiple DocNumbers' })
22
+ async docNumbers(@Args() params: ListParam, @Ctx() context: any): Promise<DocNumberList> {
23
+ const { domain } = context.state
24
+
25
+ const queryBuilder = getQueryBuilderFromListParams({
26
+ domain,
27
+ params,
28
+ repository: await getRepository(DocNumber)
29
+ })
30
+
31
+ const [items, total] = await queryBuilder.getManyAndCount()
32
+ return { items, total }
33
+ }
34
+
35
+ @Query(returns => DocNumber, { description: 'To generate a new DocNumber' })
36
+ async getNewDocNumber(@Arg('id') id: string, @Ctx() context: any): Promise<DocNumber> {
37
+ const { domain } = context.state
38
+
39
+ // 1. find one by id - TODO by Lock
40
+ let docNumber = await getRepository(DocNumber).findOne({
41
+ where: { domain: { id: domain.id }, id }
42
+ })
43
+
44
+ // 2. find one by code - TODO by Lock
45
+ if(docNumber == null) {
46
+ docNumber = await getRepository(DocNumber).findOne({
47
+ where: { domain: { id: domain.id }, code : id }
48
+ })
49
+ }
50
+
51
+ // 3. TODO throw exception
52
+ if(docNumber == null) {
53
+ return null
54
+ }
55
+
56
+ // 4. 시퀀스 증가
57
+ let newDocNum = docNumber.currentNo
58
+
59
+ if(docNumber.useDbSeqFlag) {
60
+ // TODO DATABASE SEQUENCE 호출
61
+ newDocNum += 1
62
+ } else {
63
+ newDocNum = docNumber.currentNo ? docNumber.currentNo + 1 : 1
64
+ }
65
+
66
+ // 5. 문서 번호 expression 구성
67
+ if(!docNumber.expression) {
68
+ docNumber.updateExpression()
69
+ }
70
+
71
+ let expression = docNumber.expression
72
+
73
+ // 6. 시퀀스 번호 사이클 처리
74
+ if(newDocNum > docNumber.endNo) {
75
+ newDocNum = docNumber.startNo
76
+ }
77
+
78
+ // 7. 자리수 설정
79
+ let newDocNoStr = newDocNum.toString()
80
+ let docNumLength = newDocNoStr.length
81
+ let docNoDigit = docNumber.seqDigitNum ? docNumber.seqDigitNum : 1
82
+
83
+ // 8. 시퀀스 번호가 시퀀스 번호 사이즈보다 작은 경우 앞에 0을 붙임
84
+ if(docNoDigit > docNumLength) {
85
+ let addZeroCnt = docNoDigit - docNumLength
86
+ for(let i = 0 ; i < addZeroCnt ; i++) {
87
+ newDocNoStr = '0' + newDocNoStr
88
+ }
89
+ }
90
+
91
+ // 9. 문서 번호 구성
92
+ let newDocNumber = expression.replace('${SEQ}', newDocNoStr)
93
+ let docUpdateInterval = docNumber.updateInterval
94
+ if(docUpdateInterval && docUpdateInterval != 'NONE') {
95
+ const today = new Date();
96
+ let todayStr = today.getFullYear() + (today.getMonth() > 9 ? '' + today.getMonth() + 1 : '0' + today.getMonth() + 1) + today.getDate()
97
+ let intervalVal = ''
98
+
99
+ if(docUpdateInterval == 'yy') {
100
+ intervalVal = todayStr.substring(2, 4)
101
+
102
+ } else if(docUpdateInterval == 'yyyy') {
103
+ intervalVal = todayStr.substring(0, 4)
104
+
105
+ } else if(docUpdateInterval == 'yyMM') {
106
+ intervalVal = todayStr.substring(2, 6)
107
+
108
+ } else if(docUpdateInterval == 'yyyyMM') {
109
+ intervalVal = todayStr.substring(0, 6)
110
+
111
+ } else if(docUpdateInterval == 'yyMMdd') {
112
+ intervalVal = todayStr.substring(2, 8)
113
+
114
+ } else if(docUpdateInterval == 'yyyyMMdd') {
115
+ intervalVal = todayStr
116
+ }
117
+
118
+ newDocNumber = newDocNumber.replace('${' + docUpdateInterval + '}', intervalVal)
119
+ }
120
+
121
+ // 10. 현재 시퀀스 번호 저장
122
+ docNumber.domain = domain
123
+ docNumber.currentNo = newDocNum
124
+ docNumber.lastDocNumber = newDocNumber
125
+ await getRepository(DocNumber).save(docNumber)
126
+
127
+ // 11. 최종
128
+ return docNumber
129
+ }
130
+
131
+ @FieldResolver(type => Domain)
132
+ async domain(@Root() docNumber: DocNumber): Promise<Domain> {
133
+ return await getRepository(Domain).findOneBy({id:docNumber.domainId})
134
+ }
135
+
136
+ @FieldResolver(type => User)
137
+ async creator(@Root() docNumber: DocNumber): Promise<User> {
138
+ return await getRepository(User).findOneBy({id:docNumber.creatorId})
139
+ }
140
+
141
+ @FieldResolver(type => User)
142
+ async updater(@Root() docNumber: DocNumber): Promise<User> {
143
+ return await getRepository(User).findOneBy({id:docNumber.updaterId})
144
+ }
145
+ }
@@ -0,0 +1,116 @@
1
+
2
+ import { ObjectType, Field, InputType, Int, ID, Float, registerEnumType } from 'type-graphql'
3
+ import { ObjectRef } from '@things-factory/shell'
4
+ import { DocNumber } from './doc-number'
5
+
6
+ @InputType()
7
+ export class NewDocNumber {
8
+
9
+ @Field({ nullable: false })
10
+ code: string
11
+
12
+ @Field({ nullable: false })
13
+ description: string
14
+
15
+ @Field(type => Int, { nullable: true })
16
+ startNo: number
17
+
18
+ @Field(type => Int, { nullable: true })
19
+ endNo: number
20
+
21
+ @Field(type => Int, { nullable: true })
22
+ currentNo?: number
23
+
24
+ @Field({ nullable:true })
25
+ prefix?: string
26
+
27
+ @Field({ nullable:true })
28
+ suffix?: string
29
+
30
+ @Field({ nullable: true })
31
+ updateInterval?: string
32
+
33
+ @Field({ nullable: true })
34
+ useDbSeqFlag?: boolean
35
+
36
+ @Field({ nullable: false })
37
+ seqName: string
38
+
39
+ @Field(type => Int, { nullable: true })
40
+ seqDigitNum?: number
41
+
42
+ @Field({ nullable: true })
43
+ separator?: string
44
+
45
+ @Field({ nullable: true })
46
+ expression?: string
47
+
48
+ @Field({ nullable: true })
49
+ lastDocNumber?: string
50
+
51
+ @Field({ nullable: true })
52
+ activeFlag?: boolean
53
+ }
54
+
55
+ @InputType()
56
+ export class DocNumberPatch {
57
+ @Field(type => ID, { nullable: true })
58
+ id?: string
59
+
60
+ @Field({ nullable: true })
61
+ code?: string
62
+
63
+ @Field({ nullable: true })
64
+ description?: string
65
+
66
+ @Field(type => Int, { nullable: true })
67
+ startNo?: number
68
+
69
+ @Field(type => Int, { nullable: true })
70
+ endNo?: number
71
+
72
+ @Field(type => Int, { nullable: true })
73
+ currentNo?: number
74
+
75
+ @Field({ nullable:true })
76
+ prefix?: string
77
+
78
+ @Field({ nullable:true })
79
+ suffix?: string
80
+
81
+ @Field({ nullable: true })
82
+ updateInterval?: string
83
+
84
+ @Field({ nullable: true })
85
+ useDbSeqFlag?: boolean
86
+
87
+ @Field({ nullable: true })
88
+ seqName?: string
89
+
90
+ @Field(type => Int, { nullable: true })
91
+ seqDigitNum?: number
92
+
93
+ @Field({ nullable: true })
94
+ separator?: string
95
+
96
+ @Field({ nullable: true })
97
+ expression?: string
98
+
99
+ @Field({ nullable: true })
100
+ lastDocNumber?: string
101
+
102
+ @Field({ nullable: true })
103
+ activeFlag?: boolean
104
+
105
+ @Field()
106
+ cuFlag: string
107
+ }
108
+
109
+ @ObjectType()
110
+ export class DocNumberList {
111
+ @Field(type => [DocNumber])
112
+ items: DocNumber[]
113
+
114
+ @Field(type => Int)
115
+ total: number
116
+ }
@@ -0,0 +1,164 @@
1
+
2
+ import {
3
+ CreateDateColumn,
4
+ UpdateDateColumn,
5
+ DeleteDateColumn,
6
+ Entity,
7
+ Index,
8
+ Column,
9
+ RelationId,
10
+ ManyToOne,
11
+ PrimaryGeneratedColumn,
12
+ VersionColumn,
13
+ BeforeInsert
14
+ } from 'typeorm'
15
+ import { ObjectType, Field, Int, ID, Float, registerEnumType } from 'type-graphql'
16
+
17
+ import { User } from '@things-factory/auth-base'
18
+ import { Domain } from '@things-factory/shell'
19
+
20
+ @Entity('doc_numbers')
21
+ @Index('ix_doc_number_0', (docNumber: DocNumber) => [docNumber.domain,docNumber.code], { unique: true })
22
+ @ObjectType({ description: 'Entity for DocNumber' })
23
+ export class DocNumber {
24
+
25
+ @PrimaryGeneratedColumn('uuid')
26
+ @Field(type => ID)
27
+ readonly id: string
28
+
29
+ @Column({ name:'code', type:'character varying', nullable:false , length:30 })
30
+ @Field( { nullable:false })
31
+ code: string
32
+
33
+ @Column({ name:'description', type:'character varying', nullable:false , length:100 })
34
+ @Field( { nullable:false })
35
+ description: string
36
+
37
+ @Column({ name:'prefix', type:'character varying', nullable:true , length:10 })
38
+ @Field( { nullable:true })
39
+ prefix?: string
40
+
41
+ @Column({ name:'suffix', type:'character varying', nullable:true , length:10 })
42
+ @Field( { nullable:true })
43
+ suffix?: string
44
+
45
+ @Column({ name:'start_no', type:'integer', nullable:true })
46
+ @Field(type =>Int, { nullable:true })
47
+ startNo?: number
48
+
49
+ @Column({ name:'end_no', type:'integer', nullable:true })
50
+ @Field(type =>Int, { nullable:true })
51
+ endNo?: number
52
+
53
+ @Column({ name:'current_no', type:'integer', nullable:true })
54
+ @Field(type =>Int, { nullable:true })
55
+ currentNo?: number
56
+
57
+ @Column({ name:'update_interval', type:'character varying', nullable:true , length:30 })
58
+ @Field( { nullable:true })
59
+ updateInterval?: string
60
+
61
+ @Column({ name:'use_db_seq_flag', type:'boolean', nullable:true, default: false})
62
+ @Field( { nullable:true })
63
+ useDbSeqFlag?: boolean
64
+
65
+ @Column({ name:'seq_name', type:'character varying', nullable:true , length:100 })
66
+ @Field( { nullable:true })
67
+ seqName?: string
68
+
69
+ @Column({ name:'seq_digit_num', type:'integer', nullable:false })
70
+ @Field(type =>Int, { nullable:false })
71
+ seqDigitNum: number
72
+
73
+ @Column({ name:'separator', type:'character varying', nullable:true , length:10 })
74
+ @Field( { nullable:true })
75
+ separator?: string
76
+
77
+ @Column({ name:'expression', type:'character varying', nullable:true , length:100 })
78
+ @Field( { nullable:true })
79
+ expression?: string
80
+
81
+ @Column({ name:'last_doc_number', type:'character varying', nullable:true , length:100 })
82
+ @Field( { nullable:true })
83
+ lastDocNumber?: string
84
+
85
+ @Column({ name:'active_flag', type:'boolean', nullable:true ,default:false})
86
+ @Field( { nullable:true })
87
+ activeFlag?: boolean
88
+
89
+ @ManyToOne(type => Domain, {createForeignKeyConstraints: false, nullable: false})
90
+ @Field({ nullable: false })
91
+ domain: Domain
92
+
93
+ @RelationId((docNumber: DocNumber) => docNumber.domain)
94
+ domainId: string
95
+
96
+ @ManyToOne(type => User, {createForeignKeyConstraints: false, nullable: true})
97
+ @Field({ nullable: true })
98
+ creator?: User
99
+
100
+ @RelationId((docNumber: DocNumber) => docNumber.creator)
101
+ creatorId?: string
102
+
103
+ @ManyToOne(type => User, {createForeignKeyConstraints: false, nullable: true})
104
+ @Field({ nullable: true })
105
+ updater?: User
106
+
107
+ @RelationId((docNumber: DocNumber) => docNumber.updater)
108
+ updaterId?: string
109
+
110
+ @CreateDateColumn()
111
+ @Field({ nullable: true })
112
+ createdAt?: Date
113
+
114
+ @UpdateDateColumn()
115
+ @Field({ nullable: true })
116
+ updatedAt?: Date
117
+
118
+ @BeforeInsert()
119
+ updateExpression() {
120
+ if(!this.expression || this.expression.length == 0) {
121
+ if(!this.startNo || this.startNo < 1) {
122
+ this.startNo = 1
123
+ }
124
+
125
+ if(!this.endNo || this.endNo <= 1) {
126
+ let maxNo = ''
127
+ for(let i = 0 ; i < this.seqDigitNum ; i++) {
128
+ maxNo = maxNo + '9'
129
+ }
130
+ this.endNo = Number(maxNo)
131
+ }
132
+
133
+ let expr = ''
134
+
135
+ if(this.prefix) {
136
+ expr = this.prefix
137
+
138
+ if(this.separator) {
139
+ expr += this.separator
140
+ }
141
+ }
142
+
143
+ if(this.updateInterval && this.updateInterval != 'NONE') {
144
+ expr += '${' + this.updateInterval + '}'
145
+
146
+ if(this.separator) {
147
+ expr += this.separator
148
+ }
149
+ }
150
+
151
+ expr += '${SEQ}'
152
+
153
+ if(this.suffix) {
154
+ if(this.separator) {
155
+ expr += this.separator
156
+ }
157
+
158
+ expr += this.suffix
159
+ }
160
+
161
+ this.expression = expr
162
+ }
163
+ }
164
+ }
@@ -0,0 +1,7 @@
1
+
2
+ import { DocNumber } from './doc-number'
3
+ import { DocNumberQuery } from './doc-number-query'
4
+ import { DocNumberMutation } from './doc-number-mutation'
5
+
6
+ export const entities = [DocNumber]
7
+ export const resolvers = [DocNumberQuery, DocNumberMutation]
@@ -1,11 +1,10 @@
1
1
  import { Field, InputType } from 'type-graphql'
2
2
 
3
- import { IdRuleType } from './id-rule'
4
3
 
5
4
  @InputType()
6
5
  export class IdRulePatch {
7
6
  @Field({ nullable: true })
8
- type?: IdRuleType
7
+ type?: string
9
8
 
10
9
  @Field({ nullable: true })
11
10
  rule?: string
@@ -14,7 +13,7 @@ export class IdRulePatch {
14
13
  @InputType()
15
14
  export class NewIdRule {
16
15
  @Field()
17
- type: IdRuleType
16
+ type: string
18
17
 
19
18
  @Field()
20
19
  rule: string
@@ -14,32 +14,10 @@ import {
14
14
  UpdateDateColumn
15
15
  } from 'typeorm'
16
16
 
17
- import { config } from '@things-factory/env'
18
17
  import { Domain } from '@things-factory/shell'
19
18
 
20
- const ORMCONFIG = config.get('ormconfig', {})
21
- const DATABASE_TYPE = ORMCONFIG.type
22
-
23
- export enum IdRuleType {
24
- PALLET_ID = 'pallet_id',
25
- ADJUSTMENT_PALLET_ID = 'adjustment_pallet_id',
26
- ADJUSTMENT_CARTON_ID = 'adjustment_carton_id',
27
- INBOUND_PALLET_ID = 'inbound_pallet_id',
28
- INBOUND_CARTON_ID = 'inbound_carton_id',
29
- VAS_PALLET_ID = 'vas_pallet_id',
30
- DO_NUMBER = 'do_number',
31
- TASK_NO = 'task_number',
32
- GAN_NUMBER = 'gan_number',
33
- GRN_NUMBER = 'grn_number',
34
- RO_NUMBER = 'ro_number',
35
- PO_NUMBER = 'po_number',
36
- LOT_NO = 'lot_no'
37
- }
38
-
39
19
  @Entity()
40
- @Index('ix_id_rule_0', (idRule: IdRule) => [idRule.domain, idRule.type], { unique: true })
41
20
  @Index('ix_id_rule_1', (idRule: IdRule) => [idRule.domain])
42
- @Index('ix_id_rule_2', (idRule: IdRule) => [idRule.type])
43
21
  @ObjectType()
44
22
  export class IdRule {
45
23
  @PrimaryGeneratedColumn('uuid')
@@ -53,19 +31,9 @@ export class IdRule {
53
31
  @RelationId((idRule: IdRule) => idRule.domain)
54
32
  domainId: string
55
33
 
56
- @Column({
57
- nullable: false,
58
- type:
59
- DATABASE_TYPE == 'postgres' || DATABASE_TYPE == 'mysql' || DATABASE_TYPE == 'mariadb'
60
- ? 'enum'
61
- : DATABASE_TYPE == 'oracle'
62
- ? 'varchar2'
63
- : 'smallint',
64
- enum: IdRuleType,
65
- default: IdRuleType.PALLET_ID
66
- })
67
- @Field()
68
- type: IdRuleType
34
+ @Column()
35
+ @Field({ nullable: true })
36
+ type: string
69
37
 
70
38
  @Column()
71
39
  @Field()
@@ -1,14 +1,16 @@
1
1
  import { entities as IdRuleEntities, resolvers as IdRuleResolvers } from './id-rule'
2
2
  import { entities as SequenceEntities, resolvers as SequenceResolvers } from './sequence'
3
+ import { entities as DocNumberEntities, resolvers as DocNumberResolvers } from './doc-number'
3
4
 
4
5
  /* EXPORT ENTITY TYPES */
5
6
  export * from './id-rule/id-rule'
6
7
  /* EXPORT TYPES */
7
8
  export * from './id-rule/id-rule-types'
8
9
  export * from './sequence/sequence'
10
+ export * from './doc-number/doc-number'
9
11
 
10
- export const entities = [...IdRuleEntities, ...SequenceEntities]
12
+ export const entities = [...IdRuleEntities, ...SequenceEntities, ...DocNumberEntities]
11
13
 
12
14
  export const schema = {
13
- resolverClasses: [...IdRuleResolvers, ...SequenceResolvers]
15
+ resolverClasses: [...IdRuleResolvers, ...SequenceResolvers, ...DocNumberResolvers]
14
16
  }
@@ -1,7 +1,22 @@
1
1
  {
2
+ "menu.doc-number": "Document Number",
3
+ "title.doc-number": "Document Number",
2
4
  "title.ID Rule Editor": "ID Rule Editor",
3
5
  "label.arguments": "arguments",
4
6
  "label.argument domain description": "domain ID",
5
7
  "label.argument seed description": "data for ID combination",
8
+ "label.prefix": "Prefix",
9
+ "label.update_interval": "Update Interval",
10
+ "label.use_db_seq_flag": "Use DB Sequence",
11
+ "label.seq_name": "Sequence Name",
12
+ "label.seq_digit_num": "Sequence Digit Number",
13
+ "label.start_no": "Start No.",
14
+ "label.end_no": "End No.",
15
+ "label.current_no": "Current No.",
16
+ "label.suffix": "Suffix",
17
+ "label.separator": "Separator",
18
+ "label.expression": "Expression",
19
+ "label.last_doc_number": "Last Document Number",
20
+ "label.active_flag": "Active",
6
21
  "text.please_save_your_modifications_first": "please save your modifications first"
7
22
  }