revert report back to html
This commit is contained in:
parent
9b630e8f7e
commit
df532dcf8b
122
src/report.rs
122
src/report.rs
@ -81,56 +81,6 @@ pub async fn get_report(
|
||||
}
|
||||
};
|
||||
|
||||
// Create a new PDF document
|
||||
let font_family = match fonts::from_files("./fonts", "Lato", None) {
|
||||
Ok(ff) => ff,
|
||||
Err(err) => {
|
||||
return (
|
||||
StatusCode::INTERNAL_SERVER_ERROR,
|
||||
Json(json!({
|
||||
"error": format!("Unknown error rendering pdf: {:?}", err)
|
||||
})),
|
||||
)
|
||||
.into_response()
|
||||
}
|
||||
};
|
||||
let mut pdf = Document::new(font_family);
|
||||
|
||||
// Add the current date and the report title to the page
|
||||
let current_date = Local::now().format("%B %e, %Y").to_string();
|
||||
pdf.write_text(¤t_date, &title_font, 16.0, 30.0, None)?;
|
||||
let title_text = match report_query.grade {
|
||||
Some(grade) => format!("Student Point Report Grade {}", grade),
|
||||
None => "Student Point Report".to_owned(),
|
||||
};
|
||||
|
||||
pdf.set_title(title_text);
|
||||
let heading_style = Style::new().with_font_size(24).bold();
|
||||
let heading = elements::Text::new(StyledString::new(title_text, heading_style));
|
||||
pdf.push(heading);
|
||||
|
||||
// Define the table headers
|
||||
let headers = vec!["Name", "Points"];
|
||||
|
||||
// Define the table data
|
||||
let data = users
|
||||
.iter()
|
||||
.map(|(name, points)| vec![name.to_string(), points.to_string()])
|
||||
.collect();
|
||||
|
||||
// Define the table builder and set some options
|
||||
let table_builder = PdfTableBuilder::new(&page, 10.0, 80.0, 170.0, headers.len() as u32)
|
||||
.set_font(&header_font, 12.0)
|
||||
.set_text_alignment(genpdf::Alignment::Center)
|
||||
.set_row_height(20.0)
|
||||
.set_header_bg_color((200, 200, 200))
|
||||
.set_header_text_color((0, 0, 0))
|
||||
.set_alternate_row_bg_color((240, 240, 240));
|
||||
|
||||
// Build the table and add it to the page
|
||||
let table = table_builder.build_table(headers, data, &body_font)?;
|
||||
page.add_table(table);
|
||||
// render report to html.
|
||||
let mut context = Context::new();
|
||||
context.insert("grade", &report_query.grade);
|
||||
context.insert("date", &Local::now().format("%Y-%m-%d").to_string());
|
||||
@ -148,75 +98,5 @@ pub async fn get_report(
|
||||
}
|
||||
};
|
||||
|
||||
// render html to pdf
|
||||
|
||||
println!("{}", report);
|
||||
(StatusCode::OK, "").into_response()
|
||||
}
|
||||
|
||||
fn render_pdf(
|
||||
grade: Option<i32>,
|
||||
data: Vec<LeaderBoardEntry>,
|
||||
) -> Result<String, genpdf::error::Error> {
|
||||
let font_family = fonts::from_files("./fonts", "Lato", None)?;
|
||||
let mut pdf = Document::new(font_family);
|
||||
|
||||
// Add the current date and the report title to the page
|
||||
let current_date = Local::now().format("%Y-%m-%d").to_string();
|
||||
let title_text = match grade {
|
||||
Some(grade) => format!("Student Point Report Grade {}", grade),
|
||||
None => "Student Point Report".to_owned(),
|
||||
};
|
||||
|
||||
pdf.set_title(title_text);
|
||||
let heading_style = Style::new().with_font_size(24).bold();
|
||||
let heading = elements::Text::new(StyledString::new(title_text, heading_style));
|
||||
pdf.push(heading);
|
||||
|
||||
let date_text = elements::Text::new(current_date);
|
||||
pdf.push(date_text);
|
||||
|
||||
// Define the table headers
|
||||
let headers = vec!["Name", "Points"];
|
||||
|
||||
// Define the table builder and set some options
|
||||
let mut table = TableLayout::new(vec![2, 1])
|
||||
.set_cell_decorator(elements::FrameCellDecorator::new(true, true, true));
|
||||
for row_data in data {
|
||||
table
|
||||
.row()
|
||||
.element(elements::Paragraph::new(row_data.username))
|
||||
.element(elements::Paragraph::new(
|
||||
row_data.points.unwrap().to_string(),
|
||||
))
|
||||
.push()?;
|
||||
}
|
||||
let table_builder = TableLayout::new(&page, 10.0, 80.0, 170.0, headers.len() as u32)
|
||||
.set_font(&header_font, 12.0)
|
||||
.set_text_alignment(genpdf::Alignment::Center)
|
||||
.set_row_height(20.0)
|
||||
.set_header_bg_color((200, 200, 200))
|
||||
.set_header_text_color((0, 0, 0))
|
||||
.set_alternate_row_bg_color((240, 240, 240));
|
||||
|
||||
// Build the table and add it to the page
|
||||
let table = table_builder.build_table(headers, data, &body_font)?;
|
||||
page.add_table(table);
|
||||
// render report to html.
|
||||
let mut context = Context::new();
|
||||
context.insert("grade", &report_query.grade);
|
||||
context.insert("date", &Local::now().format("%Y-%m-%d").to_string());
|
||||
context.insert("users", &records);
|
||||
let report = match TEMPLATES.render("report.html", &context) {
|
||||
Ok(report) => report,
|
||||
Err(err) => {
|
||||
return (
|
||||
StatusCode::BAD_REQUEST,
|
||||
Json(json!({
|
||||
"error": format!("Unknown error creating event: {:?}", err)
|
||||
})),
|
||||
)
|
||||
.into_response()
|
||||
}
|
||||
};
|
||||
(StatusCode::OK, Json(json!({ "report": report }))).into_response()
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user