private Answer CreateAnswer(MyTaskViewModel model, Guid idAccount, MyTaskQuestionsViewModel question,
                                    MyTaskServicesDetailViewModel serviceDetail)
        {
            var answer = new Answer()
            {
                IdAccount       = idAccount,
                IdMerchant      = model.IdMerchant,
                IdQuestion      = question.Id,
                IdServiceDetail = serviceDetail.Id,
                IdTask          = model.IdTask,
                DateCreation    = DateTime.Now,
                StatusRegister  = CStatusRegister.Active
            };

            answer = _answerDao.InsertOrUpdate(answer);
            return(answer);
        }
        private void CreateAnswer(MyTaskViewModel model, Guid idAccount, MyTaskServicesDetailViewModel serviceDetail)
        {
            foreach (var question in serviceDetail.QuestionCollection)
            {
                if (question.IdQuestionDetail == Guid.Empty && string.IsNullOrEmpty(question.Answer))
                {
                    continue;
                }
                if (question.IdQuestionDetail != Guid.Empty ||
                    (question.CodeTypePoll == CTypePoll.Open && !string.IsNullOrEmpty(question.Answer)))
                {
                    var answer = //_answerDao.GetAnswerValueByQuestion(question.Id, model.IdTask, idAccount) ??
                                 CreateAnswer(model, idAccount, question, serviceDetail);

                    CreateAnswerDetail(answer, question);
                }
            }
        }
        private void LoadQuestion(Guid idTask, Guid idAccount, MyTaskServicesDetailViewModel section)
        {
            foreach (var question in section.QuestionCollection)
            {
                var answer = _answerDao.GetAnswerValueByQuestion(question.Id, idTask, idAccount);

                if (answer == null)
                {
                    continue;
                }

                if (question.CodeTypePoll == CTypePoll.Open)
                {
                    var answers = _answerDao.GetAnswerListByQuestion(question.Id, idTask, idAccount);
                    foreach (
                        var answerDetail in
                        answers.SelectMany(
                            answerItem =>
                            answerItem.AnswerDetails.Where(answerDetail => answerDetail.CopyNumber == question.CopyNumber)))
                    {
                        question.Answer = answerDetail.AnswerValue;
                    }
                }

                if (question.CodeTypePoll == CTypePoll.One)
                {
                    foreach (var item in answer.AnswerDetails)
                    {
                        if ((item.IdQuestionDetail != Guid.Empty && item.IdQuestionDetail != null) &&
                            item.CopyNumber == question.CopyNumber)
                        {
                            question.IdQuestionDetail = (Guid)item.IdQuestionDetail;
                            question.IdAnswer         = item.IdAnswer;
                        }
                    }
                }

                if (question.CodeTypePoll == CTypePoll.Image)
                {
                    var answers = _answerDao.GetAnswerListByQuestion(question.Id, idTask, idAccount);
                    foreach (
                        var answerDetail in
                        answers.SelectMany(
                            answerItem =>
                            answerItem.AnswerDetails.Where(answerDetail => answerDetail.CopyNumber == question.CopyNumber)))
                    {
                        question.Answer = answerDetail.AnswerValue;
                    }
                }

                foreach (var questionDetail in
                         from questionDetail in question.QuestionDetailCollection
                         let answerDetail =
                             _answerDetailDao.GetAnswerDetail(questionDetail.Id, questionDetail.CopyNumber, answer.Id, idAccount)
                             where answerDetail != null
                             select questionDetail)
                {
                    questionDetail.Checked = true;
                    break;
                }
            }
        }
        public List <MyTaskServicesViewModel> GetServiceListFromCampaign(Guid idCampaign, Guid idAccount, Guid idTask)
        {
            int    numero_seccion   = 0;
            var    servicesParalel  = new ConcurrentBag <MyTaskServicesViewModel>();
            var    campaignServices = _redisCache.Get <List <MyTaskServicesViewModel> >("CampaignServices:" + idCampaign);
            string idseccion        = "";



            if (campaignServices == null || idseccion != "")
            {
                var services = _campaignServicesDao.GetCampaignServicesByCampaign(idCampaign, idAccount);

                services.AsParallel()
                .ForAll(s =>
                {
                    servicesParalel.Add(new MyTaskServicesViewModel()
                    {
                        Code     = s.Service.Code,
                        Id       = s.Service.Id,
                        Name     = s.Service.Name,
                        Template = s.Service.Template,
                        ServiceDetailCollection = GetSectionsFromService(s.IdService, idAccount, idTask)
                    });
                });
                campaignServices = servicesParalel.ToList();

                _redisCache.Set("CampaignServices:" + idCampaign, campaignServices);
            }
            //agregar seccion si es dinamica
            if (campaignServices != null)
            {
                int camp = 0;
                foreach (var q in campaignServices)
                {
                    var s = q.ServiceDetailCollection.Where(x => x.IsDynamic == true).ToList();
                    if (s != null)
                    {
                        foreach (var a in s)
                        {
                            var preguntas = _questionDao.GetQuestion(a.Id).ToList();
                            numero_seccion = 0;

                            foreach (var qtarea in preguntas)
                            {
                                var respuestas = _answerDao.GetAnswerListByQuestionAccount(qtarea.Id, idAccount, idTask).ToList().Count;
                                if (respuestas > 1)
                                {
                                    numero_seccion = respuestas;
                                }
                            }
                            if (numero_seccion > 1)
                            {
                                int numero = 0;
                                foreach (var n in q.ServiceDetailCollection.Where(x => x.Id == a.Id).ToList())
                                {
                                    if (numero > 0)
                                    {
                                        q.ServiceDetailCollection.Remove(n);
                                    }
                                    else
                                    {
                                        foreach (var ques in n.QuestionCollection)
                                        {
                                            ques.sequence = 0;
                                        }
                                    }
                                    numero++;
                                }
                                numero = 0;
                                for (int numRep = 0; numRep < numero_seccion - 1; numRep++)
                                {
                                    MyTaskServicesDetailViewModel SeccionInsertar = new MyTaskServicesDetailViewModel();
                                    SeccionInsertar = GetSectionsFromServiceID(q.Id, idAccount, a.Id, numero + 1);
                                    q.ServiceDetailCollection.Insert(SeccionInsertar.Order, SeccionInsertar);
                                    numero++;
                                }
                            }
                            else
                            {
                                var num    = q.ServiceDetailCollection.Where(x => x.Id == a.Id).ToList();
                                int numero = 0;
                                foreach (var n in q.ServiceDetailCollection.Where(x => x.Id == a.Id).ToList())
                                {
                                    if (numero > 0)
                                    {
                                        q.ServiceDetailCollection.Remove(n);
                                    }
                                    numero++;
                                }
                            }
                        }
                    }
                    campaignServices[camp].ServiceDetailCollection.OrderBy(x => x.Order).ToList();
                    camp++;
                }
            }
            return(campaignServices);
        }