printavo-ruby 0.12.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/docs/CHANGELOG.md +31 -0
- data/docs/TODO.md +37 -37
- data/lib/printavo/client.rb +20 -0
- data/lib/printavo/models/contractor_profile.rb +10 -0
- data/lib/printavo/models/delivery_method.rb +9 -0
- data/lib/printavo/models/type_of_work.rb +9 -0
- data/lib/printavo/models/user.rb +12 -0
- data/lib/printavo/models/vendor.rb +11 -0
- data/lib/printavo/resources/contacts.rb +13 -0
- data/lib/printavo/resources/contractor_profiles.rb +33 -0
- data/lib/printavo/resources/customers.rb +15 -2
- data/lib/printavo/resources/delivery_methods.rb +51 -0
- data/lib/printavo/resources/inquiries.rb +13 -0
- data/lib/printavo/resources/invoices.rb +30 -3
- data/lib/printavo/resources/orders.rb +27 -0
- data/lib/printavo/resources/types_of_work.rb +27 -0
- data/lib/printavo/resources/users.rb +33 -0
- data/lib/printavo/resources/vendors.rb +33 -0
- data/lib/printavo/version.rb +1 -1
- data/lib/printavo.rb +10 -0
- metadata +11 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b0c6bbdd1f2e7dec2d40c9c5386385083049aa9f7fdd71d97ff2d8c91e0256b0
|
|
4
|
+
data.tar.gz: fca9352dae13007b7a319ec7414cf0699b2169040cd0ad94fe5683adc9506676
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 81dc61d793eb316a7e98ef4d89338229504c3f7be1c104fb24685ff108d7dc495270635a5413795b981c5e2377c3f74eb0bfe5cf86db1ca19a11afd1a09d4460
|
|
7
|
+
data.tar.gz: 1ab1cb1bf5d4950c615e407ff4008db7e07e200869a2aac5859cbbb3f8380a8d19f7dab8ea83a0eafb6f8225901cf6ca62e661816c3fe185269eb1141fb5a8dd
|
data/docs/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,37 @@ All notable changes to this project will be documented in this file.
|
|
|
6
6
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
7
7
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
8
8
|
|
|
9
|
+
## [0.14.0] - 2026-04-01
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- `Contacts#delete(id)` — `contactDelete` mutation
|
|
13
|
+
- `Customers#delete(id)` — `customerDelete` mutation
|
|
14
|
+
- `Inquiries#delete(id)` — `inquiryDelete` mutation
|
|
15
|
+
- `Invoices#delete(id)` — `invoiceDelete` mutation
|
|
16
|
+
- `Invoices#duplicate(id)` — `invoiceDuplicate` mutation; returns a new `Printavo::Invoice`
|
|
17
|
+
- `Orders#delete(id)` — `quoteDelete` mutation
|
|
18
|
+
- `Orders#duplicate(id)` — `quoteDuplicate` mutation; returns a new `Printavo::Order`
|
|
19
|
+
- 7 new `.graphql` files under `lib/printavo/graphql/`
|
|
20
|
+
|
|
21
|
+
## [0.13.0] - 2026-03-31
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- `Printavo::User` model (`id`, `first_name`, `last_name`, `email`, `full_name`)
|
|
25
|
+
- `Users` resource: `all`, `find(id)` — shop staff members
|
|
26
|
+
- `Printavo::Vendor` model (`id`, `name`, `email`, `phone`)
|
|
27
|
+
- `Vendors` resource: `all`, `find(id)` — read-only
|
|
28
|
+
- `Printavo::ContractorProfile` model (`id`, `name`, `email`)
|
|
29
|
+
- `ContractorProfiles` resource: `all`, `find(id)`
|
|
30
|
+
- `Printavo::DeliveryMethod` model (`id`, `name`)
|
|
31
|
+
- `DeliveryMethods` resource: `all`, `find(id)`, `create(**input)`, `update(id, **input)`, `archive(id)`
|
|
32
|
+
- `deliveryMethodCreate`, `deliveryMethodUpdate`, `deliveryMethodArchive` mutations
|
|
33
|
+
- `Printavo::TypeOfWork` model (`id`, `name`)
|
|
34
|
+
- `TypesOfWork` resource: `all` — reference data for order categorization
|
|
35
|
+
- `client.contractor_profiles`, `client.delivery_methods`, `client.types_of_work`,
|
|
36
|
+
`client.users`, `client.vendors` entry points on `Printavo::Client`
|
|
37
|
+
- 11 new `.graphql` files under `lib/printavo/graphql/`
|
|
38
|
+
- 1 new factory file: `spec/support/factories/people.rb`
|
|
39
|
+
|
|
9
40
|
## [0.12.0] - 2026-03-31
|
|
10
41
|
|
|
11
42
|
### Added
|
data/docs/TODO.md
CHANGED
|
@@ -52,13 +52,13 @@ Full task list for `printavo-ruby` across all versions. Checked items are shippe
|
|
|
52
52
|
- [x] `Inquiries#update(id, **input)` — `inquiryUpdate`
|
|
53
53
|
- [x] `camelize_keys` — snake_case → camelCase input conversion
|
|
54
54
|
- [x] `build_customer` / `build_order` — mutation response normalization helpers
|
|
55
|
-
- [
|
|
56
|
-
- [
|
|
57
|
-
- [
|
|
58
|
-
- [
|
|
59
|
-
- [
|
|
60
|
-
- [
|
|
61
|
-
- [
|
|
55
|
+
- [x] `Contacts#delete(id)` — `contactDelete`
|
|
56
|
+
- [x] `Customers#delete(id)` — `customerDelete`
|
|
57
|
+
- [x] `Inquiries#delete(id)` — `inquiryDelete`
|
|
58
|
+
- [x] `Invoices#delete(id)` — `invoiceDelete`
|
|
59
|
+
- [x] `Invoices#duplicate(id)` — `invoiceDuplicate`
|
|
60
|
+
- [x] `Orders#delete(id)` — `quoteDelete`
|
|
61
|
+
- [x] `Orders#duplicate(id)` — `quoteDuplicate`
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
@@ -161,10 +161,10 @@ return values — they are exposed via model field accessors, not separate resou
|
|
|
161
161
|
- [x] `Printavo::Category` model (`id`, `name`)
|
|
162
162
|
- [x] `Categories` resource: `all`, `find(id)` — reference data for products/line items
|
|
163
163
|
|
|
164
|
-
### Contractor Profiles
|
|
164
|
+
### Contractor Profiles ✅
|
|
165
165
|
|
|
166
|
-
- [
|
|
167
|
-
- [
|
|
166
|
+
- [x] `Printavo::ContractorProfile` model (`id`, `name`, `email`)
|
|
167
|
+
- [x] `ContractorProfiles` resource: `all`, `find(id)` — contractors assignable to invoices
|
|
168
168
|
|
|
169
169
|
### Custom Addresses ✅
|
|
170
170
|
|
|
@@ -174,11 +174,11 @@ return values — they are exposed via model field accessors, not separate resou
|
|
|
174
174
|
- [x] `customAddressUpdate` / `customAddressUpdates` (bulk) mutations
|
|
175
175
|
- [x] `customAddressDelete` / `customAddressDeletes` (bulk) mutations
|
|
176
176
|
|
|
177
|
-
### Delivery Methods
|
|
177
|
+
### Delivery Methods ✅
|
|
178
178
|
|
|
179
|
-
- [
|
|
180
|
-
- [
|
|
181
|
-
- [
|
|
179
|
+
- [x] `Printavo::DeliveryMethod` model (`id`, `name`)
|
|
180
|
+
- [x] `DeliveryMethods` resource: `all`, `find(id)`, `create`, `update`, `archive`
|
|
181
|
+
- [x] `deliveryMethodCreate`, `deliveryMethodUpdate`, `deliveryMethodArchive` mutations
|
|
182
182
|
|
|
183
183
|
### Email Templates ✅
|
|
184
184
|
|
|
@@ -292,20 +292,20 @@ return values — they are exposed via model field accessors, not separate resou
|
|
|
292
292
|
- [x] `TransactionPayments` resource: `create`, `update`, `delete`
|
|
293
293
|
- [x] `transactionPaymentCreate`, `transactionPaymentUpdate`, `transactionPaymentDelete` mutations
|
|
294
294
|
|
|
295
|
-
### Types of Work
|
|
295
|
+
### Types of Work ✅
|
|
296
296
|
|
|
297
|
-
- [
|
|
298
|
-
- [
|
|
297
|
+
- [x] `Printavo::TypeOfWork` model (`id`, `name`)
|
|
298
|
+
- [x] `TypesOfWork` resource: `all` — reference data for order categorization
|
|
299
299
|
|
|
300
|
-
### Users
|
|
300
|
+
### Users ✅
|
|
301
301
|
|
|
302
|
-
- [
|
|
303
|
-
- [
|
|
302
|
+
- [x] `Printavo::User` model (`id`, `first_name`, `last_name`, `email`, `full_name`)
|
|
303
|
+
- [x] `Users` resource: `all`, `find(id)` — shop staff members
|
|
304
304
|
|
|
305
|
-
### Vendors
|
|
305
|
+
### Vendors ✅
|
|
306
306
|
|
|
307
|
-
- [
|
|
308
|
-
- [
|
|
307
|
+
- [x] `Printavo::Vendor` model (`id`, `name`, `email`, `phone`)
|
|
308
|
+
- [x] `Vendors` resource: `all`, `find(id)` — read-only; no create/update/delete in V2 API
|
|
309
309
|
|
|
310
310
|
---
|
|
311
311
|
|
|
@@ -356,23 +356,23 @@ return values — they are exposed via model field accessors, not separate resou
|
|
|
356
356
|
- [x] `EmailTemplates` resource (`all`, `find`)
|
|
357
357
|
- [x] `CustomAddresses` resource (`all`, `find`, `create`/`creates`, `update`/`updates`, `delete`/`deletes`)
|
|
358
358
|
|
|
359
|
-
### v0.13.0 — People, Orgs & Reference Data
|
|
359
|
+
### v0.13.0 — People, Orgs & Reference Data ✅
|
|
360
360
|
|
|
361
|
-
- [
|
|
362
|
-
- [
|
|
363
|
-
- [
|
|
364
|
-
- [
|
|
365
|
-
- [
|
|
361
|
+
- [x] `Users` resource (`all`, `find`)
|
|
362
|
+
- [x] `Vendors` resource (`all`, `find`) — read-only
|
|
363
|
+
- [x] `ContractorProfiles` resource (`all`, `find`)
|
|
364
|
+
- [x] `DeliveryMethods` resource (`all`, `find`, `create`, `update`, `archive`)
|
|
365
|
+
- [x] `TypesOfWork` resource (`all`)
|
|
366
366
|
|
|
367
|
-
### v0.14.0 — Delete & Duplicate Mutations for Shipped Resources
|
|
367
|
+
### v0.14.0 — Delete & Duplicate Mutations for Shipped Resources ✅
|
|
368
368
|
|
|
369
|
-
- [
|
|
370
|
-
- [
|
|
371
|
-
- [
|
|
372
|
-
- [
|
|
373
|
-
- [
|
|
374
|
-
- [
|
|
375
|
-
- [
|
|
369
|
+
- [x] `Contacts#delete` — `contactDelete`
|
|
370
|
+
- [x] `Customers#delete` — `customerDelete`
|
|
371
|
+
- [x] `Inquiries#delete` — `inquiryDelete`
|
|
372
|
+
- [x] `Invoices#delete` — `invoiceDelete`
|
|
373
|
+
- [x] `Invoices#duplicate` — `invoiceDuplicate`
|
|
374
|
+
- [x] `Orders#delete` — `quoteDelete`
|
|
375
|
+
- [x] `Orders#duplicate` — `quoteDuplicate`
|
|
376
376
|
|
|
377
377
|
### v0.15.0 — Retry / Backoff & CLI
|
|
378
378
|
|
data/lib/printavo/client.rb
CHANGED
|
@@ -41,6 +41,10 @@ module Printavo
|
|
|
41
41
|
Resources::Contacts.new(@graphql)
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
+
def contractor_profiles
|
|
45
|
+
Resources::ContractorProfiles.new(@graphql)
|
|
46
|
+
end
|
|
47
|
+
|
|
44
48
|
def custom_addresses
|
|
45
49
|
Resources::CustomAddresses.new(@graphql)
|
|
46
50
|
end
|
|
@@ -49,6 +53,10 @@ module Printavo
|
|
|
49
53
|
Resources::Customers.new(@graphql)
|
|
50
54
|
end
|
|
51
55
|
|
|
56
|
+
def delivery_methods
|
|
57
|
+
Resources::DeliveryMethods.new(@graphql)
|
|
58
|
+
end
|
|
59
|
+
|
|
52
60
|
def email_templates
|
|
53
61
|
Resources::EmailTemplates.new(@graphql)
|
|
54
62
|
end
|
|
@@ -164,5 +172,17 @@ module Printavo
|
|
|
164
172
|
def transactions
|
|
165
173
|
Resources::Transactions.new(@graphql)
|
|
166
174
|
end
|
|
175
|
+
|
|
176
|
+
def types_of_work
|
|
177
|
+
Resources::TypesOfWork.new(@graphql)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def users
|
|
181
|
+
Resources::Users.new(@graphql)
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def vendors
|
|
185
|
+
Resources::Vendors.new(@graphql)
|
|
186
|
+
end
|
|
167
187
|
end
|
|
168
188
|
end
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# lib/printavo/models/user.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
class User < Models::Base
|
|
6
|
+
def id = self['id']
|
|
7
|
+
def first_name = self['firstName']
|
|
8
|
+
def last_name = self['lastName']
|
|
9
|
+
def email = self['email']
|
|
10
|
+
def full_name = "#{first_name} #{last_name}".strip
|
|
11
|
+
end
|
|
12
|
+
end
|
|
@@ -6,6 +6,7 @@ module Printavo
|
|
|
6
6
|
class Contacts < Base
|
|
7
7
|
FIND_QUERY = File.read(File.join(__dir__, '../graphql/contacts/find.graphql')).freeze
|
|
8
8
|
CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/contacts/create.graphql')).freeze
|
|
9
|
+
DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/contacts/delete.graphql')).freeze
|
|
9
10
|
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/contacts/update.graphql')).freeze
|
|
10
11
|
|
|
11
12
|
# Finds a contact by ID.
|
|
@@ -44,6 +45,18 @@ module Printavo
|
|
|
44
45
|
variables: { id: id.to_s, input: camelize_keys(input) })
|
|
45
46
|
Printavo::Contact.new(data['contactUpdate'])
|
|
46
47
|
end
|
|
48
|
+
|
|
49
|
+
# Permanently deletes a contact by ID.
|
|
50
|
+
#
|
|
51
|
+
# @param id [String, Integer]
|
|
52
|
+
# @return [nil]
|
|
53
|
+
#
|
|
54
|
+
# @example
|
|
55
|
+
# client.contacts.delete("123")
|
|
56
|
+
def delete(id)
|
|
57
|
+
@graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
|
|
58
|
+
nil
|
|
59
|
+
end
|
|
47
60
|
end
|
|
48
61
|
end
|
|
49
62
|
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# lib/printavo/resources/contractor_profiles.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
module Resources
|
|
6
|
+
class ContractorProfiles < Base
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/contractor_profiles/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/contractor_profiles/find.graphql')).freeze
|
|
9
|
+
|
|
10
|
+
def all(first: 25, after: nil)
|
|
11
|
+
fetch_page(first: first, after: after).records
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def find(id)
|
|
15
|
+
data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
|
|
16
|
+
Printavo::ContractorProfile.new(data['contractorProfile'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def fetch_page(first: 25, after: nil, **)
|
|
22
|
+
data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
|
|
23
|
+
nodes = data['contractorProfiles']['nodes'].map { |attrs| Printavo::ContractorProfile.new(attrs) }
|
|
24
|
+
page_info = data['contractorProfiles']['pageInfo']
|
|
25
|
+
Printavo::Page.new(
|
|
26
|
+
records: nodes,
|
|
27
|
+
has_next_page: page_info['hasNextPage'],
|
|
28
|
+
end_cursor: page_info['endCursor']
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
module Printavo
|
|
5
5
|
module Resources
|
|
6
6
|
class Customers < Base
|
|
7
|
-
ALL_QUERY
|
|
8
|
-
FIND_QUERY
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/customers/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/customers/find.graphql')).freeze
|
|
9
9
|
CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/customers/create.graphql')).freeze
|
|
10
|
+
DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/customers/delete.graphql')).freeze
|
|
10
11
|
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/customers/update.graphql')).freeze
|
|
11
12
|
|
|
12
13
|
def all(first: 25, after: nil)
|
|
@@ -48,6 +49,18 @@ module Printavo
|
|
|
48
49
|
build_customer(data['customerUpdate'])
|
|
49
50
|
end
|
|
50
51
|
|
|
52
|
+
# Permanently deletes a customer by ID.
|
|
53
|
+
#
|
|
54
|
+
# @param id [String, Integer]
|
|
55
|
+
# @return [nil]
|
|
56
|
+
#
|
|
57
|
+
# @example
|
|
58
|
+
# client.customers.delete("42")
|
|
59
|
+
def delete(id)
|
|
60
|
+
@graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
|
|
61
|
+
nil
|
|
62
|
+
end
|
|
63
|
+
|
|
51
64
|
private
|
|
52
65
|
|
|
53
66
|
def fetch_page(first: 25, after: nil, **)
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# lib/printavo/resources/delivery_methods.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
module Resources
|
|
6
|
+
class DeliveryMethods < Base
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/delivery_methods/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/delivery_methods/find.graphql')).freeze
|
|
9
|
+
CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/create.graphql')).freeze
|
|
10
|
+
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/update.graphql')).freeze
|
|
11
|
+
ARCHIVE_MUTATION = File.read(File.join(__dir__, '../graphql/delivery_methods/archive.graphql')).freeze
|
|
12
|
+
|
|
13
|
+
def all(first: 25, after: nil)
|
|
14
|
+
fetch_page(first: first, after: after).records
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def find(id)
|
|
18
|
+
data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
|
|
19
|
+
Printavo::DeliveryMethod.new(data['deliveryMethod'])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def create(**input)
|
|
23
|
+
data = @graphql.mutate(CREATE_MUTATION, variables: { input: camelize_keys(input) })
|
|
24
|
+
Printavo::DeliveryMethod.new(data['deliveryMethodCreate'])
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def update(id, **input)
|
|
28
|
+
data = @graphql.mutate(UPDATE_MUTATION, variables: { id: id.to_s, input: camelize_keys(input) })
|
|
29
|
+
Printavo::DeliveryMethod.new(data['deliveryMethodUpdate'])
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def archive(id)
|
|
33
|
+
@graphql.mutate(ARCHIVE_MUTATION, variables: { id: id.to_s })
|
|
34
|
+
nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def fetch_page(first: 25, after: nil, **)
|
|
40
|
+
data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
|
|
41
|
+
nodes = data['deliveryMethods']['nodes'].map { |attrs| Printavo::DeliveryMethod.new(attrs) }
|
|
42
|
+
page_info = data['deliveryMethods']['pageInfo']
|
|
43
|
+
Printavo::Page.new(
|
|
44
|
+
records: nodes,
|
|
45
|
+
has_next_page: page_info['hasNextPage'],
|
|
46
|
+
end_cursor: page_info['endCursor']
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -7,6 +7,7 @@ module Printavo
|
|
|
7
7
|
ALL_QUERY = File.read(File.join(__dir__, '../graphql/inquiries/all.graphql')).freeze
|
|
8
8
|
FIND_QUERY = File.read(File.join(__dir__, '../graphql/inquiries/find.graphql')).freeze
|
|
9
9
|
CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/inquiries/create.graphql')).freeze
|
|
10
|
+
DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/inquiries/delete.graphql')).freeze
|
|
10
11
|
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/inquiries/update.graphql')).freeze
|
|
11
12
|
|
|
12
13
|
def all(first: 25, after: nil)
|
|
@@ -43,6 +44,18 @@ module Printavo
|
|
|
43
44
|
Printavo::Inquiry.new(data['inquiryUpdate'])
|
|
44
45
|
end
|
|
45
46
|
|
|
47
|
+
# Permanently deletes an inquiry by ID.
|
|
48
|
+
#
|
|
49
|
+
# @param id [String, Integer]
|
|
50
|
+
# @return [nil]
|
|
51
|
+
#
|
|
52
|
+
# @example
|
|
53
|
+
# client.inquiries.delete("55")
|
|
54
|
+
def delete(id)
|
|
55
|
+
@graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
|
|
56
|
+
nil
|
|
57
|
+
end
|
|
58
|
+
|
|
46
59
|
private
|
|
47
60
|
|
|
48
61
|
def fetch_page(first: 25, after: nil, **)
|
|
@@ -4,9 +4,11 @@
|
|
|
4
4
|
module Printavo
|
|
5
5
|
module Resources
|
|
6
6
|
class Invoices < Base
|
|
7
|
-
ALL_QUERY
|
|
8
|
-
FIND_QUERY
|
|
9
|
-
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/invoices/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/invoices/find.graphql')).freeze
|
|
9
|
+
DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/invoices/delete.graphql')).freeze
|
|
10
|
+
DUPLICATE_MUTATION = File.read(File.join(__dir__, '../graphql/invoices/duplicate.graphql')).freeze
|
|
11
|
+
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/invoices/update.graphql')).freeze
|
|
10
12
|
|
|
11
13
|
def all(first: 25, after: nil)
|
|
12
14
|
fetch_page(first: first, after: after).records
|
|
@@ -38,6 +40,31 @@ module Printavo
|
|
|
38
40
|
Printavo::Invoice.new(data['invoiceUpdate'])
|
|
39
41
|
end
|
|
40
42
|
|
|
43
|
+
# Permanently deletes an invoice by ID.
|
|
44
|
+
#
|
|
45
|
+
# @param id [String, Integer]
|
|
46
|
+
# @return [nil]
|
|
47
|
+
#
|
|
48
|
+
# @example
|
|
49
|
+
# client.invoices.delete("456")
|
|
50
|
+
def delete(id)
|
|
51
|
+
@graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
|
|
52
|
+
nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Duplicates an invoice, returning a new invoice pre-populated with the
|
|
56
|
+
# same line items, customer, and settings as the original.
|
|
57
|
+
#
|
|
58
|
+
# @param id [String, Integer]
|
|
59
|
+
# @return [Printavo::Invoice]
|
|
60
|
+
#
|
|
61
|
+
# @example
|
|
62
|
+
# client.invoices.duplicate("456")
|
|
63
|
+
def duplicate(id)
|
|
64
|
+
data = @graphql.mutate(DUPLICATE_MUTATION, variables: { id: id.to_s })
|
|
65
|
+
Printavo::Invoice.new(data['invoiceDuplicate'])
|
|
66
|
+
end
|
|
67
|
+
|
|
41
68
|
private
|
|
42
69
|
|
|
43
70
|
def fetch_page(first: 25, after: nil, **)
|
|
@@ -8,6 +8,8 @@ module Printavo
|
|
|
8
8
|
FIND_QUERY = File.read(File.join(__dir__, '../graphql/orders/find.graphql')).freeze
|
|
9
9
|
# Printavo creates orders as quotes first; the mutation is quoteCreate.
|
|
10
10
|
CREATE_MUTATION = File.read(File.join(__dir__, '../graphql/orders/create.graphql')).freeze
|
|
11
|
+
DELETE_MUTATION = File.read(File.join(__dir__, '../graphql/orders/delete.graphql')).freeze
|
|
12
|
+
DUPLICATE_MUTATION = File.read(File.join(__dir__, '../graphql/orders/duplicate.graphql')).freeze
|
|
11
13
|
UPDATE_MUTATION = File.read(File.join(__dir__, '../graphql/orders/update.graphql')).freeze
|
|
12
14
|
# statusUpdate returns an OrderUnion (Quote | Invoice) — requires fragments.
|
|
13
15
|
UPDATE_STATUS_MUTATION = File.read(File.join(__dir__, '../graphql/orders/update_status.graphql')).freeze
|
|
@@ -65,6 +67,31 @@ module Printavo
|
|
|
65
67
|
build_order(data['statusUpdate'])
|
|
66
68
|
end
|
|
67
69
|
|
|
70
|
+
# Permanently deletes an order (quote) by ID.
|
|
71
|
+
#
|
|
72
|
+
# @param id [String, Integer]
|
|
73
|
+
# @return [nil]
|
|
74
|
+
#
|
|
75
|
+
# @example
|
|
76
|
+
# client.orders.delete("99")
|
|
77
|
+
def delete(id)
|
|
78
|
+
@graphql.mutate(DELETE_MUTATION, variables: { id: id.to_s })
|
|
79
|
+
nil
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# Duplicates an order (quote), returning a new quote pre-populated with
|
|
83
|
+
# the same line items, customer, and settings as the original.
|
|
84
|
+
#
|
|
85
|
+
# @param id [String, Integer]
|
|
86
|
+
# @return [Printavo::Order]
|
|
87
|
+
#
|
|
88
|
+
# @example
|
|
89
|
+
# client.orders.duplicate("99")
|
|
90
|
+
def duplicate(id)
|
|
91
|
+
data = @graphql.mutate(DUPLICATE_MUTATION, variables: { id: id.to_s })
|
|
92
|
+
build_order(data['quoteDuplicate'])
|
|
93
|
+
end
|
|
94
|
+
|
|
68
95
|
private
|
|
69
96
|
|
|
70
97
|
def fetch_page(first: 25, after: nil, **)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# lib/printavo/resources/types_of_work.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
module Resources
|
|
6
|
+
class TypesOfWork < Base
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/types_of_work/all.graphql')).freeze
|
|
8
|
+
|
|
9
|
+
def all(first: 25, after: nil)
|
|
10
|
+
fetch_page(first: first, after: after).records
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
private
|
|
14
|
+
|
|
15
|
+
def fetch_page(first: 25, after: nil, **)
|
|
16
|
+
data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
|
|
17
|
+
nodes = data['typesOfWork']['nodes'].map { |attrs| Printavo::TypeOfWork.new(attrs) }
|
|
18
|
+
page_info = data['typesOfWork']['pageInfo']
|
|
19
|
+
Printavo::Page.new(
|
|
20
|
+
records: nodes,
|
|
21
|
+
has_next_page: page_info['hasNextPage'],
|
|
22
|
+
end_cursor: page_info['endCursor']
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# lib/printavo/resources/users.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
module Resources
|
|
6
|
+
class Users < Base
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/users/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/users/find.graphql')).freeze
|
|
9
|
+
|
|
10
|
+
def all(first: 25, after: nil)
|
|
11
|
+
fetch_page(first: first, after: after).records
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def find(id)
|
|
15
|
+
data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
|
|
16
|
+
Printavo::User.new(data['user'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def fetch_page(first: 25, after: nil, **)
|
|
22
|
+
data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
|
|
23
|
+
nodes = data['users']['nodes'].map { |attrs| Printavo::User.new(attrs) }
|
|
24
|
+
page_info = data['users']['pageInfo']
|
|
25
|
+
Printavo::Page.new(
|
|
26
|
+
records: nodes,
|
|
27
|
+
has_next_page: page_info['hasNextPage'],
|
|
28
|
+
end_cursor: page_info['endCursor']
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# lib/printavo/resources/vendors.rb
|
|
2
|
+
# frozen_string_literal: true
|
|
3
|
+
|
|
4
|
+
module Printavo
|
|
5
|
+
module Resources
|
|
6
|
+
class Vendors < Base
|
|
7
|
+
ALL_QUERY = File.read(File.join(__dir__, '../graphql/vendors/all.graphql')).freeze
|
|
8
|
+
FIND_QUERY = File.read(File.join(__dir__, '../graphql/vendors/find.graphql')).freeze
|
|
9
|
+
|
|
10
|
+
def all(first: 25, after: nil)
|
|
11
|
+
fetch_page(first: first, after: after).records
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def find(id)
|
|
15
|
+
data = @graphql.query(FIND_QUERY, variables: { id: id.to_s })
|
|
16
|
+
Printavo::Vendor.new(data['vendor'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
private
|
|
20
|
+
|
|
21
|
+
def fetch_page(first: 25, after: nil, **)
|
|
22
|
+
data = @graphql.query(ALL_QUERY, variables: { first: first, after: after })
|
|
23
|
+
nodes = data['vendors']['nodes'].map { |attrs| Printavo::Vendor.new(attrs) }
|
|
24
|
+
page_info = data['vendors']['pageInfo']
|
|
25
|
+
Printavo::Page.new(
|
|
26
|
+
records: nodes,
|
|
27
|
+
has_next_page: page_info['hasNextPage'],
|
|
28
|
+
end_cursor: page_info['endCursor']
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/printavo/version.rb
CHANGED
data/lib/printavo.rb
CHANGED
|
@@ -16,8 +16,10 @@ require_relative 'printavo/models/account'
|
|
|
16
16
|
require_relative 'printavo/models/approval_request'
|
|
17
17
|
require_relative 'printavo/models/category'
|
|
18
18
|
require_relative 'printavo/models/contact'
|
|
19
|
+
require_relative 'printavo/models/contractor_profile'
|
|
19
20
|
require_relative 'printavo/models/custom_address'
|
|
20
21
|
require_relative 'printavo/models/customer'
|
|
22
|
+
require_relative 'printavo/models/delivery_method'
|
|
21
23
|
require_relative 'printavo/models/email_template'
|
|
22
24
|
require_relative 'printavo/models/expense'
|
|
23
25
|
require_relative 'printavo/models/fee'
|
|
@@ -44,13 +46,18 @@ require_relative 'printavo/models/task'
|
|
|
44
46
|
require_relative 'printavo/models/thread'
|
|
45
47
|
require_relative 'printavo/models/transaction'
|
|
46
48
|
require_relative 'printavo/models/transaction_payment'
|
|
49
|
+
require_relative 'printavo/models/type_of_work'
|
|
50
|
+
require_relative 'printavo/models/user'
|
|
51
|
+
require_relative 'printavo/models/vendor'
|
|
47
52
|
require_relative 'printavo/resources/base'
|
|
48
53
|
require_relative 'printavo/resources/account'
|
|
49
54
|
require_relative 'printavo/resources/approval_requests'
|
|
50
55
|
require_relative 'printavo/resources/categories'
|
|
51
56
|
require_relative 'printavo/resources/contacts'
|
|
57
|
+
require_relative 'printavo/resources/contractor_profiles'
|
|
52
58
|
require_relative 'printavo/resources/custom_addresses'
|
|
53
59
|
require_relative 'printavo/resources/customers'
|
|
60
|
+
require_relative 'printavo/resources/delivery_methods'
|
|
54
61
|
require_relative 'printavo/resources/email_templates'
|
|
55
62
|
require_relative 'printavo/resources/expenses'
|
|
56
63
|
require_relative 'printavo/resources/fees'
|
|
@@ -77,6 +84,9 @@ require_relative 'printavo/resources/tasks'
|
|
|
77
84
|
require_relative 'printavo/resources/threads'
|
|
78
85
|
require_relative 'printavo/resources/transaction_payments'
|
|
79
86
|
require_relative 'printavo/resources/transactions'
|
|
87
|
+
require_relative 'printavo/resources/types_of_work'
|
|
88
|
+
require_relative 'printavo/resources/users'
|
|
89
|
+
require_relative 'printavo/resources/vendors'
|
|
80
90
|
require_relative 'printavo/webhooks'
|
|
81
91
|
require_relative 'printavo/client'
|
|
82
92
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: printavo-ruby
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.14.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Stan Carver II
|
|
@@ -277,8 +277,10 @@ files:
|
|
|
277
277
|
- lib/printavo/models/base.rb
|
|
278
278
|
- lib/printavo/models/category.rb
|
|
279
279
|
- lib/printavo/models/contact.rb
|
|
280
|
+
- lib/printavo/models/contractor_profile.rb
|
|
280
281
|
- lib/printavo/models/custom_address.rb
|
|
281
282
|
- lib/printavo/models/customer.rb
|
|
283
|
+
- lib/printavo/models/delivery_method.rb
|
|
282
284
|
- lib/printavo/models/email_template.rb
|
|
283
285
|
- lib/printavo/models/expense.rb
|
|
284
286
|
- lib/printavo/models/fee.rb
|
|
@@ -305,14 +307,19 @@ files:
|
|
|
305
307
|
- lib/printavo/models/thread.rb
|
|
306
308
|
- lib/printavo/models/transaction.rb
|
|
307
309
|
- lib/printavo/models/transaction_payment.rb
|
|
310
|
+
- lib/printavo/models/type_of_work.rb
|
|
311
|
+
- lib/printavo/models/user.rb
|
|
312
|
+
- lib/printavo/models/vendor.rb
|
|
308
313
|
- lib/printavo/page.rb
|
|
309
314
|
- lib/printavo/resources/account.rb
|
|
310
315
|
- lib/printavo/resources/approval_requests.rb
|
|
311
316
|
- lib/printavo/resources/base.rb
|
|
312
317
|
- lib/printavo/resources/categories.rb
|
|
313
318
|
- lib/printavo/resources/contacts.rb
|
|
319
|
+
- lib/printavo/resources/contractor_profiles.rb
|
|
314
320
|
- lib/printavo/resources/custom_addresses.rb
|
|
315
321
|
- lib/printavo/resources/customers.rb
|
|
322
|
+
- lib/printavo/resources/delivery_methods.rb
|
|
316
323
|
- lib/printavo/resources/email_templates.rb
|
|
317
324
|
- lib/printavo/resources/expenses.rb
|
|
318
325
|
- lib/printavo/resources/fees.rb
|
|
@@ -339,6 +346,9 @@ files:
|
|
|
339
346
|
- lib/printavo/resources/threads.rb
|
|
340
347
|
- lib/printavo/resources/transaction_payments.rb
|
|
341
348
|
- lib/printavo/resources/transactions.rb
|
|
349
|
+
- lib/printavo/resources/types_of_work.rb
|
|
350
|
+
- lib/printavo/resources/users.rb
|
|
351
|
+
- lib/printavo/resources/vendors.rb
|
|
342
352
|
- lib/printavo/version.rb
|
|
343
353
|
- lib/printavo/webhooks.rb
|
|
344
354
|
homepage: https://github.com/scarver2/printavo-ruby
|