Files
BeWoPlaner/BeWo/SchulbegleitenderDienst/TagesVertretung.cs
2023-10-29 21:33:19 +01:00

275 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.ServiceProxy;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
namespace BeWo.SchulbegleitenderDienst
{
internal class TagesVertretung
{
private VertretungsSearchView _SearchView;
private KrankheitsZeitraumView _krankView;
public TagesansichtVM ErstelleTagesansichtVM(VertretungsItemDC vertretungsItem)
{
var tagesansichtVM = new TagesansichtVM
{
Absencetime = vertretungsItem.Absencetime,
Aggressiv = vertretungsItem.Aggressiv,
Arbeitszeiten = vertretungsItem.Arbeitszeiten,
Bemerkung = vertretungsItem.Bemerkung,
Customer = vertretungsItem.Customer,
CustomerAggressivitaet = vertretungsItem.CustomerAggressivitaet,
CustomerContactInformation = vertretungsItem.CustomerContactInformation,
CustomerHygienebelehrung = vertretungsItem.CustomerHygienebelehrung,
CustomerPflege = vertretungsItem.CustomerPflege,
CustomerSchutzstufe = vertretungsItem.CustomerSchutzstufe,
CustomerToilettengang = vertretungsItem.CustomerToilettengang,
Datum = vertretungsItem.Datum,
Dringlichkeit = vertretungsItem.Dringlichkeit,
DringlichkeitColor = vertretungsItem.DringlichkeitColor,
Employee = vertretungsItem.Employee,
EmployeeAggressivitaet = vertretungsItem.EmployeeAggressivitaet,
EmployeeContactInformation = vertretungsItem.EmployeeContactInformation,
EmployeeHygienebelehrung = vertretungsItem.EmployeeHygienebelehrung,
EmployeePflege = vertretungsItem.EmployeePflege,
EmployeeSchutzstufe = vertretungsItem.EmployeeSchutzstufe,
EmployeeToilettengang = vertretungsItem.EmployeeToilettengang,
Geschlecht = vertretungsItem.Geschlecht,
KlientStatusColor = vertretungsItem.KlientStatusColor,
Krankheitsmeldung = vertretungsItem.Krankheitsmeldung,
Krankheitszeitraum = vertretungsItem.Krankheitszeitraum,
LastSubstitutions = vertretungsItem.LastSubstitutions,
MitarbeiterEinsatzBei = vertretungsItem.MitarbeiterEinsatzBei,
MitarbeiterStatusColor = vertretungsItem.MitarbeiterStatusColor,
Pflege = vertretungsItem.Pflege,
Schools = vertretungsItem.Schools,
Schule = vertretungsItem.Schule,
Teamleitung = vertretungsItem.Teamleitung,
Toilettengang = vertretungsItem.Toilettengang,
Vertreter = vertretungsItem.Vertreter,
Vertretung = vertretungsItem.Vertretung,
VertretungsStatus = vertretungsItem.VertretungsStatus,
WochenansichtBemerkung = vertretungsItem.WochenansichtBemerkung,
VertreterInfoString = vertretungsItem.VertreterInfoString,
CustomerToolTip = vertretungsItem.CustomerToolTip,
EmployeeToolTip = vertretungsItem.EmployeeToolTip,
VertreterToolTip = vertretungsItem.VertreterToolTip,
EmployeeAddressString = vertretungsItem.EmployeeAddressString,
Id = vertretungsItem.Id,
AssistanceTimeEntry = vertretungsItem.AssistanceTime,
AlleBetreuungszeiten = vertretungsItem.AlleBetreuungszeiten,
BetreuungszeitenAmDatum = vertretungsItem.BetreuungszeitenAmDatum,
MailCustomer = vertretungsItem.MailCustomer,
MailEmployee = vertretungsItem.MailEmployee,
MailVertretung = vertretungsItem.MailVertretung,
MailSchule = vertretungsItem.MailSchule
};
if (vertretungsItem.Arbeitszeiten != null && vertretungsItem.Arbeitszeiten.Any())
{
tagesansichtVM.AssistanceTimes = vertretungsItem.Arbeitszeiten.ToList();
}
return tagesansichtVM;
}
private bool _VertretungAusgewaehlt = false;
public bool AddeNeueTagesVertretung(TagesansichtVM viewModel, DateTime dateTime)
{
_VertretungAusgewaehlt = false;
if (viewModel.Employee != null)
{
_SearchView = new VertretungsSearchView(dateTime, viewModel.Customer, viewModel, null, viewModel.Employee);
_SearchView.RaiseCustomEvent += Tagesansicht_RaiseCustomEvent;
_SearchView.ShowDialog();
}
return _VertretungAusgewaehlt;
}
private void Tagesansicht_RaiseCustomEvent(object sender, VertretungSelectedEventArgs e)
{
_VertretungAusgewaehlt = true;
UpdateMitarbeiterToVertretung(e.Employee, e.VertretungVon, e.VertretungBis, e.TagesItem);
_SearchView.Close();
}
private static void UpdateMitarbeiterToVertretung(CompactEmployeeDC employee, DateTime? startDate, DateTime? endDate, TagesansichtVM viewModel)
{
if (viewModel.Vertretung == null)
{
viewModel.Vertretung = new VertretungDC {Notice = viewModel.Bemerkung};
}
viewModel.Vertretung.VertretungsZeitraumVon = startDate ?? DateTime.Today.Date;
viewModel.Vertretung.VertretungsZeitraumBis = endDate ?? DateTime.Today.Date;
viewModel.Vertretung.VertretenderMitarbeiterOid = employee.EmployeeOid;
if (viewModel.Customer != null)
{
viewModel.Vertretung.CustomerOid = viewModel.Customer.CustomerOid;
}
if (viewModel.Employee != null)
{
viewModel.Vertretung.EmployeeOid = viewModel.Employee.EmployeeOid;
}
if (viewModel.Vertretung.VertretungOid.HasValue)
{
ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretung(viewModel.Vertretung));
}
else
{
ServiceFacade.DoOperationsServiceSync(s => s.CreateVertretung(viewModel.Vertretung));
}
}
public void DeleteKrankmeldung(TagesansichtVM viewModel, bool? shouldDeleteWholeAbsenceTime, DateTime selectedDate)
{
if(shouldDeleteWholeAbsenceTime == null)
{
return;
}
var absenceTime = viewModel.Absencetime;
if (absenceTime?.AbsenceTimeOid != null && absenceTime.AbsenceTimeVersion.HasValue)
{
var oid2Version = new Dictionary<long, long> {{ absenceTime.AbsenceTimeOid.Value, absenceTime.AbsenceTimeVersion.Value}};
if(shouldDeleteWholeAbsenceTime.Value)
{
ServiceFacade.DoOperationsServiceSync(s => s.DeactivateAbsenceTime(oid2Version));
DeleteVertretung(viewModel);
}
else if(absenceTime.Start.HasValue && absenceTime.End.HasValue && selectedDate.InBetween(absenceTime.Start.Value, absenceTime.End.Value, false))
{
var secondAbsenceTime = new AbsenceTimeDC
{
Start = selectedDate.AddDays(1),
End = absenceTime.End,
CustomerOid = absenceTime.CustomerOid,
EmployeeOid = absenceTime.EmployeeOid,
KrankheitsMeldung = absenceTime.KrankheitsMeldung,
Notice = absenceTime.Notice,
Reason = absenceTime.Reason
};
absenceTime.End = selectedDate.AddDays(-1);
if(secondAbsenceTime.CustomerOid.HasValue)
{
ServiceFacade.DoOperationsServiceSync(s => s.InsertNewCustomerAbsenceTime(secondAbsenceTime.CustomerOid.Value, secondAbsenceTime));
}
else if(secondAbsenceTime.EmployeeOid.HasValue)
{
ServiceFacade.DoOperationsServiceSync(s => s.InsertNewEmployeeAbsenceTime(secondAbsenceTime.EmployeeOid.Value, secondAbsenceTime));
}
if(viewModel.Vertretung != null)
{
ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretungAndAbsenceTime(viewModel.Vertretung, absenceTime));
}
else
{
ServiceFacade.DoOperationsServiceSync(s => s.UpdateAbsenceTime(absenceTime));
}
}
}
}
public void DeleteVertretung(TagesansichtVM viewModel)
{
if (viewModel.Vertretung != null)
{
viewModel.Vertretung.VertretenderMitarbeiterOid = null;
ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretung(viewModel.Vertretung));
}
}
public void KrankMeldeZeitraumBearbeiten(TagesansichtVM viewModel)
{
_krankView = new KrankheitsZeitraumView(viewModel);
_krankView.RaiseCustomEvent += NewWindowKrankzeitraum_RaiseCustomEvent;
_krankView.ShowDialog();
}
private void NewWindowKrankzeitraum_RaiseCustomEvent(object sender, KrankheitsEventArgs e)
{
UpdateKrankheitsZeitraum(e.TagesItem);
_krankView.Close();
}
private static void UpdateKrankheitsZeitraum(TagesansichtVM viewModel)
{
var absenceTimes = new List<AbsenceTimeDC> {viewModel.Absencetime};
ServiceFacade.DoCustomerServiceSync(s => s.UpdateAbsenceTimes(absenceTimes));
}
public void UpdateRowData(TagesansichtVM viewModel)
{
try
{
if(viewModel?.StartDate == null || viewModel.EndDate == null)
{
return;
}
if (viewModel.Vertretung == null)
{
viewModel.Absencetime.Notice = viewModel.Bemerkung;
}
else
{
viewModel.Vertretung.Notice = viewModel.Bemerkung;
}
var absenceTime = viewModel.Absencetime;
ServiceFacade.DoOperationsServiceSync(s => s.UpdateAbsenceTime(absenceTime));
if (viewModel.Vertretung != null)
{
viewModel.Vertretung.Notice = viewModel.Bemerkung;
viewModel.Vertretung.CustomerOid = viewModel.Customer?.CustomerOid;
viewModel.Vertretung.EmployeeOid = viewModel.Employee?.EmployeeOid;
if (viewModel.Vertretung.VertretungOid.HasValue)
{
ServiceFacade.DoOperationsServiceSync(s => s.UpdateVertretung(viewModel.Vertretung));
}
}
}
catch(Exception ex)
{
}
}
public void UpdateRows(List<TagesansichtVM> viewModels)
{
foreach(var viewModel in viewModels)
{
UpdateRowData(viewModel);
}
}
}
}