zaikio-procurement 0.4.1 → 2.0.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/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
|