diff --git a/resources/views/profesional/agregar-cliente.blade.php b/resources/views/profesional/agregar-cliente.blade.php new file mode 100644 index 0000000..2d9408f --- /dev/null +++ b/resources/views/profesional/agregar-cliente.blade.php @@ -0,0 +1,235 @@ + + + + + + Agregar Cliente - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+

Agregar Nuevo Cliente

+ Volver +
+ +
+
+
+
+
+ +
+ + +
+ @error('dni') +
{{ $message }}
+ @enderror +
+ + @if ($errors->any()) + + @endif + + @if (($estadoDni ?? null) === 'cliente-existente') + + @elseif (($estadoDni ?? null) === 'persona-existente') + + +
+ @csrf + + +
+ + + @error('correo') +
{{ $message }}
+ @enderror +
+ +
+ + Cancelar +
+
+ @elseif (($estadoDni ?? null) === 'persona-nueva') + + +
+ @csrf + + +
+
+ + + @error('nombre') +
{{ $message }}
+ @enderror +
+
+ + + @error('apellido') +
{{ $message }}
+ @enderror +
+
+ +
+
+ + + @error('cuil') +
{{ $message }}
+ @enderror +
+
+ + + @error('fechanac') +
{{ $message }}
+ @enderror +
+
+ +
+ + + @error('telefono') +
{{ $message }}
+ @enderror +
+ +
+ + + @error('correo') +
{{ $message }}
+ @enderror +
+ +
+ + Cancelar +
+
+ @endif +
+
+
+
+
+ @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/ayuda.blade.php b/resources/views/profesional/ayuda.blade.php new file mode 100644 index 0000000..1108229 --- /dev/null +++ b/resources/views/profesional/ayuda.blade.php @@ -0,0 +1,177 @@ + + + + + + Ayuda - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+
+
+

Ayuda para usar el sistema (Profesionales)

+ Volver +
+ +
+
+

Inicio de sesión

+

Para iniciar sesión primero debe poseer credenciales de acceso que le brindará el administrador del sistema.

+

En la vista de inicio de sesión de profesionales, el profesional depositará sus credenciales de acceso, y si son correctas podrá acceder al sistema.

+
+
+ +
+
+

Recuperación de credenciales

+

En caso de olvidar su contraseña, deberá presionar el botón debajo de la vista de inicio de sesión de profesionales "Recuperación para personal" y luego de llenar un pequeño formulario, tendrá la posibilidad de cambiar su contraseña mediante un enlace que se le enviará a su correo electrónico (debe ser el mismo correo con el que se registró en el sistema).

+
+
+ +
+
+

Apartado Mi Agenda

+

En este apartado se visualizará la agenda con todos los turnos cargados, días de atención, feriados, recesos y vacaciones. Se puede ver por día, semana o mes.

+

Configurar mi agenda

+

La agenda se puede configurar con el botón "configurar mi agenda". Aquí se puede personalizar los días y horarios de atención, duración de turnos, recesos, vacaciones y feriados.

+

Agendar un turno

+

Este botón le permite al profesional llenar un pequeño formulario para asignar un turno de forma manual.

+

Visualización de turnos

+

En la agenda figurarán todos los turnos del profesional. Al presionar sobre alguno de ellos, se abrirá en la parte derecha un panel con los detalles de este. En él habrá dos opciones: Cancelar turno y Reprogramar turno.

+

Cancelar turno: Si se presiona este botón, se cancelará el turno y se le notificará al damnificado sobre esta situación.

+

Reprogramar turno: Si se presiona este botón, se abrirá una ventana para poder asignar el nuevo día y horario del turno. En este caso también se le notificará al damnificado sobre la situación.

+
+
+ +
+
+

Mis Clientes

+

En esta sección se visualizarán todos los clientes correspondientes a al profesional.

+

Filtro: Para buscar un cliente se podrá hacer uso del filtro. En él se puede filtrar por DNI, nombre, apellido, correo o estado (activo o inactivo).

