Example #1
0
        public void Process(NegotiationVM curNegotiationVM, string userID)
        {
            using (var uow = ObjectFactory.GetInstance<IUnitOfWork>())
            {
                var curUserDO = uow.UserRepository.GetByKey(userID);
                var curNegotiationDO = uow.NegotiationsRepository.GetByKey(curNegotiationVM.Id);
                if (curNegotiationDO == null)
                    throw new HttpException(404, "Negotiation not found.");
                var questionAnswer = new Dictionary<QuestionDO, AnswerDO>();

                UpdateAnswerData(uow, curNegotiationVM, curUserDO,questionAnswer);


                if (curNegotiationDO.NegotiationState == NegotiationState.Resolved)
                {
                    AlertManager.PostResolutionNegotiationResponseReceived(curNegotiationDO.Id);
                }
                
                _negotiation.CreateQuasiEmailForBookingRequest(uow, curNegotiationDO, curUserDO, questionAnswer);

                uow.SaveChanges();

                _tracker.Identify(curUserDO);
                _tracker.Track(curUserDO, "RespondedToClarificationRequest", "ClickedNegResponseLink", new Dictionary<string, object> { { "BookingRequestId", curNegotiationDO.BookingRequestID } });
            }
        }
Example #2
0
        public void UpdateAnswerData(IUnitOfWork uow, NegotiationVM curNegotiationVM,  UserDO curUserDO, Dictionary<QuestionDO, AnswerDO> questionAnswer )
        {
            //Here we add/update questions based on our proposed negotiation
            foreach (var submittedQuestion in curNegotiationVM.Questions)
            {
                var currentSelectedAnswers = ExtractSelectedAnswers(uow, submittedQuestion, curUserDO, questionAnswer);

                var previousQResponses = uow.QuestionResponseRepository.GetQuery()
                    .Where(qr =>
                        qr.Answer.QuestionID == submittedQuestion.Id &&
                        qr.UserID == curUserDO.Id).ToList();

                var currentSelectedAnswerIDs = submittedQuestion.Answers.Where(a => a.Selected).Select(a => a.Id).ToList();

                //First, remove old answers
                foreach (
                    var previousQResponse in
                        previousQResponses.Where(
                            previousQResponse =>
                                !previousQResponse.AnswerID.HasValue ||
                                !currentSelectedAnswerIDs.Contains(previousQResponse.AnswerID.Value)))
                {
                    uow.QuestionResponseRepository.Remove(previousQResponse);
                }

                var previousAnswerIds = previousQResponses.Select(a => a.AnswerID).ToList();

                //Add new answers
                foreach (var currentSelectedAnswer in
                        currentSelectedAnswers.Where(a => !previousAnswerIds.Contains(a.Id)))
                {
                    var newAnswer = new QuestionResponseDO
                    {
                        Answer = currentSelectedAnswer,
                        UserID = curUserDO.Id
                    };
                    uow.QuestionResponseRepository.Add(newAnswer);
                }
            }
        }