예제 #1
0
        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            if (!allowUserInteraction) return;
            allowUserInteraction = false;
            try
            {
                List<SaveColorObjectModel> saveColorOfferedCourses;
                List<SaveColorObjectModel> saveColorOfferedCourseRows;

                saveColorOfferedCourses = new List<SaveColorObjectModel>();
                saveColorOfferedCourseRows = new List<SaveColorObjectModel>();

                offeredCourses.ForEach(oc =>
                {
                    saveColorOfferedCourses.Add(new SaveColorObjectModel { CorrespondingIdInSourceList = oc.CourseId, Color = oc.Color });
                });
                offeredCourseRows.ForEach(ocr =>
                {
                    saveColorOfferedCourseRows.Add(new SaveColorObjectModel { CorrespondingIdInSourceList = ocr.RowId, Color = ocr.Color });
                });

                FileServiceProvider.SerializeToXmlFile(DirectoryManager.ReductionStep2SavedStatus + DirectoryManager.SaveColorOfferedCourses, saveColorOfferedCourses);
                FileServiceProvider.SerializeToXmlFile(DirectoryManager.ReductionStep2SavedStatus + DirectoryManager.SaveColorOfferedCourseRows, saveColorOfferedCourseRows);

                Properties.Settings.Default.ReductionStep2MustBeLoad = true;
                Properties.Settings.Default.Save();
            }
            catch
            {

            }

            allowUserInteraction = true;
        }
예제 #2
0
        public static List <GoalVersionOfferedCoursesRow> Reduce(List <Course> courses, string goalVersionOfferedCoursesRowsFileName, Gender studGender)
        {
            List <GoalVersionOfferedCoursesRow> lst;

            FileServiceProvider.DeserializeFromXmlFile(goalVersionOfferedCoursesRowsFileName, out lst);
            return(Reduce(courses, lst, studGender));
        }
예제 #3
0
        public void DeserializeVertexData(string vertex_file)
        {
            List <GraphSerializationData> gds = FileServiceProvider.DeserializeDataFromFile(vertex_file);

            this.ClearArea();


            (this.DataContext as GraphViewModel).RecreateSerializedVertexData(gds);
        }
예제 #4
0
 private void btnNext_Click(object sender, RoutedEventArgs e)
 {
     try
     {
         CreditDeterminer creditDeterminer;
         FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, out creditDeterminer);
         LoadData(stateLevel2, ServiceProviderForWpfClientCurriculums.ValidateAndReturnListLevel2(creditDeterminer.Level1), Level2Button_Click, Visibility.Collapsed, Visibility.Visible);
     }
     catch { }
 }
예제 #5
0
        public void DeserializeConfigurationData(string cable_file)
        {
            List <GraphSerializationData> gds = FileServiceProvider.DeserializeDataFromFile(cable_file);

            foreach (GraphSerializationData x in gds)
            {
                CableConfiguration cc = x.Data as CableConfiguration;

                (mainWindow.ccView.DataContext as CreateConfigurationViewModel).AddCableConfiguration(cc);
            }
        }
예제 #6
0
        private void LoadData(string titleBar, Tuple <string, int>[] arr, RoutedEventHandler method, Visibility btnNextVisibility, Visibility btnPrevVisibility)
        {
            try
            {
                CreditDeterminer creditDeterminer = null;
                if (File.Exists(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName))
                {
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, out creditDeterminer);
                }
                else
                {
                    creditDeterminer = new CreditDeterminer
                    {
                        Level1 = CurriculumWpfClientMiddleware.DefaultLevel1Value,
                        Level2 = CurriculumWpfClientMiddleware.DefaultLevel2Value,
                    };
                    FileServiceProvider.SerializeToXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, creditDeterminer);
                }

                wrapPanelList.Children.Clear();
                txtblockTitleBar.Text = titleBar;

                for (int i = 0; i < arr.Length; i++)
                {
                    Badged badged = new Badged();
                    badged.Badge  = (i + 1).ToString();
                    badged.Margin = new Thickness(15);
                    badged.Name   = "bdg" + arr[i].Item2;

                    Button button = new Button();
                    button.Content = arr[i].Item1;
                    button.Name    = "btn" + arr[i].Item2;

                    if (creditDeterminer.Level1 == arr[i].Item2 || creditDeterminer.Level2 == arr[i].Item2)
                    {
                        button.SetResourceReference(Button.BackgroundProperty, "PrimaryHueMidBrush");
                    }
                    else
                    {
                        button.Background = Brushes.Transparent;
                    }


                    button.Click  += method;
                    badged.Content = button;

                    wrapPanelList.Children.Add(badged);
                }

                btnNext.Visibility = btnNextVisibility;
                btnPrev.Visibility = btnPrevVisibility;
            }
            catch { }
        }
