77 Commits

Author SHA1 Message Date
0871802411 Ziele Massnahmen Trennung 2026-08-06 12:40:33 +02:00
a21128d62b Ziele mit in den Context 2026-08-05 14:36:25 +02:00
4a3d15dc33 Tooltip fix 2026-08-05 14:34:53 +02:00
81ce778b58 Umlaute, fix 2026-08-05 11:34:57 +02:00
9591e401f1 Umlaute werden falsch escaped 2026-08-04 13:39:48 +02:00
79fa5a0879 action 2026-08-04 13:38:27 +02:00
492c768bdd SystemPrompt werden vom Server geladen 2026-08-04 11:58:54 +02:00
317f7b6e91 customerid 2026-08-04 11:05:19 +02:00
d2f46ef5b4 Remove clone feature 2026-07-31 11:34:33 +02:00
c87d7043ef Info i 2026-07-30 13:55:20 +02:00
e143802b4c version 5.2.3.3 2026-07-29 13:37:24 +02:00
388315c071 Kopieren 2026-07-29 13:29:18 +02:00
a618ba97ad nur icon 2026-07-29 13:08:27 +02:00
4258c28ad4 rechtsbündig 2026-07-29 13:08:20 +02:00
076b51b803 Tooltip 2026-07-29 13:05:04 +02:00
9c68c66b49 System.Text.Json.JsonReaderException 2026-07-29 13:04:48 +02:00
09c7ffa8c0 Endpunkt 2026-07-29 13:04:25 +02:00
151a25798c . 2026-07-29 09:52:37 +02:00
427641fe9f Keine redirects 2026-07-29 09:50:08 +02:00
9b491c7669 Tippfehler 2026-07-28 13:34:53 +02:00
789b1bed85 5.2.3.2 2026-07-28 11:57:29 +02:00
b558ca8b50 Mehr Icons 2026-07-28 11:57:23 +02:00
d10296d20a format 2026-07-28 11:35:26 +02:00
2a3cfcade9 Icon Set 2026-07-28 11:35:20 +02:00
d296944f7f get last n elements of list 2026-07-28 11:21:58 +02:00
9323ff1592 EInklappbare Prompts 2026-07-28 11:16:58 +02:00
3fa9bcd624 Hintergrund zur Erkennbarkeit 2026-07-27 13:55:30 +02:00
e095756f3c Test + xshared false 2026-07-27 12:55:02 +02:00
7d416045e1 Änderung? 2026-07-27 12:54:42 +02:00
6e4b6f24b3 Neue Icons 2026-07-27 12:32:14 +02:00
c50ee6c886 Vorbereitung Version 5.2.3.1 2026-07-24 13:51:49 +02:00
5af7cb4dab Fehler bei Prompt/Routine -> Conversation wird gelöscht, wenn sie bereits angefragt wurde 2026-07-24 13:48:52 +02:00
aad3a72d66 samplecount null oder 0 -> nichts
-1 -> alle
-> sonst einfach n laden
2026-07-24 13:31:15 +02:00
8cba6ea925 Besserer Status 2026-07-24 13:21:52 +02:00
66e437df60 ???
https://stackoverflow.com/questions/6182644/missing-compiler-required-member-error-being-thrown-multiple-times-with-almost
2026-07-24 12:23:39 +02:00
eeacc08472 Zusätzliche Checkups eingebunden 2026-07-24 12:21:11 +02:00
a4e42b8388 Neue Abschätzung 2026-07-24 11:16:56 +02:00
f51eabb45f Prompt Titel cachen 2026-07-22 15:48:55 +02:00
007745e6a8 Datenmodell optimiert 2026-07-22 15:17:55 +02:00
48af27978d Spacing 2026-07-22 14:58:41 +02:00
6c90b902d6 Tooltip wird korrekt angezeigt 2026-07-22 14:57:57 +02:00
12bf5bcacb ? 2026-07-22 14:57:45 +02:00
855d3228c5 Berichte können geladen/gespeichert werden 2026-07-21 13:16:22 +02:00
604ed52100 Max Context Size - Prozentuale Auslastung 2026-07-21 13:03:28 +02:00
e5a5a00ebb RuleName 2026-07-21 09:20:40 +02:00
74e7ea3dce num keep 2026-07-20 14:55:53 +02:00
b1279c5511 update 1 2026-07-20 12:45:40 +02:00
b14d853da9 update 2026-07-20 10:44:56 +02:00
7574dbfd08 AiTokenAnalyzer: Token-Analyse (Zeichen/3, Zeichen/3,5, cl100k, prompt_eval_count)
- OllamaApiClient: Überladung mit prompt_eval_count/eval_count
- Tool auf net48 umgestellt, Referenzen auf AICore/ServerUtils/Shared
- UI: Text-Eingabe, Zeichenanzahlen (50k, 100k, ...), Ergebnistabelle

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-17 11:58:48 +02:00
88044ee60d Referenzen 2026-07-17 11:22:11 +02:00
858d320ce0 init test project 2026-07-17 11:17:47 +02:00
8996a50aa8 AiUtils umgezogen 2026-07-14 14:40:39 +02:00
324af51fa9 local 2026-07-13 15:01:39 +02:00
c2c5d3b19e Conversationen einklappbar 2026-07-13 12:24:58 +02:00
0771045bce Weniger Informationen direkt auf der Maske -> im Tooltip 2026-07-13 12:05:44 +02:00
85de22ca9a Neue Zeile bei mehreren Fehlern 2026-07-13 11:51:02 +02:00
f6fef62bdd Script-Check-Bug behoben: CheckDBScripts prüft jetzt alle registrierten Scripts, nicht nur das erste. Alle vier Check-Methoden sind auf das gleiche Muster umgestellt (Where auf Fehler filtern, Meldungen mit ; joinen), d.h. sie melden jetzt auch jeweils alle fehlenden Einträge ihrer Kategorie statt nur den ersten.
Alle Fehler sammeln: DoHealthCheckup bricht nicht mehr beim ersten Fehler ab, sondern sammelt die Meldungen aller Checkups und gibt sie zusammen in Message zurück.
Exception-Logging: Wirft ein Checkup eine Exception, wird sie jetzt vollständig per log4net geloggt (gleiches Idiom wie im WCFErrorHandler über LoggerUtils.GetLogger); nach außen geht weiterhin nur ex.Message.
Listen direkt initialisiert statt Lazy-Init — alle is null-Checks entfallen, die Add*-Methoden sind jetzt Einzeiler.
Naming auf PascalCase vereinheitlicht (AddWebConfigCheck, RegisterCheckup, CheckDBScripts, …) und ungenutzte Usings entfernt.
2026-07-13 11:39:36 +02:00
cbf3599521 ShowPrompt Eigenschaft Fix 2026-07-10 14:04:41 +02:00
5ebbe8d0a4 Speichern jetzt als Button 2026-07-10 13:54:57 +02:00
c02ef1437d Verstecke Context Menu bei keliner Nachricht 2026-07-10 13:48:41 +02:00
432ffc3f41 ShowMessage 2026-07-10 13:46:14 +02:00
1ae8aed934 StatusService übersichtlicher 2026-07-10 13:28:04 +02:00
7fa49d5adb tenant in url bei getaiprompt ownsofts 2026-07-10 10:45:39 +02:00
b8d5855d3c Fix? 2026-07-09 15:22:22 +02:00
ceef6b1a76 Neue Server Version + Lokal status.htm aufrufbar 2026-07-09 15:15:30 +02:00
bb3ce52d57 BeWoAppInfo REf vergessen 2026-07-09 14:50:10 +02:00
b74556d359 Statusseite hat nun Appversion 2026-07-09 14:49:29 +02:00
d6c1a56c04 BeWoApp Version in Shared ausgelagert
-> Wird auf dem Server benötigt
2026-07-09 14:49:13 +02:00
bee75224d4 Status Seite 2026-07-09 14:15:49 +02:00
b56bdb6321 version 5.2.1 + script verpeilt 2026-07-09 12:39:51 +02:00
116dca4137 Window Size Exceeded 2026-07-09 11:25:22 +02:00
1162213a54 Context Fehler 2026-07-09 11:25:07 +02:00
de39a95c0d Beim Berechnen wird ein Tooltip mit "Laden" angezeigt 2026-07-08 15:23:22 +02:00
01665d7380 Prompt/Routine Referenze wird zur Konversation gespeichert 2026-07-08 15:08:48 +02:00
99c8d2bd13 User Nachricht wird nicht gekürzt in UI (Lange Zeile) 2026-07-06 12:18:53 +02:00
9b01354227 5.2 2026-07-06 12:13:42 +02:00
3906efee90 Schneller Workflow Buttons 2026-07-06 11:38:10 +02:00
1043 changed files with 46569 additions and 51823 deletions

View File

@@ -1,5 +1,6 @@
<?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>
@@ -17,6 +18,8 @@
<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>
@@ -45,6 +48,13 @@
<ErrorReport>prompt</ErrorReport>
</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>
@@ -56,6 +66,7 @@
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Data\Data.csproj">
@@ -77,8 +88,12 @@
</ItemGroup>
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
</ItemGroup>
<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')" />
</Project>

View File

@@ -1,6 +1,7 @@
using AICore.Facade.LLM;
using BeWo.Data.Security;
using BeWo.Service.Core;
using BS.Shared.Core;
using BS.Shared.Tests.Objects;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace AiCoreUnitTest
@@ -33,19 +34,9 @@ namespace AiCoreUnitTest
var logger = ServiceLogger.GetRequestLogger(out string id);
// Build Payload
var payload = new
{
model = "gemma3:12b",
messages = new[] {
new {
role = "user",
message = "why is the sky blue?"
}
},
requestid = id
};
var payload = AiTestObjects.GetExampleSendRequest(UserRightHelper.GetTenant(), id);
var response = Client.SendAiMessageRequest(payload, out string message, out string model, out int? duration, logger);
var response = Client.SendAiMessageRequest(payload, out LLMResponse llm_response, logger);
Assert.IsTrue(response?.Success);
}

View File

@@ -1,6 +1,7 @@
using AICore.Facade.LLM;
using BeWo.Data.Security;
using BeWo.Service.Core;
using BS.Shared.Tests.Objects;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.VisualStudio.TestTools.UnitTesting.Logging;
using System;
@@ -42,20 +43,9 @@ namespace AiCoreUnitTest
var logger = ServiceLogger.GetRequestLogger(out string id);
// Build Payload
var payload = new
{
model = "llama3:latest",
messages = new[] {
new {
role = "user",
message = "Say 'Hi'!"
}
},
customerid = UserRightHelper.GetTenant(),
requestid = id
};
var payload = AiTestObjects.GetExampleSendRequest(UserRightHelper.GetTenant(), id);
var response = client.SendAiMessageRequest(payload, out string message, out string model, out int? duration, logger);
var response = client.SendAiMessageRequest(payload, out LLMResponse llm_response, logger);
Assert.IsTrue(response?.Success);
}

View File

