revert report back to html

This commit is contained in:
Mitchell Marino 2023-04-15 23:55:11 -05:00
parent 9b630e8f7e
commit df532dcf8b

View File

@ -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(&current_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(); let mut context = Context::new();
context.insert("grade", &report_query.grade); context.insert("grade", &report_query.grade);
context.insert("date", &Local::now().format("%Y-%m-%d").to_string()); context.insert("date", &Local::now().format("%Y-%m-%d").to_string());
@ -148,75 +98,5 @@ pub async fn get_report(
} }
}; };
// render html to pdf (StatusCode::OK, Json(json!({ "report": report }))).into_response()
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()
}
};
} }