Ejemplo n.º 1
0
void WarehouseStore::applyStorageReservation(GoodStock &stock, const long reservationID)
{
   GoodStock reservedStock = getStorageReservation(reservationID, true);

   if (stock._goodType != reservedStock._goodType)
   {
     _OC3_DEBUG_BREAK_IF( "GoodType does not match reservation" );
   }
   if (stock._currentQty < reservedStock._currentQty)
   {
     _OC3_DEBUG_BREAK_IF( "Quantity does not match reservation" );
   }


   int amount = reservedStock._currentQty;
   // std::cout << "WarehouseStore, store qty=" << amount << " resID=" << reservationID << std::endl;

   // first we look at the half filled subTiles
   for (std::vector<WarehouseTile>::iterator subTilesIt=_warehouse->_subTiles.begin(); subTilesIt!=_warehouse->_subTiles.end(); ++subTilesIt)
   {
      if (amount == 0)
      {
         break;
      }

      WarehouseTile &subTile = *subTilesIt;
      if (subTile._stock._goodType == stock._goodType && subTile._stock._currentQty < subTile._stock._maxQty)
      {
         int tileAmount = std::min(amount, subTile._stock._maxQty - subTile._stock._currentQty);
         // std::cout << "put in half filled" << std::endl;
         subTile._stock.addStock(stock, tileAmount);
         amount -= tileAmount;
      }
   }

   // then we look at the empty subTiles
   for (std::vector<WarehouseTile>::iterator subTilesIt=_warehouse->_subTiles.begin(); subTilesIt!=_warehouse->_subTiles.end(); ++subTilesIt)
   {
      if (amount == 0)
      {
         break;
      }

      WarehouseTile& subTile = *subTilesIt;
      if (subTile._stock._goodType == G_NONE)
      {
         int tileAmount = std::min(amount, subTile._stock._maxQty);
         // std::cout << "put in empty tile" << std::endl;
         subTile._stock.addStock(stock, tileAmount);
         amount -= tileAmount;
      }
   }
}
Ejemplo n.º 2
0
bool Storage::applyStorageReservation(good::Stock &stock, const int reservationID)
{
  good::Stock reservedStock = getStorageReservation(reservationID, true);

  if (stock.type() != reservedStock.type())
  {
    Logger::warning( "SimpleGoodStore:GoodType does not match reservation");
    return false;
  }

  if (stock.qty() < reservedStock.qty())
  {
    Logger::warning( "SimpleGoodStore:Quantity does not match reservation");
    return false;
  }

  int amount = reservedStock.qty();
  _gsd->stocks[ reservedStock.type() ]->push( amount );
  stock.pop( amount );
  return true;
}
Ejemplo n.º 3
0
void SimpleGoodStore::applyStorageReservation(GoodStock &stock, const long reservationID)
{
    GoodStock reservedStock = getStorageReservation(reservationID, true);

    if (stock._goodType != reservedStock._goodType)
    {
        _OC3_DEBUG_BREAK_IF( "SimpleGoodStore:GoodType does not match reservation");
        return;
    }

    if (stock._currentQty < reservedStock._currentQty)
    {
        _OC3_DEBUG_BREAK_IF( "SimpleGoodStore:Quantity does not match reservation");
        return;
    }


    int amount = reservedStock._currentQty;
    GoodStock &currentStock = _goodStockList[reservedStock._goodType];
    currentStock._currentQty += amount;
    stock._currentQty -= amount;
}