Merge branch 'master' into feature_rene_18_ai

# Conflicts:
#	AiCoreUnitTest/AiCoreUnitTest.csproj
#	BeWo/BeWoApp.xaml.cs
#	BeWo/View/Controls/AI/AiPromptbausteinLibraryControl.xaml
#	Server/Components/AICore/AICore.csproj
#	Server/Components/AICore/Prompt/AiSystemPromptFactory.cs
#	Server/Components/AICore/Prompt/SystemPrompts/AiConversationSystemPromptBuilder.cs
#	Server/Components/AICore/Prompt/SystemPrompts/AiFunctionSystemPromptBuilder.cs
#	Server/Components/AICore/Prompt/SystemPrompts/Builder/BaseSystemPromptBuilder.cs
#	Server/Components/AICore/Prompt/SystemPrompts/Builder/ServiceRecordPromptBuilder.cs
#	Server/Components/AICore/packages.config
#	Server/Components/ServerUtils/Core/MailUtils.cs
#	Service/Plugins/AiService2.cs
#	Service/Service.csproj
#	Service/ServiceBehavior/JsonError/JsonErrorHandler.cs
#	Service/ServiceBehavior/WCFError/WCFErrorHandler.cs
#	Shared/Shared.csproj
This commit is contained in:
2026-08-10 10:23:56 +02:00
734 changed files with 50464 additions and 41390 deletions

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.props" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -18,8 +17,6 @@
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
<IsCodedUITest>False</IsCodedUITest>
<TestProjectType>UnitTest</TestProjectType>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
@@ -49,12 +46,6 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.dll</HintPath>
</Reference>
<Reference Include="Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions, Version=14.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\MSTest.TestFramework.2.2.10\lib\net45\Microsoft.VisualStudio.TestPlatform.TestFramework.Extensions.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
</ItemGroup>
@@ -66,7 +57,6 @@
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data\Data.csproj">
@@ -88,12 +78,8 @@
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.props'))" />
<Error Condition="!Exists('..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.targets'))" />
</Target>
<Import Project="..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.targets" Condition="Exists('..\packages\MSTest.TestAdapter.2.2.10\build\net46\MSTest.TestAdapter.targets')" />
<ItemGroup>
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
</ItemGroup>
</Project>

View File

@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="MSTest.TestAdapter" version="2.2.10" targetFramework="net472" />
<package id="MSTest.TestFramework" version="2.2.10" targetFramework="net472" />
</packages>

View File

