150 lines
6.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|