/**
  *
  *
  *	Lotes
  *
  **/
 public function testLotes()
 {
     //Buscar algun almacen
     $almacenes = AlmacenesController::Buscar(true);
     $almacenId = $almacenes["resultados"][0]->getIdAlmacen();
     //nuevo lote
     $nLote = AlmacenesController::NuevoLote($almacenId);
     $this->assertNotNull($l = LoteDAO::getByPK($nLote["id_lote"]));
     ProductoDAO::save($producto = new Producto(array("compra_en_mostrador" => false, "metodo_costeo" => "precio", "precio" => 123.123, "activo" => true, "codigo_producto" => time() . "tp", "nombre_producto" => time() . "np", "costo_estandar" => 12.3123)));
     //metele productos
     $r = AlmacenesController::EntradaLote($nLote["id_lote"], array(array("id_producto" => $producto->getIdProducto(), "cantidad" => 123)));
     //Vamos a validar estas tablas
     //LoteEntradaDAO::
     $this->assertNotNull(LoteEntradaDAO::getByPK($r["id_entrada_lote"]));
     //LoteProductoDAO::
     $this->assertNotNull(LoteProductoDAO::getByPK($nLote["id_lote"], $producto->getIdProducto()));
     //LoteEntradaProductoDAO::
     $this->assertNotNull(LoteEntradaProductoDAO::getByPK($r["id_entrada_lote"], $producto->getIdProducto(), 1));
     //sacar de ese lote, uno por uno hasta llegar a retirar todo
     for ($i = 0; $i < 123; $i++) {
         AlmacenesController::SalidaLote($nLote["id_lote"], array(array("id_producto" => $producto->getIdProducto(), "cantidad" => 1)));
     }
     //la siguiente vez que retire algo, debe de arrojar una exception
     try {
         AlmacenesController::SalidaLote($nLote["id_lote"], array(array("id_producto" => $producto->getIdProducto(), "cantidad" => 1)));
     } catch (InvalidDataException $ivde) {
     }
     $this->assertNotNull($ivde);
 }
 function updateProducto(Producto $p)
 {
     require_once '../conexion.php';
     require_once '../model.business/Producto.php';
     try {
         $conexion = new conexion();
         $conn = $conexion->conn();
         $idProducto = $p->getIdProducto();
         $nombreProducto = $p->getNombreProducto();
         $precioUnitario = $p->getPrecioUnitario();
         $stock = $p->getStock();
         $descripcion = $p->getDescripcion();
         $tipoProducto = $p->getTipoProducto();
         $marca = $p->getMarca();
         $estado = $p->getEstado();
         $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
         $sql = $conn->prepare("UPDATE productos p INNER JOIN tipoProductos t " . "ON p.idTipoProducto = t.idTipoProducto INNER JOIN marcas m " . "ON p.idMarca = m.idMarca " . "SET p.nombreProducto = :nombreProducto, " . "p.precioUnitario = :precioUnitario, " . "p.stock = :stock, p.descripcion = :descripcion, " . "p.idTipoProducto = :tipoProducto, " . "p.idMarca = :marca, p.estado = :estado " . "WHERE p.idProducto = :idProducto;");
         $sql->bindParam(':idProducto', $idProducto);
         $sql->bindParam(':nombreProducto', $nombreProducto);
         $sql->bindParam(':precioUnitario', $precioUnitario);
         $sql->bindParam(':stock', $stock);
         $sql->bindParam(':descripcion', $descripcion);
         $sql->bindParam(':tipoProducto', $tipoProducto);
         $sql->bindParam(':marca', $marca);
         $sql->bindParam(':estado', $estado);
         return $sql->execute();
     } catch (PDOException $exc) {
         echo $exc->getMessage();
     }
 }