@@ -0,0 +1,5 @@
<?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}") = "KommMitBewo", "ReportImp\KomMitBewo\KommMitBewo.csproj", "{1A585E99-09AB-4924-8FB9-9C9D1FE48044}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KomMitBewo", "ReportImp\KomMitBewo\KomMitBewo.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,6 +377,8 @@ 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}"
@@ -439,6 +441,8 @@ 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}"
@@ -503,6 +507,8 @@ 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}"
@@ -3007,6 +3013,22 @@ 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
@@ -3503,6 +3525,22 @@ 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
@@ -4015,6 +4053,22 @@ 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
@@ -4967,6 +5021,7 @@ 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}
@@ -4998,6 +5053,7 @@ 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}
@@ -5030,6 +5086,7 @@ 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

@@ -19,7 +19,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BeWo.ViewModel.View.AI;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Translation;

View File

@@ -16,7 +16,7 @@
<EnableSecurityDebugging>true</EnableSecurityDebugging>
<TargetZone>Internet</TargetZone>
<GenerateManifests>true</GenerateManifests>
<SignManifests>false</SignManifests>
<SignManifests>true</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.299</MinimumRequiredVersion>
<MinimumRequiredVersion>2.0.1.297</MinimumRequiredVersion>
<CreateWebPageOnPublish>true</CreateWebPageOnPublish>
<WebPage>publish.htm</WebPage>
<OpenBrowserOnPublish>false</OpenBrowserOnPublish>
<TrustUrlParameters>true</TrustUrlParameters>
<ApplicationRevision>300</ApplicationRevision>
<ApplicationRevision>298</ApplicationRevision>
<ApplicationVersion>2.0.1.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<CreateDesktopShortcut>true</CreateDesktopShortcut>
@@ -112,13 +112,11 @@
<Compile Include="AI\View\AiTranskriptionView.xaml.cs">
<DependentUpon>AiTranskriptionView.xaml</DependentUpon>
</Compile>
<Compile Include="BeWoAppInfo.cs" />
<Compile Include="Converter\AddressToStringConverter.cs" />
<Compile Include="Converter\ComparisonConverter.cs" />
<Compile Include="Converter\IconToImageSourceConverter.cs" />
<Compile Include="Converter\NewlineConverter.cs" />
<Compile Include="Converter\StringEmptyBoolConverter.cs" />
<Compile Include="Core\BeWoAppVersion.cs" />
<Compile Include="Core\BeWoUserUtils.cs" />
<Compile Include="Core\Commands\CommandFactory.cs" />
<Compile Include="Core\EventArg\TextAcceptedEventArgs.cs" />
@@ -276,6 +274,38 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Schw+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Weiss+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Chat_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Schw+Gruen_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Weiss+Gruen_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Funktion_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Mikro_Schw+Orange.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
@@ -296,18 +326,34 @@
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Schw_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss+Orange.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss+Orange_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\AI\Icon_Refresh_Weiss_2026.xaml">
<Generator>MSBuild:Compile</Generator>
<SubType>Designer</SubType>
</Page>
<Page Include="Styles\Designs\GeometryCollection.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
@@ -455,6 +501,9 @@
<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>
@@ -464,6 +513,9 @@
<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">
@@ -1311,6 +1363,7 @@
<Compile Include="Converter\CollectionContainsTag2BoolConverter.cs" />
<Compile Include="Converter\CollectionCountToBoolConverter.cs" />
<Compile Include="Converter\CollectionCountToVisibilityConverter.cs" />
<Compile Include="Converter\IsLastItemToBoolMultiConverter.cs" />
<Compile Include="Converter\DeleteForGoodRight2VisibilityConverter.cs" />
<Compile Include="Converter\EnumToDescriptionConverter.cs" />
<Compile Include="Converter\EnumTranslationConverter.cs" />
@@ -2706,7 +2759,6 @@
<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" />
@@ -3120,6 +3172,7 @@
<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>
@@ -3879,8 +3932,4 @@
<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

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<PublishUrlHistory>D:\Projects\beyondsoft\BeWoPlaner\Publish\|C:\publish\bewoplaner\|publish\|D:\Projects\beyondsoft\BeWoPlaner\PublishTest\|D:\Projects\beyondsoft\BeWoPlaner\PublishDev\</PublishUrlHistory>
@@ -9,7 +9,7 @@
<ErrorReportUrlHistory />
<FallbackCulture>de-DE</FallbackCulture>
<VerifyUploadedFiles>false</VerifyUploadedFiles>
<ProjectView>ProjectFiles</ProjectView>
<ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup>
<PropertyGroup>
<EnableSecurityDebugging>false</EnableSecurityDebugging>

View File

@@ -47,6 +47,7 @@
<conv:FilterDCConverter x:Key="FilterDCConverter" />
<conv:IListT2DataTableConverter x:Key="IListT2DataTableConverter" />
<conv:IndexBoolConverter x:Key="IndexBoolConverter" />
<conv:IsLastItemToBoolMultiConverter x:Key="IsLastItemToBoolMultiConverter" />
<conv:Int2DecimalConverter x:Key="Int2DecimalConverter" />
<conv:NodeType2IconPathConverter x:Key="NodeType2IconPathConverter" />
<conv:NumberSmaller0Converter x:Key="NumberSmaller0Converter" />

View File

@@ -57,7 +57,7 @@ namespace BeWo
public static LoginControl LoginControl;
public static MainControl MainControl;
public static string ShortVersion = "3.32.2";
public static string ShortVersion = BeWoAppInfo.BeWoAppVersion.BaseVersion.ToString();
public static string Version => BeWoAppInfo.BeWoAppVersion.ToString();
public static int RenderTier = 0;

View File

@@ -0,0 +1,39 @@
using System;
using System.Globalization;
using System.Windows.Controls;
using System.Windows.Data;
namespace BeWo.Converter
{
/// <summary>
/// Erwartet: [0] = Item, [1] = ItemsControl, [2] = Items.Count (nur als Aktualisierungs-Trigger).
/// Liefert true, wenn das Item das letzte Element im ItemsControl ist.
/// </summary>
public class IsLastItemToBoolMultiConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
try
{
if (values is null || values.Length < 2)
return false;
if (!(values[1] is ItemsControl itemsControl))
return false;
var items = itemsControl.Items;
return items.Count > 0 && ReferenceEquals(items[items.Count - 1], values[0]);
}
catch (Exception)
{
return false;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Data;
using BS.Shared.Core;
using System.Windows;
namespace BeWo.Converter

View File

@@ -265,8 +265,6 @@ 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";
@@ -275,20 +273,14 @@ 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
@@ -309,18 +301,14 @@ 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_YR3.ToLower()))
pk.Contains(PUB_KEY_YR2.ToLower()))
{
chainContainsPk = true;
}

View File

@@ -1,14 +1,11 @@
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;
@@ -154,25 +151,7 @@ namespace BeWo.Scheduler.ViewModel
protected override void DeleteAppointments(IEnumerable<AbsenceTimeDC> dcList)
{
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,
ServiceFacade.DoCustomerServiceAsync(s => s.DeactivateAbsenceTimes(dcList.ToDictionary(dc => dc.AbsenceTimeOid != null ? dc.AbsenceTimeOid.Value : 0,
dc => dc.AbsenceTimeVersion != null ? dc.AbsenceTimeVersion.Value : 0)));
}

View File

@@ -198,18 +198,11 @@ 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))
@@ -219,7 +212,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);
}
@@ -230,7 +223,7 @@ namespace BeWo.Scheduler.ViewModel
}
}
if(dcList.Count <= 0)
if (dcList.Count <= 0)
{
return;
}
@@ -312,14 +305,6 @@ 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))
@@ -329,10 +314,11 @@ namespace BeWo.Scheduler.ViewModel
}
}
dcList.Add(vm.CommitToDataContract());
}
if(dcList.Count <= 0)
if (dcList.Count <= 0)
{
return;
}

View File

@@ -19,7 +19,6 @@ using BeWo.ViewModel;
using BeWo.ServiceProxy;
using BS.Shared.Extensions;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Translation;
using DevExpress.Xpf.Editors;

View File

@@ -29,7 +29,6 @@ using BeWo.Core;
using BeWo.Core.Service;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Compact;
using DevExpress.Xpf.Core;
using DevExpress.Xpf.Editors;

View File

@@ -2,7 +2,6 @@
using BeWo.Validation;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using BS.Shared.DataContracts;
namespace BeWo.SchulbegleitenderDienst.ViewModel

View File

