@kernhq/module-hr 0.9.3 → 0.10.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.
- package/dist/contract/approvals.d.ts +3 -0
- package/dist/contract/approvals.d.ts.map +1 -1
- package/dist/contract/approvals.js +13 -1
- package/dist/contract/approvals.js.map +1 -1
- package/dist/contract/router.d.ts +9 -0
- package/dist/contract/router.d.ts.map +1 -1
- package/dist/server/router.d.ts +9 -0
- package/dist/server/router.d.ts.map +1 -1
- package/dist/server/router.js +17 -0
- package/dist/server/router.js.map +1 -1
- package/dist/server/schema.d.ts +36 -0
- package/dist/server/schema.d.ts.map +1 -1
- package/dist/server/schema.js +20 -0
- package/dist/server/schema.js.map +1 -1
- package/dist/server/services/approvals.d.ts +14 -0
- package/dist/server/services/approvals.d.ts.map +1 -1
- package/dist/server/services/approvals.js +2 -0
- package/dist/server/services/approvals.js.map +1 -1
- package/migrations/0005_approval_requester.sql +20 -0
- package/migrations/meta/_journal.json +7 -0
- package/package.json +1 -1
- package/src/client/capabilities.ts +34 -0
- package/src/client/components/DecisionDialog.svelte +90 -0
- package/src/client/components/DelegationDialog.svelte +210 -0
- package/src/client/i18n.ts +302 -0
- package/src/client/index.ts +1 -20
- package/src/client/mock.ts +133 -16
- package/src/client/module.ts +2 -1
- package/src/client/pages/ApprovalsPage.svelte +252 -54
- package/src/client/pages/OfficesPage.svelte +161 -37
- package/src/client/permissions.ts +2 -1
- package/src/client/query.ts +10 -1
- package/src/client/summary.ts +36 -0
- package/src/contract/approvals.ts +13 -1
package/src/client/i18n.ts
CHANGED
|
@@ -15,10 +15,38 @@ export const en: Record<string, Message> = {
|
|
|
15
15
|
'hr.add_person': 'Add person',
|
|
16
16
|
'hr.add_person_desc':
|
|
17
17
|
'Name and a start date are enough. An employee number is assigned if you leave it blank.',
|
|
18
|
+
'hr.approval_comment': 'Comment',
|
|
19
|
+
'hr.approval_comment_hint': 'Optional. The person who asked sees it.',
|
|
20
|
+
'hr.approval_status_approved': 'Approved',
|
|
21
|
+
'hr.approval_status_cancelled': 'Cancelled',
|
|
22
|
+
'hr.approval_status_pending': 'Awaiting a decision',
|
|
23
|
+
'hr.approval_status_rejected': 'Rejected',
|
|
24
|
+
'hr.approval_subject_shift_swap': 'Shift swap',
|
|
25
|
+
'hr.approval_subject_timesheet': 'Timesheet',
|
|
26
|
+
'hr.approval_summary_leave': '{days} days, {range}',
|
|
27
|
+
'hr.approval_summary_overtime': 'Overtime on {date}',
|
|
28
|
+
'hr.approval_summary_regularization': 'Attendance correction for {date}',
|
|
29
|
+
'hr.approvals_actions': 'Actions',
|
|
30
|
+
'hr.approvals_chains_hint': 'Who signs what is set in the module settings.',
|
|
31
|
+
'hr.approvals_decided': 'Decided',
|
|
32
|
+
'hr.approvals_decided_none': 'Nothing decided yet',
|
|
33
|
+
'hr.approvals_decided_none_desc': 'Requests you have approved or rejected appear here.',
|
|
34
|
+
'hr.approvals_error': 'Your approvals could not be loaded',
|
|
35
|
+
'hr.approvals_for': 'for {name}',
|
|
18
36
|
'hr.approvals_none': 'Nothing waiting on you',
|
|
19
37
|
'hr.approvals_none_desc': 'Requests needing your decision appear here.',
|
|
38
|
+
'hr.approvals_request': 'Request',
|
|
39
|
+
'hr.approvals_requested': 'Requested',
|
|
40
|
+
'hr.approvals_requested_by': 'Requested by',
|
|
41
|
+
'hr.approvals_step': 'Step',
|
|
42
|
+
'hr.approvals_step_of': 'Step {n} of {total}',
|
|
20
43
|
'hr.approvals_title': 'Approvals',
|
|
44
|
+
'hr.approvals_waiting': 'Waiting on you',
|
|
21
45
|
'hr.approve': 'Approve',
|
|
46
|
+
'hr.approve_confirm_attendance': 'The corrected punches are applied and that day is recomputed.',
|
|
47
|
+
'hr.approve_confirm_leave': 'The days come off their balance and the team calendar shows them as away.',
|
|
48
|
+
'hr.approve_confirm_next': 'This is not the last step — it moves on to the next approver.',
|
|
49
|
+
'hr.approve_confirm_title': 'Approve this request?',
|
|
22
50
|
'hr.att_overtime': 'Overtime',
|
|
23
51
|
'hr.att_scheduled': 'Scheduled',
|
|
24
52
|
'hr.att_status_absent': 'Absent',
|
|
@@ -35,6 +63,7 @@ export const en: Record<string, Message> = {
|
|
|
35
63
|
'hr.available': 'Available',
|
|
36
64
|
'hr.break_end': 'End break',
|
|
37
65
|
'hr.break_start': 'Start break',
|
|
66
|
+
'hr.cancel': 'Cancel',
|
|
38
67
|
'hr.cancel_request': 'Cancel request',
|
|
39
68
|
'hr.capabilities_desc':
|
|
40
69
|
'Turn a feature off and it disappears — from navigation, dashboards and the API. Nothing is deleted, so turning it back on restores what was there.',
|
|
@@ -47,6 +76,21 @@ export const en: Record<string, Message> = {
|
|
|
47
76
|
'hr.cmd_directory': 'Open the people directory',
|
|
48
77
|
'hr.cmd_request_leave': 'Request time off',
|
|
49
78
|
'hr.days': 'days',
|
|
79
|
+
'hr.decide_error': 'The decision could not be recorded',
|
|
80
|
+
'hr.delegate': 'Delegate',
|
|
81
|
+
'hr.delegate_add': 'Add delegation',
|
|
82
|
+
'hr.delegate_all_types': 'All requests',
|
|
83
|
+
'hr.delegate_dates_invalid': 'The end date must not be before the start date.',
|
|
84
|
+
'hr.delegate_desc':
|
|
85
|
+
'While you are away, somebody else decides in your place. Both names are recorded on every decision.',
|
|
86
|
+
'hr.delegate_error': 'The delegation could not be saved',
|
|
87
|
+
'hr.delegate_from_date': 'From',
|
|
88
|
+
'hr.delegate_kind': 'Applies to',
|
|
89
|
+
'hr.delegate_none': 'No delegations',
|
|
90
|
+
'hr.delegate_revoke': 'Revoke',
|
|
91
|
+
'hr.delegate_title': 'Delegate my approvals',
|
|
92
|
+
'hr.delegate_to': 'Delegate to',
|
|
93
|
+
'hr.delegate_to_date': 'Until',
|
|
50
94
|
'hr.department': 'Department',
|
|
51
95
|
'hr.display_name': 'Name',
|
|
52
96
|
'hr.edit_person': 'Edit',
|
|
@@ -92,10 +136,23 @@ export const en: Record<string, Message> = {
|
|
|
92
136
|
'hr.offboard_reason': 'Reason',
|
|
93
137
|
'hr.offboard_title': 'End employment for {name}',
|
|
94
138
|
'hr.office': 'Office',
|
|
139
|
+
'hr.office_country': 'Country',
|
|
95
140
|
'hr.office_default': 'Default',
|
|
141
|
+
'hr.office_kind': 'Type',
|
|
142
|
+
'hr.office_kind_branch': 'Branch',
|
|
143
|
+
'hr.office_kind_head_office': 'Head office',
|
|
144
|
+
'hr.office_kind_remote': 'Remote',
|
|
145
|
+
'hr.office_kind_site': 'Site',
|
|
146
|
+
'hr.office_kind_store': 'Store',
|
|
147
|
+
'hr.office_kind_warehouse': 'Warehouse',
|
|
148
|
+
'hr.office_people': 'People',
|
|
149
|
+
'hr.office_view_people': 'view people',
|
|
150
|
+
'hr.offices_countries': 'Countries',
|
|
151
|
+
'hr.offices_error': 'Offices could not be loaded',
|
|
96
152
|
'hr.offices_none': 'No offices yet',
|
|
97
153
|
'hr.offices_none_desc': 'Add an office to give a group its own holidays and timezone.',
|
|
98
154
|
'hr.offices_title': 'Offices',
|
|
155
|
+
'hr.offices_total': 'Offices',
|
|
99
156
|
'hr.on_break_since': 'On break since {time}',
|
|
100
157
|
'hr.people_error': 'The directory could not be loaded',
|
|
101
158
|
'hr.person_created': '{name} is in the directory',
|
|
@@ -104,7 +161,10 @@ export const en: Record<string, Message> = {
|
|
|
104
161
|
'hr.personal_email': 'Personal email',
|
|
105
162
|
'hr.phone': 'Phone',
|
|
106
163
|
'hr.reject': 'Reject',
|
|
164
|
+
'hr.reject_confirm_body': 'They are notified and nothing changes for them. They can send a new request.',
|
|
165
|
+
'hr.reject_confirm_title': 'Reject this request?',
|
|
107
166
|
'hr.request_leave': 'Request time off',
|
|
167
|
+
'hr.retry': 'Try again',
|
|
108
168
|
'hr.search_people': 'Search people',
|
|
109
169
|
'hr.settings_calendars': 'Holidays',
|
|
110
170
|
'hr.settings_capabilities': 'Features',
|
|
@@ -140,10 +200,38 @@ export type HrMessageKey = keyof typeof en
|
|
|
140
200
|
const ar: Record<string, Message> = {
|
|
141
201
|
'hr.add_person': 'إضافة شخص',
|
|
142
202
|
'hr.add_person_desc': 'يكفي الاسم وتاريخ البدء. يُنشأ رقم وظيفي إن تركته فارغًا.',
|
|
203
|
+
'hr.approval_comment': 'تعليق',
|
|
204
|
+
'hr.approval_comment_hint': 'اختياري. يراه مقدّم الطلب.',
|
|
205
|
+
'hr.approval_status_approved': 'تمت الموافقة',
|
|
206
|
+
'hr.approval_status_cancelled': 'أُلغي',
|
|
207
|
+
'hr.approval_status_pending': 'بانتظار القرار',
|
|
208
|
+
'hr.approval_status_rejected': 'مرفوض',
|
|
209
|
+
'hr.approval_subject_shift_swap': 'تبديل وردية',
|
|
210
|
+
'hr.approval_subject_timesheet': 'كشف الدوام',
|
|
211
|
+
'hr.approval_summary_leave': '{days} أيام، {range}',
|
|
212
|
+
'hr.approval_summary_overtime': 'عمل إضافي في {date}',
|
|
213
|
+
'hr.approval_summary_regularization': 'تصحيح حضور ليوم {date}',
|
|
214
|
+
'hr.approvals_actions': 'الإجراءات',
|
|
215
|
+
'hr.approvals_chains_hint': 'يُحدَّد من يوقّع على ماذا في إعدادات الوحدة.',
|
|
216
|
+
'hr.approvals_decided': 'تم البتّ فيها',
|
|
217
|
+
'hr.approvals_decided_none': 'لم يتم البتّ في شيء بعد',
|
|
218
|
+
'hr.approvals_decided_none_desc': 'تظهر هنا الطلبات التي وافقت عليها أو رفضتها.',
|
|
219
|
+
'hr.approvals_error': 'تعذّر تحميل موافقاتك',
|
|
220
|
+
'hr.approvals_for': 'لـ {name}',
|
|
143
221
|
'hr.approvals_none': 'Nothing waiting on you',
|
|
144
222
|
'hr.approvals_none_desc': 'Requests needing your decision appear here.',
|
|
223
|
+
'hr.approvals_request': 'الطلب',
|
|
224
|
+
'hr.approvals_requested': 'تاريخ الطلب',
|
|
225
|
+
'hr.approvals_requested_by': 'مقدّم الطلب',
|
|
226
|
+
'hr.approvals_step': 'الخطوة',
|
|
227
|
+
'hr.approvals_step_of': 'الخطوة {n} من {total}',
|
|
145
228
|
'hr.approvals_title': 'Approvals',
|
|
229
|
+
'hr.approvals_waiting': 'بانتظارك',
|
|
146
230
|
'hr.approve': 'Approve',
|
|
231
|
+
'hr.approve_confirm_attendance': 'تُطبَّق التسجيلات المصحّحة ويُعاد احتساب ذلك اليوم.',
|
|
232
|
+
'hr.approve_confirm_leave': 'تُخصم الأيام من رصيده ويظهر في تقويم الفريق كغائب.',
|
|
233
|
+
'hr.approve_confirm_next': 'ليست هذه الخطوة الأخيرة — ينتقل الطلب إلى المُوافِق التالي.',
|
|
234
|
+
'hr.approve_confirm_title': 'الموافقة على هذا الطلب؟',
|
|
147
235
|
'hr.att_overtime': 'Overtime',
|
|
148
236
|
'hr.att_scheduled': 'Scheduled',
|
|
149
237
|
'hr.att_status_absent': 'Absent',
|
|
@@ -160,6 +248,7 @@ const ar: Record<string, Message> = {
|
|
|
160
248
|
'hr.available': 'Available',
|
|
161
249
|
'hr.break_end': 'End break',
|
|
162
250
|
'hr.break_start': 'Start break',
|
|
251
|
+
'hr.cancel': 'إلغاء',
|
|
163
252
|
'hr.cancel_request': 'Cancel request',
|
|
164
253
|
'hr.capabilities_desc':
|
|
165
254
|
'Turn a feature off and it disappears — from navigation, dashboards and the API. Nothing is deleted, so turning it back on restores what was there.',
|
|
@@ -172,6 +261,20 @@ const ar: Record<string, Message> = {
|
|
|
172
261
|
'hr.cmd_directory': 'Open the people directory',
|
|
173
262
|
'hr.cmd_request_leave': 'Request time off',
|
|
174
263
|
'hr.days': 'days',
|
|
264
|
+
'hr.decide_error': 'تعذّر تسجيل القرار',
|
|
265
|
+
'hr.delegate': 'تفويض',
|
|
266
|
+
'hr.delegate_add': 'إضافة تفويض',
|
|
267
|
+
'hr.delegate_all_types': 'كل الطلبات',
|
|
268
|
+
'hr.delegate_dates_invalid': 'يجب ألا يسبق تاريخ الانتهاء تاريخ البدء.',
|
|
269
|
+
'hr.delegate_desc': 'أثناء غيابك يقرّر شخص آخر نيابةً عنك. يُسجَّل الاسمان في كل قرار.',
|
|
270
|
+
'hr.delegate_error': 'تعذّر حفظ التفويض',
|
|
271
|
+
'hr.delegate_from_date': 'من',
|
|
272
|
+
'hr.delegate_kind': 'يشمل',
|
|
273
|
+
'hr.delegate_none': 'لا توجد تفويضات',
|
|
274
|
+
'hr.delegate_revoke': 'إلغاء',
|
|
275
|
+
'hr.delegate_title': 'تفويض موافقاتي',
|
|
276
|
+
'hr.delegate_to': 'التفويض إلى',
|
|
277
|
+
'hr.delegate_to_date': 'إلى',
|
|
175
278
|
'hr.department': 'Department',
|
|
176
279
|
'hr.display_name': 'الاسم',
|
|
177
280
|
'hr.edit_person': 'تعديل',
|
|
@@ -216,10 +319,23 @@ const ar: Record<string, Message> = {
|
|
|
216
319
|
'hr.offboard_reason': 'السبب',
|
|
217
320
|
'hr.offboard_title': 'إنهاء توظيف {name}',
|
|
218
321
|
'hr.office': 'Office',
|
|
322
|
+
'hr.office_country': 'الدولة',
|
|
219
323
|
'hr.office_default': 'Default',
|
|
324
|
+
'hr.office_kind': 'النوع',
|
|
325
|
+
'hr.office_kind_branch': 'فرع',
|
|
326
|
+
'hr.office_kind_head_office': 'المكتب الرئيسي',
|
|
327
|
+
'hr.office_kind_remote': 'عن بُعد',
|
|
328
|
+
'hr.office_kind_site': 'موقع',
|
|
329
|
+
'hr.office_kind_store': 'متجر',
|
|
330
|
+
'hr.office_kind_warehouse': 'مستودع',
|
|
331
|
+
'hr.office_people': 'الأشخاص',
|
|
332
|
+
'hr.office_view_people': 'عرض الأشخاص',
|
|
333
|
+
'hr.offices_countries': 'الدول',
|
|
334
|
+
'hr.offices_error': 'تعذّر تحميل المكاتب',
|
|
220
335
|
'hr.offices_none': 'No offices yet',
|
|
221
336
|
'hr.offices_none_desc': 'Add an office to give a group its own holidays and timezone.',
|
|
222
337
|
'hr.offices_title': 'Offices',
|
|
338
|
+
'hr.offices_total': 'المكاتب',
|
|
223
339
|
'hr.on_break_since': 'On break since {time}',
|
|
224
340
|
'hr.people_error': 'The directory could not be loaded',
|
|
225
341
|
'hr.person_created': 'أُضيف {name} إلى الدليل',
|
|
@@ -228,7 +344,10 @@ const ar: Record<string, Message> = {
|
|
|
228
344
|
'hr.personal_email': 'البريد الشخصي',
|
|
229
345
|
'hr.phone': 'الهاتف',
|
|
230
346
|
'hr.reject': 'Reject',
|
|
347
|
+
'hr.reject_confirm_body': 'يصله إشعار ولا يتغيّر شيء بالنسبة له. يمكنه إرسال طلب جديد.',
|
|
348
|
+
'hr.reject_confirm_title': 'رفض هذا الطلب؟',
|
|
231
349
|
'hr.request_leave': 'Request time off',
|
|
350
|
+
'hr.retry': 'أعد المحاولة',
|
|
232
351
|
'hr.search_people': 'Search people',
|
|
233
352
|
'hr.settings_calendars': 'Holidays',
|
|
234
353
|
'hr.settings_capabilities': 'Features',
|
|
@@ -263,10 +382,41 @@ const de: Record<string, Message> = {
|
|
|
263
382
|
'hr.add_person': 'Person hinzufügen',
|
|
264
383
|
'hr.add_person_desc':
|
|
265
384
|
'Name und Eintrittsdatum reichen. Eine Personalnummer wird vergeben, wenn Sie das Feld leer lassen.',
|
|
385
|
+
'hr.approval_comment': 'Kommentar',
|
|
386
|
+
'hr.approval_comment_hint': 'Optional. Die antragstellende Person sieht ihn.',
|
|
387
|
+
'hr.approval_status_approved': 'Genehmigt',
|
|
388
|
+
'hr.approval_status_cancelled': 'Storniert',
|
|
389
|
+
'hr.approval_status_pending': 'Wartet auf Entscheidung',
|
|
390
|
+
'hr.approval_status_rejected': 'Abgelehnt',
|
|
391
|
+
'hr.approval_subject_shift_swap': 'Schichttausch',
|
|
392
|
+
'hr.approval_subject_timesheet': 'Zeitnachweis',
|
|
393
|
+
'hr.approval_summary_leave': '{days} Tage, {range}',
|
|
394
|
+
'hr.approval_summary_overtime': 'Überstunden am {date}',
|
|
395
|
+
'hr.approval_summary_regularization': 'Zeitkorrektur für {date}',
|
|
396
|
+
'hr.approvals_actions': 'Aktionen',
|
|
397
|
+
'hr.approvals_chains_hint': 'Wer was freigibt, wird in den Moduleinstellungen festgelegt.',
|
|
398
|
+
'hr.approvals_decided': 'Entschieden',
|
|
399
|
+
'hr.approvals_decided_none': 'Noch nichts entschieden',
|
|
400
|
+
'hr.approvals_decided_none_desc': 'Hier erscheinen Anträge, die Sie genehmigt oder abgelehnt haben.',
|
|
401
|
+
'hr.approvals_error': 'Ihre Freigaben konnten nicht geladen werden',
|
|
402
|
+
'hr.approvals_for': 'für {name}',
|
|
266
403
|
'hr.approvals_none': 'Nothing waiting on you',
|
|
267
404
|
'hr.approvals_none_desc': 'Requests needing your decision appear here.',
|
|
405
|
+
'hr.approvals_request': 'Antrag',
|
|
406
|
+
'hr.approvals_requested': 'Eingereicht',
|
|
407
|
+
'hr.approvals_requested_by': 'Beantragt von',
|
|
408
|
+
'hr.approvals_step': 'Schritt',
|
|
409
|
+
'hr.approvals_step_of': 'Schritt {n} von {total}',
|
|
268
410
|
'hr.approvals_title': 'Approvals',
|
|
411
|
+
'hr.approvals_waiting': 'Wartet auf Sie',
|
|
269
412
|
'hr.approve': 'Approve',
|
|
413
|
+
'hr.approve_confirm_attendance':
|
|
414
|
+
'Die korrigierten Buchungen werden übernommen und der Tag wird neu berechnet.',
|
|
415
|
+
'hr.approve_confirm_leave':
|
|
416
|
+
'Die Tage werden vom Guthaben abgezogen und im Teamkalender als abwesend angezeigt.',
|
|
417
|
+
'hr.approve_confirm_next':
|
|
418
|
+
'Dies ist nicht der letzte Schritt — der Antrag geht an die nächste freigebende Person.',
|
|
419
|
+
'hr.approve_confirm_title': 'Diesen Antrag genehmigen?',
|
|
270
420
|
'hr.att_overtime': 'Overtime',
|
|
271
421
|
'hr.att_scheduled': 'Scheduled',
|
|
272
422
|
'hr.att_status_absent': 'Absent',
|
|
@@ -283,6 +433,7 @@ const de: Record<string, Message> = {
|
|
|
283
433
|
'hr.available': 'Available',
|
|
284
434
|
'hr.break_end': 'End break',
|
|
285
435
|
'hr.break_start': 'Start break',
|
|
436
|
+
'hr.cancel': 'Abbrechen',
|
|
286
437
|
'hr.cancel_request': 'Cancel request',
|
|
287
438
|
'hr.capabilities_desc':
|
|
288
439
|
'Turn a feature off and it disappears — from navigation, dashboards and the API. Nothing is deleted, so turning it back on restores what was there.',
|
|
@@ -295,6 +446,21 @@ const de: Record<string, Message> = {
|
|
|
295
446
|
'hr.cmd_directory': 'Open the people directory',
|
|
296
447
|
'hr.cmd_request_leave': 'Request time off',
|
|
297
448
|
'hr.days': 'days',
|
|
449
|
+
'hr.decide_error': 'Die Entscheidung konnte nicht gespeichert werden',
|
|
450
|
+
'hr.delegate': 'Vertretung',
|
|
451
|
+
'hr.delegate_add': 'Vertretung hinzufügen',
|
|
452
|
+
'hr.delegate_all_types': 'Alle Anträge',
|
|
453
|
+
'hr.delegate_dates_invalid': 'Das Enddatum darf nicht vor dem Startdatum liegen.',
|
|
454
|
+
'hr.delegate_desc':
|
|
455
|
+
'Während Ihrer Abwesenheit entscheidet jemand anderes an Ihrer Stelle. Beide Namen werden bei jeder Entscheidung festgehalten.',
|
|
456
|
+
'hr.delegate_error': 'Die Vertretung konnte nicht gespeichert werden',
|
|
457
|
+
'hr.delegate_from_date': 'Von',
|
|
458
|
+
'hr.delegate_kind': 'Gilt für',
|
|
459
|
+
'hr.delegate_none': 'Keine Vertretungen',
|
|
460
|
+
'hr.delegate_revoke': 'Widerrufen',
|
|
461
|
+
'hr.delegate_title': 'Meine Freigaben vertreten lassen',
|
|
462
|
+
'hr.delegate_to': 'Vertretung durch',
|
|
463
|
+
'hr.delegate_to_date': 'Bis',
|
|
298
464
|
'hr.department': 'Department',
|
|
299
465
|
'hr.display_name': 'Name',
|
|
300
466
|
'hr.edit_person': 'Bearbeiten',
|
|
@@ -340,10 +506,23 @@ const de: Record<string, Message> = {
|
|
|
340
506
|
'hr.offboard_reason': 'Grund',
|
|
341
507
|
'hr.offboard_title': 'Beschäftigung von {name} beenden',
|
|
342
508
|
'hr.office': 'Office',
|
|
509
|
+
'hr.office_country': 'Land',
|
|
343
510
|
'hr.office_default': 'Default',
|
|
511
|
+
'hr.office_kind': 'Art',
|
|
512
|
+
'hr.office_kind_branch': 'Niederlassung',
|
|
513
|
+
'hr.office_kind_head_office': 'Hauptsitz',
|
|
514
|
+
'hr.office_kind_remote': 'Remote',
|
|
515
|
+
'hr.office_kind_site': 'Betriebsstätte',
|
|
516
|
+
'hr.office_kind_store': 'Filiale',
|
|
517
|
+
'hr.office_kind_warehouse': 'Lager',
|
|
518
|
+
'hr.office_people': 'Personen',
|
|
519
|
+
'hr.office_view_people': 'Personen ansehen',
|
|
520
|
+
'hr.offices_countries': 'Länder',
|
|
521
|
+
'hr.offices_error': 'Standorte konnten nicht geladen werden',
|
|
344
522
|
'hr.offices_none': 'No offices yet',
|
|
345
523
|
'hr.offices_none_desc': 'Add an office to give a group its own holidays and timezone.',
|
|
346
524
|
'hr.offices_title': 'Offices',
|
|
525
|
+
'hr.offices_total': 'Standorte',
|
|
347
526
|
'hr.on_break_since': 'On break since {time}',
|
|
348
527
|
'hr.people_error': 'The directory could not be loaded',
|
|
349
528
|
'hr.person_created': '{name} steht im Verzeichnis',
|
|
@@ -352,7 +531,11 @@ const de: Record<string, Message> = {
|
|
|
352
531
|
'hr.personal_email': 'Private E-Mail',
|
|
353
532
|
'hr.phone': 'Telefon',
|
|
354
533
|
'hr.reject': 'Reject',
|
|
534
|
+
'hr.reject_confirm_body':
|
|
535
|
+
'Die Person wird benachrichtigt; für sie ändert sich nichts. Sie kann einen neuen Antrag stellen.',
|
|
536
|
+
'hr.reject_confirm_title': 'Diesen Antrag ablehnen?',
|
|
355
537
|
'hr.request_leave': 'Request time off',
|
|
538
|
+
'hr.retry': 'Erneut versuchen',
|
|
356
539
|
'hr.search_people': 'Search people',
|
|
357
540
|
'hr.settings_calendars': 'Holidays',
|
|
358
541
|
'hr.settings_capabilities': 'Features',
|
|
@@ -386,10 +569,38 @@ const de: Record<string, Message> = {
|
|
|
386
569
|
const fa: Record<string, Message> = {
|
|
387
570
|
'hr.add_person': 'افزودن فرد',
|
|
388
571
|
'hr.add_person_desc': 'نام و تاریخ شروع کافی است. اگر شماره پرسنلی نگذارید، خودش ساخته میشود.',
|
|
572
|
+
'hr.approval_comment': 'توضیح',
|
|
573
|
+
'hr.approval_comment_hint': 'اختیاری. درخواستدهنده آن را میبیند.',
|
|
574
|
+
'hr.approval_status_approved': 'تأیید شد',
|
|
575
|
+
'hr.approval_status_cancelled': 'لغو شد',
|
|
576
|
+
'hr.approval_status_pending': 'در انتظار تصمیم',
|
|
577
|
+
'hr.approval_status_rejected': 'رد شد',
|
|
578
|
+
'hr.approval_subject_shift_swap': 'تعویض شیفت',
|
|
579
|
+
'hr.approval_subject_timesheet': 'برگهٔ ساعت کاری',
|
|
580
|
+
'hr.approval_summary_leave': '{days} روز، {range}',
|
|
581
|
+
'hr.approval_summary_overtime': 'اضافهکاری در {date}',
|
|
582
|
+
'hr.approval_summary_regularization': 'اصلاح حضور برای {date}',
|
|
583
|
+
'hr.approvals_actions': 'کنشها',
|
|
584
|
+
'hr.approvals_chains_hint': 'اینکه چهکسی چهچیزی را امضا کند در تنظیمات ماژول تعیین میشود.',
|
|
585
|
+
'hr.approvals_decided': 'تصمیمگرفتهشده',
|
|
586
|
+
'hr.approvals_decided_none': 'هنوز چیزی تصمیمگیری نشده',
|
|
587
|
+
'hr.approvals_decided_none_desc': 'درخواستهایی که تأیید یا رد کردهاید اینجا نمایش داده میشوند.',
|
|
588
|
+
'hr.approvals_error': 'تأییدهای شما بارگیری نشد',
|
|
589
|
+
'hr.approvals_for': 'برای {name}',
|
|
389
590
|
'hr.approvals_none': 'چیزی منتظر تصمیم شما نیست',
|
|
390
591
|
'hr.approvals_none_desc': 'درخواستهایی که باید تصمیم بگیرید اینجا میآیند.',
|
|
592
|
+
'hr.approvals_request': 'درخواست',
|
|
593
|
+
'hr.approvals_requested': 'زمان درخواست',
|
|
594
|
+
'hr.approvals_requested_by': 'درخواستدهنده',
|
|
595
|
+
'hr.approvals_step': 'مرحله',
|
|
596
|
+
'hr.approvals_step_of': 'مرحلهٔ {n} از {total}',
|
|
391
597
|
'hr.approvals_title': 'تأییدها',
|
|
598
|
+
'hr.approvals_waiting': 'در انتظار شما',
|
|
392
599
|
'hr.approve': 'تأیید',
|
|
600
|
+
'hr.approve_confirm_attendance': 'ثبتهای اصلاحشده اعمال میشود و آن روز دوباره محاسبه میشود.',
|
|
601
|
+
'hr.approve_confirm_leave': 'روزها از موجودی او کم میشود و در تقویم تیم غایب نمایش داده میشود.',
|
|
602
|
+
'hr.approve_confirm_next': 'این مرحلهٔ آخر نیست — درخواست به تأییدکنندهٔ بعدی میرود.',
|
|
603
|
+
'hr.approve_confirm_title': 'این درخواست تأیید شود؟',
|
|
393
604
|
'hr.att_overtime': 'اضافهکار',
|
|
394
605
|
'hr.att_scheduled': 'برنامه',
|
|
395
606
|
'hr.att_status_absent': 'غایب',
|
|
@@ -406,6 +617,7 @@ const fa: Record<string, Message> = {
|
|
|
406
617
|
'hr.available': 'قابل استفاده',
|
|
407
618
|
'hr.break_end': 'پایان استراحت',
|
|
408
619
|
'hr.break_start': 'شروع استراحت',
|
|
620
|
+
'hr.cancel': 'انصراف',
|
|
409
621
|
'hr.cancel_request': 'لغو درخواست',
|
|
410
622
|
'hr.capabilities_desc':
|
|
411
623
|
'اگر قابلیتی را خاموش کنید از ناوبری، داشبورد و API ناپدید میشود. چیزی حذف نمیشود؛ روشن کردنش همان را برمیگرداند.',
|
|
@@ -418,6 +630,20 @@ const fa: Record<string, Message> = {
|
|
|
418
630
|
'hr.cmd_directory': 'باز کردن فهرست افراد',
|
|
419
631
|
'hr.cmd_request_leave': 'درخواست مرخصی',
|
|
420
632
|
'hr.days': 'روز',
|
|
633
|
+
'hr.decide_error': 'تصمیم ثبت نشد',
|
|
634
|
+
'hr.delegate': 'واگذاری',
|
|
635
|
+
'hr.delegate_add': 'افزودن واگذاری',
|
|
636
|
+
'hr.delegate_all_types': 'همهٔ درخواستها',
|
|
637
|
+
'hr.delegate_dates_invalid': 'تاریخ پایان نباید پیش از تاریخ شروع باشد.',
|
|
638
|
+
'hr.delegate_desc': 'در نبود شما، شخص دیگری بهجای شما تصمیم میگیرد. نام هر دو در هر تصمیم ثبت میشود.',
|
|
639
|
+
'hr.delegate_error': 'واگذاری ذخیره نشد',
|
|
640
|
+
'hr.delegate_from_date': 'از',
|
|
641
|
+
'hr.delegate_kind': 'شامل',
|
|
642
|
+
'hr.delegate_none': 'واگذاریای وجود ندارد',
|
|
643
|
+
'hr.delegate_revoke': 'لغو',
|
|
644
|
+
'hr.delegate_title': 'واگذاری تأییدهای من',
|
|
645
|
+
'hr.delegate_to': 'واگذاری به',
|
|
646
|
+
'hr.delegate_to_date': 'تا',
|
|
421
647
|
'hr.department': 'واحد',
|
|
422
648
|
'hr.display_name': 'نام',
|
|
423
649
|
'hr.edit_person': 'ویرایش',
|
|
@@ -462,10 +688,23 @@ const fa: Record<string, Message> = {
|
|
|
462
688
|
'hr.offboard_reason': 'دلیل',
|
|
463
689
|
'hr.offboard_title': 'پایان همکاری {name}',
|
|
464
690
|
'hr.office': 'دفتر',
|
|
691
|
+
'hr.office_country': 'کشور',
|
|
465
692
|
'hr.office_default': 'پیشفرض',
|
|
693
|
+
'hr.office_kind': 'نوع',
|
|
694
|
+
'hr.office_kind_branch': 'شعبه',
|
|
695
|
+
'hr.office_kind_head_office': 'دفتر مرکزی',
|
|
696
|
+
'hr.office_kind_remote': 'دورکاری',
|
|
697
|
+
'hr.office_kind_site': 'سایت',
|
|
698
|
+
'hr.office_kind_store': 'فروشگاه',
|
|
699
|
+
'hr.office_kind_warehouse': 'انبار',
|
|
700
|
+
'hr.office_people': 'افراد',
|
|
701
|
+
'hr.office_view_people': 'دیدن افراد',
|
|
702
|
+
'hr.offices_countries': 'کشورها',
|
|
703
|
+
'hr.offices_error': 'دفاتر بارگیری نشد',
|
|
466
704
|
'hr.offices_none': 'دفتری نیست',
|
|
467
705
|
'hr.offices_none_desc': 'دفتری اضافه کنید تا گروه، تعطیلات و منطقهٔ زمانی خودش را داشته باشد.',
|
|
468
706
|
'hr.offices_title': 'دفاتر',
|
|
707
|
+
'hr.offices_total': 'دفاتر',
|
|
469
708
|
'hr.on_break_since': 'از {time} در استراحت',
|
|
470
709
|
'hr.people_error': 'فهرست بار نشد',
|
|
471
710
|
'hr.person_created': '{name} به فهرست اضافه شد',
|
|
@@ -474,7 +713,11 @@ const fa: Record<string, Message> = {
|
|
|
474
713
|
'hr.personal_email': 'ایمیل شخصی',
|
|
475
714
|
'hr.phone': 'تلفن',
|
|
476
715
|
'hr.reject': 'رد',
|
|
716
|
+
'hr.reject_confirm_body':
|
|
717
|
+
'به او اطلاع داده میشود و چیزی برایش تغییر نمیکند. میتواند درخواست تازهای بفرستد.',
|
|
718
|
+
'hr.reject_confirm_title': 'این درخواست رد شود؟',
|
|
477
719
|
'hr.request_leave': 'درخواست مرخصی',
|
|
720
|
+
'hr.retry': 'تلاش دوباره',
|
|
478
721
|
'hr.search_people': 'جستوجوی افراد',
|
|
479
722
|
'hr.settings_calendars': 'تعطیلات',
|
|
480
723
|
'hr.settings_capabilities': 'قابلیتها',
|
|
@@ -508,10 +751,38 @@ const fa: Record<string, Message> = {
|
|
|
508
751
|
const tr: Record<string, Message> = {
|
|
509
752
|
'hr.add_person': 'Kişi ekle',
|
|
510
753
|
'hr.add_person_desc': 'Ad ve başlangıç tarihi yeter. Personel numarası boş bırakılırsa atanır.',
|
|
754
|
+
'hr.approval_comment': 'Yorum',
|
|
755
|
+
'hr.approval_comment_hint': 'İsteğe bağlı. Talebi gönderen kişi görür.',
|
|
756
|
+
'hr.approval_status_approved': 'Onaylandı',
|
|
757
|
+
'hr.approval_status_cancelled': 'İptal edildi',
|
|
758
|
+
'hr.approval_status_pending': 'Karar bekliyor',
|
|
759
|
+
'hr.approval_status_rejected': 'Reddedildi',
|
|
760
|
+
'hr.approval_subject_shift_swap': 'Vardiya değişimi',
|
|
761
|
+
'hr.approval_subject_timesheet': 'Puantaj',
|
|
762
|
+
'hr.approval_summary_leave': '{days} gün, {range}',
|
|
763
|
+
'hr.approval_summary_overtime': '{date} tarihinde fazla mesai',
|
|
764
|
+
'hr.approval_summary_regularization': '{date} için devam düzeltmesi',
|
|
765
|
+
'hr.approvals_actions': 'İşlemler',
|
|
766
|
+
'hr.approvals_chains_hint': 'Neyi kimin imzalayacağı modül ayarlarından belirlenir.',
|
|
767
|
+
'hr.approvals_decided': 'Karara bağlananlar',
|
|
768
|
+
'hr.approvals_decided_none': 'Henüz karara bağlanan bir şey yok',
|
|
769
|
+
'hr.approvals_decided_none_desc': 'Onayladığınız veya reddettiğiniz talepler burada görünür.',
|
|
770
|
+
'hr.approvals_error': 'Onaylarınız yüklenemedi',
|
|
771
|
+
'hr.approvals_for': '{name} için',
|
|
511
772
|
'hr.approvals_none': 'Sizi bekleyen bir şey yok',
|
|
512
773
|
'hr.approvals_none_desc': 'Kararınızı bekleyen talepler burada görünür.',
|
|
774
|
+
'hr.approvals_request': 'Talep',
|
|
775
|
+
'hr.approvals_requested': 'Talep edildi',
|
|
776
|
+
'hr.approvals_requested_by': 'Talep eden',
|
|
777
|
+
'hr.approvals_step': 'Adım',
|
|
778
|
+
'hr.approvals_step_of': '{total} adımdan {n}. adım',
|
|
513
779
|
'hr.approvals_title': 'Onaylar',
|
|
780
|
+
'hr.approvals_waiting': 'Sizi bekleyenler',
|
|
514
781
|
'hr.approve': 'Onayla',
|
|
782
|
+
'hr.approve_confirm_attendance': 'Düzeltilen giriş-çıkışlar uygulanır ve o gün yeniden hesaplanır.',
|
|
783
|
+
'hr.approve_confirm_leave': 'Günler bakiyesinden düşer ve takım takviminde izinli görünür.',
|
|
784
|
+
'hr.approve_confirm_next': 'Bu son adım değil; talep bir sonraki onaylayana geçer.',
|
|
785
|
+
'hr.approve_confirm_title': 'Bu talep onaylansın mı?',
|
|
515
786
|
'hr.att_overtime': 'Fazla mesai',
|
|
516
787
|
'hr.att_scheduled': 'Planlanan',
|
|
517
788
|
'hr.att_status_absent': 'Yok',
|
|
@@ -528,6 +799,7 @@ const tr: Record<string, Message> = {
|
|
|
528
799
|
'hr.available': 'Kullanılabilir',
|
|
529
800
|
'hr.break_end': 'Moladan dön',
|
|
530
801
|
'hr.break_start': 'Molaya çık',
|
|
802
|
+
'hr.cancel': 'Vazgeç',
|
|
531
803
|
'hr.cancel_request': 'Talebi iptal et',
|
|
532
804
|
'hr.capabilities_desc':
|
|
533
805
|
"Bir özelliği kapatırsanız kaybolur — gezinme, panolar ve API'den. Hiçbir şey silinmez, tekrar açtığınızda her şey geri gelir.",
|
|
@@ -540,6 +812,20 @@ const tr: Record<string, Message> = {
|
|
|
540
812
|
'hr.cmd_directory': 'Kişi rehberini aç',
|
|
541
813
|
'hr.cmd_request_leave': 'İzin talep et',
|
|
542
814
|
'hr.days': 'gün',
|
|
815
|
+
'hr.decide_error': 'Karar kaydedilemedi',
|
|
816
|
+
'hr.delegate': 'Devret',
|
|
817
|
+
'hr.delegate_add': 'Devir ekle',
|
|
818
|
+
'hr.delegate_all_types': 'Tüm talepler',
|
|
819
|
+
'hr.delegate_dates_invalid': 'Bitiş tarihi başlangıç tarihinden önce olamaz.',
|
|
820
|
+
'hr.delegate_desc': 'Siz yokken kararı sizin yerinize başkası verir. Her kararda iki isim de kaydedilir.',
|
|
821
|
+
'hr.delegate_error': 'Devir kaydedilemedi',
|
|
822
|
+
'hr.delegate_from_date': 'Başlangıç',
|
|
823
|
+
'hr.delegate_kind': 'Kapsam',
|
|
824
|
+
'hr.delegate_none': 'Devir yok',
|
|
825
|
+
'hr.delegate_revoke': 'Geri al',
|
|
826
|
+
'hr.delegate_title': 'Onaylarımı devret',
|
|
827
|
+
'hr.delegate_to': 'Devredilecek kişi',
|
|
828
|
+
'hr.delegate_to_date': 'Bitiş',
|
|
543
829
|
'hr.department': 'Departman',
|
|
544
830
|
'hr.display_name': 'Ad',
|
|
545
831
|
'hr.edit_person': 'Düzenle',
|
|
@@ -584,10 +870,23 @@ const tr: Record<string, Message> = {
|
|
|
584
870
|
'hr.offboard_reason': 'Neden',
|
|
585
871
|
'hr.offboard_title': '{name} için işi bitir',
|
|
586
872
|
'hr.office': 'Ofis',
|
|
873
|
+
'hr.office_country': 'Ülke',
|
|
587
874
|
'hr.office_default': 'Varsayılan',
|
|
875
|
+
'hr.office_kind': 'Tür',
|
|
876
|
+
'hr.office_kind_branch': 'Şube',
|
|
877
|
+
'hr.office_kind_head_office': 'Merkez ofis',
|
|
878
|
+
'hr.office_kind_remote': 'Uzaktan',
|
|
879
|
+
'hr.office_kind_site': 'Saha',
|
|
880
|
+
'hr.office_kind_store': 'Mağaza',
|
|
881
|
+
'hr.office_kind_warehouse': 'Depo',
|
|
882
|
+
'hr.office_people': 'Kişi',
|
|
883
|
+
'hr.office_view_people': 'kişileri gör',
|
|
884
|
+
'hr.offices_countries': 'Ülkeler',
|
|
885
|
+
'hr.offices_error': 'Ofisler yüklenemedi',
|
|
588
886
|
'hr.offices_none': 'Henüz ofis yok',
|
|
589
887
|
'hr.offices_none_desc': 'Bir gruba kendi tatilleri ve saat dilimi için ofis ekleyin.',
|
|
590
888
|
'hr.offices_title': 'Ofisler',
|
|
889
|
+
'hr.offices_total': 'Ofisler',
|
|
591
890
|
'hr.on_break_since': '{time} saatinden beri molada',
|
|
592
891
|
'hr.people_error': 'Rehber yüklenemedi',
|
|
593
892
|
'hr.person_created': '{name} dizine eklendi',
|
|
@@ -596,7 +895,10 @@ const tr: Record<string, Message> = {
|
|
|
596
895
|
'hr.personal_email': 'Kişisel e-posta',
|
|
597
896
|
'hr.phone': 'Telefon',
|
|
598
897
|
'hr.reject': 'Reddet',
|
|
898
|
+
'hr.reject_confirm_body': 'Bildirim alır ve kendisi için hiçbir şey değişmez. Yeni bir talep gönderebilir.',
|
|
899
|
+
'hr.reject_confirm_title': 'Bu talep reddedilsin mi?',
|
|
599
900
|
'hr.request_leave': 'İzin talep et',
|
|
901
|
+
'hr.retry': 'Yeniden dene',
|
|
600
902
|
'hr.search_people': 'Kişi ara',
|
|
601
903
|
'hr.settings_calendars': 'Tatiller',
|
|
602
904
|
'hr.settings_capabilities': 'Özellikler',
|
package/src/client/index.ts
CHANGED
|
@@ -58,26 +58,7 @@ export {
|
|
|
58
58
|
type Schedule,
|
|
59
59
|
type WorkingWeek,
|
|
60
60
|
} from '../contract/index.js'
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* The capability ids, so a client contribution gates on a constant rather than a retyped string.
|
|
64
|
-
*
|
|
65
|
-
* Named unqualified — `capability: HR_CAPABILITIES.offices` gives `'offices'`, not `'hr.offices'` —
|
|
66
|
-
* because from inside a module there is only one namespace. The shell adds this module's id when it
|
|
67
|
-
* builds the workspace's set, which is where several modules' capabilities meet.
|
|
68
|
-
*/
|
|
69
|
-
export const HR_CAPABILITIES = {
|
|
70
|
-
core: 'core',
|
|
71
|
-
offices: 'offices',
|
|
72
|
-
legalEntities: 'legal_entities',
|
|
73
|
-
calendars: 'calendars',
|
|
74
|
-
documents: 'documents',
|
|
75
|
-
leave: 'leave',
|
|
76
|
-
leaveAccrual: 'leave_accrual',
|
|
77
|
-
approvals: 'approvals',
|
|
78
|
-
attendance: 'attendance',
|
|
79
|
-
overtime: 'overtime',
|
|
80
|
-
} as const
|
|
81
61
|
export { __setHrApi, getHrApi } from './api-instance.js'
|
|
62
|
+
export { HR_CAPABILITIES, type HrCapabilityId } from './capabilities.js'
|
|
82
63
|
export { type HrMessageKey, hrMessageBundles, t } from './i18n.js'
|
|
83
64
|
export { hrClientModule, hrClientModule as default } from './module.js'
|