Vous êtes sur la page 1sur 210

1

INSTITUTO TECNOLGICO SUPERIOR


DE PUERTO VALLARTA











Protocolo de Investigacin:
DESARROLLO DE SISTEMA WEB PARA EL CONTROL Y
ADMINISTRACIN DEL COTO RINCON DEL CIELO.



Carrera
Ingeniera en Sistemas Computacionales

Autores
Juan Rael Corrales Arellano (06020370)
Ventura Arreguin Rodrguez (06020538)
Rosa Isela Ortega Ceja (06020164)







Puerto Vallarta, Jalisco Mxico.
2
INDICE


DEDICATORIA 2


AGRADECIMIENTO 3


INDICE 4


CAPITULO 1 DESCRIPCION DEL PROBLEMA 8

1.1 INTRODUCCION 8

1.2 JUSTIFICACION 8

1.3 OBJETIVOS DE LA INVESTIGACION 13
1.3.1 OBJETIVO GENERAL 13
1.3.2 OBJETIVOS ESPECIFICOS 13

1.4. PROBLEMAS A RESOLVER PRIORIZANDOLOS 13
1.4.1 PLANTEAMIENTO DEL PROBLEMA 13

1.5 ALCANCES Y LIMITACIONES 15


CAPITULO 2. FUNDAMENTO TEORICO 16

2.1 MARCO TERICO 16

2.2 DEFINICIN DE CONCEPTOS 19
Diagrama de Secuencia: Muestra la interaccin de un conjunto de objetos en una aplicacin a travs
del tiempo y se modela para cada caso de uso. 21


CAPITULO 3. PROCEDIMIENTO Y DESCRIPCION DE LAS ACTIVIDADES
REALIZADAS. 23

3.1 PROCEDIMIENTO Y DESCRIPCION DE LAS ACTIVIDADES REALIZADAS. 23


CAPITULO 4. RESULTADOS DEL PROGRAMA. 27

4.1 Manual de usuario del Sistema Web para el control y administracin del coto Rincn
del Cielo. 27

4.1.1 Acceso al sistema. 27

4.1.2 Vista administrador del coto. 27

4.1.3 Opciones del men. 30

4.1.4 Ingresos. 31

4.1.5 Reportes. 33

4.1.5.1 Reporte de usuarios 34
5
4.1.5.2 Reporte Ingresos. 35

4.1.5.3 Reporte acumulado de deudores 36

4.1.5.4 Reporte de caja chica. 37

4.1.5.5 Recuperacin de mantenimiento de cuotas ordinarias. 37

4.1.5.6 Cuotas de mantenimiento pendientes de pagar. 38

4.1.5.7 Reportes Cuotas Mantenimiento con saldo a favor. 38

4.1.5.8 Reportes Intereses cuotas ordinarias. 39

4.1.5.9 Reportes Intereses cuotas extraordinarias. 39

4.1.6 Agenda. 40

4.1.7 Egresos. 41

4.1.7.1 Tabla egresos. 42

4.1.7.2 Caja chica. 42

4.1.8 Mantenimiento 44

4.1.8.1 Ingresos de Proveedores. 44

4.1.8.2 Muestra Proveedores. 45

4.1.8.3 Solicitud mantenimiento. 45

4.1.8.4 Reportes Mantenimiento 46

4.1.8.5 Solicitud Jardinera. 46

4.1.8.6 Reportes Jardinera. 47

4.1.9 Usuarios 47

4.1.9.1 Alta usuario. 48

4.2.1 Vista Inquilino (cliente) 50

4.2.1.1 Acceso al sistema. 50

4.2.1.2 Reportes. 52

4.2.1.3 Consulta de reportes clientes. 53

4.2.1.4 Perfil Cliente. 53

4.3.1 Vista Seguridad y Vigilancia 54

4.3.1.1 Acceso al sistema. 54

4.3.1.2 Reportes. 56
6
4.3.1.3 Bitcora. 57

4.3.1.4 Alta de Ingreso de Bitcora. 57

4.3.1.5 Salir 58


CAPITULO 5. DISEO Y DIAGRAMAS 58

5.1 Casos de uso 58

5.2 Diagramas de clases. 65


CAPITULO 6. DESARROLLO 69

6.1 Aplicacin 69
6.1 Configuracion 70
6.2 Vistas 72
6.3 Mdulos 73

6.2 Controller 115
6.2.1 Ajax 115
6.2.2 Control 117
6.2.3 Log 131
6.2.4 Plugin 135
6.2.5 Seguridad 139
Usuario 141
6.2.7 Funciones 154
6.2.8 Optimizar 162
6.2.9 Sistema 162

6.3 Model 166
6.3.1 ORM (Manejador de Conexiones a Base de datos) 166
6.3.2 Men 185
6.3.3 Mdulos 185
6.3.4 Redirecciones 185

6.4 View 193
6.4.1 Clases 193


CAPITULO 7 BASE DE DATOS. 202

7.1.1 Agenda 202

7.1.2 Bitacora 203

7.1.3 Caja chica 203

7.1.4 Casas 204

7.1.5 dm 204

7.1.6 Egresos 204

7.1.6 Global 205
7
7.1.7 Grupos 205

7.1.8 Ingresos 206

7.1.9 Jardinera 206

7.2.1 Log 206

7.2.2 Reportes Mantenimiento 207

7.2.3 Proveedores 207

7.2.4 Reportes 208

7.2.5 Reportes Comentarios 208

7.2.5 Saldo Inicial 209

7.2.6 Reportes Comentarios 209

7.2.7 Servicios Egresos 209

7.2.8 Servicios Ingresos 210

7.2.9 Usuario 210


CONCLUSIONES 211

BIBLIOGRAFA 212
8
Capitulo 1 Descripcion del Problema

1.1 INTRODUCCION


El sistema web para la administracin y control para el coto Rincn del Cielo, el
cual surge con la necesidad de mantener a todos los habitantes del coto
informados y atendidos de forma correcta, atendiendo sus intereses como
miembros de una comunidad.

Proveer reportes que en todo momento estarn disponibles para ser
consultados, por los usuarios. Generalmente las personas quieren saber dnde
queda su dinero y donde se invierte, por lo que el sistema los tiene siempre
visibles.

Las empresas adems necesitan tener a los departamentos controlados, y para
saber esto, necesitamos documentar todas las actividades que se realizan, el
cual proveer de herramientas que ayuden a gestionar esta parte.

No podemos negar que muchos de los usuarios tambin pueden tener algunas
complicaciones por el uso del sistema, pero se cree que serian personas que
no estn acostumbradas a usar computadoras, es por eso que se crearon
mdulos que facilitan el uso dependiendo el tipo de usuari o es el perfil con el
que ingresaran al sistema.








1.2 JUSTIFICACION


El control se llevar a cabo mediante la generacin de formatos los cuales
contendrn informacin de los siguientes puntos:
Jardinera.
Mantenimiento General.
Seguridad y Vigilancia.
9
Jardinera.- Mantendr un formato el cual contendr un cronograma de
actividades, el cual llevara el control de fertilizantes y fumigadas, este formato
pretende hacer cumplir los puntos mencionados ya que se estar monitoreando
para un optimo cumplimiento, se podr ir capturando el avance de estas
actividades, mostrara anomalas las cuales se les puede hacer saber o darse
cuenta el administrador de variaciones en cuanto a reas que tienen que ser
contempladas.


Mantenimiento General.- Llevara el control de trabajos de electricidad,
plomera, arbolado y pintura, como para esto se realizaran formatos y se
incluir los existentes en el cual se generan ordenes de trabajo los cuales
estarn autorizados por los habitantes del coto con anticipacin y se les harn
saber o publicar a todos los habitantes del coto, as como en las juntas que se
lleven a cabo cuando sea necesarias.


Seguridad y Vigilancia.- se realizaran formatos y se adaptaran los ya existentes
en el coto los cuales estn previstos por mencionar algunos, un manual de
procedimientos de seguridad el cual se genera un formato electrnico para
llevar acabo procedimientos como por ejemplo la bitcora de registro de
visitantes para tener un banco de informacin y ver que tanto trafico de
personas ajenas al coto estn ingresando y as llevar el control de estos de
manera ms oportuna y confiable. El uso de la bitcora de forma electrnica es
una herramienta que al guardia de seguridad ayudara a perfeccionar y llevar un
correcto procedimiento de vigilancia en el coto.


La bitcora general de todas las incidencias y eventualidades que se llevan a
cabo en el coto rincn del cielo es de lo mas importantes ya que muchas de la
veces tiene que ver mucho con el habitante del coto, con la creacin de los
formatos electrnicos se podrn llevar paso a paso el registro de las personas
ajenas que salen del coto as como eventualidades como el dejar abuso de las
reas pblicas por los propios habitantes. Cabe mencionar que estas
incidencias se podrn levantar por parte de los habitantes como por la
administradora o el departamento de seguridad ya que este tipo de
10
inconvenientes se pretenden evitar dentro del coto, por seguridad y
conservacin de los bienes comunes del coto Rincn del Cielo.


La administracin del coto Rincn del Cielo se mejora y agiliza mediante la
creacin de procedimientos electrnicos para ayudar al administrador a llevar la
administracin de las siguientes actividades as como la generacin de reportes
que podrn estar a la mano para los habitantes del coto.
Ingresos (Interno, Reportes mensuales).

Egresos (Interno, Reportes mensuales).

o De los cuales los ingresos se dividen en:

Cuotas de mantenimiento (mensualidades).

Recuperacin de cartera (cobranza, deudores).

Deudores (Global).

Cuotas Adelantadas., no identificadas, sanciones.

Caja chica.

Otros ingresos.

Cuotas pendientes para pagar en el mes.

Otros movimientos (ajustes).

Supervisin de jardinera y mantenimiento general.

Supervisin del departamento de seguridad y vigilancia.

Inventario de mobiliario.

Inventario de archivo de computadora.


Los usuarios podrn acceder en cualquier lugar en base a una conexin a
internet y una computadora, de esa forma estar al tanto de las actividades que
se realizan todos los das o los movi mientos financieros que incumben a la
poblacin del coto.
Interaccin con usuarios y empleados


Mejor comunicacin con divisiones, empleados, asociados y en general
con todas las reas del coto.


Crear presencia web enfocada a servicio a tanto para los usuarios como
empleados.
11
Reduccin de costos en los rubros de comunicaciones, publicidad,
atencin a clientes, procesos administrativos, procesos de
comercializacin, entre otros.

Optimizar procesos de administracin y control de las actividades e
incidencias del coto.


El proyecto web que se realizara pretende administrar y controlar las diferentes
actividades e incidencias que se llevan a cabo dentro del coto rincn del cielo,
lo cual resultan de gran importancia en cuanto a la conducta y responsabilidad
de todos los habitantes de la zona por lo cual se diseara de manera objetiva y
concisa para que este se entienda de tal manera que sea transparente y a la
vez viable en la aceptacin correcta de las reglas internas las cuales sern
manejadas mediante procedimientos establecidos en el sistema web en
acuerdo con los habitantes del coto.


La forma de trabajar en organizaciones hoy en da algunas de forma web para
el manejo de sus procesos, requiere de tecnologa especializada que este a la
mano en todo momento, ya que permita obtener cierta informacin en todo
momento para la toma de decisiones ms acertadas y oportuna posible que
hace de la empresa a la vez 100% productiva por la versatilidad y confiabilidad
de los datos.


Con el desarrollo del sistema web para la administracin y control del coto
Rincn del Cielo de nuevo Vallarta el cual beneficiara a las personas habitantes
del coto mediante la administracin y control de incidencias que suceden en la
vida diaria, ya que se mantendr en constante monitoreo tanto econmico
como el manejo como la convivencia mutua de las personas por el uso de las
reas pblicas del coto y que son accesibles por todos.


La buena implementacin del proyecto y el buen manejo de su informacin ya
funcionando se pretende dar un impacto social en el cual se generalice en
todos los cotos existentes en la regin o el pas del modo que todos contemos
con esta tecnologa que indaga en la calidad de vida de las personas y estas
12
zonas privadas, en cuanto a la informacin que se obtenga pretende desafiar el
concepto de respeto hacia las personas o compaeros en un grupo social el
cual interactan de forma directa e indirecta da con da, mediante la
implementacin se pretender conocer y mostrar de forma transparente lo que
est sucediendo tanto para bien, como en lo que se tiene que poner inca pie
para mejorar como sociedad en el coto y as aumentar el valor de estos
mediante el mantenimiento y no alterar las modificaciones mediante el
complimiento de todos estos reglamentos y la fcil administracin el cual
ahorrara tiempo a la administracin para llevar a cabo otras tareas que el
sistemas podr proporcionar de manera fcil y sencilla para la asignacin de
actividades dentro de las instalaciones el cual sern necesarias para la
productividad de los recursos humanos y materiales que pertenecen al los
cotos.
Con la aplicacin del sistema web para la administracin y control de los cotos
se fortalecer un vinculo entre la administracin correcta del conto de la forma
ms humana y que este pueda mejorar la convivencia entre todas las personas
mediante foros de discusin, encuestas, planeacin de proyectos a corto y
largo plazo para el coto, la implementacin de seguridad avanzada mediante el
monitoreo de las reas por todo el coto entre otras cosas.


Uno de los beneficiados ser el cuerpo de seguridad de los cotos ya que
mediante este sistema les proporcionara la metodologa para darle seguimiento
a los reportes y as como tambin el control exacto de personas externas al
coto mediante un registro pertinente de los datos relevantes.


El sistema adems proporciona una gama de opciones para los estatus de las
incidencias y el seguimiento que se le da ya que de esa forma se obtendr el
seguimiento adecuado a los reportes generados por si se estn violando de
cierta forma.
13
1.3 OBJETIVOS DE LA INVESTIGACION

1.3.1 OBJETIVO GENERAL
Desarrollar un sistema web para la administracin y control de las actividades

e incidencias del coto Rincn del Cielo.




1.3.2 OBJETIVOS ESPECIFICOS


Obtener y analizar requerimientos para la elaboracin del di seo y
mdulos de la interfaz del sistema web.
Desarrollar la base de datos para la alimentacin de informacin.

Disear una interfaz de usuario agradable.

Desarrollar cdigo bien estructurado y claro para un ptimo desempeo
funcional del sistema.
Adaptar al sistema los mtodos, tcnicas y formatos que lleva a cabo la
administracin y departamento de vigilancia de forma electrnica e
incluirlos en el sistema web.
Mantener su informacin organizada y respaldada para la seguridad.

Mostrar reportes en tiempo y forma de los estatus de los habitantes en
cuanto a sus bienes y servicios.
Construir pruebas unitarias de la aplicacin web.

Implementar la aplicacin web.


1.4. PROBLEMAS A RESOLVER PRIORIZANDOLOS



1.4.1 PLANTEAMIENTO DEL PROBLEMA


1. Debido a la ausencia de un sistema que lleve tanto la administracin y
control, no se pueden cubrir los objetivos de bien comn dentro del coto ya que
la mayora de las personas habitantes de este lugar cuentan con la
disponibilidad de uso de las reas pblicas del lugar como lo son; Calles, reas
de albercas, casa club, debido a esto se generan descontentos a los
habitantes dentro del lugar ya que no se puede controlar el uso de estas reas
mencionadas de forma responsable y equitativa para todas la personas que
14
viven en el coto, en cuanto a la especificacin de las reglas que estas deben de
seguirse para el buen uso de estas reas. El impacto a la calidad de vida del
lugar recae en la convivencia de los habitantes y el bienestar de sus familias.


2. En el coto existen reglas que estn a probadas por la comunidad que habita
el coto rincn del cielo la cuales se establece que deben ser seguidas y
respetadas por toda la comunidad del coto por seguridad de ellos y por sus
bienes que estos representan dentro de las instalaciones del lugar.


3. Actualmente los mtodos que el departamento de seguridad son de lo ms
bsicos, lo que provoca una baja eficacia de manejo de los datos que se van
recabando de acuerdo a los resultados o manejo de incidencias en cuanto al
coto y las actividades se descuidan o se pueden extraviar muy fcilmente,
arriesgando la versatilidad y confiabilidad con la que deben de respaldarse
ellos mismos para las aclaraciones entre los habitantes, cabe destacar que no
se puede abarcar en su totalidad las reas, referente a lo que est pasando en
todo momento, el uso de bitcora adems de no ser tan confiable tanto para los
usuarios como para la calidad o validez de la informacin afecta principalmente
en el costo ya que se utiliza demasiado y se desperdicia en exceso este
recurso.


4. Los cotos hoy en da son administrados por una persona la cual muchas de
las veces puede desconocer cierta informacin o puede sufrir perdida tanto de
informacin, como recursos econmicos que muy probablemente pertenecen a
la comunidad del coto, la forma de manejar este tipo de trabajo, es sumamente
bsico y las demanda que el coto necesitara en un futuro pueden ser mucho
ms exigentes en cuanto los resultados que se presentan. La muestra de
resultados hacia los habitantes del coto no son transparentes debido a que no
se muestran los resultado en periodos ms cortos y monitoreo constantes de
ingresos y egresos de estos recursos, en cuanto a las propiedades algunos de
los habitantes tienen pagos muy atrasados debido que son muchos y
posteriormente tiende a pasrsele por alto al administrador en caso de que la
persona no viva ah o que no se lleve el control exacto de estos pagos teniendo
accesos a ltimas modificaciones de pago de forma inmediata y constantes.
15

5. Las consecuencias de la falta de optimizacin de los procesos
administrativos y control de reglas que manejan actualmente los de seguridad
de los cotos mantienen cierta desventaja de reportes a las demandas para el
manejo de informacin, adems otro de los puntos que ms a tae a todos los
cotos son el acceso a la informacin de forma confiable, precisa y
oportuna(integridad de los datos), esto repercute en la posibilidad de compartir
informacin entre todos los habitantes del coto, administrador y el
departamento de seguridad y vigilancia del coto de forma transparente.


6. Finalmente combinando todos estos elementos recae en el principal
problema de que tiene los cotos en la convivencia mutua y calidad de vida de
todos los habitantes de los cotos, bajo la irresponsabilidad que muestran
algunos vecinos en cuanto al rompi miento de reglas que en un futuro repercute
en el funcionamiento o necesidades del coto, el hecho de no seguirlas las
personas se sienten un poco molestas ya que no se puede hacer nada al
respecto o no tiene un mtodo eficiente de que se apliquen medidas de forma
que sea los ms civilizada y transparente posible, mientras tanto seguirn
pasando estos inconvenientes.



1.5 ALCANCES Y LIMITACIONES
Se entregara hasta la fase de desarrollo lo cual pretende incorporar informacin
detallada y funcional de las caractersticas del sistema web.


El tipo de investigacin que se realizara es de tipo descriptiva ya que se
especificaran los datos mediante la observacin de los eventos que se lleven a
cabo dentro del coto, en cuanto a las observaciones de conductas, las
caractersticas, los factores y los procedimientos entre otras variables de
fenmenos o hechos.


Se da un enfoque cuantitativo por que se basa en un problema determinado el
cual se resolver mediante la recoleccin de datos el cual se elaboran
encuestas y graficas que puedan representar la magnitud del problema el cual
16
pretende satisfacer la teora planteada respecto al problema que se est
presentando.
Se presentaran problemas en cuanto los habitantes trate de burlar este sistema
pero se pretende que sea lo ms seguro y no se puedan modificar esos datos a
menos de que sean confirmados por el comit de los cotos o la administradora
del lugar, los procedimientos aplicados entraran de manera directa con cada
usuario del coto para que cada uno pueda hacer todo tipo comentarios con el
sistema y de esta forma se pueda dar el uso correcto para el resultado
esperado en un futuro.


Un problema al que se enfrenta el sistema se debe a que se puede tener
algunos casos de analfabetismo, esto se refiere en cuanto al uso de la
computadora como herramienta para el uso del sistema web, adems de
capacitar a los usuarios para que puedan conocer a la perfeccin, as que se
deber tomar un tiempo definido para la capacitacin.



CAPITULO 2. FUNDAMENTO TEORICO



2.1 MARCO TERICO
El desarrollo de este proyecto se fomenta en los nuevos desarrollos del futuro
de la informacin y la forma en que estas tecnologas nos pueden ayudar y
facilitar la vida.
Pedro Galvn nos dice que las nuevas tecnologas son enfocadas a la nube,
dndonos el acceso a nuestra informacin y nuestras aplicaciones sin la
necesidad de realizar una instalacin o configuracin, debido a que estas estn
realizadas para estar disponibles las 24 horas y desde cualquier dispositivo.
En el desarrollo del proyecto es necesario la implementacin del servidor que
ser realizado en Apache que como nos dice su fundacin desarrolladora The
Apache Software Foundation este es el servidor numero uno de internet,
Servidor HTTP Apache es un esfuerzo para desarrollar y mantener un Servidor
HTTP open-source para sistemas operativos modernos incluyendo UNIX y
Windows NT. La meta de este proyecto es para proporcionar un servidor
17
seguro, eficiente y extensible que provea servicios http en sincrona con los

