Files
2021-07-07 15:05:45 +02:00

212 lines
5.5 KiB
C#

using System;
using System.Collections.Generic;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
using BeWo.Report;
using DevExpress.XtraReports.UI;
using System.Data;
using BeWo.Service.Plugins;
namespace BeWo.LebenshilfeDuisburgReports
{
public partial class Schulbetreuung : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<QueryRO>
{
public Schulbetreuung()
{
InitializeComponent();
}
public void SetReportDataSource(QueryRO pRO)
{
InitTable(pRO);
this.bindingSource1.DataSource = pRO;
}
private void InitTable(QueryRO ro)
{
decimal gesamt = 0;
DateTime startMonat = DateTime.MinValue;
DateTime endMonat = DateTime.MinValue;
foreach (BeWo.Report.ReportObjects.QueryRO.Row row in ro.Rows)
{
if (startMonat == DateTime.MinValue)
{
startMonat = DateTime.Parse(row.Field1.ToString());
}
if (endMonat == DateTime.MinValue)
{
endMonat = DateTime.Parse(row.Field2.ToString());
}
long oid = 0;
if (Int64.TryParse(row.Field3.ToString(), out oid))
{
var emp = DAOFactory.GenericDAO.LoadByID<Employee>(oid);
lblMitarbeiter.Text = String.Format("{0} {1}", emp.Person.FirstName, emp.Person.LastName);
}
oid = 0;
if (Int64.TryParse(row.Field4.ToString(), out oid))
{
var cust = DAOFactory.GenericDAO.LoadByID<Customer>(oid);
lblKlient.Text = String.Format("{0} {1}", cust.Person.FirstName, cust.Person.LastName);
}
}
ro.Rows.Clear();
while (startMonat <= endMonat)
{
var monthRow = new QueryRO.Row();
monthRow.ChildRows1 = new List<QueryRO.Row>();
ro.Rows.Add(monthRow);
monthRow.Field1 = String.Format("{0:MMMM yyyy}", startMonat);
DateTime startDay = new DateTime(startMonat.Year, startMonat.Month, 1);
for (int i = 1; i <= DateTime.DaysInMonth(startMonat.Year, startMonat.Month); i++)
{
var dayRow = new QueryRO.Row();
dayRow.Field1 = String.Format("{0:ddd, dd.MM.yyyy}", startDay);
var ferien = GetFerien(startDay);
if (ferien != null)
{
dayRow.Field5 = "1";
if (startDay == ferien.Start)
{
dayRow.Field6 = ferien.Name;
}
}
Feiertag ft = GetFeiertag(startDay);
if (ft != null)
{
dayRow.Field5 = "1";
dayRow.Field6 = ft.Name;
}
monthRow.ChildRows1.Add(dayRow);
startDay = startDay.AddDays(1);
}
startMonat = startMonat.AddMonths(1);
}
}
private Ferien GetFerien(DateTime start)
{
var ferienList = GetFerien();
foreach (var ferien in ferienList)
{
if (start >= ferien.Start && start <= ferien.Ende)
return ferien;
}
return null;
}
private Feiertag GetFeiertag(DateTime start)
{
List<Feiertag> feiertage = GetFeiertage(start.Year);
foreach (var ft in feiertage)
{
if (start == ft.Datum)
return ft;
}
return null;
}
private List<Feiertag> GetFeiertage(int year)
{
List<Feiertag> list = new List<Feiertag>();
list.Add(new Feiertag() {Datum = new DateTime(year, 1, 1), Name = "Neujahr"});
list.Add(new Feiertag() {Datum = new DateTime(year, 5, 1), Name = "Tag der Arbeit"});
list.Add(new Feiertag() {Datum = new DateTime(year, 10, 3), Name = "Tag der dt. Einheit"});
list.Add(new Feiertag() {Datum = new DateTime(year, 11, 1), Name = "Allerheiligen"});
list.Add(new Feiertag() {Datum = new DateTime(year, 12, 24), Name = "Heilig Abend"});
list.Add(new Feiertag() {Datum = new DateTime(year, 12, 25), Name = "1. Weihnachtstag"});
list.Add(new Feiertag() {Datum = new DateTime(year, 12, 26), Name = "2. Weihnachtstag"});
if (year == 2017)
{
list.Add(new Feiertag() { Datum = new DateTime(year, 10, 31), Name = "Reformationstag" });
}
DateTime osterSonntag = GetOsterSonntag(year);
list.Add(new Feiertag() {Datum = osterSonntag.AddDays(-2), Name = "Karfreitag"});
list.Add(new Feiertag() {Datum = osterSonntag.AddDays(1), Name = "Ostermontag"});
list.Add(new Feiertag() {Datum = osterSonntag.AddDays(39), Name = "Christi Himmelfahrt"});
list.Add(new Feiertag() {Datum = osterSonntag.AddDays(50), Name = "Pfingstmontag"});
list.Add(new Feiertag() { Datum = osterSonntag.AddDays(60), Name = "Fronleichnam" });
return list;
}
protected DateTime GetOsterSonntag(int year)
{
int g, h, c, j, l, i;
g = year % 19;
c = year / 100;
h = ((c - (c / 4)) - (((8 * c) + 13) / 25) + (19 * g) + 15) % 30;
i = h - (h / 28) * (1 - (29 / (h + 1)) * ((21 - g) / 11));
j = (year + (year / 4) + i + 2 - c + (c / 4)) % 7;
l = i - j;
int month = (int)(3 + ((l + 40) / 44));
int day = (int)(l + 28 - 31 * (month / 4));
return new DateTime(year, month, day);
}
private List<Ferien> GetFerien()
{
List<Ferien> result = new List<Ferien>();
var vs = PluginLoader.FindClass<VacationService>();
var ferien = vs.GetFerien("nrw");
foreach (var ferienDc in ferien)
{
result.Add(new Ferien
{
Start = ferienDc.Start,
Ende = ferienDc.Ende,
Name = ferienDc.Name
});
}
return result;
}
}
class Ferien
{
public String Name { get; set; }
public DateTime Start { get; set; }
public DateTime Ende { get; set; }
}
class Feiertag
{
public String Name { get; set; }
public DateTime Datum { get; set; }
}
}