@@ -104,10 +104,6 @@ namespace BeWo.ServiceProxy
[System.ServiceModel.ServiceKnownTypeAttribute(typeof(BS.Shared.AiRoutineType))]
BS.Shared.DataContracts.Feature.AI.AiConversationDC CreateAiConversationWithMessage(BS.Shared.DataContracts.Feature.AI.AiConversationDC conversation, BS.Shared.DataContracts.Feature.AI.AiViewContextDC view_context, string message);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/CloneAiConversation", ReplyAction="http://tempuri.org/IAiEnhancedService/CloneAiConversationResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/CloneAiConversationBeWoFaultFault", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid);
[System.ServiceModel.OperationContractAttribute(Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplayname", ReplyAction="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameResponse")]
[System.ServiceModel.FaultContractAttribute(typeof(BS.Shared.Core.BeWoFault), Action="http://tempuri.org/IAiEnhancedService/UpdateAiConversationDisplaynameBeWoFaultFau" +
"lt", Name="BeWoFault", Namespace="http://schemas.datacontract.org/2004/07/BS.Shared.Core")]
@@ -192,43 +188,7 @@ 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))]
@@ -380,11 +340,6 @@ namespace BeWo.ServiceProxy
return base.Channel.CreateAiConversationWithMessage(conversation, view_context, message);
}
public BS.Shared.DataContracts.Feature.AI.AiConversationDC CloneAiConversation(long conversation_oid, System.Nullable<long> message_oid)
{
return base.Channel.CloneAiConversation(conversation_oid, message_oid);
}
public long UpdateAiConversationDisplayname(long oid, long version, string displayname)
{
return base.Channel.UpdateAiConversationDisplayname(oid, version, displayname);
@@ -409,12 +364,7 @@ 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

@@ -51,7 +51,7 @@ namespace BeWo.Services
beWoWindow.Width = double.NaN;
beWoWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner;
beWoWindow.Owner = BeWoApp.CurrentBeWo.MainWindow;
beWoWindow.Owner = Application.Current.MainWindow;
beWoWindow.Title = title + " Fenster";
beWoWindow.rootGroupBox.Header = title;
beWoWindow.GroupBoxContent = control;

View File

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

View File

@@ -52,4 +52,129 @@
</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

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatSchwarzOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg13"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g11">
<Canvas Name="Ebene_1">
<Canvas Name="g6">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatWeissOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIChatWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M149.9 100c0-11.8-9.5-21-21.6-21h-13.1s-16.3 0-16.3 0c-13 0-26 0-39 0-11.8 0-21.5 9.3-21.6 20.7 0 22.5-.2 46.4 0 70.3 0 8.6 4.5 15.1 12.9 19 3.8 1.8 7.7 1.7 11.5 1.7h.8s.1 0 .2 0h0c0 3.8 0 7.5 0 11.2 0 3.5 0 7.1 0 10.6 0 3.7 1.5 6.2 4.4 7.5 1.1.5 2.2.7 3.3.7 1.9 0 3.7-.8 5.3-2.2l7.3-6.7c3.6-3.3 7.3-6.7 10.9-10 3.7-3.4 7.4-6.9 11.1-10.4.8-.7 1.3-.8 1.9-.8 1.7.1 3.5.2 5.3.2 18.7 0-4.9 0 13.8 0 2.1 0 4.6 0 6.9-.7 10-2.7 16-10.5 16-20.7.1-26.7.1-48.8 0-69.3ZM78.7 183.1c0-4.4-3.4-7.6-7.8-7.6h-4.9c-2 0-4.1 0-6.1 0-3.6 0-6-2.3-6.3-5.9 0-.9 0-1.9 0-2.8v-.6s0-64.7 0-64.7c0-4.1 1.3-6.2 4.4-7.2.7-.2 1.6-.3 2.4-.3 36.6 0 31 0 67.6 0 4.5 0 6.9 2.4 6.9 6.9 0 22.6 0 45.1 0 67.7 0 4.4-2.5 6.8-6.9 6.8h-8.1c-18.8 0 4.5 0-14.3 0h0c-3 0-5.4.9-7.6 3-5.1 4.8-10.3 9.6-15.4 14.3l-2.7 2.5c-.3.3-.7.6-1 .9v-7.9c0-1.7 0-3.4 0-5.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionSchwarzGruen2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#65B231">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg13"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g11">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g8">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionWeissGruen2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#65B231">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,49 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIFunktionWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg17"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g15">
<Canvas Name="Ebene_1">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M94.1 79c-30.9 0-56 25-56 56s25 56 56 56 56-25 56-56-25-56-56-56ZM125 121.5l-37.3 37.3c-.4.4-.9.8-1.4 1.1-.6.6-1.5.7-2.2.5-.4 0-.7-.2-.9-.4l-7.1-7.1c0 0-.2-.2-.2-.3l-13.6-13.6c-.9-.9-.8-2.4 0-3.3l7.1-7.1c.9-.9 2.4-1 3.3 0l12.1 12.1 29.6-29.6c1.6-1.6 3.6-2.1 4.5-1.2l7.1 7.1c.9.9.4 3-1.2 4.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,61 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshSchwarzOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg22"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g20">
<Canvas Name="Ebene_1">
<Canvas Name="Ebene_12">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2 0-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7s-1.9-4.6-4.2-5.8h-.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-9.5c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5 0-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5l.2.2Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3h-.2ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,61 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshSchwarz2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg18"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g16">
<Canvas Name="Ebene_1">
<Canvas Name="Ebene_12">
<Canvas Name="g6">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path2"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2 0-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7s-1.9-4.6-4.2-5.8h-.1Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path4"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-9.5c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5 0-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5l.2.2Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g12">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path10"
Fill="#000000">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3h-.2ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,59 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshWeissOrange2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg21"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g19">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2.1-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7-.4-2.5-1.9-4.6-4.2-5.8Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FF5F00">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-6.1s-3.4 0-3.4 0c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5.1-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -0,0 +1,59 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- This file is NOT compatible with Silverlight -->
<Viewbox
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
x:Key="AiDesignsIconKIRefreshWeiss2026"
x:Shared="False"
Stretch="Uniform">
<Canvas
Name="svg21"
Width="257.1"
Height="256">
<Canvas.RenderTransform>
<TranslateTransform X="0" Y="0" />
</Canvas.RenderTransform>
<Canvas.Resources />
<!-- Unknown tag: sodipodi:namedview -->
<Canvas Name="g19">
<Canvas Name="Ebene_1">
<Canvas Name="g10">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path6"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M121.6 161.6c-3.1-1.6-6.8-1-9.2 1.5-8.4 8.4-19.9 12.8-31.6 11.9-10.7-.8-20.4-5.8-27.4-13.9-3.9-4.6-6.7-9.9-8.3-15.6h9.5c.5 0 .9-.1 1.3-.4.8-.5 1.2-1.6.6-2.5l-17-25.9-.6-.9c-.7-1-2.2-1.2-3.2-.6-.2.1-.4.3-.6.6l-.6.9-16.9 25.9c-.8 1.2.1 2.7 1.7 2.8h9.7c4.7 24.3 25.3 43.2 50.6 45.2 1.4.1 2.9.2 4.3.2 14.9 0 29.2-5.9 39.8-16.7 1.8-1.8 2.6-4.2 2.2-6.7-.4-2.5-1.9-4.6-4.2-5.8Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path8"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M149.2 124.1c-.4-.2-.8-.4-1.3-.4h-6.1s-3.4 0-3.4 0c-4.9-24.1-25.4-42.7-50.5-44.6-16.4-1.3-32.4 4.8-44.1 16.5-1.8 1.8-2.6 4.2-2.2 6.7.4 2.5 1.9 4.6 4.2 5.8 3.1 1.6 6.8 1 9.2-1.5 8.3-8.4 19.9-12.8 31.6-11.9 17.2 1.3 31 13.3 35.5 28.9h-9.7c-1.5.1-2.5 1.6-1.7 2.8l16.9 25.9.6.9c.2.2.3.4.6.6 1 .7 2.5.5 3.2-.6l.6-.9 17-25.9c.6-.9.2-1.9-.6-2.5Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
<Canvas Name="g16">
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path12"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M232.8 65.1h10.1c1.1 0 1.9.9 1.9 1.9v59.6c0 1.1-.9 1.9-1.9 1.9h-10.1c-1.1 0-1.9-.9-1.9-1.9v-59.6c0-1.1.9-1.9 1.9-1.9Z" FillRule="NonZero" />
</Path.Data>
</Path>
<Path
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Name="path14"
Fill="#FFFFFF">
<Path.Data>
<PathGeometry Figures="M191.3 65.1h11.6c.8 0 1.5.5 1.8 1.3l22.3 59.5c.5 1.3-.5 2.6-1.8 2.6h-10.3c-.8 0-1.6-.5-1.8-1.3l-3.9-11.5c-.3-.8-1-1.3-1.8-1.3h-20.9c-.8 0-1.6.5-1.8 1.3l-4.1 11.5c-.3.8-1 1.3-1.8 1.3h-9.9c-1.4 0-2.3-1.4-1.8-2.6l22.6-59.5c.3-.8 1-1.3 1.8-1.3ZM191.4 104h11c1.3 0 2.3-1.3 1.8-2.6l-7.1-20.7h-.2l-7.3 20.7c-.4 1.3.5 2.6 1.8 2.6Z" FillRule="NonZero" />
</Path.Data>
</Path>
</Canvas>
</Canvas>
</Canvas>
</Canvas>
</Viewbox>
</ResourceDictionary>

View File

@@ -3,4 +3,11 @@
<PathGeometry x:Key="GeometryFileAdd2">M213.66,82.34l-56-56A8,8,0,0,0,152,24H56A16,16,0,0,0,40,40V216a16,16,0,0,0,16,16H200a16,16,0,0,0,16-16V88A8,8,0,0,0,213.66,82.34ZM160,51.31,188.69,80H160ZM200,216H56V40h88V88a8,8,0,0,0,8,8h48V216Zm-40-64a8,8,0,0,1-8,8H136v16a8,8,0,0,1-16,0V160H104a8,8,0,0,1,0-16h16V128a8,8,0,0,1,16,0v16h16A8,8,0,0,1,160,152Z</PathGeometry>
<PathGeometry x:Key="Lucide.ChevronDown">M488.75 665.1666666666667C477.6249999999999 661.5 472.9166666666666 657.0416666666667 344.9166666666667 528.9583333333334C242.4166666666667 426.3333333333334 214.8333333333333 398.0833333333334 212.4166666666667 393.125C209.8333333333333 387.8333333333334 209.375 385.0416666666668 209.375 375C209.375 361.0833333333334 211.8333333333333 354.9166666666668 220.875 345.875C229.9166666666667 336.8333333333334 236.0833333333334 334.375 250 334.375C260.0833333333333 334.375 262.8333333333333 334.8333333333334 268.125 337.4583333333334C273.0416666666667 339.8333333333334 298.5 364.5833333333334 387.2083333333333 453.0416666666666L500 565.5833333333334L612.7916666666666 453.0416666666666C701.4999999999999 364.5833333333334 726.9583333333333 339.8333333333334 731.875 337.4583333333334C737.1666666666666 334.8333333333334 739.9166666666666 334.375 750 334.375C763.9166666666666 334.375 770.0833333333333 336.8333333333334 779.125 345.875C788.1666666666666 354.9166666666668 790.625 361.0833333333334 790.625 375C790.625 385.0416666666668 790.1666666666665 387.8333333333334 787.5833333333334 393.125C785.1666666666666 398.0833333333334 757.5833333333333 426.3333333333334 655.0833333333333 528.9583333333334C510.9583333333333 673.2083333333334 520 665.125 501.8749999999999 665.7916666666666C496.375 666 490.4583333333333 665.7083333333334 488.75 665.1666666666667</PathGeometry>
<PathGeometry x:Key="Lucide.ChevronUp">M238.75 665.1666666666667C227.75 661.5416666666667 217.5833333333334 652.9166666666667 212.375 642.75C209.8333333333333 637.75 209.375 635.0833333333334 209.375 625C209.375 614.9583333333334 209.8333333333333 612.1666666666667 212.4166666666667 606.875C216.9166666666667 597.7083333333334 472.7083333333333 341.9166666666667 481.8749999999999 337.4166666666668C487.1666666666666 334.8333333333334 489.9583333333333 334.375 500 334.375C510.0416666666666 334.375 512.8333333333333 334.8333333333334 518.125 337.4166666666668C527.2916666666666 341.9166666666667 783.0833333333333 597.7083333333334 787.5833333333334 606.875C790.1666666666665 612.1666666666667 790.625 614.9583333333334 790.625 625C790.625 635.0833333333334 790.1666666666665 637.75 787.6249999999999 642.75C783.7083333333334 650.4166666666667 775.9583333333334 658.1666666666667 768.1249999999999 662.2916666666667C762.625 665.2083333333334 760.4166666666666 665.625 750 665.625C739.375 665.625 737.3749999999999 665.25 731.25 662.0416666666667C725.7083333333334 659.1666666666667 702.6666666666666 636.7916666666667 612.1666666666666 546.4583333333334L500 434.4166666666668L387.7916666666667 546.4583333333334C262.75 671.3333333333334 269.8333333333333 665.125 251.875 665.7916666666666C246.375 666 240.4583333333333 665.7083333333334 238.75 665.1666666666667</PathGeometry>
<PathGeometry x:Key="Phosphor.PuzzlePiece">M220.27,158.54a8,8,0,0,0-7.7-.46,20,20,0,1,1,0-36.16A8,8,0,0,0,224,114.69V72a16,16,0,0,0-16-16H171.78a35.36,35.36,0,0,0,.22-4,36.11,36.11,0,0,0-11.36-26.24,36,36,0,0,0-60.55,23.62,36.56,36.56,0,0,0,.14,6.62H64A16,16,0,0,0,48,72v32.22a35.36,35.36,0,0,0-4-.22,36.12,36.12,0,0,0-26.24,11.36,35.7,35.7,0,0,0-9.69,27,36.08,36.08,0,0,0,33.31,33.6,35.68,35.68,0,0,0,6.62-.14V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V165.31A8,8,0,0,0,220.27,158.54ZM208,208H64V165.31a8,8,0,0,0-11.43-7.23,20,20,0,1,1,0-36.16A8,8,0,0,0,64,114.69V72h46.69a8,8,0,0,0,7.23-11.43,20,20,0,1,1,36.16,0A8,8,0,0,0,161.31,72H208v32.23a35.68,35.68,0,0,0-6.62-.14A36,36,0,0,0,204,176a35.36,35.36,0,0,0,4-.22Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Stack">M230.91,172A8,8,0,0,1,228,182.91l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,36,169.09l92,53.65,92-53.65A8,8,0,0,1,230.91,172ZM220,121.09l-92,53.65L36,121.09A8,8,0,0,0,28,134.91l96,56a8,8,0,0,0,8.06,0l96-56A8,8,0,1,0,220,121.09ZM24,80a8,8,0,0,1,4-6.91l96-56a8,8,0,0,1,8.06,0l96,56a8,8,0,0,1,0,13.82l-96,56a8,8,0,0,1-8.06,0l-96-56A8,8,0,0,1,24,80Zm23.88,0L128,126.74,208.12,80,128,33.26Z</PathGeometry>
<PathGeometry x:Key="Phosphor.FloppyDisk">M219.31,72,184,36.69A15.86,15.86,0,0,0,172.69,32H48A16,16,0,0,0,32,48V208a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V83.31A15.86,15.86,0,0,0,219.31,72ZM168,208H88V152h80Zm40,0H184V152a16,16,0,0,0-16-16H88a16,16,0,0,0-16,16v56H48V48H172.69L208,83.31ZM160,72a8,8,0,0,1-8,8H96a8,8,0,0,1,0-16h56A8,8,0,0,1,160,72Z</PathGeometry>
<PathGeometry x:Key="Phosphor.RowsPlusTop">M208,160H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V176A16,16,0,0,0,208,160Zm0,40H48V176H208v24Zm0-112H48a16,16,0,0,0-16,16v24a16,16,0,0,0,16,16H208a16,16,0,0,0,16-16V104A16,16,0,0,0,208,88Zm0,40H48V104H208v24ZM96,40a8,8,0,0,1,8-8h16V16a8,8,0,0,1,16,0V32h16a8,8,0,0,1,0,16H136V64a8,8,0,0,1-16,0V48H104A8,8,0,0,1,96,40Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Swap">M224,48V152a16,16,0,0,1-16,16H99.31l10.35,10.34a8,8,0,0,1-11.32,11.32l-24-24a8,8,0,0,1,0-11.32l24-24a8,8,0,0,1,11.32,11.32L99.31,152H208V48H96v8a8,8,0,0,1-16,0V48A16,16,0,0,1,96,32H208A16,16,0,0,1,224,48ZM168,192a8,8,0,0,0-8,8v8H48V104H156.69l-10.35,10.34a8,8,0,0,0,11.32,11.32l24-24a8,8,0,0,0,0-11.32l-24-24a8,8,0,0,0-11.32,11.32L156.69,88H48a16,16,0,0,0-16,16V208a16,16,0,0,0,16,16H160a16,16,0,0,0,16-16v-8A8,8,0,0,0,168,192Z</PathGeometry>
<PathGeometry x:Key="Phosphor.Copy">M216,32H88a8,8,0,0,0-8,8V80H40a8,8,0,0,0-8,8V216a8,8,0,0,0,8,8H168a8,8,0,0,0,8-8V176h40a8,8,0,0,0,8-8V40A8,8,0,0,0,216,32ZM160,208H48V96H160Zm48-48H176V88a8,8,0,0,0-8-8H96V48H208Z</PathGeometry>
</ResourceDictionary>

View File

@@ -4,11 +4,11 @@
xmlns:ai="clr-namespace:BeWo.View.Detail.AI"
xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui"
xmlns:templateselectors="clr-namespace:BeWo.View.TemplateSelectors"
xmlns:view="clr-namespace:BeWo.View"
xmlns:viewmodel="clr-namespace:BeWo.ViewModel">
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="..\DataTemplates\ControlTemplates.xaml" />
<ResourceDictionary Source="..\Designs\GeometryCollection.xaml" />
</ResourceDictionary.MergedDictionaries>
<Style x:Key="MessageTextBoxStyle" TargetType="{x:Type TextBox}">
@@ -146,35 +146,102 @@
<!-- Chip-Button für AssistentCommands unter der Assistent-Antwort -->
<Style x:Key="AssistentCommandButtonStyle" TargetType="{x:Type Button}">
<Setter Property="Foreground" Value="{DynamicResource TextForegroundPrimary}" />
<Setter Property="FontSize" Value="12" />
<Setter Property="FontWeight" Value="Medium" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Padding" Value="12,4,12,5" />
<Setter Property="Margin" Value="0,0,6,0" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border
x:Name="border"
Padding="{TemplateBinding Padding}"
Background="#00000000"
BorderBrush="#00000000"
BorderThickness="1"
CornerRadius="12">
<ContentPresenter
HorizontalAlignment="Center"
VerticalAlignment="Center"
TextBlock.Foreground="{TemplateBinding Foreground}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter TargetName="border" Property="Background" Value="#FFFFFFFF" />
<Setter TargetName="border" Property="BorderBrush" Value="#59000000" />
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter TargetName="border" Property="Background" Value="#CCEDEDED" />
<Setter TargetName="border" Property="BorderBrush" Value="#73000000" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value="0.45" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<!-- Speichern-Button unter der User-Nachricht: nur beim Hovern sichtbar -->
<Style
x:Key="UserMessageSaveButtonStyle"
BasedOn="{StaticResource AssistentCommandButtonStyle}"
TargetType="{x:Type Button}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<!-- Bei ausgeblendeten Nachrichten kein Speichern (würde eine leere Nachricht speichern) -->
<DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
<!-- Buttonleiste unter der Assistent-Antwort: bei der letzten Nachricht immer sichtbar, sonst nur beim Hovern -->
<Style x:Key="AssistentMessageCommandBarStyle" TargetType="{x:Type ItemsControl}">
<Setter Property="Visibility" Value="Hidden" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource IsLastItemToBoolMultiConverter}">
<Binding />
<Binding RelativeSource="{RelativeSource AncestorType={x:Type ListView}}" />
<Binding Path="Items.Count" RelativeSource="{RelativeSource AncestorType={x:Type ListView}}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<DataTrigger Binding="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType={x:Type ListView}}, Converter={StaticResource CollectionCountToBoolConverter}}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
<!-- Assistent Message Control -->
<DataTemplate x:Key="AssistentMessageTemplate">
<Grid
Margin="0,0,60,0"
HorizontalAlignment="Left"
ContextMenuService.IsEnabled="{Binding DataContext.AssistentCommands, Converter={StaticResource CollectionCountToBoolConverter}, RelativeSource={RelativeSource AncestorType=ItemsControl}}"
Tag="{Binding DataContext, RelativeSource={RelativeSource AncestorType=ItemsControl}}">
<Grid.ContextMenu>
<ContextMenu ItemsSource="{Binding PlacementTarget.Tag.AssistentCommands, RelativeSource={RelativeSource Self}}">
<ContextMenu.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Command" Value="{Binding Command}" />
<Setter Property="CommandParameter" Value="{Binding Path=PlacementTarget.DataContext, RelativeSource={RelativeSource AncestorType=ContextMenu}}" />
</Style>
</ContextMenu.ItemContainerStyle>
<ContextMenu.ItemTemplate>
<DataTemplate>
<TextBlock
Margin="3"
VerticalAlignment="Center"
Text="{Binding Name}" />
</DataTemplate>
</ContextMenu.ItemTemplate>
</ContextMenu>
</Grid.ContextMenu>
Background="Transparent">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Border
Width="auto"
Margin="0,0,3,0"
@@ -245,15 +312,6 @@
</Grid>
</TextBlock.ToolTip>
</TextBlock>
<TextBlock
Grid.Column="1"
Margin="9,0,0,3"
HorizontalAlignment="Left"
VerticalAlignment="Top"
FontSize="12"
FontWeight="Bold"
Text="⋮"
Visibility="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType=ItemsControl}, Converter={StaticResource CollectionCountToVisibilityConverter}}" />
<!--<TextBlock
Grid.Row="1"
Grid.ColumnSpan="2"
@@ -273,6 +331,35 @@
Style="{StaticResource MessageTextBoxStyle}" />
</Grid>
</Border>
<ItemsControl
Grid.Row="1"
Grid.Column="1"
Margin="0,4,0,0"
HorizontalAlignment="Left"
ItemsSource="{Binding DataContext.AssistentCommands, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
Style="{StaticResource AssistentMessageCommandBarStyle}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button
Command="{Binding Command}"
CommandParameter="{Binding DataContext, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"
Style="{StaticResource AssistentCommandButtonStyle}"
ToolTip="{Binding Name}">
<Path
Width="12"
Height="12"
Data="{Binding Icon}"
Fill="Black"
Stretch="Fill" />
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</DataTemplate>
@@ -309,61 +396,156 @@
<!-- User Message Control -->
<DataTemplate x:Key="UserMessageTemplate">
<Border
Width="auto"
<Grid
Margin="60,0,0,0"
HorizontalAlignment="Right"
Background="#DEFFFFFF"
BorderBrush="Black"
BorderThickness="0"
CornerRadius="15, 15, 15, 15"
Tag="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type view:BeWoView}}, Path=.}">
<Border.ContextMenu>
<ContextMenu>
<MenuItem
Command="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ContextMenu}}, Path=PlacementTarget.Tag.DataContext.SavePromptCommand}"
CommandParameter="{Binding}"
Header="Speichern" />
</ContextMenu>
</Border.ContextMenu>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Border
Width="auto"
HorizontalAlignment="Right"
Background="#DEFFFFFF"
BorderBrush="Black"
BorderThickness="0"
CornerRadius="15, 15, 15, 15">
<Grid>
<TextBox Padding="12,8,12,8">
<TextBox.Style>
<Style BasedOn="{StaticResource MessageTextBoxStyle}" TargetType="{x:Type TextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
<!-- Platzhalter für ausgeblendete Nachrichten (Message kommt vom Server als null) -->
<StackPanel Orientation="Vertical">
<StackPanel.Style>
<Style TargetType="{x:Type StackPanel}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ShowMessage}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<TextBox Padding="12,8,12,8" Style="{StaticResource MessageTextBoxStyle}" />
<!--<TextBlock Grid.Column="1" Text="⋮"
Margin="3,8,12,8"
VerticalAlignment="Top"
HorizontalAlignment="Left"
FontSize="12"
FontWeight="Bold"/>-->
<!-- Titelzeile: Promptbaustein-Titel + Hilfe-Link + Ausklapp-Button -->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<TextBlock
Padding="12,8,4,8"
VerticalAlignment="Center"
FontSize="14"
FontStyle="Italic"
Foreground="#FF888888"
Text="{Binding HiddenMessageText}"
TextWrapping="Wrap" />
<!-- Hilfe-Link (i) für Ownsoft-Promptbausteine mit hinterlegtem OwnsoftRefLink -->
<TextBlock
Grid.Column="1"
Margin="0"
Padding="0"
VerticalAlignment="Center"
ToolTip="Hilfe zum Promptbaustein öffnen"
Visibility="{Binding IsInfoVisible, Converter={StaticResource BoolVisibilityConverter}}">
<Hyperlink NavigateUri="{Binding OwnsoftRefLink}">
(i)
</Hyperlink>
</TextBlock>
<ToggleButton
x:Name="btnTogglePrompt"
Grid.Column="2"
Margin="4,4,8,4"
Padding="6,2,6,2"
VerticalAlignment="Center"
IsEnabled="{Binding ShowPrompt}"
ToolTipService.ShowOnDisabled="True">
<ToggleButton.Style>
<Style TargetType="{x:Type ToggleButton}">
<!-- Nur anzeigen, wenn die Nachricht mittels Promptbaustein erstellt wurde -->
<Setter Property="Visibility" Value="Collapsed" />
<Setter Property="Content" Value="▼" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasUsedPromptbaustein}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Content" Value="▲" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="ToolTip" Value="Versteckt" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
</Grid>
</Grid>
</Border>
</DataTemplate>
<DataTemplate x:Key="CheckboxAssistentMessageTemplate">
<StackPanel VerticalAlignment="Center" Orientation="Horizontal">
<CheckBox
Margin="4"
VerticalAlignment="Center"
IsChecked="{Binding IsChecked, Mode=TwoWay}" />
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource AssistentMessageTemplate}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="CheckboxUserMessageTemplate">
<StackPanel VerticalAlignment="Center" Orientation="Horizontal">
<CheckBox
Margin="4"
VerticalAlignment="Center"
IsChecked="{Binding IsChecked}" />
<ContentPresenter Content="{Binding}" ContentTemplate="{StaticResource UserMessageTemplate}" />
</StackPanel>
<!-- Ausgeklappter Prompt-Inhalt -->
<Border
Margin="12,0,12,8"
Padding="4"
Background="#22000000"
CornerRadius="6">
<Border.Style>
<Style TargetType="{x:Type Border}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsChecked, ElementName=btnTogglePrompt}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TextBox
Padding="8"
Style="{StaticResource MessageTextBoxStyle}"
Text="{Binding UsedPromptbausteinContent, Converter={StaticResource NewlineConverter}, Mode=OneWay}" />
</Border>
</StackPanel>
</Grid>
</Border>
<StackPanel
Grid.Row="1"
Margin="0,4,0,0"
HorizontalAlignment="Right" Orientation="Horizontal">
<Button
Command="{Binding DataContext.CopyPromptCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
CommandParameter="{Binding}"
Style="{StaticResource UserMessageSaveButtonStyle}"
ToolTip="Kopieren">
<Path
Width="12"
Height="12"
Data="{StaticResource Phosphor.Copy}"
Fill="Black"
Stretch="Fill" />
</Button>
<Button
Command="{Binding DataContext.SavePromptCommand, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
CommandParameter="{Binding}"
Style="{StaticResource UserMessageSaveButtonStyle}"
ToolTip="Speichern">
<Path
Width="12"
Height="12"
Data="{StaticResource Phosphor.FloppyDisk}"
Fill="Black"
Stretch="Fill" />
</Button>
</StackPanel>
</Grid>
</DataTemplate>
<templateselectors:AiConversationMessageTemplateSelector
@@ -371,10 +553,4 @@ FontWeight="Bold"/>-->
AssistentMessageTemplate="{StaticResource AssistentMessageTemplate}"
SystemMessageTemplate="{StaticResource SystemMessageTemplate}"
UserMessageTemplate="{StaticResource UserMessageTemplate}" />
<templateselectors:AiConversationMessageTemplateSelector
x:Key="AiConversationCloneMessageTemplateSelector"
AssistentMessageTemplate="{StaticResource CheckboxAssistentMessageTemplate}"
SystemMessageTemplate="{StaticResource SystemMessageTemplate}"
UserMessageTemplate="{StaticResource UserMessageTemplate}" />
</ResourceDictionary>

