Files
BeWoPlaner/BeWo/ownChat/ChatView.xaml.cs

283 lines
10 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.ComponentModel;
2017-12-17 17:29:07 +01:00
using System.Linq;
using System.Text;
using System.Windows;
2017-10-06 12:06:34 +02:00
using System.Windows.Forms;
using System.Windows.Input;
2017-12-17 17:29:07 +01:00
using BeWo.Core.Service;
using BeWo.ServiceProxy;
2017-12-17 17:29:07 +01:00
using BeWo.ViewModel;
using BS.Shared.DataContracts.Compact;
2017-12-17 17:29:07 +01:00
using BS.Shared.Extensions;
using BS.Shared.Translation;
using ChatController.ChatKlassen;
using ChatController.LoginKlassen;
2017-10-06 12:06:34 +02:00
using Button = System.Windows.Controls.Button;
using MessageBox = System.Windows.MessageBox;
namespace BeWo.ownChat
{
2017-12-12 17:20:23 -04:00
public partial class ChatView
{
2020-04-14 11:49:16 +02:00
public ChatEmojiView EmojiView { get; set; }
public ChatView(ChatDatenUebergabe chatDaten)
{
InitializeComponent();
CloseWindow();
ChatMainControl.InitMitChatdaten(chatDaten);
ChatMainControl.AddContextMenu("In Dokumentation übernehmen", ChatMainControl_OnClickContextMenuItem);
2017-10-06 12:06:34 +02:00
2017-11-09 12:18:50 +01:00
LadeMessageInfoAusDatenBank();
}
private void RootGroupBox_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
try
{
DragMove();
}
2020-04-14 11:49:16 +02:00
catch (Exception)
{
}
}
private void CloseWindow()
{
CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, (s, e) =>
{
HideWindowsAndSaveMessageInfo();
}));
}
private void HideWindowsAndSaveMessageInfo()
{
Visibility = Visibility.Hidden;
2020-04-14 11:49:16 +02:00
EmojiView?.Close();
SpeichereMessageInfosInDatenBank();
}
private void ChatMainControl_OnOnEmoji(Button emojiButton)
{
if(EmojiView is null)
{
2020-04-14 11:49:16 +02:00
EmojiView = new ChatEmojiView(ChatMainControl);
var x = emojiButton.PointToScreen(new Point(0, 0));
2017-12-12 17:20:23 -04:00
var source = PresentationSource.FromVisual(emojiButton);
if(!(source is null))
{
EmojiView.Top = x.Y / source.CompositionTarget.TransformToDevice.M22 - EmojiView.Height - 5;
EmojiView.Left = x.X / source.CompositionTarget.TransformToDevice.M11;
}
2020-04-14 11:49:16 +02:00
EmojiView.Show();
}
else
{
2020-04-14 11:49:16 +02:00
EmojiView.Close();
EmojiView = null;
2020-04-14 11:49:16 +02:00
EmojiView = new ChatEmojiView(ChatMainControl);
2017-12-12 17:20:23 -04:00
var x = emojiButton.PointToScreen(new Point(0, 0));
var source = PresentationSource.FromVisual(emojiButton);
if(!(source is null))
{
EmojiView.Top = x.Y / source.CompositionTarget.TransformToDevice.M22 - EmojiView.Height - 5;
EmojiView.Left = x.X / source.CompositionTarget.TransformToDevice.M11;
}
2020-04-14 11:49:16 +02:00
EmojiView.Show();
}
}
// TODO: Für Mitarbeiter implementieren
2017-12-12 17:20:23 -04:00
private void ChatMainControl_OnClickContextMenuItem(string menuItem)
{
2021-04-06 08:06:51 +02:00
var selectedContact = ChatMainControl.GetCurrentContactWithUserIdManage();
if (selectedContact != null)
{
var itemListe = ChatMainControl.GetSelectedMessages();
if (itemListe != null)
2017-12-17 17:29:07 +01:00
{
// TODO: Mike fragen
// Z.B. "C5" -> alles nach dem C bei Klienten
if(!string.IsNullOrEmpty(selectedContact.UserIdManage))
{
var rawCustomerOid = selectedContact.UserIdManage.Substring(1);
var customerOid = long.Parse(rawCustomerOid);
ServiceFacade.DoCustomerServiceAsync(s => s.GetCompactCustomerDC(customerOid), compactCustomer =>
{
if(compactCustomer == null)
{
MessageBox.Show("Der/die ausgewählte Klient/in wurde nicht gefunden.", "Dokumentieren nicht möglich", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
this.Dispatch(delegate
{
OpenServiceRecordEditView(itemListe, compactCustomer);
});
});
}
}
else
{
MessageBox.Show("Bitte Nachricht auswählen", "Nachricht auswählen", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
else
{
2017-12-15 10:47:43 +01:00
MessageBox.Show("Es können nur Nachrichten von KlientInnen dokumentiert werden.", "Dokumentieren nicht möglich", MessageBoxButton.OK, MessageBoxImage.Exclamation);
2017-12-17 17:29:07 +01:00
}
}
private void OpenServiceRecordEditView(List<ChatMessage> messages, CompactCustomerDC compactCustomer)
{
messages.Sort((a, b) => a.SendTime.CompareTo(b.SendTime));
2020-04-14 11:49:16 +02:00
var stringBuilder = new StringBuilder();
2017-12-17 17:29:07 +01:00
foreach (var m in messages)
{
2020-04-14 11:49:16 +02:00
if (stringBuilder.Length > 0)
2017-12-17 17:29:07 +01:00
{
2020-04-14 11:49:16 +02:00
stringBuilder.Append(Environment.NewLine);
2017-12-17 17:29:07 +01:00
}
2020-04-14 11:49:16 +02:00
stringBuilder.Append($"{m.SendTime:dd.MM.yyyy HH:mm} - {m.Username}: {m.UserMessage}");
2017-12-17 17:29:07 +01:00
}
2023-02-09 15:17:33 +01:00
var finalString = stringBuilder.ToString();
finalString = finalString.Replace("ẞ", "ß");
2017-12-17 17:29:07 +01:00
var firstTime = messages.Min(r =>
{
2020-04-14 11:49:16 +02:00
var dt = r.SendTime;
2017-12-17 17:29:07 +01:00
dt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0);
return dt;
});
var lastTime = messages.Max(r =>
{
2020-04-14 11:49:16 +02:00
var dt = r.SendTime;
2017-12-17 17:29:07 +01:00
dt = new DateTime(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, 0);
return dt;
});
Cache.GetInstance().GetActiveSupportConceptCostbearer(scList =>
VMFactory.CreateServiceRecordVMAsync(
BeWoApp.LoggedOnUser.Employee.EmployeeOid,
vm => this.Dispatch(
delegate
{
vm.DispatcherObject = this;
var dc = SupportConceptService.ErstelleServiceRecordDC(firstTime, lastTime, compactCustomer, scList);
if (vm.PrototypeVM.SortedCategories != null && vm.PrototypeVM.SortedCategories.Count > 0)
{
var cat1 = vm.PrototypeVM.SortedCategories[0];
dc.ServiceDescription = vm.PrototypeVM.Category2Services[cat1][0];
}
var serviceRecord = new ServiceRecordVM(dc, vm.PrototypeVM.Category2Services, vm.PrototypeVM.AllGoalCategories, vm.PrototypeVM.AllGoals)
{
Notice = finalString
};
if (serviceRecord.SupportConcept == null)
{
MessageBox.Show(
Translator.Translate("Es wurde kein passender Hilfeplan gefunden."),
"ownChat Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
return;
}
2021-09-23 18:44:18 +02:00
serviceRecord.SetInsertedOn(DateTime.Now);
serviceRecord.EditAlwaysAllowed = true;
2017-12-17 17:29:07 +01:00
var newView = new ChatDokumentationsView(vm, serviceRecord);
newView.ShowDialog();
})));
}
2017-10-06 12:06:34 +02:00
internal void Normal()
{
2020-04-14 11:49:16 +02:00
WindowState = (WindowState) FormWindowState.Normal;
2017-10-06 12:06:34 +02:00
}
internal void Maximize()
{
2020-04-14 11:49:16 +02:00
WindowState = (WindowState)FormWindowState.Maximized;
2017-10-06 12:06:34 +02:00
}
internal void Minimize()
{
2020-04-14 11:49:16 +02:00
WindowState = (WindowState)FormWindowState.Minimized;
2017-10-06 12:06:34 +02:00
}
2017-11-09 12:18:50 +01:00
private void SpeichereMessageInfosInDatenBank()
{
var liste = ChatMainControl.GetContactsWithoutUnreadMessages();
2017-11-09 12:18:50 +01:00
if(liste.Count == 0)
2017-11-09 12:18:50 +01:00
{
return;
2017-11-09 12:18:50 +01:00
}
var text = liste.Aggregate(string.Empty, (current, item) => current + item.GroupId + ";" + item.TimeStamp + ";" + "&");
ServiceFacade.DoEmployeeServiceSync(r => r.CreateOrUpdateChatBewoMessageSync(BeWoApp.LoggedOnUser.Employee.EmployeeOid,text));
2017-11-09 12:18:50 +01:00
}
private void LadeMessageInfoAusDatenBank()
{
var item = ServiceFacade.DoEmployeeServiceSync(r => r.GetChatBewoMessageSync(BeWoApp.LoggedOnUser.Employee.EmployeeOid));
if(item is null)
{
return;
}
var messageSynctext = item.MessageSyncText.Split('&');
2017-11-09 12:18:50 +01:00
var aa = new Dictionary<long, DateTime>();
2017-11-09 12:18:50 +01:00
foreach (var text in messageSynctext)
{
if(string.IsNullOrEmpty(text))
2017-11-09 12:18:50 +01:00
{
continue;
2017-11-09 12:18:50 +01:00
}
var splitten = text.Split(';');
aa.Add(Convert.ToInt64(splitten[0]), DateTime.Parse(splitten[1]));
2017-11-09 12:18:50 +01:00
}
ChatMainControl.ResetNumberOfUnreadMessages(aa);
2017-11-09 12:18:50 +01:00
}
private void ChatView_OnClosing(object sender, CancelEventArgs e)
{
HideWindowsAndSaveMessageInfo();
e.Cancel = true;
}
}
}