예제 #7
0
        private async void btnRunAlgorithm_Click(object sender, RoutedEventArgs e)
        {

            btnRunAlgorithm.IsEnabled = false;
            if (!allowUserInteraction) return;
            allowUserInteraction = false;

            try
            {


                AnimateStatusObjectModel model = new AnimateStatusObjectModel();

                Infrastructures.Algorithm.MainAlgorithm mainAlgorithm = new Infrastructures.Algorithm.MainAlgorithm(maxCntSuggestion);

                Task.Run(() => { mainAlgorithm.Run(offeredCourses, mainCurriculum, minUnits, maxUnits, exampCollideChecking, Properties.Settings.Default.AlgorithmMaxProcessingTimeMS, model); });


                await AlgorithmAnimation.Animate(this, canvasAlgorithmMsg, Properties.Settings.Default.AlgorithmAnimationEffectStatus, model);

                Directory.EnumerateFiles(DirectoryManager.LastAlgorithmExeOutputs).ToList().ForEach(c =>
                {
                    File.Delete(c);
                });

                mainAlgorithm.ChoosedWeeklyProgram.Sort();
                for (int i = 0; i < mainAlgorithm.ChoosedWeeklyProgram.Count; i++)
                {
                    var p = mainAlgorithm.ChoosedWeeklyProgram[i];

                    OfferedWeeklyProgram newProgram = new OfferedWeeklyProgram();
                    newProgram.DataSource = new List<GoalVersionOfferedCoursesRow>();
                    int units = 0;
                    DfsTopologicalSortAlgorithm.DfsTopologicalSort(p.WeeklyProgram.Columns).ForEach(c =>
                    {
                        newProgram.DataSource.Add(c.GoalVersionOfferedCourseRow);
                        units += c.OfferedCourse.Course.Units;
                    });
                    newProgram.Description = "";
                    newProgram.NumberOfUnits = units;
                    newProgram.UserScore = 0;
                    newProgram.TermNumber = termNumber;
                    newProgram.Score = p.WeeklyProgramScore;

                    string name = Guid.NewGuid().ToString();
                    FileServiceProvider.SerializeToXmlFile(DirectoryManager.LastAlgorithmExeOutputs + name + ".xml", newProgram);
                    Thread.Sleep(10);
                }
            }
            catch { }

            allowUserInteraction = true;
            btnRunAlgorithm.IsEnabled = true;
        }
예제 #8
0
        public static List <Course> Reduce(string creditDeterminerFileName, string courseInfoLstFileName, int currentTermNumber)
        {
            CreditDeterminer creditDeterminer;

            FileServiceProvider.DeserializeFromXmlFile(creditDeterminerFileName, out creditDeterminer);

            List <CourseInformation> courseInfoLst;

            FileServiceProvider.DeserializeFromXmlFile(courseInfoLstFileName, out courseInfoLst);

            return(Reduce(creditDeterminer, courseInfoLst, currentTermNumber));
        }