View File

@@ -22,6 +22,18 @@
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw+Orange.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss+Orange.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Schw+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Chat_Weiss+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Schw+Gruen_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Funktion_Weiss+Gruen_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Schw+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss_2026.xaml" />
<ResourceDictionary Source="Designs\AI\Icon_Refresh_Weiss+Orange_2026.xaml" />
<ResourceDictionary Source="Designs\GeometryCollection.xaml" />

View File

@@ -17,6 +17,7 @@
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Colors\Colors.xaml" />
<ResourceDictionary Source="Designs\GeometryCollection.xaml" />
</ResourceDictionary.MergedDictionaries>
<conv:CustomerDCPrintURLConverter x:Key="CustomerDCPrintURLConverter" />

View File

@@ -3,7 +3,6 @@ using BeWo.ServiceProxy;
using BeWo.View;
using BeWo.ViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
using System;
using System.IO;

View File

@@ -19,19 +19,10 @@ 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);
}
@@ -42,12 +33,7 @@ namespace BeWo.Validation
var lAttributes = lPropInfo.GetCustomAttributes(typeof(ValidationAttribute), true);
if (lAttributes.Length > 0)
{
// 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);
lValid = ((ValidationAttribute) lAttributes[0]).Validate(pValue);
}
}
}

