22 Commits
1.04 ... 1.06

Author SHA1 Message Date
9edbcbdbae Merge branch 'release/1.06'
* release/1.06:
  Añadido el campo id como ordenable en la creación de la base de datos (articulos y ubicaciones) y en los mantenimientos de usuarios y elementos.
  Actualizada la versión a 1.06
  -img: Cambiadas las flechas de sentido ascendente y descendente (intercambiar) para ser coherente con las indicaciones en la cabecra de la tabla.
  -Configuracion: Añadido icono en el botón de aceptar.                 	  Cambiado el mensaje de éxito en la grabación de los cambios. -CopiaSeguridad: Añadidos iconos en los botones de aceptar y volver. -Csv: Añadidos iconos en los botones de acción. -Importacion: Añadidos iconos en los botones de acción.                        Cambiado el control de subida de fichero por el de Jasny.                        Cambiado el formato para controlar las columnas que ocupa el formulario de subida para que sea 'responsive' -AportaContenido: Quitado 'de' del mensaje de opción actual en Mantenimiento para acortar mensaje. -InformeInventario: Añadidos iconos en los botones de acción.                     	        Cambiado el formato para que sea correcto en todas las resoluciones de pantalla. -Mantenimiento: Añadidos iconos en los botones de acción.                 Añadidas flechas para indicar el campo que marca el orden de visualización. -bootstrap.html: Añadida la opción de cerrar sesión en resolución pequeña.                  	    Añadida una textura al fondo de la cabecera.                  	    Cambios en las dimensiones de los contenedores para mejorar la visualización. -img/fondos: Añadidos algunos ficheros de texturas para poder utilizarlos en el futuro. -CHANGELOG: Añadido este fichero para llevar un registro de cambios entre versiones.
  Revert "Eliminada imagen de ejemplo"
2014-03-29 00:26:32 +01:00
82b4ce3bbf Añadido el campo id como ordenable en la creación de la base de datos (articulos y ubicaciones) y en los mantenimientos de usuarios y elementos. 2014-03-29 00:25:10 +01:00
79dd1c72f2 Merge branch 'feature/patronesFondo' into develop
* feature/patronesFondo:
  Actualizada la versión a 1.06
  -img: Cambiadas las flechas de sentido ascendente y descendente (intercambiar) para ser coherente con las indicaciones en la cabecra de la tabla.
  -Configuracion: Añadido icono en el botón de aceptar.                 	  Cambiado el mensaje de éxito en la grabación de los cambios. -CopiaSeguridad: Añadidos iconos en los botones de aceptar y volver. -Csv: Añadidos iconos en los botones de acción. -Importacion: Añadidos iconos en los botones de acción.                        Cambiado el control de subida de fichero por el de Jasny.                        Cambiado el formato para controlar las columnas que ocupa el formulario de subida para que sea 'responsive' -AportaContenido: Quitado 'de' del mensaje de opción actual en Mantenimiento para acortar mensaje. -InformeInventario: Añadidos iconos en los botones de acción.                     	        Cambiado el formato para que sea correcto en todas las resoluciones de pantalla. -Mantenimiento: Añadidos iconos en los botones de acción.                 Añadidas flechas para indicar el campo que marca el orden de visualización. -bootstrap.html: Añadida la opción de cerrar sesión en resolución pequeña.                  	    Añadida una textura al fondo de la cabecera.                  	    Cambios en las dimensiones de los contenedores para mejorar la visualización. -img/fondos: Añadidos algunos ficheros de texturas para poder utilizarlos en el futuro. -CHANGELOG: Añadido este fichero para llevar un registro de cambios entre versiones.
2014-03-28 23:57:08 +01:00
f947cecb50 Actualizada la versión a 1.06 2014-03-28 23:56:10 +01:00
5d950f5d3e -img: Cambiadas las flechas de sentido ascendente y descendente (intercambiar) para ser coherente con las indicaciones en la cabecra de la tabla. 2014-03-28 22:34:11 +01:00
4d8fc637a8 -Configuracion: Añadido icono en el botón de aceptar.
Cambiado el mensaje de éxito en la grabación de los cambios.
-CopiaSeguridad: Añadidos iconos en los botones de aceptar y volver.
-Csv: Añadidos iconos en los botones de acción.
-Importacion: Añadidos iconos en los botones de acción.
                       Cambiado el control de subida de fichero por el de Jasny.
                       Cambiado el formato para controlar las columnas que ocupa el formulario de subida para que sea 'responsive'
-AportaContenido: Quitado 'de' del mensaje de opción actual en Mantenimiento para acortar mensaje.
-InformeInventario: Añadidos iconos en los botones de acción.
                    	        Cambiado el formato para que sea correcto en todas las resoluciones de pantalla.
-Mantenimiento: Añadidos iconos en los botones de acción.
                Añadidas flechas para indicar el campo que marca el orden de visualización.
-bootstrap.html: Añadida la opción de cerrar sesión en resolución pequeña.
                 	    Añadida una textura al fondo de la cabecera.
                 	    Cambios en las dimensiones de los contenedores para mejorar la visualización.
-img/fondos: Añadidos algunos ficheros de texturas para poder utilizarlos en el futuro.
-CHANGELOG: Añadido este fichero para llevar un registro de cambios entre versiones.
2014-03-28 21:46:15 +01:00
0110adc05f Revert "Eliminada imagen de ejemplo"
This reverts commit 9250cab634.
2014-03-27 20:30:45 +01:00
9250cab634 Eliminada imagen de ejemplo 2014-03-26 23:37:34 +01:00
031c4823cb Merge branch 'master' of bitbucket.org:rmontanana/inventario2 2014-03-26 16:52:28 +01:00
rmontanana
8f82272592 solve #24 Arreglado añadiendo en insertar un valor null en el caso de "NOHACERNADA"
Arreglado pequeño problema de formato del grid bootstrap en resoluciones pequeñas.
 Changes to be committed:
	modified:   Mantenimiento.php
	modified:   plant/bootstrap.html
2014-03-26 16:50:31 +01:00
rmontanana
445f94091a solve #23 Arreglado añadiendo en insertar un valor null en el caso de "NOHACERNADA"
Arreglado pequeño problema de formato del grid bootstrap en resoluciones pequeñas.
2014-03-26 16:31:24 +01:00
fd10368dba Corregido el archivo de carga de datos para incluir los campos en la instrucción de insertar los registros 2014-03-25 00:05:32 +01:00
28dc36ff3b Fusionado #22ImagenElemento con master 2014-03-23 18:30:29 +01:00
acb8cb8bd7 Fusionado #22ImagenElemento con master 2014-03-23 18:29:15 +01:00
6bcd2513d1 ref #22 Añadido el campo imagen también a ubicaciones. 2014-03-23 18:25:28 +01:00
c1841d12de ref #22 Cambiada la realización de la copia de seguridad para incluir un diálogo previo a la realización y para incluir el directorio de imágenes. Empaqueta en un archivo .tar tanto la copia de la base de datos como el archivo comprimido del directorio de imágenes. 2014-03-23 18:16:55 +01:00
58703f0d90 ref #22 Terminada la gestión de imágenes en elementos.
- Añadido un campo imagen a Artículos
- Añadido un control javascript para que no se puedan introducir caracteres en los campos numéricos
- Añadido el directorio donde guardar las imágenes en configuracion.inc (no se puede editar)
- Cambiado setup.sql para que se añadan los campos de imagen en ambas tablas en una instalación inicial
- Versión 1.05 en fichero de configuración.
2014-03-23 03:47:09 +01:00
db43f56c03 ref #22 Terminadas las bajas y las inserciones, faltan las modificaciones 2014-03-22 04:12:03 +01:00
rmontanana
fe638850b1 ref #9 Creada la visualización de imágenes en consulta y en edición.
Realizada la inserción de registros con imágenes.
2014-03-22 02:56:09 +01:00
84f77f6701 Añadido que visualice tanto en la pantalla de consulta como en la de edición y baja la imagen almacenada.
Falta hacer que se inserte el dato de la imagen y se guarde la imagen subida, que admita modificaciones y eliminaciones de imagen y que elimine la imagen en la baja.
2014-03-21 00:06:48 +01:00
e5d43e7eaa Pequeño cambio en los literales de las opciones seleccionadas (se quita el punto final en algunas de ellas). 2014-03-19 13:46:06 +01:00
141efb9506 resolve #1
-Corregido mensaje de error en Pdf_mysql_table
-Los informes de tablas se gestionan ahora en AportaContenido en lugar de en Inventario
-El enlace al informe en Mantenimiento incluye en la URL los datos de filtrado y orden
-Las definiciones de los informes incluyen variables para el orden y el filtrado
-El mantenimiento de usuarios permite buscar usuarios y lo tiene en cuenta para el informe
2014-03-19 13:39:14 +01:00
44 changed files with 2359 additions and 128 deletions

1
.gitignore vendored
View File

