private void PopulateSheetData(List <ActualFlight> list, XlsxExportImport.Base.Builders.SqadXlsxSheetBuilder sheet, ActualWorksheet item)
        {
            NumberFormatInfo format         = CultureInfo.CurrentCulture.NumberFormat;
            string           currencyFormat = "#,##0.00";

            currencyFormat = currencyFormat.Replace(",", format.CurrencyGroupSeparator).Replace(".", format.CurrencyDecimalSeparator);

            List <ExcelCell> row  = new List <ExcelCell>();
            ExcelCell        cell = new ExcelCell();

            foreach (var rec in list)
            {
                cell            = new ExcelCell();
                cell.CellHeader = item.Data;
                cell.CellValue  = rec.DataToString();
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.PlanName;
                cell.CellValue  = rec.PlanName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.VehicleName;
                cell.CellValue  = rec.VehicleName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.ProductName;
                cell.CellValue  = rec.ProductName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.SubtypeName;
                cell.CellValue  = rec.SubtypeName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.UnitName;
                cell.CellValue  = rec.UnitName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.MarketName;
                cell.CellValue  = rec.MarketName;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.DemoName;
                cell.CellValue  = rec.DemoName;
                row.Add(cell);

                foreach (var it in rec.CustomColumnsValues)
                {
                    cell            = new ExcelCell();
                    cell.CellHeader = it.Key;
                    cell.CellValue  = it.Value;
                    row.Add(cell);
                }
                if (rec.CustomColumnsValues == null || rec.CustomColumnsValues.Count == 0)
                {
                    cell            = new ExcelCell();
                    cell.CellHeader = item.CreativeName;
                    cell.CellValue  = rec.CreativeName;
                    row.Add(cell);

                    cell            = new ExcelCell();
                    cell.CellHeader = item.FundingSourceName;
                    cell.CellValue  = rec.FundingSourceName;
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.StartDate;
                cell.CellValue  = string.Format("{0:MM/dd/yyyy}", rec.StartDate);
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.EndDate;
                cell.CellValue  = string.Format("{0:MM/dd/yyyy}", rec.EndDate);
                row.Add(cell);

                //planned
                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedGRPs;
                cell.CellValue  = rec.Planned.GRPs;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedGross;
                cell.CellValue  = rec.Planned.GrossCost;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedGross))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedNet;
                cell.CellValue  = rec.Planned.NetCost;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedNet))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedProduction;
                cell.CellValue  = rec.Planned.Production;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedProduction))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedImpressions;
                cell.CellValue  = rec.Planned.Impressions;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedImpressions))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedClicks;
                cell.CellValue  = rec.Planned.Clicks;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedClicks))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedLeads;
                cell.CellValue  = rec.Planned.Leads;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedLeads))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedRichMedia;
                cell.CellValue  = rec.Planned.RichMedia;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedRichMedia))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedAdServing;
                cell.CellValue  = rec.Planned.AdServing;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedAdServing))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedTRPs;
                cell.CellValue  = rec.Planned.TRPs;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedReach;
                cell.CellValue  = rec.Planned.Reach;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedReach))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.PlannedFrequency;
                cell.CellValue  = rec.Planned.Frequency;
                if (sheet.SheetColumns.Any(x => x.Header == item.PlannedFrequency))
                {
                    row.Add(cell);
                }

                if (rec.Actualized)
                {
                    cell            = new ExcelCell();
                    cell.CellHeader = item.DateActualized;
                    cell.CellValue  = string.Format("{0:MM/dd/yyyy}", rec.DateActualized);
                    row.Add(cell);

                    cell            = new ExcelCell();
                    cell.CellHeader = item.ActualizedBy;
                    cell.CellValue  = rec.ActualizedBy;
                    row.Add(cell);
                }
                else
                {
                    cell.CellHeader = item.DateActualized;
                    cell.CellValue  = string.Empty;
                    row.Add(cell);

                    cell            = new ExcelCell();
                    cell.CellHeader = item.ActualizedBy;
                    cell.CellValue  = string.Empty;
                    row.Add(cell);
                }


                ////actual
                //if (rec.Actual == null)
                //{
                //    sheet.AppendRow(row);
                //    continue;
                //}

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualGRPs;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.GRPs;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualGross;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.GrossCost;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualGross))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualNet;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.NetCost;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualNet))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualProduction;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Production;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualProduction))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualImpressions;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Impressions;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualImpressions))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualClicks;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Clicks;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualClicks))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualLeads;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Leads;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualLeads))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualRichMedia;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.RichMedia;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualRichMedia))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualAdServing;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.AdServing;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualAdServing))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualTRPs;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.TRPs;
                row.Add(cell);

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualReach;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Reach;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualReach))
                {
                    row.Add(cell);
                }

                cell            = new ExcelCell();
                cell.CellHeader = item.ActualFrequency;
                cell.CellValue  = (rec.Actual == null) ? 0 : rec.Actual.Frequency;
                if (sheet.SheetColumns.Any(x => x.Header == item.ActualFrequency))
                {
                    row.Add(cell);
                }

                sheet.AppendRow(row);
            }
        }
