private async Task <List <UpdateTargetDto> > GetIndicatorTargets(long indicatorId) { List <UpdateTargetDto> output = new List <UpdateTargetDto>(); var targets = await _lookup_targetRepository.GetAll() .Where(x => x.IndicatorId == indicatorId) .Select(x => new IndicatorYearlyTargetDto { Actual = x.Actual, ComparisonMethod = x.ComparisonMethod, DataSource = x.DataSource, Description = x.Description, Id = x.Id, IndicatorId = x.IndicatorId, LastUpdated = x.LastModificationTime, MeansOfVerification = x.MeansOfVerification, Note = x.Note, Target = x.Target, Year = x.Year, PercentageAchieved = x.PercentageAchieved }) .ToListAsync(); foreach (var target in targets) { UpdateTargetDto updateTarget = new UpdateTargetDto(); updateTarget.Target = target; output.Add(updateTarget); } return(output); }
public async Task UpdateYearTargetProgress(UpdateTargetDto input) { var indicator = await _performanceIndicatorRepository.FirstOrDefaultAsync((int)input.Target.IndicatorId); var deliverable = await _lookup_organizationUnitRepository.FirstOrDefaultAsync(indicator.OrganizationUnitId); var user = await _userManager.GetUserByIdAsync((long)AbpSession.UserId); var userOu = await _userManager.GetOrganizationUnitsAsync(user); var userOuCodes = userOu.Select(ou => ou.Code); if (!userOuCodes.Any(code => deliverable.Code.StartsWith(code))) { throw new UserFriendlyException(L("ActionOnlyAvailableToMdaMembers")); } var target = await _indicatorYearlyTargetRepository.FirstOrDefaultAsync((int)input.Target.Id); if (indicator.DataType == Enums.DataTypeEnum.Number) { target.Actual = (Convert.ToDouble(target.Actual) + Convert.ToDouble(input.Target.Actual)).ToString(); target.PercentageAchieved = Convert.ToInt32((Convert.ToDouble(target.Actual) / Convert.ToDouble(target.Target)) * 100); } if (indicator.DataType == Enums.DataTypeEnum.DateTime) { target.Actual = input.Target.Actual; target.PercentageAchieved = target.Target.Equals(input.Target.Actual) ? 100 : 0; } else { target.Actual = input.Target.Actual; target.PercentageAchieved = target.Target.Equals(input.Target.Actual) ? 100 : 0; } target.Note = input.Target.Note; target.DataSource = input.Target.DataSource; await _indicatorYearlyTargetRepository.UpdateAsync(target); CurrentUnitOfWork.SaveChanges(); await SaveAttachment(target.Id, input.Attachments); await SaveProgressLog(input.Target); await UpdateIndicatorProgressAchieved(target.IndicatorId); }