Files
BeWoPlaner/Report/ReportObjects/BewertungsstatistikRO.cs
Christian f2c7d12eec cb
2022-02-15 14:59:07 +01:00

157 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 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 serviceRecordRatings = osi.FetchServiceRecordRatings(supportConcept.SupportConceptOid, null, null, null, start, end);
foreach (var item in serviceRecordRatings)
passendeZielBewertungen.Add(item);
}
//List<ServiceRecord> serviceRecords = DAOFactory.SearchDAO.FindServiceRecordsForSupportConcept((long)supportConcept.SupportConceptOid);
foreach (var ziel in ausgewaehlteZiele)
{
int anzahl = 0; // Zähler für Schnittberechnung und scZiele-Index
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?.RatingId != null)
// {
// if (item.ServiceRecord.Start >= start && item.ServiceRecord.Start <= end)
// {
// detail.Note = item.RatingType.RatingId.Value;
// 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.ServiceRecord.Start.Value.Day >= start.Value.Day && item.ServiceRecord.Start <= end)
//{
if (item.GoalEntry != null && item.GoalEntry.Equals(ziel))
{
var detail = new BewertungsstatistikZielDetail();
if (item.RatingType != null)
{
detail.Note = item.RatingType.RatingId.Value;
}
detail.Datum = item.ServiceRecord.Start;
detail.MinutenInvestiert = (double)item.ServiceRecord.RoundedDuration;
datensatz.GesamtzeitInvestiert += detail.MinutenInvestiert;
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;
}
}
}