View File

@@ -1,12 +0,0 @@
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,9 +15,7 @@ namespace BeWo.Validation
public ValidationRules ValidationRule { get; set; }
// Claude: pContext liefert den Klientenbezug fuer EmptyNoticeInNewServiceRecordsAllowed.
// null bedeutet "unbekannt" -> bisheriges Verhalten (Pflichtfeld bleibt).
public bool Validate(object pValue, ICustomerRelatedContext pContext = null)
public bool Validate(object pValue)
{
bool lResult = true;
switch (ValidationRule)
@@ -75,12 +73,7 @@ namespace BeWo.Validation
break;
case ValidationRules.EmptyNoticeInNewServiceRecordsAllowed:
// 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 (BeWoApp.AppSettings.IsServiceRecordNoticeMandatory)
{
if (pValue is string)
{

View File

@@ -34,8 +34,10 @@
Background="Transparent"
Command="{Binding OpenConversationPopupCommand}"
Content="{StaticResource AiDesignsIconKIChatWeissOrange}"
ToolTip="KI Chat öffnen"
ToolTipService.ShowOnDisabled="True">
<Button.ToolTip>
<TextBlock Text="{Binding TooltipName, StringFormat='KI Chat über {0} öffnen'}" />
</Button.ToolTip>
<!--<Button.InputBindings>
<MouseBinding Command="{Binding OpenConversationPopupCommand}" Gesture="LeftClick" />
</Button.InputBindings>-->
@@ -48,8 +50,10 @@
Command="{Binding OpenAllPromptsPopupCommand}"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen}"
MouseRightButtonUp="btnOpenAi5_MouseRightButtonUp"
ToolTip="KI Chat mit Prompt-Baustein starten"
ToolTipService.ShowOnDisabled="True">
<Button.ToolTip>
<TextBlock Text="{Binding TooltipName, StringFormat='KI Chat über {0} per Prompt-Aktion starten'}" />
</Button.ToolTip>
<!--<Button.InputBindings>
<MouseBinding Command="{Binding OpenAllPromptsPopupCommand}" Gesture="LeftClick" />
</Button.InputBindings>-->
@@ -96,6 +100,14 @@
StaysOpen="False">
<Border x:Name="border_promptbaustein_al" BorderThickness="1" />
</Popup>-->
<Border
x:Name="borderLoadingOverlay"
Grid.Column="0"
Grid.ColumnSpan="4"
Background="Transparent"
ToolTip="Lade"
ToolTipService.ShowOnDisabled="True"
Visibility="{Binding IsLoading, Converter={StaticResource BoolVisibilityConverter}}" />
<Popup
x:Name="popup_promptbaustein_favoriten"
Width="400"

View File

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

View File

@@ -91,15 +91,18 @@
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Rectangle
Grid.RowSpan="2"
Width="24"
Height="24"
Fill="White" />
<Path
Data="{StaticResource Phosphor.PuzzlePiece}"
Margin="2"
Grid.RowSpan="2"
Width="24"
Height="24"
Fill="Black"
Stretch="Fill"/>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox
Height="21"
Margin="2,0,0,0"
Margin="0,0,0,0"
Padding="0"
VerticalAlignment="Center"
Background="Transparent"
@@ -186,8 +189,8 @@
<DataTrigger Binding="{Binding IsValid}" Value="False">
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="IsEnabled" Value="False" />
<Setter Property="IsHitTestVisible" Value="False" />
<Setter Property="IsEnabled" Value="True" />
<Setter Property="IsHitTestVisible" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
@@ -238,25 +241,29 @@
Background="Transparent"
ContextMenuOpening="ListBox_ContextMenuOpening"
PreviewMouseDown="Grid_PreviewMouseDown_2">
<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>
<Rectangle
Grid.RowSpan="2"
Width="24"
Height="24"
Fill="White" />
<StackPanel Grid.Column="2" Orientation="Horizontal">
<TextBox
<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
Height="21"
Margin="0,0,0,0"
Padding="0"
@@ -269,10 +276,10 @@
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"
@@ -282,16 +289,16 @@
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"
@@ -299,27 +306,27 @@
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"
@@ -330,20 +337,20 @@
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"
@@ -351,48 +358,49 @@
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>
<!-- Visibility="{Binding ElementName=btnOpenAi4, Path=Visibility}" -->
<Label Foreground="Red">
Ungültig
</Label>
</StackPanel>
</Grid>
</Grid>
</Border>
</DataTemplate>
@@ -414,22 +422,16 @@
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<GroupBox
Grid.Row="1"
Grid.Column="0"
Margin="0,7,0,0"
Padding="0"
HorizontalAlignment="Stretch"
Header="Bibliothek"
Style="{StaticResource ObjectEditGroupBox}">
<TreeView
<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,0,0,1"
BorderThickness="1,1,0,1"
ContextMenuOpening="treeView_ContextMenuOpening"
Focusable="True"
ItemContainerStyle="{DynamicResource igoal_treeitemstyle}"
@@ -439,18 +441,18 @@
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" />
@@ -458,33 +460,33 @@
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"
@@ -501,19 +503,18 @@
<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>
</GroupBox>
<MenuItem.Icon>
<Image Source="..\..\..\Ressources\Icons\Delete24.png" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
<GridSplitter
Grid.Row="1"
Grid.Column="1"
@@ -524,7 +525,7 @@
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}">
@@ -532,7 +533,7 @@
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
</Grid.Resources>-->
<TabControl
x:Name="tabcontrol_1"
Padding="0"

View File

@@ -142,7 +142,6 @@
IsReadOnly="True"
x:Name="popupedit_Auftraggeber"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_Auftraggeber_DeleteClick"
PopUpClick="popupedit_Auftraggeber_PopUpClick"
@@ -160,7 +159,6 @@
IsReadOnly="True"
x:Name="popupedit_AuftraggeberContactPersonSearch"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_AuftraggeberContactPersonSearch_DeleteClick"
PopUpClick="popupedit_AuftraggeberContactPersonSearch_PopUpClick"
@@ -177,7 +175,6 @@
IsReadOnly="True"
x:Name="popupedit_Einsatzstelle"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_Einsatzstelle_DeleteClick"
PopUpClick="popupedit_Einsatzstelle_PopUpClick"
@@ -195,7 +192,6 @@
IsReadOnly="True"
x:Name="popupedit_EinsatzstelleContactPersonSearch"
Height="23"
MaxWidth="294"
DeleteButtonVisibility="Visible"
DeleteClick="popupedit_EinsatzstelleContactPersonSearch_DeleteClick"
PopUpClick="popupedit_EinsatzstelleContactPersonSearch_PopUpClick"
@@ -453,15 +449,13 @@
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="NoWrap"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"/>
TextWrapping="Wrap"
VerticalScrollBarVisibility="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}" />
Text="{Binding Oid, Mode=OneWay}" />
<Label
Grid.Row="1"
Grid.Column="0"
@@ -154,7 +154,7 @@
Grid.Column="2"
MaxLength="1024"
Style="{StaticResource TextBoxNoticeLarge}"
Text="{Binding Notice}"
Text="{Binding Notice, UpdateSourceTrigger=PropertyChanged}"
TextWrapping="Wrap" />
</Grid>
</TabItem>

View File

@@ -10,7 +10,6 @@ using System.Windows.Input;
using BeWo.Annotations;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
namespace BeWo.View.Controls

View File

@@ -5,7 +5,6 @@ using System.Windows.Controls;
using System.Windows.Input;
using BeWo.Validation;
using BeWo.ViewModel;
using BS.Shared.Core;
namespace BeWo.View.Controls
{

View File

@@ -26,6 +26,8 @@
VerticalAlignment="Stretch"
d:DataContext="{d:DesignInstance Type=vmv:AiConversationChatViewModel,
IsDesignTimeCreatable=True}"
d:Height="600"
d:Width="600"
Focusable="True"
Loaded="BeWoView_Loaded"
mc:Ignorable="d">
@@ -59,7 +61,27 @@
MouseDown="ConversationRenameTextBlock_MouseDown"
Text="{Binding Displayname}"
TextTrimming="CharacterEllipsis"
Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=false}" />
Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}, ConverterParameter=false}">
<TextBlock.ToolTip>
<StackPanel>
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yy HH:mm}}" />
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yy HH:mm}}" />
<TextBlock
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Context_Type, StringFormat=Format: {0}}" />
</StackPanel>
</TextBlock.ToolTip>
</TextBlock>
<TextBox
Margin="0"
Padding="0"
@@ -73,24 +95,8 @@
LostFocus="ConversationRenameTextBox_LostFocus"
Text="{Binding Displayname, UpdateSourceTrigger=PropertyChanged}"
Visibility="{Binding IsEditing, Converter={StaticResource BoolVisibilityConverter}}" />
<TextBlock
Grid.Row="1"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Created, StringFormat=Erstellt: {0:dd.MM.yy HH:mm}}" />
<TextBlock
Grid.Row="2"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Updated, StringFormat=Aktualisiert: {0:dd.MM.yy HH:mm}}" />
<TextBlock
Grid.Row="3"
FontSize="11"
Foreground="{DynamicResource TextForegroundSecondary}"
Style="{StaticResource TextBlockStyle}"
Text="{Binding Context_Type, StringFormat=Format: {0}}" />
<!--<TextBlock
Grid.Row="2"
FontSize="10"
@@ -161,7 +167,7 @@
</Grid.RowDefinitions>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" MinWidth="200" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
@@ -179,8 +185,34 @@
</dxwui:HamburgerMenu>-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<ToggleButton
x:Name="btnToggleConversations"
Width="24"
Height="24"
Margin="4,4,0,0"
Padding="0"
HorizontalAlignment="Right"
IsChecked="False"
ToolTip="Konversationen ein-/ausblenden">
<ToggleButton.Style>
<Style TargetType="ToggleButton">
<Setter Property="Content" Value="◀" />
<Style.Triggers>
<Trigger Property="IsChecked" Value="False">
<Setter Property="Content" Value="▶" />
</Trigger>
</Style.Triggers>
</Style>
</ToggleButton.Style>
</ToggleButton>
<ListView
x:Name="listview_conversations"
Grid.Row="1"
Width="200"
Padding="4"
Background="Transparent"
BorderThickness="0"
@@ -189,7 +221,8 @@
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
SelectedItem="{Binding ListVM.SelectedVM, Mode=TwoWay}"
SelectionChanged="listview_conversations_SelectionChanged">
SelectionChanged="listview_conversations_SelectionChanged"
Visibility="{Binding IsChecked, ElementName=btnToggleConversations, Converter={StaticResource BoolVisibilityConverter}}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
@@ -280,6 +313,7 @@
VerticalAlignment="Stretch"
Background="Transparent"
BorderThickness="0"
Hyperlink.RequestNavigate="Hyperlink_RequestNavigate"
ItemTemplateSelector="{StaticResource AiConversationMessageTemplateSelector}"
ItemsSource="{Binding ListVM.SelectedVM.Messages.VMList, UpdateSourceTrigger=PropertyChanged}"
ScrollViewer.CanContentScroll="False"
@@ -455,11 +489,6 @@
Margin="4,0,0,0"
Command="{Binding RenameCommand}"
Content="Umbennen" />
<Button
x:Name="btnClone"
Margin="4,0,0,0"
Command="{Binding OpenCloneCommand}"
Content="Klonen" />
<Button
x:Name="btnDelete"
Margin="4,0,0,0"
@@ -542,64 +571,6 @@
ItemsSource="{Binding Models}"
SelectedItem="{Binding Config.SelectedModel, Mode=TwoWay}" />
</Grid>-->
</Popup>
<Popup
x:Name="popup_conversation_clone"
IsOpen="{Binding IsCloneOpen}"
Loaded="popup_conversation_clone_Loaded"
Placement="Center"
StaysOpen="False">
<Border
Width="400"
Height="600"
Padding="0"
Background="{DynamicResource NavigationContentBrush}"
BorderThickness="1"
CornerRadius="5">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<ListView
x:Name="listbox_messages_clone"
Padding="3"
Background="Transparent"
BorderThickness="0"
ItemTemplateSelector="{StaticResource AiConversationCloneMessageTemplateSelector}"
ItemsSource="{Binding ListVM.SelectedVM.Messages.VMList, UpdateSourceTrigger=PropertyChanged}"
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="Padding" Value="4" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<ContentPresenter Margin="{TemplateBinding Padding}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
</ListView>
<Button
Grid.Row="1"
Margin="8,4,8,8"
Command="{Binding CloneCommand}">
Klonen
</Button>
</Grid>
</Border>
<!-- AiConversationCloneMessageTemplateSelector -->
</Popup>
<Popup
x:Name="popup_message_save"

