Class: Printavo::Resources::Orders

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

Constant Summary collapse

ALL_QUERY =
File.read(File.join(__dir__, '../graphql/orders/all.graphql')).freeze
FIND_QUERY =
File.read(File.join(__dir__, '../graphql/orders/find.graphql')).freeze
CREATE_MUTATION =

Printavo creates orders as quotes first; the mutation is quoteCreate.

File.read(File.join(__dir__, '../graphql/orders/create.graphql')).freeze
DELETE_MUTATION =
File.read(File.join(__dir__, '../graphql/orders/delete.graphql')).freeze
DUPLICATE_MUTATION =
File.read(File.join(__dir__, '../graphql/orders/duplicate.graphql')).freeze
UPDATE_MUTATION =
File.read(File.join(__dir__, '../graphql/orders/update.graphql')).freeze
UPDATE_STATUS_MUTATION =

statusUpdate returns an OrderUnion (Quote | Invoice) — requires fragments.

File.read(File.join(__dir__, '../graphql/orders/update_status.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



17
18
19
# File 'lib/printavo/resources/orders.rb', line 17

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

#create(**input) ⇒ Printavo::Order

Creates a new order (quote) in Printavo. Requires at minimum contact: (IDInput), due_at:, and customer_due_at:.

Examples:

client.orders.create(
  contact: { id: "456" },
  due_at: "2026-06-01T09:00:00Z",
  customer_due_at: "2026-06-01"
)

Returns:



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

def create(**input)
  data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
  build_order(data['quoteCreate'])
end

#delete(id) ⇒ nil

Permanently deletes an order (quote) by ID.

Examples:

client.orders.delete("99")

Parameters:

  • id (String, Integer)

Returns:

  • (nil)


77
78
79
80
# File 'lib/printavo/resources/orders.rb', line 77

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

#duplicate(id) ⇒ Printavo::Order

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

Examples:

client.orders.duplicate("99")

Parameters:

  • id (String, Integer)

Returns:



90
91
92
93
# File 'lib/printavo/resources/orders.rb', line 90

def duplicate(id)
  data = @graphql.mutate(DUPLICATE_MUTATION, variables: { id: id.to_s })
  build_order(data['quoteDuplicate'])
end

#find(id) ⇒ Object



21
22
23
24
# File 'lib/printavo/resources/orders.rb', line 21

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

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

Updates an existing order (quote or invoice) by ID.

Examples:

client.orders.update("99", nickname: "Rush Job", production_note: "Ships Friday")

Parameters:

  • id (String, Integer)

Returns:



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

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

#update_status(id, status_id:) ⇒ Printavo::Order

Moves an order to a new status.

Examples:

registry = client.statuses.registry
client.orders.update_status("99", status_id: registry[:in_production].id)

Parameters:

  • id (String, Integer)

    order (quote/invoice) ID

  • status_id (String, Integer)

    target status ID

Returns:



64
65
66
67
68
# File 'lib/printavo/resources/orders.rb', line 64

def update_status(id, status_id:)
  data = @graphql.mutate(UPDATE_STATUS_MUTATION,
                         variables: { parentId: id.to_s, statusId: status_id.to_s })
  build_order(data['statusUpdate'])
end