+

Sobre los clientes se podrán hacer tres acciones: Dar de baja/alta, editar sus datos y/o subir documentación.

+

Dar de baja/alta: Al presionar este botón, se dará de baja un cliente (ya sea porque ya no es más cliente o por otros motivos). Si el cliente está de baja, se lo podrá dar de alta nuevamente presionando el mismo botón.

+

Editar datos: En caso de que el cliente cambie sus datos o si los datos están mal cargados, se lo podrá editar con este botón.

+

Subir documentación: Al presionar este botón, se podrá visualizar los documentos cargados para ese cliente. Además, se podrá subir nueva documentación, descargar y eliminar la documentación existente.

+
+
+ +
+
+

Mis Datos

+

Aquí se podrá ver los datos del profesional en cuestión. Solamente podrá visualizar sus datos, no editarlos. Para editarlos deberá comunicarle al administrador su deseo de editar sus propios datos en caso de que corresponda.

+
+
+ +
+
+

Revisar Formularios

+

En esta sección se visualizarán los formularios correspondientes a la profesión del profesional (ejemplo, si el profesional es abogado, podrá ver todos los formularios correspondientes a abogacía).

+

Podrá filtrar por nombre, correo, celular, estado, etc.

+

Visualizar formulario: Al ver un formulario, se podrá rechazar, asignar un turno manual o asignar un turno automático.

+

Al rechazar el formulario, le dará la posibilidad a otro profesional de aceptar o rechazar el formulario.

+

Al asignar un turno manual o automático, le quitará la posibilidad a otro profesional de interactuar con el formulario.

+

Aclaración: En caso de asignar un turno manual o automático, se le notificará por correo a la persona que envió el formulario los detalles de su turno.

+
+
+ +
+
+

Notificaciones

+

Aquí aparecerán las siguientes notificaciones:

+
    +
  • Turnos de hoy: Informará al profesional todos los turnos (si hubiera) que tendrá en el día actual.
  • +
  • Turnos de mañana: Informará al profesional todos los turnos (si hubiera) que tendrá en el día siguiente.
  • +
  • Turnos cancelados: Se le informará al profesional en caso de que un cliente cancele un turno.
  • +
+
+
+ +
+
+

¿Qué hacer en caso de detectar un error en la página?

+

Si se encuentra con un error en el sitio, agradeceríamos que lo reporte con el botón que aparece en la parte superior de la página con el símbolo 🐞. Al apretarlo se sacará una foto a su pantalla automáticamente y se le pedirá que complete un pequeño formulario explicando que fue lo que ocurrió.

+
+
+
+
+
+ + @include('partials.reportar-falla-boton') + + diff --git a/resources/views/profesional/configurar-agenda.blade.php b/resources/views/profesional/configurar-agenda.blade.php new file mode 100644 index 0000000..aed38d4 --- /dev/null +++ b/resources/views/profesional/configurar-agenda.blade.php @@ -0,0 +1,422 @@ + + + + + + Configurar Mi Agenda + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ +
+ +
+ @php + $filasAtencion = old('dias', isset($bloquesAtencion) ? (is_array($bloquesAtencion) ? $bloquesAtencion : $bloquesAtencion->toArray()) : []); + $filasReceso = old('recesos', isset($bloquesReceso) ? (is_array($bloquesReceso) ? $bloquesReceso : $bloquesReceso->toArray()) : []); + $filasVacaciones = old('vacaciones', isset($vacaciones) ? (is_array($vacaciones) ? $vacaciones : $vacaciones->toArray()) : []); + $filasFeriados = old('feriados', isset($feriados) ? (is_array($feriados) ? $feriados : $feriados->toArray()) : []); + $duracionTurnoActual = (int) old('duracionturno', $duracionTurno ?? 30); + @endphp + +
+

Configurar Mi Agenda

