Files
BeWoPlaner/Service/Reporting/Straffaelligenhilfe/StatisticBase.cs

147 lines
4.4 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
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;
using Castle.Components.DictionaryAdapter;
using NHibernate.Linq;
namespace BeWo.Service.Reporting.Straffaelligenhilfe
{
public class StatisticBase
{
public StatisticBase(VgaTypeEnum vgaType)
{
VgaType = vgaType;
}
protected DateTime StartDate { get; set; }
protected DateTime EndDate { get; set; }
protected Dictionary<long, Customer> CustomerByOid { get; set; }
protected Dictionary<long, CustomerVermittlungArbeit> VgaByOid { get; set; }
protected Dictionary<long, long> VgaOid2CustomerOid { get; set; }
public VgaTypeEnum VgaType { get; set; }
public int Anzahl01 { get; set; } // Anzahl der aus dem vorhergehenden Berichtszeitraum übernommenen offenen Aufträge
public int Anzahl02 { get; set; } // Anzahl der im aktuellen Berichtszeitraum erteilten Aufträge
public int Anzahl1 { get { return Anzahl01 + Anzahl02; } } // Anzahl der insges. erteilten Aufträge (Summe Zeilen 0.1+ 0.2)
public virtual List<AnnualReportDC> CreateStatistic(DateTime startDate, DateTime endDate)
{
StartDate = startDate;
EndDate = endDate;
CustomerByOid = new Dictionary<long, Customer>();
VgaByOid = new Dictionary<long, CustomerVermittlungArbeit>();
VgaOid2CustomerOid = new Dictionary<long, long>();
var reports = new List<AnnualReportDC>();
LoadData();
foreach (var vgaOid in VgaByOid.Keys)
{
CustomerVermittlungArbeit cva = VgaByOid[vgaOid];
ProcessCustomerVermittlungArbeit(cva.Customer, cva);
}
return reports;
}
public virtual void LoadData()
{
foreach (var customer in DAOFactory.GenericDAO.GetAllActiveAndArchived<Customer>())
{
if (ShouldProcessCustomer(customer))
{
if (!CustomerByOid.ContainsKey(customer.Oid.Value))
{
CustomerByOid.Add(customer.Oid.Value, customer);
}
var vgaList = GetVgaList(customer);
foreach (var vga in vgaList)
{
if (!VgaOid2CustomerOid.ContainsKey(vga.Oid.Value))
{
VgaOid2CustomerOid.Add(vga.Oid.Value, customer.Oid.Value);
}
if (!VgaByOid.ContainsKey(vga.Oid.Value))
{
VgaByOid.Add(vga.Oid.Value, vga);
}
}
}
}
}
public virtual void ProcessCustomerVermittlungArbeit(Customer customer, CustomerVermittlungArbeit cva)
{
//Anzahl der aus dem vorhergehenden Berichtszeitraum übernommenen offenen Aufträge
if (cva.Auftragseingang < StartDate && !cva.Auftragsruckgabe.HasValue)
{
Anzahl01++;
}
else if (cva.Auftragseingang >= StartDate && !cva.Auftragsruckgabe.HasValue)
{
Anzahl02++;
}
}
public virtual bool ShouldProcessCustomer(Customer customer)
{
return true;
}
public virtual IList<CustomerVermittlungArbeit> GetVgaList(Customer customer)
{
//Alle Aufträge, die ein Startdatum kleiner als der Auswertezeitraum und entweder noch keine Rückgabe oder ein Rückgabe Datum im Auswertezeitraum haben
var list = customer.CustomerVermittlungArbeiten.Where(v => v.Auftragseingang.HasValue && v.Auftragseingang <= EndDate && (!v.Auftragsruckgabe.HasValue || v.Auftragsruckgabe.Value >= StartDate));
return list.Where(v => v.VgaType == VgaType).ToList();
}
public virtual bool IsCustomerOfCustomerCareType(Customer customer, long? customerCareTypeValueListEntryOid)
{
bool val = true;
if (customerCareTypeValueListEntryOid.HasValue)
{
val = false;
foreach (var v in customer.ValueList)
{
if (v.Entry.Type == ValueListEntryType.CustomerCareType && v.Entry.Oid == customerCareTypeValueListEntryOid)
return true;
}
}
return val;
}
public virtual bool CustomerBelongsToTeam(Customer customer, long? teamOid)
{
bool val = true;
if (teamOid.HasValue)
{
val = false;
foreach (var t2c in customer.Team2CustomerList)
{
if (t2c.TeamOid == teamOid)
return true;
}
}
return val;
}
}
}