@things-factory/organization 10.0.19 → 10.1.0

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 (78) hide show
  1. package/dist-client/component/approval-line-brief.js +93 -36
  2. package/dist-client/component/approval-line-brief.js.map +1 -1
  3. package/dist-client/component/approval-line-items-editor-popup.d.ts +2 -0
  4. package/dist-client/component/approval-line-items-editor-popup.js +27 -9
  5. package/dist-client/component/approval-line-items-editor-popup.js.map +1 -1
  6. package/dist-client/component/approval-line-items-editor.d.ts +7 -1
  7. package/dist-client/component/approval-line-items-editor.js +67 -3
  8. package/dist-client/component/approval-line-items-editor.js.map +1 -1
  9. package/dist-client/component/approval-line-selector.d.ts +2 -0
  10. package/dist-client/component/approval-line-selector.js +40 -9
  11. package/dist-client/component/approval-line-selector.js.map +1 -1
  12. package/dist-client/component/approval-line-view.d.ts +15 -0
  13. package/dist-client/component/approval-line-view.js +177 -41
  14. package/dist-client/component/approval-line-view.js.map +1 -1
  15. package/dist-client/component/assignees-editor-popup.d.ts +2 -0
  16. package/dist-client/component/assignees-editor-popup.js +27 -8
  17. package/dist-client/component/assignees-editor-popup.js.map +1 -1
  18. package/dist-client/component/department-selector.d.ts +2 -0
  19. package/dist-client/component/department-selector.js +27 -8
  20. package/dist-client/component/department-selector.js.map +1 -1
  21. package/dist-client/component/recipients-editor-popup.d.ts +2 -0
  22. package/dist-client/component/recipients-editor-popup.js +27 -8
  23. package/dist-client/component/recipients-editor-popup.js.map +1 -1
  24. package/dist-client/filters-form/ox-filter-department-object.js +11 -1
  25. package/dist-client/filters-form/ox-filter-department-object.js.map +1 -1
  26. package/dist-client/pages/approval-line/approval-line-list-page.d.ts +121 -0
  27. package/dist-client/pages/approval-line/approval-line-list-page.js +583 -0
  28. package/dist-client/pages/approval-line/approval-line-list-page.js.map +1 -0
  29. package/dist-client/pages/approval-line/common-approval-line-templates-page.d.ts +0 -2
  30. package/dist-client/pages/approval-line/common-approval-line-templates-page.js +27 -11
  31. package/dist-client/pages/approval-line/common-approval-line-templates-page.js.map +1 -1
  32. package/dist-client/pages/approval-line/my-approval-line-templates-page.d.ts +0 -2
  33. package/dist-client/pages/approval-line/my-approval-line-templates-page.js +33 -9
  34. package/dist-client/pages/approval-line/my-approval-line-templates-page.js.map +1 -1
  35. package/dist-client/pages/department/department-list-page.d.ts +0 -2
  36. package/dist-client/pages/department/department-list-page.js +2 -6
  37. package/dist-client/pages/department/department-list-page.js.map +1 -1
  38. package/dist-client/pages/department/department-tree-page.d.ts +0 -10
  39. package/dist-client/pages/department/department-tree-page.js +35 -16
  40. package/dist-client/pages/department/department-tree-page.js.map +1 -1
  41. package/dist-client/pages/employee/employee-list-page.d.ts +0 -2
  42. package/dist-client/pages/employee/employee-list-page.js +2 -6
  43. package/dist-client/pages/employee/employee-list-page.js.map +1 -1
  44. package/dist-client/route.d.ts +1 -1
  45. package/dist-client/route.js +9 -0
  46. package/dist-client/route.js.map +1 -1
  47. package/dist-client/tsconfig.tsbuildinfo +1 -1
  48. package/dist-client/types/approval-line.d.ts +64 -0
  49. package/dist-client/types/approval-line.js +67 -0
  50. package/dist-client/types/approval-line.js.map +1 -1
  51. package/dist-server/service/approval-line/approval-line-item.d.ts +40 -0
  52. package/dist-server/service/approval-line/approval-line-item.js +42 -2
  53. package/dist-server/service/approval-line/approval-line-item.js.map +1 -1
  54. package/dist-server/service/approval-line/approval-line-mutation.js +24 -33
  55. package/dist-server/service/approval-line/approval-line-mutation.js.map +1 -1
  56. package/dist-server/service/approval-line/approval-line-query.js +36 -21
  57. package/dist-server/service/approval-line/approval-line-query.js.map +1 -1
  58. package/dist-server/service/employee/employee-query.d.ts +25 -0
  59. package/dist-server/service/employee/employee-query.js +41 -0
  60. package/dist-server/service/employee/employee-query.js.map +1 -1
  61. package/dist-server/service/employee/index.d.ts +1 -0
  62. package/dist-server/service/employee/index.js +3 -0
  63. package/dist-server/service/employee/index.js.map +1 -1
  64. package/dist-server/service/employee/my-employee-refusal.d.ts +22 -0
  65. package/dist-server/service/employee/my-employee-refusal.js +56 -0
  66. package/dist-server/service/employee/my-employee-refusal.js.map +1 -0
  67. package/dist-server/service/employee/my-employee.d.ts +22 -0
  68. package/dist-server/service/employee/my-employee.js +43 -0
  69. package/dist-server/service/employee/my-employee.js.map +1 -0
  70. package/dist-server/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +6 -6
  72. package/spec/unit/my-employee.spec.ts +102 -0
  73. package/things-factory.config.js +1 -0
  74. package/translations/en.json +44 -17
  75. package/translations/ja.json +44 -17
  76. package/translations/ko.json +46 -19
  77. package/translations/ms.json +43 -16
  78. package/translations/zh.json +43 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/organization",
