예제 #1
0
        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);
        }
예제 #2
0
        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);
        }