Files
BeWoPlaner/BeWo/View/ChatServiceEmployee.xaml.cs
2017-11-09 12:18:50 +01:00

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
}
}