public WorkerDTO GetWorker(WorkerFilterDTO filter) { var dto = default(WorkerDTO); try { var exprList = new List <Expression <Func <Worker, bool> > >(); if (!string.IsNullOrEmpty(filter.Id)) { exprList.Add(wo => wo.Id.ToLower() == filter.Id.ToLower()); } if (!string.IsNullOrEmpty(filter.Login)) { exprList.Add(wo => wo.Login.ToLower() == filter.Login.ToLower()); } if (!string.IsNullOrEmpty(filter.NameOrDescription)) { exprList.Add(wo => wo.NameOrDescription.ToLower() == filter.NameOrDescription.ToLower()); } if (exprList.Count <= default(int)) { throw new ServiceException(CommonExceptionType.ParameterException, "Id, Login or NameOrDescription"); } var loadOptions = new List <string> { "BudgetCode", "BudgetCode.Area", "BudgetCode.Site", "BudgetCode.Dept", "BudgetCode.Lbc" }; if (filter.LoadManager) { loadOptions.Add("Manager"); loadOptions.Add("Manager.Manager"); } if (filter.LoadEmployees) { loadOptions.Add("Employees"); loadOptions.Add("Employees.Employee"); } //Executes query var worker = _workerRepo.Get(exprList.BuildExpression(), loadOptions.ToArray()); //Validate worker basic data worker.Validate(); if (worker.Validation.HasErrors) { throw new ServiceException(worker.Validation.Results); } dto = worker.Map <Worker, WorkerDTO>(); dto.SourceDatabase = CommonDatabase.DBALCAP.ToString(); //Map employees data if (worker.Employees != null && worker.Employees.Count > 0) { var employees = worker.Employees.Select(e => e.Employee).ToList(); dto.Employees = employees.Map <List <Worker>, List <WorkerLeafDTO> >(); } // Map third partners' data if (filter.LoadManager || filter.LoadThirdPartners) { var adUser = _adRepo.GetUser(dto.Login, filter.LoadManager, filter.LoadThirdPartners); //Map manager data if (worker.Manager != null && worker.Manager.FirstOrDefault() != null) { var manager = worker.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(dto); }
public WorkerDTO GetWorker(WorkerFilterDTO filter) { var dto = default(WorkerDTO); try { var exprList = new List <Expression <Func <Worker, bool> > >(); if (!string.IsNullOrEmpty(filter.Id)) { exprList.Add(wo => wo.Id.ToUpper() == filter.Id.ToUpper()); } if (!string.IsNullOrEmpty(filter.Login)) { exprList.Add(wo => wo.Login.ToUpper() == filter.Login.ToUpper()); } if (!string.IsNullOrEmpty(filter.NameOrDescription)) { exprList.Add(wo => wo.NameOrDescription.ToUpper() == filter.NameOrDescription.ToUpper()); } if (exprList.Count <= default(int)) { throw new ServiceException(CommonExceptionType.ParameterException, "Id, Login or NameOrDescription"); } if (string.IsNullOrEmpty(filter.SpecificDatabase.ToString())) { throw new ServiceException(CommonExceptionType.ParameterException, "Specific Database"); } InitializeUnitOfWork(filter.SpecificDatabase); var worker = _workerRepo.Get(exprList.BuildExpression()); //Validate worker basic data worker.Validate(); if (worker.Validation.HasErrors) { throw new ServiceException(worker.Validation.Results); } //Get LBC and Dept to create Budget code var lbc = _lbcRepo.Get(l => l.LbcId == worker.LbcId); var dept = _deptRepo.Get(d => d.DeptId == worker.DeptId); worker.BudgetCode = new BudgetCode { LbcId = lbc.LbcId, Lbc = lbc, DeptId = dept.DeptId, Dept = dept, }; dto = worker.Map <Worker, WorkerDTO>(); dto.SourceDatabase = filter.SpecificDatabase.ToString().ToUpper(); } catch (Exception ex) { LogHelper.ExceptionAndThrow(ex); } return(dto); }