universidad central del ecuador facultad de ingeniería ciencias

UNIVERSIDAD CENTRAL DEL ECUADOR
FACULTAD DE INGENIERÍA CIENCIAS FÍSICAS Y MATEMÁTICA
CARRERA DE INGENIERÍA INFORMÁTICA
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA WEB PARA COMPRA Y
VENTA DE FLORES EN LA EMPRESA FLORALTIME
TRABAJO DE GRADUACIÓN PREVIO A LA OBTENCIÓN DEL TÍTULO DE
INGENIERO INFORMÁTICO
AUTOR: LANDÍVAR RODRÍGUEZ CHRISTIAN GUSTAVO
TUTOR: ING. JEFFERSON TARCISIO BELTRÁN MORALES
QUITO-ECUADOR
2015
DEDICATORIA
A Dios, por darme la sabiduría y conocimiento para lograr mis objetivos.
A mi madre Roció, por haberme apoyado en todos los momentos de mi vida
con sus consejos, sus valores, por la motivación constante que me ha
permitido ser una persona de bien, y sobre todo por brindarme ese inmenso
amor de madre.
A mi padre Gustavo, por sus ejemplos de lucha, perseverancia y constancia
que lo caracteriza, por sus palabras de aliento para salir adelante en todo
momento de mi vida, el mejor amigo que siempre ha estado a mi lado, doy
gracias a dios por estos padres ejemplares que me has dado.
A mi hermano Esteban, por su inmenso cariño y apoyo.
A mi esposa Angela, mis hijos Valentina y Camilo, ya que gracias a su
apoyo, paciencia y confianza e culminado mi carrera, gracias por estar
siempre a mi lado apoyándome.
Además debo agradecer a todos aquellos excelentes Docentes que con sus
sabios concejos y apoyo continuo contribuyeron no sólo en darme una
formación académica respetable sino también enriquecieron mi formación
personal.
GRACIAS A TODOS!
Christian Gustavo Landívar Rodríguez
ii
AGRADECIMIENTO
Agradezco en primer lugar a Dios por darme la sabiduría y salud necesaria
para culminar éste sueño tan anhelado.
A mis familiares por todo el apoyo incondicional brindado durante la carrera
estudiantil, con sus continuas motivaciones de superación.
Además, mis sinceros y especiales agradecimientos al Ing. Jefferson Beltrán,
Tutor de la Tesis, Ing. Rene Carrillo e Ing. Alicia Andrade, Revisores de la
misma, quienes con sus sabios consejos me han guiado por un buen y
exitoso camino hasta la culminación de la presente tesis.
Christian Gustavo Landívar Rodríguez
iii
iv
v
vi
vii
viii
CONTENIDO
CAPITULO I.................................................................................................... 3
EL PROBLEMA .............................................................................................. 3
1.1.
PLANTEAMIENTO DEL PROBLEMA .......................................................... 3
1.2.
INTERROGANTES DE LA INVESTIGACIÓN ................................................. 3
1.3.
OBJETIVOS DE LA INVESTIGACIÓN ......................................................... 3
1.3.1 Objetivo General ........................................................................... 3
1.3.2 Objetivos Específicos .................................................................... 4
1.4.
ALCANCE ............................................................................................ 4
CAPITULO II................................................................................................... 5
MARCO TEÓRICO ......................................................................................... 5
2.1
FUNDAMENTO TEÓRICO ....................................................................... 5
CAPÍTULO III................................................................................................ 22
METODOLOGÍA ........................................................................................... 22
3.1
SELECCIÓN DE LA METODOLOGÍA ....................................................... 22
CAPÍTULO IV ............................................................................................... 23
DIAGNÓSTICO DE LA SITUACIÓN ACTUAL ............................................. 23
CAPÍTULO V ................................................................................................ 29
DISEÑO DE LA SOLUCION......................................................................... 29
CAPÍTULO VI ............................................................................................... 36
MARCO ADMINISTRATIVO......................................................................... 36
6.1
PRESUPUESTO .................................................................................. 36
6.2
CRONOGRAMA .................................................................................. 36
MATERIALES DE REFERENCIA ................................................................ 37
ix
LISTA DE FIGURAS
FIGURA 2.1: ETAPAS DE LA METODOLOGÍA OOHDM……………...…..23
Figura 2.2: Registro de compra de flor…………………….………....…….25
Figura 2.3: Cambio de Finca en el registro de compra de flor…...…….26
Figura 2.4: Cambio de cantidad en el registro de compra de flor...…...27
Figura 2.5: Cancelación de pedido por parte del cliente…….…..……...28
Figura 2.6: Presupuesto……….…………………..……………………….….38
Figura 2.7: Cronograma...………………………………………….....……....41
x
RESUMEN
PROYECTO DE DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA WEB
PARA COMPRA Y VENTA DE FLORES EN LA EMPRESA FLORALTIME
El creciente uso de la plataforma web para el desarrollo de aplicaciones es
agigantado. Cada vez las empresas dejan de lado el uso de aplicaciones de
escritorio que solo pueden accedidas desde un terminal específico e intentan
trasladar sus aplicaciones al entorno web, el cual les otorga una mejor
accesibilidad teniendo así un mejor control de sus procesos, sin importar el
terminal por el cual desean acceder a la aplicación.
Tomando en consideración las ventajas que supone una aplicación en la
plataforma web, la empresa Floraltime decide incrementar su productividad al
migrar su entorno de trabajo basado íntegramente en aplicaciones de
escritorio a la plataforma web.
El presente trabajo de titulación pretende dotar a la empresa Floraltime de
una aplicación que permita tener una mejor accesibilidad y control a sus
registros de compra y venta de flor, registros de clientes, registros de
aerolíneas, registros de cargueras y registros de fincas.
DESCRIPTORES: DESARROLLO WEB / RECURSOS DE SOFTWARE /
SOFTWARE LIBRE / DISEÑO WEB / BASES DE DATOS / EMPRESA
FLORALTIME
xi
ABSTRACT
DESIGN AND IMPLEMENTATION OF SYSTEM FOR BUYING AND
SELLING FLOWERS FOR FLORALTIME COMPANY
The increasing use of the web platform for the applications development is
massive. Every time the companies leave aside the use of desktop
applications that only can be accessed from a specific terminal and try to
move their applications to the web environment, which grants them a better
accessibility and having a better control of their processes, regardless of the
terminal for which they want to access the application.
Taking into consideration the advantages of an application in the web
platform, the Floraltime Company decides to increase their productivity,
migrating its working environment based entirely on desktop applications to
the web platform.
The present degree project tries to provide to Floraltime company an
application that allows to have a better accessibility and control for its records
of buy and sale flowers, clients records, airlines records, shippers records and
farms records.
DESCRIPTORS: WEB DEVELOPMENT / SOFWARE RESOVICES / OPEN
SOURCE / WEB DESIGN / DATABASE / EMPRESA FLORALTIME
xii
xiii
xiv
INTRODUCCIÓN
La empresa Floraltime actualmente lleva el control de los procesos de
compra y venta de flores por medio de un archivo de Excel, donde se ingresa
el tipo de flor, la preferencia de finca y la cantidad de flor requerida por cada
cliente, diariamente.
La empresa cuenta con convenios de venta de flor con diferentes fincas, los
que sirven para hacer la distribución de los pedidos. Los pedidos son
recibidos por teléfono o correo electrónico. Una vez que el pedido ha sido
confirmado telefónicamente, el pedido es marcado como cumplido.
El presente proyecto de tesis considera el diseño e implementación de un
sistema web para automatizar los procesos de compra y venta de flor y así
llevar un mejor control del estado de todos sus pedidos
El sistema web de una empresa es el conjunto de tecnologías de la
información y las comunicaciones que sirven de soporte a la utilización de
Internet en el seno de la misma, tanto como herramienta para la obtención y
procesamiento de la información, en la toma de decisiones como en la
interrelación de la empresa con su mercado y su entorno.
Los sistemas web afectan a estos dos conceptos fundamentales:

Proceso de toma de decisiones en las distintas actividades
(planificación, dirección, organización y control) y niveles de la
dirección de Marketing de la empresa.