@@ -333,7 +333,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPZLeverkusen", "ReportImp\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weitblick-ambulantBeWo", "ReportImp\Weitblick-ambulantBeWo\Weitblick-ambulantBeWo.csproj", "{2E99BA67-61A2-47BD-8412-6ECBC126D83E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KomMitBewo", "ReportImp\KomMitBewo\KomMitBewo.csproj", "{1A585E99-09AB-4924-8FB9-9C9D1FE48044}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KommMitBewo", "ReportImp\KomMitBewo\KommMitBewo.csproj", "{1A585E99-09AB-4924-8FB9-9C9D1FE48044}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skmRheydt", "ReportImp\skmRheydt\skmRheydt.csproj", "{B9C896DD-8C7D-4F37-B826-203D2E83D650}"
EndProject
@@ -377,8 +377,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaritasAhlen", "ReportImp\C
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TabulaRasa", "ReportImp\TabulaRasa\TabulaRasa.csproj", "{8E7F125B-32E9-4D59-A47A-C0994A980CD3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPZLeverkusen2", "SPZLeverkusen2\SPZLeverkusen2.csproj", "{74040CE0-1D24-4F47-91B9-7F166EADBC61}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChatController", "..\Chat\ChatController\ChatController.csproj", "{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PraxisPusteblume", "ReportImp\PraxisPusteblume\PraxisPusteblume.csproj", "{A6E699B3-8399-4B8D-90F1-119B021F3D44}"
@@ -441,8 +439,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkmLeverkusen", "ReportImp\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmpathieFachassistenz", "ReportImp\EmpathieFachassistenz\EmpathieFachassistenz.csproj", "{F618F17B-5905-4D09-A976-733011945A9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebenUndWohnenChristianWilke", "ReportImp\LebenUndWohnenChristianWilke\LebenUndWohnenChristianWilke.csproj", "{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CaritasverbandDuerenJuelichEV", "ReportImp\CaritasverbandDuerenJuelichEV\CaritasverbandDuerenJuelichEV.csproj", "{86E14AC3-CD3F-4E63-8154-26DFA2E6ABEB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KoelnerBeWoSelbstbestimmtLeben", "ReportImp\KoelnerBeWoSelbstbestimmtLeben\KoelnerBeWoSelbstbestimmtLeben.csproj", "{FE240F9F-CC85-4F7D-9080-BEEBE76B0735}"
@@ -507,8 +503,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutismusLeben", "ReportImp\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LeWoAachen", "ReportImp\LeWoAachen\LeWoAachen.csproj", "{C9CDE69B-D3A1-4BF7-B988-1A4ACF2D664A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ToprakGmbH", "ReportImp\ToprakGmbH\ToprakGmbH.csproj", "{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AlzeyTeilhabe", "ReportImp\AlzeyTeilhabe\AlzeyTeilhabe.csproj", "{D173B437-EAD2-4535-B59D-76737600E058}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ChristopherusHausFamilienhilfe", "ReportImp\ChristopherusHausFamilienhilfe\ChristopherusHausFamilienhilfe.csproj", "{B104F622-7BE6-4DFE-9E20-32915507860D}"
@@ -3013,22 +3007,6 @@ Global
{8E7F125B-32E9-4D59-A47A-C0994A980CD3}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8E7F125B-32E9-4D59-A47A-C0994A980CD3}.Release|x86.ActiveCfg = Release|Any CPU
{8E7F125B-32E9-4D59-A47A-C0994A980CD3}.Release|x86.Build.0 = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|.NET.ActiveCfg = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|.NET.Build.0 = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|Any CPU.Build.0 = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|x86.ActiveCfg = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Debug|x86.Build.0 = Debug|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|.NET.ActiveCfg = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|.NET.Build.0 = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|Any CPU.ActiveCfg = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|Any CPU.Build.0 = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|x86.ActiveCfg = Release|Any CPU
{74040CE0-1D24-4F47-91B9-7F166EADBC61}.Release|x86.Build.0 = Release|Any CPU
{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Debug|.NET.ActiveCfg = Debug|Any CPU
{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Debug|.NET.Build.0 = Debug|Any CPU
{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -3525,22 +3503,6 @@ Global
{F618F17B-5905-4D09-A976-733011945A9B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{F618F17B-5905-4D09-A976-733011945A9B}.Release|x86.ActiveCfg = Release|Any CPU
{F618F17B-5905-4D09-A976-733011945A9B}.Release|x86.Build.0 = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|.NET.ActiveCfg = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|.NET.Build.0 = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|x86.ActiveCfg = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Debug|x86.Build.0 = Debug|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|.NET.ActiveCfg = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|.NET.Build.0 = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|Any CPU.Build.0 = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|x86.ActiveCfg = Release|Any CPU
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A}.Release|x86.Build.0 = Release|Any CPU
{86E14AC3-CD3F-4E63-8154-26DFA2E6ABEB}.Debug|.NET.ActiveCfg = Debug|Any CPU
{86E14AC3-CD3F-4E63-8154-26DFA2E6ABEB}.Debug|.NET.Build.0 = Debug|Any CPU
{86E14AC3-CD3F-4E63-8154-26DFA2E6ABEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -4053,22 +4015,6 @@ Global
{C9CDE69B-D3A1-4BF7-B988-1A4ACF2D664A}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{C9CDE69B-D3A1-4BF7-B988-1A4ACF2D664A}.Release|x86.ActiveCfg = Release|Any CPU
{C9CDE69B-D3A1-4BF7-B988-1A4ACF2D664A}.Release|x86.Build.0 = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|.NET.ActiveCfg = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|.NET.Build.0 = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|x86.ActiveCfg = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Debug|x86.Build.0 = Debug|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|.NET.ActiveCfg = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|.NET.Build.0 = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|Any CPU.Build.0 = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|x86.ActiveCfg = Release|Any CPU
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B}.Release|x86.Build.0 = Release|Any CPU
{D173B437-EAD2-4535-B59D-76737600E058}.Debug|.NET.ActiveCfg = Debug|Any CPU
{D173B437-EAD2-4535-B59D-76737600E058}.Debug|.NET.Build.0 = Debug|Any CPU
{D173B437-EAD2-4535-B59D-76737600E058}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -5021,7 +4967,6 @@ Global
{888961E7-A394-4F3B-A667-09EA2F80ED4B} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{96A3E6E3-3F9B-4CAB-B306-3F23DE6A40F9} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{8E7F125B-32E9-4D59-A47A-C0994A980CD3} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{74040CE0-1D24-4F47-91B9-7F166EADBC61} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{8A83C4DC-A0B1-4A51-AE1D-366D7A05B298} = {E7543C39-A44C-40C9-82C9-E7FAA2D9A852}
{A6E699B3-8399-4B8D-90F1-119B021F3D44} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{E590CC37-E2A4-488F-BBA2-C70042BD488D} = {D8A691C5-146D-4613-86CC-438F02FE9106}
@@ -5053,7 +4998,6 @@ Global
{56602D65-47F7-4175-A065-A044FE7F6C81} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{E30D35E8-9B15-4345-B8B7-422415A659DA} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{F618F17B-5905-4D09-A976-733011945A9B} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{48324B9E-4EC0-47B9-BBA7-6FD61384D25A} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{86E14AC3-CD3F-4E63-8154-26DFA2E6ABEB} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{FE240F9F-CC85-4F7D-9080-BEEBE76B0735} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{976CC5EF-26C9-4415-84C6-33A450222F04} = {D8A691C5-146D-4613-86CC-438F02FE9106}
@@ -5086,7 +5030,6 @@ Global
{CEA6A3D2-DDD4-4699-89AE-FEF7908C46D5} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{54419AAB-93DB-482F-B304-035D001081DD} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{C9CDE69B-D3A1-4BF7-B988-1A4ACF2D664A} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{12BC3B31-7499-44EC-B7B9-E3CEB2D9997B} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{D173B437-EAD2-4535-B59D-76737600E058} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{B104F622-7BE6-4DFE-9E20-32915507860D} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{39876291-220B-412E-8ADE-B7A24621656D} = {D8A691C5-146D-4613-86CC-438F02FE9106}

View File

@@ -16,7 +16,7 @@
<EnableSecurityDebugging>true</EnableSecurityDebugging>
<TargetZone>Internet</TargetZone>
<GenerateManifests>true</GenerateManifests>
<SignManifests>true</SignManifests>
<SignManifests>false</SignManifests>
<ManifestKeyFile>
</ManifestKeyFile>
<ManifestCertificateThumbprint>8E3A8E81F1C6F67A1C6D239593544EA33D8AC6A7</ManifestCertificateThumbprint>
@@ -43,12 +43,12 @@
<TargetCulture>de-DE</TargetCulture>
<ProductName>BeWoPlaner</ProductName>
<PublisherName>ownSoft GmbH</PublisherName>
<MinimumRequiredVersion>2.0.1.297</MinimumRequiredVersion>
<MinimumRequiredVersion>2.0.1.299</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.htm</WebPage>
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>298</ApplicationRevision>
<ApplicationRevision>300</ApplicationRevision>
<ApplicationVersion>2.0.1.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
@@ -501,9 +501,6 @@
<Reference Include="DevExpress.XtraScheduler.v23.2.Core.Desktop, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraScheduler.v23.2.Core, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="PresentationFramework.Aero">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
@@ -513,9 +510,6 @@
<Reference Include="PresentationFramework.Luna">
<RequiredTargetFramework>3.0</RequiredTargetFramework>
</Reference>
<Reference Include="RestSharp, Version=106.15.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.15.0\lib\net452\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Activities" />
<Reference Include="System.Core">
@@ -2759,6 +2753,7 @@
<Compile Include="ServiceProxy\ServiceFacade.cs" />
<Compile Include="Validation\ValidationBinding.cs" />
<Compile Include="Validation\AttributeValidator.cs" />
<Compile Include="Validation\ICustomerRelatedContext.cs" />
<Compile Include="Validation\DecimalValidator.cs" />
<Compile Include="Validation\ValidationAttribute.cs" />
<Compile Include="Validation\ValidationRules.cs" />
@@ -3172,7 +3167,6 @@
<DependentUpon>PivotGridReport.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
@@ -3932,4 +3926,8 @@
<Copy SourceFiles="app.DebugRemote.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)' == 'DebugRemote' " />
<Copy SourceFiles="app.Release.config" DestinationFiles="app.config" OverwriteReadOnlyFiles="true" Condition=" '$(Configuration)' == 'Release' " />
</Target>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="RestSharp" />
</ItemGroup>
</Project>

View File

@@ -265,6 +265,8 @@ namespace BeWo
private static String PUB_KEY_E8 = "04d165f25edc4bb40c029cd2b2faeee96cab3aae38a1f4d4393233c542d4cc330c34c7212090705ce8622f1c71b342d779be460dc1db47a113a0c7df8126633bd48d1df63d823332f6f42be7f5963ab41367187b6b3e8d48d9eadeedae6d3e874c";
private static String PUB_KEY_E9 = "04a05cdc459f3bace602a958495d0c153a22027ce9a68d594897db5c68e9ae3064c9d15b6017a4720ae52449ade7bf3b4783f582b6cfb60777a140657e83335878a1a635d69288ef95c78c99462abd56d0737f69083dd18988c30abed6a6e22a73";
private static String PUB_KEY_R10 = "CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private static String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
@@ -273,14 +275,20 @@ namespace BeWo
private static String PUB_KEY_R13 = "00a567708dd0568164151761cdb906d4ad19908c2650379816639254dbd9cc840593ecd3ec081ba0605143487d2bc748969eb42dda9dc8273b57a19fabf0d60ed40e30ca6f9bb1d1d6a49d323e584e356f4558687117fc3ed85d82a02fb2516cb01a5db859ce3565c88ba1af1037ffe39c5dc2491734ff8c2b8b8df0bc712c930c1d05c4bac7cdaac95e7cd1c901f79c03f6fc0a5df4da7be6db764270ebf44d22da00776fd6c95f17fdda752ea5570cf6ea5cb6e073a568cfa174e275827e109fc1f5a2eb01e938b10a44ccd3c289f54935820a34b31ce988c2474e820e0a36f0474f8af1290475dacde19a5cff5e9d9895ba9a43d04aa21705010430d332b38f";
private static String PUB_KEY_R14 = "00cd68546c992fd4c4df145ee284bca5a798da8ad5d59e0eb211eaee13bd7f7344cbabf6d9e37f0f2e23cdaf7235aa9eba1daa8e00d6d0e844e0d128ee05b5a783b54b1c6e0cd6f427c78d04c976f8327a9e8b022e71bc9f12b6ac19f4ec4bb134ba50bbb89dc6f3439e006425efa46fabfa8e60e47c9fd5687d97db48a8909078d4138c8fd7c60ab9bec4cbc2f48bbf9689b65dece60bb5c183c59c20af9eabe62498495165e9ce22868a7623cd60d8190118f60bca00d292d556573d7f7278c71febbbb9bb79861970fc6c2c39a25f223ac5870dca69f409caf2716a7a5f0924934a1cd1f7084b4d2295947d80d7beb574769c79690146a715dc792e14818895";
private static String PUB_KEY_YE1 = "0407655075fe68a695ada17d2babca549c8cf31968e2572f3fcd9c0736b32966f160f2854f42729fb3012422e6f4b0186263486925903f5f74f47c1a9c8320e2230847eb9dbb7fbfe65210f2cb1066da33a11c7036cdee9f71b5e226d80bdffabc";
private static String PUB_KEY_YE2 = "04719ab43391d6c410bdcca97b7774942db58738edac647434c7b9de533ea336cf9b920f97269345ab1e5597be796fa812ea881df8925bb121b98cc808aadff603e9ef34fef576e7d2bc5d021d8c55e5a1839ad26214ef57fb1d0d3d3ef603970f";
private static String PUB_KEY_YE3 = "04bb1da0af0ccf58dda60f5be887eae5132b6285518c74bf27b9c4ad4a353599520968896d9bb9dab3bc241a6ab9894cdba3895f99ad6acea68c7e378913b2209e73ac9fc3b546984acb0b9652ab65f8776bc973583c5485377dbec2bb327f6c33";
private static String PUB_KEY_YR1 = "00a158bc5f6c42620317bc9c4d3caa7fa05d7750c8263c0041d3b5422cd0eda179adf65b8464d252055d745724f53f3e8b0fc66ad5dda0738dd6365d40751ae3e2c1276b36ce8b3d273e9986069da1ba2e3da19b43218eb074a799022e416cd536d021fa45204130b490f5c5eb1fc77176fe0f009e39b2c18c2faf14484dc1b230b66ba70037d2f90a05d52108b9b5f3624cfa05659dd2d0e957a8b9a6b5d57de6e75601be5be9efc5e3d0e20ac1f4634d0083bd815486f5873ca798a7be5f49844414edb1bdc1c26a55f62a5e06330ba11fc3f5c1f11d0096a22e654e65f0634d79279ac67a5cf59d98c9bb1736922a1a5f6f572419e13243f9df5ad2746e6e33";
private static String PUB_KEY_YR2 = "00d9d0bc70069a6a87ce25baa31ead5fde78bfdf5d0ee62d042fd4b9e958a65bcaf1a9c7ac21e807e7b2502717a7b04e470703e8123a806f9b70df9b4e80b86885f8a46eb787c0728c2a9c0410096f7cf903cffde3afff0ba0ec8ca4e0d90ec5fd88ea0d9fe794fa9c9a0e4cb15cba4791abcd091901186a7f9d3c5afd38652040ada118a80d916f3ba5aa69b0e02e50972ba18851b79b948ace2a6998ab7a2b1ebb7da0cc324d04088ab6cbdde875f8bf6e5ba6444d712fc1fc6b5cf6455b5290fed8f2cfc5d7a2dd38a6e79938b5f0045f00f6ab288f4f1ad336aea537e00caf983673574daa4393c23c5e57a2f99693f5ac6898bcb9d168f94eab26513d6fb9";
private static String PUB_KEY_YR3 = "00c94b4f90c9fad99bc5349d7ba024a83ede7ada1e8c4a37d34eb06bc74fd36d71d813856ba3ea08b30ccaa7f554229723c9faa28aeeb8e004cfd72b7a20c7ad443db81063c2e254d9f89ec991d5415475a95bfdc2ff998b57a3796edeaa29ee4e8e97ea4e2f3be504836197e32aee5f55c5408cef5ed4a58ba634ac463518c02c68391f5e82f77510956f0a811a56e7c7d8e417b770baafdb86db291162b1bed2fc73c0f7aee95baac03bf0c514a6e2df935f1ca106d23206ab1b6c6d86cafbfd2a7b6d78ee9f6850efd235cb9a4fda682c558a99c63dd144748572b2faa891e8abfbfdee6008afc11a48cb5ccd407d7d42443c0e8883cfb0af9124e223d348a5";
private bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors)
{
try
@@ -301,14 +309,18 @@ namespace BeWo
pk.Contains(PUB_KEY_E6.ToLower()) ||
pk.Contains(PUB_KEY_E7.ToLower()) ||
pk.Contains(PUB_KEY_E8.ToLower()) ||
pk.Contains(PUB_KEY_E9.ToLower()) ||
pk.Contains(PUB_KEY_R10.ToLower()) ||
pk.Contains(PUB_KEY_R11.ToLower()) ||
pk.Contains(PUB_KEY_R12.ToLower()) ||
pk.Contains(PUB_KEY_R13.ToLower()) ||
pk.Contains(PUB_KEY_R14.ToLower()) ||
pk.Contains(PUB_KEY_YE1.ToLower()) ||
pk.Contains(PUB_KEY_YE2.ToLower()) ||
pk.Contains(PUB_KEY_YE3.ToLower()) ||
pk.Contains(PUB_KEY_YR1.ToLower()) ||
pk.Contains(PUB_KEY_YR2.ToLower()))
pk.Contains(PUB_KEY_YR2.ToLower()) ||
pk.Contains(PUB_KEY_YR3.ToLower()))
{
chainContainsPk = true;
}

View File

@@ -1,11 +1,14 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Media;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Translation;
using BeWo.Core;
using BeWo.ServiceProxy;
using BeWo.Scheduler.Resources;
using BeWo.Scheduler.View;
@@ -151,7 +154,25 @@ namespace BeWo.Scheduler.ViewModel
protected override void DeleteAppointments(IEnumerable<AbsenceTimeDC> dcList)
{
ServiceFacade.DoCustomerServiceAsync(s => s.DeactivateAbsenceTimes(dcList.ToDictionary(dc => dc.AbsenceTimeOid != null ? dc.AbsenceTimeOid.Value : 0,
var lDcList = dcList.ToList();
if (!BeWoApp.LoggedOnUser.HasRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
var pastAbsenceTimes = lDcList.Where(dc => dc.IsInThePast).ToList();
if (pastAbsenceTimes.Count > 0)
{
lDcList = lDcList.Except(pastAbsenceTimes).ToList();
MessageBox.Show(Translator.Translate("Sie besitzen nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen."),
"BeWo Planer", MessageBoxButton.OK, MessageBoxImage.Warning);
}
}
if (lDcList.Count == 0)
{
return;
}
ServiceFacade.DoCustomerServiceAsync(s => s.DeactivateAbsenceTimes(lDcList.ToDictionary(dc => dc.AbsenceTimeOid != null ? dc.AbsenceTimeOid.Value : 0,
dc => dc.AbsenceTimeVersion != null ? dc.AbsenceTimeVersion.Value : 0)));
}

View File

@@ -198,11 +198,18 @@ namespace BeWo.Scheduler.ViewModel
var message = string.Empty;
ServiceFacade.DoResourceServiceSync( s => message = s.ValidateSchedulerAppointment(start, end, employeeOids, customerOids, resourceOids, originatorOid, schedulerAppointmentOid, recurrenceInfoId, recurrenceIndex, shouldSkipResourceAvailablityCheck));
if(!string.IsNullOrWhiteSpace(message))
{
if(message.Contains("Die Ressource") && message.Contains("ist im ausgewählten Zeitraum") && message.Contains("bereits gebucht:") && BeWoApp.LoggedOnUser.HasRight(UserRightType.KalenderRessourcenDoppeltBuchen) is false)
{
message = message.Remove(message.Length - 31) + "Speichern nicht möglich.";
MessageBox.Show(message, "Überschneidung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
var messageBoxResult = MessageBox.Show(message, "Überschneidung", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if(messageBoxResult.Equals(MessageBoxResult.No))
@@ -212,7 +219,7 @@ namespace BeWo.Scheduler.ViewModel
}
}
if (item.Type.Equals(AppointmentType.ChangedOccurrence) && _GeoeffneterTermin != null)
if(item.Type.Equals(AppointmentType.ChangedOccurrence) && _GeoeffneterTermin != null)
{
areEqual = _GeoeffneterTermin.Equals(item);
}
@@ -223,7 +230,7 @@ namespace BeWo.Scheduler.ViewModel
}
}
if (dcList.Count <= 0)
if(dcList.Count <= 0)
{
return;
}
@@ -305,6 +312,14 @@ namespace BeWo.Scheduler.ViewModel
if(!string.IsNullOrWhiteSpace(message))
{
if(message.Contains("Die Ressource") && message.Contains("ist im ausgewählten Zeitraum") && message.Contains("bereits gebucht:") && BeWoApp.LoggedOnUser.HasRight(UserRightType.KalenderRessourcenDoppeltBuchen) is false)
{
message = message.Remove(message.Length - 31) + "Speichern nicht möglich.";
MessageBox.Show(message, "Überschneidung", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
var messageBoxResult = MessageBox.Show(message, "Überschneidung", MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if(messageBoxResult.Equals(MessageBoxResult.No))
@@ -314,11 +329,10 @@ namespace BeWo.Scheduler.ViewModel
}
}
dcList.Add(vm.CommitToDataContract());
}
if (dcList.Count <= 0)
if(dcList.Count <= 0)
{
return;
}

View File

@@ -188,7 +188,43 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ValueListEntryType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiRoutineType))]
System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationMessageDC> ExecuteAiConversationWithRoutine(long conversation, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, long routine, int step);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/ExecuteAiConversationWithRoutineComplete", ReplyAction="http://tempuri.org/IAiEnhancedService/ExecuteAiConversationWithRoutineCompleteResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/ExecuteAiConversationWithRoutineCompleteBeW" +
"oFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.BeWoDataContract))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiConfigDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiModelDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiModelDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiConversationDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationMessageDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiConversationMessageDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiPromptbausteinFolderDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiPromptbausteinFolderDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiPromptbausteinPromptDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiPromptbausteinPromptDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiPromptbausteinRoutineDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiPromptbausteinRoutineDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiPromptbausteinRoutineStepDC>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiPromptbausteinRoutineStepDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Feature.AI.AiUserSettingDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.Compact.CompactEmployeeDC))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary<BS.Shared.TableID, System.Collections.Generic.List<long>>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.List<long>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(System.Collections.Generic.Dictionary<long, BS.Shared.ValueListEntryType>))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Core.BeWoFault))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.Core.BeWoFaultType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiDataContextType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiModelSource))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiActionType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.TableID))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiConversationMessageRole))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ActivationTypeId))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.ValueListEntryType))]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiRoutineType))]
System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationMessageDC> ExecuteAiConversationWithRoutineComplete(BS.Shared.AiActionType actionType, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, long routine);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CheckContextSize", ReplyAction="http://tempuri.org/IAiEnhancedService/CheckContextSizeResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CheckContextSizeBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.DataContracts.BeWoDataContract))]
@@ -364,7 +400,12 @@ namespace BeWo.ServiceProxy
{
return base.Channel.ExecuteAiConversationWithRoutine(conversation, view_context, routine, step);
}
public System.Collections.Generic.List<BS.Shared.DataContracts.Feature.AI.AiConversationMessageDC> ExecuteAiConversationWithRoutineComplete(BS.Shared.AiActionType actionType, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, long routine)
{
return base.Channel.ExecuteAiConversationWithRoutineComplete(actionType, view_context, routine);
}
public bool CheckContextSize(BS.Shared.AiActionType actionType, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context)
{
return base.Channel.CheckContextSize(actionType, view_context);

View File

@@ -237,8 +237,7 @@ namespace BeWo.Services
if (windowViewModel is DialogViewModel dialogViewModel)
{
dialogViewModel.Closing += (s, e) => window.Close();
window.Closed += (s, e) => dialogViewModel.CloseFinalCommand.Execute(null);
dialogViewModel.RequestCloseFinal += (s, e) => window.Close();
}
if (options.ShowAsDialog)

View File

@@ -52,129 +52,4 @@
</Setter.Value>
</Setter>
</Style>
<Style x:Key="PopUpWindowStyle2" TargetType="{x:Type GroupBox}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type GroupBox}">
<Grid SnapsToDevicePixels="True">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="10" />
<RowDefinition Height="20" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border
Grid.RowSpan="2"
Background="#FF202020"
CornerRadius="3,1,0,3" />
<Border
Grid.Row="1"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Background="#FF202020"
CornerRadius="0,1,0,3" />
<Path
Grid.Column="1"
Data="M 0,0 L 10,10 H 0 Z"
Fill="#FF202020"
StrokeThickness="0" />
<Border
x:Name="Header"
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ColumnSpan="2"
Margin="0,0,0,0"
Padding="10,0,3,0"
VerticalAlignment="Bottom"
Background="{x:Null}">
<ContentPresenter
Margin="5,0,0,3"
VerticalAlignment="Stretch"
Content="{TemplateBinding Header}"
ContentSource="Header"
ContentStringFormat="{TemplateBinding HeaderStringFormat}"
ContentTemplate="{TemplateBinding HeaderTemplate}"
RecognizesAccessKey="True"
RenderTransformOrigin="0,0.5"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
TextElement.FontSize="16">
<ContentPresenter.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="1" ScaleY="1" />
<SkewTransform AngleX="0" AngleY="0" />
<RotateTransform Angle="0" />
<TranslateTransform X="0" Y="0" />
</TransformGroup>
</ContentPresenter.RenderTransform>
</ContentPresenter>
</Border>
<Border
Grid.Row="2"
Grid.RowSpan="1"
Grid.Column="0"
Grid.ColumnSpan="2"
Padding="5,5,5,5">
<ContentPresenter
Margin="0,0,0,0"
Content="{TemplateBinding Content}"
ContentStringFormat="{TemplateBinding ContentStringFormat}"
ContentTemplate="{TemplateBinding ContentTemplate}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</Border>
<Path
x:Name="isDirtyShape"
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Width="18.21"
Height="17.336"
Margin="0,0,41.007,3"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Data="M8.0969173,7.7938912 L7.3260856,1.6313261E-55 10.960733,0.056791361 9.8816968,7.8372078 17.130865,4.505709 18.209901,7.969982 10.336028,9.4841573 16.015164,15.065028 13.005222,17.336183 9.0298264,10.44961 4.7503484,17.141891 1.9107803,14.614571 7.6195467,9.5947088 4.3790577E-47,7.8281079 1.0589099,4.5910004 z"
RenderTransformOrigin="0.5,0.5"
StrokeThickness="0">
<Path.Fill>
<LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
<GradientStop Offset="0" Color="#FFFB6F0E" />
<GradientStop Offset="1" Color="#FF8C400A" />
</LinearGradientBrush>
</Path.Fill>
<Path.RenderTransform>
<TransformGroup>
<ScaleTransform ScaleX="0" ScaleY="0" />
<SkewTransform AngleX="0" AngleY="0" />
<RotateTransform Angle="0" />
<TranslateTransform X="0" Y="0" />
</TransformGroup>
</Path.RenderTransform>
</Path>
<Button
x:Name="button_close"
Grid.Row="0"
Grid.RowSpan="2"
Grid.Column="0"
Grid.ColumnSpan="1"
Width="20"
Height="20"
Margin="3,3,3,3"
HorizontalAlignment="Right"
VerticalAlignment="Center"
Command="{Binding CloseCommand}"
Style="{DynamicResource CloseButtonStyle}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="{DynamicResource MainGroupBoxForegroundBrush}" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="FontFamily" Value="Microsoft Sans Serif" />
<Setter Property="FontSize" Value="11" />
</Style>
</ResourceDictionary>

View File

@@ -19,10 +19,19 @@ namespace BeWo.Validation
{
PropertyInfo lPropInfo = null;
object lCurrentObject = this.ExpressionToValidate.DataItem;
// Claude: DataItem des Bindings und Eltern-Objekt des Ziel-Propertys festhalten,
// damit kontextabhaengige Regeln den Klientenbezug auswerten koennen.
// Bei "PrototypeVM.Notice" ist das DataItem die ServiceRecordListVM (kennt
// WithoutClient), bei "Notice" in den EditViews die ServiceRecordVM selbst.
object lDataItem = lCurrentObject;
object lOwner = lCurrentObject;
if (lCurrentObject != null)
{
foreach (var iPropName in this.ExpressionToValidate.ParentBinding.Path.Path.Split("."))
{
lOwner = lCurrentObject; // Claude: vor dem GetValue merken
lPropInfo = lCurrentObject.GetType().GetProperty(iPropName);
lCurrentObject = lPropInfo.GetValue(lCurrentObject, null);
}
@@ -33,7 +42,12 @@ namespace BeWo.Validation
var lAttributes = lPropInfo.GetCustomAttributes(typeof(ValidationAttribute), true);
if (lAttributes.Length > 0)
{
lValid = ((ValidationAttribute) lAttributes[0]).Validate(pValue);
// Claude: DataItem hat Vorrang, weil dort der View-Zustand liegt
// (ServiceRecordListVM.WithoutClient); sonst greift das Eltern-Objekt.
var lContext = (lDataItem as ICustomerRelatedContext)
?? (lOwner as ICustomerRelatedContext);
lValid = ((ValidationAttribute) lAttributes[0]).Validate(pValue, lContext);
}
}
}

View File

@@ -0,0 +1,12 @@
namespace BeWo.Validation
{
// Claude: Kontext fuer klientenabhaengige Validierungsregeln.
// Wird von ValidationRules.EmptyNoticeInNewServiceRecordsAllowed ausgewertet: die
// Dokumentationspflicht (Mandanten-Setting IsServiceRecordNoticeMandatory) gilt nur fuer
// klientenbezogene Zeiterfassungen, also fuer Eintraege mit Customer/Hilfeplan.
public interface ICustomerRelatedContext
{
// Claude: true, wenn der Eintrag zu einem Customer/SupportConcept gehoert.
bool IsCustomerRelated { get; }
}
}

View File

@@ -15,7 +15,9 @@ namespace BeWo.Validation
public ValidationRules ValidationRule { get; set; }
public bool Validate(object pValue)
// Claude: pContext liefert den Klientenbezug fuer EmptyNoticeInNewServiceRecordsAllowed.
// null bedeutet "unbekannt" -> bisheriges Verhalten (Pflichtfeld bleibt).
public bool Validate(object pValue, ICustomerRelatedContext pContext = null)
{
bool lResult = true;
switch (ValidationRule)
@@ -73,7 +75,12 @@ namespace BeWo.Validation
break;
case ValidationRules.EmptyNoticeInNewServiceRecordsAllowed:
if (BeWoApp.AppSettings.IsServiceRecordNoticeMandatory)
// Claude: Dokumentationspflicht greift nur noch bei klientenbezogenen
// Eintraegen (Customer/Hilfeplan). Ohne Klientenbezug - in
// ServiceRecordView2 also bei abgewaehlter CheckBox "chkWithClient" -
// ist die Dokumentation niemals Pflicht.
if (BeWoApp.AppSettings.IsServiceRecordNoticeMandatory
&& (pContext == null || pContext.IsCustomerRelated))
{
if (pValue is string)
{

View File

@@ -67,13 +67,12 @@ namespace BeWo.View.Controls.AI
{
var viewmodel = new AiPromptbausteinSelectionComplexViewModel(actionType, listvm);
viewmodel.ItemAccepted += ItemAccepted;
viewmodel.Closed += (s, e) => viewmodel.ResetSelection();
viewmodel.RequestCloseFinal += (s, e) => viewmodel.ResetSelection();
ViewModel.AllPromptsViewModel = viewmodel;
var viewmodel2 = new AiPromptbausteinSelectionComplexViewModel(actionType, listvm, true);
viewmodel2.ItemAccepted += ItemAccepted;
popup_promptbaustein_favoriten.Closed += (s, e) => viewmodel2.CloseFinalCommand.Execute(null);
viewmodel2.Closed += (s, e) => viewmodel2.ResetSelection();
popup_promptbaustein_favoriten.Closed += (s, e) => viewmodel2.ResetSelection();
var view2 = new AiPromptbausteinComplexSelectionFavoritenView(viewmodel2);
viewmodel2.SelectedFolder = viewmodel2.Folders.VMList[0];
view2.Padding = new Thickness(3);

View File

@@ -92,13 +92,13 @@
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Path
Data="{StaticResource Phosphor.PuzzlePiece}"
Margin="2"
Grid.RowSpan="2"
Width="24"
Height="24"
Fill="Black"
Stretch="Fill"/>
Grid.RowSpan="2"
Width="24"
Height="24"
Margin="2"
Data="{StaticResource Phosphor.PuzzlePiece}"
Fill="Black"
Stretch="Fill" />
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox
Height="21"
@@ -189,8 +189,8 @@ Fill="Black"
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="IsEnabled" Value="True" />
<Setter Property="IsHitTestVisible" Value="True" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="IsHitTestVisible" Value="False" />
</DataTrigger>
</Style.Triggers>
</Style>
@@ -241,29 +241,28 @@ Fill="Black"
Background="Transparent"
ContextMenuOpening="ListBox_ContextMenuOpening"
PreviewMouseDown="Grid_PreviewMouseDown_2">
<Grid IsEnabled="{Binding IsValid}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="9" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Path
Data="{StaticResource Phosphor.Stack}"
Margin="2"
Grid.RowSpan="2"
Width="24"
Height="24"
Fill="Black"
Stretch="Fill"/>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="9" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Path
Grid.RowSpan="2"
Width="24"
Height="24"
Margin="2"
Data="{StaticResource Phosphor.Stack}"
Fill="Black"
Stretch="Fill" />
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox
Height="21"
Margin="0,0,0,0"
Padding="0"
@@ -276,10 +275,10 @@ Fill="Black"
IsReadOnly="True"
Text="{Binding Path=Title, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"
ToolTipService.ShowDuration="100000">
<TextBox.ToolTip>
<StackPanel Orientation="Vertical">
<Label Content="{Binding Path=Title, Mode=OneWay}" FontWeight="Bold" />
<TextBox
<TextBox.ToolTip>
<StackPanel Orientation="Vertical">
<Label Content="{Binding Path=Title, Mode=OneWay}" FontWeight="Bold" />
<TextBox
MaxWidth="500"
Padding="3,1,0,0"
VerticalAlignment="Center"
@@ -289,16 +288,16 @@ Fill="Black"
IsReadOnly="True"
Text="{Binding Path=Description}"
TextWrapping="Wrap" />
</StackPanel>
</TextBox.ToolTip>
</TextBox>
</StackPanel>
<StackPanel
</StackPanel>
</TextBox.ToolTip>
</TextBox>
</StackPanel>
<StackPanel
Grid.Row="1"
Grid.Column="2"
Margin="0,-1,0,0"
Orientation="Horizontal">
<Border
<Border
x:Name="border1"
Width="46"
Margin="0,0,3,0"
@@ -306,27 +305,27 @@ Fill="Black"
HorizontalAlignment="Left"
Background="#E1F5EE"
CornerRadius="7">
<TextBlock
<TextBlock
Margin="1,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="10"
Text="Routine"
TextWrapping="Wrap" />
</Border>
<TextBlock
</Border>
<TextBlock
Margin="3,0,0,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="10">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} Schritte">
<Binding Path="Steps.Count" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<ListBox
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} Schritte">
<Binding Path="Steps.Count" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</StackPanel>
<ListBox
Grid.Row="2"
Grid.Column="2"
Margin="3,9,3,3"
@@ -337,20 +336,20 @@ Fill="Black"
IsHitTestVisible="False"
ItemsSource="{Binding Steps.VMList}"
Visibility="{Binding Steps.VMList.Count, Converter={StaticResource CollectionCountToVisibilityConverter}}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Padding" Value="0" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Padding" Value="0" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock
x:Name="arrow"
Margin="3"
VerticalAlignment="Center"
Text="&#x2794;" />
<Border
<Border
x:Name="border1"
Height="19"
Margin="0"
@@ -358,49 +357,48 @@ Fill="Black"
HorizontalAlignment="Left"
Background="DarkGray"
CornerRadius="7">
<TextBlock
<TextBlock
Margin="3,0,3,0"
HorizontalAlignment="Center"
VerticalAlignment="Center"
FontSize="10"
Text="{Binding PromptReference.Title, StringFormat={}✦ {0}}"
TextWrapping="Wrap" />
</Border>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
<Setter TargetName="arrow" Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding IsValid}" Value="false">
<Setter TargetName="border1" Property="Background" Value="LightCoral" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
<StackPanel
</Border>
</StackPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource PreviousData}}" Value="{x:Null}">
<Setter TargetName="arrow" Property="Visibility" Value="Collapsed" />
</DataTrigger>
<DataTrigger Binding="{Binding IsValid}" Value="false">
<Setter TargetName="border1" Property="Background" Value="LightCoral" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
<StackPanel
Grid.Row="3"
Grid.Column="2"
Orientation="Horizontal"
Visibility="{Binding IsValid, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=reverse}">
<Image
<Image
x:Name="imgWarning"
Grid.Column="2"
Height="20"
Margin="6,0"
Source="{Binding Source={x:Static draw:SystemIcons.Warning}, Converter={StaticResource IconToImageSourceConverter}, Mode=OneWay}" />
<!-- Visibility="{Binding ElementName=btnOpenAi4, Path=Visibility}" -->
<Label Foreground="Red">
Ungültig
</Label>
</StackPanel>
</Grid>
<!-- Visibility="{Binding ElementName=btnOpenAi4, Path=Visibility}" -->
<Label Foreground="Red">
Ungültig
</Label>
</StackPanel>
</Grid>
</Border>
</DataTemplate>
@@ -422,16 +420,22 @@ Fill="Black"
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TreeView
<GroupBox
Grid.Row="1"
Grid.Column="0"
Margin="0,7,0,0"
Padding="0"
HorizontalAlignment="Stretch"
Header="Bibliothek"
Style="{StaticResource ObjectEditGroupBox}">
<TreeView
x:Name="treeView"
Grid.Row="1"
Grid.Column="0"
MinHeight="100"
Padding="4,16,4,16"
HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch"
AllowDrop="True"
BorderThickness="1,1,0,1"
BorderThickness="1,0,0,1"
ContextMenuOpening="treeView_ContextMenuOpening"
Focusable="True"
ItemContainerStyle="{DynamicResource igoal_treeitemstyle}"
@@ -441,18 +445,18 @@ Fill="Black"
PreviewMouseRightButtonDown="OnPreviewMouseRightButtonDown"
SelectedItemChanged="treeView_SelectedItemChanged"
TreeViewItem.Selected="treeView_Selected">
<TreeView.Resources>
<Style x:Key="igoal_treeitemstyle" TargetType="TreeViewItem">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
<TreeView.InputBindings>
<KeyBinding Key="Delete" Command="{Binding DeleteFolderCommand}" />
<KeyBinding Key="Enter" Command="{Binding OpenEditFolderDialogCommand}" />
<KeyBinding Key="N" Command="{Binding OpenAddFolderDialogCommand}" />
<!--<KeyBinding
<TreeView.Resources>
<Style x:Key="igoal_treeitemstyle" TargetType="TreeViewItem">
<Setter Property="IsEnabled" Value="{Binding IsEnabled}" />
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>
</TreeView.Resources>
<TreeView.InputBindings>
<KeyBinding Key="Delete" Command="{Binding DeleteFolderCommand}" />
<KeyBinding Key="Enter" Command="{Binding OpenEditFolderDialogCommand}" />
<KeyBinding Key="N" Command="{Binding OpenAddFolderDialogCommand}" />
<!--<KeyBinding
Key="C"
Command="{Binding CopyFolderCommand}"
Modifiers="Ctrl" />
@@ -460,33 +464,33 @@ Fill="Black"
Key="V"
Command="{Binding PasteFolderCommand}"
Modifiers="Ctrl" />-->
</TreeView.InputBindings>
<TreeView.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type Image}">
<Setter Property="Height" Value="24" />
</Style>
</ResourceDictionary>
</ContextMenu.Resources>
<MenuItem
</TreeView.InputBindings>
<TreeView.ContextMenu>
<ContextMenu>
<ContextMenu.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type Image}">
<Setter Property="Height" Value="24" />
</Style>
</ResourceDictionary>
</ContextMenu.Resources>
<MenuItem
Command="{Binding OpenAddFolderDialogCommand}"
Header="Neuer Ordner"
ToolTip="Shortcut: N">
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Add24.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Add24.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem
Command="{Binding OpenEditFolderDialogCommand}"
Header="Bearbeiten"
ToolTip="Shortcut: Enter">
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Rename24.png" />
</MenuItem.Icon>
</MenuItem>
<!--<Separator />
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Rename24.png" />
</MenuItem.Icon>
</MenuItem>
<!--<Separator />
<MenuItem
Command="{Binding CopyFolderCommand}"
Header="Kopieren"
@@ -503,18 +507,19 @@ Fill="Black"
<Image Source="..\..\..\Ressources\Icons\Paste24.png" />
</MenuItem.Icon>
</MenuItem>-->
<Separator />
<MenuItem
<Separator />
<MenuItem
Command="{Binding DeleteFolderCommand}"
Header="Löschen"
ToolTip="Shortcut: Entf">
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Delete24.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Delete24.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
</GroupBox>
<GridSplitter
Grid.Row="1"
Grid.Column="1"
@@ -525,7 +530,7 @@ Fill="Black"
Grid.Row="1"
Grid.Column="2"
Grid.ColumnSpan="2">
<!--<Grid.Resources>
<Grid.Resources>
<Style TargetType="Grid">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=treeView, Path=SelectedItem}" Value="{x:Null}">
@@ -533,7 +538,7 @@ Fill="Black"
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>-->
</Grid.Resources>
<TabControl
x:Name="tabcontrol_1"
Padding="0"

View File

@@ -142,6 +142,7 @@
IsReadOnly="True"
x:Name="popupedit_Auftraggeber"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_Auftraggeber_DeleteClick"
PopUpClick="popupedit_Auftraggeber_PopUpClick"
@@ -159,6 +160,7 @@
IsReadOnly="True"
x:Name="popupedit_AuftraggeberContactPersonSearch"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_AuftraggeberContactPersonSearch_DeleteClick"
PopUpClick="popupedit_AuftraggeberContactPersonSearch_PopUpClick"
@@ -175,6 +177,7 @@
IsReadOnly="True"
x:Name="popupedit_Einsatzstelle"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_Einsatzstelle_DeleteClick"
PopUpClick="popupedit_Einsatzstelle_PopUpClick"
@@ -192,6 +195,7 @@
IsReadOnly="True"
x:Name="popupedit_EinsatzstelleContactPersonSearch"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_EinsatzstelleContactPersonSearch_DeleteClick"
PopUpClick="popupedit_EinsatzstelleContactPersonSearch_PopUpClick"
@@ -449,13 +453,15 @@
Grid.Column="3"
Grid.RowSpan="9"
Height="190"
MaxWidth="294"
VerticalAlignment="Top"
VerticalContentAlignment="Stretch"
AcceptsReturn="True"
IsReadOnly="{Binding PermissionCustomerGemeinnutzigeArbeitManage, Mode=OneTime, Converter={StaticResource BoolReverseConverter}, ElementName=root}"
Text="{Binding Path=Bemerkung, UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap"
VerticalScrollBarVisibility="Auto" />
TextWrapping="NoWrap"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"/>
<Popup Margin="10" Name="popup_costbearer" StaysOpen="False"
Placement="MousePoint"

View File

@@ -58,7 +58,7 @@
Grid.Column="2"
IsEnabled="False"
Style="{StaticResource TextEditNumber}"
Text="{Binding Oid, Mode=OneWay}" />
Text="{Binding Oid}" />
<Label
Grid.Row="1"
Grid.Column="0"
@@ -154,7 +154,7 @@
Grid.Column="2"
MaxLength="1024"
Style="{StaticResource TextBoxNoticeLarge}"
Text="{Binding Notice, UpdateSourceTrigger=PropertyChanged}"
Text="{Binding Notice}"
TextWrapping="Wrap" />
</Grid>
</TabItem>

View File

@@ -7,6 +7,7 @@ using BeWo.Core.Commands;
using BeWo.ServiceProxy;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Translation;
using DependencyObject = System.Windows.DependencyObject;
@@ -139,9 +140,27 @@ namespace BeWo.View.Detail
private void RemoveAbsenceTime()
{
AbsenceTimes?.VMList.Remove(DataGridAbsenceTimes.GetCurrentValue<AbsenceTimeVM>());
var absenceTime = DataGridAbsenceTimes.GetCurrentValue<AbsenceTimeVM>();
if (absenceTime == null)
{
return;
}
if (IsAbsenceTimeInThePast(absenceTime) && !BeWoApp.LoggedOnUser.HasRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry))
{
MessageBox.Show(Translator.Translate("Sie haben nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen."),
"BeWo Planer", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
AbsenceTimes?.VMList.Remove(absenceTime);
BeWoWpfUtils.RefreshDXGrid(DataGridAbsenceTimes);
}
private static bool IsAbsenceTimeInThePast(AbsenceTimeVM absenceTime)
{
return absenceTime.End.HasValue && absenceTime.End.Value.Date < DateTime.Today;
}
}
}

View File

@@ -230,19 +230,24 @@ namespace BeWo.View.Detail.Accounting
var dialog = new GkvAbrechnungDialogViewModel(vm);
dialog.Closing += (s, ee) => Detail_Window_Closing(s, new CancelEventArgs());
dialog.RequestCloseFinal += (s, ee) => Detail_Window_Closing(s, new CancelEventArgs());
BeWoApp.MainControl.WindowService.ShowGkvAbrechnungDetailWindow(dialog);
}
private void Detail_Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
var dialog = sender as GkvAbrechnungDialogViewModel;
var vm = dialog.Abrechnung;
var bewo_window = sender as AnimatedBeWoWindow;
var detail_control = bewo_window.GroupBoxContent as GkvAbrechnungDetailControl;
var vm = detail_control.DataContext as GkvAbrechnungLightVM;
vm.CheckAllInvoiceBases();
//vm.Notice = textbox_text;
var checkbox_checked = detail_control.Checkbox_Bezahlt.IsChecked;
var textbox_text = detail_control.txt_Notice.Text;
vm.Notice = textbox_text;
if (vm.IsDirty)
{

View File

@@ -338,7 +338,7 @@ namespace BeWo.View.Detail
ApplicationCommands.Save,
(s, e) =>
{
if (editView.IsValid() && editView.IsCustomerChangeAllowed())
if (editView.IsValid() && editView.IsCustomerChangeAllowed() && editView.ConfirmExpiredHilfeplan())
{
editView.SaveData();
CloseEditView();
@@ -495,18 +495,62 @@ namespace BeWo.View.Detail
return;
}
}
if (!ConfirmExpiredHilfeplan())
{
return;
}
var atvm = ViewModel.CreateFromPrototype();
ViewModel.AccountingTransactionVMList.Add(atvm);
Save();
ViewModel.RefreshAccountingTransactionsForSelectedTreeNode();
}
}
/// Warnung wenn der ausgewählte Hilfeplan zum Buchungsdatum bereits abgelaufen ist (Enddatum des Hilfeplans; Buchungsdatum).
private bool ConfirmExpiredHilfeplan()
{
if (WithoutClient)
{
return true;
}
var selectedNode = ViewModel.SelectedCustomerNode;
if (selectedNode == null || selectedNode.SupportConceptTreeNodeDC == null)
{
return true;
}
var relDC = selectedNode.SupportConceptTreeNodeDC.SupportConceptCostBearerRelDC;
if (relDC == null)
{
return true;
}
return ConfirmHilfeplanNotExpired(relDC.EndDate, ViewModel.PrototypeVM.BookingDate);
}
internal static bool ConfirmHilfeplanNotExpired(DateTime? hilfeplanEndDate, DateTime? bookingDate)
{
if (!hilfeplanEndDate.HasValue || !bookingDate.HasValue)
{
return true;
}
if (hilfeplanEndDate.Value.Date < bookingDate.Value.Date)
{
var message = string.Format(
"Bitte beachten Sie, dass dieser Hilfeplan ist am {0:dd.MM.yyyy} abgelaufen ist. Bitte prüfen ob die Buchung in neuen/aktuellen Hilfeplan gehört.\n\nMöchten Sie die Buchung trotzdem in diesm Hilfeplan speichern?",
hilfeplanEndDate.Value, bookingDate.Value);
return MessageBox.Show(message, "Hilfeplan abgelaufen", MessageBoxButton.YesNo, MessageBoxImage.Warning) == MessageBoxResult.Yes;
}
return true;
}
private void chkWithClient_Checked(object sender, RoutedEventArgs e)
{
if (customerInfoGrid != null)
@@ -662,6 +706,11 @@ namespace BeWo.View.Detail
if (lValid)
{
if (!ConfirmExpiredHilfeplan())
{
return;
}
var atvm = ViewModel.CreateFromPrototype();
ViewModel.AccountingTransactionVMList.Add(atvm);

View File

@@ -165,6 +165,24 @@ namespace BeWo.View.Detail
return lAllowed;
}
/// Warnung wenn der Hilfeplan der bearbeiteten Buchungsdatum bereits abgelaufen ist (Enddatum des Hilfeplans &lt; Buchungsdatum)
public bool ConfirmExpiredHilfeplan()
{
AccountingTransactionVM vm = this.ViewModel != null ? this.ViewModel.SelectedVM : null;
if (vm == null)
{
return true;
}
SupportConceptCostBearerRelDC relDC = vm.CostBearerRel;
if (relDC == null)
{
return true;
}
return AccountingTransactionBookingView.ConfirmHilfeplanNotExpired(relDC.EndDate, vm.BookingDate);
}
public bool IsValid()
{
FlatSupportConceptTreeNodeDC selectedNode = this.ViewModel.SelectedVM.SupportConceptTreeNode;
@@ -197,6 +215,11 @@ namespace BeWo.View.Detail
return false;
}
if (!this.ConfirmExpiredHilfeplan())
{
return false;
}
this.SaveData();
}
}

View File

@@ -370,7 +370,7 @@
Grid.Row="0"
Grid.ColumnSpan="2"
Margin="3,5,3,5"
Content="{markup:Translate Dokumentationstext in der Zeiterfassung Pflichtfeld}"
Content="{markup:Translate Klientenbezogener Dokumentationstext in der Zeiterfassung Pflichtfeld}"
IsChecked="{Binding Path=IsServiceRecordNoticeMandatory}" />
<CheckBox
Grid.Row="1"

View File

@@ -94,7 +94,7 @@
<dxg:GridControl
Grid.Row="1"
MaxHeight="300"
MaxHeight="200"
Margin="0,10,0,0"
ItemsSource="{Binding GoalRatingList.VMList}">
<dxg:GridControl.View>

View File

@@ -94,14 +94,9 @@ namespace BeWo.View.Detail.Report
try
{
var filter = _SelectedFilter;
UrlaubsplanerRootObj = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(filter)));
var absenceOverview = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(filter)));
UpdateScheduler(false, absenceOverview);
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
UpdateScheduler(false);
ColorizeFeiertage();
ApplyFeiertagCellStyle();
}
@@ -276,14 +271,19 @@ namespace BeWo.View.Detail.Report
}
// Claude - optionaler Parameter absenceOverview: vorgeladene Daten aus Button_Click werden übergeben, um doppelten Serviceaufruf zu vermeiden
public void UpdateScheduler(bool neuLaden, List<EmployeeDC> absenceOverview = null)
public async void UpdateScheduler(bool neuLaden)
{
if (neuLaden || UrlaubsplanerRootObj == null)
{
UrlaubsplanerRootObj = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
}
var absenceReasons = _AbsenceReasonDCs;
if (absenceOverview == null)
absenceOverview = ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(_SelectedFilter));
_ListOfEmployee = absenceOverview;
_ListOfEmployee = UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs.Select(i => i.Employee).ToList();
var start = new DateTime(_SelectedFilter.Year, _SelectedFilter.Month, 1);
try
@@ -314,14 +314,14 @@ namespace BeWo.View.Detail.Report
_AppointmentStorage.Clear();
//UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs = new List<AbwesenheitsInformationDC>();
int counter = 0;
foreach (var employee in absenceOverview)
foreach (var employee in _ListOfEmployee)
{
if (neuLaden == true)
{
var tageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageKrankheit = ServiceFacade.DoEmployeeServiceSync(s => s.CountKrankheitstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
}
//if (neuLaden == true)
//{
// var tageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
// UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageUrlaub = ServiceFacade.DoEmployeeServiceSync(s => s.CountUrlaubstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
// UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter].TageKrankheit = ServiceFacade.DoEmployeeServiceSync(s => s.CountKrankheitstage(UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs[counter]));
//}
#region auskommentiert
//AbwesenheitsInformationDC infoDC = new AbwesenheitsInformationDC

View File

@@ -40,6 +40,7 @@ namespace BeWo.View.Detail.Report
private Dictionary<long, List<AbsenceTimeDC>> _AbsenceTimesDict;
private Dictionary<long, List<OvertimeDC>> _OverTimesDict;
private Dictionary<long, DienstInfoDC> _DienstProOidDict; // Claude: schneller Pausen-Lookup statt Listen-Suche pro Eintrag
private CompactWohnheimDC _AuswahlWohnheim;
private DienstZeileDC _AuswahlDienstZeileDC;
@@ -944,6 +945,11 @@ namespace BeWo.View.Detail.Report
{
_AuswahlDienstZeileDC.RemoveDienst(datum.Day);
DeleteFromList(eintrag, null);
// Claude: Beim Bearbeiten (alter Eintrag wird durch neuen ersetzt) die alte Dauer vom Ist/Saldo abziehen,
// sonst wird sie doppelt gezählt. Beim Löschen (dienst.Oid == -1) passiert der Abzug weiter unten.
if (dienst.Oid != -1)
CheckEintragAnAbwesenheitstagen(eintrag, null, employee, false);
}
}
if (dienst.Oid == -1)
@@ -1076,6 +1082,11 @@ namespace BeWo.View.Detail.Report
{
_AuswahlDienstZeileDC.RemoveDienst(datum.Day);
DeleteFromList(null, vertretung);
// Claude: Beim Bearbeiten (alte Vertretung wird durch neue ersetzt) die alte Dauer vom Ist/Saldo abziehen,
// sonst wird sie doppelt gezählt. Beim Löschen (dienst.Oid == -1) passiert der Abzug weiter unten.
if (dienst.Oid != -1)
CheckEintragAnAbwesenheitstagen(null, vertretung, employee, false);
}
}
if (dienst.Oid == -1)
@@ -1805,12 +1816,12 @@ namespace BeWo.View.Detail.Report
if (eintraegeEinerWoche != null)
{
foreach (var eintrag in eintraegeEinerWoche)
stundenWoche.Add(eintrag.DauerInStunden);
stundenWoche.Add(DienstInfoDC.DauerAbzueglichPause(eintrag.DauerInStunden, eintrag.DienstOid, _DienstProOidDict)); // Claude: Pause abziehen
}
if (vertretungenEinerWoche != null)
{
foreach (var vertretung in vertretungenEinerWoche)
stundenWoche.Add(vertretung.DauerInStunden);
stundenWoche.Add(DienstInfoDC.DauerAbzueglichPause(vertretung.DauerInStunden, vertretung.DienstOid, _DienstProOidDict)); // Claude: Pause abziehen
}
if (ueberstundenEinerWoche != null)
{
@@ -2120,7 +2131,7 @@ namespace BeWo.View.Detail.Report
{
if (tage.Contains(e.Datum))
{
res.Add(e.DauerInStunden * -1); // Abzug von Wochen-Ist
res.Add(DienstInfoDC.DauerAbzueglichPause(e.DauerInStunden, e.DienstOid, _DienstProOidDict) * -1); // Abzug von Wochen-Ist // Claude: gleicher Pausenabzug wie beim Aufaddieren
//_DienstplanerRootObj.MonatsZusammenfassung // Abzug von Monats-Ist
// .First(z => z.Employee.EmployeeOid == e.EmployeeOid).Ist -= Convert.ToDecimal(e.DauerInStunden);
}
@@ -2132,7 +2143,7 @@ namespace BeWo.View.Detail.Report
{
if (tage.Contains(v.Datum))
{
res.Add(v.DauerInStunden * -1); // Abzug von Wochen-Ist
res.Add(DienstInfoDC.DauerAbzueglichPause(v.DauerInStunden, v.DienstOid, _DienstProOidDict) * -1); // Abzug von Wochen-Ist // Claude: gleicher Pausenabzug wie beim Aufaddieren
//_DienstplanerRootObj.MonatsZusammenfassung // Abzug von Monats-Ist
// .First(z => z.Employee.EmployeeOid == v.EmployeeOid).Ist -= Convert.ToDecimal(v.DauerInStunden);
}
@@ -2237,6 +2248,9 @@ namespace BeWo.View.Detail.Report
}
_OverTimesDict = overtimeTemp;
// Claude: Lookup-Dictionary für den Pausenabzug einmalig aufbauen
_DienstProOidDict = DienstInfoDC.BuildDienstProOidDictionary(_DienstplanerRootObj.AlleDienste);
_GridControl.ItemsSource = _DienstplanerRootObj.DienstZeilenListe;
}
@@ -2572,6 +2586,10 @@ namespace BeWo.View.Detail.Report
}
private List<DienstplanerMonthlySummaryDC> CheckEintragAnAbwesenheitstagen(DienstEintragDC eintrag, DienstvertretungDC vertretung, EmployeeDC employee, bool plus)
{
// Claude: Pause des Dienstes von der Dauer abziehen, damit Ist/Saldo beim Eintragen/Löschen genauso berechnet werden wie beim Neuladen (BerechneSollSaldoUndIst)
decimal dauerEintrag = eintrag != null ? Convert.ToDecimal(DienstInfoDC.DauerAbzueglichPause(eintrag.DauerInStunden, eintrag.DienstOid, _DienstProOidDict)) : 0m;
decimal dauerVertretung = vertretung != null ? Convert.ToDecimal(DienstInfoDC.DauerAbzueglichPause(vertretung.DauerInStunden, vertretung.DienstOid, _DienstProOidDict)) : 0m;
if (!_DienstplanerRootObj.EnableDiensteAnFeiertagen)
{
if (eintrag != null)
@@ -2584,13 +2602,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo += Convert.ToDecimal(eintrag.DauerInStunden);
item.Ist += dauerEintrag; // Claude: Dauer abzüglich Pause
item.Saldo += dauerEintrag;
}
else
{
item.Ist -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Ist -= dauerEintrag;
item.Saldo -= dauerEintrag;
}
}
@@ -2607,13 +2625,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo += Convert.ToDecimal(vertretung.DauerInStunden);
item.Ist += dauerVertretung; // Claude: Dauer abzüglich Pause
item.Saldo += dauerVertretung;
}
else
{
item.Ist -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Ist -= dauerVertretung;
item.Saldo -= dauerVertretung;
}
}
}
@@ -2631,13 +2649,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo += Convert.ToDecimal(eintrag.DauerInStunden);
item.Ist += dauerEintrag; // Claude: Dauer abzüglich Pause
item.Saldo += dauerEintrag;
}
else
{
item.Ist -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Ist -= dauerEintrag;
item.Saldo -= dauerEintrag;
}
}
@@ -2651,13 +2669,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo += Convert.ToDecimal(vertretung.DauerInStunden);
item.Ist += dauerVertretung; // Claude: Dauer abzüglich Pause
item.Saldo += dauerVertretung;
}
else
{
item.Ist -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Ist -= dauerVertretung;
item.Saldo -= dauerVertretung;
}
}
}

