SHK Service VertretungsMananger

This commit is contained in:
Christian
2023-06-07 09:45:20 +02:00
parent c1ef063baf
commit 21d063474f
24 changed files with 704 additions and 120 deletions

View File

@@ -61,6 +61,19 @@
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
<TypeScriptTarget>ES2015</TypeScriptTarget>
<TypeScriptJSXEmit>React</TypeScriptJSXEmit>
<TypeScriptModuleKind>ES6</TypeScriptModuleKind>
<TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
<TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny>
<TypeScriptRemoveComments>False</TypeScriptRemoveComments>
<TypeScriptOutFile />
<TypeScriptOutDir />
<TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations>
<TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError>
<TypeScriptSourceMap>True</TypeScriptSourceMap>
<TypeScriptMapRoot />
<TypeScriptSourceRoot />
</PropertyGroup>
<ItemGroup>
<Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
@@ -5079,7 +5092,7 @@
<VisualStudio>
<FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
<WebProjectProperties>
<UseIIS>True</UseIIS>
<UseIIS>False</UseIIS>
<AutoAssignPort>False</AutoAssignPort>
<DevelopmentServerPort>8808</DevelopmentServerPort>
<DevelopmentServerVPath>/</DevelopmentServerVPath>

View File

@@ -47,7 +47,9 @@ namespace BeWoPlanerMobil.Models
var mandator = new MobileSessionFacade().OperationsService.GetMandator();
var showEmployeeSignatureSetting = MobileUtils.GetSettingValue(mandator.Settings, SettingsKeys.ShowSignature);
#if DEBUG
showEmployeeSignatureSetting = "1";
#endif
return CheckRight(UserRightType.Analysis_ServiceOverview_View) && showEmployeeSignatureSetting != null && showEmployeeSignatureSetting.Equals("1");
}
}

View File

@@ -3,7 +3,7 @@
<PropertyGroup>
<NameOfLastUsedPublishProfile>BeWo2.0</NameOfLastUsedPublishProfile>
<UseIISExpress>true</UseIISExpress>
<LastActiveSolutionConfig>Release|Any CPU</LastActiveSolutionConfig>
<LastActiveSolutionConfig>Debug|Any CPU</LastActiveSolutionConfig>
<Use64BitIISExpress>false</Use64BitIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />

View File

@@ -1012,6 +1012,7 @@ namespace BeWo.Report.ReportObjects
duration *= (prozent / 100);
}
//System.Diagnostics.Debug.WriteLine("{0:0.##}", duration);
if (item.ServiceDescription != null &&
item.ServiceDescription.ServiceCategory != null &&
item.ServiceDescription.ServiceCategory.IsBillable)

View File

