zaikio-procurement 0.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +75 -81
- data/lib/zaikio/procurement/article.rb +2 -29
- data/lib/zaikio/procurement/availability.rb +8 -0
- data/lib/zaikio/procurement/configuration.rb +6 -15
- data/lib/zaikio/procurement/contract_request.rb +8 -5
- data/lib/zaikio/procurement/delivery.rb +4 -12
- data/lib/zaikio/procurement/job.rb +8 -0
- data/lib/zaikio/procurement/material.rb +15 -0
- data/lib/zaikio/procurement/material_requirement.rb +25 -12
- data/lib/zaikio/procurement/order.rb +23 -13
- data/lib/zaikio/procurement/order_line_item.rb +3 -7
- data/lib/zaikio/procurement/person.rb +8 -0
- data/lib/zaikio/procurement/pricing.rb +6 -0
- data/lib/zaikio/procurement/quantity.rb +8 -0
- data/lib/zaikio/procurement/site.rb +11 -0
- data/lib/zaikio/procurement/sku.rb +2 -17
- data/lib/zaikio/procurement/supplier.rb +9 -45
- data/lib/zaikio/procurement/variant.rb +7 -37
- data/lib/zaikio/procurement/variant_search.rb +43 -0
- data/lib/zaikio/procurement/version.rb +1 -1
- data/lib/zaikio/procurement.rb +9 -13
- metadata +10 -12
- data/lib/zaikio/procurement/concern/article_type_scoped.rb +0 -21
- data/lib/zaikio/procurement/contract.rb +0 -17
- data/lib/zaikio/procurement/current_supplier.rb +0 -17
- data/lib/zaikio/procurement/delivery_line_item.rb +0 -17
- data/lib/zaikio/procurement/invoice.rb +0 -8
- data/lib/zaikio/procurement/order_conditions_inquiry.rb +0 -15
- data/lib/zaikio/procurement/price.rb +0 -18
- data/lib/zaikio/procurement/sales_group.rb +0 -11
- data/lib/zaikio/procurement/sales_group_membership.rb +0 -11
- data/lib/zaikio/procurement/substrate_search.rb +0 -38
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz: '
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '016449cd994a32db26e9bc0045b4ede62213fe4e3fa4cd5621181d51a4d6a36a'
|
4
|
+
data.tar.gz: fd65209c17d5ecb34120b74d6592dfbd685771aec031139ed14ca5901f764c3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b32bae8614933368afd866da4b29463fbccf7ac8d0ae802b5247de2c2f58e8778680a0260c3608069175e29d97bb0c5a2952d2235ced7e320d35cc1511f19e1
|
7
|
+
data.tar.gz: 34f11708110b5db2ebfbdd89ebbb72749182e0dd0a79aaee6dceea45e6b93a407489eecea7ffe6ce8b8265b344ed8bc1a97577bd1af301d17a0dfda48d6eac77
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Zaikio::Procurement
|
2
2
|
|
3
|
-
Ruby API Client for Zaikio's Procurement Platform.
|
3
|
+
Ruby API Client for Zaikio's Procurement Consumer Platform.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -30,14 +30,13 @@ Zaikio::Procurement.configure do |config|
|
|
30
30
|
end
|
31
31
|
```
|
32
32
|
|
33
|
-
|
34
33
|
## Usage
|
35
34
|
|
36
35
|
The Procurement Client has an ORM like design.
|
37
36
|
|
38
37
|
For the requests to work, a valid JSON Web token with the correct OAuth Scopes must always be provided. Please refer to [zakio-oauth_client](https://github.com/zaikio/zaikio-oauth_client).
|
39
38
|
|
40
|
-
If you want to know which actions are available and which scopes are required, please refer to the [Procurement Consumer API Reference](https://docs.zaikio.com/api/procurement_consumers/
|
39
|
+
If you want to know which actions are available and which scopes are required, please refer to the [Procurement Consumer API V2 Reference](https://docs.zaikio.com/api/procurement_consumers/consumers_v2.html).
|
41
40
|
|
42
41
|
### As an organization
|
43
42
|
|
@@ -46,88 +45,83 @@ token = "..." # Your valid JWT for an organization
|
|
46
45
|
Zaikio::Procurement.with_token(token) do
|
47
46
|
|
48
47
|
# Fetch Data
|
49
|
-
Zaikio::Procurement::
|
50
|
-
Zaikio::Procurement::
|
51
|
-
Zaikio::Procurement::Article.list_by_article_type_or_supplier_slug("great_paper_company")
|
48
|
+
Zaikio::Procurement::MaterialRequirement.all
|
49
|
+
Zaikio::Procurement::MaterialRequirement.find("7cbf51bd-35a8-47a1-84a2-57aa63140234")
|
52
50
|
|
53
51
|
# Associations
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
# Search for all variants of a substrate
|
59
|
-
search = Zaikio::Procurement::SubstrateSearch.new("Magno", grain: "long", paper_weight: 80)
|
52
|
+
material_requirement = Zaikio::Procurement::MaterialRequirement.find("7cbf51bd-35a8-47a1-84a2-57aa63140234")
|
53
|
+
material_requirement.availability
|
54
|
+
material_requirement.pricing
|
55
|
+
material_requirement.order
|
60
56
|
|
61
|
-
#
|
62
|
-
search = Zaikio::Procurement::
|
57
|
+
# Search for a variant
|
58
|
+
search = Zaikio::Procurement::VariantSearch.new(type: "sheet_substrate", query: "Soap", grain: "short", paper_weight: 80)
|
59
|
+
# You can either pass a single value or a comma separated list of types, e.g. type: "sheet_substrate,plate"
|
60
|
+
# Use all to include all available Variant types in the response
|
63
61
|
|
64
62
|
search.results # Returns a list of matching variants
|
65
|
-
search.
|
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
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
# Create new resources
|
63
|
+
search.available_filters # Returns a list of available filters that can be used to further narrow down the results
|
64
|
+
|
65
|
+
# Filter and search material requirements
|
66
|
+
# Available filters can be found here: https://docs.zaikio.com/api/procurement_consumers/consumers_v2.html#/MaterialRequirements/get_material_requirements
|
67
|
+
Zaikio::Procurement::MaterialRequirement.where(query: "Sappi", filters: { article_category: "sheet_substrate", status: "ordered" })
|
68
|
+
|
69
|
+
### Create new resources
|
70
|
+
|
71
|
+
# Create a ContractRequest
|
72
|
+
Zaikio::Procurement::ContractRequest.create(
|
73
|
+
supplier_id: "061c2b43-ae94-459d-8739-35b20684e47a",
|
74
|
+
customer_number: "1968353479",
|
75
|
+
contact_first_name: "Frank",
|
76
|
+
contact_last_name: "Gallikanokus",
|
77
|
+
contact_email: "fgalli@example.com",
|
78
|
+
contact_phone: "+3333333333333",
|
79
|
+
references: ["my reference"])
|
80
|
+
|
81
|
+
# Create a MaterialRequirement
|
82
|
+
Zaikio::Procurement::MaterialRequirement.create(
|
83
|
+
amount: 200,
|
84
|
+
job_client: "Awesome Client",
|
85
|
+
job_description: "Awesome print product",
|
86
|
+
job_link: "https://www.example.com",
|
87
|
+
job_reference: "my job reference",
|
88
|
+
material_required_at: "2022-08-03",
|
89
|
+
supplier_id: "b2a0f1ab-7610-451e-acc7-633284300521",
|
90
|
+
variant_id: "31924842-b38b-47b2-90b0-68f8f42f37d6",
|
91
|
+
references: ["my requirement reference"],
|
92
|
+
visible_in_web: true)
|
93
|
+
|
94
|
+
# Create an Order
|
99
95
|
Zaikio::Procurement::Order.create(
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
)
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
line_item = Zaikio::Procurement::OrderLineItem.find("2f5a99c2-9734-4aac-9cee-911b061d3a5a")
|
130
|
-
line_item.destroy
|
96
|
+
material_requirement_ids: ["9f98e841-1502-4d7b-9b8a-0cf9b8072875"],
|
97
|
+
references: ["my order reference"],
|
98
|
+
copy_material_requirement_references_to_line_items: true)
|
99
|
+
|
100
|
+
### Update resources
|
101
|
+
material_requirement = Zaikio::Procurement::MaterialRequirement.find("058a5513-925e-4d0c-923d-fa1ed4bfb3ce")
|
102
|
+
material_requirement.update(amount: 1000)
|
103
|
+
|
104
|
+
### Deleting resources
|
105
|
+
material_requirement = Zaikio::Procurement::MaterialRequirement.find("2f5a99c2-9734-4aac-9cee-911b061d3a5a")
|
106
|
+
material_requirement.destroy
|
107
|
+
|
108
|
+
### Custom methods
|
109
|
+
|
110
|
+
# Placing an order and submitting it to the supplier
|
111
|
+
order = Zaikio::Procurement::Order.find("8eaeb37a-d7aa-424a-aac1-1ade4b4030e2")
|
112
|
+
order.place
|
113
|
+
|
114
|
+
# Cancel a placed order
|
115
|
+
order = Zaikio::Procurement::Order.find("3d36c6c5-b979-4073-8fcc-78a6cf1bc8bd")
|
116
|
+
order.cancel
|
117
|
+
|
118
|
+
# Archive a canceled or completed material requirement
|
119
|
+
material_requirement = Zaikio::Procurement::MaterialRequirement.find("2f5a99c2-9734-4aac-9cee-911b061d3a5a")
|
120
|
+
material_requirement.archive
|
121
|
+
|
122
|
+
# Refreshing the order conditions (price, stock and delivery date) of the material requirement
|
123
|
+
material_requirement = Zaikio::Procurement::MaterialRequirement.find("2f5a99c2-9734-4aac-9cee-911b061d3a5a")
|
124
|
+
material_requirement.refresh
|
131
125
|
end
|
132
126
|
```
|
133
127
|
|
@@ -139,7 +133,7 @@ This can be easily caught using the `with_fallback` method. We recommend to alwa
|
|
139
133
|
|
140
134
|
```rb
|
141
135
|
Zaikio::Directory.with_token(token) do
|
142
|
-
Zaikio::Procurement::
|
143
|
-
Zaikio::Procurement::
|
136
|
+
Zaikio::Procurement::MaterialRequirement.with_fallback.find("7cbf51bd-35a8-47a1-84a2-57aa63140234") # => nil
|
137
|
+
Zaikio::Procurement::MaterialRequirement.with_fallback.all # Automatically uses empty array as fallback
|
144
138
|
end
|
145
139
|
```
|
@@ -1,38 +1,11 @@
|
|
1
|
-
require_relative "concern/article_type_scoped"
|
2
|
-
|
3
1
|
module Zaikio
|
4
2
|
module Procurement
|
5
3
|
class Article < Base
|
6
|
-
include ArticleTypeScoped
|
7
|
-
include_root_in_json :article
|
8
|
-
|
9
|
-
# Class methods
|
10
|
-
class << self
|
11
|
-
# Spyke URI override
|
12
|
-
def uri
|
13
|
-
Zaikio::Procurement.configuration.flavor == :supplier ? ":type/articles(/:id)" : "articles(/:id)"
|
14
|
-
end
|
15
|
-
|
16
|
-
def list_by_article_type_or_supplier_slug(type_or_slug)
|
17
|
-
with("#{type_or_slug}/articles").get
|
18
|
-
end
|
19
|
-
|
20
|
-
def list_by_article_type_and_supplier_slug(type, slug)
|
21
|
-
with("#{type}/#{slug}/articles").get
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
# Attributes
|
26
|
-
attributes :name, :base_unit, :coated, :description, :finish,
|
27
|
-
:kind, :supplier_id, :created_at, :updated_at
|
28
|
-
|
29
4
|
# Associations
|
30
5
|
has_one :supplier, class_name: "Zaikio::Procurement::Supplier",
|
31
6
|
uri: nil
|
32
|
-
|
33
|
-
|
34
|
-
self.class.request(:get, "#{uri}/variants").data.collect { |v| Zaikio::Procurement::Variant.new(v) }
|
35
|
-
end
|
7
|
+
has_many :skus, class_name: "Zaikio::Procurement::Sku",
|
8
|
+
uri: nil
|
36
9
|
end
|
37
10
|
end
|
38
11
|
end
|
@@ -4,22 +4,19 @@ module Zaikio
|
|
4
4
|
module Procurement
|
5
5
|
class Configuration
|
6
6
|
HOSTS = {
|
7
|
-
development: "https://procurement.zaikio.test",
|
8
|
-
test: "https://procurement.zaikio.test",
|
9
|
-
staging: "https://procurement.staging.zaikio.com",
|
10
|
-
sandbox: "https://procurement.sandbox.zaikio.com",
|
11
|
-
production: "https://procurement.zaikio.com"
|
7
|
+
development: "https://procurement.zaikio.test/api/v2/",
|
8
|
+
test: "https://procurement.zaikio.test/api/v2/",
|
9
|
+
staging: "https://procurement.staging.zaikio.com/api/v2/",
|
10
|
+
sandbox: "https://procurement.sandbox.zaikio.com/api/v2/",
|
11
|
+
production: "https://procurement.zaikio.com/api/v2/"
|
12
12
|
}.freeze
|
13
13
|
|
14
|
-
FLAVORS = %i[consumer supplier].freeze
|
15
|
-
|
16
14
|
attr_accessor :host
|
17
|
-
attr_reader :environment
|
15
|
+
attr_reader :environment
|
18
16
|
attr_writer :logger
|
19
17
|
|
20
18
|
def initialize
|
21
19
|
@environment = :sandbox
|
22
|
-
@flavor = :consumer
|
23
20
|
end
|
24
21
|
|
25
22
|
def logger
|
@@ -31,12 +28,6 @@ module Zaikio
|
|
31
28
|
@host = host_for(environment)
|
32
29
|
end
|
33
30
|
|
34
|
-
def flavor=(flavor)
|
35
|
-
raise StandardError.new, "Invalid Zaikio::Procurement flavor '#{flavor}'" unless FLAVORS.include?(flavor)
|
36
|
-
|
37
|
-
@flavor = flavor
|
38
|
-
end
|
39
|
-
|
40
31
|
private
|
41
32
|
|
42
33
|
def host_for(environment)
|
@@ -4,16 +4,19 @@ module Zaikio
|
|
4
4
|
uri "contract_requests(/:id)"
|
5
5
|
include_root_in_json :contract_request
|
6
6
|
|
7
|
+
def self.create(supplier_id:, **attributes)
|
8
|
+
new(request(:post, "suppliers/#{supplier_id}/contract_requests",
|
9
|
+
contract_request: attributes)&.body&.dig("data"))
|
10
|
+
end
|
11
|
+
|
7
12
|
# Attributes
|
8
|
-
attributes :
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:created_at, :updated_at
|
13
|
+
attributes :contact_email, :contact_first_name, :contact_last_name,
|
14
|
+
:contact_phone, :customer_number, :declined_at, :declined_reason,
|
15
|
+
:references, :state, :created_at, :updated_at
|
12
16
|
|
13
17
|
# Associations
|
14
18
|
belongs_to :supplier, class_name: "Zaikio::Procurement::Supplier",
|
15
19
|
uri: nil
|
16
|
-
has_one :contract, uri: nil
|
17
20
|
end
|
18
21
|
end
|
19
22
|
end
|
@@ -1,19 +1,11 @@
|
|
1
1
|
module Zaikio
|
2
2
|
module Procurement
|
3
3
|
class Delivery < Base
|
4
|
-
uri "deliveries(/:id)"
|
5
|
-
include_root_in_json :delivery
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :confirmed_delivery_date, :desired_delivery_date, :references,
|
9
|
-
:order_id, :created_at, :updated_at
|
10
|
-
|
11
4
|
# Associations
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
uri: "deliveries/:delivery_id/delivery_line_items(/:id)"
|
5
|
+
has_one :site, class_name: "Zaikio::Procurement::Site",
|
6
|
+
uri: nil
|
7
|
+
has_one :address, class_name: "Zaikio::Procurement::Address",
|
8
|
+
uri: nil
|
17
9
|
end
|
18
10
|
end
|
19
11
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Zaikio
|
2
|
+
module Procurement
|
3
|
+
class Material < Base
|
4
|
+
attributes :amount,
|
5
|
+
:description,
|
6
|
+
:environmental_certification,
|
7
|
+
:unit,
|
8
|
+
:sku_preference_ids
|
9
|
+
|
10
|
+
# Associations
|
11
|
+
has_one :supplier, class_name: "Zaikio::Procurement::Supplier", uri: nil
|
12
|
+
has_one :variant, class_name: "Zaikio::Procurement::Variant", uri: nil
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -5,22 +5,35 @@ module Zaikio
|
|
5
5
|
include_root_in_json :material_requirement
|
6
6
|
|
7
7
|
# Attributes
|
8
|
-
attributes :
|
9
|
-
:
|
10
|
-
:job_client, :job_description, :job_link, :job_reference, :ordered_at, :order_number, :person,
|
11
|
-
:price, :purchaser, :price_based_on_quantity, :references, :site, :state, :unit,
|
12
|
-
:created_at, :updated_at
|
8
|
+
attributes :state, :references, :visible_in_web, :ordered_at, :fulfilled_at, :canceled_at, :created_at,
|
9
|
+
:updated_at
|
13
10
|
|
14
11
|
# Associations
|
15
|
-
has_one :
|
16
|
-
has_one :
|
17
|
-
|
12
|
+
has_one :required_material, class_name: "Zaikio::Procurement::Material", uri: nil
|
13
|
+
has_one :delivery, class_name: "Zaikio::Procurement::Delivery", uri: nil
|
14
|
+
has_one :order, class_name: "Zaikio::Procurement::Order", uri: nil
|
15
|
+
has_one :pricing, class_name: "Zaikio::Procurement::Pricing", uri: nil
|
16
|
+
has_one :availability, class_name: "Zaikio::Procurement::Availability", uri: nil
|
17
|
+
has_one :quantity, class_name: "Zaikio::Procurement::Quantity", uri: nil
|
18
|
+
has_one :job, class_name: "Zaikio::Procurement::Job", uri: nil
|
19
|
+
has_one :creator, class_name: "Zaikio::Procurement::Person", uri: nil
|
18
20
|
|
19
|
-
def
|
20
|
-
|
21
|
-
|
21
|
+
def archive
|
22
|
+
Zaikio::Procurement::MaterialRequirement.new(
|
23
|
+
self.class.request(:patch, "#{collection_name}/#{id}/archive").data
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def refresh
|
28
|
+
Zaikio::Procurement::MaterialRequirement.new(
|
29
|
+
self.class.request(:patch, "#{collection_name}/#{id}/refresh").data
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
22
34
|
|
23
|
-
|
35
|
+
def collection_name
|
36
|
+
self.class.name.demodulize.underscore.pluralize
|
24
37
|
end
|
25
38
|
end
|
26
39
|
end
|
@@ -5,21 +5,31 @@ module Zaikio
|
|
5
5
|
include_root_in_json :order
|
6
6
|
|
7
7
|
# Attributes
|
8
|
-
attributes :
|
9
|
-
:
|
10
|
-
:
|
11
|
-
:references, :shipped_at, :state, :state_reason, :taxes, :taxes_on_fees, :transfer_failed_at,
|
12
|
-
:transferred_at, :contract_id, :exclusive_sales_group_id, :person_id, :created_at, :updated_at
|
8
|
+
attributes :copy_material_requirement_references_to_line_items, :currency, :references,
|
9
|
+
:state, :canceled_by_consumer_at, :canceled_by_supplier_at, :confirmed_at,
|
10
|
+
:placed_at, :transferred_at, :created_at, :updated_at
|
13
11
|
|
14
12
|
# Associations
|
15
|
-
has_one :
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
13
|
+
has_one :delivery, class_name: "Zaikio::Procurement::Delivery",
|
14
|
+
uri: nil
|
15
|
+
has_many :order_line_items, class_name: "Zaikio::Procurement::OrderLineItem",
|
16
|
+
uri: nil
|
17
|
+
has_one :pricing, class_name: "Zaikio::Procurement::Pricing",
|
18
|
+
uri: nil
|
19
|
+
has_one :person, class_name: "Zaikio::Procurement::Person",
|
20
|
+
uri: nil
|
21
|
+
|
22
|
+
def place
|
23
|
+
Zaikio::Procurement::MaterialRequirement.new(
|
24
|
+
self.class.request(:patch, "orders/#{id}/place").data
|
25
|
+
)
|
26
|
+
end
|
27
|
+
|
28
|
+
def cancel
|
29
|
+
Zaikio::Procurement::MaterialRequirement.new(
|
30
|
+
self.class.request(:patch, "orders/#{id}/cancel").data
|
31
|
+
)
|
32
|
+
end
|
23
33
|
end
|
24
34
|
end
|
25
35
|
end
|
@@ -1,16 +1,12 @@
|
|
1
1
|
module Zaikio
|
2
2
|
module Procurement
|
3
3
|
class OrderLineItem < Base
|
4
|
-
uri "order_line_items(/:id)"
|
5
|
-
include_root_in_json :order_line_item
|
6
|
-
|
7
4
|
# Attributes
|
8
|
-
attributes :amount, :amount_in_base_unit, :base_unit, :
|
9
|
-
:order_number, :
|
10
|
-
:sku_id, :created_at, :updated_at
|
5
|
+
attributes :references, :amount, :amount_in_base_unit, :base_unit, :confirmed_delivery_at, :description,
|
6
|
+
:order_number, :created_at, :updated_at
|
11
7
|
|
12
8
|
# Associations
|
13
|
-
|
9
|
+
has_one :pricing, class_name: "Zaikio::Procurement::Pricing",
|
14
10
|
uri: nil
|
15
11
|
has_one :sku, class_name: "Zaikio::Procurement::Sku",
|
16
12
|
uri: nil
|
@@ -1,24 +1,9 @@
|
|
1
1
|
module Zaikio
|
2
2
|
module Procurement
|
3
3
|
class Sku < Base
|
4
|
-
uri "skus(/:id)"
|
5
|
-
include_root_in_json :sku
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :amount, :amount_in_base_unit, :availability_in_days, :dimension_unit,
|
9
|
-
:environmental_certification, :gross_weight, :height, :length, :net_weight,
|
10
|
-
:order_number, :unit, :weight_unit, :width, :variant_id, :created_at, :updated_at
|
11
|
-
|
12
4
|
# Associations
|
13
|
-
has_many :
|
14
|
-
|
15
|
-
|
16
|
-
# Manually build variant association to work for consumers and suppliers
|
17
|
-
def variant
|
18
|
-
Zaikio::Procurement::Variant.new(
|
19
|
-
self.class.request(:get, attributes.dig("variant", "links", 0, "href")).data
|
20
|
-
)
|
21
|
-
end
|
5
|
+
has_many :suppliers, class_name: "Zaikio::Procurement::Supplier",
|
6
|
+
uri: nil
|
22
7
|
end
|
23
8
|
end
|
24
9
|
end
|
@@ -3,54 +3,18 @@ module Zaikio
|
|
3
3
|
class Supplier < Base
|
4
4
|
uri "suppliers(/:id)"
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
:
|
9
|
-
|
10
|
-
# Associations
|
11
|
-
has_many :contract_requests, class_name: "Zaikio::Procurement::ContractRequest",
|
12
|
-
uri: "suppliers/:supplier_id/contract_requests(/:id)"
|
13
|
-
|
14
|
-
has_many :distributors, class_name: "Zaikio::Procurement::Supplier", uri: nil
|
15
|
-
|
16
|
-
def line_item_suggestions(**attributes)
|
17
|
-
variants = attributes.delete(:variants)
|
18
|
-
|
19
|
-
unless variants.is_a?(Array) && variants.all?(Hash)
|
20
|
-
raise ArgumentError, "For variants, you must pass an Array of Hashes"
|
21
|
-
end
|
22
|
-
|
23
|
-
self.class.request(
|
24
|
-
:post, line_item_suggestions_path, payload(attributes, variants)
|
25
|
-
).data.deep_symbolize_keys
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
|
30
|
-
def payload(attributes, variants)
|
31
|
-
MultiJson.dump(
|
32
|
-
line_item_suggestions: {
|
33
|
-
exclusive_sales_group_id: attributes[:exclusive_sales_group_id],
|
34
|
-
variants: variant_payload(variants)
|
35
|
-
}.reject { |_k, v| v.blank? }
|
36
|
-
)
|
37
|
-
end
|
6
|
+
def self.upcoming
|
7
|
+
result = Zaikio::Procurement::Supplier
|
8
|
+
.request(:get, "upcoming_suppliers")&.body&.dig("data")
|
38
9
|
|
39
|
-
|
40
|
-
variants.collect do |variant|
|
41
|
-
{
|
42
|
-
id: variant[:id],
|
43
|
-
amount: variant[:amount],
|
44
|
-
exact_amount: variant[:exact_amount] || false,
|
45
|
-
environmental_certification: variant[:environmental_certification],
|
46
|
-
unit: variant[:unit] || "sheet"
|
47
|
-
}
|
48
|
-
end
|
10
|
+
result.collect { |s| Zaikio::Procurement::Supplier.new(s) }
|
49
11
|
end
|
50
12
|
|
51
|
-
|
52
|
-
|
53
|
-
|
13
|
+
# Attributes
|
14
|
+
attributes :slug, :name, :connected, :currency, :customer_number, :prices_updated_at,
|
15
|
+
:additional_pricing_agreements, :article_types, :automatically_accept_contract_requests,
|
16
|
+
:brand_color, :cancelation_policy, :logo_url, :maximum_days_until_delivery,
|
17
|
+
:minimum_days_before_delivery, :supports_split_delivery, :maximum_order_size, :created_at, :updated_at
|
54
18
|
end
|
55
19
|
end
|
56
20
|
end
|
@@ -1,50 +1,20 @@
|
|
1
|
-
require_relative "concern/article_type_scoped"
|
2
|
-
|
3
1
|
module Zaikio
|
4
2
|
module Procurement
|
5
3
|
class Variant < Base
|
6
|
-
include ArticleTypeScoped
|
7
4
|
include_root_in_json :variant
|
8
5
|
|
9
|
-
#
|
10
|
-
def self.
|
11
|
-
|
6
|
+
# Constants
|
7
|
+
def self.types
|
8
|
+
%w[carbonless_copy_paper coating coating_plate envelope ink laminating_foil
|
9
|
+
offset_printing_blanket plate ring_binding self_adhesive sheet_substrate
|
10
|
+
sleeking_foil specialized_printing_blanket web_substrate].freeze
|
12
11
|
end
|
13
12
|
|
14
|
-
# Attributes
|
15
|
-
attributes :brightness, :category, :color, :dimensions_unit, :form, :grain, :height, :paper_weight,
|
16
|
-
:paper_weight_unit, :roughness, :thickness, :transparency, :unit_system, :whiteness,
|
17
|
-
:width, :article_id, :created_at, :updated_at
|
18
|
-
|
19
13
|
# Associations
|
20
14
|
has_one :article, class_name: "Zaikio::Procurement::Article",
|
21
15
|
uri: nil
|
22
|
-
has_many :skus,
|
23
|
-
|
24
|
-
|
25
|
-
def line_item_suggestion(**attributes)
|
26
|
-
self.class.request(
|
27
|
-
:post, line_item_suggestions_path, payload(attributes)
|
28
|
-
).data.map(&:deep_symbolize_keys)
|
29
|
-
end
|
30
|
-
|
31
|
-
private
|
32
|
-
|
33
|
-
def line_item_suggestions_path
|
34
|
-
"variants/#{id}/line_item_suggestions"
|
35
|
-
end
|
36
|
-
|
37
|
-
def payload(attributes)
|
38
|
-
MultiJson.dump(
|
39
|
-
line_item_suggestion: {
|
40
|
-
amount: attributes[:amount] || 1,
|
41
|
-
unit: attributes[:unit],
|
42
|
-
exact_amount: attributes[:exact_amount],
|
43
|
-
environmental_certification: attributes[:environmental_certification],
|
44
|
-
exclusive_sales_group_id: attributes[:exclusive_sales_group_id]
|
45
|
-
}
|
46
|
-
)
|
47
|
-
end
|
16
|
+
has_many :skus, class_name: "Zaikio::Procurement::Sku",
|
17
|
+
uri: nil
|
48
18
|
end
|
49
19
|
end
|
50
20
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Zaikio
|
2
|
+
module Procurement
|
3
|
+
class VariantSearch
|
4
|
+
def initialize(type: "all", query: nil, **filters)
|
5
|
+
@type = type.split.join
|
6
|
+
@query = query
|
7
|
+
@filters = filters
|
8
|
+
@valid_types = Zaikio::Procurement::Variant.types + ["all"]
|
9
|
+
|
10
|
+
unless @filters.respond_to?(:stringify_keys)
|
11
|
+
raise ArgumentError, "When using additional search parameters, you must pass a hash as an argument."
|
12
|
+
end
|
13
|
+
|
14
|
+
unless @type.split(",").all? { |t| @valid_types.include?(t) }
|
15
|
+
raise ArgumentError,
|
16
|
+
"When using the type parameter, you must pass one or more of \
|
17
|
+
the following types: #{@valid_types.join(', ')}."
|
18
|
+
end
|
19
|
+
|
20
|
+
@response = Zaikio::Procurement::Base.with(path).get
|
21
|
+
end
|
22
|
+
|
23
|
+
def results
|
24
|
+
@response.results.collect { |variant| Zaikio::Procurement::Variant.new(variant) }
|
25
|
+
end
|
26
|
+
|
27
|
+
def available_filters
|
28
|
+
@response.available_filters
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def path
|
34
|
+
"variants".tap do |qp|
|
35
|
+
qp << "?type=#{@type}"
|
36
|
+
qp << "&query=#{@query}" if @query
|
37
|
+
qp << "&" if @query && @filters.any?
|
38
|
+
qp << @filters.to_query("filters") if @filters
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/zaikio/procurement.rb
CHANGED
@@ -9,21 +9,21 @@ require "zaikio/procurement/base"
|
|
9
9
|
require "zaikio/procurement/address"
|
10
10
|
require "zaikio/procurement/article"
|
11
11
|
require "zaikio/procurement/variant"
|
12
|
-
require "zaikio/procurement/
|
12
|
+
require "zaikio/procurement/variant_search"
|
13
13
|
require "zaikio/procurement/sku"
|
14
|
-
require "zaikio/procurement/price"
|
15
14
|
require "zaikio/procurement/supplier"
|
16
|
-
require "zaikio/procurement/contract"
|
17
15
|
require "zaikio/procurement/contract_request"
|
18
|
-
require "zaikio/procurement/sales_group"
|
19
|
-
require "zaikio/procurement/sales_group_membership"
|
20
16
|
require "zaikio/procurement/order"
|
21
17
|
require "zaikio/procurement/order_line_item"
|
22
18
|
require "zaikio/procurement/delivery"
|
23
|
-
require "zaikio/procurement/delivery_line_item"
|
24
|
-
require "zaikio/procurement/current_supplier"
|
25
19
|
require "zaikio/procurement/material_requirement"
|
26
|
-
require "zaikio/procurement/
|
20
|
+
require "zaikio/procurement/material"
|
21
|
+
require "zaikio/procurement/pricing"
|
22
|
+
require "zaikio/procurement/site"
|
23
|
+
require "zaikio/procurement/availability"
|
24
|
+
require "zaikio/procurement/quantity"
|
25
|
+
require "zaikio/procurement/job"
|
26
|
+
require "zaikio/procurement/person"
|
27
27
|
|
28
28
|
module Zaikio
|
29
29
|
module Procurement
|
@@ -48,12 +48,8 @@ module Zaikio
|
|
48
48
|
AuthorizationMiddleware.token = original_token
|
49
49
|
end
|
50
50
|
|
51
|
-
def connection_path
|
52
|
-
"#{configuration.host}/#{configuration.flavor.to_s.pluralize}/api/v1/"
|
53
|
-
end
|
54
|
-
|
55
51
|
def create_connection
|
56
|
-
self.connection = Faraday.new(url:
|
52
|
+
self.connection = Faraday.new(url: configuration.host,
|
57
53
|
ssl: { verify: configuration.environment != :test }) do |c|
|
58
54
|
c.request :json
|
59
55
|
c.response :logger, configuration&.logger, headers: false
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zaikio-procurement
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zaikio GmbH
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-08-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: concurrent-ruby
|
@@ -109,26 +109,24 @@ files:
|
|
109
109
|
- lib/zaikio/procurement/address.rb
|
110
110
|
- lib/zaikio/procurement/article.rb
|
111
111
|
- lib/zaikio/procurement/authorization_middleware.rb
|
112
|
+
- lib/zaikio/procurement/availability.rb
|
112
113
|
- lib/zaikio/procurement/base.rb
|
113
|
-
- lib/zaikio/procurement/concern/article_type_scoped.rb
|
114
114
|
- lib/zaikio/procurement/configuration.rb
|
115
|
-
- lib/zaikio/procurement/contract.rb
|
116
115
|
- lib/zaikio/procurement/contract_request.rb
|
117
|
-
- lib/zaikio/procurement/current_supplier.rb
|
118
116
|
- lib/zaikio/procurement/delivery.rb
|
119
|
-
- lib/zaikio/procurement/
|
120
|
-
- lib/zaikio/procurement/
|
117
|
+
- lib/zaikio/procurement/job.rb
|
118
|
+
- lib/zaikio/procurement/material.rb
|
121
119
|
- lib/zaikio/procurement/material_requirement.rb
|
122
120
|
- lib/zaikio/procurement/order.rb
|
123
|
-
- lib/zaikio/procurement/order_conditions_inquiry.rb
|
124
121
|
- lib/zaikio/procurement/order_line_item.rb
|
125
|
-
- lib/zaikio/procurement/
|
126
|
-
- lib/zaikio/procurement/
|
127
|
-
- lib/zaikio/procurement/
|
122
|
+
- lib/zaikio/procurement/person.rb
|
123
|
+
- lib/zaikio/procurement/pricing.rb
|
124
|
+
- lib/zaikio/procurement/quantity.rb
|
125
|
+
- lib/zaikio/procurement/site.rb
|
128
126
|
- lib/zaikio/procurement/sku.rb
|
129
|
-
- lib/zaikio/procurement/substrate_search.rb
|
130
127
|
- lib/zaikio/procurement/supplier.rb
|
131
128
|
- lib/zaikio/procurement/variant.rb
|
129
|
+
- lib/zaikio/procurement/variant_search.rb
|
132
130
|
- lib/zaikio/procurement/version.rb
|
133
131
|
homepage: https://www.zaikio.com/
|
134
132
|
licenses:
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
module ArticleTypeScoped
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
included do
|
6
|
-
scope :substrate, -> { where(type: :substrate) }
|
7
|
-
scope :plate, -> { where(type: :plate) }
|
8
|
-
end
|
9
|
-
module ClassMethods
|
10
|
-
def find(id)
|
11
|
-
if Zaikio::Procurement.configuration.flavor == :supplier &&
|
12
|
-
(current_scope.nil? || current_scope.params[:type].blank?)
|
13
|
-
raise ArgumentError, "id and type are required for #{name.demodulize} in Supplier API"
|
14
|
-
end
|
15
|
-
|
16
|
-
super
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class Contract < Base
|
4
|
-
uri "contracts(/:id)"
|
5
|
-
include_root_in_json :contract
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :currency, :customer_number, :references, :consumer_id,
|
9
|
-
:consumer, :supplier_id, :created_at, :updated_at
|
10
|
-
|
11
|
-
# Associations
|
12
|
-
has_one :supplier, class_name: "Zaikio::Procurement::Supplier",
|
13
|
-
uri: nil
|
14
|
-
has_one :contract_request, uri: nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class CurrentSupplier < Base
|
4
|
-
self.primary_key = nil
|
5
|
-
uri "supplier"
|
6
|
-
include_root_in_json :supplier
|
7
|
-
|
8
|
-
def self.find
|
9
|
-
all.find_one
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.find_with_fallback(fallback)
|
13
|
-
all.with_fallback(fallback).find_one
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class DeliveryLineItem < Base
|
4
|
-
uri "delivery_line_items(/:id)"
|
5
|
-
include_root_in_json :delivery_line_item
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :amount, :created_at, :updated_at
|
9
|
-
|
10
|
-
# Associations
|
11
|
-
belongs_to :delivery, class_name: "Zaikio::Procurement::Delivery",
|
12
|
-
uri: nil
|
13
|
-
has_one :order_line_item, class_name: "Zaikio::Procurement::OrderLineItem",
|
14
|
-
uri: nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class OrderConditionsInquiry < Base
|
4
|
-
uri "order_conditions_inquiries(/:id)"
|
5
|
-
include_root_in_json :order_conditions_inquiry
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :contract_id, :currency, :created_at, :updated_at,
|
9
|
-
:desired_delivery_date, :verified_at, :expires_at,
|
10
|
-
:verified_net_handling_fee, :verified_net_shipping_fee,
|
11
|
-
:verified_net_total, :verified_delivery_date, :order_line_items,
|
12
|
-
:verified_order_line_items
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class Price < Base
|
4
|
-
uri "prices(/:id)"
|
5
|
-
include_root_in_json :price
|
6
|
-
|
7
|
-
# Attributes
|
8
|
-
attributes :kind, :minimum_order_quantity, :order_number, :price, :valid_from,
|
9
|
-
:valid_until, :sales_group_id, :sku_id, :created_at, :updated_at
|
10
|
-
|
11
|
-
# Associations
|
12
|
-
has_one :sku, class_name: "Zaikio::Procurement::Sku",
|
13
|
-
uri: nil
|
14
|
-
has_one :sales_group, class_name: "Zaikio::Procurement::SalesGroup",
|
15
|
-
uri: nil
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
module Zaikio
|
2
|
-
module Procurement
|
3
|
-
class SubstrateSearch
|
4
|
-
def initialize(query = nil, options = {})
|
5
|
-
@query = query
|
6
|
-
@supplier = options.delete(:supplier_id)
|
7
|
-
@options = options
|
8
|
-
@article_type = "substrate"
|
9
|
-
|
10
|
-
unless @options.respond_to?(:stringify_keys)
|
11
|
-
raise ArgumentError, "When using additional search parameters, you must pass a hash as an argument."
|
12
|
-
end
|
13
|
-
|
14
|
-
@response = Zaikio::Procurement::Base.with(path).get
|
15
|
-
end
|
16
|
-
|
17
|
-
def results
|
18
|
-
@response.results.collect { |variant| Zaikio::Procurement::Variant.new(variant) }
|
19
|
-
end
|
20
|
-
|
21
|
-
def facets
|
22
|
-
@response.facets
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def path
|
28
|
-
String.new(@article_type).tap do |qp|
|
29
|
-
qp << "/#{@supplier}" if @supplier
|
30
|
-
qp << "/variants/search?"
|
31
|
-
qp << "query=#{@query}" if @query
|
32
|
-
qp << "&" if @query && @options.any?
|
33
|
-
qp << @options.to_query if @options
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|