View File

@@ -1757,10 +1757,15 @@ namespace BeWo.View.Detail
{
var control = new RatingEditView();
control.InitView(vm);
var height = this.ActualHeight - 50;
if (height < 600)
{
height = 600;
}
var beWoWindow = new BeWoWindow
{
rootGroupBox = { Header = "Bewertung bearbeiten" },
Height = this.Height,
Height = height,
Width = 1000,
MinWidth = 550,
WindowStartupLocation = WindowStartupLocation.CenterOwner,

View File

@@ -70,7 +70,7 @@ namespace BeWo.View.Detail
urlaubskonto = new List<UrlaubskontoDarstellungDC>();
urlaubskonto.Add(new UrlaubskontoDarstellungDC()
{
Erlaeuterung = "Es existiert kein Vertrag für ausgewähltes Jahr",
Erlaeuterung = "Es existiert kein Vertrag für das ausgewählte Jahr",
});
button_openLeaveDayDialogue.Visibility = Visibility.Collapsed;
}

View File

@@ -2655,7 +2655,7 @@
Width="70"
AllowEditing="False"
FieldName="HatUnterschriftImage"
Header="Unterschrift"
Header="Einzelunterschrift"
IsEnabled="False"
Visible="False">
<dxg:GridColumn.EditSettings>

View File

@@ -2314,6 +2314,7 @@ namespace BeWo.View.Detail.Zeiterfassung
if (ViewModel != null)
{
ViewModel.IsGroupBooking = true;
ViewModel.IsMultiBooking = false;
}
supportConceptSelectionControl.Visibility = Visibility.Collapsed;
@@ -2341,6 +2342,11 @@ namespace BeWo.View.Detail.Zeiterfassung
SelectedItemChanged(
SupportConceptService.CreateFlatSupportConceptItem(multiSupportConceptControl.SelectedItem, null));
if (multiSupportConceptControl.SelectedSupportConcepts != null && multiSupportConceptControl.SelectedSupportConcepts.Count > 0)
{
ViewModel.UpdateGroupServiceAccountings(multiSupportConceptControl.SelectedSupportConcepts);
}
}
private void ChkGroupBooking_Unchecked(object sender, RoutedEventArgs e)
@@ -2383,6 +2389,7 @@ namespace BeWo.View.Detail.Zeiterfassung
if (ViewModel != null)
{
ViewModel.IsMultiBooking = true;
ViewModel.IsGroupBooking = false;
}
supportConceptSelectionControl.Visibility = Visibility.Collapsed;
@@ -2409,6 +2416,10 @@ namespace BeWo.View.Detail.Zeiterfassung
SelectedItemChanged(
SupportConceptService.CreateFlatSupportConceptItem(multiSupportConceptControl.SelectedItem, null));
if (multiSupportConceptControl.SelectedSupportConcepts != null && multiSupportConceptControl.SelectedSupportConcepts.Count > 0)
{
ViewModel.UpdateGroupServiceAccountings(multiSupportConceptControl.SelectedSupportConcepts);
}
}
private void ChkMultiBooking_Unchecked(object sender, RoutedEventArgs e)
@@ -2470,6 +2481,26 @@ namespace BeWo.View.Detail.Zeiterfassung
ButtonZeiterfassungErstellen.Visibility = BeWoApp.AppSettings.ShowKlientenBetreuungszeiten ? Visibility.Visible : Visibility.Collapsed;
}
SetRebookingButtonVisibility();
RevalidateNotice(); // Claude
}
// Claude: Der Klientenbezug entscheidet, ob die Dokumentation Pflichtfeld ist
// (ValidationRules.EmptyNoticeInNewServiceRecordsAllowed). Beim Umschalten der CheckBox
// muss das Notice-Binding neu bewertet werden, sonst bleibt ein bereits angezeigter
// Validierungsfehler stehen bzw. ein neu entstandener wird nicht angezeigt.
private void RevalidateNotice()
{
if (dokumentationsTextBox == null)
{
return;
}
var lExpression = dokumentationsTextBox.GetBindingExpression(TextBox.TextProperty);
if (lExpression != null)
{
lExpression.UpdateSource();
}
}
private void ChkWithClient_Unchecked(object sender, RoutedEventArgs e)
@@ -2498,6 +2529,8 @@ namespace BeWo.View.Detail.Zeiterfassung
}
SetRebookingButtonVisibility();
RevalidateNotice(); // Claude
}
//CB EINKOMMENTIEREN

View File

@@ -41,7 +41,7 @@
x:FieldModifier="public"
MouseDoubleClick="RootGroupBox_OnMouseDoubleClick"
MouseLeftButtonDown="RootGroupBox_OnMouseLeftButtonDown"
Style="{DynamicResource PopUpWindowStyle2}">
Style="{DynamicResource PopUpWindowStyle}">
<GroupBox.CommandBindings>
<CommandBinding Command="ApplicationCommands.Close" Executed="CommandBinding_Close_Executed" />
<CommandBinding Command="ApplicationCommands.Save" Executed="CommandBinding_Save_Executed" />

View File

@@ -57,7 +57,7 @@ namespace BeWo.View.Windows
{
InitializeComponent();
//CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (s, e) => Close()));
CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (s, e) => Close()));
if(ServiceFacade.IsWaiting())
StartWaiting();
@@ -169,7 +169,7 @@ namespace BeWo.View.Windows
public void Window_Closed(object sender, EventArgs e)
{
}
public void StartWaiting()

View File

@@ -245,7 +245,7 @@ namespace BeWo.ViewModel
public AiPromptbausteinFolderVM Parent { get; set; }
public FontWeight FontWeight => !IsNew && (Parent is null || Parent.Parent is null) ? FontWeights.SemiBold : FontWeights.Medium;
public FontWeight FontWeight => !IsNew && Parent is null ? FontWeights.SemiBold : FontWeights.Medium;
public bool HasSubFolders => SubFolders is object && SubFolders.Count > 0;
public int TotalPromptCount

View File

@@ -156,9 +156,11 @@ namespace BeWo.ViewModel
liste.DoForEach(f => f.Transaktionskassenbestand = 0);
var vorherige = liste.FirstOrDefault();
vorherige.Transaktionskassenbestand = Anfangsbestand ?? 0;
if (vorherige != null)
{
vorherige.Transaktionskassenbestand = Anfangsbestand ?? 0;
foreach (var transaktion in liste)
{
transaktion.Transaktionskassenbestand = vorherige.Transaktionskassenbestand + transaktion.Betrag*(transaktion.Zahlungstyp.Enum == Zahlungstyp.Auszahlung ? -1 : 1);

View File

@@ -25,6 +25,8 @@ namespace BeWo.ViewModel.Light
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long _Oid;
private long _Version;
private string _Notice;
private long _OrganisationOid;
@@ -115,11 +117,31 @@ namespace BeWo.ViewModel.Light
public DateTime ErstelltAmDate => ErstelltAm.Date;
public long Oid
{
get => DataContract.Oid;
get { return this._Oid; }
set
{
if (this.AreDifferent(this._Oid, value))
{
this._Oid = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Oid, value), nameof(Oid));
this.FirePropertyChanged(nameof(Oid));
}
}
}
public long Version
{
get => DataContract.Version;
get { return this._Version; }
set
{
if (this.AreDifferent(this._Version, value))
{
this._Version = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Version, value), nameof(Version));
this.FirePropertyChanged(nameof(Version));
}
}
}
public string Notice
{
@@ -329,7 +351,7 @@ namespace BeWo.ViewModel.Light
public override void UpdateByDataContract(GkvAbrechnungLightDC pDataContract)
{
DataContract = pDataContract;
Version = pDataContract.Version;
Notice = pDataContract.Notice;
@@ -350,6 +372,9 @@ namespace BeWo.ViewModel.Light
_ErstelltAm = pDataContract.ErstelltAm;
_Oid = pDataContract.Oid;
_Version = pDataContract.Version;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
@@ -376,6 +401,8 @@ namespace BeWo.ViewModel.Light
}
protected override GkvAbrechnungLightDC MapToDataContract(GkvAbrechnungLightDC pDataContract, bool doCommit)
{
pDataContract.Version = _Version;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
@@ -393,6 +420,7 @@ namespace BeWo.ViewModel.Light
return;
}
Version = dc.Version;
Protokolle = dc.Protokolle.ToList();
IsReady2Send = dc.IsReady2Send;

View File

@@ -13,6 +13,7 @@ using BeWo.Core;
using BeWo.Core.Commands;
using BeWo.Core.Service;
using BeWo.ServiceProxy;
using BeWo.Validation; // Claude: ICustomerRelatedContext
using BeWo.View.Controls.AI;
using BeWo.ViewModel.Controls.AI;
using BeWo.ViewModel.View.AI;
@@ -34,7 +35,8 @@ using DispatcherObject = System.Windows.Threading.DispatcherObject;
namespace BeWo.ViewModel.ListViewModel
{
public class ServiceRecordListVM : AbstractDCListMapperVM<ServiceRecordDC, ServiceRecordVM>, ITextProvider
// Claude: ICustomerRelatedContext -> steuert die Dokumentationspflicht bei der Neuerfassung
public class ServiceRecordListVM : AbstractDCListMapperVM<ServiceRecordDC, ServiceRecordVM>, ITextProvider, ICustomerRelatedContext
{
public static string PropertyName_CustomerNodes = "CustomerNodes";
public static string PropertyName_Information = "Information";
@@ -666,6 +668,14 @@ namespace BeWo.ViewModel.ListViewModel
public bool WithoutClient { get; set; }
// Claude: Klientenbezug fuer die Dokumentationspflicht. In ServiceRecordView2 steuert das
// die CheckBox "chkWithClient" ueber WithoutClient. In Views ohne diese CheckBox
// (z.B. AdditionalServiceView) bleibt WithoutClient false -> Verhalten wie bisher.
public bool IsCustomerRelated
{
get { return !WithoutClient; }
}
protected override Comparison<ServiceRecordVM> Comparison
{
get { return (x, y) => y.StartDate.CompareTo(x.StartDate); }
@@ -1042,8 +1052,8 @@ namespace BeWo.ViewModel.ListViewModel
{
if (_SelectedCustomerNode.SupportConceptTreeNodeDC == null)
{
//Gruppen- oder Mehrfachbuchung
PrototypeVM.UpdateServiceAccountings(null, _Category2Services, true);
//Gruppen- oder Mehrfachbuchung
PrototypeVM.UpdateServiceAccountings(null, _Category2Services, true);
BuildServiceRecordsForTreeNode(_SelectedCustomerNode, true, OnlyWithThisType);
}
@@ -1844,13 +1854,18 @@ namespace BeWo.ViewModel.ListViewModel
UpdateGruppenZiele(allInfos);
if (BeWoApp.AppSettings.FilterGroupServiceCategories)
if (BeWoApp.AppSettings.FilterGroupServiceCategories || oids.Count == 1)
{
var serviceAccountings = ErstelleServiceCategorySchnittmenge(allInfos);
PrototypeVM.UpdateServiceAccountings(serviceAccountings, _Category2Services, true);
}
PrototypeVM.UpdateServiceAccountings(serviceAccountings, _Category2Services, true);
}
else
{
PrototypeVM.UpdateServiceAccountings(null, _Category2Services, true);
}
}
}
}
private void UpdateGruppenZiele(List<SupportConceptTreeNodeDetailInfoDC> allInfos)

View File

@@ -21,7 +21,8 @@ using Color = System.Windows.Media.Color;
namespace BeWo.ViewModel
{
public class ServiceRecordVM : AbstractDCMapperVM<ServiceRecordDC>
// Claude: ICustomerRelatedContext -> steuert die Dokumentationspflicht beim Bearbeiten
public class ServiceRecordVM : AbstractDCMapperVM<ServiceRecordDC>, ICustomerRelatedContext
{
public String ATEST { get; set; }
#region Constants and Fields
@@ -1339,6 +1340,18 @@ namespace BeWo.ViewModel
}
}
// Claude: Klientenbezug fuer die Dokumentationspflicht beim Bearbeiten eines bestehenden
// Eintrags (ServiceRecordEditView / ServiceRecordGroupEditView binden direkt an dieses VM).
// Beim Laden aus dem DataContract ist Customer gesetzt, wenn der Eintrag zu einem
// Klienten gehoert - kundenlose Eintraege haben Customer == null.
// Achtung: Am PrototypeVM der Neuerfassung ist Customer immer null; dort liefert
// ServiceRecordListVM.IsCustomerRelated den Kontext (DataItem hat im AttributeValidator
// Vorrang), weil der Kunde erst nach der Validierung an den Klon geschrieben wird.
public bool IsCustomerRelated
{
get { return Customer != null; }
}
[Validation(ValidationRule = ValidationRules.EmptyNoticeInNewServiceRecordsAllowed)]
public string Notice
{

View File

@@ -972,13 +972,11 @@ namespace BeWo.ViewModel
Oid = -5,
Title = "Favoriten",
Description = "Eigene Favoriten",
SubPrompts = new List<AiPromptbausteinPromptDC>(),
SubRoutines = new List<AiPromptbausteinRoutineDC>()
SubPrompts = new List<AiPromptbausteinPromptDC>()
};
var fav_vm = new AiPromptbausteinFolderVM(favoriten);
fav_vm.SubPrompts.VMList.Clear();
fav_vm.SubRoutines.VMList.Clear();
folders.VMList.Insert(0, fav_vm);

View File

@@ -74,8 +74,6 @@ namespace BeWo.ViewModel.View.AI
{
Folders = new AiPromptbausteinFolderListVM();
}
//Closing += (s, e) => ResetSelection();
}
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType) : this()
{
@@ -86,7 +84,7 @@ namespace BeWo.ViewModel.View.AI
public AiPromptbausteinSelectionComplexViewModel(AiActionType aiActionType, AiPromptbausteinFolderListVM viewModel, bool isFavorite = false, bool canOpen = true) : this(aiActionType)
{
LoadedActionType = aiActionType;
UpdateVMList(viewModel);
Folders = viewModel;
IsFavorite = isFavorite;
CanOpenContextMenu = canOpen;
}
@@ -156,9 +154,6 @@ namespace BeWo.ViewModel.View.AI
public AiPromptbausteinFolderListVM Folders { get; private set; }
public AiActionType LoadedActionType { get; set; }
public AiPromptbausteinFolderVM FavoritenFolder => Folders.VMList[0];
public AiPromptbausteinFolderVM RootFolders => Folders.VMList[1];
public bool HasFavoriten
{
get
@@ -168,7 +163,7 @@ namespace BeWo.ViewModel.View.AI
return true;
#endif
return Folders.Count > 1 && (FavoritenFolder.Prompts.Count > 0 || FavoritenFolder.Routines.Count > 0);
return Folders.Count > 3 && (Folders.VMList[0].Prompts.Count > 0 || Folders.VMList[0].Routines.Count > 0);
}
}
@@ -180,8 +175,10 @@ namespace BeWo.ViewModel.View.AI
SelectedFolder = null;
// Favoriten-Popup:
var target = IsFavorite ? FavoritenFolder : RootFolders;
// Favoriten-Popup: Favoriten (VMList[0]), sonst "Eigene" (VMList[1]) vorauswählen.
var target = IsFavorite
? (Folders.VMList.Count > 0 ? Folders.VMList[0] : null)
: (Folders.VMList.Count > 1 ? Folders.VMList[1] : null);
if (target != null)
{
@@ -214,7 +211,7 @@ namespace BeWo.ViewModel.View.AI
{
VMFactory.CreateAiPromptbausteinFolderListVMAsync(AiActionType, UpdateVMList);
if (notify)
if(notify)
VMListReloaded?.Invoke(this, EventArgs.Empty);
}
private void UpdateVMList(AiPromptbausteinFolderListVM new_list)
@@ -223,23 +220,17 @@ namespace BeWo.ViewModel.View.AI
FirePropertyChanged(nameof(Folders));
if (Folders.VMList.Count > 0
&& Folders.VMList[0].DataContract.Oid == -51
&& Folders.VMList[0].SubFolders.Count > 0
&& Folders.VMList[0].SubFolders.VMList[0].DataContract.Oid == -5)
if (Folders.VMList.Count > 0 && Folders.VMList[0].DataContract.Oid == -5)
{
Favoriten = Folders.VMList[0].SubFolders.VMList[0];
Favoriten = Folders.VMList[0];
if (IsFavorite)
SelectedFolder = Favoriten;
}
if (!IsFavorite &&
Folders.VMList.Count > 0
&& Folders.VMList[0].DataContract.Oid == -51
&& Folders.VMList[0].SubFolders.Count > 1
&& Folders.VMList[0].SubFolders.VMList[1].DataContract.Oid == -1)
Folders.VMList[0].SubFolders.VMList[1].IsSelected = true;
// "Eigene" (VMList[1]) im normalen Modus vorauswählen.
if (!IsFavorite && Folders.VMList.Count > 1)
Folders.VMList[1].IsSelected = true;
FirePropertyChanged(nameof(HasFavoriten));
}

View File

