"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

); } interface Item { description: string; price: number; discount: number; } export interface PurchaseData { ordineId: OrdiniOrdineId; 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 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}

{data.items.map((item) => ( ))}
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}

); }