예제 #1
0
        public byte[] Render(IDataOnlyReport report)
        {
            var columns = report.GetColumnList();

            var data  = new List <object>();
            var input = report.GetData();
            var list  = (input as IEnumerable) ?? new List <object> {
                input
            };

            foreach (var item in list)
            {
                data.Add(item);
            }

            return(ExcelReportGenerator.GeneratePackageBytes(columns, data));
        }
예제 #2
0
        public DashboardVm()
        {
            Perioden = new List <string> {
                "Alle", "Jänner", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "Novermber", "Dezember"
            };
            dh                          = new DataHandler();
            TopProdukte                 = new ObservableCollection <SharedProductMonthSales>();
            reportGenerator             = new ExcelReportGenerator();
            RawMaterialReportBtnClicked = new RelayCommand(CreateRawMaterialExcelReport);
            RatingReportBtnClicked      = new RelayCommand(CreateRatingExcelReport);
            InitialzeDashboard();
            NumerischePerioden = new ObservableCollection <int>()
            {
                0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
            };

            GenerateDemoData();
        }
예제 #3
0
        public async Task Export(String path, Int32 TenantId, Int64 UserId, ExpandoObject prms, HttpResponseBase response)
        {
            var rm = await RequestModel.CreateFromBaseUrl(_host, Admin, path);

            var action = rm.CurrentAction;
            var export = action.Export;

            if (export == null)
            {
                throw new RequestModelException($"There is no export in '{rm.ModelAction}' action");
            }
            if (prms != null)
            {
                prms.Append(action.parameters);
                prms.SetIfNotExists("Id", action.Id);
            }
            IDataModel dm = await _dbContext.LoadModelAsync(action.CurrentSource, action.ExportProcedure, prms);

            var fileName  = export.template.AddExtension(export.format.ToString());
            var appReader = _host.ApplicationReader;
            var filePath  = appReader.MakeFullPath(action.Path, fileName.RemoveHeadSlash());

            if (!appReader.FileExists(filePath))
            {
                throw new FileNotFoundException(filePath);
            }

            switch (export.format)
            {
            case RequestExportFormat.xlsx:
                using (var rep = new ExcelReportGenerator(appReader.FileStreamFullPathRO(filePath)))
                {
                    rep.GenerateReport(dm);
                    Byte[] bytes = File.ReadAllBytes(rep.ResultFile);
                    if (bytes == null || bytes.Length == 0)
                    {
                        throw new RequestModelException("There are no bytes to send");
                    }
                    SetResponseInfo(response, export);
                    response.BinaryWrite(bytes);
                }
                break;
            }
        }
예제 #4
0
        private void Initialize()
        {
            _logger          = LogManager.GetCurrentClassLogger();
            _timeBegin       = DateTime.Now;
            _shiftNumber     = "1";
            _showReport      = "none;";
            _loading         = "hidden;";
            _downloadable    = "none;";
            _url             = "#";
            _reports         = new Reports();
            _shift           = new Shift();
            _shiftReportData = new ShiftReportsData();
            _excel           = new ExcelReportGenerator();
            _buttonState     = true;

            _webRootPath = reportingService.WebHostEnvironment.WebRootPath;
            _webRootPath = Path.Combine(_webRootPath, "files");
            RemoveOldFiles(_webRootPath);
        }
예제 #5
0
        /// <summary>
        /// Отчет за предыдущую смену
        /// </summary>
        private async void GetPrevShift()
        {
            _setLoading(true);
            _showReport   = "none;";
            _buttonState  = false;
            _downloadable = "none;";
            await Task.Delay(100);

            // Получить данные по предыдущей смене
            _shiftData       = _shift.GetPreviousShift();
            _shiftReportData = _reports.GetShiftReports(_shiftData);
            ExcelReportGenerator excel = new ExcelReportGenerator();
            string fileName            = excel.GetShiftDetailReport(_shiftReportData, _webRootPath);

            _url = fileName;

            _downloadable = "inline;";
            _showReport   = "block";
            _buttonState  = true;
            _setLoading(false);
            StateHasChanged();
        }
