protected override void FillItems()
        {
            try
            {
                foreach (string file in SourceFiles)
                {
                    using (var streamReader = new StreamReader(file))
                    {
                        List <string> fileHeaders = streamReader.ReadLine().Split(Separator).ToList();

                        // Contiene el header(key) y la posicion(value) en el archivo original, que seran incluidos en el reporte.
                        Dictionary <string, int> headers = GetHeadersIndexes(_reportConfiguration.ReportFields, fileHeaders, out int processedIndex, out int resultIndex);

                        if (processedIndex == -1 || resultIndex == -1)
                        {
                            continue;
                        }

                        while (!streamReader.EndOfStream)
                        {
                            string[] lineArray = streamReader.ReadLine().Split(Separator);

                            if (lineArray.Length <= resultIndex || lineArray[processedIndex] != Constants.PROCESS_RESULT_OK)
                            {
                                continue;
                            }

                            var item = new ReportItem();

                            foreach (string key in headers.Keys)
                            {
                                //index in original file.
                                int value = headers[key];

                                //index in report
                                int index = value;
                                ReportFieldConfiguration field = _reportConfiguration.ReportFields.FirstOrDefault(x => x.NameInFile == key);
                                if (field != null)
                                {
                                    index = field.Position;
                                }

                                item.AddValue(lineArray[value].Trim(), index);
                            }

                            item.ResultId = lineArray[resultIndex];

                            _items.Add(item);
                        }
                    }
                }

                GetDataFromDB(_items, _dateFormat);
            }
            catch (Exception)
            {
                _logger.Error("Error trying to get report items");
                throw;
            }
        }
        protected override void FillItems()
        {
            Dictionary <string, int> headers;

            try
            {
                using (StreamReader streamReader = new StreamReader(SourceFile))
                {
                    int processedIndex;
                    int resultIndex;

                    headers = GetHeadersIndexes(_reportConfiguration.ReportFields, streamReader.ReadLine().Split(Separator).ToList(), out processedIndex, out resultIndex);

                    while (!streamReader.EndOfStream)
                    {
                        string[] lineArray = streamReader.ReadLine().Split(Separator);

                        if (processedIndex == -1 || resultIndex == -1 || lineArray.Length <= resultIndex)
                        {
                            continue;
                        }

                        if (lineArray[processedIndex] != Constants.PROCESS_RESULT_OK)
                        {
                            continue;
                        }

                        var item = new ReportItem();

                        foreach (int value in headers.Values)
                        {
                            item.AddValue(lineArray[value].Trim());
                        }

                        item.ResultId = lineArray[resultIndex];

                        _items.Add(item);
                    }
                }

                GetDataFromDB(_items, _dateFormat);
            }
            catch (Exception)
            {
                _logger.Error("Error trying to get report items");
                throw;
            }
        }
        protected override void FillItems()
        {
            Dictionary <string, int>         headers;
            List <Dictionary <string, int> > headersList;

            try
            {
                foreach (string file in SourceFiles)
                {
                    using (var reader = new StreamReader(file))
                    {
                        int processedIndex;
                        int resultIndex;

                        List <string> fileHeaders = reader.ReadLine().Split(Separator).ToList();

                        headers = GetHeadersIndexes(_reportConfiguration.ReportFields, fileHeaders, out processedIndex, out resultIndex);

                        //headersList = GetHeadersList(_reportConfiguration.Fields.Except(headers.Keys).ToList(), fileHeaders);
                        List <string> fields = _reportConfiguration.ReportFields.Where(x => !string.IsNullOrEmpty(x.NameInFile)).Select(x => x.HeaderName).Except(headers.Keys).ToList();
                        headersList = GetHeadersList(fields, fileHeaders);

                        while (!reader.EndOfStream)
                        {
                            string[] lineArray = reader.ReadLine().Split(Separator);

                            if (processedIndex == -1 || resultIndex == -1 || lineArray.Length <= resultIndex)
                            {
                                continue;
                            }

                            if (lineArray[processedIndex] != Constants.PROCESS_RESULT_OK)
                            {
                                continue;
                            }

                            string resultId = lineArray[resultIndex];

                            foreach (var dHeader in headersList)
                            {
                                bool hasValue = false;
                                var  item     = new ReportItem();
                                foreach (int specialValue in dHeader.Values)
                                {
                                    string fileValue = lineArray[specialValue];
                                    if (!string.IsNullOrEmpty(fileValue))
                                    {
                                        item.AddValue(fileValue.Trim());
                                        hasValue = true;
                                    }
                                }

                                if (hasValue)
                                {
                                    foreach (int fixValue in headers.Values)
                                    {
                                        item.AddValue(lineArray[fixValue].Trim(), fixValue);
                                    }
                                    item.ResultId = resultId;
                                    _items.Add(item);
                                }
                            }
                        }
                    }
                }

                GetDataFromDB(_items, _dateFormat);
            }
            catch (Exception e)
            {
                _logger.Error("Error trying to get report items");
                throw;
            }
        }