View File

@@ -86,11 +86,6 @@ namespace BeWo.View.Detail.AI
Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => BeWoWpfUtils.ScrollToBottom(listview_messages)));
}
private void popup_conversation_clone_Loaded(object sender, RoutedEventArgs e)
{
Dispatcher.BeginInvoke(DispatcherPriority.Render, (Action)(() => BeWoWpfUtils.ScrollToBottom(listbox_messages_clone)));
}
private void Grid_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)

View File

@@ -7,7 +7,6 @@ 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;
@@ -140,27 +139,9 @@ namespace BeWo.View.Detail
private void RemoveAbsenceTime()
{
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);
AbsenceTimes?.VMList.Remove(DataGridAbsenceTimes.GetCurrentValue<AbsenceTimeVM>());
BeWoWpfUtils.RefreshDXGrid(DataGridAbsenceTimes);
}
private static bool IsAbsenceTimeInThePast(AbsenceTimeVM absenceTime)
{
return absenceTime.End.HasValue && absenceTime.End.Value.Date < DateTime.Today;
}
}
}

View File

@@ -230,24 +230,19 @@ namespace BeWo.View.Detail.Accounting
var dialog = new GkvAbrechnungDialogViewModel(vm);
dialog.RequestCloseFinal += (s, ee) => Detail_Window_Closing(s, new CancelEventArgs());
dialog.Closing += (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 bewo_window = sender as AnimatedBeWoWindow;
var detail_control = bewo_window.GroupBoxContent as GkvAbrechnungDetailControl;
var vm = detail_control.DataContext as GkvAbrechnungLightVM;
var dialog = sender as GkvAbrechnungDialogViewModel;
var vm = dialog.Abrechnung;
vm.CheckAllInvoiceBases();
var checkbox_checked = detail_control.Checkbox_Bezahlt.IsChecked;
var textbox_text = detail_control.txt_Notice.Text;
vm.Notice = textbox_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() && editView.ConfirmExpiredHilfeplan())
if (editView.IsValid() && editView.IsCustomerChangeAllowed())
{
editView.SaveData();
CloseEditView();
@@ -495,62 +495,18 @@ 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)
@@ -706,11 +662,6 @@ namespace BeWo.View.Detail
if (lValid)
{
if (!ConfirmExpiredHilfeplan())
{
return;
}
var atvm = ViewModel.CreateFromPrototype();
ViewModel.AccountingTransactionVMList.Add(atvm);

View File

@@ -165,24 +165,6 @@ 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;
@@ -215,11 +197,6 @@ namespace BeWo.View.Detail
return false;
}
if (!this.ConfirmExpiredHilfeplan())
{
return false;
}
this.SaveData();
}
}

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.Core;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.Core;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;

View File

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

View File

@@ -1,6 +1,5 @@
using BeWo.Core;
using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using System;
using System.Collections.Generic;
using System.Linq;

View File

@@ -3,7 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.Core;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.Core;

View File

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

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit;

View File

@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.Core;

View File