예제 #6
0
        protected void btnVendorsTotalReport_Click(object sender, EventArgs e)
        {
            string folderReport = Server.MapPath("/Reports/excel/");
            string fileName     = Guid.NewGuid() + "Products-Total-Report.xlsx";
            string filePath     = folderReport + fileName;

            if (Helpers.DirectoryExist(folderReport))
            {
                ExcelReportGenerator.GenerateExcelReport(filePath);
                if (File.Exists(filePath))
                {
                    HttpResponse response = HttpContext.Current.Response;
                    response.ClearContent();
                    response.Clear();
                    response.ContentType = "Application/xlsx";
                    response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
                    response.TransmitFile(filePath);
                    response.Flush();
                    response.End();
                }
            }
        }
예제 #7
0
        public async Task GenerateReportAsync_gives_excel_with_data_from_hotel_rates_repository()
        {
            var hotelRatesRepoMock = new Mock <IHotelRateRepository>();

            hotelRatesRepoMock.Setup(m => m.GetAllAsync())
            .Returns(GetTestAsyncEnumerable());
            const string excelFilePath = "./testexcel.xlsx";
            var          excelOptions  = new ExcelSettingsOptions {
                OutputLocation = excelFilePath,
                SheetName      = "test"
            };
            var excelOptionsMock = new Mock <IOptions <ExcelSettingsOptions> >();

            excelOptionsMock.Setup(m => m.Value)
            .Returns(excelOptions);
            var excelReportGenerator = new ExcelReportGenerator(hotelRatesRepoMock.Object, new HotelRateMapper(), excelOptionsMock.Object);

            await excelReportGenerator.GenerateReportAsync();

            hotelRatesRepoMock.Verify(m => m.GetAllAsync(), Times.Once);
            File.Exists(excelFilePath).Should().Be(true);
            AssertExcelFile(excelFilePath);
        }
예제 #8
0
        public async Task <Object> InvokeAsync(Int64 UserId, Int32 TenantId, Int64 Id, String Report, String Model, String Schema)
        {
            var dm = await _dbContext.LoadModelAsync(String.Empty, $"[{Schema}].[{Model}.Report]", new { UserId, TenantId, Id });

            using (Stream stream = CreateStream(dm, Report))
            {
                using (var rep = new ExcelReportGenerator(stream))
                {
                    rep.GenerateReport(dm);
                    Byte[] bytes = File.ReadAllBytes(rep.ResultFile);
                    if (bytes == null || bytes.Length == 0)
                    {
                        throw new InvalidProgramException("There are no bytes to save");
                    }
                    using (var ms = new MemoryStream(bytes))
                    {
                        AttachmentUpdateInfo ai = new AttachmentUpdateInfo()
                        {
                            UserId   = UserId,
                            TenantId = TenantId,
                            Id       = Id,
                            Mime     = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                            Stream   = ms,
                            Name     = Path.GetFileNameWithoutExtension(Report)
                        };
                        if (String.IsNullOrEmpty(ai.Name))
                        {
                            ai.Name = "Attachment";
                        }
                        var aout = await _dbContext.ExecuteAndLoadAsync <AttachmentUpdateInfo, AttachmentUpdateOutput>
                                       (String.Empty, $"[{Schema}].[{Model}.SaveAttachment]", ai);

                        return(new { aout.Id, Token = _tokenProvider.GenerateToken(aout.Token) });
                    }
                }
            }
        }
