private static void CreateSkeleton(Worksheet worksheet, DataTable dataTable)
        {
            var classRoomNumbers = new HashSet <string>();

            foreach (DataRow row in dataTable.Rows)
            {
                var number = row[2].ToString();
                if (!classRoomNumbers.Contains(number))
                {
                    classRoomNumbers.Add(number);
                }
            }

            var len = classRoomNumbers.Count;

            for (int i = 0; i < 7; i++)
            {
                var start = 4 + i * len;
                worksheet.Range[worksheet.Cells[start, 1], worksheet.Cells[start + len - 1, 1]].Merge();
                worksheet.Cells[start, 1] = i + 1;
                worksheet.Range[worksheet.Cells[start, 2], worksheet.Cells[start + len - 1, 2]].Merge();
                worksheet.Cells[start, 2] = LessonTimeDto.GetPeriodFromNumber(i + 1);
            }

            ClassRooms = classRoomNumbers.ToList();
        }
        private static void FillTable(DataTable dataTable, Worksheet worksheet)
        {
            List <TeacherWeeksWithCellIndex> teachersData = new List <TeacherWeeksWithCellIndex>();

            var currentTime = -1;

            foreach (DataRow row in dataTable.Rows)
            {
                var dayName          = row[0].ToString();
                var lessonTimeNumber = LessonTimeDto.GetNumberFromPeriod(row[1].ToString());
                var classroom        = row[2].ToString();
                var cellIndex        = GetIndexByDayLessonClassroom(dayName, lessonTimeNumber, classroom);

                if (currentTime != lessonTimeNumber)
                {
                    teachersData.Clear(); //we dont give a f**k if teacher has same classes on different lesson times
                    currentTime = lessonTimeNumber;
                }

                var teacherName = string.Format("{0} {1}", row[3], row[4]);
                var weeks       = row[5].ToString();

                AddCellInfo(worksheet, cellIndex, teacherName, weeks);

                TeacherWeeksWithCellIndex currentTeacherData = new TeacherWeeksWithCellIndex
                {
                    CellIndex   = cellIndex,
                    TeacherName = teacherName,
                    Weeks       = Utils.Utils.ParseWeeks(weeks),
                    DayName     = dayName
                };

                foreach (var teacherData in teachersData)
                {
                    //teacher has more than one lesson in same time
                    if (teacherData.TeacherName == currentTeacherData.TeacherName &&
                        teacherData.DayName == currentTeacherData.DayName &&
                        teacherData.Weeks.Intersect(currentTeacherData.Weeks).Any())
                    {
                        GenericExcelExport.SetCellBackground(worksheet, teacherData.CellIndex,
                                                             new CellIndex {
                            x = teacherData.CellIndex.x, y = teacherData.CellIndex.y + 1
                        }, XlRgbColor.rgbIndianRed);
                        GenericExcelExport.SetCellBackground(worksheet, currentTeacherData.CellIndex,
                                                             new CellIndex {
                            x = currentTeacherData.CellIndex.x, y = currentTeacherData.CellIndex.y + 1
                        }, XlRgbColor.rgbIndianRed);
                    }
                }

                teachersData.Add(currentTeacherData);
            }
        }
Example #3
0
        private static void FillScheduleRecords()
        {
            var    currentDay    = string.Empty;
            var    currentTime   = string.Empty;
            DayDto currentDayDto = null;

            for (int i = 9; i < _rows.Length; i++)
            {
                var nextDay = _rows[i][0].Value.ToString();


                var nextTime = _rows[i][1].Value.ToString();

                if (!string.IsNullOrEmpty(nextDay))
                {
                    currentDay    = nextDay;
                    currentDayDto = new DayDto {
                        DayNumber = DayDto.GetNumberByName(currentDay), DayName = currentDay
                    };
                }
                else if (LessonTimeDto.GetNumberFromPeriod(nextTime) == 1)
                {
                    var curDayIndex = DayDto.GetNumberByName(currentDay);
                    currentDay    = DayDto.DayNameByNumber[curDayIndex + 1];
                    currentDayDto = new DayDto {
                        DayNumber = curDayIndex + 1, DayName = currentDay
                    };
                }

                if (!string.IsNullOrEmpty(nextTime))
                {
                    currentTime = nextTime;
                }

                if (currentDay != "" && currentTime != "")
                {
                    AppendNewScheduleRecord(currentDayDto, currentTime, _rows[i]);
                }
            }
        }
