From b4b1c24f31ef60966edca0e302ba7e030604cfb7 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 25 Jun 2026 01:55:28 +0200 Subject: [PATCH] Ki Promptbausteine in Mok integriert V0.1 log4net und System.Runtime.CompilerServices.Unsafe.dll aktualisiert --- BeWoPlanerMobil/BeWoPlanerMobil.csproj | 5 +- .../images/Icon_KI_Funktion_Weiss+Gruen.png | Bin 0 -> 8989 bytes .../Content/images/Icon_KI_Funktion_Weiss.png | Bin 0 -> 8846 bytes .../Controllers/AbstractBaseController.cs | 18 +- BeWoPlanerMobil/Controllers/MainController.cs | 156 ++++++++++++++++++ BeWoPlanerMobil/Models/AbstractModel.cs | 2 + .../Service/MobileSessionFacade.cs | 8 +- BeWoPlanerMobil/Web.config | 4 +- ...System.Runtime.CompilerServices.Unsafe.dll | Bin 18024 -> 19256 bytes Lib/log4net.dll | Bin 270336 -> 296448 bytes .../OperationsServiceImp.cs | 2 +- 11 files changed, 181 insertions(+), 14 deletions(-) create mode 100644 BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss+Gruen.png create mode 100644 BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss.png diff --git a/BeWoPlanerMobil/BeWoPlanerMobil.csproj b/BeWoPlanerMobil/BeWoPlanerMobil.csproj index 5c7de565b..19c62cd72 100644 --- a/BeWoPlanerMobil/BeWoPlanerMobil.csproj +++ b/BeWoPlanerMobil/BeWoPlanerMobil.csproj @@ -186,7 +186,8 @@ ..\packages\EntityFramework.6.5.1\lib\net45\EntityFramework.SqlServer.dll - ..\packages\log4net.3.1.0\lib\net462\log4net.dll + False + ..\Lib\log4net.dll ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\lib\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll @@ -237,7 +238,7 @@ ..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll - + False ..\Lib\System.Runtime.CompilerServices.Unsafe.dll diff --git a/BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss+Gruen.png b/BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss+Gruen.png new file mode 100644 index 0000000000000000000000000000000000000000..597cdace29d706acac515f18af2b6c35dfd020a5 GIT binary patch literal 8989 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 literal 0 HcmV?d00001 diff --git a/BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss.png b/BeWoPlanerMobil/Content/images/Icon_KI_Funktion_Weiss.png new file mode 100644 index 0000000000000000000000000000000000000000..fce0f9288472d42e8506724940ac7fbca578a95e GIT binary patch literal 8846 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 B!Ycp( literal 0 HcmV?d00001 diff --git a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs index 83b106271..a7113251d 100644 --- a/BeWoPlanerMobil/Controllers/AbstractBaseController.cs +++ b/BeWoPlanerMobil/Controllers/AbstractBaseController.cs @@ -1,23 +1,24 @@ -using System; -using System.Diagnostics; -using System.Web.Mvc; -using System.Web.Security; -using BeWo.Data.Access; +using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.DCEntityMapper; using BeWo.Service.ServiceContracts; +using BeWo.Service.ServiceContracts.Enhanced; using BeWoPlanerMobil.Models; using BeWoPlanerMobil.Service; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using ReportingService.ServiceContracts; +using System; +using System.Diagnostics; +using System.Web.Mvc; +using System.Web.Security; namespace BeWoPlanerMobil.Controllers { public abstract class AbstractBaseController : Controller - { - protected readonly ICustomerService CustomerService = new MobileSessionFacade().CustomerService; + { + protected readonly ICustomerService CustomerService = new MobileSessionFacade().CustomerService; protected readonly IOperationsService OperationsService = new MobileSessionFacade().OperationsService; protected readonly IEmployeeService EmployeeService = new MobileSessionFacade().EmployeeService; protected readonly IValueListService ValueListService = new MobileSessionFacade().ValueListService; @@ -26,7 +27,8 @@ namespace BeWoPlanerMobil.Controllers protected readonly IDownloadService DownloadService = new MobileSessionFacade().DownloadService; protected readonly IReportService ReportService = new MobileSessionFacade().ReportService; protected readonly IQueryService QueryService = new MobileSessionFacade().QueryService; - + protected readonly IAiEnhancedService AiService = new MobileSessionFacade().AiService; + protected const string LeerzeichenFuerGetMethoden = " "; protected static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); diff --git a/BeWoPlanerMobil/Controllers/MainController.cs b/BeWoPlanerMobil/Controllers/MainController.cs index 303bbeb93..c0de2bbf8 100644 --- a/BeWoPlanerMobil/Controllers/MainController.cs +++ b/BeWoPlanerMobil/Controllers/MainController.cs @@ -11,6 +11,7 @@ using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; +using BS.Shared.DataContracts.Feature.AI; using BS.Shared.Extensions; using BS.Shared.Services; using DevExpress.Utils.Extensions; @@ -316,8 +317,163 @@ namespace BeWoPlanerMobil.Controllers } } + [HttpGet] + [Authorize] + public ActionResult GetAiPromptbausteinFolder() + { + try + { + var folders = AiService.GetAiPromptbausteinFolder(AiActionType.ServiceRecordDocumentation).ToList(); + AddFavoriten(folders); + var projected = ProjectAiFolders(folders); + + return new JsonResult + { + Data = projected, + JsonRequestBehavior = JsonRequestBehavior.AllowGet, + MaxJsonLength = int.MaxValue + }; + } + catch (Exception ex) + { + Response.StatusCode = 500; + Response.TrySkipIisCustomErrors = true; + return Json(new + { + error = ex.GetType().Name, + message = ex.Message, + inner = ex.InnerException?.Message, + stack = ex.StackTrace + }, JsonRequestBehavior.AllowGet); + } + } + + [HttpPost] + [Authorize] + public ActionResult StartPrompt(long promptOid) + { + try + { + var conv = new AiConversationDC + { + Created = DateTime.Now, + Updated = DateTime.Now, + ActionType = AiActionType.ServiceRecordDocumentation + }; + + AiViewContextDC viewContext = CreateViewContext(); + + conv = AiService.CreateAiConversation(conv, viewContext); + + var messages = AiService.ExecuteAiConversationWithPrompt(conv.Oid.Value, viewContext, promptOid); + + // Die generierte Dokumentation ist die letzte Assistent-Nachricht. + var resultMessage = (messages ?? new AiConversationMessageDC[0]) + .LastOrDefault(m => m.Role == AiConversationMessageRole.Assistent) + ?? (messages ?? new AiConversationMessageDC[0]).LastOrDefault(); + + return Json(new + { + success = true, + text = resultMessage?.Message ?? string.Empty + }); + } + catch (Exception ex) + { + Log.Error("StartPrompt fehlgeschlagen", ex); + Response.StatusCode = 500; + Response.TrySkipIisCustomErrors = true; + return Json(new + { + success = false, + error = ex.GetType().Name, + message = ex.Message, + inner = ex.InnerException?.Message + }); + } + } + + /// + /// Baut den AI-Kontext für die aktuell bearbeitete Einzelbuchung auf: + /// Primary = ausgewähltes Betreuungskonzept, Secondary = aktueller Dokumentationstext. + /// + private AiViewContextDC CreateViewContext() + { + return new AiViewContextDC + { + Primary = Model.SelectedSupportConceptOid, + Secondary = Model.NoticeToEdit + }; + } + + private void AddFavoriten(List folders) + { + var favoriten = new AiPromptbausteinFolderDC() + { + Oid = -5, + Title = "Favoriten", + Description = "Eigene Favoriten", + SubPrompts = new List() + }; + + AddFavoritenPrompts(folders, favoriten); + + folders.Insert(0, favoriten); + + } + + private void AddFavoritenPrompts(List folders, AiPromptbausteinFolderDC favoriten) + { + foreach (var folder in folders) + { + + if (folder.SubFolders?.Any() ?? false) + AddFavoritenPrompts(folder.SubFolders, favoriten); + + foreach (var prompt in folder.SubPrompts) + { + if (prompt.IsFavorite) + favoriten.SubPrompts.Add(prompt); + } + + //foreach (var routine in folder.SubRoutines.VMList) + //{ + // if (routine.IsFavorite) + // favoriten.SubRoutines.VMList.Add(routine); + //} + } + } + + /// + /// Projiziert die AiPromptbausteinFolderDC-Baumstruktur auf ein schlankes, + /// zirkelbezugsfreies Objekt für die JSON-Serialisierung an das UI. + /// + private List ProjectAiFolders(List folders) + { + if (folders == null) + { + return new List(); + } + + return folders.Select(f => (object)new + { + f.Title, + f.Description, + SubFolders = ProjectAiFolders(f.SubFolders), + SubPrompts = (f.SubPrompts ?? new List()) + .Select(p => new + { + p.Oid, + p.Title, + p.Description, + p.Prompt + }).ToList() + }).ToList(); + } + private void InitSettings() { + //Mandator Settings Model.ShowBetrag = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowBetrag); Model.ShowMarker = UserSettingsUtils.GetSettingValueAsBool(Model.Mandator.Settings, SettingsKeys.ShowMarker); diff --git a/BeWoPlanerMobil/Models/AbstractModel.cs b/BeWoPlanerMobil/Models/AbstractModel.cs index 519a69624..941e2d2e8 100644 --- a/BeWoPlanerMobil/Models/AbstractModel.cs +++ b/BeWoPlanerMobil/Models/AbstractModel.cs @@ -60,6 +60,8 @@ namespace BeWoPlanerMobil.Models public bool HasRightToInsertRessourceAppointments => CheckRight(UserRightType.KalenderRessourcentermineAnlegen) || CheckRight(UserRightType.CreateAll); + public bool HasRightToSeeAiPromptsInZeiterfassung => CheckRight(UserRightType.AiModulePromptbausteineView) && CheckRight(UserRightType.AiModuleServiceRecordDocu); + public bool HasRightToUseAiVoice { get diff --git a/BeWoPlanerMobil/Service/MobileSessionFacade.cs b/BeWoPlanerMobil/Service/MobileSessionFacade.cs index 50ff3d2c9..cd27e8d2a 100644 --- a/BeWoPlanerMobil/Service/MobileSessionFacade.cs +++ b/BeWoPlanerMobil/Service/MobileSessionFacade.cs @@ -1,9 +1,11 @@ -using System.Web; -using BeWo.Service.ServiceContracts; +using BeWo.Service.ServiceContracts; +using BeWo.Service.ServiceContracts.Enhanced; using BeWo.Service.ServiceImplementations; +using BeWo.Service.ServiceImplementations.Enhanced; using BeWoPlanerMobil.Models; using ReportingService.ServiceContracts; using ReportingService.ServiceImplementations; +using System.Web; namespace BeWoPlanerMobil.Service { @@ -21,6 +23,7 @@ namespace BeWoPlanerMobil.Service DownloadService = new DownloadServiceImp(); ReportService = new ReportServiceImp(); QueryService = new QueryServiceImp(); + AiService = new AiEnhancedServiceImp(); } public ICustomerService CustomerService { get; } @@ -33,6 +36,7 @@ namespace BeWoPlanerMobil.Service public IDownloadService DownloadService { get; } public IReportService ReportService { get; } public IQueryService QueryService { get; } + public IAiEnhancedService AiService { get; } public static long? LoggedInUserOid { diff --git a/BeWoPlanerMobil/Web.config b/BeWoPlanerMobil/Web.config index 43f171232..35b21d985 100644 --- a/BeWoPlanerMobil/Web.config +++ b/BeWoPlanerMobil/Web.config @@ -170,6 +170,8 @@ + +