@startuml Diagrama de secuencia Vials-Motors

title Diagrama de secuencia de proyecto Vials Motors
footer Ginkgo Software 2023

' ACTORES

box "Usuarios"
    actor "Cliente" as client
    actor "Administrador" as admin
    actor "Tecnico" as tec
end box

box "FrontEnd"
    participant "Vials Motors Front" as front
end box

box "BackEnd"
    participant "Login" as mslogin
    participant "customer" as mscustomer
    participant "admin" as msadmin
    participant "technical" as mstech
    participant "email" as msemail
    participant "core" as mscore
    participant "reporting" as msreport
end box

== FLUJO DE CLIENTE ==

'Registro cliente

client -> front ++ : Solicitud de registro de cliente
    note over front
    El cliente debe ingresar los datos requeridos
    end note
    front -> front : Carga de formulario
    front -> mscustomer ++ : Llamado a Api de registro
        mscustomer -> mslogin ++ : Solicitud de guardado de credenciales
        return RESP(Mensaje de credenciales gurdadas)
    return RESP(Mensaje de registro existoso)
return RESP(Pantalla con mensaje de registro existoso)

'Login cliente

client -> front ++ : Solicitud de login
    front -> front : Carga de formulario de login
    front -> mslogin ++ : Llamado a api de login
    return RES(Login existoso)
    note over front
    Se dejara abierta la sesión hasta que se recargue la pagina o se cierre la misma
    end note
return RESP(Redireccionamiento a pantalla principal)

'Actualizar datos

client -> front ++ : Solicitud para actualizar datos
    note over front
    Debe de ingresar los datos permitidos para actualizar
    end note
    front -> front : Carga de formulario
    front -> mscustomer ++ : Llamado a api de actualizar
        mscustomer -> mslogin ++ : Llamado a api de actualizar correo
        note over mslogin
        El llamado se ejecuta si es necesario
        end note
        return RESP(Credencial actualizada)
    return RESP(Datos actualizados)
return RESP(Pantalla con mensaje exitoso)

'Listar todas las citas del cliente

client -> front ++ : Solicitud para listar todas mis citas
    note over front
    Para listar las citas del cliente, se tiene que iniciar sesión antes
    end note
    front -> mscore ++ : Solicitud para API de consulta de citas del cliente
    return RESP(Lista de tod las citas del cliente)
    front -> front : Front carga todas las citas en la pantalla
return RESP(Pantalla con todas las citas del cliente)

'Agendar cita

client -> front ++ : Solicitud para agendar una nueva cita
    note over front
    Debe de ingresar los datos para el registro
    end note
    front -> front : Carga de formulario para agendar cita
    front -> mscore ++ : Llamado a api para generar nueva cita
    return RESP(Cita generada correctamente)
    front -> msemail ++ : Llamado api para envio de correo de confirmacion de cita
    return RESP(Correo enviado correctamente)
return RESP(Mensaje de cita generada)

'Actualizar cita

client -> front ++ : Solicitud para modificar la cita
    note over front
    Debe de ingresar los datos para la modificación
    end note
    front -> front : Carga pantalla con todas las citas y selecciona la cita a modificar
    front -> mscore ++ : Solicitud de actualizar la cita
    return RESP(Cita modificada correctamente)
return RESP (Mensaje de actualizacion correcta)

' Cancelar la cita

client -> front ++ : Solicitud para cancelar la cita
    note over front
    Se debe tener en cuenta la regla de negocio
    end note
    front -> front : Carga la pantalla con las citas donde se puede seleccionar la cita a eliminar
    front -> mscore ++ : Llamado a API para cancelar la cita
    return RESP(Respuesta de solicitud exitosa)
return RESP(Mensaje confirmando repuesta de solicitud)

'Consultar estado de cita

client -> front ++ : Solicitud para mirar el estado de mi cita seleccionada
    note over front
    Antes se debe listar las citas para poder seleccionar la que desea observar    
    end note
    front -> mscore ++ : Llamado a API para obtener los estados y novedades de la cita
    return RESP(Api responde con los datos seleccionados)
    front -> front : carga de nueva pantalla con los datos
