diff --git a/docs/superpowers/mockups/2026-06-09-planning-day-cell-mockup.html b/docs/superpowers/mockups/2026-06-09-planning-day-cell-mockup.html new file mode 100644 index 00000000..352cd5eb --- /dev/null +++ b/docs/superpowers/mockups/2026-06-09-planning-day-cell-mockup.html @@ -0,0 +1,297 @@ + + + + + +Planning day-cell — redesign mockup + + + + + + + + + + + + +

Planning day-cell — redesign mockup

+

+ Re-style of the existing #dayColumnTemplate cell. All current rows are kept; + only the presentation changes: every duration value renders as + X t Y min (Z.ZZ timer). Time-of-day stamps stay HH:mm (no seconds). + Icons shown in the thin Material Symbols Outlined style to match your image. +

+ +
+ + +
+
A · matches your image
+
+
I dag
+
+
+
+
+ login + 09:19 - 09:28 + logout +
+
+ login + 09:31 - 09:39 + logout +
+
+ pause + 0 t 3 min (0.05 timer) +
+
+ schedule + 0 t 9 min (0.22 timer) +
+
+ swap_vert + 0 t 9 min (0.22 timer) +
+
+
+
+
+
Same content as your screenshot, but times shown as HH:mm per your choice + (image had seconds).
+
+ + +
+
B · full cell (all rows kept)
+
+
Man. 8. jun.
+
+
+
+
+ calendar_month + 07:00 - 15:00 · 0 t 30 min +
+
+
+ login + 06:58 - 15:03 + logout +
+
+ pause + 0 t 30 min (0.50 timer) +
+
+ schedule + 7 t 35 min (7.58 timer) +
+
+ payments + 2 t 0 min (2.00 timer) +
+
+ swap_vert + 1 t 5 min (1.08 timer) +
+
+
+
+
+
Planned row keeps its time range (HH:mm) and reformats the break duration. + Paid-out flex (payments) and flex balance both use the new format.
+
+ + +
+
C · negative flex
+
+
Fre. 5. jun.
+
+
+
+
+ login + 07:02 - 14:30 + logout +
+
+ pause + 0 t 30 min (0.50 timer) +
+
+ schedule + 6 t 58 min (6.97 timer) +
+
+ swap_vert + -0 t 32 min (-0.53 timer) +
+
+
+
+
+
Open question: how to render a negative duration — shown here as + -0 t 32 min (-0.53 timer) in red.
+
+ +
+ +
+

Format rules in this mockup

