public void CreateTitle(ResultSlideConfiguration resultConfig)
 {
     int index;
     var question = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, 50, 20, 600, 50,
                                    "Comparación cruzada", 36,
                                    Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignCenter, out index);
 }
        public CrossComparisonEntity(ResultSlideConfiguration resultConfig)
        {
            Matriz = new Dictionary<AnswerEntity, Dictionary<AnswerEntity, double>>();

            this._resultConfig = resultConfig;

            var raiz = resultConfig.SelectedQuestions[0];
            var qRaizConfig = Globals.ThisAddIn.Session.GetQuestionSlideConfiguration(raiz.QuestionRelation.Id);

            foreach (var a in qRaizConfig.Answers)
            {
                this.Matriz.Add(a, new Dictionary<Questions.Data.AnswerEntity, double>());
            }
            var hojas = resultConfig.SelectedQuestions[1];
            var qHojasConfig = Globals.ThisAddIn.Session.GetQuestionSlideConfiguration(hojas.QuestionRelation.Id);

            foreach (var r in this.Matriz.Keys)
            {
                //var votesForRaiz = r.GetPercentValue(Convert.ToInt32(resultConfig.Decimals));
                foreach (var hoja in qHojasConfig.Answers)
                {
                    //var votesForHoja = hoja.GetPercentValue(Convert.ToInt32(resultConfig.Decimals));
                    //var CrossVotes = (votesForRaiz + votesForHoja) / 2.0;

                    var CrossVotes = r.GetCoincidencesFor(hoja);

                    if (!this.Matriz[r].ContainsKey(hoja))
                        this.Matriz[r].Add(hoja, CrossVotes);
                }

            }
        }
 public void CreateTitle(ResultSlideConfiguration resultConfig)
 {
     var qas = resultConfig.SelectedQuestions.First().QuestionRelation.Name;
     int index;
     var question = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, 50, 20, 600, 50,
                                     qas, 36,
                                     Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignCenter, out index);
 }
        public void UpdateSlide(ResultSlideConfiguration resultConfig)
        {
            CrossComparisonEntity cross = new CrossComparisonEntity(resultConfig);

            var shape = resultConfig.CrossCompConfig.ChartShape;

            var chart = shape.Chart;

            UpdateDataChart(chart, cross);
        }
 public void DrawSlide(ResultSlideConfiguration resultConfig, List<ItemList> lstQuestions)
 {
     foreach (var q in lstQuestions)
     {
         var selectedQ = new SelectedQuetions();
         selectedQ.QuestionRelation = q;
         var qConfig = Globals.ThisAddIn.Session.GetQuestionSlideConfiguration(selectedQ.QuestionRelation.Id);
         selectedQ.AnswersVoted = CreateAnswersVotedShapes(resultConfig, qConfig);
         resultConfig.SelectedQuestions.Add(selectedQ);
     }
 }
        private Microsoft.Office.Interop.PowerPoint.Shape CreateChart(ResultSlideConfiguration resultConfig, out int index)
        {
            if (resultConfig.SelectedQuestions.Count != 2)
                throw new Exception("Debe seleccionar 2 preguntas");

            CrossComparisonEntity cross = new CrossComparisonEntity(resultConfig);

            var shape = PowerPointHelper.CreateChartOn(resultConfig.SlideAssociated,30,90,600,400, out index);

            var chart = shape.Chart;

            UpdateDataChart(chart, cross);

            return shape;
        }
 public void Ordering(ResultSlideConfiguration resultConfig)
 {
     var q = resultConfig.SelectedQuestions.First();
     switch (resultConfig.ValueOrder)
     {
         case HistValueOrder.Ninguno:
             //Ordering(q.AnswersVoted);
             break;
         case HistValueOrder.Ascendente:
             var orderedAsc = q.AnswersVoted.OrderBy(x => x.AnswerAssociated.GetNumericValueForOrder((int)resultConfig.Decimals)).ToList();
             Ordering(orderedAsc);
             break;
         case HistValueOrder.Descendente:
             var orderedDesc = q.AnswersVoted.OrderByDescending(x => x.AnswerAssociated.GetNumericValueForOrder((int)resultConfig.Decimals)).ToList();
             Ordering(orderedDesc);
             break;
         default:
             break;
     }
 }
        public void ResizeCharts(ResultSlideConfiguration resultConfig)
        {
            var q = resultConfig.SelectedQuestions.First();
            foreach (var answ in q.AnswersVoted)
            {
                int answerWidth = Convert.ToInt32(-100 + (100 - resultConfig.HistWidthPercent) * PowerPointHelper.SlideWidth / 100);
                answ.AnswerTextBox.Width = answerWidth;

                int leftChart = PowerPointHelper.GetLeftByPercent(resultConfig.HistWidthPercent)-70;
                int widthChart = PowerPointHelper.GetWidthByPercent(resultConfig.HistWidthPercent, Convert.ToInt32(answ.AnswerAssociated.GetPercentValue((int)resultConfig.Decimals)));

                answ.AnswerChart.Width = widthChart;
                int leftChartValue = leftChart + widthChart + 2;

                if (resultConfig.ValueOrder != HistValueOrder.Ninguno)
                {
                    answ.AnswerChart.Left = leftChart;
                    answ.AnswerChartValue.Left = leftChartValue;
                }
                else
                {
                    //if(resultConfig.NormalConfig.CopyQuestionShpapesFormat)
                    //{
                    //    CopyQuestionShapesFormat(answ);
                    //}
                    if(resultConfig.NormalConfig.KeepTogetherResult)
                    {
                        answ.AnswerChartValue.Left = answ.AnswerChart.Left + answ.AnswerChart.Width + 2;
                        answ.AnswerChartValue.Top = answ.AnswerChart.Top + 1;
                    }

                }
                answ.AnswerChartValue.TextFrame.TextRange.Font.Size = answ.AnswerAssociated.GetValueFontSize();

            }
        }
 public void UpdateSlide(ResultSlideConfiguration resultConfig)
 {
     foreach (var q in resultConfig.SelectedQuestions)
     {
         foreach (var answ in q.AnswersVoted)
         {
             answ.AnswerChartValue.TextFrame.TextRange.Text = answ.AnswerAssociated.GetValue(resultConfig.Valuetype, (int)resultConfig.Decimals);
         }
     }
 }
 public void Ordering(ResultSlideConfiguration resultConfig)
 {
     //throw new NotImplementedException();
 }
        private void ValidateResultSlide()
        {
            var slidesCounts = _app.ActivePresentation.Slides.Count;
            if (slidesCounts == 0)
            {
                MessageBox.Show("Agregue una nueva diapositiva", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                throw new Exception("Slides empty");
            }
            var slideId = ((Microsoft.Office.Interop.PowerPoint.Slide)_app.ActiveWindow.View.Slide).SlideID;

            if (!IsResultSlide(slideId))
            {
                MessageBox.Show(Resources.ResourceManager.GetString("Msg_IsNotResultSlide"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                throw new Exception(Resources.ResourceManager.GetString("Msg_IsNotResultSlide"));
            }
            _currentConfig = Globals.ThisAddIn.Session.GetResultSlideConfiguration(slideId);
        }
        private List<RankingAnswerVotedEntity> RankigVotedShapes(ResultSlideConfiguration resultConfig)
        {
            float initialTop = 110;
            List<RankingAnswerVotedEntity> lst = new List<RankingAnswerVotedEntity>();
            for (int i = 0; i < resultConfig.RankingConfig.TopRanking; i++)
            {
                var ansVoted = new RankingAnswerVotedEntity();

                int answerWidth = Convert.ToInt32(-100 + (100 - resultConfig.HistWidthPercent) * PowerPointHelper.SlideWidth / 100);
                int answerTextboxIndex;
                var answerTextbox = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, 50, initialTop, answerWidth, 35,
                                            "#", 24,
                                            Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out answerTextboxIndex);

                int leftChart = PowerPointHelper.GetLeftByPercent(resultConfig.HistWidthPercent)-70;
                int widthChartValue = 0;
                //if (!double.IsNaN(answer.GetPercentValue((int)resultConfig.Decimals)))
                //    widthChartValue = Convert.ToInt32(answer.GetPercentValue((int)resultConfig.Decimals));
                int widthChart = PowerPointHelper.GetWidthByPercent(resultConfig.HistWidthPercent, widthChartValue);

                int shapeChartIndex;
                var shapeChart = PowerPointHelper.CreateShapeOn(resultConfig.SlideAssociated, leftChart, initialTop, widthChart, 35, out shapeChartIndex);

                int leftChartValue = leftChart + widthChart + 2;
                int widtChartValue = 95;
                int shapeChartValueIndex;
                var shapeChartValue = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, leftChartValue, initialTop, widtChartValue, 35,
                                            "0", 14,
                                            Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out shapeChartValueIndex);

                ansVoted.AnswerTextBox = answerTextbox;
                ansVoted.AnswerTextBoxIndex = answerTextboxIndex;

                ansVoted.AnswerChart = shapeChart;
                ansVoted.AnswerChartIndex = shapeChartIndex;

                ansVoted.AnswerChartValue = shapeChartValue;
                ansVoted.AnswerChartValueIndex = shapeChartValueIndex;

                lst.Add(ansVoted);

                initialTop += 50;
            }
            return lst;
        }
        private List<RankingVotes> GetRankingVotes(ResultSlideConfiguration resultConfig)
        {
            List<VotesFlat> rankingTotal = new List<VotesFlat>();
            Dictionary<AnswerEntity, List<VotesFlat>> dictAnswer = new Dictionary<Questions.Data.AnswerEntity, List<VotesFlat>>();

            foreach (var selectedQ in resultConfig.SelectedQuestions)
            {
                var qConfig = Globals.ThisAddIn.Session.GetQuestionSlideConfiguration(selectedQ.QuestionRelation.Id);
                AnswerEntity correctAnswer = null;
                List<VotesFlat> qRanking = qConfig.GetVotesFromCorrectAnswer(out correctAnswer);
                rankingTotal.AddRange(qRanking);
                if (correctAnswer != null)
                {
                    dictAnswer.Add(correctAnswer, qRanking);
                }
            }
            List<RankingVotes> rvotes = new List<RankingVotes>();
            foreach (var rnkg in rankingTotal)
            {
                int points = ComputatePointsFromCorrectAnswer(dictAnswer, rnkg);
                var r = rvotes.Where(x => x.KeyId == rnkg.KeyId).FirstOrDefault();
                if (r == null)
                    rvotes.Add(new RankingVotes(rnkg.KeyId, rnkg.Keytime, points));
                else
                {
                    r.CorrectAnswerCount++;
                    r.TimeSum += rnkg.Keytime;
                    r.PointsSum += points;
                }
            }

            List<RankingVotes> rvotesOrd = null;
            switch (resultConfig.ValueOrder)
            {
                case HistValueOrder.Ninguno:
                case HistValueOrder.Ascendente:
                    if(resultConfig.RankingConfig.ShowPointsAcum)
                        rvotesOrd = rvotes.OrderBy(x => x.PointsSum).ThenByDescending(y => y.TimeSum).ToList();
                    else
                        rvotesOrd = rvotes.OrderBy(x => x.CorrectAnswerCount).ThenByDescending(y => y.TimeSum).ToList();
                    break;
                case HistValueOrder.Descendente:
                    if (resultConfig.RankingConfig.ShowPointsAcum)
                        rvotesOrd = rvotes.OrderByDescending(x => x.PointsSum).ThenBy(y => y.TimeSum).ToList();
                    else
                        rvotesOrd = rvotes.OrderByDescending(x => x.CorrectAnswerCount).ThenBy(y => y.TimeSum).ToList();
                    break;
            }

            return rvotesOrd.Take(resultConfig.RankingConfig.TopRanking).ToList();
        }
 public void ResizeCharts(ResultSlideConfiguration resultConfig)
 {
     //throw new NotImplementedException();
 }
 internal void SaveResultConfiguration(ResultSlideConfiguration resultConfig)
 {
     resultConfig.IsNew = false;
     this.ResultSlideConfigurations.Add(resultConfig);
 }
        private List<MirrorAnswerVotedEntity> CreateAnswersVotedShapes(ResultSlideConfiguration resultConfig, Questions.Data.QuestionSlideConfiguration qConfig, int index)
        {
            var lst = new List<MirrorAnswerVotedEntity>();

            float initialTop = 110;
            foreach (var answer in qConfig.Answers)
            {
                var ansVoted = new MirrorAnswerVotedEntity();
                //text Answer
                if (index == 1)
                {
                    int answerWidth = Convert.ToInt32(-100 + (100 - resultConfig.HistWidthPercent) * PowerPointHelper.SlideWidth / 100);
                    int answerTextboxIndex;
                    var answerTextbox = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, 50, initialTop, answerWidth, 35,
                                                answer.TextToShow, 24,
                                                Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out answerTextboxIndex);
                    ansVoted.AnswerTextBox = answerTextbox;
                    ansVoted.AnswerTextBoxIndex = answerTextboxIndex;
                }

                //chart
                int leftChart = PowerPointHelper.GetLeftByPercent(resultConfig.HistWidthPercent, (index==1?2:1));
                if (index == 2)
                    leftChart += 60;
                int widthChartValue = 0;
                if (!double.IsNaN(answer.GetPercentValue((int)resultConfig.Decimals)))
                    widthChartValue = Convert.ToInt32(answer.GetPercentValue((int)resultConfig.Decimals));
                int widthChart = PowerPointHelper.GetWidthByPercent(resultConfig.HistWidthPercent, widthChartValue);
                int shapeChartIndex;
                var shapeChart = PowerPointHelper.CreateShapeOn(resultConfig.SlideAssociated, leftChart, initialTop, widthChart, 35, out shapeChartIndex);

                //text Chart
                int leftChartValue = leftChart + widthChart;
                int widtChartValue = 95;
                int shapeChartValueIndex;
                var shapeChartValue = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, leftChartValue, initialTop, widtChartValue, 35,
                                            answer.GetValue(resultConfig.Valuetype, (int)resultConfig.Decimals), answer.GetValueFontSize(),
                                            Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out shapeChartValueIndex);

                if (index == 1)
                {
                    ansVoted.AnswerChart = shapeChart;
                    ansVoted.AnswerChartIndex = shapeChartIndex;

                    ansVoted.AnswerChartValue = shapeChartValue;
                    ansVoted.AnswerChartValueIndex = shapeChartValueIndex;

                    ansVoted.AnswerAssociated = answer;
                }
                else if (index == 2)
                {
                    ansVoted.AnswerChart2 = shapeChart;
                    ansVoted.AnswerChart2Index = shapeChartIndex;

                    ansVoted.AnswerChartValue2 = shapeChartValue;
                    ansVoted.AnswerChartValue2Index = shapeChartValueIndex;

                    ansVoted.AnswerAssociated2 = answer;
                }
                lst.Add(ansVoted);

                initialTop += 50;
            }

            return lst;
        }
        private List<NormalAnswerVotedEntity> CreateAnswersVotedShapes(ResultSlideConfiguration resultConfig, Questions.Data.QuestionSlideConfiguration qConfig)
        {
            var lst = new List<NormalAnswerVotedEntity>();

            float initialTop = 110;
            foreach (var answer in qConfig.Answers)
            {
                var ansVoted = new NormalAnswerVotedEntity();

                int answerWidth = Convert.ToInt32(-100 + (100 - resultConfig.HistWidthPercent) * PowerPointHelper.SlideWidth / 100);
                int answerTextboxIndex;
                var answerTextbox = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, 50, initialTop, answerWidth, 35,
                                            answer.TextToShow, 24,
                                            Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out answerTextboxIndex);

                int leftChart = PowerPointHelper.GetLeftByPercent(resultConfig.HistWidthPercent)-70;
                int widthChartValue = 0;
                if (!double.IsNaN(answer.GetPercentValue((int)resultConfig.Decimals)))
                    widthChartValue = Convert.ToInt32(answer.GetPercentValue((int)resultConfig.Decimals));
                int widthChart = PowerPointHelper.GetWidthByPercent(resultConfig.HistWidthPercent, widthChartValue);

                int shapeChartIndex;
                var shapeChart = PowerPointHelper.CreateShapeOn(resultConfig.SlideAssociated, leftChart, initialTop, widthChart, 35, out shapeChartIndex);

                int leftChartValue = (leftChart + widthChart + 2);
                int widtChartValue = 95;
                int shapeChartValueIndex;
                var shapeChartValue = PowerPointHelper.CreateTextboxOn(resultConfig.SlideAssociated, leftChartValue, initialTop, widtChartValue, 35,
                                            answer.GetValue(resultConfig.Valuetype, (int)resultConfig.Decimals), answer.GetValueFontSize(),
                                            Microsoft.Office.Interop.PowerPoint.PpParagraphAlignment.ppAlignLeft, out shapeChartValueIndex);

                ansVoted.AnswerTextBox = answerTextbox;
                ansVoted.AnswerTextBoxIndex = answerTextboxIndex;

                ansVoted.AnswerChart = shapeChart;
                ansVoted.AnswerChartIndex = shapeChartIndex;

                ansVoted.AnswerChartValue = shapeChartValue;
                ansVoted.AnswerChartValueIndex = shapeChartValueIndex;

                ansVoted.AnswerAssociated = answer;

                lst.Add(ansVoted);

                initialTop += 50;
            }

            if (resultConfig.ValueOrder == HistValueOrder.Ninguno)
                if(resultConfig.NormalConfig.CopyQuestionShpapesFormat)
                    foreach (var answ in lst)
                    {
                        CopyQuestionShapesFormat(answ);
                    }

            return lst;
        }