public async Task <ILeadershipPointSystemResponse> AddCriteriaClaimAsync(CriteriaClaimRequestView model)
        {
            try
            {
                var userInfo = await _appDbContext.UserInfos.FirstOrDefaultAsync(k => k.UserId == model.ProfileId);

                if (userInfo == null)
                {
                    return(new LeadershipPointSystemResponse(ClientMessageConstant.ProfileNotExist, HttpStatusCode.NotFound));
                }


                var criteria = await _appDbContext.Criteria.FirstOrDefaultAsync(k => k.Id == model.CriteriaId);

                if (criteria == null)
                {
                    return(new LeadershipPointSystemResponse(ClientMessageConstant.FileNotFound, HttpStatusCode.NotFound));
                }

                model.CorrelationId = Guid.NewGuid();

                await SaveFile(model, userInfo);

                var orderNumber = _appDbContext.CriteriaClaims
                                  .Where(k => k.ProfileId == model.ProfileId && k.CriteriaId == model.CriteriaId)
                                  .OrderBy(k => k.Order).LastOrDefault()?.Order ?? 0;


                var claim = new CriteriaClaim()
                {
                    ProfileId     = model.ProfileId,
                    RequestDate   = DateTime.UtcNow,
                    Modified      = DateTime.UtcNow,
                    CorrelationId = model.CorrelationId,
                    CriteriaId    = criteria.Id,
                    StatusId      = criteria.RequiresApproval ? (int)ClaimStatusType.Pending : (int)ClaimStatusType.Accepted,
                    IsDeleted     = false,
                    Created       = DateTime.UtcNow,
                    ModifiedBy    = userInfo.Email,
                    CreatedBy     = userInfo.Email,
                    Details       = model.Label,
                    Order         = orderNumber + 1
                };


                await _appDbContext.CriteriaClaims.AddAsync(claim);

                await _appDbContext.SaveChangesAsync();

                await UpdateLPSPointsAsync(model);

                var criteriaClaimed = await GetCriteriaClaimedPointsAsync(model.ProfileId, model.CriteriaId);

                return(new LeadershipPointSystemResponse(criteriaClaimed.CriteriaClaimedPointsView));
            }
            catch (Exception e)
            {
                return(new LeadershipPointSystemResponse(e));
            }
        }
        private async Task UpdateLPSPointsAsync(CriteriaClaimRequestView model)
        {
            var profile = await _appDbContext.Profiles.FirstOrDefaultAsync(k => k.Id == model.ProfileId);

            var criteriaClaims = await _appDbContext.CriteriaClaims.Include(y => y.Criteria)
                                 .Where(k => k.ProfileId == model.ProfileId && !k.IsDeleted).ToListAsync();


            var earnedPoints = criteriaClaims.Where(k => k.StatusId == (int)ClaimStatusType.Accepted && !k.IsDeleted)
                               .Sum(k => k.Criteria.Points);

            profile.Lpspoints = earnedPoints;

            await _appDbContext.SaveChangesAsync();
        }
        private async Task SaveFile(CriteriaClaimRequestView model, UserInfo userInfo)
        {
            foreach (var formFile in model.AttachmentFile)
            {
                if (formFile == null)
                {
                    continue;
                }
                var data = new File()
                {
                    IdGuid        = Guid.NewGuid(),
                    CorrelationId = model.CorrelationId,
                    SizeMb        = GetFileSize(formFile.Length),
                    Name          = formFile.FileName,
                    ProviderName  = "SqlProvider",
                    Created       = DateTime.UtcNow,
                    MimeType      = formFile.ContentType,
                    Modified      = DateTime.UtcNow,
                    CreatedBy     = userInfo.Email,
                    ModifiedBy    = userInfo.Email
                };

                await _appDbContext.Files.AddAsync(data);

                await _appDbContext.SaveChangesAsync();

                var fileDb = new FileDB()
                {
                    Id    = data.IdGuid,
                    Bytes = StreamToBytes(formFile.OpenReadStream())
                };

                await _fileDbContext.FileDB.AddAsync(fileDb);

                await _fileDbContext.SaveChangesAsync();
            }
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> AddCriteriaClaimAsync([FromForm] CriteriaClaimRequestView claimRequest)
        {
            var result = await _leadershipPointSystemService.AddCriteriaClaimAsync(claimRequest);

            return(Ok(result));
        }