@@ -29,8 +29,7 @@ namespace BeWo.ViewModel.View.Administration
private AiActionType AiActionType { get; set; }
public AiPromptbausteinFolderListVM Folders { get; set; }
public AiPromptbausteinFolderVM Favoriten => Folders.VMList[0];
public AiPromptbausteinFolderVM RootFolders => Folders.VMList[1];
public AiPromptbausteinFolderVM Favoriten { get; set; }
public AiPromptbausteinFolderVM CopiedFolder { get; set; }
public AiPromptbausteinPromptVM CopiedPrompt { get; set; }
@@ -82,8 +81,7 @@ namespace BeWo.ViewModel.View.Administration
public AbstractBaseVM SelectedItem
{
get => _SelectedItem;
set
{
set {
var success = SetProperty(ref _SelectedItem, value, nameof(SelectedItem));
if (!success)
@@ -171,7 +169,7 @@ namespace BeWo.ViewModel.View.Administration
OpenAddRoutineDialogCommand.RaiseCanExecuteChanged();
OpenEditRoutineDialogCommand.RaiseCanExecuteChanged();
DeleteRoutineCommand.RaiseCanExecuteChanged();
ChangeFavoritenStateRoutineCommand.RaiseCanExecuteChanged();
ChangeFavoritenStateRoutineCommand.RaiseCanExecuteChanged();
}
public void UpdateItemCommands()
{
@@ -187,12 +185,14 @@ namespace BeWo.ViewModel.View.Administration
listvm =>
{
Folders = listvm;
if (RootFolders.SubFolders.VMList[0].DataContract.Oid == -1)
if (Folders.VMList.Count > 0 && Folders.VMList[0].DataContract.Oid == -5)
{
RootFolders.SubFolders.VMList[0].IsSelected = true;
Favoriten = Folders.VMList[0];
}
if (Folders.VMList.Count > 1)
Folders.VMList[1].IsSelected = true;
FirePropertyChanged(nameof(Folders));
});
}

View File

@@ -1,35 +1,25 @@
using DevExpress.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace BeWo.ViewModel.View
{
public class DialogViewModel : WindowViewModel
{
public event EventHandler Closing;
public event EventHandler Closed;
public event EventHandler RequestCloseFinal;
public DelegateCommand CloseCommand { get; set; }
public DelegateCommand CloseFinalCommand { get; set; }
protected DialogViewModel() : base()
public DialogViewModel() : base()
{
CloseCommand = new DelegateCommand(Close, canClose, false);
CloseFinalCommand = new DelegateCommand(CloseFinal, canClose, false);
}
protected virtual void Close()
{
Closing?.Invoke(this, EventArgs.Empty);
}
protected virtual void CloseFinal()
{
Closed?.Invoke(this, EventArgs.Empty);
}
protected virtual bool canClose()
{
return true;
RequestCloseFinal?.Invoke(this, EventArgs.Empty);
}
}
}

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net45" />
<package id="CsvHelper" version="15.0.5" targetFramework="net45" requireReinstallation="true" />
<package id="Microsoft.CSharp" version="4.5.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net452" />
<package id="RestSharp" version="106.15.0" targetFramework="net452" />
<package id="System.Runtime.CompilerServices.Unsafe" version="4.5.2" targetFramework="net45" requireReinstallation="true" />
<package id="System.Threading.Tasks.Extensions" version="4.5.2" targetFramework="net45" requireReinstallation="true" />
<package id="System.ValueTuple" version="4.4.0" targetFramework="net45" requireReinstallation="true" />
</packages>

View File

@@ -115,8 +115,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LebenshilfeEssenReports", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MuellestumpeReports", "ReportImp\MuellestumpeReports\MuellestumpeReports.csproj", "{9145848B-880B-495D-A528-61830A30AB4D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SchillingerReports", "ReportImp\SchillingerReports\SchillingerReports.csproj", "{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WigonetzReports", "ReportImp\WigonetzReports\WigonetzReports.csproj", "{2EDF987E-ABA8-4840-90FB-4B364BA8D19A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SigncomReports", "ReportImp\SigncomReports\SigncomReports.csproj", "{79D48DBF-DBD5-4CCB-B643-3DD3C5F4ADF0}"
@@ -1004,6 +1002,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PerspektiveAnitaNelles", "R
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FabiansDatenbank", "ReportImp\FabiansDatenbank\FabiansDatenbank.csproj", "{2B6F428D-8F97-4638-AF6B-907CB98D9869}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VereinZurIntegrationChemnitz", "ReportImp\VereinZurIntegrationChemnitz\VereinZurIntegrationChemnitz.csproj", "{EA969934-60A6-459F-A07C-1CF537ED775E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BEWODIREKTGmbH", "ReportImp\BEWODIREKTGmbH\BEWODIREKTGmbH.csproj", "{B549B705-DA0C-40A6-85D9-27D6852BC991}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|.NET = Debug|.NET
@@ -2099,28 +2101,6 @@ Global
{9145848B-880B-495D-A528-61830A30AB4D}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{9145848B-880B-495D-A528-61830A30AB4D}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{9145848B-880B-495D-A528-61830A30AB4D}.Release|x86.ActiveCfg = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|.NET.ActiveCfg = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|.NET.Build.0 = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Debug|x86.ActiveCfg = Debug|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|.NET.ActiveCfg = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|.NET.Build.0 = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|Mixed Platforms.ActiveCfg = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|Mixed Platforms.Build.0 = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|x86.ActiveCfg = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.DebugRemote|x86.Build.0 = DebugRemote|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|.NET.ActiveCfg = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|.NET.Build.0 = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|Any CPU.Build.0 = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9}.Release|x86.ActiveCfg = Release|Any CPU
{2EDF987E-ABA8-4840-90FB-4B364BA8D19A}.Debug|.NET.ActiveCfg = Debug|Any CPU
{2EDF987E-ABA8-4840-90FB-4B364BA8D19A}.Debug|.NET.Build.0 = Debug|Any CPU
{2EDF987E-ABA8-4840-90FB-4B364BA8D19A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -12318,6 +12298,54 @@ Global
{2B6F428D-8F97-4638-AF6B-907CB98D9869}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{2B6F428D-8F97-4638-AF6B-907CB98D9869}.Release|x86.ActiveCfg = Release|Any CPU
{2B6F428D-8F97-4638-AF6B-907CB98D9869}.Release|x86.Build.0 = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|.NET.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|.NET.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|x86.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Debug|x86.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|.NET.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.DebugRemote|x86.Build.0 = Debug|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|.NET.ActiveCfg = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|.NET.Build.0 = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|Any CPU.Build.0 = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|x86.ActiveCfg = Release|Any CPU
{EA969934-60A6-459F-A07C-1CF537ED775E}.Release|x86.Build.0 = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|.NET.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|.NET.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|x86.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Debug|x86.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|.NET.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.DebugRemote|x86.Build.0 = Debug|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|.NET.ActiveCfg = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|.NET.Build.0 = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|Any CPU.Build.0 = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|x86.ActiveCfg = Release|Any CPU
{B549B705-DA0C-40A6-85D9-27D6852BC991}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -12371,7 +12399,6 @@ Global
{F0F719F9-916F-4C22-AC0F-B3237AD5B5FC} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{48C4F2FB-0251-47B5-8CB8-268AD2020D76} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{9145848B-880B-495D-A528-61830A30AB4D} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{5B55F33D-F348-4ABA-AC5E-0826BE1A6EC9} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{2EDF987E-ABA8-4840-90FB-4B364BA8D19A} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{79D48DBF-DBD5-4CCB-B643-3DD3C5F4ADF0} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{F2CF1C5C-74F7-47D7-983F-30172B5C0BBC} = {D8A691C5-146D-4613-86CC-438F02FE9106}
@@ -12814,6 +12841,8 @@ Global
{279D4AEA-239C-4A2C-91DE-735EB7A72F96} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{D80E7BBD-F017-4FBB-B3D3-5AD9F43C418D} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{2B6F428D-8F97-4638-AF6B-907CB98D9869} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{EA969934-60A6-459F-A07C-1CF537ED775E} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{B549B705-DA0C-40A6-85D9-27D6852BC991} = {D8A691C5-146D-4613-86CC-438F02FE9106}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FBE985BB-9F0F-4DBB-8F94-ABC37A803FF9}

View File

@@ -9,7 +9,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BeWoChatServer</RootNamespace>
<AssemblyName>BeWoChatServer</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
</PropertyGroup>
@@ -49,14 +49,6 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\BeWoPlaner\Lib\Castle.DynamicProxy2.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\log4net.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.6.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\NHibernate.dll</HintPath>
@@ -88,7 +80,6 @@
<Content Include="Multitenancy\demo.config">
<SubType>Designer</SubType>
</Content>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data\Data.csproj">
@@ -116,4 +107,8 @@
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<PackageReference Include="log4net" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="6.0.5" targetFramework="net40" requireReinstallation="true" />
</packages>

View File

@@ -16,12 +16,5 @@
<add key="ChangesScriptName" value="Changes_alle_fuer_neue_db.sql" />
<add key="LogFilePath" value="Logs\" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<!-- Bindungsumleitungen werden per AutoGenerateBindingRedirects beim Build erzeugt. -->
</configuration>

View File

@@ -37,44 +37,11 @@
<ApplicationIcon>bdt.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.8.0.0\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=8.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.8.0.2\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="MySqlConnector, Version=2.0.0.0, Culture=neutral, PublicKeyToken=d33d3e53aa5f8c92, processorArchitecture=MSIL">
<HintPath>..\packages\MySqlConnector.2.4.0\lib\net471\MySqlConnector.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=8.0.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.8.0.1\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.5.5\lib\net461\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Net" />
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.0.0\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Transactions" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data" />
@@ -97,11 +64,23 @@
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="bdt.ico" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
<PackageReference Include="MySqlConnector" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="System.Buffers" />
<PackageReference Include="System.Diagnostics.DiagnosticSource" />
<PackageReference Include="System.Memory" />
<PackageReference Include="System.Numerics.Vectors" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" />
<PackageReference Include="System.Threading.Tasks.Extensions" />
</ItemGroup>
</Project>

View File

@@ -118,7 +118,6 @@ namespace BeWoDatabaseTerminator.MySql
{
try
{
return;
_Connection.Open();
var command = new MySqlCommand($"DROP SCHEMA IF EXISTS `{schemaName}`;", _Connection);

View File

@@ -57,6 +57,8 @@ namespace BeWoDatabaseTerminator
private static String PUB_KEY_E8 = "04d165f25edc4bb40c029cd2b2faeee96cab3aae38a1f4d4393233c542d4cc330c34c7212090705ce8622f1c71b342d779be460dc1db47a113a0c7df8126633bd48d1df63d823332f6f42be7f5963ab41367187b6b3e8d48d9eadeedae6d3e874c";
private static String PUB_KEY_E9 = "04a05cdc459f3bace602a958495d0c153a22027ce9a68d594897db5c68e9ae3064c9d15b6017a4720ae52449ade7bf3b4783f582b6cfb60777a140657e83335878a1a635d69288ef95c78c99462abd56d0737f69083dd18988c30abed6a6e22a73";
private static String PUB_KEY_R10 = "CF57E5E6C45412EDB447FEC92758764650288C1D3E88DF059DD5B51829BDDDB55ABFFAF6CEA3BEAF00214B625A5A3C012FC55803F689FF8E1143EBC1B5E01407968F6F1FD7E7BA8139097565B7C2AF185B372628E7A3F4072B6D1AFFAB58BC95AE40FFE9CB57C4B55B7F780D1861BC17E754C6BB4991CD6E18D18085EEA66536BC74EABC504CEAFC21F338169394BAB0D36B3806CD16127ACA5275C8AD76B2C29C5D98455C6F617BC62DEE3C13528601D957E6381CDF8DB51F92919AE74A1CCC45A87255F0B0E6A307ECFDA71B669E3F488B71847158C93AFAEF5EF25B442B3C74E78FB247C1076ACD9AB70D96F712812651540AEC61F6F7F5E2F28AC8950D8D0203010001";
private static String PUB_KEY_R11 = "BA87BC5C1B0039CBCA0ACDD46710F9013CA54EA561CB26CA52FB1501B7B928F5281EED27B324183967090C08ECE03AB03B770EBDF3E53954410C4EAE41D69974DE51DBEF7BFF58BDA8B713F6DE31D5F272C9726A0B8374959C4600641499F3B1D922D9CDA892AA1C267A3FFEEF58057B089581DB710F8EFBE33109BB09BE504D5F8F91763D5A9D9E83F2E9C466B3E106664348188065A037189A9B843297B1B2BDC4F815009D2788FBE26317966C9B27674BC4DB285E69C279F0495CE02450E1C4BCA105AC7B406D00B4C2413FA758B82FC55C9BA5BB099EF1FEEBB08539FDA80AEF45C478EB652AC2CF5F3CDEE35C4D1BF70B272BAA0B4277534F796A1D87D90203010001";
@@ -65,14 +67,20 @@ namespace BeWoDatabaseTerminator
private static String PUB_KEY_R13 = "00a567708dd0568164151761cdb906d4ad19908c2650379816639254dbd9cc840593ecd3ec081ba0605143487d2bc748969eb42dda9dc8273b57a19fabf0d60ed40e30ca6f9bb1d1d6a49d323e584e356f4558687117fc3ed85d82a02fb2516cb01a5db859ce3565c88ba1af1037ffe39c5dc2491734ff8c2b8b8df0bc712c930c1d05c4bac7cdaac95e7cd1c901f79c03f6fc0a5df4da7be6db764270ebf44d22da00776fd6c95f17fdda752ea5570cf6ea5cb6e073a568cfa174e275827e109fc1f5a2eb01e938b10a44ccd3c289f54935820a34b31ce988c2474e820e0a36f0474f8af1290475dacde19a5cff5e9d9895ba9a43d04aa21705010430d332b38f";
private static String PUB_KEY_R14 = "00cd68546c992fd4c4df145ee284bca5a798da8ad5d59e0eb211eaee13bd7f7344cbabf6d9e37f0f2e23cdaf7235aa9eba1daa8e00d6d0e844e0d128ee05b5a783b54b1c6e0cd6f427c78d04c976f8327a9e8b022e71bc9f12b6ac19f4ec4bb134ba50bbb89dc6f3439e006425efa46fabfa8e60e47c9fd5687d97db48a8909078d4138c8fd7c60ab9bec4cbc2f48bbf9689b65dece60bb5c183c59c20af9eabe62498495165e9ce22868a7623cd60d8190118f60bca00d292d556573d7f7278c71febbbb9bb79861970fc6c2c39a25f223ac5870dca69f409caf2716a7a5f0924934a1cd1f7084b4d2295947d80d7beb574769c79690146a715dc792e14818895";
private static String PUB_KEY_YE1 = "0407655075fe68a695ada17d2babca549c8cf31968e2572f3fcd9c0736b32966f160f2854f42729fb3012422e6f4b0186263486925903f5f74f47c1a9c8320e2230847eb9dbb7fbfe65210f2cb1066da33a11c7036cdee9f71b5e226d80bdffabc";
private static String PUB_KEY_YE2 = "04719ab43391d6c410bdcca97b7774942db58738edac647434c7b9de533ea336cf9b920f97269345ab1e5597be796fa812ea881df8925bb121b98cc808aadff603e9ef34fef576e7d2bc5d021d8c55e5a1839ad26214ef57fb1d0d3d3ef603970f";
private static String PUB_KEY_YE3 = "04bb1da0af0ccf58dda60f5be887eae5132b6285518c74bf27b9c4ad4a353599520968896d9bb9dab3bc241a6ab9894cdba3895f99ad6acea68c7e378913b2209e73ac9fc3b546984acb0b9652ab65f8776bc973583c5485377dbec2bb327f6c33";
private static String PUB_KEY_YR1 = "00a158bc5f6c42620317bc9c4d3caa7fa05d7750c8263c0041d3b5422cd0eda179adf65b8464d252055d745724f53f3e8b0fc66ad5dda0738dd6365d40751ae3e2c1276b36ce8b3d273e9986069da1ba2e3da19b43218eb074a799022e416cd536d021fa45204130b490f5c5eb1fc77176fe0f009e39b2c18c2faf14484dc1b230b66ba70037d2f90a05d52108b9b5f3624cfa05659dd2d0e957a8b9a6b5d57de6e75601be5be9efc5e3d0e20ac1f4634d0083bd815486f5873ca798a7be5f49844414edb1bdc1c26a55f62a5e06330ba11fc3f5c1f11d0096a22e654e65f0634d79279ac67a5cf59d98c9bb1736922a1a5f6f572419e13243f9df5ad2746e6e33";
private static String PUB_KEY_YR2 = "00d9d0bc70069a6a87ce25baa31ead5fde78bfdf5d0ee62d042fd4b9e958a65bcaf1a9c7ac21e807e7b2502717a7b04e470703e8123a806f9b70df9b4e80b86885f8a46eb787c0728c2a9c0410096f7cf903cffde3afff0ba0ec8ca4e0d90ec5fd88ea0d9fe794fa9c9a0e4cb15cba4791abcd091901186a7f9d3c5afd38652040ada118a80d916f3ba5aa69b0e02e50972ba18851b79b948ace2a6998ab7a2b1ebb7da0cc324d04088ab6cbdde875f8bf6e5ba6444d712fc1fc6b5cf6455b5290fed8f2cfc5d7a2dd38a6e79938b5f0045f00f6ab288f4f1ad336aea537e00caf983673574daa4393c23c5e57a2f99693f5ac6898bcb9d168f94eab26513d6fb9";
private static String PUB_KEY_YR3 = "00c94b4f90c9fad99bc5349d7ba024a83ede7ada1e8c4a37d34eb06bc74fd36d71d813856ba3ea08b30ccaa7f554229723c9faa28aeeb8e004cfd72b7a20c7ad443db81063c2e254d9f89ec991d5415475a95bfdc2ff998b57a3796edeaa29ee4e8e97ea4e2f3be504836197e32aee5f55c5408cef5ed4a58ba634ac463518c02c68391f5e82f77510956f0a811a56e7c7d8e417b770baafdb86db291162b1bed2fc73c0f7aee95baac03bf0c514a6e2df935f1ca106d23206ab1b6c6d86cafbfd2a7b6d78ee9f6850efd235cb9a4fda682c558a99c63dd144748572b2faa891e8abfbfdee6008afc11a48cb5ccd407d7d42443c0e8883cfb0af9124e223d348a5";
private static bool PinPublicKey(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslpolicyerrors)
{
try
@@ -93,14 +101,18 @@ namespace BeWoDatabaseTerminator
pk.Contains(PUB_KEY_E6.ToLower()) ||
pk.Contains(PUB_KEY_E7.ToLower()) ||
pk.Contains(PUB_KEY_E8.ToLower()) ||
pk.Contains(PUB_KEY_E9.ToLower()) ||
pk.Contains(PUB_KEY_R10.ToLower()) ||
pk.Contains(PUB_KEY_R11.ToLower()) ||
pk.Contains(PUB_KEY_R12.ToLower()) ||
pk.Contains(PUB_KEY_R13.ToLower()) ||
pk.Contains(PUB_KEY_R14.ToLower()) ||
pk.Contains(PUB_KEY_YE1.ToLower()) ||
pk.Contains(PUB_KEY_YE2.ToLower()) ||
pk.Contains(PUB_KEY_YE3.ToLower()) ||
pk.Contains(PUB_KEY_YR1.ToLower()) ||
pk.Contains(PUB_KEY_YR2.ToLower()))
pk.Contains(PUB_KEY_YR2.ToLower()) ||
pk.Contains(PUB_KEY_YR3.ToLower()))
{
chainContainsPk = true;
}

View File

@@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Bcl.AsyncInterfaces" version="8.0.0" targetFramework="net472" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="8.0.2" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="8.0.2" targetFramework="net472" />
<package id="MySqlConnector" version="2.4.0" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.1" targetFramework="net481" />
<package id="System.Buffers" version="4.5.1" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="8.0.1" targetFramework="net472" />
<package id="System.Memory" version="4.5.5" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.0.0" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net472" />
</packages>

View File

@@ -13,7 +13,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>BeWoPlanerAndroid</RootNamespace>
<AssemblyName>BeWoPlanerAndroid</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
<UseIISExpress>true</UseIISExpress>
<IISExpressSSLPort />
<IISExpressAnonymousAuthentication />
@@ -45,17 +45,7 @@
<Reference Include="Antlr3.Runtime">
<HintPath>..\Lib\Antlr3.Runtime.dll</HintPath>
</Reference>
<Reference Include="log4net">
<HintPath>..\Lib\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="MySql.Data">
<HintPath>..\Lib\MySql.Data.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.6.0.5\lib\net40\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="NHibernate">
<HintPath>..\Lib\NHibernate.dll</HintPath>
</Reference>
@@ -158,4 +148,9 @@
<Target Name="AfterBuild">
</Target>
-->
<ItemGroup>
<PackageReference Include="log4net" />
<PackageReference Include="MySql.Data" />
<PackageReference Include="Newtonsoft.Json" />
</ItemGroup>
</Project>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="6.0.5" targetFramework="net40" requireReinstallation="true" />
</packages>

View File

@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36908.2 d17.14
VisualStudioVersion = 17.14.36908.2
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BeWoPlanerMobil", "BeWoPlanerMobil\BeWoPlanerMobil.csproj", "{284B02ED-114A-426C-9162-31BB6CF05589}"
EndProject
@@ -19,12 +19,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "Dakota\Dakota.csp
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Kundenprojekte", "Kundenprojekte", "{30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SynpraxReports", "ReportImp\SynpraxReports\SynpraxReports.csproj", "{FC9F4E38-977B-4877-9E05-D04068D3C807}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HausDuelken", "ReportImp\HausDuelken\HausDuelken.csproj", "{ED3DBD24-B774-41E5-A856-99FF78D828A8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FeidPartnerReports", "ReportImp\FeidPartnerReports\FeidPartnerReports.csproj", "{36E7D251-2F15-4589-81C2-6BDDC67F16AE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ServerComponents", "ServerComponents", "{72E43F42-52F2-415E-8821-BB3604DF573D}"
ProjectSection(SolutionItems) = preProject
Server\Components\README.txt = Server\Components\README.txt
@@ -34,10 +28,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AICore", "Server\Components
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerUtils", "Server\Components\ServerUtils\ServerUtils.csproj", "{EC2349FB-7FE0-4AD1-B28B-A7A27AF80A57}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PaSMoenchengladbach", "ReportImp\PaSMoenchengladbach\PaSMoenchengladbach.csproj", "{EA3C4BE1-6128-4FC9-8194-3C4202233371}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Host", "Host\Host.csproj", "{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Akgg", "ReportImp\AKGG\Akgg.csproj", "{39876291-220B-412E-8ADE-B7A24621656D}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -87,36 +81,6 @@ Global
{47331732-DD96-4075-869F-83AA9F3F9937}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.ActiveCfg = Release|Any CPU
{47331732-DD96-4075-869F-83AA9F3F9937}.Release|Any CPU.Build.0 = Release|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FC9F4E38-977B-4877-9E05-D04068D3C807}.Release|Any CPU.Build.0 = Release|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ED3DBD24-B774-41E5-A856-99FF78D828A8}.Release|Any CPU.Build.0 = Release|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.ActiveCfg = DebugRemote|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.DebugRemote|Any CPU.Build.0 = DebugRemote|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{36E7D251-2F15-4589-81C2-6BDDC67F16AE}.Release|Any CPU.Build.0 = Release|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EA3C4BE1-6128-4FC9-8194-3C4202233371}.Release|Any CPU.Build.0 = Release|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.Build.0 = Release|Any CPU
{69D70CA9-0DF9-419E-BFAF-F4539F129BD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69D70CA9-0DF9-419E-BFAF-F4539F129BD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69D70CA9-0DF9-419E-BFAF-F4539F129BD9}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
@@ -129,17 +93,26 @@ Global
{EC2349FB-7FE0-4AD1-B28B-A7A27AF80A57}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{EC2349FB-7FE0-4AD1-B28B-A7A27AF80A57}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC2349FB-7FE0-4AD1-B28B-A7A27AF80A57}.Release|Any CPU.Build.0 = Release|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1154C7B-BB77-4155-9854-DAD8FC5A8BC3}.Release|Any CPU.Build.0 = Release|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{39876291-220B-412E-8ADE-B7A24621656D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{FC9F4E38-977B-4877-9E05-D04068D3C807} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
{ED3DBD24-B774-41E5-A856-99FF78D828A8} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
{36E7D251-2F15-4589-81C2-6BDDC67F16AE} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
{EA3C4BE1-6128-4FC9-8194-3C4202233371} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
{69D70CA9-0DF9-419E-BFAF-F4539F129BD9} = {72E43F42-52F2-415E-8821-BB3604DF573D}
{EC2349FB-7FE0-4AD1-B28B-A7A27AF80A57} = {72E43F42-52F2-415E-8821-BB3604DF573D}
{39876291-220B-412E-8ADE-B7A24621656D} = {30DD24EE-2ED9-4E31-BCB5-AD995E8541BD}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {75267284-7070-4045-9FC8-0FC3C56C1AD3}

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="..\packages\EntityFramework.6.5.1\build\EntityFramework.props" Condition="Exists('..\packages\EntityFramework.6.5.1\build\EntityFramework.props')" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.Default.props')" />
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
@@ -25,8 +24,6 @@
<UseGlobalApplicationHostFile />
<TargetFrameworkProfile />
<Use64BitIISExpress>true</Use64BitIISExpress>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
<TypeScriptToolsVersion>4.3</TypeScriptToolsVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
@@ -77,12 +74,6 @@
<PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<Reference Include="Antlr3.Runtime, Version=3.5.0.2, Culture=neutral, PublicKeyToken=eb42632606e9261f, processorArchitecture=MSIL">
<HintPath>..\packages\Antlr.3.5.0.2\lib\Antlr3.Runtime.dll</HintPath>
</Reference>
<Reference Include="Bogus, Version=35.6.3.0, Culture=neutral, PublicKeyToken=fa1bb3f3f218129a, processorArchitecture=MSIL">
<HintPath>..\packages\Bogus.35.6.3\lib\net40\Bogus.dll</HintPath>
</Reference>
<Reference Include="DevExpress.CodeParser.v23.2, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
@@ -179,32 +170,8 @@
<Reference Include="DevExpress.XtraScheduler.v23.2.Reporting, Version=23.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<Private>False</Private>
</Reference>
<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.dll</HintPath>
</Reference>
<Reference Include="EntityFramework.SqlServer, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
<HintPath>..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll</HintPath>
</Reference>
<Reference Include="log4net, Version=3.1.0.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\log4net.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\lib\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll</HintPath>
</Reference>
<Reference Include="Microsoft.CSharp" />
<Reference Include="Microsoft.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebHelpers.3.3.0\lib\net45\Microsoft.Web.Helpers.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Web.Infrastructure, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Web.Infrastructure.2.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json.Bson, Version=1.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.Bson.1.0.3\lib\net45\Newtonsoft.Json.Bson.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.FileSystemGlobbing, Version=9.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL" />
<Reference Include="NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\NHibernate.dll</HintPath>
@@ -213,40 +180,14 @@
<Private>True</Private>
</Reference>
<Reference Include="PresentationFramework" />
<Reference Include="RestSharp, Version=106.13.0.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
<HintPath>..\packages\RestSharp.106.13.0\lib\net452\RestSharp.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data.Entity" />
<Reference Include="System.Drawing" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Formatting, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.6.0.0\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.ServiceModel" />
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Web.ApplicationServices" />
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Web" />
@@ -254,34 +195,7 @@
<Reference Include="System.Web.DynamicData" />
<Reference Include="System.Web.Entity" />
<Reference Include="System.Web.Extensions" />
<Reference Include="System.Web.Helpers, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.Helpers.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.3.0\lib\net45\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.WebHost, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.WebHost.5.3.0\lib\net45\System.Web.Http.WebHost.dll</HintPath>
</Reference>
<Reference Include="System.Web.Mvc, Version=5.3.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Mvc.5.3.0\lib\net45\System.Web.Mvc.dll</HintPath>
</Reference>
<Reference Include="System.Web.Optimization, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Web.Optimization.1.1.3\lib\net40\System.Web.Optimization.dll</HintPath>
</Reference>
<Reference Include="System.Web.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.Razor.3.3.0\lib\net45\System.Web.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Web.Routing" />
<Reference Include="System.Web.WebPages, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Deployment, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.Deployment.dll</HintPath>
</Reference>
<Reference Include="System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.3.3.0\lib\net45\System.Web.WebPages.Razor.dll</HintPath>
</Reference>
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml" />
@@ -289,15 +203,6 @@
<Reference Include="System.Web.Services" />
<Reference Include="System.EnterpriseServices" />
<Reference Include="System.Xml.Linq" />
<Reference Include="WebGrease, Version=1.6.5135.21930, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\WebGrease.1.6.0\lib\WebGrease.dll</HintPath>
</Reference>
<Reference Include="WebMatrix.Data, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.Data.3.3.0\lib\net45\WebMatrix.Data.dll</HintPath>
</Reference>
<Reference Include="WebMatrix.WebData, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebPages.WebData.3.3.0\lib\net45\WebMatrix.WebData.dll</HintPath>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
@@ -400,6 +305,7 @@
<Compile Include="Util\JsonPerson.cs" />
<Compile Include="Util\SchedulerUtils\CustomAppointmentTemplateContainer.cs" />
<Compile Include="Util\SchedulerUtils\EmployeeAvailabilityObject.cs" />
<Compile Include="Util\SchedulerUtils\OwnSoftSchedulerLocalizer.cs" />
<Compile Include="Util\ServiceRecord2Validation.cs" />
<Compile Include="Util\SignatureUtils.cs" />
<Compile Include="Util\SupportConceptStatisticsData.cs" />
@@ -736,6 +642,7 @@
<Content Include="Views\DevExpressScheduler\CustomAppointmentToolTipPartial.cshtml" />
<Content Include="Views\DevExpressScheduler\CustomAppointmentDragToolTip.cshtml" />
<Content Include="Views\DevExpressScheduler\CustomSelectionToolTip.cshtml" />
<Content Include="Views\DevExpressScheduler\CustomRecurrencePartial.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="packages.config" />
@@ -832,22 +739,38 @@
</FlavorProperties>
</VisualStudio>
</ProjectExtensions>
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
</PropertyGroup>
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
<Error Condition="!Exists('..\packages\EntityFramework.6.5.1\build\EntityFramework.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.5.1\build\EntityFramework.props'))" />
<Error Condition="!Exists('..\packages\EntityFramework.6.5.1\build\EntityFramework.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\EntityFramework.6.5.1\build\EntityFramework.targets'))" />
<Error Condition="!Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets'))" />
</Target>
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
<Import Project="..\packages\EntityFramework.6.5.1\build\EntityFramework.targets" Condition="Exists('..\packages\EntityFramework.6.5.1\build\EntityFramework.targets')" />
<Import Project="..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets" Condition="Exists('..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets')" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target> -->
<ItemGroup>
<PackageReference Include="Antlr" />
<PackageReference Include="Bogus" />
<PackageReference Include="EntityFramework" />
<PackageReference Include="log4net" />
<PackageReference Include="Microsoft.AspNet.Mvc" />
<PackageReference Include="Microsoft.AspNet.Razor" />
<PackageReference Include="Microsoft.AspNet.Web.Optimization" />
<PackageReference Include="Microsoft.AspNet.WebApi.Client" />
<PackageReference Include="Microsoft.AspNet.WebApi.Core" />
<PackageReference Include="Microsoft.AspNet.WebApi.WebHost" />
<PackageReference Include="Microsoft.AspNet.WebHelpers" />
<PackageReference Include="Microsoft.AspNet.WebPages" />
<PackageReference Include="Microsoft.AspNet.WebPages.Data" />
<PackageReference Include="Microsoft.AspNet.WebPages.WebData" />
<PackageReference Include="Microsoft.Bcl.Build" />
<PackageReference Include="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" />
<PackageReference Include="Microsoft.Net.Http" />
<PackageReference Include="Microsoft.Web.Infrastructure" />
<PackageReference Include="Newtonsoft.Json" />
<PackageReference Include="Newtonsoft.Json.Bson" />
<PackageReference Include="RestSharp" />
<PackageReference Include="System.Buffers" />
<PackageReference Include="System.Numerics.Vectors" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" />
<PackageReference Include="System.Threading.Tasks.Extensions" />
<PackageReference Include="WebGrease" />
</ItemGroup>
</Project>

View File

@@ -246,6 +246,8 @@ textarea {
--danger: #dc3545;
--light: #f8f9fa;
--dark: #343a40;
--input-group-form-control-border: #CED4DA;
--input-group-form-control: #E9ECEF;
--bewo-apt-confirm: #48D44E;
--bewo-apt-maybe: #B927D9;
--bewo-apt-decline: #AB0030;
@@ -1939,6 +1941,46 @@ pre code {
background-color: rgb(185.0216751269, 187.09, 189.1583248731);
}
.table-input-group-form-control-border,
.table-input-group-form-control-border > th,
.table-input-group-form-control-border > td {
background-color: rgb(241.28, 242.96, 244.64);
}
.table-input-group-form-control-border th,
.table-input-group-form-control-border td,
.table-input-group-form-control-border thead th,
.table-input-group-form-control-border tbody + tbody {
border-color: rgb(229.52, 232.64, 235.76);
}
.table-hover .table-input-group-form-control-border:hover {
background-color: rgb(226.7509302326, 230.21, 233.6690697674);
}
.table-hover .table-input-group-form-control-border:hover > td,
.table-hover .table-input-group-form-control-border:hover > th {
background-color: rgb(226.7509302326, 230.21, 233.6690697674);
}
.table-input-group-form-control,
.table-input-group-form-control > th,
.table-input-group-form-control > td {
background-color: rgb(248.84, 249.68, 250.52);
}
.table-input-group-form-control th,
.table-input-group-form-control td,
.table-input-group-form-control thead th,
.table-input-group-form-control tbody + tbody {
border-color: rgb(243.56, 245.12, 246.68);
}
.table-hover .table-input-group-form-control:hover {
background-color: rgb(234.0768421053, 236.93, 239.7831578947);
}
.table-hover .table-input-group-form-control:hover > td,
.table-hover .table-input-group-form-control:hover > th {
background-color: rgb(234.0768421053, 236.93, 239.7831578947);
}
.table-bewo-apt-confirm,
.table-bewo-apt-confirm > th,
.table-bewo-apt-confirm > td {
@@ -3207,6 +3249,66 @@ fieldset:disabled a.btn {
box-shadow: 0 0 0 0.2rem rgba(82.45, 87.55, 92.65, 0.5);
}
.btn-input-group-form-control-border {
color: #212529;
background-color: #CED4DA;
border-color: #CED4DA;
}
.btn-input-group-form-control-border:hover {
color: #212529;
background-color: rgb(184.2063953488, 192.875, 201.5436046512);
border-color: rgb(176.9418604651, 186.5, 196.0581395349);
}
.btn-input-group-form-control-border:focus, .btn-input-group-form-control-border.focus {
color: #212529;
background-color: rgb(184.2063953488, 192.875, 201.5436046512);
border-color: rgb(176.9418604651, 186.5, 196.0581395349);
box-shadow: 0 0 0 0.2rem rgba(180.05, 185.75, 191.45, 0.5);
}
.btn-input-group-form-control-border.disabled, .btn-input-group-form-control-border:disabled {
color: #212529;
background-color: #CED4DA;
border-color: #CED4DA;
}
.btn-input-group-form-control-border:not(:disabled):not(.disabled):active, .btn-input-group-form-control-border:not(:disabled):not(.disabled).active, .show > .btn-input-group-form-control-border.dropdown-toggle {
color: #212529;
background-color: rgb(176.9418604651, 186.5, 196.0581395349);
border-color: rgb(169.6773255814, 180.125, 190.5726744186);
}
.btn-input-group-form-control-border:not(:disabled):not(.disabled):active:focus, .btn-input-group-form-control-border:not(:disabled):not(.disabled).active:focus, .show > .btn-input-group-form-control-border.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(180.05, 185.75, 191.45, 0.5);
}
.btn-input-group-form-control {
color: #212529;
background-color: #E9ECEF;
border-color: #E9ECEF;
}
.btn-input-group-form-control:hover {
color: #212529;
background-color: rgb(210.8552631579, 216.875, 222.8947368421);
border-color: rgb(203.4736842105, 210.5, 217.5263157895);
}
.btn-input-group-form-control:focus, .btn-input-group-form-control.focus {
color: #212529;
background-color: rgb(210.8552631579, 216.875, 222.8947368421);
border-color: rgb(203.4736842105, 210.5, 217.5263157895);
box-shadow: 0 0 0 0.2rem rgba(203, 206.15, 209.3, 0.5);
}
.btn-input-group-form-control.disabled, .btn-input-group-form-control:disabled {
color: #212529;
background-color: #E9ECEF;
border-color: #E9ECEF;
}
.btn-input-group-form-control:not(:disabled):not(.disabled):active, .btn-input-group-form-control:not(:disabled):not(.disabled).active, .show > .btn-input-group-form-control.dropdown-toggle {
color: #212529;
background-color: rgb(203.4736842105, 210.5, 217.5263157895);
border-color: rgb(196.0921052632, 204.125, 212.1578947368);
}
.btn-input-group-form-control:not(:disabled):not(.disabled):active:focus, .btn-input-group-form-control:not(:disabled):not(.disabled).active:focus, .show > .btn-input-group-form-control.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(203, 206.15, 209.3, 0.5);
}
.btn-bewo-apt-confirm {
color: #212529;
background-color: #48D44E;
@@ -4127,6 +4229,56 @@ fieldset:disabled a.btn {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.btn-outline-input-group-form-control-border {
color: #CED4DA;
border-color: #CED4DA;
}
.btn-outline-input-group-form-control-border:hover {
color: #212529;
background-color: #CED4DA;
border-color: #CED4DA;
}
.btn-outline-input-group-form-control-border:focus, .btn-outline-input-group-form-control-border.focus {
box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5);
}
.btn-outline-input-group-form-control-border.disabled, .btn-outline-input-group-form-control-border:disabled {
color: #CED4DA;
background-color: transparent;
}
.btn-outline-input-group-form-control-border:not(:disabled):not(.disabled):active, .btn-outline-input-group-form-control-border:not(:disabled):not(.disabled).active, .show > .btn-outline-input-group-form-control-border.dropdown-toggle {
color: #212529;
background-color: #CED4DA;
border-color: #CED4DA;
}
.btn-outline-input-group-form-control-border:not(:disabled):not(.disabled):active:focus, .btn-outline-input-group-form-control-border:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-input-group-form-control-border.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5);
}
.btn-outline-input-group-form-control {
color: #E9ECEF;
border-color: #E9ECEF;
}
.btn-outline-input-group-form-control:hover {
color: #212529;
background-color: #E9ECEF;
border-color: #E9ECEF;
}
.btn-outline-input-group-form-control:focus, .btn-outline-input-group-form-control.focus {
box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5);
}
.btn-outline-input-group-form-control.disabled, .btn-outline-input-group-form-control:disabled {
color: #E9ECEF;
background-color: transparent;
}
.btn-outline-input-group-form-control:not(:disabled):not(.disabled):active, .btn-outline-input-group-form-control:not(:disabled):not(.disabled).active, .show > .btn-outline-input-group-form-control.dropdown-toggle {
color: #212529;
background-color: #E9ECEF;
border-color: #E9ECEF;
}
.btn-outline-input-group-form-control:not(:disabled):not(.disabled):active:focus, .btn-outline-input-group-form-control:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-input-group-form-control.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5);
}
.btn-outline-bewo-apt-confirm {
color: #48D44E;
border-color: #48D44E;
@@ -6598,6 +6750,32 @@ a.badge-dark:focus, a.badge-dark.focus {
box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
}
.badge-input-group-form-control-border {
color: #212529;
background-color: #CED4DA;
}
a.badge-input-group-form-control-border:hover, a.badge-input-group-form-control-border:focus {
color: #212529;
background-color: rgb(176.9418604651, 186.5, 196.0581395349);
}
a.badge-input-group-form-control-border:focus, a.badge-input-group-form-control-border.focus {
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5);
}
.badge-input-group-form-control {
color: #212529;
background-color: #E9ECEF;
}
a.badge-input-group-form-control:hover, a.badge-input-group-form-control:focus {
color: #212529;
background-color: rgb(203.4736842105, 210.5, 217.5263157895);
}
a.badge-input-group-form-control:focus, a.badge-input-group-form-control.focus {
outline: 0;
box-shadow: 0 0 0 0.2rem rgba(233, 236, 239, 0.5);
}
.badge-bewo-apt-confirm {
color: #212529;
background-color: #48D44E;
@@ -7051,6 +7229,30 @@ a.badge-bewo-report:focus, a.badge-bewo-report.focus {
color: rgb(4.1779310345, 4.66, 5.1420689655);
}
.alert-input-group-form-control-border {
color: rgb(107.12, 110.24, 113.36);
background-color: rgb(245.2, 246.4, 247.6);
border-color: rgb(241.28, 242.96, 244.64);
}
.alert-input-group-form-control-border hr {
border-top-color: rgb(226.7509302326, 230.21, 233.6690697674);
}
.alert-input-group-form-control-border .alert-link {
color: rgb(82.3416981132, 84.74, 87.1383018868);
}
.alert-input-group-form-control {
color: rgb(121.16, 122.72, 124.28);
background-color: rgb(250.6, 251.2, 251.8);
border-color: rgb(248.84, 249.68, 250.52);
}
.alert-input-group-form-control hr {
border-top-color: rgb(234.0768421053, 236.93, 239.7831578947);
}
.alert-input-group-form-control .alert-link {
color: rgb(95.9841525424, 97.22, 98.4558474576);
}
.alert-bewo-apt-confirm {
color: rgb(37.44, 110.24, 40.56);
background-color: rgb(218.4, 246.4, 219.6);
@@ -7696,6 +7898,34 @@ a.badge-bewo-report:focus, a.badge-bewo-report.focus {
border-color: rgb(27.04, 30.16, 33.28);
}
.list-group-item-input-group-form-control-border {
color: rgb(107.12, 110.24, 113.36);
background-color: rgb(241.28, 242.96, 244.64);
}
.list-group-item-input-group-form-control-border.list-group-item-action:hover, .list-group-item-input-group-form-control-border.list-group-item-action:focus {
color: rgb(107.12, 110.24, 113.36);
background-color: rgb(226.7509302326, 230.21, 233.6690697674);
}
.list-group-item-input-group-form-control-border.list-group-item-action.active {
color: #fff;
background-color: rgb(107.12, 110.24, 113.36);
border-color: rgb(107.12, 110.24, 113.36);
}
.list-group-item-input-group-form-control {
color: rgb(121.16, 122.72, 124.28);
background-color: rgb(248.84, 249.68, 250.52);
}
.list-group-item-input-group-form-control.list-group-item-action:hover, .list-group-item-input-group-form-control.list-group-item-action:focus {
color: rgb(121.16, 122.72, 124.28);
background-color: rgb(234.0768421053, 236.93, 239.7831578947);
}
.list-group-item-input-group-form-control.list-group-item-action.active {
color: #fff;
background-color: rgb(121.16, 122.72, 124.28);
border-color: rgb(121.16, 122.72, 124.28);
}
.list-group-item-bewo-apt-confirm {
color: rgb(37.44, 110.24, 40.56);
background-color: rgb(203.76, 242.96, 205.44);
@@ -8861,6 +9091,26 @@ button.bg-dark:focus {
background-color: rgb(29.1379310345, 32.5, 35.8620689655) !important;
}
.bg-input-group-form-control-border {
background-color: #CED4DA !important;
}
a.bg-input-group-form-control-border:hover, a.bg-input-group-form-control-border:focus,
button.bg-input-group-form-control-border:hover,
button.bg-input-group-form-control-border:focus {
background-color: rgb(176.9418604651, 186.5, 196.0581395349) !important;
}
.bg-input-group-form-control {
background-color: #E9ECEF !important;
}
a.bg-input-group-form-control:hover, a.bg-input-group-form-control:focus,
button.bg-input-group-form-control:hover,
button.bg-input-group-form-control:focus {
background-color: rgb(203.4736842105, 210.5, 217.5263157895) !important;
}
.bg-bewo-apt-confirm {
background-color: #48D44E !important;
}
@@ -9181,6 +9431,14 @@ button.bg-bewo-report:focus {
border-color: #343a40 !important;
}
.border-input-group-form-control-border {
border-color: #CED4DA !important;
}
.border-input-group-form-control {
border-color: #E9ECEF !important;
}
.border-bewo-apt-confirm {
border-color: #48D44E !important;
}
@@ -12316,6 +12574,22 @@ a.text-dark:hover, a.text-dark:focus {
color: rgb(17.7068965517, 19.75, 21.7931034483) !important;
}
.text-input-group-form-control-border {
color: #CED4DA !important;
}
a.text-input-group-form-control-border:hover, a.text-input-group-form-control-border:focus {
color: rgb(162.4127906977, 173.75, 185.0872093023) !important;
}
.text-input-group-form-control {
color: #E9ECEF !important;
}
a.text-input-group-form-control:hover, a.text-input-group-form-control:focus {
color: rgb(188.7105263158, 197.75, 206.7894736842) !important;
}
.text-bewo-apt-confirm {
color: #48D44E !important;
}
@@ -12641,4 +12915,13 @@ a.text-bewo-report:hover, a.text-bewo-report:focus {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='25' height='25' viewBox='0 0 20 20'%3E%3Cg %3E%3Cpolygon fill='%23FFCA00' points='20 10 10 0 0 0 20 20'/%3E%3Cpolygon fill='%23FFCA00' points='0 10 0 20 10 20'/%3E%3C/g%3E%3C/svg%3E");
}
@media (max-width: 575.98px) {
.btn-sm-auto {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem;
}
}
/*# sourceMappingURL=style.css.map */

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
$theme-colors: ( "bewo-apt-confirm": #48D44E, "bewo-apt-maybe": #B927D9, "bewo-apt-decline": #AB0030, "bewo-archived-sc": #343A40, "bewo-deleted-sc": #F87F7C, "bewo-person": #B5662D, "bewo-organisation": #C8C000, "bewo-custom-goal": #4682B4, "service-record-marked": #c5e3ff, "bewo-teams": #565999, "bewo-goal-rating": #0000ff, "bewo-dev": #00cf7c, "primary": #FF5A00, "bewo-customers": #3b7799, "bewo-service-records": #c80000, "bewo-calendar": #04b4d0, "bewo-is-about-to-expire": #FF0000, "bewo-expires-in-three-months": #FF9400, "bewo-group-booking": #f9e79f, "bewo-customer-card-header": #AB4A07, "bewo-person-card-header": #AB4A07, "bewo-employee": #45993B, "bewo-resource": #04B4D0, "bewo-task-red": #993B3B, "bewo-report": #995E3B );
$theme-colors: ( "input-group-form-control-border": #CED4DA, "input-group-form-control": #E9ECEF, "bewo-apt-confirm": #48D44E, "bewo-apt-maybe": #B927D9, "bewo-apt-decline": #AB0030, "bewo-archived-sc": #343A40, "bewo-deleted-sc": #F87F7C, "bewo-person": #B5662D, "bewo-organisation": #C8C000, "bewo-custom-goal": #4682B4, "service-record-marked": #c5e3ff, "bewo-teams": #565999, "bewo-goal-rating": #0000ff, "bewo-dev": #00cf7c, "primary": #FF5A00, "bewo-customers": #3b7799, "bewo-service-records": #c80000, "bewo-calendar": #04b4d0, "bewo-is-about-to-expire": #FF0000, "bewo-expires-in-three-months": #FF9400, "bewo-group-booking": #f9e79f, "bewo-customer-card-header": #AB4A07, "bewo-person-card-header": #AB4A07, "bewo-employee": #45993B, "bewo-resource": #04B4D0, "bewo-task-red": #993B3B, "bewo-report": #995E3B );
a.disabled {
pointer-events: none;
@@ -255,4 +255,13 @@ $font-family-sans-serif: 'Signika Negative', sans-serif;
.bewo-dev-bg {
background-color: #000000;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='25' height='25' viewBox='0 0 20 20'%3E%3Cg %3E%3Cpolygon fill='%23FFCA00' points='20 10 10 0 0 0 20 20'/%3E%3Cpolygon fill='%23FFCA00' points='0 10 0 20 10 20'/%3E%3C/g%3E%3C/svg%3E");
}
@media(max-width: 575.98px) {
.btn-sm-auto {
padding: 0.25rem 0.5rem;
font-size: 0.875rem;
line-height: 1.5;
border-radius: 0.2rem;
}
}

View File

@@ -43,13 +43,12 @@ namespace BeWoPlanerMobil.Controllers
#if DEBUG
Debug.WriteLine($"+++>Logout aufrufende Methode: {new StackTrace().GetFrame(1).GetMethod().Name}");
#endif
MobileSessionFacade.LogUserOut();
FormsAuthentication.SignOut();
AbstractModel.TimeOfLastAction = null;
return RedirectToActionPermanent("Index", "Login", new {tenant = MobileSessionFacade.Tenant});
return RedirectToActionPermanent("Index", "Login", new {tenant = MobileSessionFacade.Tenant, message = ViewData[LoginController.LoginErrorIndex]?.ToString() });
}
protected virtual void InitModel(AbstractModel model)

View File

@@ -121,6 +121,7 @@ namespace BeWoPlanerMobil.Controllers
Model.PossibleCustomers = CustomerService.GetAllAuthorizedCompactCustomers();
Model.PossibleResources = KalenderService.GetAllResources();
// Ressourcen
if(Model.HasRightToInsertRessourceAppointments || Model.HasRightToViewAllResourceAppointments)
{
var allResources = KalenderService.GetAllResources().OrderBy(r => r.Name).ToList();
@@ -135,6 +136,7 @@ namespace BeWoPlanerMobil.Controllers
Model.ResourceCategories2Resources = categories2Resources.OrderBy(category2Resources => category2Resources.Key.DisplayName).ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
}
// Teams
Model.MyTeamEmployees = EmployeeService.GetAllTeamMember(compactEmployee).OrderBy(employee => employee.LastName).ToList();
if(Model.HasRightToViewTeams)
@@ -143,6 +145,7 @@ namespace BeWoPlanerMobil.Controllers
}
Model.TeamMemberCustomerOids = EmployeeService.LoadTeamsRelatedCustomerOids(employeeOid);
// /Teams
Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Where(possibleEmployee => Model.SelectedEmployeeOidsForFiltering?.Contains(possibleEmployee.EmployeeOid) ?? false).ToList();
Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Where(possibleCustomer => Model.SelectedCustomerOidsForFiltering?.Contains(possibleCustomer.CustomerOid) ?? false).ToList();
@@ -171,7 +174,7 @@ namespace BeWoPlanerMobil.Controllers
var intervalStart = DateTimeExtensions.GetDayOfWeek(DayOfWeek.Monday);
var intervalEnd = intervalStart.AddDays(7);
var allAppointments = KalenderService.LoadFilteredAppointmentsMitAufgaben
var allAppointments = KalenderService.LoadFilteredAppointmentsMitAufgabenForMoK
(
Model.HasRightKalenderMitarbeitertermineAnsehen,
employeeOid,
@@ -190,6 +193,15 @@ namespace BeWoPlanerMobil.Controllers
var appointments = allAppointments;
var changedOrDeletedOccurrences = KalenderService.FindAppointmentsByRecurrenceId(appointments.Select(apt => apt.RecurrenceId).ToList(), true);
Model.RecurrenceIdsWithOccurrences = new List<string>();
foreach(var occ in changedOrDeletedOccurrences)
{
Model.RecurrenceIdsWithOccurrences.AddIfNotIn(occ.RecurrenceIdReference);
}
foreach(var appointment in appointments)
{
if(false == appointment.IsPrivate || appointment.Originator.EmployeeOid.Equals(employeeOid) || appointment.EmployeeList.Any(e => e.Employee.EmployeeOid.Equals(employeeOid)))
@@ -278,24 +290,44 @@ namespace BeWoPlanerMobil.Controllers
if(Model.HasRightKalenderRessourcenTermineAndererAendern is false)
{
appointments
.Where(appointment => appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false && appointment.ResourceList.Any())
.Where(appointment =>
appointment.IsTask is false &&
appointment.IsAbsenceTime is false &&
appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false && appointment.ResourceList.Any())
.DoForEach(appointment => appointment.CanBeEdited = false);
}
if(Model.HasRightKalenderKlientenTermineAendern is false)
{
appointments
.Where(appointment => appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false && appointment.CustomerList.Any(customer => relatedCustomerOids.Contains(customer.CustomerOid) is false))
.Where(appointment =>
appointment.IsTask is false &&
appointment.IsAbsenceTime is false &&
appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false && appointment.CustomerList.Any())
.DoForEach(appointment => appointment.CanBeEdited = false);
}
if(Model.HasRightKalenderMitarbeiterTermineAendern is false)
{
appointments
.Where(appointment => appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false)
.Where(appointment =>
appointment.IsTask is false &&
appointment.IsAbsenceTime is false &&
appointment.Originator.Equals(Model.LoggedInCompactEmployee) is false)
.DoForEach(appointment => appointment.CanBeEdited = false);
}
foreach(var appointment in appointments.Where(apt => apt.IsTask is false && apt.IsAbsenceTime is false && apt.Originator.Equals(Model.LoggedInCompactEmployee) is false && apt.CustomerList.Any()))
{
var canEdit = appointment.CanBeEdited;
var canView = appointment.CanBeViewed;
var canDelete = appointment.CanBeDeleted;
var subject = appointment.Subject;
}
var x = appointments.Where(w => w.SchedulerAppointmentOid is null).ToList();
Model.Appointments = appointments;
LoadNotificationCount();
@@ -466,17 +498,23 @@ namespace BeWoPlanerMobil.Controllers
foreach(var appointment in appointmentsToInsert)
{
appointment.CustomerList = AppointmentModel.SelectedCustomers;
appointment.ResourceList = AppointmentModel.SelectedResources;
appointment.EmployeeList = new List<Employee2SchedulerAppointmentDC>();
foreach(var selectedEmployee in AppointmentModel.SelectedEmployees ?? new List<CompactEmployeeDC>())
if(appointment.Type != (int) AppointmentType.DeletedOccurrence && appointment.Type != (int) AppointmentType.ChangedOccurrence)
{
appointment.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = selectedEmployee });
}
appointment.CustomerList = AppointmentModel.SelectedCustomers;
appointment.ResourceList = AppointmentModel.SelectedResources;
appointment.EmployeeList = new List<Employee2SchedulerAppointmentDC>();
appointment.Originator = Model.LoggedInUser.Employee;
foreach(var selectedEmployee in AppointmentModel.SelectedEmployees ?? new List<CompactEmployeeDC>())
{
appointment.EmployeeList.Add(new Employee2SchedulerAppointmentDC { Employee = selectedEmployee });
}
appointment.Originator = Model.LoggedInUser.Employee;
}
else
{
appointment.NewSchedulerAppointmentVersion = null;
}
KalenderService.InsertSchedulerAppointment(appointment);
ViewData["EditableAppointmentModel"] = appointment;
@@ -509,10 +547,11 @@ namespace BeWoPlanerMobil.Controllers
KalenderService.UpdateSchedulerAppointments(new List<SchedulerAppointmentDC> { appointment });
}
KalenderService.DeleteSchedulerAppointments(
appointmentsToRemove
.Where(appointment => appointment.SchedulerAppointmentOid.HasValue && appointment.NewSchedulerAppointmentVersion.HasValue)
.ToDictionary(k => k.SchedulerAppointmentOid.Value, v => v.NewSchedulerAppointmentVersion.Value));
var oid2Version = appointmentsToRemove
.Where(appointment => appointment.SchedulerAppointmentOid.HasValue && appointment.NewSchedulerAppointmentVersion.HasValue)
.ToDictionary(k => k.SchedulerAppointmentOid.Value, v => v.NewSchedulerAppointmentVersion.Value);
KalenderService.DeleteSchedulerAppointments(oid2Version);
ReloadAppointments();
}
@@ -549,14 +588,38 @@ namespace BeWoPlanerMobil.Controllers
case "Reload":
ReloadAppointments();
break;
case "debug_DummyAppointments":
CreateDummyAppointments();
case "DeleteSeries":
DeleteAppointment(((List<SchedulerAppointmentDC>) Model.Appointments).FirstOrDefault(appointment => appointment.SchedulerAppointmentOid == long.Parse(apptID)));
break;
case "DeleteApt":
DeleteAppointment(((List<SchedulerAppointmentDC>) Model.Appointments).FirstOrDefault(appointment => appointment.SchedulerAppointmentOid == long.Parse(apptID)));
break;
case "ResetSeries":
var oid2Versions = KalenderService.LoadOccurrencesByRecurrenceId(apptID).Where(appointment => appointment.RecurrenceIndexReference != null).ToDictionary(x => x.SchedulerAppointmentOid.Value, y => y.NewSchedulerAppointmentVersion.Value);
KalenderService.DeleteSchedulerAppointments(oid2Versions);
ReloadAppointments();
break;
}
return PartialView("SchedulerPagePartial", Model);
}
private void DeleteAppointment(SchedulerAppointmentDC appointment2Delete)
{
if(appointment2Delete is null || appointment2Delete.SchedulerAppointmentOid is null || appointment2Delete.NewSchedulerAppointmentVersion is null)
{
return;
}
var oid2Version = new Dictionary<long, long> { { appointment2Delete.SchedulerAppointmentOid.Value, appointment2Delete.NewSchedulerAppointmentVersion.Value } };
KalenderService.DeleteSchedulerAppointments(oid2Version);
ReloadAppointments();
}
private void CreateDummyAppointments()
{
var today = DateTime.Today;
@@ -1116,9 +1179,13 @@ namespace BeWoPlanerMobil.Controllers
Model.ResourceCategories2Resources.Values.DoForEach(l => l.DoForEach(s => list.AddIfNotIn(s)));
Model.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
Model.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
Model.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
//Model.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
//Model.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
//Model.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
AppointmentModel.SelectedEmployees = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOids.Contains(employee.EmployeeOid)).ToList();
AppointmentModel.SelectedCustomers = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOids.Contains(customer.CustomerOid)).ToList();
AppointmentModel.SelectedResources = list.Where(resource => resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value)).ToList();
Model.SelectedEmployeesForFiltering = Model.PossibleEmployees.Where(employee => Model.SelectedEmployeeOidsForFiltering.Contains(employee.EmployeeOid)).ToList();
Model.SelectedCustomersForFiltering = Model.PossibleCustomers.Where(customer => Model.SelectedCustomerOidsForFiltering.Contains(customer.CustomerOid)).ToList();
@@ -1580,7 +1647,7 @@ namespace BeWoPlanerMobil.Controllers
}
AppointmentModel.SelectedResourceOids = selectedOids.Length == 0 ? new List<long>() : selectedOids.Split(',').Select(long.Parse).ToList();
return JsonConvert.SerializeObject(AppointmentModel.SelectedResourceOids?.Count ?? 0);
}
}