Relación con el mercado y el entorno empresarial que ha de tenerse
en cuenta en la planificación estratégica.
La estructura y funcionamiento de la web se basa en un estándar que
técnicamente se denomina “modelo (o arquitectura) de tres capas”, debido a
que los tres elementos básicos que componen el sistema web de una
1
empresa están dispuestos en tres niveles. Uno que serían los pc clientes,
que albergan los correspondientes programas de software para poder
conectarse e intercambiar datos. El pc se limita a participar como nexo entre
el pc cliente manejado por el usuario final y la organización que es
propietaria y usuaria principal de los datos, información y aplicaciones
intercambiadas. El servidor web se limita a atender la petición de conexión
por parte del pc cliente y suministrar a éste los datos, información o
aplicaciones objeto de la petición, utilizando para ello determinadas páginas
web propias de la organización pero que son “entendidas” universalmente
por cualquier elemento informático conectado a través de Internet gracias al
empleo del protocolo HTTP.
En los sistemas informáticos y bases de datos de propiedad de la empresa
que va a intercambiar datos e información a través del servidor web con el pc
cliente que inició la conexión estarán presentes esos datos e información de
una manera lógica, de acuerdo con lo que los responsables de la
administración de la empresa hayan decidido en función de sus propias y
exclusivas necesidades informativas. Como han de intercambiarse también
con el entorno, se hace preciso un modo de traductor o intérprete que vierta
los datos, información y aplicaciones desde la “presentación” de uso interno
para la empresa a la “presentación” en que los responsables de la gestión
desean que aparezca para el uso externo. Esta presentación hacia el exterior
se llama lógica externa del negocio, y la labor de traducción o interpretación
desde la lógica propia de los datos e informaciones residentes en la empresa
a la lógica externa del negocio corre a cargo del elemento tecnológico
denominado servidor de aplicaciones.
2
CAPITULO I
EL PROBLEMA
1.1. Planteamiento del problema
Actualmente la empresa Floraltime cuenta con una inadecuada forma
de llevar un control sobre sus pedidos. El control se lo hace por medio de un
archivo de Excel que debe ser renombrado cada día.
1.2. Interrogantes de la Investigación
La idea de la presente tesis se genera a partir de varias interrogantes
que nacen de la observación de los problemas que tienen los usuarios al
momento de registrar y llevar un control sobre el estado de los pedidos de los
clientes:
 ¿Qué es lo que requieren los usuarios?
 ¿Qué nivel de conocimiento y manejo de tecnología existe en los
usuarios de la empresa Floraltime?
 ¿Cómo ha crecido tecnológicamente la empresa Floraltime?
 ¿Qué nivel de servicio existe en Floraltime?
 ¿Cuáles son los factores que no han permitido tener un adecuado
control sobre los pedidos en Floraltime?
 ¿Qué procesos serán automatizados?
1.3. Objetivos de la Investigación
1.3.1 Objetivo General
Diseñar e implementar un sistema que permita
tener un adecuado
control sobre los pedidos y despachos a los clientes, así como, de las
adquisiciones a proveedores, garantizando la confiabilidad, seguridad e
integridad de datos.
3
1.3.2 Objetivos Específicos

Realizar el levantamiento de la situación actual de los procesos:
pedidos, despachos, adquisiciones y facturación.

Dotar de un sistema web para la empresa que esté de acuerdo a
sus objetivos y satisfaga las necesidades.

Elaborar el diseño del sistema web para la empresa, que permita
automatizar los procesos antes mencionados usando tecnologías
de última generación, además proveer de una estructura que
facilite el acceso a la información y la toma de decisiones en
Floraltime.
1.4. Alcance
De los objetivos planteados dentro de la investigación podemos decir
que el alcance del proyecto se establece de la siguiente manera:
Hacer un levantamiento de información del estado actual de los procesos de
pedidos, despachos, adquisiciones y facturación.
En el proceso de pedidos, se receptan los requerimientos de flor de los
clientes, los que se receptan por correo electrónico. Seguidamente se verifica
en la orden fija, que son convenios que tiene la empresa con las fincas
proveedoras de flor, si existe todo o parte del pedido del cliente y se registra
la operación en un archivo de Excel.
En el proceso de adquisiciones se registran los pedidos que no fueron
cubiertos por la orden fija y se procede hacer la compra por mercado abierto
es decir pidiendo a las fincas la flor, este proceso se lo realiza por medio de
chat y es también registrado en el archivo de Excel.
El proceso de despacho se encarga de hacerlo la empresa de carga, la
misma que envía por medio de correo electrónico la cantidad de flor
despachada. Esto sirve para el proceso de facturación, en donde se realiza
4
una comparación de lo que se pidió a la finca y lo que realmente fue
despachado por la misma.
Seguidamente se elaborará el diseño y la implementación del sistema web
de tal forma que cumpla con los requerimientos y se ajuste a las expectativas
de la empresa. Todo esto aplicando tecnologías de última generación.
Como lenguajes de programación se utilizará PHP y JavaScript, HTML5 para
la parte visual y la base de datos será MySQL. También se usará MVC
(Modelo Vista Controlador) como patrón para el desarrollo del sistema.
CAPITULO II
MARCO TEÓRICO
2.1
Fundamento Teórico
FUNDAMENTOS DE LA WEB1
El éxito espectacular de la Web se basa en dos puntales fundamentales: el
protocolo HTTP y el lenguaje HTML. Uno permite una implementación simple
y sencilla de un sistema de comunicaciones que nos permite enviar cualquier
tipo de ficheros de una forma fácil, que simplifica el funcionamiento del
servidor, Permitiendo que servidores poco potentes atiendan miles de
peticiones y Simplificando los costes de despliegue.
El otro nos proporciona un mecanismo de composición de páginas enlazadas
simple y fácil, altamente eficiente y de uso o muy simple.
1
http://www.sw-computacion.f2s.com/Linux/004-Desarrollo_de_aplicaciones_web.pdf
5
PROTOCOLO HTTP2
El protocolo HTTP (Hypertext Tranfer Protocol) es el protocolo base de la
WWW. Es un protocolo simple, orientado a conexión y sin estado. Es un
protocolo Orientado a conexión ya que emplea para su funcionamiento un
protocolo de comunicaciones (TCP, Transport Control Protocol) de modo
conectado, un Protocolo que establece un canal de comunicaciones de
extremo a extremo (entre el cliente y el servidor) por el que pasa el flujo de
bytes que constituyen los datos a transferir, en contraposición a los
protocolos de datagrama o no orientados a conexión que dividen los datos en
pequeños paquetes (datagramas) y los envían, pudiendo llegar por vías
diferentes del servidor al cliente. El protocolo no mantiene estado, es decir,
cada transferencia de datos es una conexión independiente de la anterior, no
manteniendo ninguna relación entre ellas.
Esto es así hasta el punto de que para transferir una página Web debemos
enviar el código HTML del texto así como las imágenes que la componen,
pues en la especificación inicial de HTTP, la 1.0, se abrían y usaban tantas
conexiones como componentes tenía la página, transfiriéndose por cada
conexión un componente (el texto de la página o cada una de las imágenes).
HTML53
HTML5 es la actualización de HTML, el lenguaje en el que es creada la web.
HTML5 también es un término de marketing para agrupar las nuevas
tecnologías de desarrollo de aplicaciones web: HTML5, CSS3 y nuevas
capacidades de JavaScript.
2
3
http://www.sw-computacion.f2s.com/Linux/004-Desarrollo_de_aplicaciones_web.pdf
http://www.cristalab.com/tutoriales/introduccion-a-html5-c92171l/
6
La versión anterior y más usada de HTML, HTML4, carece de características
necesarias para la creación de aplicaciones modernas basadas en un
navegador. El uso fuerte de JavaScript ha ayudado a mejorar esto, gracias a
frameworks
como jQuery, jQuery
UI, Sproutcore,
entre
otros.
Flash en especial ha sido usado en remplazó de HTML para desarrollar web
apps que superaran las habilidades de un navegador: Audio, video,
webcams, micrófonos, datos binarios, animaciones vectoriales, componentes
de interfaz complejos, entre muchas otras cosas. Ahora HTML5 es capaz de
hacer esto sin necesidad de plugins y con una gran compatibilidad entre
navegadores.
Nuevas etiquetas de HTML5
HTML4 y HTML5 son 100% compatibles entre sí. Todo el código que tienes
en HTML normal seguirá funcionando sin problemas en HTML5. Para
empezar a usar HTML5 lo único que tienes que hacer es colocar
este DOCTYPE antes de la etiqueta <html>:
Código :
<!DOCTYPE html>
Es un DOCTYPE mucho más simplificado que XHTML (cuyas reglas siguen
siendo usadas) y te permite usar todas las habilidades de HTML5 sin que
nada
de
lo
que
ya
tienes
programado
deje
de
funcionar.
Las principales etiquetas HTML5 nuevas no tienen una representación
especial en pantalla. Todas se comportan como un <div> o un <span>. Pero
cada una tiene un significado semántico superior a un simple div o span.
7
<header>
Hacer cosas como <div id="header"> es un poco estúpido cuando el 99% de
los proyectos web tienen una cabecera. <header> está diseñada para
reemplazar la necesidad de crear divs sin significado semántico.
<hgroup>
Muchos headers necesitan múltiples títulos, como un blog que tiene un titulo
y un tagline explicando el blog. <hgroup> permite colocar un h1, h2 y h3
dentro del header sin afectar el SEO, permitiendo usar otro h1 en el sitio.
En el HTML actual, sólo puedes usar h1 una vez por sitio o el h1 pierde
prioridad de SEO.
<nav>
Igual que <header>, <nav> está diseñado para que ahí coloques la botonera
de navegación principal. Puedes colocar cualquier etiqueta dentro, aunque lo
recomendado es usar listas <ul>. Sólo puedes tener un <nav> por página.
<section>
Define un área de contenido única dentro del sitio. En un blog, sería la zona
donde están todos los posts. En un video de youtube, habría un section para
el video, uno para los datos del video, otro para la zona de comentarios.
<article>
Define zonas únicas de contenido independiente. En el home de un blog,
cada post sería un article. En un post del blog, el post y cada uno de sus
comentarios sería un <article>.
<aside>
Cualquier contenido que no esté relacionado con el objetivo primario de la
página va en un aside. En un blog, obviamente el aside es la barra lateral de
8
información. En el home de un periódico, puede ser el área de indicadores
económicos.
<footer>
Este es obvio. Es el pie de página y todo lo que lo compone.
APLICACIONES WEB4
Una aplicación Web, básicamente, es un programa, en sí muy parecido a
cualquiera de los programas que todos nosotros tenemos en nuestra
computadora, pero con la salvedad de que la computadora que hace correr
ese programa, es el servidor al que nos conectamos a través de nuestro
navegador, convirtiéndose éste en la "pantalla" o ventana en la que
visualizamos las cosas que ocurren al ejecutar las acciones de la aplicación.
El servidor nos devuelve la información en formato HTML y así cualquier
navegador es capaz de interpretar este código para poder visualizar de forma
correcta la información que nos envía la aplicación. Son numerosas las
ventajas de las aplicaciones Web en cualquiera de los campos para los que
se utilicen, ya que permiten facilitar mucho la estructuración y sobre todo el
mantenimiento de la información que se muestra en el sitio Web.
Las aplicaciones Web se pueden utilizar con múltiples fines, desde un
sencillo uso para facilitar la creación de un sitio Web más o menos extenso,
hasta para centralizar toda la información (contabilidad, pedidos, logística,
etc.) de una empresa multinacional, con sedes en diferentes países del
mundo. Al partir toda la información de un mismo punto o base de datos,
permite a todos los usuarios que trabajan con esta información conocer en
tiempo real el estado de la misma.
4
http://wwwisis.ufg.edu.sv/wwwisis/documentos/TE/005.74-A594d/005.74-A594dCapitulo%20II.pdf
9
Por ejemplo una empresa con diferentes sedes que vende productos, del tipo
que sea, catalogado y referenciado y por supuesto almacenado, con un
control de stock. Si un agente comercial de un departamento gestiona el
pedido de una referencia, de la cual solo queda una en el almacén, justo en
el momento en el que se haya ejecutado el pedido, el siguiente agente,
aunque pertenezca a otra sede de otro departamento, que entre para realizar
un pedido de esa misma referencia, podrá informar al cliente de que no hay
unidades en almacén de ese producto, evitando problemas en el servicio al
cliente.
Ventajas como la mencionadas anteriormente, exigen a cambio el esfuerzo,
trabajo
o
inversión
de
mantener
toda
la
información
actualizada
permanentemente para poder así ser útil a todos los usuarios que trabajan
diariamente con la aplicación Web.
TIPOS DE APLICACIONES

