use std::iter::zip;
use genpdf::*;
use crate::{
tabs::{
get_school, limitations::limitations_ui::teachers_scheds, school_name,
teachers::get_teachers,
},
DAYS,
};
pub fn teachers_prints() {
let fon_family = crate::fonts::font_family();
let mut doc = genpdf::Document::new(fon_family);
doc.set_title(format!("{}", &*school_name().read()));
let mut decorator = genpdf::SimplePageDecorator::new();
decorator.set_margins(10);
doc.set_page_decorator(decorator);
print_teachers(&mut doc);
doc.render_to_file("ogretmenler.pdf")
.expect("Failed to write PDF file");
opener::open(std::path::Path::new("ogretmenler.pdf"));
}
fn print_teachers(doc: &mut genpdf::Document) {
let school_name = &*school_name().read();
doc.set_minimal_conformance();
doc.set_line_spacing(1.25);
let mut decorator = genpdf::SimplePageDecorator::new();
decorator.set_margins(10 as i32);
doc.set_page_decorator(decorator);
doc.set_line_spacing(1.25);
let teachers = &*get_teachers().read();
for teacher in teachers {
let mut title = elements::LinearLayout::vertical();
let mut title_style = style::Style::new();
title_style.set_bold();
title_style.set_font_size(20);
let title_paragraph = elements::Paragraph::default();
title.push(
title_paragraph
.styled_string(school_name, title_style)
.aligned(Alignment::Center),
);
let t_name = format!("{}", teacher.1.name);
let mut teacher_style = style::Style::new();
teacher_style.set_italic();
teacher_style.set_font_size(18);
title.push(elements::Paragraph::new(&t_name).aligned(Alignment::Center));
doc.push(title);
add_row(doc, teacher.1.id);
doc.push(elements::PageBreak::new());
}
}
fn add_row(doc: &mut genpdf::Document, c: i32) {
let len = get_school().read().hour as usize;
let mut table = elements::TableLayout::new(vec![8; len + 1]);
table.set_cell_decorator(elements::FrameCellDecorator::new(true, true, false));
let mut row = table.row();
row.push_element(
create_row_title(format!("{} ve {}", "Günler", "Saatler")).aligned(Alignment::Center),
);
for hour in vec![1; len].iter().enumerate() {
row.push_element(
create_row_title(format!("{}. saat", hour.0 + 1)).aligned(Alignment::Center),
);
}
row.push().expect("Invalid table row");
let sched = teachers_scheds().read();
let scheds = sched.get(&c).unwrap();
for (day, sched) in zip(DAYS, scheds) {
let mut row = table.row();
let mut day_row = elements::LinearLayout::vertical();
day_row.push(create_row_title(day.to_string()).aligned(Alignment::Center));
let mut line_style = style::Style::new();
line_style.bold();
line_style.set_font_size(8);
row.push_element(day_row);
for s in sched {
if let Some(s) = s {
row.push_element(create_row_title(format!("{:?}", s)))
} else {
row.push_element(create_row_title("".to_string()))
}
}
row.push().unwrap();
}
doc.push(table);
}
fn create_row_title(title: String) -> elements::Paragraph {
let paragraph = elements::Paragraph::default();
let mut title_style = style::Style::new();
title_style.bold();
title_style.set_font_size(10);
paragraph.styled_string(title, title_style)
}