Files
BeWoPlaner/BeWoPlanerAndroid/AndroidSoapService.asmx.cs
2016-11-24 10:26:46 +01:00

323 lines
13 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;
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)
{
if(!SoapHibernateSessionManager.TenantExists(pTenant))
{
return LoginFailReason.WrongTenant.ToString();
}
MobileSessionFacade.Tenant = pTenant;
Tenant = pTenant;
SoapHibernateSessionManager.ConfigureHibernateSession();
var derTimeout = Session.Timeout;
Debug.WriteLine("Timeout der Session: " + derTimeout);
var s = new UserServiceImp();
if(s.IsUserValid(pUsername, pPassword, null, "SOAPClient", false) == UserValidationResult.UserValid)
{
var user = DAOFactory.UserDAO.FindUserByLoginName(pUsername);
if (user == null || !DAOFactory.SearchDAO.CheckIfEmployeeIsAllowedToChat(user.Employee.Person.Oid.Value))
{
return LoginFailReason.Unauthorized.ToString();
}
if(!DAOFactory.UserDAO.CheckPassword(user, pPassword))
{
return LoginFailReason.WrongCredentials.ToString();
}
MobileSessionFacade.LoggedInUser = user;
return user.Employee.Oid.Value + ";" + user.Employee.Person.FirstNameLastName + ";" + user.LoginName + ";" + user.Employee.Person.Oid.Value;
}
return LoginFailReason.Unknown.ToString();
}
[WebMethod(EnableSession = true)]
public string LoadImageForEmployee(long pEmployeePersonOid)
{
var employee = DAOFactory.SearchDAO.FindEmployeeWithPersonOid(pEmployeePersonOid);
return SerializeObject(employee.EmployeeThumbnail);
}
[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)).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));
}
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()
{
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);
}
[WebMethod(EnableSession = true)]
public string LoadChatMessagesChunkwise(string messageId, long pRecipientPersonOid, long pSenderPersonOid, bool pIsForTeam, string pExceptions)
{
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).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 string CheckSum { get; set; }
public ImageEntity(long pPersonOid, byte[] pImage)
{
PersonOid = pPersonOid;
ImageBase64String = Convert.ToBase64String(pImage);
}
}
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 ChatPerson(long pOid, string pName, bool pIsTeam, string pTeamMemberOids, string pTeamMemberNames, long pVersion, bool pIsEmployee)
{
Oid = pOid;
Name = pName;
IsTeam = pIsTeam;
TeamMemberOids = pTeamMemberOids;
TeamMemberNames = pTeamMemberNames;
Version = pVersion;
IsEmployee = pIsEmployee;
}
}
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;
}
}
}
}