View File

@@ -268,6 +268,12 @@ namespace BeWoPlanerMobil.Controllers
ViewData["AbsenceTimeError"] = "Beim Löschen der Abwesenheit ist ein Fehler aufgetreten!<br/><br/>Bitte wenden Sie sich an Ihren Administrator.";
}
if(absenceTime2Delete != null && !Model.CanDeleteAbsenceTime(absenceTime2Delete))
{
ViewData["AbsenceTimeError"] = "Sie haben nicht das Benutzerrecht, bereits vergangene Mitarbeiter-Abwesenheiten zu löschen.";
return PartialView("AbsenceTimePartial", Model);
}
var employee = Model.SelectedEmployee;
employee.AbsenceTimes.Remove(absenceTime2Delete);

View File

@@ -10,7 +10,6 @@ using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts;
using DevExpress.XtraPrinting;
using HttpCookie = System.Web.HttpCookie;
@@ -147,7 +146,7 @@ namespace BeWoPlanerMobil.Controllers
}
public ActionResult Index(string tenant, string returnUrl)
public ActionResult Index(string tenant, string returnUrl, string message = null)
{
if(returnUrl != null)
{
@@ -185,6 +184,7 @@ namespace BeWoPlanerMobil.Controllers
return Redirect(url);
}
ViewData[LoginErrorIndex] = message;
MobileSessionFacade.Tenant = tenant;
return View("Index");
}

View File

@@ -2469,7 +2469,11 @@ namespace BeWoPlanerMobil.Controllers
result = GetAllServiceCategory2ServiceDescriptionDict();
}
return result.OrderBy(kvp => kvp.Key.Position).ToDictionary(category2Descriptions => category2Descriptions.Key, category2Descriptions => category2Descriptions.Value.OrderBy(serviceDescription => serviceDescription.Position).ToList());
var categories2Descriptions = result.OrderBy(kvp => kvp.Key.Position).ToDictionary(category2Descriptions => category2Descriptions.Key, category2Descriptions => category2Descriptions.Value.OrderBy(serviceDescription => serviceDescription.Position).ToList());
//var x = categories2Descriptions.Where(x => x.Key.OhneHilfeplan.)
return categories2Descriptions;
}
@@ -2477,7 +2481,12 @@ namespace BeWoPlanerMobil.Controllers
{
var result = new Dictionary<ServiceCategoryDC, List<ServiceDescriptionDC>>();
var allServiceDescriptions = OperationsService.GetAllServiceDescriptions().Where(sd => sd.Category.ActivationType == ActivationTypeId.Active && sd.ActivationType == ActivationTypeId.Active && sd.Category.OhneHilfeplan != AccountingvisibilityType.NichtKlientenbezogen).ToList();
var allServiceDescriptions = OperationsService.GetAllServiceDescriptions()
.Where(sd => sd.Category.ActivationType == ActivationTypeId.Active &&
sd.ActivationType == ActivationTypeId.Active &&
sd.Category.OhneHilfeplan != AccountingvisibilityType.Never &&
sd.Category.OhneHilfeplan != AccountingvisibilityType.NichtKlientenbezogen)
.ToList();
foreach (var serviceDescription in allServiceDescriptions)
{
@@ -3600,11 +3609,11 @@ namespace BeWoPlanerMobil.Controllers
[Authorize]
public ActionResult RedirectToDevExpressScheduler()
{
#if DEBUG
//#if DEBUG
return RedirectToActionPermanent("DevExpressScheduler", "DevExpressScheduler");
#endif
//#endif
return RedirectToMain();
//return RedirectToMain();
}
/// <summary>

View File

@@ -1,19 +1,21 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Mvc;
using BeWo.Data.Entities;
using BeWo.Report;
using BeWo.Service.Plugins;
using BeWo.View.Navigation.Filter;
using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using Bogus.DataSets;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web.Mvc;
// Controller des Auswertungsmoduls
namespace BeWoPlanerMobil.Controllers
@@ -275,7 +277,7 @@ namespace BeWoPlanerMobil.Controllers
}
Model.SelectedCustomReport = Model.CustomReports.FirstOrDefault(cr => cr.QueryOid == selectedQuery.Oid);
Model.SelectedQueryOid = selectedQuery.Oid;
Model.SelectedQuery = selectedQuery;
foreach(var parameter in selectedQuery?.Parameter ?? new List<QueryParamDC>())
@@ -561,7 +563,7 @@ namespace BeWoPlanerMobil.Controllers
if(parameterOid.HasValue)
{
var queryParameterType = (QueryParameterType)parameterType;
var queryParameterType = (QueryParameterType) parameterType;
switch(queryParameterType)
{
@@ -571,29 +573,39 @@ namespace BeWoPlanerMobil.Controllers
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryCustomerOids.Remove(parameterOid.Value);
break;
}
var selectedCustomer = Model.AllCustomersForQueries.FirstOrDefault(customer => customer.CustomerOid.Equals(objectOid.Value));
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedCustomer));
break;
if(selectedCustomer is object)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedCustomer));
Model.QueryCustomerOids.AddOrUpdate(parameterOid.Value, selectedCustomer.CustomerOid);
}
break;
case QueryParameterType.Employee:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryEmployeeOids.Remove(parameterOid.Value);
break;
}
var selectedEmployee = Model.AllEmployeesForQueries.FirstOrDefault(employee => employee.EmployeeOid.Equals(objectOid.Value));
if(selectedEmployee != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedEmployee));
Model.QueryEmployeeOids.AddOrUpdate(parameterOid.Value, selectedEmployee.EmployeeOid);
}
break;
break;
case QueryParameterType.Organisation:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryOrganisationOids.Remove(parameterOid.Value);
break;
}
@@ -602,27 +614,32 @@ namespace BeWoPlanerMobil.Controllers
if(selectedOrganisation != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedOrganisation));
Model.QueryOrganisationOids.AddOrUpdate(parameterOid.Value, selectedOrganisation.OrganisationOid);
}
break;
break;
case QueryParameterType.Text:
if(false == string.IsNullOrEmpty(textValue))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, textValue));
Model.QueryTexts.AddOrUpdate(parameterOid.Value, textValue);
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryTexts.Remove(parameterOid.Value);
}
break;
break;
case QueryParameterType.Date:
if(textValue != null && DateTime.TryParse(textValue, out var selectedDate))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedDate));
Model.QueryDateTimes.AddOrUpdate(parameterOid.Value, selectedDate);
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryDateTimes.Remove(parameterOid.Value);
}
break;
@@ -634,11 +651,13 @@ namespace BeWoPlanerMobil.Controllers
{
var dateRange = new DateTimeSpan(start, end);
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, dateRange));
Model.QueryDateRanges.AddOrUpdate(parameterOid.Value, dateRange);
}
}
else
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryDateRanges.Remove(parameterOid.Value);
}
break;
case QueryParameterType.Month:
@@ -654,13 +673,14 @@ namespace BeWoPlanerMobil.Controllers
if(int.TryParse(monthAsString, out var month) && month > 0 && month < 13 && int.TryParse(yearAsString, out var year) && Model.Years.Any(listItem => listItem.Value.Equals(yearAsString)))
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, new DateTime(year, month, 1)));
Model.QueryMonths.AddOrUpdate(parameterOid.Value, new DateTime(year, month, 1));
}
break;
case QueryParameterType.ServiceCategory:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryServiceCategoryOids.Remove(parameterOid.Value);
break;
}
@@ -669,6 +689,7 @@ namespace BeWoPlanerMobil.Controllers
if(selectedServiceCategory != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedServiceCategory));
Model.QueryServiceCategoryOids.AddOrUpdate(parameterOid.Value, selectedServiceCategory.ServiceCategoryOid.Value);
}
break;
case QueryParameterType.SupportConcept:
@@ -679,18 +700,21 @@ namespace BeWoPlanerMobil.Controllers
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QuerySupportConceptOids.Remove(parameterOid.Value);
break;
}
if(costBearer2SupportConceptRelListObj != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, costBearer2SupportConceptRelListObj));
Model.QuerySupportConceptOids.AddOrUpdate(parameterOid.Value, costBearer2SupportConceptRelListObj.CostBearer2SupportConceptOid);
}
break;
case QueryParameterType.Team:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryTeamOids.Remove(parameterOid.Value);
break;
}
@@ -699,12 +723,15 @@ namespace BeWoPlanerMobil.Controllers
if(selectedTeam != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedTeam));
Model.QueryTeamOids.AddOrUpdate(parameterOid.Value, selectedTeam.TeamOid);
}
break;
case QueryParameterType.ValueListEntryType:
if(objectOid is null || objectOid.Value.Equals(0))
{
Model.SelectedValues.Remove(parameterOid.Value);
Model.QueryValueListEntryOids.Remove(parameterOid.Value);
break;
}
@@ -713,6 +740,7 @@ namespace BeWoPlanerMobil.Controllers
if(selectedValueListEntry != null)
{
Model.SelectedValues.AddOrUpdate(parameterOid.Value, new SelectedValue(queryParameterType, selectedValueListEntry));
Model.QueryValueListEntryOids.AddOrUpdate(parameterOid.Value, selectedValueListEntry.ValueListEntryOid.Value);
}
break;
case QueryParameterType.Year:
@@ -733,6 +761,8 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BeWoReportPartial");
}
var query = Model.SelectedQuery;
var paramList = new List<QueryParamDC>();
@@ -745,9 +775,79 @@ namespace BeWoPlanerMobil.Controllers
param.Name = item.Name;
param.ParamType = item.ParamType;
if(item.QueryParameterOid.HasValue && Model.SelectedValues.ContainsKey(item.QueryParameterOid.Value))
if(item.QueryParameterOid.HasValue && IsParameterOidInQueryValues(item.ParamType, item.QueryParameterOid.Value))
{
param.Value = Model.SelectedValues[item.QueryParameterOid.Value].Parameter;
switch(item.ParamType)
{
case QueryParameterType.Custom:
// Nicht implementiert
break;
case QueryParameterType.Customer:
var customerOid = Model.QueryCustomerOids[item.QueryParameterOid.Value];
var queryCustomer = Model.AllCustomersForQueries.FirstOrDefault(customer => customer.CustomerOid.Equals(customerOid));
param.Value = queryCustomer;
break;
case QueryParameterType.Employee:
var employeeOid = Model.QueryEmployeeOids[item.QueryParameterOid.Value];
var queryEmployee = Model.AllEmployeesForQueries.FirstOrDefault(employee => employee.EmployeeOid.Equals(employeeOid));
param.Value = queryEmployee;
break;
case QueryParameterType.Organisation:
var organisationOid = Model.QueryOrganisationOids[item.QueryParameterOid.Value];
var queryOrganisation = Model.AllOrganisationForQuery.FirstOrDefault(organisation => organisation.OrganisationOid.Equals(organisationOid));
param.Value = queryOrganisation;
break;
case QueryParameterType.Text:
param.Value = Model.QueryTexts[item.QueryParameterOid.Value];
break;
case QueryParameterType.Date:
param.Value = Model.QueryDateTimes[item.QueryParameterOid.Value];
break;
case QueryParameterType.DateRange:
param.Value = Model.QueryDateRanges[item.QueryParameterOid.Value];
break;
case QueryParameterType.Month:
param.Value = Model.QueryMonths[item.QueryParameterOid.Value];
break;
case QueryParameterType.ServiceCategory:
var serviceCategoryOid = Model.QueryServiceCategoryOids[item.QueryParameterOid.Value];
var queryServiceCategory = Model.AllServiceCategoriesForQueries.FirstOrDefault(serviceCategory => serviceCategory.ServiceCategoryOid?.Equals(serviceCategoryOid) ?? false);
param.Value = queryServiceCategory;
break;
case QueryParameterType.SupportConcept:
var cb2ScRelOid = Model.QuerySupportConceptOids[item.QueryParameterOid.Value];
var querySupportConcept = Model.CostBearer2SupportConceptRelListObjects.FirstOrDefault(cb2ScRel => cb2ScRel.CostBearer2SupportConceptOid.Equals(cb2ScRelOid));
param.Value = querySupportConcept;
break;
case QueryParameterType.Team:
var teamOid = Model.QueryTeamOids[item.QueryParameterOid.Value];
var queryTeam = Model.AllTeamsForQueries.FirstOrDefault(team => team.TeamOid.Equals(teamOid));
param.Value = queryTeam;
break;
case QueryParameterType.ValueListEntryType:
var valueListEntryOid = Model.QueryValueListEntryOids[item.QueryParameterOid.Value];
var queryValueListEntry = Model.AllValueListEntriesForQuery.FirstOrDefault(valueListEntry => valueListEntry.ValueListEntryOid?.Equals(valueListEntryOid) ?? false);
param.Value = queryValueListEntry;
break;
case QueryParameterType.Year:
// Nicht implementiert
break;
}
}
else if(item.QueryParameterOid.HasValue && item.ParamType == QueryParameterType.Month && false == IsParameterOidInQueryValues(item.ParamType, item.QueryParameterOid.Value))
{
if(item.ParamType == QueryParameterType.Month)
{
var defaultDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1);
param.Value = defaultDate.AddMonths(-1);
}
}
}
@@ -769,6 +869,55 @@ namespace BeWoPlanerMobil.Controllers
return PartialView("BeWoReportPartial", Model);
}
[Authorize]
private bool IsParameterOidInQueryValues(QueryParameterType parameterType, long parameterOid)
{
switch(parameterType)
{
case QueryParameterType.Custom:
// Nicht implementiert
break;
case QueryParameterType.Customer:
return Model.QueryCustomerOids.ContainsKey(parameterOid);
break;
case QueryParameterType.Employee:
return Model.QueryEmployeeOids.ContainsKey(parameterOid);
break;
case QueryParameterType.Organisation:
return Model.QueryOrganisationOids.ContainsKey(parameterOid);
break;
case QueryParameterType.Text:
return Model.QueryTexts.ContainsKey(parameterOid);
break;
case QueryParameterType.Date:
return Model.QueryDateTimes.ContainsKey(parameterOid);
break;
case QueryParameterType.DateRange:
return Model.QueryDateRanges.ContainsKey(parameterOid);
break;
case QueryParameterType.Month:
return Model.QueryMonths.ContainsKey(parameterOid);
break;
case QueryParameterType.ServiceCategory:
return Model.QueryServiceCategoryOids.ContainsKey(parameterOid);
break;
case QueryParameterType.SupportConcept:
return Model.QuerySupportConceptOids.ContainsKey(parameterOid);
break;
case QueryParameterType.Team:
return Model.QueryTeamOids.ContainsKey(parameterOid);
break;
case QueryParameterType.ValueListEntryType:
return Model.QueryValueListEntryOids.ContainsKey(parameterOid);
break;
case QueryParameterType.Year:
// Nicht implementiert
break;
}
return false;
}
[Authorize]
public override string SaveCollapsibleStatus(bool isOpen, string identifier)
{

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace BeWoPlanerMobil {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class DXLocalization {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal DXLocalization() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if(object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BeWoPlanerMobil.DXLocalization", typeof(DXLocalization).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ASPxSchedulerStringId.FloatingActionButton_NewAppointment" xml:space="preserve">
<value>Neuer Termin</value>
</data>
<data name="ASPxSchedulerStringId.ToolTip_DeleteAppointment" xml:space="preserve">
<value>Löschen</value>
</data>
<data name="ASPxSchedulerStringId.FloatingActionButton_DeleteAppointment" xml:space="preserve">
<value>Löschen</value>
</data>
<data name="SchedulerStringId.AppointmentLabel_Birthday" xml:space="preserve">
<value>Geburtstag</value>
</data>
<data name="SchedulerStringId.ViewShortDisplayName_Day" xml:space="preserve">
<value>Tag</value>
</data>
<data name="ASPxEditorsStringId.Calendar_Today" xml:space="preserve">
<value>Heute</value>
</data>
<data name="SchedulerStringId.ViewShortDisplayName_WorkDays" xml:space="preserve">
<value>Arbeitswoche</value>
</data>
</root>

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -9,6 +9,7 @@ using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using BeWoPlanerMobil.Util.SchedulerUtils;
namespace BeWoPlanerMobil
@@ -33,6 +34,12 @@ namespace BeWoPlanerMobil
BundleConfig.RegisterBundles(BundleTable.Bundles);
XmlConfigurator.Configure();
OwnSoftSchedulerLocalizer.Activate();
// Für den Localizer. Für Release wieder entfernen und durch die Zeile darunter ersetzen
//DevExpress.Utils.Localization.XtraLocalizer.EnableTraceSource("BeWoPlanerMobil");
//RELEASE: DevExpress.Utils.Localization.XtraLocalizer.UserResourceManager = DXLocalization.ResourceManager;
}
protected void Application_BeginRequest(object sender, EventArgs e)
@@ -41,6 +48,9 @@ namespace BeWoPlanerMobil
// ToDo: Könnte Probleme beim Login machen, falls der den Header der Login-Anfrage benutzt.
Response.Headers["Referrer-Policy"] = "no-referrer";
Thread.CurrentThread.CurrentCulture = _CultureInfo;
Thread.CurrentThread.CurrentUICulture = _CultureInfo;
}
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)

View File

@@ -34,6 +34,10 @@ namespace BeWoPlanerMobil.Models
public bool HasServiceRecordEntry { get; set; }
public long? OriginatorOid { get; set; }
public int? RecurrenceIndex { get; set; }
public long? NewSchedulerAppointmentVersion { get; set; }
public bool ShowEmployeeColors { get; set; }
public List<ServiceRecordDC> ServiceRecordList { get; set; }
@@ -212,6 +216,8 @@ namespace BeWoPlanerMobil.Models
TaskDescription = appointment.TaskDescription;
OriginatorOid = appointment.Originator.EmployeeOid;
NewSchedulerAppointmentVersion = appointment.NewSchedulerAppointmentVersion;
}
public virtual void Assign(AppointmentModel source)
@@ -250,6 +256,7 @@ namespace BeWoPlanerMobil.Models
TaskDescription = source.TaskDescription;
OriginatorOid = source.OriginatorOid;
NewSchedulerAppointmentVersion = source.NewSchedulerAppointmentVersion;
}
}
}