Estndares http actuales.

Para la programacin del sistema, se usara PHP su desarrollador Zend
Technologies nos lo presenta como un lenguaje de programacin interpretado,
diseado originalmente para la creacin de pginas web dinmicas. En este
lenguaje usaremos Programacin Orientada a Objetos, que segn Greiff La
Programacin Orientada a Objetos desde el punto de vista computacional "es
un mtodo de implementacin en el cul los programas son organizados como
grupos cooperativos de objetos, cada uno de los cuales representa una
instancia de alguna clase, y estas clases, todas son miembros de una jerarqua
de clases unidas va relaciones de herencia".


Para el diseo y desarrollo de las interfaces, que son parte importante en todo
sistema, dndole a los usuarios una forma simple y eficiente de uso del
sistema, o en caso que el sistema este mal diseado, haciendo que su uso sea
imposible, para realizar estas acciones, se realizaran con el lenguaje XHTML,
CSS y Javascript, siendo estos los lenguajes estndares segn la W3C que es
la que empresa encargada de estos estndares, usando Jquery un framework
el cual nos permite realizar el uso y optimizacin de este lenguaje y AJAX
siendo esto una tcnica que nos permitir darle ms dinamismo al sistema y
mejorar as el uso del cliente ante el sistema.


Para la programacin de este sistema ser usado un IDE muy utilizado llamado
Netbeans para realizar la programacin de este sistema, siendo uno de los ms
utilizado no solo para los lenguajes de este proyecto, sino, para varios mas,
este IDE nos da algunos beneficios extras, como la validacin de el cdigo y un
sistema de extensiones, en la cual nos permite agregar cosas extras para su
uso, tales como manejo FTP, subversin o git.


Para la capacitacin de los clientes, usaremos la tecnologa, creando videos,
por la misma naturaleza del proyecto, esta es la mejor forma de capacitacin,
dndole a los clientes, una forma ms practica al poder observar en un video la
forma de utilizar el sistema, adems, de agregar un sistema de preguntas y
respuestas, para que los mismos clientes puedan realizar sus preguntas.
18

Debido al tipo de servidor y la plataforma a utilizar, la mejor opcin para realizar
el almacenamiento de la informacin es mediante una base de datos especfica
Mysql, Oracle quien es su propietario nos lo describe como, un sistema de
gestin de base de datos relacional, multihilo y multiusuario con ms de seis
millones de instalaciones. Este servidor es el ms usado en el mundo, debido a
que es multiplataforma, dndonos la oportunidad de instalarlo en varias
Sistemas Operativos sin ningn problema.
Para realizar las pruebas del sistema, se utilizaran las pruebas A/B, estas nos
indican que tan optimo es la interfaz y nos dice si es necesario modificarla para
mejorar el diseo y la experiencia que tiene el cliente en el sistema, A su vez,
usaremos pruebas de codificacin, viendo que tan optimo es el cdigo y
buscando errores en la funcionalidad del cdigo, en dado caso de encontrar
formas de mejorar, se reparara en el prototipo prximo.
El sistema ser creado para poder ser visualizado en los dispositivos masivos,
siendo estos dispositivos porttiles y Computadoras Personales, debido a que
no todo mundo tiene computadora, pero el celular es uno de los dispositivos
mas difundido segn Admod Se estima que la cantidad de Ipods en Mxico es
de aproximadamente 327,000, para esto se disearan varias interfaces que
sern creadas especialmente para cada dispositivo, permitindonos tomar en
cuenta las ventajas de ese dispositivo y a su vez, resolviendo las desventajas.
Pedro Galvn nos dice que debido a los nuevos mtodos de programacin y a
la velocidad con que este entorno avanza, tomar metodologas de desarrollo de
software antiguas ya no es lo ms apto, estas metodologas dicen que un
sistema se desarrolla en 18 meses, realizando el ciclo de vida del software en
este tiempo, pero debido a las nuevas eras, en 6 meses, un software creado ya
es obsoleto y por tanto, la nueva era pide programador que realicen este ciclo
en menos y menos tiempo, dando as ms rapidez a la creacin, pruebas y
prximas actualizaciones de estos software, tomando esto en cuanta,
usaremos la metodologa RAD Rapid Application Development por sus siglas
en ingles, es un proceso de desarrollo de software, desarrollado inicialmente
por James Martin en 1980. El mtodo comprende el desarrollo iterativo, la
construccin de prototipos y el uso de utilidades CASE (Computer Aided
19
Software Engineering). Tradicionalmente, el desarrollo rpido de aplicaciones
tiende a englobar tambin la usabilidad, utilidad y la rapidez de ejecucin.


2.2 MARCO REFERENCIAL

Existen proyectos similares comercialmente, se nombraran a continuacin:

SAARI de la empresa del mismo nombre, es un Software de Gestin
diseado y elaborado para empresas que arrienden el material
inmueble. En este caso, esta aplicacin no administra cotos o
condominios privados, si no el arrendamiento de estos. Esta Aplicacin
tiene un costo de $ 249 a $399 dlares, por la licencia.
Streetfolio, similar a la anterior, esta es para la Gestin de productos
inmuebles, enfocndose en la renta de los inmuebles.
No se encontr ninguna aplicacin que se enfocara en la actividad que este
proyecto realizara, ya que se enfocara en los cotos privados, dando
herramientas para la mejora en la administracin y seguridad de estos.









2.2 DEFINICIN DE CONCEPTOS

PHP: es un lenguaje de programacin interpretado, diseado originalmente
para la creacin de pginas web dinmicas. Es usado principalmente para la
interpretacin del lado del servidor (server-side scripting) pero actualmente
puede ser utilizado desde una interfaz de lnea de comandos o en la creacin
de otros tipos de programas incluyendo aplicaciones con interfaz grfica
usando las bibliotecas Qt o GTK+.

Sistema Operativo: es el soporte lgico imprescindible para convertir el
soporte fsico de un computador en una maquina utilizable por el usuario.

Servidor: Es una computadora que, formando parte de una red, provee
servicios a otras computadoras denominadas clientes.
20
Ajax: Es una tcnica de desarrollo web para crear aplicaciones interactivas o
RIA (Rich Internet Applications). Estas aplicaciones se ejecutan en el cliente, es
decir, en el navegador de los usuarios mientras se mantiene la comunicacin
asncrona con el servidor en segundo plano.

XHTML: Es el lenguaje de marcado pensado para sustituir a HTML como
estndar para las pginas web. En su versin 1.0, XHTML es solamente la
versin XML de HTML, por lo que tiene, bsicamente, las mismas
funcionalidades, pero cumple las especificaciones, ms estrictas, de XML.

Hojas de estilo en cascada: CSS es un lenguaje usado para definir la
presentacin de un documento estructurado escrito en HTML o XML (y por
extensin en XHTML).

Calidad: Es un conjunto de propiedades y de caractersticas de un producto o
servicio, que le confieren aptitud para satisfacer unas necesidades explcitas o
implcitas (ISO 8402).
Tecnologa: Tecnologa es el conjunto de habilidades que permiten construir
objetos y mquinas para adaptar el medio y satisfacer nuestras necesidades.
FTP: Es un protocolo de red para la transferencia de archivos entre sistemas
conectados a una red TCP (Transmission Control Protocol).
UML: Es el lenguaje de modelado de sistemas de software ms conocido y
utilizado en la actualidad; est respaldado por el OMG (Object Management
Group). Es un lenguaje grfico para visualizar, especificar, construir y
documentar un sistema.
Colaboracin (en UML): UML incluye el concepto de colaboracin para
representar las interacciones entre objetos que juegan roles, con el objetivo de
realizar cierta tarea, tal como un caso de uso o una operacin.
Diagrama de Clases: es un tipo de diagrama esttico que describe la

estructura de un sistema mostrando sus clases, atributos y las relaciones entre
ellos. Los diagramas de clases son utilizados durante el proceso de anlisis y
diseo de los sistemas, donde se crea el diseo conceptual de la informacin
que se manejar en el sistema, y los componentes que se encargaran del
funcionamiento y la relacin entre uno y otro.
21
Diagrama de Componentes: representa cmo un sistema de software es
dividido en componentes y muestra las dependencias entre estos
componentes. Los componentes fsicos incluyen archivos,
cabeceras, bibliotecas compartidas, mdulos, ejecutables, o paquetes. Los
diagramas de Componentes prevalecen en el campo de la arquitectura de
software pero pueden ser usados para modelar y documentar cualquier
arquitectura de sistema.
Diagrama de casos de uso: Es una especie de diagrama de comportamiento.

Documentan el comportamiento de un sistema desde el punto de vista del
usuario. Por lo tanto los casos de uso determinan los requisitos funcionales del
sistema, es decir, representan las funciones que un sistema puede ejecutar.
Programacin Orientada a Objetos: es un paradigma de programacin que
usa objetos y sus interacciones, para disear aplicaciones y
programas informticos. Est basado en varias tcnicas,
incluyendo herencia, abstraccin, polimorfismo y encapsulamiento. Su uso se
populariz a principios de la dcada de los aos 1990. En la actualidad, existe
variedad de lenguajes de programacin que soportan la orientacin a objetos.


Herramientas CASE: son diversas aplicaciones informticas destinadas a
aumentar la productividad en el desarrollo de software reduciendo el coste de
las mismas en trminos de tiempo y de dinero.

Diagrama de Secuencia: Muestra la interaccin de un conjunto de objetos en
una aplicacin a travs del tiempo y se modela para cada caso de uso.
Hosting: Servicio que prestan algunas empresas encargadas de tener
accesibles los servicios de cada sitio, es decir, es el espacio que t poseers
en Internet. Es el servicio que te permite tener los archivos de tu pgina en un
servidor de internet.
Framework: es una estructura conceptual y tecnolgica de soporte definida,

normalmente con artefactos o mdulos de software concretos, con base en la
cual otro proyecto de software puede ser organizado y desarrollado.
Tpicamente, puede incluir soporte de programas, bibliotecas y un lenguaje
interpretado entre otros programas para ayudar a desarrollar y unir los
diferentes componentes de un proyecto.
22
Jquery: Es una biblioteca o framework de Javascript, creada inicialmente
por John Resig, que permite simplificar la manera de interactuar con los
documentos HTML, manipular el rbol DOM, manejar eventos, desarrollar
animaciones y agregar interaccin con la tcnica AJAX a pginas web.
Javascript: Es un lenguaje de programacin interpretado, dialecto del
estndar ECMAScript. Se define como orientado a objetos,3basado en
prototipos, imperativo, dbilmente tipado y dinmico.
MySql: es un sistema de gestin de bases de

datos relacional, multihilo y multiusuario con ms de seis millones de
instalaciones. MySQL AB desde enero de 2008 una subsidiaria de Sun
Microsystems y sta a su vez de Oracle Corporation desde abril de 2009
desarrolla MySQL como software libre en un esquema de licenciamiento dual.
Base de Datos: Es un conjunto de datos pertenecientes a un mismo contexto y
almacenados sistemticamente para su posterior uso. En este sentido, una
biblioteca puede considerarse una base de datos compuesta en su mayora por
documentos y textos impresos en papel e indexados para su consulta. En la
actualidad, y debido al desarrollo tecnolgico de campos como la informtica y
la electrnica, la mayora de las bases de datos estn en formato digital
(electrnico), que ofrece un amplio rango de soluciones al problema de
almacenar datos.
Entorno de Desarrollo Integrado: Entorno de desarrollo integrado (en

ingls integrated development environment) es un programa
informtico compuesto por un conjunto de herramientas de programacin.
DOM: es esencialmente una interfaz de programacin de aplicaciones (API)

que proporciona un conjunto estndar de objetos para representar
documentos HTML y XML, un modelo estndar sobre cmo pueden
combinarse dichos objetos, y una interfaz estndar para acceder a ellos y
manipularlos. A travs del DOM, los programas pueden acceder y modificar el
contenido, estructura y estilo de los documentos HTML y XML, que es para lo
que se dise principalmente.
Camtasia Studio: Es un programa que permite grabar la pantalla del

ordenador en vdeo, es decir, captura todo lo que va ocurriendo por la pantalla
y lo guarda en un archivo en formato de vdeo. Pero no slo se queda ah, sino
23
que adems proporciona todas las herramientas de edicin y produccin del
vdeo, para crear videos con una calidad ideal y en cualquier formato.
Xampp: es una forma fcil de instalar la distribucin Apache que contiene
MySQL, PHP y Perl. XAMPP es realmente simple de instalar y usar - basta
descargarlo, extraerlo y comienzar.
Filezilla: es un cliente FTP multiplataforma de cdigo abierto y software libre,

licenciado bajo la Licencia Pblica General de GNU. Soporta los
protocolos FTP, SFTP y FTP sobre SSL/TLS (FTPS).
Software Libre: Es la denominacin del software que respeta la libertad de los

usuarios sobre su producto adquirido y, por tanto, una vez obtenido puede ser
usado, copiado, estudiado, modificado y redistribuido libremente. Segn la Free
Software Foundation, el software libre se refiere a la libertad de los usuarios
para ejecutar, copiar, distribuir, estudiar, modificar el software y distribuirlo
modificado.
Subversion: Es un sistema de control de versiones diseado especficamente
para reemplazar al popular CVS. Es software libre bajo una licencia de
tipo Apache/BSD y se le conoce tambin como svn por ser el nombre de la
herramienta utilizada en la lnea de rdenes.


CAPITULO 3. PROCEDIMIENTO Y DESCRIPCION DE LAS ACTIVIDADES
REALIZADAS.


3.1 PROCEDIMIENTO Y DESCRIPCION DE LAS ACTIVIDADES
REALIZADAS.

Obtencin de requerimientos: hacer cuestionarios que nos permitan obtener
informacin relevante sobre las caractersticas esenciales que debe de
contener el sistema web.


Anlisis de requerimientos obtenidos: analizar los datos obtenidos de los
cuestionarios aplicados dndoles forma y determinado las jerarquas,
funcionalidad y especificaciones que ellos estn marcando para as estar de
acuerdo con ellos y comenzar a trabajar en el sistema web con una visin del
producto final ms acertada.
24

Diagramas de secuencia, clases y casos de uso: se desarrollaran para ir
construyendo nuestro sistema en cuanto a la funcionalidad y la determinacin
de actividades u opciones que este tendr que desempear una vez
implementado.


Desarrollo de la base de datos: creacin de la base de datos la cual proveer
de informacin al sistema, esta se debe de disear de forma que se ajuste
perfectamente a las necesidades del sistema para que se pueda manipular de
forma fcil y eficiente.


Diseo de la interfaz grafica: creacin de una interfaz agradable y que baya
de acuerdo con los colores del coto Rincn del Cielo para que se homogneo
a las instalaciones del lugar en cuanto a la imagen, por otro lado la interfaz
debe de tener las opciones a la mano siempre disponibles, que sea fcil de
entender, por lo que buscaremos la mejor forma de presentarle los mdulos
para su fcil entendimiento y utilizacin tanto como a la administracin como a
los habitantes.


Creacin de cdigo funcional: trabajaremos con el paradigma de la POO
para la creacin y manipulacin del cdigo utilizado en el sistema web, esto
nos ayudara a eliminar muchas lneas de cdigo gracias a la reutilizacin de
funciones, clases objetos etc.


Entregas de prototipos: se entregaran prototipos de acuerdo a las fechas
establecidas, los cuales mostraran avances y se prestaran para las mejoras
que la administracin vaya sugiriendo en el desarrollo del sistema.


Pruebas Unitarias: estas pruebas se estarn haciendo en cuanto al anlisis
del cdigo para la revisin de cdigo y que este funcione correctamente
tomando estos mdulos pequeos del sistema para la implementacin de este
punto.
25
Diagramar: se realizaran diagramas de finales que ayuden al apoyo y consulta
de las funcionalidades del sistema web de forma especfica para posteriores
modificaciones del sistema.


Elaboracin de manual tcnico: servir de apoyo para consulta de opciones
y funcionalidades que el sistema manejara para el mejor aprovechamiento de
sus funciones, las cuales estarn aplicadas mediante l os requerimientos
establecidos anteriormente.


Implementacin del sistema web: se montara el sistema web en el hosting
previamente contratado.


Capacitacin al administrador del coto Rincn de Cielo: se capacitara al
personal y rea de seguridad y vigilancia para que conozcan y se familiaricen
con el sistema web.
Capacitacin a los habitantes del coto Rincn del Cielo: se capacitara a

los habitantes del coto rincn del cielo mediante videos que les servirn de
apoyo para la comprensin y manejo del sistema.


Creacin de las cuentas de usuario: estas cuentas se darn de alta por parte
del administrador del sistema por seguridad y confidencialidad que el sistema
debe manejar por parte del usuario.


Monitoreo del sistema: monitorear el desempeo en cuanto a la utilizacin de
los usuarios y la administracin para determinar un ptimo desempeo en
cuanto a rapidez y fluidez de la informacin requerida.


Entrega del sistema: se le entregara cuentas de acceso para la realizacin de
respaldos de informacin, manipulacin de las caractersticas importantes del
sistema y cdigo para su futura modificacin.


Evaluacin de los riesgos y aplicacin de las herramientas
26
Se podra esperar tener problemas en cuanto a la capacitacin del personal
que utilizara en software ya que algunos de ellos no estn acostumbrado a la
utilizacin de una computadora.
En cuanto a sistemas operativos e infraestructura no se tendr inconveniente
ya que utilizan Microsoft XP o 7 lo que no importara tanto ya que no correr
directamente sobre el sistema operativo sino que se ejecuta desde un
navegador web por ejemplo: Internet Explorer, mozilla firefox, chrome, Opera
etc.
Aplicacin de herramientas

Obtencin y anlisis de requerimientos.

Cuestionarios.

Desarrollo de base de datos

MySql,PHPmyadmin,

Diseo de la interfaz grfica

Ajax, HTML5, JQUERY, PHP, NETBEANDS, JAVASCRIPT, CSS3,
NOTEPAD++, UML.
Creacin de cdigo

UML, PHP, MYSQL, NETBEANDS, POO.

Pruebas Unitarias.
NETBEANS.
Diagramas.
UML, Microsoft Office 2007

Creacin de manual tcnico.

Microsoft office 2007

Implementacin del sistema web.

HOSTING (Linux, Apache2, PHP & MySQL), filezilla, conexin a internet.

Capacitacin para utilizacin del sistema web.

Camtasia studio.
Monitoreo del Sistema.
PCs
Entrega del sistema.

CD, con el contenido y especificaciones para accesos al sistema para futuras
modificaciones.
27
CAPITULO 4. RESULTADOS DEL PROGRAMA.



4.1 Manual de usuario del Sistema Web para el control y administracin
del coto Rincn del Cielo.



4.1.1 Acceso al sistema.

4.1.2 Vista administrador del coto.


Al abrir el sistema le pedir un Nombre de usuario y contrasea como
autenticacin para poder validar que es un usuario permitido como se muestra
en la siguiente pantalla.




Debe ingresar su Nombre de usuario y contrasea como se muestra en la
imagen y dar clic en Enviar.
28



Si el usuario o la contrasea son incorrectos no te dejara entrar ya que al
momento de darle clic se redireccin a la ventana de login con los campos
vacios para que se vuelvan a ingresar.



Si solo llenas un campo ya sea Nombre de usuario o la contrasea te
aparecer un mensaje para que llenes los dos campos para poder continuar
con la validacin.
29



Si los datos ingresados son correctos te aparecer el siguiente men el cual
solo pertenece al perfil del administrador del coto.



30
4.1.3 Opciones del men.



Dashboard

Esta parte del men solo permite limpiar lo que se encuentra en las vistas.

Ingresos

Este apartado permitir ingresar dinero de los inquilinos a su base de datos de
los pagos por los diferentes servicios que les ofrece el coto.
Reportes.

En esta opcin se podrn consultar todos los reportes de usuarios as como de
los movimientos y manejo de los fondos del coto, y las aportaciones de los
inquilinos del coto.


Agenda.

En la agenda la administradora el coto podr asignar actividades tanto para ella
como para mantener informados a los inquilinos y departamento de seguridad
en futuras reuniones o actividades dentro del coto.
Egresos

En este aparado podrn ingresar todo el dinero que sale del coto, ingresando
los motivos de salida y el uso que se les esta dando.
Mantenimiento.

En esta opcin se darn de alta los trabajos de mantenimiento, jardinera y el
control de proveedores.
Usuarios.

Aqu se podrn dar de alta los usuarios, principalmente a los inquilinos del coto.
31
4.1.4 Ingresos.
En esta opcin podemos ver que aparece una parte donde ingresaremos el
nombre del inquilino.

En la opcin que aparece ingresaremos el nombre del inquilino esta tiene una
funcin de auto relleno y dar clic al nombre.

Al dar clic sobre el nombre seleccionado mostraremos el formulario de ingresos
en el cual cargaremos los datos de la siguiente manera.

