MHD nur mit Monat und Jahr in Web-UI und iOS-App

Setzt den Backend-Umbau in beiden Oberflaechen um.

Die Genauigkeit gilt jeweils fuer den ganzen Einlager-Vorgang und nicht je
Charge: Auf einer Packung steht entweder ein Tagesdatum oder nur Monat/Jahr,
gemischt kommt das nicht vor. Vorbelegt wird sie aus dem Produkt, laesst sich
aber im Vorgang umstellen.

Web-UI: Umschalter im Kopf der Chargenliste; das Eingabefeld wechselt zwischen
type="date" und type="month". Im Produktformular gibt es das neue Feld
"MHD-Angabe" neben der Gebinde-Bezeichnung. Anzeige laeuft ueber den
Settings-Context, damit das eingestellte Datumsformat erhalten bleibt und
Monatsangaben ueberall als "09/2026" erscheinen (Auslagern, Uebersicht,
Chargentabelle). Die Abgelaufen-Warnung prueft bei Monatsangaben gegen den
Monatsletzten - sonst haette eine Packung schon am Monatsersten als abgelaufen
gegolten.

iOS: Auswahl "Tagesdatum / nur Monat/Jahr" im Einlagern-Formular und beim
Anlegen eines Artikels. SwiftUI hat keinen DatePicker ohne Tag, deshalb ein
eigener MonthYearPicker aus zwei Auswahlfeldern; die Jahresliste reicht zwei
Jahre zurueck (bereits abgelaufene Ware) und fuenfzehn nach vorn (Konserven).
Die Chargenauswahl beim Auslagern zeigt Monatsangaben ebenfalls ohne Tag.

Getestet: Web-Build (vite) und iOS-Geraetebuild laufen fehlerfrei durch, die
App ist auf dem iPhone installiert. Das Verhalten in der Oberflaeche ist noch
nicht von Hand durchgeklickt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-22 17:57:09 +02:00
parent eed7c9e1de
commit 30307d6cfb
13 changed files with 2090 additions and 25 deletions

View File

@@ -1,7 +1,7 @@
import { createContext, useCallback, useContext, useEffect, useState } from "react";
import { api } from "./api";
import { useAuth } from "./auth";
import { formatDate } from "./units";
import { formatBestBefore, formatDate } from "./units";
export const DATE_FORMAT_KEY = "date_format";
const DEFAULT_FORMAT = "de";
@@ -9,6 +9,7 @@ const DEFAULT_FORMAT = "de";
const SettingsContext = createContext({
dateFormat: DEFAULT_FORMAT,
formatDate: (iso) => formatDate(iso, DEFAULT_FORMAT),
formatBestBefore: (iso, precision) => formatBestBefore(iso, precision, DEFAULT_FORMAT),
reload: () => {},
});
@@ -34,6 +35,8 @@ export function SettingsProvider({ children }) {
const value = {
dateFormat,
formatDate: (iso) => formatDate(iso, dateFormat),
// MHD: Monatsangaben erscheinen als "09/2026", Tagesdaten im gewaehlten Format.
formatBestBefore: (iso, precision) => formatBestBefore(iso, precision, dateFormat),
reload,
};