69 lines
2.7 KiB
C#
69 lines
2.7 KiB
C#
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using _0_Framework.Application;
|
|
using _0_Framework.InfraStructure;
|
|
using AccountManagement.Application.Contracts.Media;
|
|
using AccountManagement.Application.Contracts.Task;
|
|
using AccountManagement.Application.Contracts.TaskSchedule;
|
|
using AccountManagement.Domain.TaskScheduleAgg;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
|
|
|
public class TaskScheduleRepository : RepositoryBase<long, TaskSchedule>, ITaskScheduleRepository
|
|
{
|
|
private readonly AccountContext _accountContext;
|
|
|
|
public TaskScheduleRepository(AccountContext accountContext) : base(accountContext)
|
|
{
|
|
_accountContext = accountContext;
|
|
}
|
|
|
|
public async Task<TaskScheduleDetailsViewModel> GetDetails(long id)
|
|
{
|
|
var taskSchedule = await _accountContext.TaskSchedules.Include(x => x.TasksList).ThenInclude(x => x.Assigns)
|
|
.Include(x => x.TasksList).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media).FirstOrDefaultAsync(x => x.id == id);
|
|
if (taskSchedule == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var firstTaskDetails = taskSchedule.TasksList.First();
|
|
|
|
var firstTimeAssigns = firstTaskDetails.Assigns.Where(x => x.FirstTimeCreation).ToList();
|
|
|
|
var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList();
|
|
|
|
var senderId = firstTaskDetails.SenderId;
|
|
|
|
|
|
var assignedAccounts = await _accountContext.Accounts.Where(x => assignedIds.Contains(x.id)).ToListAsync();
|
|
|
|
var sender =
|
|
await _accountContext.Accounts.FirstOrDefaultAsync(x => senderId == x.id);
|
|
|
|
var viewModel = new TaskScheduleDetailsViewModel()
|
|
{
|
|
Title = firstTaskDetails.Title,
|
|
Description = firstTaskDetails.Description,
|
|
ContractingPartyName = firstTaskDetails.ContractingPartyName,
|
|
AssignedName = assignedAccounts.Select(x => x.Fullname).ToList(),
|
|
CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(),
|
|
SenderName = sender.Fullname,
|
|
TaskScheduleType = taskSchedule.Type,
|
|
TaskScheduleUnitType = taskSchedule.UnitType,
|
|
UnitNumber = taskSchedule.UnitNumber,
|
|
Count = taskSchedule.Type == TaskScheduleType.Limited ? taskSchedule.Count : "نامحدود",
|
|
FirstEndTaskDate = firstTaskDetails.Assigns.FirstOrDefault()?.EndTaskDate.ToFarsi() ?? "",
|
|
Medias = firstTaskDetails.TaskMedias.Select(x => new MediaViewModel()
|
|
{
|
|
Category = x.Media.Category,
|
|
Id = x.MediaId,
|
|
Type = x.Media.Type,
|
|
Path = x.Media.Path,
|
|
}).ToList(),
|
|
};
|
|
return viewModel;
|
|
|
|
}
|
|
} |