Incam_Intranet/Objects/ListaPedido.php

280 lines
7.8 KiB
PHP
Raw Normal View History

<?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{
$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 las solicitudes de oferta.";
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)){
$error = "El usuario no tiene permisos para crear solicitudes de oferta.";
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 = "Nueva solicitud de oferta";
$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;
}
}
?>