MANUAL DE TÉCNICO
Sistema de BarberApp
Responsables:
Diego Andrés Lizarazo Hernández
Sebastián Landazábal Parra
Katerine Origua
Luis Enrique Avila
Ficha: 1802785
Programa: Análisis y Desarrollo de Sistema de
Información
SENA Centro Agroecológico y empresarial
Sede Quebrajacho
2020
1
MANUAL DE TÉCNICO
Nombre del programa: Sistema de reservación BarberApp
Versión de Manual: 1.2
Tipo de manual: Técnico
Imagen del Programa:
Fecha de elaboración: 20/05/20
2
INDICE
1. Introducción ...................................................................................4
2. Objetivos Generales y Específicos del Sistema .........................5
3. Normas, Políticas y Procedimientos ............................................6
4. Definición de las Reglas del Negocio Implementadas ...........7
5. Fundamentación de la Tecnología Utilizada ............................8
6. Descripción de los Actores del Sistema .....................................9
7. Especificación de Requisitos ..................................................... 10
8. Casos de uso ............................................................................... 12
9. Diagrama de casos de uso ....................................................... 32
10. Diagrama de Clases ................................................................ 32
11. Diagrama de secuencia ......................................................... 33
12. Descripción de algoritmos ...................................................... 35
13. Descripción de algoritmos (Interfaz) ................................... 117
14. Descripción de campos ........................................................ 123
15. Diccionario de datos ............................................................. 127
16. Modelo relacional .................................................................. 129
3
1. Introducción
El documento referencia en la explicación detallada
del funcionamiento del sistema, se encuentra también
la evidencia de los requerimientos funcionales, casos
de uso, diagramas de clases, diagramas secuenciales
y una explicación del código detallado, con esto se
pretende dar a conocer todo el funcionamiento de la
aplicación.
4
2. Objetivos Generales y Específicos del Sistema
2.1. Objetivo General:
Gestionar y realizar reservas a la Barberia
BarberMania por parte de sus clientes de manera
eficaz y sencilla.
2.2. Objetivos Específicos:
Los clientes o usuarios deberán tener una cuenta
BarberMania previo a realizar la reserva.
Habrá una galería de imágenes en la cual los
clientes podrán visualizar o reaccionar a las
imágenes que allí se encuentren.
Habrá un apartado para que los barberos editen su
información personal y los clientes puedan verla con
la mayor facilidad y dinamicidad posible.
Los barberos podrán subir toda clase de imágenes
oferta a la sección de oferta de la aplicación la cual
contará con una descripción (opcional) por parte
del babero encargado.
Los clientes podrán ver en todo momento la
información de ofertas que se encuentran
disponibles en el momento.
Los usuarios tendrán su apartado para ver sus
reservaciones realizadas y también su información
personal, también así podrán cambiar esta y/o la
contraseña.
Los barberos podrán agregar a la lista de selección
de cortes en reserva, nuevos cortes de cabello y así
mismo eliminarlo si lo desean.
5
3. Normas, Políticas y Procedimientos
Este sistema trabaja con los métodos y estándares de la
empresa para la cual es realizado y el desarrollo esta
aplicación, Se está establecido el desarrollo a través de un
servidor local, haciendo uso de la tecnología de software libre
y herramientas de edición de texto.
6
4. Definición de las Reglas del Negocio Implementadas
Toda aquella información publicada, mencionada y/o
escrita en todos los apartados del sistema fue acordada
y revisada por personal de la empresa, estableciendo así
acuerdos mutuos con fin de evitar percances.
7
5. Fundamentación de la Tecnología Utilizada
EL lenguaje de programación PHP
El lenguaje de programación JavaScript (Ajax)
El lenguaje de etiquetas y estructuración HTML
Estilos de CSS
8
6. Descripción de los Actores del Sistema
Actor del negocio Descripción
Puede crear y eliminar los perfiles de los barberos.
Puede hacer el sorteo de los premios de los clientes
REQ-003: EL ADMINISTRADOR SERÁ EL ÚNICO QUE PODRÁ
CREAR LOS PERFILES DE LOS BARBEROS.
Barbero REQ-004: EL ADMINISTRADOR SERÁ EL ÚNICO QUE PODRÁ
(Administrador) ELIMINAR LOS PERFILES DE LOS BARBEROS.
REQ-016: EL BARBERO ADMINISTRADOR TENDRÁ LA OPCIÓN
DE SORTEAR PREMIOS A PERSONAS ALEATORIAS DE
ACUERDO AL NIVEL
Actor del negocio Descripción
Los distintos barberos que trabajan en Barbermania podrán
tener un acceso completo al sistema de reservación
REQ-14: EL BARBERO TENDRÁ LA OPCIÓN DE ACTUALIZA O
SUBIR IMÁGENES DE LAS NUEVAS OFERTAS Y TAMBIÉN TENDRÁ
LA OPCIÓN DE ELIMINARLAS.
Barberos
REQ-15: EL BARBERO TENDRÁ LA OPCIÓN DE ACTUALIZAR O
SUBIR IMÁGENES DE LOS NUEVOS CORTES Y TAMBIÉN TENDRÁ
LA OPCIÓN DE ELIMINARLOS.
REQ-20: EL BARBERO PODRÁ CREAR LOS NUEVOS CORTES EN
DONDE SE PODRÁ DAR MÁS VARIEDAD DE CORTES DE
CABELLO Y AL IGUAL TENDRÁ LA OPCIÓN DE ELIMINARLOS
Actor del negocio Descripción
Los clientes nuevos podrán registrarse para así
posteriormente acceder a las reservaciones y/o más
opciones del sistema
Clientes
REQ-001: LOS NUEVOS USUARIOS QUE INGRESEN A LA
PÁGINA WEB SIN ESTAR REGISTRADOS PODRÁN CREAR LA
CUENTA BARBERMANIA
9
7. Especificación de Requisitos
Numero de
Descripción
requerimiento
Los nuevos usuarios que ingresen a la página web
REQ-001 sin estar registrados podrán crear la cuenta
barbermania
Se creará un logueo de perfil para guardar los
REQ-002
datos y de definir al usuario que ingresar
El Administrador será el único que podrá crear a
los perfiles de los barberos para mayor seguridad
REQ-003
en logueo
El Administrador será el único que podrá eliminar
REQ-004 a los barberos
El cliente después de haberse logueado podrá
crear la reservación en el formulario y apartar su
REQ-005
hora de corte
El usuario después de haber creado la reserva y
REQ-006 el usuario desea él podrá cancelar la reservación
El cliente después de haberse creado la cuenta,
REQ-007 el podrá modificar los datos de su perfil
El cliente podrá visualizar los horarios ocupados
REQ-008 durante el día para que él pueda saber a qué
horas podrá reservar
En caso de que el cliente olvide la contraseña de
REQ-009 la cuenta, el tendrá la opción de recuperar la
contraseña por medio del correo electrónico
El cliente podrá en la sección del perfil ver la
reserva previamente ya hecha en caso contrario
REQ-010
no visualizará nada
El cliente tendrá la opción del apartado del
REQ-011 menú ver la sección de la galería en donde se
publican los cortes a elegir
10
El cliente podrá calificar los cortes y promover el
REQ-012 corte con el sistema de likes
En el apartado del menú del cliente en la sección
de Barber info podrá visualizar los datos
REQ-013
personales de los barberos
El barbero tendrá la opción de actualiza o subir
imágenes de las nuevas ofertas y también tendrá
REQ-014
la opción de eliminarlas
El barbero tendrá la opción de actualizar o subir
imágenes de los nuevos cortes y también tendrá
REQ-015
la opción de eliminarlos
El barbero Administrador tendrá la opción de
sortear premios a personas aleatorias de acuerdo
REQ-016
al nivel
El barbero al igual que el cliente podrá modificar
los datos personales y actualizarlos en caso de
REQ-017
que cambie de datos
De acuerdo a la actividad de reservas de cada
REQ-018 usuario cada uno tendrá un nivel por el número
de reservaciones que haga
Los usuarios nuevos podrán ingresar a la página
web y visualizar los datos, pero como no están
REQ-019 registrados no podrán a acceder a las demás
características que tiene un cliente
El barbero podrá crear los nuevos cortes en
REQ-020 donde se podrá dar más variedad de cortes de
cabello y al igual tendrá la opción de eliminarlos
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua, Luis Ávila
11
Estado de
Versión 1.0 No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ - 001
Nombre Registro de clientes
Objetivo Permitir el registro de nuevos clientes
Los nuevos usuarios tendrán opción de registrarse y así crear su cuenta
Descripción
Barbermania
Actores Cliente
Precondición Ninguna
No. Descripción de acciones
1 El usuario nuevo oprime la opción de registrar
Escenario
Principal El usuario visualiza el registro y completa los datos requeridos
2
(Documento, contraseña, nombre, teléfono, email)
3 El usuario seleccionar la el botón de “registrarse”
El sistema le informa que ya se creo el perfil y luego se visualiza el
4
sistema de validación del REQ-002
No. Descripción de acciones alternas
Escenario
Alternativo 2a El usuario ingresa los datos con Inexactitud o incompletos
2b Continua en el paso 2
2c El usuario ingresa los datos incorrectos en los campos equivocados
2d Continua en el paso 2
No. Descripción de acciones de excepción
Escenarios de
Excepción
Si el usuario ya está registrado con sus datos, cuando se registre de
1a
nuevo el sistema le informara que sus datos ya están registrados
El usuario después de haber creado la cuenta barbermania tendrá acceso a
Postcondición
las funciones del cliente registrado.
8. Casos de uso
12
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua, Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -002
Nombre Sistema de validación
Objetivo Se validará los distintos tipos de usuario
Descripción El sistema validará el cliente o el barbero para diferenciar a los tipos de
usuarios y sus diferentes opciones
Actores Cliente, barbero
Precondición El cliente y el barbero deben de tener una cuenta registrada
Escenario No. Descripción de acciones
Principal 1 Seleccionan la opción de iniciar sesión
1.1 Si el cliente se valida ingresara, los datos Documento y contraseña
1.2 Si el barbero se valida, selecciona la opción de “Entra como barbero” y
posteriormente completara los campos de Documento y contraseña
2 Se selecciona el botón de “ingresar”
3 El sistema creará la sesión y cargará las opciones del usuario
Escenario No. Descripción de acciones alternas
Alternativo
1a El usuario ingresa erróneamente los datos (documento y contraseña)
1b El sistema informará con un mensaje de usuario no existe, continua en el
paso 1
Escenarios de No. Descripción de acciones de excepción
Excepción
4 El usuario ingresa los campos con la contraseña incorrecta o el
documento incorrecto y el sistema le informa sobre el error
5 El usuario no se encuentra registrado y cliente intenta ingresar con datos
falsos, el sistema le informa al usuario sobre el error.
Postcondición El usuario cliente podrá ingresar y validar sus datos al igual que el barbero
13
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-003
Nombre Creación de los perfiles de los barberos
Objetivo El administrador podrá crear la cuenta del barbero
Descripción El Administrador será el único que tendrá acceso a la función de crear las
cuentas para los nuevos barberos y así gestionar la cantidad de empleados.
Actores Administrador
Precondición Iniciar la cuenta de administrador
Escenario No. Descripción de acciones
Principal 1 El administrador selecciona la opción de añadir barbero
2 El administrador agrega los datos requeridos como el documento,
contraseña, nombre, teléfono, email, Facebook, Instagram y la imagen del
nuevo barbero
3 El administrador selecciona el botón de “Añadir”
4 El sistema crea el perfil del barbero con los datos suministrados
Escenario No. Descripción de acciones alternas
Alternativo
2a El administrador ingresa datos incompletos
2b El sistema informa que datos no fueron completados y regresa al paso 2
2c El administrador ingresa el número del documento del nuevo barbero
repetido
2d El sistema informa que el documento ya esta registrado y se regresa al
paso 2
Escenarios de No. Descripción de acciones de Excepción
Excepción
3a El barbero ya se encuentra registrado
3b El sistema informará que ya está ocupado el número de identificación
3c Retorna al paso 1
Postcondición Los nuevos usuarios creados por el administrador tendrán acceso a las
opciones del barbero
14
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-004
Nombre Eliminación de los perfiles de los Barberos
Objetivo Eliminar cualquier barbero que ya no este asociado a la empresa
Descripción El Administrador será el único usuario con la opción de eliminar los
barberos en caso de que estos ya no estén en labor
Actores Administrador
Precondición El administrador debe estar logueado y el barbero registrado
Escenario No. Descripción de acciones
Principal 1 El administrador selecciona la opción de “Eliminar barbero”
2 El administrador Ingresa el número de documento del barbero a
eliminar
3 El administrador selecciona el botón de “Eliminar”
4 El sistema eliminara toda la información relacionada al documento del
barbero diligenciado.
Escenario No. Descripción de acciones alternas
Alternativo
2a El administrador ingresa en el campo del documento con un número
de identificación errónea
3a El sistema informará sobre el error y regresa al paso 2
Escenarios de No. Descripción de acciones de Excepción
Excepción
Postcondición Después de haber eliminado el barbero se eliminarán los datos
almacenados en el perfil, y podrá crear otro perfil para los nuevos
barberos a trabajar
15
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-005
Nombre Creación de la reservación
Objetivo Crear y establecer un horario para reservar tiempo con anticipación
Descripción Los usuarios registrados (cliente) podrán crear una reserva para un horario
futuro
Actores Cliente
Precondición El usuario debe estar logueado
Escenario No. Descripción de acciones
Principal 1 El cliente selecciona la opción de “Reservas”
2 El cliente elige los datos como el barbero, el corte, la hora y la fecha.
3 El cliente selecciona el botón de “Reservar”
4 El sistema crea el registro de la reserva.
Escenario No. Descripción de acciones alternas
Alternativo
2a El cliente elige un horario con un barbero que coincide con otra
reservación.
2b El sistema informa sobre el error y regresa al paso 2
2c El cliente elije una fecha pasada
2d El sistema informa sobre el error y regresa al paso 2
Escenarios de No. Descripción de acciones de Excepción
Excepción
3a El cliente elige un horario muy tarde para la reservación, el sistema le
notificará desde que horario podrá reservar.
4a El cliente no puede reservar otra reserva en la misma semana
Postcondición El cliente podrá de crear la reserva y podrá se creará el registro de la
reservación con los datos deseados del cliente
16
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-006
Nombre Cancelación de la reserva
Objetivo Eliminar una reserva equivocada o pendiente
Descripción El usuario tendrá la opción de eliminar una reserva realizada anteriormente
y podrá volver a reservar otra vez cuando este lo necesite
Actores Cliente
Precondición El cliente debe estar logueado
Escenario No. Descripción de acciones
Principal 1 El cliente seleccionar la opción de usuario
2 En cliente podrá eliminar la última reserva creada
3 El cliente selecciona el botón de “eliminar”
4 El Sistema eliminar los datos de la reserva y se cancelara
Escenario No. Descripción de acciones alternas
Alternativo
2a El cliente visualizara la reserva hecha previamente
3a El cliente decide no eliminar la reserva
Escenarios de 5 El cliente olvida los datos de la cuenta y no podrá cancelar la reserva
Excepción hecha
2 El cliente no tiene reservas por ende no podrá eliminar ninguna reserva
Postcondición El Usuario después de haber eliminado la reserva, tendrá la opción de
volver a crear una nueva reserva para futuros días.
17
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-007
Nombre Perfil del usuario
Objetivo Modificar los datos personales de los clientes
Descripción El cliente podrá modificar los datos personales como la contraseña, el
nombre, el teléfono y el correo electrónico en caso de actualización de
nuevos datos
Actores Cliente
Precondición El cliente debe estar logueado
Escenario No. Descripción de acciones
Principal 1 El cliente selecciona la opción de “usuario”
2 El cliente visualiza el botón para modificar los datos personales
2.1 El cliente selecciona el botón de “editar” e ingresa los datos (nombre,
telefono y correo electrónico) para modificarlos
2.2 El cliente selecciona el botón “Actualizar”
2.3 El sistema actualiza los datos suministrados por el cliente
3 El cliente visualiza el botón de cambiar la contraseña
3.1 El cliente selecciona el botón de “Modificar Contraseña” y completa
los campos “nueva contraseña” y “confirmar contraseña”
3.2 El cliente selecciona el botón de “actualizar”.
3.3 El sistema actualiza la contraseña y cierra la sesión
Escenario No. Descripción de acciones alternas
Alternativo
3.1a La nueva contraseña que ingreso el cliente no coincide con la
confirmación de contraseña
3a Se continua con el paso 3.1 del escenario principal
Escenarios de 1 El cliente actualiza la contraseña, y al intentar ingresar con los nuevos
Excepción datos no recuerda la contraseña que modifico
Postcondición El cliente después de haber creado la cuenta Barbermania tendrá la opción
de actualizar los datos personales en caso de que necesite modificarlos.
18
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -008
Nombre Horario de reservas
Objetivo Visualizar las horas que están reservas en el día
Descripción El cliente podrá visualizar los horarios de los barberos en que están
ocupados durante el día para que el cliente pueda saber a qué horas
podrá reservar
Actores Clientes
Precondición El cliente deberá estar logueado
Escenario Principal No. Descripción de acciones
1 El cliente selecciona la opción de “Reservas”
2 El cliente visualiza una tabla con los horarios ocupados de los
barberos, los datos visualizados son (tiempo de inicio, tiempo de fin y
el barbero)
3 Visualiza las horas que ese barbero tiene ocupadas
Escenario Alternativo No. Descripción de acciones alternas
4 El cliente no visualiza ninguna reservación del día, tendrá más de
reserva
Escenarios de No. Descripción de acciones de excepción
Excepción
1 No se encuentran los registros de barberos, por ende, no se
visualizarán los horarios.
Postcondición El cliente visualizará las horas disponibles para realizar la respectiva
reservación
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
19
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -009
Nombre Recuperación de cuenta (contraseña)
Objetivo Recuperar la contraseña del cliente por medio del correo electrónico
Descripción En caso de que el cliente olvide la contraseña de la cuenta, él tendrá la
opción de recuperar la contraseña por medio del correo electrónico
Actores Cliente
Precondición Poseer una cuenta BarberMania
Escenario Principal No. Descripción de acciones
1 El cliente selecciona la opción de iniciar sesión y selecciona el link de
“olvide mi contraseña”
2 El cliente ingresar el dato del campo del correo electrónico y selecciona
el botón de “Recuperar”
3 El sistema verifica si esta registrado el correo electrónico suministrado
por el cliente
4 Si el correo esta registrado, el sistema enviará un código al correo
electrónico del cliente
5 El cliente después de haber recibido el código ingresará al link enviado
y visualizará un formulario de ingreso.
6 El cliente completa los campos de código y documento
7 El sistema validará los datos (código, documento) y se redireccionará al
REQ-007 (cambiar contraseña)
Escenario No. Descripción de acciones alternas
Alternativo
2a El cliente ingresa el dato erróneo del correo electrónico
2b El sistema informa sobre el error y regresa al paso 2 del escenario
principal
6a El cliente ingresa el campo del código erróneo o el documento erróneo
7a El sistema validara y informara sobre el error de ingreso de datos
Escenarios de No. Descripción de acciones de excepción
Excepción
2a El correo electrónico suministrado por el cliente no es el que está
vinculado con la cuenta
Postcondición El usuario podrá recuperar y cambiar la contraseña para volverse a loguear
20
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -010
Nombre El cliente puede ver las reservas previamente hechas
Objetivo Visualizar las reservas hechas anteriormente
Descripción El cliente podrá en la sección del perfil ver la reserva previamente ya
hecha en caso contrario no visualizará nada
Actores Cliente
Precondición El cliente debe estar logueado y haber realizado alguna reservación
previamente
Escenario Principal No. Descripción de acciones
1 El cliente selecciona la opción de “Usuario”
2 El visualiza la gestión de la última reserva activa
Escenario No. Descripción de acciones alternas
Alternativo
2a El cliente no ha realizado ninguna reserva
2b El cliente no visualizara
2c El cliente selecciona el botón de “reservar ahora”
2d El sistema lo redirecciona al requerimiento REQ-005
Escenarios de No. Descripción de acciones de excepción
Excepción
Postcondición El cliente podrá visualizar el registro de la reserva creada previamente
para confirmar los datos
21
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -011
Nombre Los usuarios podrán visualizar la galería de cortes
Objetivo Visualizar las imágenes que se encuentran en la galería
Descripción Los usuarios tendrán la opción de visualizar la galería para poder identificar
los diferentes cortes que ofrece la Barberia
Actores Usuarios
Precondición Ninguna
Escenario No. Descripción de acciones
Principal
1 El usuario selecciona la opción de “Galería”
2 El usuario visualiza los diferentes cortes agregados por los barberos
Escenario No. Descripción de acciones alternas
Alternativo
3 Los barberos eliminan la mayoría de las fotografías de antiguas y nuevos
cortes
4 El usuario podrá visualizar los nuevos cortes que serán agregados por el
barbero
Escenarios de 1. Todos los usuarios podrán ver la galería de cortes, pero en caso de que
Excepción quieran calificar, el cliente solo tendrá la opción de calificar las fotos.
Postcondición El usuario tendrá acceso a la visualización de la galería para poder diferenciar
la variedad de cortes que ofrece la barberia
22
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -012
Nombre La calificación de los cortes
Objetivo Reaccionar y calificar los diferentes cortes
Descripción El cliente podrá calificar los cortes y promover el corte con el sistema de
likes
Actores Cliente
Precondición Debe de estar logueado como cliente
Escenario No. Descripción de acciones
Principal
1 El cliente selecciona la opción de “galería”
2 El cliente podrá calificar la foto con un me gusta
2.1 El cliente selecciona el botón de “me gusta” y el sistema suma el
numero de likes de la fotografía
3 El cliente podrá calificar la foto con un “disgusta”
3.1 El cliente selecciona el botón de “disgusta” y el sistema suma el
número de dislikes de la fotografía
4 El sistema permite visualizar la cantidad de likes y dislikes que tiene
cada fotografía
Escenario No. Descripción de acciones alternas
Alternativo
2a EL cliente ya anteriormente había calificado y podrá cambiar
nuevamente su calificación
Escenarios de No. Descripción de acciones de excepción
Excepción
5 Los usuarios que no estén registrados no podrán calificar las
fotografia de los cortes.
6 Los barberos eliminan el álbum de la galería y por consecuencia los
clientes no podrán calificar los cortes de los clientes
Postcondición El cliente podrá calificar las fotos que se encuentran en la galería y
promover el corte a una mayor calificación
23
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -013
Nombre Información de los barberos
Objetivo Visualizar la información de los barberos
Descripción Los usuarios podrán visualizar los datos de los empleados de la Barberia
Actores Cliente
Precondición ninguna
Escenario No. Descripción de acciones
Principal
1 El usuario selecciona la opción de “barberinfo”
2 Visualiza la información de cada barbero como el nombre, teléfono,
correo, Instagram, Facebook y la imagen
Escenario No. Descripción de acciones alternas
Alternativo
2a El administrador ha eliminado los perfiles antiguos y los clientes no
podrán visualizar su información
Escenarios de No. Descripción de acciones de excepción
Excepción
Postcondición Los clientes podrán visualizar los datos e información de los barberos para
contactarlos y saber que barbero elegir durante la reserva.
24
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -014
Nombre El barbero podrá subir y eliminar imágenes de las ofertas
Objetivo Controlar las ofertas publicadas
Descripción Los barberos tendrán opción de agregar o eliminar imágenes en el apartado
de ofertas con el propósito de gestionar la publicidad de la Barberia
Actores Barberos
Precondición Logueo cuenta de barbero
Escenario No. Descripción de acciones
Principal
1 El barbero selecciona la opción de “ofertas”.
2 El barbero selecciona el botón de “Agregar”
2.1 El barbero ingresar los datos de la oferta como el id, la imagen y la
descripción
2.2 El barbero selecciona el botón de “Agregar oferta” y se agregar la nueva
oferta
3 El barbero selecciona el botón de “Eliminar”
3.1 El barbero ingresar el id de la oferta a eliminar.
3.2 El barbero selecciona el botón de “Eliminar” y se elimina la oferta
deseada
Escenario No. Descripción de acciones alternas
Alternativo
2a El barbero ingresa un id duplicado en otra oferta.
2b El sistema informa que el id ya esta ocupado, y se continua en el paso 2
del escenario principal
3a El barbero ingresa un id erróneo para eliminar una oferta.
3b El sistema informara que el id que desea borrar no existe, y continua
con el paso 3 del escenario principal
Escenarios de No. Descripción de acciones de excepción
Excepción
2b Si la imagen que se agregará pesa más de 2mg, el sistema no dejará
agregarla
25
Postcondición El barbero tendrá las opciones agregar y eliminar las ofertas para que los
clientes estén enterados sobre las ofertas que brindara la Barberia
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -015
Nombre Gestión de las fotografías de la Galería
Objetivo Agregar y eliminar las imágenes y descripciones de los cortes
Descripción Los barberos podrán agregar y eliminar los diferentes cortes en un formato,
Actores Barbero
Precondición Logueado como barbero
Escenario No. Descripción de acciones
Principal
1 El barbero selecciona la opción de “Galeria”
2 El barbero elige la opción de “Nueva foto”
2.1 El barbero ingresa los datos del nuevo corte como el Titulo, la imagen y la
descripción.
2.2 El barbero Presiona el botón de “Subir foto” para agregar la nueva imagen
Escenario No. Descripción de acciones alternas
Alternativo
3 En caso de que el barbero desee eliminar el corte de la galería debe
seleccionar la imagen a eliminar
4 El barbero selecciona el botón de “Eliminar” para eliminar la foto elegida
Escenarios de No. Descripción de acciones de excepción
Excepción
1 No se ha ingresado ningún corte en la galería, el barbero no podrá eliminar
los cortes si no hay fotografías en la galería y se cancelara el caso de uso
Postcondición El barbero podrá agregar o eliminar los cortes exitosamente
26
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de Desarrollo No aprobado
Definición del Caso de Uso
Código REQ -016
Nombre Sorteo de premios
Objetivo Premiar a los clientes que tienen más concurrencia en las reservaciones
Descripción El Administrador podrá elegir a los clientes aleatoriamente que realicen
más reservaciones y podrá premiarlos de acuerdo el nivel del cliente
Actores Administrador
Precondición Logueo con el administrador
Escenario No. Descripción de acciones
Principal
1 El administrador selecciona la opción de “Sorteo”
2 El administrador ingresa el campo del nivel (1-5)
3 ¡El administrador selecciona el botón de “Elegir Ganador!”
4 El sistema dependiendo del nivel elegido por el administrador, traerá
los datos (nivel, documento, nombre y teléfono) de un cliente al azar
5 El barbero selecciona el botón de “Enviar mensaje”. Y se
redirecciona al contacto del cliente
Escenario No. Descripción de acciones alternas
Alternativo
2a El cliente ganador elegido no tiene los datos completos como el
teléfono, se cancela envió del mensaje
2b se continua en el paso 2 del escenario principal
Escenarios de No. Descripción de acciones de excepción
Excepción
5a Si el barbero selecciona un nivel y no se muestra ningún dato, el
barbero deberá elegir otro usuario de un nivel diferente.
5b se continua en el paso 2 del escenario principal
Postcondición El administrador podrá premiar a los usuarios por el nivel de reservas
que llevan
27
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ-017
Nombre Perfil del barbero
Objetivo Modificar los datos personales de los barberos
Descripción El barbero podrá modificar los datos personales como la contraseña, nombre,
teléfono, correo electrónico, Facebook, Instagram y la foto de perfil, en caso de
que desee actualizar los datos
Actores Barbero
Precondición El barbero debe estar logueado
Escenario No. Descripción de acciones
Principal 1 El barbero selecciona la opción de “usuario”
2 El barbero selecciona el botón de “editar”.
2.1 El barbero visualiza el formulario y ingresa los datos nuevos como el
nombre, el teléfono, el email, Facebook, el Instagram y la seleccionar
la imagen del perfil
2.2 Presiona el botón de actualizar y se guardaran los nuevos datos
Escenario No. Descripción de acciones alternas
Alternativo
3 El barbero selecciona el botón de “modificar contraseña”
3.1 El barbero ingresa los campos como la contraseña nueva y la
confirmación de la contraseña
3.2 El barbero selecciona el botón de actualizar, se cierra la sesión y se
valida en el REQ-02
No. Descripción de acciones de excepción
Escenarios de 1 La nueva contraseña ingresada por el cliente no coincide con la de
Excepción confirmar contraseña, el sistema informa sobre el error y se cancela el
caso de uso
Postcondición El barbero después de haber creado la cuenta Barbermania tendrá la opción de
actualizar los datos personales en caso de que necesite modificarlos.
28
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -018
Nombre Generación de niveles de cliente
Objetivo Asignar el nivel al cliente de acuerdo a la cantidad de reservas hechas
Descripción De acuerdo a la actividad de reservas de cada cliente se asignará el
respectivo nivel
Actores Cliente
Precondición El cliente debe realizar un número de reservaciones
Escenario No. Descripción de acciones
Principal 1 El cliente al realizar una cantidad X de reservaciones
2 El cliente aumentara el nivel cada vez que complete una reserva
Escenario No. Descripción de acciones alternas
Alternativo
1 El cliente no realizado ninguna reservación, el cliente para aumentar
el nivel deberá crear la reserva en el caso de uso del REQ-005
Escenarios de No. Descripción de acciones de excepción
Excepción
Postcondición Se le asigna un nivel independientemente del número de reservaciones
realizadas por el cliente
29
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -019
Nombre Opciones bloqueadas del visitante
Objetivo Asegurar la restricción de reservas, la calificación y el perfil a los usuarios no
registrados
Descripción Los usuarios en condición de visitantes podrán ingresar a la página web y
visualizar los datos, pero no podrán a acceder a las demás características que
tiene un cliente
Actores Visitante
Precondición Ninguna
Escenario No. Descripción de acciones
Principal 1 El usuario no registrado ingresa al inicio de la pagina
2 El usuario no registrado visualiza las opciones como el inicio, las ofertas,
la información del barbero, pero no podrá acceder a la calificación de la
galería, a la reserva y al perfil
Escenario No. Descripción de acciones alternas
Alternativo
1a El usuario no registrado selecciona el botón de “registrarse” y continua con
el caso de uso REQ-001
Escenarios de No. Descripción de acciones de excepción
Excepción
Postcondición Los visitantes tendrán muy poco acceso a las opciones permitidas por el
sistema
30
Información de Catalogación
Proyecto Sistema de Reservación BarberApp
Autor Diego Lizarazo, Sebastián Landazábal, Katerine Origua y Luis Ávila
Versión 1.0 Estado de No aprobado
Desarrollo
Definición del Caso de Uso
Código REQ -020
Nombre Creación de los nuevos cortes y eliminación
Objetivo Maximizar la variedad de los cortes y eliminar los cortes antiguos o
menos populares entre los clientes
Descripción El barbero podrá crear los nuevos cortes para aumentar la variedad de
cortes de cabello y al igual tendrá la opción de eliminar los cortes
Actores Barbero
Precondición Logueo del barbero
Escenario No. Descripción de acciones
Principal 1 El barbero selecciona la opción de “Reservas”
2 El barbero selecciona la opción de “agregar o eliminar corte”
3 El barbero agregar el campo del nombre del corte, el barbero debe
y el precio del corte
3.1 El barbero elige el botón de “Agregar” para agregar el corte a la
sección del corte para los usuarios
Escenario No. Descripción de acciones alternas
Alternativo
4 El barbero selecciona la opción de “eliminar”
4.1 El barbero elige el corte que desee eliminar
4.2 El barbero selecciona el botón de “Eliminar” y se elimina el registro
del corte
Escenarios de No. Descripción de acciones de excepción
Excepción
Postcondición El barbero puede agregar o eliminar cortes de la barbería y por lo tanto
de la lista de reserva.
31
9. Diagrama de casos de uso
10. Diagrama de Clases
32
11. Diagrama de secuencia
Login()
Subir imágenes()
Subir Oferta()
33
Actualizar información ()
34
12. Descripción de algoritmos
12.1. Ofertas
INTERFAZ
<link href=”css/[Link]”>,<link
href=”css/barra_menu.css”>= Es la unión del diseño de
la estructura de html en css.
<script src="js/[Link]"></script> = Se utiliza para
llamar un Script para la función de la visualización de las
como un carrusel de imágenes.
$(window).load(function()
{$('.flexslider').flexslider({touch: true, slideshowSpeed:
3000,});}); = Se establece la diferencia de velocidad que
se necesita.
include('../controlador/controlador_direcciones.php'); =
Sirve para la llamar las funciones y elegir el tipo de
usuario a que pertenece.
if (!isset($_SESSION['usuario']) &&
!isset($_SESSION['barbero'])){ = Se utiliza para validar la
sesión en que está es de usuario.
35
include('[Link]'); = se incluye la otra interfaz
en caso si la sesión es de usuario die(); = Cierra la
sesión si esta como usuario.
<?php include('[Link]')?> = Incluye la zona de datos
del footer y datos de la barberia.
CONTROLADOR
include('../controlador/controlador_usuario.php'); = Trae
los datos del usuario y de los archivos que están como
las imágenes y descripciones.
$select=mostrarofertas(); = Se crea un variable y se le
asigna la funcion de controlador y llama las imágenes
de las ofertas.
while ($ila=$select->fetch_array()){ = se crea una while
que genere todo la funcion que trae los datos de las
imágenes y la descripcion y el Id. Y dentro de esto se
descomprime lo que trajo de la base de datos que
quedan guardados en la variable $ila.
$a=$ila['nombreofertas']; = Se le asigna el nombre de la
imagen a la variable “A”.
<img src='<?php echo $a; ?>'> = Se trae como url la
imagen guardada en la array de $ila.
36
<?php echo "<section class='flex-
caption'>"."<p>".$ila['ofertasid']."</p>"."</section>"; ?> = Se trae
el ID de las ofertas del array $ila.
echo ucfirst($ila['description']); ?> = Se le asigna la descripcion
que esta guarda en el array y se muestra.
MODELO
require_once('../modelo/crud_usuario.php'); = Se requiere los
llamados de las funciones guardadas en el modelo.
require_once('../modelo/[Link]'); = Se requiere las
variables del del cliente en Php.
function mostrarofertas(){ = crear la funcion de mostrar las
ofertas
$crud=new CrudUsuario(); = Crea la instancia del Crud_Usuario.
$ofertas=$crud->oferta(); = A crud_usuario se le asigna la
funcion de oferta que esta en el modelo. return $ofertas; =
Retorno o devulve los resultados en lavariable ofertas.
public function oferta(){ = Crea la funcion de oferta ubicada en
el modelo. global $con; = Trae la variable de conexión de la
base de datos.
$select=mysqli_query($con,"CALL`oferta`()"); = Crea una
varible la cual guardara los datos traidos de la base de datos.
return $select; = Retorna los datos.
CSS
37
12.2. Agregar ofertas
38
INTERFAZ
Linea12
El formulario a donde tiene que llevar la información que es
controlador_barbero
Línea 14 Sirve para llevar una imagen
Línea 16 Campo para llenar un id de la oferta
Línea 20 Botón para enviar el formulario Controlador barbero
MODELO
Linea 3 y 6
Llama las conexiones correspondientes para insertar la oferta
Linea 15 y 18 Las isntancias para insertar la oferta
Linea 70 Pregunta si la omagen pesa mas dos de dos megas
Linea 71 Muestra un mensaje si pesa mas de dos megas
Linea 76 Se ingresa a una variable la ubicaion de donde se quiere el archivo
39
Linea 78 Le pone el nombre y la imagen
Linea 80 Pregunta y ejecuta si no se movio el arrchivo y se une la direccion y el
nombre de la imagen
Linea 81 a 82 Muestra un mensaje y luego redirige a la pagina subir ofertas
Linea 86 a 89 Se asignan el contenido de las variables al metodod set
Linea 91 Se envia a la clase crud_barbero a la funcion insertar_oferta
Linea 93 Pregunta si c es igul a si
Linea 94 Se envia a la pagina de ofertas
Linea 95 Si no Linea 97 Muestra el error Modelo barbero
CONTROLADOR
Linea 100
inicia la funcion linea 101 trae la conexión linea 103 a 106 se trae con el metodo get
lo guardado anteriormente en el metodo set
108 a 111
Usando el metodo almacenado en la base de datos y se ejecuta
Linea 113
Se asigna una sg un si
Linea 116
Se asigna una sg un no
Linea 118
Retorna el resultado guardado en sg
12.3. Eliminar Oferta
INTERFAZ
40
Linea 9 a 21
Depednidendo de la sesion activa se mostara una barra del
menu Linea 33 es formulario donde se envara la informacion a
controlador_barbero
Linea 35
Lugar donde se envia el numero del id
Linea 36
Sirve para enviar la informacion a controlador_barbero
MODELO
Línea 124
Es la función llamada Línea 126 se trae con el método get lo
guardado con el metodo set y se guarda en una variable línea
41
127 trae la conexión de la base de datos línea 129 se genera
una consulta para buscar la imagen línea 132 se pasa en un
array a una variable línea 134 borra la imagen del directorio
línea 136 cierra la conexión línea 138 a línea 141 se genera una
eliminación en la base de datos línea 143 a 144 se muestra un
mensaje y se envia a la interfaz de ofertas linea 145 a 147 si no
muestra el error línea 151 cierra la conexión
CONTROLADOR
Línea 2 y línea 6
Llama los archivos que se necesitan para manejar las
ofertas
Línea 12 y 18
Son las instancias que se necesitan para manejar las
ofertas
Línea 103
Se le asigna al método set la varible enviada de la
interfaz eliminaroferta
Línea 105
Con una variable Se llama a la función ubicada en la
clase crudbarber enviadoe la variable guardada con
el método set
42
Línea 107 Se verifica lo retornado si es igual a si
Linea 109 Si es correcto lo envía a la interfaz de ofertas
Línea 110 a 111 Si no es correcto muestra el error
12.4. Información
[Link]
Session_start(); = Se inicia la sesiòn
<head> = Se abre etiqueta head
Link href=“[Link]”= Se llama la hoja de estilos
[Link]
Link href=“barra_menu.css”= Se llama la hoja de estilos
de la barra de menú
Link href=“[Link]”= Se llama la hoja de estilos de la
información
</head> = Se cierra la etiqueta head
include('../controlador/controlador_direcciones.php'); =
llama del controlador a controlador_direcciones.php el
cual trae las opciones disponibles para el usuario
if (!isset($_SESSION['usuario']) &&
(!isset($_SESSION['barbero']))){
$c=Visitante();
43
} = Se pregunta si la sesión es diferente a usuario o
barbero y si es así inicia la de visitante
if(isset($_SESSION['barbero'])) {
$b=BArbero();
} = Pregunta si la sesión es la de barbero y si es así se
inicia
if (isset($_SESSION['usuario'])){
$a=usuario();
} = Pregunta si la sesión es la de usuario y si es así se
inicia
include('../controlador/controlador_info.php'); = Incluye
el controlador para traer información
$sql1=traerinformacion(); = Trae la información de la
base de datos
while ($ila=$sql1->fetch_array()) {
$a=$ila['imgbarbero'];
$ducumennt=$ila['documentobarber']
?> = Mientras que en la base de datos haya mas de una
imagen la mostrara
44
<textarea disabled class="task-name"> <?php echo $ila
['nombarber'] ;?> </textarea><br><br>
<textarea disabled> <?php echo $ila ['edad']; ?>
</textarea><br><br>
<textarea disabled> <?php echo $ila ['telefono'] ;?>
</textarea><br><br>
<textarea disabled> <?php echo
$ila['correo_electronico']; ?> </textarea><br><br>
= Muestra la información guardad en la base de datos ,
nombre, edad, teléfono y correo electrónico del
barbero.
<?php
$tel=$ila['telefono'];if (isset($_SESSION['barbero']) and
$_SESSION['barbero']==$ducumennt ) { echo'<a
class="modificar"
href="modificar_barbero.php">Modificar</a>';
} ?> = Se pregunta si el numero de documento es de un
barbero, se le habilitara la opción de modificar
información, pero esto solo para los barberos.
<div class="iconos" id="iconos">
45
<a
href="[Link]
echo $tel ?>" class="whatsapp" target="_blank"><i
class="fab fa-whatsapp"> : <?php echo $ila['telefono']
?></i></a>
<a href="#" class="facebook"><i class="fab fa-
facebook"> : <?php echo $ila['facebook']?></i></a>
<a href="#" class="instagram"><i class="fab fa-
instagram"> : <?php if($ila['instagram'] == NULL){echo
"NO tiene";}else{echo $ila['instagram'];}?></i></a>
</div> = Se crean los links para que los usuarios puedan
ver las redes sociales de los barberos
include('[Link]')?>
<script src="js/[Link]" ></script>
<script src="../controlador/controlador_info.js" ></script>
</body>
</html> = Se incluye el [Link] que es la barra inferior
de la paginas y el controlador de información
JavaScript y se cierra el body y el html.
CONTROLADOR
Controlador_info.php
<?php
require_once('../modelo/crud_info.php'); =
Cuando se necesita, se llama el crud
46
_usuario.php function traerinformacion(){ = Se inicializa la
función
$ventepaca= new informacion(); = En la variable “ventepaca”
se le guarda la nueva información
$sql=$ventepaca->mostrar(); = Se le señala que al guardar la
información en $sql se utilice la función mostrar return $sql; =
Retorna la información
?>
MODELO
<?php include('../modelo/[Link]'); = Se incluye la
conexión a la base de datos
class informacion{ = Se crea la clase informacion public function
mostrar(){ = Se crea la función mostrar de manera publica
global $con; = llama la conexión a la base de datos
$select=mysqli_query($con,"CALL `info` "); = Se llama el
procedimiento de la base de datos return $select; = Retorna el
select
CSS
47
12.5. Modificar barbero
INTERFAZ
MODELO CONTROLADOR
CSS
48
12.6. Galería
INTERFAZ
49
Error reporting (0)= quita cualquier error que se muestre o
pueda mostrar
Línea 11 linea 13
<link rel="stylesheet"> trae los estilos css para la pagina
Línea 14 a línea 19
Sirve para para señalar mas específicamente para el usuario
Línea 29 require_once('../controlador/controlador_galeria.php');
permite establecer la relación
include('../controlador/controlador_direcciones.php'); permite
traer la barra línea 32 a 45 permite elegir la barra dependiendo
el usuario
$aa=traerinformacion(); llama la función que esta ubicada en
controlador galería while ($ila=$aa->fetch_array()) {} permite
generar la galería
50
55 a 57
Guarda lo traído
<h1> sirve para mostrar el nombre
<img> sirve para mostrar la imagen
<textarea> sirve para mostrar la descripción de la imagen
MODELO
Function traerinformacion() es la funcion que trae del modelo lo
solicitado
$crudgaler=new crudgaleria(); instacia la clase crud galeria
ubicada en modelo $abc=$crudgaler->mostrar_imagenes();
llama la funcion ubicada en la clase crud_galeria return $abc;
retorna el valor traido
CONTROLADOR
public function mostrar_imagenes() funcion ubicada en la clase
crud_galeria
global con; permite a reconocer la conexión de la base de
datos
$select=mysqli_query($con,"CALL `galeria` "); se llama al
procedimiento de traer imágenes y se ejecuta
CSS
51
12.6.1. Agregar imágenes a galería
INTERFAZ
52
session_start();
Se inicia la sesión if(!isset($_SESSION['barbero']) &&
$_SESSION['barbero'] == FALSE) {
Si la sesion es diferente a barbero if (!isset($_SESSION['usuario'])
&& !isset($_SESSION['barbero'])){
$c=Visitante();
Si se la sesión iniciada es diferente a la de barbero y a la usuario
se inicia la de visitante if (isset($_SESSION['usuario'])){
$a=usuario();
}?>
Si la sesión iniciada es igual a la de usuario se inicia usuario
<form action="../controlador/controlador_galeria.php"
method="post" enctype="multipart/form-data"> <div
class="titulo_galeria">
<h1>AGREGAR NUEVA FOTO</h1>
Titulo de la interfaz
53
</div>
<div class="tabla_ingreso">
<label class="texto">Nombre de la Imagen: </label>
<input class="inp" autofocus="" type="text"
name="nombreimagen" value="" required><br><br>
Espacio para ingresar el nombre de la imagen
<label class="texto">Descripción: </label><br>
<textarea class="inp" type="text"
name="descripccion_de_imagen" required
value=""></textarea><br><br>
Espacio para ingresar la descripcion de la imagen
<label class="texto">Buscar: </label><i class="fas fa-cloud-
upload-alt"></i>
<input class="inp2" type="file" accept="image/jpeg"
name="imagen" required value=""><br><br>
Espacio para ingresar la imagen
<input class="boton" type="submit" name="subefoto"
value="Subir Foto"><br><br>
Boton para subir la imagen a la galería
</div>
</form>
MODELO
54
session_start(); Se inicia sesión if (isset($_POST['subefoto'])) { Si se
sube foto if($_FILES["imagen"]["size"]>2024000){ echo"solo es
permitido archivos de 2Mb"; Prueba si la foto pesa 2 megas
Directorio de la imagen
$dir="../galerria/galeria";
Imagen
$imagenes=$_FILES["imagen"]["name"]; Si no se ha movido if(!
move_uploaded_file($_FILES["imagen"]["tmp_name"],$dir.$image
nes)){ echo "no se subio"; }else{
Si se ha movido
Se la asigna los valores a enviar a gar
$galer->setimagen($dir.$imagenes);
$galer->setnombreimagen($_POST['nombreimagen']);
$galer->setdescrpiccion($_POST['descripccion_de_imagen']);
Se envia a la variable a la funcion insertarimg en el modelo
crud_galeria
$c=$crudgaler->insertarimg($galer);
Se envía a imagen para hacer cambio de peso
55
$d=$crudgaler->cambiar_tamaño($galer); Si todo fue bien if
($c=="si") { header('Location:../interfaz/insertar_o_elimi.php');
CONTROLADOR
class crudgaleria{ Crea la clase crudgaleria public function
insertarimg($gar){ Inserta la imagen en base de datos global
$con;
Asignan los valores guardados en las nuevas variables
$imggale=($gar->getimagen());
$imgnombre=($gar->getnombreimagen());
$imgdescripccion=($gar->getdescrpiccion());
Prepara una consulta
$insert="INSERT INTO galeriaimg (idimagen,nombreimagen,
descrpiccion,imagen)
VALUES(NULL, '$imgnombre','$imgdescripccion','$imggale')"; Si la
consulta exitosa if ($con -> query($insert)==true) {
$sg="si";
}else{
$sg="no";
56
Retorna el valor que este guardo e n $sg return $sg;
$insert->close();
$con ->close();
12.7. Reserva Invitado
12.8. Reserva cliente)
INTERFAZ
session_start(); = Se inicia la sesión
<!DOCTYPE html> = Inicia documento html
<link rel="stylesheet" href="css/barra_menu.css"> = Se crea
conexión a la hoja de estilos del menu
<link rel="stylesheet" href="css/[Link]"> = Se crea
coneción a la hoja de estilos de la interfaz de reserva .reserva2{
background:rgba(175, 55, 55 ,1);
.index, .ofertas, .galeria2, .info{ background: #e1282a;
57
</style> = Se agrega color a dos clases de la interfaz
include('../modelo/[Link]'); = Incluye la conexión con la
base de datos
include('../controlador/controlador_direcciones.php'); = Incluye
las direcciones correspondientes
require_once('../modelo/crud_reservas.php'); = Si lo requiere
trae el crud de las reservas
$select=mysqli_query($con,"select * from cortes ");
$selec=mysqli_query($con,"select * from barbero ");
Genera la consulta para hacer las reservaciones trayendo de la
base de datos la lista de cortes, lista de los nombres de los
barberos
$selec2=mysqli_query($con,"select horainicio,horafin,
documentobarber ,fecha from reservaciones where
fecha=curdate();");
Genera la consulta de la base de datos la hora de inicio de la
reserva, la hora final de la reserva, el documento del barbero, la
fecha todo esto de la reservaciones
$date= new DateTime();
Agrega a la variable global date una nueva fecha
$rese=new reservaciones();
Agrega a la variable global rese una nueva reservacion if
(!isset($_SESSION['usuario']) && !isset($_SESSION['barbero'])){
58
$c=Visitante();
Si la sesión iniciada es diferente a barbero o a usuario, se genera
la sesión de visitante if(isset($_SESSION['barbero'])) {
$b=BArbero();
Si la sesión es igual a la de barbero se genera la sesión if
(isset($_SESSION['usuario'])){
$a=usuario();
Si la sesión es igual a la de usuario se genera la sesión
$revisarregistroprevio=$rese-
>revisar_reservaprevia($_SESSION['usuario']); }?>
Se revisa si la sesión de usuario fue generada previamente
59
h1 class="titulo">Deberá de llenar todos los campos para
realizar la reserva </h1>
Texto informativo en la intefaz de reserva
<form action="../controlador/controlador_reserva.php"
method="post">
Inicializa un formulario el cual será controlado en el
controlador_reserva.php e ira por método post
<select name='barbero'>
<option>Eligir</option>
<?php while ($registro=mysqli_fetch_array($selec)){?>
<option class='option'><?php echo$registro['nombarber'];
?> <img src='<?php $a ?>' alt=''></option>
<?php }?>
Recorre lo generado en la consulta del barbero para la lista
desplegable de seleccionar barbero
<select name='corte'>
<option>Elegir</option>
<?php while ($registr=mysqli_fetch_array($select)){ ?>
<option class='option'><?php echo$registr['nomcorte']; ?>
<img src='<?php $a ?>' alt=''></option>
<?php }?>
Recorre lo generado en la consulta del corte para la lista
desplegable de seleccionar cortes
<input type="time" placeholder="Ingrese solamente la
hora" require title="Ingrese la hora de la Reservación(solamente
horas)" pattern="{1-10}" maxlength="4" name="hora"min="09:00"
Crea un input el cual genera la hora de reservación
60
<input type="date" placeholder="Elija una dia" title="Elija
la fecha" pattern="{1,50}" maxlength="1" name="fecha" require >
Crea un input el cual genera la fecha de reservación
<button type="submit"
class="boton"name=registrarreserva>RESERVAR</button> Botón
con el cual se registra la reserva
?php while ($fechas=mysqli_fetch_array($selec2)){?>
<td class="datos"> <?php echo "<label>".date("g:i
a",strtotime($fechas['horainicio']))."</label>"; ?></td>
<td class="datos"> <?php echo "<label>".date("g:i
a",strtotime($fechas['horafin']))."</label>"; ?></td>
<?php $barbero2 = mysqli_query($con,"SELECT * FROM
barbero where documentobarber =
'".$fechas['documentobarber']."'");
$barbero3 = mysqli_fetch_array($barbero2); ?>
<td class="datos"> <?php echo
"<label>".ucfirst($barbero3['nombarber'])."</label>";?></td>
</tr>
<?php };?>
Muestra las fechas, las horas de inicio y fin de una reserva y el
nombre y el numero del documento del barbero al cual
pertenece la reserva.
61
<?php include('[Link]')?>
Trae el footer que es la barra final de la pagina
MODELO
62
require_once('[Link]'); require_once('[Link]');
require_once('[Link]'); require_once('[Link]');} Si
se requiere trae las siguientes direcciones class reservaciones{
Se crea la clase “reservaciones” public function
__construct(){}
Se crea un constructor publico public function
crearreserva($reser){ global $con;
$documents=($reser->getdocumentobarbers());
$document=($reser->getdocumentocliente()); $cute=($reser-
>getidcorte());
$time=($reser->gethorainicio());
$timeend=($reser->gethorafin());
$fech=($reser->getfecha());
Se le agrega a las variables establecidas lo ingresado en los get
$selec2= mysqli_query( $con,"SELECT idcorte,preciocorte FROM
cortes WHERE nomcorte = '$cute'");
63
Selecciona de la base de datos el idcorte, preciocorte donde
sea igual al corte ingresado en el get
$registro2=mysqli_fetch_array($selec2);
Recorre y guarda la información del array selec2 en registro2
$b=$registro2['idcorte'];
$c=$registro2['preciocorte'];
Se le agrega a la variable b y c los dos datos requeridos
$insertar = (" CALL
`crearrese`('$documents','$document','$c','$time','$timeend','$fe
ch','$b');");
En la variable inserta, guarda el resultado de la llamada de la
base de datos
$resultado = mysqli_query($con, $insertar); Se guarda en
resultado la variable insertar if (!$resultado) {
Se pregunta si el resultado es diferente a resultado echo
'<script>alert("fallo");
Si es asi, abre una etiqueta JavaScript y en un alert genera el
mensaje “Fallo” [Link](-1);
</script>';
$verifico=mysqli_query($con, "SELECT xp,nivel FROM `niveles
clientes` WHERE documentocliente = '$document'");
En la variable verifico se guarda una selección de la base de
datos de la tabla niveles clientes donde trae el documento del
cliente
$voy=mysqli_fetch_array($verifico);
$d=$voy['nivel'];
$c=$voy['xp']; $c=$c+1; if ($c==10){ $c=0;
64
$d=$d+1;
Todo esto es para guardar en array el nivel del cliente se le
suma de uno en uno y asi subir de nivel
$xpnivel=mysqli_query($con,"CALL
`otorgar_xp`('$c','$document','$d');");
Otorga nivel a clientes mysqli_close($con);} public function
horadelfin($hora){ return date('H:i:s', strtotime($hora)+2700);}
public function validartiempo($hora,$fe,$doc) { global $con;
Valida el tiempo en la cual se realizo la reservación
$selec= mysqli_query(
$con,"SELECT`horainicio`,`horafin`,`fecha`,`documentobarber`
FROM
`reservaciones` where documentobarber='$doc' and
fecha='$fe' ORDER BY `reservaciones`.`horafin` ASC");
$confirmacion="correcto";
Corrobora que la reservacion fue correcta while ($ila=$selec-
>fetch_array()) {
$a=$ila['horainicio'];
$b=$ila['horafin'];
$c=$ila['fecha'];
$d=$ila['documentobarber']; Se recorre el array mediante un
while if ($hora>=$a and $hora<=$b ){$confirmacion="f"; echo
'<script> alert("esta hora choca y fecha esta ocupada otra por
favor inte con otra")
;[Link](-2);
</script>'; exit; break;}
Valida si la hora es mayor o igual y menor o igual, genera una
alerta para informar que esta hora ya esta ocupada
65
return $confirmacion;
Retorna la confirmación de la reservación function
validartiempo2($hora,$fe,$doc) { Se crea la función para
validar tiempo global $con;
$hora2= date('H:i:s', strtotime($hora)+2700);
$selec= (
"SELECT`horainicio`,`horafin`,`fecha`,`documentobarber` FROM
`reservaciones` where documentobarber='$doc' and
fecha='$fe' ORDER BY `reservaciones`.`horafin` ASC");
Genera una selección de la tabla reservaciones los datos de
hora de inicio, hora de fin, fecha y documento del babero el
cual mirara si el documento del barbero y la fecha son iguales a
la registradas
$confirmacion2="no_esta_registrada";
$result=mysqli_query($con,$selec); while ($ila=$result-
>fetch_array()) {
$a=$ila['horainicio'];
$b=$ila['horafin'];
$c=$ila['fecha'];
$d=$ila['documentobarber']; Se recorre el array mediante un
while if($hora2>$a and $hora2<=$b ){ $confirmacion2="ff"; echo
'<script> alert("esta hora choca con otra por favor inte con
otra"); [Link](-2);
</script>'; }else{ echo $a;
66
Valida si la hora es mayor o igual y menor o igual, genera una
alerta para informar que esta hora ya esta ocupada return
$confirmacion2;
Retorna la segunda confirmación de la hora
public function evitarfechaanterior($fecha){
Crea la funcion para evitar que la reserva se realice a una
fecha anterior al dia presente
$date= new DateTime();
A la variable global date se le agrega la nueva fecha
$hora4= date('N', strtotime($fecha)); if ($fecha <$date-
>format('Y-m-d')or $hora4==7 ){ echo '<script> alert("esta fecha
o es undia de descanso o esta atrasada intente con otra");
[Link](-2);
</scrip>'; exit;
Valida la fecha y envia un mensaje por si la fecha que se
ingreso es anterior o es un día de descanso de los barberos }else
{$enviar="correcto";} return $enviar;}
Sino se le da la instrucción que la reserva es correcto y retorna
enviar public function mostrarreserva($usuarios){
Crea la funcion para mostrar la reserva que realizaron los
usuarios global $con;
$select=mysqli_query($con,'CALL `eliminarantiguosregistro`();');
Llama de la base de datos el procedimiento
eliminarantiguoregistro $verfificar=mysqli_query($con,'select
*from reservaciones'); if (mysqli_num_rows($verfificar) < 0) {
67
Si el nuevo de reservas es menor que 0
$select1=mysqli_query($con,'CALL `crearregistro`();');}
Llama de la base de datos el procedimiento crearregistro
$resultado2 =mysqli_query($con, "CALL
`mostrar_reservas_barbero`('$usuarios')"); Llama de la base de
datos el procedimiento mostrar_reservas_barbero return
$resultado2;}
Retorna el resultado
public function revisar_reservaprevia($document){
Crea la function para resvisar las reservaciones previas
global $con;
$verificar_usuario = mysqli_query($con, "SELECT
documentocliente FROM reservaciones WHERE
documentocliente = '$document' ");
Verifica el documento del cliente de la base de datos if
(mysqli_num_rows($verificar_usuario) > 0) { Verifica si el usuario
esta en al base de datos echo
header('location:../interfaz/[Link]'); Llama la
interfaz de finalización de reserva exit; mysqli_close($con);}}
Cierra la conexión con la base de datos public function
hora_igual($time,$fech,$doc){ Crea la función hora igual global
$con;
$verificar_hora = mysqli_query($con, "SELECT horainicio FROM
reservaciones WHERE horainicio = '$time'and fecha = '$fech' and
documentobarber='doc' ");
68
Selecciona de la base de datos de la tabla reservaciones la
hora de inicio si es igual a la hora y la fecha digitada y el
documento del barbero al barbero elegido if
(mysqli_num_rows($verificar_hora) > 0 ) { Verifica si hay ya
alguna hora igual a esa echo'<script>alert("hora reservada");
Si es así genera una alerta que dice que la hora ya esta
reservada [Link](-1);</script>'; exit;
CONTROLADOR
session_start(); Se inicia la sesión
include('../modelo/[Link]'); Incluye la conexión a la
base de datos require_once('../modelo/[Link]');
require_once('../modelo/[Link]');
69
require_once('../modelo/[Link]');
require_once('../modelo/crud_reservas.php');
require_once('../modelo/crud_reservas2.php');
require_once('../modelo/crud_usuario.php');
Si es requerido trae las diferentes direcciones.
trae el contenido de la clase reserva ubicado en
modelo/Clientephp
$usuario=new clientes();
Trae el contenido de la clase reserva ubicado en
modelo/crud_usuario.php
$crud=new CrudUsuario();
Trae el contenido de la clase reserva ubicado en
modelo/crud_reservas.php
$rese=new reservaciones();
$rese2=new reservaciones2();
Trae el contenido de la clase reserva ubicado en
modelo/[Link]
$daorese= new reserc();
Registran una reserva
if (isset($_POST['registrarreserva'])) {
Envia y guarda a la funcionobtenerUsuario
Si el usario existe osea si no es nulo
Verifica si la fecha es anterior utilizando la funcion ubicada en
crud_reservas evitarfechaanterior
$fechaatras=$rese->evitarfechaanterior($_POST['fecha']); Si es
correcto if ($fechaatras=="correcto") {
Se hacen las verificaciones de las horas que esten guaradas en
la base de datos para que no haya problemas
$documentobarbero= $rese2->idbarbero($_POST['barbero']);
70
$probar=$rese-
>validartiempo($_POST['hora'],$_POST['fecha'],$documentobarbe
ro);
$probar2=$rese-
>validartiempo2($_POST['hora'],$_POST['fecha'],$documentobarb
ero); Si todo va bien if ($probar=="correcto" and $probar2==
"no_esta_registrada") {
Verifica si la hora que envio el cliente sea exacatmente igual a
otras
$verificarhoraigual=$rese-
>hora_igual($_POST['hora'],$_POST['fecha'],$documentobarbero);
Verifica que el cliente ya no hay echo reservaciones
$revisarregistroprevio=$rese-
>revisar_reservaprevia($_SESSION['usuario']);
Asigna todos los valores de a una sola variables
$daorese->setdocumentocliente($_SESSION['usuario']);
$daorese->setdocumentobarbers($documentobarbero);
$daorese->setidcorte($_POST['corte']);
$daorese->sethorainicio($_POST['hora']);
$cc=$rese->horadelfin($_POST['hora']);
$daorese->sethorafin($cc);
$daorese->setfecha($_POST['fecha']);
Se envia los valores a crearreserva ubicada en la clase
reservaciones en crud_reservas
$a=$rese->crearreserva($daorese);
}else {
Si por algun motivo falla el window location se
enviara este mensaje al usuario echo "la hora
esta ocupada ";
}
71
}else{
Si por algun motivo falla el window location se
enviara este mensaje al usuario echo "la fecha
ya ha pasado";
Genera la consulta para insertar
header("Location:../interfaz/[Link]");
if (isset($_POST['eliminar_reserva'])) {
$elireser=$rese2->eliminarreserva($_SESSION['usuario']);
Si se genera la función eliminar reserva valida si la sesión
iniciada es la de usuario
function most_reser(){
$mostrar= new reservaciones();
$c=$mostrar->mostrarreserva($_SESSION['barbero']);
return $c;
Función para mostrar la nueva reservación, pero valida si esta la
sesión de barbero iniciado function most_cort(){
$mostrar= new reservaciones2(); $a=$mostrar-
>cortesbar(); return $a;
Función para mostrar los cortes en la reservación function
most_bar(){
72
$mostrar= new reservaciones2(); $b=$mostrar-
>barberonom(); return $b;
Función para mostrar el documento del barbero en la
reservación function most_resercliente(){
$mostrar= new reservaciones2(); $re=$mostrar-
>mirarreservacliente(); return $re;
Función para mostrar la reserva del cliente.
CSS
12.9. (Reserva Barbero)
INTERFAZ
73
74
<link rel="stylesheet" type="text/css"
href="css/[Link]">
Llama a la hoja de estilos [Link]
<link rel="stylesheet" href="css/barra_menu.css">
Llama a la hoja de estilos de la barra del menú
<?php session_start(); Se inicia la sesión
if(!isset($_SESSION['barbero']) && $_SESSION['barbero'] == FALSE) {
Se valida si sesion iniciada es la de barbero
Controlador de direcciones donde se situan las redirecciones
include('../controlador/controlador_direcciones.php');
require_once('../controlador/controlador_reserva.php'); Si es
diferente a una sesion de barbero if (!isset($_SESSION['usuario'])
&& !isset($_SESSION['barbero'])){
$c=Visitante();
Si la sesion iniciada es diferente a la de usuario o barbero se
inicia la sesión de barbero if(isset($_SESSION['barbero'])) {
Si la sesión de barbero es la que se inicia
$b=BArbero(); echo "<br><br>"; echo "<form
action='[Link]'>"; echo "<button
class='btn'>Agregar o Eliminar corte</button><br><br>"; echo
"</form>"; echo "<div class='fondo'>";
75
if (isset($_SESSION['usuario'])){
$a=usuario();
Si la sesión iniciada es la de usuario esta se inicializa
$aa=most_reser();
Trae el contenido de la clase reserva ubicado en
modelo/crud_reservas.php
Envia y guarda lo de la funcion mostra rreserva utilizando la
sesion del barbero
Trae la fecha actual
$fechaactual= date("d",strtotime(date_default_timezone_get()));
Recorre el array traido de la funcion mostrarreserva guardado
en $aa echo "<div class='contenedor_pa'>"; while ($consulta2
= mysqli_fetch_array($aa)) {
$fecha_grabada = date("j",strtotime($consulta2['fecha']));
Si fecha es igual a la actual
<?php echo "<div class='fecha'>"; if ($fechaactual ==
$fecha_grabada){
<div class='dia'> hoy mismo
</div> <?php } if ($fechaactual > $fecha_grabada){?>
<div class='dia'>
Dias Proximos
</div> <?php } if ($fechaactual < $fecha_grabada){
echo "<div class='dia'>"; echo "<label>Dias Pasados</label>";
echo "</div>";
}?>
76
En todo esto muestra si las diferentes reservaciones son de días
pasados, del día actual o de días próximos
CSS
12.10. Finalización Reserva
CSS
77
12.11. Agregar Cortes
INTERFAZ
78
<link rel="stylesheet" type="text/css"
href="css/[Link]">
Llama a la hoja de estilos [Link]
<center>
<form action="../controlador/controlador_barbero.php"
method="post" enctype="multipart/form-data">
Se gestiona el formulario mediante el
controlador_barbero.php div
class="titulo_galeria">
<h1>AGREGAR NUEVO CORTE</h1>
</div>
Titulo de la interfaz
<div class="tabla_ingreso1">
<label >Nombre del corte : </label>
<input type="text" name="nombredecorte" autofocus=""
value="" required><br><br>
Espacio para escribir el nuevo nombre de corte
<label class="texto">Precio del corte : </label>
<input class="inp" type="text" name="preciocorte"
value="" required><br><br>
Espacio para escribir el precio del corte
<input class="btn" type="submit" name="subecorte"
value="Subir corte">
79
Botón para agregar el nuevo corte
MODELO
if (isset($_POST['subecorte'])) {
Si se elige la opción de subir corte
$cort->setdocumentos($_SESSION['barbero']);
Valida la sesión del barbero
$cort->setnombrecor($_POST['nombredecorte']);
$cort->setpreciocorte($_POST['preciocorte']);
Se asigna a las variables por método POST los datos
requeridos
$c=$barbr->crearcorte($cort);
Crea el corte
CONTROLADOR
public function crearcorte($cort){ Se crea la función agregar
corte global $con;
$documents=($cort->getdocumentos());
$cute=($cort->getnombrecor());
$buy=($cort->getpreciocorte());
80
$crearcorte="CALL`agregar_corte`('$documents','$cute','$buy')";
Se ejecuta el procedimiento de la base de datos agregar_corte
if ($con -> query($crearcorte)==true) { Si fue bien echo "se
agrego correctamente"; header("Location:
../interfaz/[Link]");
}else{
Si algo malo paso echo "se agrego correctamente"; }
Se retorna el valor guardado en $sg
12.12. Eliminar corte
INTERFAZ
<form action="../controlador/controlador_barbero.php"
method="post" enctype="multipart/form-data">
Se gestiona el formulario mediante el controlador_barbero.php
<div class="titulo_galeria">
<h1>ELIMINAR CORTE</h1>
Titulo de la interfaz
</div>
<div class="tabla_ingreso2">
<label class="texto">Elige el corte :</label>
<select name='corte' class="select-css"><option>Elige</option>
<?php while ($registr=mysqli_fetch_array($a)){ ?>
81
<option class='option'><?php echo$registr[0]; ?></option>
<?php }?>
Una lista seleccionable para elegir el corte que se va a eliminar
</select>
<input class="btn" type="submit" name="eliminecorte"
value="Eliminar">
Botón con el cual se elimina el corte selecionado
MODELO
if (isset($_POST['eliminecorte'])) {
Si se selecciona la opción de eliminar corte $cort-
>setdocumentos($_SESSION['barbero']);
Se valida la sesión del barbero
$cort->setnombrecor($_POST['corte']);
Se obtiene el nombre del corte a eliminar
$c=$barbr->eliminarcorte($cort);
Se elimina el corte
CONTROLADOR
public function eliminarcorte($cort){ Se crea la función global
$con;
$documents=($cort->getdocumentos());
82
$cute=($cort->getnombrecor());
$eliminar=("CALL`eliminar_cortes`('$cute')"); Realiza la llamada
del procedimiento en la base de datos if ($con ->
query($eliminar)==true) { Si fue bien echo "se elimino
correctamente"; header("Location:
../interfaz/[Link]");
}else{
Si algo malo paso echo $eliminar.mysqli_error($con);
CSS
12.13. Sorteo)
83
INTERFAZ
Línea 40
Campo para poner el nivel del cliente con id search
Línea 41 para enviar la infromacion al sistema de [Link] el
onlick sirve para no enviar ningún campo vacio
Línea 47 a 48 Pone el nombre de nivel y el campo para mostrar
la información
Línea 51 a 52 Pone el nombre de documento y el campo para
mostrar la información
Línea 55 a 56 Pone el nombre de nombre y el campo para
mostrar la información
Línea 59 a 60 Pone el nombre de teléfono y el campo para
mostrar la información
Línea 64 Botón que lleva el numero para enviarlo a whatssap
Línea 67 a 68 Son el archivo de la librería de jquery
Es el archivo de Ajax que permite traer la información
MODELO
84
Línea 2 Traa el archivo donde se ubica la conexión
Línea 3 Se pone en una varible lo enviado en el
sistema_de_sortep.js Línea 4 a línea 6 se genera una
consulta de select para traer la información línea 8 se
envia la información a sistema de [Link]
CONTROLADOR
Línea 2 inicia el documento línea 3 si se oprime el botón
ubicado en en la interfaz de sorteo línea 4 hay se pregunta que
tiene la variable línea 5 se pasa a una variable lo traído de la
interfaz con la clase de id search línea 6 se inicia el Ajax línea 7
a 9 se pone la información a donde enviarl la variable el url es la
ubicación el data es la variable a enviar y el tipo si es post o get
línea 10 es donde se procesa la infromacion traida de modelo
crud_sorteo línea 11
se pone en la variable usando el método json:parse que
convierte un json que se convirtió en estring a otra vez un
formato json lo traído de crud_sorteo
línea 12 se muestra por consola esto es mas para ver si
esta recibiéndolo no es necesario en el archivo como
tal línea 113 a 116
lo que se hace aquí es utilizando los id que están ubicados en la
interfaz se coloca la información traida del crud_sorteo en los
campos de la interfaz modelo
CSS
85
12.14. Añadir Barbero
INTERFAZ
86
<link rel="stylesheet" type="text/css"
href="css/barbero_new.css">
Llama la hoja de estilos barbero_new.css
<link rel="stylesheet" type="text/css" href="css/barra_menu.css">
Llama la hoja de estilos para la barra del menu
<script src="js/[Link]"></script>
<?php session_start(); Se inicia la sesión
if(!isset($_SESSION['barbero']) && $_SESSION['barbero'] == FALSE) {
Si la sesion es diferente a barbero header("Location:
./../[Link]");
87
Controlador de direcciones donde se situan las redirecciones
include('../controlador/controlador_direcciones.php'); Si es
diferente a una sesion de barbero if (!isset($_SESSION['usuario'])
&& !isset($_SESSION['barbero'])){
$c=Visitante();
Si la sesión iniciada es diferente a la de barbero y a la de usuario
se inicia la de visitante if(isset($_SESSION['barbero'])) {
$b=BArbero();
Si se inicia la sesión de barbero if (isset($_SESSION['usuario'])){
$a=usuario();
Si se inicia la sesión de usuario
<form action="../controlador/controlador_barbero.php"
method="post" enctype="multipart/form-data">
Controlador del registro
<br><h5 class="texto">Documento</h5>
<input class="inp" autofocus="" type="number"
min='0'name="documento" value="" required pattern="[1-9]"
autocomplete="off"><br><br>
Espacio para agregar numero de documento
<h5 class="texto">Contraseña</h5>
<div class="mostrar">
<input type="password" name="contraseña" value=""
id="password" required ><button class="btn btn-primary"
type="button" onclick="mostrarContrasena()"><i class="fas
faeye"></i></button></div> <br><br>
<h5 class="texto">Nombre</h5>
<input class="inp" type="text" name="nombre" value="" required
autocomplete="off"><br><br>
88
Espacio para agregar el nombre
<h5 class="texto">Edad</h5>
<input class="inp" type="number" max="65" min='18'
name="edad" value="" required autocomplete="off"
placeholder="mayores a 18 menores a 65"><br><br>
Espacio para agregar la edad en un rango entre 18 a 65 años
<h5 class="texto">Telefono</h5>
<input class="inp" type="tel" name="telefono" value="" required
autocomplete="off"><br><br>
Espacio para agregar el numero de teléfono
<h5 class="texto">Correo Electronico </h5>
<input class="inp" type="email" name="correo" value="" required
autocomplete="off"><br><br>
Espacio para agregar el correo electronico
<h5 class="texto">Facebook </h5>
<input class="inp" type="text" name="facebook"
value=""><br><br>
Espacio para agregar el nombre en Facebook
<h5 class="texto">Instagram</h5>
<input class="inp" type="text" name="instagram"
value=""><br><br>
Espacio para agregar el nombre en Instagram
<h5 class="texto">Foto</h5>
<input class="inp" type="file" name="imagen" value="" ><br><br>
Espacio para agregar la imagen de perfil
<button class="boton" type="submit" name="registrarse"
>Registrarse</button>
Botón para realizar el registro del nuevo barbero
89
MODELO
public function insertar($bar){ Se crea la funcion insertar global
$con; Asigna los valores guardados a nuevas variables
$document=($bar->getdocumento());
$name=($bar->getnombre());
$eda=($bar->getedad());
$telef=($bar->gettelefonos());
$corre=($bar->getcorreo_electronicos());
$face=($bar->getfacebook()); $insta=($bar->getinstagram());
pass aparte de recibirlo encripta la contraseña
utilizando,PASSWORD_DEFAULT
$pass=password_hash($bar-
>getcontrasenas(),PASSWORD_DEFAULT);
$imo=($bar->getimagenbarber());
Se prepara una insersion de datos
$insert="CALL`crear_barbero`('$document',
'$name','$eda','$telef','$corre','$face','$insta','$pass','$imo')";
Se ejecuta Si es verdadero if ($con -> query($insert)==true) {
$sg="si";
90
Si es falso
}else{
$sg="no"; }
Retorna el valor guardado en $sg return $sg;
Cierra la conexión
$insert->close();
$con ->close();
CONTROLADOR
if (isset($_POST['registrarse'])) {
Si se elije la opción de registrarse
Verifica si la imagen del barbero pesa mas de dos mg
if($_FILES["imagen"]["size"]>2024000){ echo"solo permitido
archivos de 2Mb";
Si no pesa mas de dos megas
#directori de la imagen
$dir="../imagennes/img";
$imagenes=$_FILES["imagen"]["name"]; Si no se ha movido la
imagen if(!
91
move_uploaded_file($_FILES["imagen"]["tmp_name"],$dir.$image
nes)){ echo "no se subio"; }else{ Si se ha movido
Inserta los valores a una sola variable
$bar->setdocumento($_POST['documento']);
$bar->setnombre($_POST['nombre']);
$bar->setedad($_POST['edad']);
$bar->settelefonos($_POST['telefono']);
$bar->setcorreo_electronicos($_POST['correo']);
$bar->setfacebook($_POST['facebook']);
$bar->setinstagram($_POST['instagram']);
$bar->setcontrasenas($_POST['contraseña']); $bar-
>setimagenbarber($dir.$imagenes);
Se envian el valor a una funcion en modelo crud_barbero.php
$b=$barbr->insertar($bar); Si fue exitoso if ($b=="si") {
header('Location:../interfaz/[Link]'); Si no lo fue }else{ echo
($b);
CSS
12.15. Usuario
92
INTERFAZ
session_start(); = Se llama la sesion de proceso.
if (isset($_SESSION['usuario'])){ = Se valida si la sesión es de
usuario (cliente).
$datos = mostrar_datosss($_SESSION['usuario']); = Se crea un
variable y se utiliza la funcion de mostrar_datos() con la sesion
del usuario (cliente).
$rowA = mysqli_fetch_array($datos); = Se crea una variable y
se convierte en array la variable de datos.
if ($rowA==null or $rowA=='') { = Se valida que los datos traidos
sin nulos.
93
<a href="[Link]">Cerrar Sesión <i class="fas fa-
power-off"></i></a> = Se hace un redireccionamiento al Loguin
para cerrar la sesión.
<img class="redme" src="img/[Link]"><br>, <label><?php
echo
"Usuario"?></label><br><br> = Se muestran una imagen
definida previamente y el nombre de usuario.
<a href='[Link]'>Reservar Ahora!</a> = Se hace un
redireccionamiento a la página de reservas para crear la
reserva.
}else{ = En caso de que el los datos traidos sean diferente a
nulo.
<a href="[Link]">Cerrar Sesión <i class="fas fa-
power-off"></i></a><br> = Se hace un redireccionamiento al
Loguin para cerrar la sesión.
<a href="modificar_usuario.php" class="editar"> Editar <i
class="fas fa-user-edit"></i></a><br> = Se hace un
redireccionamiento para editar los datos del usuario.
<a href="contrasena_usuario.php" class="editar2"> Cambiar
Contraseña <i class="fas fakey"></i></a> = Se hace un
redireccionamiento para cambiar la contraseña del usuario.
<img src="img/[Link]"><br> = Desde la linea 183 a la 196
se traen los datos del usuario que esta en sesión como son el
nombre, el teleno y el email.
$num_reservas = $datos->num_rows; = Se cuenta los datos
traidos para las reservas del usuario if ($num_reservas >0){ =
Verifica que los datos traidos sean mayor a 0
<form action="../controlador/controlador_reserva.php"
method="post"></form> = De la linea 206 a la 209 se crear un
formulario que al precionar un boton se eliminen la reserva
previa.
<label><?php echo $rowA['documentocliente'] ?></label> =
Desde la linea 214 a la 220 se traen datos del usuario en sesion
94
como el documento, el nombre de barbero, la fecha de
reserva y el nombre del corte
}else{ = En caso que los datos del usuario sobre la reserva sea
menor a 0 echo "<div class='cero'>No has reservado</div> =
Se visualiza un mensaje de error de reservas
include("[Link]"); = Incluye un el footer que son los datos
de la barberia o empresa.
MODELO
require_once('[Link]'); = Desde la linea 3 hasta
la 6 que requieren los datos y funciones necesarias.
class CrudUsuario{ = Crea la clase.
public function usur_dato($datorecibido){ = Crea la
función de usur_dato y como entrada de datos utiliza la
variable $datosrecibido. global $con; = Utiliza la
variable global de $con que conecta a la base de
datos.
$mirar=mysqli_query($con,"CALL`ver_info_cliente`('$datorecibid
o')"); = Crea una variable y hace un llamado sobre un
procedimiento que esta en la base de datos que permitre ver la
informacion del cliente que esta en sesion. return $mirar; =
Retorna los datos en la variable $mirar.
CONTROLADOR
95
require_once('../modelo/crud_usuario.php'); = Se requiere las
funciones del crud_usuario ubicado en el modelo.
require_once('../modelo/[Link]'); = Se requiere los datos
cliente. function mostrar_datosss($dato){ = Se crea la funcion de
mostrar datos.
$crud=new CrudUsuario(); = Crea una variable y en ella crea
una nueva instancia de CrudUusario.
$datosusuario=$crud->usur_dato($dato); = Crea una variable y
le asigna la variable crud la funcion de usur_dato y como
entrada de datos utiliza la varible llamada “dato”. return
$datosusuario; = Retorna los datos de guardados en la variable
$datosusuario.
CSS
96
12.16. Usuario (barbero)
INTERFAZ
session_destroy(); = Se destruye la sesion en progreso.
<link rel="stylesheet" type="text/css"
href="css/[Link]"> = Hojas de estilo del archivo
[Link]
<link rel="stylesheet" type="text/css" href="letras/css/[Link]">
= Complemento para los iconos.
97
<script src="js/[Link]"></script> = Funcion de java
script que permite mostra los campos de contraseña.
<a href="[Link]" class="barbero">Entrar como
Barbero</a> = Redireccionamiento al Logeo del Barbero.
<form action="../controlador/controlador_ingreso.php"
method="post"> = Se crea el fomrulario que sera
redireccionado al ingreso en controlador por metodo post.
<input autofocus="" id="documento" class="inp" type="text"
name="documento" value="" autocomplete="off" required
pattern="[0-9]{5,15}" title="El numero de documento sin espacios,
ni puntos"> = Creacion del campo para guardar el
documento.
<div class="mostrar"><input type="password"
name="contraseña" id="password" value=""><button class="btn
btn-primary" type="button" onclick="mostrarContrasena()"><i
class="fas fa-eye"></i></button> = Creacion del campo para
guardar la contraseña.
<a class="inicio" href="../[Link]">- Volver al
inicio</a><br><br> = Redireccionamiento para volver al inicio
de la pagina web.
<a class="inicio2" href="[Link]">- Olvide mi
contraseña</a><br> = Redireccimiento para el archivo de php
para “olvidar mi contraseña”.
<input class="boton" type="submit" name="entrar"
value="Ingresar"> = Boton el cual capturara los datos de
formulario y los enviara al controlador.
<a href="[Link]">Registrar</a> = Redireccionamiento
que llevara al archivo de php de Registrar al usuario o cliente.
MODELO
98
session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente class
CrudUsuario{ = Crea la clase de crudUsuario.
public function obtenerUsuario($nombre, $clave){ = Crea la
función de obtener los datos del usuario y como parámetros tiene
el documento y la contraseña.
$name=$nombre; $pass=$clave; = Asigna variables con los datos
enviados.
$select=buscar_clientes($name); = Crea una variable y le asigna
la función de buscar clientes y como parámetro el documento.
$usuario=new clientes (); = Crea una nueva instancia de la clase
$registro=mysqli_fetch_array($select); = convierte la variable que
contiene los datos del cliente en un array. if (!$registro) { = verifica
si encuentra los datos del cliente.
$usuario->setdocumentocliente(null); = Si no se encuentran los
datos se le asigna a la variable $usuario que el documento del
cliente sea igual a nulo. }else{ = Si por otro caso si se encuentran
los datos
99
if (password_verify($pass, $registro['contrasena'])) { = Verifica
que las contraseña sean correctas , si es correcta, asigna los
valores que trae desde la base de datos $usuario-
>setdocumentocliente($registro['documentocliente']); = Asigna
los datos al usuario como el documento.
$usuario->setnomcliente($registro['nombre']); = Asigna los datos
al usuario como el nombre
$usuario->setcontrasena($registro['contrasena']); = Asigna los
datos del usuario como la contraseña return $usuario; = Retorna
los datos en la variable usuario.
require_once('[Link]'); = Requiere la conexión a la base
de datos
function buscar_clientes($name) {Crea la función de buscar los
clientes y como parámetro el nombre
global $con; = Se utiliza la variable para la conexión a la base de
datos.
$abc=mysqli_query($con,"CALL`buscar_cliente`('$name')"); = Se
crea una variable y se le asigna la llamada al procedimiento que
esta en la base de datos y como parámetro el nombre. return
$abc; = Retorna los datos de la variable abc.
CONTROLADOR
100
require_once('../modelo/crud_usuario.php'); = De la linea 3
hasta la linea 6 se requiere las funciones y datos del modelo.
session_start(); = Se captrua la sesion y se guarda.
$usuario=new clientes(); = Desde la linea 11 hasta la 13 se crean
las nuevas instancias de las clases necesarias.
}elseif (isset($_POST['entrar'])) { = verifica si la variable entrar está
definida
$usuario=$crud-
>obtenerUsuario($_POST['documento'],$_POST['contraseña']); = A
la variable usuario se le asigna la funcion de obtener usuario con
parametros del documento y la contraseña suminstrados
anteriormente.
if ($usuario->getdocumentocliente()!=NULL) { = Se verifica si los
datos que se consultaron estan en la base de datos.
$_SESSION['usuario']=$usuario->getdocumentocliente(); = si el
usuario se encuentra, crea la sesión de usuario header('Location:
../interfaz/[Link]'); = envia a la página que simula la cuenta
else{ echo ' <script> alert("este usuario no existe");
[Link](-1); </script>'; = En caso de que los datos
consultados no estan en la base de datos mostrar un alerta en
javasript.
12.17. Usuario Administrador
INTERFAZ
session_destroy(); = Se destruye la sesi
101
con en progreso.
<link rel="stylesheet" type="text/css"
href="css/[Link]"> = Hojas de estilo del archivo
[Link]
<link rel="stylesheet" type="text/css" href="letras/css/[Link]">
= Complemento para los iconos.
<script src="js/[Link]"></script> = Funcion de java
script que permite mostra los campos de contraseña.
<form action="../controlador/controlador_ingreso.php"
method="post"> = Se crea el fomrulario que sera redireccionado
al ingreso en controlador por metodo post.
<input autofocus="" id="documento" class="inp" type="text"
name="documento" value="" autocomplete="off" required
pattern="[0-9]{5,15}" title="El numero de documento sin espacios,
ni puntos"> = Creacion del campo para guardar el documento.
<div class="mostrar"><input type="password" name="contraseña"
id="password" value=""><button class="btn btn-primary"
type="button" onclick="mostrarContrasena()"><i class="fas fa-
eye"></i></button> = Creacion del campo para guardar la
contraseña.
<a class="inicio" href="../[Link]">- Volver al
inicio</a><br><br> = Redireccionamiento para volver al inicio
de la pagina web.
<input class="boton" type="submit" name="entrar"
value="Ingresar"> = Boton el cual capturara los datos de
formulario y los enviara al controlador.
MODELO
102
funcionesdeselect
require_once('[Link]'); = Desde la linea 2 hasta la linea 9 se
requieren las funciones datos de los archivos llamados.
class crudbarber{ = Crea la calse de Crudbarbero.
public function obtenerbarbero($nombre, $clave){ = Se crea la
función de obtener barbero y con parametros con el nombre y
la clave.
$barbe=new barbero(); = Se crea la instancia de la clase de
barbero.
$name=$nombre; $pass=$clave; = Se asigan los valores recibidos
a nuevas variables
$selectbarber=buscar_barberos($name); ) = Se crea una
variable y se le asigna la funcion de buscar_barberos y con
parametros de el nombre.
$registrobarber=mysqli_fetch_array($selectbarber); = Se crea un
variable y se le asiga un array de la variable de $selectbarber. Se
recolecta los datos.
if (!$registrobarber) { = En caso de que el array no tenga datos o
sea nulo.
103
$barbe->setdocumento( NULL); = Se le asigna a la variable
$barber el documento en nulo.
}else{ = En caso de que si encuentren los datos del barbero
if (password_verify($pass, $registrobarber[7])) { = Se verifica que
la contraseña que envio el usuario sea igual a la incriptada de la
base de datos.
$barbe->setdocumento( $registrobarber[0]); $barbe-
>setnombre( $registrobarber[1]); $barbe>setcontrasenas(
$registrobarber[7]); = Se asigna los valores deacuerdo al orden
del array return $barbe; = Se retorna los datos guardados en la
variable $barbe.
function buscar_barberos($name){ = Se crea la funcion de buscar
barberos y con parametro de name.
global $con; = Se utiliza la variable global para la conexión de la
base de datos.
$bcd=mysqli_query($con,"CALL`buscar_barbero`('$name')"); =
Se crea una varible y se le asigna la llamada de un
procedimiento a la base de datos y con parametro de name.
return $bcd; = Se retorna los resultados guardados en la variable
$bcd.
CONTROLADOR
require_once('../modelo/crud_usuario.php'); = De
la linea 3 hasta la linea 6 se requiere las funciones y
datos del modelo. session_start(); = Se captrua la
sesion y se guarda.
$usuario=new clientes(); = Desde la linea 11 hasta la 13
se crean las nuevas instancias de las clases necesarias.
104
session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente class
CrudUsuario{ = Crea la clase elseif ($_POST['entrar2']) { = verifica
si la variable entrar2 está definida
$barbe=$barberr-
>obtenerbarbero($_POST['documento'],$_POST['contraseña']); =
Asigna a una varible la funcion de obtener barbero y como
parametro tiene el documento y la contraseña.
if($barbe->getdocumento()!=NULL){ = Verifica si los datos
recolectados de la base de datos son encontrados.
$_SESSION['barbero']=$barbe->getdocumento(); = Si es encontra
y comprados los datos se le asigna a la sesion del barbero el
documento del barbero para ingresar a la pagina web.
header('Location: ../interfaz/[Link]'); = Es un
redireccionamiento con la sesion cargada.
}else{ = En caso de que lo datos no se encunetren o sean nulos
o no coincidan el sistema les mostrar un alerta de error.
echo ' <script> alert("este usuario no existe"); [Link](-
1); </script>'; = Se desplegara un mensaje de error de datos.
12.18. Registrar usuario
INTERFAZ
105
<link rel="stylesheet" type="text/css" href="css/[Link]"> =
Hoja de estilos de [Link]
<link rel="stylesheet" type="text/css" href="letras/css/[Link]">
= Complemento para los iconos
<script src="js/[Link]"></script> = Funcion de Java
Script que permite ver las etiquetas de password a text
<form action="../controlador/controlador_ingreso.php"
method="post"> = Se crea el formulario para crear el usuario y
será redireccionado al controlador de ingreso.
<input class="inp" type="text" min='0' name="documento"
value="" required pattern="[09]{5,15}" title="El número de
documento sin espacios, ni puntos"> = Desde la línea23 hasta la
línea 57 crean campos para almacenar los nuevos datos y
enviarlos, los datos son el documento, el nombre, la contraseña,
el número telefónico y el correo electrónico.
106
<button name="registrarse" class="boton">Registrarse </button>
= Se utiliza el un botón y tiene con valor de guarda los datos del
formulario y encontrarlo con “registrarse” .
MODELO
session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente class
CrudUsuario{ = Crea la clase
public function __construct(){} = Se crea el constructor de la
clase.
public function insertar($usuario){ = Se crea la función de insertar
los datos y como parámetro la variable usuario.
global $con; = Se utiliza la variable de conexión para la base de
datos
$sumanumero=0; = Se crea un variable y se inicia
for ($i=0; $i <=20 ; $i++) {
$aletorio=rand(1,100);
107
$sumanumero+=$aletorio; = Crea un número aleatorio cada vez
que se crea un usuario.
$document=($usuario->getdocumentocliente()); = Desde la
línea 21 hasta la 26 Se crean las variables y se le asignan los datos
que se enviaron desde la interfaz utilizando el método get.
# pass aparte de recibirlo encripta la contraseña
utilizando,PASSWORD_DEFAULT
$pass=password_hash($usuario->getcontrasena(),
PASSWORD_DEFAULT); = Antes de asignarla se encripta la
contraseña para mayor seguridad en la base de datos.
$insert=("CALL
`crear_cliente`('$document','$name','$telef','$corre','$pass','$su
manumero')"); = Se prepara una inserción de datos if ($con ->
query($insert)==true) { = Se pregunta si los datos fueron
insertados. Si
$sg="si"; = Se guarda los resultados en una variable.
}else{ = En caso de que no se insertaron, los datos por conexión
a la base de datos o datos repetidos
$sg="no"; = Se guarda los resultados en una variable. return $sg;
= Se retorna los resultados en la variable $sg.
CONTROLADOR
108
require_once('../modelo/crud_usuario.php'); = De la linea 3
hasta la linea 6 se requiere las funciones y datos del modelo.
session_start(); = Se captrua la sesion y se guarda.
$usuario=new clientes(); = Desde la linea 11 hasta la 13 se crean
las nuevas instancias de las clases necesarias.
if (isset($_POST['registrarse'])) { = Verifica si se seleciono la opción
de fue selecionada la de registrar usuario.
$usuario->setdocumentocliente(intval($_POST['documento'])); =
Desde la linea 23 a la linea 27 se asginas los nuevos valores traidos
desde el formulario mediante el metodo seter (set) , los datos el
documento, nombre, telefono, correo y contraseña.
$a=$crud->insertar($usuario); = Se crea una variable y se le
asigna la funcion de insertar datos y con parametros del array de
la variable $usuario. if ($a=="si") { = Se verifica si los datos
fueron insertados.
header('Location:../interfaz/[Link]'); = se redireciona a la
interfaz principal y con el nuevo perfil y datos insertados
}else{ = en caso de que los datos esten repetidos o no se pueda
ingresar header('Location:../interfaz/[Link]');= Se muestra un
mensaje de error de datos incluidos.
12.19. Olvide contraseña
INTERFAZ
109
<link rel="shortcut icon" href="img/[Link]"/>
<link rel="stylesheet" type="text/css" href="css/[Link]"> =
Hoja de estilos del archivo [Link]
<form action="../controlador/controlador_usuario.php"
method="post"> = Se crea el formulario para enviar los datos al
controlador de usuario.
<input autofocus="" class="inp" required type="email"
name="correo_elec"> = Se crea el campo para rellenar con el
correo electrónico registrado en la base de datos.
<input class="boton" type="submit" name="correo"
value="Recuperar" /> = El botón redirige al formulario de los datos
al controlador.
MODELO
Session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente class
CrudUsuario{ = Crea la clase
public function verificacorreo($cli){ = Se crea la función para
verificar el correo electrónico y con parámetro de la variable $cli.
110
global $con; = Se utiliza la variable de conexión para la base de
datos.
$corre=($cli->getcorreo_electronico()); = Se crea una variable y
se le asigna la función de traer los datos del correo electrónico
enviados desde el controlador.
$insert=mysqli_query($con,"CALL`look_email`('$corre')"); = Se
crea el llamado del procedimiento a la base de datos. return
$insert; = Se retorna los datos en la variable $insert.
CONTROLADOR
session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente
if(isset($_POST['correo'])) { = Se verifica si el usuario selecciono la
opción de recuperar contraseña.
require_once('../modelo/[Link]'); = Se requiere utilizar las
funciones y métodos del cliente en modelo.
111
$clibr =new CrudUsuario();
$cli=new clientes(); = Se crean las instancias de la clase.
$cli->setcorreo_electronico($_POST['correo_elec']); = Se asigna a
la variable los datos enviados desde la interfaz como es el correo.
$cliente=$clibr->verificacorreo($cli); = Se crea una variable y se
le asigna la función de verificar correo y con parámetro la
variable $cli.
$ila=$cliente->fetch_array(); = Se convierte en array los datos
traídos en array if ($ila['correo_electronico']!=NULL){ = Se verifica
que los datos sean diferentes nulos.
$email_to = $email1; $email_subject = "Cambio de contrasena
Barbermania"; $email_from = "[Link]"; = Desde la
línea 111 hasta la línea 112 se crea el sistema de enviar correos
electrónicos con los datos de la empresa y los remitentes.
echo ' <script> alert("Te hemos enviado un email para cambiar tu
contraseña"); [Link](-1); </script>'; = Se envía un
menaje de confirmación.
} else { = En caso de que no se encuentren datos con el correo
electrónico suministrado.
echo '<script> alert("Este correo electrónico no esta registrado");
[Link](-1); </script>'; = Manda un mensaje de error
sobre el correo electrónico no esta registrado.
12.20. Recuperar contraseña
INTERFAZ
112
<link rel="stylesheet" type="text/css" href="css/[Link]">
<link rel="shortcut icon" href="img/[Link]"/> = Hoja de estilos
del archivo de [Link]
<form action="../controlador/controlador_usuario.php"
method="post"><br> = Se crea un formulario para guardar los
datos se redireccionara a controlador de usuario por método
post.
<input
autofocus="" type="text" name="usuario" title="Numero de
documento"> = Se crea campo para guarda el dato de numero
de documento
<input min="0" type="number" title="pega aqui el codigo"
name="codigo"> = Se crea el campo para guardar el código.
<input class ="boton" type="submit" name="olvidar"> = Este
botón se redireccionara al controlador de usuario para verificar
los datos ingresados.
MODELO
Session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente class
CrudUsuario{ = Crea la clase
public function verificarcodigo ($cli){ = Se crea la función de
verificar el código y como parámetro la variable ($cli). global
$con; = Se utiliza la variable $con para la conexión de la base
de datos.
113
$document=($cli->getdocumentocliente()); = Se le asigna a una
nueva variable sobre la función de traer el documento del
controlador por medio del método get.
$pass=($cli->getcontrasena()); = Se le asigna a la variable la
contraseña traída desde el controlador por medio del método
get.
$insert=mysqli_query($con,"CALL`buscar_codigo`('$pass','$docu
ment')"); = Se crea el llamado al procedimiento de la base de
datos y con parámetros de las variables $pass y $document.
return $insert; = Se retorna los datos guardados en la variable
$insert.
CONTROLADOR
session_start(); = Captura la sesión del usuario y la guarda.
require_once('../modelo/crud_usuario.php');
require_once('../modelo/[Link]'); = Requiere los datos y
funciones del modelo de crud_usuario y los datos del cliente if
(isset($_POST['olvidar'])) { =verifica si la variable entrar está
definida
require_once('../modelo/[Link]'); = Se requiere utilizar los
datos y funciones de la clase de cliente.
$cli=new clientes(); = Se crea la instancia de clientes.
$clibr =new CrudUsuario(); = Se crea la instancia de la clase.
114
$cli->setdocumentocliente(intval($_POST['usuario'])); = Se asigna
a la variable el documento que se envió desde la interfaz.
$cli->setcontrasena($_POST['codigo']); = Se asigna el código a la
nueva variable que se envió desde la interfaz de recuperar
contraseña.
$cliente=$clibr->verificarcar el codigo($cli); = Se crea una nueva
variable y se le asigna la función de verificar el código y con
parámetro de la variable ($cli).
$ila=$cliente->fetch_array(); = Se crea una nueva variable y se le
asigna el contenido del array que trajo desde la base de datos.
if (($ila['documentocliente']!=NULL) and
($ila['clave_recuperacion']==$cli)){ = Se verifica si los el
documento del cliente se encuentra en la base de datos y si la
contraseña concuerda con la del registro de la base de datos.
session_start(); = Se inicia la sesión de usuario.
$_SESSION['usuario']=$ila['documentocliente']; = Se le asigna a la
sesión los datos del cliente.
header('Location: ../interfaz/contrasena_usuario.php'); =
Redireccionamiento a la de modificar contraseña con los datos
del cliente.
}else{ = En caso de que no se encuentre el documento o no
coincidan los datos ingresados como el código y el documento.
echo ‘<script> alert("Es codigo no coincide con el numero ");
[Link](-1); </script>'; = Se muestra un mensaje de
error de código
12.21. FOTTER
115
<link rel="stylesheet" type="text/css" href="css/estilos_footer.css">
= Hoja de estilos del [Link]
Require_once('../modelo/[Link]'); = Se requieren los datos
de juan(administrador) desde el modelo
$ventepaca= new informacionpersonal(); = Se crea la instancia
de la clase de la información personal.
$sql=$ventepaca->mostrar(); = Se le asigna a la función mostrar
a la instancia y se guarda en la clase.
$ila=$sql->fetch_array(); = La variable $sql se convierte en array
y se guardan los datos en la variable nueva.
<footer>
<a href="[Link]
echo $ila['telefono']?>" target="_blank" class="wha"><i class="fab
fa-whatsapp"></i> : <?php echo $ila['telefono']; ?></a> =
Hipervínculo con el número telefónico del administrador de la
barberia.
<a
href="[Link]
4876540?nr"
target="_blank" class="facebook"><i class="fab fa-
facebook"></i>
@BarberMania_Colombia</a> = hipervínculo a la pagina oficial
de la Barberia en Facebook.
<a href="[Link]
target="_blank" class="dire"><i class="fas fa-map-marker-
alt"></i> Marsella,Cl. 20#11-2,Fusa,Cund</a> = Hipervínculo a la
dirección de la Barberia a través de Google maps
<a href="[Link] target="_blank"
class="email"><i class="fas faenvelope"></i>
Barbermania@[Link]</a> = Hipervínculo para enviar
mensajes al correo electrónico.
Modelo de juaninfo:
116
include('../modelo/[Link]'); = Se incluye la conexión de la
base de datos.
class informacionpersonal{ = Se crea la clase.
public function mostrar(){ = Se crea la función de mostrar los
datos.
global $con; = Se utiliza la variable $con para la conexión de la
base de datos.
$select=mysqli_query($con,"CALL `datosjuan` "); = Se crea una
variable y se le asigna la llamada a un procedimiento de la base
de datos return $select; = Retorna los datos traídos en la variable
$select.
13. Descripción de algoritmos (Interfaz)
13.1. Ofertas
13.1.1. Ofertasdao
117
13.2. Subir ofertas
13.3. Eliminar ofertas
13.4. Información
118
13.4.1. Controlador información
13.5. Actualizar información
13.6. Galeriadao
13.7. Mostrar imágenes
13.8. Eliminar Imágenes
119
13.9. Reservas
120
13.9.1. Registrar reserva
13.10. Eliminar reserva
13.11. Usuario
121
13.12. Modificar info
13.13. Cambiar contraseña
13.14. Login
13.15. Registrarse
122
14. Descripción de campos
Seleccionar imagen= La de oferta.
Id imagen = Numero identificador de la oferta
Descripción de la oferta = Texto opcional de la imagen oferta
Numero identificador de la oferta que se desea eliminar.
Subir foto= Nueva imagen de perfil de barbero
Nombre = Nombre del barbero
Edad = Edad del Barbero
Teléfono = Número de teléfono del barbero
Email = Dirección de correo electrónico
Facebook = Nombre de Facebook del barbero
Instagram= Nombre de Instagram del barbero
123
Nombre = Titulo de la imagen que se subirá
Descripción = Descripción opcional de la imagen que se subirá
Buscar = se selecciona el archivo que agregara a la galería
Nombre del corte = Titulo del corte de pelo que se agregará
Precio del corte = Valor del corte que se agregará
Elegir corte = Barra de elección del corte que se va a eliminar
Nivel de cliente = Numero con el cual se sorteará el ganador del premio
124
Documento = Numero identificador del barbero
Contraseña = Clave de cuenta BarberMania
Nombre = Nombre del barbero que se registrara
Edad = Edad del barbero
Teléfono = Numero de contacto del barbero
Correo electrónico = dirección de correo electrónico
Facebook = Nombre de Facebook del barbero
Instagram= Nombre de Instagram del barbero
Foto = Archivo que se selecciona como imagen de barbero
Nueva contraseña = Nueva contraseña para el usuario
Verificar contraseña = Se verifica la nueva contraseña
125
N° de documento = Numero de documento del usuario
Contraseña = Contraseña del usuario
Numero de documento = Numero identificador del usuario
Contraseña = Clave de cuenta BarberMania
Nombre = Nombre del barbero que se registrara
Celular = Numero de contacto del barbero
Correo electrónico = dirección de correo electrónico
126
15. Diccionario de datos
127
128
16. Modelo relacional
129