Desarrollo de sitios Web básicos.
Hay empresas o profesionales que por su tipo de negocio o producto,
solamente precisan tener un pequeño espacio Web para mostrar de
forma sencilla información sobre su actividad, contacto, etc. Se
utilizará como tarjeta de visita para presentar a sus clientes. Estos
sitios Web, aun siendo sencillos en sus contenidos, pueden ofrecer
una buena imagen de la empresa o el profesional a sus visitantes. Los
diseñadores y desarrolladores tienen lo siguiente como objetivos
principales: Diseño bueno y atractivo, buena estructuración, fácil
navegación, optimización de imágenes y acabado completo del sitio.

Web en flash.
Hace ya bastante tiempo que la Compañía Macromedia desarrolló la
tecnología de flash, para abrir un mundo nuevo de posibilidades de
10
animación y movimiento a la presentación de sitios Web. Hoy en día,
cualquier navegador de cualquier fabricante o plataforma lleva
incorporado el plugin que permite la correcta visualización de este tipo
sitios web.

Aplicaciones de contenido.
Existen muchas empresas y profesionales que desean utilizar Internet
como medio para publicar o difundir bien sus servicios o sus estudios
profesionales, para llegar a un público al que antes de la existencia de
Internet no se podía llegar. Este tipo de aplicaciones son ideales para
el crecimiento de contenidos a lo largo del tiempo ya que están
estructuradas y permiten ampliar, prácticamente hasta donde se
desee, los contenidos del sitio Web.

Aplicaciones e-learning.
La competitividad del mercado, cada día mayor, nos obliga a todos a
mantener una formación permanente en nuestro trabajo o profesión,
con el fin de estar al día de las últimas novedades que se producen.
Lo anterior unido a la falta de tiempo que todos sufrimos, ha llevado a
muchas empresas a ofrecer cursos de formación continua a través de
Internet, lo que se conoce por e-learning.

Comercio electrónico.
Por todos es sabido que el comercio electrónico está sufriendo un
espectacular auge en los últimos años. Cada día son más las
personas que realizan por Internet, desde la compra de alimentos y
enseres para su casa, hasta la compra de determinados productos
muy específicos que no se encuentran habitualmente el cualquier
comercio tradicional.

