public static function DescontarDeAlmacenes(VentaProducto $detalle_producto, $id_sucursal)
 {
     Logger::log(" ===== Descontando de almacenes ====== ");
     //Validemos la sucursal
     $sucursal = SucursalDAO::GetByPK($id_sucursal);
     Logger::log("sucursal=" . $id_sucursal);
     if (is_null($sucursal)) {
         throw new InvalidDataException("Esta sucursal no existe");
     }
     if (!$sucursal->getActiva()) {
         throw new BusinessLogicException("No se pueden descontar de una sucursal inactiva");
     }
     //buscar sus lotes y buscar que exista el proudcto en esos lotes
     $almacenes = AlmacenDAO::search(new Almacen(array("id_sucursal" => $id_sucursal)));
     if (sizeof($almacenes) == 0) {
         throw new InvalidDataException("Esta scursal no tiene almacenes");
     }
     $existencias = ProductoDAO::buscarProductoEnSucursal($detalle_producto->getIdProducto(), $id_sucursal);
     $total_existencias = 0;
     $a_descontar = array();
     $necesito = $detalle_producto->getCantidad();
     Logger::log("Necesito " . $necesito . " del producto pid=" . $detalle_producto->getIdProducto());
     foreach ($existencias as $e) {
         Logger::log("En el lote idlote=" . $e["id_lote"] . " tengo c=" . $e["cantidad"]);
         $total_existencias += $e["cantidad"];
         if ($necesito - $e["cantidad"] < 0) {
             //me basta con el producto
             //en este lote
             Logger::log("con este me basta...");
             array_push($a_descontar, array("id_lote" => $e["id_lote"], "cantidad" => $necesito));
             $necesito = 0;
         } else {
             Logger::log("no me basta, necesito mas...");
             array_push($a_descontar, array("id_lote" => $e["id_lote"], "cantidad" => $e["cantidad"]));
             $necesito -= $e["cantidad"];
         }
     }
     if ($total_existencias < $detalle_producto->getCantidad()) {
         $_p = ProductoDAO::getByPK($detalle_producto->getIdProducto());
         throw new BusinessLogicException("No hay suficientes existencias  del producto " . $_p->getCodigoProducto() . " en los almacenes de esta sucursal.");
     }
     for ($i = 0; $i < sizeof($a_descontar); $i++) {
         Logger::log("Descontando " . $a_descontar[$i]["cantidad"] . " de lote  id_lote=" . $a_descontar[$i]["id_lote"]);
         AlmacenesController::SalidaLote($a_descontar[$i]["id_lote"], array(array("id_producto" => $detalle_producto->getIdProducto(), "cantidad" => $a_descontar[$i]["cantidad"], "id_unidad" => $detalle_producto->getIdUnidad())), "venta");
     }
     //while($cantidad > 0){
     //AlmacenController::SalidaLote( /* id_lote */, /* productos */, /* motivo */ "venta" );
     //}
     Logger::log(" ===== Descontando de almacenes [OK] ====== ");
 }