diff --git a/BeWo/BeWo.csproj b/BeWo/BeWo.csproj
index 4a852ab25..4dc0b1e19 100644
--- a/BeWo/BeWo.csproj
+++ b/BeWo/BeWo.csproj
@@ -237,6 +237,10 @@
Designer
MSBuild:Compile
+
+ MSBuild:Compile
+ Designer
+
Designer
MSBuild:Compile
@@ -644,6 +648,9 @@
BeWoWindow.xaml
+
+ ChatProgressBarView.xaml
+
AdditionalServiceGroupOfPeopleSelectionControl.xaml
diff --git a/BeWoChatServer/Server.cs b/BeWoChatServer/Server.cs
index 484745595..083893813 100644
--- a/BeWoChatServer/Server.cs
+++ b/BeWoChatServer/Server.cs
@@ -1,6 +1,8 @@
using System;
+using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Sockets;
@@ -49,7 +51,7 @@ namespace BeWoChatServer
}
catch (Exception e)
{
- WriteErrorMessageToConsole(e.Message, e.StackTrace);
+ WriteErrorMessageToConsole(e.Message, e.StackTrace, e);
}
}
@@ -78,7 +80,7 @@ namespace BeWoChatServer
}
catch (SocketException e)
{
- WriteErrorMessageToConsole(e.Message, e.StackTrace);
+ WriteErrorMessageToConsole(e.Message, e.StackTrace, e);
}
}
@@ -97,7 +99,7 @@ namespace BeWoChatServer
}
catch (Exception e)
{
- WriteErrorMessageToConsole(e.Message, e.StackTrace);
+ WriteErrorMessageToConsole(e.Message, e.StackTrace, e);
}
}
@@ -118,6 +120,7 @@ namespace BeWoChatServer
public static void OnReceiveData(IAsyncResult asyncResult)
{
+
var dataPacket = (Packet) asyncResult.AsyncState;
Console.WriteLine(DateTime.Now + ": Empfange Nachricht");
@@ -286,19 +289,20 @@ namespace BeWoChatServer
Monitor.Enter(_Lock);
DefaultHibernateSessionManager.CurrentTenant = dataPacket.Tenant;
-
+
var chatMessage = new ChatMessage
{
- SenderPersonOid = dataPacket.SenderPersonOid,
- ChatText = Encoding.UTF8.GetBytes(dataPacket.ChatMessage),
+ SenderPersonOid = dataPacket.SenderPersonOid,
+ ChatText = Encoding.UTF8.GetBytes(dataPacket.ChatMessage),
EmpfaengerPersonOid = dataPacket.RecipientPersonOid,
- Uhrzeit = DateTime.Now,
- InsUser = dataPacket.ClientName,
- IsDelivered = true,
- MessageId = dataPacket.MessageId
+ Uhrzeit = DateTime.Now,
+ InsUser = dataPacket.ClientName,
+ IsDelivered = true,
+ MessageId = dataPacket.MessageId
};
Console.WriteLine(DateTime.Now + ": Speichere die Chat-Nachricht in der Datenbank");
+
DAOFactory.GenericDAO.Insert(chatMessage);
if(chatMessage.Oid != null)
@@ -309,7 +313,7 @@ namespace BeWoChatServer
if(dataPacket.RecipientPersonOid > 0)
{
- if (clientList.Values.Any(a => a.PersonOid.Equals(dataPacket.RecipientPersonOid)))
+ if(clientList.Values.Any(a => a.PersonOid.Equals(dataPacket.RecipientPersonOid)))
{
var recipients = clientList.Where(w => w.Value.PersonOid.Equals(dataPacket.RecipientPersonOid));
@@ -322,11 +326,11 @@ namespace BeWoChatServer
var packet = new Packet
{
- ClientseitigeOid = dataPacket.ClientseitigeOid,
- ServerseitigeOid = dataPacket.ServerseitigeOid,
- DataIdentifier = DataIdentifier.MessageResponse,
+ ClientseitigeOid = dataPacket.ClientseitigeOid,
+ ServerseitigeOid = dataPacket.ServerseitigeOid,
+ DataIdentifier = DataIdentifier.MessageResponse,
MessageTimeStamp = chatMessage.Uhrzeit,
- MessageId = dataPacket.MessageId
+ MessageId = dataPacket.MessageId
};
Console.WriteLine(DateTime.Now + ": Sende Datenbank-Insert-Bestätigung an den Absender, damit die Nachricht später nicht doppelt auf den Client heruntergeladen wird");
@@ -506,14 +510,14 @@ namespace BeWoChatServer
}
catch(SocketException se)
{
- WriteErrorMessageToConsole(se.Message, se.StackTrace);
+ WriteErrorMessageToConsole(se.Message, se.StackTrace, se);
}
finally
{
Monitor.Exit(_Lock);
}
- WriteErrorMessageToConsole(e.Message, e.StackTrace);
+ WriteErrorMessageToConsole(e.Message, e.StackTrace, e);
}
}
@@ -528,12 +532,22 @@ namespace BeWoChatServer
}
}
- private static void WriteErrorMessageToConsole(string message, string stackTrace)
+ private static void WriteErrorMessageToConsole(string message, string stackTrace, Exception ex = null)
{
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine(DateTime.Now + ": " + message);
Console.WriteLine(stackTrace);
+
+ if(ex != null)
+ {
+ var st = new StackTrace(ex, true);
+ var frame = st.GetFrame(st.FrameCount - 1);
+ var line = frame.GetFileLineNumber();
+
+ Console.WriteLine("Zeile: " + line);
+ }
+
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.Gray;
}
diff --git a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
index dae703a33..83e64de74 100644
--- a/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
+++ b/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
@@ -73,6 +73,14 @@ namespace BeWoPlanerAndroid
return LoginFailReason.Unknown.ToString();
}
+ [WebMethod(EnableSession = true)]
+ public string LoadImageForEmployee(long pEmployeePersonOid)
+ {
+ var employee = DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pEmployeePersonOid);
+
+ return SerializeObject(employee.EmployeeThumbnail);
+ }
+
[WebMethod(EnableSession = true)]
public string TenantNochExistent()
{
@@ -143,7 +151,10 @@ namespace BeWoPlanerAndroid
var isEmployee = customer == null;
// mit den eigenen Klienten und allen anderen Mitarbeitern
- var allPersons = DAOFactory.SearchDAO.FindAllChatAuthorizedPersonsForEmployee(employee.Oid.Value).Where(w => w.Key.Oid.Value != employee.Person.Oid.Value).Select(s => new ChatPerson(s.Key.Oid.Value, s.Key.FirstNameLastName, false, null, null, s.Key.Version.Value, s.Value)).ToList();
+ var allPersons = DAOFactory.SearchDAO.FindAllChatAuthorizedPersonsForEmployee(employee.Oid.Value).Where(w => w.Key.Oid.Value != employee.Person.Oid.Value);
+
+ var allChatPersons = allPersons
+ .Select(s => new ChatPerson(s.Key.Oid.Value, s.Key.FirstNameLastName, false, null, null, s.Key.Version.Value, s.Value)).ToList();
var teams = DAOFactory.SearchDAO.FindTeamsOfEmployee(employee.Oid.Value).Where(w => w.MemberList.Count > 1);
@@ -166,10 +177,10 @@ namespace BeWoPlanerAndroid
}
}
- allPersons.Add(new ChatPerson(team.Oid.Value, team.Name, true, memberString, memberNames, team.Version.Value, false));
+ allChatPersons.Add(new ChatPerson(team.Oid.Value, team.Name, true, memberString, memberNames, team.Version.Value, false));
}
- return SerializeObject(allPersons);
+ return SerializeObject(allChatPersons);
}
private static string SerializeObject(object obj)
@@ -211,6 +222,47 @@ namespace BeWoPlanerAndroid
return JsonConvert.SerializeObject(jsonMessages);
}
+ [WebMethod(EnableSession = true)]
+ public string LoadUserImages(long pPersonOid)
+ {
+ var images = new Dictionary();
+
+ // employee oder customer laden
+ var employee = DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pPersonOid);
+ var customer = DAOFactory.SearchDAO.FindCustomerWithPersonOid(pPersonOid);
+
+ var isEmployee = customer == null;
+ // mit den eigenen Klienten und allen anderen Mitarbeitern
+
+ if(isEmployee)
+ {
+ var byteImages = DAOFactory.SearchDAO.FindImagesForChatAuthorizedPersonsForEmployee(employee.Oid.Value);
+
+ foreach(var img in byteImages)
+ {
+ images.Add(img.Key, Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(Array.ConvertAll(img.Value, b => unchecked((sbyte)b)).ToString())));
+ }
+ }
+ else
+ {
+
+ }
+
+ return SerializeObject(images);
+ }
+
+ public class ImageEntity
+ {
+ public long PersonOid { get; set; }
+
+ public sbyte[] Image { get; set; }
+
+ public ImageEntity(long pPersonOid, byte[] pImage)
+ {
+ Image = Array.ConvertAll(pImage, b => unchecked((sbyte)b));
+ }
+ }
+
public class ChatPerson
{
public long Oid { get; set; }
@@ -237,6 +289,11 @@ namespace BeWoPlanerAndroid
Version = pVersion;
IsEmployee = pIsEmployee;
}
+
+ //public void ConvertImageToSignedByteArray(byte[] image)
+ //{
+ // ImageThumbnail = Array.ConvertAll(image, b => unchecked((sbyte) b));
+ //}
}
public class ChatMessageForJson
diff --git a/Data/Access/SearchDAO.cs b/Data/Access/SearchDAO.cs
index 76e3de8f0..04e961c66 100644
--- a/Data/Access/SearchDAO.cs
+++ b/Data/Access/SearchDAO.cs
@@ -1699,6 +1699,37 @@ namespace BeWo.Data.Access
return result;
}
+ public Dictionary FindImagesForChatAuthorizedPersonsForEmployee(long pEmployeeOid)
+ {
+ var result = new Dictionary();
+
+ var employee = CreateCriteriaIsActive().Add(Restrictions.Eq(BeWoEntityBase.PropertyName_Oid, pEmployeeOid)).UniqueResult();
+
+ var relatedCustomerOids = employee.Employee2CustomerList.Select(s => s.CustomerOid.Value);
+
+ var c1 = CreateCriteriaIsActive()
+ .Add(Restrictions.Eq(CustomerAPPCode.PropertyName_IsChatAktiv, 1));
+ var codes = c1.List().Select(s => s.CustomerOid.Value).ToArray();
+ var c2 = CreateCriteriaIsActive()
+ .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, codes))
+ .Add(Restrictions.In(BeWoEntityBase.PropertyName_Oid, relatedCustomerOids.ToList()));
+
+ var customers = c2.List();
+ var employees = FindAllChatActiveEmployees();
+
+ foreach (var customer in customers.Where(w => w.CustomerImage != null))
+ {
+ result.Add(customer.Oid.Value, customer.CustomerImage);
+ }
+
+ foreach (var emp in employees.Where(w => w.EmployeeImage != null))
+ {
+ result.Add(emp.Oid.Value, emp.EmployeeImage);
+ }
+
+ return result;
+ }
+
public IEnumerable FindUnreadChatMessagesForRecipient(long pRecipientOid)
{
var c = CreateCriteriaIsActive()
diff --git a/Model/Changes_07_11_2016.txt b/Model/Changes_07_11_2016.txt
index 224a308a9..ec15bdf2e 100644
--- a/Model/Changes_07_11_2016.txt
+++ b/Model/Changes_07_11_2016.txt
@@ -1,3 +1,3 @@
-ALTER TABLE `1234567890`.`organisation`
+ALTER TABLE `organisation`
ADD COLUMN `FunctionValueListEntryOid` BIGINT(19) NULL DEFAULT NULL COMMENT '' AFTER `AccountNumber`;