import { GetServerSideProps } from 'next' import React, { useEffect, useState } from 'react' import Footer from '../../../components/footer' import Header from '../../../components/header' import Input from '../../../components/wizard/input' import { BillDocument } from '../../../db/bill' import { BookingDocument } from '../../../db/booking' import { BOOKING_STATUS, MILAGE_RATES } from '../../../db/enums' import { getBookingByUUID } from '../../../db/index' import { dateFormatFrontend } from '../../../helpers/date' export const getServerSideProps: GetServerSideProps = async (context) => { const { res, params: { uuid: uuids }, } = context const uuid = Array.isArray(uuids) ? uuids[0] : uuids const booking = await getBookingByUUID(uuid) if (!booking) { res.statusCode = 404 res.end() return { props: {} } } // TODO: hack, not sure why _id is not serilizable const bookingJSON = JSON.parse(JSON.stringify(booking.toJSON())) return { props: { booking: bookingJSON }, } } function getBookingStatus(booking: BookingDocument) { switch (booking.status) { case BOOKING_STATUS.REQUESTED: return 'In Bearbeitung' case BOOKING_STATUS.CONFIRMED: return 'Best�tigt' case BOOKING_STATUS.REJECTED: return 'Abgewiesen' case BOOKING_STATUS.CANCELED: return 'Storniert' default: return 'Unbekannt - bitte kontaktieren Sie uns!' } } async function saveBill(booking: BookingDocument, bill: BillDocument) { const response = await fetch(`/api/booking/${booking.uuid}/bill/`, { method: 'POST', mode: 'cors', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/json', }, referrerPolicy: 'no-referrer', body: JSON.stringify(bill), }) return response.json() } export default function Bill({ booking: bookingProp, }: { booking: BookingDocument }) { const [booking, setBooking] = useState(bookingProp) const [milageStart, setMilageStart] = useState(0) const [milageEnd, setMilageEnd] = useState(0) const [rate, setRate] = useState(MILAGE_RATES.EXTERN_UP_TO_200) const milage = (0 < milageStart && milageStart < milageEnd && milageEnd - milageStart) || 0 const total = (milage && rate && milage * rate) || 0 // in case the props change, update the internal state useEffect(() => setBooking(bookingProp), [bookingProp]) return (