Manual de Técnico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 129

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/ofertas.css”>,<link
href=”css/barra_menu.css”>= Es la unión del diseño de
la estructura de html en css.
<script src="js/jquery.min.js"></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('ofertas2.php'); = 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('footer.php')?> = 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/Cliente.php'); = 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
Info.php

Session_start(); = Se inicia la sesiòn

<head> = Se abre etiqueta head


Link href=“barbero.css”= Se llama la hoja de estilos
barbero.css
Link href=“barra_menu.css”= Se llama la hoja de estilos
de la barra de menú
Link href=“info.css”= 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="https://api.whatsapp.com/send?phone=+57<?php
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('footer.php')?>

<script src="js/jquery.js" ></script>

<script src="../controlador/controlador_info.js" ></script>

</body>

</html> = Se incluye el footer.php 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/conexion.php'); = 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/reservas3.css"> = 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/conexion.php'); = 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('footer.php')?>
Trae el footer que es la barra final de la pagina
MODELO

62
require_once('conexion.php'); require_once('Cliente.php');

require_once('barber.php'); require_once('reservasdao.php');} 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” window.history.go(-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")

;window.history.go(-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"); window.history.go(-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");

window.history.go(-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/FinalizacionReserva.php'); 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 window.history.go(-1);</script>'; exit;

CONTROLADOR

session_start(); Se inicia la sesión

include('../modelo/conexion.php'); Incluye la conexión a la

base de datos require_once('../modelo/Cliente.php');

require_once('../modelo/barber.php');
69
require_once('../modelo/reservasdao.php');

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/reservasdao.php
$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/FinalizacionReserva.php");

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/eslosbarbera.css">

Llama a la hoja de estilos eslobarbera.css

<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='agregarcorte1.php'>"; 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/img2.css">

Llama a la hoja de estilos img2.css

<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/mostrarbarbero.php");

}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/mostrarbarbero.php");

}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 sorteo.js 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 sorteo.js
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/see-password.js"></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:

./../index.php");

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/index.php'); 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="CuentaBarber.php">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/perfil.png"><br>, <label><?php
echo
"Usuario"?></label><br><br> = Se muestran una imagen
definida previamente y el nombre de usuario.
<a href='reserva3.php'>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="CuentaBarber.php">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/UserIcon.png"><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("footer.php"); = Incluye un el footer que son los datos

de la barberia o empresa.

MODELO

require_once('conexion.php'); = 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/Cliente.php'); = 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/CuentaBarber.css"> = Hojas de estilo del archivo
CuentaBarber.php
<link rel="stylesheet" type="text/css" href="letras/css/all.min.css">
= Complemento para los iconos.

97
<script src="js/see-password.js"></script> = Funcion de java
script que permite mostra los campos de contraseña.
<a href="cuentaAdministrador.php" 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="../index.php">- Volver al
inicio</a><br><br> = Redireccionamiento para volver al inicio
de la pagina web.
<a class="inicio2" href="recuperar.php">- 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="Registrarse.php">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/Cliente.php'); = 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('conexion.php'); = 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/index.php'); = envia a la página que simula la cuenta
else{ echo ' <script> alert("este usuario no existe");
window.history.go(-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/CuentaBarber.css"> = Hojas de estilo del archivo
CuentaAdministrador.php
<link rel="stylesheet" type="text/css" href="letras/css/all.min.css">
= Complemento para los iconos.
<script src="js/see-password.js"></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="../index.php">- 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('Cliente.php'); = 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/Cliente.php'); = 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/index.php'); = 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"); window.history.go(-
1); </script>'; = Se desplegara un mensaje de error de datos.
12.18. Registrar usuario
INTERFAZ

105
<link rel="stylesheet" type="text/css" href="css/registrarse.css"> =
Hoja de estilos de regisrarse.php
<link rel="stylesheet" type="text/css" href="letras/css/all.min.css">
= Complemento para los iconos
<script src="js/see-password.js"></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/Cliente.php'); = 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/index.php'); = 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/error.php');= Se muestra un

mensaje de error de datos incluidos.

12.19. Olvide contraseña


INTERFAZ

109
<link rel="shortcut icon" href="img/icono.ICO"/>
<link rel="stylesheet" type="text/css" href="css/recuperar.css"> =
Hoja de estilos del archivo recuperar.php
<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/Cliente.php'); = 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/Cliente.php'); = 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/Cliente.php'); = 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 = "Barbermania.com"; = 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"); window.history.go(-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");
window.history.go(-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/contrasena.css">
<link rel="shortcut icon" href="img/icono.ICO"/> = Hoja de estilos
del archivo de recuperarcontra.php
<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/Cliente.php'); = 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/Cliente.php'); = 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/Cliente.php'); = 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 ");
window.history.go(-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 footer.php
Require_once('../modelo/juaninfo.php'); = 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="https://api.whatsapp.com/send?phone=+57<?php
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="https://www.facebook.com/pages/Barbermania/75266152
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="https://goo.gl/maps/A2hVt5gyxuEndNaG8"
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="mailto:barbermania@gmail.com" target="_blank"
class="email"><i class="fas faenvelope"></i>
Barbermania@gmail.com</a> = Hipervínculo para enviar
mensajes al correo electrónico.
Modelo de juaninfo:

116
include('../modelo/conexion.php'); = 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

También podría gustarte