Exemple #2
0
        private void PopulateRows(List <string> columns, object value, XlsxExportImport.Base.Builders.SqadXlsxSheetBuilder sheetBuilder, ExcelColumnInfoCollection columnInfo = null, IXlsxDocumentBuilder document = null, List <ExcelCell> rowOverride = null)
        {
            if (sheetBuilder == null)
            {
                return;
            }

            List <ExcelCell> row = new List <ExcelCell>();

            if (rowOverride != null)
            {
                row = rowOverride;
            }

            for (int i = 0; i <= columns.Count - 1; i++)
            {
                string columnName = columns[i];

                if (columnName.EndsWith("_Dict_"))
                {
                    columnName = columnName.Replace("_Dict_", "");

                    object dictionaryObj = null;

                    if (sheetBuilder.GetCurrentTableName == columnName)
                    {
                        dictionaryObj = value;
                    }
                    else if (columnName.Contains(":"))
                    {
                        dictionaryObj = GetFieldPathValue(value, columnName);
                    }
                    else
                    {
                        dictionaryObj = (Dictionary <int, double>)GetFieldOrPropertyValue(value, columnName);
                    }

                    if (dictionaryObj == null || string.IsNullOrEmpty(dictionaryObj.ToString()))
                    {
                        continue;
                    }

                    object dictionaryKeys = dictionaryObj.GetType().GetProperty("Keys").GetValue(dictionaryObj);

                    int colCount = 0;
                    foreach (var key in (System.Collections.IEnumerable)dictionaryKeys)
                    {
                        ExcelCell keyCell = new ExcelCell();
                        keyCell.CellHeader = columnName + $":Key:{colCount}";
                        keyCell.CellValue  = key;
                        ExcelColumnInfo info = null;
                        if (columnInfo != null)
                        {
                            info = columnInfo[i];
                            CreateReferenceCell(info, columnName, document, ref keyCell);
                        }
                        row.Add(keyCell);

                        var currentItem = dictionaryObj.GetType().GetProperty("Item").GetValue(dictionaryObj, new object[] { key });

                        if (FormatterUtils.IsSimpleType(currentItem.GetType()))
                        {
                            ExcelCell valueCell = new ExcelCell();
                            valueCell.CellHeader = columnName + $":Value:{colCount}";
                            valueCell.CellValue  = currentItem;
                            row.Add(valueCell);
                        }
                        else
                        {
                            string path = columnName + $":Value:{colCount}";
                            ExcelColumnInfoCollection listInnerObjectColumnInfo = _columnResolver.GetExcelColumnInfo(currentItem.GetType(), currentItem, path, true);
                            PopulateRows(listInnerObjectColumnInfo.Keys.ToList(), currentItem, sheetBuilder, listInnerObjectColumnInfo, document, row);
                        }



                        colCount++;
                    }
                }
                else if (columnName.EndsWith("_List_"))
                {
                    columnName = columnName.Replace("_List_", "");

                    List <object> listValue = new List <object>();

                    if (columnName.Contains(":"))
                    {
                        var valueObject = GetFieldPathValue(value, columnName);
                        if (valueObject != null && string.IsNullOrEmpty(valueObject.ToString()) == false)
                        {
                            listValue = (List <object>)valueObject;
                        }
                    }
                    else
                    {
                        listValue = (List <object>)GetFieldOrPropertyValue(value, columnName);
                    }

                    int colCount = 0;
                    foreach (var kv in listValue)
                    {
                        string listColumnPrefix = columnName + $":{colCount}";

                        if (FormatterUtils.IsSimpleType(kv.GetType()))
                        {
                            ExcelCell listValueCell = new ExcelCell();
                            listValueCell.CellHeader = listColumnPrefix;
                            listValueCell.CellValue  = kv;
                            row.Add(listValueCell);
                        }
                        else
                        {
                            ExcelColumnInfoCollection listInnerObjectColumnInfo = _columnResolver.GetExcelColumnInfo(kv.GetType(), kv, listColumnPrefix, true);
                            PopulateRows(listInnerObjectColumnInfo.Keys.ToList(), kv, sheetBuilder, listInnerObjectColumnInfo, document, row);
                        }

                        colCount++;
                    }
                }
                else if (columnName.EndsWith("_CustomField_") || columnName.EndsWith("_CustomField_Single_"))
                {
                    bool isSingleValue = columnName.Contains("Single_");

                    columnName = columnName.Replace("_CustomField_", "").Replace("Single_", "");

                    List <object> customFields = null;
                    if (columnName.Contains(":"))
                    {
                        var valueObject = GetFieldPathValue(value, columnName);
                        if (valueObject != null && string.IsNullOrEmpty(valueObject.ToString()) == false)
                        {
                            customFields = (List <object>)valueObject;
                        }
                    }
                    else
                    {
                        customFields = (List <object>)GetFieldOrPropertyValue(value, columnName);
                    }

                    if (customFields == null)
                    {
                        continue;
                    }

                    //need to get all custom columns

                    List <ExcelColumnInfo> allCustomColumns = null;
                    if (isSingleValue)
                    {
                        allCustomColumns = sheetBuilder.SheetColumns.Where(w => w.PropertyName == columnName).ToList();
                    }
                    else
                    {
                        allCustomColumns = sheetBuilder.SheetColumns.Where(w => w.PropertyName.StartsWith(columnName)).ToList();
                    }


                    var objID = GetFieldOrPropertyValue(value, "ID");

                    foreach (var customColumn in allCustomColumns)
                    {
                        object objectCustomField = customFields.Where(w => customColumn.PropertyName.EndsWith($":{((dynamic)w).ID}")).Where(w => customColumn.PropertyName.Contains("Actual") ? ((dynamic)w).Actual == true : ((dynamic)w).Actual == false).FirstOrDefault();

                        ExcelCell customValueHeaderCell = new ExcelCell();

                        if (objectCustomField == null && !isSingleValue)
                        {
                            customValueHeaderCell.IsLocked   = true;
                            customValueHeaderCell.CellHeader = customColumn.Header;
                            customValueHeaderCell.CellValue  = "n/a";
                        }
                        else
                        {
                            dynamic customFieldItem = (dynamic)objectCustomField;



                            string isActualText       = string.Empty;
                            string columnNameCombined = string.Empty;

                            if (isSingleValue)
                            {
                                isActualText       = columnName.Contains("Actual") ? ":Actual" : string.Empty;
                                columnNameCombined = $"{columnName}{isActualText}";
                                customFieldItem    = (dynamic)customFields.First();
                            }
                            else
                            {
                                isActualText       = customFieldItem.Actual ? ":Actual" : string.Empty;
                                columnNameCombined = $"{columnName}{isActualText}:{customFieldItem.ID}";
                            }

                            customValueHeaderCell.CellHeader = customColumn.Header;

                            if (customFieldItem is CustomFieldModel)
                            {
                                if (!String.IsNullOrEmpty((customFieldItem as CustomFieldModel).Key))
                                {
                                    ExcelCell keyPreservationCell = new ExcelCell();
                                    keyPreservationCell.CellHeader = $"{columnNameCombined}:Key:{objID}";
                                    keyPreservationCell.CellValue  = customFieldItem.Key?.ToString();
                                    CreatePreserveCell(keyPreservationCell, document);
                                }
                            }

                            ExcelCell valuePreservationCell = new ExcelCell();
                            valuePreservationCell.CellHeader = $"{columnNameCombined}:Value:{objID}";
                            if (customFieldItem != null)
                            {
                                valuePreservationCell.CellValue = customFieldItem.Value;
                                customValueHeaderCell.CellValue = customFieldItem.Value;

                                if (customFieldItem.Override != null)
                                {
                                    customValueHeaderCell.CellValue = customFieldItem.Override;
                                }
                            }


                            if (valuePreservationCell.CellValue != null && valuePreservationCell.CellValue.GetType() == typeof(DateTime))
                            {
                                valuePreservationCell.CellValue = valuePreservationCell.CellValue.ToString();
                            }
                            if (customValueHeaderCell.CellValue != null && customValueHeaderCell.CellValue.GetType() == typeof(DateTime))
                            {
                                customValueHeaderCell.CellValue = customValueHeaderCell.CellValue.ToString();
                            }

                            CreatePreserveCell(valuePreservationCell, document);

                            ExcelCell overridePreservationCell = new ExcelCell();
                            overridePreservationCell.CellHeader = $"{columnNameCombined}:Override:{objID}";
                            overridePreservationCell.CellValue  = customFieldItem.Override?.ToString();
                            CreatePreserveCell(overridePreservationCell, document);

                            ExcelCell textPreservationCell = new ExcelCell();
                            textPreservationCell.CellHeader = $"{columnNameCombined}:Text:{objID}";
                            textPreservationCell.CellValue  = customFieldItem.Text;
                            CreatePreserveCell(textPreservationCell, document);

                            ExcelCell hiddenTextPreservationCell = new ExcelCell();
                            hiddenTextPreservationCell.CellHeader = $"{columnNameCombined}:HiddenText:{objID}";
                            hiddenTextPreservationCell.CellValue  = $"\"{customFieldItem.HiddenText}\"";
                            CreatePreserveCell(hiddenTextPreservationCell, document);

                            try
                            {
                                if (customFieldItem is CustomFieldModel &&
                                    (customFieldItem as CustomFieldModel).ValueMix != null)
                                {
                                    foreach (var valueM in (customFieldItem as CustomFieldModel).ValueMix)
                                    {
                                        string    valueMKey   = valueM.Key;
                                        decimal   valueMValue = valueM.Value;
                                        ExcelCell mixedPropertyPreservationCell = new ExcelCell();
                                        mixedPropertyPreservationCell.CellHeader = $"{columnNameCombined}:ValueMix:{valueM.Key}:{objID}";
                                        mixedPropertyPreservationCell.CellValue  = $"\"{valueM.Value.ToString()}\"";
                                        CreatePreserveCell(mixedPropertyPreservationCell, document);
                                    }
                                }
                            } catch (Exception ex)
                            {
                                string s = ex.Message;
                            }

                            ExcelCell commonPropertyPreservationCell = new ExcelCell();
                            commonPropertyPreservationCell.CellHeader = $"{columnNameCombined}:Common:{objID}";
                            commonPropertyPreservationCell.CellValue  = $"\"{customFieldItem.Common}\"";
                            CreatePreserveCell(commonPropertyPreservationCell, document);
                        }
                        row.Add(customValueHeaderCell);
                    }
                }
                else
                {
                    ExcelCell cell = new ExcelCell();

                    cell.CellHeader = columnName;

                    var cellValue = GetFieldOrPropertyValue(value, columnName);

                    if (columnName.Contains(":") && (cellValue == null || (cellValue != null && string.IsNullOrEmpty(cellValue.ToString()))))
                    {
                        cellValue = GetFieldPathValue(value, columnName);
                    }

                    ExcelColumnInfo info = null;
                    if (columnInfo != null)
                    {
                        info = columnInfo[i];

                        CreateReferenceCell(info, columnName, document, ref cell);
                    }

                    if (cellValue != null)
                    {
                        cell.CellValue = FormatCellValue(cellValue, info);
                    }

                    if (info != null)
                    {
                        if (info.IsExcelHeaderDefined)
                        {
                            cell.CellHeader = info.Header;
                        }
                    }

                    row.Add(cell);
                }
            }

            if (row.Count() > 0 && rowOverride == null)
            {
                sheetBuilder.AppendRow(row.ToList());
            }
        }