Untitled
unknown
plain_text
3 years ago
12 kB
13
Indexable
/// <summary>
/// Metodo que devuelve las relaciones con personas de contacto en un negocio
/// </summary>
/// <param name="companyId">Listado de compañías</param>
/// <param name="brandId">Negocio de la oficina</param>
/// <param name="authorization">JWT de la peticion</param>
/// <returns>Lista de relaciones con personas de contacto</returns>
public async Task<List<ContactPersonRelModel>> GetContactPersonRels(int contactPersonId, List<string> companyId, string brandId, string authorization)
{
// Variables LOG
object[] parameters = { contactPersonId, companyId != null ? string.Join("-", companyId) : null, brandId, authorization };
string messageLog = "obtiene las relaciones con personas de contacto en un negocio";
logger.Debug("Inicio - " + messageLog, parameters);
var modelList = new List<ContactPersonRelModel>();
var profCompany = companyId.ToList();
Dictionary<string, RolModel> gestorRol = new Dictionary<string, RolModel>();
List<Domain.Entities.ClientsModel.PositionInterlocFBI> positionFBIList = new List<Domain.Entities.ClientsModel.PositionInterlocFBI>();
var queryRelsGroups = unitOfWork.ContactPersonRelsRepository.Fetch()
.Where(x => x.ActiveChk == GlobalId.Active && x.TypeId == ContactPersonRelType.Group && x.ContactPersonId == contactPersonId
&& x.ClientGroup.Client.Any(y => y.ClientsCenters.Any(z => profCompany.Contains(z.Branch.CompanyId))));
var queryRelsClients = unitOfWork.ContactPersonRelsRepository.Fetch()
.Where(x => x.ActiveChk == GlobalId.Active && x.TypeId == ContactPersonRelType.Client && x.ContactPersonId == contactPersonId
&& x.Client.ClientsCenters.Any(y => profCompany.Contains(y.Branch.CompanyId)));
var queryRelsClientCenters = unitOfWork.ContactPersonRelsRepository.Fetch()
.Where(x => profCompany.Contains(x.ClientCenter.Branch.CompanyId) && x.ActiveChk == GlobalId.Active
&& x.ContactPersonId == contactPersonId && x.TypeId == ContactPersonRelType.Center);
var rels = await queryRelsGroups.Union(queryRelsClients).Union(queryRelsClientCenters)
.Include(x => x.Client).ThenInclude(y => y.ClientsCenters)
.Include(x => x.User).ThenInclude(q => q.Employee)
.Include(x => x.User).ThenInclude(q => q.Branch)
.Include(x => x.MailingTypes)
.Include(x => x.ContactTypes)
.Include(x => x.ContactPersonRol)
.Include(x => x.ClientCentersCenterCost)
.Include(x => x.ClientGroup)
.Include(x => x.Client)
.Include(x => x.ClientCenter).ToListAsync();
foreach (var rel in rels)
{
var positionIdList = new List<string>();
if (rel.User.CompanyId == CompanyId.RWS)
{
foreach (var contact in rel.ContactPersonRol.Where(x => x.DeletedId == GlobalId.NotDeletedId))
{
var currentPositionFBI = positionFBIList.Where(x => x.PositionId == contact.PositionId
&& x.PCompanyId == contact.PCompanyId && x.ProductId == contact.ProductId).Any();
if (!positionIdList.Contains(contact.PositionId) && !currentPositionFBI)
{
positionIdList.Add(contact.PositionId);
}
}
}
else
{
var currentPositionFBI = positionFBIList.Where(x => x.PositionId == rel.PositionInterlocFBIId).Any();
if (!currentPositionFBI)
{
positionIdList.Add(rel.PositionInterlocFBIId);
}
}
if (positionIdList.Any())
{
var positionFBI = await unitOfWork.PositionInterlocFBIRepository.Fetch().Where(q => positionIdList.Contains(q.PositionId) && q.DeletedId == GlobalId.NotDeletedId).ToListAsync();
positionFBIList.AddRange(positionFBI);
}
//Nombre Compañia
string companyName = string.Empty;
switch (rel.User.CompanyId)
{
case "RWS":
{
companyName = "Staffing";
break;
}
case "RPS":
case "VEX":
{
companyName = "Outsourcing";
break;
}
case "RCO":
{
companyName = brandId == rel.User.Branch.BrandId ? "Proffesionals" : "";
break;
}
case "EXP":
{
companyName = brandId == rel.User.Branch.BrandId ? "Proffesionals" : "Technologies";
break;
}
case "FUN":
{
companyName = "Fundación Randstad";
break;
}
}
//Última visita
Visit lastVisit = null;
if (rel.User.CompanyId == CompanyId.RWS || rel.User.CompanyId == CompanyId.FUN)
{
lastVisit = await unitOfWork.VisitRepository.Fetch()
.Where(x => x.ContactPersonId == contactPersonId &&
x.ClientCenter.ClientId == rel.ClientId && x.ClientCenter.Branch.BrandId == rel.User.Branch.BrandId &&
(string.IsNullOrEmpty(x.ActivityId) ||
x.ActivityId == ClientCenterActivity.PhysicalVisit ||
x.ActivityId == ClientCenterActivity.DigitalVisit ||
x.ActivityId == ClientCenterActivity.PhoneVisit) &&
x.StatusId == ClientCenterActivityStatus.RealizedId)
.OrderByDescending(x => x.VisitDate)
.FirstOrDefaultAsync();
}
else
{
lastVisit = await unitOfWork.VisitRepository.Fetch()
.Where(x => x.ContactPersonId == contactPersonId &&
x.ClientCenter.ClientId == rel.ClientId && x.ClientCenter.Branch.BrandId == rel.User.Branch.BrandId &&
(string.IsNullOrEmpty(x.ActivityId) ||
x.ActivityId == ClientCenterActivity.PhysicalVisit ||
x.ActivityId == ClientCenterActivity.DigitalVisit)
&& x.StatusId == ClientCenterActivityStatus.RealizedId)
.OrderByDescending(x => x.VisitDate)
.FirstOrDefaultAsync();
}
var model = new ContactPersonRelModel()
{
ContactPersonId = rel.ContactPersonId,
ContactPersonRelId = rel.ContactPersonRelId,
UserId = rel.UserId,
EmployeeId = rel.User.EmployeeId,
AllName = $"{rel.User.Employee.FirstName} {rel.User.Employee.Surname1} {rel.User.Employee.Surname2}",
FiscalDocNumber = rel.User.Employee.FiscalDocNumber,
ContactTypeId = rel.ContactTypeId,
ContactTypeDescription = rel.ContactTypes?.Description,
MailingTypeId = rel.MailingTypeId,
MailingTypeDescription = string.Empty,
ShouldReceiveSurveyChk = rel.ShouldReceiveSurveyChk.HasValue ? rel.ShouldReceiveSurveyChk.Value : GlobalId.Inactive,
WantToReceiveASurveyChk = rel.WantToReceiveASurveyChk.HasValue ? rel.WantToReceiveASurveyChk.Value : GlobalId.Inactive,
CenterCostSeq = rel.CenterCostSeq,
CenterCostSeqDescription = rel.ClientCentersCenterCost?.Description,
PositionInterlocFBIId = rel.PositionInterlocFBIId,
Branch = rel.User.Branch.Name,
Company = companyName.ToUpper(),
LastVisitDate = lastVisit != null ? (lastVisit.VisitDate.HasValue ? lastVisit.VisitDate.Value.ToString("dd/MM/yyyy") : string.Empty) : string.Empty,
OrderVisitDate = lastVisit != null ? (lastVisit.VisitDate.HasValue ? lastVisit.VisitDate : DateTime.Today.AddYears(-10)) : DateTime.Today,
CompanyId = rel.User.CompanyId,
RelationTypeDesc = (rel.TypeId == ContactPersonRelType.Group ? "Grupo" : (rel.TypeId == ContactPersonRelType.Client ? "Cliente" : (rel.TypeId == ContactPersonRelType.Center ? "Centro" : ""))),
RelationValueId = $"{(rel.TypeId == ContactPersonRelType.Group ? rel.GroupId : (rel.TypeId == ContactPersonRelType.Client ? rel.ClientId : rel.ClientId + "." + rel.ClientCenterId))}",
RelationValueDesc = (rel.TypeId == ContactPersonRelType.Group ? rel.ClientGroup?.GroupName : (rel.TypeId == ContactPersonRelType.Client ? rel.Client?.ShortName : rel.ClientCenter?.CenterName)),
};
if (rel.User.CompanyId == CompanyId.RCO || rel.User.CompanyId == CompanyId.EXP)
{
model.MailingTypeDescription = rel.MailingTypes?.Description;
}
if (rel.User.CompanyId == CompanyId.RWS)
{
var posIdList = rel.ContactPersonRol.Where(x => x.DeletedId == GlobalId.NotDeletedId).Select(x => x.PositionId).ToList();
var currentPositionFBI = positionFBIList.Where(x => posIdList.Contains(x.PositionId)
&& rel.ContactPersonRol.Any(c => c.PCompanyId == x.PCompanyId && c.ProductId == x.ProductId)).ToList();
model.PositionInterlocFBIIdList = new List<Tuple<string, string>>();
model.PositionDescription = string.Join(", ", currentPositionFBI.Select(x => x.Description));
foreach (var rol in rel.ContactPersonRol.Where(x => x.DeletedId == GlobalId.NotDeletedId))
{
var current = currentPositionFBI.Where(x => x.PositionId == rol.PositionId).FirstOrDefault();
model.PositionInterlocFBIIdList.Add(Tuple.Create(rol.PositionId, current?.Description));
}
}
else
{
var currentPositionFBI = positionFBIList.Where(x => x.PositionId == rel.PositionInterlocFBIId).FirstOrDefault();
model.PositionDescription = currentPositionFBI?.Description;
}
modelList = modelList.OrderByDescending(x => x.OrderVisitDate).ThenBy(x => x.Company).ToList();
modelList.Add(model);
}
logger.Debug("Fin - " + messageLog, parameters);
return modelList;
}
Editor is loading...