Example #4
0
        private static void FillData(Worksheet worksheet, DataTable dataTable)
        {
            var    currentDayName          = string.Empty;
            int    currentLessonTimeNumber = -1;
            string currentLessonTime       = string.Empty;
            var    currentDayTimeCell      = new CellIndex(4, 1);


            string currentClassRoom     = string.Empty;
            var    currentClassRoomCell = new CellIndex(4, 2);


            string currerntTeacher    = string.Empty;
            var    currentTeacherCell = new CellIndex(4, 3);

            foreach (DataRow dataRow in dataTable.Rows)
            {
                var dayTimeWasChanged = false;
                var dayName           = dataRow[1].ToString();
                var lessonTimeNumber  = int.Parse(dataRow[2].ToString());

                if (string.IsNullOrEmpty(currentDayName) || currentDayName != dayName)
                {
                    dayTimeWasChanged = true;
                    currentDayName    = dayName;
                }

                if (currentLessonTimeNumber != lessonTimeNumber)
                {
                    dayTimeWasChanged       = true;
                    currentLessonTimeNumber = lessonTimeNumber;
                    currentLessonTime       = LessonTimeDto.GetPeriodFromNumber(lessonTimeNumber);
                }

                if (dayTimeWasChanged)
                {
                    worksheet.Range[worksheet.Cells[currentDayTimeCell.x, currentDayTimeCell.y],
                                    worksheet.Cells[currentDayTimeCell.x, lastWeekYIndex - 1]].Cells.Borders[XlBordersIndex.xlEdgeBottom].Weight = 2d;

                    worksheet.Cells[currentDayTimeCell.x, currentDayTimeCell.y] = currentDayName + "\n" + currentLessonTime;
                    currentDayTimeCell.x++;
                }


                var classRoom = dataRow[3].ToString();

                if (currentClassRoom != classRoom || dayTimeWasChanged)
                {
                    worksheet.Range[worksheet.Cells[currentClassRoomCell.x, currentClassRoomCell.y],
                                    worksheet.Cells[currentClassRoomCell.x, lastWeekYIndex - 1]].Cells.Borders[XlBordersIndex.xlEdgeBottom].Weight = 2d;

                    if (currentClassRoomCell.x % 2 == 0)
                    {
                        worksheet.Range[worksheet.Cells[currentClassRoomCell.x, currentClassRoomCell.y],
                                        worksheet.Cells[currentClassRoomCell.x, lastWeekYIndex - 1]]
                        .Interior.Color = XlRgbColor.rgbLightGray;
                    }



                    currentClassRoom = classRoom;
                    worksheet.Cells[currentClassRoomCell.x, currentClassRoomCell.y] = currentClassRoom;
                    currentClassRoomCell.x++;

                    // if dayTime Cell was not changed we need to merge cells
                    if (!dayTimeWasChanged)
                    {
                        var previousXCoord = currentDayTimeCell.x - 1;
                        worksheet.Range[worksheet.Cells[previousXCoord, currentDayTimeCell.y],
                                        worksheet.Cells[currentDayTimeCell.x++, currentDayTimeCell.y]].Merge();
                    }
                }

                var teacher = dataRow[4].ToString() + " " + dataRow[5].ToString();


                if (currerntTeacher != teacher || dayTimeWasChanged)
                {
                    currerntTeacher = teacher;
                    worksheet.Cells[currentTeacherCell.x, currentTeacherCell.y] = currerntTeacher;
                    lastXIndex = currentTeacherCell.x;
                    currentTeacherCell.x++;
                }

                var weekNumber = dataRow[0].ToString();
                var weekXCoord = currentTeacherCell.x - 1;
                var weekYCoord = WeekNumberCellIndex[weekNumber].y;

                worksheet.Cells[weekXCoord, weekYCoord] = dataRow[6].ToString() + " " + dataRow[7].ToString();

                // Console.WriteLine($"{dataRow[0]}, {dataRow[1]}, {dataRow[2]}, {dataRow[3]}, {dataRow[4]}, {dataRow[5]}, {dataRow[6]}");

                dayTimeWasChanged = false;
            }
        }
Example #5
0
        private static void AppendNewScheduleRecord(DayDto dayDto, string time, Row row)
        {
            try
            {
                string       subject   = row[2].Value.ToString();
                TeacherDto   teacher   = GetTeacherData(row[3].Value.ToString());
                ClassRoomDto classRoom = new ClassRoomDto {
                    Number = row[6].Value.ToString().Replace(" ", String.Empty)
                };

                var weeksString = row[5].Value.ToString();

                if (string.IsNullOrEmpty(teacher.LastName))
                {
                    teacher.LastName = "Вакансія"; // in case of null
                }


                var groupStr = row[4].Value.ToString(); //either number or 'lecture'

                if (string.IsNullOrEmpty(subject) || subject.Length <= 2)
                {
                    return;
                }

                if (string.IsNullOrEmpty(classRoom.Number) ||
                    string.IsNullOrEmpty(weeksString) || string.IsNullOrEmpty(groupStr))
                {
                    throw new InvalidInputException("Некоректні дані: " + dayDto.DayName + ", " + time + " у файлі " + _currentFilePath);
                }

                LessonTimeDto lessonTime = new LessonTimeDto {
                    Number = LessonTimeDto.GetNumberFromPeriod(time)
                };
                string group = string.Empty;

                if (groupStr.Any(char.IsDigit))
                {
                    group = groupStr.Replace(" ", "");
                }
                else
                {
                    group = string.Empty;
                }

                LessonTypeDto lessonType = new LessonTypeDto();
                lessonType.Id = LessonTypeDto.GetIdByType(group == string.Empty ? LessonType.Лекція : LessonType.Практика);

                ScheduleRecordDto scheduleRecord = new ScheduleRecordDto
                {
                    YearOfStudying = _yearOfStudying,
                    LessonTime     = lessonTime,
                    Subject        = subject,
                    LessonType     = lessonType,
                    Group          = group,
                    Day            = dayDto,
                    Specialty      = _specialty,
                    ClassRoom      = classRoom,
                    Teacher        = teacher,
                    Weeks          = weeksString
                };

                var weeksStr  = row[5].Value.ToString().Replace(".", ","); //replace 6.9 to 6,9
                var weeksList = Utils.Utils.ParseWeeks(weeksStr);

                _weekScheduleRecords.Add(scheduleRecord, new List <int>());
                foreach (var weekNumber in weeksList)
                {
                    _weekScheduleRecords[scheduleRecord].Add(weekNumber);
                }
            }
            catch (InvalidInputException e)
            {
                Logger.LogException(e);
                throw e;
            }
            catch (Exception e)
            {
                Logger.LogException(e);
            }
        }