public override Guid RequestChat(ChatRequest request) { using (LCSKDbDataContext db = new LCSKDbDataContext(connectionString)) { if (request.Department == null) { request.Department = ""; } var existing = db.LiveChat_ChatRequests.SingleOrDefault(x => x.VisitorIP == request.VisitorIp && x.OperatorID == -1); if (existing != null) { return(existing.ChatID); } // Get the less busy operator int operatorId = -1; var results = from o in db.LiveChat_Operators join c in db.LiveChat_ChatRequests on o.OperatorID equals c.OperatorID into req from r in req.DefaultIfEmpty() where o.IsOnline && o.Department.Contains(request.Department) group o by o.OperatorID into g select new { Id = g.Key, Count = g.Count() }; if (results != null && results.Count() > 0) { operatorId = results.OrderBy(x => x.Count).First().Id; } else { // WTH operatorId = db.LiveChat_Operators.First(x => x.IsOnline).OperatorID; } LiveChat_ChatRequest entity = new LiveChat_ChatRequest(); entity.ChatID = request.ChatId; entity.Department = request.Department; entity.OperatorID = operatorId; entity.RequestDate = DateTime.Now; entity.VisitorEmail = request.VisitorEmail; entity.VisitorIP = request.VisitorIp; entity.VisitorName = request.VisitorName; entity.VisitorUserAgent = request.VisitorUserAgent.Length > 100 ? request.VisitorUserAgent.Substring(0, 100) : request.VisitorUserAgent; db.LiveChat_ChatRequests.InsertOnSubmit(entity); db.SubmitChanges(); return(entity.ChatID); } }
public override Guid RequestChat(ChatRequest request) { using (LCSKDbDataContext db = new LCSKDbDataContext(connectionString)) { if (request.Department == null) request.Department = ""; var existing = db.LiveChat_ChatRequests.SingleOrDefault(x => x.VisitorIP == request.VisitorIp && x.OperatorID == -1); if (existing != null) return existing.ChatID; // Get the less busy operator int operatorId = -1; var results = from o in db.LiveChat_Operators join c in db.LiveChat_ChatRequests on o.OperatorID equals c.OperatorID into req from r in req.DefaultIfEmpty() where o.IsOnline && o.Department.Contains(request.Department) group o by o.OperatorID into g select new { Id = g.Key, Count = g.Count() }; if (results != null && results.Count() > 0) operatorId = results.OrderBy(x => x.Count).First().Id; else { // WTH operatorId = db.LiveChat_Operators.First(x => x.IsOnline).OperatorID; } LiveChat_ChatRequest entity = new LiveChat_ChatRequest(); entity.ChatID = request.ChatId; entity.Department = request.Department; entity.OperatorID = operatorId; entity.RequestDate = DateTime.Now; entity.VisitorEmail = request.VisitorEmail; entity.VisitorIP = request.VisitorIp; entity.VisitorName = request.VisitorName; entity.VisitorUserAgent = request.VisitorUserAgent.Length > 100 ? request.VisitorUserAgent.Substring(0, 100) : request.VisitorUserAgent; db.LiveChat_ChatRequests.InsertOnSubmit(entity); db.SubmitChanges(); return entity.ChatID; } }
public override ChatRequest InviteVisitor(int operatorId, string visitorIp, string prompt) { using (LCSKDbDataContext db = new LCSKDbDataContext(connectionString)) { LiveChat_ChatRequest invite = new LiveChat_ChatRequest(); invite.AcceptDate = null; invite.ChatID = Guid.NewGuid(); invite.ClosedDate = null; //HACK: this will serve as an indicator when visitor display chat button invite.Department = "op-invite"; invite.OperatorID = operatorId; invite.RequestDate = DateTime.Now; invite.VisitorEmail = ""; invite.VisitorIP = visitorIp; invite.VisitorName = "Me"; invite.VisitorUserAgent = ""; db.LiveChat_ChatRequests.InsertOnSubmit(invite); try { db.SubmitChanges(); ChatRequest req = new ChatRequest(); req.Accepted = null; req.ChatId = invite.ChatID; req.Closed = null; req.Department = invite.Department; req.OperatorId = invite.OperatorID; req.Requested = invite.RequestDate; req.VisitorEmail = invite.VisitorEmail; req.VisitorIp = invite.VisitorIP; req.VisitorName = invite.VisitorName; req.VisitorUserAgent = invite.VisitorUserAgent; req.WasAccepted = false; return(req); } catch { throw; } } }
partial void DeleteLiveChat_ChatRequest(LiveChat_ChatRequest instance);
partial void UpdateLiveChat_ChatRequest(LiveChat_ChatRequest instance);
partial void InsertLiveChat_ChatRequest(LiveChat_ChatRequest instance);
public override ChatRequest InviteVisitor(int operatorId, string visitorIp, string prompt) { using (LCSKDbDataContext db = new LCSKDbDataContext(connectionString)) { LiveChat_ChatRequest invite = new LiveChat_ChatRequest(); invite.AcceptDate = null; invite.ChatID = Guid.NewGuid(); invite.ClosedDate = null; //HACK: this will serve as an indicator when visitor display chat button invite.Department = "op-invite"; invite.OperatorID = operatorId; invite.RequestDate = DateTime.Now; invite.VisitorEmail = ""; invite.VisitorIP = visitorIp; invite.VisitorName = "Me"; invite.VisitorUserAgent = ""; db.LiveChat_ChatRequests.InsertOnSubmit(invite); try { db.SubmitChanges(); ChatRequest req = new ChatRequest(); req.Accepted = null; req.ChatId = invite.ChatID; req.Closed = null; req.Department = invite.Department; req.OperatorId = invite.OperatorID; req.Requested = invite.RequestDate; req.VisitorEmail = invite.VisitorEmail; req.VisitorIp = invite.VisitorIP; req.VisitorName = invite.VisitorName; req.VisitorUserAgent = invite.VisitorUserAgent; req.WasAccepted = false; return req; } catch { throw; } } }