@things-factory/organization 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 (35) hide show
  1. package/client/component/department-view.ts +4 -3
  2. package/client/pages/employee/employee-list-page.ts +122 -50
  3. package/client/pages/employee/employees-by-department.ts +468 -0
  4. package/client/route.ts +4 -0
  5. package/dist-client/component/department-view.js +8 -8
  6. package/dist-client/component/department-view.js.map +1 -1
  7. package/dist-client/pages/employee/employee-list-page.js +120 -48
  8. package/dist-client/pages/employee/employee-list-page.js.map +1 -1
  9. package/dist-client/pages/employee/employees-by-department.d.ts +38 -0
  10. package/dist-client/pages/employee/employees-by-department.js +464 -0
  11. package/dist-client/pages/employee/employees-by-department.js.map +1 -0
  12. package/dist-client/route.d.ts +1 -1
  13. package/dist-client/route.js +3 -0
  14. package/dist-client/route.js.map +1 -1
  15. package/dist-client/tsconfig.tsbuildinfo +1 -1
  16. package/dist-server/service/employee/employee-history.js +36 -0
  17. package/dist-server/service/employee/employee-history.js.map +1 -1
  18. package/dist-server/service/employee/employee-query.js +1 -1
  19. package/dist-server/service/employee/employee-query.js.map +1 -1
  20. package/dist-server/service/employee/employee-type.js +40 -0
  21. package/dist-server/service/employee/employee-type.js.map +1 -1
  22. package/dist-server/service/employee/employee.js +21 -1
  23. package/dist-server/service/employee/employee.js.map +1 -1
  24. package/dist-server/tsconfig.tsbuildinfo +1 -1
  25. package/package.json +3 -3
  26. package/server/service/employee/employee-history.ts +31 -1
  27. package/server/service/employee/employee-query.ts +2 -2
  28. package/server/service/employee/employee-type.ts +30 -0
  29. package/server/service/employee/employee.ts +17 -1
  30. package/things-factory.config.js +1 -0
  31. package/translations/en.json +6 -1
  32. package/translations/ja.json +6 -1
  33. package/translations/ko.json +6 -1
  34. package/translations/ms.json +6 -1
  35. package/translations/zh.json +6 -1
@@ -6,6 +6,7 @@ import { customElement, property, query, state } from 'lit/decorators.js'
6
6
  import { ScopedElementsMixin } from '@open-wc/scoped-elements'
7
7
  import { i18next, localize } from '@operato/i18n'
8
8
  import { ScrollbarStyles } from '@operato/styles'
9
+ import { getCodeByName } from '@things-factory/code-base'
9
10
 
10
11
  @customElement('department-view')
