Class: Printavo::Resources::Invoices

Inherits:
Base
  • Object
show all
Defined in:
lib/printavo/resources/invoices.rb

Constant Summary collapse

ALL_QUERY =
File.read(File.join(__dir__, '../graphql/invoices/all.graphql')).freeze
FIND_QUERY =
File.read(File.join(__dir__, '../graphql/invoices/find.graphql')).freeze
DELETE_MUTATION =
File.read(File.join(__dir__, '../graphql/invoices/delete.graphql')).freeze
DUPLICATE_MUTATION =
File.read(File.join(__dir__, '../graphql/invoices/duplicate.graphql')).freeze
UPDATE_MUTATION =
File.read(File.join(__dir__, '../graphql/invoices/update.graphql')).freeze

Instance Method Summary collapse

Methods inherited from Base

#all_pages, #each_page, #initialize

Constructor Details

This class inherits a constructor from Printavo::Resources::Base

Instance Method Details

#all(first: 25, after: nil) ⇒ Object



13
14
15
# File 'lib/printavo/resources/invoices.rb', line 13

def all(first: 25, after: nil)
  fetch_page(first: first, after: after).records
end

#delete(id) ⇒ nil

Permanently deletes an invoice by ID.

Examples:

client.invoices.delete("456")

Parameters:

  • id (String, Integer)

Returns:

  • (nil)


50
51
52
53
# File 'lib/printavo/resources/invoices.rb', line 50

def delete(id)
  @graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
  nil
end

#duplicate(id) ⇒ Printavo::Invoice

Duplicates an invoice, returning a new invoice pre-populated with the same line items, customer, and settings as the original.

Examples:

client.invoices.duplicate("456")

Parameters:

  • id (String, Integer)

Returns:



63
64
65
66
# File 'lib/printavo/resources/invoices.rb', line 63

def duplicate(id)
  data = @graphql.mutate(DUPLICATE_MUTATION, variables: { id: id.to_s })
  Printavo::Invoice.new(data['invoiceDuplicate'])
end

#find(id) ⇒ Printavo::Invoice

Finds an invoice by ID.

Examples:

client.invoices.find("456")

Parameters:

  • id (String, Integer)

Returns:



24
25
26
27
# File 'lib/printavo/resources/invoices.rb', line 24

def find(id)
  data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
  Printavo::Invoice.new(data['invoice'])
end

#update(id, **input) ⇒ Printavo::Invoice

Updates an existing invoice by ID. Note: invoices are promoted from quotes — use client.orders.create to originate.

Examples:

client.invoices.update("456", nickname: "Final Invoice", payment_due_at: "2026-05-01")

Parameters:

  • id (String, Integer)

Returns:



37
38
39
40
41
# File 'lib/printavo/resources/invoices.rb', line 37

def update(id, **input)
  data = @graphql.mutate(UPDATE_MUTATION,
                         variables: { id: id.to_s, input: camelize_keys(input) })
  Printavo::Invoice.new(data['invoiceUpdate'])
end