예제 #9
0
        private async void btnOk_Click(object sender, RoutedEventArgs e)
        {
            btnOk.IsEnabled = false;
            await Task.Run(() => {
                CourseInformation[] cfs;
                try
                {
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, out cfs);

                    for (int i = 0; i < collection.Count; i++)
                    {
                        var c = cfs[collection[i].Id];
                        if (collection[i].StatusColor == WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.WHITE)
                        {
                            c.IsPassed       = false;
                            c.NumberOfFailed = 0;
                        }
                        else if (collection[i].StatusColor == WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.GREEN)
                        {
                            c.IsPassed = true;
                        }
                        else if (collection[i].StatusColor == WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.YELLOW)
                        {
                            c.IsPassed       = false;
                            c.NumberOfFailed = 2;
                        }
                        else
                        {
                            throw new Exception();
                        }
                    }

                    FileServiceProvider.SerializeToXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, cfs);

                    Properties.Settings.Default.ReductionStep2MustBeLoad = false;
                    Properties.Settings.Default.Save();

                    Dispatcher.Invoke(() => {
                        MessageBox.Show("تغییرات با موفقیت اعمال شد");
                    });
                }
                catch
                {
                    Dispatcher.Invoke(() => {
                        MessageBox.Show("عدم موفقیت");
                    });
                }
            });

            btnOk.IsEnabled = true;
        }
예제 #10
0
        public void SerializeConfigurationData(System.Windows.Forms.SaveFileDialog result)
        {
            List <GraphSerializationData> graphSerializationData = new List <GraphSerializationData>();

            foreach (CableConfiguration cc in mainWindow.GlobalCableConfiguration.Values)
            {
                GraphSerializationData gsd = new GraphSerializationData()
                {
                    Data = cc
                };
                graphSerializationData.Add(gsd);
            }

            FileServiceProvider.SerializeDataToFile(result.FileName + "_cable_config", graphSerializationData);
        }
예제 #11
0
        public void DeserializeEdgeData(string edge_file)
        {
            List <GraphSerializationData> gds = FileServiceProvider.DeserializeDataFromFile(edge_file);

            foreach (GraphSerializationData x in gds)
            {
                DataVertex source = (x.Data as DataEdge).Source;
                DataVertex target = (x.Data as DataEdge).Target;

                VertexControl vc = getVertexControlWithDataVertex(source.Element_id);

                (this.DataContext as GraphViewModel).RecreateSerializedEdgeData(source, target, vc, ((DataEdge)x.Data).Length);
                //AreaAddEdge(source, target.Element_id, ((DataEdge)x.Data).Length, false, vc);
            }
        }
예제 #12
0
        public void SerializeEdgeData(System.Windows.Forms.SaveFileDialog result)
        {
            List <GraphSerializationData> graphSerializationData = new List <GraphSerializationData>();

            foreach (DataEdge ec in Area.EdgesList.Keys)
            {
                GraphSerializationData gsd = new GraphSerializationData()
                {
                    Data      = ec,
                    IsVisible = true,
                    HasLabel  = true
                };
                graphSerializationData.Add(gsd);
            }

            FileServiceProvider.SerializeDataToFile(result.FileName + "_edge_data", graphSerializationData);
        }
예제 #13
0
        public static bool TryReduce(List <Course> courses, string goalVersionOfferedCoursesRowsFileName, Gender studGender, out List <GoalVersionOfferedCoursesRow> resultLst)
        {
            bool succ = true;

            try
            {
                List <GoalVersionOfferedCoursesRow> lst;
                FileServiceProvider.DeserializeFromXmlFile(goalVersionOfferedCoursesRowsFileName, out lst);
                resultLst = Reduce(courses, lst, studGender);
            }
            catch
            {
                resultLst = null;
                succ      = false;
            }
            return(succ);
        }
예제 #14
0
 public async Task RunAfterCreateAsync()
 {
     try
     {
         await Task.Run(() =>
         {
             CourseInformation[] cfs = null;
             if (!File.Exists(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName))
             {
                 CreateCourseInformationArrayAndFillItWithAppropriateData(out cfs);
                 FileServiceProvider.SerializeToXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, cfs);
             }
             else
             {
                 FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, out cfs);
             }
             RiFillDataGrid(cfs);
         });
     }
     catch { }
 }
