Ejemplo n.º 1
0
        public List <WorkerDTO> GetWorkersList(WorkerListFilterDTO filter)
        {
            var dtos = new List <WorkerDTO>();

            try
            {
                var exprList = new List <Expression <Func <Worker, bool> > >();

                if (!string.IsNullOrEmpty(filter.Status))
                {
                    exprList.Add(wo => wo.Status.ToLower() == filter.Status.ToLower());
                }

                if (filter.Ids != null && filter.Ids.Exists(id => !string.IsNullOrEmpty(id)))
                {
                    //Equalizes Ids to Uppercase to search in database
                    filter.Ids = filter.Ids.Where(id => !string.IsNullOrEmpty(id)).Select(id => id.ToLower()).ToList();
                    exprList.Add(wo => filter.Ids.Contains(wo.Id.ToLower()));
                }

                if (filter.Logins != null && filter.Logins.Exists(lo => !string.IsNullOrEmpty(lo)))
                {
                    //Equalizes logins in Uppercase to search in database
                    filter.Logins = filter.Logins.Where(lo => !string.IsNullOrEmpty(lo)).Select(lo => lo.ToLower()).ToList();
                    exprList.Add(wo => filter.Logins.Contains(wo.Login.ToLower()));
                }

                if (exprList.Count <= default(int))
                {
                    throw new ServiceException(CommonExceptionType.ParameterException, "Logins, Ids or Status");
                }

                var loadOptions = new List <string>();
                if (filter.LoadManager)
                {
                    loadOptions.Add("Manager");
                    loadOptions.Add("Manager.Manager");
                }

                if (filter.LoadEmployees)
                {
                    loadOptions.Add("Employees");
                    loadOptions.Add("Employees.Employee");
                }

                if (filter.LoadBudgetCode)
                {
                    loadOptions.Add("BudgetCode");
                    loadOptions.Add("BudgetCode.Area");
                    loadOptions.Add("BudgetCode.Site");
                    loadOptions.Add("BudgetCode.Dept");
                    loadOptions.Add("BudgetCode.Lbc");
                }

                //Get workers using query options
                var workers = _workerRepo.SelectWhere(exprList.BuildExpression(), loadOptions.ToArray()).ToList();

                //Validates all basic worker properties
                var validations = new List <ValidationResult>();
                workers.AsParallel().ForAll(co => { co.Validate(); validations.AddRange(co.Validation.Results); });

                if (validations.Any())
                {
                    throw new ServiceException(validations);
                }

                dtos = workers.Map <List <Worker>, List <WorkerDTO> >();

                //Maps manager and employees data
                workers.AsParallel().ForAll(wo =>
                {
                    var dto            = dtos.FirstOrDefault(d => d.Id.ToUpper() == wo.Id.ToUpper());
                    dto.SourceDatabase = CommonDatabase.DBALCAP.ToString();

                    if (wo.Employees != null && wo.Employees.Count > 0)
                    {
                        var employees = wo.Employees.Select(e => e.Employee).ToList();
                        dto.Employees = employees.Map <List <Worker>, List <WorkerLeafDTO> >();
                    }

                    //Maps managers and third partners data
                    if (filter.LoadManager || filter.LoadThirdPartners)
                    {
                        var adUser = _adRepo.GetUser(dto.Login, filter.LoadManager, filter.LoadThirdPartners);

                        //Map manager data
                        if (wo.Manager != null && wo.Manager.FirstOrDefault() != null)
                        {
                            var manager = wo.Manager.FirstOrDefault().Manager;
                            dto.Manager = manager.Map <Worker, WorkerLeafDTO>();
                        }
                        else if (adUser.ActiveDirectoryManager.Login != null)
                        {
                            var manager = _workerRepo.Get(w => w.Login.ToUpper() == adUser.ActiveDirectoryManager.Login.ToUpper());
                            dto.Manager = manager.Map <Worker, WorkerLeafDTO>();
                        }

                        if (filter.LoadThirdPartners)
                        {
                            var logins        = adUser.ActiveDirectoryThirdPartners.Select(ad => ad.Login.ToUpper()).Distinct().ToList();
                            var thirdPartners = _workerRepo.SelectWhere(w => logins.Contains(w.Login.ToUpper())).ToList();
                            dto.ThirdPartners = thirdPartners.Map <List <Worker>, List <ThirdPartnerDTO> >();
                        }
                    }
                });
            }
            catch (Exception ex)
            {
                LogHelper.ExceptionAndThrow(ex);
            }

            return(dtos);
        }