@@ -1,3 +1,4 @@
nbproject nbproject
tmp/* tmp/*
.DS_Store .DS_Store
/img.data/

View File

@@ -25,7 +25,7 @@ define('PIE', '<center><a target="_blank" href="http://www.gnu.org/licenses/gpl-
'<a target="_blank" href="http://www.php.net"><img src="img/php.gif" alt="PHP Language" /></a> </center>'); '<a target="_blank" href="http://www.php.net"><img src="img/php.gif" alt="PHP Language" /></a> </center>');
define('FORMULARIO_ACCESO', '<form name="formulario_acceso" action="index.php?registrarse" method="POST">' . define('FORMULARIO_ACCESO', '<form name="formulario_acceso" action="index.php?registrarse" method="POST">' .
'Usuario<br><input type="text" name="usuario" value="" size="8" /><br><br>Clave<br><input type="password" name="clave" value="" size="8" />' . 'Usuario<br><input type="text" name="usuario" value="" size="8" /><br><br>Clave<br><input type="password" name="clave" value="" size="8" />' .
'<br><br><input type="submit" value="Iniciar" name="iniciar" /></form>'); '<br><br><button type="submit" name="iniciar" class="btn btn-primary">Iniciar <span class="glyphicon glyphicon-log-in"></span></button></form>');
define('MENSAJE_DEMO', 'Puede Iniciar sesi&oacute;n con<br>usuario <i><b>demo</b></i><br>contrase&ntilde;a <i>demo</i><br>'); define('MENSAJE_DEMO', 'Puede Iniciar sesi&oacute;n con<br>usuario <i><b>demo</b></i><br>contrase&ntilde;a <i>demo</i><br>');
define('USUARIO_INCORRECTO', '<label class="error">Usuario y clave incorrectos!</label><br><br>'); define('USUARIO_INCORRECTO', '<label class="error">Usuario y clave incorrectos!</label><br><br>');
@@ -67,6 +67,12 @@ class AportaContenido {
* @var array Permisos del usuario * @var array Permisos del usuario
*/ */
private $perfil; private $perfil;
/**
*
* @var array Datos pasados en la URL
*/
private $datosURL = array();
// El constructor necesita saber cuál es la opción actual // El constructor necesita saber cuál es la opción actual
/** /**
@@ -118,14 +124,14 @@ class AportaContenido {
public function __call($metodo, $parametros) { public function __call($metodo, $parametros) {
switch ($metodo) { // Dependiendo del método invocado switch ($metodo) { // Dependiendo del método invocado
case 'titulo': // devolvemos el título case 'titulo': // devolvemos el título
return PROGRAMA.VERSION; return PROGRAMA." v".VERSION;
case 'usuario': case 'usuario':
if ($this->registrado) if ($this->registrado)
return "Usuario=$this->usuario"; return "Usuario=$this->usuario";
else else
return ''; return '';
case 'fecha': return $this->fechaActual(); case 'fecha': return $this->fechaActual();
case 'aplicacion': return PROGRAMA.VERSION; case 'aplicacion': return PROGRAMA." v".VERSION;
case 'menu': // el menú case 'menu': // el menú
if ($this->registrado) { if ($this->registrado) {
return $this->miMenu->insertaMenu(); return $this->miMenu->insertaMenu();
@@ -149,9 +155,9 @@ class AportaContenido {
case 'ubicaciones': case 'ubicaciones':
case 'usuarios': case 'usuarios':
case 'test': case 'test':
return "Mantenimiento de " . ucfirst($opcion) . "."; return "Mantenimiento " . ucfirst($opcion);
case 'configuracion': case 'configuracion':
return 'Configuraci&oacute;n y Preferencias.'; return 'Configuraci&oacute;n y Preferencias';
case 'informeInventario':return "Informe de Inventario"; case 'informeInventario':return "Informe de Inventario";
case 'descuadres':return 'Informe de descuadres'; case 'descuadres':return 'Informe de descuadres';
case 'importacion': return 'Importaci&oacute;n de datos'; case 'importacion': return 'Importaci&oacute;n de datos';
@@ -160,7 +166,7 @@ class AportaContenido {
return ''; return '';
case 'control': case 'control':
if ($this->registrado) if ($this->registrado)
return '<a href="index.php?cerrarSesion">Cerrar Sesi&oacute;n</a>'; return '<a href="index.php?cerrarSesion">Cerrar Sesi&oacute;n <span class="glyphicon glyphicon-log-out"></span></a>';
else else
return ''; return '';
// Para incluir el contenido central de la página // Para incluir el contenido central de la página
@@ -181,6 +187,29 @@ class AportaContenido {
case 'ubicaciones': case 'ubicaciones':
case 'test': case 'test':
case 'elementos': case 'elementos':
$this->DatosURL();
if ($this->datosURL['opc'] == "informe") {
if (!$this->pefil['Informe']) {
$this->procesaURL();
$fichero = 'xml/informe' . ucfirst($opcion) . '.xml';
$salida = 'tmp/informe' . ucfirst($opcion) . '.xml';
//Establece los posibles parámetros del listado.
$orden = $this->datosURL['orden'];
$sentido = $this->datosURL['sentido'] == "asc" ? ' ' : ' desc ';
$filtro = isset($this->datosURL['buscar']) ? $this->bdd->filtra($this->datosURL['buscar']) : '';
$plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero);
$plantilla = str_replace("{filtro}", $filtro, $plantilla);
$plantilla = str_replace("{orden}", $orden . $sentido, $plantilla);
file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
$informe = new InformePDF($this->bdd, $salida, $this->registrado);
$informe->crea($salida);
$informe->cierraPDF();
$informe->imprimeInforme();
return;
} else {
return $this->mensajePermisos("Informes");
}
}
if ($this->perfil['Consulta']) { if ($this->perfil['Consulta']) {
$ele = new Mantenimiento($this->bdd, $this->perfil, $opcion); $ele = new Mantenimiento($this->bdd, $this->perfil, $opcion);
return $ele->ejecuta(); return $ele->ejecuta();
@@ -189,6 +218,29 @@ class AportaContenido {
} }
case 'usuarios': case 'usuarios':
if ($this->perfil['Usuarios']) { if ($this->perfil['Usuarios']) {
$this->cargaDatosURL();
if ($this->datosURL['opc'] == "informe") {
if (!$this->pefil['Informe']) {
$this->procesaURL();
$fichero = 'xml/informe' . ucfirst($opcion) . '.xml';
$salida = 'tmp/informe' . ucfirst($opcion) . '.xml';
//Establece los posibles parámetros del listado.
$orden = $this->datosURL['orden'];
$sentido = $this->datosURL['sentido'] == "asc" ? ' ' : ' desc ';
$filtro = isset($this->datosURL['buscar']) ? $this->bdd->filtra($this->datosURL['buscar']) : '';
$plantilla = file_get_contents($fichero) or die('Fallo en la apertura de la plantilla ' . $fichero);
$plantilla = str_replace("{filtro}", $filtro, $plantilla);
$plantilla = str_replace("{orden}", $orden . $sentido, $plantilla);
file_put_contents($salida, $plantilla) or die('Fallo en la escritura de la plantilla ' . $salida);
$informe = new InformePDF($this->bdd, $salida, $this->registrado);
$informe->crea($salida);
$informe->cierraPDF();
$informe->imprimeInforme();
return;
} else {
return $this->mensajePermisos("Informes");
}
}
$ele = new Mantenimiento($this->bdd, $this->perfil, $opcion); $ele = new Mantenimiento($this->bdd, $this->perfil, $opcion);
return $ele->ejecuta(); return $ele->ejecuta();
} else { } else {
@@ -196,8 +248,10 @@ class AportaContenido {
} }
case 'bienvenido': // El usuario quiere iniciar sesión case 'bienvenido': // El usuario quiere iniciar sesión
return 'Bienvenid@ ' . $this->usuario . '<br><br><center><img src="img/codigoBarras.png" alt="' . PROGRAMA . '">' . $mensaje = '<div class="alert alert-success">';
'<br><label>' . CENTRO . '</label></center><br><br>' . PIE; $mensaje .= 'Bienvenid@ ' . $this->usuario . '</div><br><br><center><img src="img/codigoBarras.png" alt="' . PROGRAMA . '">' .
'<br><label>' . CENTRO . '</label></center><br><br>' . PIE;;
return $mensaje;
case 'configuracion': case 'configuracion':
if ($this->perfil['Config']) { if ($this->perfil['Config']) {
$conf = new Configuracion(); $conf = new Configuracion();
@@ -232,31 +286,19 @@ class AportaContenido {
} }
case 'copiaseg': case 'copiaseg':
if ($this->perfil['Config']) { if ($this->perfil['Config']) {
$archivo_sql = "tmp/copiaseg.sql"; $copia = new CopiaSeguridad();
$archivo = $archivo_sql . ".gz"; if ($_GET['confirmado'] == "1") {
if (file_exists($archivo)) { if (!$copia->creaCopia()) {
unlink($archivo); $tipo = "danger";
} $cabecera = "ERROR";
$comando = escapeshellcmd(MYSQLDUMP . ' -h ' . SERVIDOR . ' -P ' . PUERTO . ' -u ' . USUARIO . ' --password=' . CLAVE . ' --result-file=' . $archivo_sql . ' ' . BASEDATOS); } else {
$comando2 = escapeshellcmd(GZIP . ' -9f ' . $archivo_sql); $tipo = "info";
exec($comando); $cabecera = "INFORMACIÓN";
exec($comando2); }
if (filesize($archivo) < 1024) { return $this->panel($cabecera, $copia->mensaje(), $tipo);
//No se ha realizado la copia de seguridad
$mensaje = "La copia de seguridad no se ha realizado correctamente.<br><br>";
$mensaje .= "Compruebe que las rutas a los programas mysqldump y gzip en configuraci&oacute;n est&aacute;n correctamente establecidas ";
$mensaje .= "y que los datos de acceso a la base de datos sean correctos.<br>";
$mensaje .= "mysqldump=[" . MYSQLDUMP . "]<br>";
$mensaje .= "gzip=[" . GZIP . "]";
$cabecera = "ERROR";
$tipo = "danger";
} else { } else {
$mensaje .= 'Copia de seguridad realizada con &eacute;xito.<br><br>Pulse sobre el siguiente enlace para descargar:<br><br>'; return $copia->dialogo();
$mensaje .= '<a href="' . $archivo . '">Descargar Copia de Seguridad de Datos</a><br>';
$cabecera = "Informaci&oacute;n";
$tipo = "success";
} }
return $this->panel($cabecera,$mensaje,$tipo);
} else { } else {
return $this->mensajePermisos("Copias de seguridad"); return $this->mensajePermisos("Copias de seguridad");
} }
@@ -276,7 +318,15 @@ class AportaContenido {
return "Marca {$metodo} queda sin procesar"; return "Marca {$metodo} queda sin procesar";
} }
} }
public function cargaDatosURL()
{
$this->datosURL['opc'] = isset($_GET['opc']) ? $_GET['opc'] : 'inicial';
$this->datosURL['orden'] = isset($_GET['orden']) ? $_GET['orden'] : 'id';
$this->datosURL['sentido'] = isset($_GET['sentido']) ? $_GET['sentido'] : 'asc';
$this->datosURL['pag'] = isset($_GET['pag']) ? $_GET['pag'] : '0';
$this->datosURL['buscar'] = isset($_GET['buscar']) ? $_GET['buscar'] : null;
$this->datosURL['id'] = isset($_GET['id']) ? $_GET['id'] : null;
}
/** /**
* *
* @param string $tipo * @param string $tipo

19
CHANGELOG Normal file
View File

@@ -0,0 +1,19 @@
Versión 1.06 28-03-2014
-Configuracion: Añadido icono en el botón de aceptar.
Cambiado el mensaje de éxito en la grabación de los cambios.
-CopiaSeguridad: Añadidos iconos en los botones de aceptar y volver.
-Csv: Añadidos iconos en los botones de acción.
-Importacion: Añadidos iconos en los botones de acción.
Cambiado el control de subida de fichero por el de Jasny.
Cambiado el formato para controlar las columnas que ocupa el formulario de subida para que sea 'responsive'
-AportaContenido: Quitado 'de' del mensaje de opción actual en Mantenimiento para acortar mensaje.
-InformeInventario: Añadidos iconos en los botones de acción.
Cambiado el formato para que sea correcto en todas las resoluciones de pantalla.
-Mantenimiento: Añadidos iconos en los botones de acción.
Añadidas flechas para indicar el campo que marca el orden de visualización.
-bootstrap.html: Añadida la opción de cerrar sesión en resolución pequeña.
Añadida una textura al fondo de la cabecera.
Cambios en las dimensiones de los contenedores para mejorar la visualización.
-img/fondos: Añadidos algunos ficheros de texturas para poder utilizarlos en el futuro.
-CHANGELOG: Añadido este fichero para llevar un registro de cambios entre versiones.
-img: Cambiadas las flechas de sentido ascendente y descendente (intercambiar) para ser coherente con las indicaciones en la cabecra de la tabla.

View File

@@ -80,7 +80,7 @@ class Configuracion {
} }
$salida.=$this->formulario(); $salida.=$this->formulario();
if ($grabar) { if ($grabar) {
$salida.='<p class="bg-primary">Configuraci&oacute;n guardada correctamente</p>'; $salida.='<div class="alert alert-success">Configuraci&oacute;n guardada correctamente</div>';
fclose($fsalida); fclose($fsalida);
//unlink($this->confAnterior); //unlink($this->confAnterior);
rename($this->configuracion, $this->confAnterior); rename($this->configuracion, $this->confAnterior);
@@ -142,7 +142,7 @@ class Configuracion {
$salida.='<tr><td>Clave</td><td><input type="text" name="CLAVE" value="' . $this->datosConf['CLAVE'] . '" size="30" /></td></tr>'; $salida.='<tr><td>Clave</td><td><input type="text" name="CLAVE" value="' . $this->datosConf['CLAVE'] . '" size="30" /></td></tr>';
$salida.='<tr><td>mysqldump</td><td><input type="text" name="MYSQLDUMP" value="' . $this->datosConf['MYSQLDUMP'] . '" size="30" /></td></tr>'; $salida.='<tr><td>mysqldump</td><td><input type="text" name="MYSQLDUMP" value="' . $this->datosConf['MYSQLDUMP'] . '" size="30" /></td></tr>';
$salida.='<tr><td>gzip</td><td><input type="text" name="GZIP" value="' . $this->datosConf['GZIP'] . '" size="30" /></td></tr>'; $salida.='<tr><td>gzip</td><td><input type="text" name="GZIP" value="' . $this->datosConf['GZIP'] . '" size="30" /></td></tr>';
$salida.='<tr align=center><td colspan=2><input type="submit" class="btn btn-primary" align="center" value="Aceptar" name="aceptar" /></td></tr></p>'; $salida.='<tr align=center><td colspan=2><button type="submit" class="btn btn-primary" name="aceptar"><span class="glyphicon glyphicon-ok"></span> Aceptar</td></tr></p>';
$salida.='</form></div></center>'; $salida.='</form></div></center>';
$salida.="<script> $salida.="<script>
$(document).ready(function() { $(document).ready(function() {

132
CopiaSeguridad.php Normal file
View File

@@ -0,0 +1,132 @@
<?php
/**
* @package Inventario
* @copyright Copyright (c) 2014, Ricardo Montañana Gómez
* @license http://www.gnu.org/licenses/gpl-3.0.txt
* This file is part of Inventario.
* Inventario is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Inventario is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Inventario. If not, see <http://www.gnu.org/licenses/>.
*
*/
class CopiaSeguridad {
private $mensaje;
private $baseDatos;
private $imagenes;
public function __construct()
{
$opcion = $_GET['opc'];
}
public function creaCopia()
{
if (!$this->copiaBaseDatos()) {
return false;
}
if (!$this->copiaImagenes()) {
return false;
}
if (!$this->empaqueta()) {
return false;
}
return true;
}
public function dialogo()
{
$dialogo = '<div class="container col-5"><div class="jumbotron">
<h1>Copia de Seguridad</h1>
<p>¿Desea realizar una copia de seguridad de todos los datos de la Base de Datos y de todas las Imágenes?</p>
<p><a class="btn btn-primary btn-lg" role="button" onClick="location.href=' . "'index.php'" . '"><span class="glyphicon glyphicon-arrow-left"></span> Volver</a>
<a class="btn btn-success btn-lg" role="button" onClick="location.href=' . "'index.php?copiaseg&confirmado=1'" . '">
<span class="glyphicon glyphicon-cloud-download"></span> Continuar</a></p>
</div></div>';
return $dialogo;
}
private function copiaBaseDatos()
{
$archivo_sql = "tmp/baseDatos" . BASEDATOS . ".sql";
$baseDatosComprimida = $archivo_sql . ".gz";
$this->baseDatos = $baseDatosComprimida;
if (file_exists($baseDatosComprimida)) {
unlink($baseDatosComprimida);
}
$comando = escapeshellcmd(MYSQLDUMP . ' -h ' . SERVIDOR . ' -P ' . PUERTO . ' -u ' . USUARIO . ' --password=' . CLAVE . ' --result-file=' . $archivo_sql . ' ' . BASEDATOS);
$comando2 = escapeshellcmd(GZIP . ' -9f ' . $archivo_sql);
exec($comando);
exec($comando2);
if (filesize($baseDatosComprimida) < 1024) {
//No se ha realizado la copia de seguridad
$mensaje = "La copia de seguridad no se ha realizado correctamente.<br><br>";
$mensaje .= "Compruebe que las rutas a los programas mysqldump y gzip en configuraci&oacute;n est&aacute;n correctamente establecidas ";
$mensaje .= "y que los datos de acceso a la base de datos sean correctos.<br>";
$mensaje .= "mysqldump=[" . MYSQLDUMP . "]<br>";
$mensaje .= "gzip=[" . GZIP . "]";
$this->mensaje = $mensaje;
$this->error = true;
return false;
}
return true;
}
private function copiaImagenes()
{
$copiaImagenes = "tmp/Imagenes.tbz";
$this->imagenes = $copiaImagenes;
if (file_exists($copiaImagenes)) {
unlink($copiaImagenes);
}
$comando = escapeshellcmd('tar cf ' . $copiaImagenes . ' ' . IMAGEDATA);
exec($comando);
if (filesize($copiaImagenes) == 0) {
$this->error = true;
$mensaje = "No se ha podido comprimir el directorio de las imágenes " . IMAGEDATA . "<br>";
$mensaje .= "Compruebe que la ruta de acceso al programa tar en configuraci&oacute;n est&aacute; correctamente establecida";
$this->mensaje = $mensaje;
return false;
}
return true;
}
private function empaqueta()
{
// Empaqueta los dos archivos en el que va a devolver
$nombreCopia = "tmp/Copia" . BASEDATOS . strftime("%Y%m%d%H%M") . ".tar";
if (file_exists($nombreCopia)) {
unlink($nombreCopia);
}
$comando = escapeshellcmd('tar cf ' . $nombreCopia . ' ' . $this->baseDatos . ' ' . $this->imagenes);
exec($comando);
if (filesize($nombreCopia) ==0 || !file_exists($nombreCopia)) {
$this->error = true;
$mensaje = "No se ha creado el paquete con los archivos de imágenes en [<b>" . $this->imagenes . "</b>] y <br>";
$mensaje .= " con el archivo de Base de Datos [<b>" . $this->baseDatos . "</b>]<br><br>";
$mensaje .= "Compruebe que los datos de configuración están correctamente establecidos <br>";
$mensaje .= "El comando de copia fue [" . $comando . "]<br>";
$mensaje .= "gzip=[" . GZIP . "]";
$this->mensaje = $mensaje;
return false;
}
$this->error = false;
unlink ($this->baseDatos);
unlink ($this->imagenes);
$mensaje = 'Copia de seguridad realizada con &eacute;xito.<br><br>Pulse sobre el siguiente enlace para descargar:<br><br>';
$mensaje .= '<a href="' . $nombreCopia . '">Descargar Copia de Seguridad de Datos</a><br><br>';
$mensaje .= 'El paquete de copia contiene un archivo con la copia de la información de la base de datos y un archivo que contiene el directorio de las fotografías e imágenes asociadas a los datos';
$this->mensaje = $mensaje;
return true;
}
public function mensaje ()
{
return $this->mensaje;
}
}
?>

