using System; using System.Collections.Generic; using System.Linq; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.ServiceImplementations; using BS.Shared; using BS.Shared.DataContracts; namespace BeWo.Report.ReportObjects { public class SupportConceptListRO : AbstractBeWoReportObject { private List _SupportConceptDetailList = new List(); public DateTime? AppointedDate { get; set; } public long? EmployeeOid { get; set; } public long? TeamOid { get; set; } public List SupportConceptDetailList { get { return this._SupportConceptDetailList; } set { this._SupportConceptDetailList = value; } } private List _EmployeeSupportConceptDetailList = new List(); public List EmployeeSupportConceptDetailList { get { return this._EmployeeSupportConceptDetailList; } set { this._EmployeeSupportConceptDetailList = value; } } public static SupportConceptListRO Create(IList c2sOids, long? employeeOid, long? teamOid, int? expiredMonths, bool archivedSupportConcepts, DateTime? appointedDate) { return Create(c2sOids, employeeOid, teamOid, null, expiredMonths, archivedSupportConcepts, null, appointedDate); } public static SupportConceptListRO Create(IList c2sOids, long? employeeOid, long? teamOid, long? catOid, int? expiredMonths, bool archivedSupportConcepts, DateTime? startDate, DateTime? endDate) { // var pSpan = new DateTimeSpan(); // pSpan.StartDateTime = new DateTime(pYear, pMonth, 1); // pSpan.EndDateTime = pSpan.StartDateTime.AddMonths(1).AddTicks(-1); long starttime = DateTime.Now.Ticks; SupportConceptListRO ro = new SupportConceptListRO(); ro.AppointedDate = endDate; ro.EmployeeOid = employeeOid; ro.TeamOid = teamOid; if (!ro.AppointedDate.HasValue) ro.AppointedDate = DateTime.Now; List soList = null; AnalysisServiceImp service = new AnalysisServiceImp(); if (c2sOids != null && c2sOids.Count > 0) { soList = service.GetSupportConceptAnalysisWithC2SOids(c2sOids, endDate); } else { soList = service.GetSupportConceptAnalysis4(employeeOid, teamOid, catOid, startDate, endDate, expiredMonths, archivedSupportConcepts); } if (soList != null) { soList = soList.OrderBy(so => String.Format("{0}, {1}", so.CustomerLastName, so.CustomerFirstName)).ToList(); } Dictionary emp2Details = new Dictionary(); foreach (SupportConceptOverviewDC dc in soList) { SupportConceptDetail detail = new SupportConceptDetail(); detail.CustomerFirstName = dc.CustomerFirstName; detail.CustomerLastName = dc.CustomerLastName; detail.Costbearer = dc.CostBearer; if (dc.ApprovedStartDate != null) { detail.StartDate = dc.ApprovedStartDate.Value; } else if (dc.RequestedStartDate != null) { detail.StartDate = dc.RequestedStartDate.Value; } if (dc.ApprovedEndDate != null) { detail.EndDate = dc.ApprovedEndDate.Value; } else if (dc.RequestedEndDate != null) { detail.EndDate = dc.RequestedEndDate.Value; } detail.IsApproved = dc.IsApproved; detail.FLSTotal = dc.FLSApprovedSum; detail.FLSTotalRecordedBillable = dc.FLSBilledTillNow; detail.FLSRemaining = dc.FLSApprovedSum - dc.FLSBilledTillNow; detail.FLSOpenPerWeek = dc.FLSOpenPerWeek; detail.OpenWeeks = dc.OpenWeeks; detail.OpenMonths = dc.OpenMonths; detail.TotalWeeks = dc.WeeksTotal; detail.WeeksPassed = dc.WeeksTotal - dc.OpenWeeks; detail.FLSPerWeekSoll = dc.FLSApprovedPerWeek; detail.FLSDifferenceApprovedRecordedTillNow = dc.FLSDifferenceApprovedRecordedTillNow; detail.PassageStatus = dc.KorridorStatus; detail.FLSApprovedTillNow = dc.FLSApprovedTillNow; detail.CostBearer2SupportConceptOid = dc.CostBearer2SupportConceptOid; if (detail.WeeksPassed != 0) { detail.FLSPerWeekIst = dc.FLSBilledTillNow / detail.WeeksPassed; } else { detail.FLSPerWeekIst = 0; } decimal fact = (100 + dc.CurrentRateFactor) / 100; detail.DiffPerWeekAmount = (detail.FLSPerWeekSoll - detail.FLSPerWeekIst) * dc.CurrentHourlyRate * fact; // detail.DurationPercentage = dc.DurationPercentage; decimal percentage = 0; //if (detail.FLSPerWeekSoll != 0) //{ // percentage = (detail.FLSPerWeekIst * 100) / detail.FLSPerWeekSoll; //} //decimal percentage2 = 0; if (dc.FLSApprovedTillNow != 0) { percentage = (dc.FLSBilledTillNow * 100) / dc.FLSApprovedTillNow; } //if (Math.Round(percentage) != Math.Round(percentage2)) //{ // int test = 0; //} detail.DurationPercentage = percentage; var sc = DAOFactory.GenericDAO.GetByID(dc.SupportConceptOid); var customer = sc.Customer; detail.RequisitionSendDate = sc.RequisitionSendDate; detail.SupportConceptSendDate = sc.SupportConceptSendDate; detail.ApprovalDate = sc.ApprovalDate; var customerTeams = ""; foreach (var t2c in customer.Team2CustomerList) { var team = t2c.Team; if (String.IsNullOrEmpty(detail.Team)) customerTeams = team.Name; else { if (!detail.Team.Contains(team.Name)) { customerTeams += ", " + team.Name; } } } detail.CustomerTeams = customerTeams; EmployeeSupportConceptDetail empDetails = null; foreach (var item in customer.Employee2CustomerList) { foreach (var valueEntry in item.ValueList) { if (valueEntry.Entry.SystemEntryID != null && valueEntry.Entry.SystemEntryID.Value == SystemEntryID.EmployeeRoleMainAttendant) { if (emp2Details.ContainsKey(item.Employee.Oid.Value)) { empDetails = emp2Details[item.Employee.Oid.Value]; } else { empDetails = new EmployeeSupportConceptDetail(); ro.EmployeeSupportConceptDetailList.Add(empDetails); empDetails.EmployeeName = String.Format("{0} {1}", item.Employee.Person.FirstName, item.Employee.Person.LastName); Contract c = item.Employee.GetValidContractForDate(endDate); if (c != null) { empDetails.HoursPerWeek = c.WeeklyTotalHours; empDetails.FlsPerWeek = c.WeeklyFLS; } emp2Details.Add(item.Employee.Oid.Value, empDetails); } string employeeAbbr = item.Employee.Person.Abbreviation; if (string.IsNullOrEmpty(employeeAbbr)) { employeeAbbr = item.Employee.Person.FirstName.Substring(0, 1) + ". " + item.Employee.Person.LastName; } if (String.IsNullOrEmpty(detail.MainAttendant)) detail.MainAttendant = employeeAbbr; else { if (!detail.MainAttendant.Contains(employeeAbbr)) { detail.MainAttendant += ", " + employeeAbbr; } } if (detail.MainEmployee == null) { detail.MainEmployee = item.Employee; } var teams = DAOFactory.SearchDAO.FindTeamsOfEmployee(item.EmployeeOid.Value); foreach (var team in teams) { if (String.IsNullOrEmpty(detail.Team)) detail.Team = team.Name; else { if (!detail.Team.Contains(team.Name)) { detail.Team += ", " + team.Name; } } } } } } if (empDetails != null) { var copy = CreateCopy(detail); copy.RowIndex = empDetails.SupportConceptDetailList.Count + 1; empDetails.SupportConceptDetailList.Add(copy); } detail.RowIndex = ro.SupportConceptDetailList.Count + 1; ro.SupportConceptDetailList.Add(detail); } long endtime = DateTime.Now.Ticks; long diff = endtime - starttime; double secs = diff / (double)10000000; return ro; // return DAOFactory.SearchDAO.FindSupportConceptsInSpan(pSpan).OrderBy(ob => ob.Customer.Person.LastName + ", " + ob.Customer.Person.FirstName).Select( // sc => Create(sc.Customer.Oid.Value, pMonth, pYear, true)).ToList(); } private static SupportConceptDetail CreateCopy(SupportConceptDetail detail) { return new SupportConceptDetail { Costbearer = detail.Costbearer, CustomerFirstName = detail.CustomerFirstName, CustomerLastName = detail.CustomerLastName, DiffPerWeekAmount = detail.DiffPerWeekAmount, DurationPercentage = detail.DurationPercentage, EndDate = detail.EndDate, FLSApprovedTillNow = detail.FLSApprovedTillNow, FLSDifferenceApprovedRecordedTillNow = detail.FLSDifferenceApprovedRecordedTillNow, FLSOpenPerWeek = detail.FLSOpenPerWeek, FLSPerWeekIst = detail.FLSPerWeekIst, FLSPerWeekSoll = detail.FLSPerWeekSoll, FLSRemaining = detail.FLSRemaining, FLSTotal = detail.FLSTotal, FLSTotalRecordedBillable = detail.FLSTotalRecordedBillable, IsApproved = detail.IsApproved, MainAttendant = detail.MainAttendant, MainEmployee = detail.MainEmployee, OpenMonths = detail.OpenMonths, OpenWeeks = detail.OpenWeeks, PassageStatus = detail.PassageStatus, RequisitionSendDate = detail.RequisitionSendDate, StartDate = detail.StartDate, SupportConceptSendDate = detail.SupportConceptSendDate, TotalWeeks = detail.TotalWeeks, Team = detail.Team, ApprovalDate = detail.ApprovalDate, Custom1 = detail.Custom1, Custom2 = detail.Custom2, Custom3 = detail.Custom3, CostBearer2SupportConceptOid = detail.CostBearer2SupportConceptOid }; } public class SupportConceptDetail { public int RowIndex { get; set; } public string MainAttendant { get; set; } public Employee MainEmployee { get; set; } public string Costbearer { get; set; } public string CustomerFirstName { get; set; } public string CustomerLastName { get; set; } public decimal DiffPerWeekAmount { get; set; } public decimal DurationPercentage { get; set; } public DateTime EndDate { get; set; } public decimal FLSApprovedTillNow { get; set; } public decimal FLSOpenPerWeek { get; set; } public decimal FLSPerWeekIst { get; set; } public decimal FLSPerWeekSoll { get; set; } public decimal FLSRemaining { get; set; } public decimal FLSTotal { get; set; } public decimal FLSTotalRecordedBillable { get; set; } public decimal FLSDifferenceApprovedRecordedTillNow { get; set; } public bool IsApproved { get; set; } public decimal OpenMonths { get; set; } public decimal OpenWeeks { get; set; } public DateTime StartDate { get; set; } public decimal TotalWeeks { get; set; } public decimal WeeksPassed { get; set; } public String PassageStatus { get; set; } public String Team { get; set; } public String CustomerTeams { get; set; } public DateTime? RequisitionSendDate { get; set; } //Beantragt am public DateTime? SupportConceptSendDate { get; set; } //Eingereicht am public DateTime? ApprovalDate { get; set; } //Bewilligt am public String Custom1 { get; set; } public String Custom2 { get; set; } public String Custom3 { get; set; } public long CostBearer2SupportConceptOid { get; set; } } public class EmployeeSupportConceptDetail { private List _SupportConceptDetailList = new List(); public List SupportConceptDetailList { get { return this._SupportConceptDetailList; } set { this._SupportConceptDetailList = value; } } public Employee Employee { get; set; } public String EmployeeName { get; set; } public decimal? HoursPerWeek { get; set; } public decimal? FlsPerWeek { get; set; } } } }