From df532dcf8bf158bc047c71e4fb549f612c07b05d Mon Sep 17 00:00:00 2001 From: Mitchell Marino Date: Sat, 15 Apr 2023 23:55:11 -0500 Subject: [PATCH] revert report back to html --- src/report.rs | 122 +------------------------------------------------- 1 file changed, 1 insertion(+), 121 deletions(-) diff --git a/src/report.rs b/src/report.rs index 53850ad..e489c67 100644 --- a/src/report.rs +++ b/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, - data: Vec, -) -> Result { - 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() }