diff --git a/0_Framework/Application/Tools.cs b/0_Framework/Application/Tools.cs index 8ccc1a03..2b9fd519 100644 --- a/0_Framework/Application/Tools.cs +++ b/0_Framework/Application/Tools.cs @@ -1490,7 +1490,7 @@ public static class Tools //این متد آخر همان روز را به صورت دیت تایم برمیگرداند - public static DateTime ToGeorgianDateTime2(this string persianDate) + public static DateTime ToEndDayOfGeorgianDateTime(this string persianDate) { persianDate = persianDate.ToEnglishNumber(); try diff --git a/AccountManagement.Application.Contracts/Task/EditTask.cs b/AccountManagement.Application.Contracts/Task/EditTask.cs index 4c9f1fbc..f47de8c4 100644 --- a/AccountManagement.Application.Contracts/Task/EditTask.cs +++ b/AccountManagement.Application.Contracts/Task/EditTask.cs @@ -19,4 +19,5 @@ public class EditTask:CreateTask public EditTicket TicketViewModel { get; set; } public long? TicketId { get; set; } public List AssignsLists { get; set; } + public bool HasTicket { get; set; } } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Task/ITaskApplication.cs b/AccountManagement.Application.Contracts/Task/ITaskApplication.cs index db5bef2f..b4c536f8 100644 --- a/AccountManagement.Application.Contracts/Task/ITaskApplication.cs +++ b/AccountManagement.Application.Contracts/Task/ITaskApplication.cs @@ -16,8 +16,7 @@ public interface ITaskApplication OperationResult CreateTask(CreateTask command); OperationResult CreateTaskByPosition(CreateTask command); EditTask GetDetails(long taskId); - //گرفتن تمامی وظایف - List GetTasks(TaskSearchModel searchModel); + List GetSelfTasks(TaskSearchModel searchModel); List GetAllTasks(TaskSearchModel searchModel); //List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel); @@ -27,8 +26,10 @@ public interface ITaskApplication // گرفتن مهلت برای یک وظیفه OperationResult CreateRequestTime(CreateTaskTimeRequest command); - //تایید مهلت وظیفه - OperationResult AcceptRequestDatetime(long taskId, long assignedId,string message); + List GetRequestTaskHasTicket(TaskSearchModel searchModel); + + //تایید مهلت وظیفه + OperationResult AcceptRequestDatetime(long taskId, long assignedId,string message); OperationResult RejectTimeRequest(long taskId, long assignedId, string message); //درخواست انصراف وظیفه @@ -47,6 +48,9 @@ public interface ITaskApplication List AllRequestedTasks(TaskSearchModel searchModel); int GetRequestedTasksCount(); + int TasksHaveTicketCounts(long userId); + int TasksHaveTicketRequestsCount(long userId); + List GetTaskMessages(long assignId); OperationResult ChangeRequestTimeAndAccept(string time,long taskId,long assignedId, string message); @@ -61,6 +65,7 @@ public interface ITaskApplication int OverdueTasksCount(long userId); - //متد انتقال داده از تسک به ارجاعی ها - //OperationResult MoveDataFRomTaskToAssign(); + + //متد انتقال داده از تسک به ارجاعی ها + //OperationResult MoveDataFRomTaskToAssign(); } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Ticket/EditTicket.cs b/AccountManagement.Application.Contracts/Ticket/EditTicket.cs index e139ae16..5f3ad405 100644 --- a/AccountManagement.Application.Contracts/Ticket/EditTicket.cs +++ b/AccountManagement.Application.Contracts/Ticket/EditTicket.cs @@ -17,4 +17,5 @@ public class EditTicket:CreateTicket public string CreationDateStr { get; set; } public string Status { get; set; } public bool HasTask { get; set; } + public bool IsDeleted { get; set; } } \ No newline at end of file diff --git a/AccountManagement.Application.Contracts/Ticket/ITicketApplication.cs b/AccountManagement.Application.Contracts/Ticket/ITicketApplication.cs index ab3e5884..15da87eb 100644 --- a/AccountManagement.Application.Contracts/Ticket/ITicketApplication.cs +++ b/AccountManagement.Application.Contracts/Ticket/ITicketApplication.cs @@ -15,6 +15,7 @@ public interface ITicketApplication EditTicket GetDetails(long id); EditTicket GetDetailsForClient(long id); List GetAll(TicketSearchModel searchModel); + List GetDeletedTicket(); bool IsExist(long id); OperationResult UploadMedia(IFormFile mediaFile, long senderId); OperationResult RemoveMedia(long mediaId); @@ -27,6 +28,8 @@ public interface ITicketApplication OperationResult DeletePendingAdminResponse(int adminResId); OperationResult EditPendingAdminResponse(long adminResId, string newMessage); OperationResult CloseTicket(long ticketId); + OperationResult DeleteTicket(long ticketId); + OperationResult RestoreDeletedTicket(long ticketId); TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin(); TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId); #region Vafa diff --git a/AccountManagement.Application/AccountApplication.cs b/AccountManagement.Application/AccountApplication.cs index 18b90a14..14c4d5bd 100644 --- a/AccountManagement.Application/AccountApplication.cs +++ b/AccountManagement.Application/AccountApplication.cs @@ -16,9 +16,9 @@ using CompanyManagment.App.Contracts.Workshop; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Rendering; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; -using TaskManager.Domain.PositionAgg; using Company.Domain.WorkshopAgg; using System.Security.Claims; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.SubAccountAgg; using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg; using AccountManagement.Domain.SubAccountRoleAgg; diff --git a/AccountManagement.Application/PositionApplication.cs b/AccountManagement.Application/PositionApplication.cs index e8085197..7a967349 100644 --- a/AccountManagement.Application/PositionApplication.cs +++ b/AccountManagement.Application/PositionApplication.cs @@ -4,7 +4,7 @@ using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Position; using AccountManagement.Domain.AccountAgg; using AccountManagement.Domain.AssignAgg; -using TaskManager.Domain.PositionAgg; +using AccountManagement.Domain.PositionAgg; namespace TaskManager.Application; diff --git a/AccountManagement.Application/TaskApplication.cs b/AccountManagement.Application/TaskApplication.cs index f293ff32..d9a0ab4e 100644 --- a/AccountManagement.Application/TaskApplication.cs +++ b/AccountManagement.Application/TaskApplication.cs @@ -1,25 +1,21 @@ using _0_Framework.Application; -using System; -using System.Collections.Generic; -using System.Data.OleDb; -using System.IO; -using System.Linq; using AccountManagement.Application.Contracts.Assign; using AccountManagement.Application.Contracts.Task; +using AccountManagement.Application.Contracts.TaskMessage; using AccountManagement.Domain.AccountAgg; +using AccountManagement.Domain.AdminResponseAgg; using AccountManagement.Domain.AssignAgg; using AccountManagement.Domain.MediaAgg; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.TaskAgg; -using IPE.SmsIrClient.Models.Results; -using TaskManager.Domain.PositionAgg; -using System.Reflection; - -using Microsoft.AspNetCore.Http; -using System.Globalization; -using AccountManagement.Application.Contracts.TaskMessage; -using AccountManagement.Domain.AdminResponseAgg; using AccountManagement.Domain.TaskMessageAgg; using AccountManagement.Domain.TicketAgg; +using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using System.Linq; namespace AccountManagement.Application; @@ -33,7 +29,6 @@ public class TaskApplication : ITaskApplication private readonly IHttpContextAccessor _contextAccessor; private readonly ITaskMessageRepository _taskMessageRepository; private readonly ITicketRepository _ticketRepository; - private readonly IAuthHelper _authHelper; @@ -358,7 +353,7 @@ public class TaskApplication : ITaskApplication { } - var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) || command.EndTaskTime == "00:00" ? command.EndTaskDate.ToGeorgianDateTime2() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime); + var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) || command.EndTaskTime == "00:00" ? command.EndTaskDate.ToEndDayOfGeorgianDateTime() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime); var errorDateTime = new DateTime(3000, 12, 20, new PersianCalendar()); if (endTask == errorDateTime) @@ -372,15 +367,15 @@ public class TaskApplication : ITaskApplication } var task = new Tasks(command.Title, command.Description, command.SenderId, command.ContractingPartyName); _taskRepository.Create(task); - if (command.TaskScheduleId>0) + if (command.TaskScheduleId > 0) { - task.SetTaskSchedule(command.TaskScheduleId); + task.SetTaskSchedule(command.TaskScheduleId); } _assignRepository.SaveChanges(); foreach (var receiver in receivers) { var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, receiver.Fullname, - receiver.Position.PositionValue, endTask,true); + receiver.Position.PositionValue, endTask, true); _assignRepository.Create(assign); } @@ -432,7 +427,7 @@ public class TaskApplication : ITaskApplication DateTime endTask; if (string.IsNullOrWhiteSpace(command.EndTaskTime)) { - endTask = command.EndTaskDate.ToGeorgianDateTime2(); + endTask = command.EndTaskDate.ToEndDayOfGeorgianDateTime(); } else { @@ -481,13 +476,7 @@ public class TaskApplication : ITaskApplication return _taskRepository.GetDetails(taskId); } - //لیست کامل تسک ها - public List GetTasks(TaskSearchModel searchModel) - { - var test = _taskRepository.GetTasks(searchModel); - return test; - } public List GetSelfTasks(TaskSearchModel searchModel) { @@ -574,6 +563,12 @@ public class TaskApplication : ITaskApplication _taskRepository.SaveChanges(); return operation.Succcedded(task.id); } + + public List GetRequestTaskHasTicket(TaskSearchModel searchModel) + { + return _taskRepository.GetRequestTaskHasTicket(searchModel); + } + //تایید درخواست مهلت public OperationResult AcceptRequestDatetime(long taskId, long assignedId, string message) { @@ -741,9 +736,9 @@ public class TaskApplication : ITaskApplication } var task = _taskRepository.GetIncludeAssign(command.TaskId); - if (task.SenderId ==accountId) + if (task.SenderId == accountId) { - command.Description=string.IsNullOrWhiteSpace(command.Description) ? "وظیفه محول‌شده توسط ارسال کننده به پایان رسیده است." :command.Description; + command.Description = string.IsNullOrWhiteSpace(command.Description) ? "وظیفه محول‌شده توسط ارسال کننده به پایان رسیده است." : command.Description; } else { @@ -870,6 +865,17 @@ public class TaskApplication : ITaskApplication return _taskRepository.AllRequestedTasks(searchModel); } + public int TasksHaveTicketCounts(long userId) + { + return _taskRepository.TasksHaveTicketCounts(userId); + } + + public int TasksHaveTicketRequestsCount(long userId) + { + return _taskRepository.TasksHaveTicketRequestsCount(userId); + } + + public List GetTaskMessages(long assignId) { return _taskMessageRepository.GetTaskMessages(assignId); @@ -900,16 +906,13 @@ public class TaskApplication : ITaskApplication return operation.Failed("تاریخی برای درخواست وظیفه ثبت نشده است"); } - DateTime timeGr = time.ToGeorgianDateTime2(); + DateTime timeGr = time.ToEndDayOfGeorgianDateTime(); if (timeGr.IsInvalidDateTime()) { return operation.Failed("لطفا تاریخ خود را به درستی وارد کنید"); } - message = string.IsNullOrWhiteSpace(message) ? "درخواست شما مورد تایید قرار گرفت" : message; - assign.ChangeTimeTask(timeGr); - var messageEntity = new TaskMessage(message, "تایید و تغییر درخواست کنسل", assign.id); _taskMessageRepository.Create(messageEntity); _taskMessageRepository.SaveChanges(); @@ -1009,6 +1012,7 @@ public class TaskApplication : ITaskApplication return _taskRepository.OverdueTasksCount(userId); } + //public OperationResult MoveDataFRomTaskToAssign() //{ // return _taskRepository.MoveDataFRomTaskToAssign(); diff --git a/AccountManagement.Application/TaskScheduleApplication.cs b/AccountManagement.Application/TaskScheduleApplication.cs index 5537874f..e78d01b8 100644 --- a/AccountManagement.Application/TaskScheduleApplication.cs +++ b/AccountManagement.Application/TaskScheduleApplication.cs @@ -94,8 +94,8 @@ public class TaskScheduleApplication : ITaskScheduleApplication } try { - DateTime previousDateRaw = command.EndTaskDate.ToGeorgianDateTime2(); - DateTime previousDateEdited = command.EndTaskDate.ToGeorgianDateTime2(); + DateTime previousDateRaw = command.EndTaskDate.ToEndDayOfGeorgianDateTime(); + DateTime previousDateEdited = command.EndTaskDate.ToEndDayOfGeorgianDateTime(); int count = Convert.ToInt32(command.ScheduleCount); bool isInt = int.TryParse(command.ScheduleUnitNumber, out int unitNumber); diff --git a/AccountManagement.Application/TicketApplication.cs b/AccountManagement.Application/TicketApplication.cs index 95c88b1f..5ab99091 100644 --- a/AccountManagement.Application/TicketApplication.cs +++ b/AccountManagement.Application/TicketApplication.cs @@ -1,10 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net.Sockets; -using System.Reflection; -using _0_Framework.Application; +using _0_Framework.Application; using AccountManagement.Application.Contracts.Task; using AccountManagement.Application.Contracts.Ticket; using AccountManagement.Application.Contracts.TicketAccessAccount; @@ -14,12 +8,12 @@ using AccountManagement.Domain.AssignAgg; using AccountManagement.Domain.ClientResponseAgg; using AccountManagement.Domain.MediaAgg; using AccountManagement.Domain.TaskAgg; -using AccountManagement.Domain.TicketAccessAccountAgg; using AccountManagement.Domain.TicketAgg; -using CompanyManagment.App.Contracts.Workshop; -using IPE.SmsIrClient.Models.Results; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; namespace AccountManagement.Application; @@ -68,7 +62,7 @@ public class TicketApplication : ITicketApplication var ticketNumber = (_ticketRepository.GetLastTicketNumber() + 1).ToString("D5"); var ticket = new Ticket(command.Title, command.Description, command.SenderId, command.ContractingPartyName, - command.TicketType, command.WorkshopId, ticketNumber, command.SubAccountId); + command.TicketType, command.WorkshopId, ticketNumber,command.SubAccountId); _ticketRepository.Create(ticket); _ticketRepository.SaveChanges(); @@ -203,7 +197,7 @@ public class TicketApplication : ITicketApplication - var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) ? command.EndTaskDate.ToGeorgianDateTime2() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime); + var endTask = string.IsNullOrWhiteSpace(command.EndTaskTime) ? command.EndTaskDate.ToEndDayOfGeorgianDateTime() : command.EndTaskDate.ToGeorgianDateWithTime(command.EndTaskTime); var task = new Tasks(command.Title, command.Description, command.SenderId, command.ContractingPartyName, ticketId); _taskRepository.Create(task); @@ -214,7 +208,7 @@ public class TicketApplication : ITicketApplication foreach (var receiver in receivers) { var assign = new Assign(task.id, task.SenderId, receiver.id, sender.Position.PositionValue, receiver.Fullname, - receiver.Position.PositionValue, endTask,true); + receiver.Position.PositionValue, endTask, true); _assignRepository.Create(assign); } _assignRepository.SaveChanges(); @@ -305,10 +299,10 @@ public class TicketApplication : ITicketApplication if (_ticketAccessAccountApplication.HasTicketAccess(command.AdminId)) adminRes.Active(); var ticket = _ticketRepository.Get(command.TicketId); - _ticketRepository.CreateAdminResponse(adminRes); - ticket.Responded(); - _ticketRepository.SaveChanges(); - + _ticketRepository.CreateAdminResponse(adminRes); + ticket.Responded(); + _ticketRepository.SaveChanges(); + #region SaveDocuments @@ -376,7 +370,7 @@ public class TicketApplication : ITicketApplication var ticket = _ticketRepository.Get(command.TicketId); _ticketRepository.CreateClientResponse(clientRes); ticket.Open(); - _ticketRepository.SaveChanges(); + _ticketRepository.SaveChanges(); #region SaveDocuments if (command.UploadedFileIds?.Count > 0) @@ -440,6 +434,11 @@ public class TicketApplication : ITicketApplication return _ticketRepository.GetAll(searchModel); } + public List GetDeletedTicket() + { + return _ticketRepository.GetDeletedTicket(); + } + public bool IsExist(long id) { return _ticketRepository.Exists(x => x.id == id); @@ -516,7 +515,7 @@ public class TicketApplication : ITicketApplication var ticket = _ticketRepository.Get(adminRes.TicketId); - if (adminRes.IsActiveString == "true") + if (adminRes.IsActiveString == "true") { return operation.Failed("خطایی رخ داده است . لطفا با مدیر سیستم تماس بگیرید"); } @@ -545,7 +544,7 @@ public class TicketApplication : ITicketApplication var operation = new OperationResult(); var adminRes = _ticketRepository.GetAdminResponse(adminResId); var ticket = _ticketRepository.Get(adminRes.TicketId); - if (adminRes.IsActiveString == "true") + if (adminRes.IsActiveString == "true") { return operation.Failed("خطایی رخ داده است . لطفا با مدیر سیستم تماس بگیرید"); } @@ -563,11 +562,11 @@ public class TicketApplication : ITicketApplication try { var adminRes = _ticketRepository.GetAdminResponse(adminResId); - if (adminRes.AdminAccountId!=userId) + if (adminRes.AdminAccountId != userId) { return operation.Failed("شما نمیتوانید این پیام را پاک کنید"); } - if (adminRes.IsActiveString=="true") + if (adminRes.IsActiveString == "true") { return operation.Failed("شما نمیتوانید این پیام را پاک کنید"); } @@ -581,11 +580,11 @@ public class TicketApplication : ITicketApplication } } - public OperationResult EditPendingAdminResponse(long adminResId,string newMessage) + public OperationResult EditPendingAdminResponse(long adminResId, string newMessage) { var operation = new OperationResult(); - var entity=_ticketRepository.GetAdminResponse(adminResId); - if (entity==null) + var entity = _ticketRepository.GetAdminResponse(adminResId); + if (entity == null) { return operation.Failed("مشکل سیستمی!!"); } @@ -596,26 +595,49 @@ public class TicketApplication : ITicketApplication public OperationResult CloseTicket(long ticketId) { - var operation= new OperationResult(); - var ticket = _ticketRepository.Get(ticketId); - if (ticket == null) - { - return operation.Failed("اطلاعات وارد شده نامعتبر است"); - } + var operation = new OperationResult(); + var ticket = _ticketRepository.Get(ticketId); + if (ticket == null) + { + return operation.Failed("اطلاعات وارد شده نامعتبر است"); + } ticket.Completed(); _ticketRepository.SaveChanges(); return operation.Succcedded(); } + public OperationResult DeleteTicket(long ticketId) + { + var op = new OperationResult(); + var ticket = _ticketRepository.Get(ticketId); + if (ticket == null) + return op.Failed("چنین آیتمی وجود ندارد"); + ticket.Delete(); + _ticketRepository.SaveChanges(); + return op.Succcedded(); + } + + public OperationResult RestoreDeletedTicket(long ticketId) + { + var op = new OperationResult(); + var ticket = _ticketRepository.Get(ticketId); + if (ticket == null) + return op.Failed("چنین آیتمی وجود ندارد"); + ticket.RestoreDelete (); + _ticketRepository.SaveChanges(); + return op.Succcedded(); + } + public TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin() { - return _ticketRepository.GetTypesCountOfTicketForAdmin(); + return _ticketRepository.GetTypesCountOfTicketForAdmin(); } public TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId) { - return _ticketRepository.GetTypesCountOfTicketForClient(workshopId); + return _ticketRepository.GetTypesCountOfTicketForClient(workshopId); } + #region Vafa public int GetAdminTicketsCount() diff --git a/AccountManagement.Configuration/AccountManagementBootstrapper.cs b/AccountManagement.Configuration/AccountManagementBootstrapper.cs index 34b1dc05..936c5bba 100644 --- a/AccountManagement.Configuration/AccountManagementBootstrapper.cs +++ b/AccountManagement.Configuration/AccountManagementBootstrapper.cs @@ -14,6 +14,7 @@ using AccountManagement.Domain.AccountLeftWorkAgg; using AccountManagement.Domain.AssignAgg; using AccountManagement.Domain.CameraAccountAgg; using AccountManagement.Domain.MediaAgg; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.RoleAgg; using AccountManagement.Domain.SubAccountAgg; using AccountManagement.Domain.SubAccountPermissionSubtitle1Agg; @@ -32,7 +33,6 @@ using Company.Domain.WorkshopAccountAgg; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using TaskManager.Application; -using TaskManager.Domain.PositionAgg; using TaskManager.Infrastructure.EFCore.Repository; namespace AccountManagement.Configuration diff --git a/AccountManagement.Domain/AccountAgg/Account.cs b/AccountManagement.Domain/AccountAgg/Account.cs index 26f7df22..253297ba 100644 --- a/AccountManagement.Domain/AccountAgg/Account.cs +++ b/AccountManagement.Domain/AccountAgg/Account.cs @@ -2,9 +2,8 @@ using _0_Framework.Domain; using AccountManagement.Domain.AccountLeftWorkAgg; using AccountManagement.Domain.CameraAccountAgg; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.RoleAgg; -using TaskManager.Domain.PositionAgg; - namespace AccountManagement.Domain.AccountAgg diff --git a/AccountManagement.Domain/PositionAgg/IPositionRepository.cs b/AccountManagement.Domain/PositionAgg/IPositionRepository.cs index 1227265d..78b6a101 100644 --- a/AccountManagement.Domain/PositionAgg/IPositionRepository.cs +++ b/AccountManagement.Domain/PositionAgg/IPositionRepository.cs @@ -4,7 +4,7 @@ using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Position; using AccountManagement.Domain.AccountAgg; -namespace TaskManager.Domain.PositionAgg; +namespace AccountManagement.Domain.PositionAgg; public interface IPositionRepository : IRepository { diff --git a/AccountManagement.Domain/PositionAgg/Position.cs b/AccountManagement.Domain/PositionAgg/Position.cs index 4ec1f3b8..0c05493f 100644 --- a/AccountManagement.Domain/PositionAgg/Position.cs +++ b/AccountManagement.Domain/PositionAgg/Position.cs @@ -2,7 +2,7 @@ using _0_Framework.Domain; using AccountManagement.Domain.AccountAgg; -namespace TaskManager.Domain.PositionAgg; +namespace AccountManagement.Domain.PositionAgg; public class Position:EntityBase { diff --git a/AccountManagement.Domain/TaskAgg/ITaskRepository.cs b/AccountManagement.Domain/TaskAgg/ITaskRepository.cs index c5a41fbd..f20d84a4 100644 --- a/AccountManagement.Domain/TaskAgg/ITaskRepository.cs +++ b/AccountManagement.Domain/TaskAgg/ITaskRepository.cs @@ -4,33 +4,140 @@ using _0_Framework.Application; using _0_Framework.Domain; using AccountManagement.Application.Contracts.Task; using AccountManagement.Application.Contracts.TaskMessage; +using Microsoft.VisualBasic.CompilerServices; namespace AccountManagement.Domain.TaskAgg; public interface ITaskRepository:IRepository { + /// + /// گرقتن اطلاعات تسک + /// + /// + /// EditTask GetDetails(long TaskId); + + /// + /// گرفتن تسک با ارجاع ها + /// + /// + /// Tasks GetIncludeAssign(long taskId); + + /// + /// حذف تسک + /// + /// void Remove(long id); - //گرفتن تمامی وظایف - List GetTasks(TaskSearchModel searchModel); + + + /// + /// گرفتن تمامی وظایف + /// + /// + /// List GetAllTasks(TaskSearchModel searchModel); + + /// + /// گرفتن لیست تسک های درخواست داده شده. بدون تیکت + /// + /// + /// List GetRequestedTasks(TaskSearchModel searchModel); + + /// + /// لیست درخواست های تسک دارای تیکت + /// + /// + /// + List GetRequestTaskHasTicket(TaskSearchModel searchModel); + + /// + /// گرفتن وظایف شخصی + /// + /// + /// List GetSelfTasks(TaskSearchModel searchModel); //List GetAllNotSelfIncludedTasks(TaskSearchModel searchModel); + + /// + /// لیست وظایف ارسالی + /// + /// + /// List GetReceivedTasks(TaskSearchModel searchModel); + + /// + /// لیست وظایف ارسالی + /// + /// + /// List GetSentTasks(TaskSearchModel searchModel); + + /// + /// همه لیست درخواست ها + /// + /// + /// List AllRequestedTasks(TaskSearchModel searchModel); + + /// + /// لیست تسک های دارا تیکت + /// + /// + /// List GetTasksHaveTicket(TaskSearchModel searchModel); - string SetTasksColors(DateTime time,bool isCancel); + + /// + /// تعداد تسک های درخواستی. بدون تیکت + /// + /// int GetRequestedTasksCount(); + + /// + /// گرفتن جزئیات درخواست وظیفه + /// + /// + /// EditTask GetRequestDetails(long id); + + /// + /// گرفتن مسیر environment + /// + /// string GetWebEnvironmentPath(); + + /// + /// آیا تسک عقب افتاده ای دارد یا خیر + /// + /// + /// bool HasOverdueTasks(long userId); + + /// + /// تعداد تسک های عقب افتاده + /// + /// + /// int OverdueTasksCount(long userId); + /// + /// تعداد تسک های دارای تیکت + /// + /// + /// + int TasksHaveTicketCounts(long userId); - /// گرفتن پیام های مربوط به هر تسک + /// + /// تعداد درخواست های تسک های دارا تیکت + /// + /// + /// + int TasksHaveTicketRequestsCount(long userId); + + + + // گرفتن پیام های مربوط به هر تسک diff --git a/AccountManagement.Domain/TicketAgg/ITicketRepository.cs b/AccountManagement.Domain/TicketAgg/ITicketRepository.cs index 60998bfb..7730f1f1 100644 --- a/AccountManagement.Domain/TicketAgg/ITicketRepository.cs +++ b/AccountManagement.Domain/TicketAgg/ITicketRepository.cs @@ -10,6 +10,7 @@ namespace AccountManagement.Domain.TicketAgg; public interface ITicketRepository:IRepository { List GetAll(TicketSearchModel searchModel); + List GetDeletedTicket(); List GetTicketsForClients(TicketSearchModel searchModel); void CreateAdminResponse(AdminResponse command); void CreateClientResponse(ClientResponse command); @@ -22,7 +23,7 @@ public interface ITicketRepository:IRepository TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin(); TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId); - #region Vafa - int GetAdminTicketsCount(); - #endregion + #region Vafa + int GetAdminTicketsCount(); + #endregion } \ No newline at end of file diff --git a/AccountManagement.Domain/TicketAgg/Ticket.cs b/AccountManagement.Domain/TicketAgg/Ticket.cs index b16a895d..898aa337 100644 --- a/AccountManagement.Domain/TicketAgg/Ticket.cs +++ b/AccountManagement.Domain/TicketAgg/Ticket.cs @@ -33,6 +33,7 @@ public class Ticket:EntityBase public List ClientResponses { get; set; } public List AdminResponses{ get; set; } public List TicketMedias { get; set; } + public bool IsDeleted { get; set; } public void Completed() { @@ -53,4 +54,14 @@ public class Ticket:EntityBase { Status = "باز"; } + + public void Delete() + { + IsDeleted = true; + } + + public void RestoreDelete() + { + IsDeleted = false; + } } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/AccountContext.cs b/AccountMangement.Infrastructure.EFCore/AccountContext.cs index 1719e572..ef1d73cb 100644 --- a/AccountMangement.Infrastructure.EFCore/AccountContext.cs +++ b/AccountMangement.Infrastructure.EFCore/AccountContext.cs @@ -10,11 +10,11 @@ using AccountManagement.Domain.MediaAgg; using AccountManagement.Domain.TaskAgg; using AccountManagement.Domain.TaskMediaAgg; using AccountManagement.Domain.TaskSubjectAgg; -using TaskManager.Domain.PositionAgg; using AccountManagement.Domain.AdminResponseAgg; using AccountManagement.Domain.AdminResponseMediaAgg; using AccountManagement.Domain.ClientResponseAgg; using AccountManagement.Domain.ClientResponseMediaAgg; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.TicketAgg; using AccountManagement.Domain.TicketMediasAgg; using AccountManagement.Domain.TaskMessageAgg; diff --git a/AccountMangement.Infrastructure.EFCore/Mappings/PositionMapping.cs b/AccountMangement.Infrastructure.EFCore/Mappings/PositionMapping.cs index 03a5bd63..313f84d7 100644 --- a/AccountMangement.Infrastructure.EFCore/Mappings/PositionMapping.cs +++ b/AccountMangement.Infrastructure.EFCore/Mappings/PositionMapping.cs @@ -1,6 +1,6 @@ -using Microsoft.EntityFrameworkCore; +using AccountManagement.Domain.PositionAgg; +using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; -using TaskManager.Domain.PositionAgg; namespace TaskManager.Infrastructure.EFCore.Mapping; diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.Designer.cs b/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.Designer.cs new file mode 100644 index 00000000..99ffb844 --- /dev/null +++ b/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.Designer.cs @@ -0,0 +1,1254 @@ +// +using System; +using AccountMangement.Infrastructure.EFCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace AccountMangement.Infrastructure.EFCore.Migrations +{ + [DbContext(typeof(AccountContext))] + [Migration("20250111173142_AddIsDeleteToicket")] + partial class AddIsDeleteToicket + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.10") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AdminAreaPermission") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("ClientAriaPermission") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Email") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Fullname") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("IsActiveString") + .HasMaxLength(6) + .HasColumnType("nvarchar(6)"); + + b.Property("Mobile") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PositionId") + .HasMaxLength(10) + .HasColumnType("bigint"); + + b.Property("PositionIsActive") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("ProfilePhoto") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("RoleId") + .HasColumnType("bigint"); + + b.Property("RoleName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("VerifyCode") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.HasKey("id"); + + b.HasIndex("PositionId"); + + b.HasIndex("RoleId"); + + b.ToTable("Accounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountLeftWorkAgg.AccountLeftWork", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("LeftWorkGr") + .HasColumnType("datetime2"); + + b.Property("StartWorkGr") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.HasIndex("AccountId"); + + b.ToTable("AccountLeftWork", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AdminAccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveString") + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Response") + .HasColumnType("ntext"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TicketId"); + + b.ToTable("AdminResponses", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b => + { + b.Property("AdminResponseId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("AdminResponseId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("AdminResponseMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AcceptedTimeRequest") + .HasColumnType("int"); + + b.Property("AssignedId") + .HasColumnType("bigint"); + + b.Property("AssignedName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("AssignedPositionValue") + .HasColumnType("int"); + + b.Property("AssignerId") + .HasColumnType("bigint"); + + b.Property("AssignerPositionValue") + .HasColumnType("int"); + + b.Property("CancelDescription") + .HasColumnType("ntext"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DoneDescription") + .HasColumnType("ntext"); + + b.Property("EndTaskDate") + .HasColumnType("datetime2"); + + b.Property("FirstTimeCreation") + .HasColumnType("bit"); + + b.Property("IsCancel") + .HasColumnType("bit"); + + b.Property("IsCanceledRequest") + .HasColumnType("bit"); + + b.Property("IsDone") + .HasColumnType("bit"); + + b.Property("IsDoneRequest") + .HasColumnType("bit"); + + b.Property("RequestDate") + .HasColumnType("datetime2"); + + b.Property("TaskId") + .HasColumnType("bigint"); + + b.Property("TimeRequest") + .HasColumnType("bit"); + + b.Property("TimeRequestDescription") + .HasColumnType("ntext"); + + b.HasKey("id"); + + b.HasIndex("TaskId"); + + b.ToTable("Assigns", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("IsActiveSting") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("Mobile") + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.Property("WorkshopName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("AccountId"); + + b.ToTable("CameraAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Response") + .HasColumnType("ntext"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TicketId"); + + b.ToTable("ClientResponses", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b => + { + b.Property("ClientResponseId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("ClientResponseId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("ClientResponseMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Category") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Path") + .HasColumnType("ntext"); + + b.Property("Type") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.ToTable("Medias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("PositionName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("PositionValue") + .HasMaxLength(2) + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("Positions", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("Roles", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountAgg.SubAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("FName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IsActive") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("LName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("NationalCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)"); + + b.Property("PhoneNumber") + .IsRequired() + .HasMaxLength(11) + .HasColumnType("nvarchar(11)"); + + b.Property("ProfilePhoto") + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("SubAccountRoleId") + .HasColumnType("bigint"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("VerifyCode") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.HasIndex("SubAccountRoleId"); + + b.ToTable("SubAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.ToTable("SubAccountPermissionSubtitle1", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle2", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle3", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle4Agg.SubAccountPermissionSubtitle4", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Code") + .HasMaxLength(15) + .HasColumnType("int"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ParentId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("id"); + + b.HasIndex("ParentId"); + + b.ToTable("SubAccountPermissionSubtitle4", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Title") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.HasKey("id"); + + b.ToTable("SubAccountRoles", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyName") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("ntext"); + + b.Property("IsActiveString") + .HasMaxLength(7) + .HasColumnType("nvarchar(7)"); + + b.Property("SenderId") + .HasColumnType("bigint"); + + b.Property("StartTaskDate") + .HasColumnType("datetime2"); + + b.Property("TaskScheduleId") + .HasColumnType("bigint"); + + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.HasIndex("TaskScheduleId"); + + b.ToTable("TasksManager", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b => + { + b.Property("MediaId") + .HasColumnType("bigint"); + + b.Property("TaskId") + .HasColumnType("bigint"); + + b.HasKey("MediaId", "TaskId"); + + b.HasIndex("TaskId"); + + b.ToTable("TasksMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AssignId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Message") + .HasColumnType("ntext"); + + b.Property("RequestedDateFa") + .HasMaxLength(25) + .HasColumnType("nvarchar(25)"); + + b.Property("TypeOfMessage") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.HasKey("id"); + + b.HasIndex("AssignId"); + + b.ToTable("TaskMessages", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageItemsAgg.TaskMessageItems", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ReceiverAccountId") + .HasColumnType("bigint"); + + b.Property("SenderAccountId") + .HasColumnType("bigint"); + + b.Property("TaskMessageId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.HasIndex("TaskMessageId"); + + b.ToTable("TaskMessageItems", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("Count") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("LastEndTaskDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("UnitNumber") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.Property("UnitType") + .HasMaxLength(10) + .HasColumnType("nvarchar(10)"); + + b.HasKey("id"); + + b.ToTable("TaskSchedules", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskSubjectAgg.TaskSubject", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Subject") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.HasKey("id"); + + b.ToTable("TaskSubjects", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAccessAccountAgg.TicketAccessAccount", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("AccountId") + .HasColumnType("bigint"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.HasKey("id"); + + b.ToTable("TicketAccessAccounts", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("ContractingPartyName") + .HasMaxLength(155) + .HasColumnType("nvarchar(155)"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnType("ntext"); + + b.Property("IsDeleted") + .HasColumnType("bit"); + + b.Property("SenderId") + .HasColumnType("bigint"); + + b.Property("Status") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("SubAccountSenderId") + .HasColumnType("bigint"); + + b.Property("TicketNumber") + .HasMaxLength(12) + .HasColumnType("nvarchar(12)"); + + b.Property("TicketType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Title") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("WorkshopId") + .HasColumnType("bigint"); + + b.HasKey("id"); + + b.ToTable("Tickets", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b => + { + b.Property("TicketId") + .HasColumnType("bigint"); + + b.Property("MediaId") + .HasColumnType("bigint"); + + b.HasKey("TicketId", "MediaId"); + + b.HasIndex("MediaId"); + + b.ToTable("TicketMedias", (string)null); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.HasOne("AccountManagement.Domain.PositionAgg.Position", "Position") + .WithMany("Accounts") + .HasForeignKey("PositionId"); + + b.HasOne("AccountManagement.Domain.RoleAgg.Role", "Role") + .WithMany("Accounts") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Position"); + + b.Navigation("Role"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountLeftWorkAgg.AccountLeftWork", b => + { + b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account") + .WithMany("AccountLeftWorkList") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("AdminResponses") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseMediaAgg.AdminResponseMedia", b => + { + b.HasOne("AccountManagement.Domain.AdminResponseAgg.AdminResponse", "AdminResponse") + .WithMany("AdminResponseMedias") + .HasForeignKey("AdminResponseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("AdminResponseMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("AdminResponse"); + + b.Navigation("Media"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Task") + .WithMany("Assigns") + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Task"); + }); + + modelBuilder.Entity("AccountManagement.Domain.CameraAccountAgg.CameraAccount", b => + { + b.HasOne("AccountManagement.Domain.AccountAgg.Account", "Account") + .WithMany("CameraAccounts") + .HasForeignKey("AccountId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Account"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("ClientResponses") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseMediaAgg.ClientResponseMedia", b => + { + b.HasOne("AccountManagement.Domain.ClientResponseAgg.ClientResponse", "ClientResponse") + .WithMany("ClientResponseMedias") + .HasForeignKey("ClientResponseId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("ClientResponseMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ClientResponse"); + + b.Navigation("Media"); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.OwnsMany("AccountManagement.Domain.RoleAgg.Permission", "Permissions", b1 => + { + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id")); + + b1.Property("Code") + .HasColumnType("int"); + + b1.Property("RoleId") + .HasColumnType("bigint"); + + b1.HasKey("Id"); + + b1.HasIndex("RoleId"); + + b1.ToTable("RolePermissions", (string)null); + + b1.WithOwner("Role") + .HasForeignKey("RoleId"); + + b1.Navigation("Role"); + }); + + b.Navigation("Permissions"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountAgg.SubAccount", b => + { + b.HasOne("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", "SubAccountRole") + .WithMany("SubAccounts") + .HasForeignKey("SubAccountRoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("SubAccountRole"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle4Agg.SubAccountPermissionSubtitle4", b => + { + b.HasOne("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", "Parent") + .WithMany("Children") + .HasForeignKey("ParentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.OwnsMany("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRolePermission", "RolePermissions", b1 => + { + b1.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("id")); + + b1.Property("PermissionCode") + .HasColumnType("int"); + + b1.Property("SubAccountRoleId") + .HasColumnType("bigint"); + + b1.HasKey("id"); + + b1.HasIndex("SubAccountRoleId"); + + b1.ToTable("SubAccountRolePermissions", (string)null); + + b1.WithOwner("SubAccountRole") + .HasForeignKey("SubAccountRoleId"); + + b1.Navigation("SubAccountRole"); + }); + + b.Navigation("RolePermissions"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.HasOne("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", "TaskSchedule") + .WithMany("TasksList") + .HasForeignKey("TaskScheduleId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TaskSchedule"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMediaAgg.TaskMedia", b => + { + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("TaskMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.TaskAgg.Tasks", "Tasks") + .WithMany("TaskMedias") + .HasForeignKey("TaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Media"); + + b.Navigation("Tasks"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.HasOne("AccountManagement.Domain.AssignAgg.Assign", "Assign") + .WithMany("TaskMessageList") + .HasForeignKey("AssignId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Assign"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageItemsAgg.TaskMessageItems", b => + { + b.HasOne("AccountManagement.Domain.TaskMessageAgg.TaskMessage", "TaskMessage") + .WithMany("TaskMessageItemsList") + .HasForeignKey("TaskMessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TaskMessage"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketMediasAgg.TicketMedia", b => + { + b.HasOne("AccountManagement.Domain.MediaAgg.Media", "Media") + .WithMany("TicketMedias") + .HasForeignKey("MediaId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("AccountManagement.Domain.TicketAgg.Ticket", "Ticket") + .WithMany("TicketMedias") + .HasForeignKey("TicketId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Media"); + + b.Navigation("Ticket"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => + { + b.Navigation("AccountLeftWorkList"); + + b.Navigation("CameraAccounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AdminResponseAgg.AdminResponse", b => + { + b.Navigation("AdminResponseMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.AssignAgg.Assign", b => + { + b.Navigation("TaskMessageList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.ClientResponseAgg.ClientResponse", b => + { + b.Navigation("ClientResponseMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.MediaAgg.Media", b => + { + b.Navigation("AdminResponseMedias"); + + b.Navigation("ClientResponseMedias"); + + b.Navigation("TaskMedias"); + + b.Navigation("TicketMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Navigation("Accounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => + { + b.Navigation("Accounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle1Agg.SubAccountPermissionSubtitle1", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle2Agg.SubAccountPermissionSubtitle2", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountPermissionSubtitle3Agg.SubAccountPermissionSubtitle3", b => + { + b.Navigation("Children"); + }); + + modelBuilder.Entity("AccountManagement.Domain.SubAccountRoleAgg.SubAccountRole", b => + { + b.Navigation("SubAccounts"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskAgg.Tasks", b => + { + b.Navigation("Assigns"); + + b.Navigation("TaskMedias"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskMessageAgg.TaskMessage", b => + { + b.Navigation("TaskMessageItemsList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TaskScheduleAgg.TaskSchedule", b => + { + b.Navigation("TasksList"); + }); + + modelBuilder.Entity("AccountManagement.Domain.TicketAgg.Ticket", b => + { + b.Navigation("AdminResponses"); + + b.Navigation("ClientResponses"); + + b.Navigation("TicketMedias"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.cs b/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.cs new file mode 100644 index 00000000..21f83251 --- /dev/null +++ b/AccountMangement.Infrastructure.EFCore/Migrations/20250111173142_AddIsDeleteToicket.cs @@ -0,0 +1,29 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace AccountMangement.Infrastructure.EFCore.Migrations +{ + /// + public partial class AddIsDeleteToicket : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "IsDeleted", + table: "Tickets", + type: "bit", + nullable: false, + defaultValue: false); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsDeleted", + table: "Tickets"); + } + } +} diff --git a/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs b/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs index e01fea0b..06ae2209 100644 --- a/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs +++ b/AccountMangement.Infrastructure.EFCore/Migrations/AccountContextModelSnapshot.cs @@ -364,6 +364,30 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.ToTable("Medias", (string)null); }); + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Property("id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("PositionName") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("PositionValue") + .HasMaxLength(2) + .HasColumnType("int"); + + b.HasKey("id"); + + b.ToTable("Positions", (string)null); + }); + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => { b.Property("id") @@ -800,6 +824,9 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.Property("Description") .HasColumnType("ntext"); + b.Property("IsDeleted") + .HasColumnType("bit"); + b.Property("SenderId") .HasColumnType("bigint"); @@ -845,33 +872,9 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.ToTable("TicketMedias", (string)null); }); - modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b => - { - b.Property("id") - .ValueGeneratedOnAdd() - .HasColumnType("bigint"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("id")); - - b.Property("CreationDate") - .HasColumnType("datetime2"); - - b.Property("PositionName") - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); - - b.Property("PositionValue") - .HasMaxLength(2) - .HasColumnType("int"); - - b.HasKey("id"); - - b.ToTable("Positions", (string)null); - }); - modelBuilder.Entity("AccountManagement.Domain.AccountAgg.Account", b => { - b.HasOne("TaskManager.Domain.PositionAgg.Position", "Position") + b.HasOne("AccountManagement.Domain.PositionAgg.Position", "Position") .WithMany("Accounts") .HasForeignKey("PositionId"); @@ -1187,6 +1190,11 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.Navigation("TicketMedias"); }); + modelBuilder.Entity("AccountManagement.Domain.PositionAgg.Position", b => + { + b.Navigation("Accounts"); + }); + modelBuilder.Entity("AccountManagement.Domain.RoleAgg.Role", b => { b.Navigation("Accounts"); @@ -1237,11 +1245,6 @@ namespace AccountMangement.Infrastructure.EFCore.Migrations b.Navigation("TicketMedias"); }); - - modelBuilder.Entity("TaskManager.Domain.PositionAgg.Position", b => - { - b.Navigation("Accounts"); - }); #pragma warning restore 612, 618 } } diff --git a/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs index 5b098a4a..537f5ab1 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/AccountRepository.cs @@ -10,9 +10,9 @@ using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Threading.Tasks; +using AccountManagement.Domain.PositionAgg; using AccountManagement.Domain.RoleAgg; using Microsoft.AspNetCore.Http; -using TaskManager.Domain.PositionAgg; namespace AccountMangement.Infrastructure.EFCore.Repository; diff --git a/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs index 4f187bac..67878ce7 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/PositionRepository.cs @@ -4,10 +4,10 @@ using _0_Framework.InfraStructure; using AccountManagement.Application.Contracts.Account; using AccountManagement.Application.Contracts.Position; using AccountManagement.Domain.AccountAgg; +using AccountManagement.Domain.PositionAgg; using AccountMangement.Infrastructure.EFCore; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; -using TaskManager.Domain.PositionAgg; namespace TaskManager.Infrastructure.EFCore.Repository; diff --git a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs index 87746516..f70e1f1c 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/TaskRepository.cs @@ -13,2685 +13,2672 @@ using AccountManagement.Application.Contracts.TaskMessage; using AccountManagement.Domain.AccountAgg; using AccountManagement.Domain.TaskAgg; using AccountManagement.Domain.TicketAgg; -using TaskManager.Domain.PositionAgg; -using static Microsoft.EntityFrameworkCore.DbLoggerCategory; -using Microsoft.Identity.Client; -using Newtonsoft.Json.Linq; + using Microsoft.AspNetCore.Hosting; using AccountManagement.Application.Contracts.Ticket; +using AccountManagement.Domain.PositionAgg; +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 IPositionRepository _positionRepository; - private readonly IWebHostEnvironment _webHostEnvironment; - private readonly IAuthHelper _authHelper; - private readonly ITicketRepository _ticketRepository; - - public TaskRepository(IHttpContextAccessor contextAccessor, AccountContext accountContext, - IAccountRepository accountRepository, IPositionRepository positionRepository, - IWebHostEnvironment webHostEnvironment, IAuthHelper authHelper, ITicketRepository ticketRepository) : base(accountContext) - { - _contextAccessor = contextAccessor; - _accountContext = accountContext; - _accountRepository = accountRepository; - _positionRepository = positionRepository; - _webHostEnvironment = webHostEnvironment; - _authHelper = authHelper; - _ticketRepository = ticketRepository; - } - - public EditTask GetDetails(long TaskId) - { - var task = Get(TaskId); - - var userId = _authHelper.CurrentAccountId(); - - EditTask res = _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.id == TaskId).Select(x => - new EditTask() - { - - 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(), - ContractingPartyName = x.ContractingPartyName, - ReceiverId = _accountContext.Assigns.Where(a => a.TaskId == x.id).Select(a => a.AssignedId).ToList(), - SenderId = x.SenderId, - AssignViewModels = x.Assigns.Select(a => new AssignViewModel() - { - Id = a.id, - EndTaskDateFa = a.EndTaskDate.ToFarsi(), - IsCancel = a.IsCancel, - IsCanceledRequest = a.IsCanceledRequest, - IsDone = a.IsDone, - IsDoneRequest = a.IsDoneRequest, - TimeRequest = a.TimeRequest, - AssignedName = a.AssignedName, - AssignedId = a.AssignedId, - AssignerId = a.AssignerId - - - }).ToList(), - IsDone = x.Assigns.All(a => a.IsDone), - IsCancel = x.Assigns.All(a => a.IsCancel), - TicketId = x.TicketId, - CreateDateFa = x.CreationDate.ToFarsi(), - - SenderViewModel = _accountContext.Accounts.Where(a => a.id == x.SenderId).Select(a => - new AccountViewModel() - { - Fullname = a.Fullname, - Id = a.id, - - }).FirstOrDefault() - - }).FirstOrDefault(); - - res.TicketViewModel = res.TicketId != null && res.TicketId > 0 - ? _ticketRepository.GetDetails(res.TicketId.Value) - : null; - if (res.AssignViewModels.Any(x => x.AssignedId == userId)) - { - res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId) - .EndTaskDate.ToFarsi(); - - - res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList(); - res.IsDone = res.AssignViewModels.First(x => x.AssignedId == userId).IsDone; - res.IsCancel = res.AssignViewModels.First(x => x.AssignedId == userId).IsCancel; - } - - //_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(); - return res; - } - - public Tasks GetIncludeAssign(long taskId) - { - return _accountContext.Tasks.Include(x => x.Assigns).FirstOrDefault(x => x.id == taskId); - } - - public void Remove(long id) - { - var task = Get(id); - Remove(task); - } - - - - public List GetRequestedTasks(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; - - - query = _accountContext.Assigns.Include(x => x.Task).Where(x => - !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && - (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId).Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest - - }); - - //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); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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.IsCancelRequest) - .ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest); - var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); - - var addAssign = finalList.Select(x => new TaskViewModel() - { - AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != 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(); - - - var finalAssign = addAssign.Select(x => new TaskViewModel() - { - - AssignList = 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, - AssignViewModels = x.AssignViewModels - }).ToList(); - - var final = finalAssign.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, - CanCheckRequests = x.Sender.PositionValue >= positionValue, - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - }).ToList(); - return final; - } - - public List GetAllTasks(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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)) - .Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - - }); - } - else - { - return new(); - } - - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - //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); - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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) && accountId != 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() - { - - 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, - AssignViewModels = x.AssignViewModels - }).ToList(); - - final = final.Select(x => new TaskViewModel() - { - - - 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - - }).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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && - x.Task.SenderId == accountId) - .Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.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 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)) - .Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - - }); - - - } - - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.AssignedPositionValue >= positionValue).Select(a => a.AssignedId) - .ToList(), - CreateDate = x.CreateDate, - EndTaskDateFA = x.EndTaskDateFA, - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDateGE, - Name = x.Name, - 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 - }); - - #region Search - 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); - - } - - #endregion - - - var resEnum = res.AsEnumerable(); - var result = resEnum.GroupBy(x => x.Id).Select(x => new TaskViewModel() - { - Sender = x.First().Sender, - SelfName = x.First().SelfName, - Assigned = x.First().Assigned, - CreateDate = x.First().CreateDate, - EndTaskDateFA = x.Min(e => e.EndTaskDateGE).ToFarsi(), - IsDone = x.All(a => a.IsDone) ? true : false, - EndTaskDateGE = x.All(a => a.IsDone) ? x.Min(e => e.EndTaskDateGE) : x.Where(e => !e.IsDone).Min(e => e.EndTaskDateGE), - Name = x.First().Name, - RequestTime = x.First().RequestTime, - Id = x.Key, - CreateTaskDateGE = x.First().CreateTaskDateGE, - IsCancel = x.First().IsCancel, - AcceptedTimeRequest = x.First().AcceptedTimeRequest, - IsCancelRequest = x.First().IsCancelRequest, - ContractingPartyName = x.First().ContractingPartyName, - MediaCount = x.First().MediaCount, - Description = x.First().Description, - IsDoneRequest = x.First().IsDoneRequest, - - }); - - 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) && accountId != 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, - 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.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, - 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, - AssignViewModels = x.AssignViewModels - }).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, - 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - - }).ToList(); - return final; - } - - public List AllRequestedTasks(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).Where(x => - !x.IsDone && x.Task.IsActiveString == "true" && - (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest)).Select(x => - new TaskViewModel() - { - - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest - - }); - } - else - { - return new(); - } - //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); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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.IsCancelRequest) - .ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest); - var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); - - var AddAssign = finalList.Select(x => new TaskViewModel() - { - AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != 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(); - - - var finalAssign = AddAssign.Select(x => new TaskViewModel() - { - - AssignList = 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, - AssignViewModels = x.AssignViewModels - }).ToList(); - - var final = finalAssign.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, - CanCheckRequests = x.Sender.PositionValue >= positionValue, - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - }).ToList(); - return final; - } - - public List GetTasksHaveTicket(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 raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias) - .ThenInclude(x => x.Media) - .Where(x => - x.Task.IsActiveString == "true" && (x.AssignedId == accountId || x.Task.SenderId == accountId) - && x.Task.TicketId != null && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - raw = raw.Where(x => - (x.Task.Description != null && x.Task.Description.Contains(searchModel.GeneralSearch)) - || x.Task.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Task.Title.Contains(searchModel.GeneralSearch)); - } - - - - - var query = raw.Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - }); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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 result = res.AsEnumerable(); - - - 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) && accountId != 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.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, - AssignViewModels = x.AssignViewModels - }).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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - }).ToList(); - return final; - } - - - public string SetTasksColors(DateTime date, bool isCancel) - { - if (isCancel) - { - //return "brown"; - return "green"; - } - - 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 ""; - } - - } - - 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.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && - (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId)).GroupBy(x => x.TaskId) - .Select(x => x.First()).Count(); - } - else - { - return _accountContext.Assigns.Include(x => x.Task).Where(x => - !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && - (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId)).GroupBy(x => x.TaskId) - .Select(x => x.First()).Count(); - } - } - - - public EditTask GetRequestDetails(long id) - { - var task = Get(id); - EditTask res; - - if (task.SenderId == _authHelper.CurrentAccountId() || int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value) == 1) - { - var query = _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.id == id).Select(x => new EditTask() - { - - 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(), - ContractingPartyName = x.ContractingPartyName, - ReceiverId = _accountContext.Assigns.Where(a => a.TaskId == x.id).Select(a => a.AssignedId).ToList(), - SenderId = x.SenderId, - CreateDateFa = x.CreationDate.ToFarsi(), - TicketId = x.TicketId, - - AssignViewModels = x.Assigns.Where(a => a.IsCanceledRequest || a.IsDoneRequest || a.TimeRequest).Select( - a => new AssignViewModel() - { - Id = a.id, - EndTaskDateFa = a.EndTaskDate.ToFarsiFull(), - IsCancel = a.IsCancel, - IsCanceledRequest = a.IsCanceledRequest, - IsDone = a.IsDone, - IsDoneRequest = a.IsDoneRequest, - TimeRequest = a.TimeRequest, - AssignedName = a.AssignedName, - AssignedId = a.AssignedId, - RequestDateFa = a.RequestDate.ToFarsi() - - }).ToList(), - - - }).FirstOrDefault(); - - query.TicketViewModel = query.TicketId != null && query.TicketId > 0 - ? _ticketRepository.GetDetails(query.TicketId.Value) - : null; - - return query; - } - return new(); - } - - - public string GetWebEnvironmentPath() - { - return _webHostEnvironment.ContentRootPath; - } - - public bool HasOverdueTasks(long userId) - { - - var nowDate = DateTime.Now.Date; - var hasOverDueTask = _accountContext.Assigns.Any(x => x.AssignedId == userId && x.EndTaskDate.Date < nowDate && !x.IsCancel && - !x.IsCanceledRequest && !x.IsDone - && !x.IsDoneRequest && !x.TimeRequest); - - var hasOverDueRequest = _accountContext.Assigns.Include(x => x.TaskMessageList) - .Any(x => (x.IsCanceledRequest - || x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone && - x.TaskMessageList.OrderByDescending(m => m.id).First().CreationDate.Date < nowDate); - if (hasOverDueRequest || hasOverDueTask) - { - return true; - } - else - { - return false; - } - - } - - public int OverdueTasksCount(long userId) - { - var account = _accountRepository.GetIncludePositions(userId); - if (account.Position == null) - return 0; - var positionValue = account.Position.PositionValue; - DateTime now = DateTime.Now; - int overdueTasksCount; - - if (positionValue == 1) - { - overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId && - x.AssignerId == userId && x.Task.Assigns.Count == 1 && - !x.IsCancel && !x.IsCanceledRequest && - !x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true") - .GroupBy(x => x.TaskId).Select(x => x.First()).Count(); - - //overdueTasksCount = _accountContext.Tasks.Include(x => - // x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) && - // !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) && - // !x.Assigns.Any(a => a.TimeRequest) - // && x.Assigns.Any(a => a.AssignedId == userId && a.AssignerId == userId) && - // (x.Assigns.First(a => a.AssignedId == userId && a.AssignerId == userId) - // .EndTaskDate.Date <= DateTime.Now.Date) && x.Assigns.Count == 1); - } - else - { - overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId && - !x.IsCancel && !x.IsCanceledRequest && - !x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true") - .GroupBy(x => x.TaskId).Select(x => x.First()).Count(); - } - - //overdueTasksCount = _accountContext.Tasks.Include(x => - // x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) && - // !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) && - // !x.Assigns.Any(a => a.TimeRequest) - // && x.Assigns.Any(a => a.AssignedId == userId) && - // (x.Assigns.First(a => a.AssignedId == userId).EndTaskDate.Date <= DateTime.Now.Date)); - - - - var overdueRequestsCount = _accountContext.Assigns.Include(x => x.Task) - .Where(x => (x.IsCanceledRequest - || x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone && - x.Task.IsActiveString == "true" && - x.Task.SenderId == userId).GroupBy(x => x.TaskId).Select(x => x.First()).Count(); - - return overdueTasksCount + overdueRequestsCount; - } - - - // public OperationResult MoveDataFRomTaskToAssign() - // { - // var res = new OperationResult(); - // try - // { - // var tasks = _accountContext.Tasks.ToList(); - - // foreach (var task in tasks) - // { - // var assigns = _accountContext.Assigns.Where(x => x.TaskId == task.id).ToList(); - // foreach (var assign in assigns) - // { - // assign.InsertNewData(task.EndTaskDate, task.TimeRequest, task.AcceptedTimeRequest, task.RequestDate, task.TimeRequestDescription, task.IsCanceledRequest, - // task.IsCancel, task.CancelDescription, task.IsDone, task.IsDoneRequest, task.DoneDescription); - // } - // } - //_positionRepository.SaveChanges(); - // return res.Succcedded(); - // } - // catch (Exception e) - // { - // Console.WriteLine(e); - // return res.Failed("خطای سیستمی"); - // } - - // } - - - 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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.Assigns.Count == 1) - .Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - - }); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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 result = res.AsEnumerable(); - - 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) && accountId != 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.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() - { - AssignViewModels = a.ToList(), - PosValue = a.Key - }).ToList(), - AssignViewModels = x.AssignViewModels, - 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - - }).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 raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias) - .ThenInclude(x => x.Media) - .Where(x => - x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - raw = raw.Where(x => - (x.Task.Description != null && x.Task.Description.Contains(searchModel.GeneralSearch)) - || x.Task.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Task.Title.Contains(searchModel.GeneralSearch)); - } - - - - - var query = raw.Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - }); - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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 result = res.AsEnumerable(); - - - 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) && accountId != 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.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, - AssignViewModels = x.AssignViewModels - }).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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - }).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 - }; - 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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)) - .Select(x => - new TaskViewModel() - { - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - - }); - } - 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)) - .Select(x => - new TaskViewModel() - { - - AssignedId = x.AssignedId, - AssignerId = x.AssignerId, - CreateDate = x.Task.CreationDate.ToFarsi(), - EndTaskDateFA = x.EndTaskDate.ToFarsi(), - IsDone = x.IsDone, - EndTaskDateGE = x.EndTaskDate, - Name = x.Task.Title, - RequestCancel = x.IsCanceledRequest, - RequestTime = x.TimeRequest, - Id = x.Task.id, - CreateTaskDateGE = x.Task.CreationDate, - IsCancel = x.IsCancel, - AcceptedTimeRequest = x.AcceptedTimeRequest, - IsCancelRequest = x.IsCanceledRequest, - ContractingPartyName = x.Task.ContractingPartyName, - MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), - Description = x.Task.Description, - IsDoneRequest = x.IsDoneRequest, - - - }); - } - - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { - query = query.Where(x => - (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) - || x.ContractingPartyName.Contains(searchModel.GeneralSearch) - || x.Name.Contains(searchModel.GeneralSearch)); - } - - //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); - 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) - .Where(a => a.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) && accountId != 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() - { - - 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, - AssignViewModels = x.AssignViewModels - }).ToList(); - - final = final.Select(x => new TaskViewModel() - { - - - 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest - || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), - Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, - AssignedReceiverViewModel = x.AssignViewModels.Any() - ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) - : new() - { - AssignedName = "-", - AssignedPositionValue = 0 - }, - - }).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 AddAccountIdToList(List list, long accountId) - { - list.Add(accountId); - return list; - } - + private readonly AccountContext _accountContext; + private readonly IHttpContextAccessor _contextAccessor; + private readonly IAccountRepository _accountRepository; + private readonly IPositionRepository _positionRepository; + private readonly IWebHostEnvironment _webHostEnvironment; + private readonly IAuthHelper _authHelper; + private readonly ITicketRepository _ticketRepository; + + public TaskRepository(IHttpContextAccessor contextAccessor, AccountContext accountContext, + IAccountRepository accountRepository, IPositionRepository positionRepository, + IWebHostEnvironment webHostEnvironment, IAuthHelper authHelper, ITicketRepository ticketRepository) : base(accountContext) + { + _contextAccessor = contextAccessor; + _accountContext = accountContext; + _accountRepository = accountRepository; + _positionRepository = positionRepository; + _webHostEnvironment = webHostEnvironment; + _authHelper = authHelper; + _ticketRepository = ticketRepository; + } + + public EditTask GetDetails(long TaskId) + { + var task = Get(TaskId); + + var userId = _authHelper.CurrentAccountId(); + + EditTask res = _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.id == TaskId).Select(x => + new EditTask() + { + + 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(), + ContractingPartyName = x.ContractingPartyName, + ReceiverId = _accountContext.Assigns.Where(a => a.TaskId == x.id).Select(a => a.AssignedId).ToList(), + SenderId = x.SenderId, + AssignViewModels = x.Assigns.Select(a => new AssignViewModel() + { + Id = a.id, + EndTaskDateFa = a.EndTaskDate.ToFarsi(), + IsCancel = a.IsCancel, + IsCanceledRequest = a.IsCanceledRequest, + IsDone = a.IsDone, + IsDoneRequest = a.IsDoneRequest, + TimeRequest = a.TimeRequest, + AssignedName = a.AssignedName, + AssignedId = a.AssignedId, + AssignerId = a.AssignerId + + + }).ToList(), + IsDone = x.Assigns.All(a => a.IsDone), + IsCancel = x.Assigns.All(a => a.IsCancel), + TicketId = x.TicketId, + CreateDateFa = x.CreationDate.ToFarsi(), + + SenderViewModel = _accountContext.Accounts.Where(a => a.id == x.SenderId).Select(a => + new AccountViewModel() + { + Fullname = a.Fullname, + Id = a.id, + + }).FirstOrDefault() + + }).FirstOrDefault(); + + res.TicketViewModel = res.TicketId != null && res.TicketId > 0 + ? _ticketRepository.GetDetails(res.TicketId.Value) + : null; + if (res.AssignViewModels.Any(x => x.AssignedId == userId)) + { + res.EndTaskDate = _accountContext.Assigns.First(a => a.TaskId == res.Id && a.AssignedId == userId) + .EndTaskDate.ToFarsi(); + + + res.AssignViewModels = res.AssignViewModels.Where(x => x.AssignedId == userId).ToList(); + res.IsDone = res.AssignViewModels.First(x => x.AssignedId == userId).IsDone; + res.IsCancel = res.AssignViewModels.First(x => x.AssignedId == userId).IsCancel; + } + + //_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(); + return res; + } + + public Tasks GetIncludeAssign(long taskId) + { + return _accountContext.Tasks.Include(x => x.Assigns).FirstOrDefault(x => x.id == taskId); + } + + public void Remove(long id) + { + var task = Get(id); + Remove(task); + } + + + + public List GetRequestedTasks(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; + + + query = _accountContext.Assigns.Include(x => x.Task).Where(x => + !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId && x.Task.TicketId == null).Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest + + }); + + //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); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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.IsCancelRequest) + .ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest); + var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + var addAssign = finalList.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != 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(); + + + var finalAssign = addAssign.Select(x => new TaskViewModel() + { + + AssignList = 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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + var final = finalAssign.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? 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, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + }).ToList(); + return final; + } + + public List GetRequestTaskHasTicket(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.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && accountId == x.Task.SenderId && (x.Task.TicketId != null && x.Task.TicketId > 0)).Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest + + }); + + //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); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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.IsCancelRequest) + .ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest); + var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + var addAssign = finalList.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != 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(); + + + var finalAssign = addAssign.Select(x => new TaskViewModel() + { + + AssignList = 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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + var final = finalAssign.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? 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, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + }).ToList(); + return final; + } + + public List GetAllTasks(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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest, + + }); + } + else + { + return new(); + } + + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + //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); + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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) && accountId != 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() + { + + 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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + + 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest + || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + + }).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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null && + x.Task.SenderId == accountId) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.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 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest, + + }); + + + } + + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.AssignedPositionValue >= positionValue).Select(a => a.AssignedId) + .ToList(), + CreateDate = x.CreateDate, + EndTaskDateFA = x.EndTaskDateFA, + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDateGE, + Name = x.Name, + 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 + }); + + #region Search + 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); + + } + + #endregion + + + var resEnum = res.AsEnumerable(); + var result = resEnum.GroupBy(x => x.Id).Select(x => new TaskViewModel() + { + Sender = x.First().Sender, + SelfName = x.First().SelfName, + Assigned = x.First().Assigned, + CreateDate = x.First().CreateDate, + EndTaskDateFA = x.Min(e => e.EndTaskDateGE).ToFarsi(), + IsDone = x.All(a => a.IsDone) ? true : false, + EndTaskDateGE = x.All(a => a.IsDone) ? x.Min(e => e.EndTaskDateGE) : x.Where(e => !e.IsDone).Min(e => e.EndTaskDateGE), + Name = x.First().Name, + RequestTime = x.First().RequestTime, + Id = x.Key, + CreateTaskDateGE = x.First().CreateTaskDateGE, + IsCancel = x.First().IsCancel, + AcceptedTimeRequest = x.First().AcceptedTimeRequest, + IsCancelRequest = x.First().IsCancelRequest, + ContractingPartyName = x.First().ContractingPartyName, + MediaCount = x.First().MediaCount, + Description = x.First().Description, + IsDoneRequest = x.First().IsDoneRequest, + + }); + + 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) && accountId != 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, + 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.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, + 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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) + ? 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, + 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest + || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + + }).ToList(); + return final; + } + + public List AllRequestedTasks(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).Where(x => + !x.IsDone && x.Task.IsActiveString == "true" && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest)).Select(x => + new TaskViewModel() + { + + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest + + }); + } + else + { + return new(); + } + //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); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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.IsCancelRequest) + .ThenByDescending(x => x.RequestTime).ThenByDescending(x => x.IsDoneRequest); + var finalList = orderResult.Skip(searchModel.PageIndex).Take(30).ToList(); + + var addAssign = finalList.Select(x => new TaskViewModel() + { + AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id) && accountId != 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(); + + + var finalAssign = addAssign.Select(x => new TaskViewModel() + { + + AssignList = 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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + var final = finalAssign.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) ? 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, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + }).ToList(); + return final; + } + + public List GetTasksHaveTicket(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 raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias) + .ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && (x.AssignedId == accountId || x.Task.SenderId == accountId) + && x.Task.TicketId != null && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest)); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + raw = raw.Where(x => + (x.Task.Description != null && x.Task.Description.Contains(searchModel.GeneralSearch)) + || x.Task.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Task.Title.Contains(searchModel.GeneralSearch)); + } + + + + + var query = raw.Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest, + }); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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 result = res.AsEnumerable(); + + + 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) && accountId != 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.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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) + ? 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest + || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + }).ToList(); + return final; + } + + + + public string SetTasksColors(DateTime date, bool isCancel) + { + if (isCancel) + { + //return "brown"; + return "green"; + } + + 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 ""; + } + + } + + 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.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null ).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + else + { + return _accountContext.Assigns.Include(x => x.Task).Where(x => + !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId == null).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + } + + + public EditTask GetRequestDetails(long id) + { + var task = Get(id); + EditTask res; + + if (task.SenderId == _authHelper.CurrentAccountId() || int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value) == 1) + { + var query = _accountContext.Tasks.Include(x => x.Assigns).Where(x => x.id == id).Select(x => new EditTask() + { + + 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(), + ContractingPartyName = x.ContractingPartyName, + ReceiverId = _accountContext.Assigns.Where(a => a.TaskId == x.id).Select(a => a.AssignedId).ToList(), + SenderId = x.SenderId, + CreateDateFa = x.CreationDate.ToFarsi(), + TicketId = x.TicketId, + + AssignViewModels = x.Assigns.Where(a => a.IsCanceledRequest || a.IsDoneRequest || a.TimeRequest).Select( + a => new AssignViewModel() + { + Id = a.id, + EndTaskDateFa = a.EndTaskDate.ToFarsiFull(), + IsCancel = a.IsCancel, + IsCanceledRequest = a.IsCanceledRequest, + IsDone = a.IsDone, + IsDoneRequest = a.IsDoneRequest, + TimeRequest = a.TimeRequest, + AssignedName = a.AssignedName, + AssignedId = a.AssignedId, + RequestDateFa = a.RequestDate.ToFarsi() + + }).ToList(), + + + }).FirstOrDefault(); + + if (query.TicketId != null && query.TicketId > 0) + { + query.TicketViewModel = _ticketRepository.GetDetails(query.TicketId.Value); + query.HasTicket = true; + } + else + { + query.TicketViewModel = null; + } + + + + return query; + } + return new(); + } + + + public string GetWebEnvironmentPath() + { + return _webHostEnvironment.ContentRootPath; + } + + public bool HasOverdueTasks(long userId) + { + + var nowDate = DateTime.Now.Date; + var hasOverDueTask = _accountContext.Assigns.Where(x => x.AssignedId == userId && x.EndTaskDate.Date < nowDate && !x.IsCancel && + !x.IsCanceledRequest && !x.IsDone + && !x.IsDoneRequest && !x.TimeRequest).GroupBy(x => x.TaskId).Select(x => x.First()).Any(); + + var hasOverDueRequest = _accountContext.Assigns.Include(x => x.TaskMessageList) + .Where(x => (x.IsCanceledRequest + || x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone && + x.TaskMessageList.OrderByDescending(m => m.id).First().CreationDate.Date < nowDate).GroupBy(x => x.TaskId).Select(x => x.First()).Any(); + if (hasOverDueRequest || hasOverDueTask) + { + return true; + } + else + { + return false; + } + + } + + public int OverdueTasksCount(long userId) + { + var account = _accountRepository.GetIncludePositions(userId); + if (account.Position == null) + return 0; + + var positionValue = account.Position.PositionValue; + DateTime now = DateTime.Now; + int overdueTasksCount; + + if (positionValue == 1) + { + overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId && + x.AssignerId == userId && x.Task.Assigns.Count == 1 && + !x.IsCancel && !x.IsCanceledRequest && + !x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true") + .GroupBy(x => x.TaskId).Select(x => x.First()).Count(); + + //overdueTasksCount = _accountContext.Tasks.Include(x => + // x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) && + // !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) && + // !x.Assigns.Any(a => a.TimeRequest) + // && x.Assigns.Any(a => a.AssignedId == userId && a.AssignerId == userId) && + // (x.Assigns.First(a => a.AssignedId == userId && a.AssignerId == userId) + // .EndTaskDate.Date <= DateTime.Now.Date) && x.Assigns.Count == 1); + } + else + { + overdueTasksCount = _accountContext.Assigns.Include(x => x.Task).Where(x => x.AssignedId == userId && + !x.IsCancel && !x.IsCanceledRequest && + !x.IsDone && !x.TimeRequest && !x.IsDoneRequest && x.EndTaskDate.Date <= DateTime.Now.Date && x.Task.IsActiveString == "true") + .GroupBy(x => x.TaskId).Select(x => x.First()).Count(); + } + + //overdueTasksCount = _accountContext.Tasks.Include(x => + // x.Assigns).Count(x => !x.Assigns.Any(a => a.IsCancel) && !x.Assigns.Any(a => a.IsCanceledRequest) && + // !x.Assigns.Any(a => a.IsDone) && !x.Assigns.Any(a => a.IsDoneRequest) && + // !x.Assigns.Any(a => a.TimeRequest) + // && x.Assigns.Any(a => a.AssignedId == userId) && + // (x.Assigns.First(a => a.AssignedId == userId).EndTaskDate.Date <= DateTime.Now.Date)); + + + + var overdueRequestsCount = _accountContext.Assigns.Include(x => x.Task) + .Where(x => (x.IsCanceledRequest + || x.IsDoneRequest || x.TimeRequest) && !x.IsCancel && !x.IsDone && + x.Task.IsActiveString == "true" && + x.Task.SenderId == userId).GroupBy(x => x.TaskId).Select(x => x.First()).Count(); + + return overdueTasksCount + overdueRequestsCount; + } + + public int TasksHaveTicketCounts(long userId) + { + return _accountContext.Assigns.Include(x => x.Task).Where(x => + !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + !x.IsCanceledRequest && !x.IsDoneRequest && + !x.TimeRequest && (x.AssignerId == userId || x.AssignedId != userId) && + (x.Task.TicketId != null && x.Task.TicketId > 0)).GroupBy(x => x.TaskId).Count(); + } + + public int TasksHaveTicketRequestsCount(long userId) + { + 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.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + else + { + return _accountContext.Assigns.Include(x => x.Task).Where(x => + !x.IsDone && x.Task.IsActiveString == "true" && !x.IsCancel && + (x.IsCanceledRequest || x.TimeRequest || x.IsDoneRequest) && (accountId == x.Task.SenderId) && x.Task.TicketId != null && x.Task.TicketId > 0).GroupBy(x => x.TaskId) + .Select(x => x.First()).Count(); + } + } + + + // public OperationResult MoveDataFRomTaskToAssign() + // { + // var res = new OperationResult(); + // try + // { + // var tasks = _accountContext.Tasks.ToList(); + + // foreach (var task in tasks) + // { + // var assigns = _accountContext.Assigns.Where(x => x.TaskId == task.id).ToList(); + // foreach (var assign in assigns) + // { + // assign.InsertNewData(task.EndTaskDate, task.TimeRequest, task.AcceptedTimeRequest, task.RequestDate, task.TimeRequestDescription, task.IsCanceledRequest, + // task.IsCancel, task.CancelDescription, task.IsDone, task.IsDoneRequest, task.DoneDescription); + // } + // } + //_positionRepository.SaveChanges(); + // return res.Succcedded(); + // } + // catch (Exception e) + // { + // Console.WriteLine(e); + // return res.Failed("خطای سیستمی"); + // } + + // } + + + 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.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.Assigns.Count == 1 && x.Task.TicketId == null ) + .Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest, + + }); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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 result = res.AsEnumerable(); + + 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) && accountId != 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.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList() + { + AssignViewModels = a.ToList(), + PosValue = a.Key + }).ToList(), + AssignViewModels = x.AssignViewModels, + 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) ? 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest + || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + + }).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 raw = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias) + .ThenInclude(x => x.Media) + .Where(x => + x.Task.IsActiveString == "true" && x.AssignedId == accountId && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TicketId == null); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + raw = raw.Where(x => + (x.Task.Description != null && x.Task.Description.Contains(searchModel.GeneralSearch)) + || x.Task.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Task.Title.Contains(searchModel.GeneralSearch)); + } + + + + + var query = raw.Select(x => + new TaskViewModel() + { + AssignedId = x.AssignedId, + AssignerId = x.AssignerId, + CreateDate = x.Task.CreationDate.ToFarsi(), + EndTaskDateFA = x.EndTaskDate.ToFarsi(), + IsDone = x.IsDone, + EndTaskDateGE = x.EndTaskDate, + Name = x.Task.Title, + RequestCancel = x.IsCanceledRequest, + RequestTime = x.TimeRequest, + Id = x.Task.id, + CreateTaskDateGE = x.Task.CreationDate, + IsCancel = x.IsCancel, + AcceptedTimeRequest = x.AcceptedTimeRequest, + IsCancelRequest = x.IsCanceledRequest, + ContractingPartyName = x.Task.ContractingPartyName, + MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id), + Description = x.Task.Description, + IsDoneRequest = x.IsDoneRequest, + }); + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { + query = query.Where(x => + (x.Description != null && x.Description.Contains(searchModel.GeneralSearch)) + || x.ContractingPartyName.Contains(searchModel.GeneralSearch) + || x.Name.Contains(searchModel.GeneralSearch)); + } + + 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 = _accountContext.Assigns.Where(a => a.TaskId == x.Id) + .Where(a => a.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 result = res.AsEnumerable(); + + + 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) && accountId != 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.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, + AssignViewModels = x.AssignViewModels + }).ToList(); + + final = final.Select(x => new TaskViewModel() + { + + AssignList = !(x.SelfAssigned || x.SelfAssigner) + ? 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 && !(_accountContext.Assigns.Any(a => a.TaskId == x.Id && (a.AcceptedTimeRequest > 0 || a.IsCanceledRequest + || a.IsDoneRequest || a.TimeRequest || a.IsCancel || a.IsDone))), + Assigner = x.Sender.Id == accountId ? emptyAcc.Fullname : x.Sender.Fullname, + AssignedReceiverViewModel = x.AssignViewModels.Any() + ? x.AssignViewModels.MinBy(a => a.AssignedPositionValue) + : new() + { + AssignedName = "-", + AssignedPositionValue = 0 + }, + }).ToList(); + return final; + } + + + private 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; + + + } + + private static List AddAccountIdToList(List list, long accountId) + { + list.Add(accountId); + return list; + } } \ No newline at end of file diff --git a/AccountMangement.Infrastructure.EFCore/Repository/TicketRepository.cs b/AccountMangement.Infrastructure.EFCore/Repository/TicketRepository.cs index 05361e2d..ad88af14 100644 --- a/AccountMangement.Infrastructure.EFCore/Repository/TicketRepository.cs +++ b/AccountMangement.Infrastructure.EFCore/Repository/TicketRepository.cs @@ -18,99 +18,129 @@ namespace AccountMangement.Infrastructure.EFCore.Repository; public class TicketRepository : RepositoryBase, ITicketRepository { - private readonly AccountContext _accountContext; - private readonly IAuthHelper _authHelper; - private readonly IPasswordHasher _passwordHasher; - private readonly IWorkshopRepository _workshopRepository; - public TicketRepository(AccountContext accountContext, IAuthHelper authHelper, IPasswordHasher passwordHasher, IWorkshopRepository workshopRepository) : base(accountContext) - { - _accountContext = accountContext; - _authHelper = authHelper; - _passwordHasher = passwordHasher; - _workshopRepository = workshopRepository; - } + private readonly AccountContext _accountContext; + private readonly IAuthHelper _authHelper; + private readonly IPasswordHasher _passwordHasher; + private readonly IWorkshopRepository _workshopRepository; + public TicketRepository(AccountContext accountContext, IAuthHelper authHelper, IPasswordHasher passwordHasher, IWorkshopRepository workshopRepository) : base(accountContext) + { + _accountContext = accountContext; + _authHelper = authHelper; + _passwordHasher = passwordHasher; + _workshopRepository = workshopRepository; + } public List GetAll(TicketSearchModel searchModel) { - var query = _accountContext.Tickets.OrderBy(x => x.Status == "بسته شده").ThenBy(x => x.Status == "پاسخ داده شده") - .ThenBy(x => x.Status == "درحال بررسی").ThenBy(x => "باز").Select(x => new TicketViewModel() - { - Description = x.Description, - SenderId = x.SenderId, - ContractingPartyName = x.ContractingPartyName, - Id = x.id, - Title = x.Title, - TicketType = x.TicketType, - Status = x.Status, - CreationDateTimeGr = x.CreationDate, - CreationDateTime = x.CreationDate.ToFarsiFull(), - TicketNumber = $"TKC_{x.TicketNumber}", - WorkshopName = _workshopRepository.Get(x.WorkshopId).WorkshopFullName, - HasTask = _accountContext.Tasks.Include(t => t.Assigns).Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)), - WorkshopId = x.WorkshopId, - RawTicketNumber = x.TicketNumber - }); + var query = _accountContext.Tickets.Where(x => !x.IsDeleted).OrderBy(x => x.Status == "بسته شده") + .ThenBy(x => x.Status == "پاسخ داده شده") + .ThenBy(x => x.Status == "درحال بررسی") + .ThenBy(x => "باز") + .ThenByDescending(x => new[] + { + x.ClientResponses.Max(r => r.CreationDate), x.AdminResponses.Max(r => r.CreationDate) - #region Search + }.Max()).Select(x => new TicketViewModel() + { + Description = x.Description, + SenderId = x.SenderId, + ContractingPartyName = x.ContractingPartyName, + Id = x.id, + Title = x.Title, + TicketType = x.TicketType, + Status = x.Status, + CreationDateTimeGr = x.CreationDate, + CreationDateTime = x.CreationDate.ToFarsiFull(), + TicketNumber = $"TKC_{x.TicketNumber}", + WorkshopName = _workshopRepository.Get(x.WorkshopId).WorkshopFullName, + HasTask = _accountContext.Tasks.Include(t => t.Assigns) + .Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)), + WorkshopId = x.WorkshopId, + RawTicketNumber = x.TicketNumber + }); + #region Search - if (!string.IsNullOrWhiteSpace(searchModel.Status)) + if (!string.IsNullOrWhiteSpace(searchModel.Status)) { query = query.Where(x => x.Status == searchModel.Status); } - if (!(string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))) - { - if (string.IsNullOrWhiteSpace(searchModel.OneDay)) - { - var startDate = searchModel.StartDate.ToGeorgianDateTime(); - var endDate = searchModel.EndDate.ToGeorgianDateTime(); - query = query.Where(x => startDate < x.CreationDateTimeGr && endDate > x.CreationDateTimeGr); - } - } + if (!(string.IsNullOrWhiteSpace(searchModel.StartDate) && string.IsNullOrWhiteSpace(searchModel.EndDate))) + { + if (string.IsNullOrWhiteSpace(searchModel.OneDay)) + { + var startDate = searchModel.StartDate.ToGeorgianDateTime(); + var endDate = searchModel.EndDate.ToGeorgianDateTime(); + query = query.Where(x => startDate < x.CreationDateTimeGr && endDate > x.CreationDateTimeGr); + } + } - if (!string.IsNullOrWhiteSpace(searchModel.OneDay)) - { - var oneDay = searchModel.OneDay.ToGeorgianDateTime(); - query = query.Where(x => x.CreationDateTimeGr.Date == oneDay.Date); - } + if (!string.IsNullOrWhiteSpace(searchModel.OneDay)) + { + var oneDay = searchModel.OneDay.ToGeorgianDateTime(); + query = query.Where(x => x.CreationDateTimeGr.Date == oneDay.Date); + } - if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) - { + if (!string.IsNullOrWhiteSpace(searchModel.GeneralSearch)) + { - query = query.Where(x => x.Title.Contains(searchModel.GeneralSearch) || x.ContractingPartyName.Contains(searchModel.GeneralSearch) || x.WorkshopName.Contains(searchModel.GeneralSearch)); - } + query = query.Where(x => x.Title.Contains(searchModel.GeneralSearch) || x.ContractingPartyName.Contains(searchModel.GeneralSearch) || x.WorkshopName.Contains(searchModel.GeneralSearch)); + } - if (!string.IsNullOrWhiteSpace(searchModel.OneDay)) - { - var day = searchModel.OneDay.ToGeorgianDateTime(); - query = query.Where(x => x.CreationDateTimeGr.Date == day.Date); - } + if (!string.IsNullOrWhiteSpace(searchModel.OneDay)) + { + var day = searchModel.OneDay.ToGeorgianDateTime(); + query = query.Where(x => x.CreationDateTimeGr.Date == day.Date); + } - if (!string.IsNullOrWhiteSpace(searchModel.ContractingPartyName)) - { - query = query.Where(x => x.ContractingPartyName == searchModel.ContractingPartyName.Trim()); - } + if (!string.IsNullOrWhiteSpace(searchModel.ContractingPartyName)) + { + query = query.Where(x => x.ContractingPartyName == searchModel.ContractingPartyName.Trim()); + } - if (searchModel.WorkshopId > 0) - { - query = query.Where(x => x.WorkshopId == searchModel.WorkshopId); - } + if (searchModel.WorkshopId > 0) + { + query = query.Where(x => x.WorkshopId == searchModel.WorkshopId); + } - if (!string.IsNullOrWhiteSpace(searchModel.TicketNumber)) - { - query = query.Where(x => x.RawTicketNumber == searchModel.TicketNumber); - } + if (!string.IsNullOrWhiteSpace(searchModel.TicketNumber)) + { + query = query.Where(x => x.RawTicketNumber == searchModel.TicketNumber); + } - if (!string.IsNullOrWhiteSpace(searchModel.Status)) - { - query = query.Where(x => x.Status == searchModel.Status.Trim()); - } - #endregion + if (!string.IsNullOrWhiteSpace(searchModel.Status)) + { + query = query.Where(x => x.Status == searchModel.Status.Trim()); + } + #endregion - return query.Skip(searchModel.PageIndex).Take(30).ToList(); - } + return query.Skip(searchModel.PageIndex).Take(30).ToList(); + } + + public List GetDeletedTicket() + { + var query = _accountContext.Tickets.Where(x => x.IsDeleted).OrderByDescending(x => x.CreationDate).Select(x => new TicketViewModel() + { + Description = x.Description, + SenderId = x.SenderId, + ContractingPartyName = x.ContractingPartyName, + Id = x.id, + Title = x.Title, + TicketType = x.TicketType, + Status = x.Status, + CreationDateTimeGr = x.CreationDate, + CreationDateTime = x.CreationDate.ToFarsiFull(), + TicketNumber = $"TKC_{x.TicketNumber}", + WorkshopName = _workshopRepository.Get(x.WorkshopId).WorkshopFullName, + HasTask = _accountContext.Tasks.Include(t => t.Assigns).Any(t => t.TicketId == x.id && t.Assigns.Any(a => !a.IsDone)), + WorkshopId = x.WorkshopId, + RawTicketNumber = x.TicketNumber + }); + return query.ToList(); + + } public List GetTicketsForClients(TicketSearchModel searchModel) { @@ -129,7 +159,7 @@ public class TicketRepository : RepositoryBase, ITicketRepository query = _accountContext.Tickets.Where(x => x.SenderId == accountInfo.Id); } - if (accountInfo.SubAccountId > 0) + if (accountInfo.SubAccountId>0) { query = query.Where(x => x.SubAccountSenderId == accountInfo.SubAccountId); } @@ -191,15 +221,16 @@ public class TicketRepository : RepositoryBase, ITicketRepository return res.Skip(searchModel.PageIndex).Take(30).ToList(); } - public void CreateAdminResponse(AdminResponse command) - { - _accountContext.Add(command); - } - public void CreateClientResponse(ClientResponse command) - { - _accountContext.Add(command); - } + public void CreateAdminResponse(AdminResponse command) + { + _accountContext.Add(command); + } + + public void CreateClientResponse(ClientResponse command) + { + _accountContext.Add(command); + } public EditTicket GetDetails(long id) { @@ -273,8 +304,9 @@ public class TicketRepository : RepositoryBase, ITicketRepository WorkshopId = entity.WorkshopId, TicketNumber = $"TKC_{entity.TicketNumber}", Status = entity.Status, - HasTask = _accountContext.Tasks.Any(x => x.TicketId == entity.id) - }; + HasTask = _accountContext.Tasks.Any(x => x.TicketId == entity.id), + IsDeleted = entity.IsDeleted + }; editTicketViewModel.ResponseViewModels = MergeResponses(editTicketViewModel.ClientResponseViewModels, editTicketViewModel.AdminResponseViewModels); @@ -359,38 +391,37 @@ public class TicketRepository : RepositoryBase, ITicketRepository return editTicketViewModel; } - public int GetLastTicketNumber() - { - var res = _accountContext.Tickets.Any(x => x.TicketNumber != null) ? _accountContext.Tickets.Max(x => Convert.ToInt32(x.TicketNumber)) : 0; - return res; - } + { + var res = _accountContext.Tickets.Any(x => x.TicketNumber != null) ? _accountContext.Tickets.Max(x => Convert.ToInt32(x.TicketNumber)) : 0; + return res; + } - public AdminResponse GetAdminResponse(long adminResId) - { - return _accountContext.AdminResponses.FirstOrDefault(x => x.id == adminResId); - } + public AdminResponse GetAdminResponse(long adminResId) + { + return _accountContext.AdminResponses.FirstOrDefault(x => x.id == adminResId); + } - public ClientResponse GetClientResponse(long clientResId) - { - return _accountContext.ClientResponses.FirstOrDefault(x => x.id == clientResId); - } + public ClientResponse GetClientResponse(long clientResId) + { + return _accountContext.ClientResponses.FirstOrDefault(x => x.id == clientResId); + } - public void RemoveAdminResponse(long adminResId) - { + public void RemoveAdminResponse(long adminResId) + { - var adminRes = _accountContext.AdminResponses.Include(x => x.AdminResponseMedias).ThenInclude(x => x.Media).FirstOrDefault(x => x.id == adminResId); - if (adminRes != null) - { - _accountContext.RemoveRange(adminRes.AdminResponseMedias); - _accountContext.Remove(adminRes); - } + var adminRes = _accountContext.AdminResponses.Include(x => x.AdminResponseMedias).ThenInclude(x => x.Media).FirstOrDefault(x => x.id == adminResId); + if (adminRes != null) + { + _accountContext.RemoveRange(adminRes.AdminResponseMedias); + _accountContext.Remove(adminRes); + } - } + } public TypesCountOfTicketViewModel GetTypesCountOfTicketForAdmin() { - var tickets = _accountContext.Tickets.AsQueryable(); + var tickets = _accountContext.Tickets.AsQueryable().Where(x=>!x.IsDeleted); return new TypesCountOfTicketViewModel() { All = tickets.Count(), @@ -398,23 +429,58 @@ public class TicketRepository : RepositoryBase, ITicketRepository Closed = tickets.Count(x => x.Status == "بسته شده"), Open = tickets.Count(x => x.Status == "باز"), Pending = tickets.Count(x => x.Status == "درحال بررسی") - }; } - public TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId) - { - var tickets = _accountContext.Tickets.Where(x => x.WorkshopId == workshopId); - return new TypesCountOfTicketViewModel() - { - All = tickets.Count(), - Answered = tickets.Count(x => x.Status == "پاسخ داده شده"), - Closed = tickets.Count(x => x.Status == "بسته شده"), - Open = tickets.Count(x => x.Status == "باز"), - Pending = tickets.Count(x => x.Status == "درحال بررسی") + public TypesCountOfTicketViewModel GetTypesCountOfTicketForClient(long workshopId) + { + var tickets = _accountContext.Tickets.Where(x => x.WorkshopId == workshopId); + return new TypesCountOfTicketViewModel() + { + All = tickets.Count(), + Answered = tickets.Count(x => x.Status == "پاسخ داده شده"), + Closed = tickets.Count(x => x.Status == "بسته شده"), + Open = tickets.Count(x => x.Status == "باز"), + Pending = tickets.Count(x => x.Status == "درحال بررسی") - }; - } + }; + } + + + public List MergeResponses(List clientResponseList, List adminResponseList) + { + var list = new List(); + var adminList = adminResponseList.Select(x => new Response() + { + TicketId = x.TicketId, + ResponseMessage = x.Response, + IsClient = false, + IsAdmin = true, + IsActive = x.IsActive, + FullName = x.FullName, + CreationDate = x.CreationDate, + CreationDateStr = $"{x.CreationDate.ToFarsi()} {x.CreationDate.DayOfWeek.DayOfWeeKToPersian()} {x.CreationDate.Hour}:{x.CreationDate.Minute}", + MediaViewModels = x.MediaViewModels, + AdminResponseId = x.Id, + AdminAccountId = x.AdminAccountId + }).ToList(); + var clientList = clientResponseList.Select(x => new Response() + { + TicketId = x.TicketId, + ResponseMessage = x.Response, + IsClient = true, + IsAdmin = false, + CreationDateStr = $"{x.CreationDate.ToFarsi()} {x.CreationDate.DayOfWeek.DayOfWeeKToPersian()} {x.CreationDate.Hour}:{x.CreationDate.Minute}", + CreationDate = x.CreationDate, + MediaViewModels = x.MediaViewModels, + ClientResponseId = x.Id + }).ToList(); + + list.Capacity = (adminList.Count + clientList.Count); + list.AddRange(adminList); + list.AddRange(clientList); + return list.OrderBy(x => x.CreationDate).ToList(); + } #region Vafa public int GetAdminTicketsCount() @@ -422,40 +488,4 @@ public class TicketRepository : RepositoryBase, ITicketRepository return _accountContext.Tickets.Count(x => x.Status == "باز"); } #endregion - - - public List MergeResponses(List clientResponseList, List adminResponseList) - { - var list = new List(); - var adminList = adminResponseList.Select(x => new Response() - { - TicketId = x.TicketId, - ResponseMessage = x.Response, - IsClient = false, - IsAdmin = true, - IsActive = x.IsActive, - FullName = x.FullName, - CreationDate = x.CreationDate, - CreationDateStr = $"{x.CreationDate.ToFarsi()} {x.CreationDate.DayOfWeek.DayOfWeeKToPersian()} {x.CreationDate.Hour}:{x.CreationDate.Minute}", - MediaViewModels = x.MediaViewModels, - AdminResponseId = x.Id, - AdminAccountId = x.AdminAccountId - }).ToList(); - var clientList = clientResponseList.Select(x => new Response() - { - TicketId = x.TicketId, - ResponseMessage = x.Response, - IsClient = true, - IsAdmin = false, - CreationDateStr = $"{x.CreationDate.ToFarsi()} {x.CreationDate.DayOfWeek.DayOfWeeKToPersian()} {x.CreationDate.Hour}:{x.CreationDate.Minute}", - CreationDate = x.CreationDate, - MediaViewModels = x.MediaViewModels, - ClientResponseId = x.Id - }).ToList(); - - list.Capacity = (adminList.Count + clientList.Count); - list.AddRange(adminList); - list.AddRange(clientList); - return list.OrderBy(x => x.CreationDate).ToList(); - } } \ No newline at end of file diff --git a/CompanyManagment.Application/RollCallApplication.cs b/CompanyManagment.Application/RollCallApplication.cs index 8c1fdc82..0b8390d4 100644 --- a/CompanyManagment.Application/RollCallApplication.cs +++ b/CompanyManagment.Application/RollCallApplication.cs @@ -385,7 +385,12 @@ public class RollCallApplication : IRollCallApplication var workshopSettings = _customizeWorkshopSettingsRepository.GetBy(command.WorkshopId); var employeeSettings = _customizeWorkshopEmployeeSettingsRepository.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings( - command.WorkshopId, command.EmployeeId).WorkshopShiftStatus; + command.WorkshopId, command.EmployeeId)?.WorkshopShiftStatus; + + if (employeeSettings == null && workshopSettings.WorkshopShiftStatus != WorkshopShiftStatus.Regular) + { + return operation.Failed("لطفا ابتدا برای این پرسنل گروهبندی انجام دهید "); + } List<(TimeOnly start, TimeOnly end, long rollCallId)> preprocessedRollCalls = new(); try @@ -416,6 +421,11 @@ public class RollCallApplication : IRollCallApplication _rollCallDomainService.GetEmployeeOffSetForRegularSettings(command.EmployeeId, command.WorkshopId); var startWorkingPeriod = day.Date + offset.ToTimeSpan(); + + if (offset > new TimeOnly(12, 0, 0)) + startWorkingPeriod = startWorkingPeriod.AddDays(-1); + + foreach (var preprocessedRollCall in preprocessedRollCalls) { DateTime startDateTime = startWorkingPeriod.Date.Add(preprocessedRollCall.start.ToTimeSpan()); diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml index bf0fc8e2..d5cb8b87 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/Create.cshtml @@ -98,7 +98,7 @@ - -
+
-
- -
- @* onclick="taskSubjectModal() *@ -
- - - - -
-
- -
+
+ + +
+ @* onclick="taskSubjectModal() *@ +
+ + + + +
+
+ +
@@ -316,7 +317,6 @@ - + + + + + + + + + + + + + + + if (Model.TaskDetails.AssignViewModels?.Count > 1) + { + + } + else + { + + } + + + +} + + + + + + + + +@* //Operation Task *@ + + + + + + + + + + +@if (Convert.ToInt64(User.FindFirstValue("AccountId")) == Model.TaskDetails.SenderId) +{ + +} +else +{ + +} + +@* tickets *@ + \ No newline at end of file diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml index 8e8388fd..4cd285ab 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml +++ b/ServiceHost/Areas/AdminNew/Pages/Company/Task/DetailsModal.cshtml @@ -88,7 +88,7 @@
-
+
طرف حساب: @Model.ContractingPartyName @@ -98,7 +98,7 @@ @Model.Title
-
+
تاریخ ایجاد: @Model.CreateDateFa @@ -112,9 +112,11 @@ @if (!String.IsNullOrWhiteSpace(Model.Description)) {
توضیحات :
-
- @Html.Raw(Model.Description) -
+
+
+ @Html.Raw(Model.Description) +
+
} @if (Model.medias.Count > 0) @@ -206,10 +208,19 @@
} + +
- - @Model.CreateDateFa -
+ @Model.CreateDateFa + + + +
+
@@ -234,11 +245,11 @@