vng 1.6.0 → 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/CHANGELOG.md +12 -0
- data/lib/vng/mock_request.rb +55 -17
- data/lib/vng/price_block.rb +33 -0
- data/lib/vng/price_item.rb +35 -3
- data/lib/vng/price_list.rb +29 -0
- data/lib/vng/resource.rb +16 -1
- data/lib/vng/service_type.rb +3 -32
- data/lib/vng/version.rb +1 -1
- data/lib/vng/zip.rb +5 -1
- data/lib/vng.rb +1 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ba9ded97747e245e2102d52fc515f78a6b836b5e5a19709c40413d6c135f62b
|
4
|
+
data.tar.gz: 356ecdbc427ba9f6d1977972bafa3b81a4afa3122bc66ed11bbc9d69cfa1e6f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1547625c3428ba7727be689119387e1c29b3a931037a01ac6cd03e8df0a9f80a21bf5486d17d23bb5428b902b4d7620696f997fad59e53ec101a8f62c8441f6f
|
7
|
+
data.tar.gz: 0646cbea6e388d76db71cf24505862ec92d808901e1c465b3c2796383c24ba93c1bdea676bcab98968e79b79004030133cce0e2c9f533346371ce1b930df595b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## [2.0.0] - 2024-12-26
|
2
|
+
|
3
|
+
** Breaking changes**
|
4
|
+
|
5
|
+
- Remove ServiceType.all and ServiceType.where(zip:)
|
6
|
+
|
7
|
+
## [1.7.0] - 2024-12-26
|
8
|
+
|
9
|
+
- Adds PriceItem.for_price_list_id
|
10
|
+
- Adds PriceList.all
|
11
|
+
- Adds PriceBlock.for_price_list_id
|
12
|
+
|
1
13
|
## [1.6.0] - 2024-12-24
|
2
14
|
|
3
15
|
- Adds Zip.find_by(zip:)
|
data/lib/vng/mock_request.rb
CHANGED
@@ -133,33 +133,71 @@ module Vng
|
|
133
133
|
elsif @body[:method].eql? '4'
|
134
134
|
{}
|
135
135
|
end
|
136
|
+
when '/api/v1/resources/priceBlocks/'
|
137
|
+
if @body[:pageNo].eql? 1
|
138
|
+
{ "PriceBlocks" => [
|
139
|
+
{"priceBlockID"=>329, "priceListID"=>455, "priceBlock"=>"Affenpinscher", "sequence"=>1, "isActive"=>true},
|
140
|
+
{"priceBlockID"=>331, "priceListID"=>455, "priceBlock"=>"Afghan", "sequence"=>2, "isActive"=>false},
|
141
|
+
{"priceBlockID"=>332, "priceListID"=>455, "priceBlock"=>"Airedale Terrier", "sequence"=>3, "isActive"=>true},
|
142
|
+
{"priceBlockID"=>333, "priceListID"=>455, "priceBlock"=>"Persian", "sequence"=>4, "isActive"=>true},
|
143
|
+
]}
|
144
|
+
else
|
145
|
+
{ }
|
146
|
+
end
|
147
|
+
when '/api/v1/resources/priceLists/'
|
148
|
+
{ "PriceLists" => [
|
149
|
+
{ "priceListID" => 145, "priceList": "Pet Grooming Default", "serviceTypeID" => 14, "isActive" => true },
|
150
|
+
{ "priceListID" => 146, "priceList": "Pet Grooming Special", "serviceTypeID" => 14, "isActive" => true },
|
151
|
+
{ "priceListID" => 147, "priceList": "Pet Grooming Old", "serviceTypeID" => 14, "isActive" => false },
|
152
|
+
]}
|
153
|
+
when '/api/v1/resources/priceItems/'
|
154
|
+
if @body[:pageNo].eql? 1
|
155
|
+
{ "PriceItems"=>[
|
156
|
+
{ "priceItemID"=>275111, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>1, "priceItem"=>"Bulldog American - 15 Step SPA Grooming Service", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
157
|
+
{ "priceItemID"=>275112, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>2, "priceItem"=>"Bulldog American - 15 Step SPA Super Grooming Service", "value"=>105.0, "taxID"=>256, "durationPerUnit"=>75.0, "serviceBadge"=>nil, "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
158
|
+
|
159
|
+
{ "priceItemID"=>275300, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>3, "priceItem"=>"Bulldog American - Shave Down", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Not Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
160
|
+
{ "priceItemID"=>275301, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>4, "priceItem"=>"Bulldog American - Puppy Cut", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
161
|
+
|
162
|
+
{ "priceItemID"=>275302, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>5, "priceItem"=>"De-Shedding Treatment inactive", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
|
163
|
+
{ "priceItemID"=>275303, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>6, "priceItem"=>"De-Shedding Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
164
|
+
{ "priceItemID"=>275304, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>7, "priceItem"=>"De-Shedding Treatment 60 - 100 lbs", "value"=>30.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
165
|
+
{ "priceItemID"=>275305, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>8, "priceItem"=>"De-shedding Treatment - 101 lbs and over", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
166
|
+
|
167
|
+
{ "priceItemID"=>275306, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>9, "priceItem"=>"Hot Aloe SPA Re- Moisturizing Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
168
|
+
{ "priceItemID"=>275307, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>10, "priceItem"=>"Aches & Pains Package", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
169
|
+
{ "priceItemID"=>275308, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>11, "priceItem"=>"Old Add On", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Not Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
170
|
+
] }
|
171
|
+
else
|
172
|
+
{ }
|
173
|
+
end
|
136
174
|
when '/api/v1/data/priceLists/'
|
137
|
-
if @body[:assetID].eql?
|
175
|
+
if @body[:assetID].eql?("2201008")
|
138
176
|
{ "PriceItems"=>[
|
139
|
-
{ "priceItemID"=>275111, "priceItem"=>"Bulldog American - 15 Step SPA Grooming Service", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
140
|
-
{ "priceItemID"=>275112, "priceItem"=>"Bulldog American - 15 Step SPA Super Grooming Service", "value"=>105.0, "taxID"=>256, "durationPerUnit"=>75.0, "serviceBadge"=>nil, "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
177
|
+
{ "priceItemID"=>275111, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>1, "priceItem"=>"Bulldog American - 15 Step SPA Grooming Service", "value"=>85.0, "taxID"=>256, "durationPerUnit"=>45.0, "serviceBadge"=>"Required", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
178
|
+
{ "priceItemID"=>275112, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>2, "priceItem"=>"Bulldog American - 15 Step SPA Super Grooming Service", "value"=>105.0, "taxID"=>256, "durationPerUnit"=>75.0, "serviceBadge"=>nil, "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
141
179
|
|
142
|
-
{ "priceItemID"=>275300, "priceItem"=>"Bulldog American - Shave Down", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Not Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
143
|
-
{ "priceItemID"=>275301, "priceItem"=>"Bulldog American - Puppy Cut", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
180
|
+
{ "priceItemID"=>275300, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>3, "priceItem"=>"Bulldog American - Shave Down", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Not Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
181
|
+
{ "priceItemID"=>275301, "priceBlockID"=>329, "descriptionHelp"=>"A price item", "sequence"=>4, "priceItem"=>"Bulldog American - Puppy Cut", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
144
182
|
|
145
|
-
{ "priceItemID"=>275302, "priceItem"=>"De-Shedding Treatment inactive", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
|
146
|
-
{ "priceItemID"=>275303, "priceItem"=>"De-Shedding Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
147
|
-
{ "priceItemID"=>275304, "priceItem"=>"De-Shedding Treatment 60 - 100 lbs", "value"=>30.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
148
|
-
{ "priceItemID"=>275305, "priceItem"=>"De-shedding Treatment - 101 lbs and over", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
183
|
+
{ "priceItemID"=>275302, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>5, "priceItem"=>"De-Shedding Treatment inactive", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>false },
|
184
|
+
{ "priceItemID"=>275303, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>6, "priceItem"=>"De-Shedding Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
185
|
+
{ "priceItemID"=>275304, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>7, "priceItem"=>"De-Shedding Treatment 60 - 100 lbs", "value"=>30.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
186
|
+
{ "priceItemID"=>275305, "priceBlockID"=>331, "descriptionHelp"=>"A price item", "sequence"=>8, "priceItem"=>"De-shedding Treatment - 101 lbs and over", "value"=>40.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"De-Shed", "isOnline"=>true, "isActive"=>true },
|
149
187
|
|
150
|
-
{ "priceItemID"=>275306, "priceItem"=>"Hot Aloe SPA Re- Moisturizing Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
151
|
-
{ "priceItemID"=>275307, "priceItem"=>"Aches & Pains Package", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
152
|
-
{ "priceItemID"=>275308, "priceItem"=>"Old Add On", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Not Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
188
|
+
{ "priceItemID"=>275306, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>9, "priceItem"=>"Hot Aloe SPA Re- Moisturizing Treatment 0-30 lbs", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>20.0, "serviceBadge"=>nil, "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
189
|
+
{ "priceItemID"=>275307, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>10, "priceItem"=>"Aches & Pains Package", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
190
|
+
{ "priceItemID"=>275308, "priceBlockID"=>332, "descriptionHelp"=>"A price item", "sequence"=>11, "priceItem"=>"Old Add On", "value"=>0.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Not Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
153
191
|
] }
|
154
192
|
elsif @body[:assetID].eql? "2201009"
|
155
193
|
{ "PriceItems"=>[
|
156
|
-
{ "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - 15 Step SPA Grooming Service", "value"=>65.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
194
|
+
{ "priceItemID"=>276111, "priceBlockID"=>333, "descriptionHelp"=>"A price item", "sequence"=>21, "priceItem"=>"Cat Short Hair - 15 Step SPA Grooming Service", "value"=>65.0, "taxID"=>256, "durationPerUnit"=>60.0, "serviceBadge"=>"Recommended", "serviceCategory"=>"15 Step Spa", "isOnline"=>true, "isActive"=>true },
|
157
195
|
|
158
|
-
{ "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - Lion Cut", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
159
|
-
{ "priceItemID"=>276111, "priceItem"=>"Cat Short Hair - Shave Down", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
196
|
+
{ "priceItemID"=>276111, "priceBlockID"=>333, "descriptionHelp"=>"A price item", "sequence"=>22, "priceItem"=>"Cat Short Hair - Lion Cut", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
197
|
+
{ "priceItemID"=>276111, "priceBlockID"=>333, "descriptionHelp"=>"A price item", "sequence"=>23, "priceItem"=>"Cat Short Hair - Shave Down", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>30.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Cut", "isOnline"=>true, "isActive"=>true },
|
160
198
|
|
161
|
-
{ "priceItemID"=>276111, "priceItem"=>"De-Matting - Light", "value"=>15.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
162
|
-
{ "priceItemID"=>276111, "priceItem"=>"De-Matting - Moderate", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
199
|
+
{ "priceItemID"=>276111, "priceBlockID"=>333, "descriptionHelp"=>"A price item", "sequence"=>24, "priceItem"=>"De-Matting - Light", "value"=>15.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
200
|
+
{ "priceItemID"=>276111, "priceBlockID"=>333, "descriptionHelp"=>"A price item", "sequence"=>25, "priceItem"=>"De-Matting - Moderate", "value"=>20.0, "taxID"=>256, "durationPerUnit"=>15.0, "serviceBadge"=>"Offered", "serviceCategory"=>"Add Ons", "isOnline"=>true, "isActive"=>true },
|
163
201
|
] }
|
164
202
|
end
|
165
203
|
when '/api/v1/resources/serviceTypes/'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'vng/resource'
|
2
|
+
require 'vng/price_list'
|
3
|
+
|
4
|
+
module Vng
|
5
|
+
# Provides methods to interact with Vonigo price blocks.
|
6
|
+
class PriceBlock < Resource
|
7
|
+
PATH = '/api/v1/resources/priceBlocks/'
|
8
|
+
|
9
|
+
attr_reader :id, :name, :index
|
10
|
+
|
11
|
+
def initialize(id:, name:, index:)
|
12
|
+
@id = id
|
13
|
+
@name = name
|
14
|
+
@index = index
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.for_price_list_id(price_list_id)
|
18
|
+
body = { priceListID: price_list_id }
|
19
|
+
|
20
|
+
data = request path: PATH, body: body, returning: 'PriceBlocks'
|
21
|
+
|
22
|
+
data.filter_map do |body|
|
23
|
+
next unless body['isActive']
|
24
|
+
|
25
|
+
id = body['priceBlockID']
|
26
|
+
name = body['priceBlock']
|
27
|
+
index = body['sequence']
|
28
|
+
|
29
|
+
new id: id, name: name, index: index
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/vng/price_item.rb
CHANGED
@@ -5,16 +5,45 @@ module Vng
|
|
5
5
|
class PriceItem < Resource
|
6
6
|
PATH = '/api/v1/data/priceLists/'
|
7
7
|
|
8
|
-
attr_reader :id, :price_item, :value, :tax_id, :duration_per_unit, :service_badge, :service_category
|
8
|
+
attr_reader :id, :price_item, :index, :description, :value, :tax_id, :duration_per_unit, :service_badge, :service_category, :price_block_id
|
9
9
|
|
10
|
-
def initialize(id:, price_item:, value:, tax_id:, duration_per_unit:, service_badge:, service_category:)
|
10
|
+
def initialize(id:, price_item:, index:, description:, value:, tax_id:, duration_per_unit:, service_badge:, service_category:, price_block_id:)
|
11
11
|
@id = id
|
12
12
|
@price_item = price_item
|
13
|
+
@index = index
|
14
|
+
@description = description
|
13
15
|
@value = value
|
14
16
|
@tax_id = tax_id
|
15
17
|
@duration_per_unit = duration_per_unit
|
16
18
|
@service_badge = service_badge
|
17
19
|
@service_category = service_category
|
20
|
+
@price_block_id = price_block_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.for_price_list_id(price_list_id)
|
24
|
+
body = {
|
25
|
+
method: '1',
|
26
|
+
priceListID: price_list_id,
|
27
|
+
}
|
28
|
+
|
29
|
+
data = request path: '/api/v1/resources/priceItems/', body: body, returning: 'PriceItems'
|
30
|
+
|
31
|
+
data.filter_map do |body|
|
32
|
+
next unless body['isOnline'] && body['isActive']
|
33
|
+
|
34
|
+
id = body['priceItemID']
|
35
|
+
price_item = body['priceItem']
|
36
|
+
index = body['sequence']
|
37
|
+
description = body['descriptionHelp']
|
38
|
+
value = body['value']
|
39
|
+
tax_id = body['taxID']
|
40
|
+
duration_per_unit = body['durationPerUnit']
|
41
|
+
service_badge = body['serviceBadge']
|
42
|
+
service_category = body['serviceCategory']
|
43
|
+
price_block_id = body['priceBlockID']
|
44
|
+
|
45
|
+
new id: id, price_item: price_item, index: index, description: description, value: value, tax_id: tax_id, duration_per_unit: duration_per_unit, service_badge: service_badge, service_category: service_category, price_block_id: price_block_id
|
46
|
+
end
|
18
47
|
end
|
19
48
|
|
20
49
|
def self.where(location_id:, asset_id:)
|
@@ -32,13 +61,16 @@ module Vng
|
|
32
61
|
end.map do |body|
|
33
62
|
id = body['priceItemID']
|
34
63
|
price_item = body['priceItem']
|
64
|
+
index = body['sequence']
|
65
|
+
description = body['descriptionHelp']
|
35
66
|
value = body['value']
|
36
67
|
tax_id = body['taxID']
|
37
68
|
duration_per_unit = body['durationPerUnit']
|
38
69
|
service_badge = body['serviceBadge']
|
39
70
|
service_category = body['serviceCategory']
|
71
|
+
price_block_id = body['priceBlockID']
|
40
72
|
|
41
|
-
new id: id, price_item: price_item, value: value, tax_id: tax_id, duration_per_unit: duration_per_unit, service_badge: service_badge, service_category: service_category
|
73
|
+
new id: id, price_item: price_item, index: index, description: description, value: value, tax_id: tax_id, duration_per_unit: duration_per_unit, service_badge: service_badge, service_category: service_category, price_block_id: price_block_id
|
42
74
|
end
|
43
75
|
end
|
44
76
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'vng/resource'
|
2
|
+
|
3
|
+
module Vng
|
4
|
+
# Provides methods to interact with Vonigo price lists.
|
5
|
+
class PriceList < Resource
|
6
|
+
PATH = '/api/v1/resources/priceLists/'
|
7
|
+
|
8
|
+
attr_reader :id, :name
|
9
|
+
|
10
|
+
def initialize(id:, name:)
|
11
|
+
@id = id
|
12
|
+
@name = name
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.all
|
16
|
+
data = request path: PATH
|
17
|
+
|
18
|
+
data['PriceLists'].filter_map do |price_list|
|
19
|
+
next unless price_list['isActive']
|
20
|
+
next unless price_list['serviceTypeID'].eql?(14)
|
21
|
+
|
22
|
+
id = price_list['priceListID']
|
23
|
+
name = price_list['priceList']
|
24
|
+
|
25
|
+
new id: id, name: name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/vng/resource.rb
CHANGED
@@ -5,11 +5,26 @@ module Vng
|
|
5
5
|
class Resource
|
6
6
|
private
|
7
7
|
|
8
|
-
def self.request(path:, body: {}, query: {}, include_security_token: true)
|
8
|
+
def self.request(path:, body: {}, query: {}, include_security_token: true, returning: nil)
|
9
9
|
if query.none? && include_security_token
|
10
10
|
body = body.merge securityToken: Vng.configuration.security_token
|
11
11
|
end
|
12
12
|
|
13
|
+
if returning
|
14
|
+
[].tap do |response|
|
15
|
+
1.step do |page_number|
|
16
|
+
body = body.merge pageSize: 500, pageNo: page_number
|
17
|
+
batch = response_for(path:, body:, query:).fetch(returning, [])
|
18
|
+
break if batch.empty? || page_number > 20
|
19
|
+
response.concat batch
|
20
|
+
end
|
21
|
+
end
|
22
|
+
else
|
23
|
+
response_for path:, body:, query:
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.response_for(path:, body: {}, query: {})
|
13
28
|
instrument do |data|
|
14
29
|
Request.new(host: host, path: path, query: query, body: body).run
|
15
30
|
end
|
data/lib/vng/service_type.rb
CHANGED
@@ -5,42 +5,13 @@ module Vng
|
|
5
5
|
class ServiceType < Resource
|
6
6
|
PATH = '/api/v1/resources/serviceTypes/'
|
7
7
|
|
8
|
-
attr_reader :id, :type, :duration
|
8
|
+
attr_reader :id, :type, :duration, :price_list_id
|
9
9
|
|
10
|
-
def initialize(id:, type:, duration:)
|
10
|
+
def initialize(id:, type:, duration:, price_list_id:)
|
11
11
|
@id = id
|
12
12
|
@type = type
|
13
13
|
@duration = duration
|
14
|
-
|
15
|
-
|
16
|
-
def self.all
|
17
|
-
data = request path: PATH
|
18
|
-
|
19
|
-
data['ServiceTypes'].map do |body|
|
20
|
-
id = body['serviceTypeID']
|
21
|
-
type = body['serviceType']
|
22
|
-
duration = body['duration']
|
23
|
-
|
24
|
-
new id: id, type: type, duration: duration
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.where(zip:)
|
29
|
-
body = {
|
30
|
-
zip: zip,
|
31
|
-
}
|
32
|
-
|
33
|
-
data = request path: PATH, body: body
|
34
|
-
|
35
|
-
data.fetch('ServiceTypes', []).filter do |body|
|
36
|
-
body['isActive']
|
37
|
-
end.map do |body|
|
38
|
-
id = body['serviceTypeID']
|
39
|
-
type = body['serviceType']
|
40
|
-
duration = body['duration']
|
41
|
-
|
42
|
-
new id: id, type: type, duration: duration
|
43
|
-
end
|
14
|
+
@price_list_id = price_list_id
|
44
15
|
end
|
45
16
|
end
|
46
17
|
end
|
data/lib/vng/version.rb
CHANGED
data/lib/vng/zip.rb
CHANGED
@@ -20,6 +20,7 @@ module Vng
|
|
20
20
|
data = request path: PATH
|
21
21
|
|
22
22
|
data['Zips'].reject do |franchise|
|
23
|
+
# TODO: add "Owned - Not In Service"
|
23
24
|
franchise['zipStatus'].eql? 'Owned – Deactivated'
|
24
25
|
end.map do |body|
|
25
26
|
zip = body['zip']
|
@@ -39,12 +40,15 @@ module Vng
|
|
39
40
|
data = request path: PATH, body: body
|
40
41
|
zip_data = data['Zip']
|
41
42
|
|
43
|
+
# TODO: Remove ServiceType class, store duration and price_list_id
|
44
|
+
# inside Zip itself
|
42
45
|
unless zip_data['zipCodeID'] == '0'
|
43
46
|
service_types = data['ServiceTypes'].map do |body|
|
44
47
|
id = body['serviceTypeID']
|
45
48
|
type = body['serviceType']
|
46
49
|
duration = body['duration']
|
47
|
-
|
50
|
+
price_list_id = body['priceID']
|
51
|
+
ServiceType.new id: id, type: type, duration: duration, price_list_id: price_list_id
|
48
52
|
end
|
49
53
|
|
50
54
|
new zip: zip_data['zipCode'], state: zip_data['provinceAbbr'], zone_name: zip_data['zoneName'], city: zip_data['defaultCity'], service_types: service_types
|
data/lib/vng.rb
CHANGED
@@ -14,6 +14,7 @@ require_relative 'vng/franchise'
|
|
14
14
|
require_relative 'vng/lead'
|
15
15
|
require_relative 'vng/location'
|
16
16
|
require_relative 'vng/lock'
|
17
|
+
require_relative 'vng/price_block'
|
17
18
|
require_relative 'vng/price_item'
|
18
19
|
require_relative 'vng/route'
|
19
20
|
require_relative 'vng/security_token'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vng
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- claudiob
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-12-
|
11
|
+
date: 2024-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: simplecov
|
@@ -81,7 +81,9 @@ files:
|
|
81
81
|
- lib/vng/location.rb
|
82
82
|
- lib/vng/lock.rb
|
83
83
|
- lib/vng/mock_request.rb
|
84
|
+
- lib/vng/price_block.rb
|
84
85
|
- lib/vng/price_item.rb
|
86
|
+
- lib/vng/price_list.rb
|
85
87
|
- lib/vng/resource.rb
|
86
88
|
- lib/vng/route.rb
|
87
89
|
- lib/vng/security_token.rb
|