import { FileBadge, FileText, FolderKanban, Info, PackageCheck, Pointer, Printer, Trash2, 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 { 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 { api } from "~/utils/api"; import { Confirm } from "../confirm"; import { AdminLavoraConferma } from "./admin_conferma"; import { AdminContratto } from "./admin_contratto"; import { ConfermaAnnuncioModal, ConfermaInLavorazioneModal } from "./conferma"; 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.user_confirmed_at != null && } {data.accettato_conferma_at != null && ( <> {data.gestionale_id && ( )} )} {/* */} { mutate({ annuncioId, servizioId, }); }} title="Elimina annuncio" >
); }; export const UserActions = () => { const { servizioId } = useServizio(); const { data, annuncioId } = useServizioAnnuncio(); const { locale } = useTranslation(); const ContattiSbloccati = data.open_contatti_at !== null; const ConfermaUtente = data.user_confirmed_at !== null; const ConfermaLavorata = data.doc_conferma_added && data.hasConfermaAdmin; const AccettatoConferma = data.accettato_conferma_at !== null; return ( <>
{ConfermaUtente ? !data.hasConfermaAdmin && : ContattiSbloccati && } {AccettatoConferma ? ( ) : ( ConfermaLavorata && (data.doc_conferma_ref ? ( ) : (

{locale === "it" ? "Il documento non è più disponibile" : "The document is no longer available"}

{locale === "it" ? "Se hai bisogno di una copia, contattaci via email o chat." : "If you need a copy, contact us via email or chat."}

)) )}
{data.accettato_conferma_at != null && } ); }; const AdminAnnuncioContatti = () => { const { data } = useServizioAnnuncio(); 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 ( ); };