2011-04-04 15:16:10 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
/*
|
|
|
|
|
|
* Clase ListaPedido
|
|
|
|
|
|
*
|
|
|
|
|
|
* Contiene una lista de los pedidos que tiene un gerente, comprobando los permisos que tiene
|
|
|
|
|
|
* <EFBFBD>ste.
|
|
|
|
|
|
*
|
|
|
|
|
|
* Si tiene permisos de "Gesti<EFBFBD>n de pedidos" podr<EFBFBD> ver sus pedidos, si adem<EFBFBD>s
|
|
|
|
|
|
* tiene permisos de "Selecci<EFBFBD>n pedidos"
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
include_once("Objects/Pedido.php");
|
|
|
|
|
|
|
|
|
|
|
|
class ListaPedido{
|
|
|
|
|
|
|
|
|
|
|
|
//Atributos:
|
|
|
|
|
|
|
|
|
|
|
|
/* Una lista de pedidos. */
|
|
|
|
|
|
private $pedidos = array();
|
|
|
|
|
|
|
|
|
|
|
|
/* Gestor due<75>o de la lista. */
|
|
|
|
|
|
private $gestor;
|
|
|
|
|
|
|
|
|
|
|
|
/* Campos por los que ordenar la lista. */
|
|
|
|
|
|
private $orden;
|
|
|
|
|
|
|
|
|
|
|
|
/* Condiciones para b<>squedas. */
|
|
|
|
|
|
private $sql = "";
|
|
|
|
|
|
|
|
|
|
|
|
/* modo de b<>squeda */
|
|
|
|
|
|
private $order_by = "";
|
|
|
|
|
|
|
|
|
|
|
|
/* tipo de pedidos que engloba esta lista*/
|
|
|
|
|
|
private $tipo;
|
|
|
|
|
|
|
|
|
|
|
|
//Constructor:
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Crea una lista de pedidos.
|
|
|
|
|
|
* @param usuario - gestor due<EFBFBD>o de la lista.
|
|
|
|
|
|
* @param orden - par<EFBFBD>metros por los que ordenar la lista.
|
|
|
|
|
|
* @param sql - consulta de b<EFBFBD>squeda.
|
|
|
|
|
|
*/
|
|
|
|
|
|
function ListaPedido($usuario,$orden,$sql,$tipo){
|
|
|
|
|
|
$this->gestor = $usuario;
|
|
|
|
|
|
$this->orden = $orden;
|
|
|
|
|
|
$this->tipo = $tipo;
|
|
|
|
|
|
//Si where tiene alg<6C>n valor se le a<>ade la cl<63>usula where.
|
|
|
|
|
|
if($sql != ""){
|
|
|
|
|
|
$this->sql = $sql;
|
|
|
|
|
|
}
|
|
|
|
|
|
if($orden != ""){
|
|
|
|
|
|
$this->order_by = $orden;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getSQL(){
|
|
|
|
|
|
return $this->sql;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Busca y devuelve todos los pedidos del usuario.
|
|
|
|
|
|
*/
|
|
|
|
|
|
function getPedidos(){
|
|
|
|
|
|
//PERMISOS:
|
|
|
|
|
|
/*
|
|
|
|
|
|
* Admin (1) - Todos
|
|
|
|
|
|
* Selecci<EFBFBD>n (4) - Todos
|
|
|
|
|
|
* Gestor (3) - Los suyos
|
|
|
|
|
|
* Otro - Excepci<EFBFBD>n
|
|
|
|
|
|
*/
|
|
|
|
|
|
$estado = $this->tipo;
|
|
|
|
|
|
if($this->pedidos == null){
|
|
|
|
|
|
//Modificamos la consulta en funci<63>n del rol.
|
|
|
|
|
|
if($this->gestor->tieneRol(4) || $this->gestor->tieneRol(1)){
|
|
|
|
|
|
if($this->sql != ""){
|
|
|
|
|
|
// metemos el tipo si es >0
|
|
|
|
|
|
if($estado > 0){
|
|
|
|
|
|
if(stripos($this->sql,"WHERE")>0){
|
|
|
|
|
|
$sqlAntesWhere=substr($this->sql,0,stripos($this->sql,"WHERE"));
|
|
|
|
|
|
$sqlDespuesWhere=substr($this->sql,stripos($this->sql,"WHERE")+5,strlen($this->sql));
|
|
|
|
|
|
// echo "antes:".$sqlAntesWhere." -- ".$sqlDespuesWhere;
|
|
|
|
|
|
$sqlConTipo="WHERE pedidos.estado='".$estado."' and ";
|
|
|
|
|
|
$sqlNueva=$sqlAntesWhere.$sqlConTipo.$sqlDespuesWhere;
|
|
|
|
|
|
|
|
|
|
|
|
} else{
|
|
|
|
|
|
echo "COMPRUEBAME si ListaPedido.php cuando no hay WHERE,(avisar a Sergio)";
|
|
|
|
|
|
$sqlConTipo="WHERE pedidos.estado='".$estado."' ";
|
|
|
|
|
|
$sqlNueva=$this->sql.$sqlConTipo;
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$sqlNueva=$this->sql;
|
|
|
|
|
|
}
|
|
|
|
|
|
$consulta = $sqlNueva." ".$this->order_by;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
if($estado > 0){
|
|
|
|
|
|
$consulta = "SELECT * from pedidos WHERE estado='".$estado."'".$this->orden ;
|
|
|
|
|
|
}else{
|
2011-05-19 08:46:58 +00:00
|
|
|
|
$consulta = "SELECT * from pedidos ".$this->orden."";
|
2011-04-04 15:16:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}else if($this->gestor->tieneRol(3)){
|
|
|
|
|
|
$id = $this->gestor->getValor("oid");
|
|
|
|
|
|
if($this->sql != ""){
|
|
|
|
|
|
if($estado > 0){
|
|
|
|
|
|
if(stripos($this->sql,"WHERE")>0){
|
|
|
|
|
|
$sqlAntesWhere=substr($this->sql,0,stripos($this->sql,"WHERE"));
|
|
|
|
|
|
$sqlDespuesWhere=substr($this->sql,stripos($this->sql,"WHERE")+5,strlen($this->sql));
|
|
|
|
|
|
// echo "antes:".$sqlAntesWhere." -- ".$sqlDespuesWhere;
|
|
|
|
|
|
$sqlConTipo="WHERE pedidos.estado='".$estado."' and ";
|
|
|
|
|
|
$sqlNueva=$sqlAntesWhere.$sqlConTipo.$sqlDespuesWhere;
|
|
|
|
|
|
|
|
|
|
|
|
} else{
|
|
|
|
|
|
echo "COMPRUEBAME si ListaPedido.php cuando no hay WHERE,(avisar a Sergio)";
|
|
|
|
|
|
$sqlConTipo="WHERE pedidos.estado='".$estado."' ";
|
|
|
|
|
|
$sqlNueva=$this->sql.$sqlConTipo;
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
$sqlNueva=$this->sql;
|
|
|
|
|
|
}
|
|
|
|
|
|
$consulta = $sqlNueva." ".$this->order_by;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
if($estado > 0){
|
|
|
|
|
|
$consulta = "SELECT * FROM pedidos WHERE gerente = '$id' AND estado='$estado'".$this->orden;
|
|
|
|
|
|
}else{
|
2011-05-19 08:46:58 +00:00
|
|
|
|
$consulta = "SELECT * FROM pedidos WHERE gerente = '$id'".$this->orden;
|
2011-04-04 15:16:10 +00:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}else{
|
2011-04-12 11:49:11 +00:00
|
|
|
|
$error = "El usuario no tiene permisos para listar las solicitudes de oferta.";
|
2011-04-04 15:16:10 +00:00
|
|
|
|
throw new Exception($error);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$bd=new BD();
|
|
|
|
|
|
$resultado = $bd->execQuery($consulta);
|
|
|
|
|
|
//Procesamos los pedidos.
|
|
|
|
|
|
if(mysql_num_rows($resultado) == 0){
|
|
|
|
|
|
$this->pedidos = array();
|
|
|
|
|
|
}else{
|
|
|
|
|
|
while($rows = mysql_fetch_array($resultado)){
|
|
|
|
|
|
$p = new Pedido($rows["oid"], $this->gestor);
|
|
|
|
|
|
/*for($i=0;$i< mysql_num_fields($resultado);$i++){
|
|
|
|
|
|
if(!in_array(mysql_field_name($resultado,$i),$p->getCampos())){
|
|
|
|
|
|
$arrayAct=array(mysql_field_name($resultado,$i) => $rows[$i]);
|
|
|
|
|
|
$p->setCampos($arrayAct);
|
|
|
|
|
|
}
|
|
|
|
|
|
}*/
|
|
|
|
|
|
$this->pedidos[] = $p;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $this->pedidos;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Devuelve una lista de los posibles estados en los que se puede encontrar un pedido
|
|
|
|
|
|
* como Key => value, donde key es el cod del estado y value es el nombre del estado.
|
|
|
|
|
|
*/
|
|
|
|
|
|
function getEstadosPedidos(){
|
|
|
|
|
|
$consulta = "SELECT cod, nombre FROM pedidos_estados";
|
|
|
|
|
|
$bd = new BD();
|
|
|
|
|
|
return $bd->keyValueQuery($consulta, "cod", "nombre");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* A<EFBFBD>ade un pedido a la bd.
|
|
|
|
|
|
* @param campos - campos del nuevo pedido.
|
|
|
|
|
|
*/
|
|
|
|
|
|
function addPedido($campos){
|
|
|
|
|
|
|
|
|
|
|
|
if(!$this->gestor->tieneRol(1) && !$this->gestor->tieneRol(3)){
|
2011-04-12 11:49:11 +00:00
|
|
|
|
$error = "El usuario no tiene permisos para crear solicitudes de oferta.";
|
2011-04-04 15:16:10 +00:00
|
|
|
|
throw new Exception($error);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Calculamos el id
|
|
|
|
|
|
$id = $this->calculaIdProyecto($campos["procedencia"], $campos["cliente"]);
|
|
|
|
|
|
$inserto = "oid, fecha";
|
2011-06-08 17:20:22 +00:00
|
|
|
|
$fecha = "'".date("Y-m-d H:i:s")."'";
|
2011-04-04 15:16:10 +00:00
|
|
|
|
$valores = "$id, $fecha";
|
|
|
|
|
|
|
|
|
|
|
|
//Procesamos los datos
|
|
|
|
|
|
foreach($campos as $key => $value){
|
|
|
|
|
|
$inserto .= ", $key";
|
|
|
|
|
|
$valores .= ", '$value'";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Insertamos en la BD
|
|
|
|
|
|
$consulta = "INSERT INTO pedidos ($inserto) VALUES ($valores)";
|
2011-05-19 08:46:58 +00:00
|
|
|
|
|
2011-04-04 15:16:10 +00:00
|
|
|
|
$bd = new BD();
|
|
|
|
|
|
if(!$bd->execQuery($consulta)){
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
$p = new Pedido($id, $this->gestor);
|
2011-04-12 11:49:11 +00:00
|
|
|
|
$mensaje = "Nueva solicitud de oferta";
|
2011-04-04 15:16:10 +00:00
|
|
|
|
$p->actualizarHistorial($mensaje);
|
|
|
|
|
|
}
|
|
|
|
|
|
return $id;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//Calcula el c<>digo de un proyecto en funci<63>n de su procedencia.
|
|
|
|
|
|
function calculaIdProyecto($procedencia, $cliente){
|
|
|
|
|
|
$bd = new BD();
|
|
|
|
|
|
$consulta = "select num,pedidos from procedencia where num='$procedencia'";
|
|
|
|
|
|
if($resultado = $bd->execQuery($consulta)){
|
|
|
|
|
|
$cli = $cliente;
|
|
|
|
|
|
for($i = strlen($cli); $i < 3; $i++){
|
|
|
|
|
|
$cli = "0".$cli;
|
|
|
|
|
|
}
|
|
|
|
|
|
$rows = mysql_fetch_array($resultado);
|
|
|
|
|
|
$cod = $rows["pedidos"]+1;
|
|
|
|
|
|
$num = $rows["num"];
|
|
|
|
|
|
$bd->execQuery("update procedencia set pedidos=pedidos+1 where num=$procedencia");
|
|
|
|
|
|
for($i = strlen($cod); $i < 4; $i++){
|
|
|
|
|
|
$cod = "0".$cod;
|
|
|
|
|
|
}
|
|
|
|
|
|
return $num.$cli.$cod;
|
|
|
|
|
|
}else{
|
|
|
|
|
|
return -1;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// /**
|
|
|
|
|
|
// * Elimina un pedido, tanto de la BD como de la lista de pedidos.
|
|
|
|
|
|
// * @param id - Identificador del pedido a eliminar.
|
|
|
|
|
|
// * @return true si lo elimin<69> con <20>xito y false en caso contrario.
|
|
|
|
|
|
// */
|
|
|
|
|
|
// function eliminarPedido($id){
|
|
|
|
|
|
// //PERMISOS:
|
|
|
|
|
|
// /*
|
|
|
|
|
|
// * Admin (1) - Eliminar
|
|
|
|
|
|
// * Gestor (3) - Lo suyo
|
|
|
|
|
|
// * Otro - Excepci<63>n
|
|
|
|
|
|
// */
|
|
|
|
|
|
// if(!$this->gestor->tieneRol(1) && !$this->gestor->tieneRol(3)){
|
|
|
|
|
|
// $error = "El usuario no tiene permisos para borrar pedidos.";
|
|
|
|
|
|
// throw new Exception($error);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// $pedido = $this->buscarPedido($id);
|
|
|
|
|
|
// //Si lo encuentro puedo eliminarlo.
|
|
|
|
|
|
// if($pedido != null){
|
|
|
|
|
|
// $lista = $this->pedidos;
|
|
|
|
|
|
// $this->pedidos = null;
|
|
|
|
|
|
// //Compruebo elemento a elemento es o no el que quiero
|
|
|
|
|
|
// //eliminar. Si es as<61>, no lo copio.
|
|
|
|
|
|
// foreach($lista as $elem){
|
|
|
|
|
|
// if($elem->getValor("oid") != $id){
|
|
|
|
|
|
// $this->pedidos[] = $elem;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// //Elimino el pedido de la BD.
|
|
|
|
|
|
// $pedido->eliminar();
|
|
|
|
|
|
// return true;
|
|
|
|
|
|
// }else{
|
|
|
|
|
|
// return false;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* Busca un pedido en funci<EFBFBD>n de su identificador.
|
|
|
|
|
|
* @return el pedido, en caso de encontrarlo y null en
|
|
|
|
|
|
* caso contrario.
|
|
|
|
|
|
*/
|
|
|
|
|
|
function buscarPedido($id){
|
|
|
|
|
|
$lista = $this->getPedidos();
|
|
|
|
|
|
if($lista){
|
|
|
|
|
|
foreach($lista as $elem){
|
|
|
|
|
|
if($elem->getValor("oid") == $id){
|
|
|
|
|
|
return $elem;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
return null;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
?>
|