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();
}
}