3
- "version": "10.0.19",
3
+ "version": "10.1.0",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "dist-client/index.js",
6
6
  "things-factory": true,
@@ -33,10 +33,10 @@
33
33
  "@operato/graphql": "^10.0.0",
34
34
  "@operato/p13n": "^10.0.0",
35
35
  "@operato/shell": "^10.0.0",
36
- "@things-factory/auth-base": "^10.0.19",
37
- "@things-factory/code-ui": "^10.0.19",
38
- "@things-factory/contact": "^10.0.19",
39
- "@things-factory/shell": "^10.0.19"
36
+ "@things-factory/auth-base": "^10.1.0",
37
+ "@things-factory/code-ui": "^10.1.0",
38
+ "@things-factory/contact": "^10.1.0",
39
+ "@things-factory/shell": "^10.1.0"
40
40
  },
41
- "gitHead": "5c170a55152cfe906fe6dbc30e6bfe474ed64122"
41
+ "gitHead": "8407b1e9d1f47f6676af144d4a33c8ac01cb49c4"
42
42
  }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * ★ **「이 사용자의 사원 기록」 판정** — 한 자리에서 답하는지, 그리고 답할 수 없을 때 말하는지.
3
+ *
4
+ * ── 왜 생겼나 (2026-09-03, UX 레인이 겪음) ──────────────────────────────────
5
+ * 사원 기록이 없는 계정이 「내 결재선」에 이름과 설명을 다 입력하고 저장을 눌렀다. 그때 실패했다.
6
+ * 그 화면은 사원이어야 쓸 수 있는데 그 사실을 미리 말하지 않았고, 빈 목록에는 「해당하는 것이
7
+ * 없습니다」가 떴다 — 없는 것이 아니라 **가질 수 없는** 것이었다.
8
+ *
9
+ * 원인은 같은 물음을 네 자리가 각자 다루던 것이다. 그래서 판정을 한 자리에 두고, 이 시험이 그
10
+ * 자리를 지킨다.
11
+ */
12
+
13
+ /*
14
+ * **판정만 가져온다.** 배선(`my-employee.ts`)은 `Employee` 엔티티를 가져오고, 그것이
15
+ * `@things-factory/contact` 를 딸려 와 import 시점에 설정을 읽는다 — 시험이 서지 않는다.
16
+ * 실제로 그렇게 터졌고, 그래서 판정을 갈라 뒀다.
17
+ */
18
+ import {
19
+ ambiguousEmployeeRejection,
20
+ noEmployeeRejection,
21
+ theOneEmployee
22
+ } from '../../server/service/employee/my-employee-refusal'
23
+
24
+ describe('내 사원 기록 판정', () => {
25
+ describe('거절 문장', () => {
26
+ it('★ 개발자의 말로 답하지 않는다 — 이 문장은 사용자 얼굴까지 간다', () => {
27
+ const error = noEmployeeRejection(undefined)
28
+
29
+ expect(error.message).not.toContain('employee object')
30
+ /* 「누가 붙여 줄 수 있는가」가 문장에 있어야 사용자가 다음 할 일을 안다. */
31
+ expect(error.message).toContain('administrator')
32
+ })
33
+
34
+ it('★ 화면이 문장을 파싱하지 않고 가를 수 있다 — 번역하면 문장이 바뀐다', () => {
35
+ expect(noEmployeeRejection(undefined).extensions).toMatchObject({
36
+ code: 'FORBIDDEN',
37
+ requires: 'no-employee'
38
+ })
39
+ expect(ambiguousEmployeeRejection(undefined, 2).extensions).toMatchObject({
40
+ code: 'FORBIDDEN',
41
+ requires: 'ambiguous-employee',
42
+ count: 2
43
+ })
44
+ })
45
+
46
+ it('★ 두 거절이 서로 다른 코드다 — 고칠 것이 다르다', () => {
47
+ /* 없는 것은 붙이면 되고, 여럿인 것은 하나만 남겨야 한다. */
48
+ expect(noEmployeeRejection(undefined).extensions.requires).not.toBe(
49
+ ambiguousEmployeeRejection(undefined, 2).extensions.requires
50
+ )
51
+ })
52
+
53
+ it('요청의 언어로 옮긴다 — 번역기가 있으면 그것을 쓴다', () => {
54
+ const context = { t: (key: string) => (key === 'error.no-employee-for-user' ? '연결된 직원 정보가 없습니다' : key) }
55
+
56
+ expect(noEmployeeRejection(context).message).toBe('연결된 직원 정보가 없습니다')
57
+ })
58
+
59
+ it('★ 번역기가 키를 그대로 돌려주면 영어 문장으로 되돌린다', () => {
60
+ /* i18next 는 키를 못 찾으면 키를 돌려준다. 그걸 쓰면 사용자가 키를 읽는다. */
61
+ const context = { t: (key: string) => key }
62
+
63
+ expect(noEmployeeRejection(context).message).not.toBe('error.no-employee-for-user')
64
+ })
65
+
66
+ it('번역기가 던져도 거절은 그대로 전달된다', () => {
67
+ const context = {
68
+ t: () => {
69
+ throw new Error('번역기가 터졌다')
70
+ }
71
+ }
72
+
73
+ expect(() => noEmployeeRejection(context)).not.toThrow()
74
+ expect(noEmployeeRejection(context).extensions.requires).toBe('no-employee')
75
+ })
76
+ })
77
+
78
+ describe('하나를 골라야 할 때', () => {
79
+ it('★ 하나면 그것을 답한다', () => {
80
+ expect(theOneEmployee([{ id: 'e1' }], undefined)).toEqual({ id: 'e1' })
81
+ })
82
+
83
+ it('★ 없으면 거절한다 — 소유자가 틀린 행을 남기지 않게', () => {
84
+ expect(() => theOneEmployee([], undefined)).toThrow(
85
+ expect.objectContaining({ extensions: expect.objectContaining({ requires: 'no-employee' }) })
86
+ )
87
+ })
88
+
89
+ it('★ 여럿이면 아무 것이나 집지 않고 거절한다 — 표가 여럿을 막지 않는다', () => {
90
+ /*
91
+ * 유일 제약은 `(domain, controlNo, deletedAt)` 이고 `(domain, user)` 에는 없다. 예전 코드는
92
+ * `findOneBy` 로 읽어 **드라이버가 먼저 준 하나**를 집었고, 그 사람의 개인 결재선이 엉뚱한
93
+ * 사원 기록에 붙었다. 오류는 안 났다.
94
+ */
95
+ expect(() => theOneEmployee([{ id: 'e1' }, { id: 'e2' }], undefined)).toThrow(
96
+ expect.objectContaining({
97
+ extensions: expect.objectContaining({ requires: 'ambiguous-employee', count: 2 })
98
+ })
99
+ )
100
+ })
101
+ })
102
+ })
@@ -8,6 +8,7 @@ export default {
8
8
  { tagname: 'department-list-page', page: 'department-list' },
9
9
  { tagname: 'department-tree-page', page: 'department-tree' },
10
10
  { tagname: 'employees-by-department', page: 'employees-by-department' },
11
+ { tagname: 'approval-line-list-page', page: 'approval-line-list' },
11
12
  { tagname: 'common-approval-line-templates-page', page: 'common-approval-line-templates-page' },
12
13
  { tagname: 'my-approval-line-templates-page', page: 'my-approval-line-templates-page' }
13
14
  ],