+ + + + + + + +
Duration rowsX t Y min (Z.ZZ timer) — hours part always shown, decimal hours to 2 places. Labels t / min / timer are translatable.
Full formatactual pause, worked/net hours, flex balance, paid-out flex.
X t Y min only (no decimal)planned pause/break & planned plan-hours.
Time stampsActual start/stop and planned start/end stay HH:mm (no seconds).
Iconslogin / logout (shift), pause, schedule (worked), swap_vert (flex), calendar_month (planned), payments (paid-out flex) — Material Symbols Outlined, thin.
Cell colourExisting green-background (#D4EDDA) for completed days — unchanged logic.
+
+ + + diff --git a/docs/superpowers/plans/2026-06-09-planning-day-cell-presentation.md b/docs/superpowers/plans/2026-06-09-planning-day-cell-presentation.md new file mode 100644 index 00000000..f2ba4175 --- /dev/null +++ b/docs/superpowers/plans/2026-06-09-planning-day-cell-presentation.md @@ -0,0 +1,369 @@ +# Planning Day-Cell Presentation Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Re-style the planning day-cell so every duration renders as `X t Y min (Z.ZZ timer)` (planned pause/plan-hours without the decimal), times stay HH:mm, and all cell icons use the thin Material Symbols Outlined style. + +**Architecture:** Presentation-only change in the existing `#dayColumnTemplate` of `time-plannings-table.component`. One pure formatter method on the component does all duration formatting; the template rebinds the duration rows to it and adds `fontSet="material-symbols-outlined"` to every cell icon; three translatable labels (`t`/`min`/`timer`) are added to the module i18n dicts. No model, data-flow, cell-colour, or SCSS changes. + +**Tech Stack:** Angular, `@ngx-translate/core`, Angular Material `mat-icon` (Material Symbols Outlined font, already loaded in `index.html`), Jasmine/Karma unit tests (CI `angular-unit-test`). + +**Dev mode:** Base dev mode — edit in the host-app mirror +`/home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client/src/app/plugins/modules/time-planning-pn/`, +then `devgetchanges.sh` back to the source plugin repo for committing. Do NOT touch +`eform-angular-frontend/eform-client/src/scss` (no SCSS change in this plan). + +**Spec:** `docs/superpowers/specs/2026-06-09-planning-day-cell-presentation-design.md` +**Mockup:** `docs/superpowers/mockups/2026-06-09-planning-day-cell-mockup.html` + +**Key files (host-app mirror):** +- TS: `components/plannings/time-plannings-table/time-plannings-table.component.ts` +- HTML: `components/plannings/time-plannings-table/time-plannings-table.component.html` (`#dayColumnTemplate`, lines ~139–335) +- Spec: `components/plannings/time-plannings-table/time-plannings-table.component.spec.ts` (exists) +- i18n: `i18n/*.ts` (26 locale dicts) + +--- + +## Task 1: Add the `formatDuration` formatter (TDD) + +**Files:** +- Modify: `…/time-plannings-table.component.ts` (add method beside `convertHoursToTime`, ~line 446) +- Test: `…/time-plannings-table.component.spec.ts` + +The formatter takes a decimal-hours value (or numeric string, e.g. paid-out flex) and returns +`X t Y min (Z.ZZ timer)`, or `X t Y min` when `withDecimal` is false. Both the h/min part and +the decimal part derive from the same rounded total-minutes so they are always consistent. +Labels come from `translateService.instant('t' | 'min' | 'timer')`. + +- [ ] **Step 1: Write the failing unit tests** + +Add to `time-plannings-table.component.spec.ts`. This reuses the spec's existing component +setup; it spies on `translateService.instant` so labels resolve to `t`/`min`/`timer` +regardless of the test's configured language. + +```ts +describe('formatDuration', () => { + beforeEach(() => { + // component + translateService are created by the existing spec setup (TestBed). + spyOn(component['translateService'], 'instant').and.callFake((key: string) => key); + }); + + it('formats a sub-hour duration with decimal', () => { + expect(component.formatDuration(3 / 60)).toBe('0 t 3 min (0.05 timer)'); + }); + + it('formats hours + minutes with decimal', () => { + expect(component.formatDuration(7.58)).toBe('7 t 35 min (7.58 timer)'); + }); + + it('shows a whole-hour value with zero minutes', () => { + expect(component.formatDuration(2)).toBe('2 t 0 min (2.00 timer)'); + }); + + it('formats a negative duration with a leading minus on both parts', () => { + expect(component.formatDuration(-0.53)).toBe('-0 t 32 min (-0.53 timer)'); + }); + + it('omits the decimal part when withDecimal is false', () => { + expect(component.formatDuration(30 / 60, false)).toBe('0 t 30 min'); + }); + + it('renders zero as a non-negative zero', () => { + expect(component.formatDuration(0)).toBe('0 t 0 min (0.00 timer)'); + expect(component.formatDuration(-0.0001)).toBe('0 t 0 min (0.00 timer)'); + }); + + it('carries rounding into the hour', () => { + expect(component.formatDuration(0.999)).toBe('1 t 0 min (1.00 timer)'); + }); + + it('parses a numeric string (paid-out flex) and handles comma decimals', () => { + expect(component.formatDuration('2,00')).toBe('2 t 0 min (2.00 timer)'); + }); + + it('treats null/NaN as zero', () => { + expect(component.formatDuration(null as any)).toBe('0 t 0 min (0.00 timer)'); + }); +}); +``` + +- [ ] **Step 2: Run the tests to verify they fail** + +Run: `cd /home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client && npx ng test --watch=false --include='**/time-plannings-table/time-plannings-table.component.spec.ts'` +Expected: FAIL — `component.formatDuration is not a function`. + +> If that `--include` glob isn't supported by the project's test runner, run the project's +> standard unit-test command (check `package.json` scripts, e.g. `yarn test` / `npm test`) +> and locate the `formatDuration` describe in the output. Do not change the runner config. + +- [ ] **Step 3: Implement `formatDuration`** + +Add to `time-plannings-table.component.ts` (right after `convertHoursToTime`, ~line 446): + +```ts + /** + * Formats a decimal-hours value as "X t Y min (Z.ZZ timer)". + * Both parts derive from the same rounded total-minutes, so they are always + * internally consistent. When withDecimal is false the "(Z.ZZ timer)" part is + * omitted (used for planned pause/break and planned plan-hours). + * Accepts a number or a numeric string (paid-out flex may use a comma decimal). + */ + formatDuration(hours: number | string | null | undefined, withDecimal: boolean = true): string { + const parsed = typeof hours === 'string' + ? parseFloat(hours.replace(',', '.')) + : hours; + const safe = (parsed === null || parsed === undefined || isNaN(parsed as number)) + ? 0 + : Number(parsed); + + const totalMinutes = Math.round(Math.abs(safe) * 60); + const negative = safe < 0 && totalMinutes > 0; + const hrs = Math.floor(totalMinutes / 60); + const mins = totalMinutes % 60; + const sign = negative ? '-' : ''; + + const t = this.translateService.instant('t'); + const min = this.translateService.instant('min'); + const base = `${sign}${hrs} ${t} ${mins} ${min}`; + if (!withDecimal) { + return base; + } + const timer = this.translateService.instant('timer'); + const decimal = (totalMinutes / 60).toFixed(2); + return `${base} (${sign}${decimal} ${timer})`; + } +``` + +- [ ] **Step 4: Run the tests to verify they pass** + +Run: `cd /home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client && npx ng test --watch=false --include='**/time-plannings-table/time-plannings-table.component.spec.ts'` +Expected: PASS (all `formatDuration` specs green). + +- [ ] **Step 5: Do not commit** (base dev mode — changes are synced + committed once at the end, Task 5). + +--- + +## Task 2: Rebind the duration rows in the template + +**Files:** +- Modify: `…/time-plannings-table.component.html` (`#dayColumnTemplate`) + +Replace each duration binding. Time-range bindings (`convertMinutesToTime` for planned +start/end, `formatStamp`/`getStopTimeDisplayWithSeconds` for actual stamps) stay unchanged. + +- [ ] **Step 1: Planned shift-1 break → no-decimal format (two blocks)** + +There are two near-identical shift-1 planned blocks (the `plannedStartOfShift1 !== 0` block and +the `plannedStartOfShift1 === 0 && plannedEndOfShift1 !== 0` block). In BOTH, the third line is: + +```html + {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift1) }} +``` + +Change that line (in both blocks) to: + +```html + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift1 / 60, false) }} +``` + +- [ ] **Step 2: Planned plan-hours-only → no-decimal format** + +In the `planHours !== 0` block, change: + +```html + {{ convertHoursToTime(row.planningPrDayModels[col.field]?.planHours) }} +``` +to: +```html + {{ formatDuration(row.planningPrDayModels[col.field]?.planHours, false) }} +``` + +- [ ] **Step 3: Planned shift 2–5 breaks → no-decimal format** + +For each of shifts 2,3,4,5 the planned block's third line is: +```html + {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShiftN) }} +``` +Change each (N = 2,3,4,5) to: +```html + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShiftN / 60, false) }} +``` + +- [ ] **Step 4: Pause total → full format** + +Change: +```html +pause{{ convertMinutesToTime(row.planningPrDayModels[col.field]?.pauseMinutes) }} +``` +to: +```html +pause{{ formatDuration(row.planningPrDayModels[col.field]?.pauseMinutes / 60) }} +``` + +- [ ] **Step 5: Worked hours + netto override → full format** + +Change `{{ row.planningPrDayModels[col.field]?.actualHours.toFixed(2) }}` to +`{{ formatDuration(row.planningPrDayModels[col.field]?.actualHours) }}`, +and `{{ row.planningPrDayModels[col.field]?.nettoHoursOverride.toFixed(2) }}` to +`{{ formatDuration(row.planningPrDayModels[col.field]?.nettoHoursOverride) }}`. + +- [ ] **Step 6: Paid-out flex → full format** + +Change `{{ row.planningPrDayModels[col.field]?.paidOutFlex }}` to +`{{ formatDuration(row.planningPrDayModels[col.field]?.paidOutFlex) }}`. + +- [ ] **Step 7: Flex balance → full format + red when negative** + +Change: +```html +swap_vert{{ normalizeFlex(row.planningPrDayModels[col.field]?.sumFlexEnd) }} +``` +to: +```html +swap_vert{{ formatDuration(row.planningPrDayModels[col.field]?.sumFlexEnd) }} +``` +(`.red-text` already exists in the global stylesheet — no SCSS change.) + +- [ ] **Step 8: Build to verify the template compiles** + +Run: `cd /home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client && npx ng build --configuration development 2>&1 | tail -20` +Expected: build succeeds (no template/AOT errors). (If the project uses a custom build script, prefer `yarn build` per `package.json`.) + +--- + +## Task 3: Switch all cell icons to Material Symbols Outlined + +**Files:** +- Modify: `…/time-plannings-table.component.html` (`#dayColumnTemplate`) + +Add `fontSet="material-symbols-outlined"` to every `` inside `#dayColumnTemplate` +that does not already have it. The Material Symbols Outlined font is already loaded globally +(`index.html`); `clock_arrow_down` (message === 11) already uses it. Keep all existing classes +(`neutral-icon`, `blue-text`, `red-text`) and tooltips. + +- [ ] **Step 1: Add fontSet to the left-content icons** + +For each of these glyphs in the left `.plan-content` (planned `calendar_month`; actual +`login`, `logout`, `warning`; summary `pause`, `schedule`, `payments`, `swap_vert`; comments +`face`, `gite`), add `fontSet="material-symbols-outlined"` to the `` tag, e.g.: + +```html +login +``` + +Apply the same to: `calendar_month` (all planned blocks), `login`/`logout`/`warning` (all five +actual-shift blocks), `pause`, `schedule` (both override branches), `payments`, `swap_vert`, +`face`, `gite`. + +- [ ] **Step 2: Add fontSet to the right-column absence icons** + +In `.plan-icons`, add `fontSet="material-symbols-outlined"` to the message icons that lack it: +`flight` (2), `pregnant_woman` (10), `sick` (3/7/8), `event_busy` (1 and 5), `school` (4), +`outdoor_grill` (9), `luggage` (12). (`clock_arrow_down` for message 11 already has it.) + +- [ ] **Step 3: Build, then visually verify the glyphs render** + +Run: `cd /home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client && npx ng build --configuration development 2>&1 | tail -20` +Expected: build succeeds. + +Visual check (Task 5 / browser): every icon must render as a glyph, not as literal text. If any +glyph name does not exist in Material Symbols Outlined (it would show as a word), revert that one +icon to its default font (remove `fontSet`) and note it. (`calendar_month`, `login`, `logout`, +`warning`, `pause`, `schedule`, `payments`, `swap_vert`, `face`, `gite`, `flight`, +`pregnant_woman`, `sick`, `event_busy`, `school`, `outdoor_grill`, `luggage` all exist in +Material Symbols Outlined, so this should not be needed.) + +--- + +## Task 4: Add `t` / `min` / `timer` translation keys + +**Files:** +- Modify: all 26 dicts in `…/time-planning-pn/i18n/*.ts` + +Add three keys to each locale dict. Insert them next to existing entries (anywhere in the +object literal). The Danish and English values are confirmed; the other locales use English +fallback values (`h` / `min` / `hrs`) as an interim — flag them for native review. + +- [ ] **Step 1: Danish — `i18n/da.ts`** + +```ts + t: 't', + min: 'min', + timer: 'timer', +``` + +- [ ] **Step 2: English — `i18n/enUS.ts`** + +```ts + t: 'h', + min: 'min', + timer: 'hrs', +``` + +- [ ] **Step 3: All other locales — interim English fallback** + +Add the same three keys to each of: `bgBG.ts, csCZ.ts, deDE.ts, elGR.ts, esES.ts, etET.ts, +fiFI.ts, frFR.ts, hrHR.ts, huHU.ts, isIS.ts, itIT.ts, ltLT.ts, lvLV.ts, nlNL.ts, noNO.ts, +plPL.ts, ptBR.ts, ptPT.ts, roRO.ts, skSK.ts, slSL.ts, svSE.ts, ukUA.ts` using: + +```ts + t: 'h', + min: 'min', + timer: 'hrs', +``` + +> These 24 are interim English fallbacks pending native-speaker review (so no raw key like +> `timer` is ever displayed). Note this in the PR description. + +- [ ] **Step 4: Build to verify the dicts compile** + +Run: `cd /home/rene/Documents/workspace/microting/eform-angular-frontend/eform-client && npx ng build --configuration development 2>&1 | tail -20` +Expected: build succeeds (no TS errors in the i18n files). + +--- + +## Task 5: Verify, code-review, and ship (normal cycle) + +- [ ] **Step 1: Unit tests pass** + +Run the unit tests for the component spec (as in Task 1 Step 4). Expected: all `formatDuration` +specs pass and no existing specs in that file regress. + +- [ ] **Step 2: Visual check in the running app** + +Open `/plugins/time-planning-pn/planning`, select a worker + a past date range, and confirm a +completed day matches the mockup: durations show `X t Y min (Z.ZZ timer)` (planned break/plan-hours +show `X t Y min` only), times are still HH:mm, icons are thin/outlined, and a negative flex shows +red. Confirm no icon renders as literal text. + +- [ ] **Step 3: Code review** + +Use `superpowers:requesting-code-review` on the diff (component TS + HTML + i18n + spec). + +- [ ] **Step 4: Sync to source repo** + +From the source plugin repo `/home/rene/Documents/workspace/microting/eform-angular-timeplanning-plugin`: +run `./devgetchanges.sh`, then `git checkout -- '*.csproj' '*.conf.ts' '*.xlsx' '*.docx'` (discard +dev-mode/build artifacts), then `git status`. Confirm only the intended files changed: +`components/plannings/time-plannings-table/time-plannings-table.component.{ts,html,spec.ts}` +and `i18n/*.ts` (under `eform-client/src/app/plugins/modules/time-planning-pn/`). `git checkout` +any unintended files (e.g. unrelated frontend module copies). Confirm NO `src/scss` changes are +present (this plan makes none). + +- [ ] **Step 5: Branch, commit, push, PR, watch CI** + +Create `feat/planning-day-cell-presentation` off `stable`, stage only the intended files by name, +commit (end message with the `Co-Authored-By: Claude Opus 4.8 ` trailer), +push, and open a PR toward `stable`. Watch CI to green (`angular-unit-test`, build, dotnet shards, +playwright). Note: this change is display-only and does not touch the Excel export, so the export +parity playwright test is unaffected. Fix any genuine failures; treat unrelated flaky playwright +shards as flaky (re-run). + +--- + +## Self-Review + +- **Spec coverage:** duration format (Task 1) ✓; full vs no-decimal rows — pause/worked/paid-out/flex full (Task 2 Steps 4–7), planned break/plan-hours no-decimal (Task 2 Steps 1–3) ✓; negative red (Task 2 Step 7) ✓; times stay HH:mm (untouched) ✓; all icons outlined (Task 3) ✓; decimal same colour (no special styling — inherits row colour) ✓; translatable labels da+en exact, others fallback (Task 4) ✓; both parts from same value (formatter uses one `totalMinutes`) ✓. +- **Placeholder scan:** none — every step has concrete code/commands. +- **Type/name consistency:** `formatDuration(hours, withDecimal=true)` signature is identical across Task 1 (definition) and all Task 2 call sites; `.red-text` and `material-symbols-outlined` match existing usages in the file. +- **Cross-repo note:** SCSS intentionally untouched to keep this a single plugin-repo PR; icon weight relies on the default Material Symbols Outlined rendering (matches "outlined"; if the user later wants it thinner, that's a follow-up, possibly in the core `eform-angular-frontend` SCSS repo). diff --git a/docs/superpowers/specs/2026-06-09-planning-day-cell-presentation-design.md b/docs/superpowers/specs/2026-06-09-planning-day-cell-presentation-design.md new file mode 100644 index 00000000..67643471 --- /dev/null +++ b/docs/superpowers/specs/2026-06-09-planning-day-cell-presentation-design.md @@ -0,0 +1,164 @@ +# Design: Planning day-cell presentation (duration formatting + thin icons) + +**Date:** 2026-06-09 +**Plugin:** eform-angular-timeplanning-plugin (Angular frontend) +**Dev mode:** Base dev mode — edit in the `eform-angular-frontend` host-app mirror, then +`devgetchanges.sh` back to the source repo. SCSS is centralized in `eform-angular-frontend`. +**Mockup:** `docs/superpowers/mockups/2026-06-09-planning-day-cell-mockup.html` + +## Summary + +Re-style the presentation of a single day cell in the planning view +(`/plugins/time-planning-pn/planning`) to match a target mockup. This is a +**presentation-only** change: all existing rows are kept, the cell colouring logic is +unchanged, and no data/model changes are made. Two things change: + +1. Every **duration value** renders as `X t Y min (Z.ZZ timer)` (Danish: `t`=hours, + `min`=minutes, `timer`=hours), instead of bare decimals (`9.00`) or `HH:mm`. + The **planned** pause/break and planned plan-hours render as `X t Y min` **without** + the `(Z.ZZ timer)` decimal part. +2. The cell icons switch to the thin **Material Symbols Outlined** style to match the + image. + +Time-of-day stamps (actual start/stop, planned start/end) **stay `HH:mm`** — no seconds. + +## Target & current state + +The cell is the existing `#dayColumnTemplate` in +`eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.html` +(~lines 139–335), driven by `time-plannings-table.component.ts` and styled by the global +`eform-client/src/scss/styles.scss` (`.green-background`, `.plan-container`, `.neutral-icon`, …). + +Current rows (all KEPT): planned shift(s), actual shift stamps, pause total, worked/net +hours, paid-out flex, flex balance, comments, and absence icons in the right column. + +## Decisions (from brainstorming) + +| # | Decision | +|---|----------| +| 1 | **Keep all rows.** Presentation only; cell colour logic (`getCellClass`) unchanged. | +| 2 | **Times stay `HH:mm`** (no seconds) for both actual stamps and planned ranges. | +| 3 | **Duration format** = `X t Y min (Z.ZZ timer)`: hours part always shown (`0 t 3 min`), decimal hours to **2 places** with the word `timer`. | +| 4 | **Both parts derive from the same underlying value**, so they are always internally consistent. (The sample image's parts disagree numerically — that is unrelated dummy data and is **not** replicated.) | +| 5 | **Full format** (`X t Y min (Z.ZZ timer)`) applies to: **actual pause total, worked/net hours, flex balance, paid-out flex.** | +| 6 | **`X t Y min` only** (no decimal) applies to: **planned pause/break, planned plan-hours.** | +| 7 | **Negative** values render `-X t Y min (-Z.ZZ timer)` and are coloured **red**. | +| 8 | **Icons** switch to **Material Symbols Outlined**, thin weight (matches the image). | +| 9 | The decimal part renders in the **same colour** as the rest of the row (not greyed). | +| 10 | Labels `t` / `min` / `timer` are **translatable** (ngx-translate, per-locale dicts). | + +## Format specification + +A single pure formatter converts a **decimal-hours** value into the display string. + +``` +formatHoursDuration(hours, withDecimal): + negative = hours < 0 + abs = |hours| + h = floor(abs) + m = round((abs - h) * 60) + if m == 60: m = 0; h = h + 1 # rounding carry + sign = negative ? "-" : "" + base = `${sign}${h} ${t} ${m} ${min}` # e.g. "-0 t 32 min" + if withDecimal: + dec = `(${sign}${abs.toFixed(2)} ${timer})` # e.g. "(-0.53 timer)" + return `${base} ${dec}` + return base +``` + +- `t`, `min`, `timer` come from `translateService.instant('t' | 'min' | 'timer')`. +- **Pause** is stored in minutes (`pauseMinutes`) and **planned break** in minutes + (`plannedBreakOfShiftN`); callers convert to hours (`minutes / 60`) before formatting, + so both parts stay consistent (3 min → `0 t 3 min (0.05 timer)`). +- Worked hours = `nettoHoursOverrideActive ? nettoHoursOverride : actualHours`. +- Flex balance = `sumFlexEnd`; paid-out flex = `paidOutFlex` (parse to number). + +### Worked examples (for tests) +| Input (hours) | withDecimal | Output | +|---|---|---| +| `3/60` (pause 3 min) | yes | `0 t 3 min (0.05 timer)` | +| `7.58` | yes | `7 t 35 min (7.58 timer)` | +| `2.0` | yes | `2 t 0 min (2.00 timer)` | +| `-0.53` | yes | `-0 t 32 min (-0.53 timer)` | +| `30/60` (planned break) | no | `0 t 30 min` | +| `0` | yes | `0 t 0 min (0.00 timer)` | +| `0.999` | yes | `1 t 0 min (1.00 timer)` (rounding carry) | + +## Architecture & files + +Small, focused change across four units. No new components. + +**1. `time-plannings-table.component.ts`** — add formatter method(s) beside the existing +`convertHoursToTime*` converters (the established convention is component methods, not a +pipe — there is no `pipes/` dir in the module): +- `formatHoursDuration(hours: number, withDecimal: boolean): string` (the spec above). +- Thin convenience wrappers if helpful: `formatDurationFull(hours)` and + `formatDurationShort(hours)`. +- A predicate the template already can use: a value `< 0` triggers the red class. + +**2. `time-plannings-table.component.html`** (`#dayColumnTemplate`) — bindings only: +- Actual **pause** row → `formatDurationFull(pauseMinutes / 60)`. +- **Worked/net** row → `formatDurationFull(actualHours)` / override branch + `formatDurationFull(nettoHoursOverride)`. +- **Paid-out flex** row → `formatDurationFull(+paidOutFlex)`. +- **Flex balance** row → `formatDurationFull(sumFlexEnd)`, plus `[class.red-text]="sumFlexEnd < 0"`. +- **Planned break** (within planned rows) → `formatDurationShort(plannedBreakOfShiftN / 60)`. +- **Plan-hours-only** variant → `formatDurationShort(planHours)`. +- Time ranges unchanged (`formatStamp` / `getStopTimeDisplayWithSeconds`, planned + `convertMinutesToTime` for start/end). +- Add `fontSet="material-symbols-outlined"` to the cell's icons: `calendar_month`, + `login`, `logout`, `pause`, `schedule`, `payments`, `swap_vert` (and `warning`, `face`, + `gite`, and the absence icons, for a consistent thin look). Keep the `neutral-icon` class. + +**3. `eform-client/src/scss/styles.scss`** (central) — minimal: +- Ensure Material Symbols Outlined renders at the same size as the current icons + (the existing `.neutral-icon` is `font-size:20px; font-weight:200`; Material Symbols is a + variable font so weight 200 already gives the thin look). Add + `font-variation-settings: 'FILL' 0, 'wght' 300, 'opsz' 20;` to `.neutral-icon` (or a + scoped class) if needed so the outlined glyphs match the mockup weight. +- Reuse existing `.red-text` for negative durations — likely no new rule needed. + +**4. i18n** — add `t`, `min`, `timer` keys to every locale dict under +`eform-client/src/app/plugins/modules/time-planning-pn/i18n/*.ts`: +- `da.ts`: `t: 't'`, `min: 'min'`, `timer: 'timer'`. +- `enUS.ts`: `t: 'h'`, `min: 'min'`, `timer: 'hrs'` (English wording — confirm at review). +- Other locales: sensible equivalents (fall back to the da/en wording where unsure; + flag low-confidence ones). + +## Data flow + +Unchanged. The cell still binds `row.planningPrDayModels[col.field]` (`PlanningPrDayModel`). +All values needed (`pauseMinutes`, `actualHours`, `nettoHoursOverride[Active]`, `sumFlexEnd`, +`paidOutFlex`, `plannedBreakOfShift1..5`, `planHours`) already exist on the model. Only the +**rendering** of these values changes. + +## Edge cases + +- **Rounding carry**: `m == 60` after rounding carries into the hour (see formatter). +- **Negative zero**: `-0.00` must show as `0 t 0 min (0.00 timer)` (not `-0…`); guard + `hours === 0` (and the existing `normalizeFlex` `-0.00`→`0.00` behaviour informs this). +- **Paid-out flex** is a string on the model → parse with `parseFloat` (handle `,`/`.` and + empty → 0), mirroring existing handling. +- **`useOneMinuteIntervals`** does not affect this change — times remain `HH:mm` regardless. + +## Testing + +- **Unit test (primary)** — a Jasmine/Karma spec for `formatHoursDuration` covering every + row of the "Worked examples" table, including the negative, zero, planned-short (no + decimal), and rounding-carry cases. (CI already runs `angular-unit-test`.) +- **Visual check** — run the planning view in the app and confirm a completed day matches + the mockup (icons thin/outlined, durations formatted, times still HH:mm, negative flex + red). +- No change to e2e parity/export tests (this is display-only and does not touch exports). + +## Out of scope + +- No change to which rows appear, cell colour logic, the workday dialog, or any export. +- No seconds in any timestamp. +- No new pipe or component; no model/back-end change. + +## Resolved (post-review) + +- English wording confirmed: `t: 'h'`, `min: 'min'`, `timer: 'hrs'`. +- **All** cell icons switch to Material Symbols Outlined (duration/shift icons AND + `warning` / `face` / `gite` / the absence icons) for a consistent thin look. diff --git a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-assert.spec.ts b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-assert.spec.ts index be5a8498..a13320d0 100644 --- a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-assert.spec.ts +++ b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-assert.spec.ts @@ -168,63 +168,63 @@ const updatePlanHoursFutureWeek = [ ]; const planTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert89.45', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8:00', flexBalanceToDate: 'swap_vert82.20', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert71.95', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert64.95', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert58.20', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8:00', flexBalanceToDate: 'swap_vert51.70', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8:00', flexBalanceToDate: 'swap_vert44.20', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8 t 0 min', flexBalanceToDate: '(89.45 timer)', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8 t 0 min', flexBalanceToDate: '(82.20 timer)', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8 t 0 min', flexBalanceToDate: '(71.95 timer)', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: '(64.95 timer)', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: '(58.20 timer)', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8 t 0 min', flexBalanceToDate: '(51.70 timer)', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8 t 0 min', flexBalanceToDate: '(44.20 timer)', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1', flexBalanceToDate: 'swap_vert89.45', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2', flexBalanceToDate: 'swap_vert82.20', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3', flexBalanceToDate: 'swap_vert71.95', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '4', flexBalanceToDate: 'swap_vert64.95', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '5', flexBalanceToDate: 'swap_vert58.20', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '6', flexBalanceToDate: 'swap_vert51.70', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '7', flexBalanceToDate: 'swap_vert44.20', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1', flexBalanceToDate: '(89.45 timer)', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2', flexBalanceToDate: '(82.20 timer)', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3', flexBalanceToDate: '(71.95 timer)', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '4', flexBalanceToDate: '(64.95 timer)', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '5', flexBalanceToDate: '(58.20 timer)', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '6', flexBalanceToDate: '(51.70 timer)', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '7', flexBalanceToDate: '(44.20 timer)', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const planTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const planTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16:00', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '16', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '8', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16 t 0 min', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '16', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '8', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, { date: futureWeekDates[2], text: 'foo bar', plannedHours: '', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '0', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '12:00', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '12', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '12 t 0 min', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '12', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; async function waitForSpinner(page: import('@playwright/test').Page) { diff --git a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-a.spec.ts b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-a.spec.ts index 9dc43c0c..3399b551 100644 --- a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-a.spec.ts +++ b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-a.spec.ts @@ -118,73 +118,73 @@ const planHours = [ ]; const planTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert89:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8:00', flexBalanceToDate: 'swap_vert81:27', calculatedHours: '8', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert73:27', calculatedHours: '8', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert65:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'swap_vert57:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8:00', flexBalanceToDate: 'swap_vert49:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8:00', flexBalanceToDate: 'swap_vert41:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert89:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert81:27', calculatedHours: '8', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert73:27', calculatedHours: '8', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert65:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert57:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert49:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert41:27', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, ]; const updatePlanTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1:00', flexBalanceToDate: 'swap_vert89.45', flexToDate: '97.45', flexIncludingToday: '89.45', nettoHours: '0.00', todaysFlex: '-8.00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2:00', flexBalanceToDate: 'swap_vert82.20', flexToDate: '89.45', flexIncludingToday: '82.20', nettoHours: '0.00', todaysFlex: '-7.25', paidOutFlex: 0, calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3:00', flexBalanceToDate: 'swap_vert71.95', flexToDate: '82.20', flexIncludingToday: '71.95', nettoHours: '0.00', todaysFlex: '-10.25', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '', flexBalanceToDate: 'swap_vert64.95', flexToDate: '71.95', flexIncludingToday: '64.95', nettoHours: '0.00', todaysFlex: '-7.00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '4:00', flexBalanceToDate: 'swap_vert58.20', flexToDate: '64.95', flexIncludingToday: '58.20', nettoHours: '0.00', todaysFlex: '-6.75', paidOutFlex: 0, calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '5:00', flexBalanceToDate: 'swap_vert51.70', flexToDate: '58.20', flexIncludingToday: '51.70', nettoHours: '0.00', todaysFlex: '-6.50', paidOutFlex: 0, calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '6:00', flexBalanceToDate: 'swap_vert44.20', flexToDate: '51.70', flexIncludingToday: '44.20', nettoHours: '0.00', todaysFlex: '-7.50', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1 t 0 min', flexBalanceToDate: '(89.45 timer)', flexToDate: '97.45', flexIncludingToday: '89.45', nettoHours: '0.00', todaysFlex: '-8.00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2 t 0 min', flexBalanceToDate: '(82.20 timer)', flexToDate: '89.45', flexIncludingToday: '82.20', nettoHours: '0.00', todaysFlex: '-7.25', paidOutFlex: 0, calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3 t 0 min', flexBalanceToDate: '(71.95 timer)', flexToDate: '82.20', flexIncludingToday: '71.95', nettoHours: '0.00', todaysFlex: '-10.25', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '', flexBalanceToDate: '(64.95 timer)', flexToDate: '71.95', flexIncludingToday: '64.95', nettoHours: '0.00', todaysFlex: '-7.00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '4 t 0 min', flexBalanceToDate: '(58.20 timer)', flexToDate: '64.95', flexIncludingToday: '58.20', nettoHours: '0.00', todaysFlex: '-6.75', paidOutFlex: 0, calculatedHours: '6.75', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '5 t 0 min', flexBalanceToDate: '(51.70 timer)', flexToDate: '58.20', flexIncludingToday: '51.70', nettoHours: '0.00', todaysFlex: '-6.50', paidOutFlex: 0, calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '6 t 0 min', flexBalanceToDate: '(44.20 timer)', flexToDate: '51.70', flexIncludingToday: '44.20', nettoHours: '0.00', todaysFlex: '-7.50', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const secondUpdatePlanTexts = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: 'calendar_month 07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert89.45', flexToDate: '97.45', flexIncludingToday: '89.45', nettoHours: '0.00', todaysFlex: '-8.00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: 'calendar_month 07:50 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert82.28', flexToDate: '89.45', flexIncludingToday: '82.28', nettoHours: '0.00', todaysFlex: '-7.17', paidOutFlex: 0, calculatedHours: '7.166666666666667', plannedStartOfShift1: '07:50', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: 'calendar_month 07:15 - 16:00 / 01:00', secondShift: 'calendar_month 17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert72.03', flexToDate: '82.28', flexIncludingToday: '72.03', nettoHours: '0.00', todaysFlex: '-10.25', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: 'calendar_month 06:00 - 12:00 / 00:30', secondShift: 'calendar_month 18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert65.03', flexToDate: '72.03', flexIncludingToday: '65.03', nettoHours: '0.00', todaysFlex: '-7.00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: 'calendar_month 06:00 - 12:00 / 00:50', secondShift: 'calendar_month 18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert58.36', flexToDate: '65.03', flexIncludingToday: '58.36', nettoHours: '0.00', todaysFlex: '-6.67', paidOutFlex: 0, calculatedHours: '6.666666666666667', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: 'calendar_month 06:00 - 12:00 / 00:50', secondShift: 'calendar_month 18:00 - 20:00 / 00:50', plannedHours: '8:00', flexBalanceToDate: 'swap_vert52.03', flexToDate: '58.36', flexIncludingToday: '52.03', nettoHours: '0.00', todaysFlex: '-6.33', paidOutFlex: 0, calculatedHours: '6.333333333333333', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:50' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: 'calendar_month 06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert44.53', flexToDate: '52.03', flexIncludingToday: '44.53', nettoHours: '0.00', todaysFlex: '-7.50', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: 'calendar_month 07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(89.45 timer)', flexToDate: '97.45', flexIncludingToday: '89.45', nettoHours: '0.00', todaysFlex: '-8.00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: 'calendar_month 07:50 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(82.28 timer)', flexToDate: '89.45', flexIncludingToday: '82.28', nettoHours: '0.00', todaysFlex: '-7.17', paidOutFlex: 0, calculatedHours: '7.166666666666667', plannedStartOfShift1: '07:50', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: 'calendar_month 07:15 - 16:00 / 1 t 0 min', secondShift: 'calendar_month 17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(72.03 timer)', flexToDate: '82.28', flexIncludingToday: '72.03', nettoHours: '0.00', todaysFlex: '-10.25', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: 'calendar_month 06:00 - 12:00 / 0 t 30 min', secondShift: 'calendar_month 18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(65.03 timer)', flexToDate: '72.03', flexIncludingToday: '65.03', nettoHours: '0.00', todaysFlex: '-7.00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: 'calendar_month 06:00 - 12:00 / 0 t 50 min', secondShift: 'calendar_month 18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(58.36 timer)', flexToDate: '65.03', flexIncludingToday: '58.36', nettoHours: '0.00', todaysFlex: '-6.67', paidOutFlex: 0, calculatedHours: '6.666666666666667', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: 'calendar_month 06:00 - 12:00 / 0 t 50 min', secondShift: 'calendar_month 18:00 - 20:00 / 0 t 50 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(52.03 timer)', flexToDate: '58.36', flexIncludingToday: '52.03', nettoHours: '0.00', todaysFlex: '-6.33', paidOutFlex: 0, calculatedHours: '6.333333333333333', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:50' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: 'calendar_month 06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: '(44.53 timer)', flexToDate: '52.03', flexIncludingToday: '44.53', nettoHours: '0.00', todaysFlex: '-7.50', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const planTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, ]; const updatePlanTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, ]; const planTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16:00', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '16', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16 t 0 min', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '16', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, ]; const updatePlanTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, { date: futureWeekDates[2], text: 'foo bar', plannedHours: '', flexBalanceToDate: 'swap_vert-46:33', calculatedHours: '0', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '12:00', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '12', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '12 t 0 min', flexBalanceToDate: 'swap_vert-62:33', calculatedHours: '12', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert-78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, ]; async function waitForSpinner(page: import('@playwright/test').Page) { diff --git a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-b.spec.ts b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-b.spec.ts index 6fc0fd28..a70632b1 100644 --- a/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-b.spec.ts +++ b/eform-client/playwright/e2e/plugins/time-planning-pn/b/dashboard-edit-b.spec.ts @@ -104,23 +104,23 @@ const filtersFutureWeek = [ ]; const secondUpdatePlanTexts = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert89:27', flexToDate: '97:27', flexIncludingToday: '89:27', nettoHours: '', todaysFlex: '-8:00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:50 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'swap_vert82:17', flexToDate: '89:27', flexIncludingToday: '82:17', nettoHours: '', todaysFlex: '-7:10', paidOutFlex: 0, calculatedHours: '7.166666666666667', plannedStartOfShift1: '07:50', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert72:02', flexToDate: '82:17', flexIncludingToday: '72:02', nettoHours: '', todaysFlex: '-10:15', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert65:02', flexToDate: '72:02', flexIncludingToday: '65:02', nettoHours: '', todaysFlex: '-7:00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:50', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert58:22', flexToDate: '65:02', flexIncludingToday: '58:22', nettoHours: '', todaysFlex: '-6:40', paidOutFlex: 0, calculatedHours: '6.666666666666667', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:50', secondShift: '18:00 - 20:00 / 00:50', plannedHours: '8:00', flexBalanceToDate: 'swap_vert52:02', flexToDate: '58:22', flexIncludingToday: '52:02', nettoHours: '', todaysFlex: '-6:20', paidOutFlex: 0, calculatedHours: '6.333333333333333', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:50' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert44:32', flexToDate: '52:02', flexIncludingToday: '44:32', nettoHours: '', todaysFlex: '-7:30', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert89:27', flexToDate: '97:27', flexIncludingToday: '89:27', nettoHours: '', todaysFlex: '-8:00', paidOutFlex: 0, calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:50 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert82:17', flexToDate: '89:27', flexIncludingToday: '82:17', nettoHours: '', todaysFlex: '-7:10', paidOutFlex: 0, calculatedHours: '7.166666666666667', plannedStartOfShift1: '07:50', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert72:02', flexToDate: '82:17', flexIncludingToday: '72:02', nettoHours: '', todaysFlex: '-10:15', paidOutFlex: 0, calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert65:02', flexToDate: '72:02', flexIncludingToday: '65:02', nettoHours: '', todaysFlex: '-7:00', paidOutFlex: 0, calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 50 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert58:22', flexToDate: '65:02', flexIncludingToday: '58:22', nettoHours: '', todaysFlex: '-6:40', paidOutFlex: 0, calculatedHours: '6.666666666666667', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 50 min', secondShift: '18:00 - 20:00 / 0 t 50 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert52:02', flexToDate: '58:22', flexIncludingToday: '52:02', nettoHours: '', todaysFlex: '-6:20', paidOutFlex: 0, calculatedHours: '6.333333333333333', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:50', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:50' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'swap_vert44:32', flexToDate: '52:02', flexIncludingToday: '44:32', nettoHours: '', todaysFlex: '-7:30', paidOutFlex: 0, calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const secondUpdateActualTexts = [ - { date: nextWeekDates[0], start1StartedAt: '07:30', stop1StoppedAt: '15:30', pause1Id: '00:25', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8:00', flexBalanceToDate: 'swap_vert97.03', flexToDate: '97.45', flexIncludingToday: '97.03', nettoHours: '7.58', todaysFlex: '-0.42', paidOutFlex: 0, calculatedHours: '8' }, - { date: nextWeekDates[1], start1StartedAt: '07:50', stop1StoppedAt: '16:00', pause1Id: '01:00', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8:00', flexBalanceToDate: 'swap_vert97.03', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '7.17', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7.166666666666667' }, - { date: nextWeekDates[2], start1StartedAt: '07:15', stop1StoppedAt: '16:00', pause1Id: '01:00', start2StartedAt: '17:00', stop2StoppedAt: '20:00', pause2Id: '00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert97.03', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '10.25', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '10.25' }, - { date: nextWeekDates[3], start1StartedAt: '06:00', stop1StoppedAt: '12:00', pause1Id: '00:30', start2StartedAt: '18:00', stop2StoppedAt: '20:00', pause2Id: '00:30', plannedHours: '8:00', flexBalanceToDate: 'swap_vert97.03', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '7.00', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7' }, - { date: nextWeekDates[4], start1StartedAt: '06:00', stop1StoppedAt: '12:00', pause1Id: '01:50', start2StartedAt: '18:00', stop2StoppedAt: '20:00', pause2Id: '01:50', plannedHours: '8.0', flexBalanceToDate: 'swap_vert94.70', flexToDate: '97.03', flexIncludingToday: '94.70', nettoHours: '4.33', todaysFlex: '-2.33', paidOutFlex: 0, calculatedHours: '6.666666666666667' }, - { date: nextWeekDates[5], start1StartedAt: '', stop1StoppedAt: '', pause1Id: '', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '', flexBalanceToDate: 'swap_vert88.36', flexToDate: '94.70', flexIncludingToday: '88.36', nettoHours: '0.00', todaysFlex: '-6.33', paidOutFlex: 0, calculatedHours: '6.333333333333333' }, - { date: lastWeekDates[6], start1StartedAt: '06:00', stop1StoppedAt: '14:00', pause1Id: '00:30', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8:00', flexBalanceToDate: 'swap_vert88.36', flexToDate: '88.36', flexIncludingToday: '88.36', nettoHours: '7.50', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7.5' } + { date: nextWeekDates[0], start1StartedAt: '07:30', stop1StoppedAt: '15:30', pause1Id: '00:25', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8 t 0 min', flexBalanceToDate: '(97.03 timer)', flexToDate: '97.45', flexIncludingToday: '97.03', nettoHours: '7.58', todaysFlex: '-0.42', paidOutFlex: 0, calculatedHours: '8' }, + { date: nextWeekDates[1], start1StartedAt: '07:50', stop1StoppedAt: '16:00', pause1Id: '01:00', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8 t 0 min', flexBalanceToDate: '(97.03 timer)', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '7.17', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7.166666666666667' }, + { date: nextWeekDates[2], start1StartedAt: '07:15', stop1StoppedAt: '16:00', pause1Id: '01:00', start2StartedAt: '17:00', stop2StoppedAt: '20:00', pause2Id: '00:30', plannedHours: '8 t 0 min', flexBalanceToDate: '(97.03 timer)', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '10.25', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '10.25' }, + { date: nextWeekDates[3], start1StartedAt: '06:00', stop1StoppedAt: '12:00', pause1Id: '00:30', start2StartedAt: '18:00', stop2StoppedAt: '20:00', pause2Id: '00:30', plannedHours: '8 t 0 min', flexBalanceToDate: '(97.03 timer)', flexToDate: '97.03', flexIncludingToday: '97.03', nettoHours: '7.00', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7' }, + { date: nextWeekDates[4], start1StartedAt: '06:00', stop1StoppedAt: '12:00', pause1Id: '01:50', start2StartedAt: '18:00', stop2StoppedAt: '20:00', pause2Id: '01:50', plannedHours: '8.0', flexBalanceToDate: '(94.70 timer)', flexToDate: '97.03', flexIncludingToday: '94.70', nettoHours: '4.33', todaysFlex: '-2.33', paidOutFlex: 0, calculatedHours: '6.666666666666667' }, + { date: nextWeekDates[5], start1StartedAt: '', stop1StoppedAt: '', pause1Id: '', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '', flexBalanceToDate: '(88.36 timer)', flexToDate: '94.70', flexIncludingToday: '88.36', nettoHours: '0.00', todaysFlex: '-6.33', paidOutFlex: 0, calculatedHours: '6.333333333333333' }, + { date: lastWeekDates[6], start1StartedAt: '06:00', stop1StoppedAt: '14:00', pause1Id: '00:30', start2StartedAt: '', stop2StoppedAt: '', pause2Id: '', plannedHours: '8 t 0 min', flexBalanceToDate: '(88.36 timer)', flexToDate: '88.36', flexIncludingToday: '88.36', nettoHours: '7.50', todaysFlex: '0.00', paidOutFlex: 0, calculatedHours: '7.5' } ]; async function waitForSpinner(page: import('@playwright/test').Page) { diff --git a/eform-client/playwright/e2e/plugins/time-planning-pn/c/dashboard-edit-a.spec.ts b/eform-client/playwright/e2e/plugins/time-planning-pn/c/dashboard-edit-a.spec.ts index bf2a3022..0a27a557 100644 --- a/eform-client/playwright/e2e/plugins/time-planning-pn/c/dashboard-edit-a.spec.ts +++ b/eform-client/playwright/e2e/plugins/time-planning-pn/c/dashboard-edit-a.spec.ts @@ -170,63 +170,63 @@ const updatePlanHoursFutureWeek = [ ]; const planTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 89:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 81:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 73:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 65:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 57:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 49:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 41:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 89:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 81:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 73:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 65:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 57:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 49:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 41:27', calculatedHours: '8', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTexts = [ - { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1:00', flexBalanceToDate: 'Flex saldo til dato: 96:27', calculatedHours: '1', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2:00', flexBalanceToDate: 'Flex saldo til dato: 94:27', calculatedHours: '2', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3:00', flexBalanceToDate: 'Flex saldo til dato: 91:27', calculatedHours: '3', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[0], text: '07:30-15:30', plannedHours: '1 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 96:27', calculatedHours: '1', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[1], text: '7:45-16:00/1', plannedHours: '2 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 94:27', calculatedHours: '2', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[2], text: '7:15-16:00/1;17-20/0,5', plannedHours: '3 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 91:27', calculatedHours: '3', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, { date: lastWeekDates[3], text: '6-12/½;18:00-20:00/0.5', plannedHours: '', flexBalanceToDate: '', calculatedHours: '0', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '4:00', flexBalanceToDate: 'Flex saldo til dato: 87:27', calculatedHours: '4', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '5:00', flexBalanceToDate: 'Flex saldo til dato: 82:27', calculatedHours: '5', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, - { date: lastWeekDates[6], text: '6-14/½', plannedHours: '6:00', flexBalanceToDate: 'Flex saldo til dato: 76:27', calculatedHours: '6', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: lastWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', plannedHours: '4 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 87:27', calculatedHours: '4', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[5], text: '6-12/¾;18-20/¾', plannedHours: '5 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 82:27', calculatedHours: '5', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '00:00', plannedEndOfShift2: '00:00', plannedBreakOfShift2: '00:00' }, + { date: lastWeekDates[6], text: '6-14/½', plannedHours: '6 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 76:27', calculatedHours: '6', plannedStartOfShift1: '00:00', plannedEndOfShift1: '00:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const planTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTextsNextWeek = [ - { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 01:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 01:00', secondShift: '17:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:30', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: 1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, - { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[0], text: '07:30-15:30', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 33:27', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[1], text: '7:45-16:00/1', firstShift: '07:45 - 16:00 / 1 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 25:27', calculatedHours: '7.25', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: nextWeekDates[2], text: '7:15-16:00/1;17-20/0,5', firstShift: '07:15 - 16:00 / 1 t 0 min', secondShift: '17:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 17:27', calculatedHours: '10.25', plannedStartOfShift1: '07:15', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '01:00', plannedStartOfShift2: '17:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[3], text: '6-12/½;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 30 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 9:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[4], text: '06:00-12:00/¾;18:00-20:00/0.5', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: 1:27', calculatedHours: '7', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:30' }, + { date: nextWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -6:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: lastWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -14:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const planTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16:00', flexBalanceToDate: 'Flex saldo til dato: -46:33', calculatedHours: '16', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -62:33', calculatedHours: '8', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[2], text: 'foo bar', plannedHours: '16 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -46:33', calculatedHours: '16', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -62:33', calculatedHours: '8', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; const updatePlanTextsFutureWeek = [ - { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[0], text: '07:30-15:30;foobar', firstShift: '07:30 - 15:30 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -22:33', calculatedHours: '8', plannedStartOfShift1: '07:30', plannedEndOfShift1: '15:30', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[1], text: '7:45-16/0.75', firstShift: '07:45 - 16:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -30:33', calculatedHours: '7.5', plannedStartOfShift1: '07:45', plannedEndOfShift1: '16:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, { date: futureWeekDates[2], text: 'foo bar', plannedHours: '', flexBalanceToDate: 'Flex saldo til dato: -46:33', calculatedHours: '0', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 00:00', secondShift: '18:00 - 20:00 / 00:00', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, - { date: futureWeekDates[4], text: ' ', plannedHours: '12:00', flexBalanceToDate: 'Flex saldo til dato: -62:33', calculatedHours: '12', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, - { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 00:45', secondShift: '18:00 - 20:00 / 00:45', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, - { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 00:30', plannedHours: '8:00', flexBalanceToDate: 'Flex saldo til dato: -78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[3], text: '6-12;18:00-20:00', firstShift: '06:00 - 12:00 / 0 t 0 min', secondShift: '18:00 - 20:00 / 0 t 0 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -54:33', calculatedHours: '8', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:00', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:00' }, + { date: futureWeekDates[4], text: ' ', plannedHours: '12 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -62:33', calculatedHours: '12', plannedStartOfShift1: '', plannedEndOfShift1: '', plannedBreakOfShift1: '', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, + { date: futureWeekDates[5], text: '6-12/¾;18-20/¾', firstShift: '06:00 - 12:00 / 0 t 45 min', secondShift: '18:00 - 20:00 / 0 t 45 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -70:33', calculatedHours: '6.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '12:00', plannedBreakOfShift1: '00:45', plannedStartOfShift2: '18:00', plannedEndOfShift2: '20:00', plannedBreakOfShift2: '00:45' }, + { date: futureWeekDates[6], text: '6-14/½', firstShift: '06:00 - 14:00 / 0 t 30 min', plannedHours: '8 t 0 min', flexBalanceToDate: 'Flex saldo til dato: -78:33', calculatedHours: '7.5', plannedStartOfShift1: '06:00', plannedEndOfShift1: '14:00', plannedBreakOfShift1: '00:30', plannedStartOfShift2: '', plannedEndOfShift2: '', plannedBreakOfShift2: '' }, ]; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.html b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.html index f6cf3d9d..458dc848 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.html +++ b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.html @@ -143,125 +143,125 @@
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift1) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift1) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift1) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift1 / 60, false) }}
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift1) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift1) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift1) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift1 / 60, false) }}
- calendar_month + calendar_month - {{ convertHoursToTime(row.planningPrDayModels[col.field]?.planHours) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.planHours, false) }}
- login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start1StartedAt) }} + login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start1StartedAt) }} - - {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start1StartedAt, row.planningPrDayModels[col.field]?.stop1StoppedAt) }} logout + {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start1StartedAt, row.planningPrDayModels[col.field]?.stop1StoppedAt) }} logout - - warning + warning
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift2) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift2) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift2) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift2 / 60, false) }}
- login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start2StartedAt) }} + login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start2StartedAt) }} - - {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start2StartedAt, row.planningPrDayModels[col.field]?.stop2StoppedAt) }} logout + {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start2StartedAt, row.planningPrDayModels[col.field]?.stop2StoppedAt) }} logout - - warning + warning
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift3) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift3) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift3) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift3 / 60, false) }}
- login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start3StartedAt) }} + login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start3StartedAt) }} - - {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start3StartedAt, row.planningPrDayModels[col.field]?.stop3StoppedAt) }} logout + {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start3StartedAt, row.planningPrDayModels[col.field]?.stop3StoppedAt) }} logout - - warning + warning
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift4) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift4) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift4) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift4 / 60, false) }}
- login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start4StartedAt) }} + login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start4StartedAt) }} - - {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start4StartedAt, row.planningPrDayModels[col.field]?.stop4StoppedAt) }} logout + {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start4StartedAt, row.planningPrDayModels[col.field]?.stop4StoppedAt) }} logout - - warning + warning
- calendar_month + calendar_month {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedStartOfShift5) }} - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedEndOfShift5) }} / - {{ convertMinutesToTime(row.planningPrDayModels[col.field]?.plannedBreakOfShift5) }} + {{ formatDuration(row.planningPrDayModels[col.field]?.plannedBreakOfShift5 / 60, false) }}
- login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start5StartedAt) }} + login {{ formatStamp(row, row.planningPrDayModels[col.field]?.start5StartedAt) }} - - {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start5StartedAt, row.planningPrDayModels[col.field]?.stop5StoppedAt) }} logout + {{ getStopTimeDisplayWithSeconds(row, row.planningPrDayModels[col.field]?.start5StartedAt, row.planningPrDayModels[col.field]?.stop5StoppedAt) }} logout - - warning + warning
- pause{{ convertMinutesToTime(row.planningPrDayModels[col.field]?.pauseMinutes) }} + pause{{ formatDuration(row.planningPrDayModels[col.field]?.pauseMinutes / 60) }}
@@ -270,14 +270,14 @@
- schedule{{ row.planningPrDayModels[col.field]?.actualHours.toFixed(2) }} + schedule{{ formatDuration(row.planningPrDayModels[col.field]?.actualHours) }}
- schedule{{ row.planningPrDayModels[col.field]?.nettoHoursOverride.toFixed(2) }} + schedule{{ formatDuration(row.planningPrDayModels[col.field]?.nettoHoursOverride) }}
@@ -286,7 +286,7 @@
- payments{{ row.planningPrDayModels[col.field]?.paidOutFlex }} + payments{{ formatDuration(row.planningPrDayModels[col.field]?.paidOutFlex) }}
@@ -294,19 +294,19 @@
- swap_vert{{ normalizeFlex(row.planningPrDayModels[col.field]?.sumFlexEnd) }} + swap_vert{{ formatDuration(row.planningPrDayModels[col.field]?.sumFlexEnd) }}
- face + face {{row.planningPrDayModels[col.field]?.workerComment}}
- gite + gite {{row.planningPrDayModels[col.field]?.commentOffice}}
@@ -321,15 +321,15 @@
- flight - pregnant_woman - sick - event_busy - school - event_busy - outdoor_grill + flight + pregnant_woman + sick + event_busy + school + event_busy + outdoor_grill clock_arrow_down - luggage + luggage
diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.spec.ts b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.spec.ts index 36ddcf41..973bb118 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.spec.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.spec.ts @@ -467,6 +467,48 @@ describe('TimePlanningsTableComponent', () => { }); }); + describe('formatDuration', () => { + beforeEach(() => { + jest + .spyOn(component['translateService'], 'instant') + .mockImplementation((key: string) => key); + }); + + it('formats a sub-hour duration with decimal', () => { + expect(component.formatDuration(3 / 60)).toBe('0 t 3 min (0.05 timer)'); + }); + it('formats hours + minutes with decimal', () => { + expect(component.formatDuration(7.58)).toBe('7 t 35 min (7.58 timer)'); + }); + it('shows a whole-hour value with zero minutes', () => { + expect(component.formatDuration(2)).toBe('2 t 0 min (2.00 timer)'); + }); + it('formats a negative duration with a leading minus on both parts', () => { + expect(component.formatDuration(-0.53)).toBe('-0 t 32 min (-0.53 timer)'); + }); + it('omits the decimal part when withDecimal is false', () => { + expect(component.formatDuration(30 / 60, false)).toBe('0 t 30 min'); + }); + it('renders zero as a non-negative zero', () => { + expect(component.formatDuration(0)).toBe('0 t 0 min (0.00 timer)'); + expect(component.formatDuration(-0.0001)).toBe('0 t 0 min (0.00 timer)'); + }); + it('carries rounding into the hour', () => { + expect(component.formatDuration(0.999)).toBe('1 t 0 min (1.00 timer)'); + }); + it('parses a numeric string (paid-out flex) and handles comma decimals', () => { + expect(component.formatDuration('2,00')).toBe('2 t 0 min (2.00 timer)'); + }); + it('treats null/NaN as zero', () => { + expect(component.formatDuration(null as any)).toBe('0 t 0 min (0.00 timer)'); + }); + it('derives the decimal from the true value, not the rounded minutes', () => { + // 58.36 h -> minutes round to 58 t 22 min, but the decimal must stay 58.36 + // (deriving it from rounded minutes would wrongly yield 58.37). + expect(component.formatDuration(58.36)).toBe('58 t 22 min (58.36 timer)'); + }); + }); + // Dormant helper — production display no longer uses seconds. describe('convertHoursToTimeWithSeconds', () => { it('formats whole-hour values with seconds suffix', () => { diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.ts b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.ts index 1a41f9c1..c4630d2c 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/components/plannings/time-plannings-table/time-plannings-table.component.ts @@ -445,6 +445,40 @@ export class TimePlanningsTableComponent implements OnInit, OnChanges, AfterView return `${this.padZero(hrs)}:${this.padZero(mins)}`; } + /** + * Formats a decimal-hours value as "X t Y min (Z.ZZ timer)". + * The "X t Y min" part is the hours:minutes breakdown (minutes rounded); + * the "(Z.ZZ timer)" part is the true decimal-hours value rounded to 2 places + * (so it matches the stored value, e.g. 58.36 -> "58 t 22 min (58.36 timer)"). + * When withDecimal is false the "(Z.ZZ timer)" part is omitted (used for + * planned pause/break and planned plan-hours). + * Accepts a number or a numeric string (paid-out flex may use a comma decimal). + */ + formatDuration(hours: number | string | null | undefined, withDecimal: boolean = true): string { + const parsed = typeof hours === 'string' + ? parseFloat(hours.replace(',', '.')) + : hours; + const safe = (parsed === null || parsed === undefined || isNaN(parsed as number)) + ? 0 + : Number(parsed); + + const totalMinutes = Math.round(Math.abs(safe) * 60); + const negative = safe < 0 && totalMinutes > 0; + const hrs = Math.floor(totalMinutes / 60); + const mins = totalMinutes % 60; + const sign = negative ? '-' : ''; + + const t = this.translateService.instant('t'); + const min = this.translateService.instant('min'); + const base = `${sign}${hrs} ${t} ${mins} ${min}`; + if (!withDecimal) { + return base; + } + const timer = this.translateService.instant('timer'); + const decimal = Math.abs(safe).toFixed(2); + return `${base} (${sign}${decimal} ${timer})`; + } + /** * Phase 4 second-precision sibling of {@link convertHoursToTime}. Adds a * :SS tail for callers that want seconds-level display when the diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/bgBG.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/bgBG.ts index 3e106dcd..8fdb72e0 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/bgBG.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/bgBG.ts @@ -387,4 +387,7 @@ export const bgBG = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/csCZ.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/csCZ.ts index f344a1e5..e47c2a1e 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/csCZ.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/csCZ.ts @@ -387,4 +387,7 @@ export const csCZ = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/da.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/da.ts index 927d60ce..9720fafd 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/da.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/da.ts @@ -392,4 +392,7 @@ export const da = { 'Details': 'Detaljer', 'No requests found': 'Ingen anmodninger fundet', 'Error loading request history': 'Fejl ved indlæsning af anmodningshistorik', + t: 't', + min: 'min', + timer: 'timer', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/deDE.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/deDE.ts index 3c77cef9..cf947bef 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/deDE.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/deDE.ts @@ -390,4 +390,7 @@ export const deDE = { 'Details': 'Details', 'No requests found': 'Keine Anfragen gefunden', 'Error loading request history': 'Fehler beim Laden der Antragshistorie', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/elGR.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/elGR.ts index c0877ad2..c0c6111f 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/elGR.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/elGR.ts @@ -387,4 +387,7 @@ export const elGR = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/enUS.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/enUS.ts index 488f59c0..e47b29b3 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/enUS.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/enUS.ts @@ -392,4 +392,7 @@ export const enUS = { 'Details': 'Details', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/esES.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/esES.ts index f29355ac..bdfee6ba 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/esES.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/esES.ts @@ -387,4 +387,7 @@ export const esES = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/etET.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/etET.ts index e15739bb..5147e220 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/etET.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/etET.ts @@ -387,4 +387,7 @@ export const etET = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/fiFI.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/fiFI.ts index 0638a662..3997049e 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/fiFI.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/fiFI.ts @@ -387,4 +387,7 @@ export const fiFI = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/frFR.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/frFR.ts index ce2b2777..83f8d8ea 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/frFR.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/frFR.ts @@ -387,4 +387,7 @@ export const frFR = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/hrHR.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/hrHR.ts index e0a79a6b..2e81b802 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/hrHR.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/hrHR.ts @@ -387,4 +387,7 @@ export const hrHR = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/huHU.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/huHU.ts index ed5ff220..a121d650 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/huHU.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/huHU.ts @@ -387,4 +387,7 @@ export const huHU = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/isIS.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/isIS.ts index db1ee2df..ba750b7f 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/isIS.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/isIS.ts @@ -387,4 +387,7 @@ export const isIS = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/itIT.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/itIT.ts index ac6922ce..41fc8963 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/itIT.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/itIT.ts @@ -387,4 +387,7 @@ export const itIT = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ltLT.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ltLT.ts index ec2be9ff..36fd29a0 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ltLT.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ltLT.ts @@ -387,4 +387,7 @@ export const ltLT = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/lvLV.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/lvLV.ts index 10b8062f..45ebe540 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/lvLV.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/lvLV.ts @@ -387,4 +387,7 @@ export const lvLV = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/nlNL.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/nlNL.ts index 30c03384..d899f944 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/nlNL.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/nlNL.ts @@ -387,4 +387,7 @@ export const nlNL = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/noNO.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/noNO.ts index 140739d8..f9e5ebb8 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/noNO.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/noNO.ts @@ -387,4 +387,7 @@ export const noNO = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/plPL.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/plPL.ts index 2e489ecb..43884665 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/plPL.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/plPL.ts @@ -387,4 +387,7 @@ export const plPL = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptBR.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptBR.ts index 087498c6..020f5ee4 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptBR.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptBR.ts @@ -387,4 +387,7 @@ export const ptBR = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptPT.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptPT.ts index 8dbae417..c44afb50 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptPT.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ptPT.ts @@ -387,4 +387,7 @@ export const ptPT = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/roRO.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/roRO.ts index 0a5caefb..7f9118ce 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/roRO.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/roRO.ts @@ -387,4 +387,7 @@ export const roRO = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/skSK.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/skSK.ts index a8ec7415..4ea828c6 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/skSK.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/skSK.ts @@ -387,4 +387,7 @@ export const skSK = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/slSL.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/slSL.ts index cf0ce5ee..25020589 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/slSL.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/slSL.ts @@ -387,4 +387,7 @@ export const slSL = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/svSE.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/svSE.ts index 853b2ba1..b1450370 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/svSE.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/svSE.ts @@ -387,4 +387,7 @@ export const svSE = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', }; diff --git a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ukUA.ts b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ukUA.ts index 9fed0465..eb7b4d4e 100644 --- a/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ukUA.ts +++ b/eform-client/src/app/plugins/modules/time-planning-pn/i18n/ukUA.ts @@ -387,4 +387,7 @@ export const ukUA = { 'Date': 'Date', 'No requests found': 'No requests found', 'Error loading request history': 'Error loading request history', + t: 'h', + min: 'min', + timer: 'hrs', };