gestor = $usuario; $this->orden = $orden; $this->tipo = $tipo; //Si where tiene algún valor se le añade la clá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ón (4) - Todos * Gestor (3) - Los suyos * Otro - Excepción */ $estado = $this->tipo; if($this->pedidos == null){ //Modificamos la consulta en funció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{ $consulta = "SELECT * from pedidos WHERE estado IN (10, 20, 30) ".$this->orden.""; } } }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{ $consulta = "SELECT * FROM pedidos WHERE estado IN (10, 20, 30) AND gerente = '$id'".$this->orden; } } }else{ $error = "El usuario no tiene permisos para listar pedidos."; 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ñade un pedido a la bd. * @param campos - campos del nuevo pedido. */ function addPedido($campos){ if(!$this->gestor->tieneRol(1) && !$this->gestor->tieneRol(3)){ $error = "El usuario no tiene permisos para crear pedidos."; throw new Exception($error); } //Calculamos el id $id = $this->calculaIdProyecto($campos["procedencia"], $campos["cliente"]); $inserto = "oid, fecha"; $fecha = "'".date(Y."-".m."-".d)."'"; $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)"; $bd = new BD(); if(!$bd->execQuery($consulta)){ return -1; }else{ $p = new Pedido($id, $this->gestor); $mensaje = "Nuevo pedido"; $p->actualizarHistorial($mensaje); } return $id; } //Calcula el código de un proyecto en funció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ó con éxito y false en caso contrario. // */ // function eliminarPedido($id){ // //PERMISOS: // /* // * Admin (1) - Eliminar // * Gestor (3) - Lo suyo // * Otro - Excepció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í, 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ó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; } } ?>