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

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 +168 -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 +5 -5
  19. package/server/service/doc-number/doc-number-mutation.ts +121 -0
  20. package/server/service/doc-number/doc-number-query.ts +146 -0
  21. package/server/service/doc-number/doc-number-type.ts +115 -0
  22. package/server/service/doc-number/doc-number.ts +162 -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.89",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -25,13 +25,13 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "@operato/data-grist": "^1.3.5",
28
- "@things-factory/i18n-base": "^6.1.84",
29
- "@things-factory/setting-base": "^6.1.84",
30
- "@things-factory/shell": "^6.1.84",
28
+ "@things-factory/i18n-base": "^6.1.89",
29
+ "@things-factory/setting-base": "^6.1.89",
30
+ "@things-factory/shell": "^6.1.89",
31
31
  "codemirror": "^5.64.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@types/codemirror": "^5.60.5"
35
35
  },
36
- "gitHead": "66cd7dd022e34cbd91dcd66e71320305be11873c"
36
+ "gitHead": "0f7df2076bff1b4df728ecaaf288c2a692f43478"
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,146 @@
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
+ searchables: ['code', 'description']
30
+ })
31
+
32
+ const [items, total] = await queryBuilder.getManyAndCount()
33
+ return { items, total }
34
+ }
35
+
36
+ @Query(returns => DocNumber, { description: 'To generate a new DocNumber' })
37
+ async getNewDocNumber(@Arg('id') id: string, @Ctx() context: any): Promise<DocNumber> {
38
+ const { domain } = context.state
39
+
40
+ // 1. find one by id - TODO by Lock
41
+ let docNumber = await getRepository(DocNumber).findOne({
42
+ where: { domain: { id: domain.id }, id }
43
+ })
44
+
45
+ // 2. find one by code - TODO by Lock
46
+ if(docNumber == null) {
47
+ docNumber = await getRepository(DocNumber).findOne({
48
+ where: { domain: { id: domain.id }, code : id }
49
+ })
50
+ }
51
+
52
+ // 3. TODO throw exception
53
+ if(docNumber == null) {
54
+ return null
55
+ }
56
+
57
+ // 4. 시퀀스 증가
58
+ let newDocNum = docNumber.currentNo
59
+
60
+ if(docNumber.useDbSeqFlag) {
61
+ // TODO DATABASE SEQUENCE 호출
62
+ newDocNum += 1
63
+ } else {
64
+ newDocNum = docNumber.currentNo ? docNumber.currentNo + 1 : 1
65
+ }
66
+
67
+ // 5. 문서 번호 expression 구성
68
+ if(!docNumber.expression) {
69
+ docNumber.updateExpression()
70
+ }
71
+
72
+ let expression = docNumber.expression
73
+
74
+ // 6. 시퀀스 번호 사이클 처리
75
+ if(newDocNum > docNumber.endNo) {
76
+ newDocNum = docNumber.startNo
77
+ }
78
+
79
+ // 7. 자리수 설정
80
+ let newDocNoStr = newDocNum.toString()
81
+ let docNumLength = newDocNoStr.length
82
+ let docNoDigit = docNumber.seqDigitNum ? docNumber.seqDigitNum : 1
83
+
84
+ // 8. 시퀀스 번호가 시퀀스 번호 사이즈보다 작은 경우 앞에 0을 붙임
85
+ if(docNoDigit > docNumLength) {
86
+ let addZeroCnt = docNoDigit - docNumLength
87
+ for(let i = 0 ; i < addZeroCnt ; i++) {
88
+ newDocNoStr = '0' + newDocNoStr
89
+ }
90
+ }
91
+
92
+ // 9. 문서 번호 구성
93
+ let newDocNumber = expression.replace('${SEQ}', newDocNoStr)
94
+ let docUpdateInterval = docNumber.updateInterval
95
+ if(docUpdateInterval && docUpdateInterval != 'NONE') {
96
+ const today = new Date();
97
+ let todayStr = today.getFullYear() + (today.getMonth() > 9 ? '' + today.getMonth() + 1 : '0' + today.getMonth() + 1) + today.getDate()
98
+ let intervalVal = ''
99
+
100
+ if(docUpdateInterval == 'yy') {
101
+ intervalVal = todayStr.substring(2, 4)
102
+
103
+ } else if(docUpdateInterval == 'yyyy') {
104
+ intervalVal = todayStr.substring(0, 4)
105
+
106
+ } else if(docUpdateInterval == 'yyMM') {
107
+ intervalVal = todayStr.substring(2, 6)
108
+
109
+ } else if(docUpdateInterval == 'yyyyMM') {
110
+ intervalVal = todayStr.substring(0, 6)
111
+
112
+ } else if(docUpdateInterval == 'yyMMdd') {
113
+ intervalVal = todayStr.substring(2, 8)
114
+
115
+ } else if(docUpdateInterval == 'yyyyMMdd') {
116
+ intervalVal = todayStr
117
+ }
118
+
119
+ newDocNumber = newDocNumber.replace('${' + docUpdateInterval + '}', intervalVal)
120
+ }
121
+
122
+ // 10. 현재 시퀀스 번호 저장
123
+ docNumber.domain = domain
124
+ docNumber.currentNo = newDocNum
125
+ docNumber.lastDocNumber = newDocNumber
126
+ await getRepository(DocNumber).save(docNumber)
127
+
128
+ // 11. 최종
129
+ return docNumber
130
+ }
131
+
132
+ @FieldResolver(type => Domain)
133
+ async domain(@Root() docNumber: DocNumber): Promise<Domain> {
134
+ return await getRepository(Domain).findOneBy({id:docNumber.domainId})
135
+ }
136
+
137
+ @FieldResolver(type => User)
138
+ async creator(@Root() docNumber: DocNumber): Promise<User> {
139
+ return await getRepository(User).findOneBy({id:docNumber.creatorId})
140
+ }
141
+
142
+ @FieldResolver(type => User)
143
+ async updater(@Root() docNumber: DocNumber): Promise<User> {
144
+ return await getRepository(User).findOneBy({id:docNumber.updaterId})
145
+ }
146
+ }
@@ -0,0 +1,115 @@
1
+
2
+ import { ObjectType, Field, InputType, Int, ID, Float, registerEnumType } from 'type-graphql'
3
+ import { DocNumber } from './doc-number'
4
+
5
+ @InputType()
6
+ export class NewDocNumber {
7
+
8
+ @Field({ nullable: false })
9
+ code: string
10
+
11
+ @Field({ nullable: false })
12
+ description: string
13
+
14
+ @Field(type => Int, { nullable: true })
15
+ startNo: number
16
+
17
+ @Field(type => Int, { nullable: true })
18
+ endNo: number
19
+
20
+ @Field(type => Int, { nullable: true })
21
+ currentNo?: number
22
+
23
+ @Field({ nullable:true })
24
+ prefix?: string
25
+
26
+ @Field({ nullable:true })
27
+ suffix?: string
28
+
29
+ @Field({ nullable: true })
30
+ updateInterval?: string
31
+
32
+ @Field({ nullable: true })
33
+ useDbSeqFlag?: boolean
34
+
35
+ @Field({ nullable: false })
36
+ seqName: string
37
+
38
+ @Field(type => Int, { nullable: true })
39
+ seqDigitNum?: number
40
+
41
+ @Field({ nullable: true })
42
+ separator?: string
43
+
44
+ @Field({ nullable: true })
45
+ expression?: string
46
+
47
+ @Field({ nullable: true })
48
+ lastDocNumber?: string
49
+
50
+ @Field({ nullable: true })
51
+ activeFlag?: boolean
52
+ }
53
+
54
+ @InputType()
55
+ export class DocNumberPatch {
56
+ @Field(type => ID, { nullable: true })
57
+ id?: string
58
+
59
+ @Field({ nullable: true })
60
+ code?: string
61
+
62
+ @Field({ nullable: true })
63
+ description?: string
64
+
65
+ @Field(type => Int, { nullable: true })
66
+ startNo?: number
67
+
68
+ @Field(type => Int, { nullable: true })
69
+ endNo?: number
70
+
71
+ @Field(type => Int, { nullable: true })
72
+ currentNo?: number
73
+
74
+ @Field({ nullable:true })
75
+ prefix?: string
76
+
77
+ @Field({ nullable:true })
78
+ suffix?: string
79
+
80
+ @Field({ nullable: true })
81
+ updateInterval?: string
82
+
83
+ @Field({ nullable: true })
84
+ useDbSeqFlag?: boolean
85
+
86
+ @Field({ nullable: true })
87
+ seqName?: string
88
+
89
+ @Field(type => Int, { nullable: true })
90
+ seqDigitNum?: number
91
+
92
+ @Field({ nullable: true })
93
+ separator?: string
94
+
95
+ @Field({ nullable: true })
96
+ expression?: string
97
+
98
+ @Field({ nullable: true })
99
+ lastDocNumber?: string
100
+
101
+ @Field({ nullable: true })
102
+ activeFlag?: boolean
103
+
104
+ @Field()
105
+ cuFlag: string
106
+ }
107
+
108
+ @ObjectType()
109
+ export class DocNumberList {
110
+ @Field(type => [DocNumber])
111
+ items: DocNumber[]
112
+
113
+ @Field(type => Int)
114
+ total: number
115
+ }
@@ -0,0 +1,162 @@
1
+
2
+ import {
3
+ CreateDateColumn,
4
+ UpdateDateColumn,
5
+ Entity,
6
+ Index,
7
+ Column,
8
+ RelationId,
9
+ ManyToOne,
10
+ PrimaryGeneratedColumn,
11
+ BeforeInsert
12
+ } from 'typeorm'
13
+ import { ObjectType, Field, Int, ID } from 'type-graphql'
14
+
15
+ import { User } from '@things-factory/auth-base'
16
+ import { Domain } from '@things-factory/shell'
17
+
18
+ @Entity('doc_numbers')
19
+ @Index('ix_doc_number_0', (docNumber: DocNumber) => [docNumber.domain,docNumber.code], { unique: true })
20
+ @ObjectType({ description: 'Entity for DocNumber' })
21
+ export class DocNumber {
22
+
23
+ @PrimaryGeneratedColumn('uuid')
24
+ @Field(type => ID)
25
+ readonly id: string
26
+
27
+ @Column({ name:'code', type:'character varying', nullable:false })
28
+ @Field({ nullable:false })
29
+ code: string
30
+
31
+ @Column({ name:'description', type:'character varying', nullable:false })
32
+ @Field({ nullable:false })
33
+ description: string
34
+
35
+ @Column({ name:'prefix', type:'character varying', nullable:true })
36
+ @Field({ nullable:true })
37
+ prefix?: string
38
+
39
+ @Column({ name:'suffix', type:'character varying', nullable:true })
40
+ @Field({ nullable:true })
41
+ suffix?: string
42
+
43
+ @Column({ name:'start_no', type:'integer', nullable:true })
44
+ @Field(type =>Int, { nullable:true })
45
+ startNo?: number
46
+
47
+ @Column({ name:'end_no', type:'integer', nullable:true })
48
+ @Field(type =>Int, { nullable:true })
49
+ endNo?: number
50
+
51
+ @Column({ name:'current_no', type:'integer', nullable:true })
52
+ @Field(type =>Int, { nullable:true })
53
+ currentNo?: number
54
+
55
+ @Column({ name:'update_interval', type:'character varying', nullable:true })
56
+ @Field({ nullable:true })
57
+ updateInterval?: string
58
+
59
+ @Column({ name:'use_db_seq_flag', type:'boolean', nullable:true, default: false})
60
+ @Field({ nullable:true })
61
+ useDbSeqFlag?: boolean
62
+
63
+ @Column({ name:'seq_name', type:'character varying', nullable:true })
64
+ @Field({ nullable:true })
65
+ seqName?: string
66
+
67
+ @Column({ name:'seq_digit_num', type:'integer', nullable:false })
68
+ @Field(type =>Int, { nullable:false })
69
+ seqDigitNum: number
70
+
71
+ @Column({ name:'separator', type:'character varying', nullable:true })
72
+ @Field({ nullable:true })
73
+ separator?: string
74
+
75
+ @Column({ name:'expression', type:'character varying', nullable:true })
76
+ @Field({ nullable:true })
77
+ expression?: string
78
+
79
+ @Column({ name:'last_doc_number', type:'character varying', nullable:true })
80
+ @Field({ nullable:true })
81
+ lastDocNumber?: string
82
+
83
+ @Column({ name:'active_flag', type:'boolean', nullable:true ,default:false})
84
+ @Field({ nullable:true })
85
+ activeFlag?: boolean
86
+
87
+ @ManyToOne(type => Domain, {createForeignKeyConstraints: false, nullable: false})
88
+ @Field({ nullable: false })
89
+ domain: Domain
90
+
91
+ @RelationId((docNumber: DocNumber) => docNumber.domain)
92
+ domainId: string
93
+
94
+ @ManyToOne(type => User, {createForeignKeyConstraints: false, nullable: true})
95
+ @Field({ nullable: true })
96
+ creator?: User
97
+
98
+ @RelationId((docNumber: DocNumber) => docNumber.creator)
99
+ creatorId?: string
100
+
101
+ @ManyToOne(type => User, {createForeignKeyConstraints: false, nullable: true})
102
+ @Field({ nullable: true })
103
+ updater?: User
104
+
105
+ @RelationId((docNumber: DocNumber) => docNumber.updater)
106
+ updaterId?: string
107
+
108
+ @CreateDateColumn()
109
+ @Field({ nullable: true })
110
+ createdAt?: Date
111
+
112
+ @UpdateDateColumn()
113
+ @Field({ nullable: true })
114
+ updatedAt?: Date
115
+
116
+ @BeforeInsert()
117
+ updateExpression() {
118
+ if(!this.expression || this.expression.length == 0) {
119
+ if(!this.startNo || this.startNo < 1) {
120
+ this.startNo = 1
121
+ }
122
+
123
+ if(!this.endNo || this.endNo <= 1) {
124
+ let maxNo = ''
125
+ for(let i = 0 ; i < this.seqDigitNum ; i++) {
126
+ maxNo = maxNo + '9'
127
+ }
128
+ this.endNo = Number(maxNo)
129
+ }
130
+
131
+ let expr = ''
132
+
133
+ if(this.prefix) {
134
+ expr = this.prefix
135
+
136
+ if(this.separator) {
137
+ expr += this.separator
138
+ }
139
+ }
140
+
141
+ if(this.updateInterval && this.updateInterval != 'NONE') {
142
+ expr += '${' + this.updateInterval + '}'
143
+
144
+ if(this.separator) {
145
+ expr += this.separator
146
+ }
147
+ }
148
+
149
+ expr += '${SEQ}'
150
+
151
+ if(this.suffix) {
152
+ if(this.separator) {
153
+ expr += this.separator
154
+ }
155
+
156
+ expr += this.suffix
157
+ }
158
+
159
+ this.expression = expr
160
+ }
161
+ }
162
+ }
@@ -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
  }