Example #1
0
        public async Task ParseAndValidateBasic()
        {
            var options = new TypedParseToJsonOptions
            {
                TypeAssemblyQualifiedName = typeof(Order).AssemblyQualifiedName,
                NamingStrategy            = JsonNamingStrategy.SnakeCase
            };
            await svc.Import("valid1", options);

            var recordCount = await db.Set <RowRecord>().CountAsync();

            Assert.AreEqual(11, recordCount);
            recordCount = await db.Set <SheetRecord>().CountAsync();

            Assert.AreEqual(3, recordCount);

            recordCount = await db.Set <RowRecord>().CountAsync(x => x.ParseOk == true);

            Assert.AreEqual(11, recordCount);

            await svc.Process("valid1", options);

            recordCount = await db.Set <RowRecord>().CountAsync(x => x.IsValid != null);

            Assert.AreEqual(11, recordCount);
            var resultValidated = queryable.GetValidated(new ExcelQueryValidatedOptions
            {
                Reference = "valid1",
                RowStatus = QueryRowStatus.All
            });

            Assert.IsNotNull(resultValidated.Result.Result.First().Sheet);
            Assert.IsNotNull(resultValidated.Result.Result.First().Reference);
        }
Example #2
0
        public async Task Import(string url, TypedParseToJsonOptions options)
        {
            var container = await loader.Load(url, options);

            if (container.SheetRecords.Any(x => x.HasErrors()))
            {
                throw new InvalidOperationException("Excel sheet invalid");
            }

            await repo.AddExcelSheetFile(container);

            var totalRowsWithErrors           = 0;
            var totalRowsWithValidationErrors = 0;

            while (await reader.ReadRow())
            {
                if (reader.Current.Sheet.IgnoreFirstRow && reader.Current.Index == 1)
                {
                    continue;
                }

                if (totalRowsWithErrors >= options.MaxParseErrors && options.MaxParseErrors != 0)
                {
                    return;
                }
                if (totalRowsWithValidationErrors >= options.MaxValidationErrors && options.MaxValidationErrors != 0)
                {
                    return;
                }

                var parseRequest = options.RowParseRequest(reader.Current) as ExcelRowParseOnTypeRequest;

                var result = await parser.Parse(parseRequest);

                if (result.HasErrors())
                {
                    totalRowsWithErrors++;
                }

                var sheet    = container.Sheets.FirstOrDefault(s => s.Index == reader.Current.Sheet.Index);
                var rowAdded = repo.Add(reader.Current, sheet, result);

                if (container.Sheets.Length == 1 && !result.HasErrors())
                {
                    var validationResult = await validator.Validate(new ExcelRowValidateOnTypeRequest(rowAdded, options.OnType(), options.NamingStrategy));

                    rowAdded.FillData(validationResult.Data, validationResult.IsValid.Value, validationResult.ValidationErrors);
                    if (!validationResult.IsValid.Value)
                    {
                        totalRowsWithValidationErrors++;
                    }
                }

                await repo.SaveChanges();
            }
            ;

            container.ParseComplete = true;
            await repo.SaveChanges();
        }
Example #3
0
        public async Task Process(string reference, TypedParseToJsonOptions parseOptions)
        {
            var count = await repo.GetParsedOkCount(reference);

            for (int i = 0; i < (count / 10) + 1; i++)
            {
                var rows = await repo.GetParsedOk(reference, i *10, 10);

                foreach (var row in rows)
                {
                    var result = await validator.Validate(
                        new ExcelRowValidateOnTypeRequest( row, parseOptions.OnType(), parseOptions.NamingStrategy));

                    row.FillData(result.Data, result.IsValid.Value, result.ValidationErrors);
                }
                await repo.SaveChanges();
            }

            await repo.MarkFileValidated(reference);
        }
Example #4
0
        public async Task <ISheetContainer> LoadExcelFileInfo(string url, TypedParseToJsonOptions options)
        {
            var result = await loader.Load(url, options);

            return(result);
        }