View File

@@ -16,6 +16,8 @@ namespace BeWoPlanerMobil.Models
{
public bool HasRightToEdit => HasRightToEditCustomers;
public bool HasRightToDelete => HasRightToEditCustomers;
public bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime) => HasRightToDelete;
public long? ObjectOid => SelectedCustomerOid;
public TableID ObjectTid => TableID.Customer;
public string HtmlPrefix => "customer";

View File

@@ -25,6 +25,8 @@ namespace BeWoPlanerMobil.Models
set => DevExpressSchedulerSessionModel.CurrentSchedulerViewType = value;
}
public List<string> RecurrenceIdsWithOccurrences { get; set; }
public DevExpressSchedulerSessionModel DevExpressSchedulerSessionModel => SessionModel as DevExpressSchedulerSessionModel;
public List<CompactCustomerDC> PossibleCustomers { get; set; }

View File

@@ -11,6 +11,7 @@ namespace BeWoPlanerMobil.Models
public SchedulerViewType CurrentSchedulerViewType { get; set; }
public List<long> SelectedEmployeeOidsForFiltering { get; set; }
public List<long> SelectedCustomerOidsForFiltering { get; set; }
public List<long> SelectedResourceOidsForFiltering { get; set; }

View File

@@ -1,4 +1,5 @@
using BS.Shared.DataContracts;
using BS.Shared;
using BS.Shared.DataContracts;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
@@ -9,6 +10,22 @@ namespace BeWoPlanerMobil.Models
{
public bool HasRightToEdit => HasRightToEditEmployeeAbsenceTimes;
public bool HasRightToDelete => HasRightToEditEmployeeAbsenceTimes;
public bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime)
{
if (!HasRightToDelete)
{
return false;
}
if (absenceTime.IsInThePast)
{
return CheckRight(UserRightType.Employee_AllowDeleteAbsenceTimesAfterExpiry);
}
return true;
}
public string HtmlPrefix => "employee";
public EmployeeSessionModel EmployeeSessionModel => SessionModel as EmployeeSessionModel;

View File

@@ -16,5 +16,6 @@ namespace BeWoPlanerMobil.Models
long? AbsenteeOid { get; }
bool HasRightToEdit { get; }
bool HasRightToDelete { get; }
bool CanDeleteAbsenceTime(AbsenceTimeDC absenceTime);
}
}

View File

@@ -1,12 +1,13 @@
using System;
using BeWo.Report;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
using BeWo.Report;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
namespace BeWoPlanerMobil.Models
{
@@ -15,15 +16,10 @@ namespace BeWoPlanerMobil.Models
public ReportViewerModel()
{
SessionModel = new ReportViewerSessionModel();
SessionModel.ResetValues();
}
public ReportViewerSessionModel ReportViewerSessionModel
{
get
{
return SessionModel as ReportViewerSessionModel;
}
}
public ReportViewerSessionModel ReportViewerSessionModel => SessionModel as ReportViewerSessionModel;
public List<CompactEmployeeDC> AllEmployees { get; set; }
public List<CompactTeamDC> AllTeams { get; set; }
@@ -31,7 +27,12 @@ namespace BeWoPlanerMobil.Models
public AbstractReportCreator ReportCreator { get; set; }
[Display(Name = "Monat")]
public int? SelectedMonth { get { return ReportViewerSessionModel.SelectedMonth; } set { ReportViewerSessionModel.SelectedMonth = value; } }
public int? SelectedMonth
{
get => ReportViewerSessionModel.SelectedMonth;
set => ReportViewerSessionModel.SelectedMonth = value;
}
public List<SelectListItem> Months
{
get
@@ -51,9 +52,13 @@ namespace BeWoPlanerMobil.Models
}
}
[Display(Name = "Jahr")]
public int? SelectedYear { get { return ReportViewerSessionModel.SelectedYear; } set { ReportViewerSessionModel.SelectedYear = value; } }
public int? SelectedYear
{
get => ReportViewerSessionModel.SelectedYear;
set => ReportViewerSessionModel.SelectedYear = value;
}
public List<SelectListItem> Years
{
get
@@ -75,7 +80,12 @@ namespace BeWoPlanerMobil.Models
[Display(Name="Bericht")]
public ReportType SelectedReportType { get { return ReportViewerSessionModel.SelectedReportType; } set { ReportViewerSessionModel.SelectedReportType = value; } }
public ReportType SelectedReportType
{
get => ReportViewerSessionModel.SelectedReportType;
set => ReportViewerSessionModel.SelectedReportType = value;
}
public List<SelectListItem> ReportTypes { get; set; }
@@ -107,7 +117,12 @@ namespace BeWoPlanerMobil.Models
[Display(Name = "Mitarbeiter")]
public long? SelectedEmployeeOid { get { return ReportViewerSessionModel.SelectedEmployeeOid; } set { ReportViewerSessionModel.SelectedEmployeeOid = value; } }
public long? SelectedEmployeeOid
{
get => ReportViewerSessionModel.SelectedEmployeeOid;
set => ReportViewerSessionModel.SelectedEmployeeOid = value;
}
public CompactEmployeeDC SelectedEmployee { get; set; }
public List<SelectListItem> Employees
{
@@ -139,7 +154,12 @@ namespace BeWoPlanerMobil.Models
[Display(Name = "Team")]
public long? SelectedTeamOid { get { return ReportViewerSessionModel.SelectedTeamOid; } set { ReportViewerSessionModel.SelectedTeamOid = value; } }
public long? SelectedTeamOid
{
get => ReportViewerSessionModel.SelectedTeamOid;
set => ReportViewerSessionModel.SelectedTeamOid = value;
}
public CompactTeamDC SelectedTeam { get; set; }
public List<SelectListItem> Teams
{
@@ -221,6 +241,79 @@ namespace BeWoPlanerMobil.Models
public Dictionary<long, SelectedValue> SelectedValues { get; set; } = new Dictionary<long, SelectedValue>();
public Dictionary<long, long> QueryEmployeeOids
{
get => ReportViewerSessionModel.QueryEmployeeOids;
set => ReportViewerSessionModel.QueryEmployeeOids = value;
}
public Dictionary<long, long> QueryCustomerOids
{
get => ReportViewerSessionModel.QueryCustomerOids;
set => ReportViewerSessionModel.QueryCustomerOids = value;
}
public Dictionary<long, long> QueryOrganisationOids
{
get => ReportViewerSessionModel.QueryOrganisationOids;
set => ReportViewerSessionModel.QueryOrganisationOids = value;
}
public Dictionary<long, DateTime> QueryDateTimes
{
get => ReportViewerSessionModel.QueryDates;
set => ReportViewerSessionModel.QueryDates = value;
}
public Dictionary<long, DateTimeSpan> QueryDateRanges
{
get => ReportViewerSessionModel.QueryDateRanges;
set => ReportViewerSessionModel.QueryDateRanges = value;
}
public Dictionary<long, string> QueryTexts
{
get => ReportViewerSessionModel.QueryTexts;
set => ReportViewerSessionModel.QueryTexts = value;
}
public Dictionary<long, DateTime> QueryMonths
{
get => ReportViewerSessionModel.QueryMonths;
set => ReportViewerSessionModel.QueryMonths = value;
}
public Dictionary<long, long> QueryServiceCategoryOids
{
get => ReportViewerSessionModel.QueryServiceCategoryOids;
set => ReportViewerSessionModel.QueryServiceCategoryOids = value;
}
public Dictionary<long, long> QuerySupportConceptOids
{
get => ReportViewerSessionModel.QuerySupportConceptOids;
set => ReportViewerSessionModel.QuerySupportConceptOids = value;
}
public Dictionary<long, long> QueryTeamOids
{
get => ReportViewerSessionModel.QueryTeamOids;
set => ReportViewerSessionModel.QueryTeamOids = value;
}
public Dictionary<long, long> QueryValueListEntryOids
{
get => ReportViewerSessionModel.QueryValueListEntryOids;
set => ReportViewerSessionModel.QueryValueListEntryOids = value;
}
public Dictionary<long, DateTime> QueryYears
{
get => ReportViewerSessionModel.QueryYears;
set => ReportViewerSessionModel.QueryYears = value;
}
public Dictionary<ValueListEntryType, List<ValueListEntryDC>> ValueListEntryTypes2ValueListEntries { get; set; } = new Dictionary<ValueListEntryType, List<ValueListEntryDC>>();
public List<SupportConceptCostBearerRelDC> CostBearer2SupportConceptRels { get; set; } = new List<SupportConceptCostBearerRelDC>();

View File

@@ -1,22 +1,27 @@
using System;
using BS.Shared.Core;
using DevExpress.Xpo.Helpers;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
using BeWo.View.Navigation.Filter;
using BeWoPlanerMobil.Controllers;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using DevExpress.XtraReports.UI;
namespace BeWoPlanerMobil.Models
{
[Serializable]
public class ReportViewerSessionModel : BaseSessionModel
{
public Dictionary<long, long> QueryEmployeeOids { get; set; }
public Dictionary<long, long> QueryCustomerOids { get; set; }
public Dictionary<long, long> QueryOrganisationOids { get; set; }
public Dictionary<long, DateTime> QueryDates { get; set; }
public Dictionary<long, DateTimeSpan> QueryDateRanges { get; set; }
public Dictionary<long, string> QueryTexts { get; set; }
public Dictionary<long, DateTime> QueryMonths { get; set; }
public Dictionary<long, long> QueryServiceCategoryOids { get; set; }
public Dictionary<long, long> QuerySupportConceptOids { get; set; }
public Dictionary<long, long> QueryTeamOids { get; set; }
public Dictionary<long, long> QueryValueListEntryOids { get; set; }
public Dictionary<long, DateTime> QueryYears { get; set; }
public long? SelectedEmployeeOid { get; set; }
public long? SelectedTeamOid { get; set; }
public int? SelectedMonth { get; internal set; }
@@ -28,6 +33,20 @@ namespace BeWoPlanerMobil.Models
{
base.ResetValues();
QueryEmployeeOids = new Dictionary<long, long>();
QueryCustomerOids = new Dictionary<long, long>();
QueryOrganisationOids = new Dictionary<long, long>();
QueryDates = new Dictionary<long, DateTime>();
QueryDateRanges = new Dictionary<long, DateTimeSpan>();
QueryTexts = new Dictionary<long, string>();
QueryMonths = new Dictionary<long, DateTime>();
QueryServiceCategoryOids = new Dictionary<long, long>();
QuerySupportConceptOids = new Dictionary<long, long>();
QueryTeamOids = new Dictionary<long, long>();
QueryValueListEntryOids = new Dictionary<long, long>();
QueryYears = new Dictionary<long, DateTime>();
SelectedEmployeeOid = null;
SelectedTeamOid = null;
SelectedMonth = null;

View File

@@ -0,0 +1,54 @@
using System.Diagnostics;
using DevExpress.Utils.Localization.Internal;
using DevExpress.XtraScheduler.Localization;
namespace BeWoPlanerMobil.Util.SchedulerUtils
{
public class OwnSoftSchedulerLocalizer : SchedulerLocalizer
{
public override string GetLocalizedString(SchedulerStringId id)
{
switch(id)
{
case SchedulerStringId.ViewShortDisplayName_Day:
return "Tag";
case SchedulerStringId.ViewShortDisplayName_Week:
return "Woche";
case SchedulerStringId.TimeScaleDisplayName_Week:
return "Woche";
case SchedulerStringId.ViewShortDisplayName_WorkDays:
return "Arbeitswoche";
case SchedulerStringId.ViewDisplayName_WorkDays:
return "Arbeitswoche";
case SchedulerStringId.ViewShortDisplayName_Timeline:
return "Zeitleiste";
case SchedulerStringId.ViewDisplayName_Timeline:
return "Zeitleiste";
case SchedulerStringId.ViewDisplayName_Month:
return "Monat";
case SchedulerStringId.ViewShortDisplayName_Month:
return "Monat";
case SchedulerStringId.Caption_WeekOfMonthFirst:
return "Ersten";
case SchedulerStringId.Caption_WeekOfMonthSecond:
return "Zweiten";
case SchedulerStringId.Caption_WeekOfMonthThird:
return "Dritten";
case SchedulerStringId.Caption_WeekOfMonthFourth:
return "Vierten";
case SchedulerStringId.Caption_WeekOfMonthLast:
return "Letzten";
}
return base.GetLocalizedString(id);
}
public static void Activate()
{
var localizer = new OwnSoftSchedulerLocalizer();
var provider = new DefaultActiveLocalizerProvider<SchedulerStringId>(localizer);
SetActiveLocalizerProvider(provider);
}
}
}

View File

@@ -116,7 +116,7 @@
</div>
<input class="form-control w-100" type="text" placeholder="Suchen..." oninput="employeeListSearchOnChange()" id="employee-search-input" />
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button" onclick="resetEmployeeSearch()">
<button class="btn btn-sm btn-outline-secondary" type="button" onclick="resetEmployeeSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
@@ -137,7 +137,7 @@
<div class="card-body">
@foreach(var team in Model.MyTeams)
{
<button type="button" class="btn btn-bewo-teams w-100 my-2" onclick="selectTeamForAppointment(@team.TeamOid)">@team.Name</button>
<button type="button" class="btn btn-sm btn-bewo-teams w-100 my-2" onclick="selectTeamForAppointment(@team.TeamOid)">@team.Name</button>
}
</div>
</div>

View File

@@ -1,5 +1,4 @@
@using BeWoPlanerMobil.Util
<script type="text/javascript">
<script type="text/javascript">
function onAppointmentDragTipDisplaying(s, e) {
const newIntervalText = e.toolTip.ConvertIntervalToString(e.data.GetInterval());

View File

@@ -7,7 +7,8 @@
Html.EnableClientValidation();
Html.EnableUnobtrusiveJavaScript();
var isNew = Model.Oid is null;
// Ist bei Serientermininstanzen ebenfalls null!
var isNew = Model.Oid is null && Model.RecurrenceIndex == 0 && Model.RecurrenceInfo is null;
var cancelButtonText = "Abbrechen";
@@ -84,6 +85,11 @@
var showResourceButton = (Model.HasRightKalenderRessourcentermineAnsehen && Model.Oid.HasValue) ||
(Model.Oid.HasValue && (Model.HasRightKalenderRessourcenTermineAendern && isOriginator || isOriginator is false && Model.HasRightKalenderRessourcenTermineAndererAendern)) ||
(Model.Oid is null && Model.HasRightKalenderRessourcenTermineAnlegen);
if(areButtonsVisible != Model.CanBeEdited)
{
}
}
<style type="text/css">
@@ -95,168 +101,393 @@
@using(Html.BeginForm())
{
<table id="abc-table" class="w-100">
@* Betreff *@
<tr>
<td colspan="2">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Betreff</span>
</div>
<input class="form-control" type="text" @disabled id="Subject" name="Subject" value="@Model.Subject" />
</div>
</td>
</tr>
@* Ort *@
<tr>
<td colspan="2">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ort</span>
</div>
<input class="form-control" type="text" @disabled id="Location" name="Location" value="@Model.Location" />
</div>
</td>
</tr>
@* Start *@
<tr>
<td>
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Start</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="StartDate" name="StartDate" value="@start" />
</div>
</td>
<td>
<div class="input-group pl-2 mb-2">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.AllDay);
settings.Width = Unit.Percentage(100);
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.AllDay).GetHtml()
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Ganztägig</span>
</div>
</div>
</td>
</tr>
@* Ende *@
<tr>
<td colspan="2">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ende</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="EndDate" name="EndDate" value="@end" />
</div>
</td>
</tr>
@* Privat *@
<tr>
<td >
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.IsPrivate);
settings.Width = Unit.Percentage(100);
settings.Properties.RootStyle.CssClass = "";
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.IsPrivate).GetHtml()
<div class="row" id="abc-table">
<div class="col">
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Betreff</span>
</div>
<input class="form-control" type="text" @disabled id="Subject" name="Subject" value="@Model.Subject" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ort</span>
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Privat</span>
<input class="form-control" type="text" @disabled id="Location" name="Location" value="@Model.Location" />
</div>
</div>
</td>
</tr>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Start</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="StartDate" name="StartDate" value="@start" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<span class="input-group-text">Ende</span>
</div>
<input class="form-control" type="@dateInputType" @disabled id="EndDate" name="EndDate" value="@end" />
</div>
</div>
</div>
<div class="form-row">
<div class="col-md">
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.IsPrivate);
settings.Width = Unit.Percentage(100);
settings.Properties.RootStyle.CssClass = "";
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.IsPrivate).GetHtml()
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Privat</span>
</div>
</div>
</div>
<div class="col-md">
<div class="input-group pl-2 mb-2 justify-content-end">
<div class="input-group-prepend">
<div class="input-group-text">
@Html.DevExpress().CheckBox(
settings =>
{
settings.Name = nameof(SchedulerAppointmentDC.AllDay);
settings.Width = Unit.Percentage(100);
settings.ReadOnly = disabled.Length > 0;
}).Bind(Model.AllDay).GetHtml()
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Ganztägig</span>
</div>
</div>
</div>
</div>
@if(Model.HasRightKalenderMitarbeitertermineAnsehen || Model.HasRightKalenderKliententermineAnsehen || Model.HasRightKalenderRessourcentermineAnsehen)
{
<tr>
@* colspan="4" *@
<td colspan="2">
<table class="w-100">
<tr>
<td style="width: 33%; padding: .25em;">
@if(showEmployeeButton)
{
@Html.Partial("CustomEmployeeSelectPartial", Model)
}
</td>
<td style="width: 33%; padding: .25em;">
@if(showCustomerButton)
{
@Html.Partial("CustomCustomerSelectPartial", Model)
}
</td>
<td style="width: 33%; padding: .25em;">
@if(showResourceButton)
{
@Html.Partial("CustomResourceSelectPartial", Model)
}
</td>
</tr>
</table>
</td>
</tr>
}
@if(Model.HasRightKalenderMitarbeitertermineAnsehen || Model.HasRightKalenderKliententermineAnsehen || Model.HasRightKalenderRessourcentermineAnsehen)
{
<div class="form-row justify-content-center">
@if(showEmployeeButton)
{
@Html.Partial("CustomEmployeeSelectPartial", Model)
}
@* Notiz *@
<tr>
<td colspan="2">
<div class="form-group">
<label for="Description">Notiz</label>
<textarea class="form-control" @disabled id="Description" name="Description">@Model.Description</textarea>
</div>
</td>
</tr>
</table>
@if(showCustomerButton)
{
@Html.Partial("CustomCustomerSelectPartial", Model)
}
@Html.DevExpress().AppointmentRecurrenceForm(ViewBag.AppointmentRecurrenceFormSettings).GetHtml()
@if(showResourceButton)
{
@Html.Partial("CustomResourceSelectPartial", Model)
}
</div>
}
<table style="width: 100%">
<tr>
@if(areButtonsVisible)
{
<button type="button" class="btn btn-primary mr-2" id="Apply" name="Apply" onclick="OnAppointmentFormSave()">OK</button>
}
<div class="form-row">
<div class="col-md">
<div class="form-group">
<label for="Description">Notiz</label>
<textarea class="form-control" @disabled id="Description" name="Description">@Model.Description</textarea>
</div>
</div>
</div>
<div id="recurrence-container">
@*@{
var recurrenceSettings = (AppointmentRecurrenceFormSettings) ViewBag.AppointmentRecurrenceFormSettings;
<button type="button" class="btn btn-primary mr-2" id="Cancel" name="Cancel" onclick="OnAppointmentFormCancel()">@cancelButtonText</button>
recurrenceSettings.Enabled = areButtonsVisible;
}
@if(isDeleteButtonVisible)
{
<button type="button" class="btn btn-danger" id="Delete" name="Delete" onclick="OnAppointmentFormDelete()">Löschen</button>
}
</tr>
</table>
@Html.DevExpress().AppointmentRecurrenceForm(recurrenceSettings).GetHtml()*@
<table class="w-100">
<tr>
<td style="width: 100%;">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<label for="recurrence-type" class="input-group-text">Wiederholung</label>
</div>
<select name="recurrence-type" id="recurrence-type" class="custom-select" onclick="recurrenceSelectChange()">
<option value="1">Einmalig</option>
<option value="2">Täglich</option>
<option value="3">Wöchentlich</option>
<option value="4">Monatlich</option>
<option value="5">Jährlich</option>
</select>
</div>
<div id="recurrence-form-container">
<div class="card mt-2">
<div class="card-header p-1 pr-2">
Serienmuster
</div>
<div class="card-body p-1">
<div id="daily-recurrence-form">
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="daily-x-pattern-radio" name="daily-pattern">
<span>Jeden</span>
</div>
</div>
<input id="daily-x-pattern-value" class="form-control" type="number" min="0" max="9999" value="1" />
<div class="input-group-append">
<span class="input-group-text">Tag</span>
</div>
</div>
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" id="daily-every-weekday-radio" name="daily-pattern">
</div>
</div>
<div class="input-group-append">
<span class="input-group-text">Jeden Wochentag</span>
</div>
</div>
</div>
<div id="weekly-recurrence-form">
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<span class="input-group-text">
Jede
</span>
</div>
<input id="weekly-x-pattern-value" name="weekly-x-pattern-value" class="form-control" type="number" min="1" value="1" />
<div class="input-group-append">
<span class="input-group-text">
Woche am:
</span>
</div>
</div>
<div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-mo-cb" name="weekly-mo-cb" class="form-check-input">
<label for="weekly-mo-cb" class="form-check-label">Mo</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-di-cb" name="weekly-di-cb" class="form-check-input">
<label for="weekly-di-cb" class="form-check-label">Di</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-mi-cb" name="weekly-mi-cb" class="form-check-input">
<label for="weekly-mi-cb" class="form-check-label">Mi</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-do-cb" name="weekly-do-cb" class="form-check-input">
<label for="weekly-do-cb" class="form-check-label">Do</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-fr-cb" name="weekly-fr-cb" class="form-check-input">
<label for="weekly-fr-cb" class="form-check-label">Fr</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-sa-cb" name="weekly-sa-cb" class="form-check-input">
<label for="weekly-sa-cb" class="form-check-label">Sa</label>
</div>
<div class="form-check form-check-inline">
<input type="checkbox" id="weekly-so-cb" name="weekly-so-cb" class="form-check-input">
<label for="weekly-so-cb" class="form-check-label">So</label>
</div>
</div>
</div>
<div id="monthly-recurrence-form">
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="monthly-day-pattern-radio" name="monthly-pattern">
<span>Tag</span>
</div>
</div>
<input id="monthly-day-pattern-day-value" name="monthly-day-pattern-day-value" class="form-control" type="number" min="1" max="31" value="1" />
<div class="input-group-append">
<span class="input-group-text">jeden</span>
<input id="monthly-day-pattern-month-value" name="monthly-day-pattern-month-value" class="border border-left-0 border-right-0 border-input-group-form-control-border text-dark" type="number" min="1" max="31" value="1" />
<span class="input-group-text">Monats</span>
</div>
</div>
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="monthly-weekday-pattern-radio" name="monthly-pattern">
<span>Am</span>
</div>
</div>
<select id="monthly-weekday-number-value" name="monthly-weekday-number-value" class="custom-select">
<option value="1">Ersten</option>
<option value="2">Zweiten</option>
<option value="3">Dritten</option>
<option value="4">Vierten</option>
<option value="5">Letzten</option>
</select>
<select id="monthly-weekday-day-of-week-value" name="monthly-weekday-day-of-week-value" class="custom-select">
<option value="1">Montag</option>
<option value="2">Dienstag</option>
<option value="3">Mittwoch</option>
<option value="4">Donnerstag</option>
<option value="5">Freitag</option>
<option value="6">Samstag</option>
<option value="7">Sonntag</option>
</select>
<div class="input-group-prepend">
<span class="input-group-text border-left-0">jeden</span>
<input id="monthly-weekday-pattern-value" name="monthly-weekday-pattern-value" class="border border-left-0 border-right-0 border-input-group-form-control-border text-dark" type="number" min="1" max="31" value="1" />
<span class="input-group-text">Monats</span>
</div>
</div>
</div>
<div id="yearly-recurrence-form">
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="yearly-day-pattern-radio" name="yearly-pattern">
<span>Am</span>
</div>
</div>
<input id="yearly-pattern-day-of-month-value" name="yearly-pattern-day-of-month-value" class="form-control" type="number" min="1" max="31" value="1">
<select id="yearly-pattern-month-value" name="yearly-pattern-month-value" class="custom-select">
<option value="1">Januar</option>
<option value="2">Februar</option>
<option value="3">März</option>
<option value="4">April</option>
<option value="5">Mai</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">Dezember</option>
</select>
</div>
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="yearly-weekday-pattern-radio" name="yearly-pattern">
<span>Am</span>
</div>
</div>
<select id="yearly-weekday-number-value" name="yearly-weekday-number-value" class="custom-select">
<option value="1">Ersten</option>
<option value="2">Zweiten</option>
<option value="3">Dritten</option>
<option value="4">Vierten</option>
<option value="5">Letzten</option>
</select>
<select id="yearly-weekday-day-of-week-value" name="yearly-weekday-day-of-week-value" class="custom-select">
<option value="1">Montag</option>
<option value="2">Dienstag</option>
<option value="3">Mittwoch</option>
<option value="4">Donnerstag</option>
<option value="5">Freitag</option>
<option value="6">Samstag</option>
<option value="7">Sonntag</option>
</select>
<span class="input-group-text rounded-0 border-left-0 border-right-0">im</span>
<select id="yearly-weekday-month-value" name="yearly-weekday-month-value" class="custom-select">
<option value="1">Januar</option>
<option value="2">Februar</option>
<option value="3">März</option>
<option value="4">April</option>
<option value="5">Mai</option>
<option value="6">Juni</option>
<option value="7">Juli</option>
<option value="8">August</option>
<option value="9">September</option>
<option value="10">Oktober</option>
<option value="11">November</option>
<option value="12">Dezember</option>
</select>
</div>
</div>
</div>
</div>
<div id="recurrence-duration-container">
<div class="card mt-2">
<div class="card-header p-1 pl-2">
Seriendauer
</div>
<div class="card-body p-1">
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="duration-no-end" name="duration-radio-group">
<span>Ohne Ende</span>
</div>
</div>
</div>
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="duration-end-after" name="duration-radio-group">
<span>Endet nach:</span>
</div>
</div>
<input type="number" class="form-control" />
<div class="input-group-append">
<span class="input-group-text">Wiederholungen</span>
</div>
</div>
<div class="input-group input-group-sm mt-1">
<div class="input-group-prepend">
<div class="input-group-text">
<input type="radio" class="mr-2" id="duration-end-by" name="duration-radio-group">
<span>Endet am:</span>
</div>
</div>
<input type="date" class="form-control" />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col">
<div class="float-right">
@if(areButtonsVisible)
{
<button type="button" class="btn btn-sm-auto btn-primary mr-2" id="Apply" name="Apply" onclick="OnAppointmentFormSave()">OK</button>
}
<button type="button" class="btn btn-sm-auto btn-primary mr-2" id="Cancel" name="Cancel" onclick="OnAppointmentFormCancel()">@cancelButtonText</button>
@if(isDeleteButtonVisible)
{
<button type="button" class="btn btn-sm-auto btn-danger" id="Delete" name="Delete" onclick="OnAppointmentFormDelete()">Löschen</button>
}
</div>
</div>
</div>
<div>
@Html.DevExpress().SchedulerStatusInfo(
settings =>
{
settings.Name = "schedulerStatusInfo";
settings.Priority = 1;
settings.SchedulerName = "scheduler";
}).GetHtml()
</td>
</tr>
</table>
settings =>
{
settings.Name = "schedulerStatusInfo";
settings.Priority = 1;
settings.SchedulerName = "scheduler";
}).GetHtml()
</div>
</div>
</div>
}

View File

