Class: Ticketbai::Operations::Issuance

Inherits:
Ticketbai::Operation show all
Defined in:
lib/ticketbai/operations/issuance.rb

Constant Summary collapse

DEFAULT_VAT_KEY =
'01'.freeze
OPERATION_NAME =
:issuance
ATTRIBUTES =
i[company_cert issuing_company_nif issuing_company_name receiver_nif receiver_name receiver_country receiver_in_eu invoice_serial
invoice_number invoice_date invoice_time simplified_invoice invoice_description invoice_total invoice_vat_key
invoice_amount invoice_vat invoice_vat_total prev_invoice_number prev_invoice_signature prev_invoice_date].freeze

Instance Attribute Summary

Attributes inherited from Ticketbai::Operation

#company_cert

Instance Method Summary collapse

Methods inherited from Ticketbai::Operation

#create

Constructor Details

#initialize(**args) ⇒ Issuance

Returns a new instance of Issuance.

Parameters:

  • issuing_company_nif (String)

    NIF of the taxpayer’s company

  • issuing_company_name (String)

    Name of the taxpayer’s company

  • receiver_nif (String)

    Spanish NIF or official identification document in case of being another country

  • receiver_name (String)

    Name of the receiver

  • receiver_country (String)

    Country code of the receiver (Ex: ES|DE)

  • receiver_in_eu (Boolean)

    The receiver residence is in Europe?

  • invoice_serial (String)

    Invoices serial number

  • invoice_number (String)

    Invoices number

  • invoice_date (String)

    Invoices emission date (Format: d-m-Y)

  • invoice_time (String)

    Invoices emission time (Format: H:M:S)

  • simplified_invoice (Boolean)

    is a simplified invoice?

  • invoice_description (String)

    Invoices description text

  • invoice_total (String)

    Total invoice amount

  • invoice_vat_key (String)

    Key of the VAT regime

  • invoice_amount (String)

    Taxable base of the invoice

  • invoice_vat (Float)

    Invoice VAT (Ex: 21.0)

  • invoice_vat_total (String)

    Invoices number

  • prev_invoice_number (String)

    Number of the last invoice generated

  • prev_invoice_signature (String)

    Signature of the last invoice generated

  • prev_invoice_date (String)

    Emission date of the last invoice generated

  • company_cert: (Symbol)

    The name of the certificate to be used for issuance



36
37
38
39
40
41
# File 'lib/ticketbai/operations/issuance.rb', line 36

def initialize(**args)
  args[:receiver_nif]&.strip!
  args[:receiver_country] = args[:receiver_country]&.upcase || 'ES'

  super(args)
end

Instance Method Details

#build_documentObject



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/ticketbai/operations/issuance.rb', line 43

def build_document
  @issuer = Ticketbai::Nodes::Issuer.new(issuing_company_nif: @issuing_company_nif, issuing_company_name: @issuing_company_name)

  if @receiver_nif && @receiver_name
    @receiver = Ticketbai::Nodes::Receiver.new(receiver_country: @receiver_country, receiver_nif: @receiver_nif, receiver_name: @receiver_name)
  end

  @invoice_header = Ticketbai::Nodes::InvoiceHeader.new(
    invoice_serial: @invoice_serial,
    invoice_number: @invoice_number,
    invoice_date: @invoice_date,
    invoice_time: @invoice_time,
    simplified_invoice: @simplified_invoice
  )
  @invoice_data = Ticketbai::Nodes::InvoiceData.new(
    invoice_description: @invoice_description,
    invoice_total: @invoice_total,
    invoice_vat_key: @invoice_vat_key
  )
  @breakdown_type = Ticketbai::Nodes::BreakdownType.new(
    receiver_country: @receiver_country,
    invoice_amount: @invoice_amount,
    invoice_vat: @invoice_vat,
    invoice_vat_total: @invoice_vat_total,
    receiver_in_eu: @receiver_in_eu,
    simplified_invoice: @simplified_invoice
  )
  if @prev_invoice_number && @prev_invoice_date && @prev_invoice_signature
    @invoice_chaining = Ticketbai::Nodes::InvoiceChaining.new(
      prev_invoice_serial: @prev_invoice_serial,
      prev_invoice_number: @prev_invoice_number,
      prev_invoice_date: @prev_invoice_date,
      prev_invoice_signature: @prev_invoice_signature
    )
  end

  @software = Ticketbai::Nodes::Software.new

  Ticketbai::Documents::Issuance.new(
    issuer: @issuer,
    receiver: @receiver,
    invoice_header: @invoice_header,
    invoice_data: @invoice_data,
    breakdown_type: @breakdown_type,
    invoice_chaining: @invoice_chaining,
    software: @software
  ).create
end