예제 #15
0
        public void SerializeVertexData(System.Windows.Forms.SaveFileDialog result)
        {
            List <GraphSerializationData> graphSerializationData = new List <GraphSerializationData>();

            Console.WriteLine(mainWindow.GlobalVertices.Count);
            foreach (VertexControl vc in Area.VertexList.Values)
            {
                Point p = vc.GetPosition();

                GraphSerializationData gsd = new GraphSerializationData()
                {
                    Data      = (DataVertex)vc.Vertex,
                    Position  = new GraphX.Measure.Point(p.X, p.Y),
                    IsVisible = true,
                    HasLabel  = true
                };
                graphSerializationData.Add(gsd);
            }

            FileServiceProvider.SerializeDataToFile(result.FileName + "_vertex_data", graphSerializationData);
        }
        public static MainCurriculum CreateNewCurriculmWithSpecificCreditAndFilledBySpecificCourseInforamtion(string creditFileName, string courseInforamtionFileName)
        {
            CreditDeterminer creditDeterminer;

            FileServiceProvider.DeserializeFromXmlFile(creditFileName, out creditDeterminer);

            List <CourseInformation> courseInfoLst = null;

            FileServiceProvider.DeserializeFromXmlFile(courseInforamtionFileName, out courseInfoLst);

            //create a curriculum object with specific credit
            MainCurriculum curriculum = new MainCurriculum(MainCurriculum.CreateStudentCredit(creditDeterminer.Level1, creditDeterminer.Level2));

            //update curriculm's courses properties considering student history information
            for (int i = 0; i < courseInfoLst.Count; i++)
            {
                var currentCourseInfo = courseInfoLst[i];
                var currentCourse     = curriculum.Courses[i];

                if (currentCourseInfo.Id != currentCourse.Id)
                {
                    throw new ArgumentException();
                }

                currentCourse.CodeInDesUni = currentCourseInfo.CodeInDesUni;
                currentCourse.CorrespondingTitleInDesUni = currentCourseInfo.CorrespondingTitleInDesUni;

                if (currentCourseInfo.IsPassed)
                {
                    currentCourse.IsPassed = true;
                }
                else if (currentCourseInfo.NumberOfFailed > 1)
                {
                    currentCourse.NumberOfFailed = 2;
                }
            }

            return(curriculum);
        }
예제 #17
0
        private void btnOk_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                CourseInformation[] cfs;

                if (File.Exists(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName))
                {
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, out cfs);
                }
                else
                {
                    CreateCourseInformationArrayAndFillItWithAppropriateData(out cfs);
                }

                for (int i = 0; i < cfs.Length; i++)
                {
                    var current = cfs[i];

                    if (current.CorrespondingTitleInDesUni != collection[current.Id].TitleInDesUni)
                    {
                        current.CorrespondingTitleInDesUni = collection[current.Id].TitleInDesUni;
                    }

                    if (current.CodeInDesUni != collection[current.Id].CodeInDesUni)
                    {
                        current.CodeInDesUni = collection[current.Id].CodeInDesUni.ChangeFarsiNumberInStringToEnglishNumber();
                    }
                }

                FileServiceProvider.SerializeToXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, cfs);

                Properties.Settings.Default.ReductionStep2MustBeLoad = false;
                Properties.Settings.Default.Save();

                MessageBox.Show("تغییرات با موفقیت اعمال شد");
            }
            catch { }
        }