@@ -1,7 +1,7 @@
<script type="text/javascript">
function onAppointmentTipDisplaying(s, e) {
const currentApt = getCurrentApt();
console.log(currentApt);
if(currentApt.updated === false) {
scheduler.RefreshClientAppointmentProperties(currentApt, AppointmentPropertyNames.Normal, OnAppointmentRefresh);
setAptToolTipSubject("Lade...");
@@ -12,9 +12,7 @@
const participationInfos = currentApt.ParticipationInfos;
const resourceInfos = currentApt.ResourceInfos;
const customerInfos = currentApt.CustomerInfos;
logInfo(`Mitarbeiter: ${participationInfos.length}\r\nKlienten: ${customerInfos.length}\r\nRessourcen: ${resourceInfos.length}`);
let bgClass = "";
$("#tool-tip-info").empty();
@@ -57,7 +55,6 @@
$("#resources-container").append(`<span class="small pr-1">Ressourcen:</span>`);
resourceInfos.forEach((info) => {
logInfo2(`Farbe der Ressource <<${info.ResourceName}>>: ${info.ResourceColor}`);
$("#resources-container").append(`<span class="badge badge-light border"><div class="mr-1" style="display:inline-block;border-radius:3px;vertical-align:middle;width:10px;height:10px;border:1px slategray;background-color: ${info.ResourceColor};"></div>${info.ResourceName}</span>`);
});
}
@@ -66,7 +63,7 @@
const textInterval = e.toolTip.ConvertIntervalToString(currentApt.interval);
$('#tool-tip-title').html(textInterval);
$('#tool-tip-title').html(`${textInterval}: ${currentApt.GetSubject()}`);
if(currentApt.CanBeDeleted === false) {
$("#aptToolTipDelete").hide();
@@ -75,10 +72,23 @@
if(currentApt.CanBeEdited === false) {
if(currentApt.CanBeViewed) {
$("#aptToolTipEdit").text("Ansehen");
$("#aptToolTipEditSeries").text("Serie Ansehen");
} else {
$("#aptToolTipEdit").hide();
$("#aptToolTipEdit, #aptToolTipEditSeries").hide();
}
}
if(currentApt.HasOccurrencies === false) {
$("#reset-series-list-item").hide();
} else {
$("#reset-series-list-item").show();
}
if(currentApt.RecurrenceId === null || currentApt.RecurrenceId === undefined) {
$("#aptToolTipEditSeries").hide();
} else {
$("#aptToolTipEditSeries").show();
}
}
function setAptToolTipSubject(text) {
@@ -95,15 +105,58 @@
}
function onAptToolTipDeleteClick() {
scheduler.DeleteAppointment(GetCurrentApt());
const appointment = getCurrentApt();
if(appointment.appointmentType === "Occurrence") {
$("#apt-del-ok-btn").on("click",
function() {
const radioOptionId = $("input[name='apt-del-radio-group']:checked").attr("id");
if(radioOptionId === "apt-del-radio-1") {
const patternId = appointment.appointmentId.split("_")[0];
scheduler.PerformCallback({apptID: patternId, actionId: "DeleteSeries", args: null}, () => { hideSpinner(); });
} else if(radioOptionId === "apt-del-radio-2") {
scheduler.DeleteAppointment(appointment);
}
$("#apt-del-ok-btn").off("click");
$("#recurrence-delete-popup").modal("hide");
});
$("#recurrence-delete-popup").modal("show");
} else {
showWarningMessageBox("Löschen bestätigen", "Sind Sie sicher, dass Sie den Termin löschen möchten?", () => {
scheduler.DeleteAppointment(appointment);
}, false);
}
}
function onAptToolTipEditClick() {
function onAptToolTipEditClick() {
scheduler.ShowAppointmentFormByClientId(getCurrentApt().GetId());
}
function onAptToolTipEditSeriesClick() {
scheduler.ShowAppointmentFormByClientId(getCurrentApt().GetId().split("_")[0]);
}
function onAptToolTipShowMenuClick() {
toolTipContext.toolTip.ShowAppointmentMenu();
}
function onAptToolTipTransferClick() {
scheduler.PerformCallback({apptID: getCurrentApt().appointmentId, actionId: "ToServiceRecord" });
}
function onAptToolTipResetClick() {
const appointment = getCurrentApt();
const recurrenceId = appointment.RecurrenceId;
if(recurrenceId !== undefined && recurrenceId !== null && recurrenceId.length > 0) {
showWarningMessageBox("Zurücksetzen der Serie bestätigen", "Sind Sie sicher, dass Sie die ausgewählte Terminserie zurücksetzen möchten?", () => {
scheduler.PerformCallback({ apptID: recurrenceId, actionId: "ResetSeries", args: null }, () => { hideSpinner(); });
}, false);
}
}
</script>
@@ -117,4 +170,33 @@
<div id="originator-container"></div>
</div>
</div>
<div class="card-footer m-0 p-1">
<ul class="list-group">
<li class="list-group-item p-1">
<button type="button" id="aptToolTipEdit" class="btn btn-sm btn-primary w-100" onclick="onAptToolTipEditClick()">
Bearbeiten
</button>
</li>
<li class="list-group-item p-1">
<button type="button" id="aptToolTipEditSeries" class="btn btn-sm btn-primary w-100" onclick="onAptToolTipEditSeriesClick()">
Serie Bearbeiten
</button>
</li>
<li class="list-group-item p-1">
<button type="button" id="aptToolTipDelete" class="btn btn-sm btn-danger w-100" onclick="onAptToolTipDeleteClick()">
Löschen
</button>
</li>
<li class="list-group-item p-1">
<button type="button" id="aptToolTipTransfer" class="btn btn-sm btn-primary w-100" onclick="onAptToolTipTransferClick()">
In die Zeiterfassung übertragen
</button>
</li>
<li class="list-group-item p-1" id="reset-series-list-item">
<button type="button" id="aptToolTipReset" class="btn btn-sm btn-primary w-100" onclick="onAptToolTipResetClick()">
Serie zurücksetzen
</button>
</li>
</ul>
</div>
</div>

View File

@@ -7,15 +7,15 @@
var allChecked = areAllSelected ? "checked" : string.Empty;
var canEdit = Model.Oid.HasValue && Model.HasRightKalenderKlientenTermineAendern;
var canCreate = Model.Oid is null && Model.HasRightKalenderKlientenTermineAnlegen;
var canCreate = Model.Oid is null && Model.RecurrenceIndex == 0 && Model.RecurrenceInfo is null && Model.HasRightKalenderKlientenTermineAnlegen;
var checkBoxEnabled = canEdit || canCreate;
var disabled = checkBoxEnabled ? string.Empty : "disabled";
}
<div class="dropdown w-100" id="customers-dropdown">
<button class="btn btn-bewo-customers dropdown-toggle w-100" type="button" data-toggle="dropdown">
<div class="dropdown pr-1" id="customers-dropdown">
<button class="btn btn-sm-auto btn-bewo-customers dropdown-toggle w-100" type="button" data-toggle="dropdown">
Klienten <span class="badge badge-light" id="apt-cus-badge">@Model.SelectedCustomerOids.Count</span>
</button>
<div class="dropdown-menu" onclick="event.stopPropagation();">
@@ -28,7 +28,7 @@
</div>
<input type="text" class="form-control" @disabled id="cus-drop-search-input" placeholder="Suchen ..." oninput="onNewSearchInput('cus')">
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" @disabled onclick="resetNewSearch('cus')">
<button type="button" class="btn btn-sm-auto btn-outline-secondary" @disabled onclick="resetNewSearch('cus')">
<span class="fas fa-times-circle"></span>
</button>
</div>

View File

@@ -37,15 +37,15 @@
var allChecked = areAllSelected ? "checked" : string.Empty;
var isNew = Model.Oid is null;
var isNew = Model.Oid is null && Model.RecurrenceIndex == 0 && Model.RecurrenceInfo is null;
var isEdit = isNew is false;
var checkBoxEnabled = isEdit && Model.HasRightKalenderMitarbeiterTermineAendern || isNew && Model.HasRightKalenderMitarbeiterTermineAnlegen;
var disabled = checkBoxEnabled is false || (Model.CanBeEdited is false && isNew is false) ? "disabled" : string.Empty;
}
<div class="dropdown w-100" id="employees-dropdown">
<button class="btn btn-bewo-employee dropdown-toggle w-100" type="button" data-toggle="dropdown">
<div class="dropdown pr-1" id="employees-dropdown">
<button class="btn btn-sm-auto btn-bewo-employee dropdown-toggle w-100" type="button" data-toggle="dropdown">
Mitarbeiter <span class="badge badge-light" id="apt-emp-badge">@Model.SelectedEmployee2SchedulerAppointments.Count</span>
</button>
<div class="dropdown-menu" onclick="event.stopPropagation();">
@@ -58,7 +58,7 @@
</div>
<input type="text" class="form-control" @disabled id="emp-drop-search-input" placeholder="Suchen ..." oninput="onNewSearchInput('emp')">
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" @disabled onclick="resetNewSearch('emp')">
<button type="button" class="btn btn-sm-auto btn-outline-secondary" @disabled onclick="resetNewSearch('emp')">
<span class="fas fa-times-circle"></span>
</button>
</div>

View File

@@ -0,0 +1,17 @@
@Html.DevExpress().FormLayout(settings => {
settings.Name = "appointmentRecurrenceForm";
settings.SettingsAdaptivity.AdaptivityMode = FormLayoutAdaptivityMode.SingleColumnWindowLimit;
settings.SettingsAdaptivity.SwitchToSingleColumnAtWindowInnerWidth = 700;
// Ein Item, das den eigentlichen Recurrence-Extension-Block aufnimmt
settings.Items.Add(item => {
item.SetNestedContent(() => {
// hier die AppointmentRecurrenceForm-Extension rendern
Html.DevExpress().AppointmentRecurrenceForm(
Model.CreateAppointmentRecurrenceFormSettings()).Render();
});
});
// ... weitere Items (z. B. OK/Abbrechen-Buttons) als eigene Zeile
}).GetHtml()

View File

@@ -21,7 +21,7 @@
var checkedValue = areAllSelected ? "checked" : string.Empty;
var isOriginator = Model.OriginatorOid.HasValue && Model.OriginatorOid.Value == Model.LoggedInCompactEmployee.EmployeeOid;
var isNew = Model.Oid is null;
var isNew = Model.Oid is null && Model.RecurrenceIndex == 0 && Model.RecurrenceInfo is null;
var canEditResApt = Model.HasRightKalenderRessourcenTermineAendern;
var canEditOthersResApt = Model.HasRightKalenderRessourcenTermineAndererAendern;
var canCreateResApt = Model.HasRightKalenderRessourcenTermineAnlegen;
@@ -33,8 +33,8 @@
var disabled = isDisabled ? "disabled" : string.Empty;
}
<div class="dropdown w-100" id="resources-dropdown">
<button class="btn btn-bewo-resource dropdown-toggle w-100" type="button" data-toggle="dropdown">
<div class="dropdown pr-1" id="resources-dropdown">
<button class="btn btn-sm-auto btn-bewo-resource dropdown-toggle w-100" type="button" data-toggle="dropdown">
Ressourcen <span class="badge badge-light" id="apt-res-badge">@Model.SelectedResourceOids.Count</span>
</button>
<div class="dropdown-menu" onclick="event.stopPropagation();">
@@ -47,7 +47,7 @@
</div>
<input type="text" class="form-control" id="res-drop-search-input" placeholder="Suchen ..." oninput="onNewResourceSeachInput()">
<div class="input-group-append">
<button type="button" class="btn btn-outline-secondary" onclick="resetNewResourceSearch()">
<button type="button" class="btn btn-sm-auto btn-outline-secondary" onclick="resetNewResourceSearch()">
<span class="fas fa-times-circle"></span>
</button>
</div>
@@ -110,31 +110,4 @@
</nav>
</div>
</div>
</div>
@* ToDo: Mit den Kategorien wie im alten Kalendermodul bauen!
@for(var i = 0; i < Model.PossibleResources.Count; i++)
{
var resource = Model.PossibleResources[i];
var isChecked = resource.ResourceOid.HasValue && Model.SelectedResourceOids.Contains(resource.ResourceOid.Value) ? "checked" : string.Empty;
var dNone = i / Model.ResourcePageLimit + 1 != 1 ? " d-none" : string.Empty;
<div class="dropdown-item w-100 @dNone" id="dropdown-item-@i">
<form class="form-inline justify-content-between">
<div class="form-group form-check">
<input class="form-check-input" type="checkbox" id="apt-edit-res-@resource.ResourceOid.Value" @isChecked onclick="updateEmployeeCustomerResourceSelection('res')"/>
<label for="apt-edit-res-@resource.ResourceOid.Value" class="form-check-label">
@resource.DetailDescription
</label>
</div>
@if(WebUtils.CheckColorString(resource.Color))
{
<div class="float-right" style="width: 10px; height: 10px; background-color: @resource.Color; border: 1px solid @resource.Color; border-radius: 3px;"></div>
}
</form>
</div>
}*@
</div>

View File

