Compare commits

..

3 Commits

58 changed files with 2460 additions and 0 deletions
+455
View File
@@ -0,0 +1,455 @@
@startuml
' Configuración visual
skinparam classAttributeIconSize 0
skinparam linetype ortho
interface INotificadorTurnos <<interface>>
{
+ NotificarCancelacionTurno(mensaje:string, turno : Turno, destinatario : string)
+ NotificarAsignacionTurno(mensaje:string, turno : Turno, destinatario : string)
+ NotificarRecordatorio(mensaje:string, turno : Turno, destinatario : string)
}
interface INotificadorCrearCliente <<interface>>
{
+ NotificarClienteCreado (cliente : Cliente, mensaje : string, destinatario : string)
}
interface INotificadorCrearProfesional <<interface>>
{
+ NotificarProfesionalCreado(profesional : Profesional, mensaje : string, destinatario : string)
}
interface INotificadorUsuario <<interface>> {
+ NotificarRecuperacionCredenciales(destinatario: string, link : string, token : string)
}
class ServicioMail {
- mensaje : string
- T : Turno //dentro de Turno, tengo el correo del destinatario
+ ServicioMail(T : Turno, mensaje: string)
+ ServicioMail(mensaje: string)
+ NotificarCancelacionTurno(mensaje:string, turno : Turno, destinatario : string)
+ NotificarAsignacionTurno(mensaje:string, turno : Turno, destinatario : string)
+ NotificarRecordatorio(mensaje:string, turno : Turno, destinatario : string)
+ NotificarClienteCreado (cliente : Cliente, mensaje : string, destinatario : string)
+ NotificarProfesionalCreado(profesional : Profesional, mensaje : string, destinatario : string)
+ NotificarRecuperacionCredenciales(token : string, destinatario: string)
}
class AuthController {
//Recuperacion
+ RecuperarProf(ROL : string, usuario : string, email :string, notificador : INotificadorUsuario) : void
+ RecuperarCli(usuario : string, email :string, notificador : INotificadorUsuario) : void
+ RecuperarAdmin(DNI : string, correo : string, CUIL : string) //En caso de que el admin se olvide su usuario
- GenerarToken(ROL : string, usuario : string) : string //genera y guarda en la base de datos
- ExisteUsuario(ROL : string, usuario : string) : bool
- CorreoPertenece(ROL : string, ID_Credencial : integer) : bool
- ExisteAdmin(DNI, correo, CUIL) : bool
//Login
+ LoginCliente(string, string) : bool
+ LoginProfesional(string, string) : bool
}
package "Gestión de Usuarios" {
class Persona {
- Per_DNI: integer
- Per_Nombre: string
- Per_Apellido: string
- Per_CUIL: string
- Per_FechaNac: date
+ Persona(integer, string, string, string, date) : void
- Existe(Per_DNI) : bool
+ GuardarPersona(p:Persona, telefonos : array, foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string) : bool
}
class Telefono {
- Tel_ID: integer
- Tel_Numero: bigint
+ GuardarTelefono(DNI : integer, Telefono : integer) : void
- Existe() : bool
+ GetTelefonos (DNI: integer) : array
}
class Administrador {
- Admin_Correo: string
- Admin_DNI: integer
+ Administrador(correo: string, dni: integer) : void
+ Recuperacion(correo : string, dni : integer, matricula : integer) : void
+ EditarAdmin(nombre: string, apellido: string, correo: string, correoViejo: string, dni: integer) : bool
+ Login(string, string) : bool
+ CerrarSesion() : void
+ VerLogs() : array
}
class Cliente {
- Cli_DNI: integer
- Cli_Correo: string
+ Cliente(correo: string, dni: integer, foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string) : bool
+ Login(string, string) : bool
+ EnviarFormulario(NombreyApellido:string, correo:string, celular:string, matriculaProfPref: string, dniProfPref: integer) : bool //se crea una instancia de formulario
+ GuardarCliente(Cliente) : bool
+ EditarCliente(integer, string, string, string, date, string) : bool
+ MostrarClientes() : array
+ CambiarEstado(Prof_DNI: integer, Prof_Matricula) : void
+ CerrarSesion() : void
}
class Profesional {
- Profesion_ID: integer
- Profesional_Matricula: integer
- Prof_Correo: string
+ Profesional(matricula : integer, correo : string)
+ Profesional(id : integer, matricula : integer, correo : string)
+ Login(string, string) : bool
+ CerrarSesion() : void
+ Recuperacion(correo : string, dni : integer, matricula : integer)
+ EditarProfesional(Profesion_DNI:integer, Profesion_Matricula : integer, Persona, Foto) : bool
+ AddProfesional(Profesion_DNI:integer, Profesion_Matricula : integer, Persona, Foto) : bool
+ VerProfesionales() : array
+ ConfigurarAgenda() : void
+ DarDeBaja() : void
+ CrearTurnoManual(F : Formulario, FechaHora : datetime) : Turno//crea una instancia de turno, llamo a GuardarTurno() de Agenda
+ CrearTurnoAutomatico(F : Formulario) : Turno //crea una instancia de turno, llamo a GuardarTurno() de Agenda
}
class Credencial {
- Cred_Usuario: string
- Cred_Contra: string
- ROL: string
+ Credencial(userForm : string, passForm : string, ROL : string) //verificar si no existe ese usuario
+ LoginProfesional(userForm : string, passForm : string) : bool //verificar estado del profesional (si está de baja, no debe poder iniciar sesion)
+ LoginCliente(userForm : string, passForm : string) : bool //Verificar si está de baja
- CredencialCorrecta(string, string) : bool
+ GuardarCredencial(Credencial) : integer //Devuelve el ID generado por la BD
+ CambiarContrasenia(ID_Credencial : integer, pass : string, ROL : string) : bool
+ GuardarToken(token : string, HoraFecha : datetime) : void
+ ValidarToken(ROL : string, tokenForm: string, ID_Credencial : integer) : bool
+ ExisteUsuario(ROL : string, usuario : string) : bool
}
class EstadoProfesional {
- Estado_ID: integer
- Estado_Descripcion: string
+ BajaProfesional(Prof_DNI: string, Prof_Matricula: string)
+ ReactivarProfesional(Prof_DNI: string, Prof_Matricula: string)
}
}
package "Gestión de Turnos y Agenda" {
class Turno {
- Turno_ID: integer
- Turno_Inicio: datetime
- Turno_Correo: string //En caso de que no sea Cliente, sino un visitante
- Turno_NombreCompleto: string //En caso de que no sea Cliente, sino un visitante
+ Turno(Turno_Inicio : datetime, Turno_Correo : string, Turno_NombreCompleto : string) //Si es cliente, correo y nombre son NULL
+ CancelarTurno(ID_Turno : integer, INotificador : INotificadorTurnos)
+ VerTurnosCliente(Cliente_DNI: integer)
+ VerTurnosProfesional(id_Profesion : integer, Prof_Matricula : integer)
}
class EstadoTurno {
- EstadoTurno_ID: integer
- EstadoTurno_Descripcion: string
+ EstadoTurno()
+ CambiarEstado(descripcion : string) : void
}
class Agenda {
- Agenda_ID: integer
- Estado: string
- DuracionTurno: integer
+ Agenda(DuracionTurno: integer, prof: Profesional)
+ VerAgenda(): Agenda
+ GuardarTurno(T: Turno, INotificador : INotificadorTurnos) : bool
- Disponible(date) : bool //para asignar manualmente
- VerificarDisponibilidad(f: Formulario) : datetime //Para asignacion automatica
+ GuardarDiaDeAtencion(DiaAtencion) : void
+ GuardarModoVacaciones(ModoVacaciones) : void
+ GuardarFeriado(Feriado) : void
}
class DiaDeAtencion {
- Dia_ID: integer
+ DiaDeAtencion(ID_Dia : integer) //Los id los voy a hardcodear
+ GuardarHorarioAtencion(HorarioAtencion) : void
+ GuardarHorarioReceso(HorarioReceso) : void
+ BuscarID() : integer
+ EliminarHorarioAtencion(ID : integer) : void
+ EliminarHorarioReceso(ID : integer) : void
}
class HorarioAtencion {
- Horario_ID: integer
- Horario_Comienzo: time
- Horario_Final : time
+ HorarioAtencion(Inicio : time, Final : time) : HorarioAtencion
- BuscarIDHorarioAtencion(HorarioAtencion) : integer
+ EliminarHorarioAtencion(HorarioAtencion) : void
}
class HorarioReceso {
- Receso_ID: integer
- Receso_Comienzo: time
- Receso_Fin: time
+ HorarioReceso(Inicio : time, Final : time) : HorarioReceso
- BuscarIDHorarioReceso(HorarioReceso) : integer
+ EliminarHorarioReceso(HorarioReceso) : void
}
class ModoVacaciones {
- Vacaciones_ID: integer
- Vacaciones_Inicio: date
- Vacaciones_Fin: date
+ ModoVacaciones(Inicio : time, Final : time)
- BuscarIDModoVacaciones(ModoVacaciones) : integer
+ EliminarModoVacaciones(ModoVacaciones) : void
- ValidarFecha(inicio, fin) : bool
}
class Feriados {
-Feriado_ID: integer
-Feriado_fecha : date
-Feriado_Descripcion : string
+ Feriado(fecha : date, descripcion : string)
- BuscarIDFeriado(Feriado) : integer
+ EliminarFeriado(Feriado) : void
}
}
class Profesion {
- Profesion_ID: integer
- Profesion_Titulo: string
- VisibleEnFormulario: bool
- Existe(titulo:string) : bool
+ AddProfesion(Titulo:string)
+ DesactivarProfesion(Profesion_ID: integer) //VisibleEnFormulario = false
}
class Servicio {
- Ser_ID: integer
- Ser_Descripcion: string
- Ser_Titulo: string
- Estado: string
- Existe(titulo : string) : bool //se llama antes de agregar un servicio
- BuscarID(titulo : string) : integer
+ AddServicio(titulo:string, descripcion:string, foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string, Id_profesion: integer)
+ EditarServicio(Ser_ID:integer, titulo:string, descripcion:string, foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string)
+ DesactivarServicio(Ser_ID:integer)
}
class ContenidoWeb {
- Contenido_ID: integer
- QuienesSomos: string
+ EditarUbicacion(id : integer, string)
+ EditarServicio(Ser_ID:integer, titulo:string, descripcion:string, foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string)
+ EditarQuienesSomos(string)
}
class Ubicacion {
- Ubi_ID: integer
- Ubi_Link: string
+ Ubicacion (id : integer, string)
+ AddUbi(Ubicacion) : void
+ EditarUbi(id : integer, string) : void
- BuscarIDUbicacion(Ubicacion) : integer
- GuardarUbi(id : integer, string) : void
+ EliminarUbicacion(id : integer) : void
}
class Foto {
- Foto_ID: integer
- Foto_Extension: string
- Foto_Tamanio_bytes: integer
- Foto_mime_type: string
- Foto_Nombre: string
+ Foto(foto_nombre:string, foto_mime_type: string, foto_tamanio_bytes: string, foto_extension: string)
+ GuardarFoto(Per_DNI : integer, Ser_ID : integer, Foto) //si la foto corresponde a una persona Ser_ID es null, si la foto correasponde a un servicio Per_DNI es null
- GuardarRelacionConPersona(Foto_ID: integer, Per_DNI: integer)
- GuardarRelacionConServicio(Foto_ID: integer, Ser_ID: integer)
+ EditarFoto(Per_DNI : integer, Ser_ID : integer, Foto)
- BuscarIDFoto(DNI : integer) : integer
}
class DocumentacionCliente {
- Doc_ID: integer
- Doc_Nombre: string
- Doc_mimetype: string
- Doc_Tamanio_bytes: integer
- Doc_Extension: string
+ DocumentacionCliente(doc_nombre:string, doc_mime_type: string, doc_tamanio_bytes: string, doc_extension: string)
+ AgregarDocumentos(DocumentacionClienteProf_DNI, Prof_DNI : integer, Prof_Matricula : integer, Cli_DNI: integer)
+ EliminarDocumento()
+ EditarDocumento(ID_Documento : integer, Prof_DNI: integer, Cli_DNI: integer, DocumentacionCliente) //Hago una nueva instancia y la reemplazo en la base de datos
}
package "Solicitudes" {
class Formulario {
- Form_ID: integer
- Form_Descripcion: string
- Form_NombreCompleto: string
- Form_Correo: string
- Form_Celular: integer
- Form_DNIProfPref: integer
- Form_MatriculaProfPref: integer
- FechaEnvio: date
+ Formulario(integer,string,string, string, integer, integer,integer,date)
+ VerEstadoFormulario(ID_Formulario : integer) : string
- BuscarIDFormulario(Formulario) : integer
+ MostrarFormularios () : array
+ Devolver(Profesional) : void
+ Aceptar(Profesional) : void
+ Rechazar(Profesional) : void
+ VerFormulario (ID_Formulario : integer) : Formulario
- CambiarEstadoConProf(Profesional, ID_Formulario : integer, estado : string) : void
}
class HorarioPreferencia {
- Horario_ID: integer
- Horario_Descripcion: string
+ HorarioPreferencia(id : integer, descripcion : string)
}
class DiaPreferencia {
- Dia_ID: integer
- Dia_Descripcion: string
+ DiaPreferencia(id : integer, descripcion : string)
}
class Modalidad {
- Modalidad_ID: integer
- Modalidad_Descripcion: string
+ Modalidad(id : integer, descripcion : string)
}
}
' --- RELACIONES ---
' Persona
Persona "1" o-- "1..*" Profesional
Persona "1" o-- "1" Cliente
Persona "1" o-- "1" Administrador
Persona "1" -- "1" Foto
Persona "1..*" -- "1..*" Telefono
'AuthController
AuthController ..> Persona
AuthController ..> INotificadorUsuario
AuthController ..> CredencialCliente
' Autenticación
Cliente "1" -- "1" CredencialCliente
Profesional "1" -- "1" CredencialProfesional
Administrador "1" -- "1" CredencialProfesional
' Profesional
Profesional "1..*" -- "1" Profesion
Profesional "1" ...> "1..*" Turno
Profesional "1..*" -- "1" EstadoProfesional
Profesional "1..*" -- "1..*" Cliente
Profesional "1" ...> "1..*" DocumentacionCliente
Profesional "1" -- "1" Agenda
Profesional "1..*" -- "1..*" Servicio
Profesional "1..*" -- "1..*" Formulario
' Cliente
Cliente "1" ...> "1..*" Formulario
Cliente "1" -- "1..*" Turno
Cliente "1" -- "1..*" DocumentacionCliente
' Profesion, Servicio y ContenidoWeb
Profesion "1" *-- "1..*" Servicio
Profesion "1" -- "1..*" Formulario
Servicio "1" -- "1" Foto
Servicio "1..*" -- "1" ContenidoWeb
Servicio "1" -- "1..*" Formulario
ContenidoWeb "1" -- "1..*" Ubicacion
' Formulario
Formulario "1..*" -- "1..*" HorarioPreferencia
Formulario "1..*" -- "1..*" DiaPreferencia
Formulario "1..*" -- "1" Modalidad
' Turnos y Agenda
Turno "1..*" -- "1" EstadoTurno
Turno "1..*" -- "1" Agenda
Agenda "1" *-- "1..*" DiaDeAtencion
Agenda "1" *-- "0..*" ModoVacaciones
Agenda "1" *-- "0..*" Feriados
DiaDeAtencion "1" *-- "1..*" HorarioAtencion
DiaDeAtencion "1" *-- "0..*" HorarioReceso
' Administrador
Administrador "1..*" ...> "1" Servicio
Administrador "1..*" ...> "1" Profesion
Administrador "1" -- "1" Profesional
Administrador "1" ...> "1" ContenidoWeb
'Interfaces
Profesional ...> INotificadorTurnos
Cliente ...> INotificadorTurnos
Profesional ...> INotificadorCrearCliente
Administrador ...> INotificadorCrearProfesional
Profesional ...> INotificadorUsuario
Administrador ...> INotificadorUsuario
Cliente ...> INotificadorUsuario
ServicioMail ..|> INotificadorTurnos
ServicioMail ..|> INotificadorCrearCliente
ServicioMail ..|> INotificadorCrearProfesional
ServicioMail ..|> INotificadorUsuario
@enduml
+81
View File
@@ -0,0 +1,81 @@
ENTIDAD/RELACION EXPLICACION
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
DocumentacionCliente -DNICreador y MatriculaCreador: Si una persona tiene dos o más profesiones, al momento de consultar los documentos del cliente solo deben aparecer aquellos documentos que pertenecen a la profesion del usuario donde se está consultando
Ejemplo: Luciano es Abogado y Analista. Si quiero consultar los datos de un cliente desde el perfil de Analista, solo deben aparecer los documentos pertenecientes al perfil de analista (los documentos que se subieron desde el perfil de abogado, no deben aparecer)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
EstadoProfesional -En vez de "Eliminar" a un profesional, simplemente se le cambia el estado de "Activo" a "Baja". De esta forma se mantienen las referencias a otras tablas (logs, documentacion, etc).
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Profesional -La Primary key de Profesional es la matricula y el id de la profesion (Es imposible que esta combinación se repita. No puede haber dos abogados con la misma matricula. Pero puede haber un abogado y un contador con la misma matricula)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
CredencialProfesional - CredProf_Usuario. Será la combinacion de: 'DNI de la persona' '-' 'codigo de profesion'.
Ejemplo: Luciano es Contador (codigo=3) y tiene DNI=12345678. Usuario = 12345678-3
- ROL: Sirve para saber a donde redireccionar en caso de que el login sea correcto (redirigir al perfil del administrador, o redirigir al perfil de un profesional)
-Cred_Token: Acá se va a almacenar el token de recuperación (es null por defecto)
-Cred_FechaHora: Acá se va a almacenar fecha y hora de la creacion del token (no puede durar para siempre, por lo general solo dura 1 hora)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
CredencialCliente -CredCli_Token: Acá se va a almacenar el token de recuperación (es null por defecto)
-CredCli_FechaHora: Acá se va a almacenar fecha y hora de la creacion del token (no puede durar para siempre, por lo general solo dura 1 hora)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Profesion -VisibleEnFormulario: Es posible que en el futuro hayan Profesiones que no queramos que aparezcan como opcion en los formularios para solicitar un turno (Ej: Secretario, Técnico Informático, etc).
Además, si en el futuro se desea dar de baja esa profesion, simplemente se cambia VisibleEnFormulario a "No Visible".
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Servicio -Estado: En vez de eliminar un servicio, simplemente se desactiva o se da de baja. En caso de que hayan formularios vinculados a ese servicio, no quedarían huerfanos
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Persona -CorreoRecuperacion: Al momento de querer recuperar la contraseña o usuario, el usuario recibirá en su correo principal un link para cambiar su contraseña. En caso de perder acceso a su correo principal, se le enviará el link a un correo alternativo.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
RELACION ENTRE: Formulario y Profesional -EstadoFormulario: Cada profesional tendra la posibilidad de Ignorar, Aceptar y Rechazar el formulario, por lo tanto, cada uno tendrá un mismo formulario con diferentes estados.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
RELACION ENTRE: Profesional y Formulario -Si el formulario fue aceptado por algun profesional, automaticamente tendrá el estado "No disponible" (para aquellos profesionales que no aceptaron el formulario o nunca lo abrieron). Y tendra el estado de "Aceptado" para el profesional que lo aceptó.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Agenda -Si la agenda está en modo "vacaciones", entonces la asignación automática de turnos, ignora el periodo de vacaciones.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
DiaDeAtencion -El dia de la semana tendrá una hora de inicio (Dia_Comienzo) y una hora de finalización (Dia_Fin). Ejemplo: El dia Lunes (Dia_Descripcion=Lunes, Dia_ID=1) comenzará a las 7AM (Dia_Comienzo=7) y terminará a las 14PM (Dia_Fin=14)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Turno -Turno_Inicio: Tendrá la hora de inicio del turno y la fecha del turno. (El fin del turno se calcularia Fin_Turno = Turno_Inicio + DuracionTurno)
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
RELACION ENTRE: Profesional y Cliente -Si en el futuro un profesional decide dar de baja a un Cliente, simplemente se cambia el estado de EstadoRelacion de "Activo" a "Baja". Si ese cliente tiene relacion con otros profesionales, esa relacion no se verá afectada.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Formulario -Si Cli_DNI es null, entonces ese formulario lo envió un Visitante, de lo contrario lo envió un Cliente.
-Form_Estado: Si aún ningún profesional ha aceptado este formulario, el estado será Disponible. Si ya lo aceptó algún profesional, será No disponible.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
LogSeguridad -Responsable_ID: Vendría a ser el DNI de la persona que ejecutó esa accion.
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
+48
View File
@@ -0,0 +1,48 @@
----- Módulo Recuperación -----
Recuperacion Profesionales/Administrador
1) Llama al método RecuperarProf(rol, usuario, email) de la class AuthController. ROL = Profesional o Administrador
2) Se verifica si existe ese usuario con ExisteUsuario() de la class AuthController
3) Si existe, se verifica con CorreoPertenece(ROL, ID_Credencial) de la class AuthController que el email pasado en RecuperarProf() esté asociado a ese usuario
4) Si es verdadero, se genera un token de recuperación y se guarda en la BD con GenerarToken(ROL, usuario) de la class AuthController
5) Se notifica al correo ingresado en RecuperarProf() el token de recuperacion
6) Se verifica el token ingresado por el usuario con VerificarToken(ROL, token, ID_Credencial) de la class Credencial
7) Se actualiza la contraseña con CambiarContrasenia(ID_Credencial) de la class Credencial
Recuperacion de Administrador sin Usuario
1) Se llama al método RecuperarAdmin(DNI, correo, CUIL)
2) Se verifica si los datos son correctos con ExisteAdmin(DNI, correo, CUIL)
3) Si es verdadero, se genera el token de recuperacion y se almacena en la BD
4) Se envía el correo de recuperacion al correo ingresado en RecuperacionAdmin
5) Se verifica el token ingresado por el usuario con VerificarToken() de la class Credencial
6) Se actualiza la contraseña con CambiarContraseña(ID_Credencial, password, ROL) de la class Credencial
Recuperacion Clientes
1) Llama al método RecuperarCli(usuario, email) de la class AuthController.
2) Se verifica si existe ese usuario con ExisteUsuario(ROL, usuario) de la class AuthController. ROL = Cliente
3) Si existe, se verifica con CorreoPertenece(ROL, ID_Credencial) de la class AuthController que el email pasado en RecuperarCli() esté asociado a ese usuario
4) Si es verdadero, se genera un token de recuperación y se guarda en la BD con GenerarToken(ROL, usuario) de la class AuthController
5) Se notifica al correo ingresado en RecuperarCli() el token de recuperacion
6) Se verifica el token ingresado por el usuario con VerificarToken(ROL, token, ID_Credencial) de la class Credencial
7) Se actualiza la contraseña con CambiarContrasenia(ID_Credencial, password, ROL) de la class Credencial
@@ -0,0 +1,10 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ServicioController extends Controller
{
//
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class LogSeguridad extends Model
{
}
+42
View File
@@ -0,0 +1,42 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Persona extends Model
{
use HasFactory;
protected $table = 'personas';
protected $fillable = [
'dni',
'nombre',
'apellido',
'cuil',
'fechanac',
'foto_id',
];
public function Foto()
{
return $this->belongsTo(Foto::class, 'foto_id');
}
public function profesionales()
{
return $this->hasMany(Profesional::class, 'persona_id');
}
public function cliente()
{
return $this->hasOne(Cliente::class, 'persona_id');
}
public function telefonos()
{
return $this->belongsToMany(Telefono::class, 'personas_telefonos', 'persona_id', 'telefono_id');
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Profesion extends Model
{
use HasFactory;
protected $table = 'profesiones';
protected $fillable =[
'titulo',
'visible_en_formulario',
];
public function profesionales()
{
return $this->hasMany(Profesional::class, 'profesion_id');
}
}
+91
View File
@@ -0,0 +1,91 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Profesional extends Model
{
use HasFactory;
protected $fillable = [
'matricula',
'correo',
'credencialprofesional_id',
'estadoprofesional_id',
'persona_id',
'baja_id',
'profesion_id',
];
//Pertenece a
public function profesion()
{
return $this->belongsTo(Profesion::class, 'profesion_id');
}
public function credencialProfesional()
{
return $this->belongsTo(CredencialeProfesionale::class, 'credencialprofesional_id');
}
public function estadoProfesional()
{
return $this->belongsTo(EstadoProfesional::class, 'estadoprofesional_id');
}
public function persona()
{
return $this->belongsTo(Persona::class, 'persona_id');
}
public function baja()
{
return $this->belongsTo(Baja::class, 'baja_id');
}
//Tiene una
public function agenda()
{
return $this->hasOne(Agenda::class, 'profesional_id');
}
public function turnos()
{
return $this->hasMany(Turno::class, 'profesional_id');
}
public function documentacionesClientes()
{
return $this->hasMany(DocumentacionCliente::class, 'profesional_id');
}
//tablas intermedias
public function formularios()
{
return $this->belongsToMany(Formulario::class, 'profesionales_formularios')
->withPivot('estadoformulario')
->withTimestamps();
}
public function servicios()
{
return $this->belongsToMany(Servicio::class, 'profesionales_servicios', 'profesional_id', 'servicio_id');
}
public function clientes()
{
return $this->belongsToMany(Cliente::class, 'profesionales_cliente')
->withPivot('estadorelacion')
->withTimestamps();
}
}
+50
View File
@@ -0,0 +1,50 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Servicio extends Model
{
use HasFactory;
protected $fillable = [
'titulo',
'estado',
'descripcion',
'profesion_id',
'foto_id',
];
//pertenece a
public function contenido()
{
return $this->belongsTo(Contenido::class, 'contenido_id');
}
public function profesion()
{
return $this->belongsTo(Profesion::class, 'profesion_id');
}
public function foto()
{
return $this->belongsTo(Foto::class, 'foto_id');
}
// Tiene un
public function formulario()
{
return $this->hasOne(Formulario::class, 'servicio_id');
}
//Tablas intermedias
public function profesional()
{
return $this->belongsToMany(Profesional::class, 'profesional_servicio', 'servicio_id', 'profesional_id');
}
}
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('accioneslogs', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->text('descripcion');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('acciones_logs');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('contenidoswebs', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->text('quienessomos');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('contenidos_webs');
}
};
@@ -0,0 +1,29 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profesiones', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('titulo')->unique();
$table->boolean('visible_en_formulario');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profesiones');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('horariospreferencias', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('horarios_preferencias');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('diaspreferencias', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('dias_preferencias');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('modalidades', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('modalidades');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('credencialesprofesionales', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('usuario')->unique();
$table->string('contra');
$table->string('rol');
$table->string('token')->nullable()->default(null);
$table->datetime('fecha_hora')->nullable()->default(null);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('credenciales_profesionales');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('estadosprofesionales', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion')->default('Activo');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('estados_profesionales');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('telefonos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('telefono');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('telefonos');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('fotos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('extension')->nullable();
$table->bigInteger('tamanio_bytes')->nullable();
$table->string('nombre')->nullable();
$table->string('mime_type')->nullable();
$table->string('ruta')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('fotos');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('credencialesclientes', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('contra');
$table->string('correo')->unique();
$table->string('token')->nullable();
$table->datetime('fecha_hora')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('credenciales_clientes');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('bajas', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->text('motivo')->nullable();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('bajas');
}
};
@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('estadosturnos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('estadosturnos');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('ubicaciones', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->text('link');
$table->foreignId('contenidoweb_id')
->constrained('contenidoswebs') // apunta a contenidoswebs
->onDelete('cascade'); // si se borra contenidosweb, se borra la ubicacion
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('ubicaciones');
}
};
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('logseguridades', function (Blueprint $table) {
$table->id();
$table->text('descripcion');
$table->integer('responsableID');
$table->datetime('fechahora');
$table->string('IPorigen');
$table->string('rol');
$table->foreignId('accion_id')
->constrained('accioneslogs');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('logseguridades');
}
};
@@ -0,0 +1,40 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('servicios', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('titulo');
$table->string('estado');
$table->text('descripcion');
$table->foreignId('contenidoweb_id')
->constrained('contenidoswebs');
$table->foreignId('profesion_id')
->constrained('profesiones');
$table->foreignId('foto_id')
->constrained('fotos')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('servicios');
}
};
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('personas', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('dni')->unique;
$table->string('nombre');
$table->string('apellido');
$table->string('cuil');
$table->date('fechanac');
$table->foreignId('foto_id')
->constrained('fotos')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('personas');
}
};
@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('administradores', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('persona_id')
->constrained('personas');
$table->string('dni');
$table->string('correo');
$table->foreignId('credencialprofesional_id')
->constrained('credencialesprofesionales');
$table->unique(['dni','correo']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('administradores');
}
};
@@ -0,0 +1,49 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profesionales', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignid('profesion_id')
->constrained('profesiones');
$table->string('matricula');
$table->string('correo');
$table->string('dni');
$table->foreignId('credencialprofesional_id')
->constrained('credencialesprofesionales');
$table->foreignId('estadoprofesional_id')
->constrained('estadosprofesionales');
$table->foreignId('persona_id')
->constrained('personas');
$table->foreignId('baja_id')
->nullable()
->constrained('bajas');
$table->unique(['profesion_id', 'matricula']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profesionales');
}
};
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('personas_telefonos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('dni');
$table->foreignId('persona_id')
->constrained('personas')
->onDelete('cascade');
$table->foreignId('telefono_id')
->constrained('telefonos')
->onDelete('cascade');
$table->unique(['dni','telefono_id'], 'personas_telefonos_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('personas_telefonos');
}
};
@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('clientes', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('dni');
$table->string('correo');
$table->foreignId('persona_id')
->constrained('personas')
->onDelete('cascade');
$table->foreignId('baja_id')->nullable()
->constrained('bajas')
->onDelete('cascade');
$table->unique(['dni','correo']);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('clientes');
}
};
@@ -0,0 +1,51 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('formularios', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->text('descripcion');
$table->string('nombrecompleto');
$table->string('correo');
$table->string('celular');
$table->string('estado')->defalut('Pendiente');
$table->foreignId('profesion_id')
->constrained('profesiones');
$table->foreignId('servicio_id')
->constrained('servicios');
$table->foreignId('modalidad_id')
->constrained('modalidades');
$table->foreignId('profesional_id')->nullable()
->constrained('profesionales')
->onDelete('set null');
$table->foreignId('cliente_id')->nullable()
->constrained('clientes')
->onDelete('set null');
$table->date('fechaenvio');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('formularios');
}
};
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profesionales_servicios', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('profesional_id')
->constrained('profesionales')
->onDelete('cascade');
$table->foreignId('servicio_id')
->constrained('servicios')
->onDelete('cascade');
$table->unique(['profesional_id','servicio_id'], 'profesionales_servicios_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profesionales_servicios');
}
};
@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profesionales_clientes', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('profesional_id')
->constrained('profesionales')
->onDelete('cascade');
$table->foreignId('cliente_id')
->constrained('clientes')
->onDelete('cascade');
$table->string('estadorelacion')->default('Activo');
$table->unique(['profesional_id','cliente_id'], 'profesionales_clientes_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profesionales_clientes');
}
};
@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('agendas', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('estado')->default('Activa');
$table->integer('duracionturno');
$table->foreignId('profesional_id')
->constrained('profesionales')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('agendas');
}
};
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('documentacionesclientes', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('nombre');
$table->string('mime_type');
$table->bigInteger('tamanio_bytes');
$table->string('extension');
$table->foreignId('cliente_id')
->constrained('clientes')
->onDelete('cascade');
$table->foreignId('profesional_id')
->constrained('profesionales')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('documentacionesclientes');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('diasdeatenciones', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
$table->foreignId('agenda_id')
->constrained('agendas')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('diasdeatenciones');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('horariosatenciones', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->time('horariocomienzo');
$table->time('horariofin');
$table->foreignId('diadeatencion_id')
->constrained('diasdeatenciones');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('horariosatenciones');
}
};
@@ -0,0 +1,31 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('dias', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string('descripcion');
$table->foreignId('agenda_id')
->constrained('agendas')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('dias');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('horariosrecesos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->time('comienzo');
$table->time('fin');
$table->foreignId('dia_id')
->constrained('dias')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('horariosrecesos');
}
};
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('formularios_horariospreferidos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('horariopreferencia_id')
->constrained('horariospreferencias')
->onDelete('cascade');
$table->foreignId('formulario_id')
->constrained('formularios')
->onDelete('cascade');
$table->unique(['formulario_id','horariopreferencia_id'], 'formularios_horariospreferidos_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('formularios_horariospreferidos');
}
};
@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('formularios_diaspreferidos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->foreignId('diapreferencia_id')
->constrained('diaspreferencias')
->onDelete('cascade');
$table->foreignId('formulario_id')
->constrained('formularios')
->onDelete('cascade');
$table->unique(['formulario_id','diapreferencia_id'], 'formularios_diapreferidos_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('formularios_diaspreferidos');
}
};
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('profesionales_formularios', function (Blueprint $table) {
$table->id();
$table->foreignId('profesional_id')
->constrained('profesionales')
->onDelete('cascade');
$table->foreignId('formulario_id')
->constrained('formularios')
->onDelete('cascade');
$table->string('estado')->default('Pendiente');
$table->unique(['profesional_id','formulario_id'], 'profesionales_formularios_unique');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('profesionales_formularios');
}
};
@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('turnos', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->datetime('inicio');
$table->string('correo');
$table->string('nombrecompleto');
$table->text('descripcion');
$table->foreignId('cliente_id')->nullable() //puede ser que el turno se le asigne a alguien que aún no es cliente
->constrained('clientes')
->onDelete('cascade');
$table->foreignId('estadoturno_id')
->constrained('estadosturnos')
->onDelete('cascade');
$table->foreignId('agenda_id')
->constrained('agendas')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('turnos');
}
};
@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('feriados', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->date('fecha');
$table->string('descripcion')->default('Dia no laborable');
$table->foreignId('agenda_id')
->constrained('agendas')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('feriados');
}
};
@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('modosvacaciones', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->date('inicio');
$table->date('fin');
$table->string('descripcion')->default('Vacaciones :)');
$table->foreignId('agenda_id')
->constrained('agendas')
->onDelete('cascade');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('modosvacaciones');
}
};
+62
View File
@@ -0,0 +1,62 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class AccionLogSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$acciones = [
['descripcion' => 'Creación nuevo profesional'],
['descripcion' => 'Baja profesional'],
['descripcion' => 'Alta profesional'],
['descripcion' => 'Edición datos profesional'],
['descripcion' => 'Creación nuevo servicio'],
['descripcion' => 'Baja servicio'],
['descripcion' => 'Alta servicio'],
['descripcion' => 'Edición datos servicio'],
['descripcion' => 'Creación nueva profesion'],
['descripcion' => 'Baja profesion'],
['descripcion' => 'Alta profesion'],
['descripcion' => 'Edición datos profesion'],
['descripcion', 'Creación nuevo cliente'],
['descripcion', 'Edición datos cliente'],
['descripcion', 'Agregó documentación cliente'],
['descripcion', 'Dar de baja cliente'],
['descripcion', 'Asignó un turno'],
['descripcion', 'Canceló un turno'],
['descripcion', 'Reprogramó un turno'],
['descripcion', 'Aceptó un caso'],
['descripcion', 'Rechazó un caso'],
['descripcion', 'Devolvió un caso'],
['descripcion', 'Inició sesión'],
['descripcion', 'Cerró sesión'],
['descripcion', 'Solicitud cambio de contraseña'],
['descripcion', 'Cambio de contraseña exitoso'],
['descripcion', 'Cambio de contraseña frustrado'],
];
foreach($acciones as $accion)
{
DB::table('accioneslogs')->insert([
'descripcion' => $accion['descripcion'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+24
View File
@@ -0,0 +1,24 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\BD;
class AdministradorSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$administrador = [
'persona_id' => 1,
'dni' => '40563707',
'correo' => 'CamyBelini@gmail.com',
'credencialprofesional_id' => 1,
];
BD::table('administradores')->insert($administrador);
}
}
+22
View File
@@ -0,0 +1,22 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facade\DB;
class ContenidoWebSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$contenido = [
'quienessomos' => 'Somos un grupo de abogadas recibidas de la Universidad Nacional del Litoral que decidimos trabajar en conjunto para resolver cualquier consulta que caiga en nuestras manos',
];
DB::table('contenidoswebs')->insert('$contenido');
}
}
@@ -0,0 +1,40 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class CredencialProfesionalSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$credenciales = [[
'usuario' => 'Administrador-Camila',
'contra' => bcrypt('AbogadasDelLitoral-2026'),
'rol' => 'Administrador',
],
[
'usuario' => '43293244-2', //'DNI de la persona'+'-'+'codigo de profesion'
'contra' => bcrypt('contraseñaluciano'),
'rol' => 'Profesional',
],
[
'usuario' => '40563707-1', //'DNI de la persona'+'-'+'codigo de profesion'
'contra' => bcrypt('contraseñacamila'),
'rol' => 'Profesional',
]];
foreach($credenciales as $credenciales){
DB::table('credencialesprofesionales')->insert([
'usuario' => $credencial['usuario'],
'contra' => $credencial['contra'],
'rol' => $credencial['rol'],
'created_at' => now(),
'updated_at' => now(),
]);
};
}
}
+13
View File
@@ -21,5 +21,18 @@ class DatabaseSeeder extends Seeder
'name' => 'Test User',
'email' => 'test@example.com',
]);
$this->call([
ProfesionSeeder::class,
EstadoTurnoSeeder::class,
ModalidadSeeder::class,
AccionLogSeeder::class,
FotoSeeder::class,
PersonaSeeder::class,
EstadoProfesionalSeeder::class,
CredencialProfesionalSeeder::class,
ProfesionalSeeder::class,
AdministradorSeeder::class,
]);
}
}
@@ -0,0 +1,28 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class EstadoProfesionalSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$estados = [
['descripcion' => 'Activo'],
['descripcion' => 'Baja'],
];
foreach ($estados as $estado){
DB::table('estadosprofesionales')->insert([
'descripcion'=>$estado['descripcion'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class EstadoTurnoSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$estados = [
['descripcion' => 'Pendiente'],
['descripcion' => 'Confirmado'],
['descripcion' => 'Rechazadp'],
['descripcion' => 'Cancelado'],
['descripcion' => 'Reprogramado']
];
foreach ($estados as $estado){
DB::table('estadosturnos')->insert([
'descripcion'=>$estado['descripcion'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class FotoSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$fotos = [
['extension' => 'png', 'tamanio_bytes' => 136788, 'nombre' => 'default', 'mime_type' => 'image/png', 'ruta' => 'fotos/default.png'],
];
DB::table('fotos')->insert([
'extension' => $fotos[0]['extension'],
'tamanio_bytes' => $fotos[0]['tamanio_bytes'],
'nombre' => $fotos[0]['nombre'],
'mime_type' => $fotos[0]['mime_type'],
'ruta' => $fotos[0]['ruta'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
+29
View File
@@ -0,0 +1,29 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ModalidadSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$modalidades = [
['descripcion' => 'Presencial'],
['descripcion' => 'Virtual'],
];
foreach ($modalidades as $modalidad){
DB::table('modalidades')->insert([
'descripcion'=>$modalidad['descripcion'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+44
View File
@@ -0,0 +1,44 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class PersonaSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$personas = [[
'dni' => '40563707',
'nombre' => 'Camila Rosario',
'apellido' => 'Belini',
'cuil' => '27405637077',
'fechanac' => '1997-08-21',
'foto_id' => 1,
],
[
'dni' => '43293244',
'nombre' => 'Luciano Luca',
'apellido' => 'Belini',
'cuil' => '20432932444',
'fechanac' => '2001-04-05',
'foto_id' => 1,
]];
foreach($personas as $persona){
DB::table('personas')->insert([
'dni' => $persona['dni'],
'nombre' => $persona['nombre'],
'apellido' => $persona['apellido'],
'cuil' => $persona['cuil'],
'fechanac' => $persona['fechanac'],
'foto_id' => $persona['foto_id'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+30
View File
@@ -0,0 +1,30 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ProfesionSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$profesiones = [
['titulo' => 'Abogacía', 'visible_en_formulario' => true],
['titulo' => 'Informático', 'visible_en_formulario' => false]
];
foreach ($profesiones as $profesion){
DB::table('profesiones')->insert([
'titulo'=>$profesion['titulo'],
'visible_en_formulario'=>$profesion['visible_en_formulario'],
'created_at' => now(),
'updated_at' => now(),
]);
}
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class ProfesionalSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$profesional = [[
'profesion_id' => 1,
'matricula' => '5678',
'correo' => 'CamyBelini@gmail.com',
'dni' => '40563707',
'persona_id' => 1,
'estadoprofesional_id' => 1,
'credencialprofesional_id' => 2,
'created_at' => now(),
'updated_at' => now(),
],
[
'profesion_id' => 2,
'matricula' => '1234',
'correo' => 'lucianobelini2015@gmail.com',
'dni' => '43293244',
'persona_id' => 2,
'estadoprofesional_id' => 1,
'credencialprofesional_id' => 3,
'created_at' => now(),
'updated_at' => now(),
]];
DB::table('profesionales')->insert($profesional);
}
}
+31
View File
@@ -0,0 +1,31 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class ServicioSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$servicios = [
['titulo' => 'Consulta Jurídica', 'estado' => 'Activo', 'descripcion' => 'Consiste en una reunión con el profesional en la cual se podrá hacer una consulta sobre un tema particular'],
['titulo' => 'Sucesión', 'estado' => 'Activo', 'descripcion' => 'El profesional asesorará al cliente en cuanto a sucesiones de bienes inmuebles de personas fallecidas'],
['titulo' => 'Penal', 'estado' => 'Baja', 'descripcion' => 'El profesional asesorará al cliente acusado de cometer un delito de caracter penal. O en caso de que el cliente quiera acusar a otra persona por cometer un delito de caracter penal'],
];
foreach($servicios as $servicio)
{
DB::table('servicios')->insert([
'titulo'=>$profesion['titulo'],
'estado'=>$profesion['estado'],
'descripcion'=>$profesion['descripcion'],
]);
};
}
}