@@ -1,52 +1,79 @@
1
1
  {
2
2
  "button.add-child-dept": "sub. dept.",
3
+ "button.add-my-approval-line": "add my approval line",
3
4
  "button.add-sibling-dept": "peer dept.",
4
5
  "button.copy from": "copy from",
5
6
  "button.detach": "detach",
6
- "button.edit-detail": "edit detail",
7
7
  "button.edit-contact": "edit contact",
8
+ "button.edit-detail": "edit detail",
8
9
  "button.register-account": "register",
9
- "field.register-account": "account",
10
+ "button.view": "view",
11
+ "error.contact-information-required": "Contact information is required for this employee.",
12
+ "error.multiple-employees-for-user": "this account is linked to more than one employee record, so it is unclear which one is acting — a domain administrator must leave one",
13
+ "error.no-employee-for-user": "this account is not linked to an employee record — a domain administrator can link it in the employee list",
14
+ "error.employee-already-registered": "This employee is already registered as a system user.",
15
+ "field.approval-line": "approval line",
10
16
  "field.approver": "approver",
11
17
  "field.control-no": "control No.",
12
18
  "field.hired-on": "hired on",
13
19
  "field.note": "note",
20
+ "field.notify-after": "notify at",
21
+ "field.owner": "owner",
14
22
  "field.owner-type": "owner type",
23
+ "field.participation": "capacity",
24
+ "field.register-account": "account",
15
25
  "field.supervisor": "supervisor",
16
26
  "field.system-user": "system user",
17
- "label.control-no": "control No.",
18
- "label.hired-on": "hired on",
19
27
  "label.Department": "department",
20
28
  "label.Employee": "employee",
21
- "label.Role": "role",
22
29
  "label.MyDepartment": "my department",
23
30
  "label.MySupervisor": "my supervisor",
24
31
  "label.Myself": "myself",
32
+ "label.Role": "role",
33
+ "label.alias": "alias",
34
+ "label.approval-line-common": "shared approval lines",
35
+ "label.approval-line-mine": "my approval lines",
36
+ "label.control-no": "control No.",
25
37
  "label.department": "department",
26
38
  "label.employee": "employee",
39
+ "label.hired-on": "hired on",
40
+ "label.job-position": "job position",
41
+ "label.job-responsibility": "job responsibility",
27
42
  "label.manager": "manager",
28
43
  "label.myself": "myself",
29
44
  "label.note": "note",
45
+ "label.participation-approval": "approval",
46
+ "label.participation-reference": "reference",
30
47
  "label.picture": "picture",
31
- "label.alias": "alias",
32
- "label.job-responsibility": "job responsibility",
33
- "label.job-position": "job position",
34
48
  "label.retired-at": "retired at",
35
49
  "prompt.sure to empty approval line ?": "sure to empty approval line ?",
50
+ "text.approval-line-empty": "no approver — a submission completes at once",
51
+ "text.approver-unknown": "(no name)",
52
+ "text.deleted": "deleted",
53
+ "text.info_x_successfully": "{x} done",
54
+ "text.no-common-approval-line-description": "a shared approval line is a route the organization sets. everyone can pick it.",
55
+ "text.no-common-approval-line-title": "no shared approval lines",
56
+ "text.no-my-approval-line-description": "save a route you use often and you will not have to pick it again each time.",
57
+ "text.no-my-approval-line-title": "no approval lines of your own",
58
+ "text.not-an-employee-description": "your own approval lines are tied to an employee record. an administrator can register you under organization · employees. until then you can still pick a shared approval line.",
59
+ "text.not-an-employee-title": "you are not registered as an employee yet",
60
+ "text.notify-after-nth": "after approval {n}",
61
+ "text.notify-after-only-reference": "only for reference",
62
+ "text.notify-immediately": "as soon as submitted",
63
+ "text.saved": "saved",
64
+ "title.approval-line": "approval lines",
36
65
  "title.approval-line editor": "approval line editor",
37
66
  "title.approval-line item list": "approval line item list",
38
67
  "title.approval-line template list": "approval line template list",
39
68
  "title.assignee list": "assignee list",
40
69
  "title.assignees editor": "assignee editor",
41
- "title.common-approval-line template list": "common approval line template list",
42
- "title.lookup system-user": "lookup system user",
43
- "title.my-approval-line template list": "my approval line template list",
44
- "title.employee list": "employee list",
45
- "title.department list": "department list",
46
- "title.department tree": "department hierarchy",
70
+ "title.common-approval-line template list": "shared approval lines",
47
71
  "title.contact list": "contact list",
48
- "title.organization": "organization",
72
+ "title.department list": "departments",
73
+ "title.department tree": "department hierarchy",
74
+ "title.employee list": "employees",
49
75
  "title.employees-by-department": "Employees By Department",
50
- "error.employee-already-registered": "This employee is already registered as a system user.",
51
- "error.contact-information-required": "Contact information is required for this employee."
76
+ "title.lookup system-user": "lookup system user",
77
+ "title.my-approval-line template list": "my approval lines",
78
+ "title.organization": "organization"
52
79
  }