示例#4
0
        protected void GetDataFromDB(List <ReportItem> items, string dateFormat)
        {
            List <string> guids = items.Select(it => it.ResultId).Distinct().ToList();

            var sqlHelper = new SqlHelper();

            try
            {
                int i = 0;
                while (i < guids.Count)
                {
                    // TODO use skip take from linq.
                    var aux = new List <string>();
                    for (int count = 0; i < guids.Count && count < 1000; count++)
                    {
                        aux.Add(guids[i]);
                        i++;
                    }

                    List <DBReportItem> dbReportItemList = sqlHelper.GetResultsByDeliveryList(UserId, aux);
                    foreach (DBReportItem dbReportItem in dbReportItemList)
                    {
                        ReportItem item = items.FirstOrDefault(x => x.ResultId == dbReportItem.MessageGuid);
                        if (item != null)
                        {
                            string status;
                            string description;
                            GetStatusAndDescription(dbReportItem, out status, out description);

                            foreach (ReportFieldConfiguration reportField in _reportConfiguration.ReportFields.Where(x => !string.IsNullOrEmpty(x.NameInDB)))
                            {
                                switch (reportField.NameInDB)
                                {
                                case "CreatedAt":
                                    item.AddValue(dbReportItem.CreatedAt.AddHours(ReportGMT).ToString(dateFormat), reportField.Position);
                                    break;

                                case "Status":
                                    item.AddValue(status, reportField.Position);
                                    break;

                                case "Description":
                                    item.AddValue(description, reportField.Position);
                                    break;

                                case "ClickEventsCount":
                                    item.AddValue(dbReportItem.ClickEventsCount.ToString(), reportField.Position);
                                    break;

                                case "OpenEventsCount":
                                    item.AddValue(dbReportItem.OpenEventsCount.ToString(), reportField.Position);
                                    break;

                                case "Subject":
                                    item.AddValue(dbReportItem.Subject, reportField.Position);
                                    break;

                                case "FromEmail":
                                    item.AddValue(dbReportItem.FromEmail, reportField.Position);
                                    break;

                                case "FromName":
                                    item.AddValue(dbReportItem.FromName, reportField.Position);
                                    break;

                                case "Address":
                                    item.AddValue(dbReportItem.Address, reportField.Position);
                                    break;

                                case "OpenDate":
                                    item.AddValue(dbReportItem.OpenDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position);
                                    break;

                                case "ClickDate":
                                    item.AddValue(dbReportItem.ClickDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position);
                                    break;

                                case "BounceDate":
                                    item.AddValue(dbReportItem.BounceDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position);
                                    break;
                                }
                            }
                        }
                    }

                    aux.Clear();
                }

                sqlHelper.CloseConnection();
            }
            catch (Exception e)
            {
                _logger.Error($"Error on get data from DB {e}");
                throw;
            }
        }