예제 #18
0
        private void UpdateCreditDeterminerFile(Button sender)
        {
            try
            {
                if (File.Exists(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName))
                {
                    CreditDeterminer creditDeterminer;
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, out creditDeterminer);

                    if (stateLevel1 == txtblockTitleBar.Text)
                    {
                        int x = int.Parse(sender.Name.Substring(3));

                        if (creditDeterminer.Level1 != x)
                        {
                            creditDeterminer.Level1 = x;

                            creditDeterminer.Level2 = CurriculumWpfClientMiddleware.DefaultLevel2Value;
                        }
                    }
                    else if (stateLevel2 == txtblockTitleBar.Text)
                    {
                        creditDeterminer.Level2 = int.Parse(sender.Name.Substring(3));
                    }
                    else
                    {
                        throw new Exception();
                    }

                    FileServiceProvider.SerializeToXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, creditDeterminer);

                    Properties.Settings.Default.ReductionStep2MustBeLoad = false;
                    Properties.Settings.Default.Save();
                }
            }
            catch { }
        }
예제 #19
0
        private async void btnGenerateGoalVersionXmlFile_Click(object sender, RoutedEventArgs e)
        {
            string red   = "#f0513c";
            string green = "#5c9444";

            //specify appropriate color for user notification
            string color = red;

            try
            {
                //if 'files' does not have any items , no need to start the proccess
                if (files.Count == 0)
                {
                    throw new Exception();
                }

                //disable button before the start of the process to prevent user from the requesting again.
                btnGenerateGoalVersionXmlFile.IsEnabled = false;

                await Task.Run(() =>
                {
                    //create an empty list 'lst' that represents goal version object that must be generated and then saved.
                    List <GoalVersionOfferedCoursesRow> lst = new List <GoalVersionOfferedCoursesRow>();

                    if (!Directory.Exists(DirectoryManager.GoalVersionOfferedCoursesRowDirectory))
                    {
                        Directory.CreateDirectory(DirectoryManager.GoalVersionOfferedCoursesRowDirectory);
                    }

                    //for every selected files (droped files) insert items where item's id does not exist in the 'lst'.
                    files.ForEach(f =>
                    {
                        //create object model from the specific file 'f' to insert it's items.
                        var glst = FileServiceProvider.ConvertFromOfferedCoursesBasicFormToGoalVersionXmlFormat(f, DirectoryManager.GoalVersionOfferedCoursesRowDirectory + DirectoryManager.GoalVersionOfferedCoursesRowSavedName, false);

                        #region Add Distinct

                        //add 'glst' items in the 'lst' list where its 'id' does not exist in the 'lst'.

                        for (int i = 0; i < glst.Count; i++)
                        {
                            var p     = glst[i];
                            bool find = false;
                            for (int j = 0; j < lst.Count; j++)
                            {
                                var q = lst[j];
                                if (p.Id == q.Id)
                                {
                                    find = true;
                                    break;
                                }
                            }
                            if (!find)
                            {
                                lst.Add(p);
                            }
                        }

                        #endregion
                    });

                    //save goal version generated in appropriate directory with the specific name.
                    FileServiceProvider.SerializeToXmlFile(DirectoryManager.GoalVersionOfferedCoursesRowDirectory + DirectoryManager.GoalVersionOfferedCoursesRowSavedName, lst);

                    Properties.Settings.Default.ReductionStep2MustBeLoad = false;
                    Properties.Settings.Default.Save();

                    //specify appropriate color for user notification
                    color = green;
                });
            }
            catch
            {
                //set null to notify user that 'files' does not have any items.
                color = null;
            }
            finally
            {
                //set the background color to notify user about result of the proccess that completed.
                SetBackgroundColor(color);

                //remove all of the 'files' items for the next 'drag and drop'.
                files.Clear();

                //enable button after the proccess finished.
                btnGenerateGoalVersionXmlFile.IsEnabled = true;
            }
        }
