"use client"; import { Button } from "~/components/ui/button"; import { Card } from "~/components/ui/card"; import Image from "next/image"; import { format } from "date-fns"; import { useReactToPrint } from "react-to-print"; import { it } from "date-fns/locale"; import { formatCurrency } from "~/lib/utils"; import { useRef } from "react"; import { PaymentMethodToString, type PaymentType } from "~/i18n/stripe"; export function ReceiptGenerator({ data }: { data: PurchaseData }) { const contentRef = useRef(null); const reactToPrintFn = useReactToPrint({ contentRef, //print: async (target) => {console.log("Printing...", target.contentDocument);}, }); return (

Ricevuta di cortesia

); } interface Item { description: string; price: number; discount: number; } export interface PurchaseData { paymentId: string; date: Date; clienteNome: string; clienteIndirizzo: string; paymentMethod: string; items: Item[]; } interface ReceiptProps { data: PurchaseData; } function Receipt({ data }: ReceiptProps) { const companyName = "Arcenia S.r.l."; const companyAddress = "Via Beata Giovanna 1\nBassano del Grappa (VI) 36061\nItalia"; const total = data.items.reduce( (acc, item) => acc + item.price * (1 - item.discount), 0, ); const note = "La presente รจ non costituisce ricevuta o fattura fiscale.\nRiceverai la fattura elettronica direttamente al tuo indirizzo di posta."; const footer = "Arcenia Srl. | Tel. +39 0424529869 | Email: arca@infoalloggi.it"; return (

{companyName}

{companyAddress}

{`${companyName}

Ricevuta di cortesia

ID Pagamento

{data.paymentId}

Data

{format(data.date, "PPP", { locale: it, })}

{format(data.date, "p", { locale: it, })}

Intestatario:

{data.clienteNome}

{data.clienteIndirizzo}

{data.items.map((item, idx) => ( ))}
Descrizione Prezzo Sconto Importo
{item.description} {formatCurrency(item.price)} {item.discount > 0 ? `-${(item.discount * 100).toFixed(0)}%` : ""} {formatCurrency(item.price * (1 - item.discount))}
Totale: {formatCurrency(total)}
di cui IVA (22%): {formatCurrency(total * 0.22)}

Metodo di pagamento

{PaymentMethodToString(data.paymentMethod as PaymentType)}

Status pagamento

Pagato

Note

{note}

{footer}

); }