kursovaya/TeacherWindow.axaml.cs
2025-04-11 13:14:28 +03:00

253 lines
11 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;
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();
}
}
}