# frozen_string_literal: true module PdfDocuments class CustomerReport < Base private def generate move_down 130 logo(width: 250, xs: false) move_down 40 heading1 params.report.name move_down 20 @prawn_document.text "#{I18n.l params.report.updated_at.to_date, format: :long}" move_down 40 safe_display(params.report.comment) do rich_text _1 move_down 30 end @prawn_document.font_size(8) do @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [0, 0]) end @prawn_document.start_new_page @pages = {} params.report.export[:elements].each.with_index(1) do |(element, success_criteria), element_index| new_page(required_space: 200) if element_index > 1 without_page_break do heading2 "#{element_index} #{element.title}" @prawn_document.text("Pfad: #{element.page.path}", inline_format: true) safe_display(element.screenshot) do image(_1.variant(:thumbnail), height: 160) move_down(15) end end rich_text element.description move_down(10) success_criteria.each.with_index(1) do |success_criterion, sc_index| @pages[success_criterion] = @prawn_document.page_number success_criterion_row(success_criterion, [ element_index, sc_index ]) end end @prawn_document.start_new_page heading1("Anhang: Richtlinien") params.report.export[:success_criteria].group_by(&:check).sort_by{ |c, _scs| c.external_number }.each do |check, criteria| heading2(check.display_label) @pages[check] = @prawn_document.page_number { external_number: { label: "WCAG Nummer" }, external_url: { label: "WCAG Link" }, conformity_level: { label: "Konformität" }, conformity_notice_de: { label: "Anmerkung Konformität", rich: true }, priority: { label: "Priorität" }, criterion_de: { label: "Kriterium/Grundlage", rich: true }, exemption_details_de: { label: "Ausnahmen", rich: true }, criterion_details_de: { label: "Verstehen", rich: true }, example_de: { label: "Beispiel", rich: true }, annotation_de: { label: "Anmerkung", rich: true } }.each do |attribute, options| v = check.send(attribute) safe_display(v) do text("#{options[:label]}", inline_format: true) if options[:rich] rich_text(_1) else text(_1) end end end if check.links.any? move_down 5 text("Links", inline_format: true) move_down 5 check.links.group_by(&:link_category).each do |cat, links| rich_text(%Q( #{cat.name} )) end end text("Erfolgskriterien", inline_format: true) text criteria.map(&:number).sort.join(", ") end string = "Seite / " # Green page numbers 1 to 7 options = { at: [ @prawn_document.bounds.right - 150, 776 ], width: 150, align: :right, start_count_at: 2, page_filter: ->(x) { x > 1 } } @prawn_document.number_pages string, options @prawn_document.repeat(2..) do @prawn_document.text_box "#{params.report.name}", at: [ 50, 777 ], inline_format: true, width: 300 # @prawn_document.text_box "#{I18n.l params.report.updated_at.to_date, format: :long}", at: [ 0, 777 ], inline_format: true, width: 532, align: :right @prawn_document.bounding_box([0, 766], width: 532) do hr end @prawn_document.bounding_box([0, 796], width: 200, height: 200) do logo end end @prawn_document.repeat(2..) do # @prawn_document.bounding_box([ 0, 790 ], width: 200) do # logo # end # @prawn_document.formatted_text_box([ { # text: "Dieses Dokument wurd am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')} erstellt.", # size: 8, # align: :right # } ], # at: [ 0, -15 ], # width: 200 # ) # @prawn_document.text_box "#{I18n.l params.report.updated_at.to_date, format: :long}", at: [ 0, 777 ], inline_format: true, width: 532, align: :right @prawn_document.font_size(8) do # @prawn_document.draw_text("Dokument erstellt am #{Time.current.strftime('%d %B %Y')} um #{Time.current.strftime('%H:%M:%S')}", at: [ 0, -15 ]) end # @prawn_document.bounding_box([0, 0], width: 532) do # hr # end end x = params p = @pages @prawn_document.outline.define do x.report.export[:elements].each.with_index(1) do |(element, success_criteria), element_index| section("#{element_index} #{element.title}") do success_criteria.each.with_index(1) do |sc, sc_index| page(title: "#{element_index}.#{sc_index} #{sc.title}", destination: p[sc]) end end end section("Anhang: Richtlinien") do x.report.export[:success_criteria].group_by(&:check).sort_by{ |c, _scs| c.external_number }.each do |check, _criteria| page(title: check.display_label, destination: p[check]) end end end end private def success_criterion_row(success_criterion, index) heading3 "#{index.join(".")} #{success_criterion.title}" safe_display(success_criterion.test_comment) do without_page_break do heading4 "Kommentar" rich_text success_criterion.test_comment end end safe_display(success_criterion.quick_criterion) do without_page_break do heading4 "Kriterium" rich_text success_criterion.quick_criterion end end safe_display(success_criterion.quick_fail) do without_page_break do heading4 "Fail" rich_text success_criterion.quick_fail end end safe_display(success_criterion.quick_fix) do without_page_break do heading4 "Fix" rich_text success_criterion.quick_fix end end heading4("Protokollnummer") text(success_criterion.number) heading4("WCAG") text("#{success_criterion.check.external_number}'", inline_format: true) move_down(10) end end end