assert (adv);
long i_num_bids = results[0].getLong("i_num_bids");
double i_current_price = results[0].getDouble("i_current_price");
TimestampType i_end_date = results[0].getTimestampAsTimestamp("i_end_date");
ItemStatus i_status = ItemStatus.WAITING_FOR_PURCHASE;
long ib_id = results[0].getLong("ib_id");
long ib_buyer_id = results[0].getLong("ib_buyer_id");
double u_balance = results[0].getDouble("u_balance");
// Make sure that the buyer has enough money to cover this charge
// We can add in a credit for the buyer's account
if (i_current_price > (buyer_credit + u_balance)) {
throw new VoltAbortException(String.format("Buyer does not have enough money in account to purchase item " +
"[maxBid=%.2f, balance=%.2f, credit=%.2f]",
i_current_price, u_balance, buyer_credit));
}
// Set item_purchase_id
long ip_id = -1; // FIXME ItemId.getUniqueElementId(item_id, 1);
// Insert a new purchase
// System.err.println(String.format("NewPurchase: ip_id=%d, ib_bid=%.2f, item_id=%d, seller_id=%d", ip_id, ib_bid, item_id, seller_id));
voltQueueSQL(insertPurchase, ip_id, ib_id, item_id, seller_id, currentTime);
// Update item status to close
voltQueueSQL(updateItem, currentTime, item_id, seller_id);
// And update this the USER_ITEM record to link it to the new ITEM_PURCHASE record
voltQueueSQL(updateUserItem, ip_id, ib_id, item_id, seller_id, ib_buyer_id, item_id, seller_id);
// Decrement the buyer's account and credit the seller's account
voltQueueSQL(updateUserBalance, -1*(i_current_price) + buyer_credit, ib_buyer_id);
voltQueueSQL(updateUserBalance, i_current_price, seller_id);
results = voltExecuteSQL();
assert(results.length > 0);
// Return ip_id, ip_ib_id, ip_ib_i_id, u_id, ip_ib_u_id
VoltTable ret = new VoltTable(RESULT_COLS);
ret.addRow(new Object[] {
// ITEM ID
item_id,
// SELLER ID
seller_id,
// NUM BIDS
i_num_bids,
// CURRENT PRICE
i_current_price,
// END DATE
i_end_date,
// STATUS
i_status.ordinal(),
// PURCHASE ID
ip_id,
// BID ID
ib_id,
// BUYER ID