<?php
require_once('DataManager.Class.php');

class gestionReserva {
    
    public $conn;

    function __construct($c) {
        
        if(isset($c)){
                $this->conn = $c;
        } else {
                $this->conn = DataManager::getInstance();
        }
    }

	public function informacionReservaConsolidado() {
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_consolidada_informacion ()}");
		$stmt->execute();	
		return $stmt->fetch();
	
	}

	public function recuperarCantidadBloques($tipoCarga, $cantidad){
		$stmt = $this->conn->prepare("SELECT agenda.FN_cantidad_bloques(?, ?)");
		$stmt->execute(array($tipoCarga, $cantidad));
		return $stmt->fetch();
	}

	// TODO: Reemplazar por función previa
    public function recuperaBloquesUtilizados($tipoCarga, $cantidad) {	
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_calcular_bloques(?, ?)}");
		$stmt->execute(array($tipoCarga, $cantidad));
		return $stmt->fetch();
	}
	
	public function informacionBloqueReservaModificarVerificar($bloqId, $puertaId, $fecha, $reseId, $tipo_retorno)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_modifica_verificar_bloque_informacion (?, ?, ?, ?)}");
		$stmt->bindValue(1, $bloqId, PDO::PARAM_INT);
		$stmt->bindValue(2, $puertaId, PDO::PARAM_INT);
		$stmt->bindValue(3, $fecha, PDO::PARAM_INT);
		$stmt->bindValue(4, $reseId, PDO::PARAM_INT);

		$stmt->execute();

		if($tipo_retorno == 0) {
			return $stmt->fetch();
		} else {
			return $stmt->fetchAll();
		}

	}
	
	public function informacionBloqueReservaVerificar($bloqId, $puertaId, $fecha, $tipo_retorno)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_verificar_bloque_informacion (?, ?, ?)}");
		$stmt->bindValue(1, $bloqId, PDO::PARAM_INT);
		$stmt->bindValue(2, $puertaId, PDO::PARAM_INT);
		$stmt->bindValue(3, $fecha, PDO::PARAM_INT);
		$stmt->execute();

		if($tipo_retorno == 0) {
			return $stmt->fetch();
		} else {
			return $stmt->fetchAll();
		}

	}

	public function informacionBodegaPuertas($bodegaId) {		
		$stmt = $this->conn->prepare("{CALL agenda.SP_bodega_puerta_informacion (?)}");
		$stmt->bindValue(1, $bodegaId, PDO::PARAM_INT);
		$stmt->execute();
	
		return $stmt->fetchAll();		

	}

	public function informacionBloques($fecha)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_bloque_informacion (?)}");
		$stmt->bindValue(1, $fecha, PDO::PARAM_STR);
		$stmt->execute();
	
		return $stmt->fetchAll();		

	}

	public function informacionReservaResumen($reseId, $tipo_retorno)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_resumen_informacion (?)}");
		$stmt->bindValue(1, $reseId, PDO::PARAM_INT);
		$stmt->execute();

		if($tipo_retorno == 0) {
			return $stmt->fetch();
		} else {
			return $stmt->fetchAll();
		}

	}

	public function informacionReservaProveedorCliente($idPers, $rut) {  
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_para_cliente_rut_informacion (?, ?)}");
		$stmt->bindValue(1, $idPers, PDO::PARAM_INT);
		$stmt->bindValue(2, $rut, PDO::PARAM_STR);
		$stmt->execute();
		
		return $stmt->fetch();	  
	}

	public function informacionReservaPersonaEntrega($rut) {  
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_encargado_entrega_rut_informacion (?)}");		
		$stmt->bindValue(1, $rut, PDO::PARAM_STR);
		$stmt->execute();
		
		return $stmt->fetch();	  
	}

	public function ingresarReserva($idPers, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel,
										$perEntrId, $entregaRut, $entregaNombre, $estado, $usuId, $observacion, $resFecha, 
										$idBloque, $idPuerta, $idResePrincipal  ) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_ingresa (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
		$stmt->execute(array($idPers, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel, $perEntrId, $entregaRut, 
								$entregaNombre, $estado, $usuId, $observacion, $resFecha, $idBloque, $idPuerta, $idResePrincipal ));

		return $stmt->fetch();	
	}
	
	public function modificarReserva($idRese, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel,
										$perEntrId, $entregaRut, $entregaNombre, $estado, $usuId, $observacion, $resFecha, 
										$idBloque, $idPuerta, $cantBloqSeleccionados  ) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_modifica (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
		$stmt->execute(array($idRese, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel, $perEntrId, $entregaRut, 
								$entregaNombre, $estado, $usuId, $observacion, $resFecha, $idBloque, $idPuerta, $cantBloqSeleccionados ));
 		return $stmt->fetch();	
	}

	public function modificarReservaDatosGenerales($idRese, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel,
										$perEntrId, $entregaRut, $entregaNombre, $estado, $usuId, $observacion) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_modifica_datos_generales_con_trazabilidad (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
		$stmt->execute(array($idRese, $idPerCliente, $idTipoOrden, $numero, $cantPallet, $cantGranel,
									$perEntrId, $entregaRut, $entregaNombre, $estado, $usuId, $observacion ));
 		return $stmt->fetch();	
	}

	public function rechazarReserva($idRese, $motivo, $idUsr) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_rechazar (?, ?, ?)}");
		$stmt->execute(array($idRese, $motivo, $idUsr));

        return $stmt->fetch();	
    }

	public function anularReserva($idRese, $motivo, $idUsr) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_anular (?, ?, ?)}");
		$stmt->execute(array($idRese, $motivo, $idUsr));

        return $stmt->fetch();	
    }
	
	public function cerrarReserva($idRese, $motivo, $idUsr, $opciones) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_cerrar (?, ?, ?, ?)}");
		$stmt->execute(array($idRese, $motivo, $idUsr, $opciones));

        return $stmt->fetch();	
    }
	
	public function confirmarReserva($idRese, $motivo, $idUsr) 
	{
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_adm_confirmar (?, ?, ?)}");
		$stmt->execute(array($idRese, $motivo, $idUsr));

        return $stmt->fetch();	
    }


	public function informacionReserva($reseId, $estado, $tipo_retorno)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_informacion (?, ?)}");
		$stmt->bindValue(1, $reseId, PDO::PARAM_INT);
		$stmt->bindValue(2, $estado, PDO::PARAM_INT);
		$stmt->execute();

		if($tipo_retorno == 0) {
			return $stmt->fetch();
		} else {
			return $stmt->fetchAll();
		}

	}

	public function informacionReservaPorUsuario($usuaId, $estado, $tipo_retorno)
	{
		
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_por_usuario_informacion (?, ?)}");
		$stmt->bindValue(1, $usuaId, PDO::PARAM_INT);
		$stmt->bindValue(2, $estado, PDO::PARAM_INT);
		$stmt->execute();

		if($tipo_retorno == 0) {
			return $stmt->fetch();
		} else {
			return $stmt->fetchAll();
		}

	}

	public function informacionReservaLimit($persId, $cliente, $proveedor, $tipoOrden, $numero, $bodega, $puerta, $estado, $fecInicio, $fecFin, $inicio, $cantidad)
	{
  
		$stmt = $this->conn->prepare("{CALL agenda.SP_reserva_informacion_limit (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
		$stmt->bindValue(1, $persId, PDO::PARAM_INT);
		$stmt->bindValue(2, $cliente, PDO::PARAM_BOOL);
		$stmt->bindValue(3, $proveedor, PDO::PARAM_BOOL);
		$stmt->bindValue(4, $tipoOrden, PDO::PARAM_INT);
		$stmt->bindValue(5, $numero, PDO::PARAM_STR);
		$stmt->bindValue(6, $bodega, PDO::PARAM_INT);
		$stmt->bindValue(7, $puerta, PDO::PARAM_INT);
		$stmt->bindValue(8, $estado, PDO::PARAM_INT);
		$stmt->bindValue(9, $fecInicio, PDO::PARAM_STR);
		$stmt->bindValue(10, $fecFin, PDO::PARAM_STR);
		$stmt->bindValue(11, $inicio, PDO::PARAM_INT);
		$stmt->bindValue(12, $cantidad, PDO::PARAM_INT);
		$stmt->execute();
		
		return $stmt->fetchAll();
		  
	  }

    

    function Close() {
        
        $this->conn = null;
        
    }
}
?>