using System; using System.Collections.Generic; using System.IO; using System.Linq; using BeWo.Data; using BeWo.Data.Access; using BeWo.Data.Entities; using BeWo.Service.Core; using BeWo.Service.DCEntityMapper; using BeWo.Service.MessageContracts; using BS.Shared; using BS.Shared.Core; using BS.Shared.DataContracts; using BS.Shared.DataContracts.Compact; using BS.Shared.Extensions; using BS.Shared.Services; using Utils = BeWo.Service.Core.Utils; namespace BeWo.Service.Plugins { public class UserService : AbstractIDSpecificDefaultClass { //Für alte Versionen, kann später weg public virtual UserDC LoadUserByLoginName(string pUserName) { UserDC userDC = null; ApplicationUser user = DAOFactory.UserDAO.FindUserByLoginName(pUserName); if (user != null) { userDC = MapperFactory.UserDC_User.MapToNewDC(user); CompactEmployeeDC emp = userDC.Employee; if (emp != null) { //foreach (var item in user.Employee.Employee2CustomerList) //{ // if (emp.RelatedCustomerOIDList == null) // emp.RelatedCustomerOIDList = new List(); // emp.RelatedCustomerOIDList.Add(item.CustomerOid.Value); //} emp.AllTeamMemberOids = new List(); if (user.Employee.LeadingTeams.Count > 0) { emp.IsTeamLeader = true; List oids = new List(); foreach (var item in user.Employee.LeadingTeams) { oids.Add(item.Oid.Value); foreach (var member in item.MemberList) { emp.AllTeamMemberOids.Add(member.Oid.Value); } } emp.LeadingTeamOids = oids; } //var teams = DAOFactory.SearchDAO.FindAllActiveTeamsOfEmployee(emp.EmployeeOid); //emp.TeamOids = new List(); //foreach (var t in teams) //{ // emp.TeamOids.Add(t.Oid.Value); // foreach (var member in t.MemberList) // { // emp.AllTeamMemberOids.Add(member.Oid.Value); // } //} } } return userDC; } public virtual UserDC LoadUserByLoginName(string pUserName, string password) { UserDC userDC = null; ApplicationUser user = DAOFactory.UserDAO.FindUserByLoginName(pUserName); if (user != null && user.IsActive == ActivationTypeId.Active && DAOFactory.UserDAO.CheckPassword(user, password)) { userDC = MapperFactory.UserDC_User.MapToNewDC(user); CompactEmployeeDC emp = userDC.Employee; if (emp != null) { //foreach (var item in user.Employee.Employee2CustomerList) //{ // if (emp.RelatedCustomerOIDList == null) // emp.RelatedCustomerOIDList = new List(); // emp.RelatedCustomerOIDList.Add(item.CustomerOid.Value); //} emp.AllTeamMemberOids = new List(); emp.TeamOids = new List(); if (user.Employee.LeadingTeams.Count > 0) { emp.IsTeamLeader = true; List oids = new List(); foreach (var item in user.Employee.LeadingTeams) { oids.Add(item.Oid.Value); foreach (var member in item.MemberList) { emp.AllTeamMemberOids.Add(member.Oid.Value); } } emp.LeadingTeamOids = oids; } //var teams = DAOFactory.SearchDAO.FindAllActiveTeamsOfEmployee(emp.EmployeeOid); //emp.TeamOids = new List(); //foreach (var t in teams) //{ // emp.TeamOids.Add(t.Oid.Value); // foreach (var member in t.MemberList) // { // emp.AllTeamMemberOids.Add(member.Oid.Value); // } //} } CheckRightVersion(userDC); } return userDC; } private void CheckRightVersion(UserDC userDC) { var lastLogins = DAOFactory.SearchDAO.FindLastLogins(userDC.LoginName, 1).ToList(); if (lastLogins != null && lastLogins.Count > 0) { var login = lastLogins[0]; if (!String.IsNullOrEmpty(login.Referrer)) { //var test = "MobilClient, Version: Unbekannt"; //var test2 = "BeWoClient, Version: Microsoft Windows NT 6.2.9200.0;CLRVersion=4.0.30319.42000;BeWoVersion=Version 3.16;IsNet45OrNewer=True"; var str = login.Referrer; //str = test; var start = str.IndexOf("BeWoVersion="); if (start > 0) { var stop = str.IndexOf(";", start); if (stop > start) { //BeWoClient, Version: Microsoft Windows NT 6.2.9200.0;CLRVersion=4.0.30319.42000;BeWoVersion=Version 3.17;IsNet45OrNewer=True var version = str.Substring(start + 12, stop - start - 12); version = version.Replace("Version", "").Trim(); foreach (var ug in userDC.UserGroups) { var allrights = ug.Rights; ug.Rights = new List(); foreach (var r in allrights) { if (IsCorrectVersion(r, version)) { ug.Rights.Add(r); } } } } } } } } private bool IsCorrectVersion(UserRightType r, string version) { var rightVersion = GetRightVersion(r); if (version.CompareTo(rightVersion) < 0) { return false; } return true; } private object GetRightVersion(UserRightType r) { if (r == UserRightType.Customer_ViewBetreuung || r == UserRightType.Customer_ViewAbsenceTimes) { return "3.17"; } return "1.0"; } } }