UserList improvements

This commit is contained in:
2023-02-24 10:52:33 -05:00
parent 4341d5ce92
commit 48ab9a19e8
5 changed files with 82 additions and 14 deletions
+42 -6
View File
@@ -1,8 +1,8 @@
using System;
using System.Linq;
using System.Linq;
using System.Web.Mvc;
using System.Web.Security;
using Hangfire;
using JoinExtensions.Enumerable;
using LeafWeb.WebCms.Models;
using LeafWeb.WebCms.Services;
using log4net;
@@ -215,13 +215,49 @@ namespace LeafWeb.WebCms.Controllers
[MemberAuthorize(AllowGroup = "Administrator")]
public ActionResult UserList()
{
var emails
= from li in DataService.GetLeafInputs()
var leafInputUsers=
from li in DataService.GetLeafInputs()
group li by li.Email
into emailGroup
select new { emailGroup.Key, emailGroup.FirstOrDefault().Name };
select new UserViewModel
{
Email = emailGroup.Key,
Name = emailGroup.FirstOrDefault().Name,
LeafInputCount = emailGroup.Count(),
FirstSeen = emailGroup.OrderBy(e => e.Added).FirstOrDefault().Added
};
return View(emails.ToList().Select(e => new Tuple<string, string>(e.Name, e.Key)));
var memberService = ApplicationContext.Current.Services.MemberService;
// join leaf input users and memberships together on email address
var users =
memberService.GetAllMembers()
.FullOuterJoinExtEnumerable(
leafInputUsers,
m => m.Email,
uvm => uvm.Email,
(member, leafInputUser) =>
{
if (member == null)
return leafInputUser;
var vm = new UserViewModel
{
Email = member.Email,
Name = member.Name,
Member = true,
FirstSeen = member.CreateDate
};
if (leafInputUser == null)
return vm;
vm.LeafInputCount = leafInputUser.LeafInputCount;
if (leafInputUser.FirstSeen < vm.FirstSeen)
vm.FirstSeen = leafInputUser.FirstSeen;
return vm;
});
return View(users.DistinctBy(u => u.Email).OrderByDescending(u => u.FirstSeen));
}
}
}
+14
View File
@@ -0,0 +1,14 @@
using System;
namespace LeafWeb.WebCms.Models
{
public class UserViewModel
{
public string Email { get; set; }
public string Name { get; set; }
public bool Member { get; set; }
public int LeafInputCount { get; set; }
public DateTime FirstSeen { get; set; }
}
}
+21 -8
View File
@@ -1,16 +1,29 @@
@model IEnumerable<Tuple<string,string>>
@model IEnumerable<UserViewModel>
<div class="container mt-4">
<div class="row justify-content-center">
<div class="col-md-6 ">
<table>
@foreach (var m in Model)
{
<div class="col-md-9">
<table class="table table-striped table-bordered">
<thead class="thead-light">
<tr><th scope="col">Email</th><th scope="col">Name</th><th scope="col">First Seen</th><th scope="col">Member</th><th scope="col"># of Leaf Input</th></tr>
</thead>
<tbody >
@foreach (var m in Model)
{
<tr>
<th>@m.Item1</th><th>@m.Item2</th>
<td>@m.Email</td>
<td>@m.Name</td>
<td>@m.FirstSeen.ToShortDateString()</td>
<td>
@if (m.Member)
{
<text>&#x2714;</text>
}
</td>
<td>@m.LeafInputCount</td>
</tr>
}
}
</tbody>
</table>
</div>
</div>
+4
View File
@@ -118,6 +118,9 @@
<Reference Include="interfaces, Version=1.0.8321.19793, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\interfaces.dll</HintPath>
</Reference>
<Reference Include="JoinExtensions, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\leftjoin-rightjoin-fulljoin-outerjoin.3.2.0\lib\netstandard2.0\JoinExtensions.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=2.0.12.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<HintPath>..\packages\UmbracoCms.Core.7.15.10\lib\net452\log4net.dll</HintPath>
</Reference>
@@ -1237,6 +1240,7 @@
<Compile Include="Models\SearchLeafInputDataViewModel.cs" />
<Compile Include="Models\QueueViewModel.cs" />
<Compile Include="Models\SelectListViewModel.cs" />
<Compile Include="Models\UserViewModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Content Include="scripts\LeafDataQuery.js" />
<Compile Include="Services\UrlService.cs" />
+1
View File
@@ -20,6 +20,7 @@
<package id="jQuery" version="3.4.1" targetFramework="net452" />
<package id="jQuery.UI.Combined" version="1.12.1" targetFramework="net452" />
<package id="jQuery.Validation" version="1.19.1" targetFramework="net452" />
<package id="leftjoin-rightjoin-fulljoin-outerjoin" version="3.2.0" targetFramework="net472" />
<package id="log4net" version="2.0.15" targetFramework="net472" />
<package id="Log4Net.Async" version="2.0.4" targetFramework="net452" />
<package id="Lucene.Net" version="2.9.4.1" targetFramework="net452" />