@@ -1,52 +1,79 @@
1
1
  {
2
2
  "button.add-child-dept": "下位部門追加",
3
+ "button.add-my-approval-line": "自分の決裁ラインを追加",
3
4
  "button.add-sibling-dept": "同等部門追加",
4
5
  "button.copy from": "コピーしてくる",
5
6
  "button.detach": "連結解除",
6
7
  "button.edit-contact": "連絡先を編集",
7
8
  "button.edit-detail": "詳細を編集",
8
9
  "button.register-account": "アカウント登録",
9
- "field.register-account": "アカウント登録",
10
+ "button.view": "表示",
11
+ "error.contact-information-required": "この従業員には連絡先情報が必要です。",
12
+ "error.multiple-employees-for-user": "このアカウントに紐づく社員情報が複数あり、どの社員として処理するか判断できません。ドメイン管理者が一つだけ残す必要があります。",
13
+ "error.no-employee-for-user": "このアカウントに紐づく社員情報がありません。ドメイン管理者が社員一覧で紐づけできます。",
14
+ "error.employee-already-registered": "この従業員はすでにシステムユーザーとして登録されています。",
15
+ "field.approval-line": "決裁ライン",
10
16
  "field.approver": "決裁者",
11
17
  "field.control-no": "管理番号",
12
18
  "field.hired-on": "入社日",
13
19
  "field.note": "コメント",
20
+ "field.notify-after": "通知時点",
21
+ "field.owner": "所有者",
14
22
  "field.owner-type": "所有者タイプ",
23
+ "field.participation": "資格",
24
+ "field.register-account": "アカウント登録",
15
25
  "field.supervisor": "監督者",
16
26
  "field.system-user": "システムユーザー",
17
- "label.control-no": "管理番号",
18
- "label.hired-on": "入社日",
19
27
  "label.Department": "部署",
20
28
  "label.Employee": "従業員",
21
- "label.Role": "役割",
22
29
  "label.MyDepartment": "私の部署",
23
30
  "label.MySupervisor": "私の上司",
24
31
  "label.Myself": "私自身",
25
- "label.manager": "管理者",
32
+ "label.Role": "役割",
33
+ "label.alias": "別名",
34
+ "label.approval-line-common": "共用の決裁ライン",
35
+ "label.approval-line-mine": "自分の決裁ライン",
36
+ "label.control-no": "管理番号",
26
37
  "label.department": "部署",
27
38
  "label.employee": "職員",
39
+ "label.hired-on": "入社日",
40
+ "label.job-position": "役職",
41
+ "label.job-responsibility": "職務責任",
42
+ "label.manager": "管理者",
28
43
  "label.myself": "私",
29
44
  "label.note": "ノート",
45
+ "label.participation-approval": "決裁",
46
+ "label.participation-reference": "参照",
30
47
  "label.picture": "写真",
31
- "label.alias": "別名",
32
- "label.job-responsibility": "職務責任",
33
- "label.job-position": "役職",
34
48
  "label.retired-at": "退職日時",
35
49
  "prompt.sure to empty approval line ?": "承認ラインを空にしますか?",
50
+ "text.approval-line-empty": "決裁者がいません — 提出すると即完了します",
51
+ "text.approver-unknown": "(名前なし)",
52
+ "text.deleted": "削除しました",
53
+ "text.info_x_successfully": "{x}しました",
54
+ "text.no-common-approval-line-description": "共用の決裁ラインは組織が定める決裁経路です。全員が選んで使えます。",
55
+ "text.no-common-approval-line-title": "共用の決裁ラインがありません",
56
+ "text.no-my-approval-line-description": "よく使う経路を保存しておけば、提出するたびに選び直さなくて済みます。",
57
+ "text.no-my-approval-line-title": "自分の決裁ラインがありません",
58
+ "text.not-an-employee-description": "自分の決裁ラインは社員記録に結び付きます。組織・社員の画面で管理者が登録すると作れます。それまでは共用の決裁ラインを選んで使えます。",
59
+ "text.not-an-employee-title": "まだ社員として登録されていません",
60
+ "text.notify-after-nth": "{n}番目の決裁後",
61
+ "text.notify-after-only-reference": "参照にのみ使います",
62
+ "text.notify-immediately": "申請直後",
63
+ "text.saved": "保存しました",
64
+ "title.approval-line": "決裁ライン",
36
65
  "title.approval-line editor": "決裁ライン編集",
37
66
  "title.approval-line item list": "決裁ライン詳細",
38
67
  "title.approval-line template list": "決裁ライン テンプレート リスト",
39
68
  "title.assignee list": "譲渡人リスト",
40
69
  "title.assignees editor": "譲渡人リスト編集",
41
- "title.common-approval-line template list": "共通決裁ライン テンプレート リスト",
42
- "title.lookup system-user": "システムユーザーを検索",
43
- "title.my-approval-line template list": "マイ決裁ライン テンプレート リスト",
44
- "title.employee list": "職員リスト",
45
- "title.department list": "部署リスト",
46
- "title.department tree": "部署階層図",
70
+ "title.common-approval-line template list": "共用の決裁ライン",
47
71
  "title.contact list": "連絡先リスト",
48
- "title.organization": "組織",
72
+ "title.department list": "部署",
73
+ "title.department tree": "部署階層図",
74
+ "title.employee list": "従業員",
49
75
  "title.employees-by-department": "部署別の従業員",
50
- "error.employee-already-registered": "この従業員はすでにシステムユーザーとして登録されています。",
51
- "error.contact-information-required": "この従業員には連絡先情報が必要です。"
76
+ "title.lookup system-user": "システムユーザーを検索",
77
+ "title.my-approval-line template list": "自分の決裁ライン",
78
+ "title.organization": "組織"
52
79
  }