Ejemplo n.º 2
0
        public List <WorkerDTO> GetWorkersList(WorkerListFilterDTO filter)
        {
            var dtos = new List <WorkerDTO>();

            try
            {
                var exprList = new List <Expression <Func <Worker, bool> > >();

                if (!string.IsNullOrEmpty(filter.Status))
                {
                    exprList.Add(wo => wo.Status.ToUpper() == filter.Status.ToUpper());
                }

                if (filter.Ids != null && filter.Ids.Exists(id => !string.IsNullOrEmpty(id)))
                {
                    //Equalizes Ids to Uppercase to search in database
                    filter.Ids = filter.Ids.Where(id => !string.IsNullOrEmpty(id)).Select(id => id.ToUpper()).ToList();
                    exprList.Add(wo => filter.Ids.Contains(wo.Id.ToUpper()));
                }

                if (filter.Logins != null && filter.Logins.Exists(lo => !string.IsNullOrEmpty(lo)))
                {
                    //Equalizes logins in Uppercase to search in database
                    filter.Logins = filter.Logins.Where(lo => !string.IsNullOrEmpty(lo)).Select(lo => lo.ToUpper()).ToList();
                    exprList.Add(wo => filter.Logins.Contains(wo.Login.ToUpper()));
                }

                if (exprList.Count <= default(int))
                {
                    throw new ServiceException(CommonExceptionType.ParameterException, "Logins, Ids or Status");
                }

                if (string.IsNullOrEmpty(filter.SpecificDatabase.ToString()))
                {
                    throw new ServiceException(CommonExceptionType.ParameterException, "Specific Database");
                }

                InitializeUnitOfWork(filter.SpecificDatabase);

                //Gets workers, maps to dto type
                var workersDtos = _workerRepo.SelectWhere(exprList.BuildExpression()).ToList().Map <List <Worker>, List <WorkerDTO> >();

                var lbcIds = workersDtos.Select(wd => wd.LbcId);
                var lbcs   = _lbcRepo.SelectWhere(lr => lbcIds.Contains(lr.LbcId)).ToList().Map <List <Lbc>, List <Alcoa.Framework.Contract.DTOs.Corporate.LbcDTO> >();

                var deptIds = workersDtos.Select(wd => wd.DeptId);
                var depts   = _deptRepo.SelectWhere(dr => deptIds.Contains(dr.DeptId)).ToList().Map <List <Dept>, List <Alcoa.Framework.Contract.DTOs.Corporate.DeptDTO> >();

                foreach (var worker in workersDtos)
                {
                    //Set database source in returned object
                    worker.SourceDatabase = filter.SpecificDatabase.ToString();

                    //If budget code load option is true
                    if (filter.LoadBudgetCode)
                    {
                        worker.BudgetCode = new Alcoa.Framework.Contract.DTOs.Corporate.BudgetCodeDTO
                        {
                            Lbc  = lbcs.FirstOrDefault(l => l.LbcId == worker.LbcId),
                            Dept = depts.FirstOrDefault(d => d.DeptId == worker.DeptId),
                        };
                    }
                }

                dtos.AddRange(workersDtos);
            }
            catch (Exception ex)
            {
                LogHelper.ExceptionAndThrow(ex);
            }

            return(dtos);
        }