@@ -94,9 +94,14 @@ namespace BeWo.View.Detail.Report
try
{
var filter = _SelectedFilter;
UrlaubsplanerRootObj = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
UpdateScheduler(false);
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(filter)));
var absenceOverview = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(filter)));
UpdateScheduler(false, absenceOverview);
ColorizeFeiertage();
ApplyFeiertagCellStyle();
}
@@ -271,19 +276,14 @@ namespace BeWo.View.Detail.Report
}
// Claude - optionaler Parameter absenceOverview: vorgeladene Daten aus Button_Click werden übergeben, um doppelten Serviceaufruf zu vermeiden
public async void UpdateScheduler(bool neuLaden)
public void UpdateScheduler(bool neuLaden, List<EmployeeDC> absenceOverview = null)
{
if (neuLaden || UrlaubsplanerRootObj == null)
{
UrlaubsplanerRootObj = await Task.Run(() =>
ServiceFacade.DoEmployeeServiceSync(s => s.BuildUrlaubsplanerRootObject(_SelectedFilter)));
}
var absenceReasons = _AbsenceReasonDCs;
_ListOfEmployee = UrlaubsplanerRootObj.AlleAbwesenheitsInformationDCs.Select(i => i.Employee).ToList();
if (absenceOverview == null)
absenceOverview = ServiceFacade.DoEmployeeServiceSync(x => x.GetAbsenceOverview(_SelectedFilter));
_ListOfEmployee = absenceOverview;
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 _ListOfEmployee)
foreach (var employee in absenceOverview)
{
//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

@@ -17,7 +17,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;

View File

@@ -40,7 +40,6 @@ 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;
@@ -945,11 +944,6 @@ 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)
@@ -1082,11 +1076,6 @@ 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)
@@ -1816,12 +1805,12 @@ namespace BeWo.View.Detail.Report
if (eintraegeEinerWoche != null)
{
foreach (var eintrag in eintraegeEinerWoche)
stundenWoche.Add(DienstInfoDC.DauerAbzueglichPause(eintrag.DauerInStunden, eintrag.DienstOid, _DienstProOidDict)); // Claude: Pause abziehen
stundenWoche.Add(eintrag.DauerInStunden);
}
if (vertretungenEinerWoche != null)
{
foreach (var vertretung in vertretungenEinerWoche)
stundenWoche.Add(DienstInfoDC.DauerAbzueglichPause(vertretung.DauerInStunden, vertretung.DienstOid, _DienstProOidDict)); // Claude: Pause abziehen
stundenWoche.Add(vertretung.DauerInStunden);
}
if (ueberstundenEinerWoche != null)
{
@@ -2131,7 +2120,7 @@ namespace BeWo.View.Detail.Report
{
if (tage.Contains(e.Datum))
{
res.Add(DienstInfoDC.DauerAbzueglichPause(e.DauerInStunden, e.DienstOid, _DienstProOidDict) * -1); // Abzug von Wochen-Ist // Claude: gleicher Pausenabzug wie beim Aufaddieren
res.Add(e.DauerInStunden * -1); // Abzug von Wochen-Ist
//_DienstplanerRootObj.MonatsZusammenfassung // Abzug von Monats-Ist
// .First(z => z.Employee.EmployeeOid == e.EmployeeOid).Ist -= Convert.ToDecimal(e.DauerInStunden);
}
@@ -2143,7 +2132,7 @@ namespace BeWo.View.Detail.Report
{
if (tage.Contains(v.Datum))
{
res.Add(DienstInfoDC.DauerAbzueglichPause(v.DauerInStunden, v.DienstOid, _DienstProOidDict) * -1); // Abzug von Wochen-Ist // Claude: gleicher Pausenabzug wie beim Aufaddieren
res.Add(v.DauerInStunden * -1); // Abzug von Wochen-Ist
//_DienstplanerRootObj.MonatsZusammenfassung // Abzug von Monats-Ist
// .First(z => z.Employee.EmployeeOid == v.EmployeeOid).Ist -= Convert.ToDecimal(v.DauerInStunden);
}
@@ -2248,9 +2237,6 @@ 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;
}
@@ -2586,10 +2572,6 @@ 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)
@@ -2602,13 +2584,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += dauerEintrag; // Claude: Dauer abzüglich Pause
item.Saldo += dauerEintrag;
item.Ist += Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo += Convert.ToDecimal(eintrag.DauerInStunden);
}
else
{
item.Ist -= dauerEintrag;
item.Saldo -= dauerEintrag;
item.Ist -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo -= Convert.ToDecimal(eintrag.DauerInStunden);
}
}
@@ -2625,13 +2607,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += dauerVertretung; // Claude: Dauer abzüglich Pause
item.Saldo += dauerVertretung;
item.Ist += Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo += Convert.ToDecimal(vertretung.DauerInStunden);
}
else
{
item.Ist -= dauerVertretung;
item.Saldo -= dauerVertretung;
item.Ist -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo -= Convert.ToDecimal(vertretung.DauerInStunden);
}
}
}
@@ -2649,13 +2631,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += dauerEintrag; // Claude: Dauer abzüglich Pause
item.Saldo += dauerEintrag;
item.Ist += Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo += Convert.ToDecimal(eintrag.DauerInStunden);
}
else
{
item.Ist -= dauerEintrag;
item.Saldo -= dauerEintrag;
item.Ist -= Convert.ToDecimal(eintrag.DauerInStunden);
item.Saldo -= Convert.ToDecimal(eintrag.DauerInStunden);
}
}
@@ -2669,13 +2651,13 @@ namespace BeWo.View.Detail.Report
{
if (plus)
{
item.Ist += dauerVertretung; // Claude: Dauer abzüglich Pause
item.Saldo += dauerVertretung;
item.Ist += Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo += Convert.ToDecimal(vertretung.DauerInStunden);
}
else
{
item.Ist -= dauerVertretung;
item.Saldo -= dauerVertretung;
item.Ist -= Convert.ToDecimal(vertretung.DauerInStunden);
item.Saldo -= Convert.ToDecimal(vertretung.DauerInStunden);
}
}
}

View File

@@ -14,7 +14,6 @@ using BeWo.ServiceProxy;
using BeWo.ViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit;

View File

@@ -1757,15 +1757,10 @@ 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 = height,
Height = this.Height,
Width = 1000,
MinWidth = 550,
WindowStartupLocation = WindowStartupLocation.CenterOwner,

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;
@@ -71,7 +70,7 @@ namespace BeWo.View.Detail
urlaubskonto = new List<UrlaubskontoDarstellungDC>();
urlaubskonto.Add(new UrlaubskontoDarstellungDC()
{
Erlaeuterung = "Es existiert kein Vertrag für das ausgewählte Jahr",
Erlaeuterung = "Es existiert kein Vertrag für ausgewähltes Jahr",
});
button_openLeaveDayDialogue.Visibility = Visibility.Collapsed;
}

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;

View File

@@ -5,7 +5,6 @@ using BeWo.ServiceProxy;
using BeWo.Validation;
using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared.Core;
using BS.Shared.DataContracts;
namespace BeWo.View.Detail.Zeiterfassung

View File

@@ -1738,7 +1738,7 @@
<ai1:VoiceToTextButtonControl
Margin="6,0,0,0"
Margin="12,0,0,0"
TargetTextBox="{Binding ElementName=dokumentationsTextBox}"
ToolTip="Spracheingabe und Transkription starten" />
</StackPanel>
@@ -2655,7 +2655,7 @@
Width="70"
AllowEditing="False"
FieldName="HatUnterschriftImage"
Header="Einzelunterschrift"
Header="Unterschrift"
IsEnabled="False"
Visible="False">
<dxg:GridColumn.EditSettings>

View File

@@ -2314,7 +2314,6 @@ namespace BeWo.View.Detail.Zeiterfassung
if (ViewModel != null)
{
ViewModel.IsGroupBooking = true;
ViewModel.IsMultiBooking = false;
}
supportConceptSelectionControl.Visibility = Visibility.Collapsed;
@@ -2342,11 +2341,6 @@ 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)
@@ -2389,7 +2383,6 @@ namespace BeWo.View.Detail.Zeiterfassung
if (ViewModel != null)
{
ViewModel.IsMultiBooking = true;
ViewModel.IsGroupBooking = false;
}
supportConceptSelectionControl.Visibility = Visibility.Collapsed;
@@ -2416,10 +2409,6 @@ 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)
@@ -2481,26 +2470,6 @@ 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)
@@ -2529,8 +2498,6 @@ namespace BeWo.View.Detail.Zeiterfassung
}
SetRebookingButtonVisibility();
RevalidateNotice(); // Claude
}
//CB EINKOMMENTIEREN

View File

@@ -53,6 +53,164 @@
Text="{Binding LogicalFocus}" />
</Grid>
</TabItem>
<TabItem Header="Tests">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.Resources>
<ResourceDictionary>
<Style TargetType="{x:Type ContentControl}">
<Setter Property="Height" Value="24" />
<Setter Property="Margin" Value="3" />
</Style>
</ResourceDictionary>
</Grid.Resources>
<Label Grid.Row="0">AiDesignsIconKIChatSchwarz2026</Label>
<ContentControl
Grid.Row="0"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatSchwarz2026}" />
<Button
Grid.Row="0"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatSchwarz2026}" />
<Label Grid.Row="1">AiDesignsIconKIChatSchwarzOrange2026</Label>
<ContentControl
Grid.Row="1"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatSchwarzOrange2026}" />
<Button
Grid.Row="1"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatSchwarzOrange2026}" />
<Label Grid.Row="2">AiDesignsIconKIChatWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="2" Grid.Column="2"/>
<ContentControl
Grid.Row="2"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatWeiss2026}" />
<Button
Grid.Row="2"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatWeiss2026}" />
<Label Grid.Row="3">AiDesignsIconKIChatWeissOrange2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="3" Grid.Column="2"/>
<ContentControl
Grid.Row="3"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIChatWeissOrange2026}" />
<Button
Grid.Row="3"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIChatWeissOrange2026}" />
<Label Grid.Row="4">AiDesignsIconKIFunktionSchwarz2026</Label>
<ContentControl
Grid.Row="4"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionSchwarz2026}" />
<Button
Grid.Row="4"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionSchwarz2026}" />
<Label Grid.Row="5">AiDesignsIconKIFunktionSchwarzGruen2026</Label>
<ContentControl
Grid.Row="5"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionSchwarzGruen2026}" />
<Button
Grid.Row="5"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionSchwarzGruen2026}" />
<Label Grid.Row="6">AiDesignsIconKIFunktionWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="6" Grid.Column="2"/>
<ContentControl
Grid.Row="6"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionWeiss2026}" />
<Button
Grid.Row="6"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionWeiss2026}" />
<Label Grid.Row="7">AiDesignsIconKIFunktionWeissGruen2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="7" Grid.Column="2"/>
<ContentControl
Grid.Row="7"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen2026}" />
<Button
Grid.Row="7"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIFunktionWeissGruen2026}" />
<Label Grid.Row="8">AiDesignsIconKIRefreshSchwarz2026</Label>
<ContentControl
Grid.Row="8"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshSchwarz2026}" />
<Button
Grid.Row="8"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshSchwarz2026}" />
<Label Grid.Row="9">AiDesignsIconKIRefreshSchwarzOrange2026</Label>
<ContentControl
Grid.Row="9"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshSchwarzOrange2026}" />
<Button
Grid.Row="9"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshSchwarzOrange2026}" />
<Label Grid.Row="10">AiDesignsIconKIRefreshWeiss2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="10" Grid.Column="2"/>
<ContentControl
Grid.Row="10"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshWeiss2026}" />
<Button
Grid.Row="10"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshWeiss2026}" />
<Label Grid.Row="11">AiDesignsIconKIRefreshWeissOrange2026</Label>
<Rectangle Fill="DarkGray" Grid.Row="11" Grid.Column="2"/>
<ContentControl
Grid.Row="11"
Grid.Column="2"
Content="{StaticResource AiDesignsIconKIRefreshWeissOrange2026}" />
<Button
Grid.Row="11"
Grid.Column="4"
Content="{StaticResource AiDesignsIconKIRefreshWeissOrange2026}" />
</Grid>
</TabItem>
<TabItem Header="Logs" />
<TabItem Header="Configs" />
</TabControl>

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.Services;
using BS.Shared.Translation;
using DevExpress.Xpf.RichEdit;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;