예제 #20
0
        public async Task RunAfterCreateAsync()
        {
            try
            {
                await Task.Run(async() =>
                {
                    await Dispatcher.InvokeAsync(() =>
                    {
                        mainPanel.Children.Clear();
                    });


                    CourseInformation[] cfs;
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName, out cfs);

                    for (int i = 0; i < cfs.Length; i++)
                    {
                        var item = cfs[i];
                        if (item.CodeInDesUni == "-")
                        {
                            continue;
                        }
                        StudentHistoryGridRow shdr = new StudentHistoryGridRow
                        {
                            Id            = item.Id,
                            CodeInDesUni  = item.CodeInDesUni,
                            TitleInDesUni = item.CorrespondingTitleInDesUni,
                            StatusColor   = item.IsPassed ? WpfApplication.WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.GREEN
                            : item.NumberOfFailed > 1 ? WpfApplication.WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.YELLOW
                            : WpfApplication.WpfApplicationUtilityClasses.Enums.StudentHistoryGridRowColors.WHITE,
                        };

                        Dispatcher.Invoke(() =>
                        {
                            collection.Add(shdr);
                        });
                    }

                    await Dispatcher.InvokeAsync(() =>
                    {
                        for (int i = 0; i < collection.Count; i++)
                        {
                            Badged badged = new Badged();
                            badged.Badge  = collection[i].CodeInDesUni;
                            badged.Margin = new Thickness(15);
                            badged.Name   = "bdg" + collection[i].Id;

                            Button button  = new Button();
                            button.Content = new TextBlock()
                            {
                                Text          = collection[i].TitleInDesUni,
                                TextAlignment = TextAlignment.Center,
                                TextWrapping  = TextWrapping.Wrap
                            };
                            button.Name    = "btn" + i.ToString();
                            button.Width   = 250;
                            button.Height  = Double.NaN;
                            button.Padding = new Thickness(8);

                            SetButtonBackgroundColor(button, collection[i].StatusColor);

                            button.Click  += Button_Click;
                            badged.Content = button;

                            mainPanel.Children.Add(badged);
                        }
                    });
                });
            }
            catch { }
        }