@@ -39,6 +39,24 @@ namespace AkggMid
}
}
}
if (ro.ApprovedFLSPerWeek == 0)
{
if (ro.CostBearer2SupportConceptList != null && ro.CostBearer2SupportConceptList.Count > 0)
{
var c2s = ro.CostBearer2SupportConceptList[0];
foreach (var scap in c2s.ApprovalPeriodList)
{
if (scap.StartDate <= ro.EndDate && scap.EndDate >= ro.StartDate && scap.ApprovedBEInterval.HasValue && scap.ApprovedBEPerInterval.HasValue && scap.ApprovedBEInterval.Value == BS.Shared.SupportConceptApprovalInterval.Weekly)
{
ro.ApprovedFLSPerWeek = scap.ApprovedBEPerInterval.Value;
}
}
}
}
}
public List<ServicesOverviewRO.ServiceDetail> ErstelleDummyRecords(ServicesOverviewRO pRO)
{

View File

@@ -5,8 +5,12 @@ using System.IO;
using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using CaritasAhlen.Invoicing;
namespace CaritasAhlen.Export
{
@@ -210,9 +214,17 @@ namespace CaritasAhlen.Export
{
sb.AppendLine();
}
for (int i = 0; i < row.ItemArray.Length - 1; i++)
long oid = (long)row.ItemArray[0];
decimal? betrag = null;
if (oid > 0)
{
if (i > 0)
betrag = BerechneRechnungsbetrag(oid, date, date.AddMonths(1).AddDays(-1));
}
for (int i = 1; i < row.ItemArray.Length - 1; i++)
{
if (i > 1)
{
sb.Append(",");
}
@@ -221,20 +233,35 @@ namespace CaritasAhlen.Export
// sb.AppendLine();
//}
var item = row[i];
bool quote = i == 15 || i == 35;
bool quote = i == 16 || i == 36;
if (quote)
if (i == 15) // betrag
{
sb.Append('"');
sb.Append(item);
sb.Append('"');
if (betrag.HasValue)
{
sb.Append(String.Format("{0:0.00}", betrag).Replace(",", "."));
}
else
{
sb.Append(item);
}
}
else
{
sb.Append(item);
if (quote)
{
sb.Append('"');
sb.Append(item);
sb.Append('"');
}
else
{
sb.Append(item);
}
}
}
ErstelleKostenstellenZeilen(row, sb);
ErstelleKostenstellenZeilen(row, sb, betrag);
}
//F,0,050,,BEWO,DA,01012016,012016,iBelegNr1,Belegnr1,220001,,,,999.99, "Name AZ Abrechnung 01/2016 LVR",,,EUR,,,,,,,,,,,R,,,
//G,0,1695,,,-999.99,"Name AZ Abrechnung 01/2016 LVR",
@@ -242,16 +269,20 @@ namespace CaritasAhlen.Export
return sb.ToString();
}
private static void ErstelleKostenstellenZeilen(DataRow row, StringBuilder sb)
private static void ErstelleKostenstellenZeilen(DataRow row, StringBuilder sb, decimal? betrag)
{
if (row.ItemArray.Length > 15)
{
var betragObj = row[14];
var betragObj = row[15];
decimal gesamtbetrag = 0;
if (betragObj != null)
{
Decimal.TryParse(betragObj.ToString().Replace(".", ","), out gesamtbetrag);
if (!betrag.HasValue)
{
betrag = gesamtbetrag;
}
}
var kstItem = row[row.ItemArray.Length - 1];
@@ -261,7 +292,7 @@ namespace CaritasAhlen.Export
sb.AppendLine();
sb.Append(String.Format("K,0,{0},,v,,,,", kst));
sb.Append(String.Format("{0:0.00}", gesamtbetrag).Replace(",", "."));
sb.Append(String.Format("{0:0.00}", betrag).Replace(",", "."));
sb.Append(",,4419,,,,,,");
}
}
@@ -405,6 +436,7 @@ order by p.`LastName`, p.FirstName
String sql = @"
(SELECT
cb2sc.Oid,
'F',
'0',
'005',
@@ -495,6 +527,7 @@ WHERE c.`IsActive` <> 0 AND sc.`IsActive` <> 0
and (sr.`GeleisteteFLM` is not null)#ReplaceCustomerOid#)
UNION
(SELECT
0,
'F',
'0',
'005',
@@ -587,6 +620,47 @@ and (sr.`GeleisteteFLM` is not null)#ReplaceCustomerOid#) ORDER BY Verwendung";
return sql;
}
private static decimal? BerechneRechnungsbetrag(long c2sOid, DateTime start, DateTime end)
{
var factory = new CustomInvoiceFactory();
Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>> dict = new Dictionary<CompactSupportConceptDC, List<ServiceRecordDC>>();
var c2s = DAOFactory.GenericDAO.LoadByID<CostBearer2SupportConcept>(c2sOid);
var c2sDc = MapperFactory.SupportConceptCostBearerRelDC_CostBearer2SupportConcept.MapToNewDC(c2s);
CompactSupportConceptDC sc = CreateCompactSupportConcept(c2sDc);
dict.Add(sc, MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDCs(c2s.ServiceRecords));
var creator = factory.CreateInvoiceCreator("Finanzauswertung", null, dict);
DateTimeSpan span = new DateTimeSpan();
span.StartDate = start;
span.EndDate = end;
var invoices = creator.GenerateServiceInvoices(c2sDc.CostBearer.CostBearerOid.Value, span, dict);
if (invoices != null && invoices.Count == 1)
{
return invoices[0].ClaimSum ?? 0;
}
return null;
}
private static CompactSupportConceptDC CreateCompactSupportConcept(SupportConceptCostBearerRelDC c2s)
{
var dc = new CompactSupportConceptDC();
dc.SupportConceptOid = c2s.SupportConcept.SupportConceptOid;
dc.CostBearerRelOids = new List<long>();
dc.CostBearerRelOids.Add(c2s.CostBearer2SupportConceptOid.Value);
//dc.IsApproved = c2s.ApprovedStartDate.HasValue && c2s.ApprovedEndDate.HasValue;
dc.IsApproved = true;
return dc;
}
private static String GetAbschlagszahlungenSql(DateTime date)
{
String sql = @"

View File

@@ -12,7 +12,11 @@ namespace PerspektivenEV.Export
{
public override QueryDC CreateQuery(QueryDC query)
{
return DatevExporter.CreateQuery(query);
var q = DatevExporter.CreateQuery(query);
CreateBuchungsExportProtokollEintrag(q);
return q;
}
}
}

View File

@@ -111,7 +111,6 @@ namespace ProfEggersStiftung
// xrLabel16
//
this.xrLabel16.BackColor = System.Drawing.Color.Transparent;
this.xrLabel16.CanShrink = true;
this.xrLabel16.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold);
this.xrLabel16.LocationFloat = new DevExpress.Utils.PointFloat(250F, 35.75F);
this.xrLabel16.Name = "xrLabel16";

