"use client"; import { format } from "date-fns"; import { it } from "date-fns/locale"; import Image from "next/image"; import toast from "react-hot-toast"; import { Button } from "~/components/ui/button"; import { Card } from "~/components/ui/card"; import { PaymentMethodToString, type PaymentType } from "~/i18n/stripe"; import { formatCurrency } from "~/lib/utils"; import type { OrdiniOrdineId } from "~/schemas/public/Ordini"; import { api } from "~/utils/api"; export function ReceiptGenerator({ data, raw, }: { data: PurchaseData; raw: boolean; }) { const { mutate: generatePdf } = api.pagamenti.getRicevutaCortesiaPdf.useMutation({ onMutate: () => { toast.loading("Generazione PDF in corso...", { id: "generate-pdf", }); }, onSuccess: (res) => { toast.success("PDF generato con successo!", { id: "generate-pdf", }); const blob = new Blob([res as unknown as ArrayBuffer], { type: "application/pdf", }); const url = window.URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = `ricevuta-cortesia-${format(data.date, "yyyy-MM-dd")}.pdf`; document.body.appendChild(link); link.click(); link.remove(); window.URL.revokeObjectURL(url); }, onError: (error) => { toast.error(`Errore durante la generazione del PDF: ${error.message}`, { id: "generate-pdf", }); }, }); if (raw) { return ; } return (

Ricevuta di cortesia

); } export type PurchaseData = { ordineId: OrdiniOrdineId; date: Date; clienteNome: string; clienteIndirizzo: string; paymentMethod: PaymentType; packName: string; sconto: number; amount_cent: number; }; 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 note = "La presente è non costituisce ricevuta o fattura fiscale ai sensi dell'Art.21, DPR 633/72.\nSeguirà 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 Ordine

{data.ordineId}

Data

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

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

Intestatario:

{data.clienteNome}

{data.clienteIndirizzo}

Descrizione Sconto applicato Importo
{data.packName} {data.sconto > 0 && `${data.sconto}%`} {formatCurrency(data.amount_cent / 100)}
Totale: {formatCurrency(data.amount_cent / 100)}
di cui IVA (22%): {formatCurrency((data.amount_cent / 100) * 0.22)}

Metodo di pagamento

{PaymentMethodToString(data.paymentMethod)}

Status pagamento

Pagato

Note

{note}

{footer}

); }