ilyalehchylin/educats-xamarin

View on GitHub
source/EduCATS/Pages/SaveMarks/ViewModels/SaveMarksPageViewModel.cs

Summary

Maintainability
D
2 days
Test Coverage
using EduCATS.Helpers.Forms;
using EduCATS.Helpers.Json;
using EduCATS.Networking;
using EduCATS.Networking.AppServices;
using EduCATS.Networking.Models.SaveMarks;
using EduCATS.Networking.Models.SaveMarks.LabSchedule;
using EduCATS.Pages.Statistics.Marks.Models;
using Newtonsoft.Json;
using Nyxbull.Plugins.CrossLocalization;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace EduCATS.Pages.SaveMarks.ViewModels
{
    public class SaveMarksPageViewModel : ViewModel
    {
        public readonly IPlatformServices _services;

        public VisitingLecturesList fullVisitingLectures = new VisitingLecturesList();
        public LabsVisitingList fullVisitingLabs = new LabsVisitingList();
        public LabsVisitingList fullVisitingPract = new LabsVisitingList();

        public int selSubGroup { get; set; }

        public VisitingLecturesList groupData = new VisitingLecturesList();
        public LabsVisitingList labsVisitingList = new LabsVisitingList();
        public LabsVisitingList practiceVisitingList = new LabsVisitingList();
        public int subjectId { get; set; }
        public int labVisId = 0;
        public int prVisId = 0;
        public List<VisitingPageModel> _currentLabsVisitingMarksReady = new List<VisitingPageModel>();

        public List<VisitingPageModel> _currentLecturesVisitingMarks;
        public List<VisitingPageModel> _currentLabsVisitingMarksSubGroup1;
        public string _titleOfPage { get; set; }
        public List<string> FullNames { get; set; }

        public TakedLabs _takedLabs { get; set; }

        public SaveMarksPageViewModel(IPlatformServices services, int _subjectId, object stat, int groupId, string title)
        {
            ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => { return true; };

            _titleOfPage = title;
            _services = services;
            if (title == CrossLocalization.Translate("stats_page_lectures_visiting"))
            {
                groupData = stat as VisitingLecturesList;
                createLecturesVisitingPage(groupData);
            }
            else if (title == CrossLocalization.Translate("stats_page_labs_visiting"))
            {
                labsVisitingList = stat as LabsVisitingList;
                _takedLabs = new TakedLabs();
                WebRequest request = WebRequest.Create(Links.GetLabsTest + "subjectId=" + _subjectId + "&groupId=" + groupId);
                request.Headers.Add("Authorization", _services.Preferences.AccessToken);
                WebResponse response = request.GetResponse();
                string json = "";
                using (Stream stream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string line = "";
                        while ((line = reader.ReadLine()) != null)
                        {
                            json += line;
                        }
                    }
                };
                _takedLabs = JsonConvert.DeserializeObject<TakedLabs>(json);
                createLabsVisitingPage(labsVisitingList);
            }
            else if (title == CrossLocalization.Translate("practiсe_visiting"))
            {
                subjectId = _subjectId;
                practiceVisitingList = stat as LabsVisitingList;
                _takedLabs = new TakedLabs();
                WebRequest request = WebRequest.Create(Links.GetPracticialsTest + "subjectId=" + _subjectId + "&groupId=" + groupId);
                request.Headers.Add("Authorization", _services.Preferences.AccessToken);
                WebResponse response = request.GetResponse();
                string json = "";
                using (Stream stream = response.GetResponseStream())
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string line = "";
                        while ((line = reader.ReadLine()) != null)
                        {
                            json += line;
                        }
                    }
                };
                _takedLabs = JsonConvert.DeserializeObject<TakedLabs>(json);
                createPracticialsVisitingPage(practiceVisitingList);
            }
        }

        private void createPracticialsVisitingPage(LabsVisitingList statistics)
        {
            LecturesMarks = new List<VisitingPageModel>();
            fullVisitingPract = statistics;
            Date = new List<string>();
            FullNames = new List<string>();
            _currentLecturesVisitingMarks = new List<VisitingPageModel>();
            foreach (var pract in _takedLabs.ScheduleProtectionPracticals)
            {
                Date.Add(pract.Date);
            }
            selDateForSave = Date[Date.Count - 1];
            SelectedPracDate = selDateForSave;
        }

        void createLabsVisitingPage(LabsVisitingList statistics)
        {
            LabsVisitingMarks = new List<VisitingPageModel>();
            SubGroup = new List<string>();
            FullNames = new List<string>();
            fullVisitingLabs = statistics;
            foreach (var subGroup in _takedLabs.Labs)
            {
                if (!currentSubGroups.Contains(subGroup.SubGroup))
                {
                    currentSubGroups.Add(subGroup.SubGroup);
                }
            }
            foreach (var subGruop in currentSubGroups)
            {
                SubGroup.Add(CrossLocalization.Translate("sub_group") + subGruop.ToString());
            }
            selSubGroup = currentSubGroups[0];
            SelectedSubGroup = SubGroup.FirstOrDefault();
        }

        void createLecturesVisitingPage(VisitingLecturesList statistics)
        {
            _currentLecturesVisitingMarks = new List<VisitingPageModel>();
            LecturesMarks = new List<VisitingPageModel>();
            Date = new List<string>();
            foreach (var group in statistics.GroupsVisiting)
            {
                fullVisitingLectures = statistics;
                foreach (var groupVis in group.LecturesMarksVisiting)
                {
                    foreach (var groupVisit in groupVis.Marks)
                    {
                        if (!Date.Contains(groupVisit.Date))
                        {
                            Date.Add(groupVisit.Date);
                        }
                        if (Date[0] == groupVisit.Date &&
                            !(_currentLecturesVisitingMarks.Contains(new VisitingPageModel(groupVis.StudentName, groupVisit.Comment,
                            groupVisit.Mark, false))))
                        {
                            _currentLecturesVisitingMarks.Add(new VisitingPageModel(groupVis.StudentName, groupVisit.Comment,
                            groupVisit.Mark, false));
                        }
                    }
                }
            }
            SelectedDate = Date[Date.Count - 1];
            LecturesMarks = _currentLecturesVisitingMarks;
        }

        Command _saveMarksCommand;
        public Command SaveMarksCommand
        {
            get
            {
                return _saveMarksCommand ?? (_saveMarksCommand = new Command(
                    async () => await saveMarks()));
            }
        }

        private async Task<KeyValuePair<string, HttpStatusCode>> saveMarks()
        {
            string link = "";
            string body = "";
            if (_titleOfPage == CrossLocalization.Translate("stats_page_lectures_visiting"))
            {
                var lecturesVisiting = fullVisitingLectures.GroupsVisiting[0];
                link = Links.SaveLecturesCalendarData;
                var i = 0;
                foreach (var lect in lecturesVisiting.LecturesMarksVisiting)
                {
                    for (int m = 0; m < lect.Marks.Count; m++)
                    {
                        if (lect.Marks[m].Date == selDateForSave)
                        {
                            lect.Marks[m].Mark = _currentLecturesVisitingMarks[i].Mark;
                            lect.Marks[m].Comment = _currentLecturesVisitingMarks[i].Comment;
                            //lect.Marks[m]. = _currentLecturesVisitingMarksReady[i].ShowForStud;
                            i++;
                        };
                    };
                };
                SaveLectures lecturesMarks = new SaveLectures();
                lecturesMarks.lecturesMarks = lecturesVisiting.LecturesMarksVisiting;
                body = JsonController.ConvertObjectToJson(lecturesMarks);
            }
            else if (_titleOfPage == CrossLocalization.Translate("stats_page_labs_visiting"))
            {
                var labsVisiting = fullVisitingLabs.Students;
                SaveLabs labsMarks = new SaveLabs();
                int dateId = 0;
                foreach (var lab in _takedLabs.ScheduleProtectionLabs.Where(v => v.Date == selLabDateForSave && v.SubGroup == selSubGroup))
                {
                    dateId = lab.ScheduleProtectionLabId;
                }
                int i = 0;
                for (int stud = 0; stud < labsVisiting.Count; stud++)
                {
                    if (labsVisiting[stud].FullName == LabsVisitingMarksSubGroup[i].Title)
                    {
                        foreach (var mark in labsVisiting[stud].LabVisitingMark.Where(v => v.ScheduleProtectionLabId == dateId))
                        {
                            mark.Mark = LabsVisitingMarksSubGroup[i].Mark;
                            mark.Comment = LabsVisitingMarksSubGroup[i].Comment;
                            labsMarks.comments.Add(LabsVisitingMarksSubGroup[i].Comment);
                            labsMarks.Id.Add(mark.LabVisitingMarkId);
                            labsMarks.marks.Add(mark.Mark);
                            labsMarks.showForStudents.Add(LabsVisitingMarksSubGroup[i].ShowForStud);
                            labsMarks.studentsId.Add(labsVisiting[stud].StudentId);
                        };
                        labsMarks.students.Add(labsVisiting[stud]);
                        i++;
                        if (i == LabsVisitingMarksSubGroup.Count)
                        {
                            break;
                        }
                    };
                };
                link = Links.SaveLabsMark;
                labsMarks.dateId = dateId;
                body = JsonController.ConvertObjectToJson(labsMarks);
            }
            else if (_titleOfPage == CrossLocalization.Translate("practiсe_visiting"))
            {
                var dateId = 0;
                SavePracticial savePracticial = new SavePracticial();
                var practVisiting = fullVisitingPract.Students;
                link = Links.SaveStudentPracticalMark;
                foreach (var pr in _takedLabs.ScheduleProtectionPracticals.Where(v => v.Date == selDateForSave))
                {
                    dateId = pr.ScheduleProtectionPracticalId;
                }
                int i = 0;
                for (int pract = 0; pract < practVisiting.Count; pract++)
                {
                    foreach (var mark in practVisiting[pract].PracticalVisitingMark.Where(v => v.ScheduleProtectionPracticalId == dateId))
                    {
                        mark.Mark = LecturesMarks[i].Mark;
                        mark.Comment = LecturesMarks[i].Comment;
                        savePracticial.Id.Add(mark.PracticalVisitingMarkId);
                        savePracticial.marks.Add(mark.Mark);
                        savePracticial.showForStudents.Add(LecturesMarks[i].ShowForStud);
                        savePracticial.studentsId.Add(practVisiting[pract].StudentId);
                        savePracticial.Comments.Add(LecturesMarks[i].Comment);
                    }
                    savePracticial.students.Add(practVisiting[pract]);
                    i++;
                }
                savePracticial.dateId = dateId;
                savePracticial.subjectId = subjectId;
                body = JsonController.ConvertObjectToJson(savePracticial);
            }
            await _services.Navigation.ClosePage(false);
            return await AppServicesController.Request(link, body);
        }

        public List<int> currentSubGroups = new List<int>();

        List<string> _subGroup;
        public List<string> SubGroup
        {
            get { return _subGroup; }
            set { SetProperty(ref _subGroup, value); }
        }

        List<VisitingPageModel> _labsVisitingMarksSubGroup;
        public List<VisitingPageModel> LabsVisitingMarksSubGroup
        {
            get { return _labsVisitingMarksSubGroup; }
            set { SetProperty(ref _labsVisitingMarksSubGroup, value); }
        }

        List<VisitingPageModel> _labsVisitingMarksSubGroupOne;
        public List<VisitingPageModel> LabsVisitingMarksSubGroupOne
        {
            get { return _labsVisitingMarksSubGroupOne; }
            set { SetProperty(ref _labsVisitingMarksSubGroupOne, value); }
        }

        List<ListSaveMarksVisiting> _listSaveMarks;
        public List<ListSaveMarksVisiting> ListSaveMarks
        {
            get { return _listSaveMarks; }
            set { SetProperty(ref _listSaveMarks, value); }
        }

        List<VisitingPageModel> _labsVisitingMarks;
        public List<VisitingPageModel> LabsVisitingMarks
        {
            get { return _labsVisitingMarks; }
            set { SetProperty(ref _labsVisitingMarks, value); }
        }

        List<VisitingPageModel> _lecturesMarks;
        public List<VisitingPageModel> LecturesMarks
        {
            get { return _lecturesMarks; }
            set { SetProperty(ref _lecturesMarks, value); }
        }

        List<string> _datelabs;
        public List<string> DateLabs
        {
            get { return _datelabs; }
            set { SetProperty(ref _datelabs, value); }
        }

        List<string> _date;
        public List<string> Date
        {
            get { return _date; }
            set { SetProperty(ref _date, value); }
        }

        List<string> _date1;
        public List<string> Date1
        {
            get { return _date1; }
            set { SetProperty(ref _date1, value); }
        }

        public string selDateForSave { get; set; }

        string _selectedDate;
        public string SelectedDate
        {
            get
            {
                _currentLecturesVisitingMarks = new List<VisitingPageModel>();
                foreach (var group in fullVisitingLectures.GroupsVisiting)
                {
                    foreach (var groupVis in group.LecturesMarksVisiting)
                    {
                        foreach (var groupVisit in groupVis.Marks)
                        {
                            if (_selectedDate == groupVisit.Date &&
                                !(_currentLecturesVisitingMarks.Contains(new VisitingPageModel(groupVis.StudentName, groupVisit.Comment,
                                groupVisit.Mark, false))))
                            {
                                _currentLecturesVisitingMarks.Add(new VisitingPageModel(groupVis.StudentName, groupVisit.Comment,
                                groupVisit.Mark, false));
                            }
                        }
                    }
                }
                selDateForSave = _selectedDate;
                LecturesMarks = _currentLecturesVisitingMarks;
                return _selectedDate;
            }
            set
            {
                SetProperty(ref _selectedDate, value);
            }
        }

        string _selectedPracDate;
        public string SelectedPracDate
        {
            get
            {
                _currentLecturesVisitingMarks = new List<VisitingPageModel>();
                foreach (var pract in _takedLabs.ScheduleProtectionPracticals.Where(v => v.Date == selDateForSave))
                {
                    prVisId = pract.ScheduleProtectionPracticalId;
                    selDateForSave = _selectedPracDate;
                }
                foreach (var group in fullVisitingPract.Students)
                {
                    foreach (var stud in group.PracticalVisitingMark.Where(v => v.ScheduleProtectionPracticalId == prVisId))
                    {
                        _currentLecturesVisitingMarks.Add(new VisitingPageModel(group.FullName, stud.Comment, stud.Mark, false));
                    }
                }
                LecturesMarks = _currentLecturesVisitingMarks;
                return _selectedPracDate;
            }
            set
            {
                SetProperty(ref _selectedPracDate, value);
            }
        }

        public string selLabDateForSave { get; set; }
        string _selectedLabDate;
        public string SelectedLabDate
        {
            get
            {
                _currentLabsVisitingMarksSubGroup1 = new List<VisitingPageModel>();
                foreach (var date in _takedLabs.ScheduleProtectionLabs.Where(v => v.Date == _selectedLabDate))
                {
                    labVisId = date.ScheduleProtectionLabId;
                    selLabDateForSave = _selectedLabDate;
                }
                foreach (var subGroupStudent in fullVisitingLabs.Students.Where(v => v.SubGroup == selSubGroup))
                {
                    foreach (var stud in subGroupStudent.LabVisitingMark.Where(v => v.ScheduleProtectionLabId == labVisId))
                    {
                        _currentLabsVisitingMarksSubGroup1.Add(new VisitingPageModel(subGroupStudent.FullName,
                            stud.Comment, stud.Mark, stud.ShowForStudent));
                    }
                }
                LabsVisitingMarksSubGroup = _currentLabsVisitingMarksSubGroup1;
                return _selectedLabDate;
            }
            set
            {
                SetProperty(ref _selectedLabDate, value);
            }
        }

        string _selectedSubGroup;
        public string SelectedSubGroup
        {
            get
            {
                Date1 = new List<string>();
                _currentLabsVisitingMarksSubGroup1 = new List<VisitingPageModel>();
                var lenght = _selectedSubGroup.Length;
                selSubGroup = Int32.Parse(_selectedSubGroup[lenght - 1].ToString());
                foreach (var labDate in _takedLabs.ScheduleProtectionLabs.Where(v => v.SubGroup == selSubGroup))
                {
                    Date1.Add(labDate.Date);
                    labVisId = labDate.ScheduleProtectionLabId;
                }
                foreach (var subGroupStudent in fullVisitingLabs.Students.Where(v => v.SubGroup == selSubGroup))
                {
                    foreach (var stud in subGroupStudent.LabVisitingMark.Where(v => v.ScheduleProtectionLabId == labVisId))
                    {
                        _currentLabsVisitingMarksSubGroup1.Add(new VisitingPageModel(subGroupStudent.FullName,
                            stud.Comment, stud.Mark, stud.ShowForStudent));
                    }
                }
                DateLabs = Date1;
                LabsVisitingMarksSubGroup = _currentLabsVisitingMarksSubGroup1;

                if (DateLabs.Count != 0)
                    SelectedLabDate = DateLabs[DateLabs.Count - 1];

                return _selectedSubGroup;
            }
            set
            {
                SetProperty(ref _selectedSubGroup, value);
            }
        }
    }
}