kursovaya/TeacherWindow.axaml.cs
2025-06-09 19:11:36 +03:00

233 lines
10 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();
}
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.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.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.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();
}
}
}