public RequestGroup CreatePartialRequestGroup(IEnumerable <Request> declinedRequests, IEnumerable <Ranking> rankings, DateTimeOffset?newRequestExpiry, DateTimeOffset newRequestCreationTime, bool isTerminalRequest = false) { var brokersWithRequestGroups = RequestGroups.Select(r => r.Ranking.BrokerId); var ranking = rankings.Where(r => !brokersWithRequestGroups.Contains(r.BrokerId)).OrderBy(r => r.Rank).FirstOrDefault(); var orders = declinedRequests.GetRequestOrders(); if (ranking == null) { // Rejected by all brokers, close all orders SetStatus(OrderStatus.NoBrokerAcceptedOrder, false); orders.ToList().ForEach(o => o.Status = OrderStatus.NoBrokerAcceptedOrder); return(null); } var requestGroup = new RequestGroup( ranking, newRequestExpiry, newRequestCreationTime, orders.Select(o => o.CreateRequest(ranking, newRequestExpiry, newRequestCreationTime, isTerminalRequest)).ToList(), isTerminalRequest ); RequestGroups.Add(requestGroup); return(requestGroup); }
private RequestGroup CreateQuarantinedRequestGroup(Ranking ranking, DateTimeOffset creationTime, Quarantine quarantine) { var requestGroup = new RequestGroup(ranking, creationTime, Orders.Select(o => o.CreateQuarantinedRequest(ranking, creationTime, quarantine)).ToList(), quarantine); RequestGroups.Add(requestGroup); return(requestGroup); }
public Request(Ranking ranking, DateTimeOffset?expiry, DateTimeOffset creationTime, bool isTerminalRequest = false, bool isChangeInterpreter = false, RequestGroup requestGroup = null) { if (!isChangeInterpreter && expiry.HasValue && expiry < creationTime) { throw new InvalidOperationException("The Request cannot have an expiry before the creation time."); } Ranking = ranking; Status = RequestStatus.Created; ExpiresAt = expiry; CreatedAt = creationTime; IsTerminalRequest = isTerminalRequest; RequestGroup = requestGroup; }
public RequestGroup CreateRequestGroup(IEnumerable <Ranking> rankings, DateTimeOffset?newRequestExpiry, DateTimeOffset newRequestCreationTime, bool isTerminalRequest = false) { var ranking = GetNextRanking(rankings, newRequestCreationTime); if (ranking == null) { // Rejected by all brokers, close all orders SetStatus(OrderStatus.NoBrokerAcceptedOrder); return(null); } var requestGroup = new RequestGroup( ranking, newRequestExpiry, newRequestCreationTime, Orders.Select(o => o.CreateRequest(ranking, newRequestExpiry, newRequestCreationTime, isTerminalRequest)).ToList(), isTerminalRequest ); RequestGroups.Add(requestGroup); return(requestGroup); }