module BrInvoicesPdf::Cfe::Renderer::QrCode

Constants

BARCODE_HEIGHT
SAT_QRCODE_SEPARATOR

Public Instance Methods

barcode_options(pdf, page_width, qrcode_size) click to toggle source
# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 88
def barcode_options(pdf, page_width, qrcode_size)
  {
    at: [(page_width - qrcode_size) / 2, pdf.cursor],
    width: qrcode_size,
    height: BARCODE_HEIGHT
  }
end
execute(pdf, data) click to toggle source
# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 15
def execute(pdf, data)
  render_box(pdf) do
    options = pdf_options(page_paper_width(pdf.page.size), data)

    generate_barcodes(pdf, options)
    generate_qr_code(pdf, data, options)
  end
end
generate_barcode(key) click to toggle source
# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 82
def generate_barcode(key)
  blob = Barby::PngOutputter.new(Barby::Code128A.new(key)).to_png
  StringIO.new(blob)
end
generate_barcodes(pdf, pdf_options) click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 68
def generate_barcodes(pdf, pdf_options)
  options = barcode_options(pdf, pdf_options[:page_width], pdf_options[:barcodes_size])
  access_key = pdf_options[:access_key]
  insert_image(pdf, generate_barcode(access_key[0..21]), options)
  insert_image(pdf, generate_barcode(access_key[22..44]), options)
end
generate_qr_code(pdf, data, options) click to toggle source

:reek: FeatureEnvy

# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 44
def generate_qr_code(pdf, data, options)
  qrcode_string = generate_qr_code_string(options[:access_key], data)
  qrcode_size = options[:qrcode_size]
  opts = {
    at: [(options[:page_width] - qrcode_size) / 2, pdf.cursor],
    width: qrcode_size,
    height: qrcode_size
  }
  insert_image(pdf, generate_qr_code_data(qrcode_string, qrcode_size), opts)
end
generate_qr_code_string(access_key, data) click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 57
def generate_qr_code_string(access_key, data)
  sat_params = data[:sat_params]
  access_key + SAT_QRCODE_SEPARATOR + sat_params[:emission_date] +
    SAT_QRCODE_SEPARATOR + sat_params[:emission_hour] +
    SAT_QRCODE_SEPARATOR + data[:totals][:total].delete('.') + SAT_QRCODE_SEPARATOR +
    data[:company_attributes][:cnpj] + SAT_QRCODE_SEPARATOR +
    sat_params[:document_qr_code_signature]
end
insert_image(pdf, image, options) click to toggle source
# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 76
def insert_image(pdf, image, options)
  pdf.image(image, options)
  pdf.move_down(options[:height])
end
pdf_options(page_width, data) click to toggle source
# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 34
def pdf_options(page_width, data)
  qrcode_size = page_width * 0.65
  barcodes_size = page_width * 0.85
  access_key = data[:access_key][4..48]

  { access_key: access_key, barcodes_size: barcodes_size, qrcode_size: qrcode_size, page_width: page_width }
end
render_box(pdf) { || ... } click to toggle source

:reek: FeatureEnvy

# File lib/br_invoices_pdf/cfe/renderer/qr_code.rb, line 25
def render_box(pdf)
  box(pdf, [0, pdf.cursor], page_content_width(pdf)) do
    pdf.text("Códigos de barra e QR Code\n\n", style: :italic)
    yield
    pdf.move_down(10)
  end
end