+ Volver a Mi Agenda +
+ + @if(session('agenda_success')) +
{{ session('agenda_success') }}
+ @endif + + @if($errors->any()) +
+ Se encontraron errores: + +
+ @endif + +
+ @csrf + +
+

Duración de los turnos

+
+
+ + +
+
+

Esta duración se usará para generar la disponibilidad y calcular el horario de fin de cada turno.

+
+
+
+ +
+
+

Dias de atenciones

+ +
+

Hasta 10 horarios en total: maximo 5 AM y 5 PM.

+ +
+ + + + + + + + + + + +
DiaInicioFinTipo
+
+
+ +
+
+

Receso

+ +
+ +
+ + + + + + + + + + +
DiaInicioFin
+
+
+ +
+
+

Vacaciones

+ +
+ +
+ + + + + + + + + + +
Fecha inicioFecha finDescripcion
+
+
+ +
+
+

Feriados

+ +
+ +
+ + + + + + + + + +
FechaDescripcion
+
+
+ +
+ Cancelar + +
+
+
+ + + + + + + + + + + + @include('partials.reportar-falla-boton') + + + + diff --git a/resources/views/profesional/dashboard.blade.php b/resources/views/profesional/dashboard.blade.php new file mode 100644 index 0000000..cebd032 --- /dev/null +++ b/resources/views/profesional/dashboard.blade.php @@ -0,0 +1,682 @@ + + + + + + Dashboard Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ +
+ +
+ @if(session('turno_directo_success')) + + @endif + + @if(session('turno_directo_error')) + + @endif + + @if(session('profesional_action_success')) + + @endif + + @if(session('profesional_action_error')) + + @endif + + @if($errors->any()) + + @endif + +
+

Mi Agenda

+
+ Configurar mi agenda + + 📅 Hoy: {{ $cantidadTurnosHoy ?? 0 }} + 🗓️ Futuros: {{ $cantidadTurnosFuturos ?? 0 }} +
+
+ +
+
+
+
+ +
+
+

Detalle del turno

+
+ Seleccioná un turno del calendario para ver la información. +
+
+
+
+
+ +
+ @csrf +
+ + + + + + + + + + {{-- Boton oculto para reabrir modal si hay errores de validacion --}} + @if($errors->any()) + + @endif + + {{-- Modal: Asignar un turno --}} + + + @php + $turnoDirectoWarning = session('turno_directo_warning'); + $reprogramarTurnoWarning = session('reprogramar_turno_warning'); + @endphp + + + + + + + + @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/detalle-formulario.blade.php b/resources/views/profesional/detalle-formulario.blade.php new file mode 100644 index 0000000..9d0b30a --- /dev/null +++ b/resources/views/profesional/detalle-formulario.blade.php @@ -0,0 +1,496 @@ + + + + + + Detalle Formulario - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + + +
+ +
+ +
+
+

Detalle del Formulario

+ Volver a formularios +
+ + @if($errors->any()) + + @endif + + @if(session('profesional_action_success')) + + @endif + + @if(session('profesional_action_error')) + + @endif + + @if(session('formulario_turno_manual_warning')) + + @endif + +
+
+
+
+

Nombre

+

{{ $formulario->nombrecompleto ?? '-' }}

+
+
+

Fecha de envío

+

+ {{ $formulario->created_at ? $formulario->created_at->format('d/m/Y H:i:s') : ($formulario->fechaenvio ? \Illuminate\Support\Carbon::parse($formulario->fechaenvio)->format('d/m/Y') : '-') }} +

+
+
+

Profesional de preferencia

+

+ @if($profesionalPreferido) + {{ trim(($profesionalPreferido->persona?->nombre ?? '') . ' ' . ($profesionalPreferido->persona?->apellido ?? '')) ?: ('Profesional #' . $profesionalPreferido->id) }} + @else + Indistinto + @endif +

+
+
+

Mi estado en este formulario

+

