Пример #1
0
        async Task GenerateFile()
        {
            var postResponse = await HttpClient.PostAsJsonAsync(_apiPostFileUrl, _options);

            postResponse.EnsureSuccessStatusCode();
            var json = await postResponse.Content.ReadAsStringAsync();

            ExportResult           = JsonConvert.DeserializeObject <ExportResultViewModel>(json);
            ShowExportResultDialog = true;
        }
        public async Task <ActionResult <ExportResultViewModel> > ExportReferential(ExportOptionsViewModel options)
        {
            IList <ExchangeDataRow> models = new List <ExchangeDataRow>();
            var exportResult = new ExportResultViewModel();

            if (options.IncludeFamily)
            {
                await ExportFamilies(models, options, exportResult);
            }

            if (options.IncludeCategory)
            {
                await ExportCategories(models, options, exportResult);
            }

            using var memo = new MemoryStream();

            switch (options.FileType)
            {
            case ".xlsx":
            {
                using var xlsxWriter = new XlsWriter <ExchangeDataRow>(options, models, memo);
                xlsxWriter.Write();
                exportResult.FileMimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                break;
            }

            case ".csv":
            {
                using var stmWriter       = new StreamWriter(memo);
                using var csvWriter       = new CsvWriter <ExchangeDataRow>(options, models, stmWriter);
                exportResult.FileMimeType = "text/csv";
                csvWriter.Write();
                stmWriter.Close();
                break;
            }

            case ".xml":
            {
                using var stmWriter       = new StreamWriter(memo);
                using var xmlWriter       = new XmlWriter <ExchangeDataRow>(options, models, stmWriter);
                exportResult.FileMimeType = "application/xml";
                xmlWriter.Write();
                stmWriter.Close();
                break;
            }
            }

            exportResult.FileContent = memo.ToArray();
            return(Ok(exportResult));
        }
        private async Task ExportCategories(IList <ExchangeDataRow> models, ExportOptionsViewModel options, ExportResultViewModel exportResult)
        {
            List <AdsCategoryViewModel> categories = new List <AdsCategoryViewModel>();

            if (!string.IsNullOrEmpty(options.Category))
            {
                categories.AddRange(await _adsUnitOfWork.CategoriesRepository.FilterByIds(options.Category.Split(';').Select(i => Guid.Parse(i)).ToList()));
            }
            else
            {
                if (!string.IsNullOrEmpty(options.Family))
                {
                    categories.AddRange(await _adsUnitOfWork.CategoriesRepository.GetByFamily(Guid.Parse(options.Family)));
                }
                else
                {
                    categories.AddRange(await _adsUnitOfWork.CategoriesRepository.GetAll());
                }
            }

            exportResult.CategoriesExported = categories.Count;

            foreach (var category in categories)
            {
                ParseCategory(category, models);
            }
        }
        private async Task ExportFamilies(IList <ExchangeDataRow> models, ExportOptionsViewModel options, ExportResultViewModel exportResult)
        {
            List <AdsFamilyViewModel> families = new List <AdsFamilyViewModel>();

            if (!string.IsNullOrEmpty(options.Family))
            {
                var family = await _adsUnitOfWork.FamiliesRepository.Get(Guid.Parse(options.Family));

                families.Add(family);
            }
            else
            {
                families.AddRange(await _adsUnitOfWork.FamiliesRepository.GetAll());
            }

            exportResult.FamiliesExported = families.Count;

            foreach (var family in families)
            {
                await ParseFamily(family, models);
            }
        }