2016-08-17 12:20:27 +02:00
using System ;
using System.Collections.Generic ;
using System.Diagnostics ;
using System.Linq ;
2016-09-16 14:44:58 +02:00
using System.Text ;
2016-06-27 01:45:38 +02:00
using System.Web.Services ;
using BeWo.Data.Access ;
using BeWo.Service.ServiceContracts ;
using BeWo.Service.ServiceImplementations ;
using BeWoPlanerAndroid.Service ;
2016-07-18 06:14:17 +02:00
2016-06-27 01:45:38 +02:00
using BS.Shared ;
using BS.Shared.Core ;
using BS.Shared.DataContracts.Compact ;
2016-08-17 12:20:27 +02:00
using BS.Shared.Extensions ;
2016-09-30 10:19:11 +02:00
2016-06-27 01:45:38 +02:00
using Newtonsoft.Json ;
2017-02-01 13:53:59 +01:00
using BeWo.Data.Entities ;
2016-06-27 01:45:38 +02:00
namespace BeWoPlanerAndroid
{
[WebService(Namespace = "bliblablubb.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
// Wenn der Aufruf dieses Webdiensts aus einem Skript mithilfe von ASP.NET AJAX zulässig sein soll, heben Sie die Kommentarmarkierung für die folgende Zeile auf.
// [System.Web.Script.Services.ScriptService]
public class AndroidSoapService : WebService
{
protected readonly ICustomerService CustomerService = new MobileSessionFacade ( ) . CustomerService ;
protected readonly IUserService UserService = new MobileSessionFacade ( ) . UserService ;
protected readonly IEmployeeService EmployeeService = new MobileSessionFacade ( ) . EmployeeService ;
public static string Tenant ;
[WebMethod(EnableSession = true)]
public string Login ( string pTenant , string pUsername , string pPassword )
{
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Beginne mit Login" ) ;
2016-09-30 10:19:11 +02:00
if ( ! SoapHibernateSessionManager . TenantExists ( pTenant ) )
{
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Angegebene Kundennummer ist falsch (" + pTenant + ")" ) ;
2016-09-30 10:19:11 +02:00
return LoginFailReason . WrongTenant . ToString ( ) ;
}
2016-06-27 01:45:38 +02:00
MobileSessionFacade . Tenant = pTenant ;
Tenant = pTenant ;
SoapHibernateSessionManager . ConfigureHibernateSession ( ) ;
2016-12-05 17:08:51 +01:00
2016-06-27 01:45:38 +02:00
var s = new UserServiceImp ( ) ;
2016-12-05 17:08:51 +01:00
if ( s . IsUserValid ( pUsername , pPassword , null , "SOAPClient" , false ) = = UserValidationResult . UserValid )
2016-06-27 01:45:38 +02:00
{
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Beginne mit Login" ) ;
2016-06-27 01:45:38 +02:00
var user = DAOFactory . UserDAO . FindUserByLoginName ( pUsername ) ;
2016-08-17 12:20:27 +02:00
if ( user = = null | | ! DAOFactory . SearchDAO . CheckIfEmployeeIsAllowedToChat ( user . Employee . Person . Oid . Value ) )
{
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Der Benutzer existiert nicht oder er hat nicht das Recht zu chatten. (LoginFailReason.Unauthorized)" ) ;
2016-09-30 10:19:11 +02:00
return LoginFailReason . Unauthorized . ToString ( ) ;
2016-08-17 12:20:27 +02:00
}
2016-12-05 17:08:51 +01:00
if ( ! DAOFactory . UserDAO . CheckPassword ( user , pPassword ) )
2016-06-27 01:45:38 +02:00
{
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Benutzername und/oder Passwort inkorrekt (LoginFailReason.WrongCredentials)" ) ;
2016-09-30 10:19:11 +02:00
return LoginFailReason . WrongCredentials . ToString ( ) ;
2016-06-27 01:45:38 +02:00
}
MobileSessionFacade . LoggedInUser = user ;
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Der Login war erfolgreich" ) ;
return user . Employee . Oid . Value + ";" + user . Employee . Person . FirstNameLastName + ";" + user . LoginName +
";" + user . Employee . Person . Oid . Value ;
2016-06-27 01:45:38 +02:00
}
2016-12-05 17:08:51 +01:00
Log . Info ( "Login. Benutzername und/oder Passwort inkorrekt (LoginFailReason.Unknown)" ) ;
2016-09-30 10:19:11 +02:00
return LoginFailReason . Unknown . ToString ( ) ;
2016-06-27 01:45:38 +02:00
}
2016-11-21 11:25:24 +01:00
[WebMethod(EnableSession = true)]
public string LoadImageForEmployee ( long pEmployeePersonOid )
{
2017-02-01 13:53:59 +01:00
//var employee = DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pEmployeePersonOid);
2016-11-21 11:25:24 +01:00
2017-02-01 13:53:59 +01:00
var person = DAOFactory . GenericDAO . LoadByID < Person > ( pEmployeePersonOid ) ;
byte [ ] image = null ;
if ( person . Images ! = null & & person . Images . Count > 0 )
{
image = person . Images [ 0 ] . SmallThumbnail ;
}
return SerializeObject ( image ) ;
2016-11-21 11:25:24 +01:00
}
2016-06-27 01:45:38 +02:00
[WebMethod(EnableSession = true)]
public string TenantNochExistent ( )
{
SoapHibernateSessionManager . ConfigureHibernateSession ( ) ;
var customer = CustomerService . GetCompactCustomerDC ( 46L ) ;
var result = SerializeObject ( customer ) ;
return result ;
}
[WebMethod(EnableSession = true)]
public void UpdateCustomer ( string pParam )
{
var customerVonAndroidZurueck = JsonConvert . DeserializeObject < CompactCustomerDC > ( pParam ) ;
SoapHibernateSessionManager . ConfigureHibernateSession ( ) ;
}
2016-07-29 13:08:32 +02:00
[WebMethod(EnableSession = true)]
2016-08-17 12:20:27 +02:00
public string GetAllChatMessagesForSenderAndRecipient ( long pSenderPersonOid , long pRecipientPersonOid , string pExceptions , bool pIsForTeam )
2016-07-29 13:08:32 +02:00
{
2016-10-21 09:41:14 +02:00
Debug . WriteLine ( "Lade alle Nachrichten für einen Chat herunter." ) ;
var exceptions = new List < string > ( ) ;
2016-08-17 12:20:27 +02:00
2016-09-13 11:32:25 +02:00
if ( pExceptions . Length > 0 )
2016-08-17 12:20:27 +02:00
{
var splittedString = pExceptions . Split ( ';' ) ;
2016-10-21 09:41:14 +02:00
exceptions = splittedString . ToList ( ) ;
2016-08-17 12:20:27 +02:00
}
2016-09-16 14:44:58 +02:00
var jsonMessages = new List < ChatMessageForJson > ( ) ;
2016-07-29 13:08:32 +02:00
2016-10-21 09:41:14 +02:00
var messages = DAOFactory . SearchDAO . FindAllChatMessagesForAndroid ( pSenderPersonOid , pRecipientPersonOid , exceptions , pIsForTeam ) . DoForEach ( dfe = > jsonMessages . Add ( new ChatMessageForJson ( dfe . EmpfaengerPersonOid , dfe . SenderPersonOid , dfe . IsDelivered , dfe . IstGelesen , dfe . TeamOid , dfe . ChatText , dfe . Uhrzeit , dfe . Oid , dfe . InsTs , dfe . MessageId ) ) ) ;
2016-08-17 16:37:40 +02:00
2016-09-16 14:44:58 +02:00
return JsonConvert . SerializeObject ( jsonMessages ) ;
2016-07-29 13:08:32 +02:00
}
2016-09-30 10:19:11 +02:00
[WebMethod(EnableSession = true)]
public string GetNewestMessages ( long pRecipientPersonOid )
{
var jsonMessages = new List < ChatMessageForJson > ( ) ;
2016-10-21 09:41:14 +02:00
var liste = DAOFactory . SearchDAO . FindNewestChatMessages ( pRecipientPersonOid ) . DoForEach ( dfe = > jsonMessages . Add ( new ChatMessageForJson ( dfe . EmpfaengerPersonOid , dfe . SenderPersonOid , dfe . IsDelivered , dfe . IstGelesen , dfe . TeamOid , dfe . ChatText , dfe . Uhrzeit , dfe . Oid , dfe . InsTs , dfe . MessageId ) ) ) ;
2016-09-30 10:19:11 +02:00
return JsonConvert . SerializeObject ( jsonMessages ) ;
}
2016-09-16 14:44:58 +02:00
2016-06-27 01:45:38 +02:00
[WebMethod(EnableSession = true)]
public string GetServerAddressByToken ( string pToken )
{
// Token überprüfen -> wenn falsch oder abgelaufen -> null zurückgeben
return pToken = = null ? null : "das-nur-ein-test;demo" ;
}
[WebMethod(EnableSession = true)]
public string GetContactsForPerson ( long pPersonOid )
{
// erst mal nur für Mitarbeiter
// 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
2016-11-21 11:25:24 +01:00
var allPersons = DAOFactory . SearchDAO . FindAllChatAuthorizedPersonsForEmployee ( employee . Oid . Value ) . Where ( w = > w . Key . Oid . Value ! = employee . Person . Oid . Value ) ;
var allChatPersons = allPersons
2016-12-05 17:08:51 +01:00
. Select ( s = > new ChatPerson ( s . Key . Oid . Value , s . Key . FirstNameLastName , false , null , null , s . Key . Version . Value , s . Value , s . Key . Contacts . FirstOrDefault ( f = > f . Type = = ContactType . business_MobilePhone ) = = null ? "" : s . Key . Contacts . FirstOrDefault ( f = > f . Type = = ContactType . business_MobilePhone ) . Value ) ) . ToList ( ) ;
2016-08-17 12:20:27 +02:00
var teams = DAOFactory . SearchDAO . FindTeamsOfEmployee ( employee . Oid . Value ) . Where ( w = > w . MemberList . Count > 1 ) ;
foreach ( var team in teams )
{
var teamMembers = team . MemberList ;
var memberString = "" ;
var memberNames = "" ;
foreach ( var member in teamMembers )
{
memberString + = member . Person . Oid . Value ;
memberNames + = member . Person . FirstNameLastName ;
if ( teamMembers . IndexOf ( member ) < teamMembers . Count - 1 )
{
memberString + = ";" ;
memberNames + = ", " ;
}
}
2016-12-05 17:08:51 +01:00
allChatPersons . Add ( new ChatPerson ( team . Oid . Value , team . Name , true , memberString , memberNames , team . Version . Value , false , null ) ) ;
2016-08-17 12:20:27 +02:00
}
2016-06-27 01:45:38 +02:00
2016-11-21 11:25:24 +01:00
return SerializeObject ( allChatPersons ) ;
2016-06-27 01:45:38 +02:00
}
private static string SerializeObject ( object obj )
{
return JsonConvert . SerializeObject ( obj , Formatting . Indented , new JsonSerializerSettings { ContractResolver = new ShouldSerializeContractResolver ( ) , ReferenceLoopHandling = ReferenceLoopHandling . Ignore } ) ;
}
2016-09-19 17:13:10 +02:00
[WebMethod(EnableSession = true)]
public string KeepAlive ( )
{
2016-12-05 17:08:51 +01:00
Log . Info ( "KeepAlive auf dem SOAP-Server wird ausgeführt" ) ;
2016-09-19 17:13:10 +02:00
return "lebt" ;
}
2016-10-21 09:41:14 +02:00
[WebMethod(EnableSession = true)]
public string CheckChatMessagesByUUIDs ( string messageIds )
{
var splittet = messageIds . Split ( ";" ) . ToList ( ) ;
var existingMessageIds = ( DAOFactory . SearchDAO . FindChatMessageIds ( splittet ) ? ? new List < string > ( ) ) . ToList ( ) ;
return JsonConvert . SerializeObject ( existingMessageIds ) ;
}
2016-12-05 17:08:51 +01:00
private static readonly log4net . ILog Log = log4net . LogManager . GetLogger ( System . Reflection . MethodBase . GetCurrentMethod ( ) . DeclaringType ) ;
2016-11-09 11:48:46 +01:00
[WebMethod(EnableSession = true)]
2016-12-05 17:08:51 +01:00
public string LoadChatMessagesChunkwise ( string messageId , long pRecipientPersonOid , long pSenderPersonOid , bool pIsForTeam , string pExceptions , bool pIsInitialCall )
2016-11-09 11:48:46 +01:00
{
2016-12-05 17:08:51 +01:00
Log . Info ( "LoadChatMessagesChunkwise. Empfänger: " + pRecipientPersonOid + ", Absender: " + pSenderPersonOid + ". Ist ein Team: " + ( pIsForTeam ? "ja" : "nein" + ". Ausnahmen: " + ( pExceptions ? ? "KEINE AUSNAHMEN" ) + ". Älteste Nachricht auf dem Mobilgerät: " + ( messageId ? ? "KEINE NACHRICHT AUF DEM MOBILGERÄT" ) + "." ) ) ;
2016-11-09 11:48:46 +01:00
var exceptions = new List < string > ( ) ;
if ( pExceptions . Length > 0 )
{
var splittedString = pExceptions . Split ( ';' ) ;
exceptions = splittedString . ToList ( ) ;
}
var jsonMessages = new List < ChatMessageForJson > ( ) ;
2016-12-05 17:08:51 +01:00
var liste = DAOFactory . SearchDAO . LoadChatMessagesChunkwise ( messageId , pRecipientPersonOid , pSenderPersonOid , pIsForTeam , exceptions , pIsInitialCall ) . DoForEach ( dfe = > jsonMessages . Add ( new ChatMessageForJson ( dfe . EmpfaengerPersonOid , dfe . SenderPersonOid , dfe . IsDelivered , dfe . IstGelesen , dfe . TeamOid , dfe . ChatText , dfe . Uhrzeit , dfe . Oid , dfe . InsTs , dfe . MessageId ) ) ) ;
2016-11-09 11:48:46 +01:00
return JsonConvert . SerializeObject ( jsonMessages ) ;
}
2016-11-21 11:25:24 +01:00
[WebMethod(EnableSession = true)]
public string LoadUserImages ( long pPersonOid )
{
2016-11-24 10:26:46 +01:00
var images = new List < ImageEntity > ( ) ;
2016-11-21 11:25:24 +01:00
// 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
2016-11-24 10:26:46 +01:00
if ( isEmployee )
2016-11-21 11:25:24 +01:00
{
var byteImages = DAOFactory . SearchDAO . FindImagesForChatAuthorizedPersonsForEmployee ( employee . Oid . Value ) ;
2016-11-24 10:26:46 +01:00
images . AddRange ( byteImages . Select ( img = > new ImageEntity ( img . Key , img . Value ) ) ) ;
2016-11-21 11:25:24 +01:00
}
else
{
}
return SerializeObject ( images ) ;
}
public class ImageEntity
{
public long PersonOid { get ; set ; }
2016-11-24 10:26:46 +01:00
public string ImageBase64String { get ; set ; }
2016-11-25 17:06:38 +01:00
public long Version { get ; set ; }
2016-11-21 11:25:24 +01:00
public ImageEntity ( long pPersonOid , byte [ ] pImage )
{
2016-11-24 10:26:46 +01:00
PersonOid = pPersonOid ;
ImageBase64String = Convert . ToBase64String ( pImage ) ;
2016-11-25 17:06:38 +01:00
Version = 1L ;
2016-11-21 11:25:24 +01:00
}
}
2016-06-27 01:45:38 +02:00
public class ChatPerson
{
public long Oid { get ; set ; }
public string Name { get ; set ; }
2016-08-17 12:20:27 +02:00
public bool IsTeam { get ; set ; }
public string TeamMemberOids { get ; set ; }
public string TeamMemberNames { get ; set ; }
2016-08-25 13:13:30 +02:00
public long Version { get ; set ; }
2016-10-07 12:40:16 +02:00
public bool IsEmployee { get ; set ; }
2016-12-05 17:08:51 +01:00
public string PhoneNumber { get ; set ; }
public ChatPerson ( long pOid , string pName , bool pIsTeam , string pTeamMemberOids , string pTeamMemberNames , long pVersion , bool pIsEmployee , string pPhoneNumber )
2016-06-27 01:45:38 +02:00
{
2016-08-25 13:13:30 +02:00
Oid = pOid ;
Name = pName ;
IsTeam = pIsTeam ;
TeamMemberOids = pTeamMemberOids ;
2016-08-17 12:20:27 +02:00
TeamMemberNames = pTeamMemberNames ;
2016-08-25 13:13:30 +02:00
Version = pVersion ;
2016-10-07 12:40:16 +02:00
IsEmployee = pIsEmployee ;
2016-12-05 17:08:51 +01:00
PhoneNumber = pPhoneNumber ;
2016-06-27 01:45:38 +02:00
}
}
2016-09-16 14:44:58 +02:00
public class ChatMessageForJson
{
public string ChatText { get ; set ; }
public DateTime Uhrzeit { get ; set ; }
public long? EmpfängerPersonOid { get ; set ; }
public long? SenderPersonOid { get ; set ; }
public bool IsDelivered { get ; set ; }
public int IstGelesen { get ; set ; }
public long? TeamOid { get ; set ; }
public long? Oid { get ; set ; }
public DateTime ? InsTs { get ; set ; }
2016-10-21 09:41:14 +02:00
public string MessageId { get ; set ; }
2016-09-16 14:44:58 +02:00
2016-10-21 09:41:14 +02:00
public ChatMessageForJson ( long? pRecipientOid , long? pSenderOid , bool pIsDelivered , int pIstGelesen , long? pTeamOid , byte [ ] pChatTextAsBytes , DateTime pUhrzeit , long? pOid , DateTime ? pInsTs , string pMessageId )
2016-09-16 14:44:58 +02:00
{
EmpfängerPersonOid = pRecipientOid ;
SenderPersonOid = pSenderOid ;
IsDelivered = pIsDelivered ;
IstGelesen = pIstGelesen ;
TeamOid = pTeamOid ;
Uhrzeit = pUhrzeit ;
ChatText = Encoding . UTF8 . GetString ( pChatTextAsBytes ) ;
Oid = pOid ;
InsTs = pInsTs ;
2016-10-21 09:41:14 +02:00
MessageId = pMessageId ;
2016-09-16 14:44:58 +02:00
}
}
2016-06-27 01:45:38 +02:00
}
}