@@ -6,6 +6,15 @@
}
<script type="text/javascript">
$(document).ready(() => {
const newAptBtn = $("#scheduler_fab").children().find(".dx-fab-context-text");
if(newAptBtn.length) {
newAptBtn.empty();
newAptBtn.append("<span>Neuer Termin</span>");
}
});
function UpdateSchedulerHeight() {
scheduler.SetHeight(1);
@@ -18,22 +27,109 @@
scheduler.SetHeight(containerHeight);
}
function recurrenceSelectChange() {
const selected = $("#recurrence-type").find(":selected").val();
$("#daily-recurrence-form,#weekly-recurrence-form,#monthly-recurrence-form,#yearly-recurrence-form").hide();
if(selected !== "1") {
$("#recurrence-form-container").show();
}
switch(selected) {
case "1":
$("#recurrence-form-container").hide();
break;
case "2":
$("#daily-recurrence-form").show();
break;
case "3":
$("#weekly-recurrence-form").show();
break;
case "4":
$("#monthly-recurrence-form").show();
break;
case "5":
$("#yearly-recurrence-form").show();
break;
}
}
function getLabelByTextFromRecurrenceForm(labelText) {
return $("#appointmentRecurrenceForm_AptRecCtl_mainDiv").filter(function() {
return $(this).text().trim() === labelText;
});
}
function resizeSchedulerEditForm() {
const editFormPopup = $("#abc-table").parent().parent().parent();
const vw = $(window).width();
if(editFormPopup.css("top") !== undefined) {
editFormPopup.css("top", "50px");
// ToDo: Neuer Serienteil
// ToDo: Am 30.07.2026: Mach weiter mit der Stufe 3 vom MVCxScheduler-Recurrence-Formular von gestern
if($("#recurrence-container").length) {
recurrenceSelectChange();
}
// ToDo: /Neuer Serienteil
const recurrence = $("#appointmentRecurrenceForm_ChkRecurrence label:contains('Recurrence')");
const daily = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Daily')");
const weekly = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Weekly')");
const monthly = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Monthly')");
const yearly = $("#appointmentRecurrenceForm_AptRecCtl_mainDiv label:contains('Yearly')");
recurrence.text("Serie");
daily.text("Täglich");
weekly.text("Wöchentlich");
monthly.text("Monatlich");
yearly.text("Jährlich");
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv label:contains('Every weekday')").text("Jeden Wochentag");
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv label:contains('Every')").text("Alle");
$("#appointmentRecurrenceForm_AptRecCtl_Daily_mainDiv span:contains('day(s)')").text("Tage");
$("#appointmentRecurrenceForm_AptRecCtl_Weekly_mainDiv label:contains('Recur every')").text("Alle");
$("#appointmentRecurrenceForm_AptRecCtl_Weekly_mainDiv span:contains('week(s) on:')").text("Wochen am:");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv label:contains('Day')").text("Tag");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_ctl02").text("im");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv span:contains('month(s)')").text("Monat");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv label:contains('The')").text("Am");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_ctl04").text("jeden");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_mainDiv span:contains('month(s)')").text("Monats");
$("#appointmentRecurrenceForm_AptRecCtl_Monthly_WmeWeekOfMnth_DDD_L_LBI1T0").text("zweiten");
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('Every')").text("Jeden");
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('The')").text("Am");
$("#appointmentRecurrenceForm_AptRecCtl_Yearly_mainDiv label:contains('of')").text("im");
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('No end date')").text("Ohne Enddatum");
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('End after:')").text("Endet nach:");
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv span:contains('occurrences')").text("Wiederholungen");
$("#appointmentRecurrenceForm_AptRecCtl_RangeCtl_mainDiv label:contains('End by:')").text("Endet am:");
}
if(editFormPopup.outerWidth() !== undefined) {
$.get("@Url.Action("GetEmployeePageCount")", function(editFormInfo) {
pageCountCallback(editFormInfo, "emp");
pageCountCallback(editFormInfo, "emp");
});
$.get("@Url.Action("GetCustomerPageCount")", function(editFormInfo) {
pageCountCallback(editFormInfo, "cus");
pageCountCallback(editFormInfo, "cus");
});
$.get("@Url.Action("GetResourcePageCount")", function(editFormInfo) {
pageCountCallback(editFormInfo, "res");
pageCountCallback(editFormInfo, "res");
});
}
@@ -66,11 +162,11 @@
}
}
function pageCountCallback(editFormInfo, prefix) {
function pageCountCallback(editFormInfo, prefix) {
const info = JSON.parse(editFormInfo);
const items = $(`#dropdown-${prefix}-itm-container .dropdown-item`);
const items = $(`#dropdown-${prefix}-itm-container .dropdown-item`);
switch(prefix) {
switch(prefix) {
case "emp":
aptEmpSelPageCount = info.PageCount;
aptEmpSelPageLimit = info.PageLimit;
@@ -88,7 +184,7 @@
break;
}
window.buildPagination(1, 5, 1, prefix);
window.buildPagination(1, 5, 1, prefix);
}
function OnAppointmentFormSave(s, e) {
@@ -97,13 +193,13 @@
}
}
function OnAppointmentFormCancel(s, e) {
scheduler.AppointmentFormCancel();
}
function OnAppointmentFormCancel(s, e) {
scheduler.AppointmentFormCancel();
}
function OnAppointmentFormDelete(s, e) {
scheduler.AppointmentFormDelete();
}
function OnAppointmentFormDelete(s, e) {
scheduler.AppointmentFormDelete();
}
function IsValidAppointment() {
$.validator.unobtrusive.parse("form");
@@ -125,6 +221,52 @@
function onMenuItemClicked(s, e) {
try {
if(e.itemName === "ResetRecurringApt") {
e.handled = true;
const oid = scheduler.GetSelectedAppointmentIds()[0];
const appointment = scheduler.GetAppointmentById(oid);
const recurrenceId = appointment.RecurrenceId;
if(recurrenceId !== undefined && recurrenceId !== null && recurrenceId.length > 0) {
showWarningMessageBox("Zurücksetzen der Serie bestätigen", "Sind Sie sicher, dass Sie die ausgewählte Terminserie zurücksetzen möchten?", () => {
scheduler.PerformCallback({ apptID: recurrenceId, actionId: "ResetSeries", args: null }, () => { hideSpinner(); });
}, false);
}
}
if(e.itemName === "DeleteApt") {
e.handled = true;
const oid = scheduler.GetSelectedAppointmentIds()[0];
const appointment = scheduler.GetAppointmentById(oid);
if(appointment.appointmentType === "Occurrence") {
$("#apt-del-ok-btn").on("click",
function() {
const radioOptionId = $("input[name='apt-del-radio-group']:checked").attr("id");
if(radioOptionId === "apt-del-radio-1") {
const patternId = appointment.appointmentId.split("_")[0];
scheduler.PerformCallback({apptID: patternId, actionId: "DeleteSeries", args: null}, () => { hideSpinner(); });
} else if(radioOptionId === "apt-del-radio-2") {
scheduler.DeleteAppointment(appointment);
}
$("#apt-del-ok-btn").off("click");
$("#recurrence-delete-popup").modal("hide");
});
$("#recurrence-delete-popup").modal("show");
} else {
showWarningMessageBox("Löschen bestätigen", "Sind Sie sicher, dass Sie den Termin löschen möchten?", () => {
scheduler.PerformCallback({apptID: oid, actionID: e.itemName});
}, false);
}
}
if(e.itemName === "ToServiceRecord") {
e.handled = true;
scheduler.PerformCallback({ apptID: scheduler.GetSelectedAppointmentIds()[0], actionId: e.itemName });
@@ -152,11 +294,16 @@
function OnAppointmentMenuPopup(s, e) {
const id = scheduler.GetSelectedAppointmentIds()[0];
const selectedAppointment = scheduler.GetAppointmentById(id);
for(let i = 0; i < e.item.items.length; i++) {
const currentItem = e.item.items[i];
switch(currentItem.name) {
case "ResetRecurringApt":
if(selectedAppointment.IsAbsenceTime || selectedAppointment.IsTask || selectedAppointment.HasOccurrencies === false) {
currentItem.SetVisible(false);
}
break;
case "ToServiceRecord":
if(id === undefined || selectedAppointment.IsAbsenceTime || selectedAppointment.IsTask) {
currentItem.SetVisible(false);
@@ -249,25 +396,25 @@
}
function performReload(shouldDoReloadNotifications) {
if(shouldDoReloadNotifications === false) {
return;
}
if(shouldDoReloadNotifications === false) {
return;
}
$("#scheduler-notification-container").load("@Url.Action("GetNotifications")");
}
function reloadScheduler(shouldDoReloadNotifications) {
scheduler.PerformCallback({apptID: "", actionId: "Reload", args: null}, () => {performReload(shouldDoReloadNotifications); hideSpinner(); });
scheduler.PerformCallback({apptID: "", actionId: "Reload", args: null}, () => {performReload(shouldDoReloadNotifications); hideSpinner(); });
}
@* CustomECRSelectionPartial *@
function onNewSearchInput(prefix) {
var searchText = $(`#${prefix}-drop-search-input`).val();
var searchText = $(`#${prefix}-drop-search-input`).val();
const menuItems = $(`#dropdown-${prefix}-itm-container .dropdown-item`);
const menuItems = $(`#dropdown-${prefix}-itm-container .dropdown-item`);
if(searchText === null || searchText === undefined || searchText.length === 0) {
menuItems.show();
menuItems.show();
return;
}
@@ -285,7 +432,7 @@
}
function resetNewSearch(prefix) {
$(`#${prefix}-drop-search-input`).val("");
$(`#${prefix}-drop-search-input`).val("");
buildPagination(1, 5, 1, prefix);
showPage(1, prefix);
@@ -314,7 +461,7 @@
var aptResSelPageLimit = 0;
function buildPagination(firstShownButton, lastShownButton, activeButton, prefix) {
const pagination = $(`#apt-${prefix}-pagination`);
const pagination = $(`#apt-${prefix}-pagination`);
pagination.empty();
var pageCount = 1;
@@ -335,38 +482,34 @@
break;
}
if(prefix === "res") {
logInfo2(`Es gibt ${pageCount} Seiten für die Ressourcen`);
}
if(pageCount <= 1) {
$(`#apt-${prefix}-pag-divider, #apt-${prefix}-pag-dropdow-item`).hide();
$(`#apt-${prefix}-pag-divider, #apt-${prefix}-pag-dropdow-item`).hide();
return;
}
$(`#apt-${prefix}-pag-divider, #apt-${prefix}-pag-dropdow-item`).show();
$(`#apt-${prefix}-pag-divider, #apt-${prefix}-pag-dropdow-item`).show();
var limit = lastShownButton;
if(pageCount < limit) {
limit = pageCount;
if(pageCount < limit) {
limit = pageCount;
}
const firstPageLiClass = firstShownButton === 1 ? "page-item disabled" : "page-igem";
const lastPageLiClass = lastShownButton === pageCount ? "page-item disabled" : "page-igem";
const lastPageLiClass = lastShownButton === pageCount ? "page-item disabled" : "page-igem";
const prevPageLiClass = activeButton === 1 ? "page-item disabled" : "page-item";
const nextPageLiClass = activeButton === pageCount ? "page-item disabled" : "page-igem";
const nextPageLiClass = activeButton === pageCount ? "page-item disabled" : "page-igem";
$(`<li class="${firstPageLiClass}" id="first-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${1}, '${prefix}')"><span class="fas fa-angle-double-left"></span></button></li>`).appendTo(pagination);
$(`<li class="${prevPageLiClass}" id="prev-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${currentPage - 1}, '${prefix}')"><span class="fas fa-angle-left"></span></button></li>`).appendTo(pagination);
$(`<li class="${prevPageLiClass}" id="prev-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${currentPage - 1}, '${prefix}')"><span class="fas fa-angle-left"></span></button></li>`).appendTo(pagination);
for(let i = firstShownButton; i <= limit; i++) {
$(`<li class="page-item ${(i === activeButton ? "active" : "")}"><button class="page-link" tabindex="-1" type="button" onclick="showPage(${i}, '${prefix}')">${i}</button></li>`).appendTo(pagination);
$(`<li class="page-item ${(i === activeButton ? "active" : "")}"><button class="page-link" tabindex="-1" type="button" onclick="showPage(${i}, '${prefix}')">${i}</button></li>`).appendTo(pagination);
}
$(`<li class="${nextPageLiClass}" id="next-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${currentPage + 1}, '${prefix}')"><span class="fas fa-angle-right"></span></button></li>`).appendTo(pagination);
$(`<li class="${lastPageLiClass}" id="last-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${pageCount}, '${prefix}')"><span class="fas fa-angle-double-right"></span></button></li>`).appendTo(pagination);
$(`<li class="${nextPageLiClass}" id="next-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${currentPage + 1}, '${prefix}')"><span class="fas fa-angle-right"></span></button></li>`).appendTo(pagination);
$(`<li class="${lastPageLiClass}" id="last-page-li"><button type="button" class="page-link" tabeindex="-1" onclick="showPage(${pageCount}, '${prefix}')"><span class="fas fa-angle-double-right"></span></button></li>`).appendTo(pagination);
}
function showPage(page, prefix) {
@@ -388,8 +531,8 @@
break;
}
const total = (items.length / 10) | 0;
const currentPage = Math.max(1, Math.min(page, total));
const total = (items.length / 10) | 0;
const currentPage = Math.max(1, Math.min(page, total));
switch(prefix) {
case "emp":
@@ -403,28 +546,28 @@
break;
}
const start = (currentPage - 1) * 10;
const end = currentPage * 10;
const start = (currentPage - 1) * 10;
const end = currentPage * 10;
items.hide();
items.hide();
$.each(items.slice(start, end), function(index, item) {
$.each(items.slice(start, end), function(index, item) {
$(item).removeClass("d-none");
$(item).show();
});
const last = Math.min(pageCount, currentPage + 2);
const last = Math.min(pageCount, currentPage + 2);
const first = Math.max(1, last - 4);
buildPagination(first, last, currentPage, prefix);
buildPagination(first, last, currentPage, prefix);
}
function updateEmployeeCustomerResourceSelection(prefix) {
const checkedBoxes = $(`#dropdown-${prefix}-itm-container input[type=checkbox]:checked`);
const checkedBoxes = $(`#dropdown-${prefix}-itm-container input[type=checkbox]:checked`);
var url = "";
var url = "";
switch(prefix) {
switch(prefix) {
case "emp":
url = "@Url.Action("UpdateAppointmentEmployeeSelection")";
break;
@@ -434,7 +577,7 @@
case "res":
url = "@Url.Action("UpdateAppointmentResourceSelection")";
break;
}
}
var selectedOids = [];
@@ -449,7 +592,7 @@
showSpinner();
$.get(
url,
{ selectedOids: selectedOids.join(", ") },
{ selectedOids: selectedOids.join(", ") },
function(elementCount) {
$(`#apt-${prefix}-badge`).text(elementCount);
@@ -459,28 +602,28 @@
function selectAllEmployeeCustomerResource(prefix) {
const isChecked = $(`#apt-${prefix}-select-all`).prop("checked");
const isChecked = $(`#apt-${prefix}-select-all`).prop("checked");
$(`#dropdown-${prefix}-itm-container input[type=checkbox]`).prop("checked", isChecked);
$(`#dropdown-${prefix}-itm-container input[type=checkbox]`).prop("checked", isChecked);
updateEmployeeCustomerResourceSelection(prefix);
}
function categoryCardHeaderClick(collapsibleId) {
const collapsible = $(`#${collapsibleId}`);
function categoryCardHeaderClick(collapsibleId) {
const collapsible = $(`#${collapsibleId}`);
if(collapsible.length === false) {
return;
if(collapsible.length === false) {
return;
}
collapsible.collapse("toggle");
collapsible.collapse("toggle");
const e = window.event;
e.cancelBubble = true;
const e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
if(e.stopPropagation) {
e.stopPropagation();
}
}
function onNewResourceSeachInput() {
@@ -490,7 +633,7 @@
const collapse = $(`#dropdown-res-itm-container .dropdown-item .collapse`);
if(searchText === null || searchText === undefined || searchText.length === 0) {
showAllResources();
showAllResources();
return;
}
@@ -498,7 +641,7 @@
$.each(category2Resources,
function(index, item) {
const categoryName = $(item).find("h6").text().toLowerCase();
const categoryName = $(item).find("h6").text().toLowerCase();
if(categoryName.includes(searchText)) {
$(item).show();
@@ -521,20 +664,20 @@
);
}
function resetNewResourceSearch() {
$(`#res-drop-search-input`).val("");
function resetNewResourceSearch() {
$(`#res-drop-search-input`).val("");
showAllResources();
showAllResources();
buildPagination(1, 5, 1, "res");
showPage(1, "res");
buildPagination(1, 5, 1, "res");
showPage(1, "res");
const e = window.event;
e.cancelBubble = true;
const e = window.event;
e.cancelBubble = true;
if(e.stopPropagation) {
e.stopPropagation();
}
if(e.stopPropagation) {
e.stopPropagation();
}
}
function showAllResources() {
@@ -551,7 +694,7 @@
});
});
collapse.collapse("show");
collapse.collapse("show");
}
@* /CustomECRSelectionPartial *@
@@ -562,9 +705,9 @@
@* ToolTip *@
var toolTipContext;
function onToolTipDisplaying(s, e) {
toolTipContext = e;
var toolTipContext;
function onToolTipDisplaying(s, e) {
toolTipContext = e;
switch(e.toolTip.type) {
case MVCxSchedulerToolTipType.Appointment:
@@ -573,7 +716,7 @@
onAppointmentDragTipDisplaying(s, e);
break;
}
}
}
</script>
<div class="dropdown">
@@ -589,12 +732,13 @@
}
<div class="d-flex justify-content-center align-items-center">
@*@if(Html.IsInDebugMode())
@*@if(Html.IsInDebugMode())
{
<button type="button" class="btn btn-bewo-dev m-1" onclick='scheduler.PerformCallback({ apptID: "", actionId: "debug_DummyAppointments", args: null }, () => { performReload(true);hideSpinner(); });'>
Testtermine
</button>
}*@
<h4 id="scheduler-log"></h4>
<button class="btn btn-sm btn-primary dropdown-toggle m-1" type="button" data-toggle="dropdown">
Filtern
</button>
@@ -722,4 +866,32 @@
@Html.Partial("AptFltCustomersPartial", Model)
@Html.Partial("AptFltResourcesPartial", Model)
@Html.Partial("AptFltResourcesPartial", Model)
<div class="modal" tabindex="-1" role="dialog" id="recurrence-delete-popup">
<div class="modal-dialog modal-sm" role="document">
<div class="modal-content">
<div class="modal-header py-1 px-2">
Löschen bestätigen
<button type="button" class="close" data-dismiss="modal">
<span>&times;</span>
</button>
</div>
<div class="modal-body p-2">
Möchten Sie die ganze Serie oder nur diesen Termin löschen?
<div class="form-check">
<input type="radio" class="form-check-input" name="apt-del-radio-group" id="apt-del-radio-1">
<label for="apt-del-radio-1" class="form-check-label">Die Serie</label>
</div>
<div class="form-check">
<input type="radio" class="form-check-input" name="apt-del-radio-group" id="apt-del-radio-2" checked>
<label for="apt-del-radio-2" class="form-check-label">Diesen Termin</label>
</div>
</div>
<div class="modal-footer py-1 px-2">
<button type="button" class="btn btn-primary" id="apt-del-ok-btn">OK</button>
<button type="button" class="btn btn-primary" data-dismiss="modal">Abbrechen</button>
</div>
</div>
</div>
</div>

View File

@@ -58,6 +58,8 @@ namespace BeWoPlanerMobil.Views.DevExpressScheduler
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("CanBeViewed", "CanBeViewed"));
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("CanBeDeleted", "CanBeDeleted"));
appointmentStorage.CustomFieldMappings.Add(new ASPxAppointmentCustomFieldMapping("NewSchedulerAppointmentVersion", "NewSchedulerAppointmentVersion"));
return appointmentStorage;
}

View File

@@ -1,4 +1,5 @@
@using BeWoPlanerMobil.Models
@using System.Diagnostics
@using BeWoPlanerMobil.Models
@using BeWoPlanerMobil.Util.SchedulerUtils
@using BeWoPlanerMobil.Views.DevExpressScheduler
@using BS.Shared.DataContracts
@@ -10,7 +11,7 @@
@functions
{
//ToDo: So das EditForm verändern!
//ToDo: So das EditForm verändern:
//https://docs.devexpress.com/AspNetMvc/119776/components/scheduler/get-started/how-to-customize-the-appointment-dialog-using-view-model-api-working-with-custom-fields?utm_source=SupportCenter&utm_medium=website&utm_campaign=docs-feedback&utm_content=T743814
static AppointmentRecurrenceFormSettings CreateAppointmentRecurrenceFormSettings(CustomAppointmentTemplateContainer container)
@@ -45,13 +46,15 @@
"StatusSubMenu",
"LabelSubMenu",
"NewAllDayEvent",
"NewRecurringEvent"
"NewRecurringEvent",
"DeleteAppointment"
};
if(menuId == SchedulerMenuItemId.AppointmentMenu)
{
e.Menu.Items.Add(new MenuItem("Löschen", "DeleteApt"));
e.Menu.Items.Add(new MenuItem("In die Zeiterfassung übertragen", "ToServiceRecord"));
e.Menu.Items.Add(new MenuItem("Serie zurücksetzen", "ResetRecurringApt"));
e.Menu.Items.Add(new MenuItem("Zusagen", "ConfirmApt"));
e.Menu.Items.Add(new MenuItem("Mit Vorbehalt zusagen", "MaybeApt"));
e.Menu.Items.Add(new MenuItem("Absagen", "CancelApt"));
@@ -193,16 +196,10 @@
settings.CustomActionRouteValues = new { Controller = "DevExpressScheduler", Action = "CustomCallBackAction" };
settings.ClientSideEvents.ToolTipDisplaying = "onToolTipDisplaying";
settings.OptionsToolTips.SetAppointmentToolTipTemplateContent(() =>
{
Html.RenderPartial("CustomAppointmentToolTipPartial");
});
settings.OptionsToolTips.SetAppointmentToolTipTemplateContent(() => { Html.RenderPartial("CustomAppointmentToolTipPartial"); });
settings.OptionsToolTips.SetAppointmentMobileToolTipTemplateContent(() => { Html.RenderPartial("CustomAppointmentToolTipPartial"); });
settings.OptionsToolTips.SetAppointmentDragToolTipTemplateContent(() =>
{
Html.RenderPartial("CustomAppointmentDragToolTip");
});
settings.OptionsToolTips.SetAppointmentDragToolTipTemplateContent(() => { Html.RenderPartial("CustomAppointmentDragToolTip"); });
settings.OptionsCustomization.AllowInplaceEditor = UsedAppointmentType.None;
settings.OptionsCustomization.AllowDisplayAppointmentFlyout = false;
@@ -211,7 +208,7 @@
settings.OptionsToolTips.ShowSelectionToolTip = false;
settings.ClientSideEvents.ActiveViewChanging = "onActiveViewChanged";
settings.ClientSideEvents.MenuItemClicked = "onMenuItemClicked";
settings.OptionsForms.RecurrenceFormName = "appointmentRecurrenceForm";
settings.OptionsCustomization.AllowAppointmentEdit = UsedAppointmentType.Custom;
settings.OptionsCustomization.AllowAppointmentCopy = UsedAppointmentType.Custom;
settings.OptionsCustomization.AllowAppointmentCreate = UsedAppointmentType.Custom;
@@ -227,6 +224,13 @@
settings.InitClientAppointment = (send, evargs) =>
{
var recurrenceId = evargs.Appointment.RecurrenceInfo?.Id?.ToString();
var index = evargs.Appointment.RecurrenceIndex;
evargs.Properties.Add("RecurrenceId", recurrenceId);
evargs.Properties.Add("HasOccurrencies", recurrenceId is string ? Model.RecurrenceIdsWithOccurrences.Contains(recurrenceId) : false);
var isTask = evargs.Appointment.CustomFields["IsTask"] is true;
var isAbsenceTime = evargs.Appointment.CustomFields["IsAbsenceTime"] is true;
var canBeEdited = evargs.Appointment.CustomFields["CanBeEdited"] is true;
@@ -259,40 +263,40 @@
foreach(var employee2Appointment in employeeList)
{
if(employee2Appointment.SchedulerAppointmentOid is null || employee2Appointment.Employee2SchedulerAppointmentOid is null)
{
continue;
}
if(employee2Appointment.SchedulerAppointmentOid is null || employee2Appointment.Employee2SchedulerAppointmentOid is null)
{
continue;
}
var parcitipationInfoObject =
new ParticipationInfoObject(
employee2Appointment.Employee.DetailDescription,
employee2Appointment.Employee2SchedulerAppointmentOid.Value,
(int) employee2Appointment.ParticipationAnswer,
employee2Appointment.SchedulerAppointmentOid.Value);
var parcitipationInfoObject =
new ParticipationInfoObject(
employee2Appointment.Employee.DetailDescription,
employee2Appointment.Employee2SchedulerAppointmentOid.Value,
(int) employee2Appointment.ParticipationAnswer,
employee2Appointment.SchedulerAppointmentOid.Value);
participationInfos.Add(parcitipationInfoObject);
participationInfos.Add(parcitipationInfoObject);
}
foreach(var resource in resourceList)
{
var resourceInfoObject =
new ResourceInfoObject(
oid,
resource.Name,
resource.Color
);
var resourceInfoObject =
new ResourceInfoObject(
oid,
resource.Name,
resource.Color
);
resourceInfos.Add(resourceInfoObject);
}
foreach(var customer in customerList)
{
var customerInfoObject =
new CustomerInfoObject(
oid,
customer.DetailDescription
);
var customerInfoObject =
new CustomerInfoObject(
oid,
customer.DetailDescription
);
customerInfos.Add(customerInfoObject);
}
@@ -301,6 +305,7 @@
evargs.Properties.Add("ResourceInfos", resourceInfos);
evargs.Properties.Add("CustomerInfos", customerInfos);
// originator ist bei einer Aufgabe null
var canConfirm = (false == isTask || false == isAbsenceTime) && end > DateTime.Now &&
false == (originator?.EmployeeOid.Equals(Model.LoggedInUserOid) ?? false) &&
@@ -314,6 +319,7 @@
settings.Storage.Appointments.Assign(SchedulerHelper.DefaultAppointmentStorage);
settings.Storage.EnableReminders = false;
settings.OptionsBehavior.ClientTimeZoneId = "W. Europe Standard Time";
settings.Width = Unit.Percentage(100);
settings.Height = Unit.Percentage(100);
@@ -321,8 +327,6 @@
settings.Start = BS.Shared.Extensions.DateTimeExtensions.GetDayOfWeek(DayOfWeek.Monday);
settings.OptionsForms.RecurrenceFormName = "appointmentRecurrenceForm";
settings.ClientSideEvents.EndCallback = "resizeSchedulerEditForm";
settings.ClientSideEvents.Init = "resizeSchedulerEditForm";
@@ -354,6 +358,11 @@
settings.Views.TimelineView.SetHorizontalSameDayAppointmentTemplateContent(appointmentTemplateContainer => { Html.RenderPartial("HorizontalAppointmentTemplatePartial", appointmentTemplateContainer.AppointmentViewInfo); });
settings.Views.TimelineView.SetHorizontalAppointmentTemplateContent(appointmentTemplateContainer => { Html.RenderPartial("HorizontalAppointmentTemplatePartial", appointmentTemplateContainer.AppointmentViewInfo.Appointment); });
settings.OptionsForms.SetRecurrentAppointmentEditFormTemplateContent(c =>
{
Html.RenderPartial("CustomRecurrencePartial");
});
settings.OptionsForms.SetAppointmentFormTemplateContent(appointmentFormTemplateContainer =>
{
var container = (CustomAppointmentTemplateContainer) appointmentFormTemplateContainer;
@@ -374,7 +383,7 @@
EndTime = container.Appointment.End,
AllDay = container.Appointment.AllDay,
Description = container.Appointment.Description,
EventType = (int?)container.Appointment.Type,
EventType = (int?) container.Appointment.Type,
CompletedNotice = container.Appointment.CustomFields["CompletedNotice"]?.ToString(),
CompletedUser = container.Appointment.CustomFields["CompletedUser"]?.ToString(),
TaskDescription = container.Appointment.CustomFields["TaskDescription"]?.ToString(),
@@ -384,7 +393,10 @@
IsTask = container.Appointment.CustomFields["IsTask"] is true,
DueDate = container.Appointment.CustomFields["DueDate"] is DateTime dueDate ? dueDate : null,
CompletedDate = container.Appointment.CustomFields["CompletedDate"] is DateTime completedDate ? completedDate : null,
OriginatorOid = (container.Appointment.CustomFields["Originator"] as CompactEmployeeDC)?.EmployeeOid
OriginatorOid = (container.Appointment.CustomFields["Originator"] as CompactEmployeeDC)?.EmployeeOid,
RecurrenceInfo = container.Appointment.RecurrenceInfo?.ToXml(),
RecurrenceIndex = container.Appointment.RecurrenceIndex,
NewSchedulerAppointmentVersion = container.Appointment.CustomFields["NewSchedulerAppointmentVersion"] as long?
};
var appointmentModel = ViewData["EditableAppointmentModel"] != null ? (AppointmentModel)ViewData["EditableAppointmentModel"] : newModel;

View File

@@ -24,7 +24,7 @@
<div class="modal-dialog col-sm-8">
<div class="modal-content border-0">
@if(ViewData[LoginController.LoginErrorIndex] != null || ViewData[AbstractBaseController.IsSessionTimedOut] != null)
@if(ViewData[LoginController.LoginErrorIndex] != null || TempData[LoginController.LoginErrorIndex] != null || ViewData[AbstractBaseController.IsSessionTimedOut] != null)
{
<div class="alert alert-danger mx-3" role="alert">
@ViewData[LoginController.LoginErrorIndex]

View File

@@ -275,7 +275,7 @@
var $target;
var targetIndex;
// Prüfen ob die Tab-Ansicht sichtbar ist (mehrere Dokutypes vorhanden)
// Prüfen, ob die Tab-Ansicht sichtbar ist (mehrere Dokutypes vorhanden)
var $activeTabTextarea = $('#dokufelderTab .tab-pane.active textarea');
if ($activeTabTextarea.length > 0) {
// Das aktive Tab-Textarea verwenden; Index aus der ID auslesen (sb-doku-textarea-{i})

View File

@@ -5,150 +5,237 @@
@model BeWoPlanerMobil.Models.ReportViewerModel
@{
if(TempData[TempDataConstants.DoLogoutKey] is bool doLogout && doLogout)
if(TempData[TempDataConstants.DoLogoutKey] is true)
{
<text>
<script type="text/javascript">
$("#second-logout-form").submit();
$("#second-logout-form").submit();
</script>
</text>
}
}
<script type="text/javascript">
$(document).ready(function() {
window.calcPrependWidth();
});
$(document).ready(function() {
window.calcPrependWidth();
});
function selectCostBearer2SupportConceptRel(relOid, parameterType, parameterOid) {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: relOid, parameterType: parameterType, parameterOid: parameterOid});
}
function selectCostBearer2SupportConceptRel(relOid, parameterType, parameterOid) {
showSpinner();
function selectMonth(parameterType, parameterOid) {
const selectedMonth = $("#month-select").find(":selected").val().toString();
const selectedYear = $("#month-year-select").find(":selected").val().toString();
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: relOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${selectedMonth}_${selectedYear}`});
}
function selectMonth(parameterType, parameterOid) {
showSpinner();
function selectYear(parameterType, parameterOid) {
const selectedYear = $("#month-year-select").find(":selected").val();
const selectedMonth = $("#month-select").find(":selected").val().toString();
const selectedYear = $("#month-year-select").find(":selected").val().toString();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: selectedYear.toString()});
}
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${selectedMonth}_${selectedYear}` },
function() {
hideSpinner();
});
}
function onDropdownParameterInput(element) {
var searchText = $(element).val();
function selectYear(parameterType, parameterOid) {
showSpinner();
const id = $(element).attr("id");
const selectedYear = $("#month-year-select").find(":selected").val();
let prefix = "";
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: selectedYear.toString() },
function() {
hideSpinner();
});
}
if (id !== undefined && id !== null && id.includes("-")) {
const splitId = id.split("-");
function onDropdownParameterInput(element) {
var searchText = $(element).val();
if(splitId.length > 1) {
prefix = splitId[1];
}
}
const id = $(element).attr("id");
if(searchText === null || searchText === undefined || searchText.length === 0) {
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
return;
}
let prefix = "";
const menuItems = $(`#query-${prefix}-dropdown-menu .dropdown-item`);
if (id !== undefined && id !== null && id.includes("-")) {
const splitId = id.split("-");
menuItems.hide();
if(splitId.length > 1) {
prefix = splitId[1];
}
}
$.each(menuItems,
function(index, item) {
const itemText = $(item).text().toLowerCase();
if(searchText === null || searchText === undefined || searchText.length === 0) {
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
return;
}
if(itemText.includes(searchText.toLowerCase())) {
$(item).show();
}
}
);
}
const menuItems = $(`#query-${prefix}-dropdown-menu .dropdown-item`);
function resetDropdownParameterSearch(prefix) {
$(`#query-${prefix}-search-input`).val("");
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
menuItems.hide();
const e = window.event;
e.cancelBubble = true;
$.each(menuItems,
function(index, item) {
const itemText = $(item).text().toLowerCase();
if(e.stopPropagation) {
e.stopPropagation();
}
}
if(itemText.includes(searchText.toLowerCase())) {
$(item).show();
}
}
);
}
function selectEmployeeParameter(element, employeeOid, parameterType, parameterOid) {
$("#query-employee-popup").modal("hide");
function resetDropdownParameterSearch(prefix) {
$(`#query-${prefix}-search-input`).val("");
$(`#query-${prefix}-dropdown-menu .dropdown-item`).show();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: employeeOid, parameterType: parameterType, parameterOid: parameterOid});
}
const e = window.event;
e.cancelBubble = true;
function selectCustomerParameter(element, customerOid, parameterType, parameterOid) {
$("#query-customer-popup").modal("hide");
if(e.stopPropagation) {
e.stopPropagation();
}
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: customerOid, parameterType: parameterType, parameterOid: parameterOid});
}
function selectEmployeeParameter(element, employeeOid, parameterType, parameterOid) {
showSpinner();
function selectOrganizationParameter(element, organizationOid, parameterType, parameterOid) {
$("#query-organization-popup").modal("hide");
$("#query-employee-popup").modal("hide");
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: organizationOid, parameterType: parameterType, parameterOid: parameterOid});
}
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: employeeOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
function selectServiceCategoryParameter(element, parameterType, parameterOid) {
const serviceCategoryOid = $(element).find(":selected").val();
function selectCustomerParameter(element, customerOid, parameterType, parameterOid) {
showSpinner();
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: serviceCategoryOid, parameterType: parameterType, parameterOid: parameterOid});
}
$("#query-customer-popup").modal("hide");
function selectTeamParameter(element, teamOid, parameterType, parameterOid) {
$("#query-team-popup").modal("hide");
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: customerOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: teamOid, parameterType: parameterType, parameterOid: parameterOid});
}
function selectOrganizationParameter(element, organizationOid, parameterType, parameterOid) {
showSpinner();
function selectValueListEntry(element, parameterType, parameterOid) {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: $(element).find(":selected").val(), parameterType: parameterType, parameterOid: parameterOid});
}
$("#query-organization-popup").modal("hide");
function selectQueryText(element, parameterType, parameterOid) {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val()});
}
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: organizationOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
function selectQueryDate(element, parameterType, parameterOid) {
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val().toString()});
}
function selectServiceCategoryParameter(element, parameterType, parameterOid) {
showSpinner();
function selectQueryDateRange(parameterType, parameterOid) {
const start = $("#query-date-range-start").val().toString();
const end = $("#query-date-range-end").val().toString();
const serviceCategoryOid = $(element).find(":selected").val();
if(!start || !end) {
return;
}
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: serviceCategoryOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
$("#berichte-form-container").load("@Url.Action("SelectQueryParameter")", {objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${start}_${end}`});
}
function selectTeamParameter(element, teamOid, parameterType, parameterOid) {
showSpinner();
$("#query-team-popup").modal("hide");
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: teamOid, parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
function selectValueListEntry(element, parameterType, parameterOid) {
showSpinner();
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: $(element).find(":selected").val(), parameterType: parameterType, parameterOid: parameterOid },
function() {
hideSpinner();
});
}
function selectQueryText(element, parameterType, parameterOid) {
showSpinner();
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val() },
function() {
hideSpinner();
}
);
}
function selectQueryDate(element, parameterType, parameterOid) {
showSpinner();
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: $(element).val().toString() },
function() {
hideSpinner();
});
}
function selectQueryDateRange(parameterType, parameterOid) {
const start = $("#query-date-range-start").val().toString();
const end = $("#query-date-range-end").val().toString();
if(!start || !end) {
return;
}
showSpinner();
$("#berichte-form-container").load(
"@Url.Action("SelectQueryParameter")",
{ objectOid: null, parameterType: parameterType, parameterOid: parameterOid, textValue: `${start}_${end}` },
function() {
hideSpinner();
});
}
function executeQueryButtonClick() {
showSpinner();
$("#msk-report-container").load("@Url.Action("ExecuteQuery")",
function () {
hideSpinner();
$("#bewo-report-popup").modal("show");
}
);
}
showSpinner();
$("#msk-report-container").load(
"@Url.Action("ExecuteQuery")",
function () {
hideSpinner();
$("#bewo-report-popup").modal("show");
}
);
}
</script>
@if(Model.SelectedQuery != null && Model.SelectedQuery.Parameter != null && Model.SelectedQuery.Parameter.Count > 0)
@if(Model?.SelectedQuery != null && Model?.SelectedQuery.Parameter != null && Model?.SelectedQuery.Parameter.Count > 0)
{
<div>
<hr />
@@ -283,9 +370,9 @@
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid))
if(Model.QueryMonths.ContainsKey(parameterOid))
{
if(Model.SelectedValues[parameterOid].Parameter is DateTime monthDate && month.Value.Equals(monthDate.Month.ToString()))
if(Model.QueryMonths[parameterOid].Month.ToString().Equals(month.Value))
{
selected = "selected";
}
@@ -295,7 +382,7 @@
var lastMonth = DateTime.Today.AddMonths(-1);
var selectedMonth = lastMonth.Month.ToString();
if(selectedMonth.Equals(month.Text))
if(selectedMonth.Equals(month.Value))
{
selected = "selected";
}
@@ -309,9 +396,9 @@
{
var selected = string.Empty;
if(Model.SelectedValues.ContainsKey(parameterOid) && Model.SelectedValues[parameterOid].Parameter is DateTime selectedYear)
if(Model.QueryYears.ContainsKey(parameterOid))
{
if(year.Equals(selectedYear.Year))
if(year.Equals(Model.QueryYears[parameterOid].Year))
{
selected = "selected";
}
@@ -456,11 +543,13 @@
<div class="col-md">
<div class="form-group">
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Jahr
</div>
</div>
<div class="input-group-prepend">
<div class="input-group-text prepend-input-group-text">
Jahr
</div>
</div>
<input type="hidden" id="year-parameter-type" value="@parameterType" />
<input type="hidden" id="year-parameter-oid" value="@parameterOid" />
<select class="custom-select" id="year-select" onchange="selectYear(@parameterType, @parameterOid)">
@foreach(var year in MobileUtils.Years)
{

View File

@@ -91,6 +91,7 @@
const selectedReportOid = oid2HasParams[0];
if(hasParameters) {
showSpinner();
$("#berichte-form-container").load("@Url.Action("LoadBerichteForm")", {reportOid: selectedReportOid}, function() {
hideSpinner();
window.toggleMitarbeiterstundenForm();

View File

@@ -32,7 +32,7 @@
oidString: selectedEmployeeOids.toString()
},
() => {
$("#one-day-scheduler-partial-container").load('@Url.Action("FetchAppointments", "Scheduler")');
@*$("#one-day-scheduler-partial-container").load('@Url.Action("FetchAppointments", "Scheduler")');*@
}
);
}

View File

@@ -85,7 +85,7 @@
</p>
</div>
</div>
@if(Model.HasRightToEdit || Model.HasRightToDelete)
@if(Model.HasRightToEdit || Model.CanDeleteAbsenceTime(absenceTime))
{
<div class="col-sm-auto">
<div class="btn-toolbar justify-content-between">
@@ -97,8 +97,8 @@
</button>
</div>
}
@if(Model.HasRightToDelete)
@if(Model.CanDeleteAbsenceTime(absenceTime))
{
<div class="btn-group" role="group">
<button class="btn btn-danger" type="button" onclick="deleteAbsenceTime(@absenceTime.AbsenceTimeOid, '@absenceTime.Start.Value.GetIntervalDescription(absenceTime.End)')">

View File

@@ -12,7 +12,7 @@
}
$(document).on("shown.bs.modal", "#bewo-report-popup", function() {
if(bewoReportViewer === undefined || bewoReportViewer === null || $("#bewoReportViewer").length === false) {
if(typeof bewoReportViewer === 'undefined') {
return;
}

View File

@@ -81,6 +81,10 @@
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/dx.common.css")" />
<link type="text/css" rel="stylesheet" href="@Url.Content("~/Content/dx.light.css")" />
<script>
DevExpress.localization.locale("de");
</script>
@* CSS für den neuen Kalender-Tooltip *@
<style type="text/css">
.toolTipPanel {
@@ -406,16 +410,6 @@
<ul class="navbar-nav ml-auto">
@if (Html.IsInDebugMode())
{
using (Html.BeginForm("RedirectToDevExpressScheduler", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="far fa-calendar-alt text-bewo-calendar"></i>
DX Kalender
</button>
</li>
}
<li class="nav-item">
<button class="btn btn-link text-light no-underline" type="button" onclick="printLocalStorage()">
<i class="fab fa-firefox-browser text-bewo-dev"></i>
@@ -433,6 +427,19 @@
</li>
}
}
@if(Model.IsAllowedToSeeScheduler)
{
using (Html.BeginForm("RedirectToDevExpressScheduler", "Main", FormMethod.Post))
{
<li class="nav-item">
<button class="btn btn-link text-light no-underline" onclick="showSpinner()">
<i class="far fa-calendar-alt text-bewo-calendar"></i>
DX Kalender
</button>
</li>
}
}
@if (Model.IsAllowedToSeePersons)
{

View File

@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net472" />
<package id="Bogus" version="35.6.3" targetFramework="net472" />
<package id="cldrjs" version="0.5.1" targetFramework="net472" />
<package id="DevExtreme.AspNet.Data" version="2.8.2" targetFramework="net472" />
<package id="EntityFramework" version="6.5.1" targetFramework="net472" />
<package id="jQuery" version="3.7.1" targetFramework="net472" />
<package id="jQuery.UI.Combined" version="1.14.1" targetFramework="net472" />
<package id="jQuery.Validation" version="1.21.0" targetFramework="net472" />
<package id="log4net" version="3.1.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Mvc" version="5.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Providers.Core" version="2.0.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Razor" version="3.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi" version="5.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi.Client" version="6.0.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebHelpers" version="3.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebPages" version="3.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebPages.Data" version="3.3.0" targetFramework="net472" />
<package id="Microsoft.AspNet.WebPages.WebData" version="3.3.0" targetFramework="net472" />
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net472" />
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net472" />
<package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="4.1.0" targetFramework="net472" />
<package id="Microsoft.jQuery.Unobtrusive.Ajax" version="3.2.6" targetFramework="net472" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="4.0.0" targetFramework="net472" />
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net472" />
<package id="Microsoft.NETCore.Portable.Compatibility" version="1.0.1" targetFramework="net472" />
<package id="Microsoft.Web.Infrastructure" version="2.0.0" targetFramework="net472" />
<package id="Moment.js" version="2.30.1" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" />
<package id="Newtonsoft.Json.Bson" version="1.0.3" targetFramework="net472" />
<package id="RestSharp" version="106.13.0" targetFramework="net472" />
<package id="System.Buffers" version="4.6.1" targetFramework="net472" />
<package id="System.Memory" version="4.6.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net472" />
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net472" />
<package id="WebGrease" version="1.6.0" targetFramework="net472" />
</packages>

View File

@@ -316,7 +316,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SPZLeverkusen", "ReportImp\
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Weitblick-ambulantBeWo", "ReportImp\Weitblick-ambulantBeWo\Weitblick-ambulantBeWo.csproj", "{2E99BA67-61A2-47BD-8412-6ECBC126D83E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KomMitBewo", "ReportImp\KomMitBewo\KomMitBewo.csproj", "{1A585E99-09AB-4924-8FB9-9C9D1FE48044}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KommMitBewo", "ReportImp\KomMitBewo\KommMitBewo.csproj", "{1A585E99-09AB-4924-8FB9-9C9D1FE48044}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "skmRheydt", "ReportImp\skmRheydt\skmRheydt.csproj", "{B9C896DD-8C7D-4F37-B826-203D2E83D650}"
EndProject
@@ -750,8 +750,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKFMMonheim", "ReportImp\SK
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZanderBeWo", "ReportImp\ZanderBeWo\ZanderBeWo.csproj", "{8725A58B-AB80-4906-9B13-2D4144FF09EA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestLWV", "ReportImp\TestLWV\TestLWV.csproj", "{BA124454-FE85-4909-8271-62544E13CAA8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dakota", "Dakota\Dakota.csproj", "{47331732-DD96-4075-869F-83AA9F3F9937}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Components", "Components", "{3B6BAB50-8447-4CC3-90B8-E4F6FBB55F0E}"
@@ -9169,30 +9167,6 @@ Global
{8725A58B-AB80-4906-9B13-2D4144FF09EA}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{8725A58B-AB80-4906-9B13-2D4144FF09EA}.Release|x86.ActiveCfg = Release|Any CPU
{8725A58B-AB80-4906-9B13-2D4144FF09EA}.Release|x86.Build.0 = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|.NET.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|.NET.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|x86.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Debug|x86.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|.NET.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|.NET.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|Any CPU.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|Any CPU.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|Mixed Platforms.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|Mixed Platforms.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|x86.ActiveCfg = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.DebugRemote|x86.Build.0 = Debug|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|.NET.ActiveCfg = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|.NET.Build.0 = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|Any CPU.Build.0 = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|Mixed Platforms.Build.0 = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|x86.ActiveCfg = Release|Any CPU
{BA124454-FE85-4909-8271-62544E13CAA8}.Release|x86.Build.0 = Release|Any CPU
{47331732-DD96-4075-869F-83AA9F3F9937}.Debug|.NET.ActiveCfg = Debug|Any CPU
{47331732-DD96-4075-869F-83AA9F3F9937}.Debug|.NET.Build.0 = Debug|Any CPU
{47331732-DD96-4075-869F-83AA9F3F9937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
@@ -9638,7 +9612,6 @@ Global
{A2EFCD9D-F8BC-44FB-8FA0-708F4785808B} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{45389304-8557-440E-8B9B-102F34958E8A} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{8725A58B-AB80-4906-9B13-2D4144FF09EA} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{BA124454-FE85-4909-8271-62544E13CAA8} = {D8A691C5-146D-4613-86CC-438F02FE9106}
{47331732-DD96-4075-869F-83AA9F3F9937} = {FEB0336B-F053-40B6-92DD-7DE56AB9408A}
{3B6BAB50-8447-4CC3-90B8-E4F6FBB55F0E} = {FEB0336B-F053-40B6-92DD-7DE56AB9408A}
{69D70CA9-0DF9-419E-BFAF-F4539F129BD9} = {3B6BAB50-8447-4CC3-90B8-E4F6FBB55F0E}

View File

@@ -11,6 +11,7 @@
<RootNamespace>BeWo.Controls</RootNamespace>
<AssemblyName>BeWo.Controls</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<RestoreProjectStyle>PackageReference</RestoreProjectStyle>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
@@ -149,7 +150,6 @@
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>

View File

@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClrHeapAllocationAnalyzer" version="3.0.0" targetFramework="net45" />
</packages>

View File

@@ -47,20 +47,7 @@
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Memory, Version=4.0.1.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\Lib\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Text.Json, Version=9.0.0.7, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Text.Json.9.0.7\lib\net462\System.Text.Json.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
@@ -181,7 +168,6 @@
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<Content Include="KTDatei\AO.txt">
@@ -210,4 +196,10 @@
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<PackageReference Include="System.Memory" />
<PackageReference Include="System.Numerics.Vectors" />
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" />
<PackageReference Include="System.Text.Json" />
</ItemGroup>
</Project>

Some files were not shown because too many files have changed in this diff Show More