chore: align device terminology to cash register across wizard and success pages
All checks were successful
Staging Build / build (push) Successful in 2m46s

This commit is contained in:
DanielS
2026-07-10 00:55:12 +02:00
parent 99cbb11c5a
commit dc5465e289
4 changed files with 34 additions and 34 deletions

View File

@@ -113,12 +113,12 @@ export default async function OrderSuccessPage({
</Badge>
</CardHeader>
<CardContent className="space-y-4">
{/* Produkte gruppiert nach Gerät */}
{/* Produkte gruppiert nach Kasse */}
<div className="space-y-4">
{Object.entries(groupedItems).map(([deviceName, devItems]) => (
<div key={deviceName} className="space-y-2 border-b border-white/5 pb-3 last:border-0 last:pb-0">
<div className="bg-white/5 px-2 py-1 rounded text-xs text-primary font-bold">
Gerät: {deviceName}
Kasse: {deviceName}
</div>
{devItems.map((item) => (
<div key={item.product_id} className="space-y-1 pl-2">

View File

@@ -108,7 +108,7 @@ export const InvoicePDF = ({ order, orderSnapshot, customer }: any) => {
} else {
oneTimeNet += item.base_price || 0;
}
item.selected_modules?.forEach((mod: any) => {
const qty = mod.quantity || 1;
const price = mod.total_price ?? (mod.price * qty);
@@ -152,7 +152,7 @@ export const InvoicePDF = ({ order, orderSnapshot, customer }: any) => {
</View>
<Text style={styles.title}>
{isSubscription ? 'Anfragebestätigung: Software-Abonnement' : 'Anfragebestätigung: Einmalige Lizenzen'}
Anfragebestätigung: {order.order_number || order.id}
</Text>
<View style={styles.section}>
@@ -176,7 +176,7 @@ export const InvoicePDF = ({ order, orderSnapshot, customer }: any) => {
<View key={groupIdx} style={{ marginBottom: 12, borderWidth: 1, borderColor: '#e2e8f0', borderRadius: 4, padding: 8, backgroundColor: '#f8fafc' }}>
<View style={{ borderBottomWidth: 1, borderBottomColor: '#cbd5e1', paddingBottom: 4, marginBottom: 6 }}>
<Text style={{ fontSize: 10, fontWeight: 'bold', color: '#1e3a8a' }}>
Gerät: {deviceName}
Kasse: {deviceName}
</Text>
</View>
{devItems.map((item: any, idx: number) => (

View File

@@ -102,22 +102,22 @@ export function LoginForm({
onChange={(e) => setPassword(e.target.value)}
/>
</div>
{errorParam === "gesperrt" && (
<p className="text-sm text-red-500 bg-red-500/10 border border-red-500/20 p-3 rounded-lg text-center font-medium">
🚫 Ihr Konto wurde gesperrt. Bitte wenden Sie sich an den Administrator.
</p>
)}
{messageParam === "concurrent" && (
<p className="text-sm text-amber-500 bg-amber-500/10 border border-amber-500/20 p-3 rounded-lg text-center font-medium">
Sie wurden abgemeldet, da Sie sich an einem anderen Gerät angemeldet haben.
</p>
)}
{error && <p className="text-sm text-red-500">{error}</p>}
<Button type="submit" className="w-full" disabled={isLoading}>
{isLoading ? "Wird angemeldet..." : "Anmelden"}
</Button>
</div>
</form>
{errorParam === "gesperrt" && (
<p className="text-sm text-red-500 bg-red-500/10 border border-red-500/20 p-3 rounded-lg text-center font-medium">
🚫 Ihr Konto wurde gesperrt. Bitte wenden Sie sich an den Administrator.
</p>
)}
{messageParam === "concurrent" && (
<p className="text-sm text-amber-500 bg-amber-500/10 border border-amber-500/20 p-3 rounded-lg text-center font-medium">
Sie wurden abgemeldet, da Sie sich an einem anderen Gerät angemeldet haben.
</p>
)}
{error && <p className="text-sm text-red-500">{error}</p>}
<Button type="submit" className="w-full" disabled={isLoading}>
{isLoading ? "Wird angemeldet..." : "Anmelden"}
</Button>
</div>
</form>
</CardContent>
</Card>
</div>

View File

@@ -645,8 +645,8 @@ export function OrderWizard({
const finalItemsToShow = basketItems.length > 0
? basketItems
: (allCategoriesFilled && productValidationErrors.length === 0
? [{ deviceName: deviceName || 'Kasse 1', selections, moduleQuantities, billingInterval: selectedBillingInterval }]
: []);
? [{ deviceName: deviceName || 'Kasse 1', selections, moduleQuantities, billingInterval: selectedBillingInterval }]
: []);
return (
<div className="max-w-5xl mx-auto py-12 px-4">
@@ -1050,10 +1050,10 @@ export function OrderWizard({
<Label
onClick={() => !disabled && selectProduct(cat.id, product.id)}
className={`flex flex-col items-start p-4 rounded-xl border-2 transition-all ${disabled
? 'border-white/5 bg-white/5 opacity-50 cursor-not-allowed'
: isChecked
? 'border-primary bg-primary/5 cursor-pointer'
: 'border-white/5 bg-white/5 hover:bg-white/10 cursor-pointer'
? 'border-white/5 bg-white/5 opacity-50 cursor-not-allowed'
: isChecked
? 'border-primary bg-primary/5 cursor-pointer'
: 'border-white/5 bg-white/5 hover:bg-white/10 cursor-pointer'
}`}
>
<div className="flex justify-between w-full items-center">
@@ -1109,8 +1109,8 @@ export function OrderWizard({
<Label
htmlFor={disabled ? undefined : `${cat.id}-${product.id}`}
className={`flex flex-col items-start p-4 rounded-xl border-2 border-white/5 bg-white/5 transition-all ${disabled
? 'opacity-50 cursor-not-allowed'
: 'hover:bg-white/10 peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-primary/5 cursor-pointer'
? 'opacity-50 cursor-not-allowed'
: 'hover:bg-white/10 peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-primary/5 cursor-pointer'
}`}
>
<div className="flex justify-between w-full items-center">
@@ -1399,7 +1399,7 @@ export function OrderWizard({
size="icon"
className="w-7 h-7 hover:bg-white/10 text-slate-400 hover:text-white"
onClick={() => editBasketItem(idx)}
title="Gerät bearbeiten"
title="Kasse bearbeiten"
>
<Pencil className="w-3.5 h-3.5" />
</Button>
@@ -1409,7 +1409,7 @@ export function OrderWizard({
size="icon"
className="w-7 h-7 hover:bg-white/10 text-destructive hover:text-red-400"
onClick={() => deleteBasketItem(idx)}
title="Gerät löschen"
title="Kasse löschen"
>
<Trash2 className="w-3.5 h-3.5" />
</Button>
@@ -1422,7 +1422,7 @@ export function OrderWizard({
</CardContent>
<CardFooter className="flex flex-col gap-3">
<div className="w-full space-y-2">
<Label htmlFor="device-name" className="text-xs text-slate-400">Gerätename (optional)</Label>
<Label htmlFor="device-name" className="text-xs text-slate-400">Kassenname (optional)</Label>
<Input
id="device-name"
placeholder="z.B. Hauptkasse, Theke"
@@ -1482,10 +1482,10 @@ export function OrderWizard({
{finalItemsToShow.map((item, itemIdx) => (
<div key={itemIdx} className="space-y-3 border-b border-white/10 pb-4 last:border-0 last:pb-0">
<div className="flex justify-between items-center bg-white/5 p-2 rounded">
<span className="text-white font-bold text-sm">Gerät: {item.deviceName}</span>
<span className="text-white font-bold text-sm">Kasse: {item.deviceName}</span>
<span className="text-xs text-slate-400 capitalize">{item.billingInterval === 'one_time' ? 'Kauf' : 'Abo'}</span>
</div>
{visibleCategories.map(cat => {
const sel = item.selections[cat.id]
const selectedProds: Product[] = []