+ @if(($formularioAceptadoPorOtro ?? false) && strcasecmp($estadoProfesionalFormulario, 'Aceptado') !== 0) + Aceptado por otro + @elseif(strcasecmp($estadoProfesionalFormulario, 'Rechazado') === 0) + Rechazado por mí + @elseif(strcasecmp($estadoProfesionalFormulario, 'Aceptado') === 0) + Aceptado por mí + @else + Pendiente + @endif +

+
+
+

Estado del formulario

+ @php + $estadoBaseFormulario = trim((string) ($formulario->estado ?? '')); + $estadoFormulario = (($formularioAceptadoPorOtro ?? false) + && strcasecmp($estadoProfesionalFormulario, 'Aceptado') !== 0 + && strcasecmp($estadoBaseFormulario, 'Aceptado') === 0) + ? 'Aceptado por otro' + : $estadoBaseFormulario; + $estadoClase = match (mb_strtolower($estadoFormulario)) { + 'rechazado por todos' => 'text-bg-danger', + 'aceptado' => 'text-bg-success', + 'aceptado por otro' => 'text-bg-secondary', + default => 'text-bg-warning', + }; + @endphp +

+ {{ $estadoFormulario !== '' ? $estadoFormulario : '-' }} +

+
+
+

Descripción del formulario

+
+ {{ $formulario->descripcion ?: 'Sin descripción.' }} +
+
+
+

Días de preferencia

+ @if($formulario->diasPreferidos->isNotEmpty()) +
+ @foreach($formulario->diasPreferidos as $dia) + {{ $dia->descripcion }} + @endforeach +
+ @else +

-

+ @endif +
+
+

Horario de preferencia

+ @if($formulario->horariosPreferidos->isNotEmpty()) +
+ @foreach($formulario->horariosPreferidos as $horario) + {{ $horario->descripcion }} + @endforeach +
+ @else +

-

+ @endif +
+
+ + @if($formularioAceptadoPorOtro ?? false) + + @endif + +
+ @if(!($formularioAceptadoPorOtro ?? false)) + @if(strcasecmp($estadoProfesionalFormulario, 'Aceptado') === 0) +
+ @csrf + +
+ @else +
+ @csrf + +
+ + + @endif + @endif +
+
+
+
+ + + + + + @php + $formularioTurnoManualWarning = session('formulario_turno_manual_warning'); + @endphp + + + + + + + + + + + @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/documentacion-cliente.blade.php b/resources/views/profesional/documentacion-cliente.blade.php new file mode 100644 index 0000000..e2b2ec3 --- /dev/null +++ b/resources/views/profesional/documentacion-cliente.blade.php @@ -0,0 +1,209 @@ + + + + + + Documentación del Cliente - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+
+

Documentación del Cliente

+

+ {{ trim(($cliente->persona?->nombre ?? '') . ' ' . ($cliente->persona?->apellido ?? '')) !== '' ? trim(($cliente->persona?->nombre ?? '') . ' ' . ($cliente->persona?->apellido ?? '')) : 'Cliente' }} + · DNI: {{ $cliente->dni }} +

+
+ Volver +
+ + @if (session('success')) + + @endif + + @if ($errors->any()) + + @endif + +
+
+
+
+

Agregar documentación

+
+ @csrf +
+ + +
Podés subir PDF, imágenes, Word, Excel o TXT. Máximo 5 MB por archivo.
+
+ + +
+
+
+
+ +
+
+
+

Documentación actual