View File

@@ -84,7 +84,6 @@ namespace ProfEggersStiftung
// xrLabel16
//
this.xrLabel16.BackColor = System.Drawing.Color.Transparent;
this.xrLabel16.CanShrink = true;
this.xrLabel16.Font = new System.Drawing.Font("Arial", 11F, System.Drawing.FontStyle.Bold);
this.xrLabel16.LocationFloat = new DevExpress.Utils.PointFloat(250F, 35.75F);
this.xrLabel16.Name = "xrLabel16";

View File

@@ -0,0 +1,207 @@
using System;
using System.Collections.Generic;
using System.Linq;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
namespace SHKService
{
public class CustomMitarbeiterstundenkontoBerechnung : MitarbeiterstundenkontoBerechnung
{
//public override bool AddServiceRecordToDuration(ServiceRecord item)
//{
// if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null)
// {
// if (item.ServiceDescription.Name != "Pause" && item.ServiceDescription.Name != "Zeitabzug")
// {
// if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit")
// {
// return true;
// }
// }
// }
// return false;
//}
//protected override ServiceRecordSummary BerechneStunden(MitarbeiterstundenkontoRO.EmployeeDetail empDetail, IList<ServiceRecord> groupFilteredRecords, DateTime berichtsAnfang,
// DateTime berichtsEnde)
//{
// decimal flsGesamt = 0;
// decimal arbeitszeit = 0;
// var sum = new ServiceRecordSummary();
// sum.RecordsImBerichtszeitraum = new List<ServiceRecord>();
// //base.CorrectOverlappingTimes(groupFilteredRecords);
// foreach (var item in groupFilteredRecords)
// {
// if (!IsServiceRecordFehlzeit(item))
// {
// if (item.Start.Value >= berichtsAnfang && item.Start.Value < berichtsEnde)
// {
// //if (AddServiceRecordToDuration(item))
// //{
// decimal duration = 0;
// if (item.GroupRoundedDuration.HasValue)
// {
// duration = item.GroupRoundedDuration.Value;
// }
// else
// {
// duration = item.RoundedDuration;
// }
// if (item.ServiceDescription != null &&
// item.ServiceDescription.ServiceCategory != null)
// {
// if (item.ServiceDescription.ServiceCategory.Name == "Arbeitszeit")
// {
// if (item.ServiceDescription.Name != "Pause")
// {
// if (item.ServiceDescription.Name != "Zeitabzug")
// arbeitszeit += duration;
// else
// arbeitszeit -= duration;
// }
// else
// {
// //arbeitszeit -= duration;
// }
// }
// else if (item.ServiceDescription.ServiceCategory.IsBillable)
// {
// flsGesamt += duration;
// }
// }
// sum.RecordsImBerichtszeitraum.Add(item);
// }
// }
// }
// sum.IstAbrechenbar = flsGesamt;
// sum.IstNichtAbrechenbar = arbeitszeit - flsGesamt;
// return sum;
//}
//public override MitarbeiterstundenkontoRO.EmployeeDetail BerechneUeberstundenBis(MitarbeiterstundenkontoRO.EmployeeDetail edOrig, IList<ServiceRecord> records, DateTime monat, out decimal? ueberstunden,
// out decimal alteExtraUeberstunden)
//{
// return base.BerechneUeberstundenBis(edOrig, records, monat, out ueberstunden, out alteExtraUeberstunden);
//}
//public override IList<MitarbeiterstundenkontoRO.DayDetail> CreateDayDetails(DateTime berichtStart, DateTime berichtEnde, MitarbeiterstundenkontoRO.EmployeeDetail ed, IList<ServiceRecord> recordsAll)
//{
// var list = base.CreateDayDetails(berichtStart, berichtEnde, ed, recordsAll);
// foreach (var dd in list)
// {
// dd.MinutesTotal = 0;
// dd.SpecialHours = 0;
// dd.PauseInMinuten = 0;
// foreach (var sr in recordsAll)
// {
// if (sr.Start.HasValue && sr.Start >= berichtStart && sr.Start < berichtEnde && sr.End.HasValue && sr.Start.Value.Day == dd.Date.Day)
// {
// decimal duration = GetDuration(sr);
// if (sr.ServiceDescription.Name == "Pause")
// {
// dd.PauseInMinuten += (decimal)sr.DurationMinutes;
// }
// else if (sr.ServiceDescription.ServiceCategory.Name == "Arbeitszeit")
// {
// if (sr.ServiceDescription.Name != "Zeitabzug")
// dd.MinutesTotal += (decimal)sr.DurationMinutes;
// else
// dd.MinutesTotal -= (decimal)sr.DurationMinutes;
// }
// else if (sr.ServiceDescription.Name != "Arbeitszeit" &&
// sr.ServiceDescription.ServiceCategory.IsBillable)
// {
// dd.SpecialHours += (decimal)sr.DurationMinutes;
// }
// }
// }
// if (dd.PauseInMinuten > 0)
// {
// dd.MinutesTotal -= dd.PauseInMinuten;
// if (dd.MinutesTotal < 0)
// {
// dd.MinutesTotal = 0;
// }
// }
// }
// return list;
//}
//private decimal GetDuration(ServiceRecord sr)
//{
// decimal duration = 0;
// if (sr.GroupRoundedDuration.HasValue)
// {
// duration = sr.GroupRoundedDuration.Value;
// }
// else
// {
// duration = sr.RoundedDuration;
// }
// return duration;
//}
//public override bool SollPauseBerechnen()
//{
// return true;
//}
//public override bool ShouldCreateDayDetails()
//{
// return true;
//}
//public override MitarbeiterstundenkontoRO.DayDetail CreateDayDetail(DateTime date, MitarbeiterstundenkontoRO.EmployeeDetail ed)
//{
// var dd = base.CreateDayDetail(date, ed);
// dd.MaxHoursUntilBreak = null;
// dd.MaxHoursUntilBreak2 = null;
// dd.BreakMinutes = null;
// dd.BreakMinutes2 = null;
// return dd;
//}
//public override decimal BerechnePauseMinuten(IList<ServiceRecord> srListAlle)
//{
// var srList = srListAlle.Where(s => s.ServiceDescription.ServiceCategory.Name == "Arbeitszeit");
// decimal pausenZeit = 0;
// List<ServiceRecord> pausen = new List<ServiceRecord>();
// List<ServiceRecord> nichtpausen = new List<ServiceRecord>();
// foreach (var sr in srList)
// {
// if (sr.ServiceDescription.Name == "Pause")
// {
// pausen.Add(sr);
// }
// else
// {
// nichtpausen.Add(sr);
// }
// }
// foreach (var pause in pausen)
// {
// pausenZeit += pause.RoundedDuration;
// }
// return pausenZeit;
//}
}
}

