public async Task <IActionResult> GetJournalTablePdf([FromBody] JournalTableRequest req)
        {
            await CheckPermission();

            var html = @"<html><head>
                <style type='text/css'>
                .task {
                    width: 100%;
                    border-collapse: collapse;
                    border: 1px solid black;
                }
                .task td {
                    padding: 5px;
                    border: 1px solid black;
                }
                .task th {
                    padding: 5px;
                    background-color: #909090;
                    border: 1px solid black;
                }
                </style></head><body>";

            var tr          = new TaskRepository(_logger);
            var ir          = new InspectionRepository(_logger);
            var serviceTask = new TaskService(_logger);

            html += "<br /><h2>Задачи</h2>";

            var filter = new JournalGridFilter();

            filter.Init(req.Options.Filter);

            var grid       = new ActionGrid <JournalGrid, JournalGridModel, JournalFilter>(_db.Connection, req.Options, filter);
            var gridResult = await grid.GetResultRows();

            if (gridResult.Count() == 0)
            {
                html += "<br /><h4>Список задач отсутствует</h4>";
            }
            else
            {
                html += "<table class='task'><tr><th>№ задачи</th><th>Вагон</th><th>Местоположение</th><th>Оборудование</th><th>Типовая неисправность</th><th>Описание</th><th>Метка</th><th>Время</th><th>Автор</th><th>Комментарий</th></tr>";

                foreach (var task in gridResult)
                {
                    var history = await serviceTask.AddHistoryData(task.Id);

                    var trainTask = await tr.GetTrainTaskForPdf(task.Id);

                    if (trainTask != null)
                    {
                        string comments     = null;
                        var    taskComments = history.OrderBy(h => h.Date).Where(h => h.Type == "Comment" && h.Text != null && h.Text != trainTask.Description);

                        foreach (var comment in taskComments)
                        {
                            comments += $"<i>{comment.Date.ToString("MM.dd.yy")}</i>: {comment.Text}<br />";
                        }

                        html += "<tr><td>" + trainTask.Id + "</td><td>" + trainTask.CarriageSerial + "</td><td>" + trainTask.Location +
                                "</td><td>" + trainTask.Equipment + "</td><td>" + trainTask.Fault + "</td><td>" + trainTask.Description +
                                "</td><td>" + trainTask.Label + "</td><td>" + trainTask.Created +
                                "</td><td>" + trainTask.UserName + "</td></td><td>" + comments + "</td></tr>";
                    }
                }

                html += "</table>";
            }

            var output = _pdfConverter.Convert(new HtmlToPdfDocument
            {
                GlobalSettings =
                {
                    ColorMode   = ColorMode.Color,
                    Orientation = Orientation.Landscape,
                    PaperSize   = PaperKind.A4,
                },
                Objects =
                {
                    new ObjectSettings
                    {
                        PagesCount     = true,
                        HtmlContent    = html,
                        WebSettings    = { DefaultEncoding = "utf-8" },
                        FooterSettings ={ FontName                             = "Arial", FontSize = 9, Right = "[page]", Line = false},
                    }
                }
            });

            return(File(output, "application/pdf", "journal_" + new Random().Next(0, 10000) + ".pdf"));
        }
Example #2
0
        public async Task <IActionResult> Journal(JournalGridOptions options, CommandType command)
        {
            if (command == CommandType.Save)
            {
                return(Ok());
            }

            if (command == CommandType.Clear)
            {
                options.Page   = 1;
                options.Filter = new JournalFilter();
                options.SetSortOptionsDefault();
                options.SetSelectedRowsDefault();
            }

            var filter = new JournalGridFilter();

            filter.Init(options.Filter);

            if (filter.IsEmptyFilter())
            {
                options.SetSelectedRowsDefault();
            }

            //var user = await _authService.GetCurrentUser();

            //filter.ApplyPermission(user);

            if (command == CommandType.None || command == CommandType.Clear)
            {
                filter.Configure();
            }

            var grid = new ActionGrid <JournalGrid, JournalGridModel, JournalFilter>(_db.Connection, options, filter)
            {
                MapResult = (row, result) =>
                {
                    var rowId = row.HasInspection ? "M_" + row.Id : "E_" + row.Id;
                    result["id"] = rowId;
                    result.Add("parentId", null);
                    result.Add("childCount", row.Count);
                    result.Add("hasInspection", row.HasInspection);
                    //result.Add("isSelected", options.IsSelectedRow(rowId));
                }
            };

            filter.IsEmptyFilter();

            var data = await grid.Render();

            if (command == CommandType.Page)
            {
                return(Ok(new
                {
                    isEmptyFilter = filter.IsEmptyFilter(),
                    DataSource = data,
                }));
            }

            return(Ok(new
            {
                FilterInfo = filter.GetVisibleFilters(options.VisibleFilters),
                Filter = options.Filter,
                isEmptyFilter = filter.IsEmptyFilter(),
                SortOptions = options.SortOptions,
                AllColumns = grid.GetAllColumns,
                VisibleColumns = grid.GetVisibleColumns,
                DataSource = data,
                IsSelectedAll = options.IsSelectedAll,
                SelectedRows = grid.GetSelectedRows,
                Data = new
                {
                    DataSource = await _commonService.GetAllReference()
                }
            }));
        }