diff --git a/shop/components/HomeClient.tsx b/shop/components/HomeClient.tsx index 1f9dbac..d96ede8 100644 --- a/shop/components/HomeClient.tsx +++ b/shop/components/HomeClient.tsx @@ -18,9 +18,18 @@ import { Zap, ArrowUpRight, ShieldCheck, + Calendar, Sparkles, Activity } from 'lucide-react' +import { + Dialog, + DialogContent, + DialogHeader, + DialogTitle, + DialogDescription, + DialogFooter, +} from '@/components/ui/dialog' interface HomeClientProps { initialUser: User | null @@ -29,6 +38,7 @@ interface HomeClientProps { export function HomeClient({ initialUser }: HomeClientProps) { const [user, setUser] = useState(initialUser) const [mounted, setMounted] = useState(false) + const [calendarOpen, setCalendarOpen] = useState(false) useEffect(() => { setMounted(true) @@ -125,23 +135,23 @@ export function HomeClient({ initialUser }: HomeClientProps) { Mein Dashboard Schnellzugriff

-
+
-
-
- +
+
+
Kundenliste - Kunden & Lizenzen verwalten + Verwalten
- + @@ -149,20 +159,42 @@ export function HomeClient({ initialUser }: HomeClientProps) { -
-
- +
+
+
Bestellungen - Aufträge & Status einsehen + Status einsehen
- + + +
@@ -171,6 +203,52 @@ export function HomeClient({ initialUser }: HomeClientProps) { + {/* Dialog / Popup für Termin-Kalender (Geplant) */} + + + +
+
+ +
+
+ + Termin-Kalender + + In Planung + + +
+
+ + Der Termin-Kalender bietet in Kürze eine Übersicht für anstehende Schulungen, Online- & Vor-Ort-Workshops sowie Termine für Blauer-Mittwoch-Partner zur direkten Anmeldung. + +
+ +
+
+ Geplante Features & Angebote: +
+
    +
  • Anmeldung zu Online- & Vor-Ort-Workshops
  • +
  • Anstehende Schulungstermine auf einen Blick
  • +
  • Spezielle Schulungen für Blauer-Mittwoch-Partner
  • +
  • Kalender-Export (.ics / Google / Outlook)
  • +
+
+ + + + +
+
+ {/* Grid of modules */}
diff --git a/shop/components/order-wizard.tsx b/shop/components/order-wizard.tsx index 7bb34ab..9cd62f4 100644 --- a/shop/components/order-wizard.tsx +++ b/shop/components/order-wizard.tsx @@ -179,7 +179,7 @@ export function OrderWizard({ return 'one_time' }) - // Falls "one_time" (Kauf) gewählt: optionales Datum der letzten CAS-Lizenzierung + // Falls "one_time" (Kauf) gewählt: optionales Datum der letzten CASPOS-Lizenzierung const [lastLicenseDate, setLastLicenseDate] = useState( initialOrder?.order_data?.last_license_date || '' ) @@ -608,7 +608,7 @@ export function OrderWizard({ setEditingIdx(null) setModuleQuantities({}) setDeviceName('') - + const resetSels: Record = {} categories.forEach(cat => { const isVisible = selectedBillingInterval === 'one_time' ? cat.show_in_kauf !== false : cat.show_in_abo !== false diff --git a/shop/components/wizard/license-lookup-panel.tsx b/shop/components/wizard/license-lookup-panel.tsx index edab1ab..8e50802 100644 --- a/shop/components/wizard/license-lookup-panel.tsx +++ b/shop/components/wizard/license-lookup-panel.tsx @@ -25,12 +25,21 @@ import { lookupLicenseFromLicServer } from '@/lib/actions/licserver-config' // ─── MOCK DATA (until real LicServer API is wired up) ─────────────────────── const MOCK_LICENSES: Record = { +<<<<<<< HEAD '995500-0005': { licenseKey: '995500-0005', status: 'active', product: 'CASPOS DEMO', edition: 'Professional', version: '14.1.2', +======= + '995502-00': { + licenseKey: '995502-00', + status: 'active', + product: 'CASPOS', + edition: 'GASTRO', + version: '4.8.6', +>>>>>>> 086a893e19593863f6b2044374187220cc3e392d seats: 10, customer: 'Mustermann GmbH', contact: 'Max Mustermann', @@ -39,6 +48,7 @@ const MOCK_LICENSES: Record = { maintenanceUntil: '2025-03-31', modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client'], }, +<<<<<<< HEAD 'CAS-2020-STD-00456': { licenseKey: 'CAS-2020-STD-00456', status: 'expired', @@ -66,6 +76,35 @@ const MOCK_LICENSES: Record = { expiresAt: '2026-12-31', maintenanceUntil: '2026-12-31', modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client', 'AI Assistant', 'Analytics Pro'], +======= + '995501-00': { + licenseKey: '995501-00', + status: 'expired', + product: 'CASPOS Handel', + edition: 'Standard', + version: '3.12.1', + seats: 1, + customer: 'Beispiel AG', + contact: 'Erika Muster', + issuedAt: '2016-03-14', + expiresAt: '2017-03-14', + maintenanceUntil: '2017-03-14', + modules: ['CASPOS Handel'], + }, + '995500-00': { + licenseKey: '995500-00', + status: 'active', + product: 'CASPOS Handel', + edition: 'Standard', + version: '4.11.2', + seats: 2, + customer: 'Tech Solutions GmbH & Co. KG', + contact: 'Julia Schneider', + issuedAt: '2026-01-01', + expiresAt: '2027-12-31', + maintenanceUntil: '2027-12-31', + modules: ['CASPOS Handel'], +>>>>>>> 086a893e19593863f6b2044374187220cc3e392d }, } @@ -224,7 +263,7 @@ export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProp {/* ── Input + Search Button ──────────────────────────────── */}

- Geben Sie Ihre bisherige CAS-Lizenznummer ein, + Geben Sie Ihre bisherige CASPOS-Lizenznummer ein, um Lizenzinformationen automatisch abzurufen.

@@ -278,16 +317,28 @@ export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProp Demo:  setLicenseKey('995500-00')} > 995500-00 +======= + onClick={() => setLicenseKey('995502-00')} + > + 995502-00 +>>>>>>> 086a893e19593863f6b2044374187220cc3e392d {' · '} setLicenseKey('995500-01')} > 995500-01 +======= + onClick={() => setLicenseKey('995501-00')} + > + 995500-00 +>>>>>>> 086a893e19593863f6b2044374187220cc3e392d

diff --git a/shop/components/wizard/step-billing.tsx b/shop/components/wizard/step-billing.tsx index 5f86aea..42ef238 100644 --- a/shop/components/wizard/step-billing.tsx +++ b/shop/components/wizard/step-billing.tsx @@ -44,11 +44,10 @@ export function StepBilling({ {/* Option 1: Kauf */}
handleBillingIntervalChange('one_time')} - className={`relative p-6 rounded-2xl border-2 cursor-pointer transition-all duration-300 flex flex-col justify-between h-48 hover:shadow-[0_0_20px_rgba(255,255,255,0.05)] ${ - selectedBillingInterval === 'one_time' + className={`relative p-6 rounded-2xl border-2 cursor-pointer transition-all duration-300 flex flex-col justify-between h-48 hover:shadow-[0_0_20px_rgba(255,255,255,0.05)] ${selectedBillingInterval === 'one_time' ? 'border-primary bg-primary/10 shadow-[0_0_25px_rgba(59,130,246,0.2)]' : 'border-white/5 bg-white/5 hover:border-white/20' - }`} + }`} >
@@ -71,11 +70,10 @@ export function StepBilling({ {/* Option 2: Abo */}
handleBillingIntervalChange('monthly')} - className={`relative p-6 rounded-2xl border-2 cursor-pointer transition-all duration-300 flex flex-col justify-between h-48 hover:shadow-[0_0_20px_rgba(255,255,255,0.05)] ${ - selectedBillingInterval === 'monthly' + className={`relative p-6 rounded-2xl border-2 cursor-pointer transition-all duration-300 flex flex-col justify-between h-48 hover:shadow-[0_0_20px_rgba(255,255,255,0.05)] ${selectedBillingInterval === 'monthly' ? 'border-primary bg-primary/10 shadow-[0_0_25px_rgba(59,130,246,0.2)]' : 'border-white/5 bg-white/5 hover:border-white/20' - }`} + }`} >
@@ -99,7 +97,7 @@ export function StepBilling({