Example #1
0
        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);
        }