451 lines
15 KiB
C#
451 lines
15 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using BeWo.Service.Reporting;
|
||
using BS.Shared;
|
||
using BS.Shared.Core;
|
||
using BS.Shared.DataContracts;
|
||
using BS.Shared.Services;
|
||
using BeWo.Data.Access;
|
||
using BeWo.Data.Entities;
|
||
using BeWo.Service.DCEntityMapper;
|
||
using BeWo.Service.Plugins;
|
||
|
||
namespace FreundeskreisSuchthilfe.Reporting
|
||
{
|
||
public class CustomAnnualReportFactory : AnnualReportFactory
|
||
{
|
||
private Dictionary<String, int> countPerAltersGruppeAll = new Dictionary<String, int>();
|
||
private Dictionary<String, int> countPerAltersGruppeMale = new Dictionary<String, int>();
|
||
private Dictionary<String, int> countPerAltersGruppeFemale = new Dictionary<String, int>();
|
||
|
||
private int countWithBetreuerAll = 0;
|
||
private int countWithBetreuerMale = 0;
|
||
private int countWithBetreuerFemale = 0;
|
||
|
||
private Dictionary<long, VarFieldDef> oid2VarFieldDef = null;
|
||
|
||
int gruppe_UnbekanntAlle = 0;
|
||
int gruppe_UnbekanntM = 0;
|
||
int gruppe_UnbekanntF = 0;
|
||
|
||
int gruppe0_Bis20Alle = 0;
|
||
int gruppe0_Bis20M = 0;
|
||
int gruppe0_Bis20F = 0;
|
||
|
||
int gruppe_20_29_Alle = 0;
|
||
int gruppe_20_29_M = 0;
|
||
int gruppe_20_29_F = 0;
|
||
|
||
int gruppe_30_39_Alle = 0;
|
||
int gruppe_30_39_M = 0;
|
||
int gruppe_30_39_F = 0;
|
||
|
||
int gruppe_40_49_Alle = 0;
|
||
int gruppe_40_49_M = 0;
|
||
int gruppe_40_49_F = 0;
|
||
|
||
int gruppe_50_59_Alle = 0;
|
||
int gruppe_50_59_M = 0;
|
||
int gruppe_50_59_F = 0;
|
||
|
||
int gruppe_60_69_Alle = 0;
|
||
int gruppe_60_69_M = 0;
|
||
int gruppe_60_69_F = 0;
|
||
|
||
int gruppeAb70Alle = 0;
|
||
int gruppeAb70M = 0;
|
||
int gruppeAb70F = 0;
|
||
|
||
protected override bool StichtagsbezogenAuswerten
|
||
{
|
||
get { return false; }
|
||
}
|
||
|
||
public override bool ShouldProcessSupportConcept(CostBearer2SupportConcept iCb2Sc, SupportConcept sc, Customer customer)
|
||
{
|
||
if (sc.IsActive != ActivationTypeId.Deleted && customer.IsActive != ActivationTypeId.Deleted)
|
||
{
|
||
if ((iCb2Sc.StartDate.HasValue && iCb2Sc.EndDate.HasValue))
|
||
{
|
||
if (CustomerBelongsToTeam(customer, TeamOid) &&
|
||
IsCustomerOfCustomerCareType(customer, CustomerCareTypeValueListEntryOid))
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
public override List<AnnualReportDC> CreateAnnualReport(CostBearer cb, long? teamOid, long? customerCareTypeValueListEntryOid, DateTime reportStartDate, DateTime reportEndDate)
|
||
{
|
||
var reports = base.CreateAnnualReport(cb, teamOid, customerCareTypeValueListEntryOid, reportStartDate, reportEndDate);
|
||
|
||
|
||
// Nach Kinder Altersgruppen
|
||
var report = new AnnualReportDC();
|
||
report.Name = "Anzahl Kinder nach Altersgruppen";
|
||
reports.Add(report);
|
||
report.Data = new List<AnnualReportDataDC>();
|
||
|
||
report.Data.Add(CreateAltersgruppeData("0 - 3 Jahre", 1));
|
||
report.Data.Add(CreateAltersgruppeData("4 - 12 Jahre", 2));
|
||
report.Data.Add(CreateAltersgruppeData("13 - 18 Jahre", 3));
|
||
|
||
|
||
report = new AnnualReportDC();
|
||
report.Name = "Anzahl Personen mit gesetzl. Betreuer";
|
||
reports.Add(report);
|
||
report.Data = new List<AnnualReportDataDC>();
|
||
int index = 1;
|
||
|
||
AnnualReportDataDC data = new AnnualReportDataDC();
|
||
report.Data.Add(data);
|
||
data.Index = index++;
|
||
data.Name = "Anzahl Personen mit gesetzl. Betreuer";
|
||
data.Value = countWithBetreuerAll;
|
||
data.Male = countWithBetreuerMale;
|
||
data.Female = countWithBetreuerFemale;
|
||
|
||
// Nach Klientenaltersgruppen
|
||
report = new AnnualReportDC();
|
||
report.Name = "Anzahl Personen nach Alter";
|
||
reports.Add(report);
|
||
report.Data = new List<AnnualReportDataDC>();
|
||
index = 1;
|
||
|
||
var d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "Jünger als 20";
|
||
d.Value = gruppe0_Bis20Alle;
|
||
d.Male = gruppe0_Bis20M;
|
||
d.Female = gruppe0_Bis20F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "20 bis 29";
|
||
d.Value = gruppe_20_29_Alle;
|
||
d.Male = gruppe_20_29_M;
|
||
d.Female = gruppe_20_29_F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "30 bis 39";
|
||
d.Value = gruppe_30_39_Alle;
|
||
d.Male = gruppe_30_39_M;
|
||
d.Female = gruppe_30_39_F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "40 bis 49";
|
||
d.Value = gruppe_40_49_Alle;
|
||
d.Male = gruppe_40_49_M;
|
||
d.Female = gruppe_40_49_F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "50 bis 59";
|
||
d.Value = gruppe_50_59_Alle;
|
||
d.Male = gruppe_50_59_M;
|
||
d.Female = gruppe_50_59_F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "60 bis 69";
|
||
d.Value = gruppe_60_69_Alle;
|
||
d.Male = gruppe_60_69_M;
|
||
d.Female = gruppe_60_69_F;
|
||
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = " 70 und älter";
|
||
d.Value = gruppeAb70Alle;
|
||
d.Male = gruppeAb70M;
|
||
d.Female = gruppeAb70F;
|
||
|
||
if (gruppe_UnbekanntAlle > 0)
|
||
{
|
||
d = new AnnualReportDataDC();
|
||
report.Data.Add(d);
|
||
d.Index = index++;
|
||
d.Name = "Unbekannt";
|
||
d.Value = gruppe_UnbekanntAlle;
|
||
d.Male = gruppe_UnbekanntM;
|
||
d.Female = gruppe_UnbekanntF;
|
||
}
|
||
|
||
return reports;
|
||
}
|
||
|
||
private AnnualReportDataDC CreateAltersgruppeData(string jahre, int index)
|
||
{
|
||
if (!countPerAltersGruppeAll.ContainsKey(jahre))
|
||
{
|
||
countPerAltersGruppeAll.Add(jahre, 0);
|
||
countPerAltersGruppeMale.Add(jahre, 0);
|
||
countPerAltersGruppeFemale.Add(jahre, 0);
|
||
}
|
||
|
||
AnnualReportDataDC data2 = new AnnualReportDataDC();
|
||
|
||
data2.Index = index++;
|
||
data2.Name = jahre;
|
||
data2.Value = countPerAltersGruppeAll[jahre];
|
||
data2.Male = countPerAltersGruppeMale[jahre];
|
||
data2.Female = countPerAltersGruppeFemale[jahre];
|
||
|
||
return data2;
|
||
}
|
||
|
||
public override void ProcessCustomer(Customer customer, List<CostBearer2SupportConcept> allCostBearer2SupportConcepts)
|
||
{
|
||
if (LiegtImStichtagByCustomerOid.ContainsKey(customer.Oid.Value))
|
||
{
|
||
ErmittleAltesgruppenDerKinder(customer);
|
||
ErmittleGesetzlichenBetreuer(customer);
|
||
|
||
int alter = -1;
|
||
|
||
if (customer.Person.DateOfBirth.HasValue)
|
||
{
|
||
alter = Stichtag.Year - customer.Person.DateOfBirth.Value.Year;
|
||
}
|
||
|
||
if (alter < 0)
|
||
{
|
||
gruppe_UnbekanntAlle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_UnbekanntM++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_UnbekanntF++;
|
||
}
|
||
}
|
||
if (alter < 20)
|
||
{
|
||
gruppe0_Bis20Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe0_Bis20M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe0_Bis20F++;
|
||
}
|
||
}
|
||
if (alter >= 20 && alter <= 29)
|
||
{
|
||
gruppe_20_29_Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_20_29_M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_20_29_F++;
|
||
}
|
||
}
|
||
if (alter >= 30 && alter <= 39)
|
||
{
|
||
gruppe_30_39_Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_30_39_M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_30_39_F++;
|
||
}
|
||
}
|
||
if (alter >= 40 && alter <= 49)
|
||
{
|
||
gruppe_40_49_Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_40_49_M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_40_49_F++;
|
||
}
|
||
}
|
||
if (alter >= 50 && alter <= 59)
|
||
{
|
||
gruppe_50_59_Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_50_59_M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_50_59_F++;
|
||
}
|
||
}
|
||
if (alter >= 60 && alter <= 69)
|
||
{
|
||
gruppe_60_69_Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppe_60_69_M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppe_60_69_F++;
|
||
}
|
||
}
|
||
if (alter >= 70)
|
||
{
|
||
gruppeAb70Alle++;
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
gruppeAb70M++;
|
||
}
|
||
else if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
gruppeAb70F++;
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
private void ErmittleGesetzlichenBetreuer(Customer customer)
|
||
{
|
||
foreach (var c2p in customer.Customer2PersonList)
|
||
{
|
||
foreach (var v2o in c2p.ValueList)
|
||
{
|
||
if (v2o.Entry.Type == ValueListEntryType.EnvironmentPersonType && v2o.Entry.Value == "Gesetzlicher Betreuer")
|
||
{
|
||
countWithBetreuerAll++;
|
||
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Male)
|
||
{
|
||
countWithBetreuerMale++;
|
||
}
|
||
|
||
if (customer.Person.Sex.HasValue && customer.Person.Sex.Value == Sex.Female)
|
||
{
|
||
countWithBetreuerFemale++;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private void ErmittleAltesgruppenDerKinder(Customer customer)
|
||
{
|
||
//0 – 3 Jahre
|
||
|
||
//4 – 12 Jahre
|
||
|
||
//13 – 18 Jahre
|
||
|
||
InitialisiereVarFieldDict();
|
||
|
||
AddKind(customer, 101, 102);
|
||
AddKind(customer, 121, 122);
|
||
AddKind(customer, 141, 142);
|
||
AddKind(customer, 161, 162);
|
||
AddKind(customer, 181, 182);
|
||
|
||
|
||
|
||
|
||
}
|
||
|
||
private void AddKind(Customer customer, int geburtsdatumVarfieldOid, int geschlechtVarfieldOid)
|
||
{
|
||
var vvGeb = customer.VarFieldValueList.FirstOrDefault(vv => vv.VarFieldDefOid == geburtsdatumVarfieldOid);
|
||
var vvGeschlecht = customer.VarFieldValueList.FirstOrDefault(vv => vv.VarFieldDefOid == geschlechtVarfieldOid);
|
||
|
||
if (vvGeb != null)
|
||
{
|
||
var alter = GetAlter(vvGeb);
|
||
|
||
if (alter >= 0 && alter <= 3)
|
||
{
|
||
AddKind2Altersgruppe("0 - 3 Jahre", vvGeschlecht);
|
||
}
|
||
if (alter >= 4 && alter <= 12)
|
||
{
|
||
AddKind2Altersgruppe("4 - 12 Jahre", vvGeschlecht);
|
||
}
|
||
if (alter >= 13 && alter <= 18)
|
||
{
|
||
AddKind2Altersgruppe("13 - 18 Jahre", vvGeschlecht);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
private void AddKind2Altersgruppe(string altersgruppe, VarFieldValue vvGeschlecht)
|
||
{
|
||
if (!countPerAltersGruppeAll.ContainsKey(altersgruppe))
|
||
{
|
||
countPerAltersGruppeAll.Add(altersgruppe, 0);
|
||
countPerAltersGruppeMale.Add(altersgruppe, 0);
|
||
countPerAltersGruppeFemale.Add(altersgruppe, 0);
|
||
}
|
||
|
||
countPerAltersGruppeAll[altersgruppe] += 1;
|
||
|
||
if (vvGeschlecht != null)
|
||
{
|
||
var geschlechtObj = Utils.XMLDeserializeFromString(vvGeschlecht.SerializedValue, Type.GetType(vvGeschlecht.TypeName));
|
||
|
||
if (geschlechtObj != null)
|
||
{
|
||
if (geschlechtObj.ToString() == "männlich")
|
||
{
|
||
countPerAltersGruppeMale[altersgruppe] += 1;
|
||
}
|
||
else if (geschlechtObj.ToString() == "weiblich")
|
||
{
|
||
countPerAltersGruppeFemale[altersgruppe] += 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
private int GetAlter(VarFieldValue vv)
|
||
{
|
||
var dateString = Utils.XMLDeserializeFromString(vv.SerializedValue, Type.GetType(vv.TypeName));
|
||
DateTime dt = DateTime.MinValue;
|
||
|
||
|
||
if (DateTime.TryParse(dateString.ToString(), out dt))
|
||
{
|
||
return Stichtag.Year - dt.Year;
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
private void InitialisiereVarFieldDict()
|
||
{
|
||
if (oid2VarFieldDef == null)
|
||
{
|
||
oid2VarFieldDef = new Dictionary<long, VarFieldDef>();
|
||
|
||
var defs = DAOFactory.GenericDAO.GetAllActive<VarFieldDef>();
|
||
|
||
foreach (var varFieldDef in defs)
|
||
{
|
||
oid2VarFieldDef.Add(varFieldDef.Oid.Value, varFieldDef);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} |