/// <summary> /// Find the order in the provided table that matches the specified transaction. /// </summary> /// <param name="table"></param> /// <param name="trans"></param> /// <returns></returns> private static Order MatchOrder(EMMADataSet.OrdersDataTable table, Transaction trans) { Order retVal = null; decimal priceDiff = decimal.MaxValue; foreach (EMMADataSet.OrdersRow order in table) { if (retVal == null || order.Issued.CompareTo(retVal.Date) > 0) { if (order.Issued.CompareTo(trans.Datetime) <= 0) { bool inRange = false; if (order.Range == OrderRange.GetRangeFromText("Region")) { if (Stations.GetStation(order.StationID).regionID == Stations.GetStation(trans.StationID).regionID) { inRange = true; } } else if (order.Range == OrderRange.GetRangeFromText("Station")) { if (order.StationID == trans.StationID) { inRange = true; } } else if (order.Range == OrderRange.GetRangeFromText("Solar System")) { if (Stations.GetStation(order.StationID).solarSystemID == Stations.GetStation(trans.StationID).solarSystemID) { inRange = true; } } else { List<long> systemsInRange = SolarSystemDistances.GetSystemsInRange( order.StationID, (int)order.Range); if (systemsInRange.Contains(Stations.GetStation(trans.StationID).solarSystemID)) { inRange = true; } } if (inRange && Math.Abs(order.Price - trans.Price) < priceDiff) { retVal = new Order(order); priceDiff = Math.Abs(order.Price - trans.Price); } } } } return retVal; }
public static OrdersList LoadOrders(List<AssetAccessParams> accessParams, List<int> itemIDs, List<long> stationIDs, int state, string type) { OrdersList retVal = new OrdersList(); EMMADataSet.OrdersDataTable table = LoadOrdersData(accessParams, itemIDs, stationIDs, state, type); foreach (EMMADataSet.OrdersRow row in table) { Order order = new Order(row, accessParams); retVal.Add(order); } return retVal; }
public static void Store(Order orderData) { EMMADataSet.OrdersDataTable table = new EMMADataSet.OrdersDataTable(); EMMADataSet.OrdersRow orderRow = null; bool newRow = false; lock (tableAdapter) { tableAdapter.FillByID(table, orderData.ID); } if (table.Count == 0) { orderRow = table.NewOrdersRow(); newRow = true; } else { orderRow = table[0]; } bool corp = false; APICharacter charData = UserAccount.CurrentGroup.GetCharacter(orderData.OwnerID, ref corp); //orderRow.OwnerID = charData.CharID; orderRow.OwnerID = orderData.OwnerID; orderRow.ForCorp = corp; orderRow.StationID = orderData.StationID; orderRow.TotalVol = orderData.TotalVol; orderRow.RemainingVol = orderData.RemainingVol; orderRow.MinVolume = orderData.MinVol; orderRow.OrderState = orderData.StateID; orderRow.ItemID = orderData.ItemID; orderRow.Range = orderData.Range; orderRow.WalletID = orderData.WalletID; orderRow.Duration = orderData.Duration; orderRow.Escrow = orderData.Escrow; orderRow.Price = orderData.Price; orderRow.BuyOrder = orderData.BuyOrder; orderRow.Issued = orderData.Date; orderRow.EveOrderID = orderData.EveOrderID; orderRow.Processed = false; if (newRow) { table.AddOrdersRow(orderRow); } lock (tableAdapter) { tableAdapter.Update(table); } }
/// <summary> /// Get the order used for the specified transaction. /// Note that many transactions will not have orders related to them. In this case /// the return value will be false and the two out parameters will be null. /// </summary> /// <param name="trans"></param> /// <returns></returns> public static bool GetOrder(Transaction trans, out Order buyOrder, out Order sellOrder) { bool retVal = false; bool buyerForCorp = false, sellerForCorp = false; long buyerID =0, sellerID = 0; buyOrder = null; sellOrder = null; buyerID = trans.BuyerID; sellerID = trans.SellerID; APICharacter buyChar = UserAccount.CurrentGroup.GetCharacter(buyerID, ref buyerForCorp); APICharacter sellChar = UserAccount.CurrentGroup.GetCharacter(sellerID, ref sellerForCorp); EMMADataSet.OrdersDataTable table = new EMMADataSet.OrdersDataTable(); if (buyChar != null) { if (buyerID == _lastBuyerID && trans.ItemID == _lastItemID) { table = _lastBuyerOrders; } else { lock (tableAdapter) { tableAdapter.FillByAnySingle(table, trans.BuyerID, 0, trans.ItemID, 0, 0, "Any"); _lastBuyerID = buyerID; _lastItemID = trans.ItemID; _lastBuyerOrders = table; } } buyOrder = MatchOrder(table, trans); } if (sellChar != null) { table.Clear(); if (sellerID == _lastSellerID && trans.ItemID == _lastItemID) { table = _lastSellerOrders; } else { lock (tableAdapter) { tableAdapter.FillByAnySingle(table, sellerID, 0, trans.ItemID, 0, 0, "Any"); _lastSellerID = sellerID; _lastItemID = trans.ItemID; _lastSellerOrders = table; } } sellOrder = MatchOrder(table, trans); } retVal = buyOrder != null || sellOrder != null; return retVal; }