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; } } }
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; }
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 ¤tStock = _goodStockList[reservedStock._goodType]; currentStock._currentQty += amount; stock._currentQty -= amount; }