529 lines
18 KiB
C#
529 lines
18 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.Specialized;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Web;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Controls.Primitives;
|
|
using System.Windows.Data;
|
|
using System.Windows.Documents;
|
|
using System.Windows.Input;
|
|
using System.Windows.Media;
|
|
using System.Windows.Media.Imaging;
|
|
using System.Windows.Navigation;
|
|
using System.Windows.Threading;
|
|
|
|
using BeWo.Core;
|
|
using BeWo.ViewModel;
|
|
using BeWo.ServiceProxy;
|
|
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.Extensions;
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using ChatController.ChatKlassen;
|
|
using DevExpress.Office.Utils;
|
|
using DevExpress.Pdf;
|
|
using DevExpress.Pdf.Native;
|
|
using Microsoft.Win32;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace BeWo.View
|
|
{
|
|
public partial class ChatServiceEmployee
|
|
{
|
|
|
|
private CustomerVM _ViewModel;
|
|
|
|
private long? employeeOid;
|
|
private long? personOid;
|
|
|
|
public ChatServiceEmployee(TableID pObjectTid, long? oid, long? empUserOid)
|
|
{
|
|
InitializeComponent();
|
|
|
|
employeeOid = oid;
|
|
personOid = empUserOid;
|
|
|
|
LaodInfostoView();
|
|
}
|
|
|
|
|
|
public CustomerVM PublicViewModel { get { return _ViewModel; } }
|
|
|
|
|
|
|
|
|
|
public override bool IsDirty
|
|
{
|
|
get
|
|
{
|
|
return ViewModel != null && ViewModel.IsDirty;
|
|
}
|
|
}
|
|
|
|
private CustomerVM ViewModel
|
|
{
|
|
get { return _ViewModel; }
|
|
|
|
set
|
|
{
|
|
DataContext = value;
|
|
_ViewModel = value;
|
|
}
|
|
}
|
|
|
|
private void GenerateCodeClick(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!GeneratetTexfield.Text.Equals("") && BeWoApp.Tenant != null && BeWoApp.Mandator.Apikey != null)
|
|
{
|
|
if (MessageBox.Show("Wollen Sie wirklich den Chat-Code ändern?\nAlle Daten auf Mobilgeräte werden gelöscht.", "Achtung", MessageBoxButton.YesNo,
|
|
MessageBoxImage.Question) == MessageBoxResult.Yes)
|
|
{
|
|
StartWaiting();
|
|
var result = ServiceFacade.DoOperationsServiceSync(s => s.CreateNewEmployeeAPPCodeDC(employeeOid.Value, BeWoApp.Tenant, BeWoApp.Mandator.Apikey));
|
|
|
|
EndWaiting();
|
|
if(result != null){
|
|
GeneratetTexfield.Text = result.EmployeeCode;
|
|
CodeButtonsOnOFF();
|
|
}
|
|
else{
|
|
MessageBox.Show("Beim Erstellen eines neuen Chat-Codes ist ein Fehler aufgetreten.");
|
|
//result.Result mit switc case Fehler ausgabe
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (BeWoApp.Tenant != null && BeWoApp.Mandator.Apikey != null)
|
|
{
|
|
StartWaiting();
|
|
var result =
|
|
ServiceFacade.DoOperationsServiceSync(
|
|
s =>
|
|
s.CreateNewEmployeeAPPCodeDC(employeeOid.Value, BeWoApp.Tenant, BeWoApp.Mandator.Apikey));
|
|
|
|
EndWaiting();
|
|
|
|
//GeneratetTexfield.Text = result.EmployeeCode;
|
|
|
|
if(result != null){
|
|
GeneratetTexfield.Text = result.EmployeeCode;
|
|
CodeButtonsOnOFF();
|
|
}
|
|
else{
|
|
MessageBox.Show("Beim erstellen eines neuen Chat-Codes ist ein Fehler aufgetreten.");
|
|
//result.Result mit switc case Fehler ausgabe
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Sie besitzen derzeit keinen API-Key. Bitte wenden Sie sich an den Support.",
|
|
"Info", MessageBoxButton.OK);
|
|
}
|
|
}
|
|
}
|
|
|
|
#region Nicht benutzte Events
|
|
//private void CheckBox_Checked(object sender, RoutedEventArgs e)
|
|
//{
|
|
// ServiceFacade.DoOperationsServiceSync(s => s.UpdateIsChatActiveEmployeeAPPCodeDC(employeeOid.Value, 1));
|
|
//}
|
|
|
|
//private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
|
|
//{
|
|
// ServiceFacade.DoOperationsServiceSync(s => s.UpdateIsChatActiveEmployeeAPPCodeDC(employeeOid.Value, 0));
|
|
//}
|
|
|
|
//private void Creat_NotfallMessage(object sender, RoutedEventArgs e)
|
|
//{
|
|
// if(!NotfallTexfield.Text.Equals(""))
|
|
// ServiceFacade.DoOperationsServiceSync(s => s.UpdateNotfallNacrichtEmployeeAPPCodeDC(employeeOid.Value, NotfallTexfield.Text));
|
|
//}
|
|
|
|
|
|
#endregion
|
|
|
|
private void LaodInfostoView()
|
|
{
|
|
var getEmployeeAppCode = ServiceFacade.DoEmployeeServiceSync(s => s.GetAllEmployeeAppCodes(employeeOid.Value));
|
|
|
|
int x;
|
|
if (getEmployeeAppCode.Count > 0){
|
|
x = getEmployeeAppCode[getEmployeeAppCode.Count - 1].IsChatAktive;
|
|
|
|
GeneratetTexfield.Text = getEmployeeAppCode[getEmployeeAppCode.Count - 1].EmployeeCode;
|
|
}
|
|
|
|
CodeButtonsOnOFF();
|
|
}
|
|
|
|
private void CodeButtonsOnOFF()
|
|
{
|
|
if (!GeneratetTexfield.Text.Equals(""))
|
|
{
|
|
//lblGenerateCode.Content = "Chat-Code erneuern";
|
|
RemoveButton.Visibility = Visibility.Visible;
|
|
EmployeeHandoutButton.Visibility = Visibility.Visible;
|
|
|
|
ButtonGenerateCode.ToolTip = "Chat-Code erneuern";
|
|
|
|
var image = new Image
|
|
{
|
|
//Source = new BitmapImage(
|
|
// new Uri(
|
|
// "pack://application:,,,/ChatController;component/Ressourcen/SymbolRefresh32.png"))
|
|
|
|
Source = new BitmapImage(
|
|
new Uri(
|
|
"pack://application:,,,/Ressources/Icons/SymbolRefresh32.png"))
|
|
};
|
|
|
|
ImageGenerateCode.Source = image.Source;
|
|
}
|
|
else
|
|
{
|
|
RemoveButton.Visibility = Visibility.Collapsed;
|
|
EmployeeHandoutButton.Visibility = Visibility.Collapsed;
|
|
|
|
ButtonGenerateCode.ToolTip = "Chat-Code anfordern";
|
|
|
|
var image = new Image
|
|
{
|
|
Source = new BitmapImage(
|
|
new Uri(
|
|
"pack://application:,,,/Ressources/Icons/DocumentWithAdd2.png"))
|
|
};
|
|
|
|
ImageGenerateCode.Source = image.Source;
|
|
}
|
|
}
|
|
|
|
#region Pdf Gedönse
|
|
|
|
private void ZeigePDF_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
StartWaiting();
|
|
|
|
List<string> parameter = new List<string>();
|
|
parameter.Add(BeWoApp.Tenant);
|
|
parameter.Add(BeWoApp.Mandator.Apikey);
|
|
|
|
parameter.Add(GeneratetTexfield.Text); // chat code
|
|
|
|
Thread newThread = new Thread(DoWork);
|
|
newThread.IsBackground = true;
|
|
newThread.Start(parameter);
|
|
}
|
|
|
|
private void DoWork(object o )
|
|
{
|
|
List<string> para = o as List<string>;
|
|
|
|
var Result = PdfAnzeigen(para[0], para[1],para[2]);
|
|
|
|
EndWaiting();
|
|
|
|
this.Dispatcher.BeginInvoke(
|
|
DispatcherPriority.Background,
|
|
(Action)delegate
|
|
{
|
|
switch (Result)
|
|
{
|
|
case 0:
|
|
// wenn hier dann alles ok
|
|
|
|
|
|
break;
|
|
case 11:
|
|
MessageBox.Show("Kundennummer unbekannt.", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
case 12:
|
|
MessageBox.Show("Der API-Key ist falsch -> Auth-Error.", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
case 13:
|
|
MessageBox.Show("Es existiert kein API-Key für die angegebene Kundennummer.", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
case 40:
|
|
MessageBox.Show("Vorlage nicht gefunden.", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
case 41:
|
|
MessageBox.Show("Ungültige Custom-Logo-URL.", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
case 60:
|
|
MessageBox.Show("Fehler: \n" + "", "Fehler", MessageBoxButton.OK);
|
|
break;
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
private string ErmittleServerURL(string customerId)
|
|
{
|
|
try
|
|
{
|
|
string url = "https://dict.ownchat.de/api/server/resolve/1/" + customerId;//customerId; //customerid == kundennummer
|
|
|
|
WebRequest request = WebRequest.Create(url);
|
|
|
|
request.Credentials = CredentialCache.DefaultCredentials;
|
|
|
|
WebResponse response = request.GetResponse();
|
|
|
|
|
|
Stream dataStream = response.GetResponseStream();
|
|
|
|
StreamReader reader = new StreamReader(dataStream);
|
|
|
|
string responseFromServer = reader.ReadToEnd();
|
|
|
|
dataStream.Dispose();
|
|
reader.Dispose();
|
|
|
|
dataStream.Close();
|
|
reader.Close();
|
|
|
|
// string responseFromServer = ReadStreamForChatCode(response);
|
|
|
|
var definition = new { status = "", URL = "", SYNCTYPE = "" };
|
|
|
|
var jsondaten = JsonConvert.DeserializeAnonymousType(responseFromServer, definition);
|
|
|
|
string serverUrl = jsondaten.URL;
|
|
response.Close();
|
|
|
|
return serverUrl;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private int PdfAnzeigen(string customerId, string apikey, string chatcode)
|
|
{
|
|
try
|
|
{
|
|
int Result = 0;
|
|
|
|
#region ServerErmittlung und Link ermittlung
|
|
string serverUrl = ErmittleServerURL(customerId);
|
|
|
|
if (serverUrl == null)
|
|
{
|
|
return Result = 11;
|
|
}
|
|
else if (serverUrl.Equals(""))
|
|
{
|
|
return Result = 11;
|
|
}
|
|
|
|
var endurl = serverUrl + "/api/ownchat/createpdfmanual/" + apikey + "/" + customerId;
|
|
#endregion
|
|
|
|
#region Post Parameter Uebergabe
|
|
|
|
Dictionary<string, string> postparameter = new Dictionary<string, string>();
|
|
|
|
//if (personOid != null && personOid.Value == BeWoApp.LoggedOnUser.Employee.PersonOid) {
|
|
// postparameter.Add("username", BeWoApp.UserName);
|
|
// postparameter.Add("password", BeWoApp.UserPassword);
|
|
//}
|
|
|
|
if (!chatcode.Equals(""))
|
|
postparameter.Add("chatcode", chatcode);
|
|
|
|
string postdaten = "";
|
|
int i = 0;
|
|
foreach (var key in postparameter.Keys)
|
|
{
|
|
postdaten += HttpUtility.UrlEncode(key) + "=" + HttpUtility.UrlEncode(postparameter[key]) + "&";
|
|
}
|
|
#endregion
|
|
|
|
#region Webrequest Aufbau ink. stream
|
|
WebRequest requesten = WebRequest.Create(endurl);
|
|
|
|
requesten.Method = "POST";
|
|
requesten.ContentType = "application/x-www-form-urlencoded";
|
|
|
|
byte[] daten = Encoding.ASCII.GetBytes(postdaten);
|
|
|
|
requesten.ContentLength = daten.Length;
|
|
|
|
try
|
|
{
|
|
Stream requestStream = requesten.GetRequestStream();
|
|
|
|
requestStream.Write(daten, 0, daten.Length);
|
|
|
|
requestStream.Close();
|
|
|
|
var inte = VerarbeiteErhalteneDaten(requesten);
|
|
|
|
return inte;
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
this.Dispatcher.BeginInvoke(
|
|
DispatcherPriority.Background,
|
|
(Action)delegate
|
|
{
|
|
MessageBox.Show("Es konnte keine Verbindung aufgebaut werden.", "Fehler", MessageBoxButton.OK);
|
|
});
|
|
|
|
return 0;
|
|
}
|
|
#endregion
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return 60;
|
|
}
|
|
}
|
|
|
|
private int VerarbeiteErhalteneDaten(WebRequest requesten)
|
|
{
|
|
try
|
|
{
|
|
#region Verarbeitung der Erhaltenen Daten
|
|
HttpWebResponse response = (HttpWebResponse)requesten.GetResponse();
|
|
|
|
string responseFromServer = "";
|
|
|
|
Stream reqStr2 = response.GetResponseStream();
|
|
|
|
byte[] barray = null;
|
|
|
|
byte[] Stringmesage = null;
|
|
|
|
using (var memoryStream = new MemoryStream())
|
|
{
|
|
reqStr2.CopyTo(memoryStream);
|
|
barray = memoryStream.ToArray();
|
|
}
|
|
|
|
if (barray != null)
|
|
{
|
|
Stringmesage = barray;
|
|
|
|
responseFromServer = System.Text.Encoding.Default.GetString(Stringmesage);
|
|
}
|
|
|
|
if (responseFromServer.Contains("PDF"))
|
|
{
|
|
this.Dispatcher.BeginInvoke(
|
|
DispatcherPriority.Background,
|
|
(Action)delegate
|
|
{
|
|
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
|
|
|
|
saveFileDialog1.Title = "PDF Speichern";
|
|
saveFileDialog1.FileName = Path.GetFileName("ownChat-Kurzanleitung.pdf");
|
|
saveFileDialog1.ShowDialog();
|
|
|
|
File.WriteAllBytes(saveFileDialog1.FileName, barray);
|
|
|
|
Process.Start(saveFileDialog1.FileName);
|
|
|
|
});
|
|
reqStr2.Close();
|
|
|
|
|
|
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
var jsonDatentyp = JsonConvert.DeserializeObject<PdfChatHandoutDC>(responseFromServer);
|
|
|
|
return jsonDatentyp.Result;
|
|
}
|
|
#endregion
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
return 60;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
private void RemoveCode_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!GeneratetTexfield.Text.Equals(""))
|
|
{
|
|
if (MessageBox.Show("Wollen Sie den Chat-Code wirklich löschen?\nAlle Daten auf Mobilgeräte werden gelöscht.", "Achtung", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
|
|
{
|
|
StartWaiting();
|
|
|
|
var isdeletet = ServiceFacade.DoOperationsServiceSync(r => r.DeletEmloyeeChatCode(BeWoApp.Mandator.Apikey, BeWoApp.Tenant, employeeOid.Value));
|
|
|
|
EndWaiting();
|
|
|
|
if (isdeletet)
|
|
{
|
|
GeneratetTexfield.Text = "";
|
|
CodeButtonsOnOFF();
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Löschen des Chat-Codes Fehlgeschlagen.", "Fehler");
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show("Sie müssen vorher einen Chat-Code generieren, bevor sie ihn löschen können", "Info",
|
|
MessageBoxButton.OK, MessageBoxImage.Information);
|
|
}
|
|
}
|
|
|
|
#region Waitlayer
|
|
private WaitLayer2 _waitLayer = null;
|
|
|
|
public void StartWaiting()
|
|
{
|
|
Dispatcher.BeginInvoke(DispatcherPriority.Background, (Action)StartWaitingImmediately);
|
|
}
|
|
|
|
public void StartWaitingImmediately()
|
|
{
|
|
if (_waitLayer == null)
|
|
{
|
|
_waitLayer = new WaitLayer2();
|
|
//Grid.SetColumnSpan(_waitLayer, 3);
|
|
//Grid.SetRowSpan(_waitLayer, 3);
|
|
ChatServiceEmployeeGrid.Children.Add(_waitLayer);
|
|
Panel.SetZIndex(_waitLayer, int.MaxValue);
|
|
_waitLayer.RefreshChatUI();
|
|
}
|
|
}
|
|
|
|
public void EndWaiting()
|
|
{
|
|
Dispatcher.BeginInvoke(
|
|
DispatcherPriority.Background,
|
|
(Action)delegate
|
|
{
|
|
if (_waitLayer != null)
|
|
{
|
|
ChatServiceEmployeeGrid.Children.Remove(_waitLayer);
|
|
_waitLayer = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |