Class: Einvoicing::Connect::FR::Pennylane::EInvoiceSubmitter

Inherits:
Object
  • Object
show all
Defined in:
lib/einvoicing/connect/fr/pennylane/e_invoice_submitter.rb

Overview

Orchestrates Factur-X generation and submission to Pennylane's e-invoice import endpoint.

Requires the hexapdf gem (used internally by Einvoicing::Formats::FacturX).

Examples:

Static API key

creds     = Pennylane::Credentials.api_key("tok_xxx")
submitter = EInvoiceSubmitter.new(credentials: creds)
pdf_bytes = File.binread("invoice.pdf")
submitter.submit(invoice, pdf: pdf_bytes)

OAuth2

creds = Pennylane::Credentials.oauth(
  access_token:  "...", refresh_token: "...",
  client_id:     "...", client_secret: "..."
)
submitter = EInvoiceSubmitter.new(credentials: creds)
submitter.submit(invoice, pdf: pdf_bytes)
# creds.access_token / creds.refresh_token are updated after a refresh

Instance Method Summary collapse

Constructor Details

#initialize(credentials:, sandbox: false) ⇒ EInvoiceSubmitter

Returns a new instance of EInvoiceSubmitter.



27
28
29
# File 'lib/einvoicing/connect/fr/pennylane/e_invoice_submitter.rb', line 27

def initialize(credentials:, sandbox: false)
  @client = Client.new(credentials: credentials, sandbox: sandbox)
end

Instance Method Details

#submit(invoice, pdf:, invoice_options: nil) ⇒ Hash

Generates a Factur-X PDF from invoice and pdf, then submits it.

Parameters:

  • invoice (Einvoicing::Invoice)
  • pdf (String)

    binary content of a PDF (human-readable invoice)

  • invoice_options (Hash, nil) (defaults to: nil)

    optional Pennylane pre-fill options

Returns:

  • (Hash)

    parsed Pennylane API response



37
38
39
40
41
# File 'lib/einvoicing/connect/fr/pennylane/e_invoice_submitter.rb', line 37

def submit(invoice, pdf:, invoice_options: nil)
  xml         = Einvoicing::Formats::CII.generate(invoice)
  facturx_pdf = Einvoicing::Formats::FacturX.embed(pdf, xml)
  @client.submit_einvoice(facturx_pdf, invoice_options: invoice_options)
end