diff --git a/0_Framework/Application/Version.cs b/0_Framework/Application/Version.cs index 28a10db0..7dc68f86 100644 --- a/0_Framework/Application/Version.cs +++ b/0_Framework/Application/Version.cs @@ -10,8 +10,8 @@ public static class Version { static Version() { - StyleVersion = "2.11.24"; - AdminVersion = "2.5.9"; + StyleVersion = "2.11.26"; + AdminVersion = "2.5.11"; CameraVersion = "1.0.3"; } diff --git a/AccountManagement.Application.Contracts/Task/ITaskApplication.cs b/AccountManagement.Application.Contracts/Task/ITaskApplication.cs index 2b615c05..39d18075 100644 --- a/AccountManagement.Application.Contracts/Task/ITaskApplication.cs +++ b/AccountManagement.Application.Contracts/Task/ITaskApplication.cs @@ -18,8 +18,13 @@ public interface ITaskApplication EditTask GetDetails(long taskId); //گرفتن تمامی وظایف List GetTasks(TaskSearchModel searchModel); - // گرفتن مهلت برای یک وظیفه - OperationResult CreateRequestTime(CreateTaskTimeRequest command); + List GetSelfTasks(TaskSearchModel searchModel); + List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel); + List GetReceivedTasks(TaskSearchModel searchModel); + List GetSentTasks(TaskSearchModel searchModel); + + // گرفتن مهلت برای یک وظیفه + OperationResult CreateRequestTime(CreateTaskTimeRequest command); //تایید مهلت وظیفه OperationResult AcceptRequestDatetime(long taskId); OperationResult RejectTimeRequest(long taskId); diff --git a/AccountManagement.Application.Contracts/Task/TaskViewModel.cs b/AccountManagement.Application.Contracts/Task/TaskViewModel.cs index d1735009..9cbafc26 100644 --- a/AccountManagement.Application.Contracts/Task/TaskViewModel.cs +++ b/AccountManagement.Application.Contracts/Task/TaskViewModel.cs @@ -36,6 +36,7 @@ public class TaskViewModel public string ContractingPartyName { get; set; } public string? Description { get; set; } public AccountViewModel Sender { get; set; } + public string Assigner { get; set; } public string SelfName { get; set; } public long SenderId { get; set; } @@ -47,5 +48,9 @@ public class TaskViewModel public bool SelfAssigned { get; set; } public long AssignerId { get; set; } public long AssignedId { get; set; } + public bool CanEdit { get; set; } + public bool CanDelete { get; set; } + public bool CanAssign { get; set; } + public bool CanCheckRequests { get; set; } } \ No newline at end of file diff --git a/AccountManagement.Application/AccountManagement.Application.csproj b/AccountManagement.Application/AccountManagement.Application.csproj index ba993817..1d0d8fd6 100644 --- a/AccountManagement.Application/AccountManagement.Application.csproj +++ b/AccountManagement.Application/AccountManagement.Application.csproj @@ -1,4 +1,4 @@ - + net8.0 @@ -7,6 +7,8 @@ + + diff --git a/AccountManagement.Application/TaskApplication.cs b/AccountManagement.Application/TaskApplication.cs index c8dc7243..e9608a7b 100644 --- a/AccountManagement.Application/TaskApplication.cs +++ b/AccountManagement.Application/TaskApplication.cs @@ -10,9 +10,10 @@ using AccountManagement.Domain.AssignAgg; using AccountManagement.Domain.MediaAgg; using AccountManagement.Domain.TaskAgg; using IPE.SmsIrClient.Models.Results; -using Microsoft.AspNetCore.Http; using TaskManager.Domain.PositionAgg; using System.Reflection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; namespace AccountManagement.Application; @@ -24,9 +25,11 @@ public class TaskApplication : ITaskApplication private readonly IPositionRepository _positionRepository; private readonly IAssignRepository _assignRepository; private readonly IHttpContextAccessor _contextAccessor; + private readonly IWebHostEnvironment _webHostEnvironment; + private readonly IAuthHelper _authHelper; - public TaskApplication(ITaskRepository taskRepository, IAccountRepository accountRepository, IMediaRepository mediaRepository, IAssignRepository assignRepository, IHttpContextAccessor contextAccessor, IPositionRepository positionRepository) + public TaskApplication(ITaskRepository taskRepository, IAccountRepository accountRepository, IMediaRepository mediaRepository, IAssignRepository assignRepository, IHttpContextAccessor contextAccessor, IPositionRepository positionRepository, IWebHostEnvironment webHostEnvironment, IAuthHelper authHelper) { _taskRepository = taskRepository; _accountRepository = accountRepository; @@ -34,6 +37,8 @@ public class TaskApplication : ITaskApplication _assignRepository = assignRepository; _contextAccessor = contextAccessor; _positionRepository = positionRepository; + _webHostEnvironment = webHostEnvironment; + _authHelper = authHelper; } //غیرفعال سازی تسک public OperationResult DeActiveTask(long TaskId) @@ -127,12 +132,45 @@ public class TaskApplication : ITaskApplication if (sender.Position.PositionValue < posValue) { return operation.Failed("شما حق ویرایش این وظیفه را ندارید"); + } + var receivers = _accountRepository.GetAccountsByIds(command.ReceiverId); + + if (sender.Position.PositionValue == 1) + { + + } + + else if (receivers.Any(x => sender.Position.PositionValue >= x.Position.PositionValue)) + { + var checkReceiver = receivers.Where(x => sender.Position.PositionValue >= x.Position.PositionValue).ToList(); + if (checkReceiver.All(x => x.id == sender.id)) + { + + } + else + { + return operation.Failed("شما نمیتوانید به سطح بالاتر خود یا هم سطح خود وظیفه ای دهید"); + } + + } + else if (receivers.Count == 1 && receivers.Any(x => sender.id == x.id)) + { + } var task = _taskRepository.Get(command.Id); var endTask = command.EndTaskDate.ToGeorgianDateTime(); + task.Edit(command.Title, endTask, command.Description, command.SenderId, command.ContractingPartyName); _taskRepository.SaveChanges(); - + _assignRepository.RemoveRangeAssigns(task.id); + foreach (var receiver in receivers) + { + var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, + receiver.Fullname, + receiver.Position.PositionValue); + _assignRepository.Create(assign); + } + _assignRepository.SaveChanges(); #region ChangeMedias @@ -162,7 +200,7 @@ public class TaskApplication : ITaskApplication if (command.Document1?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -185,7 +223,7 @@ public class TaskApplication : ITaskApplication } if (command.Document2?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -208,7 +246,7 @@ public class TaskApplication : ITaskApplication } if (command.Document3?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -231,7 +269,7 @@ public class TaskApplication : ITaskApplication } if (command.Document4?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -254,7 +292,7 @@ public class TaskApplication : ITaskApplication } if (command.Document5?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -277,7 +315,7 @@ public class TaskApplication : ITaskApplication } if (command.Document6?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -308,7 +346,7 @@ public class TaskApplication : ITaskApplication if (command.Voice?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -468,7 +506,7 @@ public class TaskApplication : ITaskApplication if (command.Document1?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -488,7 +526,7 @@ public class TaskApplication : ITaskApplication } if (command.Document2?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -508,7 +546,7 @@ public class TaskApplication : ITaskApplication } if (command.Document3?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -528,7 +566,7 @@ public class TaskApplication : ITaskApplication } if (command.Document4?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -548,8 +586,8 @@ public class TaskApplication : ITaskApplication } if (command.Document5?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", - "Task", $"{task.id}"); + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", + "Task", $"{task.id}"); Directory.CreateDirectory(path); string filepath = Path.Combine(path, command.Document5.FileName); @@ -568,7 +606,7 @@ public class TaskApplication : ITaskApplication } if (command.Document6?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -595,7 +633,7 @@ public class TaskApplication : ITaskApplication if (command.Voice?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -678,8 +716,8 @@ public class TaskApplication : ITaskApplication if (command.Document1?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", - "Task", $"{task.id}"); + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", + "Task", $"{task.id}"); Directory.CreateDirectory(path); string filepath = Path.Combine(path, command.Document1.FileName); @@ -698,7 +736,7 @@ public class TaskApplication : ITaskApplication } if (command.Document2?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -718,7 +756,7 @@ public class TaskApplication : ITaskApplication } if (command.Document3?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -738,8 +776,8 @@ public class TaskApplication : ITaskApplication } if (command.Document4?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", - "Task", $"{task.id}"); + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", + "Task", $"{task.id}"); Directory.CreateDirectory(path); string filepath = Path.Combine(path, command.Document4.FileName); @@ -758,7 +796,7 @@ public class TaskApplication : ITaskApplication } if (command.Document5?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -778,8 +816,8 @@ public class TaskApplication : ITaskApplication } if (command.Document6?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", - "Task", $"{task.id}"); + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", + "Task", $"{task.id}"); Directory.CreateDirectory(path); string filepath = Path.Combine(path, command.Document6.FileName); @@ -805,7 +843,7 @@ public class TaskApplication : ITaskApplication if (command.Voice?.Length > 0) { - var path = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).FullName, "ServiceHost", "Storage", + var path = Path.Combine($"{_webHostEnvironment.ContentRootPath}", "Storage", "Task", $"{task.id}"); Directory.CreateDirectory(path); @@ -842,9 +880,31 @@ public class TaskApplication : ITaskApplication return test; } + + public List GetSelfTasks(TaskSearchModel searchModel) + { + return _taskRepository.GetSelfTasks(searchModel); + } + + public List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel) + { + return _taskRepository.GetAllNotSelfIncludedTasks(searchModel); + } + + public List GetReceivedTasks(TaskSearchModel searchModel) + { + return _taskRepository.GetReceivedTasks(searchModel); + } + + public List GetSentTasks(TaskSearchModel searchModel) + { + return _taskRepository.GetSentTasks(searchModel); + } + //ساخت درخواست مهلت public OperationResult CreateRequestTime(CreateTaskTimeRequest command) { + var accountId = _authHelper.CurrentAccountId(); var operation = new OperationResult(); if (command.TaskId == 0) { @@ -860,10 +920,19 @@ public class TaskApplication : ITaskApplication { return operation.Failed("مهلت درخواستی خود را وارد کنید"); } - + + var task = _taskRepository.Get(command.TaskId); var requestTime = command.RequestTime.ToGeorgianDateTime(); - task.CreateTimeRequest(requestTime, command.Description); + if (task.SenderId==accountId) + { + task.ChangeTimeTask(requestTime); + } + else + { + task.CreateTimeRequest(requestTime, command.Description); + } + _taskRepository.SaveChanges(); return operation.Succcedded(task.id); } @@ -893,6 +962,7 @@ public class TaskApplication : ITaskApplication //ساخت درخواست کنسل public OperationResult CreateCancelRequest(CreateTaskCancel command) { + var accountId = _authHelper.CurrentAccountId(); var operation = new OperationResult(); if (string.IsNullOrWhiteSpace(command.Description)) { @@ -905,6 +975,10 @@ public class TaskApplication : ITaskApplication } var task = _taskRepository.Get(command.TaskId); task.CreateCancelRequest(command.Description); + if (task.SenderId==accountId) + { + task.AcceptCancelRequest(); + } _taskRepository.SaveChanges(); return operation.Succcedded(task.id); } @@ -928,6 +1002,7 @@ public class TaskApplication : ITaskApplication //انجام شدن تسک public OperationResult CreateCompleteTaskRequest(CompleteTaskViewModel command) { + var accountId = _authHelper.CurrentAccountId(); var operation = new OperationResult(); if (!_taskRepository.Exists(x => x.id == command.Id)) { @@ -935,6 +1010,10 @@ public class TaskApplication : ITaskApplication } var task = _taskRepository.Get(command.Id); task.CompleteRequest(command.Description); + if (task.SenderId==accountId) + { + task.Completed(); + } _taskRepository.SaveChanges(); return operation.Succcedded(task.id); } diff --git a/AccountManagement.Domain/AssignAgg/IAssignRepository.cs b/AccountManagement.Domain/AssignAgg/IAssignRepository.cs index 2efea309..8a8bdef1 100644 --- a/AccountManagement.Domain/AssignAgg/IAssignRepository.cs +++ b/AccountManagement.Domain/AssignAgg/IAssignRepository.cs @@ -8,5 +8,6 @@ public interface IAssignRepository:IRepository { List GetAssignsByTaskId(long id); - + void RemoveRangeAssigns(long taskId); + } \ No newline at end of file diff --git a/AccountManagement.Domain/TaskAgg/ITaskRepository.cs b/AccountManagement.Domain/TaskAgg/ITaskRepository.cs index e3061ecc..4d8469b6 100644 --- a/AccountManagement.Domain/TaskAgg/ITaskRepository.cs +++ b/AccountManagement.Domain/TaskAgg/ITaskRepository.cs @@ -8,14 +8,18 @@ namespace AccountManagement.Domain.TaskAgg; public interface ITaskRepository:IRepository { EditTask GetDetails(long TaskId); - void Remove(long id); //گرفتن تمامی وظایف List GetTasks(TaskSearchModel searchModel); List GetAllRequestedTasks(TaskSearchModel searchModel); + List GetSelfTasks(TaskSearchModel searchModel); + List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel); + List GetReceivedTasks(TaskSearchModel searchModel); + List GetSentTasks(TaskSearchModel searchModel); string SetTasksColors(DateTime time,bool isCancel); int GetRequestedTasksCount(); TaskViewModel GetRequestDetails(long id); + diff --git a/AccountMangement.Infrastructure.EFCore/Repository/AssignRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/AssignRepository.cs index 5e53ab97..2ae0c0cc 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/AssignRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/AssignRepository.cs @@ -27,4 +27,11 @@ public class AssignRepository :RepositoryBase,IAssignRepository AssignedName = x.AssignedName }).ToList(); } + + public void RemoveRangeAssigns( long taskId) + { + var assigns= _taskManagerContext.Assigns.Where(x => x.TaskId == taskId); + _taskManagerContext.RemoveRange(assigns); + _taskManagerContext.SaveChanges(); + } } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs index cddd4839..844fab90 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs @@ -13,89 +13,89 @@ namespace TaskManager.Infrastructure.EFCore.Repository; public class PositionRepository : RepositoryBase, IPositionRepository { - private readonly AccountContext _accountContext; - private readonly IHttpContextAccessor _contextAccessor; + private readonly AccountContext _accountContext; + private readonly IHttpContextAccessor _contextAccessor; - public PositionRepository(AccountContext accountContext, IHttpContextAccessor contextAccessor) : base(accountContext) - { - _accountContext = accountContext; - _contextAccessor = contextAccessor; - } + public PositionRepository(AccountContext accountContext, IHttpContextAccessor contextAccessor) : base(accountContext) + { + _accountContext = accountContext; + _contextAccessor = contextAccessor; + } - public List GetPositions() - { - // این متد تمام سمت ها را بدست می آورد - return _accountContext.Positions.Select(x => new PositionViewModel() - { - Value = x.PositionValue, - Id = x.id, - Name = x.PositionName, - CountUsers = _accountContext.Accounts.Count(a => a.PositionId==x.id) + public List GetPositions() + { + // این متد تمام سمت ها را بدست می آورد + return _accountContext.Positions.Select(x => new PositionViewModel() + { + Value = x.PositionValue, + Id = x.id, + Name = x.PositionName, + CountUsers = _accountContext.Accounts.Count(a => a.PositionId == x.id) - }).OrderBy(x=>x.Value).ToList(); + }).OrderBy(x => x.Value).ToList(); - } + } - public List GetLowerPosition() - { - var posValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); - return _accountContext.Positions.Where(x=>x.PositionValue>posValue).Select(x => new PositionViewModel() - { - Value = x.PositionValue, - Id = x.id, - Name = x.PositionName + public List GetLowerPosition() + { + var posValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + return _accountContext.Positions.Where(x => x.PositionValue > posValue).Select(x => new PositionViewModel() + { + Value = x.PositionValue, + Id = x.id, + Name = x.PositionName - }).OrderBy(x => x.Value).ToList(); - } + }).OrderBy(x => x.Value).ToList(); + } - public List GetUnUsedPositionValues() - { - List values= new List() {1,2,3,4,5}; - var usedPositions= _accountContext.Positions.Select(x => x.PositionValue).ToList(); - return values.Where(x => !usedPositions.Contains(x)).ToList(); - } + public List GetUnUsedPositionValues() + { + List values = new List() { 1, 2, 3, 4, 5 }; + var usedPositions = _accountContext.Positions.Select(x => x.PositionValue).ToList(); + return values.Where(x => !usedPositions.Contains(x)).ToList(); + } - //لیست کسانی که سمتی برایشان ثبت نشده است - public List GetNoPositionAccounts() - { - - return _accountContext.Accounts.Where(x => x.PositionId == null).Select(x => new AccountViewModel() - { - Id = x.id, - Fullname = x.Fullname - }).ToList(); - } + //لیست کسانی که سمتی برایشان ثبت نشده است + public List GetNoPositionAccounts() + { - public List GetAccountsByIds(List ids) - { - var res =_accountContext.Accounts.Include(x=>x.Position).Where(x => x.PositionId != null); - return res.Where(x => ids.Contains((long)x.PositionId)).ToList(); - } + return _accountContext.Accounts.Where(x => x.PositionId == null && x.IsActiveString == "true" && x.AdminAreaPermission == "true").Select(x => new AccountViewModel() + { + Id = x.id, + Fullname = x.Fullname + }).ToList(); + } - public void Remove(long id) - { - var position =Get(id); - Remove(position); - } + public List GetAccountsByIds(List ids) + { + var res = _accountContext.Accounts.Include(x => x.Position).Where(x => x.PositionId != null); + return res.Where(x => ids.Contains((long)x.PositionId)).ToList(); + } - public int GetLastPositionValue() - { - if (!_accountContext.Positions.Any()) - { - return 1; - } - else - { - return _accountContext.Positions.Max(x => x.PositionValue); + public void Remove(long id) + { + var position = Get(id); + Remove(position); + } - } - - } + public int GetLastPositionValue() + { + if (!_accountContext.Positions.Any()) + { + return 1; + } + else + { + return _accountContext.Positions.Max(x => x.PositionValue); + + } + + } } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs index 0abddfca..8eec5608 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs @@ -11,683 +11,1812 @@ using AccountManagement.Application.Contracts.Media; using AccountManagement.Application.Contracts.Task; using AccountManagement.Domain.AccountAgg; using AccountManagement.Domain.TaskAgg; +using TaskManager.Domain.PositionAgg; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; +using Microsoft.Identity.Client; namespace AccountMangement.Infrastructure.EFCore.Repository; public class TaskRepository : RepositoryBase, ITaskRepository { - private readonly AccountContext _accountContext; - private readonly IHttpContextAccessor _contextAccessor; - private readonly IAccountRepository _accountRepository; + private readonly AccountContext _accountContext; + private readonly IHttpContextAccessor _contextAccessor; + private readonly IAccountRepository _accountRepository; + public readonly IPositionRepository _PositionRepository; - public TaskRepository(IHttpContextAccessor contextAccessor, AccountContext accountContext, - IAccountRepository accountRepository) : base(accountContext) - { - _contextAccessor = contextAccessor; - _accountContext = accountContext; - _accountRepository = accountRepository; - } + public TaskRepository(IHttpContextAccessor contextAccessor, AccountContext accountContext, + IAccountRepository accountRepository, IPositionRepository positionRepository) : base(accountContext) + { + _contextAccessor = contextAccessor; + _accountContext = accountContext; + _accountRepository = accountRepository; + _PositionRepository = positionRepository; + } - public EditTask GetDetails(long TaskId) - { + public EditTask GetDetails(long TaskId) + { - return _accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask() - { - EndTaskDate = x.EndTaskDate.ToFarsi(), - Description = x.Description, - Id = x.id, - Title = x.Title, - medias = _accountContext.TaskMedias.Include(z => z.Media).Where(e => e.TaskId == x.id).Select(m => - new MediaViewModel() - { - Path = m.Media.Path, - Type = m.Media.Type, - Category = m.Media.Category, - Id = m.Media.id - }).ToList(), - EndTaskTime = x.EndTaskDate.ToFarsiFull().Substring(11), - ContractingPartyName = x.ContractingPartyName, - CompleteDescription = x.DoneDescription, - IsDone = x.IsDone, - ReceiverId = _accountContext.Assigns.Where(a=>a.TaskId==x.id).Select(a=>a.AssignedId).ToList(), - SenderId = x.SenderId + return _accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask() + { + EndTaskDate = x.EndTaskDate.ToFarsi(), + Description = x.Description, + Id = x.id, + Title = x.Title, + medias = _accountContext.TaskMedias.Include(z => z.Media).Where(e => e.TaskId == x.id).Select(m => + new MediaViewModel() + { + Path = m.Media.Path, + Type = m.Media.Type, + Category = m.Media.Category, + Id = m.Media.id + }).ToList(), + EndTaskTime = x.EndTaskDate.ToFarsiFull().Substring(11), + ContractingPartyName = x.ContractingPartyName, + CompleteDescription = x.DoneDescription, + IsDone = x.IsDone, + ReceiverId = _accountContext.Assigns.Where(a => a.TaskId == x.id).Select(a => a.AssignedId).ToList(), + SenderId = x.SenderId - }).FirstOrDefault(); - } + }).FirstOrDefault(); + } - public void Remove(long id) - { - var task=Get(id); - Remove(task); - } + public void Remove(long id) + { + var task = Get(id); + Remove(task); + } - public List GetAllRequestedTasks(TaskSearchModel searchModel) - { - var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); - var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); - var emptyAcc = new AccountViewModel() - { - Fullname = "-", - PositionValue = 0 - }; - var query = _accountContext.Assigns.Include(x => x.Task).Where(x => - x.Task.IsDone == false && x.Task.IsActiveString == "true" && - (x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).Select(x => - new TaskViewModel() - { + public List GetAllRequestedTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + IQueryable query; - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), - IsDone = x.Task.IsDone, - EndTaskDateGE = x.Task.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.Task.IsCanceledRequest, - RequestTime = x.Task.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.Task.IsCancel, - AcceptedTimeRequest = x.Task.AcceptedTimeRequest, - IsCancelRequest = x.Task.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), - Description = x.Task.Description, - IsDoneRequest = x.Task.IsDoneRequest + if (positionValue == 1) + { + query = _accountContext.Assigns.Include(x => x.Task).Where(x => + x.Task.IsDone == false && x.Task.IsActiveString == "true" && + (x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true || x.Task.IsDoneRequest)).Select(x => + new TaskViewModel() + { - }); - //res = res.GroupBy(x => x.Id).Select(x => x.First()); - //res = res.OrderBy(x => x.IsDone ? 1 : 0) - // .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest - var res = query.Select(x => new TaskViewModel() - { - Sender = x.AssignerId == accountId - ? _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() - { - PositionValue = a.Position.PositionValue, - Id = a.id, - Fullname = a.Fullname, - }).FirstOrDefault(a => a.Id == x.AssignerId) : _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() - { - PositionValue = a.Position.PositionValue, - Id = a.id, - Fullname = a.Fullname, - }).FirstOrDefault(a => a.Id == x.AssignerId), + }); + } + else + { + query = _accountContext.Assigns.Include(x => x.Task).Where(x => + !x.Task.IsDone && x.Task.IsActiveString == "true" && + (x.Task.IsCanceledRequest || x.Task.TimeRequest || x.Task.IsDoneRequest) && (accountId == x.Task.SenderId || positionValue < x.AssignerPositionValue)).Select(x => + new TaskViewModel() + { - SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest - Assigned = - x.AssignedId == accountId ? - ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) - .ToList(), - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - MediaCount = x.MediaCount, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }); - if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) - { - var start = searchModel.StartDate.ToGeorgianDateTime(); - var end = searchModel.EndDate.ToGeorgianDateTime(); - res = res.Where(x => - ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + }); + } + //res = res.GroupBy(x => x.Id).Select(x => x.First()); + //res = res.OrderBy(x => x.IsDone ? 1 : 0) + // .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); - (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), - (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, - (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); - } + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) - { - bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); - res = res.Where(x => x.IsDoneRequest == isDoneReq); - } + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) - { - bool isDone = bool.Parse(searchModel.IsDone); - res = res.Where(x => x.IsDone == isDone); - } + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) - { - bool isCancel = bool.Parse(searchModel.IsCanceled); - res = res.Where(x => x.IsCancel == isCancel); - } + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) - { - bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); - res = res.Where(x => x.RequestTime == isTimeRequest); - } + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } - if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) - { - res = res.Where(x => x.AcceptedTimeRequest > 0); - } + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) - { - bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); - res = res.Where(x => x.IsCancelRequest == isCancelReq); + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); - } + } - var resEnum = res.AsEnumerable(); - var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); - if (searchModel.AccountId > 0) - { - result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); - } + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } - var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0) - .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); - var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); - final = final.Select(x => new TaskViewModel() - { - AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) - .Select(a => new AssignViewModel() - { - AssignedName = a.Fullname, - AssignedPositionValue = a.Position.PositionValue - }).ToList(), - Sender = x.Sender.Id == accountId ? emptyAcc : x.Sender, - SelfAssigner = x.Sender.Id == accountId ? true : false, - Assigned = x.Assigned, - SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - MediaCount = x.MediaCount, - SelfName = x.SelfName, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest, + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, - }).ToList(); + }).ToList(); - final = final.Select(x => new TaskViewModel() - { + final = final.Select(x => new TaskViewModel() + { - AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() - { - AssignViewModels = a.ToList(), - PosValue = a.Key - }).ToList() - : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() - { - AssignViewModels = a.ToList(), - PosValue = a.Key - }).ToList(), - Sender = x.Sender, - Assigned = x.Assigned, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - Color = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest ? SetRequestTasksColors(x.RequestTime, x.IsCancelRequest,x.IsDoneRequest) : "", - MediaCount = x.MediaCount, - HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0), - SelfName = x.SelfName, - SelfAssigned = x.SelfAssigned, - SelfAssigner = x.SelfAssigner, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }).ToList(); + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest ? SetRequestTasksColors(x.RequestTime, x.IsCancelRequest, x.IsDoneRequest) : "", + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); - final = final.Select(x => new TaskViewModel() - { + final = final.Select(x => new TaskViewModel() + { - AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, - Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() - { - PositionValue = 0, - Fullname = "-" - } : x.Sender, - Assigned = x.Assigned, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - Color = x.Color, - MediaCount = x.MediaCount, - HasAttachment = x.HasAttachment, - SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, - EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" - ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" - : "", - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }).ToList(); - return final; - } + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanCheckRequests = x.Sender.PositionValue >= positionValue, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + }).ToList(); + return final; + } - public List GetTasks(TaskSearchModel searchModel) - { - var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); - var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); - var emptyAcc = new AccountViewModel() - { - Fullname = "-", - PositionValue = 0 - }; - var query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) - .Where(x => - x.Task.IsActiveString == "true" && ((x.AssignedId == accountId || x.AssignerId == accountId) || x.AssignerPositionValue > positionValue)) - .Select(x => - new TaskViewModel() - { + public List GetTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + IQueryable query; - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), - IsDone = x.Task.IsDone, - EndTaskDateGE = x.Task.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.Task.IsCanceledRequest, - RequestTime = x.Task.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.Task.IsCancel, - AcceptedTimeRequest = x.Task.AcceptedTimeRequest, - IsCancelRequest = x.Task.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest=x.Task.IsDoneRequest, + if (positionValue == 1) + { + query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { - }); - //res = res.GroupBy(x => x.Id).Select(x => x.First()); - //res = res.OrderBy(x => x.IsDone ? 1 : 0) - // .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, - var res = query.Select(x => new TaskViewModel() - { - Sender = x.AssignerId == accountId - ? _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() - { - PositionValue = a.Position.PositionValue, - Id = a.id, - Fullname = a.Fullname, - }).FirstOrDefault(a => a.Id == x.AssignerId) : _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() - { - PositionValue = a.Position.PositionValue, - Id = a.id, - Fullname = a.Fullname, - }).FirstOrDefault(a => a.Id == x.AssignerId), + }); + } + else + { + query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (x.AssignedId == accountId || x.AssignerId == accountId) && (!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { - SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, - Assigned = - x.AssignedId == accountId ? - ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) - .ToList(), - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - MediaCount = x.MediaCount, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }); - if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) - { - var start = searchModel.StartDate.ToGeorgianDateTime(); - var end = searchModel.EndDate.ToGeorgianDateTime(); - res = res.Where(x => - ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + }); + } + //res = res.GroupBy(x => x.Id).Select(x => x.First()); + //res = res.OrderBy(x => x.IsDone ? 1 : 0) + // .ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1); - (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), - (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, - (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) - || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); - } + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) - { - bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); - res = res.Where(x => x.IsDoneRequest == isDoneReq); - } + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) - { - bool isDone = bool.Parse(searchModel.IsDone); - res = res.Where(x => x.IsDone == isDone); - } + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) - { - bool isCancel = bool.Parse(searchModel.IsCanceled); - res = res.Where(x => x.IsCancel == isCancel); - } + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) - { - bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); - res = res.Where(x => x.RequestTime == isTimeRequest); - } + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } - if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) - { - res = res.Where(x => x.AcceptedTimeRequest > 0); - } + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } - if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) - { - bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); - res = res.Where(x => x.IsCancelRequest == isCancelReq); + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); - } + } - var resEnum = res.AsEnumerable(); - var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); - if (searchModel.AccountId > 0) - { - result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); - } + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } - var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) - .ThenBy(x => x.EndTaskDateGE); - - - var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); - - final = final.Select(x => new TaskViewModel() - { - AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) - .Select(a => new AssignViewModel() - { - AssignedName = a.Fullname, - AssignedPositionValue = a.Position.PositionValue - }).ToList(), - Sender = x.Sender.Id == accountId ? emptyAcc : x.Sender, - SelfAssigner = x.Sender.Id == accountId ? true : false, - Assigned = x.Assigned, - SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - MediaCount = x.MediaCount, - SelfName = x.SelfName, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest + var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE); + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + + }).ToList(); + final = final.Select(x => new TaskViewModel() + { - }).ToList(); + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanAssign = _PositionRepository.GetLastPositionValue() != positionValue, + CanDelete = x.Sender.Id == accountId, + CanEdit = x.Sender.Id == accountId, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + + }).ToList(); + return final; + + } + + public List GetSentTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + IQueryable query; + + if (positionValue == 1) + { + query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (x.AssignerId == accountId &&x.AssignedId!=accountId)&&x.Task.SenderId==accountId&& (!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, + + }); + + } + else + { + query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && x.AssignerId == accountId) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, + + }); - final = final.Select(x => new TaskViewModel() - { + } - AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() - { - AssignViewModels = a.ToList(), - PosValue = a.Key - }).ToList() - : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() - { - AssignViewModels = a.ToList(), - PosValue = a.Key - }).ToList(), - Sender = x.Sender, - Assigned = x.Assigned, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE,x.IsCancel), - MediaCount = x.MediaCount, - HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0)?true:false, - SelfName = x.SelfName, - SelfAssigned = x.SelfAssigned, - SelfAssigner = x.SelfAssigner, - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }).ToList(); - final = final.Select(x => new TaskViewModel() - { + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), - AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, - Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() - { - PositionValue = 0, - Fullname = "-" - } : x.Sender, - Assigned = x.Assigned, - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - RequestCancel = x.RequestCancel, - RequestTime = x.RequestTime, - Id = x.Id, - CreateTaskDateGE = x.CreateTaskDateGE, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCancelRequest, - ContractingPartyName = x.ContractingPartyName, - Color = x.Color, - MediaCount = x.MediaCount, - HasAttachment = x.HasAttachment, - SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, - EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" - ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" - : "", - Description = x.Description, - IsDoneRequest=x.IsDoneRequest - }).ToList(); - return final; + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, - } + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - public string SetTasksColors(DateTime date,bool isCancel) - { - if (isCancel) - { - return "brown"; - } - var now = DateTime.Now.Date; - if (date.Date < now) - { - return "dark"; - } - else if (date.Date == now) - { - return "red"; - } - else if (date.Date == now.AddDays(1)) - { - return "yellow"; - } - else if (date.Date > now.AddDays(1)) - { - return "gray"; - } + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - return ""; + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - } + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && - public string SetRequestTasksColors(bool timeRequest, bool cancelRequest,bool isDoneRequest) - { - if (timeRequest) - { - return "yellow"; - } - else if (cancelRequest) - { - return "red"; - } - else if (isDoneRequest) - { + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } + + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); + + } + + + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } + + + var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE); + + + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + + }).ToList(); + + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanAssign = _PositionRepository.GetLastPositionValue() != positionValue, + CanDelete = x.Sender.Id == accountId, + CanEdit = x.Sender.Id == accountId, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + + }).ToList(); + return final; + } + + public string SetTasksColors(DateTime date, bool isCancel) + { + if (isCancel) + { + return "brown"; + } + var now = DateTime.Now.Date; + if (date.Date < now) + { + return "dark"; + } + else if (date.Date == now) + { + return "red"; + } + else if (date.Date > now) + { + return "gray"; + } + + return ""; + + } + + public string SetRequestTasksColors(bool timeRequest, bool cancelRequest, bool isDoneRequest) + { + if (timeRequest) + { + return "yellow"; + } + else if (cancelRequest) + { + return "red"; + } + else if (isDoneRequest) + { return "green"; } - else - { - return ""; - } + else + { + return ""; + } - } + } - public int GetRequestedTasksCount() - { - return _accountContext.Assigns.Include(x => x.Task).Where(x => - x.Task.IsDone == false && x.Task.IsActiveString == "true" && - (x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).GroupBy(x => x.TaskId) - .Select(x => x.First()).Count(); - } + public int GetRequestedTasksCount() + { + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + if (positionValue == 1) + { + return _accountContext.Assigns.Include(x => x.Task).Where(x => + x.Task.IsDone == false && x.Task.IsActiveString == "true" && + (x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true || x.Task.IsDoneRequest)).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + else + { + return _accountContext.Assigns.Include(x => x.Task).Where(x => + x.Task.IsDone == false && x.Task.IsActiveString == "true" && + (x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true || x.Task.IsDoneRequest) && (accountId == x.Task.SenderId || positionValue < x.AssignerPositionValue)).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + } - public TaskViewModel GetRequestDetails(long id) - { - return _accountContext.Tasks.Where(x => x.id == id).Select(x=>new TaskViewModel() - { - Id = x.id, - Name = x.Title, - ContractingPartyName = x.ContractingPartyName, - TimeRequestDescription = x.TimeRequestDescription, - CancelDescription = x.CancelDescription, - IsDoneDescription = x.DoneDescription, - IsCancelRequest = x.IsDoneRequest, - RequestTime = x.TimeRequest, - IsDoneRequest = x.IsDoneRequest, - RequestTaskDate = x.RequestDate==null?"":x.RequestDate.ToFarsi() - }).FirstOrDefault(); - } + + public TaskViewModel GetRequestDetails(long id) + { + return _accountContext.Tasks.Where(x => x.id == id).Select(x => new TaskViewModel() + { + Id = x.id, + Name = x.Title, + ContractingPartyName = x.ContractingPartyName, + TimeRequestDescription = x.TimeRequestDescription, + CancelDescription = x.CancelDescription, + IsDoneDescription = x.DoneDescription, + IsCancelRequest = x.IsDoneRequest, + RequestTime = x.TimeRequest, + IsDoneRequest = x.IsDoneRequest, + RequestTaskDate = x.RequestDate == null ? "" : x.RequestDate.ToFarsi() + }).FirstOrDefault(); + } + + public List GetSelfTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + + var query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (x.AssignerId == accountId && x.AssignedId == accountId)&&(!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, + + }); + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), + + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, + + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } + + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); + + } + + + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } + + + var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE); + + + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + + }).ToList(); + + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanAssign = _PositionRepository.GetLastPositionValue() != positionValue, + CanDelete = x.Sender.Id == accountId, + CanEdit = x.Sender.Id == accountId, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + + }).ToList(); + return final; + } + + public List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + + var query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest) && + x.AssignerId != accountId) + .Select(x => + new TaskViewModel() + { + + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, + + }); + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), + + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, + + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } + + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); + + } + + + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } + + + var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE); + + + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + + }).ToList(); + + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanAssign = _PositionRepository.GetLastPositionValue() != positionValue, + CanDelete = x.Sender.Id == accountId, + CanEdit = x.Sender.Id == accountId, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + + }).ToList(); + return final; + + + } + + public List GetReceivedTasks(TaskSearchModel searchModel) + { + var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value); + var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value); + var emptyAcc = new AccountViewModel() + { + Fullname = "-", + PositionValue = 0 + }; + + var query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && x.AssignedId == accountId&&(!x.Task.IsCanceledRequest && !x.Task.TimeRequest && !x.Task.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(), + IsDone = x.Task.IsDone, + EndTaskDateGE = x.Task.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.Task.IsCanceledRequest, + RequestTime = x.Task.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.Task.IsCancel, + AcceptedTimeRequest = x.Task.AcceptedTimeRequest, + IsCancelRequest = x.Task.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.Task.IsDoneRequest, + + }); + var res = query.Select(x => new TaskViewModel() + { + Sender = _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel() + { + PositionValue = a.Position.PositionValue, + Id = a.id, + Fullname = a.Fullname, + }).FirstOrDefault(a => a.Id == x.AssignerId), + + SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname, + + Assigned = + x.AssignedId == accountId ? + ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }); + if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate)) + { + var start = searchModel.StartDate.ToGeorgianDateTime(); + var end = searchModel.EndDate.ToGeorgianDateTime(); + res = res.Where(x => + ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end > x.EndTaskDateGE && x.EndTaskDateGE > start)) + || ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) && + + (end < x.EndTaskDateGE && x.EndTaskDateGE > end))); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest)) + { + bool isDoneReq = bool.Parse(searchModel.IsDoneRequest); + res = res.Where(x => x.IsDoneRequest == isDoneReq); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsDone)) + { + bool isDone = bool.Parse(searchModel.IsDone); + res = res.Where(x => x.IsDone == isDone); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled)) + { + bool isCancel = bool.Parse(searchModel.IsCanceled); + res = res.Where(x => x.IsCancel == isCancel); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest)) + { + bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest); + res = res.Where(x => x.RequestTime == isTimeRequest); + } + + if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted)) + { + res = res.Where(x => x.AcceptedTimeRequest > 0); + } + + if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest)) + { + bool isCancelReq = bool.Parse(searchModel.IsCancelRequest); + res = res.Where(x => x.IsCancelRequest == isCancelReq); + + } + + + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => x.First()); + + if (searchModel.AccountId > 0) + { + result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId)); + } + + + var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0) + .ThenBy(x => x.EndTaskDateGE); + + + var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + final = final.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id)) + .Select(a => new AssignViewModel() + { + AssignedName = a.Fullname, + AssignedPositionValue = a.Position.PositionValue + }).ToList(), + Sender = x.Sender, + SelfAssigner = x.Sender.Id == accountId ? true : false, + Assigned = x.Assigned, + SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + MediaCount = x.MediaCount, + SelfName = x.SelfName, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + + }).ToList(); + + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList() + : x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + Sender = x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE, x.IsCancel), + MediaCount = x.MediaCount, + HasAttachment = x.MediaCount > 0, + SelfName = x.SelfName, + SelfAssigned = x.SelfAssigned, + SelfAssigner = x.SelfAssigner, + Description = x.Description, + IsDoneRequest = x.IsDoneRequest + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList, + Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel() + { + PositionValue = 0, + Fullname = "-" + } : x.Sender, + Assigned = x.Assigned, + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + RequestCancel = x.RequestCancel, + RequestTime = x.RequestTime, + Id = x.Id, + CreateTaskDateGE = x.CreateTaskDateGE, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCancelRequest, + ContractingPartyName = x.ContractingPartyName, + Color = x.Color, + MediaCount = x.MediaCount, + HasAttachment = x.HasAttachment, + SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName, + EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59" + ? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}" + : "", + Description = x.Description, + IsDoneRequest = x.IsDoneRequest, + CanAssign = _PositionRepository.GetLastPositionValue() != positionValue, + CanDelete = x.Sender.Id == accountId, + CanEdit = x.Sender.Id == accountId, + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname + + }).ToList(); + return final; + } } + + + + + + public static class ExtraTools { - public static List AddAssign(List list, AccountViewModel acc) - { - list.Add(new AssignList() - { - AssignViewModels = new List() - { - new () - { - AssignedName = acc.Fullname, - AssignedPositionValue = acc.PositionValue - }, - }.ToList(), - PosValue = acc.PositionValue - }); - return list; + public static List AddAssign(List list, AccountViewModel acc) + { + list.Add(new AssignList() + { + AssignViewModels = new List() + { + new () + { + AssignedName = acc.Fullname, + AssignedPositionValue = acc.PositionValue + }, + }.ToList(), + PosValue = acc.PositionValue + }); + return list; - } + } - public static List AddAccountIdToList(List list, long accountId) - { - list.Add(accountId); - return list; - } + public static List AddAccountIdToList(List list, long accountId) + { + list.Add(accountId); + return list; + } } \ No newline at end of file diff --git a/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs new file mode 100644 index 00000000..defebee0 --- /dev/null +++ b/Company.Domain/RollCallAgg/IRollCallMandatoryRepository.cs @@ -0,0 +1,12 @@ +using System; +using _0_Framework.Domain; +using CompanyManagment.App.Contracts.Contract; +using CompanyManagment.App.Contracts.WorkingHoursTemp; + +namespace Company.Domain.RollCallAgg; + +public interface IRollCallMandatoryRepository : IRepository +{ + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, long leavId); + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs new file mode 100644 index 00000000..69f681e3 --- /dev/null +++ b/CompanyManagment.App.Contracts/RollCall/IRollCallMandatoryApplication.cs @@ -0,0 +1,11 @@ +using System; +using CompanyManagment.App.Contracts.Contract; +using CompanyManagment.App.Contracts.WorkingHoursTemp; + +namespace CompanyManagment.App.Contracts.RollCall; + +public interface IRollCallMandatoryApplication +{ + bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart); + ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, long leavId); +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs b/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs index 93afc7d8..9f2b5164 100644 --- a/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs +++ b/CompanyManagment.App.Contracts/RollCall/RollCallViewModel.cs @@ -12,4 +12,5 @@ public class RollCallViewModel public DateTime? EndDate { get; set; } public int Year { get; set; } public int Month { get; set; } + public TimeSpan ShiftSpan { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/YearlySalary/DayliFeeViewModel.cs b/CompanyManagment.App.Contracts/YearlySalary/DayliFeeViewModel.cs index 2d5cd777..c9964075 100644 --- a/CompanyManagment.App.Contracts/YearlySalary/DayliFeeViewModel.cs +++ b/CompanyManagment.App.Contracts/YearlySalary/DayliFeeViewModel.cs @@ -8,6 +8,7 @@ namespace CompanyManagment.App.Contracts.YearlySalary; public class DayliFeeViewModel { + public double DayliFeeDouble { get; set; } public string DayliFee { get; set; } public string Basic { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.Application/LeaveApplication.cs b/CompanyManagment.Application/LeaveApplication.cs index 38180306..1d518e25 100644 --- a/CompanyManagment.Application/LeaveApplication.cs +++ b/CompanyManagment.Application/LeaveApplication.cs @@ -57,17 +57,14 @@ public class LeaveApplication : ILeaveApplication var start = command.StartLeave.ToGeorgianDateTime(); + var end = command.PaidLeaveType == "ساعتی"? start : command.EndLeave.ToGeorgianDateTime(); - var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId); - - if (_leaveRepository.Exists(x => - x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId)) - return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); - if (_leaveRepository.Exists(x => - x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId)) - return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + + // start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds); + //end = new DateTime(end.Year, end.Month, end.Day, endH.Hours, endH.Minutes, endH.Seconds); + if (checkErr.HasChekout) return op.Failed(checkErr.CheckoutErrMessage); @@ -83,19 +80,48 @@ public class LeaveApplication : ILeaveApplication var totalhourses = "-"; if (command.LeaveType == "استحقاقی" && command.PaidLeaveType == "ساعتی") { + start = new DateTime(start.Year, start.Month, start.Day, startH.Hours, startH.Minutes, startH.Seconds); end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds); if (start > end) end = end.AddDays(1); - var totalLeavHourses = (end - start); + + var totalLeavHourses = (end - start); var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}"; var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}"; totalhourses = $"{h}:{m}"; - } + + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی")) + return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی")) + return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی")) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + + var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end; + if (_leaveRepository.Exists(x => + (x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه"))) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + } else if (command.LeaveType == "استحقاقی" && command.PaidLeaveType == "روزانه") { var totalLeavHourses = (end - start).TotalDays + 1; totalhourses = $"{(int)totalLeavHourses}"; + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + if (_leaveRepository.Exists(x => + x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی")) + return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است"); } if (command.LeaveType == "استعلاجی") @@ -103,9 +129,21 @@ public class LeaveApplication : ILeaveApplication var totalLeavHourses = (end - start).TotalDays + 1; totalhourses = $"{(int)totalLeavHourses}"; command.PaidLeaveType = "روزانه"; - } - - var year = Convert.ToInt32(command.StartLeave.Substring(0, 4)); + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه")) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + if (_leaveRepository.Exists(x => + x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی")) + return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است"); + } + + var year = Convert.ToInt32(command.StartLeave.Substring(0, 4)); var month = Convert.ToInt32(command.StartLeave.Substring(5, 2)); var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName; @@ -165,14 +203,7 @@ public class LeaveApplication : ILeaveApplication var end = command.PaidLeaveType == "ساعتی" ? start : command.EndLeave.ToGeorgianDateTime(); var checkErr = _leaveRepository.CheckErrors(start, end, command.EmployeeId, command.WorkshopId); - if (_leaveRepository.Exists(x => - x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId - && x.WorkshopId == command.WorkshopId && x.id != command.Id)) - return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); - if (_leaveRepository.Exists(x => - x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId - && x.WorkshopId == command.WorkshopId && x.id != command.Id)) - return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + if (checkErr.HasChekout) return op.Failed(checkErr.CheckoutErrMessage); if (checkErr.HasLeftWork) @@ -192,25 +223,66 @@ public class LeaveApplication : ILeaveApplication end = new DateTime(start.Year, start.Month, start.Day, endH.Hours, endH.Minutes, endH.Seconds); if (start > end) end = end.AddDays(1); - var totalLeavHourses = (end - start); + + var totalLeavHourses = (end - start); var h = totalLeavHourses.Hours < 10 ? $"0{totalLeavHourses.Hours}" : $"{totalLeavHourses.Hours}"; var m = totalLeavHourses.Minutes < 10 ? $"0{totalLeavHourses.Minutes}" : $"{totalLeavHourses.Minutes}"; totalhourses = $"{h}:{m}"; - } + + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی" && x.id != command.Id)) + return op.Failed("برای ساعت شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی" && x.id != command.Id)) + return op.Failed("برای ساعت پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی" && x.id != command.Id)) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + + var end24 = endH.Hours == 0 && endH.Minutes == 0 ? end.AddDays(-1) : end; + if (_leaveRepository.Exists(x => + (x.StartLeave.Date == start.Date || x.EndLeave.Date == end24.Date) && (x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id))) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + } else if (command.LeaveType == "استحقاقی" && command.PaidLeaveType == "روزانه") { var totalLeavHourses = (end - start).TotalDays + 1; totalhourses = $"{(int)totalLeavHourses}"; - } + + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + if (_leaveRepository.Exists(x => + x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی" && x.id != command.Id)) + return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است"); + } if (command.LeaveType == "استعلاجی") { var totalLeavHourses = (end - start).TotalDays + 1; totalhourses = $"{(int)totalLeavHourses}"; command.PaidLeaveType = "روزانه"; - } + if (_leaveRepository.Exists(x => + x.StartLeave <= start && x.EndLeave >= start && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("برای تاریخ شروع سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave <= end && x.EndLeave >= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("برای تاریخ پایان سابقه مرخصی وجود دارد"); + if (_leaveRepository.Exists(x => + x.StartLeave >= start && x.EndLeave <= end && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "روزانه" && x.id != command.Id)) + return op.Failed("در بازه زمانی وارد شده مرخصی ثبت شده است"); + if (_leaveRepository.Exists(x => + x.StartLeave.Date >= start.Date && x.StartLeave.Date <= end.Date && x.EmployeeId == command.EmployeeId && x.WorkshopId == command.WorkshopId && x.PaidLeaveType == "ساعتی" && x.id != command.Id)) + return op.Failed("دربازه تاریخ وارد شده مرخصی ساعتی ثبت شده است"); + } - var year = Convert.ToInt32(command.StartLeave.Substring(0, 4)); + var year = Convert.ToInt32(command.StartLeave.Substring(0, 4)); var month = Convert.ToInt32(command.StartLeave.Substring(5, 2)); var employeeFullName = _employeeRepository.GetDetails(command.EmployeeId).EmployeeFullName; @@ -249,16 +321,6 @@ public class LeaveApplication : ILeaveApplication return _leaveRepository.searchClient(searchModel); } - #region Vafa - - public List LastLeaveMain(long workshopId, int pageIndex) - { - return _leaveRepository.LastLeaveMain(workshopId, pageIndex); - } - - #endregion - - public bool CheckIfValidToEdit(long id) { return _leaveRepository.CheckIfValidToEdit(id); @@ -285,4 +347,9 @@ public class LeaveApplication : ILeaveApplication { return _leaveRepository.PrintAll(id); } + + public List LastLeaveMain(long workshopId, int pageIndex) + { + return _leaveRepository.LastLeaveMain(workshopId, pageIndex); + } } \ No newline at end of file diff --git a/CompanyManagment.Application/RollCallMandatoryApplication.cs b/CompanyManagment.Application/RollCallMandatoryApplication.cs new file mode 100644 index 00000000..73cd5199 --- /dev/null +++ b/CompanyManagment.Application/RollCallMandatoryApplication.cs @@ -0,0 +1,27 @@ +using Company.Domain.RollCallAgg; +using CompanyManagment.App.Contracts.Contract; +using CompanyManagment.App.Contracts.RollCall; +using CompanyManagment.App.Contracts.WorkingHoursTemp; +using System; + +namespace CompanyManagment.Application; + +public class RollCallMandatoryApplication : IRollCallMandatoryApplication +{ + private readonly IRollCallMandatoryRepository _rollCallMandatoryRepository; + + public RollCallMandatoryApplication(IRollCallMandatoryRepository rollCallMandatoryRepository) + { + _rollCallMandatoryRepository = rollCallMandatoryRepository; + } + + public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart) + { + return _rollCallMandatoryRepository.Exists(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date); + } + + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, long leavId) + { + return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, leavId); + } +} \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs new file mode 100644 index 00000000..cb45d16c --- /dev/null +++ b/CompanyManagment.EFCore/Repository/RollCallMandatoryRepository.cs @@ -0,0 +1,303 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using _0_Framework.Application; +using _0_Framework.InfraStructure; +using Company.Domain.LeftWorkAgg; +using Company.Domain.RollCallAgg; +using Company.Domain.YearlySalaryAgg; +using CompanyManagment.App.Contracts.Contract; +using CompanyManagment.App.Contracts.LeftWork; +using CompanyManagment.App.Contracts.RollCall; +using CompanyManagment.App.Contracts.WorkingHoursTemp; + + +namespace CompanyManagment.EFCore.Repository; + +public class RollCallMandatoryRepository : RepositoryBase, IRollCallMandatoryRepository +{ + private readonly CompanyContext _context; + private readonly IYearlySalaryRepository _yearlySalaryRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + + public RollCallMandatoryRepository(CompanyContext context, IYearlySalaryRepository yearlySalaryRepository, + ILeftWorkRepository leftWorkRepository) : base(context) + { + _context = context; + _yearlySalaryRepository = yearlySalaryRepository; + _leftWorkRepository = leftWorkRepository; + } + + public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, + DateTime contractEnd, + CreateWorkingHoursTemp command, long leavId) + { + #region Entities + + string SumWorkeTime = string.Empty; + var weeklyTime = new TimeSpan(); + string shift1Hourse = "0"; + string shift1Minuts = "0"; + string overMandatoryHours = "0"; + string overMandatoryMinuts = "0"; + #endregion + var rollCallResult = _context.RollCalls.Where(x => + x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date && + x.StartDate.Value.Date <= contractEnd.Date && x.EndDate != null).Select(x => new RollCallViewModel() + { + StartDate = x.StartDate, + EndDate = x.EndDate, + ShiftSpan = (x.EndDate.Value - x.StartDate.Value) + }).ToList(); + var sumSpans = new TimeSpan(rollCallResult.Sum(x => x.ShiftSpan.Ticks)); + + //***********************************// + //ToTalHourse Employe eWorked + var totalHourses = (sumSpans.TotalMinutes) / 60; + int totalHolidaysAndNotH = (int)sumSpans.TotalHours; + int totalHolidaysAndNotM = (int)(sumSpans.TotalMinutes % 60); + //***********************************// + + #region ComputeMandatoryAtThisTime + + int TotalContractDays = (int)(contractEnd - contractStart).TotalDays + 1; + int fridays = 0; + int holiday = _context.HolidayItems.Count(x => x.Holidaydate >= contractStart && x.Holidaydate <= contractEnd); + ; + for (var gDate = contractStart; gDate <= contractEnd; gDate = gDate.AddDays(1)) + { + if (gDate.DayOfWeek == DayOfWeek.Friday) + { + fridays += 1; + } + } + int TotalDaysNoFriday = TotalContractDays - fridays; + int mandatorDays = TotalContractDays - (fridays + holiday); + //***********************************// + //This Time Mandatory Hourse + double mandatoryHours = Math.Round((mandatorDays * 7.33), 2); + //***********************************// + var dailyFix = TimeSpan.Parse("07:20"); + dailyFix = dailyFix.Multiply(mandatorDays); + TimeSpan Mandatory = sumSpans.Subtract(dailyFix); + + #endregion + + + #region DailyFeeCompute + + var searchModel = new LeftWorkSearchModel() + { + EmployeeId = command.EmployeeId, + WorkshopId = command.WorkshopId, + + }; + + var leftworkList = _leftWorkRepository.search(searchModel); + var basic = "0"; + double dayliFeeComplete = 0; + var GetWorkStartDate = command.GetWorkDateHide.ToEnglishNumber(); + var styear = Convert.ToInt32(GetWorkStartDate.Substring(0, 4)); + var startDate = command.GetWorkDateHide.ToGeorgianDateTime(); + var dayliFee = "خطای تاریخ"; + double dayliFeeDouble = 0; + if (styear >= 1370) + { + + if (leftworkList == null) + leftworkList = new List(); + + var dayliFeeResult = _yearlySalaryRepository.DayliFeeComputing(startDate, contractStart, contractEnd, + command.EmployeeId, command.WorkshopId, leftworkList); + dayliFee = dayliFeeResult.DayliFee; + dayliFeeDouble = dayliFeeResult.DayliFeeDouble; + dayliFeeComplete = dayliFeeResult.DayliFee.MoneyToDouble(); + basic = dayliFeeResult.Basic; + } + + #endregion + + #region ConsumableItemsAndHousingAndFamily + + var ConsumableItems = _yearlySalaryRepository.ConsumableItems(contractEnd); + var HousingAllowance = _yearlySalaryRepository.HousingAllowance(contractEnd); + + var familyAllowance = _yearlySalaryRepository.FamilyAllowance(command.EmployeeId, contractEnd); + var MarriedAllowance = _yearlySalaryRepository.MarriedAllowance(contractEnd, command.EmployeeId); + // حق تاهل + string MarriedAllowanceStr = MarriedAllowance > 0 ? MarriedAllowance.ToMoney() : "0"; + #endregion + + var totalWeek = (int)(TotalContractDays / 6); + + #region Fix44Compute + + if (totalHourses < mandatoryHours) + { + if (command.ShiftWork == "1" || command.ShiftWork == "2" || command.ShiftWork == "4") + { + var workedHoursePerDay = totalHourses / mandatorDays; + var result = (dayliFeeDouble / 7.33) * workedHoursePerDay; + + + dayliFee = result.ToMoney(); + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); + var HousingStep1 = HousingAllowonceNumberType / 30; + var HousingStep2 = HousingStep1 / 7.33; + var HousingStep3 = HousingStep2 * workedHoursePerDay; + var HousingStep4 = HousingStep3 * TotalContractDays; + HousingAllowance = HousingStep4.ToMoney(); + + var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); + var consumableItemsStep1 = ConsumableItemsNumberType / 30; + var consumableItemsStep2 = consumableItemsStep1 / 7.33; + var consumableItemsStep3 = consumableItemsStep2 * workedHoursePerDay; + var consumableItemsStep4 = consumableItemsStep3 * TotalContractDays; + ConsumableItems = consumableItemsStep4.ToMoney(); + + + + //حق تاهل + if (MarriedAllowance > 0) + { + var MarriedStep1 = MarriedAllowance / 30; + var MarriedStep2 = MarriedStep1 / 7.33; + var MarriedStep3 = MarriedStep2 * workedHoursePerDay; + var MarriedStep4 = MarriedStep3 * TotalContractDays; + MarriedAllowanceStr = MarriedStep4.ToMoney(); + } + + if (familyAllowance != "0") + { + + var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + var familyAllowanceStep1 = familyAllowanceNumberType / 30; + var familyAllowanceStep2 = familyAllowanceStep1 / 7.33; + var familyAllowanceStep3 = familyAllowanceStep2 * workedHoursePerDay; + var familyAllowanceStep4 = familyAllowanceStep3 * TotalContractDays; + familyAllowance = familyAllowanceStep4.ToMoney(); + } + + if (totalWeek > 1) + { + + double weekAvrage = 0; + if (totalHourses < 44.00) + { + weekAvrage = (totalHourses * 6) / TotalContractDays; + } + else + { + weekAvrage = (totalHourses * 6) / TotalDaysNoFriday; + } + + //var oneday = weekAvrage * 6; + var totalShiftRound = Math.Round(weekAvrage, 2); + SumWorkeTime = $"{totalShiftRound}"; + + } + else if (totalWeek <= 1 && TotalDaysNoFriday <= 6) + { + var totalShiftRound = Math.Round(totalHourses, 2); + SumWorkeTime = $"{totalShiftRound}"; + } + else if (totalWeek <= 1 && TotalDaysNoFriday > 6) + + { + var perDyeWorked = totalHourses / TotalDaysNoFriday; + var weekAvrage = perDyeWorked * 6; + var totalShiftRound = Math.Round(weekAvrage, 2); + SumWorkeTime = $"{totalShiftRound}"; + } + + weeklyTime = sumSpans; + } + + } + else // اگر بیشتر از 44 بود + { + + var HousingAllowonceNumberType = HousingAllowance.MoneyToDouble(); + var ConsumableItemsNumberType = ConsumableItems.MoneyToDouble(); + var familyAllowanceNumberType = familyAllowance.MoneyToDouble(); + + var HousingStep1 = HousingAllowonceNumberType / 30; + var HousingStep4 = HousingStep1 * TotalContractDays; + HousingAllowance = HousingStep4.ToMoney(); + + + var consumableItemsStep1 = ConsumableItemsNumberType / 30; + var consumableItemsStep4 = consumableItemsStep1 * TotalContractDays; + ConsumableItems = consumableItemsStep4.ToMoney(); + + //حق تاهل + if (MarriedAllowance > 0) + { + var MarriedStep1 = MarriedAllowance / 30; + var MarriedStep4 = MarriedStep1 * TotalContractDays; + MarriedAllowanceStr = MarriedStep4.ToMoney(); + } + + if (familyAllowance != "0") + { + var familyAllowanceStep1 = familyAllowanceNumberType / 30; + var familyAllowanceStep4 = familyAllowanceStep1 * TotalContractDays; + familyAllowance = familyAllowanceStep4.ToMoney(); + } + + SumWorkeTime = $"{44}"; + + //اضافه کار + if (totalHourses > mandatoryHours) + { + var mandatoryH = (int)Mandatory.TotalHours; + int mandatoryM = (int)(Mandatory.Minutes % 60); + overMandatoryHours = mandatoryH.ToString(); + overMandatoryMinuts = mandatoryM.ToString(); + } + + } + #endregion + + + + #region Result + + var res = new ComputingViewModel() + { + + NumberOfWorkingDays = "0", + NumberOfFriday = "0", + TotalHoursesH = totalHolidaysAndNotH.ToString(), + TotalHoursesM = totalHolidaysAndNotM.ToString(), + OverTimeWorkH = overMandatoryHours, + OverTimeWorkM = overMandatoryMinuts, + //OverNightWorkH = shiftOver22Hours, + //OverNightWorkM = shiftOver22Minuts, + ComplexNumberOfWorkingDays = "0", + SalaryCompute = dayliFee, + SumTime44 = SumWorkeTime, + ConsumableItems = ConsumableItems, + HousingAllowance = HousingAllowance, + FamilyAllowance = familyAllowance, + OfficialHoliday = holiday, + weeklyTime = weeklyTime, + //RotatingResultList = rotatingResultList, + //RotatingStatus = rotatingFaResult, + //ShiftPay = ShiftPayResult, + Basic = basic, + FridayStartToEnd = fridays, + TotalHolidayAndNotH = totalHolidaysAndNotH.ToString(), + TotalHolidayAndNotM = totalHolidaysAndNotM.ToString(), + DayliFeeComplete = dayliFeeComplete, + MarriedAllowance = MarriedAllowanceStr, + }; + + #endregion + return new ComputingViewModel(); + } + + + +} \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs index 70670794..c730213e 100644 --- a/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs +++ b/CompanyManagment.EFCore/Repository/YearlySalaryRepository.cs @@ -848,6 +848,7 @@ public class YearlySalaryRepository : RepositoryBase, IYearl var res = new DayliFeeViewModel() { + DayliFeeDouble = FinalResultDouble, DayliFee = finalResultMoney, Basic = basicResultSum.ToMoney() }; diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index 49c44493..ef52c434 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -342,6 +342,9 @@ public class PersonalBootstrapper services.AddTransient(); services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + //=========End Of Main==================================== //---File Project------------------------------------ diff --git a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs index 19173c7c..ccad4c61 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Checkouts/Index.cshtml.cs @@ -19,6 +19,7 @@ using CompanyManagment.App.Contracts.Job; using CompanyManagment.App.Contracts.Leave; using CompanyManagment.App.Contracts.LeftWork; using CompanyManagment.App.Contracts.PersonalContractingParty; +using CompanyManagment.App.Contracts.RollCall; using CompanyManagment.App.Contracts.WorkingHours; using CompanyManagment.App.Contracts.WorkingHoursItems; using CompanyManagment.App.Contracts.WorkingHoursTemp; @@ -68,6 +69,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts public string employeeFullName; private string InterferenceMessage = string.Empty; public List YearlyList; + private readonly IRollCallMandatoryApplication _rollCallMandatoryApplication; private readonly ICheckoutApplication _checkoutApplication; private readonly IContractApplication _contractApplication; private readonly IWorkshopApplication _workshopApplication; @@ -87,7 +89,6 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts private readonly IHubContext _hubContext; private readonly IEmployeeComputeOptionsApplication _employeeComputeOptionsApplication; - public IndexModel(IContractApplication contractApplication, IWorkshopApplication workshopApplication, IEmployeeApplication employeeApplication, IEmployerApplication employerApplication, @@ -98,7 +99,11 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts IAuthHelper authHelper, ICheckoutApplication checkoutApplication, IYearlySalaryRepository yearlySalaryRepository, IWorkingHoursTempApplication workingHoursTempApplication, - IHolidayItemRepository holidayItemRepository, ILeftWorkApplication leftWorkApplication, IPersonalContractingPartyApp personalContractingPartyApp, ILeaveApplication leaveApplication, IHubContext hubContext, IEmployeeComputeOptionsApplication employeeComputeOptionsApplication) + IHolidayItemRepository holidayItemRepository, ILeftWorkApplication leftWorkApplication, + IPersonalContractingPartyApp personalContractingPartyApp, + ILeaveApplication leaveApplication, IHubContext hubContext, + IEmployeeComputeOptionsApplication employeeComputeOptionsApplication, + IRollCallMandatoryApplication rollCallMandatoryApplication) { _contractApplication = contractApplication; _workshopApplication = workshopApplication; @@ -119,6 +124,8 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts _leaveApplication = leaveApplication; _hubContext = hubContext; _employeeComputeOptionsApplication = employeeComputeOptionsApplication; + _rollCallMandatoryApplication = rollCallMandatoryApplication; + } @@ -474,15 +481,27 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts workingHours.WorkshopId = contract.WorkshopIds; workingHours.EmployeeId = contract.EmployeeId; + var mandatoryCompute = new ComputingViewModel(); - - var mandatoryCompute = MandatoryHours(workingHours, 0); - var hasLeave = _leaveApplication.LeavOnChekout(separation.ContractStartGr, - separation.ContractEndGr, contract.EmployeeId, contract.WorkshopIds); - if (hasLeave != null) + if (_rollCallMandatoryApplication.HasRollCallRecord(contract.EmployeeId, contract.WorkshopIds, + separation.ContractStartGr)) { - var LeaveCompute = MandatoryHours(workingHours, hasLeave.Id); + mandatoryCompute = _rollCallMandatoryApplication.MandatoryCompute(contract.EmployeeId, contract.WorkshopIds, + separation.ContractStartGr,separation.ContractEndGr,workingHours,0); + } + else + { + mandatoryCompute = MandatoryHours(workingHours, 0); + var hasLeave = _leaveApplication.LeavOnChekout(separation.ContractStartGr, + separation.ContractEndGr, contract.EmployeeId, contract.WorkshopIds); + if (hasLeave != null) + { + var LeaveCompute = MandatoryHours(workingHours, hasLeave.Id); + } + } + + var employee = _employeeApplication.GetDetails(contract.EmployeeId); @@ -4602,8 +4621,6 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts #endregion - - #region ComplexCompute @@ -6358,6 +6375,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts } #endregion + #region sendResult @@ -6399,8 +6417,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Checkouts return ress; #endregion - - + } #endregion diff --git a/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml.cs b/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml.cs index 967b4b31..ec6dbf4c 100644 --- a/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml.cs +++ b/ServiceHost/Areas/Admin/Pages/Company/Holidays/Index.cshtml.cs @@ -308,7 +308,7 @@ public class IndexModel : PageModel } int mandatorDays = totalDays - (fridays + holiday); - double mandatoryHours = Math.Round((mandatorDays * 7.33), 2); ; + double mandatoryHours = Math.Round((mandatorDays * 7.33), 2); switch (item.MonthNumber) { case "01": diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml index ca0c3c8a..8ce17912 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml @@ -80,22 +80,24 @@
- +
-
    +
- +
- - - - +
+ + + + +
-
    +
@@ -104,21 +106,22 @@
- + @* *@ +
- - + +
- +
- +
diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml.cs index b0f51677..8f63aa31 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml.cs @@ -7,6 +7,7 @@ using CompanyManagment.App.Contracts.PersonalContractingParty; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.CodeAnalysis.CSharp.Syntax; namespace ServiceHost.Areas.AdminNew.Pages.Company.Task { @@ -19,8 +20,9 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task private readonly IPersonalContractingPartyApp _contractingPartyApp; private readonly IPositionApplication _positionApplication; private readonly ITaskSubjectApplication _taskSubjectApplication; + private readonly IWebHostEnvironment _webHostEnvironment; - public CreateModel(ITaskApplication taskApplication, IAccountApplication accountApplication, IPersonalContractingPartyApp personalContractingPartyApp, IAuthHelper authHelper, IPersonalContractingPartyApp contractingPartyApp, IPositionApplication positionApplication, ITaskSubjectApplication taskSubjectApplication) + public CreateModel(ITaskApplication taskApplication, IAccountApplication accountApplication, IPersonalContractingPartyApp personalContractingPartyApp, IAuthHelper authHelper, IPersonalContractingPartyApp contractingPartyApp, IPositionApplication positionApplication, ITaskSubjectApplication taskSubjectApplication, IWebHostEnvironment webHostEnvironment) { _taskApplication = taskApplication; _accountApplication = accountApplication; @@ -29,6 +31,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task _contractingPartyApp = contractingPartyApp; _positionApplication = positionApplication; _taskSubjectApplication = taskSubjectApplication; + _webHostEnvironment = webHostEnvironment; } public CreateTask Command { get; set; } @@ -39,19 +42,31 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task public IActionResult OnGet() { - if (_authHelper.GetPermissions().Any(x=>x==903)) - { - var accounts = _accountApplication.GetAccountLowerPositionvalue(); - AccountsList = new SelectList(accounts, "Id", "Fullname"); - PositionViewModels = _positionApplication.GetLowerPosition(); - DateFa = DateTime.Now.ToFarsi(); - Id = _authHelper.CurrentAccountId(); - return Page(); - } - else - { - return Forbid(); - } + var positionValue = _authHelper.CurrentAccountInfo().PositionValue == null + ? 0 + : _authHelper.CurrentAccountInfo().PositionValue; + + if (positionValue>0) + { + if (_authHelper.GetPermissions().Any(x=>x==903)) + { + var accounts = _accountApplication.GetAccountLowerPositionvalue(); + AccountsList = new SelectList(accounts, "Id", "Fullname"); + PositionViewModels = _positionApplication.GetLowerPosition(); + DateFa = DateTime.Now.ToFarsi(); + Id = _authHelper.CurrentAccountId(); + return Page(); + } + else + { + return Forbid(); + } + + } + else + { + return Forbid(); + } } diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml index b0622098..41032a3c 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml @@ -51,7 +51,7 @@
تاریخ انجام:
-
@Model.EndTaskDate
+
@Model.EndTaskDate @Model.EndTaskTime
diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Edit.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Edit.cshtml index 03871657..fe7ffef0 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Edit.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Edit.cshtml @@ -7,8 +7,8 @@ int fileIndex = 0; int i = 1; - - + + } @@ -122,9 +122,7 @@
- + @* @{ // var Description = HttpUtility.HtmlDecode(Model.EditTask.Description); @@ -276,9 +274,8 @@ - + diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml index 94ce42f5..16ddcca9 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml @@ -1,6 +1,7 @@ @page @using Version = _0_Framework.Application.Version @model ServiceHost.Areas.AdminNew.Pages.Company.Task.GroupModel +@inject _0_Framework.Application.IAuthHelper AuthHelper; @{ ViewData["Title"] = " - " + "کارگاه"; int index = 1; @@ -137,49 +138,50 @@ @section Script { - - - + + + - diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml.cs index 3303e3ce..eddd61ac 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Group.cshtml.cs @@ -126,5 +126,10 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.Task message = res.Message, }); } - } + + + + + + } } diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/GroupAddMemberToGroup.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/GroupAddMemberToGroup.cshtml index 40fee1ad..a500463a 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/GroupAddMemberToGroup.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/GroupAddMemberToGroup.cshtml @@ -130,17 +130,32 @@ //******************** انتخاب چک باکس ******************** - $('.items').click(function() { - var isChecked = $(this).find('input[type="checkbox"]').is(":checked"); + $('.items').click(function (e) { + if ($(e.target).is('input[type="checkbox"]')) { + return; + } - if (isChecked) { - $(this).find('input[type="checkbox"]').prop('checked', false); - $(this).removeClass('checked-item'); - } else { - $(this).find('input[type="checkbox"]').prop('checked', true); - $(this).addClass('checked-item'); - } + var checkbox = $(this).find('input[type="checkbox"]'); + var isChecked = checkbox.is(":checked"); + + checkbox.prop('checked', !isChecked); + $(this).toggleClass('checked-item', !isChecked); + }); + + $('.items input[type="checkbox"]').click(function (e) { + e.stopPropagation(); + + var isChecked = $(this).is(":checked"); + $(this).closest('.items').toggleClass('checked-item', isChecked); }); + + $('.items label').click(function (e) { + e.stopPropagation(); + + var isChecked = $(this).is(":checked"); + $(this).closest('.items').toggleClass('checked-item', isChecked); + }); + //******************** انتخاب چک باکس ******************** //******************** انتخاب همه ی چک باکس ها ******************** diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Index.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Index.cshtml index 0d96f17b..0aa5855a 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Index.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Index.cshtml @@ -1,6 +1,7 @@ @page @using Version = _0_Framework.Application.Version @model ServiceHost.Areas.AdminNew.Pages.Company.Task.IndexModel +@inject _0_Framework.Application.IAuthHelper AuthHelper; @{ var index = 1; } @@ -20,9 +21,9 @@ - + + - } @@ -51,42 +52,67 @@
- - + +
- - + + @if (Model.UserPositionValue == 1) + { + + + + + } + + else if (Model.UserPositionValue > 1 && Model.UserPositionValue < Model.LastPositionValue) + { + + + + } + else if (Model.UserPositionValue == Model.LastPositionValue) + { + + } + + +
-