674 lines
22 KiB
C#
674 lines
22 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using BeWo.Data;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Report;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.DataContracts.Compact;
|
|
using DevExpress.XtraReports.UI;
|
|
|
|
namespace DiakonieMuelheim
|
|
{
|
|
public class CustomReportCreator : DefaultReportCreator
|
|
{
|
|
public override XtraReport CreateQueryReport(long queryOid, string queryReportId)
|
|
{
|
|
|
|
if (queryOid == 300)
|
|
{
|
|
return CreateJahresstatistik(queryOid, queryReportId);
|
|
}
|
|
return base.CreateQueryReport(queryOid, queryReportId);
|
|
|
|
}
|
|
|
|
private XtraReport CreateJahresstatistik(long queryOid, string queryReportId)
|
|
{
|
|
var query = DAOFactory.GenericDAO.LoadByID<Query>(queryOid);
|
|
|
|
if (query == null)
|
|
return new XtraReport();
|
|
|
|
var path = Path.Combine(TempPath, queryReportId + ".xml");
|
|
|
|
var table = Utils.XMLDeserialize<DataTable>(path);
|
|
|
|
var qro = QueryRO.Create(query, table);
|
|
|
|
var customerOids = new List<long>();
|
|
DateTime start = DateTime.Now;
|
|
DateTime ende = DateTime.Now;
|
|
long teamOid = 0;
|
|
if (qro.Rows.Count > 0)
|
|
{
|
|
|
|
start = DateTime.Parse(qro.Rows[0].Field2.ToString());
|
|
if (start == DateTime.MinValue)
|
|
{
|
|
start = new DateTime(DateTime.Now.Year - 1, 1, 1);
|
|
}
|
|
ende = DateTime.Parse(qro.Rows[0].Field3.ToString());
|
|
if (ende.Year == 9999)
|
|
{
|
|
ende = new DateTime(DateTime.Now.Year - 1, 12, 31);
|
|
}
|
|
teamOid = Int64.Parse(qro.Rows[0].Field4.ToString());
|
|
|
|
foreach (var row in qro.Rows)
|
|
{
|
|
long cOid = Int64.Parse(row.Field1.ToString());
|
|
customerOids.Add(cOid);
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
JahresReportRO ro = CreateJahresReportRo(customerOids, start, ende, teamOid);
|
|
|
|
var druck = new Jahresstatistik();
|
|
|
|
druck.SetReportDataSource(ro);
|
|
|
|
return druck;
|
|
|
|
}
|
|
|
|
private JahresReportRO CreateJahresReportRo(List<long> customerOids, DateTime start, DateTime ende, long teamOid)
|
|
{
|
|
|
|
List<JahrestatisticCustomerInfo> alleKlienten = new List<JahrestatisticCustomerInfo>();
|
|
|
|
if (teamOid > 0)
|
|
{
|
|
var team = MapperFactory.CompactTeamDC_Team.MapToNewDC(DAOFactory.GenericDAO.LoadByID<Team>(teamOid));
|
|
|
|
var customers = DAOFactory.GenericDAO.LoadByIDs<Customer>(customerOids);
|
|
|
|
foreach (var customer in customers)
|
|
{
|
|
|
|
var info = GetJahrestatisticCustomerInfo(customer, start, ende);
|
|
|
|
if (info != null)
|
|
{
|
|
info.Team = team;
|
|
|
|
alleKlienten.Add(info);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
List<AnnualReportDC> reports = new List<AnnualReportDC>();
|
|
reports.Add(BerechneGesamt(alleKlienten));
|
|
reports.Add(BerechneOrt(alleKlienten));
|
|
reports.Add(BerechneGeschlecht(alleKlienten));
|
|
reports.Add(BerechneAlterstruktur(alleKlienten, ende));
|
|
reports.Add(BerechneBeendigungsgrund(alleKlienten, start, ende));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 1));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 3));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 30));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 40));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 50));
|
|
//reports.Add(BerechneVarfieldReport(alleKlienten, 60));
|
|
//reports.Add(BerechneVarfieldReport(alleKlienten, 70));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 100));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 110));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 120));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 140));
|
|
reports.Add(BerechneVarfieldReport(alleKlienten, 160));
|
|
|
|
return JahresReportRO.Create(reports);
|
|
}
|
|
|
|
private AnnualReportDC BerechneGesamt(List<JahrestatisticCustomerInfo> alleKlienten)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Name = "Personen insgesamt";
|
|
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
var dataEk = new AnnualReportDataDC();
|
|
dataEk.Name = "davon Erstklienten EK";
|
|
dataEk.Value = 0;
|
|
var dataWk = new AnnualReportDataDC();
|
|
dataWk.Name = "Wiederholungs- und Altklienten WK";
|
|
dataWk.Value = 0;
|
|
report.Data.Add(dataEk);
|
|
report.Data.Add(dataWk);
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
|
|
dataWk.Value++;
|
|
dataWk.Value2 = ((int?)dataWk.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
dataEk.Value++;
|
|
dataEk.Value1 = ((int?)dataEk.Value1 ?? 0) + 1;
|
|
}
|
|
|
|
}
|
|
return report;
|
|
}
|
|
|
|
private AnnualReportDC BerechneOrt(List<JahrestatisticCustomerInfo> alleKlienten)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
report.Name = "Ortsansässigkeit der Klienten";
|
|
|
|
Dictionary<String, AnnualReportDataDC> dataPerCity = new Dictionary<String, AnnualReportDataDC>();
|
|
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
|
|
String city = "ohne Angaben";
|
|
if (!String.IsNullOrEmpty(info.Customer.Town))
|
|
{
|
|
city = info.Customer.Town.Trim();
|
|
}
|
|
|
|
AnnualReportDataDC data = null;
|
|
|
|
if (dataPerCity.ContainsKey(city))
|
|
{
|
|
data = dataPerCity[city];
|
|
}
|
|
else
|
|
{
|
|
data = new AnnualReportDataDC();
|
|
dataPerCity.Add(city, data);
|
|
}
|
|
|
|
data.Name = city;
|
|
data.Value = (data.Value ?? 0) + 1;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
|
|
data.Value2 = ((int?)data.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
data.Value1 = ((int?)data.Value1 ?? 0) + 1;
|
|
}
|
|
}
|
|
|
|
report.Data.AddRange(dataPerCity.Values.OrderBy(d => d.Name).Where(d => d.Name != "ohne Angaben"));
|
|
report.Data.AddRange(dataPerCity.Values.Where(d => d.Name == "ohne Angaben"));
|
|
|
|
return report;
|
|
}
|
|
|
|
private AnnualReportDC BerechneGeschlecht(List<JahrestatisticCustomerInfo> alleKlienten)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
report.Name = "Geschlecht";
|
|
|
|
|
|
var dataM = new AnnualReportDataDC();
|
|
dataM.Name = "Anteil männlicher Klienten";
|
|
dataM.Value = 0;
|
|
var dataF = new AnnualReportDataDC();
|
|
dataF.Name = "Anteil weiblicher Klienten";
|
|
dataF.Value = 0;
|
|
var dataKA = new AnnualReportDataDC();
|
|
dataKA.Name = "ohne Angaben";
|
|
dataKA.Value = 0;
|
|
report.Data.Add(dataM);
|
|
report.Data.Add(dataF);
|
|
report.Data.Add(dataKA);
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
if (info.Geschlecht.HasValue)
|
|
{
|
|
if (info.Geschlecht.Value == Sex.Male)
|
|
{
|
|
dataM.Value++;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
dataM.Value2 = ((int?)dataM.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
dataM.Value1 = ((int?)dataM.Value1 ?? 0) + 1;
|
|
}
|
|
//dataM.Erstklient = info.IstWiederholungsKlient;
|
|
}
|
|
else if (info.Geschlecht.Value == Sex.Female)
|
|
{
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
dataF.Value2 = ((int?)dataF.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
dataF.Value1 = ((int?)dataF.Value1 ?? 0) + 1;
|
|
}
|
|
dataF.Value++;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
dataKA.Value++;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
dataKA.Value2 = ((int?)dataKA.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
dataKA.Value1 = ((int?)dataKA.Value1 ?? 0) + 1;
|
|
}
|
|
}
|
|
|
|
}
|
|
return report;
|
|
}
|
|
|
|
private AnnualReportDC BerechneAlterstruktur(List<JahrestatisticCustomerInfo> alleKlienten, DateTime datum)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
report.Name = "Altersstruktur";
|
|
|
|
var dataU18 = new AnnualReportDataDC();
|
|
dataU18.Name = "unter 18 Jahre";
|
|
|
|
var data18_21 = new AnnualReportDataDC();
|
|
data18_21.Name = "18 - 21 Jahre";
|
|
|
|
var data22_26 = new AnnualReportDataDC();
|
|
data22_26.Name = "22 - 26 Jahre";
|
|
|
|
var data27_33 = new AnnualReportDataDC();
|
|
data27_33.Name = "27 - 33 Jahre";
|
|
|
|
var data34_40 = new AnnualReportDataDC();
|
|
data34_40.Name = "34 - 40 Jahre";
|
|
|
|
var data41_50 = new AnnualReportDataDC();
|
|
data41_50.Name = "41 - 50 Jahre";
|
|
|
|
var data51_60 = new AnnualReportDataDC();
|
|
data51_60.Name = "51 - 60 Jahre";
|
|
|
|
var dataU60 = new AnnualReportDataDC();
|
|
dataU60.Name = "Über 60 Jahre";
|
|
|
|
var dataKA = new AnnualReportDataDC();
|
|
dataKA.Name = "keine Angaben";
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
AnnualReportDataDC data = dataKA;
|
|
|
|
if (info.Customer.DateOfBirth.HasValue)
|
|
{
|
|
int alter = datum.Year - info.Customer.DateOfBirth.Value.Year;
|
|
var dt = info.Customer.DateOfBirth.Value.AddYears(alter);
|
|
|
|
if (datum.CompareTo(dt) < 0)
|
|
{
|
|
alter--;
|
|
}
|
|
|
|
if (alter < 18)
|
|
{
|
|
data = dataU18;
|
|
}
|
|
else if (alter >= 18 && alter <= 21)
|
|
{
|
|
data = data18_21;
|
|
}
|
|
else if (alter >= 22 && alter <= 26)
|
|
{
|
|
data = data22_26;
|
|
}
|
|
else if (alter >= 27 && alter <= 33)
|
|
{
|
|
data = data27_33;
|
|
}
|
|
else if (alter >= 34 && alter <= 40)
|
|
{
|
|
data = data34_40;
|
|
}
|
|
else if (alter >= 41 && alter <= 50)
|
|
{
|
|
data = data41_50;
|
|
}
|
|
else if (alter >= 51 && alter <= 60)
|
|
{
|
|
data = data51_60;
|
|
}
|
|
else if (alter > 60)
|
|
{
|
|
data = dataU60;
|
|
}
|
|
}
|
|
|
|
data.Value = (data.Value ?? 0) + 1;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
data.Value2 = ((int?)data.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
data.Value1 = ((int?)data.Value1 ?? 0) + 1;
|
|
}
|
|
}
|
|
|
|
report.Data.Add(dataU18);
|
|
report.Data.Add(data18_21);
|
|
report.Data.Add(data22_26);
|
|
report.Data.Add(data27_33);
|
|
report.Data.Add(data34_40);
|
|
report.Data.Add(data41_50);
|
|
report.Data.Add(data51_60);
|
|
report.Data.Add(dataU60);
|
|
report.Data.Add(dataKA);
|
|
return report;
|
|
}
|
|
|
|
//private AnnualReportDC BerechneLebensunterhalt(List<JahrestatisticCustomerInfo> alleKlienten, long varFieldDefOid)
|
|
//{
|
|
// var report = new AnnualReportDC();
|
|
// report.Data = new List<AnnualReportDataDC>();
|
|
// report.Name = "Lebensunterhalt";
|
|
|
|
// Dictionary<String, AnnualReportDataDC> dataPerDef = new Dictionary<String, AnnualReportDataDC>();
|
|
|
|
// var def = DAOFactory.GenericDAO.LoadByID<VarFieldDef>(varFieldDefOid);
|
|
|
|
// var items = def.PossibleItems.Split(';');
|
|
// foreach (var item in items)
|
|
// {
|
|
// var data = new AnnualReportDataDC();
|
|
// report.Data.Add(data);
|
|
// data.Name = item;
|
|
|
|
// dataPerDef.Add(item, data);
|
|
// }
|
|
// foreach (var info in alleKlienten)
|
|
// {
|
|
// String name = "ohne Angaben";
|
|
|
|
// if (info.VarFieldValueList != null)
|
|
// {
|
|
// foreach (var vfv in info.VarFieldValueList)
|
|
// {
|
|
// if (vfv.VarFieldDefOid == varFieldDefOid)
|
|
// {
|
|
// var o = Utils.XMLDeserializeFromString(vfv.SerializedValue, Type.GetType(vfv.TypeName));
|
|
// if (o != null)
|
|
// {
|
|
// name = o.ToString();
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// if (dataPerDef.ContainsKey(name))
|
|
// {
|
|
// var data = dataPerDef[name];
|
|
// data.Value = (data.Value ?? 0) + 1;
|
|
// if (info.IstWiederholungsKlient)
|
|
// {
|
|
// data.Value2 = ((int?)data.Value2 ?? 0) + 1;
|
|
// }
|
|
// else
|
|
// {
|
|
// data.Value1 = ((int?)data.Value1 ?? 0) + 1;
|
|
// }
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
// report.Data = report.Data.OrderBy(d => d.Name).ToList();
|
|
// return report;
|
|
//}
|
|
|
|
private AnnualReportDC BerechneVarfieldReport(List<JahrestatisticCustomerInfo> alleKlienten, long varFieldDefOid)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
|
|
|
|
Dictionary<String, AnnualReportDataDC> dataPerDef = new Dictionary<String, AnnualReportDataDC>();
|
|
|
|
String ka = "ohne Angaben";
|
|
|
|
var def = DAOFactory.GenericDAO.LoadByID<VarFieldDef>(varFieldDefOid);
|
|
report.Name = def.Label;
|
|
if (!String.IsNullOrEmpty(def.PossibleItems))
|
|
{
|
|
var items = def.PossibleItems.Split(';');
|
|
foreach (var item in items)
|
|
{
|
|
var data = new AnnualReportDataDC();
|
|
data.Name = item;
|
|
|
|
dataPerDef.Add(item, data);
|
|
|
|
if (item.ToLower().Contains("keine angabe") || item.ToLower().Contains("ohne angabe"))
|
|
{
|
|
ka = item;
|
|
}
|
|
}
|
|
}
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
String name = ka;
|
|
|
|
if (info.VarFieldValueList != null)
|
|
{
|
|
foreach (var vfv in info.VarFieldValueList)
|
|
{
|
|
if (vfv.VarFieldDefOid == varFieldDefOid)
|
|
{
|
|
var o = Utils.XMLDeserializeFromString(vfv.SerializedValue, Type.GetType(vfv.TypeName));
|
|
if (o != null)
|
|
{
|
|
name = o.ToString();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
AnnualReportDataDC data = null;
|
|
if (dataPerDef.ContainsKey(name))
|
|
{
|
|
data = dataPerDef[name];
|
|
|
|
}
|
|
else
|
|
{
|
|
data = new AnnualReportDataDC();
|
|
data.Name = name;
|
|
dataPerDef.Add(name, data);
|
|
}
|
|
data.Value = (data.Value ?? 0) + 1;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
data.Value2 = ((int?)data.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
data.Value1 = ((int?)data.Value1 ?? 0) + 1;
|
|
}
|
|
|
|
}
|
|
|
|
report.Data.AddRange(dataPerDef.Values.OrderBy(d => d.Name).Where(d => d.Name != ka));
|
|
report.Data.AddRange(dataPerDef.Values.Where(d => d.Name == ka));
|
|
|
|
return report;
|
|
}
|
|
|
|
private AnnualReportDC BerechneBeendigungsgrund(List<JahrestatisticCustomerInfo> alleKlienten, DateTime start, DateTime end)
|
|
{
|
|
var report = new AnnualReportDC();
|
|
report.Data = new List<AnnualReportDataDC>();
|
|
report.Name = "Beendigungsgrund";
|
|
|
|
Dictionary<String, AnnualReportDataDC> dataPerGrund = new Dictionary<String, AnnualReportDataDC>();
|
|
|
|
|
|
foreach (var info in alleKlienten)
|
|
{
|
|
//String grund = "Übernahme in das Folgejahr";
|
|
|
|
String grund = "Ohne Angabe";
|
|
if (!String.IsNullOrEmpty(info.Customer.TerminationReason))
|
|
{
|
|
grund = info.Customer.TerminationReason;
|
|
}
|
|
if (info.Customer.TerminationDate.HasValue && info.Customer.TerminationDate >= start && info.Customer.TerminationDate < end)
|
|
{
|
|
AnnualReportDataDC data = null;
|
|
if (dataPerGrund.ContainsKey(grund))
|
|
{
|
|
data = dataPerGrund[grund];
|
|
}
|
|
else
|
|
{
|
|
data = new AnnualReportDataDC();
|
|
data.Name = grund;
|
|
dataPerGrund.Add(grund, data);
|
|
report.Data.Add(data);
|
|
}
|
|
|
|
data.Value = (data.Value ?? 0) + 1;
|
|
if (info.IstWiederholungsKlient)
|
|
{
|
|
data.Value2 = ((int?)data.Value2 ?? 0) + 1;
|
|
}
|
|
else
|
|
{
|
|
data.Value1 = ((int?)data.Value1 ?? 0) + 1;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
return report;
|
|
}
|
|
|
|
private JahrestatisticCustomerInfo GetJahrestatisticCustomerInfo(Customer customer, DateTime start, DateTime ende)
|
|
{
|
|
JahrestatisticCustomerInfo info = null;
|
|
|
|
info = new JahrestatisticCustomerInfo();
|
|
|
|
info.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
|
|
info.IstWiederholungsKlient = HatAltenHilfeplan(customer, start);
|
|
|
|
info.Geschlecht = customer.Person.Sex;
|
|
|
|
info.VarFieldValueList = customer.VarFieldValueList;
|
|
|
|
return info;
|
|
|
|
foreach (var sc in customer.SupportConcepts)
|
|
{
|
|
foreach (var c2s in sc.CostBearer2SupportConceptList)
|
|
{
|
|
foreach (var scap in c2s.ApprovalPeriodList)
|
|
{
|
|
//DateTime end = DateTime.Now;
|
|
//if (last == null && customer.AssistanceBegin.HasValue && customer.AssistanceBegin.Value < startdate)
|
|
//{
|
|
// startdate = customer.AssistanceBegin;
|
|
//}
|
|
if (scap.StartDate.HasValue && scap.EndDate.HasValue && scap.StartDate < ende && scap.EndDate >= start)
|
|
{
|
|
info = new JahrestatisticCustomerInfo();
|
|
|
|
info.Customer = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
|
|
info.IstWiederholungsKlient = HatAltenHilfeplan(c2s, scap, customer, start);
|
|
|
|
info.Geschlecht = customer.Person.Sex;
|
|
|
|
var records = c2s.ServiceRecords.Where(r => r.Start >= start && r.Start < ende).ToList();
|
|
info.ServiceRecords = records;
|
|
|
|
info.VarFieldValueList = customer.VarFieldValueList;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return info;
|
|
|
|
}
|
|
private bool HatAltenHilfeplan(Customer customer, DateTime start)
|
|
{
|
|
if (customer.AssistanceBegin.HasValue && customer.AssistanceBegin.Value.Year < start.Year)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
private bool HatAltenHilfeplan(CostBearer2SupportConcept basisC2S, SupportConceptApprovalPeriod basisScap, Customer customer, DateTime start)
|
|
{
|
|
if (customer.AssistanceBegin.HasValue && customer.AssistanceBegin.Value.Year < start.Year)
|
|
{
|
|
return true;
|
|
}
|
|
return false;
|
|
|
|
//foreach (var sc in customer.SupportConcepts)
|
|
//{
|
|
// foreach (var c2s in sc.CostBearer2SupportConceptList)
|
|
// {
|
|
// if (c2s.CostBearer.Oid == basisC2S.CostBearer.Oid)
|
|
// {
|
|
// foreach (var scap in c2s.ApprovalPeriodList)
|
|
// {
|
|
// if (scap.EndDate.HasValue && scap.EndDate.Value < start)
|
|
// {
|
|
// if ((basisScap.ServiceCategory == null && scap.ServiceCategory == null) ||
|
|
// (basisScap.ServiceCategory != null && scap.ServiceCategory != null &&
|
|
// basisScap.ServiceCategory.Oid == scap.ServiceCategory.Oid))
|
|
// {
|
|
// return true;
|
|
// }
|
|
// }
|
|
|
|
// }
|
|
// }
|
|
// }
|
|
//}
|
|
|
|
//return false;
|
|
}
|
|
}
|
|
|
|
public class JahrestatisticCustomerInfo
|
|
{
|
|
public CompactCustomerDC Customer { get; set; }
|
|
public CompactTeamDC Team { get; set; }
|
|
public Sex? Geschlecht { get; set; }
|
|
public bool IstWiederholungsKlient { get; set; }
|
|
public IList<ServiceRecord> ServiceRecords { get; set; }
|
|
public IList<VarFieldValue> VarFieldValueList { get; set; }
|
|
}
|
|
}
|