View File

@@ -198,8 +198,8 @@ class Csv {
$mensaje .= $this->panelMensaje('Si se produce cualquier error en el procesamiento del fichero, no se aplicar&aacute; ning&uacute;n cambio en la base de datos.'); $mensaje .= $this->panelMensaje('Si se produce cualquier error en el procesamiento del fichero, no se aplicar&aacute; ning&uacute;n cambio en la base de datos.');
$mensaje .= '<form method="post" name="Aceptar" action="index.php?importacion&opc=ejecutar"> $mensaje .= '<form method="post" name="Aceptar" action="index.php?importacion&opc=ejecutar">
<input type="button" name="Cancelar" value="Cancelar" onClick="location.href=' . "'index.php'" . '" class="btn btn-danger"> <button type="button" name="Cancelar" value="Cancelar" onClick="location.href=' . "'index.php'" . '" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span> Cancelar</button>
<input type="submit" name="Aceptar" value="Aceptar" class="btn btn-primary"> <button type="submit" name="Aceptar" class="btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Aceptar</button>
<input type="hidden" name="ficheroCSV" value="' . $this->nombre . '"> <input type="hidden" name="ficheroCSV" value="' . $this->nombre . '">
</form></center>'; </form></center>';

View File

@@ -70,7 +70,7 @@ class Distribucion {
// if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')) { // if(strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')) {
// // introducimos la cabecera que indica que el contenido está comprimido // // introducimos la cabecera que indica que el contenido está comprimido
// header('Content-Encoding: gzip'); // header('Content-Encoding: gzip');
// // y comprime al m<EFBFBD>ximo la información antes de enviarla // // y comprime al máximo la información antes de enviarla
// return gzencode($pagina, 9); // return gzencode($pagina, 9);
// } // }
return $pagina; // enviamos sin comprimir return $pagina; // enviamos sin comprimir

170
Imagen.php Normal file
View File

@@ -0,0 +1,170 @@
<?php
/**
* @package Inventario
* @copyright Copyright (c) 2014, Ricardo Montañana Gómez
* @license http://www.gnu.org/licenses/gpl-3.0.txt
* This file is part of Inventario.
* Inventario is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Inventario is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Inventario. If not, see <http://www.gnu.org/licenses/>.
*
*/
//Para comprimir las imágenes
require_once('Zebra_Image.php');
define("HAYQUEGRABAR", 1);
define("HAYQUEBORRAR", 2);
define("NOHACERNADA", 3);
class Imagen {
private $archivoSubido;
public $archivoComprimido;
private $extension;
private $dirData;
public function __construct()
{
$this->dirData = IMAGEDATA;
}
public function determinaAccion($campo)
{
if (isset($_POST[$campo]) && $_POST[$campo] == "") {
return HAYQUEBORRAR; //Hay que borrar el archivo de imagen
} elseif ($_FILES[$campo]['error'] == 0) {
return HAYQUEGRABAR; //Hay que guardar el archivo de imagen enviado
} else {
return NOHACERNADA; //No hay que hacer nada
}
}
public function procesaEnvio($campo, &$mensaje)
{
try {
// Undefined | Multiple Files | $_FILES Corruption Attack
// If this request falls under any of them, treat it invalid.
if (
!isset($_FILES[$campo]['error']) ||
is_array($_FILES[$campo]['error'])
) {
throw new RuntimeException('Parámetros inválidos.');
}
// Check $_FILES['upfile']['error'] value.
switch ($_FILES[$campo]['error']) {
case UPLOAD_ERR_OK:
break;
case UPLOAD_ERR_NO_FILE:
throw new RuntimeException('No se ha enviado ningún fichero.');
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
throw new RuntimeException('Se ha excedido el tamaño máximo.');
default:
throw new RuntimeException('Error desconocido.');
}
// DO NOT TRUST $_FILES['upfile']['mime'] VALUE !!
// Check MIME Type by yourself.
$finfo = new finfo(FILEINFO_MIME_TYPE);
if (false === $ext = array_search(
$finfo->file($_FILES[$campo]['tmp_name']),
array(
'jpg' => 'image/jpeg',
'png' => 'image/png',
'gif' => 'image/gif',
),
true
)) {
throw new RuntimeException('Formato de imagen inválido, no es {jpg, png, gif}');
}
$this->extension = $ext;
// You should name it uniquely.
// DO NOT USE $_FILES['upfile']['name'] WITHOUT ANY VALIDATION !!
// On this example, obtain safe unique name from its binary data.
$this->archivoSubido = sprintf('tmp/%s.%s', sha1_file($_FILES[$campo]['tmp_name']), $ext);
if (!move_uploaded_file($_FILES[$campo]['tmp_name'], $this->archivoSubido)) {
throw new RuntimeException('Fallo moviendo el archivo subido.');
}
//Todo ha ido correcto
return true;
} catch (RuntimeException $e) {
$mensaje = $e->getMessage();
return false;
}
}
public static function borraImagenId($tabla, $id)
{
$extensiones = array ("png", "gif", "jpg");
foreach ($extensiones as $extension) {
$archivo = IMAGEDATA . "/" . $tabla . "_" . $id . "." . $extension;
if (file_exists($archivo)) {
unlink ($archivo);
}
}
}
public function mueveImagenId($tabla, $id, &$mensaje)
{
if (!$this->comprimeArchivo($tabla . "_" . $id, $mensaje)) {
return false;
} else {
return true;
}
}
private function comprimeArchivo($id, &$mensaje)
{
$zebra = new Zebra_Image();
$zebra->source_path = $this->archivoSubido;
$this->archivoComprimido = $this->dirData . "/" . $id . "." . $this->extension;
$zebra->target_path = $this->archivoComprimido;
$zebra->jpeg_quality = 100;
// some additional properties that can be set
// read about them in the documentation
$zebra->preserve_aspect_ratio = true;
$zebra->enlarge_smaller_images = true;
$zebra->preserve_time = true;
// resize the image to exactly 100x100 pixels by using the "crop from center" method
// (read more in the overview section or in the documentation)
// and if there is an error, check what the error is about
if (!$zebra->resize(640, 480, ZEBRA_IMAGE_CROP_CENTER)) {
// if there was an error, let's see what the error is about
switch ($zebra->error) {
case 1: $mensaje = 'El fichero origen no se ha encontrado!';
break;
case 2: $mensaje = 'No se puede leer el archivo origen ' . $this->archivoSubido;
break;
case 3: $mensaje = 'No se pudo escribir el archivo destino ' . $this->archivoComprimido;
break;
case 4: $mensaje = 'Formato de fichero origen no soportado ' . $this->archivoSubido;
break;
case 5: $mensaje = 'Formato de fichero destino no soportado ' . $this->archivoComprimido;
break;
case 6: $mensaje = 'La versión de la biblioteca GD no soporta el formato de destino ' . $this->archivoComprimido;
break;
case 7: $mensaje = 'La biblioteca GD no está instalada';
break;
case 8: $mensaje = 'el comando "chmod" está deshabilitado por configuración';
break;
}
return false;
} else {
//Borra el archivo subido
unlink($this->archivoSubido);
return true;
}
}
}
?>

View File

@@ -55,12 +55,32 @@ class Importacion {
private function formulario() { private function formulario() {
$accion = "index.php?importacion&opc=importar"; $accion = "index.php?importacion&opc=importar";
$salida = '<form enctype="multipart/form-data" name="importacion.form" method="post" action="' . $accion . '">' . "\n"; $salida .= '<script type="text/javascript" src="css/bootstrap-filestyle.min.js"> </script>';
$salida .='<div class="col-sm-6 col-md-6">';
$salida .= '<form enctype="multipart/form-data" name="importacion.form" method="post" action="' . $accion . '">' . "\n";
$salida .= "<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>Elige Archivo</b></legend>\n"; $salida .= "<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>Elige Archivo</b></legend>\n";
$salida .= '<input type="file" name="fichero" id="fichero" onChange="seleccionFichero(this);">'; //$salida .= '<input type="file" name="fichero" id="fichero" onChange="seleccionFichero(this);" class="filestyle" data-classButton="btn btn-primary">';
$salida .= '<p align="center"><button class="btn btn-primary" type=submit>Aceptar</button></p><br>' . "\n"; //$salida .= '<input type="file" name="fichero" id="fichero" onChange="seleccionFichero(this);">';
$mensaje = utf8_decode('Sólo se permiten archivos con extensión CSV'); //$salida .= '<input type="file" class="filestyle" data-input="false">';
$salida .= "<script type='text/javascript'> $salida .= '<div class="fileinput fileinput-new" data-provides="fileinput">
<div class="input-group">
<div class="form-control" data-trigger="fileinput">
<i class="glyphicon glyphicon-file fileinput-exists"></i>
<span class="fileinput-filename"></span>
</div>
<span class="input-group-addon btn btn-default btn-file">
<span class="fileinput-new">
<span class="glyphicon glyphicon-folder-open"></span> Selecciona fichero</span>
<span class="fileinput-exists">Cambiar</span><input type="file" name="fichero" id="fichero" onChange="seleccionFichero(this);"></span>
<a href="#" class="input-group-addon btn btn-default fileinput-exists" data-dismiss="fileinput">Eliminar</a>
</div>
</div>';
$salida .= '<p align="center"><button class="btn btn-primary" type=submit><span class="glyphicon glyphicon-cloud-upload"></span> Aceptar</button></p><br>' . "\n";
$salida .= '</div>';
$mensaje = 'Sólo se permiten archivos con extensión CSV';
$salida .= "<script type='text/javascript'>".'
//$(":file").filestyle({classButton: "btn btn-primary"});'."
function seleccionFichero(obj) { function seleccionFichero(obj) {
var filePath = obj.value; var filePath = obj.value;

View File

@@ -175,16 +175,17 @@ class InformeInventario {
} }
private function formulario($accion, $etiqueta, $lista) { private function formulario($accion, $etiqueta, $lista) {
$salida = '<div class="col-sm-2 col-md-6"><form name="informeInventario.form" method="post" action="' . $accion . '">' . "\n"; $salida ='<div class="col-sm-6 col-md-6"><form name="informeInventario.form" method="post" action="' . $accion . '">' . "\n";
$salida.="<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>Elige $etiqueta</b></legend>\n"; $salida.="<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>Elige $etiqueta</b></legend>\n";
$salida.="<br><br><label>$etiqueta</label>"; $salida.="<br><br><label>$etiqueta</label>";
$salida.=$lista; $salida.=$lista;
$salida.="<br><br><label for='salida'>Salida del informe por:</label>"; $salida.="<br><br>
$salida.='<div class="radio"><label><input type="radio" name="salida" value="pantalla" checked>Pantalla</label></div>'; <label for='salida'>Salida del informe por:</label>";
$salida.='<div class="radio"><label><input type="radio" name="salida" value="csv">Archivo CSV</label></div>'; $salida.='<div class="radio"><label><input type="radio" name="salida" value="pantalla" checked><span class="glyphicon glyphicon-list-alt"></span> Pantalla</label></div>';
$salida.='<div class="radio"><label><input type="radio" name="salida" value="etiquetas">Etiquetas</label></div>'; $salida.='<div class="radio"><label><input type="radio" name="salida" value="csv"><span class="glyphicon glyphicon-cloud-download"></span> Archivo CSV</label></div>';
$salida.='<div class="radio"><label><input type="radio" name="salida" value="etiquetas"><span class="glyphicon glyphicon-qrcode"></span> Etiquetas</label></div>';
$salida.="<br><br></fieldset><p>"; $salida.="<br><br></fieldset><p>";
$salida.='<p align="center"><button type=submit class="btn btn-primary">Aceptar</button></p><br></div>' . "\n"; $salida.='<p align="center"><button type=submit class="btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Aceptar</button></p><br></div>' . "\n";
return $salida; return $salida;
} }

View File

@@ -124,22 +124,10 @@ class Inventario {
// Creamos un objeto Distribución facilitándole el // Creamos un objeto Distribución facilitándole el
// nombre del archivo plantilla y el objeto que aportará // nombre del archivo plantilla y el objeto que aportará
// el contenido // el contenido
$opc = $_GET['opc']; $salida = new Distribucion($this->plant, $this->creaContenido());
list($opcion, $parametro) = explode("&", $this->opcActual); echo $salida->procesaPlantilla();
switch ($opc) { break;
case 'informe':
$enlace = 'xml/informe' . ucfirst($opcion) . '.xml';
//$enlace="tmp/inventarioUbicacion.xml";
$informe = new InformePDF($this->bdd, $enlace, $this->registrado);
$informe->crea($enlace);
$informe->cierraPDF();
$informe->imprimeInforme();
return;
default:
$salida = new Distribucion($this->plant, $this->creaContenido());
echo $salida->procesaPlantilla();
break;
}
} }
} }

View File

@@ -206,6 +206,11 @@ class Mantenimiento {
$this->campoBusca = $dato[1]; $this->campoBusca = $dato[1];
$valor = '<a title="Inventario de ' . $valor . '" $target="_blank" href="index.php?informeInventario&opc=listar' . $datoEnlace . '&id=' . $id . '">' . $valor; $valor = '<a title="Inventario de ' . $valor . '" $target="_blank" href="index.php?informeInventario&opc=listar' . $datoEnlace . '&id=' . $id . '">' . $valor;
} }
if (strstr($this->campos[$clave]['Comment'], "imagen") && isset($valor)) {
$msj = '<button class="btn btn-info btn-xs" type="button" data-toggle="modal" data-target="#mensajeModal' . $id .'">Imagen</button>';
$msj .= $this->creaModal($valor, $id);
$valor = $msj;
}
if ($this->campos[$clave]['Type'] == "Boolean(1)") { if ($this->campos[$clave]['Type'] == "Boolean(1)") {
$checked = $valor == '1' ? 'checked' : ''; $checked = $valor == '1' ? 'checked' : '';
$valor = '<input type="checkbox" disabled ' . $checked . '>'; $valor = '<input type="checkbox" disabled ' . $checked . '>';
@@ -255,7 +260,9 @@ class Mantenimiento {
$za = '<a href="' . $za . '"><img alt="desc" title="Orden descendente" src="img/' . ESTILO . '/descendente.png"></a>'; $za = '<a href="' . $za . '"><img alt="desc" title="Orden descendente" src="img/' . ESTILO . '/descendente.png"></a>';
$this->restoreURL(); $this->restoreURL();
if ($this->perfil['Informe']) { if ($this->perfil['Informe']) {
$informe = '<a href="index.php?' . $tabla . '&opc=informe" target="_blank"><img src="img/' . ESTILO . '/informe.png" alt="informe" title="Informe pdf"></a>'; $this->datosURL['opc'] = "informe";
$inf = $this->montaURL();
$informe = '<a href="' . $inf . '" target="_blank"><img src="img/' . ESTILO . '/informe.png" alt="informe" title="Informe pdf"></a>';
} else { } else {
$informe = ""; $informe = "";
} }
@@ -295,6 +302,8 @@ class Mantenimiento {
} }
$this->datosURL['opc'] = 'inicial'; $this->datosURL['opc'] = 'inicial';
$this->datosURL['id'] = null; $this->datosURL['id'] = null;
//Comprueba si existe la imagen en datos para borrarla.
Imagen::borraImagenId($this->tabla, $id);
$url = $this->montaURL(); $url = $this->montaURL();
header('Location: ' . $url); header('Location: ' . $url);
return; return;
@@ -305,6 +314,7 @@ class Mantenimiento {
$comando = "insert into " . $this->tabla . " ("; $comando = "insert into " . $this->tabla . " (";
$lista = explode("&", $_POST['listacampos']); $lista = explode("&", $_POST['listacampos']);
$primero = true; $primero = true;
$hayImagen = false;
//Añade la lista de campos //Añade la lista de campos
foreach ($lista as $campo) { foreach ($lista as $campo) {
if ($campo == "") { if ($campo == "") {
@@ -337,7 +347,23 @@ class Mantenimiento {
} }
$valor = $_POST[$campo] == "on" ? '1' : $valor; $valor = $_POST[$campo] == "on" ? '1' : $valor;
} else { } else {
$valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"'; if (stristr($this->campos[$campo]['Comment'], "imagen")) {
//procesa el envío de la imagen
$imagen = new Imagen();
$accion = $imagen->determinaAccion($campo);
if ($accion != NOHACERNADA) {
$mensaje = "";
if (!$imagen->procesaEnvio($campo, $mensaje)) {
return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN");
}
$hayImagen = true;
$campoImagen = $campo;
} else {
$valor = "null";
}
} else {
$valor = $_POST[$campo] == "" ? "null" : '"' . $_POST[$campo] . '"';
}
} }
$comando.="$coma " . $valor; $comando.="$coma " . $valor;
} }
@@ -345,14 +371,25 @@ class Mantenimiento {
if (!$this->bdd->ejecuta($comando)) { if (!$this->bdd->ejecuta($comando)) {
return $this->errorBD($comando); return $this->errorBD($comando);
} }
$id = $this->bdd->ultimoId();
if ($hayImagen) {
//Tiene que recuperar el id del registro insertado y actualizar el archivo de imagen
if (!$imagen->mueveImagenId($this->tabla, $id, $mensaje)) {
return $this->panelMensaje($mensaje, "danger", "ERROR COMPRIMIENDO IMAGEN");
}
$comando = "update " . $this->tabla . " set " . $campoImagen . "='" . $imagen->archivoComprimido . "' where id='" . $id ."';";
if (!$this->bdd->ejecuta($comando)) {
return $this->errorBD($comando);
}
}
$this->datosURL['opc'] = 'inicial'; $this->datosURL['opc'] = 'inicial';
$this->datosURL['id'] = null; $this->datosURL['id'] = null;
$cabecera = "refresh:".PAUSA.";url=".$this->montaURL(); $cabecera = "refresh:".PAUSA.";url=".$this->montaURL();
header($cabecera); header($cabecera);
return $this->panelMensaje("Se ha insertado el registro con la clave " . $this->bdd->ultimoId(), "info", "Informaci&oacute;n"); return $this->panelMensaje("Se ha insertado el registro con la clave " . $id, "info", "Informaci&oacute;n");
//return "<h1><a href=\"".$this->montaURL()."\">Se ha insertado el registro con la clave " . $this->bdd->ultimoId() . "</a></h1>"; //return "<h1><a href=\"".$this->montaURL()."\">Se ha insertado el registro con la clave " . $this->bdd->ultimoId() . "</a></h1>";
} }
protected function modificar() protected function modificar()
{ {
//Los datos a utilizar para actualizar la tupla vienen en $_POST. //Los datos a utilizar para actualizar la tupla vienen en $_POST.
@@ -380,10 +417,34 @@ class Mantenimiento {
$valor = $_POST[$campo] == "on" ? '1' : $valor; $valor = $_POST[$campo] == "on" ? '1' : $valor;
$comando.=$coma . ' ' . $campo . '="' . $valor . '"'; $comando.=$coma . ' ' . $campo . '="' . $valor . '"';
} else { } else {
if (strlen(trim($_POST[$campo])) == 0) { if (stristr($this->campos[$campo]['Comment'], "imagen")) {
$comando.="$coma $campo=null"; $valor = $_POST[$campo];
$imagen = new Imagen();
$accion = $imagen->determinaAccion($campo);
if ($accion != NOHACERNADA) {
if ($accion == HAYQUEGRABAR) {
$mensaje = "";
if (!$imagen->procesaEnvio($campo, $mensaje)) {
return $this->panelMensaje($mensaje, "danger", "ERROR PROCESANDO IMAGEN");
}
$mensaje = "";
if (!$imagen->mueveImagenId($this->tabla, $this->datosURL['id'], $mensaje)) {
return $this->panelMensaje($mensaje, "danger", "ERROR COMPRIMIENDO IMAGEN");
}
$comando .= "$coma $campo='" . $imagen->archivoComprimido . "'";
} else {
//Hay que borrar
Imagen::borraImagenId($this->tabla, $this->datosURL['id']);
$extensiones = array("png", "jpg", "gif");
$comando .= "$coma $campo=null";
}
}
} else { } else {
$comando.=$coma . ' ' . $campo . '="' . $_POST[$campo] . '"'; if (strlen(trim($_POST[$campo])) == 0) {
$comando.="$coma $campo=null";
} else {
$comando.=$coma . ' ' . $campo . '="' . $_POST[$campo] . '"';
}
} }
} }
} }
@@ -478,6 +539,12 @@ class Mantenimiento {
{ {
//$salida = '<p align="center"><table border=1 class="tablaDatos"><tbody>'; //$salida = '<p align="center"><table border=1 class="tablaDatos"><tbody>';
$salida = '<p align="center"><table border=1 class="table table-striped table-bordered table-condensed table-hover"><tbody>'; $salida = '<p align="center"><table border=1 class="table table-striped table-bordered table-condensed table-hover"><tbody>';
if ($this->datosURL['sentido'] == 'asc') {
$sentidoFlecha = 'down';
} else {
$sentidoFlecha = 'up';
}
$flecha = '<span class="glyphicon glyphicon-chevron-'.$sentidoFlecha.'"></span>';
foreach ($this->campos as $clave => $datos) { foreach ($this->campos as $clave => $datos) {
$comen = explode(",", $datos["Comment"]); $comen = explode(",", $datos["Comment"]);
$ordenable = false; $ordenable = false;
@@ -494,10 +561,12 @@ class Mantenimiento {
$clave = str_ireplace("descripcion", "Descripci&oacute;n", $clave); $clave = str_ireplace("descripcion", "Descripci&oacute;n", $clave);
$clave = str_ireplace("ubicacion", "Ubicaci&oacute;n", $clave); $clave = str_ireplace("ubicacion", "Ubicaci&oacute;n", $clave);
$clave = str_ireplace("articulo", "Art&iacute;culo", $clave); $clave = str_ireplace("articulo", "Art&iacute;culo", $clave);
$ordenActual = $this->datosURL['orden'];
if ($ordenable) { if ($ordenable) {
$this->backupURL(); $this->backupURL();
$this->datosURL['orden'] = $clave2; $this->datosURL['orden'] = $clave2;
$salida.="<th><b><a title=\"Establece orden por $clave \" href=\"". $this->montaURL() . "\"> " . ucfirst($clave) . " </a></b></th>\n"; $resFlecha = $clave2 == $ordenActual ? $flecha : '';
$salida.="<th><b><a title=\"Establece orden por $clave \" href=\"". $this->montaURL() . "\"> " . ucfirst($clave) . $resFlecha . " </a></b></th>\n";
$this->restoreURL(); $this->restoreURL();
} else { } else {
$salida.='<th><b>' . ucfirst($clave) . '</b></th>' . "\n"; $salida.='<th><b>' . ucfirst($clave) . '</b></th>' . "\n";
@@ -530,7 +599,7 @@ class Mantenimiento {
break; break;
} }
$accion = $this->montaURL(); $accion = $this->montaURL();
$salida.='<div class="col-sm-8"><form name="mantenimiento.form" class="form-horizontal" role="form" method="post" action="' . $accion . '">' . "\n"; $salida.='<div class="col-sm-8"><form name="mantenimiento.form" enctype="multipart/form-data" class="form-horizontal" role="form" method="post" action="' . $accion . '">' . "\n";
$salida.="<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>$tipo</b></legend>\n"; $salida.="<fieldset style=\"width: 96%;\"><p><legend style=\"color: red;\"><b>$tipo</b></legend>\n";
foreach ($this->campos as $clave => $valor) { foreach ($this->campos as $clave => $valor) {
if ($valor["Editable"] == "no") { if ($valor["Editable"] == "no") {
@@ -592,6 +661,14 @@ class Mantenimiento {
$salida .= '</div></div>'; $salida .= '</div></div>';
continue; continue;
} }
if (stristr($this->campos[$campo]['Comment'], "imagen")) {
$salida .= $this->creaCampoImagen($campo, $valorDato, $tipo);
continue;
}
if (stristr($this->campos[$campo]['Type'], "int")) {
$tipo_campo = "number";
$modoEfectivo .= ' onkeypress = "if ( isNaN(this.value + String.fromCharCode(event.keyCode) )) return false;" ';
}
//Si no es una clave foránea añade un campo de texto normal //Si no es una clave foránea añade un campo de texto normal
$salida.='<input class="form-control" type="' . $tipo_campo . '" name="' . $campo . '" value="' . $valorDato . $salida.='<input class="form-control" type="' . $tipo_campo . '" name="' . $campo . '" value="' . $valorDato .
'" maxlength="' . $tamano . '" size="' . (string) (intval($tamano) + 5) . '" ' . $modoEfectivo . " ><br><br>\n"; '" maxlength="' . $tamano . '" size="' . (string) (intval($tamano) + 5) . '" ' . $modoEfectivo . " ><br><br>\n";
@@ -606,12 +683,64 @@ class Mantenimiento {
$salida .= "</fieldset><p>"; $salida .= "</fieldset><p>";
$salida .= '<center>'; $salida .= '<center>';
$this->datosURL['opc'] = 'inicial'; $this->datosURL['opc'] = 'inicial';
$salida .= '<button type="button" onClick="location.href=' . "'" . $this->montaURL() . "'" . '" class="btn btn-info">Volver</button>'; $salida .= '<button type="button" onClick="location.href=' . "'" . $this->montaURL() . "'" . '" class="btn btn-info"><span class="glyphicon glyphicon-arrow-left"></span> Volver</button>';
$salida .= '&nbsp;&nbsp;<button type="reset" class="btn btn-danger">Cancelar</button>'; $salida .= '&nbsp;&nbsp;<button type="reset" class="btn btn-danger"><span class="glyphicon glyphicon-remove"></span> Cancelar</button>';
$salida .= '&nbsp;&nbsp;<button type=submit class="btn btn-primary">Aceptar</button>'; $salida .= '&nbsp;&nbsp;<button type=submit class="btn btn-primary"><span class="glyphicon glyphicon-ok"></span> Aceptar</button>';
$salida .= '<br></center></div>'; $salida .= '<br></center></div>';
return $salida; return $salida;
} }
protected function creaCampoImagen($campo, $valor, $tipoAccion)
{
if (file_exists($valor)) {
//El fichero existe.
$existe = true;
$tipo = "fileinput-exists";
} else {
$tipo = "fileinput-new";
$existe = false;
}
$mensaje = '
<div class="fileinput ' . $tipo . '" data-provides="fileinput">
<div class="fileinput-new thumbnail" style="width: 200px; height: 150px;"><img src="img/sinImagen.gif" /></div>
<div class="fileinput-preview fileinput-exists thumbnail" style="max-width: 200px; max-height: 150px; line-height: 20px;">';
if ($existe) {
$mensaje .= '<img src="' . $valor . '" onclick="$('."'#mensajeModal1'".').modal();">';
}
$mensaje .= '</div>';
if ($tipoAccion == ANADIR || $tipoAccion == EDICION) {
$mensaje .= '<div>
<span class="btn btn-default btn-file" ><span class="fileinput-new">Añadir</span><span class="fileinput-exists">Cambiar</span><input type="file" name="imagen" /></span>
<a href="#" class="btn btn-default fileinput-exists" data-dismiss="fileinput">Eliminar</a>';
}
if ($existe) {
$mensaje .='<input type="hidden" name="' . $campo . '" value="' . $valor . '">';
}
$mensaje .='</div>';
if ($tipoAccion == ANADIR || $tipoAccion == EDICION) {
$mensaje .= '</div>';
}
$mensaje .= $this->creaModal($valor, 1);
return $mensaje;
}
private function creaModal($valor, $id)
{
$mensaje .= '
<div id="mensajeModal'.$id.'" class="modal fade " tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog text-center">
<div class="modal-content text-center">
<img src="' . $valor . '" class="img-responsive">
<label>Archivo: ' . $valor . '</label>
</div>
</div>
</div>';
return $mensaje;
}
protected function errorBD($comando, $texto = "", $tipo = "danger", $cabecera = "&iexcl;Atenci&oacute;n!") protected function errorBD($comando, $texto = "", $tipo = "danger", $cabecera = "&iexcl;Atenci&oacute;n!")
{ {
@@ -631,7 +760,8 @@ class Mantenimiento {
$mensaje .= '</div>'; $mensaje .= '</div>';
$mensaje .= '</div>'; $mensaje .= '</div>';
return $mensaje; return $mensaje;
} }
} }
?> ?>

View File

@@ -44,7 +44,9 @@ class Menu {
if ($tipo==2) if ($tipo==2)
$salida.='<li class="active"><a href="'.$enlace.'" target="'.$destino.'" title="'.$titulo.'">'.$opcion.'</a><br /></li>'; $salida.='<li class="active"><a href="'.$enlace.'" target="'.$destino.'" title="'.$titulo.'">'.$opcion.'</a><br /></li>';
else else
$salida.='<label class="key">'.$opcion.'</label><br/>'; $salida.=
//'<span class="label label-default">'.$opcion.'</span><br>';
'<label class="">'.$opcion.'</label><br/>';
} }
return $salida; return $salida;
} }

View File

@@ -161,7 +161,7 @@ class Pdf_mysql_table extends Fpdf
function Table($query,$prop=array()) function Table($query,$prop=array())
{ {
//Issue query //Issue query
$res=$this->bdd->query($query) or die('Error: '.$this->bdd->mysql_error()."<BR>Query: $query"); $res=$this->bdd->query($query) or die('Error: '.$this->bdd->error."<BR>Query: $query");
//Add all columns if none was specified //Add all columns if none was specified
if(count($this->aCols)==0) if(count($this->aCols)==0)
{ {

1707
Zebra_Image.php Normal file

File diff suppressed because it is too large Load Diff

7
css/jasny-bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

6
css/jasny-bootstrap.min.js vendored Normal file

File diff suppressed because one or more lines are too long

BIN
img.data/1424.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 316 B

After

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 769 B

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 B

After

Width:  |  Height:  |  Size: 769 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 B

After

Width:  |  Height:  |  Size: 316 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
img/fondos/old_map.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

BIN
img/fondos/ricepaper_v3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
img/fondos/tree_bark.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
img/fondos/tweed.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
img/sinImagen.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 B

View File

@@ -35,8 +35,9 @@ define('NUMFILAS', '17'); // Número de registros a mostrar en las pantallas de
define('PAUSA', '2'); //Nº segundos de pausa para mostrar mensaje id insertado define('PAUSA', '2'); //Nº segundos de pausa para mostrar mensaje id insertado
define('ESTILO', 'personal'); //Estilo de los iconos de edición (personal, personal, personal) define('ESTILO', 'personal'); //Estilo de los iconos de edición (personal, personal, personal)
define('PLANTILLA', 'bootstrap'); //Estilo de la plantilla y recursos a utilizar define('PLANTILLA', 'bootstrap'); //Estilo de la plantilla y recursos a utilizar
define('COLORLAT', '#46d6db'); //Color de la barra de menú lateral define('COLORLAT', '#a4bdfc'); //Color de la barra de menú lateral
define('COLORFON', '#a4bdfc'); //Color del fondo de la pantalla define('COLORFON', '#ffb878'); //Color del fondo de la pantalla
define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump define('MYSQLDUMP', '/usr/local/bin/mysqldump'); //camino a mysqldump
define('GZIP', '/usr/bin/gzip'); //Camino a gzip define('GZIP', '/usr/bin/gzip'); //Camino a gzip
define('IMAGEDATA', 'img.data'); //Directorio donde se almacenarán las imágenes
?> ?>

View File

@@ -23,5 +23,5 @@
*/ */
define('AUTOR', 'Ricardo Montañana Gómez'); define('AUTOR', 'Ricardo Montañana Gómez');
define('VERSION', '1.04'); define('VERSION', '1.06');
?> ?>

View File

@@ -16,12 +16,14 @@
<link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet"> <link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet">
<link rel="stylesheet" href="css/jquery.simplecolorpicker.css"> <link rel="stylesheet" href="css/jquery.simplecolorpicker.css">
<link rel="stylesheet" href="css/jquery.simplecolorpicker-glyphicons.css"> <link rel="stylesheet" href="css/jquery.simplecolorpicker-glyphicons.css">
<link rel="stylesheet" href="css/jasny-bootstrap.min.css">
<style type="text/css"></style> <style type="text/css"></style>
<script type="text/javascript" src="./css/jquery.min.js"></script> <script type="text/javascript" src="./css/jquery.min.js"></script>
</head> </head>
<body> <body>
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> <!--<body style="background-image:url(img/fondos/old_map.png); background-repeat:repeat">-->
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation" style="background-image: url(img/fondos/bo_play_pattern.png); background-repeat: repeat">
<div class="container-fluid"> <div class="container-fluid">
<div class="navbar-header"> <div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".sidebar">
@@ -33,7 +35,7 @@
<a class="navbar-brand" href="index.php">{aplicacion}</a> <a class="navbar-brand" href="index.php">{aplicacion}</a>
</div> </div>
<div class="navbar-brand"> <div class="navbar-brand">
<span class="label label-primary col-sm-14 col-sm-offset-3">{opcion}</span> <span class="label label-primary col-sm-12 col-sm-offset-2 col-xs-12 col-xs-offset-0">{opcion}</span>
<!--<label class="warn">{opcion}</label>--> <!--<label class="warn">{opcion}</label>-->
</div> </div>
<div class="navbar-collapse collapse"> <div class="navbar-collapse collapse">
@@ -46,36 +48,23 @@
<input type="text" class="form-control" placeholder="Buscar..."> <input type="text" class="form-control" placeholder="Buscar...">
</form>--> </form>-->
</div> </div>
<div class="visible-xs">
<ul class="nav navbar-nav navbar-right">
<li>{control}</li>
</ul>
</div>
</div> </div>
</div> </div>
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row">
<div class="col-sm-2 col-md-1 sidebar"> <div class="col-sm-2 col-md-1 sidebar" >
<!--<ul class="nav nav-sidebar">--> <!--<ul class="nav nav-sidebar">-->
<ul class="nav nav-sidebar"> <ul class="nav nav-sidebar">
<!--<li class="active">{menu}</li>--> <!--<li class="active">{menu}</li>-->
{menu} {menu}
</ul> </ul>
</div> </div>
<div class="col-sm-10 col-sm-offset-1 col-md-11 col-md-offset-1 main"> <div class="col-sm-10 col-sm-offset-2 col-md-11 col-md-offset-1 main">
<!--<h1 class="page-header">{opcion}</h1>-->
<!--<div id="divBarra" class="progress progress-striped active">
<div class="progress-bar" id="barra" role="progressbar" aria-valuenow="0" aria-valuemin="40" aria-valuemax="100" style="width: 0%">
<span id="barra-valor">0% Completado</span>
</div>
</div>
<script>
function actProgreso(valor) {
$('.progress-bar').width(valor+"%")
$("#barra-valor").text(valor+"% Completado");
}
function visualizaProgreso() {
$('#divBarra').style.visibility = "visible";
}
function escondeProgreso() {
$('#divBara').style.visibility = "hidden";
}
</script>-->
{contenido} {contenido}
</div> </div>
</div> </div>
@@ -88,6 +77,7 @@
<script type="text/javascript" src="./css/moment.min.js"></script> <script type="text/javascript" src="./css/moment.min.js"></script>
<script type="text/javascript" src="./css/bootstrap-datetimepicker.min.js"></script> <script type="text/javascript" src="./css/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript" src="./css/bootstrap-datetimepicker.es.js"></script> <script type="text/javascript" src="./css/bootstrap-datetimepicker.es.js"></script>
<script type="text/javascript" src="./css/jquery.simplecolorpicker.js"></script> <script type="text/javascript" src="./css/jquery.simplecolorpicker.js"></script>
<script type="text/javascript" src="./css/jasny-bootstrap.min.js"></script>
</body> </body>
</html> </html>

File diff suppressed because one or more lines are too long

View File

@@ -22,11 +22,12 @@ DROP TABLE IF EXISTS `Articulos`;
SET @saved_cs_client = @@character_set_client; SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8; SET character_set_client = utf8;
CREATE TABLE `Articulos` ( CREATE TABLE `Articulos` (
`id` smallint(6) NOT NULL auto_increment, `id` smallint(6) NOT NULL auto_increment COMMENT 'ordenable',
`descripcion` varchar(60) NOT NULL COMMENT 'ordenable,link/Articulo', `descripcion` varchar(60) NOT NULL COMMENT 'ordenable,link/Articulo',
`marca` varchar(20) default NULL COMMENT 'ordenable', `marca` varchar(20) default NULL COMMENT 'ordenable',
`modelo` varchar(20) default NULL COMMENT 'ordenable', `modelo` varchar(20) default NULL COMMENT 'ordenable',
`cantidad` int(11) default NULL COMMENT 'ordenable', `cantidad` int(11) default NULL COMMENT 'ordenable',
`imagen` varchar(45) default NULL COMMENT 'imagen',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=785 DEFAULT CHARSET=utf8; ) ENGINE=InnoDB AUTO_INCREMENT=785 DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client; SET character_set_client = @saved_cs_client;
@@ -40,12 +41,13 @@ DROP TABLE IF EXISTS `Elementos`;
SET @saved_cs_client = @@character_set_client; SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8; SET character_set_client = utf8;
CREATE TABLE `Elementos` ( CREATE TABLE `Elementos` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment COMMENT 'ordenable',
`id_Articulo` smallint(6) NOT NULL COMMENT 'foreign(Articulos;id),ordenable', `id_Articulo` smallint(6) NOT NULL COMMENT 'foreign(Articulos;id),ordenable',
`id_Ubicacion` smallint(5) unsigned NOT NULL COMMENT 'foreign(Ubicaciones;id),ordenable', `id_Ubicacion` smallint(5) unsigned NOT NULL COMMENT 'foreign(Ubicaciones;id),ordenable',
`numserie` varchar(30) default NULL COMMENT 'ordenable', `numserie` varchar(30) default NULL COMMENT 'ordenable',
`cantidad` int(10) unsigned default NULL COMMENT 'ordenable', `cantidad` int(10) unsigned default NULL COMMENT 'ordenable',
`fechaCompra` date NOT NULL COMMENT 'ordenable', `fechaCompra` date NOT NULL COMMENT 'ordenable',
`imagen` varchar(45) default NULL COMMENT 'imagen',
PRIMARY KEY (`id`), PRIMARY KEY (`id`),
KEY `id` (`id`), KEY `id` (`id`),
KEY `id_Articulo` (`id_Articulo`), KEY `id_Articulo` (`id_Articulo`),
@@ -64,8 +66,9 @@ DROP TABLE IF EXISTS `Ubicaciones`;
SET @saved_cs_client = @@character_set_client; SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8; SET character_set_client = utf8;
CREATE TABLE `Ubicaciones` ( CREATE TABLE `Ubicaciones` (
`id` smallint(5) unsigned NOT NULL auto_increment, `id` smallint(5) unsigned NOT NULL auto_increment COMMENT 'ordenable',
`Descripcion` varchar(50) NOT NULL COMMENT 'ordenable,link/Ubicacion', `Descripcion` varchar(50) NOT NULL COMMENT 'ordenable,link/Ubicacion',
`imagen` varchar(45) DEFAULT NULL COMMENT 'imagen',
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8; ) ENGINE=InnoDB AUTO_INCREMENT=184 DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client; SET character_set_client = @saved_cs_client;
@@ -79,7 +82,7 @@ DROP TABLE IF EXISTS `Usuarios`;
SET @saved_cs_client = @@character_set_client; SET @saved_cs_client = @@character_set_client;
SET character_set_client = utf8; SET character_set_client = utf8;
CREATE TABLE `Usuarios` ( CREATE TABLE `Usuarios` (
`id` int(10) unsigned NOT NULL auto_increment, `id` int(10) unsigned NOT NULL auto_increment COMMENT 'ordenable',
`nombre` varchar(16) NOT NULL default '', `nombre` varchar(16) NOT NULL default '',
`clave` varchar(32) NOT NULL default '', `clave` varchar(32) NOT NULL default '',
`idSesion` varchar(20) NOT NULL default '', `idSesion` varchar(20) NOT NULL default '',

View File

@@ -2,10 +2,10 @@
<Informe> <Informe>
<Titulo Texto="Informe de Artículos" /> <Titulo Texto="Informe de Artículos" />
<Datos> <Datos>
<Consulta>select * from Articulos order by descripcion;</Consulta> <Consulta>select * from Articulos where descripcion like '%{filtro}%' order by {orden};</Consulta>
</Datos> </Datos>
<Pagina Orientacion="P" Formato="A4"> <Pagina Orientacion="P" Formato="A4">
<Cabecera>Relación alfabética</Cabecera> <Cabecera>Relación Artículos</Cabecera>
<Cuerpo> <Cuerpo>
<Col Nombre="id" Ancho="10" Ajuste="D" Titulo="id"/> <Col Nombre="id" Ancho="10" Ajuste="D" Titulo="id"/>
<Col Nombre="descripcion" Ancho="70" Ajuste="I" Titulo="Descripción"/> <Col Nombre="descripcion" Ancho="70" Ajuste="I" Titulo="Descripción"/>

View File

@@ -4,9 +4,9 @@
<Datos> <Datos>
<Consulta> <Consulta>
SELECT E.id as id,U.Descripcion as ubicacion,A.Descripcion as articulo,A.Marca as marca,A.Modelo as modelo,E.numserie as numserie,E.cantidad, SELECT E.id as id,U.Descripcion as ubicacion,A.Descripcion as articulo,A.Marca as marca,A.Modelo as modelo,E.numserie as numserie,E.cantidad,
DATE_FORMAT(E.fechacompra, '%d/%m/%Y') as fechaCompra DATE_FORMAT(E.fechacompra, '%d/%m/%Y') as fechaCompra
FROM Elementos E inner join Articulos A on E.id_articulo=A.id inner join FROM Elementos E inner join Articulos A on E.id_articulo=A.id inner join
Ubicaciones U on E.id_ubicacion=U.id order by ubicacion,articulo,marca,modelo,numserie; Ubicaciones U on E.id_ubicacion=U.id where A.Descripcion like '%{filtro}%' order by {orden};
</Consulta> </Consulta>
</Datos> </Datos>
<Pagina Orientacion="L" Formato="A4"> <Pagina Orientacion="L" Formato="A4">

View File

@@ -2,10 +2,10 @@
<Informe> <Informe>
<Titulo Texto="Informe de Ubicaciones" /> <Titulo Texto="Informe de Ubicaciones" />
<Datos> <Datos>
<Consulta>select * from Ubicaciones order by Descripcion;</Consulta> <Consulta>select * from Ubicaciones where descripcion like '%{filtro}%' order by {orden};</Consulta>
</Datos> </Datos>
<Pagina Orientacion="P" Formato="A4"> <Pagina Orientacion="P" Formato="A4">
<Cabecera>Relación alfabética</Cabecera> <Cabecera>Relación de Ubicaciones</Cabecera>
<Cuerpo> <Cuerpo>
<Col Nombre="id" Ancho="10" Ajuste="D" Titulo="id"/> <Col Nombre="id" Ancho="10" Ajuste="D" Titulo="id"/>
<Col Nombre="Descripcion" Ancho="80" Ajuste="I" Titulo="Descripción"/> <Col Nombre="Descripcion" Ancho="80" Ajuste="I" Titulo="Descripción"/>

View File

@@ -2,7 +2,7 @@
<Informe> <Informe>
<Titulo Texto="Informe de Usuarios" /> <Titulo Texto="Informe de Usuarios" />
<Datos> <Datos>
<Consulta>select * from Usuarios order by Nombre;</Consulta> <Consulta>select * from Usuarios where nombre like '%{filtro}%' order by {orden};</Consulta>
</Datos> </Datos>
<Pagina Orientacion="P" Formato="A4"> <Pagina Orientacion="P" Formato="A4">
<Cabecera>Relación alfabética</Cabecera> <Cabecera>Relación alfabética</Cabecera>

View File

@@ -3,12 +3,12 @@
<Titulo>Mantenimiento de Elementos</Titulo> <Titulo>Mantenimiento de Elementos</Titulo>
<Consulta> <Consulta>
SELECT SQL_CALC_FOUND_ROWS E.id as id,U.Descripcion as ubicacion,A.Descripcion as articulo,A.Marca as marca,A.Modelo as modelo,E.numserie as numserie, SELECT SQL_CALC_FOUND_ROWS E.id as id,U.Descripcion as ubicacion,A.Descripcion as articulo,A.Marca as marca,A.Modelo as modelo,E.numserie as numserie,
DATE_FORMAT(E.fechacompra, '%d/%m/%Y') as fechaCompra,E.cantidad as cantidad DATE_FORMAT(E.fechacompra, '%d/%m/%Y') as fechaCompra,E.cantidad as cantidad, E.imagen as imagen
FROM Elementos E inner join Articulos A on E.id_articulo=A.id inner join FROM Elementos E inner join Articulos A on E.id_articulo=A.id inner join
Ubicaciones U on E.id_ubicacion=U.id {buscar} {orden} limit {inferior},{superior}; Ubicaciones U on E.id_ubicacion=U.id {buscar} {orden} limit {inferior},{superior};
</Consulta> </Consulta>
<Campos> <Campos>
<Col Campo="id" Nombre="id" Ancho="5" Ajuste="D" Titulo="id" Tipo="smallint(6)"/> <Col Campo="id" Nombre="id" Ancho="5" Ajuste="D" Titulo="id" Tipo="smallint(6)" Varios="ordenable"/>
<Col Campo="id_Ubicacion" Nombre="ubicacion" Ancho="40" Ajuste="L" Titulo="Ubicación" Varios="ordenable,foreign(Ubicaciones->id;{Descripcion})" Editable="si"/> <Col Campo="id_Ubicacion" Nombre="ubicacion" Ancho="40" Ajuste="L" Titulo="Ubicación" Varios="ordenable,foreign(Ubicaciones->id;{Descripcion})" Editable="si"/>
<Col Campo="id_Articulo" Nombre="articulo" Ancho="40" Ajuste="L" Titulo="Artículo" Varios="ordenable,buscable/A.Descripcion,foreign(Articulos->id;{Descripcion/Marca/Modelo})" Editable="si"/> <Col Campo="id_Articulo" Nombre="articulo" Ancho="40" Ajuste="L" Titulo="Artículo" Varios="ordenable,buscable/A.Descripcion,foreign(Articulos->id;{Descripcion/Marca/Modelo})" Editable="si"/>
<Col Nombre="marca" Ancho="40" Ajuste="L" Titulo="Marca" Varios="ordenable" Editable="no"/> <Col Nombre="marca" Ancho="40" Ajuste="L" Titulo="Marca" Varios="ordenable" Editable="no"/>
@@ -16,5 +16,6 @@
<Col Campo="numserie" Nombre="numserie" Ancho="30" Ajuste="L" Titulo="Nº Serie" Varios="ordenable" Editable="si"/> <Col Campo="numserie" Nombre="numserie" Ancho="30" Ajuste="L" Titulo="Nº Serie" Varios="ordenable" Editable="si"/>
<Col Campo="fechaCompra" Nombre="fechaCompra" Ancho="25" Ajuste="L" Titulo="Compra" Varios="ordenable" Tipo="fecha" Editable="si"/> <Col Campo="fechaCompra" Nombre="fechaCompra" Ancho="25" Ajuste="L" Titulo="Compra" Varios="ordenable" Tipo="fecha" Editable="si"/>
<Col Campo="cantidad" Nombre="cantidad" Ancho="15" Ajuste="D" Titulo="Cant." Tipo="Int(11)" Editable="si"/> <Col Campo="cantidad" Nombre="cantidad" Ancho="15" Ajuste="D" Titulo="Cant." Tipo="Int(11)" Editable="si"/>
<Col Campo="imagen" Nombre="imagen" Ancho="10" Titulo="Imagen" Tipo="imagen" Editable="si" Varios="imagen"/>
</Campos> </Campos>
</Mantenimiento> </Mantenimiento>

View File

@@ -6,8 +6,8 @@
FROM Usuarios {buscar} {orden} limit {inferior}, {superior}; FROM Usuarios {buscar} {orden} limit {inferior}, {superior};
</Consulta> </Consulta>
<Campos> <Campos>
<Col Campo="id" Nombre="id" Ancho="5" Ajuste="D" Titulo="id" Tipo="int(6)"/> <Col Campo="id" Nombre="id" Ancho="5" Ajuste="D" Titulo="id" Tipo="int(6)" Varios="ordenable"/>
<Col Campo="nombre" Nombre="nombre" Ancho="8" Ajuste="L" Titulo="Nombre" Varios="ordenable" Editable="si"/> <Col Campo="nombre" Nombre="nombre" Ancho="8" Ajuste="L" Titulo="Nombre" Varios="ordenable,buscable/nombre" Editable="si"/>
<Col Campo="clave" Nombre="clave" Ancho="16" Ajuste="L" Titulo="Clave" Tipo="Password" Editable="si"/> <Col Campo="clave" Nombre="clave" Ancho="16" Ajuste="L" Titulo="Clave" Tipo="Password" Editable="si"/>
<Col Campo="idSesion" Nombre="idSesion" Ancho="32" Ajuste="L" Titulo="id Sesión" Editable="si"/> <Col Campo="idSesion" Nombre="idSesion" Ancho="32" Ajuste="L" Titulo="id Sesión" Editable="si"/>
<Col Campo="alta" Nombre="alta" Ancho="1" Ajuste="R" Tipo="Boolean" Titulo="Altas" Editable="si"/> <Col Campo="alta" Nombre="alta" Ancho="1" Ajuste="R" Tipo="Boolean" Titulo="Altas" Editable="si"/>