import { useEffect, useState } from "react"; import OmsorgButton from "../../components/ui/OmsorgButton"; import DecimalInput from "../../components/ui/DecimalInput"; import { useValueListItems } from "../../app/useValueListItems"; import { parseGermanDecimal } from "../../utils/germanDecimal"; export const emptyFacilityForm = { name: "", crmStatus: "Lead", facilityType: "", website: "", street: "", postalCode: "", city: "", country: "", billingStreet: "", billingPostalCode: "", billingCity: "", billingCountry: "", billingRate: "", nightSurchargePercent: "", saturdaySurchargePercent: "", sundaySurchargePercent: "", holidaySurchargePercent: "", travelCostMode: "Pauschale", travelCostRate: "", travelCostPerKm: "", mealAllowanceRate: "", minimumHours: "", billingInterval: "", paymentTermDays: "", individualAgreements: "", }; export function facilityToFormValues(facility) { return { name: facility.name ?? "", crmStatus: facility.crmStatus ?? "Lead", facilityType: facility.facilityType ?? "", website: facility.website ?? "", street: facility.street ?? "", postalCode: facility.postalCode ?? "", city: facility.city ?? "", country: facility.country ?? "", billingStreet: facility.billingStreet ?? "", billingPostalCode: facility.billingPostalCode ?? "", billingCity: facility.billingCity ?? "", billingCountry: facility.billingCountry ?? "", billingRate: facility.billingRate ?? "", nightSurchargePercent: facility.nightSurchargePercent ?? "", saturdaySurchargePercent: facility.saturdaySurchargePercent ?? "", sundaySurchargePercent: facility.sundaySurchargePercent ?? "", holidaySurchargePercent: facility.holidaySurchargePercent ?? "", travelCostMode: facility.travelCostMode ?? "Pauschale", travelCostRate: facility.travelCostRate ?? "", travelCostPerKm: facility.travelCostPerKm ?? "", mealAllowanceRate: facility.mealAllowanceRate ?? "", minimumHours: facility.minimumHours ?? "", billingInterval: facility.billingInterval ?? "", paymentTermDays: facility.paymentTermDays ?? "", individualAgreements: facility.individualAgreements ?? "", }; } export function facilityFormToPayload(form, { followUpDays = null } = {}) { return { name: form.name.trim(), crmStatus: form.crmStatus, followUpDays: followUpDays, facilityType: form.facilityType || null, website: form.website.trim() || null, street: form.street.trim() || null, postalCode: form.postalCode.trim() || null, city: form.city.trim() || null, country: form.country.trim() || null, billingStreet: form.billingStreet.trim() || null, billingPostalCode: form.billingPostalCode.trim() || null, billingCity: form.billingCity.trim() || null, billingCountry: form.billingCountry.trim() || null, billingRate: parseGermanDecimal(form.billingRate), nightSurchargePercent: parseGermanDecimal(form.nightSurchargePercent), saturdaySurchargePercent: parseGermanDecimal(form.saturdaySurchargePercent), sundaySurchargePercent: parseGermanDecimal(form.sundaySurchargePercent), holidaySurchargePercent: parseGermanDecimal(form.holidaySurchargePercent), travelCostMode: form.travelCostMode || "Pauschale", travelCostRate: parseGermanDecimal(form.travelCostRate), travelCostPerKm: parseGermanDecimal(form.travelCostPerKm), mealAllowanceRate: parseGermanDecimal(form.mealAllowanceRate), minimumHours: parseGermanDecimal(form.minimumHours), billingInterval: form.billingInterval || null, paymentTermDays: form.paymentTermDays === "" ? null : Number(form.paymentTermDays), individualAgreements: form.individualAgreements.trim() || null, }; } export default function FacilityForm({ form, onChange, currentCrmStatus = null }) { const { items: crmStatusOptions } = useValueListItems("CrmStatus"); const { items: facilityTypes } = useValueListItems("FacilityType"); const { items: billingIntervals } = useValueListItems("BillingInterval"); const [transitions, setTransitions] = useState([]); useEffect(() => { let cancelled = false; window.omsorg.valueLists.listTransitions("CrmStatus").then((result) => { if (!cancelled) { setTransitions(result.ok ? result.data ?? [] : []); } }); return () => { cancelled = true; }; }, []); const currentCrmStatusItem = crmStatusOptions.find((option) => option.value === currentCrmStatus); const selectableCrmStatusOptions = currentCrmStatusItem ? crmStatusOptions.filter( (option) => option.id === currentCrmStatusItem.id || transitions.some((t) => t.fromItemId === currentCrmStatusItem.id && t.toItemId === option.id) ) : crmStatusOptions; function updateField(field) { return (event) => onChange({ ...form, [field]: event.target.value }); } function updateDecimalField(field) { return (rawValue) => onChange({ ...form, [field]: rawValue }); } return (
Adresse
Rechnungsadresse
Konditionen
{form.travelCostMode === "ProKilometer" ? ( ) : ( )}
); } export function FormActions({ onCancel, isSaving, submitLabel }) { return (
Abbrechen {isSaving ? "Speichert..." : submitLabel}
); }