32
A continuacin haremos el ingreso de este inquilino, para mostrar cmo se
deben de ver los datos antes de ingresarlos.


Una vez llenado damos clic en Ingresar. Cuando das clic en ingresar te
mandara un mensaje de que el ingreso se hizo satisfactoriamente.

33
4.1.5 Reportes.
Dentro del modulo de reportes, se llevara a cabo el seguimiento de usuarios e
ingresos que estos hacen.


En este modulo podemos ver la primera opcin que sirve para mandarle un
mensaje al inquilino por medio del numero de casa del inquilino.

34
4.1.5.1 Reporte de usuarios
Al elegir la opcin usuarios se cargan todos los reportes de todos los usuarios
que los hayan levantado.



Una vez cado el reporte del inquilino, el administrador puede contestarle de la
siguiente forma, dando clic en el botn responder como se muestra en la fig.

A continuacin damos clic en el botn Enviar para que se mande la respuesta
hacia el inquilino que lo levanto anteriormente.
35
Podemos ver como se asigna un nuevo comentario hecho por el administrador
para dar seguimiento a la peticin del inquilino en la siguiente figura.




4.1.5.2 Reporte Ingresos.
Damos clic en la opcin Reporte de Ingresos el cual nos dar los ingresos que
se han hecho en todo el mes como se muestra a continuacin.

36
En los reportes una vez ingresado podemos modificarlos en caso de algn
error, y se hace dando clic en la M que esta al principio de cada lnea.


Una vez hecha la modificacin necesaria, dar clic en el botn modificar, para
afectar la tabla.

4.1.5.3 Reporte acumulado de deudores
Este muestra el acumulado de los inquilinos y ah se puede dar cuanta de los
inquilinos que deben demasiado y poder mandarles avisos, este reporte de
muestra de la siguiente manera.

37
4.1.5.4 Reporte de caja chica.
Aqu se mostrara los movi miento de la caja chica, aqu se tendr que ingresar
mediante el formulario en que mes y ao como se muestra la figura.




4.1.5.5 Recuperacin de mantenimiento de cuotas ordinarias.
Este se muestra dando clic en la opcin de recuperacin y se muestra a
continuacin.

38
4.1.5.6 Cuotas de mantenimiento pendientes de pagar.




4.1.5.7 Reportes Cuotas Mantenimiento con saldo a favor.

39
4.1.5.8 Reportes Intereses cuotas ordinarias.




4.1.5.9 Reportes Intereses cuotas extraordinarias.

Nota: Como podemos ver, esta generacin de reportes se desglosan de los
ingresos que se han generado en el mes.
40

4.1.6 Agenda.
Seleccionamos la opcin de agenda y podemos observar el siguiente
formulario, para dar de alta la nueva tarea o reunin.
Ahora se muestra como dar de alta una nueva tarea de la agenda.



Mostramos la tarea que acabamos de levantar, esta tarea o avi so que se
mando lo tendrn los inquilinos y estn enterados de estos trabajos.

41
4.1.7 Egresos.
Damos clic en la opcin de egresos, y posteriormente se muestra un men de
lado izquierdo y el formulario de egresos el cual se muestra.


Ahora se muestra como ingresar una salida o egreso de dinero, ya que esta
ser la forma de respaldar esos egresos para el posterior egresos o informe a
condminos.

42
4.1.7.1 Tabla egresos.
A continuacin mostramos el reporte de egresos dando clic en la opcin de
tabla de egresos.



4.1.7.2 Caja chica.
La caja chica es un fondo que se le entrega a la administradora con una cierta
cantidad para gastos mnimos, como necesidades de la administradora o
suministros necesarios.

43
Como podemos observar se encuentra un formulario en el cual se ingresa la
cantidad que se le asigna al administrador por el mes, esta cantidad ya no se
modifica hasta el siguiente mes cuando se hace el corte.




Ingresaremos una salida de caja chica para poder observar cmo se lleva a
cabo esta tarea, lo podemos ver a continuacin.

44
4.1.8 Mantenimiento
En este modulo vamos a manejar todo lo referente a obras de mantenimiento y
jardinera.




4.1.8.1 Ingresos de Proveedores.
A continuacin ingresaremos a un proveedor tomando en cuenta datos
relevantes que nos puedan servir posteriormente.
Una vez ingresados estos datos dar clic en Enviar.


45
4.1.8.2 Muestra Proveedores.
A continuacin mostramos la tabla de proveedores existentes, esta tabla de
proveedores nos servir para agilizar los procesos de egresos ya que el
sistema tomara estos proveedores y solo se seleccionara el que se ocupa.


4.1.8.3 Solicitud mantenimiento.
En este modulo se darn de alta las solicitudes de mantenimiento que se harn
al coto de esta forma se respaldan los trabajos que se van a realizar, a
continuacin mostramos como se da de alta una solicitud de mantenimiento.


Una vez ingresados los datos dar clic en Enviar.
46
4.1.8.4 Reportes Mantenimiento
Posteriormente mostramos las solicitudes que se han hecho y validar que se
estn haciendo, con esta herramienta garantizamos que no se olvide la tarea o
aplicacin de la mejora al coto.





4.1.8.5 Solicitud Jardinera.
La opcin de solicitud de jardinera est hecha para dar seguimiento a los
trabajos de jardinera necesarios para que el coto se vea en perfectas
condiciones. A continuacin ingresaremos una solicitud de jardinera.

47
4.1.8.6 Reportes Jardinera.
Para mostrar esta opcin damos clic en Reportes Jardinera y se mostrara
todas las solicitudes de jardinera que han sido levantadas como se muestra en
la figura.





4.1.9 Usuarios
Este modulo permite dar de alta los usuarios, principalmente los inquilinos del
coto.

48
4.1.9.1 Alta usuario.
Esta opcin nos permite dar de alta a los usuarios del sistema, a continuacin
mostramos la forma de hacerlo.
Damos clic en la opcin usuarios y nos aparece el siguiente formulario donde
ingresaremos los datos del usuario.


En caso de que el usuario sea inquilino debemos seleccionar donde dice grupo
usuario, para seleccionar inquilinos.

49
Como podemos ver nos aparecern 3 opciones mas lo que es casa, pagos y
deudas los que deben de ser llenados correctamente para que no hayan mal
entendidos.


Una vez llenado estos datos damos clic en Crear Usuario.
Y podemos consultarlo de la siguiente forma.




Aqu finaliza la vista Administrador de coto damos clic en salir.
50
4.2.1 Vista Inquilino (cliente)

4.2.1.1 Acceso al sistema.
Al abrir el sistema le pedir un Nombre de usuario y contrasea como
autenticacin para poder validar que es un usuario permitido como se muestra
en la siguiente pantalla.




Debe ingresar su Nombre de usuario y contrasea como se muestra en la
imagen y dar clic en Enviar.

51
Si el usuario o la contrasea son incorrectos no te dejara entrar ya que al
momento de darle clic se redireccin a la ventana de login con los campos
vacios para que se vuelvan a ingresar.



Si solo llenas un campo ya sea Nombre de usuario o la contrasea te
aparecer un mensaje para que llenes los dos campos para poder continuar
con la validacin.



52
Una vez que hemos ingresado el usuario y contrasea correctas ingresaremos
al sistema y podremos entra al perfil del cliente o inquilino la cual se muestra de
la siguiente manera.


Se observa que se basa en 3 partes principales reportes, consulta de reportes
y el perfil.



4.2.1.2 Reportes.
En esta opcin podemos levantar los reportes a incidentes, que al usuario le
moleste y quiera hacrselo saber a la administradora.

53
4.2.1.3 Consulta de reportes clientes.
Una vez levantados sus reportes podr visualizarlos en la siguiente zona de
reportes donde se le ir dando seguimiento este que este sea concluido de
forma satisfactoria.




Como se observa a continuacin cuando el reporte es de un color diferente se
refiere a que la administradora se est dirigiendo hacia el inquilino.



4.2.1.4 Perfil Cliente.
Aqu se muestra los pagos que el
inquilino o cliente ha hecho, su foto
de perfil, y datos personales, como
se muestra a continuacin.


Podemos observar los ingresos y
egresos, de esta forma se
mantienen al tanto de los
movi mientos realizados en el coto.


Adems se muestra la agenda, que
esta podr calendarizar actividades
y mantendr al tanto al inquilino
sobre reuniones o otras actividades
dentro del coto.
54
4.3.1 Vista Seguridad y Vigilancia

4.3.1.1 Acceso al sistema.
Al abrir el sistema le pedir un Nombre de usuario y contrasea como
autenticacin para poder validar que es un usuario permitido como se muestra
en la siguiente pantalla.




Debe ingresar su Nombre de usuario y contrasea como se muestra en la
imagen y dar clic en Enviar.

55
Si el usuario o la contrasea son incorrectos no te dejara entrar ya que al
momento de darle clic se redireccin a la ventana de login con los campos
vacios para que se vuelvan a ingresar.



Si solo llenas un campo ya sea Nombre de usuario o la contrasea te
aparecer un mensaje para que llenes los dos campos para poder continuar
con la validacin.



56
Una vez ingresado entraremos a la siguiente pantalla, la cual contiene los
mdulos de bitcora y reportes de usuarios.





4.3.1.2 Reportes.
En este modulo el departamento se seguridad podr visualizar los reportes de
usuarios y poder atenderlos de forma adecuada cada incidente.

57
4.3.1.3 Bitcora.
En esta opcin podrs dar de salta todos los ingresos que hay hacia el coto,
adems que tendrs registrados para consulta en cualquier momento.



4.3.1.4 Alta de Ingreso de Bitcora.
En esta opcin ingresaremos cualquier reporte referente al departamento de
seguridad para que lleven su control de incidencias de forma correcta.


Una vez llenado los campos damos clic en Ingresar, y posteriormente podemos
consultarlos dando clic en la opcin reporte Bitcora.

58
4.3.1.5 Salir
Y por ltimo la opcin salir, para esto solo damos clic en la opcin salir en la
parte inferior izquierda de la pantalla.







CAPITULO 5. DISEO Y DIAGRAMAS

5.1 Casos de uso
59

Casos de uso Administradora


System







AdminiS'tradora
DB



























i:nqui'lino
Casos de uso Inquilino

System
60

Usu.erios
usuario




Ingresa Usuario

Muetra Usuario




Login Adml nistrador de coto

E)
<8
Admlnsi tradora ---------.,.
DB






login Desarr



61
....- --.......


Login seguridd y vlgilancl
(3
E-V
Seguridad y Yigila ncia DB







loginInquiline




"" .. .
.......







\..
..
,...
-
,...........
.
...
..

62
L
-

---- --


;(
Administradora
Jngresa Eoresos





Ingresa caja chica



---- --.......

.-.

-- - -.....,

(
..

P...., ...n ...
....
.. .
:

....
n
.
................
-
.



t
...



.-
_.-
_.-
.--
--- -- T -
"''
T
















,,.----- - ........')

,)'.. "lni,'MM:!nlhlfiiWi'lnM Witnl'lrl ,.,

63










Administradora
Repcrte Usuarios



Reporte Usuarios


ver reporte usuarios














DB



:noreso


















I ,,
DB

64















seoura dad Y Yigilancla












65
extends izanami_view
+$params
+$name
+$value
+$archivo
+$new_text


+_construct()
+assign()
+fetch()
+replace_array()
+eliminar_params()

/ -)
+radios()
+get_head()


5.2 Diagramas de clases.

fole_js html sidebar
+$files +$menu
+$ret +$jquery
+$script
+check()
+$style

+inputname()
+$plugin
+add() +calendar()
+$CFG

+cargar() +show_date()
+$search

+list_date()
+$menu

+select()
+lista() +cargar_css()
+cargar_js()
+ajax() +plugin()
+boton() +search()
+menu()
+cargar()
compressor
izanami view
I

+$options
+compressor()
+set_options()

vista file_css
+start() +$array +$files
+compress()
+ignore()


view
+$view +$script
+$permiso

+finish()
+$object
+$ajax
+add()
+javascript()
+css()


+$archivo

+_construct()

+cargar()
+page()
+$FoView
+permiso()
+create_gz_compress() +view()
+ajax()

+set_gzip_header() +addparameter()
+firstlogin()

+doJemove() +menu()
+agregados()

+do_compress() +showFile()
+def()
+_remove_scripts() +cargar()
+cargar()

+get_newjile() +ViewType()
+getjile_dates() +get_archivo()
+get_script_array()
+archivo()
+getjilejocations() +tags()
+set_gzip_headers()
search
+strip_querystring()
+minify_text() +$input
+trimwhitespace()
custom
+$result
+trimwhitespace_replace()
+$1ista
+$attrib

+get_current_path()
+$title
+Attrib()
+do_cleanup()
+$plugin +getAttrib()

+getjilesjn_dir() +plugin()
+inputAttrib($value)

+add_media_header() +title()
+getlnputAttrib()

+convert_paths_to_absolute() +getTitle()
+resultAttrib()

+convert_css_bgr_to_data()
+getResultAttrib()

+unify_dir_separator()
J +get_menu()

+getjile_extension()
+get_mimetype()
+startTimer() menu
+returnTime()

+$dir
+a()
+get_menu()

AjaKReportes

+$db
+$user
+$array
+$reporto
+$usuario
+$id

+insertor()
+insertar_comontorlo()
+statuSJOporto()
+comments()


UsuarioA jax

+$db
+$consult
+$grupos
+$view

ajax


+$db
+$user
+$consulta
+$tabla
+$rows
+$total
+$nt;J'eso
+$e!)'eso
+$deudas

AjaxSidebar
+$re<rnantto

+Irvesos()
+Egresos()
t<aj aCiica()
+inquainos(}
+cargaDeudores()
+Recuperadonf\lantenimiento()
+recuperacion_cuotas_extraordinaria()
1 cuot.:_montto_por_p,:,g,:,r()
+cuota_adelantda_saldo_afavor()
+intereses_cuota_ordinaria()
+inquilino()




AjaxJnoresos

+$db
+$consult
+$inorosos
+$usuario
+$concopto
+$view
+modificorlnoroso()
+Modificodolnoroso()



Reportes_Ajax

+ db
+ user
+ casa
+ view
+ mensaje
+ array
+ tabla
+ arlog
+ rows
+ total
+nquilino()
+Jm()
+nquilinos()
+nsertar()
+nsertar_comentario()
+<talusJepol'te()
+:onvnents()
+Irvesos()
+ogesos()
+::ajaCiica()
Ajax_CajaChica

+$mes
+$anio
+$db
+$consulta
+$saldo
+$rows
+$dialni
+$diaFin
+cargarCaja()






















66
67

config



+$config
+$type
+$host
+$user
+$pass
+$name
+$app
+$control
+$model
+$view
+$dir
+$redirection
+$path
+$version
+$lib
+$file
+$folderName
+$Architecture
+SetDatabase()

+SetlayerDir()
+SetPiuginDir()
+SetAppDir()
+SetRedir()
+SetPath()
+SetVersion()
+SetlibDir()
+SetEnvironment()
+Setldentify()
+Seturl()
+SetProject()
+SetCssFolderName()
+SetJsFolderName()
+SetPiuginFolder()
+SetProjectConfig()
+Set Type()
+Cargar()



+$menus
+$id
+$name
+$data

+addMenu()
+additem()
+getiD()
+getMenus()
+DB2Text()

segurldad
+$res<Jt
+antlxss()
Hntlsql()
+encrypt()
+decrypt()
+noIn jection()
+noXSS()

user
+$uname
+$password
+$remember
+login()
+logout()
+Insertuser()
+randorrl'assQ
+data()
+group()
+Exists()
+nora()
+diasQ

J configuration I
-
+$redir


system

+CaiiController()
+CaiiModel()
+CaiiView()
+CaiiUser()
+CaiiDataBase()
+CaiiCore()



menus




modules
+$modules
+$folderName
+Calllog()
+$name
+$file
+$folder
+add()
+addEq()
+getModule()
+DB2Text()


-
redirects
+$module
+$red
+$option
+add()
+get()
+exists()
+DB2Text()























plugin

+private $plugin
+private $f unction

+plugin()
+exist()
+cargar_modulo()
+cargar()
+AI)'egados()


a jaM

+select()




IzanamiController

""





log

+$db
+$user
+insert()
+tUserLOQ()
+tGrouplo; O
+getActionLo9()
core

+cargar()
+archivo()
+paginator()
+variable()
+f unction()
+css()
+contenido()
+sidebar()
+Qet_def ault _sidebar()
+redirect()
+Qet_redirect_dir()
+f rontend()
+option()
68

Cliente ajaM

+$db
+$user
+$log
+$us
+$array
+$1d
+$arlog
+$consulta
+$items

+insertar()
+cargar()
+agenda()



G--""-1
Mantenimiento_AjaK ajax
Jardineria A jaK


+$array
fi +select()
+muestra()

+$id
1'

+$fed
+envi<wO
+ Ia()


Ingresos Ajax
+envii>Mantto() +$&
+tablalarci>erla()
+tablaMantri!Wento()
........WaproeedooO
+m.rtto_rwestro()
+jardi'>eriajorm()
+IJ<oveedorJorm()

Egresos_A jaK

+$db
+$IOQ
+$fechaFactura
+$fechaCobro
+$inqli
+$consUl:a
+$<\Q
+$serndos
+$t>Quli>o

+inQu!ino()
ffisertar_ingreso()
+inquilinos()



Agenda ajaK
+$array +$db
+$ariOQ
+envior()
+envlalnverslon()
+enviocajachlca()
+formlnverslones()
+flujosEfe()

+$consulta
+$item
+$am
clientes
+$h

+$m
r---
+$db
+$date
+cajachlca()
+tablaEQresos()
+$return
+$view
+$agenda
+_construct()
+reporte jorm()
+agenda()
+data()
+cargar _agenda()
+insertar _agenda()
+create_agenda()
69
Capitulo 6. Desarrollo

6.1 Aplicacin

En esta capa esta todo el proyecto completo, todas las dems capas son
simplemente clases, mtodos y funciones necesarias para que sea mas fcil
desarrollar esta capa.


<?php

/**

* Este es el archivo es el archivo principal del Framework en el Proyecto

*

* Este archivo sirve para la correcta utilizacion del codigo en un espacio
pequeo

* y amigable con el desarrollador.

* En el proyecto, en este archivo se crea el manejador de las vistas que
existen

* en esta carpeta

*/

//import($CFG['dirapp'].DS.'classes'.DS.'class.php');

$vista = array(

'Administracion'=>array(

'permiso'=>'Administrador',

'folder'=>'Administracion',

),

'Clientes'=>array(

'permiso'=>'Cliente',

'folder'=>'Clientes',

),

'Developers'=>array(
70
'permiso'=>'Desarrollo',

'folder'=>'Developers'

),

'Seguridad'=>array(

'permiso'=>'Seguridad',

'folder'=>'Seguridad'

)

);

$vista = new vista($vista);

$vista->firstLogin();

$grupo=$user->group();

$vista->permiso($grupo['nombre']);

$vista->cargar();

?>

6.1 Configuracion

Para configurar el sistema, se necesitan llamar a cuatro clases, las cuales son
donde se cargan los modulos que se utilizaran, se cargan los menus de cada
grupo de usuarios y se cargan las redirecciones, adems, de una seria de
mtodos que permiten darle mas funcionalidad a ciertas partes del sistema.

<?php

/**

* Archivo de Configuracion

*

* Este archivo es donde se da de alta toda la configuracion del framework

* dentro del proyecto, dando como resultado un sistema mas acorde a lo que

* uno desea.

*/
71
$config->SetDatabase('mysql','localhost','root','','izanami');

$config->SetProject('Rincon del Cielo','0.6');

$config-
>SetProjectConfig('WebApp','Vistas',array('Control','Model','View'));

$config->SetCssFolderName('stylesheet');

$config->SetJsFolderName('js');

$config->SetIdentify('cookie','user','login.php');

$config->SetType('Text');//'Text','DB'

$config->SetEnvironment(_Production);




Modules::add('note','Notas','mostrar');
Modules::add('reportes','Reportes','reportes');
Modules::add('agenda','Agenda','agenda');
Modules::add('ingresos','Ingresos','ingresos');
Modules::add('egresos','Egresos','egresos');
Modules::add('usuario','Usuarios','usuario');
Modules::add('reportesSegur','Reporte Seguridad','reportesSegur');
Modules::add('mantenimiento','Mantenimiento','mantenimiento');
Modules::add('bitacora','Bitacora','bitacora');



// Menu: Administrador
menus::addMenu('admin','Menu Administrador');
menus::addItem('admin','Dashboard','{inicio}');
menus::addItem('admin','Ingresos','{redir:ingresos}');
menus::addItem('admin','Reportes','{redir:reportes}');
menus::addItem('admin','Agenda','{redir:agenda}');
72
menus::addItem('admin','Egresos','{redir:egresos}');