@@ -1,52 +1,79 @@
1
1
  {
2
2
  "button.add-child-dept": "하위부서",
3
+ "button.add-my-approval-line": "내 결재선 추가",
3
4
  "button.add-sibling-dept": "동급부서",
4
5
  "button.copy from": "복사해오기",
5
6
  "button.detach": "연결해제",
6
7
  "button.edit-contact": "연락처 편집",
7
8
  "button.edit-detail": "상세 편집",
8
9
  "button.register-account": "계정 등록",
9
- "field.register-account": "계정 등록",
10
+ "button.view": "보기",
11
+ "error.contact-information-required": "해당 직원의 연락처 정보가 필요합니다.",
12
+ "error.multiple-employees-for-user": "이 계정에 연결된 직원 정보가 둘 이상이어서 어느 직원으로 처리할지 알 수 없습니다. 도메인 관리자가 하나만 남겨야 합니다.",
13
+ "error.no-employee-for-user": "이 계정에 연결된 직원 정보가 없습니다. 도메인 관리자가 직원 목록에서 연결해 줄 수 있습니다.",
14
+ "error.employee-already-registered": "해당 직원은 이미 시스템 사용자로 등록되어 있습니다.",
15
+ "field.approval-line": "결재선",
10
16
  "field.approver": "결재자",
11
17
  "field.control-no": "관리 번호",
12
18
  "field.hired-on": "입사일",
13
19
  "field.note": "코멘트",
20
+ "field.notify-after": "알림 시점",
21
+ "field.owner": "소유자",
14
22
  "field.owner-type": "소유자 종류",
23
+ "field.participation": "자격",
24
+ "field.register-account": "계정 등록",
15
25
  "field.supervisor": "감독자",
16
26
  "field.system-user": "시스템 사용자",
17
27
  "label.Department": "부서",
18
28
  "label.Employee": "직원",
19
- "label.Role": "역할",
20
29
  "label.MyDepartment": "내 부서",
21
30
  "label.MySupervisor": "내 관리자",
22
31
  "label.Myself": "나",
32
+ "label.Role": "역할",
33
+ "label.alias": "별칭",
34
+ "label.approval-line-common": "공용 결재선",
35
+ "label.approval-line-mine": "내 결재선",
23
36
  "label.control-no": "관리번호",
24
- "label.hired-on": "입사일",
25
- "label.manager": "관리자",
26
37
  "label.department": "부서",
27
38
  "label.employee": "직원",
39
+ "label.hired-on": "입사일",
40
+ "label.job-position": "직급",
41
+ "label.job-responsibility": "직책",
42
+ "label.manager": "관리자",
28
43
  "label.myself": "나",
29
44
  "label.note": "노트",
45
+ "label.participation-approval": "결재",
46
+ "label.participation-reference": "참조",
30
47
  "label.picture": "사진",
31
- "label.alias": "별칭",
32
- "label.job-responsibility": "직책",
33
- "label.job-position": "직급",
34
48
  "label.retired-at": "퇴사일",
35
49
  "prompt.sure to empty approval line ?": "결재라인을 비우시겠습니까 ?",
36
- "title.approval-line editor": "결재라인 편집",
37
- "title.approval-line item list": "결재라인 상세",
38
- "title.approval-line template list": "결재라인 템플릿 목록",
50
+ "text.approval-line-empty": "결재자가 없습니다 — 올리면 곧 완료됩니다",
51
+ "text.approver-unknown": "(이름 없음)",
52
+ "text.deleted": "삭제했습니다",
53
+ "text.info_x_successfully": "{x}했습니다",
54
+ "text.no-common-approval-line-description": "공용 결재선은 조직이 정해 두는 결재 경로입니다. 모두가 골라 쓸 수 있습니다.",
55
+ "text.no-common-approval-line-title": "공용 결재선이 없습니다",
56
+ "text.no-my-approval-line-description": "자주 쓰는 결재 경로를 만들어 두면 올릴 때마다 다시 고르지 않아도 됩니다.",
57
+ "text.no-my-approval-line-title": "내 결재선이 없습니다",
58
+ "text.not-an-employee-description": "내 결재선은 사원 기록에 매입니다. 조직 · 사원 화면에서 관리자가 등록해 주면 만들 수 있습니다. 그때까지 공용 결재선은 골라 쓸 수 있습니다.",
59
+ "text.not-an-employee-title": "아직 사원으로 등록되지 않았습니다",
60
+ "text.notify-after-nth": "{n}번째 결재 뒤",
61
+ "text.notify-after-only-reference": "참조에만 씁니다",
62
+ "text.notify-immediately": "상신 즉시",
63
+ "text.saved": "저장했습니다",
64
+ "title.approval-line": "결재선",
65
+ "title.approval-line editor": "결재선 편집",
66
+ "title.approval-line item list": "결재선 상세",
67
+ "title.approval-line template list": "결재선 목록",
39
68
  "title.assignee list": "할당자 목록",
40
69
  "title.assignees editor": "할당자 목록 편집",
41
- "title.common-approval-line template list": "공통 결재라인 템플릿 목록",
42
- "title.lookup system-user": "시스템 사용자 검색",
43
- "title.my-approval-line template list": "나의 결재라인 템플릿 목록",
44
- "title.employee list": "직원 목록",
45
- "title.department list": "부서 목록",
46
- "title.department tree": "부서 조직도",
70
+ "title.common-approval-line template list": "공용 결재선",
47
71
  "title.contact list": "연락처 관리",
48
- "title.organization": "조직",
72
+ "title.department list": "부서",
73
+ "title.department tree": "부서 조직도",
74
+ "title.employee list": "직원",
49
75
  "title.employees-by-department": "부서별 직원",
50
- "error.employee-already-registered": "해당 직원은 이미 시스템 사용자로 등록되어 있습니다.",
51
- "error.contact-information-required": "해당 직원의 연락처 정보가 필요합니다."
76
+ "title.lookup system-user": "시스템 사용자 검색",
77
+ "title.my-approval-line template list": "내 결재선",
78
+ "title.organization": "조직"
52
79
  }