예제 #21
0
        public async Task RunAfterCreatedAsync()
        {
            try
            {

                await Task.Run(async () =>
                {
                    await Dispatcher.InvokeAsync(() =>
                    {
                        InitializeComponent();
                    });

                    //settings
                    if (Properties.Settings.Default.CurrentTermNumber > 0)
                        termNumber = Properties.Settings.Default.CurrentTermNumber;

                    gender = Properties.Settings.Default.Gender == 'm' ? Tataiee.Harif.Infrastructures.GeneralEnums.Gender.MALE : Tataiee.Harif.Infrastructures.GeneralEnums.Gender.FEMALE;

                    if (Properties.Settings.Default.MinUnits > 0)
                        minUnits = Properties.Settings.Default.MinUnits;

                    if (Properties.Settings.Default.MinUnits <= Properties.Settings.Default.MaxUnits && Properties.Settings.Default.MaxUnits > 0)
                        maxUnits = Properties.Settings.Default.MaxUnits;

                    if (Properties.Settings.Default.TimeoutForReductionStep2ms >= 120)
                        timeoutMs = Properties.Settings.Default.TimeoutForReductionStep2ms;

                    if (Properties.Settings.Default.MaxNumberOfSuggestedWeeklyProgram >= 1 && Properties.Settings.Default.MaxNumberOfSuggestedWeeklyProgram <= 50)
                        maxCntSuggestion = Properties.Settings.Default.MaxNumberOfSuggestedWeeklyProgram;

                    capacityFiltering = Properties.Settings.Default.CapacityFiltering;

                    exampCollideChecking = Properties.Settings.Default.ExamCollideChecking;

                    //end settings

                    mainCurriculum = StudentHistoryServiceProvider.CreateNewCurriculmWithSpecificCreditAndFilledBySpecificCourseInforamtion(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName);


                    int CODE_LEN = 7;


                    //load offered course row in memory
                    FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.GoalVersionOfferedCoursesRowDirectory + DirectoryManager.GoalVersionOfferedCoursesRowSavedName, out List<GoalVersionOfferedCoursesRow> goalVersionOfferedCourseRows);

                    //perform reduction step 1 and get courses list after reduced
                    var coursesListAfterReductionStep1 = ReductionStep1.Reduce(DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CreditDeterminerSavedName, DirectoryManager.EssentialInforamtion1Directory + DirectoryManager.CourseInformationSavedName
                        , termNumber);


                    //assign offeredCourseRows to the output of ReductionStep2 courses List                     
                    if (capacityFiltering)
                    {
                        goalVersionOfferedCourseRows = ReductionStep2.Reduce(coursesListAfterReductionStep1, goalVersionOfferedCourseRows, gender)
                        .Where(r => r.Capacity - r.Registered > 0).ToList();
                    }
                    else
                    {
                        goalVersionOfferedCourseRows = ReductionStep2.Reduce(coursesListAfterReductionStep1, goalVersionOfferedCourseRows, gender);
                    }

                    CODE_LEN = coursesListAfterReductionStep1[0].CodeInDesUni.Length;

                    //again group reduced offered course rows 
                    var coursesGroups = (from c in goalVersionOfferedCourseRows
                                         group c by c.Id.Substring(0, CODE_LEN)).ToList();

                    //--------

                    //we can add another reduction step to reduce more if possible but not now.
                    //---------



                    //fill main offeredCourses and offeredCourseRows lists
                    int i = 0;
                    int j = 0;
                    foreach (var course in coursesGroups)
                    {
                        var c = coursesListAfterReductionStep1.FirstOrDefault(c1 => c1.CodeInDesUni == course.Key);
                        if (c != null)
                        {
                            OfferedCourse oc = new OfferedCourse(c, i++, ReductionStep2ColorStatus.WHITE);
                            foreach (var row in course)
                            {
                                OfferedCourseRow ocr = new OfferedCourseRow(row, ReductionStep2ColorStatus.WHITE, j++, oc);
                                oc.OfferedCourseRows.Add(ocr);

                                cards.Add(null);
                                offeredCourseRows.Add(ocr);
                            }

                            offeredCourses.Add(oc);

                        }
                    }

                    if (Properties.Settings.Default.ReductionStep2MustBeLoad)
                    {

                        FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.ReductionStep2SavedStatus + DirectoryManager.SaveColorOfferedCourses, out List<SaveColorObjectModel> saveColorOfferedCourses);
                        FileServiceProvider.DeserializeFromXmlFile(DirectoryManager.ReductionStep2SavedStatus + DirectoryManager.SaveColorOfferedCourseRows, out List<SaveColorObjectModel> saveColorOfferedCourseRows);


                        saveColorOfferedCourses.ForEach(scoc =>
                        {
                            offeredCourses[scoc.CorrespondingIdInSourceList].Color = scoc.Color;
                        });

                        saveColorOfferedCourseRows.ForEach(scocr =>
                        {
                            offeredCourseRows[scocr.CorrespondingIdInSourceList].Color = scocr.Color;
                        });

                    }


                    //create and fill courses navigation buttons in the right side
                    await Dispatcher.InvokeAsync(() =>
                    {

                        stackPanelRightSide.Children.Clear();
                        Button button1 = null;
                        for (int m = 0; m < offeredCourses.Count; m++)
                        {

                            Badged badged = new Badged
                            {
                                Badge = offeredCourses[m].OfferedCourseCode,
                                Margin = new Thickness(5),
                                Name = "bdg" + offeredCourses[m].CourseId
                            };

                            Button button = new Button
                            {
                                Content = new TextBlock()
                                {
                                    Text = offeredCourses[m].OfferedCourseName,
                                    TextAlignment = TextAlignment.Center,
                                    TextWrapping = TextWrapping.Wrap
                                },
                                Name = "btn" + m.ToString(),
                                Width = 250,
                                Height = Double.NaN,
                                Padding = new Thickness(5),

                                Background = Brushes.Transparent
                            };

                            button.Click += btnCourseNavigation_Click;
                            badged.Content = button;

                            if (m == 0)
                            {
                                button1 = button;
                            }
                            stackPanelRightSide.Children.Add(badged);
                        }
                        selectedButton = button1;

                        allowUserInteraction = true;
                        btnCourseNavigation_Click(button1, null);
                    });


                });

            }
            catch
            {

            }
        }