spree-contrib/spree_print_invoice

View on GitHub
lib/spree/print_invoice_setting.rb

Summary

Maintainability
A
1 hr
Test Coverage
module Spree
  class PrintInvoiceSetting < Preferences::Configuration
    preference :next_number,      :integer, default: nil
    preference :logo_path,        :string,  default: 'admin/logo.png'
    preference :page_size,        :string,  default: 'LETTER'
    preference :page_layout,      :string,  default: 'landscape'
    preference :footer_left,      :string,  default: ''
    preference :footer_right,     :string,  default: ''
    preference :return_message,   :text,    default: ''
    preference :anomaly_message,  :text,    default: ''
    preference :use_footer,       :boolean, default: false
    preference :use_page_numbers, :boolean, default: false
    preference :logo_scale,       :integer, default: 50
    preference :font_face,        :string,  default: 'Helvetica'
    preference :font_size,        :integer, default: 9
    preference :store_pdf,        :boolean, default: false
    preference :storage_path,     :string,  default: 'tmp/invoice_prints'

    def page_sizes
      ::PDF::Core::PageGeometry::SIZES.keys
    end

    def page_layouts
      %w(landscape portrait)
    end

    def use_sequential_number?
      next_number.present? && next_number > 0
    end

    def increase_invoice_number!
      current_invoice_number = next_number
      set_preference(:next_number, current_invoice_number + 1)
    end

    def font_faces
      ::Prawn::Font::AFM::BUILT_INS.reject do |font|
        font =~ /zapf|symbol|bold|italic|oblique/i
      end + self.class.additional_fonts.keys
    end

    def font_sizes
      (7..14).to_a
    end

    def logo_scaling
      logo_scale.to_f / 100
    end

    def self.additional_fonts
      @additional_font_faces ||= {
        'DejaVuSans' => {
          bold: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'DejaVuSans-Bold.ttf'),
          italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'DejaVuSans-Oblique.ttf'),
          bold_italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'DejaVuSans-BoldOblique.ttf'),
          normal: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'DejaVuSans.ttf')
        },
        'msjh' => {
          bold: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msjh.ttf'),
          italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msjh.ttf'),
          bold_italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msjh.ttf'),
          normal: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msjh.ttf')
        },
        'msyh' => {
          bold: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msyh.ttf'),
          italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msyh.ttf'),
          bold_italic: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msyh.ttf'),
          normal: SpreePrintInvoice::Engine.root.join('data', 'fonts', 'msyh.ttf')
        }
      }
    end
  end
end