Пример #1
0
        private Expression <Func <Claim, bool> > GetClaimStatusPredicate(ClaimStatusSpec status)
        {
            switch (status)
            {
            case ClaimStatusSpec.Any:
                return(claim => true);

            case ClaimStatusSpec.Active:
                return(c => c.ClaimStatus != Claim.Status.DeclinedByMaster && c.ClaimStatus != Claim.Status.DeclinedByUser &&
                       c.ClaimStatus != Claim.Status.OnHold);

            case ClaimStatusSpec.InActive:
                return(c => !(c.ClaimStatus != Claim.Status.DeclinedByMaster && c.ClaimStatus != Claim.Status.DeclinedByUser &&
                              c.ClaimStatus != Claim.Status.OnHold));

            case ClaimStatusSpec.Discussion:
                return(c => c.ClaimStatus == Claim.Status.AddedByMaster || c.ClaimStatus == Claim.Status.AddedByUser || c.ClaimStatus == Claim.Status.Discussed);

            case ClaimStatusSpec.OnHold:
                return(c => c.ClaimStatus == Claim.Status.OnHold);

            case ClaimStatusSpec.Approved:
                return(c => c.ClaimStatus == Claim.Status.Approved);

            default:
                throw new ArgumentOutOfRangeException(nameof(status), status, null);
            }
        }
Пример #2
0
 public Task <IReadOnlyCollection <Claim> > GetClaimsForGroups(int projectId, ClaimStatusSpec active, int[] characterGroupsIds)
 {
     return(GetClaimsImpl(projectId, active,
                          claim => (claim.CharacterGroupId != null && characterGroupsIds.Contains(claim.CharacterGroupId.Value))
                          ||
                          (claim.CharacterId != null &&
                           characterGroupsIds.Any(id => SqlFunctions.CharIndex(id.ToString(), claim.Character.ParentGroupsImpl.ListIds) > 0
                                                  ))));
 }
Пример #3
0
 public Task <IReadOnlyCollection <Claim> > GetActiveClaimsForMaster(int projectId, int userId, ClaimStatusSpec status)
 {
     return(GetClaimsImpl(projectId, status, claim => claim.ResponsibleMasterUserId == userId));
 }
Пример #4
0
        private async Task <IReadOnlyCollection <Claim> > GetClaimsImpl(int projectId, ClaimStatusSpec status, Expression <Func <Claim, bool> > predicate)
        {
            await LoadProjectCharactersAndGroups(projectId);
            await LoadMasters(projectId);
            await LoadProjectFields(projectId);

            Debug.WriteLine($"{nameof(LoadProjectClaimsAndComments)} started");
            return(await Ctx
                   .ClaimSet
                   .Include(c => c.Comments.Select(cm => cm.Finance))
                   .Include(c => c.Watermarks)
                   .Include(c => c.Player)
                   .Include(c => c.FinanceOperations)
                   .Where(GetClaimStatusPredicate(status))
                   .Where(predicate)
                   .Where(
                       c =>
                       c.ProjectId == projectId
                       ).ToListAsync());
        }
Пример #5
0
 public Task <IReadOnlyCollection <Claim> > GetClaims(int projectId, ClaimStatusSpec status)
 {
     return(GetClaimsImpl(projectId, status, claim => true));
 }
Пример #6
0
 public Task <IReadOnlyCollection <Claim> > GetClaimsForPlayer(int projectId, ClaimStatusSpec claimStatusSpec, int userId)
 {
     return(GetClaimsImpl(projectId, claimStatusSpec, claim => claim.PlayerUserId == userId));
 }
Пример #7
0
 public async Task <IReadOnlyCollection <ClaimWithPlayer> > GetClaimHeadersWithPlayer(int projectId, ClaimStatusSpec claimStatusSpec)
 {
     return(await Ctx.Set <Claim>().Where(claim => claim.ProjectId == projectId)
            .Where(ClaimPredicates.GetClaimStatusPredicate(claimStatusSpec))
            .Include(c => c.Player.Extra)
            .Select(
                claim => new ClaimWithPlayer()
     {
         Player = claim.Player,
         ClaimId = claim.ClaimId,
         CharacterName = claim.Character.CharacterName,
         Extra = claim.Player.Extra,
     })
            .ToListAsync());
 }
Пример #8
0
 public async Task <IReadOnlyCollection <ClaimCountByMaster> > GetClaimsCountByMasters(int projectId, ClaimStatusSpec claimStatusSpec)
 {
     return(await Ctx.Set <Claim>().Where(claim => claim.ProjectId == projectId)
            .Where(ClaimPredicates.GetClaimStatusPredicate(claimStatusSpec)).GroupBy(claim => claim.ResponsibleMasterUserId)
            .Select(grouping => new ClaimCountByMaster()
     {
         ClaimCount = grouping.Count(), MasterId = grouping.Key
     })
            .ToListAsync());
 }
Пример #9
0
 public async Task <IReadOnlyCollection <Claim> > GetClaimsForMoneyTransfersListAsync(int projectId, ClaimStatusSpec claimStatusSpec)
 {
     return(await Ctx
            .ClaimSet
            .AsNoTracking()
            .Include(c => c.Player)
            .Where(ClaimPredicates.GetClaimStatusPredicate(claimStatusSpec))
            .Where(c => c.ProjectId == projectId)
            .ToArrayAsync());
 }
Пример #10
0
 public Task <IReadOnlyCollection <Claim> > GetClaimsForGroupDirect(int projectId, ClaimStatusSpec active, int characterGroupsId)
 {
     return(GetClaimsImpl(projectId, active, claim => claim.CharacterGroupId == characterGroupsId));
 }
Пример #11
0
 public Task <IReadOnlyCollection <Claim> > GetClaimsForRoomType(int projectId, ClaimStatusSpec claimStatusSpec, int?roomTypeId)
 {
     if (roomTypeId != null)
     {
         return(GetClaimsImpl(projectId,
                              claimStatusSpec,
                              claim => claim.AccommodationRequest.AccommodationTypeId == roomTypeId));
     }
     else
     {
         return(GetClaimsImpl(projectId,
                              claimStatusSpec,
                              claim => claim.AccommodationRequest == null));
     }
 }