import { useState } from 'react'; import { Card, Steps, Form, Input, Select, Button, Space, Typography, Result, Divider, Alert, Row, Col, } from 'antd'; import { showError } from '@/lib/errorHandling'; import { ShopOutlined, BankOutlined, CheckCircleOutlined, ArrowLeftOutlined, ArrowRightOutlined, RocketOutlined, } from '@ant-design/icons'; import { useNavigate } from 'react-router-dom'; import { useCreateCompany } from '@/api/mutations/companyMutations'; import { useCompanyStore } from '@/stores/companyStore'; import { useMyCompanies } from '@/api/queries/companyQueries'; import { colors } from '@/styles/designTokens'; import { validateCVRModulus11 } from '@/lib/formatters'; const { Title, Text, Paragraph } = Typography; interface CompanyFormValues { name: string; cvr?: string; country: string; currency: string; fiscalYearStartMonth: number; vatRegistered: boolean; vatPeriodFrequency?: 'MONTHLY' | 'QUARTERLY' | 'HALFYEARLY'; } const vatPeriodOptions = [ { value: 'MONTHLY', label: 'Månedlig' }, { value: 'QUARTERLY', label: 'Kvartalsvis' }, { value: 'HALFYEARLY', label: 'Halvårlig' }, ]; const monthOptions = [ { value: 1, label: 'Januar' }, { value: 2, label: 'Februar' }, { value: 3, label: 'Marts' }, { value: 4, label: 'April' }, { value: 5, label: 'Maj' }, { value: 6, label: 'Juni' }, { value: 7, label: 'Juli' }, { value: 8, label: 'August' }, { value: 9, label: 'September' }, { value: 10, label: 'Oktober' }, { value: 11, label: 'November' }, { value: 12, label: 'December' }, ]; export default function CompanySetupWizard() { const [currentStep, setCurrentStep] = useState(0); const [form] = Form.useForm(); const navigate = useNavigate(); const createCompany = useCreateCompany(); const { setActiveCompany } = useCompanyStore(); const { refetch: refetchCompanies } = useMyCompanies(); const [createdCompanyName, setCreatedCompanyName] = useState(''); // Store form values in state for reliable confirmation display const [formSnapshot, setFormSnapshot] = useState>({}); // Watch vatRegistered for conditional rendering in step 2 (while on that step) const vatRegistered = Form.useWatch('vatRegistered', form); const handleNext = async () => { try { if (currentStep === 0) { await form.validateFields(['name', 'cvr']); } else if (currentStep === 1) { await form.validateFields(['country', 'currency', 'fiscalYearStartMonth']); } else if (currentStep === 2) { await form.validateFields(['vatRegistered', 'vatPeriodFrequency']); // Backend requires CVR for VAT-registered companies const currentValues = form.getFieldsValue(); if (currentValues.vatRegistered && !currentValues.cvr?.trim()) { showError('CVR er påkrævet for momsregistrerede virksomheder'); setCurrentStep(0); // Navigate back to step 0 where CVR is entered return; } } // Capture current form values before moving to next step const currentValues = form.getFieldsValue(); setFormSnapshot(prev => ({ ...prev, ...currentValues })); setCurrentStep(currentStep + 1); } catch { // Validation failed, don't proceed } }; const handleBack = () => { setCurrentStep(currentStep - 1); }; const handleSubmit = async () => { try { // Use formSnapshot which was captured during navigation const values = formSnapshot; // Defensive validation if (!values.name || values.name.trim() === '') { showError('Virksomhedsnavn er påkrævet'); setCurrentStep(0); return; } // Debug logging console.log('Creating company with values:', values); const company = await createCompany.mutateAsync({ name: values.name.trim(), cvr: values.cvr?.trim() || undefined, country: values.country || 'DK', currency: values.currency || 'DKK', fiscalYearStartMonth: values.fiscalYearStartMonth ?? 1, vatRegistered: values.vatRegistered ?? false, vatPeriodFrequency: values.vatRegistered ? values.vatPeriodFrequency : undefined, }); setCreatedCompanyName(values.name); // Refetch companies to get the new one with role const { data: companies } = await refetchCompanies(); const newCompany = companies?.find((c) => c.id === company.id); if (newCompany) { setActiveCompany(newCompany); } setCurrentStep(4); // Success step } catch (error) { console.error('Company creation failed:', error); showError(error, 'Kunne ikke oprette virksomhed'); } }; const handleGoToDashboard = () => { navigate('/'); }; const steps = [ { title: 'Virksomhed', icon: , }, { title: 'Regnskab', icon: , }, { title: 'Moms', icon: , }, { title: 'Bekræft', icon: , }, ]; const renderStepContent = () => { switch (currentStep) { case 0: return (
Fortæl os om din virksomhed Vi bruger disse oplysninger til at oprette din kontoplan og konfigurere systemet.
} /> { if (!value || value.length !== 8) return Promise.resolve(); if (!validateCVRModulus11(value)) { return Promise.reject('Ugyldigt CVR-nummer (modulus 11 check fejlet)'); } return Promise.resolve(); }, }, ]} >
); case 1: return (
Regnskabsindstillinger Konfigurer dine grundlæggende regnskabsindstillinger.
Ja, virksomheden er momsregistreret Nej, ikke momsregistreret {vatRegistered && (