Example #1
0
        public async Task <SeatingArrangements> GetFinalSeatingArrangement(string date, string session)
        {
            var roomnumbers = await _context.Rooms
                              .Join(_context.RoomExams, x => x.Id, y => y.RoomId, (x, y) => new { x.Id, x.RoomNumber, y.ExamId })
                              .Join(_context.Exams, x => x.ExamId, y => y.Id, (x, y) => new { x.RoomNumber, x.Id, y.Date, y.Session })
                              .Where(x => x.Date == date && x.Session == session).Select(x => x.RoomNumber).Distinct()
                              .ToListAsync();

            List <SeatingArrangementFinalDto> FinalHallAllocationReport = new List <SeatingArrangementFinalDto>();

            foreach (var roomnumber in roomnumbers)
            {
                Console.WriteLine($"RoomNumber : {roomnumber}");

                Dictionary <string, string> SeatandRegNumberPair = new Dictionary <string, string>();

                using (var command = _context.Database.GetDbConnection().CreateCommand())
                {
                    command.CommandText = $@"select RegisterNumber,SeatNumber from seatings
                                                right join seatingrooms on seatings.Id = seatingrooms.SeatingId
                                                left join rooms r on seatingrooms.RoomId = r.Id AND RoomNumber='{roomnumber}'
                                                left join roomexams r2 on r.Id = r2.RoomId
                                                left join exams e on r2.ExamId = e.Id AND e.Date='{date}' AND Session='{session}'
                                            WHERE RoomNumber='{roomnumber}' and e.Date='{date}' and e.Session='{session}'GROUP BY SeatNumber;";

                    command.CommandType = CommandType.Text;

                    await _context.Database.OpenConnectionAsync();

                    using (var result = await command.ExecuteReaderAsync())
                    {
                        while (await result.ReadAsync())
                        {
                            var RegNumber  = result.GetString(0);
                            var SeatNumber = result.GetString(1);
                            SeatandRegNumberPair.Add(SeatNumber, RegNumber);
                        }
                    }
                }

                List <RoomConsolidatedReportDto> roomConsolidatedReport = new List <RoomConsolidatedReportDto>();

                using (var command = _context.Database.GetDbConnection().CreateCommand())
                {
                    command.CommandText = $@"select SubjectCode,ShortForm,RoomNumber,count(r2.ExamId) as Count from seatings
                                                join seatingexams s on seatings.Id = s.SeatingId
                                                join exams e on s.ExamId = e.Id
                                                join seatingrooms s2 on s.SeatingId = s2.SeatingId
                                                join rooms r on s2.RoomId = r.Id
                                                join roomexams r2 on s.ExamId = r2.ExamId and s2.RoomId=r2.RoomId
                                                join departments d2 on seatings.DepartmentId = d2.Id
                                                where e.Date='{date}' AND e.Session='{session}' AND RoomNumber='{roomnumber}'
                                            group by DepartmentId,SubjectCode,RoomNumber
                                            order by RoomNumber;";

                    command.CommandType = CommandType.Text;

                    await _context.Database.OpenConnectionAsync();

                    using (var result = await command.ExecuteReaderAsync())
                    {
                        while (await result.ReadAsync())
                        {
                            var SubjectCode = result.GetString(0);
                            var ShortForm   = result.GetString(1);
                            var RoomNumber  = result.GetString(2);
                            var Count       = result.GetInt32(3);
                            RoomConsolidatedReportDto roomConsolidatedReportDto = new RoomConsolidatedReportDto()
                            {
                                SubjectCode = SubjectCode,
                                ShortForm   = ShortForm,
                                Count       = Count
                            };

                            roomConsolidatedReport.Add(roomConsolidatedReportDto);

                            Console.WriteLine($"SubjectCode : {SubjectCode} Shortform :{ShortForm} RoomNumber :{RoomNumber} Count :{Count}");
                        }
                    }
                }

                SeatingArrangementFinalDto data = _mapper.seatingArrangementFinal(roomnumber, date, session, SeatandRegNumberPair, roomConsolidatedReport);
                Console.WriteLine(data.RoomNumber + "ds");

                FinalHallAllocationReport.Add(data);
            }

            var sem_month = await _context.Semester.FirstOrDefaultAsync(x => x.Date == date);

            SeatingArrangements seatingArrangements = new SeatingArrangements()
            {
                SemesterMonth      = sem_month.SemesterMonths,
                SeatingArrangement = FinalHallAllocationReport
            };

            return(seatingArrangements);
        }
        public void MinOverallAwkwardness_SameHeightButOne_AnyVsOne()
        {
            var heights = new[] { 1, 5, 5, 5, 5, 5 };

            SeatingArrangements.MinOverallAwkwardness(heights).Should().Be(4);
        }
        public void MinOverallAwkwardness_NaturalSequence_2()
        {
            var heights = Enumerable.Range(1, 10).ToArray();

            SeatingArrangements.MinOverallAwkwardness(heights).Should().Be(2);
        }
        public void MinOverallAwkwardness_SameHeight_0()
        {
            var heights = Enumerable.Repeat(1, 10).ToArray();

            SeatingArrangements.MinOverallAwkwardness(heights).Should().Be(0);
        }
        public void MinOverallAwkwardness_Sample_4()
        {
            var heights = new[] { 10, 5, 6, 8 };

            SeatingArrangements.MinOverallAwkwardness(heights).Should().Be(4);
        }