import { Circle, CircleCheck, FileBadge, FileText, FolderKanban, Info, PackageCheck, Printer, Trash2, Workflow, Wrench, } from "lucide-react"; import Link from "next/link"; import toast from "react-hot-toast"; import { AlertDialog, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, AlertDialogTrigger, } from "~/components/ui/alert-dialog"; import { Button, type ButtonConfigs } from "~/components/ui/button"; import { Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, } from "~/components/ui/popover"; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "~/components/ui/tooltip"; import { cn } from "~/lib/utils"; import { useTranslation } from "~/providers/I18nProvider"; import { useServizio, useServizioAnnuncio } from "~/providers/ServizioProvider"; import type { AnnunciId } from "~/schemas/public/Annunci"; import OrderTypeEnum from "~/schemas/public/OrderTypeEnum"; import type { ServizioServizioId } from "~/schemas/public/Servizio"; import StatusConfermaEnum from "~/schemas/public/StatusConfermaEnum"; import type { ServizioAnnuncioData } from "~/server/controllers/servizio.controller"; import { api } from "~/utils/api"; import { Confirm } from "../confirm"; import { AdminContratto } from "./admin_contratto"; import { ContattiProprietarioModal } from "./modale_contatti"; export const AdminActions = () => { const { servizioId, isAdmin } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const utils = api.useUtils(); const { mutate } = api.servizio.removeAnnuncioServizio.useMutation({ onError: (error) => { console.error(error); toast.error("Errore durante la rimozione dell'annuncio"); }, onSuccess: async () => { await utils.servizio.invalidate(); toast.success("Annuncio rimosso"); }, }); if (!isAdmin) return null; return ( <>

Azioni Admin:

{data.status_conferma != null && ( <> {data.gestionale_id && ( )} )} {/* */} { mutate({ annuncioId, servizioId, }); }} title="Elimina annuncio" >
); }; export const UserActions = () => { const { data } = useServizioAnnuncio(); return ( <>
{data.status_conferma != null && } ); }; export const AnnuncioConfermaPopover = ({ servizioId, annuncioId, status_conferma, }: { servizioId: ServizioServizioId; annuncioId: AnnunciId; status_conferma: StatusConfermaEnum | null; }) => { const utils = api.useUtils(); const { mutate } = api.servizio.updateServizioAnnunci.useMutation({ onSuccess: async () => { await utils.servizio.invalidate(); }, onError: (error) => { console.error(error); toast.error("Errore durante l'aggiornamento dell'annuncio"); }, }); const handleStatusChange = (status: StatusConfermaEnum | null) => { mutate({ annuncioId, servizioId, data: { status_conferma: status }, }); }; return ( Status Conferma: Description
{Object.values(StatusConfermaEnum).map((status) => ( ))}
); }; export const AnnuncioContatti = ({ data }: { data: ServizioAnnuncioData }) => { const { data: annuncio, isLoading } = api.annunci.getAnnuncioFull.useQuery({ id: data.id, }); return ( Contatti Annuncio {data.codice} desc
Contatti Aperti il: {data.open_contatti_at ? new Date(data.open_contatti_at).toLocaleString("it-IT") : "Non ancora aperti"}
{isLoading ? (
Loading...
) : ( <>
Locatore/Incaricato: {annuncio?.locatore || "N/A"}{" "} {annuncio?.tipo_locatore ? `(${annuncio.tipo_locatore})` : ""}
Email: {annuncio?.email || "N/A"}
Telefono: {annuncio?.numero || "N/A"}
)}
Chiudi
); }; const PostConfermaSection = () => { const { servizio, servizioId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const { locale } = useTranslation(); const saldoPaid = servizio.isOkSaldo; const consulenzaPaid = servizio.isOkConsulenza; const doc_non_disponibile = locale === "it" ? "Il documento non è più disponibile" : "The document is no longer available"; const contatta_supporto = locale === "it" ? "Se hai bisogno di una copia, contattaci via email o chat." : "If you need a copy, contact us via email or chat."; if (!saldoPaid) { return (

{locale === "it" ? "Questo annuncio è stato confermato, procedi al saldo:" : "This listing has been confirmed, proceed to payment:"}

); } if (!data.doc_contratto_added) { return (

{locale === "it" ? "Ci siamo quasi! Stiamo preparando il contratto per te." : "Almost there! We are preparing the contract for you."}

{locale === "it" ? "Una volta pronto, riceverai una notifica via email." : "Once ready, you will receive a notification via email."}

); } return (

{consulenzaPaid ? locale === "it" ? "Il contratto è pronto, puoi visualizzarlo:" : "The contract is ready, you can view it:" : locale === "it" ? "Il contratto è pronto, puoi visualizzarlo e procedere al saldo:" : "The contract is ready, you can view it and proceed to payment:"}

{data.doc_contratto_ref ? ( ) : (

{doc_non_disponibile}

{contatta_supporto}

)} {!consulenzaPaid && servizio.ordini.some( (o) => o.type === OrderTypeEnum.Consulenza && !o.isActive, ) && data.contratto_tipo && } {data.doc_registrazione_added && (data.doc_registrazione_ref ? ( ) : (

{doc_non_disponibile}

{contatta_supporto}

))}
); }; export const SaldoButton = ({ variant = "info", className, }: { annuncioId: AnnunciId; variant?: ButtonConfigs["variant"]; className?: string; }) => { const { locale } = useTranslation(); const { servizioId } = useServizio(); return ( ); }; const SaldoConsulenzaButton = ({ variant = "info", className, }: { variant?: ButtonConfigs["variant"]; className?: string; }) => { const { locale } = useTranslation(); const { servizioId } = useServizio(); return ( ); };