View File

@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using BeWo.Report;
using BeWo.Data.Entities;
using BeWo.Report.ReportObjects;
namespace SHKService
{
public class CustomMitarbeiterstundenkontoBerechnungMonate : MitarbeiterstundenkontoBerechnungMonate
{
public override MitarbeiterstundenkontoBerechnung CreateMitarbeiterstundenkontoBerechnung()
{
return new CustomMitarbeiterstundenkontoBerechnung();
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("KundeXyz")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("KundeXyz")]
[assembly: AssemblyCopyright("Copyright © 2020")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("c1fed668-adb9-47e0-b589-1389618e1b6e")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// indem Sie "*" wie unten gezeigt eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1 @@
DevExpress.XtraReports.UI.XtraReport, DevExpress.XtraReports.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4C29CCFD-4B7A-44CC-B6DD-39AEBA2E4DFE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>SHKServiceSBD</RootNamespace>
<AssemblyName>5344902949_Reports</AssemblyName>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\..\Host\bin\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>..\..\Host\bin\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Printing.v17.1.Core, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraPrinting.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraReports.v17.1, Version=17.1.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CustomMitarbeiterstundenkontoBerechnung.cs" />
<Compile Include="CustomMitarbeiterstundenkontoBerechnungMonate.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Service\CustomVertretungsManager.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Data\Data.csproj">
<Project>{B0D73E3D-4AE7-4024-93A6-DB1F46D7CCEE}</Project>
<Name>Data</Name>
</ProjectReference>
<ProjectReference Include="..\..\Report\Report.csproj">
<Project>{40d8b312-ea64-49e3-a31a-5e57ed4d5654}</Project>
<Name>Report</Name>
</ProjectReference>
<ProjectReference Include="..\..\Service\Service.csproj">
<Project>{094331c3-ecee-4c89-bbfd-4c9ded89f0ef}</Project>
<Name>Service</Name>
</ProjectReference>
<ProjectReference Include="..\..\Shared\Shared.csproj">
<Project>{2f50b83d-a3f0-4ec4-979a-3f9b7e3d8ed4}</Project>
<Name>Shared</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\licenses.licx" />
</ItemGroup>
<ItemGroup>
<Folder Include="Calculations\" />
<Folder Include="Invoicing\" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

View File

@@ -0,0 +1,56 @@
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.Plugins;
using BeWo.Service.SBD;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace SHKService.Service
{
public class CustomVertretungsManager : VertretungsManager
{
public override 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 team = DAOFactory.GenericDAO.GetAllActive<Team>().Where(t => t.Name == "Vertretungsplanung").FirstOrDefault();
if (team != null)
{
var allEmps = team.MemberList;
var list = MapperFactory.CompactVertreterEmployeeDC_VertreterEmployee.MapToNewDCs(allEmps);
if (filter.CustomerOid.HasValue && filter.VerwendeEntfernungssuche)
{
GetDistanceForVertreterEmployees(filter.CustomerOid.Value, ref list, allEmps);
}
return list;
}
return base.SucheVertreter(filter);
}
}
}

View File

@@ -0,0 +1,17 @@
using BeWo.Service.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SHKService.Validation
{
class CustomServiceRecordValidator : ServiceRecordValidator
{
public override string[] GetIgnoreCategoriesForOverlappingCheck()
{
return new[] { "Arbeitszeit" };
}
}
}

View File

@@ -103,12 +103,8 @@ namespace BeWo.SeWo
}
//if (item.ServiceDescription != null && item.ServiceDescription.ServiceCategory != null)
//{
// var p = item.ServiceDescription.ServiceCategory.ProzentStundenkonto ?? item.ServiceDescription.ServiceCategory.ProzentAbrechnung;
// if (item.ServiceDescription.ProzentStundenkonto.HasValue)
// {
// p = item.ServiceDescription.ProzentStundenkonto.Value;
// }
// var p = item.ServiceDescription.ServiceCategory.ProzentAbrechnung;
// if (p != 100 && p > 0)
// {
// item.RoundedDuration *= (p / 100);

View File

@@ -235,6 +235,27 @@ namespace BeWo.SeWo
duration = sr.RoundedDuration;
}
if (IsKrankheitAbsenceServiceRecord(sr) || IsUrlaubAbsenceServiceRecord(sr))
{
return 0;
}
if (sr.ServiceDescription != null && sr.ServiceDescription.ServiceCategory != null)
{
var p = sr.ServiceDescription.ServiceCategory.ProzentStundenkonto ?? sr.ServiceDescription.ServiceCategory.ProzentAbrechnung;
if (sr.ServiceDescription.ProzentStundenkonto.HasValue)
{
p = sr.ServiceDescription.ProzentStundenkonto.Value;
}
if (p != 100 && p > 0)
{
duration *= (p / 100);
}
}
//if (sr.ServiceDescription.ServiceCategory.Name == "SeWo Ruf" || sr.ServiceDescription.ServiceCategory.Name == "SeWo Notdienst")
//{
// var p = sr.ServiceDescription.ServiceCategory.Percentage;
@@ -269,6 +290,30 @@ namespace BeWo.SeWo
return duration;
}
private bool IsKrankheitAbsenceServiceRecord(ServiceRecord item)
{
if (item.ServiceDescription.Name.ToLower().Contains("krankheit"))
{
return true;
}
if (item.ServiceDescription.Name.ToLower().Contains("corona"))
{
return true;
}
return false;
}
private bool IsUrlaubAbsenceServiceRecord(ServiceRecord item)
{
if (item.ServiceDescription.Name.ToLower().Contains("urlaub"))
{
return true;
}
return false;
}
public virtual Zeitverteilung BerechneZuschlag(ServiceRecord sr)
{
Zeitverteilung zv = new Zeitverteilung();

View File

@@ -162,7 +162,7 @@ namespace SehtMuenster
//
// xrLine2
//
this.xrLine2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 221.2551F);
this.xrLine2.LocationFloat = new DevExpress.Utils.PointFloat(0F, 250.4218F);
this.xrLine2.Name = "xrLine2";
this.xrLine2.SizeF = new System.Drawing.SizeF(270F, 9.75F);
//
@@ -174,7 +174,7 @@ namespace SehtMuenster
this.xrLabel12.Multiline = true;
this.xrLabel12.Name = "xrLabel12";
this.xrLabel12.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
this.xrLabel12.SizeF = new System.Drawing.SizeF(663.125F, 162.7291F);
this.xrLabel12.SizeF = new System.Drawing.SizeF(663.125F, 203.5419F);
this.xrLabel12.StylePriority.UseBackColor = false;
this.xrLabel12.StylePriority.UseFont = false;
this.xrLabel12.Text = resources.GetString("xrLabel12.Text");
@@ -481,7 +481,7 @@ namespace SehtMuenster
this.xrLabel12,
this.xrCheckBox2,
this.xrCheckBox1});
this.GroupFooter2.HeightF = 311.2133F;
this.GroupFooter2.HeightF = 260.1718F;
this.GroupFooter2.Level = 1;
this.GroupFooter2.Name = "GroupFooter2";
this.GroupFooter2.StylePriority.UseFont = false;

