Exemple #1
0
        private StandaloneDigitalInfoOneSheetOutputModel PrepareOneSheetOutput()
        {
            var outputPage = new StandaloneDigitalInfoOneSheetOutputModel(_dataContainer);

            outputPage.Advertiser    = _dataContainer.ParentScheduleSettings.BusinessName;
            outputPage.DecisionMaker = _dataContainer.ParentScheduleSettings.DecisionMaker;

            var temp = new List <string>();

            if (_digitalInfo.ShowMonthlyInvestemt && _digitalInfo.MonthlyInvestment.HasValue)
            {
                temp.Add(String.Format("Monthly Digital Investment: {0}", _digitalInfo.MonthlyInvestment.Value.ToString("$#,###.00")));
            }
            if (_digitalInfo.ShowTotalInvestemt && _digitalInfo.TotalInvestment.HasValue)
            {
                temp.Add(String.Format("Total Digital Investment: {0}", _digitalInfo.TotalInvestment.Value.ToString("$#,###.00")));
            }
            outputPage.SummaryInfo = temp.Any() ? String.Join("     ", temp) : String.Empty;

            outputPage.Color = MediaMetaData.Instance.SettingsManager.SelectedColor ??
                               BusinessObjects.Instance.OutputManager.ScheduleColors.Items.Select(ci => ci.Name).FirstOrDefault();

            #region Set OutputDigitalProduct Values
            for (var j = 0; j < _digitalInfo.Records.Count; j++)
            {
                var digitalInfoRecord = _digitalInfo.Records[j];
                var outputProduct     = new DigitalInfoRecordOutputModel();
                outputProduct.LineID = digitalInfoRecord.Index.ToString("00");
                outputProduct.Logo   = _digitalInfo.ShowLogo ?
                                       digitalInfoRecord.Logo?.Clone <ImageSource, ImageSource>() :
                                       null;
                outputProduct.Details = digitalInfoRecord.OneSheetDetails;
                outputPage.Records.Add(outputProduct);
                Application.DoEvents();
            }
            #endregion

            outputPage.GetLogos();
            outputPage.PopulateReplacementsList();

            return(outputPage);
        }
        public static void AppendDigitalOneSheet(this PowerPointProcessor target, StandaloneDigitalInfoOneSheetOutputModel dataModel, Theme selectedTheme, bool pasteToSlideMaster, Presentation destinationPresentation = null)
        {
            try
            {
                var thread = new Thread(delegate()
                {
                    MessageFilter.Register();
                    var copyOfReplacementList    = new Dictionary <string, string>(dataModel.ReplacementsList);
                    var presentationTemplatePath = dataModel.TemplateFilePath;
                    if (!File.Exists(presentationTemplatePath))
                    {
                        return;
                    }
                    var presentation = target.PowerPointObject.Presentations.Open(presentationTemplatePath, WithWindow: MsoTriState.msoFalse);
                    var taggedSlide  = presentation.Slides.Count > 0 ? presentation.Slides[1] : null;

                    var logoShapes = new List <Shape>();
                    foreach (var shape in taggedSlide.Shapes.OfType <Shape>().Where(s => s.HasTable != MsoTriState.msoTrue))
                    {
                        for (var i = 1; i <= shape.Tags.Count; i++)
                        {
                            var shapeTagName = shape.Tags.Name(i);
                            for (var j = 0; j < BaseDigitalInfoOneSheetOutputModel.MaxRecords; j++)
                            {
                                if (shapeTagName.Equals(String.Format("DIGLOGO{0}", j + 1)))
                                {
                                    var fileName = dataModel.Logos.Length > j ? dataModel.Logos[j] : String.Empty;
                                    if (!String.IsNullOrEmpty(fileName) && File.Exists(fileName))
                                    {
                                        var newShape = taggedSlide.Shapes.AddPicture(fileName, MsoTriState.msoFalse, MsoTriState.msoCTrue, shape.Left,
                                                                                     shape.Top, shape.Width, shape.Height);
                                        newShape.Top    = shape.Top;
                                        newShape.Left   = shape.Left;
                                        newShape.Width  = shape.Width;
                                        newShape.Height = shape.Height;
                                        logoShapes.Add(newShape);
                                    }
                                    shape.Visible = MsoTriState.msoFalse;
                                }
                            }
                        }
                    }

                    var tableContainer = taggedSlide.Shapes.Cast <Shape>().FirstOrDefault(s => s.HasTable == MsoTriState.msoTrue);
                    if (tableContainer == null)
                    {
                        return;
                    }
                    var table             = tableContainer.Table;
                    var tableRowsCount    = table.Rows.Count;
                    var tableColumnsCount = table.Columns.Count;
                    for (var i = 1; i <= tableRowsCount; i++)
                    {
                        for (var j = 1; j <= tableColumnsCount; j++)
                        {
                            var tableShape = table.Cell(i, j).Shape;
                            if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                            {
                                continue;
                            }
                            var cellText = tableShape.TextFrame.TextRange.Text.Replace(" ", "");
                            var key      = copyOfReplacementList.Keys.FirstOrDefault(k => k.Replace(" ", "").ToLower().Equals(cellText.ToLower()));
                            if (String.IsNullOrEmpty(key))
                            {
                                continue;
                            }
                            tableShape.TextFrame.TextRange.Text = copyOfReplacementList[key];
                            copyOfReplacementList.Remove(cellText);
                        }
                    }
                    tableColumnsCount = table.Columns.Count;
                    for (var i = tableColumnsCount; i >= 1; i--)
                    {
                        var tableShape = table.Cell(3, i).Shape;
                        if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                        {
                            continue;
                        }
                        var cellText = tableShape.TextFrame.TextRange.Text.Trim();
                        if (!cellText.Equals("Delete Column"))
                        {
                            continue;
                        }
                        table.Columns[i].Delete();
                    }
                    tableRowsCount = table.Rows.Count;
                    for (var i = tableRowsCount; i >= 1; i--)
                    {
                        for (var j = 1; j < 3; j++)
                        {
                            var tableShape = table.Cell(i, j).Shape;
                            if (tableShape.HasTextFrame != MsoTriState.msoTrue)
                            {
                                continue;
                            }
                            var cellText = tableShape.TextFrame.TextRange.Text.Trim();
                            if (!cellText.Equals("Delete Row"))
                            {
                                continue;
                            }
                            table.Rows[i].Delete();
                            break;
                        }
                    }
                    if (pasteToSlideMaster)
                    {
                        var newSlide = presentation.Slides.Add(1, PpSlideLayout.ppLayoutBlank);
                        Design design;
                        if (selectedTheme != null)
                        {
                            presentation.ApplyTheme(selectedTheme.GetThemePath());
                            design      = presentation.Designs[presentation.Designs.Count];
                            design.Name = DateTime.Now.ToString("MMddyy-hhmmsstt");
                        }
                        else
                        {
                            design = presentation.Designs.Add(DateTime.Now.ToString("MMddyy-hhmmsstt"));
                        }
                        tableContainer.Copy();
                        design.SlideMaster.Shapes.Paste();
                        foreach (var logoShape in logoShapes)
                        {
                            logoShape.Copy();
                            design.SlideMaster.Shapes.Paste();
                        }

                        if (dataModel.ContractSettings.IsConfigured)
                        {
                            target.FillContractInfo(design, dataModel.ContractSettings, BusinessObjects.Instance.OutputManager.ContractTemplateFolder);
                        }

                        newSlide.Design = design;
                    }
                    else
                    {
                        if (selectedTheme != null)
                        {
                            presentation.ApplyTheme(selectedTheme.GetThemePath());
                        }

                        if (dataModel.ContractSettings.IsConfigured)
                        {
                            target.FillContractInfo(taggedSlide, dataModel.ContractSettings, BusinessObjects.Instance.OutputManager.ContractTemplateFolder);
                        }
                    }
                    target.AppendSlide(presentation, 1, destinationPresentation);
                    presentation.Close();
                });
                thread.Start();
                while (thread.IsAlive)
                {
                    Application.DoEvents();
                }
            }
            catch
            {
            }
            finally
            {
                MessageFilter.Revoke();
            }
        }
 public static void PrepareDigitalOneSheetEmail(this PowerPointProcessor target, string fileName, StandaloneDigitalInfoOneSheetOutputModel page, Theme selectedTheme, bool pasteToSlideMaster)
 {
     target.PreparePresentation(fileName, presentation => target.AppendDigitalOneSheet(page, selectedTheme, pasteToSlideMaster, presentation));
 }