Files
BeWoPlaner/ReportImp/FreundeskreisSuchthilfe/Reporting/CustomAnnualReportFactory.cs
2019-11-24 15:33:32 +01:00

451 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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);
}
}
}
}
}