View File

@@ -125,6 +125,8 @@ nach §§ 75 ff. SGB XII eingehalten wurden und alle hier gemachten Angaben anha
Mit freundlichen Grüßen
Im Auftrag
[CreatorName]
Leitung Ambulanter Dienst
</value>

View File

@@ -144,7 +144,7 @@ namespace BeWo.Service.Plugins
//t = "9975231461"; // Selwo
//t = "8181286349"; // BeWo am Rhein
//t = "4595275645"; // Eigenständig
//t = "7912635399"; // Prof. Dr. Eggers Stiftung
t = "7912635399"; // Prof. Dr. Eggers Stiftung
//t = "3549726254"; // Socia
//t = "1992495802"; // Monvita
//t = "7381352241"; // Ressource e.V.
@@ -169,7 +169,7 @@ namespace BeWo.Service.Plugins
//t = "8275654834"; // Twg Jonathan
//t = "6586058528"; // Freundeskreis Suchtkrankenhilfe e.V. (FFS)
//t = "2632162696"; // Hand in Hand (ehemals Pro BeWo Düren)
t = "6340891020"; // Caritas Ahlen
//t = "6340891020"; // Caritas Ahlen
//t = "3659854106"; // alpha e.V.
//t = "5809130435"; // Lebenshilfe Kusel
//t = "3367947706"; // PaS Mönchengladbach
@@ -346,6 +346,7 @@ namespace BeWo.Service.Plugins
//t = "3226307161"; // Roman Roger Puth
//t = "3522103738"; // AWO Münsterland-Recklinghausen
//t = "5592509446"; // Kontakt Verein für psychosoziale Hilfen e.V
//t = "5344902949"; // SHK Service GmbH SBD
return t;
#else