11
12
  export class DepartmentView extends localize(i18next)(ScopedElementsMixin(LitElement)) {
@@ -72,14 +73,14 @@ export class DepartmentView extends localize(i18next)(ScopedElementsMixin(LitEle
72
73
  name: 'active',
73
74
  label: 'active'
74
75
  },
75
- {
76
+ /*{
76
77
  type: 'select',
77
78
  name: 'state',
78
79
  label: 'state',
79
80
  property: {
80
- options: ['', 'STATUS_A', 'STATUS_B']
81
+ options: ['', 'STATUS_A', 'STATUS_B']
81
82
  }
82
- },
83
+ },*/
83
84
  {
84
85
  type: 'image',
85
86
  name: 'picture',
@@ -124,6 +124,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
124
124
 
125
125
  async pageInitialized(lifecycle: any) {
126
126
  this.gristConfig = {
127
+ pagination: { pages : [50, 100, 200] },
127
128
  list: {
128
129
  thumbnail: 'profile',
129
130
  fields: ['controlNo', 'name'],
@@ -157,7 +158,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
157
158
  },
158
159
  filter: 'search',
159
160
  sortable: true,
160
- width: 150
161
+ width: 105
161
162
  },
162
163
  {
163
164
  type: 'string',
@@ -168,7 +169,18 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
168
169
  },
169
170
  filter: 'search',
170
171
  sortable: true,
171
- width: 150
172
+ width: 100
173
+ },
174
+ {
175
+ type: 'string',
176
+ name: 'alias',
177
+ header: i18next.t('label.alias'),
178
+ record: {
179
+ editable: true
180
+ },
181
+ filter: 'search',
182
+ sortable: true,
183
+ width: 110
172
184
  },
173
185
  {
174
186
  type: 'resource-object',
@@ -190,23 +202,20 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
190
202
  }
191
203
  },
192
204
  sortable: true,
193
- width: 200
205
+ filter: false,
206
+ width: 100
194
207
  },
195
208
  {
196
- type: 'select',
209
+ type: 'code',
197
210
  name: 'type',
198
211
  header: i18next.t('field.type'),
199
- record: {
200
- editable: true,
201
- options: [
202
- { display: '', value: '' },
203
- { display: '정규직', value: 'FULLTIME' },
204
- { display: '시간제 정규직', value: 'PARTTIME' },
205
- { display: '파견직', value: 'TEMPORARY' }
206
- ]
207
- },
208
- filter: 'search',
209
- width: 200
212
+ width: 115,
213
+ sortable: false,
214
+ filter: false,
215
+ record: {
216
+ editable: true,
217
+ codeName: 'EMPLOYEE_TYPE'
218
+ }
210
219
  },
211
220
  {
212
221
  type: 'department-object',
@@ -216,7 +225,8 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
216
225
  editable: true
217
226
  },
218
227
  sortable: true,
219
- width: 200
228
+ filter: false,
229
+ width: 130
220
230
  },
221
231
  {
222
232
  type: 'resource-object',
@@ -227,86 +237,141 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
227
237
  options: {
228
238
  title: i18next.t('title.employee list'),
229
239
  queryName: 'employees',
230
- columns: [
240
+ pagination: { pages : [100, 200, 500] },
241
+ basicArgs: {
242
+ filters: [{
243
+ name: 'active', operator: 'eq', value: true
244
+ }]
245
+ },
246
+ list: { fields: ['controlNo', 'name', 'alias', 'hiredOn', 'active'] },
247
+ select: [
231
248
  { name: 'id', hidden: true },
232
- { name: 'controlNo', header: { renderer: () => i18next.t('field.control-no') }, filter: 'search' },
233
- { name: 'name', header: { renderer: () => i18next.t('field.name') }, filter: 'search' },
234
- { name: 'email', header: { renderer: () => i18next.t('field.email') } }
249
+ { type: 'string', name: 'controlNo', header: { renderer: () => i18next.t('field.control-no') }, width: 130, filter: 'search', sortable: true },
250
+ { type: 'string', name: 'name', header: { renderer: () => i18next.t('field.name') }, width: 150, filter: 'search' },
251
+ { type: 'string', name: 'alias', header: { renderer: () => i18next.t('label.alias') }, width: 150, filter: 'search' },
252
+ { type: 'string', name: 'hiredOn', header: { renderer: () => i18next.t('field.hired-on'), width: 100 } },
253
+ {
254
+ type: 'checkbox',
255
+ name: 'active',
256
+ label: true,
257
+ header: i18next.t('field.active'),
258
+ record: {
259
+ align: 'center',
260
+ editable: true
261
+ },
262
+ sortable: true,
263
+ width: 85
264
+ }
235
265
  ],
236
- list: { fields: ['control-no', 'name', 'email'] },
237
266
  valueField: 'id',
238
267
  nameField: 'name',
239
268
  descriptionField: 'controlNo'
240
269
  }
241
270
  },
242
271
  sortable: true,
243
- width: 200
272
+ width: 120
244
273
  },
245
274
  {
246
275
  type: 'string',
247
276
  name: 'email',
248
277
  header: i18next.t('field.email'),
278
+ width: 200,
249
279
  record: {
250
- editable: false
280
+ editable: false,
281
+ renderer: function (value, column, record, rowIndex, field) {
282
+ return record.contact ? record.contact.email : ''
283
+ }
251
284
  },
252
- sortable: true,
253
- width: 200
285
+ sortable: true
254
286
  },
255
287
  {
256
288
  type: 'string',
257
289
  name: 'phone',
258
290
  header: i18next.t('field.phone'),
291
+ width: 110,
259
292
  record: {
260
- editable: false
293
+ editable: false,
294
+ renderer: function (value, column, record, rowIndex, field) {
295
+ return record.contact ? record.contact.phone : ''
296
+ }
261
297
  },
262
- sortable: true,
263
- width: 200
298
+ sortable: true
299
+ },
300
+ {
301
+ type: 'code',
302
+ name: 'jobResponsibility',
303
+ header: i18next.t('label.job-responsibility'),
304
+ width: 100,
305
+ record: {
306
+ editable: true,
307
+ codeName: 'JOB_RESPONSIBILITY'
308
+ }
309
+ },
310
+ {
311
+ type: 'code',
312
+ name: 'jobPosition',
313
+ header: i18next.t('label.job-position'),
314
+ width: 100,
315
+ record: {
316
+ editable: true,
317
+ codeName: 'JOB_POSITION'
318
+ }
319
+ },
320
+ {
321
+ type: 'date',
322
+ name: 'hiredOn',
323
+ header: i18next.t('field.hired-on'),
324
+ width: 100,
325
+ record: {
326
+ editable: true
327
+ },
328
+ sortable: true
329
+ },
330
+ {
331
+ type: 'date',
332
+ name: 'retiredAt',
333
+ header: i18next.t('label.retired-at'),
334
+ width: 100,
335
+ record: {
336
+ editable: true
337
+ }
264
338
  },
265
339
  {
266
340
  type: 'checkbox',
267
341
  name: 'active',
268
342
  label: true,
269
343
  header: i18next.t('field.active'),
344
+ width: 85,
270
345
  record: {
346
+ align: 'center',
271
347
  editable: true
272
348
  },
273
349
  filter: true,
274
- sortable: true,
275
- width: 60
350
+ sortable: true
276
351
  },
277
352
  {
278
353
  type: 'string',
279
354
  name: 'note',
280
355
  header: i18next.t('field.note'),
356
+ width: 200,
281
357
  record: {
282
358
  editable: true
283
359
  },
284
- filter: 'search',
285
- width: 200
286
- },
287
- {
288
- type: 'date',
289
- name: 'hiredOn',
290
- header: i18next.t('field.hired-on'),
291
- record: {
292
- editable: true
293
- },
294
- sortable: true,
295
- width: 150
360
+ filter: 'search'
296
361
  },
297
362
  {
298
363
  type: 'resource-object',
299
364
  name: 'updater',
300
365
  header: i18next.t('field.updater'),
301
- sortable: true,
302
- width: 120
366
+ width: 90,
367
+ sortable: false
303
368
  },
304
369
  {
305
370
  type: 'datetime',
306
371
  name: 'updatedAt',
307
372
  header: i18next.t('field.updated_at'),
308
- sortable: true,
309
- width: 180
373
+ width: 180,
374
+ sortable: true
310
375
  },
311
376
  {
312
377
  type: 'image',
@@ -330,7 +395,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
330
395
  },
331
396
  sorters: [
332
397
  {
333
- name: 'name'
398
+ name: 'controlNo'
334
399
  }
335
400
  ]
336
401
  }
