206 lines
5.4 KiB
C#
206 lines
5.4 KiB
C#
using BeWo.Data.Access;
|
|
using BeWo.Data.Entities;
|
|
using BeWo.Service.DCEntityMapper;
|
|
using BS.Shared;
|
|
using DevExpress.PivotGrid.OLAP.Mdx;
|
|
using DevExpress.XtraRichEdit.Commands;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Web;
|
|
|
|
namespace BeWo.Service.ServiceUtils
|
|
{
|
|
public static class AiSystemBuilder
|
|
{
|
|
public static string CreateSystemInstructions(int uicontext, List<Tuple<long, long>> bewoobjects)
|
|
{
|
|
var system_prompt = getSystemPrompt(2);
|
|
|
|
string data = string.Empty;
|
|
switch (uicontext)
|
|
{
|
|
case 0:
|
|
break;
|
|
case 1:
|
|
break;
|
|
case 2:
|
|
break;
|
|
case 3:
|
|
break;
|
|
case 4:
|
|
break;
|
|
case 5:
|
|
break;
|
|
case 6:
|
|
break;
|
|
case 7:
|
|
break;
|
|
case 8:
|
|
break;
|
|
case 9:
|
|
break;
|
|
case 10:
|
|
break;
|
|
case 11:
|
|
break;
|
|
case 12:
|
|
break;
|
|
case 13:
|
|
break;
|
|
case 14:
|
|
break;
|
|
case 15:
|
|
break;
|
|
case 16:
|
|
break;
|
|
case 17:
|
|
break;
|
|
case 18:
|
|
break;
|
|
// Service Record
|
|
case 19:
|
|
data = createServiceRecordContext(bewoobjects);
|
|
break;
|
|
default:
|
|
throw new NotImplementedException("UI Context unknown");
|
|
}
|
|
|
|
var result = system_prompt + data;
|
|
|
|
var escape = HttpUtility.JavaScriptStringEncode(result);
|
|
|
|
return escape;
|
|
}
|
|
|
|
private static string createServiceRecordContext(List<Tuple<long, long>> bewoobjects)
|
|
{
|
|
if (bewoobjects is null || !bewoobjects.Any())
|
|
return null;
|
|
|
|
// Sortiere Liste
|
|
var sorted = getDictionary(bewoobjects);
|
|
|
|
var selected = new Dictionary<string, object>();
|
|
if (tryGetSingleValue(sorted, TableID.Customer, out long coid))
|
|
{
|
|
var customer = DAOFactory.GenericDAO.GetByID<Customer>(coid);
|
|
var customer_dc = MapperFactory.CompactCustomerDC_Customer.MapToNewDC(customer);
|
|
selected.Add("CustomerName", customer_dc.LastNameFirstName);
|
|
}
|
|
|
|
if (tryGetSingleValue(sorted, TableID.CostBearer, out long cboid))
|
|
{
|
|
var costbearer = DAOFactory.GenericDAO.GetByID<Organisation>(cboid);
|
|
var costbearer_dc = MapperFactory.CompactOrganisationDC_Organisation.MapToNewDC(costbearer);
|
|
selected.Add("CostBearerName", costbearer_dc.Name);
|
|
}
|
|
|
|
if (tryGetSingleValue(sorted, TableID.SupportConcept, out long soid))
|
|
{
|
|
var supportconcept = DAOFactory.GenericDAO.GetByID<SupportConcept>(soid);
|
|
var supportconcept_dc = MapperFactory.CompactSupportConceptDC_SupportConcept.MapToNewDC(supportconcept);
|
|
selected.Add("SupportConceptDuration", $"{supportconcept_dc.StartDate?.Date} - {supportconcept_dc.EndDate?.Date}");
|
|
}
|
|
|
|
var records = new List<Dictionary<string, object>>();
|
|
if (tryGetMultipleValues(sorted, TableID.ServiceRecord, out List<long> oids))
|
|
{
|
|
var service_records = DAOFactory.GenericDAO.GetByIDs<ServiceRecord>(oids);
|
|
var service_records_dc = MapperFactory.ServiceRecordDC_ServiceRecord.MapToNewDCs(service_records);
|
|
|
|
foreach (var service_record in service_records_dc)
|
|
{
|
|
var record_dict = new Dictionary<string, object>
|
|
{
|
|
{ "StartDate", service_record.Start },
|
|
{ "EndDate", service_record.End },
|
|
{ "Duration (Std)", service_record.DurationInStunden },
|
|
{ "ServiceCategory", service_record.ServiceDescription.Category.Name },
|
|
{ "ServiceDescription", service_record.ServiceDescription.Name },
|
|
{ "Documentation", service_record.Notice
|
|
+ "\n\n" + service_record.Notice2
|
|
+ "\n\n" + service_record.Notice3
|
|
+ "\n\n" + service_record.Notice4
|
|
+ "\n\n" + service_record.Notice5},
|
|
{ "Distance (Meter)", service_record.DistanceInMeter ?? 0 },
|
|
{ "InsertedOn", service_record.InsertedOn },
|
|
{ "Betrag", service_record.Betrag },
|
|
{ "InsertUser", service_record.InsUser },
|
|
{ "Employee", service_record.Employee }
|
|
};
|
|
records.Add(record_dict);
|
|
}
|
|
}
|
|
|
|
var dict = new Dictionary<string, object>
|
|
{
|
|
{ "Aktuelle Ansicht", "Zeiterfassung" },
|
|
{ "Selected", selected },
|
|
{ "Zeiterfassungen", records }
|
|
};
|
|
|
|
var json = JsonConvert.SerializeObject(dict);
|
|
|
|
return json;
|
|
}
|
|
|
|
private static string getSystemPrompt(int i)
|
|
{
|
|
var assembly = Assembly.GetExecutingAssembly();
|
|
var resourceName = $"BeWo.Service.AI.system_prompt{i}.txt";
|
|
|
|
using (Stream stream = assembly.GetManifestResourceStream(resourceName))
|
|
using (StreamReader reader = new StreamReader(stream))
|
|
{
|
|
string result = reader.ReadToEnd();
|
|
return result;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private static Dictionary<long, List<long>> getDictionary(List<Tuple<long, long>> tuples)
|
|
{
|
|
var seperate = new Dictionary<long, List<long>>();
|
|
foreach (var bewoobject in tuples)
|
|
{
|
|
var oid = bewoobject.Item1;
|
|
var tid = bewoobject.Item2;
|
|
|
|
if (seperate.TryGetValue(tid, out var list))
|
|
{
|
|
list.Add(oid);
|
|
}
|
|
else
|
|
{
|
|
seperate.Add(tid, new List<long>() { oid });
|
|
}
|
|
}
|
|
return seperate;
|
|
}
|
|
|
|
private static bool tryGetSingleValue(Dictionary<long, List<long>> sorted, TableID tid, out long oid)
|
|
{
|
|
oid = 0;
|
|
|
|
if (!tryGetMultipleValues(sorted, tid, out List<long> oids) || oids is null || oids.Count == 0)
|
|
return false;
|
|
|
|
oid = oids[0];
|
|
|
|
return true;
|
|
}
|
|
|
|
private static bool tryGetMultipleValues(Dictionary<long, List<long>> sorted, TableID tid, out List<long> oids)
|
|
{
|
|
return sorted.TryGetValue((long)tid, out oids);
|
|
}
|
|
}
|
|
}
|