using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using kursovaya.Models; using Microsoft.EntityFrameworkCore; namespace kursovaya; public partial class TeacherWindow : Window { List discGroups = new(); public ObservableCollection AttestationsTeachers = new ObservableCollection(); List dataSourceAttestationsTeachers; CalculateGrade calculateGrade = new CalculateGrade(); public TeacherWindow() { InitializeComponent(); } public TeacherWindow(User user) : this() { var ctx = new DatabaseContext(); var groups = ctx.Groups.ToList(); var teacherId = ctx.Teachers.FirstOrDefault(t => t.Login == user.Login).Id; var disciplinesIds = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).Select(d => d.Id).ToList(); var disciplines = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).ToList(); dataSourceAttestationsTeachers = ctx.Attestations.Where(a => disciplinesIds.Contains(a.IdDiscipline)).Select(a => new AttestationPresenterTeacher() { IdUser = a.IdUser, IdDiscipline = a.IdDiscipline, AttestFirst = a.AttestFirst, AttestSecond = a.AttestSecond, AttestThird = a.AttestThird, Total = a.Total, Grade = a.Grade, StudentFIO = ctx.Students.Where(s => s.Id == a.IdUser).Select(s => s.Fio).FirstOrDefault(), }).ToList(); foreach (var group in groups) { foreach (var discipline in disciplines) { var attestationsToDiscGroup = dataSourceAttestationsTeachers.Where(a => ctx.Students.Any(s => s.Id == a.IdUser && s.IdGroup == group.Id) && a.IdDiscipline == discipline.Id).ToList(); discGroups.Add(new DiscGroup(){discipline = discipline, group = group, attestations = attestationsToDiscGroup}); } } discGroups.RemoveAll(d => d.attestations.Count == 0); foreach (var discGroup in discGroups) { Console.WriteLine($"{discGroup.discipline.Name} - {discGroup.group.Id} - {discGroup.attestations.Count}"); } MultComboBox.ItemsSource = discGroups.Select(dg => dg.NameComboBox).ToList(); FlatAttestationGrid.ItemsSource = AttestationsTeachers; } public class AttestationPresenterTeacher() : Attestation { public string StudentFIO { get; set; } } public class DiscGroup { public Discipline discipline; public Group group; public string NameComboBox { get { return $"{discipline.Name} - {group.Id}"; } } public List attestations = new(); } public void DisplayAttestations() { var ctx = new DatabaseContext(); var temp = dataSourceAttestationsTeachers; AttestationsTeachers.Clear(); if (MultComboBox.SelectionBoxItem != null) { var selectedDiscGroupId = discGroups.FirstOrDefault(d => d.NameComboBox == MultComboBox.SelectedItem.ToString()).group.Id; temp = temp.Where(ap => ctx.Students.Any(s => s.Id == ap.IdUser && s.IdGroup == selectedDiscGroupId)).ToList(); var selectedDiscGroupId2 = discGroups.FirstOrDefault(d => d.NameComboBox == MultComboBox.SelectedItem.ToString()).discipline.Id; temp = temp.Where(ap => ap.IdDiscipline == selectedDiscGroupId2).ToList(); } Console.WriteLine("Добавлено элементов: " + temp.Count); foreach (var item in temp) { AttestationsTeachers.Add(item); } } private void ButtonBack_OnClick(object? sender, RoutedEventArgs e) { Close(); } private void CheckAttest_OnClick(object? sender, RoutedEventArgs e) { DisplayAttestations(); } // public string CalculateGrade(int total, int formAttest) // { // string grade = ""; // switch (formAttest) // { // case 1: // if (total >= 90) grade = "отлично"; // else if (total >= 80) grade = "хорошо"; // else if (total >= 70) grade = "удовлетворительно"; // else grade = "неудовлетворительно"; // break; // case 2: // if (total >= 90) grade = "отлично"; // else if (total >= 80) grade = "хорошо"; // else if (total >= 70) grade = "удовлетворительно"; // else grade = "неудовлетворительно"; // break; // case 3: // if (total >= 70) grade = "зачтено"; // else grade = "не зачтено"; // break; // } // return grade; // } private async void FirstAttest_OnClick(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) { EditAttestWindow editAttestWindow = new EditAttestWindow(1); var newFirstAttest = await editAttestWindow.ShowDialog(this); var ctx = new DatabaseContext(); var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; Attestation newAttestation = new Attestation() { IdUser = attestation.IdUser, IdDiscipline = attestation.IdDiscipline, AttestFirst = newFirstAttest, AttestSecond = attestation.AttestSecond, AttestThird = attestation.AttestThird, Total = newFirstAttest + attestation.AttestSecond + attestation.AttestThird, // Grade = CalculateGrade(newFirstAttest + attestation.AttestSecond + attestation.AttestThird, formAttest), Grade = calculateGrade.CalculateGradeMethod(newFirstAttest + attestation.AttestSecond + attestation.AttestThird, formAttest), }; ctx.Attestations.Update(newAttestation); await ctx.SaveChangesAsync(); dataSourceAttestationsTeachers.Remove(attestation); dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() { IdUser = newAttestation.IdUser, IdDiscipline = newAttestation.IdDiscipline, AttestFirst = newAttestation.AttestFirst, AttestSecond = newAttestation.AttestSecond, AttestThird = newAttestation.AttestThird, Total = newAttestation.Total, Grade = newAttestation.Grade, StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() }); DisplayAttestations(); } } private async void SecondAttest_OnClick(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) { EditAttestWindow editAttestWindow = new EditAttestWindow(2); var newSecondAttest = await editAttestWindow.ShowDialog(this); var ctx = new DatabaseContext(); var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; Attestation newAttestation = new Attestation() { IdUser = attestation.IdUser, IdDiscipline = attestation.IdDiscipline, AttestFirst = attestation.AttestFirst, AttestSecond = newSecondAttest, AttestThird = attestation.AttestThird, Total = attestation.AttestFirst + newSecondAttest + attestation.AttestThird, // Grade = CalculateGrade(attestation.AttestFirst + newSecondAttest + attestation.AttestThird, formAttest), Grade = calculateGrade.CalculateGradeMethod(attestation.AttestFirst + newSecondAttest + attestation.AttestThird, formAttest), }; ctx.Attestations.Update(newAttestation); await ctx.SaveChangesAsync(); dataSourceAttestationsTeachers.Remove(attestation); dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() { IdUser = newAttestation.IdUser, IdDiscipline = newAttestation.IdDiscipline, AttestFirst = newAttestation.AttestFirst, AttestSecond = newAttestation.AttestSecond, AttestThird = newAttestation.AttestThird, Total = newAttestation.Total, Grade = newAttestation.Grade, StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() }); DisplayAttestations(); } } private async void ThirdAttest_OnClick(object? sender, RoutedEventArgs e) { if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) { EditAttestWindow editAttestWindow = new EditAttestWindow(3); var newThirdAttest = await editAttestWindow.ShowDialog(this); var ctx = new DatabaseContext(); var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; Attestation newAttestation = new Attestation() { IdUser = attestation.IdUser, IdDiscipline = attestation.IdDiscipline, AttestFirst = attestation.AttestFirst, AttestSecond = attestation.AttestSecond, AttestThird = newThirdAttest, Total = attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, // Grade = CalculateGrade(attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, formAttest), Grade = calculateGrade.CalculateGradeMethod(attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, formAttest), }; ctx.Attestations.Update(newAttestation); await ctx.SaveChangesAsync(); dataSourceAttestationsTeachers.Remove(attestation); dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() { IdUser = newAttestation.IdUser, IdDiscipline = newAttestation.IdDiscipline, AttestFirst = newAttestation.AttestFirst, AttestSecond = newAttestation.AttestSecond, AttestThird = newAttestation.AttestThird, Total = newAttestation.Total, Grade = newAttestation.Grade, StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() }); DisplayAttestations(); } } } // using System; // using System.Collections.Generic; // using System.Collections.ObjectModel; // using System.Linq; // using Avalonia; // using Avalonia.Controls; // using Avalonia.Interactivity; // using Avalonia.Markup.Xaml; // using kursovaya.Models; // using Microsoft.EntityFrameworkCore; // // namespace kursovaya; // // public partial class TeacherWindow : Window // { // List discGroups = new(); // public ObservableCollection AttestationsTeachers = new ObservableCollection(); // List dataSourceAttestationsTeachers; // public TeacherWindow() // { // InitializeComponent(); // } // // public TeacherWindow(User user) : this() // { // var ctx = new DatabaseContext(); // // var groups = ctx.Groups.ToList(); // var teacherId = ctx.Teachers.FirstOrDefault(t => t.Login == user.Login).Id; // var disciplinesIds = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).Select(d => d.Id).ToList(); // var disciplines = ctx.Disciplines.Include(d => d.DisciplineTeachers).Where(d => d.DisciplineTeachers.Any(dt => dt.IdTeacher == teacherId)).ToList(); // dataSourceAttestationsTeachers = ctx.Attestations.Where(a => disciplinesIds.Contains(a.IdDiscipline)).Select(a => new AttestationPresenterTeacher() // { // IdUser = a.IdUser, // IdDiscipline = a.IdDiscipline, // AttestFirst = a.AttestFirst, // AttestSecond = a.AttestSecond, // AttestThird = a.AttestThird, // Total = a.Total, // Grade = a.Grade, // StudentFIO = ctx.Students.Where(s => s.Id == a.IdUser).Select(s => s.Fio).FirstOrDefault(), // }).ToList(); // foreach (var group in groups) // { // foreach (var discipline in disciplines) // { // var attestationsToDiscGroup = dataSourceAttestationsTeachers.Where(a => ctx.Students.Any(s => s.Id == a.IdUser && s.IdGroup == group.Id) && a.IdDiscipline == discipline.Id).ToList(); // discGroups.Add(new DiscGroup(){discipline = discipline, group = group, attestations = attestationsToDiscGroup}); // } // } // discGroups.RemoveAll(d => d.attestations.Count == 0); // // foreach (var discGroup in discGroups) // { // Console.WriteLine($"{discGroup.discipline.Name} - {discGroup.group.Id} - {discGroup.attestations.Count}"); // } // // GroupComboBox.ItemsSource = discGroups.Select(dg => dg.group.Id).Distinct().ToList(); // DisciplineComboBox.ItemsSource = discGroups.Select(dg => dg.discipline.Name).Distinct().ToList(); // FlatAttestationGrid.ItemsSource = AttestationsTeachers; // } // // public class AttestationPresenterTeacher() : Attestation // { // public string StudentFIO { get; set; } // } // // public class DiscGroup // { // public Discipline discipline; // public Group group; // public List attestations = new(); // } // // public void DisplayAttestations() // { // var ctx = new DatabaseContext(); // var temp = dataSourceAttestationsTeachers; // AttestationsTeachers.Clear(); // // if (GroupComboBox.SelectionBoxItem != null) // { // var selectedGroupId = Convert.ToInt32(GroupComboBox.SelectedItem); // temp = temp.Where(ap => ctx.Students.Any(s => s.Id == ap.IdUser && s.IdGroup == selectedGroupId)).ToList(); // } // // if (DisciplineComboBox.SelectionBoxItem != null) // { // var idDiscipline = ctx.Disciplines.Where(d => d.Name == DisciplineComboBox.SelectionBoxItem) // .Select(d => d.Id).FirstOrDefault(); // temp = temp.Where(ap => ap.IdDiscipline == idDiscipline).ToList(); // } // // Console.WriteLine("Добавлено элементов: " + temp.Count); // // foreach (var item in temp) // { // AttestationsTeachers.Add(item); // } // } // // private void ButtonBack_OnClick(object? sender, RoutedEventArgs e) // { // Close(); // } // // private void CheckAttest_OnClick(object? sender, RoutedEventArgs e) // { // DisplayAttestations(); // } // // private string CalculateGrade(int total, int formAttest) // { // string grade = ""; // switch (formAttest) // { // case 1: // if (total >= 90) grade = "отлично"; // else if (total >= 80) grade = "хорошо"; // else if (total >= 70) grade = "удовлетворительно"; // else grade = "неудовлетворительно"; // break; // case 2: // if (total >= 90) grade = "отлично"; // else if (total >= 80) grade = "хорошо"; // else if (total >= 70) grade = "удовлетворительно"; // else grade = "неудовлетворительно"; // break; // case 3: // if (total >= 70) grade = "зачтено"; // else grade = "не зачтено"; // break; // } // return grade; // } // // private async void FirstAttest_OnClick(object? sender, RoutedEventArgs e) // { // if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) // { // EditAttestWindow editAttestWindow = new EditAttestWindow(1); // var newFirstAttest = await editAttestWindow.ShowDialog(this); // var ctx = new DatabaseContext(); // var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; // // Attestation newAttestation = new Attestation() // { // IdUser = attestation.IdUser, // IdDiscipline = attestation.IdDiscipline, // AttestFirst = newFirstAttest, // AttestSecond = attestation.AttestSecond, // AttestThird = attestation.AttestThird, // Total = newFirstAttest + attestation.AttestSecond + attestation.AttestThird, // Grade = CalculateGrade(newFirstAttest + attestation.AttestSecond + attestation.AttestThird, formAttest), // }; // // ctx.Attestations.Update(newAttestation); // await ctx.SaveChangesAsync(); // // dataSourceAttestationsTeachers.Remove(attestation); // dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() // { // IdUser = newAttestation.IdUser, // IdDiscipline = newAttestation.IdDiscipline, // AttestFirst = newAttestation.AttestFirst, // AttestSecond = newAttestation.AttestSecond, // AttestThird = newAttestation.AttestThird, // Total = newAttestation.Total, // Grade = newAttestation.Grade, // StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() // }); // DisplayAttestations(); // } // } // // private async void SecondAttest_OnClick(object? sender, RoutedEventArgs e) // { // if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) // { // EditAttestWindow editAttestWindow = new EditAttestWindow(2); // var newSecondAttest = await editAttestWindow.ShowDialog(this); // var ctx = new DatabaseContext(); // var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; // // Attestation newAttestation = new Attestation() // { // IdUser = attestation.IdUser, // IdDiscipline = attestation.IdDiscipline, // AttestFirst = attestation.AttestFirst, // AttestSecond = newSecondAttest, // AttestThird = attestation.AttestThird, // Total = attestation.AttestFirst + newSecondAttest + attestation.AttestThird, // Grade = CalculateGrade(attestation.AttestFirst + newSecondAttest + attestation.AttestThird, formAttest), // }; // // ctx.Attestations.Update(newAttestation); // await ctx.SaveChangesAsync(); // // dataSourceAttestationsTeachers.Remove(attestation); // dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() // { // IdUser = newAttestation.IdUser, // IdDiscipline = newAttestation.IdDiscipline, // AttestFirst = newAttestation.AttestFirst, // AttestSecond = newAttestation.AttestSecond, // AttestThird = newAttestation.AttestThird, // Total = newAttestation.Total, // Grade = newAttestation.Grade, // StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() // }); // DisplayAttestations(); // } // } // // private async void ThirdAttest_OnClick(object? sender, RoutedEventArgs e) // { // if (sender is Button button && button.Tag is AttestationPresenterTeacher attestation) // { // EditAttestWindow editAttestWindow = new EditAttestWindow(3); // var newThirdAttest = await editAttestWindow.ShowDialog(this); // var ctx = new DatabaseContext(); // var formAttest = ctx.Disciplines.FirstOrDefault(d => d.Id == attestation.IdDiscipline).IdFormAttest; // // Attestation newAttestation = new Attestation() // { // IdUser = attestation.IdUser, // IdDiscipline = attestation.IdDiscipline, // AttestFirst = attestation.AttestFirst, // AttestSecond = attestation.AttestSecond, // AttestThird = newThirdAttest, // Total = attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, // Grade = CalculateGrade(attestation.AttestFirst + attestation.AttestSecond + newThirdAttest, formAttest), // }; // // ctx.Attestations.Update(newAttestation); // await ctx.SaveChangesAsync(); // // dataSourceAttestationsTeachers.Remove(attestation); // dataSourceAttestationsTeachers.Add(new AttestationPresenterTeacher() // { // IdUser = newAttestation.IdUser, // IdDiscipline = newAttestation.IdDiscipline, // AttestFirst = newAttestation.AttestFirst, // AttestSecond = newAttestation.AttestSecond, // AttestThird = newAttestation.AttestThird, // Total = newAttestation.Total, // Grade = newAttestation.Grade, // StudentFIO = ctx.Students.Where(s => s.Id == newAttestation.IdUser).Select(s => s.Fio).FirstOrDefault() // }); // DisplayAttestations(); // } // } // }