예제 #9
0
        public async Task Export(String path, Int32 TenantId, Int64 UserId, ExpandoObject prms, HttpResponseBase response)
        {
            var rm = await RequestModel.CreateFromBaseUrl(_host, path);

            var action = rm.CurrentAction;
            var export = action.Export;

            if (export == null)
            {
                throw new RequestModelException($"There is no export in '{rm.ModelAction}' action");
            }
            if (prms != null)
            {
                prms.Append(action.parameters);
                prms.SetIfNotExists("Id", action.Id);
            }
            IDataModel dm = await _dbContext.LoadModelAsync(action.CurrentSource, action.ExportProcedure, prms, action.commandTimeout);

            _host.CheckTypes(action.Path, action.checkTypes, dm);

            Stream stream    = null;
            var    templExpr = export.GetTemplateExpression();

            if (!String.IsNullOrEmpty(templExpr))
            {
                var bytes = dm.Eval <Byte[]>(templExpr);
                if (bytes == null)
                {
                    throw new RequestModelException($"Template stream not found or its format is invalid. ({templExpr})");
                }
                stream = new MemoryStream(dm.Eval <Byte[]>(templExpr));
            }
            else if (!String.IsNullOrEmpty(export.template))
            {
                var fileName  = export.template.AddExtension(export.format.ToString());
                var appReader = _host.ApplicationReader;
                var filePath  = appReader.MakeFullPath(action.Path, fileName.RemoveHeadSlash());
                if (!appReader.FileExists(filePath))
                {
                    throw new FileNotFoundException($"Template file not found. ({fileName})");
                }
                stream = appReader.FileStreamFullPathRO(filePath);
            }

            switch (export.format)
            {
            case RequestExportFormat.xlsx:
                using (var rep = new ExcelReportGenerator(stream))
                {
                    rep.GenerateReport(dm);
                    Byte[] bytes = File.ReadAllBytes(rep.ResultFile);
                    if (bytes == null || bytes.Length == 0)
                    {
                        throw new RequestModelException("There are no bytes to send");
                    }
                    SetResponseInfo(response, export, dm);
                    response.BinaryWrite(bytes);
                    stream.Close();
                }
                break;

            case RequestExportFormat.dbf:
            case RequestExportFormat.csv:
            {
                var fmt             = export.format.ToString().ToLowerInvariant();
                var extDataProvider = _externalDataProvider.GetWriter(dm, fmt, export.GetEncoding());
                if (extDataProvider == null)
                {
                    throw new RequestModelException($"There is no data provider for '{fmt}' files");
                }
                extDataProvider.Write(response.OutputStream);
                SetResponseInfo(response, export, dm);
            }
            break;
            }
        }
예제 #10
0
        public IActionResult ExportExcel()
        {
            var arg = new VoucherStatementPageResult
            {
                ReportName      = "TestReport",
                SummaryAccounts = new List <SummaryAccount>
                {
                    new SummaryAccount
                    {
                        AccountName = "کارخانه دان-51011",
                        Multiplex   = new List <Multiplex>
                        {
                            new Multiplex {
                                After = 5000000, Befor = 4000
                            },
                        },
                    },
                    new SummaryAccount
                    {
                        AccountName = "پرورش پولت-51018",
                        Multiplex   = new List <Multiplex>
                        {
                            new Multiplex {
                                After = 5000000, Befor = 4000
                            },
                        },
                    },
                    new SummaryAccount
                    {
                        AccountName = "تخم گزار تجاری-51035",
                        Multiplex   = new List <Multiplex>
                        {
                            new Multiplex {
                                After = 5000000, Befor = 4000
                            },
                        },
                    }
                },

                Accounts = new List <AccountDto>
                {
                    new AccountDto
                    {
                        Name = "حقوق پایه",
                        Code = "81010"
                    },
                    new AccountDto
                    {
                        Name = "اضافه کار",
                        Code = "81011"
                    },
                },
                RowResult = new List <VoucherStatementRowResult>
                {
                    new VoucherStatementRowResult
                    {
                        AccountCode = "13351",
                        Credit      = 50000,
                        Debit       = 0
                    },
                    new VoucherStatementRowResult
                    {
                        AccountCode = "21253",
                        Credit      = 0,
                        Debit       = 50000
                    },
                    new VoucherStatementRowResult
                    {
                        AccountCode = "13556",
                        Credit      = 1000000,
                        Debit       = 0
                    },
                    new VoucherStatementRowResult
                    {
                        AccountCode = "13500",
                        Credit      = 1000000,
                        Debit       = 0
                    },
                    new VoucherStatementRowResult
                    {
                        AccountCode = "13499",
                        Credit      = 2000000,
                        Debit       = 0
                    },
                    new VoucherStatementRowResult
                    {
                        AccountCode = "22500",
                        Credit      = 0,
                        Debit       = 4000000
                    }
                }
            };



            var result2     = ExcelReportGenerator.VoucherStatementExcelReport(arg);
            var result22Url = ExcelReportGenerator.VoucherStatementExcelReportUrl(arg, @"E:\TestFolder", "MyCustomName");


            var result = ExcelReportGenerator.TestReport();

            return(Ok(result22Url));
        }