class Berichtsheft::Document

Implements the default document template for weekly reports.

Public Class Methods

new(user, activities, settings) click to toggle source
# File lib/berichtsheft/document.rb, line 6
def initialize(user, activities, settings)
  @user = user
  @activities = activities
  @settings = settings
end

Public Instance Methods

generate() click to toggle source
# File lib/berichtsheft/document.rb, line 12
def generate
  pdf = Prawn::Document.new
  pdf.font_size 11

  pdf.define_grid(columns: 3, rows: 9, gutter: 5)

  pdf.grid(0, 0).bounding_box do
    pdf.text "<b>Name und Vorname: </b>", inline_format: true
    pdf.move_down 5
    pdf.text "<b>Ausbildungsabteilung: </b>", inline_format: true
    pdf.move_down 5
    pdf.text "<b>Ausbildungsnachweis Nr.: </b>", inline_format: true
  end

  pdf.grid(0, 1).bounding_box do
    pdf.text "#{@user.last_name}, #{@user.first_name}", inline_format: true
    pdf.move_down 5
    pdf.text "#{@user.department}"
    pdf.move_down 5
    pdf.text "#{@activities.id_for_week} #{Prawn::Text::NBSP * 20}<b>" \
             "vom:  </b>#{@activities.start_date}", inline_format: true
  end

  pdf.grid(0, 2).bounding_box do
    pdf.move_down 35
    pdf.text "#{Prawn::Text::NBSP * 10}<b>bis:  " \
             "</b>#{@activities.end_date}", inline_format: true
  end

  pdf.move_down -15
  pdf.stroke_horizontal_rule
  pdf.move_down -10

  data = [[
    "Tag", "Ausgeführte Arbeiten", "Einzelstunden", "Gesamtstunden"
  ]]

  activities_for_monday = ""
  time_for_monday = ""

  @activities.for_monday.each do |activity|
    activities_for_monday += "#{activity["description"]}\n"
    time_for_monday += "#{activity["duration"]}\n"
  end

  data += [[
    "Mo",
    activities_for_monday,
    time_for_monday,
    @activities.total_time_monday
    ]]


  activities_for_tuesday = ""
  time_for_tuesday = ""

  @activities.for_tuesday.each do |activity|
    activities_for_tuesday += "#{activity["description"]}\n"
    time_for_tuesday += "#{activity["duration"]}\n"
  end

  data += [[
    "Di",
    activities_for_tuesday,
    time_for_tuesday,
    @activities.total_time_tuesday
    ]]

  activities_for_wednesday = ""
  time_for_wednesday = ""

  @activities.for_wednesday.each do |activity|
    activities_for_wednesday += "#{activity["description"]}\n"
    time_for_wednesday += "#{activity["duration"]}\n"
  end

  data += [[
    "Mi",
    activities_for_wednesday,
    time_for_wednesday,
    @activities.total_time_wednesday
    ]]

  activities_for_thursday = ""
  time_for_thursday = ""

  @activities.for_thursday.each do |activity|
    activities_for_thursday += "#{activity["description"]}\n"
    time_for_thursday += "#{activity["duration"]}\n"
  end

  data += [[
    "Do",
    activities_for_thursday,
    time_for_thursday,
    @activities.total_time_thursday
    ]]

  activities_for_friday = ""
  time_for_friday = ""

  @activities.for_friday.each do |activity|
    activities_for_friday += "#{activity["description"]}\n"
    time_for_friday += "#{activity["duration"]}\n"
  end

  data += [[
    "Fr",
    activities_for_friday,
    time_for_friday,
    @activities.total_time_friday
    ]]

  pdf.move_down 20

  pdf.table data, column_widths: { 0 => 30, 1 => 340, 2 => 85, 3 => 85 } do
    rows(1..5).height = 92
    pdf.font_size(10)
  end

  pdf.move_down 20

  pdf.text "Bemerkung des Ausbilders/Auszubildenden"
  note_field = [[""]]
  pdf.table note_field, column_widths: { 0 => 540 } do
    rows(0).height = 35
  end

  pdf.move_down 20

  footer_data = [["", "", "", ""]]
  footer_data += [[
    "Auszubildender\nDatum und Unterschrift",
    "Ausbilder\nDatum und Unterschrift",
    "Gesetzlicher Vertreter\nDatum und Unterschrift",
    "Bemerkung"
  ]]

  pdf.table footer_data, column_widths: {
    0 => 135, 1 => 135 , 2 => 135, 3 => 135
    } do
    style(columns(0..3)) { |x| x.align = :center }
    rows(0..2).height = 35
  end

  pdf.render_file("#{@settings.file_path}#{@activities.id_for_week}.pdf")
end