iobroker.time-tracker 0.3.2 → 0.3.4
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/README.md +23 -24
- package/io-package.json +27 -27
- package/package.json +1 -1
- package/src-pwa/src/i18n/de.json +16 -1
- package/src-pwa/src/i18n/en.json +16 -1
- package/src-pwa/src/i18n/es.json +16 -1
- package/src-pwa/src/i18n/fr.json +16 -1
- package/src-pwa/src/i18n/it.json +16 -1
- package/src-pwa/src/i18n/nl.json +16 -1
- package/src-pwa/src/i18n/pl.json +16 -1
- package/src-pwa/src/i18n/pt.json +16 -1
- package/src-pwa/src/i18n/ru.json +16 -1
- package/src-pwa/src/i18n/uk.json +16 -1
- package/src-pwa/src/i18n/zh-cn.json +16 -1
- package/www/assets/{index-D7f1X_an.js → index-BvnH1yBe.js} +3 -3
- package/www/assets/index-BvnH1yBe.js.map +1 -0
- package/www/index.html +1 -1
- package/www/sw.js +1 -1
- package/www/sw.js.map +1 -1
- package/www/assets/index-D7f1X_an.js.map +0 -1
package/README.md
CHANGED
|
@@ -36,16 +36,18 @@ PIN. All data stays on your own ioBroker host: no cloud, no subscription.
|
|
|
36
36
|
|
|
37
37
|
## Installation
|
|
38
38
|
|
|
39
|
-
1.
|
|
40
|
-
|
|
41
|
-
automatically** — `iobroker add time-tracker` is only needed if you want
|
|
42
|
-
|
|
43
|
-
part of the repository. Either use the npm package, or build once in the adapter directory
|
|
44
|
-
(`npm ci && npm run install:pwa && npm run build:pwa && npm run build`, then `iobroker install .`).
|
|
39
|
+
1. Install the adapter in the ioBroker admin: **Adapters** → filter for *time-tracker* → install. On a machine
|
|
40
|
+
without the admin the same package can be installed from the registry with `iobroker install iobroker.time-tracker`.
|
|
41
|
+
**The instance `time-tracker.0` is created automatically** — `iobroker add time-tracker` is only needed if you want
|
|
42
|
+
the instance on its own.
|
|
45
43
|
2. Start the instance and open the web app on the port of the instance settings (default **8092**):
|
|
46
44
|
`http://<ioBroker host>:8092/`
|
|
47
45
|
3. Log in with the start password (see [First start](#first-start)) and create your employees.
|
|
48
46
|
|
|
47
|
+
> **For work on the sources** the adapter is built in the repository: `npm ci && npm run install:pwa &&
|
|
48
|
+
> npm run build:pwa && npm run build`, then `iobroker install .`. `build/` and `www/` are built and not part of the
|
|
49
|
+
> repository, so a plain Git installation does not work on its own.
|
|
50
|
+
|
|
49
51
|
## First start
|
|
50
52
|
|
|
51
53
|
The first start creates the database, the roles and the settings — and **one administrator account**, because
|
|
@@ -312,7 +314,7 @@ the adapter and switch **Trust the reverse proxy** on: the adapter then takes th
|
|
|
312
314
|
|
|
313
315
|
| Problem | Cause and fix |
|
|
314
316
|
| -------------------------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
315
|
-
| `/` answers `404 not_found` | the web app is missing:
|
|
317
|
+
| `/` answers `404 not_found` | the web app is missing: reinstall the adapter — the package ships the built web app in `www/` |
|
|
316
318
|
| Not installable as an app on the phone | the page is not reachable over HTTPS — see above |
|
|
317
319
|
| The PDF refuses or shows empty boxes | `report_font_path` is missing — see [Reports](#reports) |
|
|
318
320
|
| A restore seems to do nothing | it is applied on the next start: restart the instance |
|
|
@@ -353,6 +355,20 @@ local SQLite file, access is role-based, and every correction is written to an a
|
|
|
353
355
|
|
|
354
356
|
### **WORK IN PROGRESS**
|
|
355
357
|
|
|
358
|
+
### 0.3.4 (2026-09-22)
|
|
359
|
+
|
|
360
|
+
- (Alex) feat: the absence types can be maintained in the admin now — one row per type and the form in a dialog, with
|
|
361
|
+
code, name, paid, factor and the vacation deduction. The type that uses up the vacation allowance is marked in the
|
|
362
|
+
lists and in the picker, so “F – Ferien” reads as vacation at one glance
|
|
363
|
+
|
|
364
|
+
### 0.3.3 (2026-09-22)
|
|
365
|
+
|
|
366
|
+
- (Alex) fix: the installation chapter no longer points to the “Install from custom URL” dialog — the repository
|
|
367
|
+
checker reports that as `E6013` (“suggests to install the adapter directly from GitHub, directly from npm or using
|
|
368
|
+
npm commands”). It now leads with the normal way through the adapter list of the ioBroker admin, names the registry
|
|
369
|
+
for a machine without the admin and keeps the build steps in a clearly marked note for work on the sources. The
|
|
370
|
+
troubleshooting row for a missing web app no longer carries npm commands either
|
|
371
|
+
|
|
356
372
|
### 0.3.2 (2026-09-22)
|
|
357
373
|
|
|
358
374
|
- (Alex) fix: the automation rules are a **list** now — one row per rule with its caption, kind, time, target and
|
|
@@ -379,23 +395,6 @@ local SQLite file, access is role-based, and every correction is written to an a
|
|
|
379
395
|
for employees who agreed (`/terminal/users` and `/terminal/punch`). The new column
|
|
380
396
|
`work_profiles.show_worked_time` arrives with migration 20
|
|
381
397
|
|
|
382
|
-
### 0.2.7 (2026-09-22)
|
|
383
|
-
|
|
384
|
-
- (Alex) fix: **every** punch path reaches `events.*` and the web app now. Besides the presence state (0.2.6) the
|
|
385
|
-
`commands.punch`/`quickPunch` buttons, a `sendTo` message (`punch`, `present`) and the trigger rules (Actions) wrote
|
|
386
|
-
the punch and refreshed the figures but never published an event — the event states kept the punch before. The
|
|
387
|
-
results carry `userId` and `direction` now, and `punchEvent` (like `presenceEvent`) builds the bus event for them;
|
|
388
|
-
the automation rules send the direction with their `automation.*` event
|
|
389
|
-
- (Alex) test: the end-to-end suite is deterministic again — the correction spec anchors its “forgotten day” inside the
|
|
390
|
-
local day (`now - 8h` fell on the day before when the suite ran shortly after midnight and left the employee
|
|
391
|
-
present for the specs that follow), and the presence spec puts its employee into a known state before it asserts
|
|
392
|
-
|
|
393
|
-
### 0.2.6 (2026-09-22)
|
|
394
|
-
|
|
395
|
-
- (Alex) fix: a punch from the presence state (`users.<id>.present`) is published like every other one now — it shows
|
|
396
|
-
up in `events.*` (`lastType`, `lastUser`, `lastDirection`, `lastSource`) and reaches the web app live. The punch was
|
|
397
|
-
stored in the database but never sent to the event bus, so the event states kept the previous punch
|
|
398
|
-
|
|
399
398
|
Older entries are kept in [`CHANGELOG_OLD.md`](CHANGELOG_OLD.md).
|
|
400
399
|
|
|
401
400
|
## Provenance
|
package/io-package.json
CHANGED
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "time-tracker",
|
|
4
|
-
"version": "0.3.
|
|
4
|
+
"version": "0.3.4",
|
|
5
5
|
"nogit": true,
|
|
6
6
|
"news": {
|
|
7
|
+
"0.3.4": {
|
|
8
|
+
"en": "feat: the absence types can be maintained in the administration now — code, name, paid, factor and the vacation deduction, as a row per type with the form in a dialog. The type that uses up the vacation allowance is marked in the lists and in the picker, so “F – Ferien” reads as vacation at one glance",
|
|
9
|
+
"de": "feat: die Abwesenheitsarten lassen sich jetzt in der Verwaltung pflegen — Kürzel, Bezeichnung, bezahlt, Faktor und Urlaubsabzug, als Zeile je Art mit dem Formular in einem Dialog. Die Art, die vom Urlaubskontingent abzieht, ist in den Listen und in der Auswahl gekennzeichnet, sodass „F – Ferien“ auf einen Blick als Urlaub lesbar ist",
|
|
10
|
+
"ru": "новое: видами отсутствия теперь можно управлять в администрировании — код, название, оплата, коэффициент и вычет отпуска, по строке на вид с формой в диалоге. Вид, расходующий отпускной лимит, отмечен в списках и в выборе, поэтому «F – Ferien» сразу читается как отпуск",
|
|
11
|
+
"pt": "novo: os tipos de ausência podem agora ser mantidos na administração — código, designação, pagamento, fator e dedução de férias, uma linha por tipo com o formulário numa caixa de diálogo. O tipo que consome o direito a férias está marcado nas listas e na escolha, por isso «F – Ferien» lê-se logo como férias",
|
|
12
|
+
"nl": "nieuw: de afwezigheidstypes kunnen nu in het beheer worden onderhouden — code, naam, betaald, factor en vakantieaftrek, één regel per type met het formulier in een dialoog. Het type dat het vakantietegoed opgebruikt, is gemarkeerd in de lijsten en in de keuzelijst, zodat „F – Ferien“ in één oogopslag als vakantie leesbaar is",
|
|
13
|
+
"fr": "nouveau : les types d'absence peuvent désormais être gérés dans l'administration — code, libellé, payé, facteur et déduction de vacances, une ligne par type avec le formulaire dans une boîte de dialogue. Le type qui consomme le droit aux vacances est marqué dans les listes et dans le choix, si bien que « F – Ferien » se lit comme vacances d'un coup d'œil",
|
|
14
|
+
"it": "novità: i tipi di assenza possono ora essere gestiti nell'amministrazione — codice, denominazione, pagato, fattore e deduzione ferie, una riga per tipo con il modulo in una finestra di dialogo. Il tipo che consuma il diritto alle ferie è contrassegnato negli elenchi e nella scelta, così «F – Ferien» si legge come ferie a colpo d'occhio",
|
|
15
|
+
"es": "novedad: los tipos de ausencia se pueden mantener ahora en la administración — código, denominación, pagado, factor y deducción de vacaciones, una fila por tipo con el formulario en un diálogo. El tipo que consume el derecho a vacaciones está marcado en las listas y en la elección, así que «F – Ferien» se lee como vacaciones de un vistazo",
|
|
16
|
+
"pl": "nowość: rodzajami nieobecności można teraz zarządzać w administracji — kod, nazwa, płatne, współczynnik i potrącenie urlopu, po jednym wierszu na rodzaj z formularzem w oknie dialogowym. Rodzaj zużywający limit urlopu jest oznaczony na listach i na liście wyboru, więc «F – Ferien» od razu czyta się jako urlop",
|
|
17
|
+
"uk": "новинка: видами відсутності тепер можна керувати в адмініструванні — код, назва, оплата, коефіцієнт і відрахування відпустки, по рядку на вид із формою в діалозі. Вид, що витрачає ліміт відпустки, позначено у списках і у виборі, тож «F – Ferien» одразу читається як відпустка",
|
|
18
|
+
"zh-cn": "新功能:现在可在管理中维护缺勤类型 —— 代号、名称、带薪、系数与休假扣减,每种类型一行,表单在对话框中。会消耗休假额度的类型会在列表和选择中标记,因此「F – Ferien」一眼即可看出是休假"
|
|
19
|
+
},
|
|
20
|
+
"0.3.3": {
|
|
21
|
+
"en": "fix: the installation chapter of the README no longer points to the adapter dialog for a URL — the repository checker reports that as E6013. It now describes the normal way through the adapter list of the ioBroker admin (and names the registry for machines without the admin); the build steps for work on the sources are a separate note",
|
|
22
|
+
"de": "fix: das Installationskapitel der README verweist nicht mehr auf den Adapter-Dialog für eine URL — der Repository-Checker meldet das als E6013. Es beschreibt jetzt den normalen Weg über die Adapterliste des ioBroker-Admin (und nennt die Registry für Rechner ohne Admin); die Build-Schritte für die Arbeit an den Quellen stehen in einem eigenen Hinweis",
|
|
23
|
+
"ru": "исправление: раздел установки в README больше не ссылается на диалог адаптера для URL — проверка репозитория сообщает об этом как E6013. Теперь описан обычный путь через список адаптеров ioBroker-Admin (и назван реестр для машин без админа); шаги сборки для работы с исходниками выделены отдельно",
|
|
24
|
+
"pt": "correção: o capítulo de instalação do README já não aponta para a caixa de diálogo do adaptador para um URL — o verificador do repositório assinala isso como E6013. Agora descreve o caminho normal através da lista de adaptadores do ioBroker admin (e nomeia o registo para máquinas sem admin); os passos de compilação para trabalhar nos fontes ficam numa nota separada",
|
|
25
|
+
"nl": "fix: het installatiehoofdstuk van de README verwijst niet meer naar het adaptervenster voor een URL - de repositorychecker meldt dat als E6013. Het beschrijft nu de normale weg via de adapterlijst van de ioBroker-admin (en noemt het register voor machines zonder admin); de buildstappen voor werk aan de bron staan in een aparte noot",
|
|
26
|
+
"fr": "correctif : le chapitre d'installation du README ne renvoie plus à la boîte de dialogue d'adaptateur pour une URL - le vérificateur du dépôt le signale comme E6013. Il décrit désormais la voie normale via la liste des adaptateurs de l'admin ioBroker (et nomme le registre pour les machines sans admin) ; les étapes de compilation pour travailler sur les sources sont une note à part",
|
|
27
|
+
"it": "correzione: il capitolo di installazione del README non rimanda più alla finestra dell'adattatore per un URL - il verificatore del repository lo segnala come E6013. Ora descrive il percorso normale tramite l'elenco degli adattatori dell'admin ioBroker (e indica il registro per le macchine senza admin); i passaggi di build per lavorare sui sorgenti sono una nota separata",
|
|
28
|
+
"es": "corrección: el capítulo de instalación del README ya no remite al diálogo del adaptador para una URL - el verificador del repositorio lo señala como E6013. Ahora describe la vía normal a través de la lista de adaptadores del admin de ioBroker (y nombra el registro para máquinas sin admin); los pasos de compilación para trabajar en las fuentes son una nota aparte",
|
|
29
|
+
"pl": "poprawka: rozdział instalacji w README nie odsyła już do okna adaptera dla URL - weryfikator repozytorium zgłasza to jako E6013. Teraz opisuje zwykłą drogę przez listę adapterów ioBroker admin (i podaje rejestr dla maszyn bez admina); kroki budowania do pracy nad źródłami są osobną uwagą",
|
|
30
|
+
"uk": "виправлення: розділ встановлення в README більше не посилається на діалог адаптера для URL — перевірка репозиторію позначає це як E6013. Тепер описано звичайний шлях через список адаптерів ioBroker admin (і названо реєстр для машин без адміна); кроки збірки для роботи з джерелами виділено окремо",
|
|
31
|
+
"zh-cn": "修复:README 的安装章节不再指向“通过 URL 安装适配器”的对话框 —— 仓库检查器会将其报告为 E6013。现在描述通过 ioBroker admin 适配器列表的正常方式(并说明没有 admin 时使用注册表);针对源码开发的构建步骤单独说明"
|
|
32
|
+
},
|
|
7
33
|
"0.3.2": {
|
|
8
34
|
"en": "fix: the automation rules are a compact list now - one row per rule with its caption, kind, time, target and weekdays, plus the buttons for active, edit and delete. The form only opens in a dialog, and the save button of the card says “Save rules” (it carried the caption of the break rules before)",
|
|
9
35
|
"de": "fix: die Regeln (Automatik) sind jetzt eine kompakte Liste - eine Zeile je Regel mit Bezeichnung, Art, Uhrzeit, Mitarbeiter und Wochentagen sowie den Knöpfen für Aktiv, Bearbeiten und Löschen. Das Formular öffnet sich nur noch in einem Dialog, und der Speichern-Knopf der Karte heißt „Regeln speichern“ (vorher trug er die Beschriftung der Pausenstaffel)",
|
|
@@ -68,32 +94,6 @@
|
|
|
68
94
|
"pl": "poprawka: rejestracja przez stan obecności (`users.<id>.present`) jest teraz publikowana w strumieniu zdarzeń — pojawia się w `events.lastType`, `lastUser`, `lastDirection` i `lastSource` i dociera do aplikacji web na żywo. Wpis trafiał do bazy, ale zdarzenie nigdy nie było wysyłane na magistralę, dlatego stany zdarzeń zostawały przy poprzednim wpisie",
|
|
69
95
|
"uk": "виправлення: відмітка через стан присутності (`users.<id>.present`) тепер публікується в потоці подій — вона з'являється в `events.lastType`, `lastUser`, `lastDirection` і `lastSource` і одразу доходить до веб-застосунку. Відмітка зберігалася в базі, але подія ніколи не надсилалася до шини, тому стани подій залишалися від попередньої відмітки",
|
|
70
96
|
"zh-cn": "修复:通过在岗状态(`users.<id>.present`)的打卡现在会发布到事件流 —— 会出现在 `events.lastType`、`lastUser`、`lastDirection` 和 `lastSource`,并实时到达 Web 应用。打卡已写入数据库,但事件从未发送到总线,因此这些事件状态一直停留在上一次打卡"
|
|
71
|
-
},
|
|
72
|
-
"0.2.5": {
|
|
73
|
-
"en": "docs: the installation chapter leads with the normal way now — install the npm package (`iobroker install iobroker.time-tracker` or the admin’s “Install from custom URL”), which creates the instance `time-tracker.0` automatically. Building from a checkout is the developer path, and the chapter explains why a Git installation reports `cannot find start file!`",
|
|
74
|
-
"de": "Doku: das Installationskapitel führt jetzt mit dem normalen Weg — das npm-Paket installieren (`iobroker install iobroker.time-tracker` oder „Installieren aus eigener URL“ im Admin), wobei die Instanz `time-tracker.0` automatisch entsteht. Bauen aus dem Quellcode ist nur noch der Entwicklerweg, und das Kapitel erklärt, warum eine Git-Installation `cannot find start file!` meldet",
|
|
75
|
-
"ru": "документация: глава об установке теперь начинается с обычного пути — установить пакет npm (`iobroker install iobroker.time-tracker` или «Установить по своему URL» в админе), при этом экземпляр `time-tracker.0` создаётся автоматически. Сборка из исходников — теперь только путь разработчика, и глава объясняет, почему установка из Git сообщает `cannot find start file!`",
|
|
76
|
-
"pt": "documentação: o capítulo de instalação começa agora pelo caminho normal — instalar o pacote npm (`iobroker install iobroker.time-tracker` ou “Instalar a partir de URL própria” no admin), e a instância `time-tracker.0` é criada automaticamente. Compilar a partir do código é apenas o caminho do programador, e o capítulo explica porque uma instalação via Git indica `cannot find start file!`",
|
|
77
|
-
"nl": "documentatie: het installatiehoofdstuk begint nu met de normale weg — het npm-pakket installeren (`iobroker install iobroker.time-tracker` of “Installeren vanaf eigen URL” in de admin), waarbij de instantie `time-tracker.0` automatisch ontstaat. Bouwen uit de broncode is nu alleen het ontwikkelaarspad, en het hoofdstuk legt uit waarom een Git-installatie `cannot find start file!` meldt",
|
|
78
|
-
"fr": "documentation : le chapitre d'installation commence désormais par la voie normale — installer le paquet npm (`iobroker install iobroker.time-tracker` ou « Installer depuis une URL personnalisée » dans l'admin), l'instance `time-tracker.0` étant créée automatiquement. Compiler depuis les sources n'est plus que le chemin du développeur, et le chapitre explique pourquoi une installation via Git signale `cannot find start file!`",
|
|
79
|
-
"it": "documentazione: il capitolo sull'installazione parte ora dal percorso normale — installare il pacchetto npm (`iobroker install iobroker.time-tracker` o “Installa da URL personale” nell'admin), e l'istanza `time-tracker.0` viene creata automaticamente. Compilare dai sorgenti è ora solo il percorso dello sviluppatore, e il capitolo spiega perché un'installazione da Git segnala `cannot find start file!`",
|
|
80
|
-
"es": "documentación: el capítulo de instalación empieza ahora por el camino normal — instalar el paquete npm (`iobroker install iobroker.time-tracker` o “Instalar desde URL propia” en el admin), y la instancia `time-tracker.0` se crea automáticamente. Compilar desde el código es solo la ruta del desarrollador, y el capítulo explica por qué una instalación desde Git informa `cannot find start file!`",
|
|
81
|
-
"pl": "dokumentacja: rozdział o instalacji zaczyna się teraz od zwykłej drogi — instalacji pakietu npm (`iobroker install iobroker.time-tracker` lub „Zainstaluj z własnego adresu URL” w adminie), przy czym instancja `time-tracker.0` powstaje automatycznie. Budowanie ze źródeł to teraz tylko ścieżka dewelopera, a rozdział wyjaśnia, dlaczego instalacja z Git zgłasza `cannot find start file!`",
|
|
82
|
-
"uk": "документація: розділ про встановлення тепер починається зі звичайного шляху — встановити пакет npm (`iobroker install iobroker.time-tracker` або «Встановити з власного URL» в адміні), при цьому екземпляр `time-tracker.0` створюється автоматично. Збірка з коду — тепер лише шлях розробника, і розділ пояснює, чому встановлення з Git повідомляє `cannot find start file!`",
|
|
83
|
-
"zh-cn": "文档:安装章节现在先介绍常规方式 —— 安装 npm 包(`iobroker install iobroker.time-tracker` 或管理界面中的“从自定义 URL 安装”),实例 `time-tracker.0` 会自动创建。从源码构建现在只是开发者路径,章节也说明了为什么从 Git 安装会提示 `cannot find start file!`"
|
|
84
|
-
},
|
|
85
|
-
"0.2.4": {
|
|
86
|
-
"en": "`commands.punchUserId` selects the employee the punch buttons apply to now (writing `0` gives the choice back to the adapter) and the current choice is mirrored into that state. The README and `docs/erste-schritte.md` describe all six command states, with examples and the two traps: the buttons act on `true` only, and a wrong period or an unknown employee is answered with a warning in the log",
|
|
87
|
-
"de": "`commands.punchUserId` wählt jetzt den Mitarbeiter, für den die Stempel-Buttons gelten (mit `0` übernimmt der Adapter die Wahl wieder selbst), und die aktuelle Wahl wird in diesen State zurückgespiegelt. README und `docs/erste-schritte.md` beschreiben alle sechs Befehls-States — mit Beispielen und den beiden Stolpersteinen: die Buttons reagieren nur auf `true`, und ein falscher Zeitraum oder unbekannter Mitarbeiter wird als Warnung im Log beantwortet",
|
|
88
|
-
"ru": "`commands.punchUserId` теперь выбирает сотрудника, к которому относятся кнопки отметки (значение `0` возвращает выбор адаптеру), а текущий выбор отображается в этом состоянии. README и `docs/erste-schritte.md` описывают все шесть командных состояний — с примерами и двумя ловушками: кнопки срабатывают только на `true`, а неверный период или неизвестный сотрудник отмечаются предупреждением в журнале",
|
|
89
|
-
"pt": "`commands.punchUserId` passa a escolher o funcionário a que se aplicam os botões de marcação (com `0` a escolha volta para o adaptador) e a escolha atual é refletida nesse estado. README e `docs/erste-schritte.md` descrevem os seis estados de comando — com exemplos e as duas armadilhas: os botões só reagem a `true` e um período errado ou um funcionário desconhecido são respondidos com um aviso no log",
|
|
90
|
-
"nl": "`commands.punchUserId` kiest nu de medewerker waarop de stempelknoppen slaan (`0` geeft de keuze weer aan de adapter) en de huidige keuze wordt in die state teruggespiegeld. README en `docs/erste-schritte.md` beschrijven alle zes opdrachtstates — met voorbeelden en de twee valkuilen: de knoppen reageren alleen op `true` en een verkeerde periode of onbekende medewerker krijgt een waarschuwing in het log",
|
|
91
|
-
"fr": "`commands.punchUserId` sélectionne désormais l'employé auquel s'appliquent les boutons de pointage (`0` rend le choix à l'adaptateur) et le choix actuel est reflété dans cet état. Le README et `docs/erste-schritte.md` décrivent les six états de commande — avec des exemples et les deux pièges : les boutons ne réagissent qu'à `true` et une période erronée ou un employé inconnu reçoit un avertissement dans le log",
|
|
92
|
-
"it": "`commands.punchUserId` ora sceglie il dipendente a cui si applicano i pulsanti di timbratura (con `0` la scelta torna all'adattatore) e la scelta attuale viene rispecchiata in questo stato. README e `docs/erste-schritte.md` descrivono tutti e sei gli stati di comando — con esempi e le due trappole: i pulsanti reagiscono solo a `true` e un periodo errato o un dipendente sconosciuto ricevono un avviso nel log",
|
|
93
|
-
"es": "`commands.punchUserId` ahora elige el empleado al que se aplican los botones de fichaje (con `0` la elección vuelve al adaptador) y la elección actual se refleja en ese estado. El README y `docs/erste-schritte.md` describen los seis estados de comando — con ejemplos y las dos trampas: los botones solo reaccionan a `true` y un periodo erróneo o un empleado desconocido reciben un aviso en el log",
|
|
94
|
-
"pl": "`commands.punchUserId` wybiera teraz pracownika, którego dotyczą przyciski rejestracji (wartość `0` oddaje wybór adapterowi), a bieżący wybór jest odzwierciedlany w tym stanie. README i `docs/erste-schritte.md` opisują wszystkie sześć stanów poleceń — z przykładami i dwiema pułapkami: przyciski reagują tylko na `true`, a błędny okres lub nieznany pracownik kończą się ostrzeżeniem w logu",
|
|
95
|
-
"uk": "`commands.punchUserId` тепер вибирає співробітника, до якого належать кнопки відмітки (значення `0` повертає вибір адаптеру), а поточний вибір відображається в цьому стані. README і `docs/erste-schritte.md` описують усі шість командних станів — з прикладами та двома пастками: кнопки реагують лише на `true`, а хибний період або невідомий співробітник отримують попередження в журналі",
|
|
96
|
-
"zh-cn": "`commands.punchUserId` 现在用于选择打卡按钮所适用的员工(写入 `0` 则由适配器重新选择),当前选择会回写到该状态。README 与 `docs/erste-schritte.md` 描述了全部六个命令状态 —— 包含示例和两个陷阱:按钮只响应 `true`,错误的期间或未知员工会在日志中以警告回应"
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"titleLang": {
|
package/package.json
CHANGED
package/src-pwa/src/i18n/de.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Regeln speichern",
|
|
363
363
|
"admin.automation.edit": "Bearbeiten",
|
|
364
364
|
"admin.automation.editTitle": "Regel bearbeiten",
|
|
365
|
-
"admin.automation.newTitle": "Neue Regel"
|
|
365
|
+
"admin.automation.newTitle": "Neue Regel",
|
|
366
|
+
"absences.vacationTag": "Urlaub",
|
|
367
|
+
"admin.absenceTypes.title": "Abwesenheitsarten",
|
|
368
|
+
"admin.absenceTypes.hint": "Kürzel, Bezeichnung und Wirkung der Abwesenheiten. „Urlaub“ markiert die Art, die das Urlaubskontingent verbraucht.",
|
|
369
|
+
"admin.absenceTypes.code": "Kürzel",
|
|
370
|
+
"admin.absenceTypes.name": "Bezeichnung",
|
|
371
|
+
"admin.absenceTypes.paid": "Bezahlt",
|
|
372
|
+
"admin.absenceTypes.factor": "Faktor (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Zieht vom Urlaub ab",
|
|
374
|
+
"admin.absenceTypes.active": "Aktiv",
|
|
375
|
+
"admin.absenceTypes.add": "Art hinzufügen",
|
|
376
|
+
"admin.absenceTypes.edit": "Bearbeiten",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Art bearbeiten",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Neue Art",
|
|
379
|
+
"admin.absenceTypes.empty": "Keine Abwesenheitsart angelegt.",
|
|
380
|
+
"admin.absenceTypes.note": "Bestehende Abwesenheiten behalten ihre Art — eine geänderte Bezeichnung wirkt sofort in der ganzen Oberfläche."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/en.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Save rules",
|
|
363
363
|
"admin.automation.edit": "Edit",
|
|
364
364
|
"admin.automation.editTitle": "Edit rule",
|
|
365
|
-
"admin.automation.newTitle": "New rule"
|
|
365
|
+
"admin.automation.newTitle": "New rule",
|
|
366
|
+
"absences.vacationTag": "vacation",
|
|
367
|
+
"admin.absenceTypes.title": "Absence types",
|
|
368
|
+
"admin.absenceTypes.hint": "Code, name and effect of the absences. “Vacation” marks the type that uses up the vacation allowance.",
|
|
369
|
+
"admin.absenceTypes.code": "Code",
|
|
370
|
+
"admin.absenceTypes.name": "Name",
|
|
371
|
+
"admin.absenceTypes.paid": "Paid",
|
|
372
|
+
"admin.absenceTypes.factor": "Factor (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Reduces vacation",
|
|
374
|
+
"admin.absenceTypes.active": "Active",
|
|
375
|
+
"admin.absenceTypes.add": "Add type",
|
|
376
|
+
"admin.absenceTypes.edit": "Edit",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Edit type",
|
|
378
|
+
"admin.absenceTypes.newTitle": "New type",
|
|
379
|
+
"admin.absenceTypes.empty": "No absence type yet.",
|
|
380
|
+
"admin.absenceTypes.note": "Existing absences keep their type — a changed name shows up everywhere right away."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/es.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Guardar reglas",
|
|
363
363
|
"admin.automation.edit": "Editar",
|
|
364
364
|
"admin.automation.editTitle": "Editar regla",
|
|
365
|
-
"admin.automation.newTitle": "Nueva regla"
|
|
365
|
+
"admin.automation.newTitle": "Nueva regla",
|
|
366
|
+
"absences.vacationTag": "vacaciones",
|
|
367
|
+
"admin.absenceTypes.title": "Tipos de ausencia",
|
|
368
|
+
"admin.absenceTypes.hint": "Código, denominación y efecto de las ausencias. «Vacaciones» marca el tipo que consume el derecho a vacaciones.",
|
|
369
|
+
"admin.absenceTypes.code": "Código",
|
|
370
|
+
"admin.absenceTypes.name": "Denominación",
|
|
371
|
+
"admin.absenceTypes.paid": "Pagado",
|
|
372
|
+
"admin.absenceTypes.factor": "Factor de tiempo (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Reduce las vacaciones",
|
|
374
|
+
"admin.absenceTypes.active": "Activo",
|
|
375
|
+
"admin.absenceTypes.add": "Añadir tipo",
|
|
376
|
+
"admin.absenceTypes.edit": "Editar",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Editar tipo",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Nuevo tipo",
|
|
379
|
+
"admin.absenceTypes.empty": "Ningún tipo de ausencia definido.",
|
|
380
|
+
"admin.absenceTypes.note": "Las ausencias existentes mantienen su tipo — una denominación modificada aparece enseguida en toda la interfaz."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/fr.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Enregistrer les règles",
|
|
363
363
|
"admin.automation.edit": "Modifier",
|
|
364
364
|
"admin.automation.editTitle": "Modifier la règle",
|
|
365
|
-
"admin.automation.newTitle": "Nouvelle règle"
|
|
365
|
+
"admin.automation.newTitle": "Nouvelle règle",
|
|
366
|
+
"absences.vacationTag": "vacances",
|
|
367
|
+
"admin.absenceTypes.title": "Types d'absence",
|
|
368
|
+
"admin.absenceTypes.hint": "Code, libellé et effet des absences. « Vacances » marque le type qui consomme le droit aux vacances.",
|
|
369
|
+
"admin.absenceTypes.code": "Abréviation",
|
|
370
|
+
"admin.absenceTypes.name": "Libellé",
|
|
371
|
+
"admin.absenceTypes.paid": "Payé",
|
|
372
|
+
"admin.absenceTypes.factor": "Facteur (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Réduit les vacances",
|
|
374
|
+
"admin.absenceTypes.active": "Actif",
|
|
375
|
+
"admin.absenceTypes.add": "Ajouter un type",
|
|
376
|
+
"admin.absenceTypes.edit": "Modifier",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Modifier le type",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Nouveau type",
|
|
379
|
+
"admin.absenceTypes.empty": "Aucun type d'absence défini.",
|
|
380
|
+
"admin.absenceTypes.note": "Les absences existantes gardent leur type — un libellé modifié apparaît aussitôt partout."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/it.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Salva regole",
|
|
363
363
|
"admin.automation.edit": "Modifica",
|
|
364
364
|
"admin.automation.editTitle": "Modifica regola",
|
|
365
|
-
"admin.automation.newTitle": "Nuova regola"
|
|
365
|
+
"admin.automation.newTitle": "Nuova regola",
|
|
366
|
+
"absences.vacationTag": "ferie",
|
|
367
|
+
"admin.absenceTypes.title": "Tipi di assenza",
|
|
368
|
+
"admin.absenceTypes.hint": "Codice, denominazione ed effetto delle assenze. «Ferie» contrassegna il tipo che consuma il diritto alle ferie.",
|
|
369
|
+
"admin.absenceTypes.code": "Codice",
|
|
370
|
+
"admin.absenceTypes.name": "Denominazione",
|
|
371
|
+
"admin.absenceTypes.paid": "Pagato",
|
|
372
|
+
"admin.absenceTypes.factor": "Fattore (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Riduce le ferie",
|
|
374
|
+
"admin.absenceTypes.active": "Attivo",
|
|
375
|
+
"admin.absenceTypes.add": "Aggiungi tipo",
|
|
376
|
+
"admin.absenceTypes.edit": "Modifica",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Modifica tipo",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Nuovo tipo",
|
|
379
|
+
"admin.absenceTypes.empty": "Nessun tipo di assenza definito.",
|
|
380
|
+
"admin.absenceTypes.note": "Le assenze esistenti mantengono il loro tipo — una denominazione modificata appare subito ovunque."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/nl.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Regels opslaan",
|
|
363
363
|
"admin.automation.edit": "Bewerken",
|
|
364
364
|
"admin.automation.editTitle": "Regel bewerken",
|
|
365
|
-
"admin.automation.newTitle": "Nieuwe regel"
|
|
365
|
+
"admin.automation.newTitle": "Nieuwe regel",
|
|
366
|
+
"absences.vacationTag": "vakantie",
|
|
367
|
+
"admin.absenceTypes.title": "Afwezigheidstypes",
|
|
368
|
+
"admin.absenceTypes.hint": "Code, naam en werking van de afwezigheden. “Vakantie” markeert het type dat het vakantietegoed opgebruikt.",
|
|
369
|
+
"admin.absenceTypes.code": "Afkorting",
|
|
370
|
+
"admin.absenceTypes.name": "Naam",
|
|
371
|
+
"admin.absenceTypes.paid": "Betaald",
|
|
372
|
+
"admin.absenceTypes.factor": "Rekenfactor (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Verlaagt vakantie",
|
|
374
|
+
"admin.absenceTypes.active": "Actief",
|
|
375
|
+
"admin.absenceTypes.add": "Type toevoegen",
|
|
376
|
+
"admin.absenceTypes.edit": "Bewerken",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Type bewerken",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Nieuw type",
|
|
379
|
+
"admin.absenceTypes.empty": "Nog geen afwezigheidstype.",
|
|
380
|
+
"admin.absenceTypes.note": "Bestaande afwezigheden houden hun type — een gewijzigde naam is direct overal zichtbaar."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/pl.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Zapisz reguły",
|
|
363
363
|
"admin.automation.edit": "Edytuj",
|
|
364
364
|
"admin.automation.editTitle": "Edytuj regułę",
|
|
365
|
-
"admin.automation.newTitle": "Nowa reguła"
|
|
365
|
+
"admin.automation.newTitle": "Nowa reguła",
|
|
366
|
+
"absences.vacationTag": "urlop",
|
|
367
|
+
"admin.absenceTypes.title": "Rodzaje nieobecności",
|
|
368
|
+
"admin.absenceTypes.hint": "Kod, nazwa i działanie nieobecności. „Urlop” oznacza rodzaj, który zużywa limit urlopu.",
|
|
369
|
+
"admin.absenceTypes.code": "Kod",
|
|
370
|
+
"admin.absenceTypes.name": "Nazwa",
|
|
371
|
+
"admin.absenceTypes.paid": "Płatne",
|
|
372
|
+
"admin.absenceTypes.factor": "Współczynnik (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Zmniejsza urlop",
|
|
374
|
+
"admin.absenceTypes.active": "Aktywne",
|
|
375
|
+
"admin.absenceTypes.add": "Dodaj rodzaj",
|
|
376
|
+
"admin.absenceTypes.edit": "Edytuj",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Edytuj rodzaj",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Nowy rodzaj",
|
|
379
|
+
"admin.absenceTypes.empty": "Nie zdefiniowano rodzajów nieobecności.",
|
|
380
|
+
"admin.absenceTypes.note": "Istniejące nieobecności zachowują swój rodzaj — zmieniona nazwa jest od razu widoczna wszędzie."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/pt.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Guardar regras",
|
|
363
363
|
"admin.automation.edit": "Editar",
|
|
364
364
|
"admin.automation.editTitle": "Editar regra",
|
|
365
|
-
"admin.automation.newTitle": "Nova regra"
|
|
365
|
+
"admin.automation.newTitle": "Nova regra",
|
|
366
|
+
"absences.vacationTag": "férias",
|
|
367
|
+
"admin.absenceTypes.title": "Tipos de ausência",
|
|
368
|
+
"admin.absenceTypes.hint": "Código, designação e efeito das ausências. «Férias» marca o tipo que consome o direito a férias.",
|
|
369
|
+
"admin.absenceTypes.code": "Código",
|
|
370
|
+
"admin.absenceTypes.name": "Designação",
|
|
371
|
+
"admin.absenceTypes.paid": "Pago",
|
|
372
|
+
"admin.absenceTypes.factor": "Fator (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Reduz as férias",
|
|
374
|
+
"admin.absenceTypes.active": "Ativo",
|
|
375
|
+
"admin.absenceTypes.add": "Adicionar tipo",
|
|
376
|
+
"admin.absenceTypes.edit": "Editar",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Editar tipo",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Novo tipo",
|
|
379
|
+
"admin.absenceTypes.empty": "Nenhum tipo de ausência definido.",
|
|
380
|
+
"admin.absenceTypes.note": "As ausências existentes mantêm o seu tipo — uma designação alterada aparece logo em toda a interface."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/ru.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Сохранить правила",
|
|
363
363
|
"admin.automation.edit": "Изменить",
|
|
364
364
|
"admin.automation.editTitle": "Изменить правило",
|
|
365
|
-
"admin.automation.newTitle": "Новое правило"
|
|
365
|
+
"admin.automation.newTitle": "Новое правило",
|
|
366
|
+
"absences.vacationTag": "отпуск",
|
|
367
|
+
"admin.absenceTypes.title": "Виды отсутствия",
|
|
368
|
+
"admin.absenceTypes.hint": "Код, название и действие отсутствий. «Отпуск» отмечает вид, который расходует отпускной лимит.",
|
|
369
|
+
"admin.absenceTypes.code": "Код",
|
|
370
|
+
"admin.absenceTypes.name": "Название",
|
|
371
|
+
"admin.absenceTypes.paid": "Оплачивается",
|
|
372
|
+
"admin.absenceTypes.factor": "Коэффициент (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Уменьшает отпуск",
|
|
374
|
+
"admin.absenceTypes.active": "Активно",
|
|
375
|
+
"admin.absenceTypes.add": "Добавить вид",
|
|
376
|
+
"admin.absenceTypes.edit": "Изменить",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Изменить вид",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Новый вид",
|
|
379
|
+
"admin.absenceTypes.empty": "Виды отсутствия не заданы.",
|
|
380
|
+
"admin.absenceTypes.note": "Существующие отсутствия сохраняют свой вид — изменённое название сразу видно везде."
|
|
366
381
|
}
|
package/src-pwa/src/i18n/uk.json
CHANGED
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "Зберегти правила",
|
|
363
363
|
"admin.automation.edit": "Змінити",
|
|
364
364
|
"admin.automation.editTitle": "Змінити правило",
|
|
365
|
-
"admin.automation.newTitle": "Нове правило"
|
|
365
|
+
"admin.automation.newTitle": "Нове правило",
|
|
366
|
+
"absences.vacationTag": "відпустка",
|
|
367
|
+
"admin.absenceTypes.title": "Види відсутності",
|
|
368
|
+
"admin.absenceTypes.hint": "Код, назва та дія відсутностей. «Відпустка» позначає вид, що витрачає ліміт відпустки.",
|
|
369
|
+
"admin.absenceTypes.code": "Код",
|
|
370
|
+
"admin.absenceTypes.name": "Назва",
|
|
371
|
+
"admin.absenceTypes.paid": "Оплачується",
|
|
372
|
+
"admin.absenceTypes.factor": "Коефіцієнт (%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "Зменшує відпустку",
|
|
374
|
+
"admin.absenceTypes.active": "Активно",
|
|
375
|
+
"admin.absenceTypes.add": "Додати вид",
|
|
376
|
+
"admin.absenceTypes.edit": "Змінити",
|
|
377
|
+
"admin.absenceTypes.editTitle": "Змінити вид",
|
|
378
|
+
"admin.absenceTypes.newTitle": "Новий вид",
|
|
379
|
+
"admin.absenceTypes.empty": "Види відсутності не задані.",
|
|
380
|
+
"admin.absenceTypes.note": "Наявні відсутності зберігають свій вид — змінена назва одразу видно всюди."
|
|
366
381
|
}
|
|
@@ -362,5 +362,20 @@
|
|
|
362
362
|
"admin.automation.save": "保存规则",
|
|
363
363
|
"admin.automation.edit": "编辑",
|
|
364
364
|
"admin.automation.editTitle": "编辑规则",
|
|
365
|
-
"admin.automation.newTitle": "新规则"
|
|
365
|
+
"admin.automation.newTitle": "新规则",
|
|
366
|
+
"absences.vacationTag": "休假",
|
|
367
|
+
"admin.absenceTypes.title": "缺勤类型",
|
|
368
|
+
"admin.absenceTypes.hint": "缺勤的代号、名称与作用。「休假」标记会消耗休假额度的类型。",
|
|
369
|
+
"admin.absenceTypes.code": "代号",
|
|
370
|
+
"admin.absenceTypes.name": "名称",
|
|
371
|
+
"admin.absenceTypes.paid": "带薪",
|
|
372
|
+
"admin.absenceTypes.factor": "系数(%)",
|
|
373
|
+
"admin.absenceTypes.reduceVacation": "扣减休假",
|
|
374
|
+
"admin.absenceTypes.active": "启用",
|
|
375
|
+
"admin.absenceTypes.add": "添加类型",
|
|
376
|
+
"admin.absenceTypes.edit": "编辑",
|
|
377
|
+
"admin.absenceTypes.editTitle": "编辑类型",
|
|
378
|
+
"admin.absenceTypes.newTitle": "新类型",
|
|
379
|
+
"admin.absenceTypes.empty": "尚未定义缺勤类型。",
|
|
380
|
+
"admin.absenceTypes.note": "已有的缺勤保留其类型 —— 修改后的名称会立即在全界面显示。"
|
|
366
381
|
}
|