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`;