178 lines
7.7 KiB
C#
178 lines
7.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using BeWo.Report.ReportObjects;
|
|
using BeWo.Report;
|
|
using DevExpress.XtraReports.UI;
|
|
using System.Data;
|
|
using BS.Shared.Core;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using System.Linq;
|
|
using BS.Shared.DataContracts;
|
|
|
|
namespace LebenshilfeStadeMID
|
|
{
|
|
public partial class LeistungsnachweisSbd : DevExpress.XtraReports.UI.XtraReport, IBeWoReport<SbdStundenaufstellungRO>
|
|
{
|
|
public LeistungsnachweisSbd()
|
|
{
|
|
InitializeComponent();
|
|
|
|
}
|
|
|
|
public void SetReportDataSource(SbdStundenaufstellungRO pRO)
|
|
{
|
|
double summeVerfuegungszeit = 0;
|
|
double summeZusatzleistung = 0;
|
|
|
|
if (pRO.Services != null)
|
|
{
|
|
var customer = MapperFactory.CustomerDC_Customer.MapToNewDC(DAOFactory.GenericDAO.GetByID<Customer>(pRO.CustomerOid));
|
|
if (customer.RelatedEmployees != null && customer.RelatedEmployees.Count > 0)
|
|
{
|
|
var vertretung = customer.RelatedEmployees.FirstOrDefault(e => e.RelationRole.DisplayName == "Vertretung");
|
|
if (vertretung != null)
|
|
lblVertretung.Text = vertretung.Employee.FirstNameLastName;
|
|
}
|
|
|
|
// Im Beleg muss jede Klienten- und Mitarbeiterabwesenheit dargestellt werden, egal ob da ein Termin stattgefunden hat oder nicht
|
|
// Klientenabwesenheiten markieren bzw. hinzufügen
|
|
pRO = MarkiereAbwesenheiten(customer, pRO);
|
|
List<ServicesOverviewRO.ServiceDetail> servicesBillable = new List<ServicesOverviewRO.ServiceDetail>();
|
|
|
|
foreach (var sd in pRO.Services)
|
|
{
|
|
sd.Notice = "";sd.Notice2 = "";sd.Notice4 = "";
|
|
|
|
if (sd.ServiceDescription != null && sd.ServiceDescription.ToLower().Contains("verfügungszeit"))
|
|
{
|
|
sd.Notice = string.Format("{0:0}", sd.Minutes);
|
|
summeVerfuegungszeit += sd.Minutes;
|
|
}
|
|
else if (sd.ServiceDescription != null && sd.ServiceDescription.ToLower().Contains("bewilligte zusatzleistung"))
|
|
{
|
|
sd.Notice2 = string.Format("{0:0}", sd.Minutes);
|
|
summeZusatzleistung += sd.Minutes;
|
|
}
|
|
}
|
|
}
|
|
|
|
tcSumVerfuegungszeit.Text = string.Format("{0:0}", summeVerfuegungszeit);
|
|
tcSumZusatzleistung.Text = string.Format("{0:0}", summeZusatzleistung);
|
|
|
|
this.bindingSource1.DataSource = pRO;
|
|
}
|
|
private SbdStundenaufstellungRO MarkiereAbwesenheiten(CustomerDC customer, SbdStundenaufstellungRO pRO)
|
|
{
|
|
pRO = ErstelleAbwesenheitenFuerKlienten(customer, pRO);
|
|
//pRO = ErstelleAbwesenheitenFuerMitarbeiter(customer, pRO);
|
|
|
|
return pRO;
|
|
}
|
|
|
|
private SbdStundenaufstellungRO ErstelleAbwesenheitenFuerKlienten(CustomerDC customer, SbdStundenaufstellungRO pRO)
|
|
{
|
|
foreach (var abs in pRO.Abwesenheiten)
|
|
{
|
|
var ende = abs.End.HasValue ? abs.End.Value : pRO.EndDate;
|
|
var start = new DateTime(abs.Start.Value.Year, abs.Start.Value.Month, abs.Start.Value.Day);
|
|
|
|
// Jeden Abwesenheitstag durchlaufen
|
|
while (start <= ende)
|
|
{
|
|
var services = pRO.Services.Where(s => s.StartDate.Date == start.Date).ToList();
|
|
if (services != null)
|
|
{
|
|
// Gibt es am Abwesenheitstag einen Termin, einfach x setzen
|
|
if (services.Count > 0)
|
|
{
|
|
foreach (var service in services)
|
|
{
|
|
if (abs.Reason.Description.ToLower().Contains("krank"))
|
|
service.Notice4 = "x";
|
|
}
|
|
}
|
|
// Gibt es keinen Termin, neuen Tag erzeugen und nur Datum und x setzen
|
|
else
|
|
{
|
|
pRO.Services.Add(new SbdStundenaufstellungRO.SbdServiceDetail()
|
|
{
|
|
StartDate = new DateTime(start.Year, start.Month, start.Day),
|
|
Notice4 = "x",
|
|
ServiceCategory = "",
|
|
ServiceDescription = "",
|
|
IsBillable = true
|
|
});
|
|
}
|
|
}
|
|
|
|
start = start.AddDays(1);
|
|
}
|
|
}
|
|
|
|
return pRO;
|
|
}
|
|
|
|
private ServicesOverviewRO ErstelleAbwesenheitenFuerMitarbeiter(CustomerDC customer, ServicesOverviewRO pRO)
|
|
{
|
|
// Mitarbeiterabwesenheiten markieren bzw. hinzufügen
|
|
if (customer.RelatedEmployees != null && customer.RelatedEmployees.Count > 0)
|
|
{
|
|
var mainAttendant = customer.RelatedEmployees.FirstOrDefault(e => e.RelationRole.DisplayName == "Hauptbetreuung");
|
|
if (mainAttendant != null)
|
|
{
|
|
var employee = MapperFactory.EmployeeDC_Employee.MapToNewDC(DAOFactory.GenericDAO.GetByID<Employee>(mainAttendant.Employee.EmployeeOid));
|
|
|
|
|
|
employee.AbsenceTimes = employee.AbsenceTimes
|
|
.Where(a => a.Start >= pRO.StartDate && a.Start <= pRO.EndDate || a.End >= pRO.StartDate && a.End <= pRO.EndDate)
|
|
.OrderBy(a => a.Start).ToList();
|
|
foreach (var abs in employee.AbsenceTimes)
|
|
{
|
|
var ende = abs.End.HasValue ? abs.End.Value : pRO.EndDate;
|
|
var start = new DateTime(abs.Start.Value.Year, abs.Start.Value.Month, abs.Start.Value.Day);
|
|
|
|
// Jeden Abwesenheitstag durchlaufen
|
|
while (start <= ende)
|
|
{
|
|
var services = pRO.Services.Where(s => s.StartDate.Date == start.Date).ToList();
|
|
if (services != null)
|
|
{
|
|
// Gibt es am Abwesenheitstag einen Termin, einfach x setzen
|
|
if (services.Count > 0)
|
|
{
|
|
foreach (var service in services)
|
|
{
|
|
if (abs.Reason.Description.ToLower().Contains("krank"))
|
|
service.Notice3 = "x";
|
|
}
|
|
}
|
|
// Gibt es keinen Termin, neuen Tag erzeugen und nur Datum und x setzen
|
|
else
|
|
{
|
|
pRO.Services.Add(new ServicesOverviewRO.ServiceDetail()
|
|
{
|
|
StartDate = new DateTime(start.Year, start.Month, start.Day),
|
|
Notice3 = "x",
|
|
ServiceCategory = "",
|
|
ServiceDescription = "",
|
|
IsBillable = true
|
|
});
|
|
}
|
|
}
|
|
|
|
start = start.AddDays(1);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return pRO;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}
|