Files
BeWoPlaner/Service/SBD/VertretungsManager.cs

1638 lines
79 KiB
C#
Raw Normal View History

2018-05-21 16:58:56 +02:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
2018-05-21 16:58:56 +02:00
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
2023-06-07 09:45:20 +02:00
using BeWo.Service.ServiceUtils.DistanceCalculator;
2018-05-21 16:58:56 +02:00
using BS.Shared;
2019-09-27 15:55:01 +02:00
using BS.Shared.Core;
2018-05-21 16:58:56 +02:00
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
2019-08-16 18:03:30 +02:00
using BS.Shared.Extensions;
2020-04-15 18:22:10 +02:00
using DevExpress.XtraRichEdit.Commands;
using Employee = BeWo.Data.Entities.Employee;
2018-05-21 16:58:56 +02:00
namespace BeWo.Service.SBD
{
2023-06-07 09:45:20 +02:00
public class VertretungsManager
2018-05-21 16:58:56 +02:00
{
2023-08-23 23:15:58 +02:00
private static List<ContactDC> LoadContactInformationForEntity<T>(Person p) where T : BeWoEntityBase
2019-09-27 15:55:01 +02:00
{
2023-08-23 23:15:58 +02:00
return MapperFactory.ContactDC_Contact.MapToNewDCs(p.Contacts);
}
2023-06-07 09:45:20 +02:00
public virtual List<CompactVertreterEmployeeDC> SucheVertreter(VertreterSucheFilterDC filter)
{
var vertretungsListe = CreateVertretungsListe(filter.StartDate, filter.EndDate);
// EmployeeOids der Mitarbeiter, die einen abwesenden Mitarbeiter vertreten
var ausgewaehlteVertreter = vertretungsListe.Where(vertretungsItem => vertretungsItem.VertretungsStatus != VertretungsStatus.KlientKrank &&
vertretungsItem.Vertreter != null &&
vertretungsItem.Vertreter.ActivationType == ActivationTypeId.Active).Select(item => item.Vertreter.EmployeeOid);
// EmployeeOids der Betreuer abwesender Klienten, die nicht schon einen anderen Klienten vertreten
var employeeOids = vertretungsListe.Where(vertretungsItem => vertretungsItem.Employee != null &&
vertretungsItem.VertretungsStatus == VertretungsStatus.KlientKrank &&
!ausgewaehlteVertreter.Contains(vertretungsItem.Employee.EmployeeOid)).Select(s => s.Employee.EmployeeOid);
// EmployeeOids von abwesenden Mitarbeitern
var abwesenendeEmployeeOids = vertretungsListe.Where(vertretungsItem => vertretungsItem.VertretungsStatus != VertretungsStatus.KlientKrank &&
vertretungsItem.Employee != null).Select(item => item.Employee.EmployeeOid);
employeeOids = employeeOids.Where(e => !abwesenendeEmployeeOids.Contains(e));
var allEmps = DAOFactory.GenericDAO.GetActiveByIDs<Employee>(employeeOids).ToList();
var list = MapperFactory.CompactVertreterEmployeeDC_VertreterEmployee.MapToNewDCs(allEmps);
//Setze Betreuungszeiten
foreach (var vertreter in list)
{
foreach (var item in vertretungsListe)
{
if (item.Employee != null && item.Employee.EmployeeOid == vertreter.EmployeeOid)
{
//if (vertreter.Arbeitszeit == null)
//{
// vertreter.Arbeitszeit = new List<ArbeitszeitDC>();
//}
//if (vertreter.Arbeitszeit.Count == 0)
//{
// vertreter.Arbeitszeit.Add(new ArbeitszeitDC
// {
// Eintraege = new List<ArbeitszeitEintragDC>()
// });
//}
//vertreter.Arbeitszeit[0].Eintraege.AddRange(item.Arbeitszeiten);
vertreter.Arbeitszeit = new List<ArbeitszeitDC>();
vertreter.Arbeitszeit.Add(
new ArbeitszeitDC
{
Eintraege = item.Arbeitszeiten.ToList()
});
}
}
}
if (filter.CustomerOid.HasValue && filter.VerwendeEntfernungssuche)
{
GetDistanceForVertreterEmployees(filter.CustomerOid.Value, ref list, allEmps);
}
return list;
}
public virtual List<VertretungsItemDC> CreateSubstitutions(DateTime start, DateTime end)
2018-05-21 16:58:56 +02:00
{
var vertretungsItems = new List<VertretungsItemDC>();
2018-05-21 16:58:56 +02:00
2018-10-08 11:57:16 +02:00
end = end.Date.AddDays(1).AddTicks(-1);
2020-04-15 18:22:10 +02:00
var vertretungen = DAOFactory.SearchDAO.FindVertretungen(start, end).Where(v => v.VertretenderMitarbeiterOid.HasValue).ToList();
var absenceTimes = DAOFactory.SearchDAO.FindAbsenceTimes(start, end).ToList();
2018-05-21 16:58:56 +02:00
var employeeAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.EmployeeOid.HasValue).ToList();
var customerAbsenceTimes = absenceTimes.Where(absenceTime => absenceTime.CustomerOid.HasValue).ToList();
var customerOids = vertretungen.Where(w => w.CustomerOid.HasValue && w.CustomerOid > 0).Select(s => s.CustomerOid.Value).ToList();
customerOids.AddRangeIfElementsNotIn(absenceTimes.Where(w => w.CustomerOid.HasValue).Select(s => s.CustomerOid.Value).ToList());
var customers = DAOFactory.GenericDAO.LoadByIDs<Customer>(customerOids);
var customerContactInformation = new Dictionary<long, List<ContactDC>>();
var employees = DAOFactory.GenericDAO.LoadByIDs<Employee>(employeeAbsenceTimes.Select(absenceTime => absenceTime.EmployeeOid.Value));
2019-09-27 15:55:01 +02:00
var employeeVertretungsItems = new List<VertretungsItemDC>();
var customerVertretungsItems = new List<VertretungsItemDC>();
var employeeVertretungsItemsGuids2Ignore = new List<Guid>();
2019-09-27 15:55:01 +02:00
foreach (var customer in customers)
{
var contacts = MapperFactory.ContactDC_Contact.MapToNewDCs(customer.Person.Contacts);
if (customer.Oid != null)
{
customerContactInformation.AddOrUpdateValueInDictionary(customer.Oid.Value, contacts);
}
}
// Mitarbeiterabwesenheiten
foreach (var absenceTime in employeeAbsenceTimes)
2018-05-21 16:58:56 +02:00
{
var employee = employees.FirstOrDefault(emp => emp.Oid.HasValue && emp.Oid.Value.Equals(absenceTime.EmployeeOid));
if (employee == null)
2018-05-21 16:58:56 +02:00
{
continue;
}
List<VertretungsItemDC> items = CreateVertretungsItemsForAbsenceEmployee(employee, vertretungen, absenceTime, start, end);
employeeVertretungsItems.AddRange(items);
}
if (start.Date == end.Date) // Nur in Tagesansicht erst mal
{
// Vertretungen deren Klient wiederrum vertreten werden muss
foreach (var vertretung in vertretungen)
{
if (vertretung.VertretenderMitarbeiterOid.HasValue)
2019-09-27 15:55:01 +02:00
{
if (employeeAbsenceTimes.Count(ea => ea.EmployeeOid.HasValue && ea.EmployeeOid.Value == vertretung.VertretenderMitarbeiterOid.Value) == 0)
{
var employee = DAOFactory.GenericDAO.LoadByID<Employee>(vertretung.VertretenderMitarbeiterOid.Value);
2018-10-08 11:57:16 +02:00
List<VertretungsItemDC> items = CreateVertretungsItemsForAbsenceEmployee(employee, vertretungen, null, start, end);
employeeVertretungsItems.AddRange(items);
}
2018-10-08 11:57:16 +02:00
}
}
2018-05-21 16:58:56 +02:00
}
// Klientenabwesenheiten
foreach (var absenceTime in customerAbsenceTimes)
2018-05-21 16:58:56 +02:00
{
var customer = customers.FirstOrDefault(first => first.Oid.HasValue && first.Oid.Equals(absenceTime.CustomerOid)) ?? DAOFactory.GenericDAO.LoadByID<Customer>(absenceTime.CustomerOid.Value);
2024-02-01 01:06:46 +01:00
if (customer.Person.LastName.Contains("Platz"))
2024-02-01 01:06:46 +01:00
{
}
var absenceTimeDC = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime);
var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
2023-08-23 23:15:58 +02:00
var customerContactInformationList = LoadContactInformationForEntity<Customer>(customer.Person);
var schools = MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value))));
var schoolAssistanceTimes = GetSchoolAssistanceTimes(customer, start, end, absenceTime);
var hauptbetreuer = customer.Employee2CustomerList.FirstOrDefault(e2c => e2c.IsActive == ActivationTypeId.Active &&
(!e2c.StartDate.HasValue || e2c.StartDate.Value.Date <= end.Date) && (!e2c.EndDate.HasValue || e2c.EndDate.Value.Date >= start.Date) &&
e2c.ValueList.Any(b => b.Entry.Type.Equals(ValueListEntryType.StaffRoleType) && b.Entry.Value.ToLower().Equals("hauptbetreuung")))?.Employee;
2022-05-12 12:08:52 +02:00
if (hauptbetreuer == null)
{
//hauptbetreuer = customer.Employee2CustomerList.FirstOrDefault()?.Employee;
2022-05-12 12:08:52 +02:00
}
MigriereSubstitutionStatus(customer);
2018-10-08 11:57:16 +02:00
var assistingEmployees = new List<Employee>();
2020-03-03 09:27:02 +01:00
customer.Arbeitszeiten.DoForEach(a => assistingEmployees.AddRangeIfElementsNotIn(a.ArbeitszeitEintraege.Where(ae => ae.Employee != null).Select(s => s.Employee)));
schoolAssistanceTimes.DoForEach(a =>
{
foreach (var assistanceTimeEntry in a.ArbeitszeitEintraege)
{
if (assistanceTimeEntry.Employee != null && assistanceTimeEntry.Employee.IsActive != ActivationTypeId.Active)
{
continue;
}
if (assistanceTimeEntry.Employee == null)
{
if (hauptbetreuer != null)
{
assistingEmployees.AddIfNotIn(hauptbetreuer);
}
}
else
{
assistingEmployees.AddIfNotIn(assistanceTimeEntry.Employee);
}
}
});
var hasCaregiver = customer.Employee2CustomerList.Any(e2c =>
(!e2c.StartDate.HasValue || e2c.StartDate.Value.Date <= end.Date) && (!e2c.EndDate.HasValue || e2c.EndDate.Value.Date >= start.Date) &&
e2c.ValueList.Any(b => b.Entry.Type.Equals(ValueListEntryType.StaffRoleType) && !b.Entry.Value.ToLower().Equals("ehemalige betreuung"))) || assistingEmployees.Any();
if (hasCaregiver)
{
var relatedEmployees = new List<Employee>(assistingEmployees);
relatedEmployees.AddRangeIfElementsNotIn(
customer.Employee2CustomerList
.Where(
e2c => e2c.Employee.IsActive == ActivationTypeId.Active &&
(!e2c.StartDate.HasValue || e2c.StartDate.Value.Date <= end.Date) && (!e2c.EndDate.HasValue || e2c.EndDate.Value.Date >= start.Date) &&
!e2c.ValueList.Any(
w => w.Entry.Type.Equals(ValueListEntryType.StaffRoleType) &&
!w.Entry.Value.ToLower().Equals("ehemalige betreuung")))
.Select(s => s.Employee));
foreach (var employee in relatedEmployees)
{
var employeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee);
2023-08-23 23:15:58 +02:00
var employeeAddressString = GetEmployeeAddressInfo(employee);
var employeeContactInformationList = LoadContactInformationForEntity<Employee>(employee.Person);
2019-09-27 15:55:01 +02:00
var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, employee, absenceTime, start, end);
var dateTime = start;
while (dateTime <= end)
{
if (LiegtImZeitraum(dateTime, absenceTime))
2019-09-27 15:55:01 +02:00
{
var dateTimeCopy = dateTime;
var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTime, entry, absenceTime) && (entry.Employee != null && entry.Employee.Equals(employee) || entry.Employee == null && employee.Equals(hauptbetreuer))).ToList();
var vertretungsObjekte = vertretungen.Where(w => w.EmployeeOid.HasValue && w.EmployeeOid.Equals(employee.Oid) && w.CustomerOid.HasValue && w.CustomerOid.Equals(customer.Oid) && w.VertretungsZeitraumVon.Date <= dateTimeCopy && w.VertretungsZeitraumBis.Date >= dateTimeCopy).ToList();
var lastSubstitutions = DAOFactory.SearchDAO.GetLastSubstitutionItems(employee.Oid.Value, 3);
var lastSubstitutionDCs = MapperFactory.VertretungDC_Vertretung.MapToNewDCs(lastSubstitutions);
var assistanceTimeEntryDCs = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDCs(relevantAssistanceTimeEntries);
2020-04-08 14:25:01 +02:00
foreach (var assistanceTimeEntry in relevantAssistanceTimeEntries)
{
var assistanceTimeEntryDC = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDC(assistanceTimeEntry);
var newVertretungsItem = new VertretungsItemDC
{
Id = Guid.NewGuid(),
Datum = dateTime,
Absencetime = absenceTimeDC,
Arbeitszeiten = assistanceTimeEntryDCs,
Employee = employeeDC,
EmployeeAddressString = employeeAddressString,
LastSubstitutions = lastSubstitutionDCs,
Customer = customerDC,
CustomerContactInformation = customerContactInformationList,
EmployeeContactInformation = employeeContactInformationList,
Schools = schools,
VertretungsStatus = VertretungsStatus.KlientKrank,
Bemerkung = absenceTime.Notice,
2023-10-29 21:33:19 +01:00
AssistanceTime = assistanceTimeEntryDC,
BetreuungszeitenAmDatum = assistanceTimeEntryDC != null ? assistanceTimeEntryDC.ToString() : String.Empty,
AlleBetreuungszeiten = GetBetreuungszeitenString(assistanceTimeEntries)
};
AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, newVertretungsItem.Absencetime);
var vertretung = vertretungsObjekte.FirstOrDefault();
Employee substitutionEmployee = null;
if (vertretung?.VertretenderMitarbeiterOid != null)
{
if(GetIsSubstitutedCompletely(relevantAssistanceTimeEntries, vertretung, dateTime))
{
substitutionEmployee = DAOFactory.GenericDAO.LoadByID<Employee>(vertretung.VertretenderMitarbeiterOid.Value);
var substitutionEmployeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(substitutionEmployee);
2019-09-27 15:55:01 +02:00
newVertretungsItem.Vertreter = substitutionEmployeeDC;
2019-09-27 15:55:01 +02:00
2023-08-23 23:15:58 +02:00
newVertretungsItem.VertreterInfoString = GetEmployeeAddressInfo(substitutionEmployee);
2019-09-27 15:55:01 +02:00
newVertretungsItem.Vertretung = MapperFactory.VertretungDC_Vertretung.MapToNewDC(vertretung);
newVertretungsItem.Bemerkung = vertretung.Notice;
2019-09-27 15:55:01 +02:00
newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungVorhanden;
}
}
2019-08-16 18:03:30 +02:00
2020-04-08 14:25:01 +02:00
// TODO: Hat die vertretungsItemListe Objekte mit dem Klienten im selben Zeitfenster?
2024-02-01 01:06:46 +01:00
foreach (var employeeVertretungsItem in employeeVertretungsItems.Where(w => w.Customer.Equals(customerDC) && w.Employee != null && w.Employee.EmployeeOid == employeeDC.EmployeeOid))
2020-04-08 14:25:01 +02:00
{
if (employeeVertretungsItem.Datum == dateTime)
{
if (IsAbsenceTimeInAssistanceTime(dateTime, employeeVertretungsItem.AssistanceTime, absenceTime))
{
employeeVertretungsItemsGuids2Ignore.AddIfNotIn(employeeVertretungsItem.Id);
2020-04-15 18:22:10 +02:00
if (newVertretungsItem.VertretungsStatus == VertretungsStatus.KlientKrank)
{
newVertretungsItem.VertretungsStatus = VertretungsStatus.KlientUndMitarbeiterKrank;
}
else
{
newVertretungsItem.VertretungsStatus =
VertretungsStatus.MaKrankKeineVertretungBenoetigt;
}
2020-04-08 14:25:01 +02:00
}
}
}
//prüfe auch noch, ob zugeordneter Employee krank ist
if (newVertretungsItem.VertretungsStatus == VertretungsStatus.KlientKrank)
{
if (newVertretungsItem.Employee != null)
{
if (employeeAbsenceTimes.Any(a => a.EmployeeOid == newVertretungsItem.Employee.EmployeeOid))
{
newVertretungsItem.VertretungsStatus = VertretungsStatus.KlientUndMitarbeiterKrank;
}
}
//newVertretungsItem.VertretungsStatus = VertretungsStatus.KlientUndMitarbeiterKrank;
}
SetSubstitutionColor(newVertretungsItem);
2019-08-16 18:03:30 +02:00
Organisation schule = null;
var c2o = customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value))).FirstOrDefault();
if (c2o != null)
{
schule = c2o.Organisation;
}
SetMailInfos(newVertretungsItem, customer, employee, substitutionEmployee, schule);
2020-04-08 14:25:01 +02:00
SetSBDInformation(newVertretungsItem, customer, employee, false);
SetTeamleitung(employee, newVertretungsItem);
customerVertretungsItems.Add(newVertretungsItem);
}
}
dateTime = dateTime.AddDays(1);
}
}
}
2019-12-19 14:27:03 +01:00
else // Kein Betreuer, also auch keine Vertretungen, sondern nur Abwesenheiten
{
var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, null, absenceTime, start, end);
var dateTime = start;
while (dateTime <= end)
2018-05-21 16:58:56 +02:00
{
if (LiegtImZeitraum(dateTime, absenceTime))
2018-05-21 16:58:56 +02:00
{
var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTime, entry, absenceTime)).ToList();
var assistanceTimeEntryDCs = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDCs(relevantAssistanceTimeEntries);
var newVertretungsItem = new VertretungsItemDC
2018-05-21 16:58:56 +02:00
{
Id = Guid.NewGuid(),
Datum = dateTime,
Absencetime = absenceTimeDC,
Arbeitszeiten = assistanceTimeEntryDCs,
Customer = customerDC,
CustomerContactInformation = customerContactInformationList,
Schools = schools,
2020-10-01 10:32:31 +02:00
VertretungsStatus = VertretungsStatus.KlientUndMitarbeiterKrank,
Bemerkung = absenceTime.Notice
};
2018-10-08 11:57:16 +02:00
SetzeSchule(newVertretungsItem, customer);
2019-09-27 15:55:01 +02:00
AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, absenceTimeDC);
2019-09-27 15:55:01 +02:00
SetSubstitutionColor(newVertretungsItem);
2018-10-08 11:57:16 +02:00
SetSBDInformation(newVertretungsItem, customer, null, false);
customerVertretungsItems.Add(newVertretungsItem);
2018-05-21 16:58:56 +02:00
}
dateTime = dateTime.AddDays(1);
2018-05-21 16:58:56 +02:00
}
}
}
vertretungsItems.AddRange(employeeVertretungsItems.Where(vertretungsItem => !employeeVertretungsItemsGuids2Ignore.Contains(vertretungsItem.Id)));
2020-04-15 18:22:10 +02:00
//prüfen, ob Mitarbeiter bereits als Vertretung eingesetzt ist:
2020-10-01 10:32:31 +02:00
//customerVertretungsItems = customerVertretungsItems.Where(c => c.Employee != null && c.Equals( !employeeVertretungsItems.Where(ei => ei.Vertreter != null).Select(ei2 => ei2.Vertreter.EmployeeOid).Contains(c.Employee.EmployeeOid))).ToList();
var newList = new List<VertretungsItemDC>();
foreach (var ci in customerVertretungsItems)
{
if (ci.Employee == null)
{
newList.Add(ci);
}
else
{
bool istAlsVertreterEingesetzt = false;
foreach (var ei in employeeVertretungsItems)
{
if (ei.Vertreter != null && ei.Vertreter.EmployeeOid == ci.Employee.EmployeeOid)
{
istAlsVertreterEingesetzt = true;
}
}
if (!istAlsVertreterEingesetzt)
{
newList.Add(ci);
}
}
}
//customerVertretungsItems = customerVertretungsItems.Where(c => c.Employee == null || !employeeVertretungsItems.Where(ei => ei.Vertreter != null).Select(ei2 => ei2.Vertreter.EmployeeOid).Contains(c.Employee.EmployeeOid)).ToList();
customerVertretungsItems = newList;
vertretungsItems.AddRange(customerVertretungsItems);
SetSubstitutingEmployee2CustomersRelation(vertretungsItems);
2018-05-21 16:58:56 +02:00
2020-10-01 10:32:31 +02:00
vertretungsItems = RemoveDuplicates(vertretungsItems);
return vertretungsItems;
}
//Erstellt Vertretungsitems für abwesenden MA oder MA, der als Vertreter bei einem anderen Klienten eingesetzt ist, so dass sein eigener Klient betreut werden muss
public virtual List<VertretungsItemDC> CreateVertretungsItemsForAbsenceEmployee(Employee employee, List<Vertretung> vorhandeneVertretungen, AbsenceTime absenceTime, DateTime start, DateTime end)
{
var result = new List<VertretungsItemDC>();
var employeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(employee);
var employeeAddressString = GetEmployeeAddressInfo(employee);
var employeeContactInformationList = LoadContactInformationForEntity<Employee>(employee.Person);
AbsenceTimeDC absenceTimeDC = null;
if (absenceTime != null)
{
absenceTimeDC = MapperFactory.AbsenceTimeDC_AbsenceTime.MapToNewDC(absenceTime);
}
//if (employee.Person.LastNameFirstName.Contains("Platzhalter"))
//{
// int test = 0;
//}
foreach (var employee2Customer in employee.Employee2CustomerList.Where(e2C => e2C.IsActive == ActivationTypeId.Active && (!e2C.StartDate.HasValue || e2C.StartDate.Value.Date <= end.Date) && (!e2C.EndDate.HasValue || e2C.EndDate.Value.Date >= start.Date)))
{
foreach (var valueListEntry2Object in employee2Customer.ValueList.Where(entry2Object => entry2Object.Entry.Type == ValueListEntryType.StaffRoleType))
{
var customer = employee2Customer.Customer;
var customerDC = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
var customerContactInformationList = LoadContactInformationForEntity<Customer>(customer.Person);
var c2oList = customer.Customer2OrganisationList.Where(customer2Organisation => customer2Organisation.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value))).ToList();
var schools = MapperFactory.CustomerOrganisationRelationDC_Customer2Organisation.MapToNewDCs(c2oList);
Organisation schule = null;
if (c2oList.Count > 0)
{
schule = c2oList[0].Organisation;
}
var assistanceTimeEntries = GetAssistanceTimesForCustomer(customer, employee, absenceTime, start, end);
var dateTime = start;
while (dateTime <= end)
{
if (absenceTime == null || LiegtImZeitraum(dateTime, absenceTime))
{
var dateTimeCopy = dateTime;
var relevantAssistanceTimeEntries = assistanceTimeEntries.Where(entry => IsAbsenceTimeInAssistanceTime(dateTimeCopy, entry, absenceTime));
foreach (var assistanceTimeEntry in relevantAssistanceTimeEntries)
{
var vertretungsObjekte = vorhandeneVertretungen.Where(w => w.EmployeeOid.HasValue && w.EmployeeOid.Equals(employee.Oid) && w.CustomerOid.HasValue && w.CustomerOid.Equals(customer.Oid) && w.VertretungsZeitraumVon.Date <= dateTimeCopy && w.VertretungsZeitraumBis.Date >= dateTimeCopy);
var lastSubstitutions = DAOFactory.SearchDAO.GetLastSubstitutionItems(employee.Oid.Value, 3);
var lastSubstitutionDCs = MapperFactory.VertretungDC_Vertretung.MapToNewDCs(lastSubstitutions);
var assistanceTimeEntryDC = MapperFactory.ArbeitszeitEintragDC_ArbeitszeitEintrag.MapToNewDC(assistanceTimeEntry);
var newVertretungsItem = new VertretungsItemDC
{
Id = Guid.NewGuid(),
Datum = dateTime,
Absencetime = absenceTimeDC,
AssistanceTime = assistanceTimeEntryDC,
BetreuungszeitenAmDatum = assistanceTimeEntryDC != null ? assistanceTimeEntryDC.ToString() : String.Empty,
AlleBetreuungszeiten = GetBetreuungszeitenString(assistanceTimeEntries),
Employee = employeeDC,
EmployeeAddressString = employeeAddressString,
LastSubstitutions = lastSubstitutionDCs,
Customer = customerDC,
CustomerContactInformation = customerContactInformationList,
EmployeeContactInformation = employeeContactInformationList,
Schools = schools,
Bemerkung = absenceTime?.Notice
};
if (newVertretungsItem.Absencetime != null)
{
AddKrankheitsZeitraumAndMeldungToItem(newVertretungsItem, newVertretungsItem.Absencetime);
}
DateTime absenceTimeStartDate = newVertretungsItem.Datum;
if (absenceTime != null)
{
absenceTimeStartDate = absenceTime.Start.Value;
}
GetVertretungsstatus(newVertretungsItem, dateTime, absenceTimeStartDate, customer);
if (absenceTime == null && newVertretungsItem.VertretungsStatus == VertretungsStatus.MaKrankKeineVertretungBenoetigt)
{
newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungBenoetigt;
}
//Es kann in Ausnahmen mehrere Vertretungen für den gleichen erkrankten MA geben. Z.B. wenn die erste Vertretung selber erkrankt und eine zweite ausgewählt wird.
Vertretung vertretung = null;
Employee vertreter = null;
foreach (var vo in vertretungsObjekte)
{
if (vo.VertretenderMitarbeiterOid.HasValue)
{
vertreter = DAOFactory.GenericDAO.LoadByID<Employee>(vo.VertretenderMitarbeiterOid.Value);
if (!IstAbwesend(vertreter.AbsenceTimes, dateTime))
{
vertretung = vo;
}
}
}
if (vertretung?.VertretenderMitarbeiterOid != null)
{
if (GetIsSubstitutedCompletely(new List<ArbeitszeitEintrag> { assistanceTimeEntry }, vertretung, dateTime))
{
if (vertreter == null)
{
vertreter = DAOFactory.GenericDAO.LoadByID<Employee>(vertretung.VertretenderMitarbeiterOid.Value);
}
var substitutionEmployeeDC = MapperFactory.CompactEmployeeDC_Employee.MapToNewDC(vertreter);
newVertretungsItem.Vertreter = substitutionEmployeeDC;
newVertretungsItem.VertreterInfoString = GetEmployeeAddressInfo(vertreter);
newVertretungsItem.Vertretung = MapperFactory.VertretungDC_Vertretung.MapToNewDC(vertretung);
newVertretungsItem.Bemerkung = vertretung.Notice;
newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungVorhanden;
//if (IstAbwesend(vertreter.AbsenceTimes, dateTime))
//{
// newVertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungBenoetigt;
// newVertretungsItem.Vertreter = null;
// newVertretungsItem.VertreterInfoString = null;
// newVertretungsItem.Vertretung = null;
//}
}
}
SetSubstitutionColor(newVertretungsItem);
SetSBDInformation(newVertretungsItem, customer, employee, true);
SetMailInfos(newVertretungsItem, customer, employee, vertreter, schule);
SetTeamleitung(employee, newVertretungsItem);
if (newVertretungsItem.Absencetime == null)
{
newVertretungsItem.Absencetime = new AbsenceTimeDC();
}
result.Add(newVertretungsItem);
}
}
dateTime = dateTime.AddDays(1);
}
}
}
return result;
}
private bool IstAbwesend(IList<AbsenceTime> absenceTimes, DateTime datum)
{
foreach (var at in absenceTimes)
{
if ((!at.Start.HasValue || at.Start.Value.Date <= datum) && (!at.End.HasValue || at.End.Value.Date >= datum))
{
return true;
}
}
return false;
}
2020-10-01 10:32:31 +02:00
private List<VertretungsItemDC> RemoveDuplicates(List<VertretungsItemDC> vertretungsItems)
{
var newList = new List<VertretungsItemDC>();
var keyDict = new Dictionary<string, bool>();
foreach (var ci in vertretungsItems)
{
if (ci.Customer != null && ci.Employee != null && ci.Absencetime != null &&
(ci.VertretungsStatus == VertretungsStatus.KlientUndMitarbeiterKrank ||
ci.VertretungsStatus == VertretungsStatus.MaKrankKeineVertretungBenoetigt ||
ci.VertretungsStatus == VertretungsStatus.MaKrankVertretungVorhanden))
{
String key = "";
if (ci.Vertretung != null &&
ci.Vertretung.VertretungsZeitraumVon.Hour == 0 &&
ci.Vertretung.VertretungsZeitraumVon.Minute == 0 &&
ci.Vertretung.VertretungsZeitraumBis.Hour == 23 &&
ci.Vertretung.VertretungsZeitraumBis.Minute == 59)
{
ci.Vertretung.VertretungsZeitraumBis = ci.Vertretung.VertretungsZeitraumBis.Date;
key = String.Format("{0}_{1}_{2:dd.MM.yyyy HH:mm} - {3:dd.MM.yyyy HH:mm}_{4}", ci.Customer.Oid, ci.Employee.EmployeeOid, ci.Vertretung.VertretungsZeitraumVon, ci.Vertretung.VertretungsZeitraumBis, ci.Absencetime.AbsenceTimeOid);
}
else
{
if (ci.Vertretung == null)
{
key = String.Format("{0}_{1}_{2}", ci.Customer.Oid, ci.Employee.EmployeeOid, ci.Absencetime.AbsenceTimeOid);
}
}
if (String.IsNullOrEmpty(key) || !keyDict.ContainsKey(key))
{
newList.Add(ci);
if (!String.IsNullOrEmpty(key))
{
keyDict.Add(key, true);
}
}
else
{
int test = 0;
}
}
else
{
newList.Add(ci);
}
}
return newList;
}
2023-06-07 09:45:20 +02:00
public virtual List<VertretungsItemDC> CreateVertretungsListe(DateTime start, DateTime end)
{
return CreateSubstitutions(start, end);
}
private static void SetSubstitutingEmployee2CustomersRelation(IEnumerable<VertretungsItemDC> vertretungsItems)
{
var vertreterZuKlient = new Dictionary<string, CompactCustomerDC>();
foreach (var item in vertretungsItems)
{
//Suche alle Vertreter für Klienten und merke diese
if (item.VertretungsStatus != VertretungsStatus.KlientKrank)
{
if (item.Vertreter != null && item.Customer != null)
2018-10-08 11:57:16 +02:00
{
var key = $"{item.Vertreter.EmployeeOid}_{item.Datum:dd.MM.yyyy}";
2018-05-21 16:58:56 +02:00
if (!vertreterZuKlient.ContainsKey(key))
2018-10-08 11:57:16 +02:00
{
vertreterZuKlient.Add(key, item.Customer);
2018-10-08 11:57:16 +02:00
}
}
}
2018-10-08 11:57:16 +02:00
if (item.MitarbeiterEinsatzBei == "???" && item.Employee != null)
{
item.MitarbeiterEinsatzBei = "";
2018-10-08 11:57:16 +02:00
var key = $"{item.Employee.EmployeeOid}_{item.Datum:dd.MM.yyyy}";
2018-10-08 11:57:16 +02:00
if (vertreterZuKlient.ContainsKey(key))
2018-10-08 11:57:16 +02:00
{
item.MitarbeiterEinsatzBei = $"{vertreterZuKlient[key].LastNameFirstName}";
2018-10-08 11:57:16 +02:00
}
}
}
}
2023-10-26 00:06:56 +02:00
2023-06-07 09:45:20 +02:00
public virtual void SetSBDInformation(VertretungsItemDC vertretungsItem, Customer customer, Employee employee, bool isEmployeeAbsenceTime)
{
2023-10-26 00:06:56 +02:00
if (customer != null)
{
vertretungsItem.CustomerPflege = customer.Pflege ? "Ja" : "Nein";
vertretungsItem.CustomerToilettengang = customer.Toilettengang ? "Ja" : "Nein";
vertretungsItem.CustomerAggressivitaet = customer.Aggressiv ? "Ja" : "Nein";
vertretungsItem.CustomerHygienebelehrung = customer.Hygienebelehrung ? "Ja" : "Nein";
vertretungsItem.CustomerSchutzstufe = customer.Schutzstufe;
}
vertretungsItem.EmployeePflege = employee == null ? "Nein" : employee.Pflege ? "Ja" : "Nein";
vertretungsItem.EmployeeToilettengang = employee == null ? "Nein" : employee.Toilettengang ? "Ja" : "Nein";
vertretungsItem.EmployeeAggressivitaet = employee == null ? "Nein" : employee.Aggressiv ? "Ja" : "Nein";
vertretungsItem.EmployeeHygienebelehrung = employee == null ? "Nein" : employee.Hygienebelehrung ? "Ja" : "Nein";
vertretungsItem.EmployeeSchutzstufe = employee?.Schutzstufe;
if (isEmployeeAbsenceTime)
{
2023-10-26 00:06:56 +02:00
if (customer != null)
{
2023-10-26 00:06:56 +02:00
vertretungsItem.Pflege = customer.Pflege ? "Ja" : "Nein";
vertretungsItem.Toilettengang = customer.Toilettengang ? "Ja" : "Nein";
vertretungsItem.Aggressiv = customer.Aggressiv ? "Ja" : "Nein";
if (customer.Person.Sex.HasValue)
{
vertretungsItem.Geschlecht = Utils.GetSexAbbrevation(customer.Person.Sex);
}
2018-05-21 16:58:56 +02:00
}
}
else
{
vertretungsItem.Pflege = employee == null ? "Nein" : employee.Pflege ? "Ja" : "Nein";
vertretungsItem.Toilettengang = employee == null ? "Nein" : employee.Toilettengang ? "Ja" : "Nein";
vertretungsItem.Aggressiv = employee == null ? "Nein" : employee.Aggressiv ? "Ja" : "Nein";
2018-05-21 16:58:56 +02:00
if (employee?.Person.Sex != null)
{
vertretungsItem.Geschlecht = Utils.GetSexAbbrevation(employee.Person.Sex);
}
vertretungsItem.MitarbeiterEinsatzBei = "???";
2018-05-21 16:58:56 +02:00
}
2023-04-20 00:53:02 +02:00
2023-05-02 14:24:26 +02:00
var customerToolTip = new StringBuilder();
var employeeToolTip = new StringBuilder();
var vertreterToolTip = new StringBuilder();
String customerName = "";
String employeeName = "";
String vertreterName = "";
if (vertretungsItem.Customer != null)
{
customerName = String.Format("{0} {1}", vertretungsItem.Customer.FirstName, vertretungsItem.Customer.LastName);
}
if (vertretungsItem.Employee != null)
{
employeeName = String.Format("{0} {1}", vertretungsItem.Employee.FirstName, vertretungsItem.Employee.LastName);
}
if (vertretungsItem.Vertreter != null)
{
vertreterName = String.Format("{0} {1}", vertretungsItem.Vertreter.FirstName, vertretungsItem.Vertreter.LastName);
}
String schoolString = "";
if (vertretungsItem.Schools != null)
{
foreach (var item in vertretungsItem.Schools)
{
if (schoolString.Length > 0)
{
schoolString += ", ";
}
schoolString += item.Organisation.Name;
2023-08-23 23:15:58 +02:00
if (!String.IsNullOrEmpty(item.Organisation.Street))
{
schoolString += "<LineBreak/>";
schoolString += item.Organisation.Street;
}
if (!String.IsNullOrEmpty(item.Organisation.PostalCode) || !String.IsNullOrEmpty(item.Organisation.Town))
{
schoolString += "<LineBreak/>";
schoolString += String.Format("{0} {1}", item.Organisation.PostalCode, item.Organisation.Town);
}
if (!String.IsNullOrEmpty(item.Customer2OrganisationNotice))
{
schoolString += "<LineBreak/>";
if (!item.Customer2OrganisationNotice.Contains("Klasse"))
{
schoolString += "Klasse ";
}
schoolString += item.Customer2OrganisationNotice;
}
2023-05-02 14:24:26 +02:00
}
}
customerToolTip.AppendLine("<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>");
employeeToolTip.AppendLine("<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>");
vertreterToolTip.AppendLine("<StackPanel xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation'>");
//Customer Tooltip
if (!String.IsNullOrEmpty(customerName))
{
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='{0}' />", customerName));
}
2023-08-23 23:15:58 +02:00
if (vertretungsItem.Customer != null)
2023-05-02 14:24:26 +02:00
{
2023-08-23 23:15:58 +02:00
customerToolTip.AppendLine(String.Format("<TextBlock Text='{0}' />", vertretungsItem.Customer.AddressString));
2023-05-02 14:24:26 +02:00
}
String contactString = "";
if (vertretungsItem.EmployeeContactInformation != null && vertretungsItem.EmployeeContactInformation.Count > 0)
{
foreach (var item in vertretungsItem.EmployeeContactInformation)
{
if (contactString.Length > 0)
{
contactString += "<LineBreak/>";
}
var typeAsString = string.Empty;
switch (item.ContactType)
{
case ContactType.business_Mail:
typeAsString = "E-Mail: ";
break;
case ContactType.business_Fax:
typeAsString = "Fax: ";
break;
case ContactType.business_Phone:
typeAsString = "Tel.: ";
break;
case ContactType.business_MobilePhone:
typeAsString = "Handynr.: ";
break;
}
contactString += typeAsString + item.ContactValue;
}
}
if (!String.IsNullOrEmpty(contactString))
{
customerToolTip.AppendLine(String.Format("<Separator />"));
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Kontakt:' /> "));
customerToolTip.AppendLine(String.Format("<TextBlock>{0}</TextBlock>", contactString));
}
2023-08-23 23:15:58 +02:00
if (!String.IsNullOrEmpty(schoolString))
{
customerToolTip.AppendLine(String.Format("<Separator />"));
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Schule:' /> "));
customerToolTip.AppendLine(String.Format("<TextBlock>{0}</TextBlock>", schoolString));
}
2023-10-29 21:33:19 +01:00
String alleBetreuungszeiten = vertretungsItem.AlleBetreuungszeiten;
if (!String.IsNullOrEmpty(alleBetreuungszeiten))
{
alleBetreuungszeiten = alleBetreuungszeiten.Replace("\n", "<LineBreak/>");
customerToolTip.AppendLine(String.Format("<Separator />"));
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Betreuungszeiten:' /> "));
customerToolTip.AppendLine(String.Format("<TextBlock>{0}</TextBlock>", alleBetreuungszeiten));
}
2023-05-02 14:24:26 +02:00
var lastSubstitutions = string.Empty;
if (vertretungsItem.LastSubstitutions != null)
2023-05-02 14:24:26 +02:00
{
foreach (var item in vertretungsItem.LastSubstitutions)
2023-05-02 14:24:26 +02:00
{
if (lastSubstitutions.Length > 0)
{
lastSubstitutions += "<LineBreak/>";
}
2023-05-02 14:24:26 +02:00
var start = item.VertretungsZeitraumVon.Minute == 0 && item.VertretungsZeitraumVon.Hour == 0 ? item.VertretungsZeitraumVon.ToString("dd.MM.yyyy") : item.VertretungsZeitraumVon.ToString("dd.MM.yyyy HH:mm");
var end = item.VertretungsZeitraumBis.Minute == 0 && item.VertretungsZeitraumBis.Hour == 0 ? item.VertretungsZeitraumBis.ToString("dd.MM.yyyy") : item.VertretungsZeitraumBis.ToString("dd.MM.yyyy HH:mm");
2023-05-02 14:24:26 +02:00
lastSubstitutions += $"{start} - {end}";
}
2023-05-02 14:24:26 +02:00
}
if (!String.IsNullOrEmpty(lastSubstitutions))
{
customerToolTip.AppendLine(String.Format("<Separator />"));
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Letzte Vertretungen:' /> "));
customerToolTip.AppendLine(String.Format("<TextBlock>{0}</TextBlock>", lastSubstitutions));
}
var sbdStatus = string.Empty;
//if (vertretungsItem.Absencetime != null)
//{
2023-10-26 00:06:56 +02:00
if (customer != null)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (customer.Pflege)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
sbdStatus += "Benötigt Pflege";
2023-05-02 14:24:26 +02:00
}
2023-10-26 00:06:56 +02:00
if (customer.Toilettengang)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (sbdStatus.Length > 0)
{
sbdStatus += ", ";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
sbdStatus += "Toilettengang";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
if (customer.Aggressiv)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (sbdStatus.Length > 0)
{
sbdStatus += ", ";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
sbdStatus += "Aggressivität";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
if (customer.Hygienebelehrung)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (sbdStatus.Length > 0)
{
sbdStatus += ", ";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
sbdStatus += "Hygienebelehrung";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
if (!String.IsNullOrWhiteSpace(customer.Schutzstufe))
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (sbdStatus.Length > 0)
{
sbdStatus += ", ";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
sbdStatus += $"Schutzstufe {customer.Schutzstufe}";
}
2023-05-02 14:24:26 +02:00
2023-10-26 00:06:56 +02:00
// Vertretung gewünscht [ab x. Tag]
if (customer.SubstitutionNeed == SubstitutionNeed.SubstitutionWanted)
2023-05-02 14:24:26 +02:00
{
2023-10-26 00:06:56 +02:00
if (sbdStatus.Length > 0)
{
sbdStatus += "<LineBreak/>";
}
sbdStatus += "Vertretung gewünscht";
if (customer.AbWelchemKrankheitsTag > 0)
{
sbdStatus += $" ab {customer.AbWelchemKrankheitsTag}. Tag";
}
2023-05-02 14:24:26 +02:00
}
}
if (!String.IsNullOrEmpty(sbdStatus))
{
customerToolTip.AppendLine(String.Format("<Separator />"));
2023-08-23 23:15:58 +02:00
customerToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Weitere Informationen:' /> "));
2023-05-02 14:24:26 +02:00
customerToolTip.AppendLine(String.Format("<TextBlock>{0}</TextBlock>", sbdStatus));
}
//}
//else
//{
// if (EmployeePflege?.Equals("Ja") ?? false)
// {
// result += "Benötigt Pflege";
// }
// if (EmployeeToilettengang?.Equals("Ja") ?? false)
// {
// if (result.Length > 0)
// {
// result += ", ";
// }
// result += "Toilettengang";
// }
// if (EmployeeAggressivitaet?.Equals("Ja") ?? false)
// {
// if (result.Length > 0)
// {
// result += ", ";
// }
// result += "Aggressivität";
// }
// if (EmployeeHygienebelehrung?.Equals("Ja") ?? false)
// {
// if (result.Length > 0)
// {
// result += ", ";
// }
// result += "Hygienebelehrung";
// }
// if (string.IsNullOrWhiteSpace(EmployeeSchutzstufe) == false)
// {
// if (result.Length > 0)
// {
// result += ", ";
// }
// result += $"Schutzstufe {EmployeeSchutzstufe}";
// }
////}
2023-08-23 23:15:58 +02:00
2023-05-02 14:24:26 +02:00
// <Separator Visibility="{Binding Path=Row.SchulbegleitenderDienstString, Converter={StaticResource StringLengthVisibilityConverter}}" />
// <TextBlock FontWeight="Bold" Text="Schulbegleitender Dienst:" Visibility="{Binding Path=Row.SchulbegleitenderDienstString, Converter={StaticResource StringLengthVisibilityConverter}}" />
// <TextBlock Text="{Binding Row.SchulbegleitenderDienstString}" Visibility="{Binding Path=Text, Converter={StaticResource StringLengthVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
// <Separator Visibility="{Binding Row.EmployeeAddressString, Converter={StaticResource StringLengthVisibilityConverter}}" />
// <TextBlock FontWeight="Bold" Text="{markup:Translate Mitarbeiter/in:}" Visibility="{Binding Row.EmployeeAddressString, Converter={StaticResource StringLengthVisibilityConverter}}" />
// <TextBlock Text="{Binding Row.EmployeeAddressString}" Visibility="{Binding Path=Text, Converter={StaticResource StringLengthVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
//</StackPanel>
//Employee Tooltip
if (!String.IsNullOrEmpty(employeeName))
{
employeeToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='{0}' />", employeeName));
}
//if (!String.IsNullOrEmpty(schoolString))
//{
// employeeToolTip.AppendLine(String.Format("<Separator />"));
// employeeToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Schule:' /> "));
// employeeToolTip.AppendLine(String.Format("<TextBlock Text='{0}' />", schoolString));
//}
2023-04-20 00:53:02 +02:00
if (vertretungsItem.Employee != null)
{
2023-05-02 14:24:26 +02:00
employeeToolTip.AppendLine(String.Format("<Separator />"));
employeeToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Wohnort:' /> "));
employeeToolTip.AppendLine(String.Format("<TextBlock Text='{0}' />", vertretungsItem.Employee.DetailDescription));
}
//Vertreter Tooltip
if (!String.IsNullOrEmpty(vertreterName))
{
vertreterToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='{0}' />", vertreterName));
}
//if (!String.IsNullOrEmpty(schoolString))
//{
// vertreterToolTip.AppendLine(String.Format("<Separator />"));
// vertreterToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Schule:' /> "));
// vertreterToolTip.AppendLine(String.Format("<TextBlock Text='{0}' />", schoolString));
//}
if (vertretungsItem.Vertreter != null)
{
vertreterToolTip.AppendLine(String.Format("<Separator />"));
vertreterToolTip.AppendLine(String.Format("<TextBlock FontWeight='Bold' Text='Wohnort:' /> "));
vertreterToolTip.AppendLine(String.Format("<TextBlock Text='{0}' />", vertretungsItem.Vertreter.DetailDescription));
2023-04-20 00:53:02 +02:00
}
2023-05-02 14:24:26 +02:00
customerToolTip.AppendLine("</StackPanel>");
employeeToolTip.AppendLine("</StackPanel>");
vertreterToolTip.AppendLine("</StackPanel>");
// < TextBlock FontWeight='Bold' Text='{0}'/>
// <Separator />
// <TextBlock Text='{1}'/>
// </StackPanel>", text1, text2); //.Replace("'", "\"");
// //tt = @"<TextBlock FontWeight='Bold' Text='TESTSETSETESSETSET'/>";
vertretungsItem.CustomerToolTip = customerToolTip.ToString();
vertretungsItem.EmployeeToolTip = employeeToolTip.ToString();
vertretungsItem.VertreterToolTip = vertreterToolTip.ToString();
//< Separator Visibility = "{Binding Path=Row.SchoolString, Converter={StaticResource StringLengthVisibilityConverter}}" />
2023-04-20 00:53:02 +02:00
//< TextBlock FontWeight = "Bold" Text = "Schule1:" Visibility = "{Binding Path=Row.SchoolString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock Text = "{Binding Row.SchoolString}" Visibility = "{Binding Path=Text, Converter={StaticResource StringLengthVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
//< Separator Visibility = "{Binding Path=Row.Customer.AddressString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock FontWeight = "Bold" Text = "Wohnort:" Visibility = "{Binding Path=Row.Customer.AddressString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock Text = "{Binding Row.Customer.AddressString}" />
//< Separator Visibility = "{Binding Path=Row.CustomerContactInformationString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock FontWeight = "Bold" Text = "Kontakt:" Visibility = "{Binding Path=Row.CustomerContactInformationString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock Text = "{Binding Row.CustomerContactInformationString}" Visibility = "{Binding Path=Text, Converter={StaticResource StringLengthVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
//< Separator Visibility = "{Binding Path=Row.SchulbegleitenderDienstString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock FontWeight = "Bold" Text = "Schulbegleitender Dienst:" Visibility = "{Binding Path=Row.SchulbegleitenderDienstString, Converter={StaticResource StringLengthVisibilityConverter}}" />
//< TextBlock Text = "{Binding Row.SchulbegleitenderDienstString}" Visibility = "{Binding Path=Text, Converter={StaticResource StringLengthVisibilityConverter}, RelativeSource={RelativeSource Self}}" />
}
2018-05-21 16:58:56 +02:00
2023-10-29 21:33:19 +01:00
private string GetBetreuungszeitenString(List<ArbeitszeitEintrag> assistanceTimeEntries)
{
Dictionary<AppointmentDayOfWeek, String> tag2Eintrag = new Dictionary<AppointmentDayOfWeek, String>();
foreach (var item in assistanceTimeEntries)
{
if (!tag2Eintrag.ContainsKey(item.Tag))
{
tag2Eintrag.Add(item.Tag, String.Format("{0}: {1}-{2}", item.Tag.ToString().Substring(0, 2), item.UhrzeitVon, item.UhrzeitBis));
}
else
{
tag2Eintrag[item.Tag] += String.Format(", {0}-{1}", item.UhrzeitVon, item.UhrzeitBis);
}
}
String str = "";
foreach (var item in assistanceTimeEntries)
{
if (tag2Eintrag.ContainsKey(item.Tag))
{
if (str.Length > 0)
{
str += "\n";
}
str += tag2Eintrag[item.Tag];
tag2Eintrag.Remove(item.Tag);
}
}
return str;
}
2023-10-26 00:06:56 +02:00
public virtual void SetMailInfos(VertretungsItemDC vertretungsItem, Customer customer, Employee employee, Employee vertretung, Organisation school)
{
if (customer != null)
{
foreach (var c in customer.Person.Contacts)
{
if (c.Type == ContactType.private_Mail || c.Type == ContactType.business_Mail)
{
vertretungsItem.MailCustomer = new MailDC();
vertretungsItem.MailCustomer.Receiver = c.Value;
}
}
}
if (employee != null)
{
foreach (var c in employee.Person.Contacts)
{
if (c.Type == ContactType.private_Mail || c.Type == ContactType.business_Mail)
{
vertretungsItem.MailEmployee = new MailDC();
vertretungsItem.MailEmployee.Receiver = c.Value;
}
}
}
if (vertretung != null)
{
foreach (var c in vertretung.Person.Contacts)
{
if (c.Type == ContactType.private_Mail || c.Type == ContactType.business_Mail)
{
vertretungsItem.MailVertretung = new MailDC();
vertretungsItem.MailVertretung.Receiver = c.Value;
}
}
}
if (school != null)
{
foreach (var c in school.Contacts)
{
if (c.Type == ContactType.private_Mail || c.Type == ContactType.business_Mail)
{
vertretungsItem.MailSchule= new MailDC();
vertretungsItem.MailSchule.Receiver = c.Value;
}
}
}
}
2023-06-07 09:45:20 +02:00
public virtual void SetSubstitutionColor(VertretungsItemDC vertretungsItem)
{
switch (vertretungsItem.VertretungsStatus)
{
case VertretungsStatus.MaKrankVertretungBenoetigt:
vertretungsItem.KlientStatusColor = "#FF0000"; // Rot
break;
case VertretungsStatus.MaKrankKeineVertretungBenoetigt:
vertretungsItem.KlientStatusColor = "#7FFF7F"; // Grün
break;
2020-04-15 18:22:10 +02:00
case VertretungsStatus.KlientUndMitarbeiterKrank:
vertretungsItem.KlientStatusColor = "#7FFF7F"; // Grün
break;
case VertretungsStatus.MaKrankVertretungVorhanden:
vertretungsItem.KlientStatusColor = "#7FFF7F"; // Grün
break;
case VertretungsStatus.KlientKrank:
vertretungsItem.KlientStatusColor = "#FFFFA5"; // Gelb
break;
}
2018-05-21 16:58:56 +02:00
}
2019-10-13 13:40:49 +02:00
private static void MigriereSubstitutionStatus(Customer customer)
{
if (customer != null)
{
if (customer.SubstitutionNeed == SubstitutionNeed.SubstitutionNeedUnset)
{
if (customer.VertretungDringendErforderlich)
{
customer.SubstitutionNeed = SubstitutionNeed.SubstitutionNeeded;
}
else
{
customer.SubstitutionNeed = customer.VertretungGewuenscht ? SubstitutionNeed.SubstitutionWanted : SubstitutionNeed.NoSubstitutionWanted;
2019-10-13 13:40:49 +02:00
}
}
else
{
customer.SubstitutionNeed = customer.SubstitutionNeed;
}
}
}
2023-06-07 09:45:20 +02:00
public virtual void SetTeamleitung(BeWoEntityBase employee, VertretungsItemDC item)
2018-10-08 11:57:16 +02:00
{
if (employee.Oid == null)
{
return;
}
var sb = new StringBuilder();
var teams = DAOFactory.SearchDAO.FindTeamsOfEmployee(employee.Oid.Value);
2018-10-08 11:57:16 +02:00
foreach (var team in teams)
{
if (team.Leader != null)
{
if (sb.Length > 0)
{
sb.Append(", ");
}
sb.Append(team.Leader.Person.FirstNameLastName);
}
}
item.Teamleitung = sb.ToString();
}
2023-06-07 09:45:20 +02:00
public virtual void SetzeSchule(VertretungsItemDC newItem, Customer customer)
2018-05-21 16:58:56 +02:00
{
2018-10-08 11:57:16 +02:00
if (customer != null)
2018-05-21 16:58:56 +02:00
{
foreach (var customer2Organisation in customer.Customer2OrganisationList)
2018-05-21 16:58:56 +02:00
{
foreach (var valueListEntry2Object in customer2Organisation.ValueList)
2018-05-21 16:58:56 +02:00
{
2023-08-23 23:15:58 +02:00
if (valueListEntry2Object.Entry.Value != null && IstSchule(valueListEntry2Object.Entry.Value))
2018-05-21 16:58:56 +02:00
{
newItem.Schule = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC(customer2Organisation.Organisation);
if (customer2Organisation.Organisation.Address != null)
2018-10-08 11:57:16 +02:00
{
newItem.Schule.Street = customer2Organisation.Organisation.Address.Street;
newItem.Schule.PostalCode = customer2Organisation.Organisation.Address.PostalCode;
newItem.Schule.Town = customer2Organisation.Organisation.Address.Town;
2018-10-08 11:57:16 +02:00
}
2018-05-21 16:58:56 +02:00
}
}
}
}
}
2023-08-23 23:15:58 +02:00
public virtual bool IstSchule(String name)
{
if (!String.IsNullOrEmpty(name))
{
return name.ToLower().Contains("schule") || name.ToLower().Contains("kindergarten");
}
return false;
}
private static bool LiegtImZeitraum(DateTime dateTime, AbsenceTime absenceTime)
2018-05-21 16:58:56 +02:00
{
return absenceTime.Start < dateTime.Date.AddDays(1) && absenceTime.End >= dateTime.Date;
2018-05-21 16:58:56 +02:00
}
2023-06-07 09:45:20 +02:00
public virtual void AddKrankheitsZeitraumAndMeldungToItem(VertretungsItemDC item, AbsenceTimeDC absenceTime)
2018-05-21 16:58:56 +02:00
{
if (!absenceTime.Start.HasValue || !absenceTime.End.HasValue)
2018-05-21 16:58:56 +02:00
{
item.Krankheitszeitraum = absenceTime.Start.HasValue ? absenceTime.Start.Value.ToString("dd.MM.yyyy") : "Unbekannt";
2018-05-21 16:58:56 +02:00
item.Krankheitszeitraum += " - ";
if (absenceTime.End.HasValue)
2018-05-21 16:58:56 +02:00
{
item.Krankheitszeitraum += absenceTime.End.Value.ToString("dd.MM.yyyy");
2018-05-21 16:58:56 +02:00
}
else
{
item.Krankheitszeitraum += "Unbekannt";
}
}
else
{
if (absenceTime.Start.Value.Date != absenceTime.End.Value.Date)
2018-05-21 16:58:56 +02:00
{
if (absenceTime.Start.Value.Hour == 0 && absenceTime.Start.Value.Minute == 0 &&
absenceTime.End.Value.Hour == 0 && absenceTime.End.Value.Minute == 0)
2018-05-21 16:58:56 +02:00
{
item.Krankheitszeitraum = absenceTime.Start.Value.ToString("dd.MM.yyyy") + " - " + absenceTime.End.Value.ToString("dd.MM.yyyy");
2018-05-21 16:58:56 +02:00
}
else
{
item.Krankheitszeitraum = absenceTime.Start.Value.ToString("dd.MM.yyyy HH:mm") + " - " + absenceTime.End.Value.ToString("dd.MM.yyyy HH:mm");
2018-05-21 16:58:56 +02:00
}
}
else
{
if (absenceTime.Start.Value.Hour == 0 && absenceTime.Start.Value.Minute == 0 &&
absenceTime.End.Value.Hour == 0 && absenceTime.End.Value.Minute == 0)
2018-05-21 16:58:56 +02:00
{
item.Krankheitszeitraum = absenceTime.Start.Value.ToString("dd.MM.yyyy");
2018-05-21 16:58:56 +02:00
}
else
{
item.Krankheitszeitraum = absenceTime.Start.Value.ToString("dd.MM.yyyy HH:mm") + " - " + absenceTime.End.Value.ToString("HH:mm");
2018-05-21 16:58:56 +02:00
}
}
}
if (absenceTime.KrankheitsMeldung != null)
{
item.Krankheitsmeldung = absenceTime.KrankheitsMeldung.Value;
}
else if (absenceTime.Start.HasValue)
{
item.Krankheitsmeldung = absenceTime.Start.Value;
}
2018-05-21 16:58:56 +02:00
}
2023-06-07 09:45:20 +02:00
public virtual bool GetIsSubstitutedCompletely(IEnumerable<ArbeitszeitEintrag> assistanceTimes, Vertretung substitution, DateTime dateTime)
2019-09-27 15:55:01 +02:00
{
var isSubstituted = true;
foreach (var assistanceTime in assistanceTimes)
2019-09-27 15:55:01 +02:00
{
var assistanceDateTimes = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, dateTime);
2019-10-13 13:40:49 +02:00
if (substitution.VertretungsZeitraumBis.Hour == 0 && substitution.VertretungsZeitraumBis.Minute == 0)
{
substitution.VertretungsZeitraumBis = substitution.VertretungsZeitraumBis.AddDays(1).AddTicks(-1);
}
2019-09-27 15:55:01 +02:00
isSubstituted = assistanceDateTimes.Start.AreInBetweenDates(assistanceDateTimes.End, substitution.VertretungsZeitraumVon, substitution.VertretungsZeitraumBis);
if (!isSubstituted)
2019-09-27 15:55:01 +02:00
{
break;
}
}
return isSubstituted;
}
2023-06-07 09:45:20 +02:00
public virtual void GetVertretungsstatus(VertretungsItemDC vertretungsItem, DateTime dateTime, DateTime absenceTimeStartDate, Customer customer)
2019-09-27 15:55:01 +02:00
{
2019-10-13 13:40:49 +02:00
MigriereSubstitutionStatus(customer);
2019-09-27 15:55:01 +02:00
if (customer.SubstitutionNeed == SubstitutionNeed.SubstitutionNeeded)
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankVertretungBenoetigt;
vertretungsItem.Dringlichkeit = "Dringend";
vertretungsItem.DringlichkeitColor = "#FF0000"; // rot
2020-04-15 18:22:10 +02:00
}
else if (customer.SubstitutionNeed == SubstitutionNeed.SubstitutionWanted)
2019-09-27 15:55:01 +02:00
{
vertretungsItem.Dringlichkeit = "Möglichst";
vertretungsItem.DringlichkeitColor = "#F3D04F"; // Senfgelb
2019-09-27 15:55:01 +02:00
}
2020-04-15 18:22:10 +02:00
else if (customer.SubstitutionNeed == SubstitutionNeed.NoSubstitutionWanted)
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankKeineVertretungBenoetigt;
vertretungsItem.Dringlichkeit = "Kein Vertretungsbedarf";
vertretungsItem.DringlichkeitColor = "#FFFFFF"; // weiß
}
2019-09-27 15:55:01 +02:00
if (customer.AbWelchemKrankheitsTag > 1 && dateTime < absenceTimeStartDate.AddDays(customer.AbWelchemKrankheitsTag - 1))
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankKeineVertretungBenoetigt;
vertretungsItem.Dringlichkeit = $"Vertretung erst ab dem {customer.AbWelchemKrankheitsTag}.Tag benötigt";
vertretungsItem.DringlichkeitColor = "#FFFFFF"; // weiß
2019-09-27 15:55:01 +02:00
}
2019-12-12 17:31:50 +01:00
if (customer.AbWelchemKrankheitsTag <= 1 && customer.SubstitutionNeed != SubstitutionNeed.SubstitutionWanted && customer.SubstitutionNeed != SubstitutionNeed.SubstitutionNeeded)
2019-09-27 15:55:01 +02:00
{
vertretungsItem.VertretungsStatus = VertretungsStatus.MaKrankKeineVertretungBenoetigt;
}
}
2023-08-23 23:15:58 +02:00
public virtual string GetEmployeeAddressInfo(Employee employee)
2019-09-27 15:55:01 +02:00
{
var result = string.Empty;
var address = employee.Person.Address;
if (address != null)
{
var addressInfo = string.Empty;
addressInfo += employee.Person.LastNameFirstName;
if (!string.IsNullOrWhiteSpace(address.Street))
{
if (addressInfo.Length > 0)
{
addressInfo += "\n\n";
}
addressInfo += address.Street;
}
if (!string.IsNullOrWhiteSpace(address.PostalCode))
{
if (addressInfo.Length > 0)
{
addressInfo += "\n";
}
addressInfo += address.PostalCode;
}
if (!string.IsNullOrWhiteSpace(address.Town))
{
if (addressInfo.Length > 0)
{
addressInfo += " ";
}
addressInfo += address.Town;
}
result = addressInfo;
}
return result;
}
2023-06-07 09:45:20 +02:00
public virtual bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintrag assistanceTime, AbsenceTime absenceTime)
{
if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag))
{
return false;
}
if (absenceTime == null)
{
return true;
}
var assistanceTimeDates = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
var absenceTimeEnd = absenceTime.End;
2020-04-08 14:25:01 +02:00
if (absenceTimeEnd.HasValue && absenceTimeEnd.Value.Hour == 0 && absenceTimeEnd.Value.Minute == 0)
{
absenceTimeEnd = absenceTimeEnd.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
}
return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
}
2023-06-07 09:45:20 +02:00
public virtual bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
{
if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag) || absenceTime.Start == null)
{
return false;
}
var assistanceTimeDates = DateTimeUtils.GetAssistanceTimeComparisonDateTime(assistanceTime.UhrzeitVon, assistanceTime.UhrzeitBis, currentDate);
var absenceTimeEnd = absenceTime.End;
//if (absenceTimeEnd.HasValue && absenceTime.Start.Value.Equals(absenceTimeEnd.Value))
//{
// absenceTimeEnd = absenceTimeEnd.Value.AddHours(23).AddMinutes(59).AddSeconds(59);
//}
if (absenceTimeEnd.HasValue && absenceTimeEnd.Value.Hour == 0 && absenceTimeEnd.Value.Minute == 0 && absenceTimeEnd.Value.Second == 0)
{
absenceTimeEnd = absenceTimeEnd.Value.Date.AddHours(23).AddMinutes(59).AddSeconds(59);
}
return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
}
2023-06-07 09:45:20 +02:00
public virtual List<ArbeitszeitEintrag> GetAssistanceTimesForCustomer(Customer customer, Employee employee, AbsenceTime absenceTime, DateTime start, DateTime end)
{
var assistanceTimeEntries = new List<ArbeitszeitEintrag>();
var allSchoolAssistanceTimes = new List<Arbeitszeit>();
var allCustomerAssistanceTimes = new List<Arbeitszeit>();
var schoolAssistanceTimes = new List<Arbeitszeit>();
var customerAssistanceTimes = new List<Arbeitszeit>();
2023-08-23 23:15:58 +02:00
var hasSchoolAssistanceTimes = customer.Customer2OrganisationList.Any(a => a.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value)));
if (hasSchoolAssistanceTimes)
{
2023-08-23 23:15:58 +02:00
var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value)));
if (school != null)
{
allSchoolAssistanceTimes.AddRange(school.Organisation.Arbeitszeiten);
}
}
var hasAssistanceTimes = customer.Arbeitszeiten?.Count > 0;
if (hasAssistanceTimes)
{
allCustomerAssistanceTimes.AddRange(customer.Arbeitszeiten);
}
var dateTime = start;
while (dateTime <= end)
{
if (absenceTime == null || LiegtImZeitraum(dateTime, absenceTime))
{
customerAssistanceTimes.AddRange(allCustomerAssistanceTimes.Where(w => IsArbeitszeitValid(w, dateTime)));
schoolAssistanceTimes.AddRange(allSchoolAssistanceTimes.Where(w => IsArbeitszeitValid(w, dateTime)));
}
dateTime = dateTime.AddDays(1);
}
if (customerAssistanceTimes.Count > 0)
{
customerAssistanceTimes.DoForEach(assistanceTime => assistanceTimeEntries.AddRange(assistanceTime.ArbeitszeitEintraege.Where(entry => entry.Employee == null || entry.Employee.Equals(employee))));
}
else
{
schoolAssistanceTimes.DoForEach(assistanceTime => assistanceTimeEntries.AddRange(assistanceTime.ArbeitszeitEintraege.Where(entry => entry.Employee == null || entry.Employee.Equals(employee))));
}
return assistanceTimeEntries;
}
2023-06-07 09:45:20 +02:00
public virtual bool IsArbeitszeitValid(Arbeitszeit arbeitszeit, DateTime time)
{
if (arbeitszeit.GueltigVon == null && arbeitszeit.GueltigBis == null)
{
return true;
}
if (arbeitszeit.GueltigVon.HasValue && arbeitszeit.GueltigBis.HasValue)
{
return time.InBetween(arbeitszeit.GueltigVon.Value, arbeitszeit.GueltigBis.Value, true);
}
if (arbeitszeit.GueltigVon == null && arbeitszeit.GueltigBis.HasValue)
{
return time <= arbeitszeit.GueltigBis;
}
if (arbeitszeit.GueltigBis == null)
{
return time >= arbeitszeit.GueltigVon;
}
return false;
}
2023-06-07 09:45:20 +02:00
public virtual List<Arbeitszeit> GetSchoolAssistanceTimes(Customer customer, DateTime start, DateTime end, AbsenceTime absenceTime)
{
var allSchoolAssistanceTimes = new List<Arbeitszeit>();
var schoolAssistanceTimes = new List<Arbeitszeit>();
2023-08-23 23:15:58 +02:00
var hasSchoolAssistanceTimes = customer.Customer2OrganisationList.Any(a => a.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value)));
if (hasSchoolAssistanceTimes)
{
2023-08-23 23:15:58 +02:00
var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value)));
if (school != null)
{
allSchoolAssistanceTimes.AddRange(school.Organisation.Arbeitszeiten);
}
}
var dateTime = start;
while (dateTime <= end)
{
if (LiegtImZeitraum(dateTime, absenceTime))
{
schoolAssistanceTimes.AddRange(allSchoolAssistanceTimes.Where(w => IsArbeitszeitValid(w, dateTime)));
}
dateTime = dateTime.AddDays(1);
}
return schoolAssistanceTimes;
}
2023-06-07 09:45:20 +02:00
protected void GetDistanceForVertreterEmployees(long customerOid, ref List<CompactVertreterEmployeeDC> list, IList<Employee> employees)
{
var customer = DAOFactory.GenericDAO.LoadByID<Customer>(customerOid);
2023-08-23 23:15:58 +02:00
var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && IstSchule(b.Entry.Value)));
2023-06-07 09:45:20 +02:00
var origin = new Address[] { school.Person.Address };
var destinations = employees.Select(x => x.Person.Address).ToArray();
var matrix = AddressRouteManager.GetMatrix(origin, destinations);
Employee empl; AddressRoute route;
foreach (var employee in list)
{
empl = employees.FirstOrDefault(e => e.Person.Oid.Value == employee.PersonOid);
route = matrix.GetRoute(school.Person.Address, empl.Person.Address);
employee.AddressRoute = MapperFactory.AddressRouteDC_AddressRoute.MapToNewDC(route);
}
}
2023-08-23 23:15:58 +02:00
public virtual void SaveVertretung(VertretungDC vertretung)
{
var x = MapperFactory.VertretungDC_Vertretung.MapToNewEntity(vertretung);
DAOFactory.GenericDAO.Insert(x);
}
2018-05-21 16:58:56 +02:00
}
}