diff --git a/AccountManagement.Application.Contracts/Task/EditTask.cs b/AccountManagement.Application.Contracts/Task/EditTask.cs index 7769c629..f70c6706 100644 --- a/AccountManagement.Application.Contracts/Task/EditTask.cs +++ b/AccountManagement.Application.Contracts/Task/EditTask.cs @@ -21,4 +21,5 @@ public class EditTask:CreateTask public List AssignsLists { get; set; } public bool HasTicket { get; set; } public long TaskScheduleId { get; set; } + public bool HasRequest { get; set; } } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Task/TaskViewModel.cs b/AccountManagement.Application.Contracts/Task/TaskViewModel.cs index 30c4562b..56fa2fab 100644 --- a/AccountManagement.Application.Contracts/Task/TaskViewModel.cs +++ b/AccountManagement.Application.Contracts/Task/TaskViewModel.cs @@ -48,6 +48,7 @@ public class TaskViewModel public bool CanDelete { get; set; } public bool CanAssign { get; set; } public bool CanCheckRequests { get; set; } + public bool HasRequest { get; set; } public AssignViewModel AssignedReceiverViewModel { get; set; } public TaskScheduleType ScheduleType { get; set; } diff --git a/AccountManagement.Application.Contracts/TaskSchedule/TaskScheduleDetailsViewModel.cs b/AccountManagement.Application.Contracts/TaskSchedule/TaskScheduleDetailsViewModel.cs index 637f1fbb..12b40d31 100644 --- a/AccountManagement.Application.Contracts/TaskSchedule/TaskScheduleDetailsViewModel.cs +++ b/AccountManagement.Application.Contracts/TaskSchedule/TaskScheduleDetailsViewModel.cs @@ -15,6 +15,8 @@ public class TaskScheduleDetailsViewModel public string ContractingPartyName { get; set; } public string Title { get; set; } public string Description { get; set; } + public string Count { get; set; } + public string FirstEndTaskDate { get; set; } public List Medias { get; set; } } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs index 4a41b01e..84e805e5 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs @@ -106,14 +106,16 @@ public class TaskRepository : RepositoryBase, ITaskRepository { res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId) .EndTaskDate.ToFarsi(); - + var userAssign = res.AssignViewModels.First(x => x.AssignedId == userId); res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList(); - res.IsDone = res.AssignViewModels.First(x => x.AssignedId == userId).IsDone; - res.IsCancel = res.AssignViewModels.First(x => x.AssignedId == userId).IsCancel; + res.IsDone = userAssign.IsDone; + res.IsCancel = userAssign.IsCancel; + res.HasRequest = userAssign.IsCanceledRequest || userAssign.TimeRequest || + userAssign.IsDoneRequest; } - if (res.TaskScheduleId>0) + if (res.TaskScheduleId > 0) { var taskSchedule = _accountContext.TaskSchedules.FirstOrDefault(x => x.id == res.TaskScheduleId); @@ -121,7 +123,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository res.ScheduleType = taskSchedule.Type; res.ScheduleCount = taskSchedule.Count; res.ScheduleUnitNumber = taskSchedule.UnitNumber; - } + } //_accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask() @@ -160,8 +162,6 @@ public class TaskRepository : RepositoryBase, ITaskRepository Remove(task); } - - public List GetRequestedTasks(TaskSearchModel searchModel) { var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); @@ -900,7 +900,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -1229,7 +1229,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -1788,7 +1788,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -2056,7 +2056,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository TaskScheduleId = x.TaskScheduleId - }).ToList(); + }).ToList(); final = final.Select(x => new TaskViewModel() @@ -2082,7 +2082,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -2095,7 +2095,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository ScheduleUnitType = x.ScheduleUnitType, TaskScheduleId = x.TaskScheduleId - }).ToList(); + }).ToList(); final = final.Select(x => new TaskViewModel() { @@ -2149,12 +2149,15 @@ public class TaskRepository : RepositoryBase, ITaskRepository ScheduleUnitType = x.ScheduleUnitType, TaskScheduleId = x.TaskScheduleId - }).ToList(); + }).ToList(); return final; } - public string SetTasksColors(DateTime date, bool isCancel) + public string SetTasksColors(DateTime date, bool isCancel, bool hasRequest) { + if (hasRequest) + return "red"; + if (isCancel) { //return "brown"; @@ -2390,7 +2393,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository public List GetTasksByTaskScheduleId(long taskScheduleId) { - return _accountContext.Tasks.Include(x=>x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList(); + return _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList(); } @@ -2658,7 +2661,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, false), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -2722,6 +2725,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository { var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var today = DateTime.Today; var emptyAcc = new AccountViewModel() { Fullname = "-", @@ -2731,7 +2735,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository var raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias) .ThenInclude(x => x.Media) .Where(x => - x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null); + x.Task.IsActiveString == "true" && x.AssignedId == accountId && x.Task.TicketId == null); if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) { raw = raw.Where(x => @@ -2764,6 +2768,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), Description = x.Task.Description, IsDoneRequest = x.IsDoneRequest, + }); if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) { @@ -2802,7 +2807,8 @@ public class TaskRepository : RepositoryBase, ITaskRepository ContractingPartyName = x.ContractingPartyName, MediaCount = x.MediaCount, Description = x.Description, - IsDoneRequest = x.IsDoneRequest + IsDoneRequest = x.IsDoneRequest, + HasRequest = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest }); if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) { @@ -2871,8 +2877,10 @@ public class TaskRepository : RepositoryBase, ITaskRepository } - var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) - .ThenBy(x => x.EndTaskDateGE); + var orderResult = result.OrderBy(x => x.IsDone || x.IsCancel) + .ThenByDescending(x => x.EndTaskDateGE <= today.AddDays(1) && !x.HasRequest) + .ThenByDescending(x => x.HasRequest) + .ThenBy(x => x.EndTaskDateGE); // مرتب‌سازی داخلی بر اساس تاریخ var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); @@ -2906,7 +2914,8 @@ public class TaskRepository : RepositoryBase, ITaskRepository MediaCount = x.MediaCount, SelfName = x.SelfName, Description = x.Description, - IsDoneRequest = x.IsDoneRequest + IsDoneRequest = x.IsDoneRequest, + HasRequest = x.IsDoneRequest || x.RequestTime || x.IsCancelRequest }).ToList(); @@ -2934,7 +2943,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AcceptedTimeRequest = x.AcceptedTimeRequest, IsCancelRequest = x.IsCancelRequest, ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel, x.HasRequest), MediaCount = x.MediaCount, HasAttachment = x.MediaCount > 0, SelfName = x.SelfName, @@ -2993,6 +3002,7 @@ public class TaskRepository : RepositoryBase, ITaskRepository AssignedName = "-", AssignedPositionValue = 0 }, + HasRequest = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest }).ToList(); return final; } diff --git a/AccountMangement.Infrastructure.EFCore/Repository/TaskScheduleRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/TaskScheduleRepository.cs index 7228b20b..6563e91d 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/TaskScheduleRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/TaskScheduleRepository.cs @@ -3,25 +3,26 @@ 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, ITaskScheduleRepository +public class TaskScheduleRepository : RepositoryBase, ITaskScheduleRepository { private readonly AccountContext _accountContext; - public TaskScheduleRepository(AccountContext accountContext):base(accountContext) + public TaskScheduleRepository(AccountContext accountContext) : base(accountContext) { _accountContext = accountContext; } public async Task 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); + 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; @@ -29,7 +30,7 @@ public class TaskScheduleRepository: RepositoryBase, ITaskSc var firstTaskDetails = taskSchedule.TasksList.First(); - var firstTimeAssigns = firstTaskDetails.Assigns.Where(x=>x.FirstTimeCreation).ToList(); + var firstTimeAssigns = firstTaskDetails.Assigns.Where(x => x.FirstTimeCreation).ToList(); var assignedIds = firstTimeAssigns.Select(x => x.AssignedId).ToList(); @@ -46,13 +47,15 @@ public class TaskScheduleRepository: RepositoryBase, ITaskSc Title = firstTaskDetails.Title, Description = firstTaskDetails.Description, ContractingPartyName = firstTaskDetails.ContractingPartyName, - AssignedName = assignedAccounts.Select(x=>x.Fullname).ToList(), + AssignedName = assignedAccounts.Select(x => x.Fullname).ToList(), CreationDateFa = firstTaskDetails.CreationDate.ToFarsi(), SenderName = sender.Fullname, TaskScheduleType = taskSchedule.Type, TaskScheduleUnitType = taskSchedule.UnitType, UnitNumber = taskSchedule.UnitNumber, - Medias = firstTaskDetails.TaskMedias.Select(x=> new MediaViewModel() + 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, diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml index 4cd285ab..65aa5658 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml @@ -273,8 +273,10 @@ - - @if (userId == Model.SenderId) + + @if (!Model.HasRequest) + { + @if (userId == Model.SenderId) { @@ -288,6 +290,7 @@ } + } } diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsScheduleModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsScheduleModal.cshtml index 400dd8fc..8116cd74 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsScheduleModal.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsScheduleModal.cshtml @@ -25,6 +25,10 @@ } @@ -48,78 +75,93 @@