View File

@@ -16,7 +16,6 @@ using BeWo.ViewModel;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;

View File

@@ -15,7 +15,6 @@ using BeWo.Core.Service;
using BS.Shared;
using BS.Shared.Extensions;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Services;
using BS.Shared.Translation;

View File

@@ -8,7 +8,6 @@ using System;
using System.Linq;
using System.Windows.Media.Imaging;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.Extensions;
using BeWo.View.Navigation.Sorter;
using BS.Shared.DataContracts.Compact;

View File

@@ -41,7 +41,7 @@
x:FieldModifier="public"
MouseDoubleClick="RootGroupBox_OnMouseDoubleClick"
MouseLeftButtonDown="RootGroupBox_OnMouseLeftButtonDown"
Style="{DynamicResource PopUpWindowStyle}">
Style="{DynamicResource PopUpWindowStyle2}">
<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

@@ -8,7 +8,6 @@ namespace BeWo.ViewModel
{
public class AiConversationMessageVM : AbstractDCMapperVM<AiConversationMessageDC>
{
private bool _IsChecked;
private string _Message;
public AiConversationMessageVM(AiConversationMessageDC dc) : base(dc, dc.Oid is null)
@@ -16,22 +15,6 @@ namespace BeWo.ViewModel
}
public event EventHandler IsCheckedChanged;
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (!AreDifferent(IsChecked, value))
return;
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
IsCheckedChanged?.Invoke(this, EventArgs.Empty);
}
}
public string Message
{
get { return _Message; }
@@ -51,6 +34,31 @@ namespace BeWo.ViewModel
public int Duration => DataContract.Duration ?? 0;
public string DurationSec => ((double)Duration / 1000).ToString("0.#");
public DateTime Created => DataContract.Created;
public bool ShowMessage => DataContract.ShowMessage;
public string UsedPromptbausteinTitle => DataContract.UsedPromptbausteinTitle;
/// <summary>True, wenn die Nachricht mittels Promptbaustein erstellt wurde (Titel gecacht).</summary>
public bool HasUsedPromptbaustein => !string.IsNullOrWhiteSpace(UsedPromptbausteinTitle);
/// <summary>Steuert, ob der Prompt ausklappbar ist. False => Button disabled + Tooltip "Versteckt".</summary>
public bool ShowPrompt => DataContract.ShowPrompt;
/// <summary>Prompt-Text des verwendeten Promptbausteins (nur befüllt, wenn ShowPrompt true).</summary>
public string UsedPromptbausteinContent => DataContract.UsedPromptbausteinContent;
/// <summary>Hilfe-Link (OwnsoftRefLink) des verwendeten Ownsoft-Promptbausteins, sonst null.</summary>
public string OwnsoftRefLink => DataContract.OwnsoftRefLink;
/// <summary>Steuert, ob der (i)-Hilfe-Link neben der Nachricht angezeigt wird (vgl. AiPromptbausteinPromptVM.IsInfoVisible).</summary>
public bool IsInfoVisible => !string.IsNullOrWhiteSpace(OwnsoftRefLink);
/// <summary>Schrittnummer innerhalb der Routine (0-basiert), sonst null.</summary>
public int? StepCount => DataContract.StepCount;
/// <summary>Platzhalter für ausgeblendete Nachrichten: Promptbaustein-Titel, sonst Standardtext.</summary>
public string HiddenMessageText => string.IsNullOrWhiteSpace(UsedPromptbausteinTitle)
? "Nachricht ausgeblendet"
: UsedPromptbausteinTitle;
protected override void InitByDataContract(AiConversationMessageDC pDataContract)
{
@@ -63,11 +71,5 @@ namespace BeWo.ViewModel
return pDataContract;
}
public void SetIsChecked(bool value)
{
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
}
}
}

View File

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

View File

@@ -7,7 +7,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;

View File

@@ -156,11 +156,9 @@ 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

@@ -7,7 +7,6 @@ using BS.Shared.DataContracts;
using BS.Shared.Extensions;
using System.Collections.Generic;
using BS.Shared.Core;
using System.Windows;
namespace BeWo.ViewModel

View File

@@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace BeWo.ViewModel.Controls.AI
{
@@ -29,6 +30,7 @@ namespace BeWo.ViewModel.Controls.AI
private AiChatButtonState buttonState;
public AiActionType ActionType { get; protected set; }
public string TooltipName { get; set; }
public bool IsFavoritenOpen { get; set; }
public List<AiMenuItemTemplate> AssistentCommands { get; protected set; }
@@ -57,6 +59,7 @@ namespace BeWo.ViewModel.Controls.AI
return;
FirePropertyChanged(nameof(IsContextSizeTooBig));
FirePropertyChanged(nameof(IsLoading));
FirePropertyChanged(nameof(CanSendNewMessage));
FirePropertyChanged(nameof(CanOpenConversation));
@@ -73,6 +76,7 @@ namespace BeWo.ViewModel.Controls.AI
public DelegateCommand OpenFavoritePromptsPopupCommand { get; protected set; }
public bool IsContextSizeTooBig => ButtonState == AiChatButtonState.Warning;
public bool IsLoading => ButtonState == AiChatButtonState.Loading;
public virtual bool CanSendNewMessage => ButtonState == AiChatButtonState.Normal;
public bool CanOpenConversation => ButtonState == AiChatButtonState.Normal || ButtonState == AiChatButtonState.Warning;
@@ -91,6 +95,26 @@ namespace BeWo.ViewModel.Controls.AI
OpenFavoritePromptsPopupCommand = new DelegateCommand(OpenFavoritePromptsPopup, () => CanSendNewMessage);
ButtonState = AiChatButtonState.Loading;
LoadModuleName();
}
public void LoadModuleName()
{
switch (ActionType)
{
case AiActionType.ServiceRecord:
TooltipName = "KI Zeiterfassung";
break;
case AiActionType.ServiceRecordConversation:
TooltipName = "Zeiterfassung";
break;
case AiActionType.ServiceRecordDocumentation:
TooltipName = "Dokumentationstext";
break;
default:
break;
}
}
public void CheckContextSize()
@@ -119,7 +143,8 @@ namespace BeWo.ViewModel.Controls.AI
else
ButtonState = AiChatButtonState.Warning;
},
(exp) => ButtonState = AiChatButtonState.Disabled);
(exp) => ButtonState = AiChatButtonState.Disabled,
false);
}
}
@@ -200,8 +225,13 @@ namespace BeWo.ViewModel.Controls.AI
public class AiMenuItemTemplate
{
public string Icon { get; set; }
public Geometry Icon { get; set; }
public string Name { get; set; }
public DelegateCommand<AiConversationMessageVM> Command { get; set; }
public AiMenuItemTemplate()
{
}
}
}

View File

@@ -7,6 +7,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
namespace BeWo.ViewModel.Controls.AI
{
@@ -54,13 +56,13 @@ namespace BeWo.ViewModel.Controls.AI
new AiMenuItemTemplate()
{
Command = new DelegateCommand<AiConversationMessageVM>(x => AddValue(x.Message)),
Icon = null,
Icon = Application.Current.FindResource("Phosphor.RowsPlusTop") as Geometry,
Name = "Anfügen"
},
new AiMenuItemTemplate()
{
Command = new DelegateCommand<AiConversationMessageVM>(x => ReplaceValue(x.Message)),
Icon = null,
Icon = Application.Current.FindResource("Phosphor.Swap") as Geometry,
Name = "Ersetzen"
},
};

View File

@@ -1,5 +1,4 @@
using BeWo.Validation;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;

View File

@@ -1,5 +1,4 @@
using BeWo.ViewModel.Wohnhilfe;
using BS.Shared.Core;
using BS.Shared.DataContracts.Wohnhilfe;
using DevExpress.Mvvm;
using System;

View File

@@ -1,5 +1,4 @@
using BeWo.Validation;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;

View File

@@ -8,7 +8,6 @@ using BeWo.Core;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions;

View File

@@ -5,7 +5,6 @@ using BeWo.Validation;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.Extensions;

View File

@@ -8,7 +8,6 @@ using BeWo.Core;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.DataContracts.Light;
using BS.Shared.Extensions;
@@ -26,8 +25,6 @@ namespace BeWo.ViewModel.Light
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long _Oid;
private long _Version;
private string _Notice;
private long _OrganisationOid;
@@ -118,31 +115,11 @@ namespace BeWo.ViewModel.Light
public DateTime ErstelltAmDate => ErstelltAm.Date;
public long 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));
}
}
get => DataContract.Oid;
}
public long 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));
}
}
get => DataContract.Version;
}
public string Notice
{
@@ -352,7 +329,7 @@ namespace BeWo.ViewModel.Light
public override void UpdateByDataContract(GkvAbrechnungLightDC pDataContract)
{
Version = pDataContract.Version;
DataContract = pDataContract;
Notice = pDataContract.Notice;
@@ -373,9 +350,6 @@ namespace BeWo.ViewModel.Light
_ErstelltAm = pDataContract.ErstelltAm;
_Oid = pDataContract.Oid;
_Version = pDataContract.Version;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
@@ -402,8 +376,6 @@ namespace BeWo.ViewModel.Light
}
protected override GkvAbrechnungLightDC MapToDataContract(GkvAbrechnungLightDC pDataContract, bool doCommit)
{
pDataContract.Version = _Version;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
@@ -421,7 +393,6 @@ namespace BeWo.ViewModel.Light
return;
}
Version = dc.Version;
Protokolle = dc.Protokolle.ToList();
IsReady2Send = dc.IsReady2Send;

View File

@@ -2,7 +2,6 @@
using BeWo.Core.Commands;
using BeWo.ServiceProxy;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts.Feature.AI;
using BS.Shared.Extensions;
using ChatController.Utilities.Extensions;
@@ -59,7 +58,8 @@ namespace BeWo.ViewModel.ListViewModel
{
Created = DateTime.Now,
Message = "N. Dies ist eine Design Frage: Du sollst ganz viele Sachen machen. Dabei sollst du auf ganz viele Sachen achten: Zum Beispiel:\r\nSache 1\r\nSchritt 2",
Role = BS.Shared.AiConversationMessageRole.User
Role = BS.Shared.AiConversationMessageRole.User,
ShowMessage = true
};
var message_dc3 = new AiConversationMessageDC()

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