menus::addItem('admin','Mantenimiento','{redir:mantenimiento}');

menus::addItem('admin','Usuario','{redir:usuario}');

// Menu: Desarrollador
menus::addMenu('dev','Menu Desarrollador');
menus::addItem('dev','Usuarios','{redir:usuario}');

// Menu: Seguridad
menus::addMenu('secure','Menu Seguridad');
menus::addItem('secure','Dashboard','{inicio}');
menus::addItem('secure','Reportes','{redir:reportesSegur}');
menus::addItem('secure','Bitacora','{redir:bitacora}');



redirects::add('notes','note');
redirects::add('reportes','reportes');
redirects::add('reportesSegur','reportesSegur');
redirects::add('bitacora','bitacora');



redirects::add('agenda','agenda');
redirects::add('ingresos','ingresos');
redirects::add('egresos','egresos');
redirects::add('usuario','usuario');
redirects::add('mantenimiento','mantenimiento');

?>

6.2 Vistas

El sistema maneja cuatro vistas, que siguen la misma lgica, mostrarle al
usuario la plantilla que quiere ver. En el caso de Clientes, este no maneja
73
modulos debido a que es solo la vista, esta es la que se encarga de mostrarle
al usuario todo lo que necesita.
Administrador
Clientes
Desarrollador
Seguridad

6.3 Mdulos

Agenda

Este modulo genera mensajes guardados usando fechas y horas especificas
por el usuario y mostrado para un usuario especifico.

<?php

/**

* Este archivo es el archivo por default de el modulo Agenda

*

* Este archivo es el archivo llamado por default, al ingresar al modulo

* este archivo muestra la Agenda que ha sido creada y un pequeo formulario

* para insertar nuevos recordatorios.

*/

$css = new file_css();

$css-
>add(array('file'=>'agenda','type'=>'plugins','plugin'=>_Plugin));

$js = new file_js();

$js->add(array('file'=>'agenda','type'=>'plugins','plugin'=>_Plugin));




$agenda=new view('index','plugin',_Plugin);

$agenda->addparameter('css',$css->cargar());

$agenda->addparameter('javascript',$js->cargar());

$agenda->addparameter('fecha',date('m/d/Y h:i a'));

$agenda->cargar();
74
?>

Ajax


<?php

/**

* Clase Agenda Ajax

*

* Manejo de las llamadas Ajax del modulo de Agenda

*

* Maneja las llamadas de el modulo de Agenda, en cuanto al ajax

* este a su vez est utilizando una clase ajax creada en el framework

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Module_Agenda

*/

class Agenda_ajax extends ajax{

/**

* Este metodo carga la agenda global dentro de un div.

*/

function cargar_agenda(){

global $db;

$consulta = $db->query('agenda');

foreach($consulta as $item){

$ag = new view('agenda','plugin',_Plugin);
75
$ag-
>addparameter('fecha',prettifyDate($item['fecha_reunion']));

$ag->addparameter('mensaje',$item[' mensaje']);

$ag->cargar();

}

}

/**

* Este metodo es el que responde al querer enviar un recordatorio a la
agenda

*/

function insertar_agenda(){

global $db,$log;

list($date,$hour,$am)=explode(' ',getParameter('fecha'));
list($month,$day,$year)=explode('/',$date);
list($h,$m)=explode(':',$hour);
$am=($am=='pm')?$h+12:$h;

$h=(int)$h;

$m=(int)$m;

$date = mktime($h,$m,0,$month,$day,$year);

$array=array(

'mensaje'=>getParameter('mensaje'),

'descripcion'=>'',

'fecha_creacion'=>time(),

'fecha_reunion'=>$date,

'type'=>getParameter('type'),

);
76
$id = $db->insert('agenda',$array);

$arlog=$array;

$arlog['id']=$id;

$log->insert('Insertar Agenda',serialize($arlog));

$db->variable('id',$id);

$consulta = $db->query('agenda','id={id}');

$item=$consulta[0];




$ag = new view('agenda','plugin',_Plugin);

$ag-
>addparameter('fecha',prettifyDate($item['fecha_reunion']));

$ag->addparameter('mensaje',$item['mensaje']);

$ag->cargar();

}

}

/**

* Esta funcion es la base para el muestreo de cada recordatorio al mostrar la
agenda.

*/

function create_agenda($item,$plugin){

$ag = new view('agenda','plugin',$plugin);

$ag->addparameter('fecha',fecha($item['fecha_reunion']));

$ag->addparameter('mensaje',$item['mensaje']);

$ag->cargar();

}
77
$AgendaAjax = new Agenda_ajax();

$AgendaAjax->select(getParameter('accion'));

?>

Bitcora

Este modulo se crea un formulario para insertar informacin de visitas a el coto,
y se le muestra la lista de visitantes y los horarios en que se visito.

<?php

$js = new file_js();

$js->add(array('file'=>'insertar','type'=>'plugins','plugin'=>_Plugin));

$js->cargar();

$view = new view('formulario','plugin',_Plugin);

$view->cargar();

?>

Ajax

El ajax de este modulo se encarga de todo, existe un mtodo que sirve para la
insercin de los datos que un formulario realiza y se encarga de presentar la
informacin del la base de datos.

<?php