@@ -1,51 +1,78 @@
1
1
  {
2
2
  "button.add-child-dept": "tambah jabatan bawahan",
3
+ "button.add-my-approval-line": "tambah talian kelulusan saya",
3
4
  "button.add-sibling-dept": "tambah jabatan sejawat",
4
5
  "button.copy from": "salin dari",
5
6
  "button.detach": "lepaskan",
6
7
  "button.edit-contact": "edit kenalan",
7
8
  "button.edit-detail": "edit butiran",
8
- "field.register-account": "daftar akaun",
9
+ "button.view": "lihat",
10
+ "error.contact-information-required": "Maklumat hubungan diperlukan untuk pekerja ini.",
11
+ "error.multiple-employees-for-user": "akaun ini dipautkan kepada lebih daripada satu rekod pekerja, jadi tidak jelas yang mana bertindak — pentadbir domain perlu meninggalkan satu",
12
+ "error.no-employee-for-user": "akaun ini tidak dipautkan kepada rekod pekerja — pentadbir domain boleh memautkannya dalam senarai pekerja",
13
+ "error.employee-already-registered": "Pekerja ini sudah didaftarkan sebagai pengguna sistem.",
14
+ "field.approval-line": "talian kelulusan",
9
15
  "field.approver": "penyetuju",
10
16
  "field.control-no": "nombor kawalan",
11
17
  "field.hired-on": "diberhentikan pada",
12
18
  "field.note": "catatan",
19
+ "field.notify-after": "masa notis",
20
+ "field.owner": "pemilik",
13
21
  "field.owner-type": "jenis pemilik",
22
+ "field.participation": "kapasiti",
23
+ "field.register-account": "daftar akaun",
14
24
  "field.supervisor": "penyelia",
15
25
  "field.system-user": "pengguna sistem",
16
26
  "label.Department": "jabatan",
17
27
  "label.Employee": "pekerja",
18
- "label.Role": "peranan",
19
28
  "label.MyDepartment": "jabatan saya",
20
29
  "label.MySupervisor": "penyelia saya",
21
30
  "label.Myself": "diri saya",
31
+ "label.Role": "peranan",
32
+ "label.alias": "alias",
33
+ "label.approval-line-common": "talian kelulusan kongsi",
34
+ "label.approval-line-mine": "talian kelulusan saya",
22
35
  "label.control-no": "nombor kawalan",
23
- "label.hired-on": "diberhentikan pada",
24
- "label.manager": "pengurus",
25
36
  "label.department": "jabatan",
26
37
  "label.employee": "pekerja",
38
+ "label.hired-on": "diberhentikan pada",
39
+ "label.job-position": "jawatan kerja",
40
+ "label.job-responsibility": "tanggungjawab kerja",
41
+ "label.manager": "pengurus",
27
42
  "label.myself": "diri saya",
28
43
  "label.note": "catatan",
44
+ "label.participation-approval": "kelulusan",
45
+ "label.participation-reference": "rujukan",
29
46
  "label.picture": "gambar",
30
- "label.alias": "alias",
31
- "label.job-responsibility": "tanggungjawab kerja",
32
- "label.job-position": "jawatan kerja",
33
47
  "label.retired-at": "bersara pada",
34
48
  "prompt.sure to empty approval line ?": "pasti mahu kosongkan garis kelulusan?",
49
+ "text.approval-line-empty": "tiada pelulus — penghantaran selesai serta-merta",
50
+ "text.approver-unknown": "(tiada nama)",
51
+ "text.deleted": "dipadam",
52
+ "text.info_x_successfully": "{x} selesai",
53
+ "text.no-common-approval-line-description": "talian kelulusan kongsi ialah laluan yang ditetapkan organisasi. semua orang boleh memilihnya.",
54
+ "text.no-common-approval-line-title": "tiada talian kelulusan kongsi",
55
+ "text.no-my-approval-line-description": "simpan laluan yang sering anda guna supaya anda tidak perlu memilihnya semula setiap kali.",
56
+ "text.no-my-approval-line-title": "tiada talian kelulusan milik anda",
57
+ "text.not-an-employee-description": "talian kelulusan anda terikat pada rekod pekerja. pentadbir boleh mendaftarkan anda di organisasi · pekerja. sementara itu anda masih boleh memilih talian kelulusan kongsi.",
58
+ "text.not-an-employee-title": "anda belum didaftarkan sebagai pekerja",
59
+ "text.notify-after-nth": "selepas kelulusan {n}",
60
+ "text.notify-after-only-reference": "hanya untuk rujukan",
61
+ "text.notify-immediately": "sebaik dihantar",
62
+ "text.saved": "disimpan",
63
+ "title.approval-line": "talian kelulusan",
35
64
  "title.approval-line editor": "editor garis kelulusan",
36
65
  "title.approval-line item list": "senarai item garis kelulusan",
37
66
  "title.approval-line template list": "senarai templat garis kelulusan",
38
67
  "title.assignee list": "senarai penerima tugasan",
39
68
  "title.assignees editor": "editor penerima tugasan",
40
- "title.common-approval-line template list": "senarai templat garis kelulusan biasa",
41
- "title.lookup system-user": "cari pengguna sistem",
42
- "title.my-approval-line template list": "senarai templat garis kelulusan saya",
43
- "title.employee list": "senarai pekerja",
44
- "title.department list": "senarai jabatan",
45
- "title.department tree": "hierarki jabatan",
69
+ "title.common-approval-line template list": "talian kelulusan kongsi",
46
70
  "title.contact list": "senarai kenalan",
47
- "title.organization": "organisasi",
71
+ "title.department list": "jabatan",
72
+ "title.department tree": "hierarki jabatan",
73
+ "title.employee list": "pekerja",
48
74
  "title.employees-by-department": "pekerja mengikut jabatan",
49
- "error.employee-already-registered": "Pekerja ini sudah didaftarkan sebagai pengguna sistem.",
50
- "error.contact-information-required": "Maklumat hubungan diperlukan untuk pekerja ini."
75
+ "title.lookup system-user": "cari pengguna sistem",
76
+ "title.my-approval-line template list": "talian kelulusan saya",
77
+ "title.organization": "organisasi"
51
78
  }
