kursovaya/TeacherWindow.axaml.cs

516 lines
23 KiB
C#

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<DiscGroup> discGroups = new();
public ObservableCollection<AttestationPresenterTeacher> AttestationsTeachers = new ObservableCollection<AttestationPresenterTeacher>();
List<AttestationPresenterTeacher> 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<AttestationPresenterTeacher> 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<int>(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<int>(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<int>(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<DiscGroup> discGroups = new();
// public ObservableCollection<AttestationPresenterTeacher> AttestationsTeachers = new ObservableCollection<AttestationPresenterTeacher>();
// List<AttestationPresenterTeacher> 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<AttestationPresenterTeacher> 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<int>(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<int>(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<int>(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();
// }
// }
// }