Ejemplo n.º 1
0
        // --- Seat --- //
        private static IEnumerable <ISeat> GetSeatByRule(IArrangeSeatRule organizationSeatingRule, IEnumerable <ISeat> targetAreaSeats, bool includeUnOpenSeat)
        {
            if (organizationSeatingRule.Methodology == ArrangeSeatMethodology.Sequence)
            {
                List <ISeat> targetAreaSeatsArray = targetAreaSeats.OrderBy(o => o.Index).ToList();
                int          seatAmount           = targetAreaSeatsArray.Count;
                int          currentIndex         = targetAreaSeatsArray.IndexOf(organizationSeatingRule.TargetSeat);
                for (int i = 0; i < seatAmount; i++)
                {
                    if (currentIndex >= seatAmount)
                    {
                        currentIndex = 0;
                    }
                    if (includeUnOpenSeat)
                    {
                        yield return(targetAreaSeatsArray[currentIndex]);
                    }
                    else if (targetAreaSeatsArray[currentIndex].IsOpen)
                    {
                        yield return(targetAreaSeatsArray[currentIndex]);
                    }
                    currentIndex++;
                }
            }
            else //if(organizationSeatingRule.Methodology == ArrangeSeatMethodology.Centralize)
            {
                var distance = targetAreaSeats.ToDictionary <ISeat, ISeat, double>
                                   (iss =>
                                   iss,
                                   iss => (iss.XCord - organizationSeatingRule.TargetSeat.XCord) * (iss.XCord - organizationSeatingRule.TargetSeat.XCord)
                                   + (iss.XCord - organizationSeatingRule.TargetSeat.YCord) * (iss.XCord - organizationSeatingRule.TargetSeat.YCord));

                foreach (var kvp in distance.OrderBy(dn => dn.Value))
                {
                    if (includeUnOpenSeat)
                    {
                        yield return(kvp.Key);
                    }
                    else if (kvp.Key.IsOpen)
                    {
                        yield return(kvp.Key);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        // --- Seat --- //
        private static IEnumerable<ISeat> GetSeatByRule(IArrangeSeatRule organizationSeatingRule, IEnumerable<ISeat> targetAreaSeats, bool includeUnOpenSeat)
        {
            if (organizationSeatingRule.Methodology == ArrangeSeatMethodology.Sequence)
            {
                List<ISeat> targetAreaSeatsArray = targetAreaSeats.OrderBy(o => o.Index).ToList();
                int seatAmount = targetAreaSeatsArray.Count;
                int currentIndex = targetAreaSeatsArray.IndexOf(organizationSeatingRule.TargetSeat);
                for (int i = 0; i < seatAmount; i++)
                {
                    if (currentIndex >= seatAmount)
                        currentIndex = 0;
                    if (includeUnOpenSeat)
                    {
                        yield return targetAreaSeatsArray[currentIndex];
                    }
                    else if (targetAreaSeatsArray[currentIndex].IsOpen)
                    {
                        yield return targetAreaSeatsArray[currentIndex];
                    }
                    currentIndex++;
                }
            }
            else //if(organizationSeatingRule.Methodology == ArrangeSeatMethodology.Centralize)
            {
                var distance = targetAreaSeats.ToDictionary<ISeat, ISeat, double>
                    (iss =>
                        iss,
                        iss => (iss.XCord - organizationSeatingRule.TargetSeat.XCord) * (iss.XCord - organizationSeatingRule.TargetSeat.XCord)
                            + (iss.XCord - organizationSeatingRule.TargetSeat.YCord) * (iss.XCord - organizationSeatingRule.TargetSeat.YCord));

                foreach (var kvp in distance.OrderBy(dn => dn.Value))
                {
                    if (includeUnOpenSeat)
                        yield return kvp.Key;
                    else if (kvp.Key.IsOpen)
                        yield return kvp.Key;
                }
            }
        }