init
This commit is contained in:
parent
71b5a3c283
commit
d3fed9e925
@ -6,11 +6,11 @@ using System.Threading.Tasks;
|
||||
|
||||
namespace Demo.domain.Models
|
||||
{
|
||||
internal class PresenceLocalEntity
|
||||
public class PresenceLocalEntity
|
||||
{
|
||||
public required Guid UserGuid { get; set; }
|
||||
public required int UserId { get; set; }
|
||||
public bool IsAttedance { get; set; } = true;
|
||||
public required DateOnly Date { get; set; }
|
||||
public required DateTime Date { get; set; }
|
||||
|
||||
public required int LessonNumber { get; set; }
|
||||
}
|
||||
|
@ -27,5 +27,10 @@ namespace Demo.Data.LocalData
|
||||
new UserLocalEnity{ID = 5, Guid=Guid.Parse("efcc1473-c116-4244-b3f7-f2341a5c3003"), FIO = "RandomFio4", GroupID = 2 },
|
||||
new UserLocalEnity{ID = 6, Guid=Guid.Parse("60640fb3-ace2-4cad-81d5-a0a58bc2dbbd"), FIO = "RandomFio5", GroupID = 3 },
|
||||
};
|
||||
|
||||
public static List<PresenceLocalEntity> presences => new List<PresenceLocalEntity>
|
||||
{
|
||||
|
||||
};
|
||||
}
|
||||
}
|
||||
|
18
Demo/Data/Repository/IPresenceRepository.cs
Normal file
18
Demo/Data/Repository/IPresenceRepository.cs
Normal file
@ -0,0 +1,18 @@
|
||||
|
||||
using Demo.domain.Models;
|
||||
using Demo.Domain.UseCase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
{
|
||||
public interface IPresenceRepository
|
||||
{
|
||||
|
||||
List<PresenceLocalEntity> GetPresenceByDateAndGroup(DateTime date, int groupId);
|
||||
void SavePresence(List<PresenceLocalEntity> presences);
|
||||
}
|
||||
}
|
57
Demo/Data/Repository/PresenceRepositoryImpl.cs
Normal file
57
Demo/Data/Repository/PresenceRepositoryImpl.cs
Normal file
@ -0,0 +1,57 @@
|
||||
using Demo.Data.LocalData;
|
||||
using Demo.domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Demo.Data.Repository
|
||||
{
|
||||
public class PresenceRepositoryImpl : IPresenceRepository
|
||||
{
|
||||
private List<PresenceLocalEntity> _presences;
|
||||
|
||||
public PresenceRepositoryImpl()
|
||||
{
|
||||
_presences = LocalStaticData.presences;
|
||||
}
|
||||
|
||||
// Метод для сохранения посещаемости
|
||||
public void SavePresence(List<PresenceLocalEntity> presences)
|
||||
{
|
||||
foreach (var presence in presences)
|
||||
{
|
||||
var existingPresence = _presences.FirstOrDefault(p =>
|
||||
p.Date == presence.Date &&
|
||||
p.UserId == presence.UserId &&
|
||||
p.LessonNumber == presence.LessonNumber);
|
||||
|
||||
if (existingPresence == null)
|
||||
{
|
||||
_presences.Add(presence);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Обновление существующего значения посещаемости
|
||||
existingPresence.IsAttedance = presence.IsAttedance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Метод для получения всех дат посещаемости по группе
|
||||
public List<DateTime> GetAllDatesByGroup(int groupId)
|
||||
{
|
||||
return _presences
|
||||
.Where(p => LocalStaticData.users.Any(u => u.GroupID == groupId && u.ID == p.UserId))
|
||||
.Select(p => p.Date.Date)
|
||||
.Distinct()
|
||||
.ToList();
|
||||
}
|
||||
|
||||
// Метод для получения посещаемости по дате и группе
|
||||
public List<PresenceLocalEntity> GetPresenceByDateAndGroup(DateTime date, int groupId)
|
||||
{
|
||||
return _presences.Where(p => p.Date.Date == date.Date &&
|
||||
LocalStaticData.users.Any(u => u.GroupID == groupId && u.ID == p.UserId)).ToList();
|
||||
}
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@ namespace Demo.domain.Models
|
||||
|
||||
public required User User { get; set; }
|
||||
public bool IsAttedance { get; set; } = true;
|
||||
public required DateOnly Date { get; set; }
|
||||
public required DateTime Date { get; set; }
|
||||
|
||||
public required int LessonNumber { get; set; }
|
||||
}
|
||||
|
75
Demo/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
75
Demo/Domain/UseCase/UseCaseGeneratePresence.cs
Normal file
@ -0,0 +1,75 @@
|
||||
using Demo.Data.Repository;
|
||||
using Demo.domain.Models;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Demo.Domain.UseCase
|
||||
{
|
||||
public class UseCaseGeneratePresence
|
||||
{
|
||||
public readonly UserRepositoryImpl _userRepository;
|
||||
public readonly IPresenceRepository _presenceRepository;
|
||||
|
||||
public UseCaseGeneratePresence(UserRepositoryImpl userRepository, IPresenceRepository presenceRepository)
|
||||
{
|
||||
_userRepository = userRepository;
|
||||
_presenceRepository = presenceRepository;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<PresenceLocalEntity> GetPresenceByDateAndGroup(DateTime date, int groupId)
|
||||
{
|
||||
return _presenceRepository.GetPresenceByDateAndGroup(date, groupId);
|
||||
}
|
||||
|
||||
public void GeneratePresenceDaily(int firstLesson, int lastLesson, int groupId, DateTime currentDate)
|
||||
{
|
||||
var users = _userRepository.GetAllUsers.Where(u => u.GroupID == groupId).ToList();
|
||||
List<PresenceLocalEntity> presences = new List<PresenceLocalEntity>();
|
||||
for (int lessonNumber = firstLesson; lessonNumber <= lastLesson; lessonNumber++)
|
||||
{
|
||||
foreach (var user in users)
|
||||
{
|
||||
presences.Add(new PresenceLocalEntity
|
||||
{
|
||||
UserId = user.ID,
|
||||
Date = currentDate,
|
||||
LessonNumber = lessonNumber,
|
||||
IsAttedance = true
|
||||
});
|
||||
}
|
||||
_presenceRepository.SavePresence(presences);
|
||||
}
|
||||
}
|
||||
|
||||
public void GenerateWeeklyPresence(int firstLesson, int lastLesson, int groupId, DateTime startTime)
|
||||
{
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
DateTime currentTime = startTime.AddDays(i);
|
||||
GeneratePresenceDaily(firstLesson, lastLesson, groupId, currentTime);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Отметить пользователя как отсутствующего на диапазоне занятий
|
||||
public void MarkUserAbsentForLessons(int userId, int groupId, int firstLesson, int lastLesson, DateTime date)
|
||||
{
|
||||
var presences = _presenceRepository.GetPresenceByDateAndGroup(date, groupId);
|
||||
foreach (var presence in presences.Where(p => p.UserId == userId && p.LessonNumber >= firstLesson && p.LessonNumber <= lastLesson))
|
||||
{
|
||||
presence.IsAttedance = false;
|
||||
}
|
||||
_presenceRepository.SavePresence(presences);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -2,14 +2,18 @@
|
||||
using Demo.Domain.UseCase;
|
||||
using Demo.UI;
|
||||
|
||||
// Создаем экземпляр репозиториев
|
||||
GroupRepositoryImpl groupRepositoryImpl = new GroupRepositoryImpl();
|
||||
|
||||
UserRepositoryImpl userRepositoryImpl = new UserRepositoryImpl();
|
||||
PresenceRepositoryImpl presenceRepositoryImpl = new PresenceRepositoryImpl(); // Создаем экземпляр PresenceRepositoryImpl
|
||||
|
||||
// Создаем UseCase для пользователей и групп
|
||||
UserUseCase userUseCase = new UserUseCase(userRepositoryImpl, groupRepositoryImpl);
|
||||
|
||||
GroupUseCase groupUseCase = new GroupUseCase(groupRepositoryImpl);
|
||||
UseCaseGeneratePresence presenceUseCase = new UseCaseGeneratePresence(userRepositoryImpl, presenceRepositoryImpl);
|
||||
|
||||
MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase);
|
||||
// Создаем пользовательский интерфейс
|
||||
MainMenuUI mainMenuUI = new MainMenuUI(userUseCase, groupUseCase, presenceUseCase);
|
||||
|
||||
// Выводим главное меню
|
||||
mainMenuUI.DisplayMenu();
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Demo.Domain.UseCase;
|
||||
using Demo.domain.Models;
|
||||
using Demo.Domain.UseCase;
|
||||
using System;
|
||||
|
||||
namespace Demo.UI
|
||||
@ -7,11 +8,13 @@ namespace Demo.UI
|
||||
{
|
||||
private readonly UserConsoleUI _userConsoleUI;
|
||||
private readonly GroupConsoleUI _groupConsoleUI;
|
||||
private readonly PresenceConsole _presenceConsoleUI;
|
||||
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase)
|
||||
public MainMenuUI(UserUseCase userUseCase, GroupUseCase groupUseCase, UseCaseGeneratePresence presenceUseCase)
|
||||
{
|
||||
_userConsoleUI = new UserConsoleUI(userUseCase);
|
||||
_groupConsoleUI = new GroupConsoleUI(groupUseCase);
|
||||
_presenceConsoleUI = new PresenceConsole(presenceUseCase);
|
||||
}
|
||||
|
||||
public void DisplayMenu()
|
||||
@ -34,8 +37,13 @@ namespace Demo.UI
|
||||
Console.WriteLine("8. Изменить название группы");
|
||||
Console.WriteLine("9. Поиск группы по ID");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("0. Выход");
|
||||
Console.WriteLine("=-= Команды Presence =-=");
|
||||
Console.WriteLine("10. Сгенерировать посещаемость на день");
|
||||
Console.WriteLine("11. Сгенерировать посещаемость на неделю");
|
||||
Console.WriteLine("12. Показать посещаемость");
|
||||
Console.WriteLine("13. Отметить пользователя как отсутствующего");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("0. Выход");
|
||||
|
||||
Console.Write("\nВаш выбор: ");
|
||||
string comand = Console.ReadLine();
|
||||
@ -105,7 +113,7 @@ namespace Demo.UI
|
||||
case "7":
|
||||
// Удаление группы
|
||||
Console.Write("Введите ID группы для удаления: ");
|
||||
string groupIdForDelete=Console.ReadLine();
|
||||
string groupIdForDelete = Console.ReadLine();
|
||||
_groupConsoleUI.RemoveGroup(groupIdForDelete);
|
||||
break;
|
||||
|
||||
@ -127,11 +135,63 @@ namespace Demo.UI
|
||||
case "9":
|
||||
// Поиск группы
|
||||
Console.Write("Введите ID группы для поиска : ");
|
||||
if(int.TryParse(Console.ReadLine(), out int IdGroup)){
|
||||
if (int.TryParse(Console.ReadLine(), out int IdGroup))
|
||||
{
|
||||
_groupConsoleUI.FindGroupById(IdGroup);
|
||||
}
|
||||
break;
|
||||
|
||||
case "10":
|
||||
// Генерация посещаемости на день
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
int firstLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
int lastLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите ID группы: ");
|
||||
int groupIdForPresence = int.Parse(Console.ReadLine());
|
||||
|
||||
_presenceConsoleUI.GeneratePresenceForDay(DateTime.Now, groupIdForPresence, firstLesson, lastLesson);
|
||||
Console.WriteLine("Посещаемость на день сгенерирована.");
|
||||
break;
|
||||
|
||||
case "11":
|
||||
// Генерация посещаемости на неделю
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
int firstLessonForWeek = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
int lastLessonForWeek = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите ID группы: ");
|
||||
int groupIdForWeekPresence = int.Parse(Console.ReadLine());
|
||||
|
||||
_presenceConsoleUI.GeneratePresenceForWeek(DateTime.Now, groupIdForWeekPresence, firstLessonForWeek, lastLessonForWeek);
|
||||
Console.WriteLine("Посещаемость на неделю сгенерирована.");
|
||||
break;
|
||||
|
||||
case "12":
|
||||
// Отображение посещаемости
|
||||
Console.Write("Введите дату (гггг-мм-дд): ");
|
||||
DateTime date = DateTime.Parse(Console.ReadLine());
|
||||
Console.Write("Введите ID группы: ");
|
||||
int groupForPresenceView = int.Parse(Console.ReadLine());
|
||||
|
||||
_presenceConsoleUI.DisplayPresence(date, groupForPresenceView);
|
||||
break;
|
||||
|
||||
case "13":
|
||||
// Отметить пользователя как отсутствующего
|
||||
Console.Write("Введите ID пользователя: ");
|
||||
userId = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер первого занятия: ");
|
||||
int firstAbsLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите номер последнего занятия: ");
|
||||
int lastAbsLesson = int.Parse(Console.ReadLine());
|
||||
Console.Write("Введите ID группы: ");
|
||||
int absGroupId = int.Parse(Console.ReadLine());
|
||||
|
||||
_presenceConsoleUI.MarkUserAbsent(DateTime.Now, absGroupId, userId, firstAbsLesson, lastAbsLesson);
|
||||
Console.WriteLine("Пользователь отмечен как отсутствующий.");
|
||||
break;
|
||||
|
||||
case "0":
|
||||
Console.WriteLine("Выход...");
|
||||
return;
|
||||
|
86
Demo/UI/PresenceConsole.cs
Normal file
86
Demo/UI/PresenceConsole.cs
Normal file
@ -0,0 +1,86 @@
|
||||
using Demo.domain.Models;
|
||||
using Demo.Domain.UseCase;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Demo.UI
|
||||
{
|
||||
public class PresenceConsole
|
||||
{
|
||||
private readonly UseCaseGeneratePresence _presenceUseCase;
|
||||
|
||||
public PresenceConsole(UseCaseGeneratePresence presenceUseCase)
|
||||
{
|
||||
_presenceUseCase = presenceUseCase;
|
||||
}
|
||||
|
||||
// Метод для генерации посещаемости на день
|
||||
public void GeneratePresenceForDay(DateTime date, int groupId, int firstLesson, int lastLesson)
|
||||
{
|
||||
try
|
||||
{
|
||||
_presenceUseCase.GeneratePresenceDaily(firstLesson, lastLesson, groupId,date);
|
||||
Console.WriteLine("Посещаемость на день успешно сгенерирована.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Метод для генерации посещаемости на неделю
|
||||
public void GeneratePresenceForWeek(DateTime date, int groupId, int firstLesson, int lastLesson)
|
||||
{
|
||||
try
|
||||
{
|
||||
_presenceUseCase.GenerateWeeklyPresence(firstLesson, lastLesson, groupId, date);
|
||||
Console.WriteLine("Посещаемость на неделю успешно сгенерирована.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при генерации посещаемости: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
// Метод для отображения посещаемости на конкретную дату и группу
|
||||
public void DisplayPresence(DateTime date, int groupId)
|
||||
{
|
||||
try
|
||||
{
|
||||
List<PresenceLocalEntity> presences = _presenceUseCase.GetPresenceByDateAndGroup(date, groupId);
|
||||
|
||||
if (presences == null || presences.Count == 0)
|
||||
{
|
||||
Console.WriteLine("Посещаемость на выбранную дату отсутствует.");
|
||||
return;
|
||||
}
|
||||
|
||||
Console.WriteLine($"\nПосещаемость на {date.ToShortDateString()} для группы с ID {groupId}:");
|
||||
Console.WriteLine("---------------------------------------------");
|
||||
int a = presences[0].LessonNumber;
|
||||
foreach (var presence in presences)
|
||||
{
|
||||
if (a != presence.LessonNumber)
|
||||
{
|
||||
Console.WriteLine("---------------------------------------------");
|
||||
a=presence.LessonNumber;
|
||||
}
|
||||
string status = presence.IsAttedance ? "Присутствует" : "Отсутствует";
|
||||
Console.WriteLine($"Пользователь ID: {presence.UserId}, Занятие {presence.LessonNumber}: {status}");
|
||||
}
|
||||
Console.WriteLine("---------------------------------------------");
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine($"Ошибка при выводе посещаемости: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
public void MarkUserAbsent(DateTime date, int groupId, int userId, int firstLesson, int lastLesson)
|
||||
{
|
||||
_presenceUseCase.MarkUserAbsentForLessons(userId, groupId, firstLesson, lastLesson, date);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -14,7 +14,7 @@ using System.Reflection;
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("Demo")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6be91a3daa12e11afafcb7bfa8a381851a1c6d13")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+71b5a3c2837384ab3b6285a4c3d50906eb3b91cd")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("Demo")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("Demo")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
@ -1 +1 @@
|
||||
597fa958725b79051cce88e5b66d8ff3029ce88e040c90e31a5a5829fb266be4
|
||||
5088e77b146ea464a1056f1261a0d0e4064405ca4080bc9ab4bf224a506ec90b
|
||||
|
@ -8,6 +8,6 @@ build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = Demo
|
||||
build_property.ProjectDir = C:\Users\adm\source\repos\presence_new\Demo\
|
||||
build_property.ProjectDir = C:\Users\adm\Source\Repos\presence_new\Demo\
|
||||
build_property.EnableComHosting =
|
||||
build_property.EnableGeneratedComInterfaceComImportInterop =
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
ed5a8c36a17dc0ce1f0584a54124cf9ca5fb6a4c72ce3bba4b5a671138ebee45
|
||||
4ff1023a87b9461fc42766b66bdf7edceabf9645024b245c490a1e3cd9047155
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
9b1e2cf713fac6b5af6fdc748e02588a118e0108e8af9c39763b31b5c1f122c1
|
||||
94d3c7dec603eb068976231f8e3f6b7262a20ec3a72c6546c0039fab9f6d5f66
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,15 +1,15 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"C:\\Users\\adm\\source\\repos\\presence_new\\Demo\\Demo.csproj": {}
|
||||
"C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\Demo.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"C:\\Users\\adm\\source\\repos\\presence_new\\Demo\\Demo.csproj": {
|
||||
"C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\Demo.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "C:\\Users\\adm\\source\\repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"projectUniqueName": "C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"projectName": "Demo",
|
||||
"projectPath": "C:\\Users\\adm\\source\\repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"projectPath": "C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"packagesPath": "C:\\Users\\adm\\.nuget\\packages\\",
|
||||
"outputPath": "C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\obj\\",
|
||||
"projectStyle": "PackageReference",
|
||||
|
@ -1,8 +1,8 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "+PcSJ/mMOPQ=",
|
||||
"dgSpecHash": "eIAzK05HQQw=",
|
||||
"success": true,
|
||||
"projectFilePath": "C:\\Users\\adm\\source\\repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"projectFilePath": "C:\\Users\\adm\\Source\\Repos\\presence_new\\Demo\\Demo.csproj",
|
||||
"expectedPackageFiles": [],
|
||||
"logs": []
|
||||
}
|
Loading…
Reference in New Issue
Block a user