Advertisement
firedigger

License report

Jun 1st, 2023
772
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.52 KB | Source Code | 0 0
  1. public async Task<List<LicenseReportRow>> GetLicenseReport(int? vendorUserId)
  2.         {
  3.             var vendorId = vendorUserId.HasValue ? (await _dbContext.VendorUsers.FirstAsync(vu => vu.Id == vendorUserId)).VendorId : (int?)null;
  4.  
  5.             var userBackupSizesQuery = from userBackup in _dbContext.UserBackup.AsNoTracking()
  6.                                        join user in _dbContext.Users.AsNoTracking() on userBackup.UserId equals user.Id
  7.                                        join organization in _dbContext.Organization.AsNoTracking() on user.OrganizationId equals organization.Id
  8.                                        group userBackup by organization.Id into g
  9.                                        select new { Id = g.Key, Total = g.Sum(b => b.TotalSizeOnStorage + b.TotalSizeOnStorageTeams) };
  10.             var enabledUsers = (await (from userBackup in _dbContext.UserBackup.AsNoTracking()
  11.                                        join user in _dbContext.Users.AsNoTracking() on userBackup.UserId equals user.Id
  12.                                        join organization in _dbContext.Organization.AsNoTracking() on user.OrganizationId equals organization.Id
  13.                                        where userBackup.Enabled
  14.                                        select new { organization.Id, userBackup }).ToListAsync()).GroupBy(ub => ub.Id).ToDictionary(g => g.Key, g => g.Select(u => u.userBackup.UserId).Distinct().Count());
  15.             var spaceQuery = from organizationBackup in _dbContext.OrganizationBackup.AsNoTracking()
  16.                              join organization in _dbContext.Organization.AsNoTracking() on organizationBackup.OrganizationId equals organization.Id
  17.                              group organizationBackup by organization.Id into g
  18.                              select new { Id = g.Key, Size = g.Sum(b => b.TotalSizeOnStorage + b.TotalSizeOnStorageTeams) };
  19.  
  20.             var spaceLicenses = from license in await _dbContext.Licenses.AsNoTracking().ToListAsync()
  21.                                 group license by license.OrganizationId into g
  22.                                 select new { Id = g.Key, Space = g.Sum(l => l.LicenseType == "O365 user" ? int.TryParse(l.NumberOfLicenses, out var num) ? num * 50 : 0 : int.TryParse(l.TotalDiskSpace, out var space) ? space : 0) };
  23.  
  24.             var query = from userSize in userBackupSizesQuery
  25.                         join userLicenses in _dbContext.Licenses.AsNoTracking().Where(l => l.LicenseType == "O365 user") on userSize.Id equals userLicenses.OrganizationId into sub
  26.                         from subLicense in sub.DefaultIfEmpty()
  27.                         join organization in _dbContext.Organization.AsNoTracking() on userSize.Id equals organization.Id
  28.                         join vendorOrganizations in _dbContext.VendorOrganizations.AsNoTracking() on organization.Id equals vendorOrganizations.OrganizationId into sub2
  29.                         from subVendorOrganization in sub2.DefaultIfEmpty()
  30.                         join vendor in _dbContext.Vendors.AsNoTracking() on subVendorOrganization.VendorId equals vendor.Id into sub3
  31.                         from subVendor in sub3.DefaultIfEmpty()
  32.                         join organizationSize in spaceQuery on organization.Id equals organizationSize.Id
  33.                         where (!vendorId.HasValue || subVendor.Id == vendorId) && organization.Active
  34.                         select new LicenseReportRow
  35.                         {
  36.                             Id = userSize.Id,
  37.                             UsedSpaceGB = (userSize.Total + organizationSize.Size) / 1e9,
  38.                             Customer = organization.CustomerName,
  39.                             Reseller = subVendor == null ? "" : subVendor.Name,
  40.                             Domain = organization.Domain,
  41.                             UserLicenses = subLicense == null || string.IsNullOrEmpty(subLicense.NumberOfLicenses) ? 0 : int.Parse(subLicense.NumberOfLicenses)
  42.                         };
  43.  
  44.             var rows = await query.ToListAsync();
  45.  
  46.             foreach (var row in rows)
  47.             {
  48.                 row.EnabledUsers = enabledUsers.ContainsKey(row.Id) ? enabledUsers[row.Id] : 0;
  49.                 row.LicenseSpaceGB = spaceLicenses.FirstOrDefault(s => s.Id == row.Id)?.Space ?? 0;
  50.                 row.ExceedByGB = row.UsedSpaceGB - row.LicenseSpaceGB;
  51.                 row.Exceed = row.ExceedByGB > 0.01;
  52.                 row.ExceedByPercent = row.LicenseSpaceGB > 0.01 ? row.ExceedByGB / row.LicenseSpaceGB : 0;
  53.             }
  54.  
  55.             return rows;
  56.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement