3025 lines
122 KiB
C#
3025 lines
122 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using _0_Framework.InfraStructure;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using _0_Framework.Application;
|
|
using AccountManagement.Application.Contracts.Account;
|
|
using AccountManagement.Application.Contracts.Assign;
|
|
using AccountManagement.Application.Contracts.Media;
|
|
using AccountManagement.Application.Contracts.Task;
|
|
using AccountManagement.Application.Contracts.TaskMessage;
|
|
using AccountManagement.Domain.AccountAgg;
|
|
using AccountManagement.Domain.TaskAgg;
|
|
using AccountManagement.Domain.TicketAgg;
|
|
|
|
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<long, Tasks>, 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 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(),
|
|
TaskScheduleId = x.TaskScheduleId ?? 0
|
|
|
|
}).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;
|
|
}
|
|
|
|
if (res.TaskScheduleId>0)
|
|
{
|
|
var taskSchedule = _accountContext.TaskSchedules.FirstOrDefault(x => x.id == res.TaskScheduleId);
|
|
|
|
res.ScheduleUnitType = taskSchedule.UnitType;
|
|
res.ScheduleType = taskSchedule.Type;
|
|
res.ScheduleCount = taskSchedule.Count;
|
|
res.ScheduleUnitNumber = taskSchedule.UnitNumber;
|
|
}
|
|
|
|
|
|
//_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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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 && x.Task.TaskScheduleId == 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,
|
|
|
|
});
|
|
|
|
}
|
|
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<TaskViewModel> 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<TaskViewModel> 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<TaskViewModel> 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 List<TaskViewModel> GetTaskScheduleList(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)
|
|
.Include(x => x.Task).ThenInclude(x => x.TaskSchedule)
|
|
.Where(x =>
|
|
x.Task.IsActiveString == "true" && x.Task.SenderId == accountId
|
|
&& x.Task.TaskScheduleId != null && x.Task.TaskScheduleId > 0 && (!x.IsCanceledRequest && !x.TimeRequest && !x.IsDoneRequest) && x.Task.TaskSchedule.IsActive == IsActive.True);
|
|
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.GroupBy(x => x.Task.TaskScheduleId).Select(x =>
|
|
new TaskViewModel()
|
|
{
|
|
AssignedId = x.First().AssignedId,
|
|
AssignerId = x.First().AssignerId,
|
|
CreateDate = x.First().Task.CreationDate.ToFarsi(),
|
|
EndTaskDateFA = x.First().EndTaskDate.ToFarsi(),
|
|
IsDone = x.First().IsDone,
|
|
EndTaskDateGE = x.First().EndTaskDate,
|
|
Name = x.First().Task.Title,
|
|
RequestCancel = x.First().IsCanceledRequest,
|
|
RequestTime = x.First().TimeRequest,
|
|
Id = x.First().Task.id,
|
|
CreateTaskDateGE = x.First().Task.CreationDate,
|
|
IsCancel = x.First().IsCancel,
|
|
AcceptedTimeRequest = x.First().AcceptedTimeRequest,
|
|
IsCancelRequest = x.First().IsCanceledRequest,
|
|
ContractingPartyName = x.First().Task.ContractingPartyName,
|
|
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.First().Task.id),
|
|
Description = x.First().Task.Description,
|
|
IsDoneRequest = x.First().IsDoneRequest,
|
|
ScheduleType = x.First().Task.TaskSchedule.Type,
|
|
ScheduleUnitType = x.First().Task.TaskSchedule.UnitType,
|
|
TaskScheduleId = (long)x.First().Task.TaskScheduleId
|
|
|
|
}
|
|
);
|
|
|
|
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,
|
|
ScheduleType = x.ScheduleType,
|
|
ScheduleUnitType = x.ScheduleUnitType,
|
|
TaskScheduleId = x.TaskScheduleId
|
|
});
|
|
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,
|
|
ScheduleType = x.ScheduleType,
|
|
ScheduleUnitType = x.ScheduleUnitType,
|
|
TaskScheduleId = x.TaskScheduleId
|
|
|
|
|
|
}).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,
|
|
ScheduleType = x.ScheduleType,
|
|
ScheduleUnitType = x.ScheduleUnitType,
|
|
TaskScheduleId = x.TaskScheduleId
|
|
|
|
}).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
|
|
},
|
|
ScheduleType = x.ScheduleType,
|
|
ScheduleUnitType = x.ScheduleUnitType,
|
|
TaskScheduleId = x.TaskScheduleId
|
|
|
|
}).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 async Task<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 await _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()).CountAsync();
|
|
}
|
|
else
|
|
{
|
|
return await _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()).CountAsync();
|
|
}
|
|
}
|
|
|
|
|
|
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 async Task<int> RequestedAndOverdueTasksCount(long userId)
|
|
{
|
|
var account = _accountRepository.GetIncludePositions(userId);
|
|
if (account.Position == null)
|
|
return 0;
|
|
|
|
DateTime now = DateTime.Now;
|
|
|
|
var overdueTasksCount = await OverdueTasksCount(userId);
|
|
|
|
|
|
//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 = await GetRequestedTasksCount();
|
|
|
|
var ticketRequested = await TasksHaveTicketRequestsCount(userId);
|
|
var overdueTicket = await TasksHaveTicketCounts(userId);
|
|
|
|
return overdueTasksCount + overdueRequestsCount + ticketRequested + overdueTicket;
|
|
}
|
|
|
|
public int OverdueRequestsCount(long userId)
|
|
{
|
|
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 overdueRequestsCount;
|
|
}
|
|
|
|
public async Task<int> OverdueTasksCount(long userId)
|
|
{
|
|
var account = _accountRepository.GetIncludePositions(userId);
|
|
|
|
if (account.Position == null)
|
|
return 0;
|
|
|
|
var positionValue = account.Position.PositionValue;
|
|
|
|
int overdueTasksCount;
|
|
if (positionValue == 1)
|
|
{
|
|
overdueTasksCount = await _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" && x.Task.TicketId == null)
|
|
.GroupBy(x => x.TaskId).Select(x => x.First()).CountAsync();
|
|
|
|
//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 = await _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" && x.Task.TicketId == null)
|
|
.GroupBy(x => x.TaskId).Select(x => x.First()).CountAsync();
|
|
;
|
|
}
|
|
|
|
return overdueTasksCount;
|
|
}
|
|
|
|
public List<Tasks> GetTasksByTaskScheduleId(long taskScheduleId)
|
|
{
|
|
return _accountContext.Tasks.Include(x=>x.Assigns).Where(x => x.TaskScheduleId != null && x.TaskScheduleId == taskScheduleId).ToList();
|
|
}
|
|
|
|
|
|
public async Task<int> TasksHaveTicketCounts(long userId)
|
|
{
|
|
return await _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).CountAsync();
|
|
}
|
|
|
|
public async Task<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 await _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()).CountAsync();
|
|
}
|
|
else
|
|
{
|
|
return await _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()).CountAsync();
|
|
}
|
|
}
|
|
|
|
|
|
// 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<TaskViewModel> 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<TaskViewModel> 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<AssignList> AddAssign(List<AssignList> list, AccountViewModel acc)
|
|
{
|
|
list.Add(new AssignList()
|
|
{
|
|
AssignViewModels = new List<AssignViewModel>()
|
|
{
|
|
new ()
|
|
{
|
|
AssignedName = acc.Fullname,
|
|
AssignedPositionValue = acc.PositionValue
|
|
},
|
|
}.ToList(),
|
|
PosValue = acc.PositionValue
|
|
});
|
|
return list;
|
|
|
|
|
|
}
|
|
|
|
private static List<long> AddAccountIdToList(List<long> list, long accountId)
|
|
{
|
|
list.Add(accountId);
|
|
return list;
|
|
}
|
|
} |