350 lines
14 KiB
C#
350 lines
14 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Web.Services;
|
|
|
|
using BeWo.Data.Access;
|
|
using BeWo.Service.ServiceContracts;
|
|
using BeWo.Service.ServiceImplementations;
|
|
|
|
using BeWoPlanerAndroid.Service;
|
|
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts.Compact;
|
|
using BS.Shared.Extensions;
|
|
|
|
using Newtonsoft.Json;
|
|
using BeWo.Data.Entities;
|
|
|
|
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)
|
|
{
|
|
Log.Info("Login. Beginne mit Login");
|
|
|
|
if(!SoapHibernateSessionManager.TenantExists(pTenant))
|
|
{
|
|
Log.Info("Login. Angegebene Kundennummer ist falsch (" + pTenant + ")");
|
|
return LoginFailReason.WrongTenant.ToString();
|
|
}
|
|
|
|
MobileSessionFacade.Tenant = pTenant;
|
|
Tenant = pTenant;
|
|
|
|
SoapHibernateSessionManager.ConfigureHibernateSession();
|
|
|
|
var s = new UserServiceImp();
|
|
|
|
if (s.IsUserValid(pUsername, pPassword, null, "SOAPClient", false) == UserValidationResult.UserValid)
|
|
{
|
|
Log.Info("Login. Beginne mit Login");
|
|
var user = DAOFactory.UserDAO.FindUserByLoginName(pUsername);
|
|
|
|
if (user == null || !DAOFactory.SearchDAO.CheckIfEmployeeIsAllowedToChat(user.Employee.Person.Oid.Value))
|
|
{
|
|
Log.Info("Login. Der Benutzer existiert nicht oder er hat nicht das Recht zu chatten. (LoginFailReason.Unauthorized)");
|
|
return LoginFailReason.Unauthorized.ToString();
|
|
}
|
|
|
|
if (!DAOFactory.UserDAO.CheckPassword(user, pPassword))
|
|
{
|
|
Log.Info("Login. Benutzername und/oder Passwort inkorrekt (LoginFailReason.WrongCredentials)");
|
|
return LoginFailReason.WrongCredentials.ToString();
|
|
}
|
|
|
|
MobileSessionFacade.LoggedInUser = user;
|
|
|
|
Log.Info("Login. Der Login war erfolgreich");
|
|
|
|
return user.Employee.Oid.Value + ";" + user.Employee.Person.FirstNameLastName + ";" + user.LoginName +
|
|
";" + user.Employee.Person.Oid.Value;
|
|
}
|
|
|
|
Log.Info("Login. Benutzername und/oder Passwort inkorrekt (LoginFailReason.Unknown)");
|
|
|
|
return LoginFailReason.Unknown.ToString();
|
|
}
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string LoadImageForEmployee(long pEmployeePersonOid)
|
|
{
|
|
//var employee = DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pEmployeePersonOid);
|
|
|
|
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);
|
|
}
|
|
|
|
[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();
|
|
}
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string GetAllChatMessagesForSenderAndRecipient(long pSenderPersonOid, long pRecipientPersonOid, string pExceptions, bool pIsForTeam)
|
|
{
|
|
Debug.WriteLine("Lade alle Nachrichten für einen Chat herunter.");
|
|
|
|
var exceptions = new List<string>();
|
|
|
|
if (pExceptions.Length > 0)
|
|
{
|
|
var splittedString = pExceptions.Split(';');
|
|
exceptions = splittedString.ToList();
|
|
}
|
|
|
|
var jsonMessages = new List<ChatMessageForJson>();
|
|
|
|
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)));
|
|
|
|
return JsonConvert.SerializeObject(jsonMessages);
|
|
}
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string GetNewestMessages(long pRecipientPersonOid)
|
|
{
|
|
var jsonMessages = new List<ChatMessageForJson>();
|
|
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)));
|
|
|
|
return JsonConvert.SerializeObject(jsonMessages);
|
|
}
|
|
|
|
[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
|
|
|
|
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, s.Key.Contacts.FirstOrDefault(f => f.Type == ContactType.business_MobilePhone) == null ? "" : s.Key.Contacts.FirstOrDefault(f => f.Type == ContactType.business_MobilePhone).Value)).ToList();
|
|
|
|
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 += ", ";
|
|
}
|
|
}
|
|
|
|
allChatPersons.Add(new ChatPerson(team.Oid.Value, team.Name, true, memberString, memberNames, team.Version.Value, false, null));
|
|
}
|
|
|
|
return SerializeObject(allChatPersons);
|
|
}
|
|
|
|
private static string SerializeObject(object obj)
|
|
{
|
|
return JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings { ContractResolver = new ShouldSerializeContractResolver(), ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
|
|
}
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string KeepAlive()
|
|
{
|
|
Log.Info("KeepAlive auf dem SOAP-Server wird ausgeführt");
|
|
|
|
return "lebt";
|
|
}
|
|
|
|
[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);
|
|
}
|
|
|
|
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string LoadChatMessagesChunkwise(string messageId, long pRecipientPersonOid, long pSenderPersonOid, bool pIsForTeam, string pExceptions, bool pIsInitialCall)
|
|
{
|
|
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") + "."));
|
|
|
|
var exceptions = new List<string>();
|
|
|
|
if (pExceptions.Length > 0)
|
|
{
|
|
var splittedString = pExceptions.Split(';');
|
|
exceptions = splittedString.ToList();
|
|
}
|
|
|
|
var jsonMessages = new List<ChatMessageForJson>();
|
|
|
|
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)));
|
|
|
|
return JsonConvert.SerializeObject(jsonMessages);
|
|
}
|
|
|
|
[WebMethod(EnableSession = true)]
|
|
public string LoadUserImages(long pPersonOid)
|
|
{
|
|
var images = new List<ImageEntity>();
|
|
|
|
// 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);
|
|
|
|
images.AddRange(byteImages.Select(img => new ImageEntity(img.Key, img.Value)));
|
|
}
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
return SerializeObject(images);
|
|
}
|
|
|
|
public class ImageEntity
|
|
{
|
|
public long PersonOid { get; set; }
|
|
|
|
public string ImageBase64String { get; set; }
|
|
|
|
public long Version { get; set; }
|
|
|
|
public ImageEntity(long pPersonOid, byte[] pImage)
|
|
{
|
|
PersonOid = pPersonOid;
|
|
ImageBase64String = Convert.ToBase64String(pImage);
|
|
Version = 1L;
|
|
}
|
|
}
|
|
|
|
public class ChatPerson
|
|
{
|
|
public long Oid { get; set; }
|
|
|
|
public string Name { get; set; }
|
|
|
|
public bool IsTeam { get; set; }
|
|
|
|
public string TeamMemberOids { get; set; }
|
|
|
|
public string TeamMemberNames { get; set; }
|
|
|
|
public long Version { get; set; }
|
|
|
|
public bool IsEmployee { get; set; }
|
|
|
|
public string PhoneNumber { get; set; }
|
|
|
|
public ChatPerson(long pOid, string pName, bool pIsTeam, string pTeamMemberOids, string pTeamMemberNames, long pVersion, bool pIsEmployee, string pPhoneNumber)
|
|
{
|
|
Oid = pOid;
|
|
Name = pName;
|
|
IsTeam = pIsTeam;
|
|
TeamMemberOids = pTeamMemberOids;
|
|
TeamMemberNames = pTeamMemberNames;
|
|
Version = pVersion;
|
|
IsEmployee = pIsEmployee;
|
|
PhoneNumber = pPhoneNumber;
|
|
}
|
|
}
|
|
|
|
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; }
|
|
public string MessageId { get; set; }
|
|
|
|
public ChatMessageForJson(long? pRecipientOid, long? pSenderOid, bool pIsDelivered, int pIstGelesen, long? pTeamOid, byte[] pChatTextAsBytes, DateTime pUhrzeit, long? pOid, DateTime? pInsTs, string pMessageId)
|
|
{
|
|
EmpfängerPersonOid = pRecipientOid;
|
|
SenderPersonOid = pSenderOid;
|
|
IsDelivered = pIsDelivered;
|
|
IstGelesen = pIstGelesen;
|
|
TeamOid = pTeamOid;
|
|
Uhrzeit = pUhrzeit;
|
|
ChatText = Encoding.UTF8.GetString(pChatTextAsBytes);
|
|
Oid = pOid;
|
|
InsTs = pInsTs;
|
|
MessageId = pMessageId;
|
|
}
|
|
}
|
|
}
|
|
}
|