public IEnumerable <ImportCommission> Read(Stream stream)
        {
            var groupLoader = new CommissionGroupLoader();
            var sheetGroups = groupLoader.Load(_config, stream);

            var exchangeRateLoader = new ExchangeRateLoader();
            var sheetExchangeRates = exchangeRateLoader.Load(_config, stream);

            var reader = ExcelReaderFactory.CreateReader(stream);

            var sheetNumber = 0;

            do
            {
                //Increment the sheet number
                sheetNumber++;

                var sheet = _config.Sheets.FirstOrDefault(s => s.Position == sheetNumber);
                if (sheet != null)
                {
                    var sheetGroup        = sheetGroups.FirstOrDefault(s => s.SheetNumber == sheetNumber);
                    var sheetExchangeRate = sheetExchangeRates.FirstOrDefault(s => s.SheetNumber == sheetNumber);

                    foreach (var commission in Read(reader, sheet, sheetGroup, sheetExchangeRate))
                    {
                        yield return(commission);
                    }
                }
            } while (reader.NextResult());
        }
Пример #2
0
        public IEnumerable <string> Read(Stream stream)
        {
            var groupLoader = new CommissionGroupLoader();
            var sheetGroups = groupLoader.LoadForSheet(_sheet, stream);

            var commissionTypes = new List <string>();

            using (var reader = ExcelReaderFactory.CreateReader(stream))
            {
                var sheetNumber = 0;

                do
                {
                    //Increment the sheet number
                    sheetNumber++;

                    if (_sheet.Position != sheetNumber)
                    {
                        continue;
                    }

                    var rowNumber = 0;
                    var header    = new HeaderLocator(_sheet.Config.HeaderIdentifier);

                    while (reader.Read())
                    {
                        rowNumber++;

                        if (!header.Found)
                        {
                            header.Check(reader);
                            continue;
                        }

                        var groupValues = new List <GroupValue>();
                        if (sheetGroups != null)
                        {
                            groupValues = sheetGroups.RowGroups.Single(r => r.RowNumber == rowNumber).GroupValues;
                        }

                        //Ignore row if any of the primary field values are empty
                        var requiredFields           = _sheet.Config.Fields.Where(f => Fields.PrimaryFieldNames().Any(p => p == f.Name));
                        var anyMissingRequiredFields = requiredFields.Any(field =>
                        {
                            var fieldValue = Utils.GetValue(reader, ExcelUtils.ColumnToIndex(field.Column));
                            return(string.IsNullOrWhiteSpace(fieldValue));
                        });

                        if (anyMissingRequiredFields)
                        {
                            continue;
                        }

                        var value = CommissionImportReader.GetCommissionTypeValue(reader, _sheet.Config, groupValues);

                        commissionTypes.Add(value);
                    }
                } while (reader.NextResult());
            }

            return(commissionTypes.Distinct().ToList());
        }