@@ -351,9 +416,13 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
351
416
  id
352
417
  controlNo
353
418
  name
419
+ alias
354
420
  type
421
+ jobResponsibility
422
+ jobPosition
355
423
  active
356
424
  email
425
+ phone
357
426
  user {
358
427
  id
359
428
  name
@@ -368,11 +437,14 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
368
437
  name
369
438
  controlNo
370
439
  }
371
- phone
372
440
  note
373
441
  hiredOn
442
+ retiredAt
374
443
  contact {
375
444
  id
445
+ email
446
+ phone
447
+ address
376
448
  }
377
449
  profile {
378
450
  left
@@ -465,7 +537,7 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
465
537
 
466
538
  async exportHandler() {
467
539
  const exportTargets = this.grist.selected.length ? this.grist.selected : this.grist.dirtyData.records
468
- const targetFieldSet = new Set(['id', 'controlNo', 'name', 'email', 'department', 'hiredOn'])
540
+ const targetFieldSet = new Set(['id', 'controlNo', 'name', 'alias', 'type', 'hiredOn', 'retiredAt', 'active', 'note'])
469
541
 
470
542
  return exportTargets.map(employee => {
471
543
  let tempObj = {}
@@ -512,10 +584,10 @@ export class EmployeeListPage extends connect(store)(localize(i18next)(ScopedEle
512
584
  id
513
585
  name
514
586
  company
587
+ department
515
588
  email
516
589
  phone
517
590
  address
518
- department
519
591
  note
520
592
  items {
521
593
  type