Aplicaciones de gestión.
Desde luego si hay una función estrella para las aplicaciones
informáticas es la gestión y contabilidad en las empresas. La gran
mayoría de las pequeñas empresas, adquieren o adquirieron su primer
11
ordenador con el objetivo de utilizarlo para la gestión de la
contabilidad y en su caso de almacén. La tecnología Web permite
crear un nuevo concepto para este tipo de aplicaciones.
HISTORIA DEL PHP5
PHP comenzó siendo un conjunto de scripts escritos en Perl que permitían a
su creador. Rasmus Lerdorf, el control de los accesos a sus Páginas
personales. A este conjunto de Scripts les denominó como personal Home
Page Tools. Poco a poco, Ramus fue complementando las funcionabilidades
básicas de sus herramientas escribiendo programas en C. En 1995 decidió
liberar el código fuente escrito en C para que cualquiera pudiera utilizarlo e,
incluso, colaborar en su mejora.
De este modo Nació PHP/FI. A finales de 1997 se libera PHP/FI 2.0,
pasando de ser el proyecto de una sola persona al desarrollo de un equipo.
Tuvo un seguimiento estimado de varios miles de usuarios en todo el mundo,
con aproximadamente 50,000 dominios informando que lo tenían instalados,
lo que sumaba alrededor del 1% de los dominios de Internet.
En junio de 1998 se liberó oficialmente PHP 3.0, anunciando como sucesor
oficial de PHP/FI 2.0, si bien había sido completamente reescrito por Andi
Gutmans y Zeev Zuraski. Una de las mejores características de PHP 3.0 que
trajo a docenas de desarrolladores a unirse y enviar nuevos módulos de
extensión era su gran extensibilidad, además de proveer a los usuarios
finales de una sólida infraestructura para muchísimas bases de datos,
protocolos,
APIs.
En
su
apogeo,
PHP
3.0
estaba
aproximadamente un 10% de los servidores Web en Internet.
5
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
12
instalado
en
EVOLUCION DE PHP6
El siguiente paso en la evolución de PHP consistió en la reescritura de su
núcleo, dando lugar a un nuevo motor denominado Zend (acrónimo de los
apellidos Zeev y Andi). PHP 4.0, basado en este motor, y acoplado con un
gran rango de nuevas características adiciónales, fue oficialmente liberado
en mayo de 2000.
Además de la mejora de ejecución de esta versión, PHP 4.0 incluía otras
características clave, como el soporte para la mayoría de los servidores Web,
sesiones HTTP forma nativa, ciertas facilidades de orientación a objetos,
compatibilidad con las expresiones regulares de Perl, Buffers de salida,
encriptación, formas más seguras de controlar las entradas de Usuarios y
muchas nuevas Construcciones de lenguaje, etc.
La ultima y actual versión de PHP, liberada en julio de 2004, es la 5.0 está
basada en el nuevo motor Zend 2, el cual ha vuelto a ser reescrito por
completo. Entre sus características y novedades más resaltables está el
completo soporte para la programación orientada a objetos (que a buen
seguro satisfará a los más apasionados y ortodoxos seguidores de este
paradigma de la programación). También incorpora la gestión de
excepciones, una nueva librería de XML (libxm12), soporte nativo para el
sistema gestor de base de datos SQLite, y mejoras en la gestión de las
cadenas de caracteres. PHP 5.0 soporta también MySQLi, Una nueva
ampliación de MySQL (está diseñada para trabajar con la versión 4.1.2 o
superior), la cual, además de la Interfaz habitual, encierra una Interfaz
basada en objetos.
6
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
13
¿QUE SE PUEDE HACER CON PHP?7
Aunque principalmente se utiliza para programar scripts que van a ser
ejecutados en servidores Web, no hay que olvidar que puede utilizarse como
cualquier otro lenguaje (Perl,C ,Python ,Shell,etc.) para escribir programas
que se ejecuten desde la línea de comandos, es decir, sin la necesidad de
que se ejecute conjuntamente con un servidor Web. De todas formas, es en
el entorno Web donde se ha conseguido su mayor aceptación, Y es que PHP
no sólo nos permite realizar todas las acciones propias de un Script CGI
tradicional (procesamiento
de formularios,
manipulación de
cookies,
generación de páginas con contenidos dinámicos), sino que también nos
proporciona las siguientes posibilidades:
- Soporte para múltiples sistemas operativos; Unix (entre otras, Linux, HPUX, Solaris y OpenBSD), Microsoft Windows, Mac Os X, RISC OS.
Actualmente está en preparación para las plataformas IBM OS/390 y AS/400.
- Soporte para múltiples servidores Web: Apache, Microsoft Internet
Information Server, Personal Web Server, Netscape e iPlanet, Oreilly
Website Pro Server, Caudium, Xitami, OmniHTTPd Y muchos otros.
- Soporte para ODBC y extensiones DBX.
- Soporte para comunicarse con otros servicios usando protocolos tales como
LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y muchos
otros.
- Puede utilizar objetos Java de forma transparente, como objetos PHP.
- La extensión de CORBA puede ser utilizada para acceder a objetos
remotos.
7
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
14
- PHP soporta WDDX para intercambio de datos entre lenguajes de
programación Web.
- Generación de resultados en múltiples formatos como XHTML, XML
ficheros de imágenes, ficheros PDF y películas Flash.
- Manejo de expresiones regulares POSIX Extended o Perl.
- Funciones de comercio electrónico, como Cybercash, Cybermut Verisign
Payflow Pro y CCVS para pasarelas de pago.
- Otras extensiones muy interesantes son las funciones del motor de
búsquedas mnoGosearch, funciones para pasarelas de IRC, utilidades de
compresión (gzip, bz2), convención de calendarios y traducciones.
MODO DE FUNCIONAMIENTO DE PHP8
El intérprete PHP puede ser ejecutado por el servidor Web de dos modos
distintos: como módulo del propio servidor (interfaz SAPI, Server Application
programming Interface) o como programa externo a éste (modo CGI,
Common Gateway Interface). A grandes rasgos, ejecutar un programa CGI le
supone a la maquina donde se está ejecutando el servidor Web llamar al
sistema operativo para que realice las siguientes tareas básicas: cargar el
programa en memoria, anotarlo en la lista de tareas, lanzar su ejecución,
esperar a que termine y, por fin, descargarlo de memoria y de la lista de
tareas. Tantas veces el cliente pida la ejecución de un programa CGI, tantas
veces se repetirán estas acciones en la maquina servidora.
Es fácil imaginar que, si el número de peticiones en medio-alto, el
rendimiento general de esta ésta se verá proporcionalmente degradado, no
ya sólo por el número de tareas simultáneas a realizar, sino por la ocupación
8
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
15
de la memoria física del equipo servidor con las copias del programa CGI
ejecutándose.
Por otra parte, podemos pensar en un SAPI como un protocolo que permite
acceder directamente a las funciones internas del servidor, por tanto a través
del SAPI podemos añadir nuevas funcionabilidades a un servidor Web (por
ejemplo, acceso a base de datos, autentificación de usuarios, cacheó de
páginas, generación de imágenes al vuelo, etc.). Lo más interesante de esta
característica es que todas estas nuevas funcionabilidades se van ejecutar
de forma más rápida y eficiente ya que lo van hacer en el espacio de
memoria del propio servidor. Esto significa que las ejecuciones de los
programas las hará el propio servidor Web y, por tanto, serán mucho más
rápidas y eficaces (no habrá creación de procesos nuevos ni ocupación extra
de la memoria física con copias de éstos). Según el fabricante de servidores,
existen varios tipos de API`s: Apache API para el servidor Apache, ISAPI de
Microsoft para su producto Internet Information Server, NSAPI de AOL para
el servidor ¡planet (antes, Netscape Enterprise Server) y WSAPI.
JAVASCRIPT9
JavaScript es un lenguaje interpretado, al igual que VisualBasic, Perl, TCL...
sin embargo, posee una característica que lo hace especialmente idóneo
para trabajar en Web, usado principalmente en "clientes web", ya que son
los navegadores que utilizamos para viajar por ella los que interpretan (y por
tanto ejecutan) los programas escritos en JavaScript. De
esta forma,
podemos enviar documentos a través de la Web que incorporan el código
fuente de un programa, convirtiéndose de esta forma en documentos
dinámicos, y dejando de ser simples fuentes de información estáticas.
9
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
16
Los programas en JavaScript no son la primera forma que conoce la Web
para transformar información, dado que el uso de CGIs está ampliamente
difundido. La diferencia básica que existe entre un programa CGI y uno
escrito en JavaScript es que el CGI se ejecuta en el servidor de páginas Web
mientras que el programa en JavaScript se ejecuta en el cliente (es decir, en
el navegador). Por regla general, el CGI necesita unos datos de entrada (que
normalmente se proporcionan mediante un formulario), los procesa y emite
un resultado en forma de documento HTML. Esto implica tres transacciones
en la red.
La primera carga la página del formulario, la segunda envía los datos al
servidor, y la tercera recibe la nueva página que ha generado el CGI. Por el
contrario, los programas escritos en JavaScript se ejecutan en el navegador
del cliente, sin necesidad de que intervenga el servidor. De esta forma, una
sola transacción basta para cargar la página en la que se encuentra tanto el
formulario, para los datos de entrada, como el programa en JavaScript que
proporciona los resultados.
CARACTERISTICAS DE JAVASCRIPT10
Las dos principales características de tiene el lenguaje JavaScript son:

Es un lenguaje basado en objetos(es decir, el paradigma de
programación es básicamente el de la programación dirigida a objetos,
pero con menos restricciones).

JavaScript es además un lenguaje orientado a eventos, debido por
supuesto al tipo de entornos en los que se utiliza
(Windows y
sistemas X-Windows). Esto implica que gran parte de la programación
en JavaScript se centra en describir objetos (con sus variables de
10
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
17
instancia y métodos de "clase") y escribir funciones que respondan a
movimientos del ratón, pulsación de teclas, apertura y cerrado de
ventanas o carga de una página, entre otros eventos.
WAMP11
Es la abreviación de Windows, Apache, MySQL y PHP y es un proyecto
desarrollado por franceses. Este paquete instala la versión 2.2 de Apache,
PHP5, MySQL 5.0.27, PhpMyAdmin y SQLite manager en tu computadora.
Una de las ventajas de este paquete es la ofrecer la versión de PHP5 en el
instalador y sus constantes actualizaciones.
La instalación es bastante sencilla y destaca que los servicios de apache y
de MySQL se instalarán en Windows bajo los nombres de wampapache y
wampmysqld para no interferir con otras instalaciones previas de estos
servidores.
APACHE WEB SERVER12
Es un servidor web libre, es decir, el encargado de construir y devolver las
páginas web que solicitan los navegadores. Su nombre procede de "a patchy
server", por ser una versión "parcheada" en 1995 de uno de los primeros
servidores web, el NCSA HTTPD, y actualmente corre
en muy diversas
plataformas (Unices, Windows, etc.). Debido a su licencia libre pero no
copyleft, existen también versiones propietarias de Apache, aunque es
desarrollado y mantenido por la comunidad del software libre a través de la
Fundación Apache.
11
http://www.maestrosdelweb.com/ampfacil/
12
http://www.colombiaaprende.edu.co/html/mediateca/1607/articles-108379_archivo.pdf
18
PHPMYADMIN13
PHPMYADMIN es una utilidad que nos sirve para interactuar con una base
de datos de forma muy sencilla y desde una interfaz web. Nos sirve por
ejemplo para crear bases de datos, tablas, borrar o modificar dados, añadir
registros, hacer copias de seguridad, etc. Es una aplicación tan útil que casi
todos los hosting con MySQL disponen de ella, por ello se analizará su
instalación. Además, vamos a usarlo para crear los usuarios MySQL para así
poder utilizar las bases de datos de forma segura. Al ser una aplicación
escrita en PHP, necesita de Apache y MySQL para poder funcionar.
BASE DE DATOS RELACIONALES14
Existen muchos tipos de base de datos en función del modo en que
almacenan y acceden a la información que guardan: Relacional, jerárquica,
en la red, orientada a objetos, etc. Ejemplos de gestores de bases de datos
relacionales o RDBMS (Relational Database Management System) hay
muchos: MySQL, SQLite, Orale, Informix, SyBase, Microsoft SQL Server,
Postgres, Msql, etc.
Básicamente, un gestor de base de datos relacionales almacena los datos en
Tablas, cada una de las cuales está formada por filas (o registros), y estas, a
su vez, están formadas por columnas (o campos), Antes de definir una tabla,
hay que normalizarla, procesó que consiste en evitar redundancia, es decir,
que la información éste duplicada ya que, si hubiera que cambiar un dato que
estuviera repetido, habría que cambiar varias veces.
13
http://www.maestrosdelweb.com/phpmysqlap/#a4
14
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
19
MySQL15
De entre todos los gestores anteriormente mencionados, la elección de
MySQL como gestor de base de datos radica en que es gratuito tanto para
usos privados, cómo comerciales (sólo hay que pagar en el caso de que se
desarrolló un producto comercial que éste basado en MySQL), en su
disponibilidad para distintos sistemas operativos (la mayor parte de los
sabores Unix, Windows 9X/NT/2000/XP, OS/2 etc.), en que es capaz de
trabajar con millones de registros y porque, además es muy rápido y no
necesita grandes recursos de máquina.
DISEÑO DE BASE DE DATOS
Una única base de datos relacional puede contener cualquier número de
tablas, esto plantea las preguntas de cuántas tablas debe tener una base de
datos y de qué campos bebe tener cada tabla. Dichas decisiones son la base
del diseño de datos.
Un buen diseño hace que resulte fácil trabajar con la base de datos y ofrece
suficiente flexibilidad como para admitir los requisitos futuros. Un diseño
pobre obstaculiza las operaciones select, proyect y join, haciendo que la
base de datos resulte poco flexible y sea difícil trabajar con ella.
DISEÑO FORMAL DE UNA BASE DE DATOS
Una base de datos verdaderamente relacional es aquella que sigue el
llamado modelo relacional formulado inicialmente por E.F.Codd, un
investigador de IBM. El modelo relacional describe la base de datos, tablas,
15
http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
20
registros, campos, operadores como select, Project y join de un modo formal,
matemático. Uno de los puntos fuertes del modelo relacional es que es
matemáticamente completo (un término que coloquialmente significa que no
contiene incoherencias ni le faltan vínculos). El resultado es un modelo de
base de datos con una capacidad de aplicación sin precedentes a una gama
de problemas enormemente amplia.
En una tecnología relacional, el proceso de organizar los campos en tablas
se denomina normalización, porqué con cada paso el diseño se aproxima
cada vez más al estándar relacional (es decir, la norma relacional). Los
expertos han propuesto muchos grados de normalización, pero todos
parecen estar de acuerdo con los cincos primeros:
Primera Forma Normal: Un campo dado de un registro dado sólo puede
contener un valor, esto prohíbe todo tipo de grupos que se repiten dentro de
un único registro, para implementar grupos que se repiten, diseñe una tabla
con registros que se repiten.
Segunda Forma Normal: Cada Campo no clave debe depender de todos los
campos de la clave principal.
Tercera Forma Normal: Ningún campo no clave depende de otro campo no
clave.
Cuarta
Forma
Normal:
Esta
Forma
prohíbe
varias
relaciones
independientes de unos a varios entre los campos de la clave principal y los
campos no clave. Para conseguir la cuarta forma normal tendrá que crear
una tabla aparte para cada relación de uno a varios independientes.
21
Quinta Forma Normal: Esta forma es muy extrema y suele ignorarse,
requiere descomponer una tabla en las partes más pequeñas posibles para
eliminar toda la redundancia.
CAPÍTULO III
METODOLOGÍA
3.1
Selección de la Metodología
Es precisa la aplicación de un conjunto de conceptos, estándares y
metodologías así tenemos:
UML (Lenguaje Unificado de Modelado): esta notación nos permite
modelar, analizar y diseñar el software de manera tal que se pueda
documentar y construir. Hay que tomar en cuenta que en el modelado se
pueden incluir aspectos conceptuales tales como procesos de negocio y
funciones del sistema.
OOHDM (Método de Diseño Hipermedia Orientado a Objeto)16: es una
metodología orientada a objetos que propone un proceso de desarrollo de
cinco fases que son: obtención de requerimientos, Modelo Conceptual,
Diseño Navegacional, Diseño de Interfaz Abstracta e Implementación, donde
se combinan notaciones gráficas UML con otras propias de la metodología.
Esta metodología mantiene modelos de los cuales el más importante es el
diseño navegacional, debido a la abstracción y fácil diseño, en este modelo
tenemos la 4 forma en que las pantallas se abrirán después de seleccionar
una de las opciones del mismo.
En la figura se muestra los pasos necesarios para cumplir con la metodología
de desarrollo de software conocida como OOHDM. La primera fase es la
16
http://inversionesyy.blogspot.com/2010/11/metodologias-de-aplicaciones-web.html
22
obtención de requerimiento que
consiste en realizar el levantamiento de
información y requerimientos mediante reuniones y observaciones. La
segunda fase es el Modelo Conceptual la cual construye un esquema
conceptual que representa objetos, sus relaciones y colaboraciones que
existen en el dominio designado. La tercera fase es el Diseño Navegacional
consiste en unificar una serie de tareas para obtener este diseño en la
aplicación, es decir para cada Identificador de usuario (UID) se crearán
diagramas de contexto. La cuarta etapa de Diseño de Interfaz Abstracta
utilizará ADV (Vista de Datos Abstracta), modelos abstractos que especifican
la organización y el comportamiento de la interfaz. Finalmente en la quinta
fase de Implementación se debe determinar donde se almacenarán los
objetos y con qué lenguaje se desarrollarán las interfaces, para que el
sistema sea desarrollado, entre en la etapa de pruebas y posteriormente sea
publicado.
Figura 2.1: Etapas de la metodología OOHDM
CAPÍTULO IV
DIAGNÓSTICO DE LA SITUACIÓN ACTUAL
4.1
Captura de Requerimientos17
17
Ingeniería de requisitos en aplicaciones para la web, María José Escalona, Nora Koch,
https://www.lsi.us.es/docs/informes/LSI-2002-4.pdf
23
La captura de requisitos es la actividad mediante la que el equipo de
desarrollo de un sistema de software extrae, de cualquier fuente de
información disponible, las necesidades que debe cubrir dicho sistema. El
proceso de captura de requisitos puede resultar complejo, principalmente si
el entorno de trabajo es desconocido para el equipo de analistas, y depende
mucho de las personas que participen en él.
La técnica usada fue la realización de entrevistas al personal involucrado y
se determinó que se necesita un sistema que permita a los usuarios tener
mayor accesibilidad a datos de clientes, cargueras aerolíneas, fincas,
variedades, tipos de flor y proceso de compras.
A continuación se muestra los casos de uso recogidos durante el proceso de
captura de requerimientos en la empresa Floraltime.
Registrar compra de flor:
24
Figura 2.2: Registro de compra de flor
Nombre del Caso de Uso:
Registrar compra de flor
Descripción:
Registra la información de compras
de flor.
Actores:
Usuario Buyer (comprador)
Precondiciones:
El usuario de tener el pedido de un
cliente.
Flujo principal:
1. Usuario recepta pedido de
clientes.
2. Usuario pide disponibilidad de
flor a fincas.
3. Usuario compra la flor según
disponibilidad de la finca.
4. Usuario registra la compra en
25
archivo Excel.
Cambio de Finca en el registro de compra de flor:
Figura 2.3: Cambio de Finca en el registro de compra de flor
Nombre del Caso de Uso:
Cambio de Finca en el registro de
compra de flor
Descripción:
Registra el cambio de finca en la
compra de flor.
Actores:
Usuario Buyer (comprador)
Finca
Precondiciones:
La compra debe estar registrada en
el archivo de Excel de registro de
compras..
Flujo principal:
1. Usuario llama a la finca a
confirmar la compra.
2. Finca no confirma la compra.
3. Usuario pide disponibilidad de
flor a fincas.
26
4. Usuario compra la flor según
disponibilidad de la finca.
5. Usuario registra la compra en
archivo Excel.
Cambio de cantidad en el registro de compra de flor:
Figura 2.4: Cambio de cantidad en el registro de compra de flor
Nombre del Caso de Uso:
Cambio de cantidad en el registro
de compra de flor
Descripción:
Registra el cambio de cantidad en
la compra de flor.
Actores:
Usuario Buyer (comprador)
Finca
Precondiciones:
La compra debe estar registrada en
el archivo de Excel de registro de
27
compras..
Flujo principal:
1. Usuario llama a la finca a
confirmar la compra.
2. Finca no confirma la cantidad.
3. Usuario pide disponibilidad de
flor a fincas.
4. Usuario compra la flor según
disponibilidad de la finca.
5. Usuario registra la compra en
archivo Excel.
Cancelación de pedido por parte del cliente:
Figura 2.5: Cancelación de pedido por parte del cliente
Nombre del Caso de Uso:
Cancelación de pedido por parte del
cliente.
Descripción:
Registra cancelación de pedido por
parte del cliente.
28
Actores:
Usuario Buyer (comprador)
Cliente
Precondiciones:
------
Flujo principal:
1. Cliente llama a usuario a
cancelar el pedido.
2. Usuario registra la cancelación
en archivo Excel.
CAPÍTULO V
DISEÑO DE LA SOLUCION
El diseño de la solución se basa en los siguientes diagramas.
Diagrama de clases:
29
30
31
32
33
34
35
CAPÍTULO VI
MARCO ADMINISTRATIVO
6.1
Presupuesto
El plan de tesis nos proporciona una visión del tiempo requerido para
completar los componentes del proyecto, y a su vez el costo de desarrollar
un proyecto, el mismo que depende de múltiples variables incluyendo costos
de mano de obra, costos de materiales, infraestructura, equipo y utilidades.
Por lo que se presenta una hoja de presupuesto. (Figura 2.6)
6.2
Cronograma
Las actividades programadas en la presente tesis, serán desarrolladas
tentativamente en los siguientes tiempos. (Figura 2.7)
36
MATERIALES DE REFERENCIA
Bibliografía
1. http://www.sw-computacion.f2s.com/Linux/004Desarrollo_de_aplicaciones_web.pdf
2. http://www.cristalab.com/tutoriales/introduccion-a-html5-c92171l/
3. http://wwwisis.ufg.edu.sv/wwwisis/documentos/TE/005.74A594d/005.74-A594d-Capitulo%20II.pdf
4. http://geneura.ugr.es/~victor/cursillos/javascript/js_intro.html
5. http://www.maestrosdelweb.com/ampfacil/
6. http://www.colombiaaprende.edu.co/html/mediateca/1607/articles108379_archivo.pdf
7. http://www.maestrosdelweb.com/phpmysqlap/#a4
8. http://inversionesyy.blogspot.com/2010/11/metodologias-deaplicaciones-web.html
9. Ingeniería de requisitos en aplicaciones para la web, María José
Escalona, Nora Koch, https://www.lsi.us.es/docs/informes/LSI-20024.pdf
37
Figura 2.6: Presupuesto
PRESUPUESTO PARA TESIS DE GRADO
DISEÑO E IMPLEMENTACIÓN DE UN SISTEMA WEB PARA COMPRA
TESIS:
DE FLORES EN LA EMPRESA FLORALTIME
Valor
ITEM
RUBRO
Nº
Unidad
Cantidad
unitario
Valor
Nº
$
$
0
0.00
0.00
0
0.00
0.00
0
0.00
0.00
1 RECURSOS
INSTITUCIONALES UCE
SUBTOTAL UCE
0.00
2 RECURSOS
EMPRESARIALES
EMPRESA:
Materias primas:
0
0.00
0.00
0
0.00
0.00
0
0.00
0.00
0
0.00
0.00
0
0.00
0.00
empresa
0
0.00
0.00
Personal de apoyo
0
0.00
0.00
Material de laboratorio:
Uso de equipo de la
SUBTOTAL EMPRESA
0.00
3 RECURSOS HUMANOS
Tutor de trabajo de
0
38
0.00
0.00
graduación
Tribunal de trabajo de
graduación
0
0.00
0.00
0
0.00
0.00
Investigador (autor de
trabajo de grado)
SUBTOTAL RECURSOS HUMANOS
0.00
RECURSOS
4 MATERIALES
Material de escritorio:
Impresora laser
1
250,00
12,50
Computadora portátil
1
500,00
25,00
Tóner negro
2
79,00
3,95
Tóner cian
1
110,00
5,50
Tóner magenta
1
110,00
5,50
Tóner amarillo
1
110,00
5,50
Recarga toners
2
25,00
50,00
Flash memory
1
25,00
1,25
Resmas de papel
4
3,50
14,00
Esferos
3
0,25
0,75
Libretas
2
1,00
2,00
100
3,00
15,00
4
0,50
2,00
Páginas
800
0,03
24,00
Páginas
500
0,05
25,00
Páginas
0
0,00
0,00
5
3,50
17,50
25
15,00
18,75
Impresiones
Carpetas
Copias
Material bibliográfico:
Fotocopias de libros
Transcripción borrador
trabajo de grado
Anillados borradores
Empastado del trabajo de
grado
SUBTOTAL DE RECURSOS MATERIALES
5 OTROS (Gastos: agua,
Días
39
209,45
153
3,00
14,00
luz, telf.)
Credenciales
1
5,00
5,00
Horas Hombre
Horas
1000
2,00
2000,00
Transporte
Días
153
1,50
180,00
Internet
Meses
6
29,00
174,00
Uso de equipo personal
Horas
918
0,50
367,20
SUBTOTAL OTROS
2595,20
TOTAL
2804,65
IMPREVISTOS (15%)
514,00
TOTAL DEL PRESUPUESTO
3318,65
40
Figura 2.7: Cronograma
41
MANUALES
Manual para la ejecución del programa fuente
1. Verificar que la carpeta floraltime2 que se encuentre en esta
dirección c:\wamp\www\
2. Verificar que la base de datos floraltime3 se encuentre creada.
Ingresamos
a
esta
dirección
http://localhost/phpmyadmin
y
obtenemos esta pantalla. Al lado izquierdo debe aparecer el
nombre de la base de datos.
42
3. Verificamos que la estructura de tablas de la base de datos esté
creada en la siguiente pantalla.
4.
Abrimos en cualquier editor de texto el siguiente archivo
c:\wamp\www\floraltime2\includes\db_constants.php y verificamos
que el archivo tenga estas opciones por defecto.
5.
Finalmente vamos al browser y escribimos la dirección
http://localhost/floraltime2 y accederemos a la aplicación.
43
Manual de instalación del software utilizado
Este proyecto va a ser ejecutado en un ambiente Windows Server 2008
en una intranet. Como servidor de aplicaciones se usará Apache, el motor
de base de datos será MySQL y el lenguaje de servidor será PHP, para lo
cual vamos a usar la última versión del paquete WampServer. Este
paquete posee todo el software necesario para la ejecución del proyecto.
1. Ingresar a esta dirección de internet e ir a la opción Descargas y
descargamos la última versión disponible para 32 bits.
2.
Una vez descargado el software procedemos a ejecutarlo,
haciendo doble clic sobre el icono. Inmediatamente nos aparecerá
la siguiente pantalla y damos clic en ejecutar.
44
3. Seguimos los pasos siguientes dando clic en Next.
45
4.
En la siguiente pantalla escogemos el directorio de
instalación. Dejamos el directorio por defecto que nos presenta
c:\wamp y damos click en Next.
5.
Por ultimo damos clic en Install y esperamos que se copien
los archivos.
46
6.
Ahora el instalador nos pide configurar el servidor de email
para que puedan legar las notificaciones. Dejamos las opciones por
defecto.
7. Y por último dejamos activada la opción Launch WampServer2 now
y damos clic en Finish.
8. Ahora debemos encender WampServer y verificar en el browser si
la instalación fue satisfactoria.
47
48
9. En la barra de direcciones del browser escribimos localhost y
debemos obtener esta pantalla como indicativo que la instalación
fue un éxito.
49
Manual de Programas Ejecutables
1. Copiar la carpeta floraltime2 que se encuentra en los programas
fuentes a la dirección c:\wamp\www\
2. Para crear la base de datos vamos al browser y escribimos la
dirección http://localhost/phpmyadmin y obtenemos esta pantalla.
3. A continuación damos click en la opción Base de datos y creamos
la misma con el nombre floraltime3. Debemos observer la base de
datos a la izquierda.
50
4. Ahora vamos a dar click en el botón Seleccionar archivo y
escogemos el archivo c:\wamp\www\floraltime2\db\Floraltime3.sql
que se encuentra en los programas fuentes para crear toda la
estructura de tablas de la base de datos y damos click en
Continuar.
5. Finalmente obtendremos esta pantalla y la estructura de tablas de
la base de datos estará creada.
51
6.
Ahora debemos configurar el acceso a la base de datos para
la aplicación. Abrimos en cualquier editor de texto el siguiente
archivo c:\wamp\www\floraltime2\includes\db_constants.php y el
archive debe tener estas opciones por defecto.
7.
Finalmente vamos al browser y escribimos la dirección
http://localhost/floraltime2 y accederemos a la aplicación.
52
Manual de Usuario
El sistema se compone de varias pantallas con las cuales puede
interactuar el usuario. A continuación procederé a mostrarlas.
Una vez instalados el servidor de aplicaciones Apache y la base de datos
en el motor de base de datos MySQL, procedemos a ingresar la siguiente
dirección en la barra de direcciones de cualquier browser.
http://localhost/floraltime2/
Pantalla de Login
En esta pantalla el usuario ingresa su usuario y contraseña para el
ingreso al sistema.
Pantalla de Aerolíneas
En esta pantalla se puede visualizar toda la información referente a las
Aerolíneas con las que trabaja la empresa.
53
Para editar la información simplemente damos doble clic sobre el valor de
la columna que se quiere editar. Si el valor a editar es un combo solo
escogeremos la opción deseada y se editara.
Al dar doble clic se pone un borde alrededor del texto a editar y damos
Enter para guardar los cambios y nos aparecerá un mensaje indicando
que la operación se realizó con éxito.
54
Podemos navegar por todos los resultados utilizando los botones de
navegación
Procedemos al uso del cuadro de búsqueda, el cual busca en todos los
registros escribiendo la palabra o texto y dando Enter a continuación.
Ahora procedemos a utilizar el botón de ingreso de un Nuevo Registro.
Aparecerá la siguiente pantalla, en la cual se procederá a ingresar los
datos deseados. Los campos marcados con un asterisco rojo son
Campos requeridos.
55
Cabe indicar que las pantallas de Cargueras, Fincas, Clientes, Tipos
de Flor, Variedades y Tipos de Empaque tienen el mismo
comportamiento en cuanto al proceso de ingreso, edición, búsqueda
y navegación.
Pantalla de Productos
Esta pantalla tiene un funcionamiento similar a las demás pantallas, con la
diferencia de que al momento de editar e ingresar datos, el
comportamiento cambia ligeramente.
Al dar clic en el botón de Nuevo Registro nos parecerá esta pantalla en la
ingresaremos nuestra información. Al dar clic sobre el combo Tipo Flor y
escoger cualquiera de las opciones, se procederá a calcular todas las
Variedades que hayan sido guardadas bajo ese Tipo de Flor. Este
proceso se lo hizo previamente en la pantalla de ingreso de datos de
Variedades.
56
57
Finalmente en la pantalla de Ingreso de Producto damos clic en Guardar y
se habrá guardado un nuevo registro en Producto.
Pantalla de Compras
Finalmente tenemos la Pantalla de Compras en la cual registraremos
todos los pedidos realizados por los Clientes de la siguiente forma.
Haciendo uso del botón Nuevo Registro nos aparece la siguiente pantalla
de ingreso.
En la cual procedemos a llenar el encabezado, Cliente, Aerolínea,
Carguera, Fecha de Entrega y Estado. A continuación se procede a
añadir
los
productos
requeridos.
Se
escoge
el
producto
y
automáticamente se procede a calcular los combos de Finca, Dimensión y
Tipo Empaque, se llenan a más de eso los cuadros de texto
pertenecientes a Tipo Flor y Variedad.
58
Al momento de escoger una opción en el combo Finca, se calculará
automáticamente el Stock asignado en la pantalla de ingreso de
productos, si existe Stock se creará un combo con opciones numéricas
según la cantidad ingresada en el Stock bajo la columna Cantidad, caso
contrario si no existe Stock signado se mantendrá el cuadro de texto.
Para añadir un nuevo reglón de pedido damos clic en Añadir producto y
se creara un renglón nuevo para el ingreso de un nuevo producto. Si se
quiere borrar un renglón se lo puede hacer usando el botón Borrar al final
de cada renglón.
59
Finalmente se procede a guardar, si todos los campos marcados como
requeridos están llenos se procederá al ingreso del pedido de compra y
se mostrará este en la pantalla principal de compras. Si alguno de los
campos requeridos no se encuentra lleno un aviso aparecerá.
En la pantalla principal de Compras se puede manipular únicamente el
estado del pedido de compra, existe la posibilidad de buscar por fecha.
Los registros mostrados en la pantalla principal de compras son los
encabezados de los pedidos de compra, se puede expandir o contraer el
detalle de cada pedido de compra usando los botones azules de + y –
ubicados en la parte izquierda de cada renglón.
60
Finalmente la forma de salir del sistema es dando clic en el link Logout
ubicado en cada pantalla en la parte superior derecha.
61
Manual Técnico
Para la elaboración de este sistema se utilizó PHP, JavaScript, Jquery y
CSS, los cuales están en perfecta armonía para que las pantallas tengan
el comportamiento deseado.
PHP ha sido implementado bajo el patrón de diseño MVC y utilizando
Programación Orientada a Objetos, a continuación se da una introducción
a este patrón de diseño.
Patrón de Diseño MVC
El patrón de diseño MVC organiza el código en base a su función. De
hecho, este patrón separa el código en tres capas:

La capa del modelo define la lógica de negocio (la base de datos
pertenece a esta capa).

La vista es lo que utilizan los usuarios para interactuar con la
aplicación (los gestores de plantillas pertenecen a esta capa).

El controlador es un bloque de código que realiza llamadas al
modelo para obtener los datos y se los pasa a la vista para que los
muestre al usuario.
62
Basado en este patrón las clases de PHP se han creado de la
siguiente manera:

Existen archivos con la terminación Core que son los
controladores y se encargan de todas las interacciones entre
la capa de negocio y la vista.
63

Existen archivos con la terminación Model que son los
encargados exclusivamente de controlar la interacción con la
base de datos.

Existen archivos con la terminación View y se encargan
exclusivamente de proveer la vista.
64
La codificación de un archivo Core es la siguiente:
ComprasCore.php
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/floraltime2/includ
es/Model/ComprasModel.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/floraltime2/includ
es/Model/ProductoModel.php');
class ComprasCore
{
private $comprasModelHandler = null;
private $productoModelHandler = null;
private $comprasViewHandler = null
public function __construct()
{
$this->comprasModelHandler = new ComprasModel();
$this->comprasViewHandler = new ComprasView();
$this->commonViewHandler = new CommonView();
}
public function getHeaderLinksView()
{
return $this->commonViewHandler->getHeaderLinksView();
}
65
private function getAddNewCompraHtml()
{
$carguerasArray
>getAllCargueras();
=
$this->carguerasModelHandler-
$array = array();
foreach($carguerasArray as $carguera)
{
$array[]
=
array('id'=>$carguera['id_carguera'],'value'=>$carguera['nombre_carguera'
]);
}
$comboCargueras
=
>getComboHtml('cargueras_cmb',$array,'form_cmb');
$aerolineasArray
>getAllAerolineas();
=
$this-
$this->aerolineasModelHandler-
$array = array();
foreach($aerolineasArray as $aerolinea)
{
$array[]
=
array('id'=>$aerolinea['id_aerolinea'],'value'=>$aerolinea['nombre_aeroline
a']);
}
$comboAerolineas
=
>getComboHtml('aerolineas_cmb',$array,'form_cmb');
$clientesArray
>getAllClientes();
=
$array = array();
66
$this-
$this->clientesModelHandler-
foreach($clientesArray as $cliente)
{
$array[]
array('id'=>$cliente['id_clientes'],'value'=>$cliente['nombre_clientes']);
=
}
$comboClientes
=
>getComboHtml('clientes_cmb',$array,'form_cmb');
$estadosArray
>getEstados();
=
$this-
$this->estadosCompraModelHandler-
$comboEstadoHtml
>getEstadoCombo($estadosArray);
=
$this-
$firstRowHtml = $this->getRowHtml(1);
$html
=
$this->comprasViewHandler>getAddNewCompraView($comboEstadoHtml,$comboCargueras,$combo
Aerolineas,$comboClientes,$firstRowHtml);
return $html;
}
$estadoArray['id'] = $comboId_p;
$estadoArray['options'] = $estadoOptionsHtml;
$estadoComboHtml
=
$this->commonViewHandler>estadoComboView($estadoArray,$disabled);
return $estadoComboHtml;
}
67
}
?>
Existen dos archivos especializado en gestionar la conexión a la base de
datos, el primero simplemente define las constates de conexión a la base
de datos y el otro es usado por cada uno de los archivos con terminación
Model, la codificación de los mismos es la siguiente.
db_constants.php
<?php
define("DB_HOST", "localhost");
define("DB_USER", "user");
define("DB_PSWD", "pass");
define("DB_NAME", "nombre_base_de_datos");
?>
DAO.php
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/floraltime2/includes/db_
constants.php');
//Clase para conectarse a la db
class DAO
{
private $recordSet;
private $sql;
private $numRows;
private $insertedId;
private $databaseConnection = NULL;
public function __construct()
{
//session_start();
$this->resetDAO();
}
68
public function resetDAO()
{
$this->recordSet = NULL;
$this->sql = NULL;
$this->numRows = NULL;
$this->insertedId = NULL;
}
public function setQuery($sql)
{
$this->sql = $sql;
}
public function getRecordSet()
{
return $this->recordSet;
}
public function getNumRows()
{
return $this->numRows;
}
public function getInsertedId()
{
69
return $this->insertedId;
}
public function throwQueryError($functionName, $query)
{
$string = "Failure: Function =>".$functionName." - Query:
".$query;
throw new Exception($string);
}
public function connect()
{
try
{
$this->databaseConnection
mysqli_connect(DB_HOST, DB_USER, DB_PSWD, DB_NAME);
=
//$_SESSION["dbh"] = $this->databaseConnection;
}
catch(Exception $e)
{
//$_SESSION["dbh"] = NULL;
$this->closeConnection();
$this->throwQueryError('connect', $e->getMessage());
}
}
70
private function query($queryText)
{
try
{
$result = NULL;
$this->connect();
$result
>databaseConnection,$queryText);
=
mysqli_query($this-
}
catch(Exception $e)
{
$result = NULL;
$this->closeConnection();
$this->throwQueryError('query', $e->getMessage());
}
return $result;
}
private function closeConnection()
{
mysqli_close($this->databaseConnection);
}
public function executeQuery($populateArray = true)
{
71
$resultSet = NULL;
$dataset = $this->query($this->sql);
//Do we have an insert or replace query?
if (stristr($this->sql, "insert") !== FALSE || stristr($this->sql,
"replace") !== FALSE)
{
$this->insertedId
>databaseConnection);
=
mysqli_insert_id($this-
}
elseif(is_object($dataset))
{
$this->numRows = mysqli_num_rows($dataset);
//Populate data
if($populateArray == true)
{
$resultSet = array();
while($row = mysqli_fetch_assoc($dataset))
{
$resultSet [] = $row;
}
}
else
{
$resultSet = $dataset;
}
}
72
else
{
//is boolean
$resultSet = $dataset;
}
$this->recordSet = $resultSet;
$this->closeConnection();
return $this->recordSet;
}
public function cleanSpecialCharacters($string_p)
{
$this->connect();
return
>databaseConnection, $string_p);
mysqli_real_escape_string($this-
}
}
?>
Esta es la implementación de un archivo con terminación Model.
EstadosCompraModel.php
<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/floraltime2/includes/DA
O.php');
class EstadosCompraModel
{
73
private $db_handler = NULL;
public function __construct()
{
$this->db_handler = new DAO();
}
/*
* Funcion
*
getEstados - Obtiene todos los estados
* Retorna
*
Un arreglo con los datos de todos los estados
*/
public function getEstados()
{
$sql = "SELECT id_estados_compra, estado_compra
FROM estados_compra";
$this->db_handler->setQuery($sql);
$result = $this->db_handler->executeQuery();
return $result;
}
public function getEstadoCompraNameById($estadoId)
{
$sql = "SELECT estado_compra
FROM estados_compra
WHERE id_estados_compra = '".$estadoId."'";
$this->db_handler->setQuery($sql);
$result = $this->db_handler->executeQuery();
return $result[0]['estado_compra'];
}
74
}
?>
Esta es la implementación de una archivo con terminación View
DimensionesView.php
<?php
class DimensionesView
{
public function __construct()
{
}
private function parseTemplates($htmlCode,$placeHolders)
{
$output = '';
if(!empty($htmlCode) && count($placeHolders) > 0)
{
foreach($placeHolders as $key => $value)
{
$htmlCode
str_replace("###$key###",$value,$htmlCode);
}
$output = $htmlCode;
}
return $output;
}
75
=
private function mainResultsTemplate()
{
$html = '<div id="results">
<table id="main-table">
###headers###
###results###
</table>
</div>';
return $html;
}
public function mainResultsView($data)
{
$htmlCode = $this->mainResultsTemplate();
$placeHolders = array("headers"=>$data['headers'],
"results"=>$data['results']);
$html = $this->parseTemplates($htmlCode,$placeHolders);
return $html;
}
public function resultsHeaderView()
{
76
$htmlCode = $this->resultsHeaderTemplate();
return $htmlCode;
}
private function resultsHeaderTemplate()
{
$html = '<tr id="header-results">
<td id="header0" class="header"></td>
<td
id="header1"
<td
id="header2"
class="header">Dimension</td>
class="header">Estado</td>
</tr>';
return $html;
}
private function detailResultsTemplate()
{
$html = '<tr class="###color### resultRow" id="row_###id###">
<td><input
type="checkbox"
id="row_###id###" name="rows[]" class="textColumn" value="###id###"
/></td>
<td><input
id="nombre_###id###"
class="textColumn
value="###nombre###" readonly="readonly" /></td>
type="text"
textColumn1"
<td>###estado_combo###</td>
77
</tr>';
return $html;
}
public function detailResultsView($data)
{
$htmlCode = $this->detailResultsTemplate();
$placeHolders = array("id"=>$data['id'],
"nombre"=>$data['nombre'],
"estado_combo"=>$data['estado_combo'],
"color"=>$data['color']);
$html = $this->parseTemplates($htmlCode,$placeHolders);
return $html;
}
private function getAddNewDimensionTemplate()
{
$html = '<div id="dialog-form" title="Nueva Dimension">
<p class="validateTips">* = Campos
requeridos.</p>
<br/>
78
<form
id="form_new_record"
name="form_new_record">
<label
for="name"
class="txt_label">Nombre</label>
<input type="text" name="name"
id="name" class="form_txt" />
<span class="required">*</span>
<label
for="estado"
class="txt_label">Estado</label>
###estado_combo###
<input
name="guardarNuevo"
id="guardarNuevo"
class="form_button ui-corner-all" />
type="button"
value="Guardar"
<input
type="button"
name="cancelar" id="cancelar" value="Cancelar" class="form_button uicorner-all" />
</form>
</div>';
return $html;
}
public function getAddNewDimensionView($estadoCombo)
{
$htmlCode = $this->getAddNewDimensionTemplate();
$placeHolders = array("estado_combo"=>$estadoCombo);
$html = $this->parseTemplates($htmlCode,$placeHolders);
return $html;
}
79
}
?>
En este proyecto se usó JavaScript y al ser este un lenguaje de
programación que se ejecuta en el browser tiene la ventaja de ser muy
liviano. Se ha tratado de emular el patrón de diseño de MVC pero en
JavaScript.
Así existen 3 archivos Controller, Modules y Sandbox. Los archivos
Controller se encargan de proveer las funcionalidades por ejemplo de una
librería en este caso JQuery, además se encarga de controlar a sus
Modules, los cuales representan porciones de una página web que
realizan cierta acción, por ejemplo si una página posee un carrusel de
fotos, dicho carrusel debe ser un Module. Y finalmente el Sandbox que es
el encargado de comunicar a los Modules con su único controlador es
decir el Controller.
De esta manera ha tratado de estructurar el código de JavaScript, de igual
manera se hizo uso de Programación Orientada a Objetos en JavaScript.
Esta es la forma de crear clases en JavaScript
var DimensionesCore = function()
{
var self = this;
var instanceActionButtonsModule = null;
self.resultsRowModuleInstanceArray = null;
var
createActionButtonsModule
function(moduleId_p,data_p,sandbox_p)
{
var instance = null;
instance = new ActionButtonsModule();
instance.init(moduleId_p,data_p,sandbox_p);
return instance;
};
80
=
var startActionButtonsModuleHandler = function()
{
var data_p = null;
var sandbox = new DimensionesSandbox();
sandbox.init(self);
instanceActionButtonsModule
=
createActionButtonsModule("ActionButtonsModuleId", data_p, sandbox);
};
};
81
DIAGRAMA FISICO DE LA BASE DE DATOS
82
83