Show email/phone in pro detail and improve RETHUS section
- Backend: include email and phone in users select for professionals - Admin detail page: RETHUS section shows cedula+code with copy buttons Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
f845350911
commit
efb48e017f
@@ -10,7 +10,7 @@ import { Badge } from '@/components/ui/badge';
|
|||||||
import { Input } from '@/components/ui/input';
|
import { Input } from '@/components/ui/input';
|
||||||
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
|
import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import { ArrowLeft, Pencil, X, Check, ShieldCheck, ShieldAlert, ExternalLink } from 'lucide-react';
|
import { ArrowLeft, Pencil, X, Check, ShieldCheck, ShieldAlert, ExternalLink, Copy } from 'lucide-react';
|
||||||
|
|
||||||
interface User { id: string; name: string; email?: string; phone?: string; city?: string; picture?: string; }
|
interface User { id: string; name: string; email?: string; phone?: string; city?: string; picture?: string; }
|
||||||
interface Schedule { id: string; day_of_week: number; enabled: boolean; range1_hour1?: string; range1_hour2?: string; }
|
interface Schedule { id: string; day_of_week: number; enabled: boolean; range1_hour1?: string; range1_hour2?: string; }
|
||||||
@@ -293,21 +293,44 @@ export default function ProfessionalDetailPage() {
|
|||||||
<CardContent className="space-y-4">
|
<CardContent className="space-y-4">
|
||||||
{professional.rethus_code ? (
|
{professional.rethus_code ? (
|
||||||
<>
|
<>
|
||||||
<div className="flex items-center gap-3 text-sm">
|
<div className="grid grid-cols-2 gap-3 text-sm">
|
||||||
<span className="text-muted-foreground">Código registrado:</span>
|
<div className="space-y-1">
|
||||||
<span className="font-mono font-semibold">{professional.rethus_code}</span>
|
<span className="text-muted-foreground">Código RETHUS</span>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<span className="font-mono font-semibold">{professional.rethus_code}</span>
|
||||||
|
<button
|
||||||
|
onClick={() => { navigator.clipboard.writeText(professional.rethus_code!); toast.success('Código copiado'); }}
|
||||||
|
className="text-muted-foreground hover:text-foreground"
|
||||||
|
title="Copiar código"
|
||||||
|
>
|
||||||
|
<Copy className="h-3.5 w-3.5" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{professional.identification && (
|
||||||
|
<div className="space-y-1">
|
||||||
|
<span className="text-muted-foreground">Cédula</span>
|
||||||
|
<div className="flex items-center gap-2">
|
||||||
|
<span className="font-mono font-semibold">{professional.identification}</span>
|
||||||
|
<button
|
||||||
|
onClick={() => { navigator.clipboard.writeText(professional.identification!); toast.success('Cédula copiada'); }}
|
||||||
|
className="text-muted-foreground hover:text-foreground"
|
||||||
|
title="Copiar cédula"
|
||||||
|
>
|
||||||
|
<Copy className="h-3.5 w-3.5" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="flex flex-wrap gap-3">
|
<div className="flex flex-wrap gap-3">
|
||||||
<Button
|
<Button
|
||||||
variant="outline"
|
variant="outline"
|
||||||
size="sm"
|
size="sm"
|
||||||
onClick={() => window.open(
|
onClick={() => window.open('https://www.minsalud.gov.co/salud/Paginas/rethus.aspx', '_blank')}
|
||||||
`https://www.minsalud.gov.co/salud/Paginas/rethus.aspx`,
|
|
||||||
'_blank'
|
|
||||||
)}
|
|
||||||
>
|
>
|
||||||
<ExternalLink className="mr-2 h-4 w-4" />
|
<ExternalLink className="mr-2 h-4 w-4" />
|
||||||
Consultar en RETHUS (Minsalud)
|
Abrir portal RETHUS (Minsalud)
|
||||||
</Button>
|
</Button>
|
||||||
{!professional.rethus_validated && (
|
{!professional.rethus_validated && (
|
||||||
<Button
|
<Button
|
||||||
@@ -323,7 +346,7 @@ export default function ProfessionalDetailPage() {
|
|||||||
</div>
|
</div>
|
||||||
{!professional.rethus_validated && (
|
{!professional.rethus_validated && (
|
||||||
<p className="text-xs text-muted-foreground">
|
<p className="text-xs text-muted-foreground">
|
||||||
Consulta el código en el portal de Minsalud, verifica que coincida con el profesional y luego marca como validado.
|
Copia el código o cédula, búscalo en el portal de Minsalud y una vez verificado haz clic en "Marcar como validado".
|
||||||
</p>
|
</p>
|
||||||
)}
|
)}
|
||||||
</>
|
</>
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export class ProfessionalsService {
|
|||||||
skip,
|
skip,
|
||||||
take: limit,
|
take: limit,
|
||||||
include: {
|
include: {
|
||||||
users: { select: { id: true, name: true, picture: true, city: true } },
|
users: { select: { id: true, name: true, email: true, phone: true, picture: true, city: true } },
|
||||||
schedules: true,
|
schedules: true,
|
||||||
specializations: true,
|
specializations: true,
|
||||||
payment_methods: true,
|
payment_methods: true,
|
||||||
@@ -31,7 +31,7 @@ export class ProfessionalsService {
|
|||||||
let prof = await this.prisma.professionals.findUnique({
|
let prof = await this.prisma.professionals.findUnique({
|
||||||
where: { id },
|
where: { id },
|
||||||
include: {
|
include: {
|
||||||
users: { select: { id: true, name: true, picture: true, city: true } },
|
users: { select: { id: true, name: true, email: true, phone: true, picture: true, city: true } },
|
||||||
schedules: { orderBy: { day_of_week: 'asc' } },
|
schedules: { orderBy: { day_of_week: 'asc' } },
|
||||||
specializations: true,
|
specializations: true,
|
||||||
payment_methods: true,
|
payment_methods: true,
|
||||||
@@ -41,7 +41,7 @@ export class ProfessionalsService {
|
|||||||
prof = await this.prisma.professionals.findUnique({
|
prof = await this.prisma.professionals.findUnique({
|
||||||
where: { user_id: id },
|
where: { user_id: id },
|
||||||
include: {
|
include: {
|
||||||
users: { select: { id: true, name: true, picture: true, city: true } },
|
users: { select: { id: true, name: true, email: true, phone: true, picture: true, city: true } },
|
||||||
schedules: { orderBy: { day_of_week: 'asc' } },
|
schedules: { orderBy: { day_of_week: 'asc' } },
|
||||||
specializations: true,
|
specializations: true,
|
||||||
payment_methods: true,
|
payment_methods: true,
|
||||||
|
|||||||
Reference in New Issue
Block a user