* @version 1.0
* @package Inventario
* @copyright Copyright (c) 2008, 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 .
*
*/
//Es una especialización de Mantenimiento.
class Elementos extends Mantenimiento{
public function __construct($baseDatos,$nombre)
{
parent::__construct($baseDatos,$nombre);
}
public function ejecuta()
{
$opc=$_GET['opc'];
$id=$_GET['id'];
//sig o ant
$op=$_GET['op'];
//campo por el que ordenar la consulta
$orden=isset($_GET['orden'])?$_GET['orden']:'ubicacion';
//ascendente o descendente
$sentido=isset($_GET['sentido'])?$_GET['sentido']:'asc';
switch ($opc) {
case 'inicial':
return $this->consulta($id,$op,$orden,$sentido);
case 'editar':
return $this->muestra($id,EDICION);
case 'eliminar':
return $this->muestra($id,BORRADO);
case 'nuevo':
return $this->muestra(null,ANADIR);
case 'insertar':
return $this->insertar();
case 'modificar':
return $this->modificar($id);
case 'borrar':
return $this->borrar($id);
case 'informe':
return $this->informe();
case 'baja':
return $this->baja($id);
default:
return 'La clase gestion No entiende lo solicitado.';
}
}
//La consulta es distinta de la general ya que va ordenada por fechas y
//no mostramos el id, además hay más botones de opciones.
private function consulta($fec,$op,$orden,$sentido)
{
//Esto es necesario ya que no se puede poner un alias en la clausula where
switch ($orden) {
case "ubicacion":$campoWhere="U.Descripcion";break;
case "articulo":$campoWhere="A.Descripcion";break;
case "marca":$campoWhere="A.Marca";break;
case "modelo":$campoWhere="A.Modelo";break;
case "numserie":$campoWhere="E.numserie";break;
case "fecha":$campoWhere="fecha";break;
}
$opSig=$sentido=='desc'?'<=':'>=';
$opAnt=$sentido=='desc'?'>=':'<=';
switch ($op) {
case "sig":$sufijo="and $campoWhere $opSig\"$fec\"";break;
case "ant":$ix=$fec;$sufijo="and $campoWhere $opAnt\"$ix\"";break;
default:$sufijo="";
}
//Tratamiento de las claves foráneas
list($existen,$respuesta)=$this->obtieneClavesForaneas();
if ($existen) {
foreach ($respuesta as $linea) {
list($campo,$tabla,$atributo)=explode(",",$linea);
$foraneas[$campo]=$tabla;
}
}
//Consulta paginada de las incidencias abiertas.
//$comando="select id,fecha,id_elemento,id_ubicacion,descripcion,id_proveedor ".
// "from Incidencias where isnull(fechaResolucion) $sufijo order by fecha desc limit ".NUMFILAS;
//$comando="select I.id,fecha,E.Descripcion as elemento,U.Descripcion as ubicacion,I.descripcion,P.Descripcion as proveedor ".
// "from Incidencias I inner join Elementos E on id_elemento=E.id inner join Ubicaciones U on id_ubicacion=U.id ".
// "inner join Proveedores P on id_proveedor=P.id where (isnull(fechaResolucion) or fechaResolucion='00-00-000') $sufijo order by ".$orden." ".$sentido." limit ".NUMFILAS;
$comando="SELECT E.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 ".
"FROM Elementos E inner join Articulos A on E.id_articulo=A.id inner join ".
"Ubicaciones U on E.id_ubicacion=U.id $sufijo order by ".$orden." ".$sentido." limit ".NUMFILAS;
//echo $comando;exit;
$resultado=$this->bdd->query($comando);
if (!$resultado)
return $this->errorBD("","No se pudo ejecutar la consulta $comando en la base de datos");
if ($resultado->num_rows==0) {
//Evita un bucle infinito
if ($fec!="" && $op!="")
return $this->consulta("","",$orden,$sentido);
else
return "
No se pudo ejecutar la consulta $comando.
";
}
//Prepara la salida de datos en una tabla.
//En la cabecera los nombres de los campos
$salida='
';
$i=0;
$primero=true;
while ($campo=$resultado->fetch_field()) {
if($primero) {
//Saltamos el id que no lo queremos en pantalla
$primero=false;
continue;
}
//Si es una clave foránea pondrá el nombre de la tabla
if ($foraneas[$campo->name]) {
$listaClaves[$i]=$foraneas[$campo->name];
$dato=$foraneas[$campo->name];
} else
$dato=ucfirst($campo->name);
$i+=1;
$salida.="
";
//En el cuerpo los datos
$primero=true;
while($fila=$resultado->fetch_assoc()) {
$salida.="
";
$resultado->field_seek(0);
$idSig=$fila[$orden];
$id=$fila['id'];
//Se queda con la fecha mayor
if ($primero) {
$primero=false;
$idAnt=$idSig;
}
$i=0;
$primer=true;
while($campo=$resultado->fetch_field()) {
if ($primer) {
//Se debe saltar el primer campo que es el id y no lo queremos en pantalla.
$primer=false;
continue;
}
if ($listaClaves[$i])
$dato=$this->obtenerDescripcion($listaClaves[$i],$fila[$campo->name]);
else
$dato=$fila[$campo->name];
$salida.="
".$dato."
";
$i+=1;
}
//Icono de editar
$iconoEditar='';
//Icono de eliminar
$iconoEliminar='';
$iconoBaja='';
$salida.="
";
$resultado->close();
return $salida;
}
//Función que genera un campo de lista con los valores de descripción de la
//tabla a la cual pertenece la clave foránea.
protected function generaLista($tabla,$campo,$valor,$modo)
{
//La tabla debe tener un campo Descripción
$comando="select id,Descripcion from $tabla order by Descripcion";
if ($tabla=="Articulos")
$comando="select id,Descripcion,Marca,Modelo from $tabla order by Descripcion";
$resultado=$this->bdd->query($comando);
if (!$resultado)
return $this->errorBD($comando);
$modoEfectivo=$modo=="readonly" ? "disabled" : "";
$salida="\n
";
$resultado->close();
return $salida;
}
private function baja($id)
{
//Baja del elemento de inventario
/*
$fecha=strftime("%Y-%m-%d");
$comando="update Incidencias set fechaResolucion='$fecha' where id='$id';";
$resultado=$this->bdd->query($comando);
if (!$resultado)
return $this->errorBDD($comando);*/
header('location: '.$this->url);
}
}