6a7da5d6-5345-4fd8-9ca6-ab567ac5f639 true D0014-SQL-01.sdt.local jazz tst UNC 20190716.1 true <ProgramFilesX64>\Microsoft SDKs\Azure\.NET SDK\v2.9\bin\plugins\Diagnostics\Newtonsoft.Json.dll Amazon.Lambda.S3Events AWSSDK.Core AWSSDK.S3 Amazon Amazon.Auth.AccessControlPolicy Amazon.Auth.AccessControlPolicy.ActionIdentifiers Amazon.Internal Amazon.Lambda.S3Events Amazon.MissingTypes Amazon.Runtime Amazon.Runtime.CredentialManagement Amazon.Runtime.CredentialManagement.Internal Amazon.Runtime.EventStreams Amazon.Runtime.EventStreams.Internal Amazon.Runtime.Internal Amazon.Runtime.Internal.Auth Amazon.Runtime.Internal.Settings Amazon.Runtime.Internal.Transform Amazon.Runtime.Internal.Util Amazon.Runtime.SharedInterfaces Amazon.Runtime.SharedInterfaces.Internal Amazon.S3 Amazon.S3.Encryption Amazon.S3.Encryption.Internal Amazon.S3.Internal Amazon.S3.IO Amazon.S3.Model Amazon.S3.Model.Internal.MarshallTransformations Amazon.S3.Transfer Amazon.S3.Util Amazon.Util Amazon.Util.Internal Amazon.Util.Internal.PlatformServices Newtonsoft.Json Newtonsoft.Json.Converters Newtonsoft.Json.Linq Newtonsoft.Json.Schema Newtonsoft.Json.Serialization System System.Diagnostics System.Diagnostics.Tracing System.IO.Compression ThirdParty.BouncyCastle.Asn1 ThirdParty.BouncyCastle.Asn1.Utilities ThirdParty.BouncyCastle.Math ThirdParty.BouncyCastle.OpenSsl ThirdParty.BouncyCastle.Utilities.IO.Pem ThirdParty.Ionic.Zlib ThirdParty.Json.LitJson ThirdParty.MD5 void Main() { var Departments = (from dept in DeptPayPeriodSummaries select new DeptPayPeriodSummary(dept)) .ToList() .GroupBy(d => d.DepartmentID, (key, dx) => new { key, data = dx.OrderBy(d => d.PeriodEndDate).ToList() }) .Where(d => d.data.Sum(x => x.TotalVariance) != 0.0d) .Select(grp => new DeptInfo(grp.data)); Departments.Dump("Raw List"); var top5 = Departments .OrderBy(d => d.latest_total_variance) .ThenBy(d => d.latest_pay_variance) .ThenBy(d => d.latest_flex_variance) .Take(5).ToList(); var bottom5 = Departments .OrderByDescending(d => d.latest_total_variance) .ThenByDescending(d => d.latest_pay_variance) .ThenByDescending(d => d.latest_flex_variance) .Take(5).ToList(); bottom5.Dump("Bottom5"); top5.Dump("top5"); var departments = (top5.Union(bottom5).Distinct()) .OrderBy(d => d.latest_total_variance).ToList(); departments.Dump("departments"); } // Define other methods and classes here public partial class DeptPayPeriodSummary { public int DepartmentID { get; set; } public int PayPeriodID { get; set; } public string Department { get; set; } public DateTime PeriodStartDate { get; set; } public DateTime PeriodEndDate { get; set; } public double ActualHours { get; set; } public double ActualDollars { get; set; } public double ActualUOS { get; set; } public double TargetHours { get; set; } public double TargetDollars { get; set; } public double TargetUOS { get; set; } public double VarianceHours { get; set; } public double VarianceDollars { get; set; } public double VarianceUOS { get; set; } public double ActualPayRate => MathExtensions.DivideBy((double)ActualDollars, ActualHours); public double TargetPayRate => MathExtensions.DivideBy((double)TargetDollars, TargetHours); public double VariancePayRate => TargetPayRate - ActualPayRate; public double PayRateVariance => VariancePayRate * ActualHours; public double FlexVariance => VarianceHours * TargetPayRate; public double TotalVariance => PayRateVariance + FlexVariance; public double VariancePayDollars => (ActualPayRate - TargetPayRate) * ActualHours; public double VarianceFlexDollars => TargetPayRate * VarianceHours; public DeptPayPeriodSummary(LINQPad.User.DeptPayPeriodSummary dept) { DepartmentID = dept.DepartmentID; PayPeriodID = dept.PayPeriodID; Department = dept.Department; PeriodStartDate = dept.PeriodStartDate; PeriodEndDate = dept.PeriodEndDate; ActualHours = dept.ActualHours; ActualDollars = dept.ActualDollars; ActualUOS = dept.ActualUOS; TargetHours = dept.TargetHours; TargetDollars = dept.TargetDollars; TargetUOS = dept.TargetUOS; VarianceHours = dept.VarianceHours; VarianceDollars = dept.VarianceDollars; VarianceUOS = dept.VarianceUOS; } } public class DeptInfo { public string hyperlink => ""; internal int deptid { get; set; } public string name { get; set; } internal double latest_total_variance { get; set; } internal double latest_pay_variance { get; set; } internal double latest_flex_variance { get; set; } public string total_variance => $"{latest_total_variance:C}"; public string pay_variance => $"{latest_pay_variance:C}"; public string flex_variance => $"{latest_flex_variance:C}"; public string six_period_total_chart { get; set; } public string six_period_pay_chart { get; set; } public string six_period_flex_chart { get; set; } public IEnumerable totalGraph { get; set; } public IEnumerable payGraph { get; set; } public IEnumerable flexGraph { get; set; } public int graphMin { get; set; } public int graphMax { get; set; } public string total_color => latest_total_variance >= 0 ? "positive" : "negative"; public string pay_color => latest_pay_variance >= 0 ? "positive" : "negative"; public string flex_color => latest_flex_variance >= 0 ? "positive" : "negative"; public DeptInfo(List department) { deptid = department.First().DepartmentID; name = department.First().Department; latest_total_variance = department.Sum(d => d.TotalVariance); latest_pay_variance = department.Sum(d => d.PayRateVariance); latest_flex_variance = department.Sum(d => d.FlexVariance); totalGraph = department.Select(d => Convert.ToInt32(d.TotalVariance)); payGraph = department.Select(d => Convert.ToInt32(d.PayRateVariance)); flexGraph = department.Select(d => Convert.ToInt32(d.FlexVariance)); graphMin = Math.Min(Math.Min(totalGraph.Min(), payGraph.Min()), flexGraph.Min()); graphMax = Math.Max(Math.Max(totalGraph.Max(), payGraph.Max()), flexGraph.Max()); } public DeptInfo(int departmentId, string deptName, double total, double pay, double flex) { deptid = departmentId; name = deptName; latest_total_variance = total; latest_pay_variance = pay; latest_flex_variance = flex; } internal string GetLinkUrlPath() => $"/PR/DepartmentProductivity.aspx?deptid={deptid}&mode=payperiod"; public bool Equals(DeptInfo x, DeptInfo y) { if (object.ReferenceEquals(x, y)) return true; if (object.ReferenceEquals(x, null) || object.ReferenceEquals(y, null)) return false; return (x.deptid == y.deptid); } public int GetHashCode(DeptInfo obj) { return obj.GetHashCode(); } }