bool CanAddASubject(SubjectClass subjectClass)
 {
     foreach (var tmpSubjectClass in chosenSubjectClass)
     {
         if (tmpSubjectClass.IsIntersect(subjectClass))
         {
             return(false);
         }
     }
     return(true);
 }
        public bool IsIntersect(SubjectClass other)
        {
            var otherClassTimes = other.GetClassTimes();

            foreach (Range thisClassPeriod in times)
            {
                foreach (Range otherClassPeriod in otherClassTimes)
                {
                    if (thisClassPeriod.IsIntersect(otherClassPeriod))
                    {
                        return(true);
                    }
                }
            }
            return(false);
        }
        //private void OnLoadAllSubjects ()
        //{
        //    Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
        //    Console.WriteLine("Loading subject codes of Aquatic Institue");

        //    var databaseBook = excelApplication.Workbooks.Add("E:\\Subjects.xlsx");
        //    var sheet = databaseBook.Sheets[1];
        //    object[,] subjectCodes = sheet.Range("B1:B78").Value2;
        //    subjectCodeList = new List<string>();

        //    for (int i = subjectCodes.GetLowerBound(0); i <= subjectCodes.GetUpperBound(0); ++i)
        //    {
        //        subjectCodeList.Add(subjectCodes[i, subjectCodes.GetLowerBound(1)].ToString());
        //    }

        //    databaseBook.Close(false);
        //    excelApplication.Quit();
        //    System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApplication);
        //}

        private void OnLoadDatabase(String excelFileDirectory)
        {
            statusBar.Text = "Opening " + excelFileDirectory;
            var excelApplication = new Microsoft.Office.Interop.Excel.Application();
            var databaseBook     = excelApplication.Workbooks.Add(excelFileDirectory);

            excelApplication.Visible = false;

            // read from row id 3
            // read from column id 2
            // Subject code: AQ203 - Column 2
            // Subject sign: 01, 02 ... Column 3
            // Subject present day: Column 4
            // Subject class start period: Column 5
            // Subject class number of period: Column 6
            // Subject class present room: Column 7
            // Subject name:  Column 11

            var activeWorkSheet = databaseBook.Sheets[1];

            object[,] openSubjectClassData = activeWorkSheet.Range("A3", "L" + activeWorkSheet.UsedRange.Rows.Count.ToString()).Value2;
            databaseBook.Close(false);
            excelApplication.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApplication);

            database = new Dictionary <string, List <SubjectClass> >();

            statusBar.Text = "Converting format of " + excelFileDirectory;
            int    rowIndex    = openSubjectClassData.GetLowerBound(0);
            int    targetIndex = openSubjectClassData.GetUpperBound(0);
            string prevClassID = "";

            while (rowIndex <= targetIndex)
            {
                List <SubjectClass> subjectCode = null;
                object subjectCell = openSubjectClassData[rowIndex, 7];
                if (subjectCell == null)
                {
                    ++rowIndex;
                    continue;
                }

                database.TryGetValue(openSubjectClassData[rowIndex, 2].ToString(), out subjectCode);

                if (subjectCode == null)
                {
                    subjectCode = new List <SubjectClass>();
                    database.Add(openSubjectClassData[rowIndex, 2].ToString(), subjectCode);
                    prevClassID = "";
                }

                SubjectClass focusSubjectClass = null;
                string       classCode         = openSubjectClassData[rowIndex, 3].ToString();
                if (!prevClassID.Equals(classCode))
                {
                    prevClassID       = classCode;
                    focusSubjectClass = new SubjectClass(openSubjectClassData[rowIndex, 2].ToString(), openSubjectClassData[rowIndex, 11].ToString(),
                                                         openSubjectClassData[rowIndex, 3].ToString());
                    subjectCode.Add(focusSubjectClass);
                }
                else
                {
                    focusSubjectClass = subjectCode[subjectCode.Count - 1];
                }

                string debug = rowIndex.ToString() + " "
                               + openSubjectClassData[rowIndex, 4].ToString() + " "
                               + openSubjectClassData[rowIndex, 5].ToString() + " "
                               + openSubjectClassData[rowIndex, 6].ToString() + " "
                               + openSubjectClassData[rowIndex, 7].ToString();

                Console.Write(debug);
                try
                {
                    Range tmp;
                    focusSubjectClass.AddRange(tmp = new Range(
                                                   int.Parse(openSubjectClassData[rowIndex, 4].ToString()),
                                                   int.Parse(openSubjectClassData[rowIndex, 5].ToString()),
                                                   int.Parse(openSubjectClassData[rowIndex, 6].ToString()),
                                                   openSubjectClassData[rowIndex, 7].ToString()
                                                   ));
                    //Console.WriteLine(" " + tmp.startPivot.ToString () + " " + tmp.endPivot.ToString ());
                }
                catch (Exception exception)
                {
                    MessageBox.Show("Error: " + exception.ToString());
                }

                ++rowIndex;
            }

            statusBar.Text = "Imported " + excelFileDirectory;
        }