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..5547700 100644 --- a/shop/components/wizard/license-lookup-panel.tsx +++ b/shop/components/wizard/license-lookup-panel.tsx @@ -25,12 +25,12 @@ import { lookupLicenseFromLicServer } from '@/lib/actions/licserver-config' // ─── MOCK DATA (until real LicServer API is wired up) ─────────────────────── const MOCK_LICENSES: Record = { - '995500-0005': { - licenseKey: '995500-0005', + '995502-00': { + licenseKey: '995502-00', status: 'active', - product: 'CASPOS DEMO', - edition: 'Professional', - version: '14.1.2', + product: 'CASPOS', + edition: 'GASTRO', + version: '4.8.6', seats: 10, customer: 'Mustermann GmbH', contact: 'Max Mustermann', @@ -39,33 +39,33 @@ const MOCK_LICENSES: Record = { maintenanceUntil: '2025-03-31', modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client'], }, - 'CAS-2020-STD-00456': { - licenseKey: 'CAS-2020-STD-00456', + '995501-00': { + licenseKey: '995501-00', status: 'expired', - product: 'CAS genesisWorld Standard', + product: 'CASPOS Handel', edition: 'Standard', - version: '12.0.0', - seats: 5, + version: '3.12.1', + seats: 1, customer: 'Beispiel AG', contact: 'Erika Muster', - issuedAt: '2020-01-15', - expiresAt: '2023-01-14', - maintenanceUntil: '2022-01-14', - modules: ['CRM'], + issuedAt: '2016-03-14', + expiresAt: '2017-03-14', + maintenanceUntil: '2017-03-14', + modules: ['CASPOS Handel'], }, - 'CAS-2024-ENT-00789': { - licenseKey: 'CAS-2024-ENT-00789', + '995500-00': { + licenseKey: '995500-00', status: 'active', - product: 'CAS genesisWorld Enterprise', - edition: 'Enterprise', - version: '15.0.0', - seats: 50, + product: 'CASPOS Handel', + edition: 'Standard', + version: '4.11.2', + seats: 2, customer: 'Tech Solutions GmbH & Co. KG', contact: 'Julia Schneider', - issuedAt: '2024-01-01', - expiresAt: '2026-12-31', - maintenanceUntil: '2026-12-31', - modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client', 'AI Assistant', 'Analytics Pro'], + issuedAt: '2026-01-01', + expiresAt: '2027-12-31', + maintenanceUntil: '2027-12-31', + modules: ['CASPOS Handel'], }, } @@ -224,7 +224,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 +278,16 @@ export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProp Demo:  setLicenseKey('995500-00')} + onClick={() => setLicenseKey('995502-00')} > - 995500-00 + 995502-00 {' · '} setLicenseKey('995500-01')} + onClick={() => setLicenseKey('995501-00')} > - 995500-01 + 995501-00 (abgelaufen)

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({