return RESP (Muesta de nueva pantalla a cliente con los datos de la cita)

== FLUJO DE ADMINISTRADOR ==

'Registro administrador

admin -> front ++ : Solicitud de registro de adminstrador
    note over front
    El administrador debe ingresar los datos requeridos
    end note
    front -> front : Carga de formulario
    front -> msadmin ++ : Llamado a Api de registro
        msadmin -> mslogin ++ : Solicitud de guardado de credenciales
        return RESP(Mensaje de credenciales gurdadas)
    return RESP(Mensaje de registro existoso)
return RESP(Pantalla con mensaje de registro existoso)

'Login administrador

admin -> front ++ : Solicitud de login
    front -> front : Carga de formulario de login
    front -> mslogin ++ : Llamado a api de login
    return RES(Login existoso)
    note over front
    Se dejara abierta la sesión hasta que se recargue la pagina o se cierre la misma
    end note
return RESP(Redireccionamiento a pantalla principal)

' Listar administradores

admin -> front ++ : Solicitud para listar todos los administradores
    front -> msadmin ++ : Solicitud para listar todos los administradores
    return RESP(Lista con todos los administradores)
    front -> front : Carga pantalla con todos los administradores
return RESP(Carga pantalla con los administradores)

'Actualizar datos

admin -> front ++ : Solicitud para actualizar datos
    note over front
    Debe de ingresar los datos permitidos para actualizar
    end note
    front -> front : Carga de formulario
    front -> msadmin ++ : Llamado a api de actualizar
        msadmin -> mslogin ++ : Llamado a api de actualizar correo
        note over mslogin
        El llamado se ejecuta si es necesario
        end note
        return RESP(Credencial actualizada)
    return RESP(Datos actualizados)
return RESP(Pantalla con mensaje exitoso)

'Dar de baja Administrador

admin -> front ++ : Solicitud para eliminar un administrador
    front -> front : Carga de los administradores activo
    front -> msadmin ++ : Solicitud a API de eliminar administrador
        msadmin -> mslogin ++ : Solicitud API para eliminar credenciales
        return RESP (Respuesta de solicitud correcta)
    return RESP(Respuesta de solicitud correcta)
return RESP(Respuesta de solicitud correcta)

' Actualizar administrador

admin -> front ++ : Solicitud para actualizar un administrador
    front -> front : Carga pantalla para la actualización de tecnadministradorico
    front -> msadmin ++ : Llamado de API para la actualización de un administrador
    return RESP (API responde con actualización correcta de administrador)
return RESP (Respuesta de actualizacion de administrador correcto)

'Generar Reporte Clientes

admin -> front ++ : Solicitud para generacion de reporte de clientes
    front -> front : Carga pantalla para seleccionar opcion de fechas de reporte
    front -> msreport ++ : Solicitud a API para generar reporte de clientes
        msreport -> mscustomer ++ : Solicitud a API para generar reporte de clientes (Llamado a SP)
        return RESP(Respuesta de json con datos de reporte)
    return RESP (Api recibe datos, genera excel, lo descarga en la maquina y retorna)
return RESP (Retorna datos y muestra en pantalla)

'Generar reporte Servicios

admin -> front ++ : Solicitud para generaciponde reporte de servicios
    front -> front : Carga pantalla para generación de reporte de flujo de servicios
    front -> mscore ++ : Solicitud a API para generacioón de excel de flujo de servicios
        return RESP (Se genera excel con servicios, se descarga en la maquina y se retorna)
return RESP (Se retorna mensaje de OK y se muestran datos en la pantalla)

' Registrar nuevo Tecnico

admin -> front ++ : Solicitud para registrar un nuevo tecnico
    front -> front : Carga de pantalla para el registro de nuevo tecnico
    front -> mstech ++ : Solicitud a API para registro de nuevo tecnico
        mstech -> mslogin ++ : Solicitud de registro para nuevas credenciales
        return RESP (Creacion de nuevas credenciales y respuesta de OK)
    return RESP (Creación de nuevo tecnico correcto)