class Bitacora_Ajax extends ajax{

function cargar(){




}

function insertar(){

global $db;

$array=array(

'fecha'=>time(),
78
'asunto'=>getParameter('asunto'),

'npersonas'=>getParameter('numpersonas'),

'casa'=>getParameter('casa'),

'identificacion'=>getParameter('identifica'),

'tipoidentificacion'=>getParameter('tipoindenti'),

'comentarios'=>getParameter('comentario')

);

$id=$db->insert('bitacora',$array);

if($id>0){

echo 'Se inserto satisfactoriamente';

}else{

echo 'Tuvimos problemas al insertarlo';

}

}

function mostrarBitacora(){

global $db;

$consulta = $db->query('bitacora');

$tabla = new
view('reportes_bitacora_seguridad_tabla','plugin',_Plugin);

$titulo;

$rows = '';

foreach($consulta as $tabla_bitacora){

$row=new
view('reportes_bitacora_seguridad_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$tabla_bitacora['fecha']));
79
$row-
>addparameter('asunto',$tabla_bitacora['asunto']);

$row-
>addparameter('npersonas',$tabla_bitacora['npersonas']);

$row-
>addparameter('casa',$tabla_bitacora['casa']);

$row-
>addparameter('identificacion',$tabla_bitacora['identificacion']);

$row-
>addparameter('tipoidentificacion',$tabla_bitacora['tipoidentificacion']);

$row-
>addparameter('comentarios',$tabla_bitacora['comentarios']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();

}

}

$Bitacora_Ajax = new Bitacora_Ajax();

$Bitacora_Ajax->select(getParameter('accion'));

?>

Egresos

Este modulo es carga un formulario que es por el cual se insertan los egresos
del sistema. Paran insertar esos egresos en la base de datos es utilizado ajax.
Tiene dos funciones principales Insertar y mostrar Egresos, e insertar y mostrar
Caja Chica.
80
Ajax

Este modulo utiliza ajax para la insercin de egresos y caja chica, en base a un
formulario creado en una plantilla. Tambin es usado para mostrar la
informacin insertada en la base de datos y para su posible modificacin. Para
modificar esta informacin, se usa un lightbox o ventana flotante hecha con
javascript, para hacer ms fcil y llevadera la forma de interactuar con el
sistema.

<?php

/**

* Este archivo es el archivo por default en el modulo Egresos

*

* Este archivo es el archivo llamado por default, al ingresar al modulo

* este archivo muestra el formulario para insertar un egreso.

*/

$css = new file_css();

$js = new file_js();

$css-
>add(array('file'=>'egresos','type'=>'plugins','plugin'=>_Plugin));

$js-
>add(array('file'=>'egresos','type'=>'plugins','plugin'=>_Plugin));

$css->cargar();

$js->cargar();

$form = new view('form','plugin',_Plugin);

$form->addparameter('servicios',servicios());

$form->addparameter('proveedores',proveedores());

$form->cargar();

?>
81
Ingresos

Este modulo tiene el mismo diseo que el modulo de egresos. Se ingresa todo
por un formulario que es cargado por el sidebar, este formulario usa ajax para
insertar la informacin.

Ajax


<?php

class Ingresos_Ajax extends ajax{

function inquilino(){

global $db;

$inqui=explode('|',getParameter('inquilino'));

list($nombre,$apellidos)=$inqui;

$db->variable('nombre',$nombre);

$db->variable('apellidos',$apellidos);

$consulta = $db-
>union(array('u'=>'usuario','c'=>'casas'),array('u'=>'id','c'=>'user'),'u.*,c.casa',"u.
nombre LIKE '{nombre}' AND u.apellidos LIKE '{apellidos}'");

$inq=$consulta[0];

$concepto='';

$servicios=$db->query('serviciosingresos');

$concepto = lista($servicios,'id_servicio','nombreServicio');

$inquilino = new view('inquilino','plugin','ingresos');

$inquilino->addparameter('usuario',$inq);

$inquilino->addparameter('concepto',$concepto);

$inquilino->cargar();

}

function insertar_ingreso(){

global $db,$log;
82
$fechaPago=String2Date(getParameter('fechaPago'));

$user = getParameter('noCondominio');

$array=array(

'fecha'=>time(),

'numrecibo'=>getParameter('numrecibo'),

'Fecha_Pago'=>$fechaPago,

'Referencia'=>getParameter('Referencia'),

'Concepto'=>getParameter('Concepto'),

'Descripcion1'=>getParameter('desc1'),

'Descripcion2'=>getParameter('desc2'),

'Entradas'=>getParameter('entrada'),

'user'=>$user,

);

$id=$db->insert('ingresos',$array);

$arlog=$array;

$arlog['id']=$id;

$log->insert('Insertar Ingreso',serialize($arlog));

if($id>0){

echo 'Se inserto correctamente';

}

}

function inquilinos(){

global $db;

$id_inq=getParameter('name');

$sql = "select * from usuario as u inner join casas as c on
u.id=c.user where u.nombre LIKE '%$id_inq%'";
83
$return=$db->sql($sql);

foreach($return as $us){

echo '<li><a href="'.$us['nombre'].'|'.$us['apellidos'].'"
class="item">'.$us['nombre'].' '.$us['apellidos'].'</a></li>';

}

}

}

$Ingresos_Ajax = new Ingresos_Ajax();

$Ingresos_Ajax->select(getParameter('accion'));

?>

Mantenimiento

Este modulo maneja en realidad tres datos en el sistema, Proveedores,
Mantenimiento y Jardinera, Cada uno con su insercin de informacin y su
tabla.

Ajax

Este modulo maneja Insercin de la informacin de los tres datos, a la vez la
consulta de cada uno con su respectivo formato.


<?php

class Mantenimiento_Ajax extends ajax{

function enviar(){

global $db;

$array = array(

'nombre'=>getParameter('nombre'),

'apellido'=>getParameter('apellido'),

'edo_civil'=>getParameter('edocivil'),

'empresa'=>getParameter('empresa'),

'telefono'=>getParameter('telefono'),
84
'direccion'=>getParameter('direccion'),

'correo'=>getParameter('correo'),

);

$id = $db->insert('proveedores',$array,true);

if($id>0){

echo 'Se ha insertado correctamente';

}else{

echo 'Tuvimos un problema al insertarlo';

}

}

function enviaJandineria() {

global $db;

$fecha = String2Date(getParameter('fecha'));




$array=array(

'evento'=>getParameter('titulo'),

'fecha'=>$fecha,

'descripcion'=>getParameter('desc'),

'proveedor'=>getParameter('proveedor')

);




$id = $db->insert('jardineria',$array);

if($id>0){

echo 'Se ha insertado correctamente';

}else{
85
echo 'Tuvimos un problema al insertarlo';

}

}

function enviaMantto() {

global $db;

$fecha = String2Date(getParameter('fecha'));

$array = array(

'titulo' =>getParameter('titulo'),

'fecha' => $fecha,

'id' => getParameter('proveedor'),

'costo' => getParameter('costo'),

'descripcion' => getParameter('descripcion'),

);

$id = $db->insert('reportemantenimiento',$array);

if($id>0){

echo 'Se ha insertado correctamente';

}else{

echo 'Tuvimos un problema al insertarlo';

}

}

function tablaJardineria(){

global $db;

$consulta = $db-
>union(array('j'=>'jardineria','p'=>'proveedores'),array('j'=>'proveedor','p'=>'id'),'j.
*,concat(p.nombre," ",p.apellido) as proveedores');

$tabla = new view('reportes_jardineria_tabla','plugin',_Plugin);
86
$titulo;

$rows = '';

foreach($consulta as $jardineria){




$fecha = prettifyDate($jardineria['fecha']);

$row=new view('reportes_jardineria_row','plugin',_Plugin);

$row->addparameter('evento',$jardineria['evento']);

$row->addparameter('fecha',$fecha);

$row-
>addparameter('descripcion',$jardineria['descripcion']);

$row->addparameter('proveedor',$jardineria['proveedores']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function tablaMantenimiento(){

global $db;

$consulta = $db->union(

array(

'r'=>'reportemantenimiento',

'p'=>'proveedores'

),
array(
'r'=>'id_reporte',
87
'p'=>'id'

),

'r.*,concat(p.nombre," ",p.apellido) as proveedor'

);

$tabla = new view('reportes_mantenimiento_tabla','plugin',_Plugin);




$rows = '';

foreach($consulta as $tabla_mantto){

$fecha =prettifyDate($tabla_mantto['fecha']);

$row=new view('reportes_mantenimientorow','plugin',_Plugin);

$row->addparameter('titulo',$tabla_mantto['titulo']);

$row->addparameter('fecha',$fecha);

$row-
>addparameter('proveedor',$tabla_mantto['proveedor']);

$row->addparameter('costo',$tabla_mantto['costo']);

$row-
>addparameter('descripcion',$tabla_mantto['descripcion']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();

}

function muestraproveedor(){

global $db;

$consulta = $db->query('proveedores');

$tabla = new view('reportes_proveedor_tabla','plugin',_Plugin);
88
$titulo;

$rows = '';

foreach($consulta as $tabla_proveedor){

$row=new view('reportes_proveedor_row','plugin',_Plugin);

$row->addparameter('nombre',$tabla_proveedor['nombre']);

$row->addparameter('apellido',$tabla_proveedor['apellido']);

$row->addparameter('empresa',$tabla_proveedor['empresa']);

$row->addparameter('telefono',$tabla_proveedor['telefono']);

$row->addparameter('direccion',$tabla_proveedor['direccion']);

$row->addparameter('correo',$tabla_proveedor['correo']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();

}

function mantto_muestra() {

$html = new html();

global $db;

$proveedor='';




$proveedores=$db->query('proveedores');

$proveedor=lista($proveedores,'id',array('nombre','apellido'));

$v = new view('form_mantenimiento','plugin',_Plugin);

$v->addparameter('proveedor',$proveedor);

$v->cargar();
89
}




function jardineria_form() {

global $db;

$proveedor=lista($db-
>query('proveedores'),'id',array('nombre','apellido'));

$f = new view('form_jardineria','plugin',_Plugin);

$f->addparameter('proveedor',$proveedor);

$f->cargar();

}

function proveedor_form() {

$p = new view('form_proveedor','plugin',_Plugin);

$p->cargar();

}

}

$Mantenimiento_Ajax = new Mantenimiento_Ajax();

$Mantenimiento_Ajax->select(getParameter('accion'));

?>

Reportes

Este modulo se encarga de cargar todos los reportes en un solo lugar, listos
para ser mostrados, y modificados.

AjaxCaja

Se encarga de mostrar la tabla de Caja Chica basada en el y el ao
seleccionado en el mismo sistema.

<?php

/**
90
* Reportes Ajax Caja Chica

*

* Manejo de las llamadas Ajax del modulo Reportes de Caja Chica

*

* Maneja las llamadas de el modulo de Reportes, este se divide a su vez

* en varios archivos, en cuanto al ajax este a su vez esta utilizando

* una clase ajax creada en el framework

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Module_Agenda

*/

class Ajax_CajaChica extends ajax{

/**

* Este metodo carga la agenda global dentro de un div.

*/

function cargarCaja(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);




$db->variable('diaini',$diaIni);
91
$db->variable('diafin',$diaFin);

$consulta = $db->query('cajachica','fecha_emision>{diaini}
AND fecha_emision<{diafin}');

$tabla = new view('cajachica_tabla','plugin',_Plugin);

$s=saldoInicial(date('n'),date('Y'));

$saldo=$s['saldo'];

$debe=0;

$tabla->addparameter('saldoInicial',$saldo);

$rows = '';

foreach($consulta as $caja){

$transf=($caja['no_transferencia']!=0)?$transf:'';

$entrada=($caja['entrada']!=0)?$entrada:'';

$row=new view('cajachicarow','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$caja['fecha_emision']));

$row->addparameter('trans',$transf);

$row-
>addparameter('factura',$caja['no_factura']);

$row->addparameter('con',$caja['concepto']);

$row->addparameter('entrada',$entrada);

$row->addparameter('salida',$caja['salida']);

$debe=$debe+((double)$caja['salida']);



((double)$caja['salida']);
$saldo=((double)$saldo)-

$row->addparameter('saldo',$saldo);

$rows.=$row->cargar(true);

}
92
$tabla->addparameter('row',$rows);

$tabla->addparameter('repoentrada',$debe);

$tabla->addparameter('saldoFinal',$saldo);

$tabla->cargar();

}

}

$Ajax_CajaChica = new Ajax_CajaChica();

$Ajax_CajaChica->select(getParameter('accion'));

?>

AjaxIngresos

Se encarga de cargar un formulario para la modificacin de un Ingreso y si es
enviado, tambin maneja la modificacin en la base de datos.


<?php

class AjaxIngresos extends ajax{

function modificarIngreso(){

global $db;

$db->variable('id',getParameter('id'));

$consulta = $db->query('ingresos','id={id}');

$ingresos = $consulta[0];

$concepto = '';

$usuario = '';

$user = $db-
>union(array('u'=>'usuario','c'=>'casas'),array('c'=>'user','u'=>'id'),'u.id,u.nombre,
u.apellidos');



$usuario=lista($user,'id',array('nombre','apellidos'),$ingresos['user']);

$concept=$db->query('serviciosingresos');
93
$concepto=lista($concept,'id_servicio','nombreServicio'
,$ingresos['Concepto']);



$fpago=prettifyDate($ingresos['Fecha_Pago'],'dateCalendar');

$view = new view('modificaringresos','plugin',_Plugin);

$view->addparameter('id',$ingresos['id']);

$view-
>addparameter('recibo',$ingresos['numrecibo']);

$view->addparameter('inquilino',$usuario);

$view->addparameter('fpago',$fpago);

$view->addparameter('ref',$ingresos['Referencia']);

$view->addparameter('con',$concepto);

$view-
>addparameter('desc1',$ingresos['Descripcion1']);

$view-
>addparameter('desc2',$ingresos['Descripcion2']);

$view-
>addparameter('entrada',$ingresos['Entradas']);

$view->cargar();

}

function ModificadoIngreso(){

global $db;

$id = getParameter('id');

$fpago=$fechaFactura =
String2Date(getParameter('fpago'));

$array = array(

'numrecibo'=>getParameter('recibo'),

'Fecha_Pago'=>$fpago,

'Referencia'=>getParameter('ref'),
94
'Concepto'=>getParameter('con'),

'Descripcion1'=>getParameter('desc1'),

'Descripcion2'=>getParameter('desc2'),

'Entradas'=>getParameter('entrada'),

'user'=>getParameter('user')

);

$up=$db-
>update('ingresos',$array,array('row'=>'id','value'=>$id));

if($up){

echo 'La modificacion fue satisfactoria';

}else{

echo 'Tuvimos algun problema al modificar';

}

}

}

$AjaxIngresos = new AjaxIngresos();

$AjaxIngresos->select(getParameter('accion'));

?>

AjaxReportes

Se encarga de manejar los reportes que el usuario enva y enviar comentario
hacia ellos.


<?php

$html=new html;

class AjaxReportes extends ajax{

function insertar(){

global $db,$user;
95
$array=array(

'mensaje'=>getParameter('mensaje'),

'usuario'=>$usuario,

'tipo'=>getParameter('tipo'),

'fecha'=>time()

);

$id = $db->insert('reportes',$array);

$arlog=$array;

$arlog['id']=$id;

$log->insert('Insertar Reporte',serialize($arlog));

$db->variable('id',$id);

$consulta = $db->query('reportes','id={id}');

$reporte = $consulta[0];

$inq=$user->data($reporte['user']);

reporte_admin($reporte,$inq,$html);

}

function insertar_comentario(){

global $db,$user,$log;

$u=$user->data();

$usuario=$u['id'];




$array=array(

'reporte'=>$_POST['reporte'],

'user'=>$usuario,

'fecha'=>time(),
96
'comentario'=>$_POST['comentario'],

);

$id = $db->insert('reportes_comentarios',$array);

$arlog=$array;

$arlog['id']=$id;

$log->insert('Insertar Comentario Reporte',serialize($arlog));

$db->variable('id',$id);

$consulta = $db->query('reportes_comentarios','id={id}');

$comentario = $consulta[0];

reporte_comentario($comentario);

}

function status_reporte(){

global $db;

$db-
>update('reportes',array('status'=>$_POST['status']),array('row'=>'id','value'=>$
_POST['id']));

}

function comments(){

global $db;

$db->variable('id',$_POST['id']);

$consulta=$db->query('reportes_comentarios','reporte={id}');

foreach($consulta as $comentario){

reporte_comentario($comentario);

}

}

}
97
$AjaxReportes = new AjaxReportes();

$AjaxReportes->select(getParameter('accion'));

?>

AjaxSidebar

Se encarga de cargar todo lo que el sidebar tiene en su lista, cada vista que es
cargada directamente al darle click en un elemento del sidebar es manejado
por este archivo.


<?php

class AjaxSidebar extends ajax{

function Ingresos(){

global $db,$user;

$consulta = $db->query('ingresos');

$tabla = new
view('reportes_ingresos_tabla','plugin',_Plugin);

$rows = '';

$total=0;

foreach($consulta as $ingreso){

$row = new
view('reportes_ingresos_row','plugin',_Plugin);

$inq=data($ingreso['user']);

$row->addparameter('id',$ingreso['id']);

$row-
>addparameter('numrecibo',$ingreso['numrecibo']);

$row->addparameter('fecha',$ingreso['fecha']);



'.$inq['apellidos']);
$row->addparameter('nombre',$inq['nombre'].'

$row->addparameter('casa',$inq['casa']);

$row->addparameter('ref',$ingreso['Referencia']);
98
$row->addparameter('con',$ingreso['Concepto']);

$row-
>addparameter('desc1',$ingreso['Descripcion1']);

$row-
>addparameter('desc2',$ingreso['Descripcion2']);

$row-
>addparameter('FechaPago',$ingreso['Fecha_Pago']);

$row-
>addparameter('entrada',number_format($ingreso['Entradas'],2));

$rows.=$row->cargar(true);

$total=$total+((double)$ingreso['Entradas']);

}

$tabla->addparameter('row',$rows);

$tabla->addparameter('total',number_format($total,2));

$tabla->cargar();

}

function Egresos(){

global $db;

$consulta = $db->query('egresos');

$tabla = new
view('reportes_egresos_tabla','plugin',_Plugin);

$rows = '';

$total=0;

$file_js = new file_js();

$file_js-
>add(array('type'=>'plugin','plugin'=>_Plugin,'file'=>'egresos'));

$file_js->cargar();

foreach($consulta as $egreso){
99
$row = new
view('reportes_egresos_row','plugin',_Plugin);

$row-
>addparameter('fecha',$egreso['fecha_emisio']);

$row-
>addparameter('cheque',$egreso['numeroCheque']);

$row-
>addparameter('factura',$egreso['numeroFactura']);

$row-
>addparameter('ffactura',$egreso['fechaFactura']);

$row->addparameter('fcobro',$egreso['fechaCobro']);

$row-
>addparameter('proveedor',$egreso['nombreProveedor']);

$row->addparameter('con',$egreso['concepto']);;

$row-
>addparameter('desc1',$egreso['descripcion1']);

$row-
>addparameter('desc2',$egreso['descripcion2']);

$row-
>addparameter('egreso',number_format($egreso['egreso'],2));

$rows.=$row->cargar(true);

$total=$total+((double)$egreso['egreso']);

}

$tabla->addparameter('row',$rows);

$tabla->addparameter('total',number_format($total,2));

$tabla->cargar();

}

function CajaChica(){

global $db;

$view = new view('selectCajachica','plugin',_Plugin);
100
$view->cargar();

}

function inquilinos(){

global $db,$user;

$file_js = new file_js();

$file_js-
>add(array('type'=>'plugin','plugin'=>_Plugin,'file'=>'reportes'));

$file_js->cargar();

$tabla = $db-
>query('reportes','',array('table'=>'id','orden'=>'DESC'));

foreach($tabla as $reporte){

$inq=$user->data($reporte['user']);

reporte_admin($reporte,$inq);

}

}

function cargaDeudores(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);

$consulta = $db-
>union(array('e'=>'casas','s'=>'usuario'),array('e'=>'user','s'=>'id'),'e.*,s.nombre,
s.apellidos');

$tabla = new
view('reportes_acumulado_deudores_tabla','plugin',_Plugin);

$debe=0;

$rows = '';
101
foreach($consulta as $deudas){

$row=new
view('reportes_acumulado_deudores_row','plugin',_Plugin);

$row-
>addparameter('user',$deudas['nombre'].' '.$deudas['apellidos']);

$row-
>addparameter('pagos',$deudas['pagos']);

$row-
>addparameter('deuda',$deudas['deuda']);

$row->addparameter('id',$deudas['id']);

$row->addparameter('casa',$deudas['casa']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function RecuperacionMantenimiento(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);

$consulta = $db-
>union(array('e'=>'serviciosingresos','s'=>'ingresos'),array('e'=>'id_servicio','s'=>
'id'),'s.*,e.nombreServicio','s.concepto=1');

//$consulta = $db->query('ingresos','concepto=1');

$tabla = new
view('reportes_recuperacion_mantenimiento_tabla','plugin',_Plugin);
102
$debe=0;

$rows = '';

foreach($consulta as $recmantto){

$row=new
view('reportes_recuperacion_mantenimiento_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$recmantto['fecha']));

$row-
>addparameter('numrecibo',$recmantto['numrecibo']);

$row-
>addparameter('Fecha_Pago',date('j/n/Y',$recmantto['Fecha_Pago']));

$row-
>addparameter('Referencia',$recmantto['Referencia']);

$row-
>addparameter('Concepto',$recmantto['nombreServicio']);

$row-
>addparameter('Descripcion1',$recmantto['Descripcion1']);

$row-
>addparameter('Descripcion2',$recmantto['Descripcion2']);

$row-
>addparameter('Entradas',$recmantto['Entradas']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function recuperacion_cuotas_extraordinaria(){

global $db;

$mes = getParameter('month');
103
$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);

$consulta = $db-
>union(array('e'=>'serviciosingresos','s'=>'ingresos'),array('e'=>'id_servicio','s'=>
'id'),'s.*,e.nombreServicio','s.concepto=8');

//$consulta = $db->query('ingresos','concepto=8');

$tabla = new
view('reportes_recuperacion_cuotas_extraordinarias_tabla','plugin',_Plugin);

$debe=0;

$rows = '';

foreach($consulta as $recmantto){

$row=new
view('reportes_recuperacion_cuotas_extraordinarias_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$recmantto['fecha']));

$row-
>addparameter('numrecibo',$recmantto['numrecibo']);

$row-
>addparameter('Fecha_Pago',date('j/n/Y',$recmantto['Fecha_Pago']));

$row-
>addparameter('Referencia',$recmantto['Referencia']);

$row-
>addparameter('Concepto',$recmantto['nombreServicio']);

$row-
>addparameter('Descripcion1',$recmantto['Descripcion1']);

$row-
>addparameter('Descripcion2',$recmantto['Descripcion2']);

$row-
>addparameter('Entradas',$recmantto['Entradas']);

$rows.=$row->cargar(true);
104
}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function cuota_mantto_por_pagar(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);

$consulta = $db-
>union(array('e'=>'serviciosingresos','s'=>'ingresos'),array('e'=>'id_servicio','s'=>
'id'),'s.*,e.nombreServicio','s.descripcion1="Liquidacion Cuota"');

$tabla = new
view('reportes_cuota_mantto_pagar_tabla','plugin',_Plugin);

$debe=0;

$rows = '';

foreach($consulta as $recmantto){

$row=new
view('reportes_cuota_mantto_pagar_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$recmantto['fecha']));

$row-
>addparameter('numrecibo',$recmantto['numrecibo']);

$row-
>addparameter('Fecha_Pago',date('j/n/Y',$recmantto['Fecha_Pago']));

$row-
>addparameter('Referencia',$recmantto['Referencia']);
105
$row-
>addparameter('Concepto',$recmantto['nombreServicio']);

$row-
>addparameter('Descripcion1',$recmantto['Descripcion1']);

$row-
>addparameter('Descripcion2',$recmantto['Descripcion2']);

$row-
>addparameter('Entradas',$recmantto['Entradas']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function cuota_adelantada_saldo_afavor(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);

$consulta = $db-
>union(array('e'=>'serviciosingresos','s'=>'ingresos'),array('e'=>'id_servicio','s'=>
'id'),'s.*,e.nombreServicio','s.descripcion1="Saldo a Favor"');

$tabla = new
view('reportes_cuota_mantto_saldoafavor_tabla','plugin',_Plugin);

$debe=0;

$rows = '';

foreach($consulta as $recmantto){
106
$row=new
view('reportes_cuota_mantto_saldoafavor_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$recmantto['fecha']));

$row-
>addparameter('numrecibo',$recmantto['numrecibo']);

$row-
>addparameter('Fecha_Pago',date('j/n/Y',$recmantto['Fecha_Pago']));

$row-
>addparameter('Referencia',$recmantto['Referencia']);

$row-
>addparameter('Concepto',$recmantto['nombreServicio']);

$row-
>addparameter('Descripcion1',$recmantto['Descripcion1']);

$row-
>addparameter('Descripcion2',$recmantto['Descripcion2']);

$row-
>addparameter('Entradas',$recmantto['Entradas']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();




}

function intereses_cuota_ordinaria(){

global $db;

$mes = getParameter('month');

$anio = getParameter('year');

$diaIni=mkti me(0,0,0,$mes,1,$anio);

$diaFin=mktime(23,0,0,$mes,date('t',$diaIni),$anio);
107
$consulta = $db-
>union(array('e'=>'serviciosingresos','s'=>'ingresos'),array('e'=>'id_servicio','s'=>
'id'),'s.*,e.nombreServicio','s.descripcion1="Cuota Ordinaria"');

$tabla = new
view('reportes_intereses_cuotas_ordinarias_tabla','plugin',_Plugin);

$debe=0;

$rows = '';

foreach($consulta as $recmantto){

$row=new
view('reportes_intereses_cuotas_ordinarias_row','plugin',_Plugin);

$row-
>addparameter('fecha',date('j/n/Y',$recmantto['fecha']));

$row-
>addparameter('numrecibo',$recmantto['numrecibo']);

$row-
>addparameter('Fecha_Pago',date('j/n/Y',$recmantto['Fecha_Pago']));

$row-
>addparameter('Referencia',$recmantto['Referencia']);

$row-
>addparameter('Concepto',$recmantto['nombreServicio']);

$row-
>addparameter('Descripcion1',$recmantto['Descripcion1']);

$row-
>addparameter('Descripcion2',$recmantto['Descripcion2']);

$row-
>addparameter('Entradas',$recmantto['Entradas']);

$rows.=$row->cargar(true);

}

$tabla->addparameter('row',$rows);

$tabla->cargar();
108
}

function CuotasExtra(){




}

function AcumuladaCoutaExtra(){




}

function inquilino(){

global $db,$user;

$casa = getParameter('casa');

echo '<script
type="text/javascript">alert("hola");</script>Hola';

$db->variable('casa',getParameter('casa'));

$user = $db-
>union(array('u'=>'usuario','c'=>'casas'),array('u'=>'id','c'=>'user'),'u.*,c.casa','c.c
asa={casa}');

$user = $user[0];

$view = new view('inquilino','plugin',_Plugin);

$view->addparameter('user',$user);

$view->cargar();

}

}

$AjaxSidebar = new AjaxSidebar();

$AjaxSidebar->select(getParameter('accion'));

?>
109
Usuario

Este modulo se encarga de usuarios, te permite insertar los diferentes tipos de
clientes, mostrar la lista y si deseas modificarlos te muestra un formulario listo
para ser modificado.

Ajax


<?php

class UsuarioAjax extends ajax{

function usuario(){

global $db;

$file_css = new file_css();

$file_css->add(array(

'file'=>'usuario',

'type'=>'plugins',

'plugin'=>_Plugin

));

$file_css->cargar();

$view = new view('usuarios','plugin',_Plugin);

$consulta = $db->query('grupos');

$grupos=lista($consulta,'id','nombre');

$view->addparameter('grupos',$grupos);




$view->cargar();

}

function lista(){

global $db;

$consulta = $db->query('usuario');
110
$list = '';

foreach($consulta as $cliente){

$user = new view('userlist','plugin',_Plugin);

$user->addparameter('id',$cliente['id']);

$user->addparameter('nombre',$cliente['nombre']);

$user->addparameter('apellidos',$cliente['apellidos']);




$user->cargar();

}

}

function detalles(){

global $db;

$db->variable('id',getParameter('id'));

$usuario= $db-
>union(array('u'=>'usuario','g'=>'grupos'),array('u'=>'group','g'=>'id'),'u.*,g.nombr
e as grupo','u.id={id}');

$us=$usuario[0];

$db->variable('id',$us['id']);

$casa = $db->query('casas','user={id}');

if(isset($casa[0])){

$casa=$casa[0];

$detalles = new view('cliente','plugin',_Plugin);

$detalles->addparameter('casa',$casa);

$detalles->addparameter('user',$us);

$detalles->cargar();

}else{
111
$detalles = new view('usuario','plugin',_Plugin);

$detalles->addparameter('user',$us);

$detalles->cargar();

}




}

function insertarUsuario(){

global $db,$log;




$group=getParameter('grupo');

$array = array(

'nombre'=>getParameter('nombre'),

'apellidos'=>getParameter('apellidos'),

'login'=>getParameter('login'),

'password'=>getParameter('pass'),

'mail'=>getParameter('mail'),

'group'=>$group,

);

print_r($array);




$id=$db->insert('usuario',$array);

$arlog=$array;

$arlog['id']=$id;

$log->insert('Insertar Usuario',serialize($arlog));
112
if($group==4){

$casa = array(

'user'=>$id,

'pagos'=>getParameter('pagos'),

'deuda'=>getParameter('deuda'),

'casa'=>getParameter('casa')

);




$casid=$db->insert('casas',$casa);

$caslog=$casa;

$caslog['id']=$casid;

$log->insert('Insertar Casa',serialize($arlog));

}







$db->variable('id',$id);

$cliente = $db->query('usuario','id={id}');

$cliente=$cliente[0];




$user = new view('userlist','plugin',_Plugin);

$user->addparameter('id',$cliente['id']);

$user->addparameter('nombre',$cliente['nombre']);

$user->cargar();

}

function enviarModificar(){
113
global $db;

$group=getParameter('group');

$id=getParameter('id');

$array = array(

'nombre'=>getParameter('nombre'),

'apellidos'=>getParameter('apellidos'),

'login'=>getParameter('login'),

'password'=>getParameter('password'),

'mail'=>getParameter('mail'),

'group'=>$group

);

$upus=$db-
>update('usuario',$array,array('row'=>'id','value'=>$id));

$upcasa='';

if($group==4){

$casa=array(

'pagos'=>getParameter('pagos'),

'deuda'=>getParameter('deuda'),

'casa'=>getParameter('casa'),

);

$upcasa=$db-
>update('casas',$casa,array('row'=>'user','value'=>$id));

}

if($upus){

echo 'Se ha modificado con exito';

}else{
114
echo 'Tuvimos un problema al modificarlo';

}

}

function modificarUsuario(){

global $db;

$db->variable('id',getParameter('id'));

$consulta=$db->query('usuario','id={id}');

$user=$consulta[0];

$grupo=$db->query('grupos');

$group=lista($grupo,'id','nombre',$user['group']);

$db->variable('user',$user['id']);

$casa=$db->query('casas','user={user}');

$view = new view('usuarioModificar','plugin',_Plugin);

$view->addparameter('user',$user);

$view->addparameter('group',$group);

if(isset($casa[0])){

$casa=$casa[0];

$view->addparameter('casa',$casa['casa']);

$view->addparameter('pagos',$casa['pagos']);

$view->addparameter('deuda',$casa['deuda']);

}else{

$view->addparameter('casa','');

$view->addparameter('pagos','');

$view->addparameter('deuda','');

}
115
$view->cargar();

}

}

$UsuarioAjax = new UsuarioAjax;

$UsuarioAjax->select(getParameter('accion'));

?>

6.2 Controller

Esta capa est definida en una carpeta con el mismo nombre en la carpeta
principal, su funcin es manejar el sistema central del sistema. Es el conjunto
de clases que sirve para ir construyendo el sistema e ir procesando todas las
peticiones que se realizan al proyecto.

6.2.1 Ajax

Esta clase se usa para heredarla y asi poder crear una forma de que el sistema
pueda interactuar con tu ajax.

Select

Este mtodo sirve para recibir como va a reaccionar el archivo Ajax que se
emplean en los proyectos. Este mtodo responde llamando a la funcin que se
esta empleando.

Parmetros

$condition Es la condicin que ser utilizada para llamar la funcin


<?php

/**

* Clase Ajax

*

* Manejo de Carga de Metodos en Ajax

*

* Maneja la carga de los metodos

* en los archivos ajax, que sirven para
116
* la entrega de informacion

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class ajax extends IzanamiController{

/**

* Este metodo sirve para recibir como va a reaccionar el archivo Ajax

* que se emplean en los proyectos. Este metodo responde llamando a la

* funcion que se esta empleando.

*

* @param string $condition esto recibe la condicion

*/

Public function select($condition){

if(method_exists($this, $condition)){



accion
//Aqui se llama al metodo de la llamada para activar la

$this->$condition();

}

}

}

?>
117
6.2.2 Control

Esta clase se denomina el ncleo del sistema, esta clase es el encargado de
cargar las distintas capas, y hacer la relacin entre ellas. Su funcin principal
es hacer las conexiones, y cargar todos los archivos de configuracin. Esta
misma clase a su vez depende de una clase llamada load.

Cargar

Este mtodo se encarga de llamar la clase load la cual se encarga de entregar
la direccin de un archivo segn los parmetros dados, y asi cargar ese archivo
para el uso de las clases o funciones que contiene.

Parmetros

$archivo El nombre del archivo sin formato

$folder La capa en la que se encuentra el archivo

$extra Una carpeta extra o dato extra para localizar el archivo

Regreso

Si la variable $return es true, se regresa el contenido del archivo, de lo
contrario simplemente se muestra el contenido.

Funcin

Este mtodo llama a una funcin en caso de ser necesaria.

Parmetros

$nombre Es el nombre de la funcin que se quiere ser llamada

$parameter El conjunto de parmetros que se necesitan en un arreglo

$back Defines si el resultado ser mostrado o regresado

Contenido

Este mtodo se encarga de manejar el contenido, y este mtodo muestra cierta
cantidad de contenido segn es pedido.

Sidebar

Este mtodo es parecido a contenido, pero esta llama el contenido de las
barras de la derecha del contenido. Este mtodo llama los sidebar de los
mdulos en caso de ser accedido al modulo, en caso de no existir, se llama al
sidebar de la Vista o App.
118
Plugin

Este mtodo crea un objeto para que sidebar y contenido pueda acceder al
contenido y el sidebar de los mdulos.

Redirect

Este mtodo responde a las peticiones de la Aplicacin, y enva a contenido
segn se la informacin que se ha pedido.

Get Redirect Dir

Este mtodo se usa para obtener la direccin de la carpeta y as poder
cargarla.

Frontend

Este mtodo es simple, regresa el contenido por default en caso de que no
hayas hecho ninguna peticin. Este contenido es presentado cuando entras a
la Aplicacin.

<?php

/**

* Clase Cargar

*

* Manejo de Carga de Archivos

*

* Maneja la carga de los archivos

* Crea las dirreciones a diferentes

* archivos de las tres capas.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/
119
class load{

private $path_model;
private $path_control;
private $path_plugin;
private $path_index;



private $archivo;
private $folder;
private $extra;
/**

* El contructor de la clase, esta obtiene los valores de el archivo.

*



cargar
* @param string $archivo Obtiene el nombre del archivo que vas a

* @param string $folder Obtienes el parametro que se usara para
diferenciar la capa que se usara

* @param string $extra Obtienes el parametro para cargar la carpeta de
alguna de las capas

*/

function load($archivo,$folder,$extra){

$this->archivo=$archivo;

$this->folder=$folder;

$this->extra=$extra;

}

/**

* Esta funcion sirve para decirle donde esta la carpeta Mode

*
120
* @param string $path Localizacion de carpeta Model

*/

function set_path_model($path){

$this->path_model=$path;

}

/**

* Esta funcion sirve para decirle donde esta la carpeta Controller

*

* @param string $path Localizacion de carpeta Controller

*/

function set_path_control($path){

$this->path_control=$path;

}

/**

* Esta funcion sirve para decirle donde esta la carpeta de los Plugins para
cargar modulos

*

* @param string $path Localizacion de carpeta Modules

*/

function set_path_plugin($path){

$this->path_plugin=$path;

}

/**

* Esta funcion sirve para decirle donde esta la carpeta usada como
modulo de inicio

*
121
* @param string $path Localizacion de carpeta Inicio

*/

function set_path_index($path){

$this->path_index=$path;

}

/**

* Esta funcion sirve para decirle donde esta la carpeta Application

*

* @param string $path Localizacion de carpeta de la Application

*/

function set_path_app($path){

$this->path_app=$path;

}

/**

* Tomando los datos arriba cargados esta funci on crea la direccion para

* que la funcion cargar en control.php pueda cargar el archivo y presentar

* el resultado

*/

function dir(){

global $CFG;

$folder=$this->folder;

$archivo=$this->archivo;

$extra=$this->extra;

$f = explode(':', $folder);

$dir = '';
122
if ($archivo == 'index') {

$dir = $CFG['path'] . DS . $CFG['dirapp'] . DS . 'modules' . DS .
$folder . DS;

} else {

if (count($f) > 1) {

$dir = $f[0] . '/';

} else {

switch ($folder) {

case 'model':

$dir=$this->path_model;

break;

case 'control':

$dir=$this->path_control;

break;

case 'plugin':

if (!empty($extra)) {

$dir=$this->path_plugin . $this->extra . DS;

} else {

$dir=$this->path_plugin;

}

break;

case 'app':

$dir = $this->path_app;

break;

case 'vista':

$dir = $this->path_app.$this->extra.DS;
123
break;

default:

echo '<font color="green">' . $folder . ' - Por favor, usa el
cargador adecuado.</font>';

break;

}

}

}

return $dir;

}

}

/**

* Core

*

* Manejo de Carga de Archivos

*

* Maneja la carga de los archivos

* Crea las dirreciones a diferentes

* archivos de las tres capas.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class core {
124
private $plugin;

/**

* Esta funcion carga un archivo que le des dependiendo de los valores a
enviar

*

* @return string El contenido de el archivo pedido

* @param string $archivo El nombre del archivo sin formato

* @param string $folder La capa en la que se encuentra el archivo

* @param string $extra Una carpeta extra o dato extra para localizar el
archivo

* @param boolean $return Defines si sera regresado como una variable o
se imprimira directo

*

*/

public function cargar($archivo, $folder='', $extra='', $return=true) {

global $CFG;

//Aqui es llamada la clase load que se encarga de dar las direcciones de
los archivos

$load = new load($archivo,$folder,$extra);

$load->set_path_model($CFG['path'] . DS . $CFG['dirmodel'] . DS);

$load->set_path_control($CFG['path'] . DS . $CFG['dircontrol'] . DS);

$load->set_path_plugin($CFG['path'] . DS . $CFG['dirapp'] . DS .
'modules' . DS,$extra);

$load->set_path_app($CFG['path'] . DS . $CFG['dirapp'] . DS);

$load->set_path_index($CFG['path'] . DS . $CFG['dirapp'] . DS .
'modules' . DS . $folder . DS);

$dir=$load->dir();

ob_start();
125
if (dev_mode()) {

$include = $dir . $this->archivo($archivo, $dir);

} else {

$include = $dir . $archivo . '.php';

}

if (file_exists($include)) {

include($include);

} else {

$back=false;

}

$back = ob_get_clean();

if ($return)

return $back;

else

echo $back;

}

/**

* Esta funcion recorre la carpeta para obtener el nombre y el formato

*

* @return string Regresa el nombre con formato (Ej. archivo.php)

* @param string $nombre recibe el nombre del archivo

* @param string $folder La direccion de la carpeta del archivo

*/

private function archivo($nombre, $folder) {

$array = files($folder);
126
if(file_exists($folder)){

foreach ($array as $files) {

if ($nombre == $files[0]) {

return $files[0] . '.' . $files[1];

}

}

}

return false;

}

/**

* Esta funcion sirve para llamar a una funcion cualquiera

*

* @param string $nombre Este es el nombre de la funcion

* @param string $parameter los parametros de la funcion

* @param boolean $back Defines si el resultado sera mostrado o
regresado

*/

public function funcion($nombre, $parameter, $back=false) {

$return = call_user_func_array($nombre, $parameter);

if ($back) {

return $return;

} else {

echo $return;

}

}

/**
127
* Manejador del Contenido del framework

*

* @return string Regresa todo el archivo para su uso en el app.php

*/

public function contenido() {

global $CFG;

switch (true) {

case(is_home()):

$return = $this->frontend();

break;

default:

$return = $this->redirect();

break;

}

return optimizar($return);

}

/**

* Manejador de la barra de los extremos

*

* @return string Regresa el contenido del sidebar, tanto por default como
de los plugins

*/

public function sidebar(){

$get=getParameter('ap');

if(!empty($get)){

$modulo_dir=$this->get_redirect_dir($get);
128
$folder=$modulo_dir;

if(empty($this->plugin)){

$this->plugin($folder);

}

$plugin = $this->plugin;

$sidebar = $this->cargar('sidebar','plugin',$modulo_dir);

}else{

$sidebar = $this->cargar('sidebar','app');

}




if($sidebar){

return $sidebar;

}

return false;

}




private function plugin($folder){

$this->plugin = new plugin($folder);

}

/**

* Esta funcion maneja las redirrecciones para mostrar los modulos en
contenido

*

* @return string Regresa el contenido a mostrarse si se usa un modulo o
en caso contrario el mensaje de error en caso que el modulo no exista

*/
129
public function redirect() {

global $CFG,$db;

$red = new ModelRedirect;

$redir = $red->getRedirect(getParameter($CFG['redir']));

$type = $redir['type'];

$value = $redir['value'];

switch($type){

case 'module':

$mod = new ModelModules;

$modulo_item = $mod->getModule($redir);

$archivo = $modulo_item['archivo'];

$folder = $modulo_item['folder_name'];

if(empty($this->plugin)){

$this->plugin($folder);

}

$plug = $this->plugin;




if(!empty($archivo)){

$file = $archivo;

}else{

$file = $folder;

}




if($plug->exist()){

$return = $this->cargar($file, 'plugin',$folder,true);
130
}else{

$return = _e('plugin_no_exists');

}
break;
default:
$error404 = new view('404');

$return = $error404->cargar(true);

break;

}

return $return;

}

/**

* Se usa para obtener la carpeta a donde envia la redireccion...

*

* @return string Regresa el nombre de el modulo

* @param string $par Valor de la redireccion

*/

public function get_redirect_dir($par){

global $db;

$red = new ModelRedirect;

$modulo = $red->Redirect2Module($par);

return $modulo;

}

/**

* Muestra el contenido de el archivo de inicio en el lugar del contenido
131
*

* @return string Regresa el contenido para ser usado

*/

function frontend() {

$return = $this->cargar('index', 'index');

return $return;

}

}

class IzanamiController{




}

?>

6.2.3 Log

Esta clase es la encargada de guardar las acciones que los usuarios realizan
en el sistema.

Insert

Este mtodo es usado para insertar en la tabla del log de la base de datos, este
guarda la accin conectada al usuario y al grupo que lo realizo.

Parmetros

$idaccion Es un Cdigo de identificacin de la accin

$detalleaccion Es la accin detallada, en muchos casos son los datos de
accin serializados

Regreso

Se regresa el nmero de identificacin de la llave primaria de la tabla de
registro insertado.

Get User Log

Este metodo puede ser usado para obtener una lista de registros en el log que
corresponden a un usuario.
132
Parmetros

$user Es el usuario del que quieres obtener el log

Regreso

Regresa el arreglo multidimensional del que est constituido esa consulta.

Get Group Log

Este mtodo puede ser usado para obtener una lista de registros en el log que
corresponden a un grupo.

Parmetros

$group Es el grupo del que quieres obtener el log

Regreso

Regresa el arreglo multidimensional del que est constituida esa consulta.

Get Action Log

Este mtodo puede ser usado para obtener una lista de registros en el log que
corresponden identificador de una accion.

Parmetros

$value Es el valor que ser el identificador que desees.

Regreso

Regresa el arreglo multidimensional del que est constituido esa consulta.

<?php

/**

* Clase Seguimiento

*

* Manejo de Seguimiento

*

* Maneja la interacion de los usuarios

* con el sistema, y hace una guardado
133
* de las acciones que ellos hacen en el.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class log{

/**

* El metodo usado para insertar en la base de datos del log, este guarda la
accion

* conectada al usuario y al grupo que lo realizo.

*

* @param string $idaccion Es un Titulo de Identificacion de la accion

* @param string $detalleaccion La accion detallada, en muchos casos son
los datos de accion serializados

*/

function insert($idaccion,$detalleaccion){

global $db,$user;




$u=$user->data();

$usID=$u['id'];

$usNombre=$u['nombre'].','.$u['apellidos'];

$g=$user->group();

$groupID=$g['id'];

$groupName=$g['nombre'];
134
if(is_array($detalleaccion)){

$detalleaccion=serialize($detalleaccion);

}

$insert = array(

'fecha'=>time(),

'userID'=>$usID,

'userNombre'=>$usNombre,

'groupID'=>$groupID,

'groupNombre'=>$groupName,

'idaccion'=>$idaccion,

'detalleaccion'=>$detalleaccion

);

$id=$db->insert('log',$insert);

return $id;

}

/**

* El metodo usado para insertar en la base de datos del log, este guarda la
accion

* conectada al usuario y al grupo que lo realizo.

*

* @param string $idaccion Es un Titulo de Identificacion de la accion

* @param string $detalleaccion La accion detallada, en muchos casos son
los datos de accion serializados

*/

function getUserLog($user){

global $db;
135
$db->variable('usuario',$user);

$consulta = $db->query('log','userID={usuario} OR
userNombre LIKE "{usuario}"');

return $consulta;

}

function getGroupLog($group){

global $db;

$db->variable('grupo',$group);

$consulta = $db->query('log','group="{grupo}"');

return $consulta;

}

function getActionLog($value){

global $db;

$db->variable('accion',$value);

$consulta = $db->query('log','idaccion LIKE "{accion}"');

return $consulta;

}

}

?>

6.2.4 Plugin

Esta clase fue diseada para un mejor manejo tanto de los plugins como de los
mdulos, dado varias funciones para su uso.

Exist

Este mtodo es usado para saber si el plugin o modulo existe.

Regreso

Regresa verdadero o falso, segn existiera o no este modulo.
136
Ajax

Este mtodo es usado cuando se usa ajax, para responder de distinta manera
a estas peticiones.

Cargar

Este mtodo es usado para cargar el modulo que es necesario dependiendo
las peticiones que mandes a llamar.


<?php

/**

* Plugin

*

* Manejo de Plugins

*

* Esta clase fue diseada para un mejor manejo tanto

* de los plugins como de los modulos, dando varias funciones

* para su uso.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class plugin extends IzanamiController{

private $plugin;

public function construct($value){

$this->plugin($value);

}
137
public function plugin($value){

$this->plugin=$value;

define('_Plugin',$value);

$this->Agregados();

}

public function exist(){

global $db;

$modulo = new ModelModules();

$count = $modulo->pluginExists($this->plugin);

if ($count > 0) {

return true;

} else {

return false;

}

}

public function ajax(){

global $CFG,$core,$user,$db;

$dirapp=$CFG['path'].DS.$CFG['dirapp'].DS.$CFG['dirplugin'];

$plugin=$dirapp.DS.$this->plugin.DS;




$include=$plugin.getParameter('file').'.php';

if(file_exists($include)){

include($include);

}

}
138
public function cargar(){

global $CFG,$core,$user,$db;

$dirapp=$CFG['path'].DS.$CFG['dirapp'].DS.$CFG['dirplugin'];

$plugin=$dirapp.DS.$this->plugin.DS;




$include=$plugin.getParameter('file').'.php';

if(file_exists($include)){

include($include);

}

}

private function Agregados(){

global $CFG;

$dirapp=$CFG['path'].DS.$CFG['dirapp'].DS.$CFG['dirplugin'];

$plugin=$dirapp.DS._Plugin.DS;




$control = $plugin.$CFG['ProjectFolderControl'];

$func = $plugin.$CFG['ProjectFolderModel'];

cargar_file($control);

cargar_file($func);

}

}

?>
139
6.2.5 Seguridad

Es una clase usada para la seguridad de los datos.

1.1.1. Encriptar

Este mtodo es usado para poder proteger cierto dato, usando a su vez una
palabra a la cual llamamos token con la cual se transforma el dato.

Parmetros

$valor Este es el valor a encriptar

$token Este es la contrasea con la que se oculta el $valor, por defecto es
usado 123456

Desencriptar

Este mtodo es usado para poder devolver el dato a su estado normal y legible,
usando la misma palabra con la cual fue encriptado, si t usas otra palabra,
este texto queda ilegible.

Parmetros

$valor Este es el valor a encriptar

$token Este es la contrasea con la que se oculta el $valor, por defecto es
usado 123456


<?php

/**

* Seguridad

*

* Manejo de Seguridad

*

* Esta clase fue diseada para un crear una

* capa entre las entradas y salidas de informacion

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com
140
*

* @package Izanami_Controller_Classes

*/

class seguridad extends IzanamiController{

public function encrypt($valor,$token='123456'){

$result = '';

for($i=0; $i<strlen($valor); $i++) {


$char = substr($valor, $i, 1);

$keychar = substr($key, ($i % strlen($key))-1, 1);

$char = chr(ord($char)+ord($keychar));

$result.=$char;

}

return base64_encode($result);

}

public function decrypt($valor,$token='123456'){

$result = '';

$string = base64_decode($valor);

for($i=0; $i<strlen($valor); $i++) {

$char = substr($valor, $i, 1);

$keychar = substr($key, ($i % strlen($key))-1, 1);

$char = chr(ord($char)-ord($keychar));

$result.=$char;

}

return $result;

}
141
}

?>

Usuario

Esta clase controla todas las referencias a los usuarios en el sistema, dando un
control completo al desarrollador de poder administrar al usuario.

Login

Este mtodo realiza la conexin de un usuario usando los datos guardados en
la tabla de definida por defecto en el sistema. Este mtodo crea una cookie con
el nombre user para guardar el ID del usuario conectado.

Parmetros

$uname Es el Nombre de Usuario de el Usuario que est intentando acceder

$password Es la contrasea de el usuario que esta intentando acceder

$remember Es true, se considera que el usuario desea ser recordado y se
marca un tiempo de 30 das para guardar la Cookie.

Regresa

Este mtodo regresa 3 valores dependiendo el estado, en este caso son
nmeros:
1) Si todo procedi con normalidad y el usuario se conecto

2) Si el Nombre de usuario y/o la contrasea no son las adecuadas, y el
usuario es rechazado

0) Si se intenta enviar el nombre de usuario y/o la contrasea vacas.

Logout

Este mtodo toma el cookie creado en el mtodo login y borra el cookie, asi el
sistema declara al usuario desconectado.

Regreso

Regresa true (boolean) si el usuario fue correctamente desconectado y false
(boolean) si hubo algn problema al desconectarlo. Entre los problemas al
regresar false (boolean), puede ser simplemente visitar este mtodo sin un
usuario conectado o por alguna razn la cookie sigue estando despus de
haber realizado la destruccin de ella.
142
insertUser

Este mtodo recibe los datos de los usuarios e inserta al usuario. Este mtodo
nos es obligatorio para insertar un Usuario, puede ser usado cualquier mtodo
ya que no hay restricciones para el acceso a las bases de datos del sistema.

Parmetros

$nombre Es el Nombre del usuario

$apellidos Es el Apellido del usuario

$login Es el nickname del usuario

$password Es la contrasea del usuario

$grupo Es el numero de identificacin del usuario conforme a el grupo

$mail Es el correo electrnico del usuario

Regreso

Este mtodo regresa el nmero de identificacin del usuario insertado

randomPass

Este mtodo crea una contrasea aleatoria en caso de que no se quiera
otorgar una contrasea.

Parmetros

$length es el tamao de la contrasea

$chrs los caracteres permitidos para crear la contrasea

Regreso

Este mtodo regresa la contrasea creada y lista para ser usada.

Data

Este mtodo usando una id o nombre de usuario te da los datos del usuario
que estas pidiendo.

Parmetros

$user El usuario del que deseas obtener informacin. Si este parmetro no es
dado, se toma el usuario que est conectado.

Regreso
143
Regresa los datos del usuario pedido en un arreglo o en caso contrario se
regresa un false(boolean)

Group

Este mtodo sirve para obtener el grupo de cierto usuario, y para esto se le da
un id o un nombre de usuario.

Parmetros

$user Es el nombre de usuario o id del usuario que deseas obtener el grupo.




Regreso

Este mtodo regresa un arreglo con el contenido del grupo al que pertenece el
usuario.

Exists

Este mtodo verifica si el usuario que estas envindole en los parmetros
existe en la base de datos.

Parmetros

$ user Es el nombre de usuario o id del usuario que deseas obtener el grupo.

Regreso

Regresa true (boolean) si el usuario existe o false(boolean) si no encontr
algn usuario con esos datos.

<?php




class sessiones{

var $session=false;

Public function sessiones($session=false){

if($session){

$this->session=true;

session_start();

}
144
}




Public function set($name,$value,$expire=''){

if($this->session){

$this->set_session($name, $value);

}else{

$this->set_cookie($name, $value, $expire);

}

}

Public function destroy($name){

if($this->session){

$this->destroy_session($name);

}else{

$this->destroy_cookie($name);

}

}

Public function get($name){

if($this->session){

$return = $this->get_session($name);

}else{

$return = $this->get_cookie($name);

}

return $return;

}
145
Private function set_cookie($name,$value,$expire){

if(!isset($_COOKIE[$name])){

setcookie($name, $value);

}

}

Private function destroy_cookie($name){




if(isset($_COOKIE[$name])){

setcookie($name, '', time()-3600);

}

}

Private function get_cookie($name){

if(isset($_COOKIE[$name])){

return $_COOKIE[$name];

}else{

return false;

}

}




Private function set_session($name, $value){

$_SESSION[$name]=$value;

}

Private function destroy_session($name){

unset($_SESSION[$name]);

}
146
Private function get_session($name){

return $_SESSION[$name];

}

}

/**

* User

*

* Manejo de usuarios

*

* Administra a los Usuarios y las Conexiones de estos

* Existen funciones para crear contraseas aleatorias y mas

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class user extends IzanamiController {

/**

* Esta funcion crea la conexion y en todo caso la Cookie o Session
dependiendo de que se haya declarado

*

* @return int Regresa 1 si es Correcto, 2 Si el usuario no existe y 0 si hay
problemas con los datos

* @param string $uname es el nombre de usuario

* @param string $password es la contrasea del usuario
147
* @param boolean $remember esta opcion esta ahi por si se desea que
se recuerde la conexion para futuros dias

*

*/

function login($uname, $password, $remember = false) {

global $CFG,$db;




if (!empty($uname) && !empty($password)) {

$us = $db->query('usuario',"login='$uname' AND
password='$password'");

if (count($us) > 0) {

if ($remember) {

$expire = time() + $this->dias(30);

} else {

$expire = 0;

}

$cookies = new sessiones();

$cookies->set('user', $uname, $expire);

return 1;

} else {

return 2;

}

} else {

return 0;

}

}
148
/**

* Esta funcion Destruye la Cookie o Session creada para la conexion del
usuario

*

* @return boolean true si se destruyo y el usuario esta desconectado

*

*/

function logout() {

$cookie = getParameter('user', 'cookie');

if (!empty($cookie)) {

$cookies = new sessiones;

$cookies->destroy('user');

$new=getParameter('user', 'cookie');

if(!empty($new)){

return false;

}

return true;

} else {

return false;

}

}

/**

* Esta funcion sirve para crear crear

*

* @return string El contenido de el archivo pedido
149
* @param string $nombre Es el nombre que tendra el usuario en el
sistema

* @param string $login Es el nombre de usuario con el que se va a
identificar

* @param string $password Es la contrasea que el usuario necesita para
conectarse

* @param string $grupo Es el grupo al que pertenecera el usuarios

*

*/

function insertUser($nombre,$apellidos,$login,$password,$grupo,$mail) {

global $db;




$array=array(

'nombre'=>$nombre,

'apellidos'=>$apellidos,

'login'=>$login,

'password'=>$password,

'group'=>$grupo,

'mail'=>$mail

);

return $db->insert('usuario',$array);

}

/**

* Crea una contrasea aleatoria en caso de que no se quiera dar una

*

* @return string La contrasea creada
150
* @param int $length Es el tamao de la contrasea en caracteres[Por
defecto 10]

* @param string $chrs Son los caracteres usados para crear la
contrasea[Por defecto: Numeros y Abcedario Ingles(sin )]

*

*/

function randomPass($length=10, $chrs =
'1234567890qwertyuiopasdfghjklzxcvbnm') {

for ($i = 0; $i < $length; $i++) {

$pwd .= $chrs{mt_rand(0, strlen($chrs) - 1)};

}

return $pwd;

}

/**

* Regresa los datos de un usuario

*

* @return array Datos del usuario

* @param mi xed $user nombre de usuario o id del usuario para obtener
los datos, en caso de no existir toma al usuario que esta conectado.

*

*/

function data($user='') {

global $db;




if (empty($user)) {

$u = getParameter('user', 'cookie');

$user = $u;
151
}

if (is_numeric($user)) {

$where = "id=$user";

} else {

$where = "login='$user'";

}

$us = $db->query('usuario', $where);

if ($us) {

return $us[0];

} else {

return false;

}

}

/**

* Obtiene informacion sobre el grupo del usuario

*

* @return array Datos del grupo del usuario

* @param mi xed $user Nombre de usuario o Id del usuario, para obtener
datos del grupo al que pertenece, en caso de no existir, toma al usuario
conectado

*

*/

function group($user=''){

$db = new database();

$db->conn();

if (empty($user)) {
152
$u = getParameter('user', 'cookie');

$user = $u;

}

if (is_int($user)) {

$where = "id=$user";

} else {

$where = "login='$user'";

}

$us = $db->query('usuario', $where);

$us=$us[0];

$group=$us['group'];

$g= $db->query('grupos',"id=$group");

if ($us) {

return $g[0];

} else {

return false;

}

}




/**

* Verifica si el usuario existen en la base de datos

*

* @return boolean true En caso de que el usuarios exista

* @param mixed $user Nombre de usuario o ID del usuario, en caso de no
existir, se toma al usuario conectado.

*
153
*/

function Exists($user=''){

if(empty($user)){

$ses=new sessiones();

$user=$ses->get('user');

}

$data=$this->data($user);

if($data){

return true;

}else{

return false;

}

}

/**

* transforma horas a segundos para su uso en cookies

*

* @return int Segundos

* @param int $numero Horas

*

*/

function hora($numero=1) {

return $numero * (3600);

}

/**

* Transforma dias a segundos para su uso en cookies
154
*

* @return int Segundos

* @param int $numero Dias

*

*/

function dias($numero=1) {

return $numero * (3600 * 24);

}




}




?>

6.2.7 Funciones

Es el conjunto de funciones que el desarrollador puede utilizar en el dentro de
el desarrollo de algn proyecto. Estas funciones son usadas tambin dentro del
mismo sistema para mejorar los procesos.

Fechas

Obtener_hasta

Le das una fecha en formato unix, y es comparada con la fecha actual para as
obtener un formato para la fecha ms agradable a la vista.

Parmetros

$fecha Es un conjunto de 11 numero en formato UNIX

Regreso

Regresa la fecha en formato ejemplo: hace 6 mins.

PrettifyDate

Esta funcin obtiene una fecha en formato UNIX y con eso regresar la fecha en
un formato ms agradable
155
Parmetros

$time fecha en formato UNIX

$format obtienes que te va a regresar la funcin

Regreso

Este mtodo regresa una fecha ms agradable a la vista, para las personas.

<?php

function obtener_hasta($fecha) {

$f = time() - $fecha;

$seg = $f; //Segundos

$min = $seg / 60; //Minutos

$hora = $min / 60; //Horas

if ($hora > 1 && $hora < 24) {

$fecha = 'hace ';

$hora = ceil($hora);

$fecha.=($hora > 1) ? $hora . ' horas' : $hora . ' hora';

} else if ($seg > 60 && $min < 60) {

$fecha = 'hace ';

$min = ceil($min);

$fecha.=($min > 1) ? $min . ' mins' : $min . ' min';

} else if ($seg < 60) {

$fecha = 'hace ';

$seg = ceil($seg);

$fecha.=($Seg > 1) ? $seg . ' Segs' : $seg . ' seg';

} else {

$fecha = date('j/n/Y H:i', $fecha);
156
}

return $fecha;

}

function prettifyDate($time,$format='datetime'){

global $meses,$lang;

$dia=date('j',$time);

$mes=$meses[date('n',$time)];

$year=date('Y',$time);

$hora=date('g:i A',$time);

switch($format){

case 'dateCalendar':

$return=date('j/m/Y',$time);

break;

case 'date':

$return=$dia.' '.$lang['the'].' '.$mes.' '.$lang['the'].' '.$year;

break;

case 'datetime':

$return=$dia.' '.$lang['the'].' '.$mes.' '.$lang['the'].' '.$year.' '.$hora;

break;

}

return $return;

}

function String2Date($date){
list($day,$month,$year)=explode('/',$date);
return mktime(0,0,0,$month,$day,$year);
157
}

?>

Archivos

Files

Esta funcin escanea un directorio y as regresa la lista de los archivos de la
carpeta. Esta funcin divide dependiendo de el parmetro $only el escaneo
para solo archivos o solo dir, o por el contrario si quieres toda la lista.

Parmetros

$dir Es la direccin del directorio que queremos listar

$only Es el tipo de archivos que quieres listar. Archivos, Directorios o Todo.




Regreso

Esta funcin regresa la lista en un arreglo de lo que contiene el directori o
solicitado segn los parametros.

<?php

function files($dir, $only='') {

$array = array();

$dir = (isset($dir)) ? $dir : "/";

if(file_exists($dir)){

$directorio = opendir($dir);

while ($archivo = readdir($directorio)) {

switch ($only) {

case'file':

if ($archivo != '.' && $archivo != '..') {

if (is_file($dir . '/' . $archivo)) {

$array[] = explode('.', $archivo);

}
158
}

break;

case'dir':

if ($archivo != '.' && $archivo != '..') {

if (is_dir($dir . '/' . $archivo)) {

$array[] = explode('.', $archivo);

}

}

break;

default:

if ($archivo != '.' && $archivo != '..') {

$array[] = explode('.', $archivo);

}

break;

}

}

closedir($directorio);

}else{

return false;

}

return $array;

}

?>

Atrib

Le envas una lista de atributos que necesitas que un tag tenga, y el formatea
la lista para que quede en un formato HTML.
159
Parametros

$array es la lista de todos los atributos

$non es la lista de los atributos que quieras omitir

Regreso

Regresa una lnea en fomato HTML lista para agregarla a un tag.

<?php

function attr($array, $non=array()) {

$var = '';

if (is_array($array)) {

foreach ($array as $par => $val) {

if (search_array($par, $non)) {




if (is_int($par)) {

$var.=' ' . $val . ' ';

} else {

$var.=' ' . $par . '="' . $val . '" ';

}

}

}

}

return $var;

}

?>
160
Listas

Crea una lista para los select en HTML, usando un arreglo.

Parmetros

$array el areglo a ser usado para crear la lista.

$value el campo que ser declarado como el valor de la eleccin

$text el texto mostrado de cada tem

$select es el valor que ser seleccionado.

Regreso

Regresa la lista en HTML lista para ser utilizada en las vistas.

<?php

function lista($array,$value,$text,$select=''){

$lista = '';

foreach($array as $item){

if(is_array($text)){

$t=array();

foreach($text as $data){

$t[]=$item[$data];

}

$texto = implode(' ',$t);

}else{

$texto = $item[$text];

}




$valor=(isset($item[$value]))?$item[$value]:'';

$selected = ($select==$valor)?' selected ':'';
161
$lista.='<option value="'.$valor.'"'.$selected.'>'.$texto.'</option>';

}

return $lista;

}

?>

Get_Men

Esta funcin regresa los tems del men que estas solicitando.

Parmetros

$name Es el nombre de el Menu

$class son las clases CSS para los tems.

$view Es la vista que ser utilizada para cargar los tems.




Regreso

Regresa todo formateado y listo para ser usado.

<?php

function get_menu($name, $class='',$view) {

global $CFG,$db;

$Menus = new ModelMenu($view);

return $Menus->getMenus($name,$class);

}

?>
162
6.2.8 Optimizar

Toma un texto y le quita los saltos de lnea y las tabulaciones, para reducir el
espacio entre las lneas y comprimir para crear versin minified.

Parmetros

$texto es el texto a reducir

Regreso

Esta funcin regresa el texto reducido.

function optimizar($texto) {

$quitar = array("\r", "\n", "\t");

$texto = str_replace($quitar, '', $texto);

return $texto;

}

6.2.9 Sistema

Redirect

Esta funcin maneja la forma en que se crearan y se remplazaran las
redirecciones dentro de la llamada de los mdulos.

Parmetros

$link es el link que se le da a los mdulos.

Regreso

Regresa el link ya creado para la llama en los navegadores

Title

Esta funcin sirve para manejar mejor el titulo dentro de la capa de vistas.

Is_Home

Esta funcin sirve para saber si el usuario est en la pgina principal.

Regreso

Regresa true(boolean) si est en la pgina principal o false(boolean) si no lo
est.
163
Restrict

Esta funcin sirve para llamar a log.php que sera el archivo que llama a su
vez a la pantalla de login si el usuario es un visitante y no ha sido identificado.

<?php

function is_url($string){

if(is_string($string)){

$parse=parse_url($string);

if(isset($parse['scheme'])){

return true;

}else{

return false;

}

}else{

return false;

}

}

function actual($menu_item) {

global $CFG;

$val1 = $menu_item;

$val2 = '?' . $CFG['redir'] . '=' . getParameter($CFG['redir']);

if ($val1 == $val2) {

return true;

} else {

return false;

}

}
164
function urls($type) {

global $CFG;

switch ($type) {

case 'login':

$return = $CFG['url'] . 'login.php';

break;

case 'logout':

$return = $CFG['url'] . 'login.php?action=logout';

break;

}

return $return;

}

function InterfaceUrls($type,$array=array()){

global $CFG;

$add=array();

foreach($array as $par => $val){

$add[]=$par.'='.$val;

}

$return = $CFG['url'].$type.'?'.implode('&',$add);

return $return;

}

function getUrl() {

$s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s"
: "";

$protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/") . $s;
165
$port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":" .
$_SERVER["SERVER_PORT"]);

return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port .
$_SERVER['REQUEST_URI'];

}

function url($menos) {

$x = explode('/', getUrl());

$y = count($x) - 1;

for ($z = $y; $z > $y - $menos; $z--) {

unset($x[$z]);

}

$url = implode('/', $x);

return $url;

}




function getdir($var) {
global $CFG;
switch ($var) {
case 'theme':

//$return = $CFG['dirview'] . '/' . $CFG['dirtheme'] . '/' . $CFG['theme'] . '/';

$return = $CFG['dirapp'] . '/' . $CFG['dirview'] . '/';

break;

}

return $return;

}

?>
166
6.3 Model

Esta capa est definida en una carpeta con el mismo nombre en la carpeta
principal, su funcin es manejar los datos que el sistema maneja. La fuente
ms grande de informacin que esta capa maneja es la Base de datos, que
para tal accin de maneja un ORM (Mapeo objeto-relacional por sus siglas en
ingles) y una cuantas funciones que son utilizadas para la obtencin de los
datos del cliente.

6.3.1 ORM (Manejador de Conexiones a Base de datos)

Esta clase es una capa que se ha creado para que el desarrollador tenga un
punto de conexin con la base de datos, y que pueda manejar la seguridad de
forma excelente sin la necesidad de estar procurndose con la aplicacin de
seguridad por su cuenta.

Conn (Conexin)

Este mtodo es el encargado de tomar los datos que se le esta dando a la
clase y realizar una conexin con xito.

SQL

Este mtodo es para personas que no quieren tener las restricciones de los
dems mtodos de la clase, simplemente creas una consulta en SQL y se la
das como parmetro.

Parmetros

$sql se recibe directamente la consulta

Regreso

El mtodo regresa un arreglo multidimensional con los datos de la tabla que se
est consultando.

Query

Este mtodo es el encargado de darte una forma fcil de crear una consulta a
una tabla en la base de datos con solo decirle que tabla va a consultar.

Parmetros

$table se da el nombre de la tabla

$filter es la condicin con la que se filtrara la consulta

$order recibe el mtodo de ordenamiento de los resultados de la consulta

$limit recibe el numero de numero de registros que se obtendr
167
$mostrar se usa en produccin para ver las consultas sql realizadas

Regreso

El mtodo regresa un arreglo multidimensional con los datos de la tabla que se
est consultando.

Unin

Este mtodo es el encargado de crear conexiones entre dos tablas en una
consulta, esto nos permite no tener que crear dos consultas, y as, mejorar el
rendimiento de la consulta.

Parmetros

$tables se da el nombre de la tabla

$UnionCols se le da el nombre y un alias a cada tabla

$show Le dices que columnas de estas tablas vas a recibir

$filter es la condicin con la que se filtrara la consulta

$order recibe el mtodo de ordenamiento de los resultados de la consulta

$limit recibe el numero de numero de registros que se obtendr

$mostrar se usa en produccin para ver las consultas sql realizadas

Regreso

El mtodo regresa un arreglo multidimensional con los datos de la tabla que se
est consultando.

Insert

Este mtodo es el encargado de insertar a un registro en una tabla.

Parmetros

$tables se da el nombre de la tabla

$array recibes un arreglo con los campos de la tabla y los valores a darle

$mostrar se usa en produccin para ver las consultas sql realizadas

Regreso

El mtodo regresa el nmero de identificacin del registro creado.
168
Update

Este mtodo es el encargado de la manipulacin de un registro en cierta tabla.

Parmetros

$table se da el nombre de la tabla

$array recibes un arreglo con los campos de la tabla y los valores a darle

$id El valor de la llave primaria del registro que se modificara

Regreso

Regresa el valor de la consulta que sera la manipulacin completa de los
resultados o un false en caso de problemas al modificar

<?php

/**

* Clase Database

*

* Es el ORM que se usa en el framework para Mysql

*

* Esta clase es la capa de conexion entre el Framework y

* la base de datos. Esta clase te da todos los metodos

* necesarios para crear, modificar, eliminar y consultar

* en la base de datos.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class database {
169
var $host; // Direccion del Servidor

var $user; // Usuario de Base de Datos
var $pass; // Password de Base de Datos
var $db; // Dase de Datos
var $db_link; // Variable donde se Guarda la conexion para el Manejo de
la clase

var $conn = false;

var $persistant = false;
public $error = false;
var $variable=array();
/**

*

*/

public function setpersistance(){

$this->persistant=true;

}

/**

* Este metodo es el encargado de crear la conexion, y recoger los datos

* para tal proposito

*/

public function conn(){

global $CFG;




$this->host = $CFG['dbhost'];

$this->user = $CFG['dbuser'];

$this->pass = $CFG['dbpass'];
170
$this->db = $CFG['dbname'];







if ($this->persistant)



true);
$this->db_link = mysql_pconnect($this->host, $this->user, $this->pass,

else



true);
$this->db_link = mysql_connect($this->host, $this->user, $this->pass,




if (!$this->db_link) {

if ($this->error) {

$this->error($type=1);

}

return false;

}else {

if (empty($this->db)) {

if ($this->error) {

$this->error($type=2);

}

}else {

$db = mysql_select_db($this->db, $this->db_link);

if (!$db) {

if ($this->error) {

$this->error($type=2);

}
171
return false;

}

$this -> conn = true;

}

return $this->db_link;

}

}

/**

* Este metodo cierra la conexion de la Base de datos

*/

function close() {

if ($this -> conn){

if ($this->persistant) {

$this -> conn = false;

}else {

mysql_close($this->db_link);

$this -> conn = false;

}

}else {

if ($this->error) {

return $this->error($type=4);

}

}

}

/**
172
* En caso de algun error en la base de datos, este es el metodo

* que responde ante ellos

*

* @param int $type el tipo de error, y muestra el mensaje

*/

public function error($type=''){

if (empty($type)) {

return false;

}

else {

switch($type){

case 1:

_e('DBnotConnect');

break;

case 2:

_e('MysqlError',mysql_error());

break;

case 3:

_e('MysqlProcessStoped');

break;

default:

_e('MysqlENoConnect');

break;

}

}
173
}

/**

* Es el metodo permite realizar las consultas en lenguaje sql

*

* @param string $sql consulta sql.

*/

public function sql($sql){

$conexion=$this->db_link;

$data=array();

$consulta = @mysql_query($sql, $conexion);

if(!$consulta){

return false;

}else{

while ($fila = mysql_fetch_assoc($consulta)) {

$data[]=$fila;

}

return $data;

}

}

/**

* Este metodo es interior, y es el encargado de el manejo de filtros

* para la correcta utilizacion de la seguridad del ORM

*

* @param string $value el valor enviado por los metodos publicos

*/
174
private function filter($value){

if(!empty($value)){

$value=$this->SetVar($value);

return 'where '.$value;

}else{

return '';

}

}

/**

* Este Remplaza las variables en los filtros.

*

* @param string $data variable que se rempl azara

*/

private function SetVar($data){

foreach($this->variable as $var => $val){

$data=str_replace('{'.$var.'}',$val,$data);

}

return $data;

}

/**

* Este metodo es el encargado de manejar el orden de el resultado

* de una consulta

*

* @param array $val es un arreglo con los 2 datos (1) Columna de orden, y
(2)Metodo(ASC,DESC)

*/
175
private function order($val){

if(!empty($val)){

if(is_array($val)){

$table=$val['table'];

$data = $val['orden'];

$order = ' ORDER BY `'.$table.'` '.$data;

}else{

$order = ' '.$val;

}




return $order;

}else{

return '';

}

}

/**

* Este es el metodo interno que maneja los limites de la consulta

* y el alcance de estas.

*

* @param array $limit valores que se necesitan para limitar

*/

private function limit($limit){

$limited = '';

if(!empty($limit['inicio']) || !empty($limit['numero'])){

if(count($limit)>1){
176
$limited=' limit '.$limit['inicio'].','.$limit['numero'];

}else if(count($limit)>0){

$limited=' limit '.$limit['inicio'];

}

}

return $limited;

}

/**

* Este metodo es el ecargargo de enviar variables a los filtros

* y asi poder sanitizarlos.

*

* @param string $variable variable para distinguir el dato dentro de la
consulta

* @param string $value dato que se envia para ser sanitizado

*/

public function variable($variable,$value){

$conexion = $this->db_link;

$return=htmlspecialchars($value,ENT_QUOTES);

$this->variable[$variable]=$return;

}

/**

* Este metodo es el encargado de crear el nombre de la tabla en el INNER
JOIN

*

* @param string $condition esto recibe la condicion

* @return string Regresa el Nombre de la tabla en la union formado "tabla t".
177
*/

private function unionTab($number,$tabassoc){

if($number=='1' || $number=='2'){

return $tabassoc['table'].' '.$tabassoc['assoc'];

}else{

return '';

}

}

/**

* Este metodo sirve para recibir como va a reaccionar el archivo Ajax

* que se emplean en los proyectos. Este metodo responde llamando a la

* funcion que se esta empleando.

*

* @param string $condition esto recibe la condicion

* @return string Regresa la Comparacion de las tablas en la consulta INNER
JOIN "u.id=a.b"

*/

private function ConUnion($UnionCols){

$add = array();

foreach($UnionCols as $assoc => $value){

$add[] = $assoc.'.'.$value;

}

return implode('=',$add);

}

/**

* Esta funcion es la encargada de crear un Consulta JOIN
178
*

* @param string $condition esto recibe la condicion

*/

public function
union($tables,$UnionCols,$show='*',$filter='',$order='',$limit='',$mostrar=false){




if(is_array($tables) && is_array($UnionCols)){

$sql = '';

// Select * from usuario u inner join casas c on u.id=c.user;

$x = 0;

$tabl=array();

foreach($tables as $assoc => $value){

$tabl[]=array(

'table'=>$value,

'assoc'=>$assoc

);

}

$firstTable = $this->unionTab('1',$tabl[0]);

$secondTable = $this->uniontab('2',$tabl[1]);




$sql = 'Select '.$show.' from '.$firstTable;

$sql.=' INNER JOIN '.$secondTable.' ON '.$this-
>ConUnion($UnionCols);

}




$filter = $this->filter($filter);
179
$orden = $this->order($order);

$limit = $this->limit($limit);

$sql.=' '.$filter.$order.' '.$limit;

if($mostrar){

echo $sql;

}

$consulta = $this->sql($sql);

return $consulta;

}

/**

* Este metodo es el encargado de realizar las consultas basicas

*

* @param string $table se da el nombre de la tabla

* @param string $filter es la condicion con la que se filtrara la consulta

* @param array $order recibe el metodo de ordenamiento de los resultados
de la consulta


* @param boolean $mostrar se usa en produccion para ver las consultas sql
realizadas

* @return array regresa un arreglo multidimensional con los datos de la tabla

*/

public function query($table,$filter='',$order='',$limit='',$mostrar=''){

$conexion = $this->db_link;




$sql = 'Select * from '.$table;

$filter = $this->filter($filter);

$orden = $this->order($order);
180
$limit = $this->limit($limit);

$sql.=' '.$filter.$orden.' '.$limit;




if(!empty($mostrar)){

echo $sql;

}

$consulta = $this->sql($sql);

return $consulta;

}

/**

* Obtienes el registro del valor mas grande de una columna.

*

* @param string $table se da el nombre de la tabla

* @param string $id es la columna en la que buscaras el mayor registro

* @param string $filter es la condicion con la que se filtrara la consulta

* @param boolean $mostrar se usa en produccion para ver las consultas sql
realizadas

* @return array regresa un arreglo multidimensional con los datos de la tabla

*/

public function last($table,$id,$filter='',$mostrar=''){

$sql = 'Select max('.$id.')as ultimo from '.$table;

$filter = $this->filter($filter);

$sql.=' '.$filter;

if(!empty($mostrar)){

echo $sql;

}
181
$consulta = $this->sql($sql);




if(isset($consulta[0])){

$data=$consulta[0];

$this->variable('id',$data['ultimo']);

$query=$this->query($table,$id.'={id}');

}

return $query;

}

/**

* Insertar un registro en una tabla

*

* @param string $table se da el nombre de la tabla

* @param array $array Es el arreglo de datos que se insertaran

* @param boolean $mostrar se usa en produccion para ver las consultas sql
realizadas

* @return int Regresa el identificador del registro que se ha creado

*/

public function insert($table,$array,$mostrar=false){

$conexion=$this->db_link;

$rows=array();

$datas=array();

$error=array();

foreach($array as $key=>$value){

$rows[]="`".$key."`";
182
$datas[]=(is_string($value) ||
empty($value))?"'".$value."'":$value;

}

$row=implode(',',$rows);

$data=implode(',',$datas);

$sql="INSERT INTO `$table` ($row) VALUES ($data);";

if($mostrar){

echo $sql.'<br>';

}

mysql_query($sql, $conexion) or $error[]=$sql;

return mysql_insert_id($conexion);

}

/**

* Se modifica el registro de cierta tabla.

*

* @param string $table se da el nombre de la tabla

* @param array $array Es el arreglo de datos que se insertaran

* @param boolean $mostrar se usa en produccion para ver las consultas sql
realizadas

* @return int Regresa el identificador del registro que se ha creado

*/

public function update($table,$array,$id){

$conexion=$this->db_link;

$filter=$id['row'].'={value}';

$this->variable('value',$id['value']);

$query=$this->query($table,$filter,'','1');
183
$q=$query[0];

$return=true;

foreach($array as $key=>$value){

if($q[$key]!=$value){

$ret=$this-
>upquery($table,$key,$value,$id['row'],$id['value']);

if(!$ret){$return=false;}

}

}

return $return;

}

/**

* Este metodo crea el sql necesario para crear las consultas para modificar

*

* @param string $table se da el nombre de la tabla

* @param string $campo Columna que se modificara

* @param string $value El nuevo valor que se le dara al campo

* @param string $campoid El nombre de la columna con identificador
unico(llave primaria)

* @param int $id El valor de la llave primaria del registro que se modificara

* @return mixed Resultados de la conexion realizada

*/

private function upquery($table,$campo,$value,$campoid,$id){

$conexion=$this->db_link;

if(is_string($value)){

$value='"'.$value.'"';
184
}

$sql='UPDATE `'.$table.'` SET `'.$campo.'` = '.$value.' where
'.$campoid.'='.$id.' limit 1;';

$con=@mysql_query($sql, $conexion);

return $con;

}

/**

* Este metodo sirve para eliminar un registro en la tabla

*

* @param string $table se da el nombre de l a tabla

* @param string $col El nombre de la columna con identificador unico(llave
primaria)

* @param array $id El valor de la llave primaria del registro que se
modificara

*/

public function delete($table,$col,$id){

$conexion=$this->db_link;

$where = $col.'='.$id;

$sql='DELETE FROM '.$table.' where '.$where.' LIMIT 1;';




mysql_query($sql, $conexion) or $error[]=$sql;

}

}

?>
185
6.3.2 Men

Esta clase toma los mens creados en la parte de la configuracin para crear
un men.

Obtener Men

Este mtodo obtiene los mens que son configurados al inicio. Este mtodo
obtiene esos mens, y los ordena para ser procesados.

Crear Men

Este mtodo crea el men usando un archivo HTML definido en las vistas.

6.3.3 Mdulos

Esta clase toma los mdulos creados en la parte de la configuracin para crear
la estructura.

Obtener Mdulos

Este mtodo obtiene los mdulos que son configurados al inicio. Este mtodo
obtiene esos mens, y los ordena para ser procesados.

Existe Plugin

Este mtodo verifica si el modulo que estas llaman existe.

6.3.4 Redirecciones

Esta clase toma las redirecciones creados en la parte de la configuracin para
crear un men.

Redireccin a Modulo

Este mtodo lee las redirecciones los mdulos y crea un respuesta a las
redirecciones que el sistema necesita.

<?php

// Si existe los datos para la conexion a Mysql, se manda a llamar al archivo
encargado.

if(isset($CFG['dbtype'])){

if(!empty($CFG['dbtype'])){

include ($CFG['path'] . DS . $CFG['dirmodel'] . DS . 'database' .
DS . $CFG['dbtype'] . DS . 'database.php');
186
}

}

/**

* Clase Model

*

* Es la estructura Basica para otras 3 Classes

*

* Es la estructura Basica para crear Menus,

* Modelos y Redirecciones, para el manejo del sistema.

*

* @author Juan Rael Corrales Arellano

* @author http://labs.contactopv.com

*

* @package Izanami_Controller_Classes

*/

class Model{

/**

*

*

* @param int $var

* @param int $val

*/

public function varExists($var,$val){

$this->Existsvar=$var;

$this->Existsval=$val;
187
}

/**

* Revisa si la un registro existe

*

* @param string $table La tabla donde se buscara el registro

* @param string $filter Es el filtro que se usa en para el registro

*/

public function Exists($table,$filter){

global $CFG,$db;

$consulta = '';




if(count($consulta)>0){

return true;

}else{

return false;

}

}

}

class ModelMenu extends Model{

private $view;

public function ModelMenu($view){

$this->view = $view;

}

public function getMenus($name,$class){

global $CFG;
188
$menu = menus::getMenus($name);

$return = '';

$count = count($menu['items']);

if($count>0){

$x=0;

$classC = count($class);

foreach($menu['items'] as $name => $item){

$name = $item['name'];

$data = $item['data'];

$classes = array();

if($classC>0){

if(isset($class['middle'])){

$classes[] = $class['middle'];

}

switch(true){
case($x==0):
if(isset($class['first'])){
$classes[] = $class['first'];

}

break;

case ($x==($count-1)):

if(isset($class['last'])){

$classes[] = $class['last'];

}

break;
189
}

}

if(red($data)){if(isset($class['actual'])){$classes[] = $class['actual'];}}




$attrClass = implode(' ',$classes);

$return.=$this->createMenu($name,redirect($data),$attrClass);

$x++;

}

}

return $return;

}

private function createMenu($name,$data,$class){

if(empty($this->view)){

$view = new view('menu');

}else{

$view = new view('menu','vista',_Vista);

}

$view->addparameter('class',$class);

$view->addparameter('item_data', $data);

$view->addparameter('item_name', $name);

return $view->cargar(true);

}

public function getItems($menu){

global $CFG;

$items = '';
190
return $items;

}

}

class ModelModules extends Model{

public function pluginExists($plug){

global $CFG;

$return = Modules::moduleExists($plug);

return $return;

}

public function redirectDir($value){

$module = $this->getModule($value);

return $module['folder_name'];

}

public function getModule($module){

global $CFG,$db;

$module = $module['value'];

$return = Modules::getModule($module);




return $return;

}

}

class ModelRedirect extends Model{

public function Redirect2Module($redirect){

$redir = $this->getRedirect($redirect);

$mod = new ModelModules;
191
$module = $mod->getModule($redir);

$modulo = $module['folder_name'];

return $modulo;

}

public function getRedirect($value){

global $CFG,$db;

$get = redirects::get($value);

$return = array('type'=>'module','value'=>$get);

return $return;

}

public function redirectExist($name){

global $CFG;

$return = redirects::exists($name);

return $return;

}

}

/**

* Es la funcion encargada de recoger datos de los distintos puntos.

*

* @param string $par Nombre del la variable en los metodos de envio.

* @param string $type Tipos de parametros encapsulados

*/

function getParameter($par, $type='') {




switch($type){
192
case 'ajax':

if(!empty($_POST[$par])){

$return = $_POST[$par];

}else{

$return = false;

}

break;

case 'cookie':

$c=new sessiones();

$return = $c->get($par);

break;

default:

switch(true){

case(!empty($_GET[$par])):

$return = $_GET[$par];
break;
case(!empty($_POST[$par])):
$return = $_POST[$par];

break;

default:

$return = false;

break;

}

break;

}
193
return $return;

}

?>

6.4 View

Esta capa es la encarga de crear la parte visual del sistema, este conjunto de
libreras es la encargada de crear desde los mens, hasta las tablas o incluso,
incluir las vistas que se utilizan en el sistema. Para el manejo de las vistas, el
sistema tiene tres clases, que sirven para manejar las plantillas que se usaran
en el sistema.

6.4.1 Clases

View

Esta clase sirve para el que desarrollador pueda llamar a las plantillas que se
usaran en el sistema, y a su vez poder manejar variables en esta plantillas para
su insercin de informacin.


<?php

class view extends IzanamiView {




private $object;

private $archivo;




private $FoView;

public function view($archivo, $theme='', $folder='', $format='') {

$this->object= new izanami_view();

$this->ArView = $archivo;

$this->ThView = $theme;

$this->FoView = $folder;

$this->file_js = new file_js();

$this->archivo = $this->get_archivo($archivo, $theme, $folder, $format);
194
}

public function addparameter($name, $value='') {

$this->object->assign($name,$value);

}

public function menu($menuName,$Classes=array(),$menuTag='menu'){

$getMenu=get_menu($menuName,$Classes,$this->FoView);

$this->addparameter($menuTag,$getMenu);

}

public function showFile(){

echo $this->archivo;

}

public function cargar($return=false) {

$this->tags();

$back=$this->object->fetch($this->archivo);

if($return){

return $back;

}else{

echo $back;

}

}

private function ViewType($call,$view=''){

global $CFG;

$basic=$CFG['path'] . DS . $CFG['dirapp'] . DS;

switch($call){

case 'vista':
195
$return = $basic.$view.DS.$CFG['ProjectFolderView'].DS;

break;

case 'basic':

$return = $basic.$CFG['ProjectFolderView'].DS;

break;

case 'plugin':

$return =
$basic.$CFG['PluginFolder'].DS.$view.DS.$CFG['ProjectFolderView'].DS;

break;

}

return $return;

}

private function get_archivo($archivo, $theme='', $folder='', $format='') {

global $CFG;

$view = $CFG['dirview'];

switch (true) {

case ($theme == 'vista'):

$dir = $this->ViewType('vista',$folder);

break;

case ($theme == 'plugin'):

$dir = $this->ViewType('plugin',$folder);

break;

default:

$dir = $this->ViewType('basic');

break;

}
196
if (dev_mode()) {

$file = $this->archivo($archivo, $dir);

} else {

$file = (empty($format)) ? $archivo . '.html' : $archivo . '.' . $format;

}

$include = $dir . $file;

if (file_exists($include)) {

return $include;

} else {

return false;

}

}

private function archivo($nombre, $folder) {

$array = files($folder);

foreach ($array as $files) {

if ($nombre == $files[0]) {

$formato=(isset($files[1]))?$files[1]:'html';

return $files[0] . '.' . $formato;

}

}

return 0;

}

private function tags(){

global $CFG;

foreach($CFG as $lol => $tumama){
197
$this->addparameter($lol,$tumama);

}

}

}

?>

IzanamiView

Esta clase es la clase padre que manejara las plantillas, esta clase no es
utilizada de forma abierta en el sistema, simplemente hereda sus atributos y
mtodos a la clase View.

<?php

class izanami_view extends IzanamiView {

private $params=array();

function construct(){




}

public function assign($name,$value){

$this->params[$name]=$value;

}

public function fetch($archivo){

if(file_exists($archivo)){

$new_text = file_get_contents($archivo);

}else{

$new_text = '';

}
198
foreach($this->params as $name=>$value){

if(is_array($value)){

$new_text=$this-
>replace_array($name,$value,$new_text);

}else{



$new_text=str_replace('{$'.$name.'}',$value,$new_text);

}




}

$new_text=$this->eliminar_params($new_text);

return $new_text;

}

public function replace_array($name,$array,$texto){

foreach($array as $n_v => $v_v){

$texto=str_replace('{$'.$name.'.'.$n_v.'}',$v_v,$texto);

}

return $texto;

}

private function eliminar_params($text){




return $text;

}

}

?>

Vista
199
Esta clase es usada para dividir las vistas diferenciando por usuarios o grupos.


<?php

class vista extends IzanamiView{
private $array = array();
private $view = array();
private $permiso;
private $ajax = false;




function construct($array=array()){

if(empty($array)){

$this->ajax=true;

}else{

$this->array=$array;

}

}

public function permiso($valor){

if(empty($this->array)){

$this->view=$valor;

$this->permiso=$valor;

}else{

foreach($this->array as $x => $y){

if($y['permiso']==$valor){

$this->view=$y;

$this->permiso=$x;

}
200
}

}

}

public function ajax(){

global $CFG,$core,$user;

define('_Vista',$this->permiso);

$Vista=_Vista;




$dirapp=$CFG['path'].DS.$CFG['dirapp'];





cargar_file($dirapp.DS.$Vista.DS.$CFG['ProjectFolderControl']);



cargar_file($dirapp.DS.$Vista.DS.$CFG['ProjectFolderModel']);




$file=$dirapp.DS.$Vista.DS.'ajax.php';

if(file_exists($file)){

include($file);

}else{

echo $file;

}

}

public function firstLogin(){

restrict();

}

public function agregados($dir,$prioridad=array(),$non=array()){
201
global $CFG,$user,$core;

cargar_file($dir,$prioridad,$non);

}

public function def($val){

if(empty($this->permiso)){

$this->permiso=$val;

}

}

public function cargar(){

global $CFG,$core,$user;

if(!$this->ajax){

define('_Vista',$this->permiso);

$Vista=_Vista;

$dirapp=$CFG['path'].DS.$CFG['dirapp'];

$view=$dirapp.DS.$this->permiso.DS;
cargar_file($view.$CFG['ProjectFolderControl']);
cargar_file($view.$CFG['ProjectFolderModel']);
$app = $dirapp.DS.$Vista.DS.'app.php';

if(file_exists($app)){

include($app);

}

}

}

}

?>
202


CAPITULO 7 BASE DE DATOS.




7.1.1 Agenda


agenda
Campo Tipo
id int(11)
mensaje varchar(50)
descripcion text
fecha_creacion int(11)
fecha_reunion int(11)
type enum('Todos', 'Seguridad', 'Inquilinos',

'Inquilino')
user int(11)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No id 3
203
7.1.2 Bitacora
bitacora
Campo Tipo
id_bitacora int(11)
fecha int(11)
asunto text
npersonas int(4)
casa int(2)
identificacion int(2)
tipoidentificacion varchar(20)
comentarios text
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No id_bitac

ora
1



7.1.3 Caja chica


cajachica
Campo Tipo
id_caja int(11)
fecha_emision int(11)
no_transferencia int(11)
no_factura varchar(30)
proveedor varchar(80)
concepto text
entrada double
salida double
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No id_caja 3
204
7.1.4 Casas


Casas
Campo Tipo
user int(11)
pagos double(9,2)
deuda double(9,2)
id int(11)
casa int(5)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No id 5



7.1.5 dm


dm
Campo Tipo
id int(11)
userRecibe int(11)
mensaje text
fecha int(11)
userEnvia int(11)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No id 2



7.1.6 Egresos
egresos
Campo Tipo
id_egreso int(11)
fecha_emisio int(11)
numeroCheque int(11)
numeroFactura int(11)
205

fechaFactura int(11)
fechaCobro int(11)
nombreProveedor varchar(30)
concepto int(11)
descripcion1 varchar(80)
descripcion2 varchar(80)
egreso double
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id_egre

sos
2



7.1.6 Global
global
Campo Tipo
id int(11)
data varchar(20)
value varchar(80)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 2



7.1.7 Grupos
grupos
Campo Tipo
id int(11)
nombre varchar(80)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 4
206
7.1.8 Ingresos
ingresos
Campo Tipo
id int(11)
fecha int(11)
numrecibo int(11)
Fecha_Pago int(11)
Referencia int(11)
Concepto text
Descripcion1 text
Descripcion2 text
Entradas double
user int(11)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 7



7.1.9 Jardinera
jardineria
Campo Tipo
id_evento int(11)
evento varchar(70)
fecha int(11)
descripcion text
proveedor int(11)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 7



7.2.1 Log


Log

Campo Tipo

id int(11)
207

fecha int(11)
userID int(11)
groupID int(11)
groupNombre varchar(50)
idaccion varchar(50)
detalleaccion text
userNombre varchar(50)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 24



7.2.2 Reportes Mantenimiento
Reportemantenimiento
Campo Tipo
id_reporte int(11)
titulo varchar(50)
fecha int(11)
id int(11)
costo int(11)
descripcion text
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id_repo

rte
3



7.2.3 Proveedores
proveedores
Campo Tipo
id int(11)
nombre varchar(40)
apellido varchar(30)
empresa varchar(20)
208

telefono int(13)
direccion varchar(25)
correo varchar(20)
edo_civil varchar(20)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 3



7.2.4 Reportes
reportes
Campo Tipo
id int(11)
fecha int(11)
reporte text
user int(11)
status enum('Terminado', 'Asignado',

'Proceso')
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 2




7.2.5 Reportes Comentarios
reportes_comentarios
Campo Tipo
id int(11)
reporte int(11)
user int(11)
fecha int(11)
comentario text
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
209

PRIMARY BTREE Si No Id 2



7.2.5 Saldo Inicial
saldosiniciales
Campo Tipo
id int(11)
month int(2)
year int(5)
valor double(7,2)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 3




7.2.6 Reportes Comentarios
Reportes_comentarios
Campo Tipo
id int(11)
reporte int(11)
user int(11)
fecha int(11)
comentario text
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 3



7.2.7 Servicios Egresos


Serviciosegresos
Campo Tipo
id_egreso int(11)
servicioegreso varchar(80)
210

ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id 2




7.2.8 Servicios Ingresos
serviciosingresos
Campo Tipo
id_egreso int(8)
servicioegreso varchar(70)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id_servi 12

cio




7.2.9 Usuario
Usuario
Campo Tipo
id smallint(5)
nombre varchar(30
apellidos varchar(50)
login varchar(20)
password varchar(25)
avatar text
group int(11)
mail varchar(40)
telefono int(15)
ndices:
Nombre de la clave tipo Unico Empacado Campo Cardinalidad
PRIMARY BTREE Si No Id_servi 12

cio
211


CONCLUSIONES

Despus de los anlisis tcnico y econmico se determino la aplicacin como
una herramienta que puede atacar la problemtica que se plantea, sistemas
web son las tecnologas que hoy en da tienen mucho auge, proveer la
versatilidad que se necesita para la utilizacin de este sistema. Por la rpida
comunicacin entre personas por este medio se vio viable, tomando como base
la forma en cmo fluye la informacin, por ejemplo; redes sociales, clientes de
mensajera, y los sistemas de mensajera rpida.
Gracias a la aplicacin de las tecnologas web, podemos estar informados de
forma rpida, los procesos que hoy en da se llevan a cabo empiezan a
inclinarse ms por la va web, es por eso que el alcance y las posibilidades que
puede brindar este sistema soy muy grandes.

En cuanto a las ventajas econmicas se puede ver que no tiene un costo alto
ya que la mayora de las personas cuentan con equipos de cmputo y una
conexin a internet, el cual es el ambiente necesario para que se pueda
interactuar en el sistema entre condminos, de forma fcil.
212
BIBLIOGRAFA


Galvn, L. E. (2002). Historia de la educacin en Mxico.


Garca, L., Ruiz Corbella, M., & Domng, D. (2007). De La Educacin A
Distancia A La Educacin Virtual.

Goleman. (1999). Inteligencia Emocional. Kairs.


Hernandez Samperi, R., Fernandez-Collado, C., & Baptista Lucio, P. (2006).

Metodologia de la Investigcion. Distrito Federal: McGraw-Hill.
Peralta, L. E. (2001). Calidad Educativa. Queretaro.
Salinas Ibez, J., Aguaded Gmez, J. I., & Cabrero Almenara, J. (2004).

Tecnologas para la Educacin. Alianza Editorial.


R. S. (01 de Enero de 2007). SAARI. Recuperado el 7 de Diciembre de 2010,
de SAARI: http://www.saari.com.mx

P. Martinez Cobo, M. Cabello Requena, J.C. Diaz martin, 1997.
Sistemas Operativos Teorias y Practica. Diaz de Santos Editorial.

Vous aimerez peut-être aussi