Files
BeWoPlaner/Report/ReportObjects/BewertungsstatistikRO.cs
2020-11-10 02:25:15 +01:00

150 lines
6.7 KiB
C#

using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.ServiceImplementations;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using DevExpress.XtraCharts.Designer;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BeWo.Report.ReportObjects
{
public class BewertungsstatistikRO : AbstractBeWoReportObject<BewertungsstatistikRO>
{
public List<BewertungsstatistikReportTabelle> BewertungsstatistikReportTabelleList { get; set; }
public DateTime? StartDay { get; set; }
public DateTime? EndDay { get; set; }
public SupportConceptDC SupportConceptDC { get; set; }
public bool ZeiterfassungEinbinden { get; set; }
public class BewertungsstatistikReportTabelle
{
public string Zielname { get; set; }
public double GesamtzeitInvestiert { get; set; }
public double Durchschnitt { get; set; }
public List<BewertungsstatistikZielDetail> BewertungsstatistikZielDetailList { get; set; }
}
public class BewertungsstatistikZielDetail
{
public double MinutenInvestiert { get; set; }
public DateTime? Datum { get; set; }
public int Note { get; set; }
}
public static BewertungsstatistikRO Create(DateTime? start, DateTime? end, SupportConceptDC supportConcept, bool inclZeiterfassung, List<ValueListEntryDC> ausgewaehlteZiele, List<RatingDC> scZiele)
{
var result = new BewertungsstatistikRO();
result.StartDay = start;
result.EndDay = end;
result.ZeiterfassungEinbinden = inclZeiterfassung;
result.SupportConceptDC = supportConcept;
result.BewertungsstatistikReportTabelleList = new List<BewertungsstatistikReportTabelle>();
List<GoalRatingDC> passendeZielBewertungen = new List<GoalRatingDC>();
foreach (var item in scZiele)
{
foreach (var item2 in item.GoalRatingList)
{
item2.ServiceRecord = new ServiceRecordDC
{
RoundedDuration = 0,
Start = item.StartDate
};
passendeZielBewertungen.Add(item2);
}
}
if (inclZeiterfassung)
{
var osi = new OperationsServiceImp();
var zusaetzlicheZiele = osi.FetchServiceRecordRatings(supportConcept.SupportConceptOid, null, null, null, start, end);
foreach (var item in zusaetzlicheZiele)
passendeZielBewertungen.Add(item);
}
List<ServiceRecord> serviceRecords = DAOFactory.SearchDAO.FindServiceRecordsForSupportConcept((long)supportConcept.SupportConceptOid);
foreach (var ziel in supportConcept.Goals)
{
int anzahl = 0; // Zähler für Schnittberechnung und scZiele-Index
if (ausgewaehlteZiele.Contains(ziel))
{
var datensatz = new BewertungsstatistikReportTabelle();
datensatz.Zielname = ziel.DisplayName;
datensatz.GesamtzeitInvestiert = 0;
datensatz.BewertungsstatistikZielDetailList = new List<BewertungsstatistikZielDetail>();
foreach (var sr in serviceRecords)
{
var detail = new BewertungsstatistikZielDetail();
foreach (var item in passendeZielBewertungen)
{
if (item.GoalEntry.ValueListEntryOid == ziel.ValueListEntryOid)
{
if(item.ServiceRecord.ServiceRecordOid == sr.Oid && item.GoalRatingOid == null && item.RatingType != null)
{
if(item.ServiceRecord.Start >= start && item.ServiceRecord.Start <= end)
{
detail.Note = (int)item.RatingType.Position;
anzahl++; // Zähler für Schnittberechnung
detail.MinutenInvestiert = sr.DurationMinutes;
detail.Datum = sr.Start;
passendeZielBewertungen.Remove(item);
break;
}
}
}
}
if (detail.MinutenInvestiert != 0)
{
datensatz.GesamtzeitInvestiert += detail.MinutenInvestiert;
datensatz.Durchschnitt += detail.Note;
}
if(detail.Datum != null)
datensatz.BewertungsstatistikZielDetailList.Add(detail);
}
foreach (var item in passendeZielBewertungen)
{
if (item.GoalRatingOid != null && item.GoalEntry.ValueListEntryOid == ziel.ValueListEntryOid && item.RatingType != null)
{
if (item.ServiceRecord.Start.Value.Day >= start.Value.Day && item.ServiceRecord.Start <= end)
{
var detail = new BewertungsstatistikZielDetail();
detail.Note = (int)item.RatingType.Position;
detail.Datum = item.ServiceRecord.Start;
anzahl++;
datensatz.Durchschnitt += detail.Note;
datensatz.BewertungsstatistikZielDetailList.Add(detail);
}
}
}
datensatz.Durchschnitt /= anzahl;
datensatz.Durchschnitt = Math.Round(datensatz.Durchschnitt, 2);
datensatz.BewertungsstatistikZielDetailList = datensatz.BewertungsstatistikZielDetailList.OrderBy(a => a.Datum).ToList<BewertungsstatistikZielDetail>();
//if(datensatz.GesamtzeitInvestiert != 0) //Falls Ziele ohne Zeitaufwand nicht dargestellt werden sollen
result.BewertungsstatistikReportTabelleList.Add(datensatz);
}
}
result.BewertungsstatistikReportTabelleList = result.BewertungsstatistikReportTabelleList.OrderBy(b => b.Zielname).ToList();
return result;
}
}
}