+ + @if($documentos->isEmpty()) +
Este cliente aún no tiene documentación cargada.
+ @else +
+ + + + + + + + + + + + @foreach($documentos as $documento) + + + + + + + + @endforeach + +
ArchivoTipoTamañoFechaAcciones
+
{{ $documento->nombre_visible ?? $documento->nombre }}
+ {{ $documento->nombre }} +
{{ strtoupper((string) $documento->extension) }}{{ number_format(((int) $documento->tamanio_bytes) / 1024, 1, ',', '.') }} KB{{ $documento->created_at ? $documento->created_at->format('d/m/Y H:i') : '-' }} +
+ @if($documento->archivo_existe) + Ver + Descargar + @else + Archivo no encontrado + @endif + +
+ @csrf + +
+
+
+
+ @endif +
+
+
+
+
+ + @include('partials.reportar-falla-boton') + + diff --git a/resources/views/profesional/editar-cliente.blade.php b/resources/views/profesional/editar-cliente.blade.php new file mode 100644 index 0000000..2fb2ea9 --- /dev/null +++ b/resources/views/profesional/editar-cliente.blade.php @@ -0,0 +1,214 @@ + + + + + + Editar Cliente - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+

Editar Cliente

+ Volver +
+ +
+
+
+
+ @if ($errors->any()) + + @endif + +
+ @csrf + +
+
+ + + @error('dni') +
{{ $message }}
+ @else + Números y letras: 7 a 20 caracteres + @enderror +
+
+ + + @error('correo') +
{{ $message }}
+ @else + Formato: usuario@ejemplo.com + @enderror +
+
+ +
+
+ + + @error('nombre') +
{{ $message }}
+ @else + Solo letras y espacios + @enderror +
+
+ + + @error('apellido') +
{{ $message }}
+ @else + Solo letras y espacios + @enderror +
+
+ +
+
+ + + @error('cuil') +
{{ $message }}
+ @else + Solo números: 11 dígitos exactos + @enderror +
+
+ + + @error('fechanac') +
{{ $message }}
+ @else + Fecha válida, no puede ser futura + @enderror +
+
+ +
+ + + @error('telefono') +
{{ $message }}
+ @else + Solo números: 8 a 15 dígitos + @enderror +
+ +
+ + Cancelar +
+
+
+
+
+
+
+ @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/mis-clientes.blade.php b/resources/views/profesional/mis-clientes.blade.php new file mode 100644 index 0000000..5090027 --- /dev/null +++ b/resources/views/profesional/mis-clientes.blade.php @@ -0,0 +1,200 @@ + + + + + + Mis Clientes - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+

Mis Clientes

+ Volver +
+ +
+
+
+
+ + +
+ +
+ + +
+ +
+ + Limpiar +
+
+
+
+ +
+ + + + + + + + + + + + + + @forelse($clientes as $cliente) + @php + $persona = $cliente->persona; + @endphp + + + + + + + + + + @empty + + + + @endforelse + +
IDNombreApellidoDNICorreoEstadoAcciones
{{ $cliente->id }}{{ $persona?->nombre ?? '-' }}{{ $persona?->apellido ?? '-' }}{{ $cliente->dni }}{{ $cliente->correo }} + @if((int) $cliente->baja_id === 1) + Activo + @else + Inactivo + @endif + +
+ Editar +
+ @csrf + +
+ Docs +
+
No hay clientes cargados.
+
+ + @if($clientes->hasPages()) +
+ {{ $clientes->links() }} +
+ @endif + +
+ Agregar nuevo cliente +
+
+ @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/mis-datos.blade.php b/resources/views/profesional/mis-datos.blade.php new file mode 100644 index 0000000..5b2d9d1 --- /dev/null +++ b/resources/views/profesional/mis-datos.blade.php @@ -0,0 +1,171 @@ + + + + + + Mis Datos - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+
+
+

Mis Datos

+ Volver +
+ +
+
+ @php + $persona = $profesional->persona; + $fechaNac = $persona?->fechanac + ? \Illuminate\Support\Carbon::parse($persona->fechanac)->format('d/m/Y') + : ''; + $profesionTitulo = $profesional->profesion?->titulo ?? ''; + @endphp + +
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+
+
+
+
+ @include('partials.reportar-falla-boton') + + + + + diff --git a/resources/views/profesional/notificaciones.blade.php b/resources/views/profesional/notificaciones.blade.php new file mode 100644 index 0000000..75817c2 --- /dev/null +++ b/resources/views/profesional/notificaciones.blade.php @@ -0,0 +1,275 @@ + + + + + + Notificaciones - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+

