import { useEffect, useState } from "react"; import OmsorgButton from "../../components/ui/OmsorgButton"; import { useValueListItems } from "../../app/useValueListItems"; 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, { includeCrmStatus = false, followUpDays = null } = {}) { const payload = { name: form.name.trim(), 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, }; if (includeCrmStatus) { payload.crmStatus = form.crmStatus; payload.followUpDays = followUpDays; payload.billingRate = form.billingRate === "" ? null : Number(form.billingRate); payload.nightSurchargePercent = form.nightSurchargePercent === "" ? null : Number(form.nightSurchargePercent); payload.saturdaySurchargePercent = form.saturdaySurchargePercent === "" ? null : Number(form.saturdaySurchargePercent); payload.sundaySurchargePercent = form.sundaySurchargePercent === "" ? null : Number(form.sundaySurchargePercent); payload.holidaySurchargePercent = form.holidaySurchargePercent === "" ? null : Number(form.holidaySurchargePercent); payload.travelCostMode = form.travelCostMode || "Pauschale"; payload.travelCostRate = form.travelCostRate === "" ? null : Number(form.travelCostRate); payload.travelCostPerKm = form.travelCostPerKm === "" ? null : Number(form.travelCostPerKm); payload.mealAllowanceRate = form.mealAllowanceRate === "" ? null : Number(form.mealAllowanceRate); payload.minimumHours = form.minimumHours === "" ? null : Number(form.minimumHours); payload.billingInterval = form.billingInterval || null; payload.paymentTermDays = form.paymentTermDays === "" ? null : Number(form.paymentTermDays); payload.individualAgreements = form.individualAgreements.trim() || null; } return payload; } export default function FacilityForm({ form, onChange, includeCrmStatus = false, currentCrmStatus = null }) { const { items: crmStatusOptions } = useValueListItems("CrmStatus"); const { items: facilityTypes } = useValueListItems("FacilityType"); const { items: billingIntervals } = useValueListItems("BillingInterval"); const [transitions, setTransitions] = useState([]); useEffect(() => { if (!includeCrmStatus) return; let cancelled = false; window.omsorg.valueLists.listTransitions("CrmStatus").then((result) => { if (!cancelled) { setTransitions(result.ok ? result.data ?? [] : []); } }); return () => { cancelled = true; }; }, [includeCrmStatus]); 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 }); } return (