Files
BeWoPlaner/ReportImp/DomizielAnsbach/Service/CustomOperationService.cs
Christian c4b7703842 cb
2023-02-15 20:13:03 +01:00

128 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
namespace DomizielAnsbach.Service
{
public class CustomOperationService : OperationService
{
private ServiceDescription standardLeistung;
private ServiceDescription pausenLeistung;
public override String CreateDefaultCustomerServiceRecords(DateTime start, DateTime end, IList<long> cb2scOids)
{
var vs = PluginLoader.FindClass<VacationService>();
ReturnMessage = "";
DateTimeSpan span = new DateTimeSpan();
span.StartDateTime = start;
span.EndDateTime = end.AddDays(1).AddTicks(-1);
var c2sList = DAOFactory.GenericDAO.LoadByIDs<CostBearer2SupportConcept>(cb2scOids);
foreach (var c2s in c2sList)
{
SetzeStandardLeistungen(c2s);
if (standardLeistung == null)
{
return "Es konnte keine passende Leistung ermittelt werden.";
}
var srList = DAOFactory.SearchDAO.FindServiceRecordsInSpan(c2s.Oid.Value, span).ToList();
if (srList.Count == 0)
{
srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs);
DAOFactory.GenericDAO.Insert(srList);
ReturnMessage += String.Format("Es wurden {0} Einträge erstellt.", srList.Count);
}
else
{
var anzEintraege = 0;
foreach (var sr in srList)
{
if (standardLeistung != null)
{
if (sr.ServiceDescription.ServiceCategory == standardLeistung.ServiceCategory || sr.ServiceDescription.ServiceCategory == pausenLeistung.ServiceCategory)
anzEintraege += 1;
}
}
if (anzEintraege > 1)
{
ReturnMessage = String.Format("In dem ausgewählten Zeitraum sind bereits {0} Einträge vorhanden, daher können keine weiteren Einträge automatisch erstellt werden.", srList.Count);
}
else if (anzEintraege == 1)
{
ReturnMessage = String.Format("In dem ausgewählten Zeitraum ist bereits ein Eintrag vorhanden, daher können keine weiteren Einträge automatisch erstellt werden.");
}
else
{
srList = ErstelleStundenplanEintraege(span.StartDateTime.Date, span.EndDate.Date, c2s, vs);
DAOFactory.GenericDAO.Insert(srList);
ReturnMessage += String.Format("Es wurden {0} Einträge erstellt.", srList.Count);
}
}
}
return ReturnMessage;
}
//public override List<ServiceRecord> ErstelleStundenplanEintraege(DateTime start, DateTime ende, CostBearer2SupportConcept c2s, VacationService vs)
// {
// return base.ErstelleStundenplanEintraege(start, ende, c2s, vs);
// }
protected override IList<ServiceRecord> CreateServiceRecords(Arbeitszeit arbeitszeit, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{
return base.CreateServiceRecords(arbeitszeit, datum, c2s, defaultSd);
}
public override ServiceRecord CreateServiceRecord(ArbeitszeitEintrag ae, DateTime datum, CostBearer2SupportConcept c2s, ServiceDescription defaultSd)
{
var sr = base.CreateServiceRecord(ae, datum, c2s, standardLeistung);
if (ae.Notice == "Pause")
{
double dauer = Convert.ToDouble(sr.RoundedDuration);
sr.Start = new DateTime(sr.Start.Value.Year, sr.Start.Value.Month, sr.Start.Value.Day, 0, 0, 1);
sr.End = sr.Start.Value.AddMinutes(dauer);
sr.ServiceDescription = pausenLeistung;
}
return sr;
}
public void SetzeStandardLeistungen(CostBearer2SupportConcept c2s)
{
foreach (var ap in c2s.ApprovalPeriodList)
{
if (ap.ServiceCategory.Name == "Zuverdienst - Arbeitszeit")
{
var desc = DAOFactory.SearchDAO.FindServiceDescriptionForCategory(ap.ServiceCategory.Oid.Value);
standardLeistung = desc.Where(a => a.Name == "Beschäftigungszeit").FirstOrDefault();
pausenLeistung = desc.Where(a => a.Name == "Pause").FirstOrDefault();
}
}
}
public override ServiceDescription GetDefaultServiceDescription(CostBearer2SupportConcept c2s)
{
return standardLeistung;
}
}
}