693 lines
27 KiB
C#
693 lines
27 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using _0_Framework.InfraStructure;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Linq;
|
|
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.Domain.AccountAgg;
|
|
using AccountManagement.Domain.TaskAgg;
|
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
|
|
|
|
namespace AccountMangement.Infrastructure.EFCore.Repository;
|
|
|
|
public class TaskRepository : RepositoryBase<long, Tasks>, ITaskRepository
|
|
{
|
|
private readonly AccountContext _accountContext;
|
|
private readonly IHttpContextAccessor _contextAccessor;
|
|
private readonly IAccountRepository _accountRepository;
|
|
|
|
public TaskRepository(IHttpContextAccessor contextAccessor, AccountContext accountContext,
|
|
IAccountRepository accountRepository) : base(accountContext)
|
|
{
|
|
_contextAccessor = contextAccessor;
|
|
_accountContext = accountContext;
|
|
_accountRepository = accountRepository;
|
|
}
|
|
|
|
public EditTask GetDetails(long TaskId)
|
|
{
|
|
|
|
return _accountContext.Tasks.Where(x => x.id == TaskId).Select(x => new EditTask()
|
|
{
|
|
EndTaskDate = x.EndTaskDate.ToFarsi(),
|
|
Description = x.Description,
|
|
Id = x.id,
|
|
Title = x.Title,
|
|
medias = _accountContext.TaskMedias.Include(z => z.Media).Where(e => e.TaskId == x.id).Select(m =>
|
|
new MediaViewModel()
|
|
{
|
|
Path = m.Media.Path,
|
|
Type = m.Media.Type,
|
|
Category = m.Media.Category,
|
|
Id = m.Media.id
|
|
}).ToList(),
|
|
EndTaskTime = x.EndTaskDate.ToFarsiFull().Substring(11),
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
CompleteDescription = x.DoneDescription,
|
|
IsDone = x.IsDone,
|
|
ReceiverId = _accountContext.Assigns.Where(a=>a.TaskId==x.id).Select(a=>a.AssignedId).ToList(),
|
|
SenderId = x.SenderId
|
|
|
|
}).FirstOrDefault();
|
|
}
|
|
|
|
public void Remove(long id)
|
|
{
|
|
var task=Get(id);
|
|
Remove(task);
|
|
}
|
|
|
|
|
|
|
|
public List<TaskViewModel> GetAllRequestedTasks(TaskSearchModel searchModel)
|
|
{
|
|
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
|
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
|
var emptyAcc = new AccountViewModel()
|
|
{
|
|
Fullname = "-",
|
|
PositionValue = 0
|
|
};
|
|
var query = _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
|
x.Task.IsDone == false && x.Task.IsActiveString == "true" &&
|
|
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).Select(x =>
|
|
new TaskViewModel()
|
|
{
|
|
|
|
AssignedId = x.AssignedId,
|
|
AssignerId = x.AssignerId,
|
|
CreateDate = x.Task.CreationDate.ToFarsi(),
|
|
EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(),
|
|
IsDone = x.Task.IsDone,
|
|
EndTaskDateGE = x.Task.EndTaskDate,
|
|
Name = x.Task.Title,
|
|
RequestCancel = x.Task.IsCanceledRequest,
|
|
RequestTime = x.Task.TimeRequest,
|
|
Id = x.Task.id,
|
|
CreateTaskDateGE = x.Task.CreationDate,
|
|
IsCancel = x.Task.IsCancel,
|
|
AcceptedTimeRequest = x.Task.AcceptedTimeRequest,
|
|
IsCancelRequest = x.Task.IsCanceledRequest,
|
|
ContractingPartyName = x.Task.ContractingPartyName,
|
|
MediaCount = x.Task.TaskMedias.Count(m => m.TaskId == x.id),
|
|
Description = x.Task.Description,
|
|
IsDoneRequest = x.Task.IsDoneRequest
|
|
|
|
});
|
|
//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 = x.AssignerId == accountId
|
|
? _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
|
|
{
|
|
PositionValue = a.Position.PositionValue,
|
|
Id = a.id,
|
|
Fullname = a.Fullname,
|
|
}).FirstOrDefault(a => a.Id == x.AssignerId) : _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
|
|
{
|
|
PositionValue = a.Position.PositionValue,
|
|
Id = a.id,
|
|
Fullname = a.Fullname,
|
|
}).FirstOrDefault(a => a.Id == x.AssignerId),
|
|
|
|
SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname,
|
|
|
|
Assigned =
|
|
x.AssignedId == accountId ?
|
|
ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id)
|
|
.Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId)
|
|
.ToList(),
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
MediaCount = x.MediaCount,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
});
|
|
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
|
{
|
|
var start = searchModel.StartDate.ToGeorgianDateTime();
|
|
var end = searchModel.EndDate.ToGeorgianDateTime();
|
|
res = res.Where(x =>
|
|
((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end < x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
|
|
}
|
|
|
|
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
|
|
{
|
|
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
|
|
res = res.Where(x => x.IsDoneRequest == isDoneReq);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
|
|
{
|
|
bool isDone = bool.Parse(searchModel.IsDone);
|
|
res = res.Where(x => x.IsDone == isDone);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled))
|
|
{
|
|
bool isCancel = bool.Parse(searchModel.IsCanceled);
|
|
res = res.Where(x => x.IsCancel == isCancel);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest))
|
|
{
|
|
bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest);
|
|
res = res.Where(x => x.RequestTime == isTimeRequest);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted))
|
|
{
|
|
res = res.Where(x => x.AcceptedTimeRequest > 0);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest))
|
|
{
|
|
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
|
|
res = res.Where(x => x.IsCancelRequest == isCancelReq);
|
|
|
|
}
|
|
|
|
|
|
|
|
var resEnum = res.AsEnumerable();
|
|
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
|
|
|
|
if (searchModel.AccountId > 0)
|
|
{
|
|
result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
|
|
}
|
|
|
|
|
|
var orderResult = result.OrderBy(x => x.IsDone ? 1 : 0)
|
|
.ThenBy(x => x.EndTaskDateGE).ThenBy(x => x.IsCancel ? 0 : 1);
|
|
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id))
|
|
.Select(a => new AssignViewModel()
|
|
{
|
|
AssignedName = a.Fullname,
|
|
AssignedPositionValue = a.Position.PositionValue
|
|
}).ToList(),
|
|
Sender = x.Sender.Id == accountId ? emptyAcc : x.Sender,
|
|
SelfAssigner = x.Sender.Id == accountId ? true : false,
|
|
Assigned = x.Assigned,
|
|
SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
MediaCount = x.MediaCount,
|
|
SelfName = x.SelfName,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest,
|
|
|
|
|
|
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
|
|
AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
|
|
{
|
|
AssignViewModels = a.ToList(),
|
|
PosValue = a.Key
|
|
}).ToList()
|
|
: x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
|
|
{
|
|
AssignViewModels = a.ToList(),
|
|
PosValue = a.Key
|
|
}).ToList(),
|
|
Sender = x.Sender,
|
|
Assigned = x.Assigned,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
Color = x.IsCancelRequest || x.RequestTime || x.IsDoneRequest ? SetRequestTasksColors(x.RequestTime, x.IsCancelRequest,x.IsDoneRequest) : "",
|
|
MediaCount = x.MediaCount,
|
|
HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0),
|
|
SelfName = x.SelfName,
|
|
SelfAssigned = x.SelfAssigned,
|
|
SelfAssigner = x.SelfAssigner,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
}).ToList();
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
|
|
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList,
|
|
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
|
|
{
|
|
PositionValue = 0,
|
|
Fullname = "-"
|
|
} : x.Sender,
|
|
Assigned = x.Assigned,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
Color = x.Color,
|
|
MediaCount = x.MediaCount,
|
|
HasAttachment = x.HasAttachment,
|
|
SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName,
|
|
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
|
|
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
|
|
: "",
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
}).ToList();
|
|
return final;
|
|
}
|
|
|
|
public List<TaskViewModel> GetTasks(TaskSearchModel searchModel)
|
|
{
|
|
var accountId = long.Parse(_contextAccessor.HttpContext.User.FindFirst("AccountId").Value);
|
|
var positionValue = int.Parse(_contextAccessor.HttpContext.User.FindFirst("PositionValue").Value);
|
|
var emptyAcc = new AccountViewModel()
|
|
{
|
|
Fullname = "-",
|
|
PositionValue = 0
|
|
};
|
|
var query = _accountContext.Assigns.Include(x => x.Task).ThenInclude(x => x.TaskMedias).ThenInclude(x => x.Media)
|
|
.Where(x =>
|
|
x.Task.IsActiveString == "true" && ((x.AssignedId == accountId || x.AssignerId == accountId) || x.AssignerPositionValue > positionValue))
|
|
.Select(x =>
|
|
new TaskViewModel()
|
|
{
|
|
|
|
AssignedId = x.AssignedId,
|
|
AssignerId = x.AssignerId,
|
|
CreateDate = x.Task.CreationDate.ToFarsi(),
|
|
EndTaskDateFA = x.Task.EndTaskDate.ToFarsi(),
|
|
IsDone = x.Task.IsDone,
|
|
EndTaskDateGE = x.Task.EndTaskDate,
|
|
Name = x.Task.Title,
|
|
RequestCancel = x.Task.IsCanceledRequest,
|
|
RequestTime = x.Task.TimeRequest,
|
|
Id = x.Task.id,
|
|
CreateTaskDateGE = x.Task.CreationDate,
|
|
IsCancel = x.Task.IsCancel,
|
|
AcceptedTimeRequest = x.Task.AcceptedTimeRequest,
|
|
IsCancelRequest = x.Task.IsCanceledRequest,
|
|
ContractingPartyName = x.Task.ContractingPartyName,
|
|
MediaCount = _accountContext.TaskMedias.Count(m => m.TaskId == x.Task.id),
|
|
Description = x.Task.Description,
|
|
IsDoneRequest=x.Task.IsDoneRequest,
|
|
|
|
});
|
|
//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 = x.AssignerId == accountId
|
|
? _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
|
|
{
|
|
PositionValue = a.Position.PositionValue,
|
|
Id = a.id,
|
|
Fullname = a.Fullname,
|
|
}).FirstOrDefault(a => a.Id == x.AssignerId) : _accountContext.Accounts.Include(a => a.Position).Select(a => new AccountViewModel()
|
|
{
|
|
PositionValue = a.Position.PositionValue,
|
|
Id = a.id,
|
|
Fullname = a.Fullname,
|
|
}).FirstOrDefault(a => a.Id == x.AssignerId),
|
|
|
|
SelfName = _accountContext.Accounts.FirstOrDefault(a => a.id == accountId).Fullname,
|
|
|
|
Assigned =
|
|
x.AssignedId == accountId ?
|
|
ExtraTools.AddAccountIdToList(_accountContext.Assigns.Where(a => a.TaskId == x.Id && a.AssignerId == accountId).Select(a => a.AssignedId).ToList(), accountId) : _accountContext.Assigns.Where(a => a.TaskId == x.Id)
|
|
.Where(x => x.AssignedPositionValue > positionValue).Select(a => a.AssignedId)
|
|
.ToList(),
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
MediaCount = x.MediaCount,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
});
|
|
if (!string.IsNullOrWhiteSpace(searchModel.StartDate) && !string.IsNullOrWhiteSpace(searchModel.EndDate))
|
|
{
|
|
var start = searchModel.StartDate.ToGeorgianDateTime();
|
|
var end = searchModel.EndDate.ToGeorgianDateTime();
|
|
res = res.Where(x =>
|
|
((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end < x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start < x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end > x.EndTaskDateGE && x.EndTaskDateGE > start))
|
|
|| ((start > x.CreateTaskDateGE && x.CreateTaskDateGE < end) &&
|
|
|
|
(end < x.EndTaskDateGE && x.EndTaskDateGE > end)));
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsDoneRequest))
|
|
{
|
|
bool isDoneReq = bool.Parse(searchModel.IsDoneRequest);
|
|
res = res.Where(x => x.IsDoneRequest == isDoneReq);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsDone))
|
|
{
|
|
bool isDone = bool.Parse(searchModel.IsDone);
|
|
res = res.Where(x => x.IsDone == isDone);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsCanceled))
|
|
{
|
|
bool isCancel = bool.Parse(searchModel.IsCanceled);
|
|
res = res.Where(x => x.IsCancel == isCancel);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsTimeRequest))
|
|
{
|
|
bool isTimeRequest = bool.Parse(searchModel.IsTimeRequest);
|
|
res = res.Where(x => x.RequestTime == isTimeRequest);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.TimeRequestAccepted))
|
|
{
|
|
res = res.Where(x => x.AcceptedTimeRequest > 0);
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(searchModel.IsCancelRequest))
|
|
{
|
|
bool isCancelReq = bool.Parse(searchModel.IsCancelRequest);
|
|
res = res.Where(x => x.IsCancelRequest == isCancelReq);
|
|
|
|
}
|
|
|
|
|
|
var resEnum = res.AsEnumerable();
|
|
var result = resEnum.GroupBy(x => x.Id).Select(x => x.First());
|
|
|
|
if (searchModel.AccountId > 0)
|
|
{
|
|
result = result.Where(x => x.Sender.Id == searchModel.AccountId || x.Assigned.Contains(searchModel.AccountId));
|
|
}
|
|
|
|
|
|
var orderResult = result.OrderByDescending(x => x.IsCancel ? 0 : 1).ThenBy(x => x.IsDone ? 1 : 0)
|
|
.ThenBy(x => x.EndTaskDateGE);
|
|
|
|
|
|
var final = orderResult.Skip(searchModel.PageIndex).Take(30).ToList();
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
AssignViewModels = _accountContext.Accounts.Include(x => x.Position).Where(a => x.Assigned.Contains(a.id))
|
|
.Select(a => new AssignViewModel()
|
|
{
|
|
AssignedName = a.Fullname,
|
|
AssignedPositionValue = a.Position.PositionValue
|
|
}).ToList(),
|
|
Sender = x.Sender.Id == accountId ? emptyAcc : x.Sender,
|
|
SelfAssigner = x.Sender.Id == accountId ? true : false,
|
|
Assigned = x.Assigned,
|
|
SelfAssigned = x.Assigned.Any(a => a == accountId) ? true : false,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
MediaCount = x.MediaCount,
|
|
SelfName = x.SelfName,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
|
|
|
|
|
|
|
|
|
|
}).ToList();
|
|
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
|
|
AssignList = !x.SelfAssigned && !x.SelfAssigner ? x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
|
|
{
|
|
AssignViewModels = a.ToList(),
|
|
PosValue = a.Key
|
|
}).ToList()
|
|
: x.AssignViewModels.GroupBy(a => a.AssignedPositionValue).Select(a => new AssignList()
|
|
{
|
|
AssignViewModels = a.ToList(),
|
|
PosValue = a.Key
|
|
}).ToList(),
|
|
Sender = x.Sender,
|
|
Assigned = x.Assigned,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
Color = x.IsDone ? "green" : SetTasksColors(x.EndTaskDateGE,x.IsCancel),
|
|
MediaCount = x.MediaCount,
|
|
HasAttachment = (!string.IsNullOrWhiteSpace(x.Description) || x.MediaCount > 0)?true:false,
|
|
SelfName = x.SelfName,
|
|
SelfAssigned = x.SelfAssigned,
|
|
SelfAssigner = x.SelfAssigner,
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
}).ToList();
|
|
|
|
final = final.Select(x => new TaskViewModel()
|
|
{
|
|
|
|
AssignList = !(x.SelfAssigned || x.SelfAssigner) ? ExtraTools.AddAssign(x.AssignList, x.Sender) : x.AssignList,
|
|
Sender = !(x.SelfAssigned || x.SelfAssigner) ? new AccountViewModel()
|
|
{
|
|
PositionValue = 0,
|
|
Fullname = "-"
|
|
} : x.Sender,
|
|
Assigned = x.Assigned,
|
|
CreateDate = x.CreateDate,
|
|
EndTaskDateFA = x.EndTaskDateFA,
|
|
IsDone = x.IsDone,
|
|
EndTaskDateGE = x.EndTaskDateGE,
|
|
Name = x.Name,
|
|
RequestCancel = x.RequestCancel,
|
|
RequestTime = x.RequestTime,
|
|
Id = x.Id,
|
|
CreateTaskDateGE = x.CreateTaskDateGE,
|
|
IsCancel = x.IsCancel,
|
|
AcceptedTimeRequest = x.AcceptedTimeRequest,
|
|
IsCancelRequest = x.IsCancelRequest,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
Color = x.Color,
|
|
MediaCount = x.MediaCount,
|
|
HasAttachment = x.HasAttachment,
|
|
SelfName = !(x.SelfAssigned || x.SelfAssigner) ? "-" : x.SelfName,
|
|
EndTaskTime = $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}:{x.EndTaskDateGE.Second}" != "23:59:59"
|
|
? $"{x.EndTaskDateGE.Hour}:{x.EndTaskDateGE.Minute}"
|
|
: "",
|
|
Description = x.Description,
|
|
IsDoneRequest=x.IsDoneRequest
|
|
}).ToList();
|
|
return final;
|
|
|
|
}
|
|
|
|
public string SetTasksColors(DateTime date,bool isCancel)
|
|
{
|
|
if (isCancel)
|
|
{
|
|
return "brown";
|
|
}
|
|
var now = DateTime.Now.Date;
|
|
if (date.Date < now)
|
|
{
|
|
return "dark";
|
|
}
|
|
else if (date.Date == now)
|
|
{
|
|
return "red";
|
|
}
|
|
else if (date.Date == now.AddDays(1))
|
|
{
|
|
return "yellow";
|
|
}
|
|
else if (date.Date > now.AddDays(1))
|
|
{
|
|
return "gray";
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
public string SetRequestTasksColors(bool timeRequest, bool cancelRequest,bool isDoneRequest)
|
|
{
|
|
if (timeRequest)
|
|
{
|
|
return "yellow";
|
|
}
|
|
else if (cancelRequest)
|
|
{
|
|
return "red";
|
|
}
|
|
else if (isDoneRequest)
|
|
{
|
|
return "green";
|
|
}
|
|
else
|
|
{
|
|
return "";
|
|
}
|
|
|
|
}
|
|
|
|
public int GetRequestedTasksCount()
|
|
{
|
|
return _accountContext.Assigns.Include(x => x.Task).Where(x =>
|
|
x.Task.IsDone == false && x.Task.IsActiveString == "true" &&
|
|
(x.Task.IsCanceledRequest == true || x.Task.TimeRequest == true||x.Task.IsDoneRequest)).GroupBy(x => x.TaskId)
|
|
.Select(x => x.First()).Count();
|
|
}
|
|
|
|
public TaskViewModel GetRequestDetails(long id)
|
|
{
|
|
return _accountContext.Tasks.Where(x => x.id == id).Select(x=>new TaskViewModel()
|
|
{
|
|
Id = x.id,
|
|
Name = x.Title,
|
|
ContractingPartyName = x.ContractingPartyName,
|
|
TimeRequestDescription = x.TimeRequestDescription,
|
|
CancelDescription = x.CancelDescription,
|
|
IsDoneDescription = x.DoneDescription,
|
|
IsCancelRequest = x.IsDoneRequest,
|
|
RequestTime = x.TimeRequest,
|
|
IsDoneRequest = x.IsDoneRequest,
|
|
RequestTaskDate = x.RequestDate==null?"":x.RequestDate.ToFarsi()
|
|
}).FirstOrDefault();
|
|
}
|
|
}
|
|
|
|
public static class ExtraTools
|
|
{
|
|
|
|
public 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;
|
|
|
|
|
|
}
|
|
|
|
public static List<long> AddAccountIdToList(List<long> list, long accountId)
|
|
{
|
|
list.Add(accountId);
|
|
return list;
|
|
}
|
|
|
|
} |