return RESP (Respuesta exitosa de creacion correcta de tecnico)

' Listar Tecnicos

admin -> front ++ : Solicitud para listar tecnicos
    front -> front : Carga pantalla para seleccionar la lista de los tecnicos
    front -> mstech ++ : Solicitud a API para la generacion de la lista de tecnicos
    return RESP (API retorna lista de tecnicos)
return RESP (Retorno de lista de tecnicos)

' Dar de baja a tecnico

admin -> front ++ : Solicitud para dar de baja a tecnico
    front -> front : Carga pantalla para dar de baja a tecnicos
    front -> mstech ++ : Solicitd a API para dar de baja a un tecnico
        mstech -> mslogin ++ : Solicitud a API para eliminar credenciales
        return RESP (Respuesta de eliminacion de credenciales exitosa)
    return RESP (API responde por eliminacion correcta)
return RESP (Responde de eliminacion correcta)


' Actualizar tecnico

admin -> front ++ : Solicitud para actualizar un tecnico
    front -> front : Carga pantalla para la actualización de tecnico
    front -> mstech ++ : Llamado de API para la actualización de un tecnico
    return RESP (API responde con actualización correcta de tecnico)
return RESP (Respuesta de actualizacion de tecnico correcto)

' Registrar cliente por administrador

admin -> front ++ : Solicitud para registrar un nuevo cliente por administrador
    front -> front : Carga de pantalla para el registro de nuevo cliente
    front -> mscustomer ++ : Solicitud a API para registro de nuevo clietne
        mscustomer -> mslogin ++ : Solicitud de registro para nuevas credenciales
        return RESP (Creacion de nuevas credenciales y respuesta de OK)
    return RESP (Creación de nuevo cliente correcto)
return RESP (Respuesta exitosa de creacion correcta de cliente)

' Listar clientes por adminitrador

admin -> front ++ : Solicitud para listar cliente por administrador
    front -> front : Carga pantalla para seleccionar la lista de los clientes
    front -> mscustomer ++ : Solicitud a API para la generacion de la lista de clientes
    return RESP (API retorna lista de clientes)
return RESP (Retorno de lista de clientes)

' Dar de baja a cliente por administrador

admin -> front ++ : Solicitud para dar de baja a cliente por administrador
    front -> front : Carga pantalla para dar de baja a cliente
    front -> mscustomer ++ : Solicitd a API para dar de baja a un cliente
     mscustomer -> mslogin ++ : Solicitud a API para eliminar credenciales
     return RESP (Respuesta de eliminacion de credenciales exitosa)
    return RESP (API responde por eliminacion correcta)
return RESP (Responde de eliminacion correcta)


' Actualizar datos de cliente por administrador

admin -> front ++ : Solicitud para actualizar un cliente por un administrador
    front -> front : Carga pantalla para la actualización de cliente
    front -> mscustomer ++ : Llamado de API para la actualización de un cliente
    return RESP (API responde con actualización correcta de cliente)
return RESP (Respuesta de actualizacion de cliente correcto)

' Registrar tipo de servicio

admin -> front ++ : Solicitud para registrar nuevo tipo de servicio
    front -> front : Carga de pantalla para el registro de nuevo tipo de servicio
    front -> mscore ++ : Solicitud a API para registro de nuevo tipo de servicio
    return RESP (Respuesta exitosa de API)
return RESP (Respuesta existosa de registro de nuevo tipo de servicio)

' Listar tipo de servicio

admin -> front ++ : Solicitud para listar tipo de servicio
    front -> front : Carga de pantalla para listar tipo de servicio
    front -> mscore ++ : Solicitud de API para listar tipos de servicio
    return RESP (Respuesta de los tipo de servicio)
return RESP (Se lista los tipos de servicio en la pantalla)