Exemplo n.º 1
0
 public TradeComponentEntity(Guid tradeID, TradingParty party, MasterGameYearWithCounterPick masterGame)
 {
     TradeID      = tradeID;
     CurrentParty = party.Value;
     MasterGameID = masterGame.MasterGameYear.MasterGame.MasterGameID;
     CounterPick  = masterGame.CounterPick;
 }
    public static int?GetTradeSlotResult(Publisher publisher, LeagueOptions leagueOptions, MasterGameYearWithCounterPick masterGameYearWithCounterPick, MasterGameWithEligibilityFactors eligibilityFactors, IEnumerable <int> openSlotNumbers)
    {
        var slots     = publisher.GetPublisherSlots(leagueOptions);
        var openSlots = slots.Where(x => x.CounterPick == masterGameYearWithCounterPick.CounterPick && openSlotNumbers.Contains(x.SlotNumber)).OrderBy(x => x.SlotNumber).ToList();

        if (!openSlots.Any())
        {
            return(null);
        }

        //At this point, there is an open slot. Which one is best?
        //We want to check the special slots first, then the regular slots.
        var openSpotsToCheckOrder = openSlots
                                    .OrderByDescending(x => x.SpecialGameSlot is not null)
                                    .ThenBy(x => x.SlotNumber).ToList();

        foreach (var openSlot in openSpotsToCheckOrder)
        {
            var claimErrorsForSlot = GetClaimErrorsForSlot(openSlot, eligibilityFactors);
            if (!claimErrorsForSlot.Any())
            {
                return(openSlot.SlotNumber);
            }
        }

        //This game isn't eligible in any slots, so we will just take the first open one.
        var bestSlot = openSlots.First();

        return(bestSlot.SlotNumber);
    }