@@ -1,52 +1,79 @@
1
1
  {
2
2
  "button.add-child-dept": "添加下级部门",
3
+ "button.add-my-approval-line": "添加我的审批线",
3
4
  "button.add-sibling-dept": "添加同级部门",
4
5
  "button.copy from": "复制自",
5
6
  "button.detach": "分离",
6
7
  "button.edit-contact": "编辑联系人",
7
8
  "button.edit-detail": "编辑详情",
8
9
  "button.register-account": "注册账户",
9
- "field.register-account": "注册账户",
10
+ "button.view": "查看",
11
+ "error.contact-information-required": "该员工需要联系信息。",
12
+ "error.multiple-employees-for-user": "此账号关联了多条员工信息,无法判断以哪一位员工身份处理。域管理员需只保留一条。",
13
+ "error.no-employee-for-user": "此账号未关联员工信息。域管理员可在员工列表中进行关联。",
14
+ "error.employee-already-registered": "该员工已注册为系统用户。",
15
+ "field.approval-line": "审批线",
10
16
  "field.approver": "审批人",
11
17
  "field.control-no": "控制编号",
12
18
  "field.hired-on": "入职日期",
13
19
  "field.note": "备注",
20
+ "field.notify-after": "通知时点",
21
+ "field.owner": "所有者",
14
22
  "field.owner-type": "所有者类型",
23
+ "field.participation": "身份",
24
+ "field.register-account": "注册账户",
15
25
  "field.supervisor": "主管",
16
26
  "field.system-user": "系统用户",
17
27
  "label.Department": "部门",
18
28
  "label.Employee": "员工",
19
- "label.Role": "角色",
20
29
  "label.MyDepartment": "我的部门",
21
30
  "label.MySupervisor": "我的主管",
22
31
  "label.Myself": "我自己",
32
+ "label.Role": "角色",
33
+ "label.alias": "别名",
34
+ "label.approval-line-common": "共用审批线",
35
+ "label.approval-line-mine": "我的审批线",
23
36
  "label.control-no": "控制编号",
24
- "label.hired-on": "入职日期",
25
- "label.manager": "经理",
26
37
  "label.department": "部门",
27
38
  "label.employee": "员工",
39
+ "label.hired-on": "入职日期",
40
+ "label.job-position": "职位",
41
+ "label.job-responsibility": "工作职责",
42
+ "label.manager": "经理",
28
43
  "label.myself": "我",
29
44
  "label.note": "备注",
45
+ "label.participation-approval": "审批",
46
+ "label.participation-reference": "知会",
30
47
  "label.picture": "照片",
31
- "label.alias": "别名",
32
- "label.job-responsibility": "工作职责",
33
- "label.job-position": "职位",
34
48
  "label.retired-at": "退休时间",
35
49
  "prompt.sure to empty approval line ?": "确定要清空审批行吗?",
50
+ "text.approval-line-empty": "没有审批人 — 提交后立即完成",
51
+ "text.approver-unknown": "(无名称)",
52
+ "text.deleted": "已删除",
53
+ "text.info_x_successfully": "已{x}",
54
+ "text.no-common-approval-line-description": "共用审批线是组织设定的审批路径,所有人都可以选用。",
55
+ "text.no-common-approval-line-title": "没有共用审批线",
56
+ "text.no-my-approval-line-description": "把常用的审批路径保存下来,以后提交时就不用每次重新选择。",
57
+ "text.no-my-approval-line-title": "没有我的审批线",
58
+ "text.not-an-employee-description": "我的审批线与员工记录绑定。管理员可在组织·员工画面为您登记,之后即可创建。在此之前仍可选用共用审批线。",
59
+ "text.not-an-employee-title": "您尚未登记为员工",
60
+ "text.notify-after-nth": "第{n}个审批后",
61
+ "text.notify-after-only-reference": "仅用于知会",
62
+ "text.notify-immediately": "提交后立即",
63
+ "text.saved": "已保存",
64
+ "title.approval-line": "审批线",
36
65
  "title.approval-line editor": "审批线编辑器",
37
66
  "title.approval-line item list": "审批线项目列表",
38
67
  "title.approval-line template list": "审批线模板列表",
39
68
  "title.assignee list": "受托人列表",
40
69
  "title.assignees editor": "受托人编辑器",
41
- "title.common-approval-line template list": "常用审批线模板列表",
42
- "title.lookup system-user": "查找系统用户",
43
- "title.my-approval-line template list": "我的审批线模板列表",
44
- "title.employee list": "员工列表",
45
- "title.department list": "部门列表",
46
- "title.department tree": "部门层级图",
70
+ "title.common-approval-line template list": "共用审批线",
47
71
  "title.contact list": "联系人列表",
48
- "title.organization": "组织",
72
+ "title.department list": "部门",
73
+ "title.department tree": "部门层级图",
74
+ "title.employee list": "员工",
49
75
  "title.employees-by-department": "按部门分类的员工",
50
- "error.employee-already-registered": "该员工已注册为系统用户。",
51
- "error.contact-information-required": "该员工需要联系信息。"
76
+ "title.lookup system-user": "查找系统用户",
77
+ "title.my-approval-line template list": "我的审批线",
78
+ "title.organization": "组织"
52
79
  }