View File

@@ -6,7 +6,7 @@ using System.Text;
using BeWo.Data.Access;
using BeWo.Data.Entities;
using BeWo.Service.DCEntityMapper;
using BeWo.Service.ServiceUtils.DistanceCalculator;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
@@ -17,7 +17,7 @@ using Employee = BeWo.Data.Entities.Employee;
namespace BeWo.Service.SBD
{
internal class VertretungsManager
public class VertretungsManager
{
private static List<ContactDC> LoadContactInformationForEntity<T>(long entityOid) where T : BeWoEntityBase
{
@@ -26,7 +26,69 @@ namespace BeWo.Service.SBD
return MapperFactory.ContactDC_Contact.MapToNewDCs(entity.Contacts);
}
public List<VertretungsItemDC> CreateSubstitutions(DateTime start, DateTime end)
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)
{
Dictionary<String, bool> employeeIsAbsenceDict = new Dictionary<String, bool>();
Dictionary<String, bool> customerIsAbsenceDict = new Dictionary<String, bool>();
@@ -465,7 +527,7 @@ namespace BeWo.Service.SBD
}
}
public List<VertretungsItemDC> CreateVertretungsListe(DateTime start, DateTime end)
public virtual List<VertretungsItemDC> CreateVertretungsListe(DateTime start, DateTime end)
{
return CreateSubstitutions(start, end);
}
@@ -503,7 +565,7 @@ namespace BeWo.Service.SBD
}
}
private static void SetSBDInformation(VertretungsItemDC vertretungsItem, Customer customer, Employee employee, bool isEmployeeAbsenceTime)
public virtual void SetSBDInformation(VertretungsItemDC vertretungsItem, Customer customer, Employee employee, bool isEmployeeAbsenceTime)
{
vertretungsItem.CustomerPflege = customer.Pflege ? "Ja" : "Nein";
vertretungsItem.CustomerToilettengang = customer.Toilettengang ? "Ja" : "Nein";
@@ -874,7 +936,7 @@ namespace BeWo.Service.SBD
}
private static void SetSubstitutionColor(VertretungsItemDC vertretungsItem)
public virtual void SetSubstitutionColor(VertretungsItemDC vertretungsItem)
{
switch (vertretungsItem.VertretungsStatus)
{
@@ -918,7 +980,7 @@ namespace BeWo.Service.SBD
}
}
private static void SetTeamleitung(BeWoEntityBase employee, VertretungsItemDC item)
public virtual void SetTeamleitung(BeWoEntityBase employee, VertretungsItemDC item)
{
if (employee.Oid == null)
{
@@ -944,7 +1006,7 @@ namespace BeWo.Service.SBD
item.Teamleitung = sb.ToString();
}
private static void SetzeSchule(VertretungsItemDC newItem, Customer customer)
public virtual void SetzeSchule(VertretungsItemDC newItem, Customer customer)
{
if (customer != null)
{
@@ -973,7 +1035,7 @@ namespace BeWo.Service.SBD
return absenceTime.Start < dateTime.Date.AddDays(1) && absenceTime.End >= dateTime.Date;
}
private static void AddKrankheitsZeitraumAndMeldungToItem(VertretungsItemDC item, AbsenceTimeDC absenceTime)
public virtual void AddKrankheitsZeitraumAndMeldungToItem(VertretungsItemDC item, AbsenceTimeDC absenceTime)
{
if (!absenceTime.Start.HasValue || !absenceTime.End.HasValue)
{
@@ -1029,7 +1091,7 @@ namespace BeWo.Service.SBD
}
}
private static bool GetIsSubstitutedCompletely(IEnumerable<ArbeitszeitEintrag> assistanceTimes, Vertretung substitution, DateTime dateTime)
public virtual bool GetIsSubstitutedCompletely(IEnumerable<ArbeitszeitEintrag> assistanceTimes, Vertretung substitution, DateTime dateTime)
{
var isSubstituted = true;
@@ -1052,7 +1114,7 @@ namespace BeWo.Service.SBD
return isSubstituted;
}
private static void GetVertretungsstatus(VertretungsItemDC vertretungsItem, DateTime dateTime, DateTime absenceTimeStartDate, Customer customer)
public virtual void GetVertretungsstatus(VertretungsItemDC vertretungsItem, DateTime dateTime, DateTime absenceTimeStartDate, Customer customer)
{
MigriereSubstitutionStatus(customer);
@@ -1087,7 +1149,7 @@ namespace BeWo.Service.SBD
}
}
private static string GetEmployeeAddressInfo(long employeeOid)
public virtual string GetEmployeeAddressInfo(long employeeOid)
{
var result = string.Empty;
@@ -1137,7 +1199,7 @@ namespace BeWo.Service.SBD
return result;
}
private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintrag assistanceTime, AbsenceTime absenceTime)
public virtual bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintrag assistanceTime, AbsenceTime absenceTime)
{
if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag) || absenceTime.Start == null)
{
@@ -1156,7 +1218,7 @@ namespace BeWo.Service.SBD
return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
}
private static bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
public virtual bool IsAbsenceTimeInAssistanceTime(DateTime currentDate, ArbeitszeitEintragDC assistanceTime, AbsenceTime absenceTime)
{
if (currentDate.DayOfWeek != DateTimeUtils.ConvertAppointmentDayOfWeekToDayOfWeek(assistanceTime.Tag) || absenceTime.Start == null)
{
@@ -1179,7 +1241,7 @@ namespace BeWo.Service.SBD
return assistanceTimeDates.Start.IsIntervalOverlappingWithAbsenceTimeInterval(assistanceTimeDates.End, absenceTime.Start.Value, absenceTimeEnd);
}
private static List<ArbeitszeitEintrag> GetAssistanceTimesForCustomer(Customer customer, Employee employee, AbsenceTime absenceTime, DateTime start, DateTime end)
public virtual List<ArbeitszeitEintrag> GetAssistanceTimesForCustomer(Customer customer, Employee employee, AbsenceTime absenceTime, DateTime start, DateTime end)
{
var assistanceTimeEntries = new List<ArbeitszeitEintrag>();
@@ -1230,7 +1292,7 @@ namespace BeWo.Service.SBD
return assistanceTimeEntries;
}
private static bool IsArbeitszeitValid(Arbeitszeit arbeitszeit, DateTime time)
public virtual bool IsArbeitszeitValid(Arbeitszeit arbeitszeit, DateTime time)
{
if (arbeitszeit.GueltigVon == null && arbeitszeit.GueltigBis == null)
{
@@ -1255,7 +1317,7 @@ namespace BeWo.Service.SBD
return false;
}
private static List<Arbeitszeit> GetSchoolAssistanceTimes(Customer customer, DateTime start, DateTime end, AbsenceTime absenceTime)
public virtual List<Arbeitszeit> GetSchoolAssistanceTimes(Customer customer, DateTime start, DateTime end, AbsenceTime absenceTime)
{
var allSchoolAssistanceTimes = new List<Arbeitszeit>();
@@ -1284,5 +1346,24 @@ namespace BeWo.Service.SBD
return schoolAssistanceTimes;
}
protected void GetDistanceForVertreterEmployees(long customerOid, ref List<CompactVertreterEmployeeDC> list, IList<Employee> employees)
{
var customer = DAOFactory.GenericDAO.LoadByID<Customer>(customerOid);
var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule")));
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);
}
}
}
}

View File

@@ -1470,64 +1470,10 @@ namespace BeWo.Service.ServiceImplementations
{
try
{
var vertretungsManager = new VertretungsManager();
var vertretungsListe = vertretungsManager.CreateVertretungsListe(filter.StartDate, filter.EndDate);
var s = PluginLoader.FindClass<VertretungsManager>();
// 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);
return s.SucheVertreter(filter);
// 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;
}
catch (Exception e)
{
@@ -1535,24 +1481,7 @@ namespace BeWo.Service.ServiceImplementations
}
}
private void GetDistanceForVertreterEmployees(long customerOid, ref List<CompactVertreterEmployeeDC> list, List<Employee> employees)
{
var customer = DAOFactory.GenericDAO.LoadByID<Customer>(customerOid);
var school = customer.Customer2OrganisationList.FirstOrDefault(f => f.ValueList.Any(b => b.Entry.Type == ValueListEntryType.EnvironmentOrganisationType && b.Entry.Value.Equals("Schule")));
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);
}
}
public List<EmployeeTokenRelationDC> LoadEmployeeTokenRelationsByOid(IEnumerable<long> pOids)
{