Notificaciones

+ Volver +
+ + @php $totalNotificaciones = count($notificaciones ?? []); @endphp + +
+ @if($totalNotificaciones === 0) +
No tenés notificaciones pendientes.
+ @else +
+ @foreach($notificaciones as $index => $notif) + @php + $iconoClase = match($notif['tipo']) { + 'turno_hoy' => 'bg-primary text-white', + 'turno_manana' => 'bg-info text-dark', + 'turno_cancelado' => 'bg-danger text-white', + default => 'bg-light text-dark', + }; + $icono = match($notif['tipo']) { + 'turno_hoy' => 'Hoy', + 'turno_manana' => 'Manana', + 'turno_cancelado' => 'X', + default => 'Aviso', + }; + $claveNotif = $notif['clave'] ?? base64_encode($notif['tipo'] . '|' . $notif['titulo'] . '|' . $notif['fecha']); + @endphp +
+
+
+ {{ $icono }} +
+
+

{{ $notif['titulo'] }}

+

{{ $notif['descripcion'] }}

+ @if(!empty($notif['enlace'])) + Ver detalle + @endif +
+
+ {{ $notif['fecha'] }} + +
+
+
+ @endforeach +
+
No tenés notificaciones pendientes.
+ @endif +
+
+ + @include('partials.reportar-falla-boton') + + + + + + + + diff --git a/resources/views/profesional/revisar-formularios.blade.php b/resources/views/profesional/revisar-formularios.blade.php new file mode 100644 index 0000000..4a4cdc4 --- /dev/null +++ b/resources/views/profesional/revisar-formularios.blade.php @@ -0,0 +1,231 @@ + + + + + + Revisar Formularios - Profesional + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
+ +
+ +
+
+

Revisar Formularios

+ Volver +
+ + @if(session('profesional_action_error')) + + @endif + + @if(session('profesional_action_success')) + + @endif + +
+
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + Limpiar +
+
+
+
+ +
+ + + + + + + + + + + + + + + @forelse($formularios as $formulario) + @php + $fechaFormulario = $formulario->created_at + ? $formulario->created_at->format('d/m/Y H:i:s') + : ($formulario->fechaenvio + ? \Illuminate\Support\Carbon::parse($formulario->fechaenvio)->format('d/m/Y') + : '-'); + @endphp + + + + + + + + + + + @empty + + + + @endforelse + +
FechaNombreCorreoCelularServicioEs clienteEstadoAcciones
{{ $fechaFormulario }}{{ $formulario->nombrecompleto ?? '-' }}{{ $formulario->correo ?? '-' }}{{ $formulario->celular ?? '-' }}{{ $formulario->servicio?->titulo ?? '-' }} + @if($formulario->cliente_id) + + @else + No + @endif + + @php + $estadoBaseFormulario = trim((string) ($formulario->estado ?? '')); + $estadoFormulario = (($formulario->aceptado_por_otro ?? false) + && strcasecmp($estadoBaseFormulario, 'Aceptado') === 0) + ? 'Aceptado por otro' + : $estadoBaseFormulario; + $estadoClase = match (mb_strtolower($estadoFormulario)) { + 'rechazado por todos' => 'text-bg-danger', + 'aceptado' => 'text-bg-success', + 'aceptado por otro' => 'text-bg-secondary', + default => 'text-bg-warning', + }; + @endphp + {{ $estadoFormulario !== '' ? $estadoFormulario : '-' }} + + Ver +
No hay formularios cargados.
+
+ + @if($formularios->hasPages()) +
+ {{ $formularios->links() }} +
+ @endif +
+ @include('partials.reportar-falla-boton') + + + + +