prestashop 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 +7 -0
- data/LICENSE.txt +56 -0
- data/README.md +111 -0
- data/Rakefile +9 -0
- data/lib/prestashop.rb +21 -0
- data/lib/prestashop/api.rb +9 -0
- data/lib/prestashop/api/connection.rb +225 -0
- data/lib/prestashop/api/converter.rb +152 -0
- data/lib/prestashop/api/error.rb +18 -0
- data/lib/prestashop/api/refinement.rb +14 -0
- data/lib/prestashop/client.rb +19 -0
- data/lib/prestashop/client/cache.rb +53 -0
- data/lib/prestashop/client/error.rb +9 -0
- data/lib/prestashop/client/implementation.rb +33 -0
- data/lib/prestashop/mapper.rb +9 -0
- data/lib/prestashop/mapper/extension.rb +161 -0
- data/lib/prestashop/mapper/model.rb +38 -0
- data/lib/prestashop/mapper/models.rb +1 -0
- data/lib/prestashop/mapper/models/address.rb +9 -0
- data/lib/prestashop/mapper/models/carrier.rb +9 -0
- data/lib/prestashop/mapper/models/cart.rb +9 -0
- data/lib/prestashop/mapper/models/cart_rule.rb +9 -0
- data/lib/prestashop/mapper/models/category.rb +114 -0
- data/lib/prestashop/mapper/models/combination.rb +81 -0
- data/lib/prestashop/mapper/models/contact.rb +9 -0
- data/lib/prestashop/mapper/models/content_management_system.rb +9 -0
- data/lib/prestashop/mapper/models/country.rb +15 -0
- data/lib/prestashop/mapper/models/currency.rb +9 -0
- data/lib/prestashop/mapper/models/customer.rb +9 -0
- data/lib/prestashop/mapper/models/customer_message.rb +9 -0
- data/lib/prestashop/mapper/models/customer_thread.rb +9 -0
- data/lib/prestashop/mapper/models/delivery.rb +9 -0
- data/lib/prestashop/mapper/models/employee.rb +9 -0
- data/lib/prestashop/mapper/models/group.rb +9 -0
- data/lib/prestashop/mapper/models/guest.rb +9 -0
- data/lib/prestashop/mapper/models/image.rb +52 -0
- data/lib/prestashop/mapper/models/image_type.rb +9 -0
- data/lib/prestashop/mapper/models/language.rb +15 -0
- data/lib/prestashop/mapper/models/manufacturer.rb +79 -0
- data/lib/prestashop/mapper/models/order.rb +9 -0
- data/lib/prestashop/mapper/models/order_carrier.rb +9 -0
- data/lib/prestashop/mapper/models/order_detail.rb +9 -0
- data/lib/prestashop/mapper/models/order_discount.rb +9 -0
- data/lib/prestashop/mapper/models/order_history.rb +9 -0
- data/lib/prestashop/mapper/models/order_invoice.rb +9 -0
- data/lib/prestashop/mapper/models/order_payment.rb +9 -0
- data/lib/prestashop/mapper/models/order_state.rb +9 -0
- data/lib/prestashop/mapper/models/price_range.rb +9 -0
- data/lib/prestashop/mapper/models/product.rb +198 -0
- data/lib/prestashop/mapper/models/product_feature.rb +69 -0
- data/lib/prestashop/mapper/models/product_feature_value.rb +60 -0
- data/lib/prestashop/mapper/models/product_option.rb +72 -0
- data/lib/prestashop/mapper/models/product_option_value.rb +56 -0
- data/lib/prestashop/mapper/models/product_supplier.rb +31 -0
- data/lib/prestashop/mapper/models/search.rb +9 -0
- data/lib/prestashop/mapper/models/shop.rb +9 -0
- data/lib/prestashop/mapper/models/shop_group.rb +9 -0
- data/lib/prestashop/mapper/models/specific_price.rb +9 -0
- data/lib/prestashop/mapper/models/specific_price_rule.rb +9 -0
- data/lib/prestashop/mapper/models/state.rb +9 -0
- data/lib/prestashop/mapper/models/stock.rb +9 -0
- data/lib/prestashop/mapper/models/stock_available.rb +35 -0
- data/lib/prestashop/mapper/models/stock_movement.rb +9 -0
- data/lib/prestashop/mapper/models/stock_movement_reason.rb +9 -0
- data/lib/prestashop/mapper/models/store.rb +9 -0
- data/lib/prestashop/mapper/models/supplier.rb +45 -0
- data/lib/prestashop/mapper/models/supply_order.rb +9 -0
- data/lib/prestashop/mapper/models/supply_order_detail.rb +9 -0
- data/lib/prestashop/mapper/models/supply_order_history.rb +9 -0
- data/lib/prestashop/mapper/models/supply_order_receipt_history.rb +9 -0
- data/lib/prestashop/mapper/models/supply_order_state.rb +9 -0
- data/lib/prestashop/mapper/models/tag.rb +9 -0
- data/lib/prestashop/mapper/models/tax.rb +24 -0
- data/lib/prestashop/mapper/models/tax_rule.rb +15 -0
- data/lib/prestashop/mapper/models/tax_rule_group.rb +9 -0
- data/lib/prestashop/mapper/models/translated_configuration.rb +9 -0
- data/lib/prestashop/mapper/models/warehouse.rb +9 -0
- data/lib/prestashop/mapper/models/warehouse_product_location.rb +9 -0
- data/lib/prestashop/mapper/models/weight_range.rb +9 -0
- data/lib/prestashop/mapper/models/zone.rb +9 -0
- data/lib/prestashop/mapper/refinement.rb +43 -0
- data/lib/prestashop/version.rb +3 -0
- metadata +279 -0
@@ -0,0 +1,198 @@
|
|
1
|
+
using Prestashop::Mapper::Refinement
|
2
|
+
module Prestashop
|
3
|
+
module Mapper
|
4
|
+
class Product < Model
|
5
|
+
resource :products
|
6
|
+
model :product
|
7
|
+
|
8
|
+
attr_accessor :id_manufacturer, :id_supplier, :id_category_default, :new, :cache_default_attribute, :id_tax_rules_group, :position_in_category,
|
9
|
+
:manufacturer_name, :quantity, :type, :id_shop_default, :supplier_reference, :location, :width, :height, :depth,
|
10
|
+
:weight, :quantity_discount, :ean13, :upc, :cache_is_pack, :cache_has_attachment, :is_virtual, :on_sale, :online_only, :ecotax, :minimal_quantity,
|
11
|
+
:price, :wholesale_price, :unity, :unit_price_ratio, :additional_shipping_cost, :customizable, :text_fields, :uploadable_files, :active,
|
12
|
+
:redirect_type, :id_product_redirect, :available_for_order, :available_date, :condition, :show_price, :indexed, :visibility, :advanced_stock_management, :description
|
13
|
+
attr_accessor :id_lang, :id_categories, :id_features
|
14
|
+
attr_writer :id, :name, :description_short, :link_rewrite, :reference, :price, :available_now, :available_later, :meta_description, :meta_keywords, :meta_title
|
15
|
+
|
16
|
+
def initialize args = {}
|
17
|
+
@id = args[:id]
|
18
|
+
@id_manufacturer = args[:id_manufacturer]
|
19
|
+
@id_supplier = args.fetch(:id_supplier)
|
20
|
+
@id_category_default = args[:id_category_default]
|
21
|
+
@new = args[:new]
|
22
|
+
@cache_default_attribute = args.fetch(:cache_default_attribute, 0)
|
23
|
+
@id_tax_rules_group = args[:id_tax_rules_group]
|
24
|
+
@position_in_category = args.fetch(:position_in_category, 0)
|
25
|
+
@manufacturer_name = args[:manufacturer_name]
|
26
|
+
@quantity = args[:quantity]
|
27
|
+
@type = args.fetch(:type, 'simple')
|
28
|
+
@id_shop_default = args.fetch(:id_shop_default, 1)
|
29
|
+
@reference = args.fetch(:reference)
|
30
|
+
@supplier_reference = args[:supplier_reference]
|
31
|
+
@location = args[:location]
|
32
|
+
@width = args[:width]
|
33
|
+
@height = args[:height]
|
34
|
+
@depth = args[:depth]
|
35
|
+
@weight = args[:weight]
|
36
|
+
@quantity_discount = args.fetch(:quantity_discount, 0)
|
37
|
+
@ean13 = args[:ean13]
|
38
|
+
@upc = args[:upc]
|
39
|
+
@cache_is_pack = args.fetch(:cache_is_pack, 0)
|
40
|
+
@cache_has_attachment = args.fetch(:cache_has_attachment, 0)
|
41
|
+
@is_virtual = args.fetch(:is_virtual, 0)
|
42
|
+
@on_sale = args.fetch(:on_sale, 0)
|
43
|
+
@online_only = args.fetch(:online_only, 0)
|
44
|
+
@ecotax = args.fetch(:ecotax, 0)
|
45
|
+
@minimal_quantity = args.fetch(:minimal_quantity, 1)
|
46
|
+
@price = args[:price]
|
47
|
+
@wholesale_price = args[:wholesale_price]
|
48
|
+
@unity = args[:unity]
|
49
|
+
@unit_price_ratio = args[:unit_price_ratio]
|
50
|
+
@additional_shipping_cost = args[:additional_shipping_cost]
|
51
|
+
@customizable = args[:customizable]
|
52
|
+
@text_fields = args[:text_fields]
|
53
|
+
@uploadable_files = args[:uploadable_files]
|
54
|
+
@active = args[:active]
|
55
|
+
@redirect_type = args[:redirect_type]
|
56
|
+
@id_product_redirect = args[:id_product_redirect]
|
57
|
+
@available_for_order = args[:available_for_order]
|
58
|
+
@available_date = args.fetch(:available_date, Date.today.strftime("%F"))
|
59
|
+
@condition = args.fetch(:condition, 'new')
|
60
|
+
@show_price = args[:show_price]
|
61
|
+
@indexed = 0
|
62
|
+
@visibility = args.fetch(:visibility, 'both')
|
63
|
+
@advanced_stock_management = args[:advanced_stock_management]
|
64
|
+
# date_add
|
65
|
+
# date_upd
|
66
|
+
@meta_description = args[:meta_description]
|
67
|
+
@meta_keywords = args[:meta_keywords]
|
68
|
+
@meta_title = args[:meta_title]
|
69
|
+
@link_rewrite = args[:link_rewrite]
|
70
|
+
@name = args.fetch(:name)
|
71
|
+
@description = args[:description]
|
72
|
+
@description_short = args[:description_short]
|
73
|
+
@available_now = args[:available_now]
|
74
|
+
@available_later = args[:available_later]
|
75
|
+
|
76
|
+
@id_lang = args.fetch(:id_lang)
|
77
|
+
@id_categories = args[:id_categories]
|
78
|
+
@id_features = args[:id_features]
|
79
|
+
end
|
80
|
+
|
81
|
+
def name
|
82
|
+
@name.plain.truncate(125)
|
83
|
+
end
|
84
|
+
|
85
|
+
def description_short
|
86
|
+
@description_short ? @description_short.restricted.truncate(252) : (description.truncate(252) if description)
|
87
|
+
end
|
88
|
+
|
89
|
+
def link_rewrite
|
90
|
+
@link_rewrite ? @link_rewrite.parameterize : name.parameterize
|
91
|
+
end
|
92
|
+
|
93
|
+
def reference
|
94
|
+
if @reference and not @reference.to_s.empty?
|
95
|
+
@reference.to_s.length > 32 ? Digest::MD5.hexdigest(@reference) : @reference
|
96
|
+
else
|
97
|
+
Digest::MD5.hexdigest(name)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def available_now
|
102
|
+
@available_now.plain.truncate(125)
|
103
|
+
end
|
104
|
+
|
105
|
+
def available_later
|
106
|
+
@available_later.plain.truncate(125)
|
107
|
+
end
|
108
|
+
|
109
|
+
def hash
|
110
|
+
product = {
|
111
|
+
id_supplier: id_supplier,
|
112
|
+
id_manufacturer: id_manufacturer,
|
113
|
+
id_category_default: id_category_default,
|
114
|
+
id_shop_default: id_shop_default,
|
115
|
+
id_tax_rules_group: id_tax_rules_group,
|
116
|
+
on_sale: on_sale,
|
117
|
+
online_only: online_only,
|
118
|
+
ean13: ean13,
|
119
|
+
upc: upc,
|
120
|
+
ecotax: ecotax,
|
121
|
+
minimal_quantity: minimal_quantity,
|
122
|
+
price: price,
|
123
|
+
wholesale_price: wholesale_price,
|
124
|
+
reference: reference,
|
125
|
+
active: active,
|
126
|
+
redirect_type: '404',
|
127
|
+
available_for_order: available_for_order,
|
128
|
+
condition: condition,
|
129
|
+
show_price: show_price,
|
130
|
+
name: hash_lang(name, id_lang),
|
131
|
+
description: hash_lang(description, id_lang),
|
132
|
+
description_short: hash_lang(description_short, id_lang),
|
133
|
+
link_rewrite: hash_lang(link_rewrite, id_lang),
|
134
|
+
meta_title: hash_lang(meta_title, id_lang),
|
135
|
+
meta_description: hash_lang(meta_description, id_lang),
|
136
|
+
meta_keywords: hash_lang(meta_keywords, id_lang),
|
137
|
+
available_now: hash_lang(available_now, id_lang),
|
138
|
+
available_later: hash_lang(available_later, id_lang),
|
139
|
+
associations: {} }
|
140
|
+
unless id_categories_all.empty?
|
141
|
+
product[:associations][:categories] = {}
|
142
|
+
product[:associations][:categories][:category] = hash_ids(id_categories_all)
|
143
|
+
end
|
144
|
+
if features_hash
|
145
|
+
product[:associations][:product_features] = {}
|
146
|
+
product[:associations][:product_features][:product_feature] = features_hash
|
147
|
+
end
|
148
|
+
product
|
149
|
+
end
|
150
|
+
|
151
|
+
# Find product by +reference+ and +id_supplier+, returns +id+
|
152
|
+
def id
|
153
|
+
@id ||= self.class.find_by 'filter[reference]' => reference, 'filter[id_supplier]' => id_supplier
|
154
|
+
end
|
155
|
+
alias :find? :id
|
156
|
+
|
157
|
+
# Update product with given options
|
158
|
+
def update options = {}
|
159
|
+
self.class.update(id, options)
|
160
|
+
end
|
161
|
+
|
162
|
+
# Generate hash of single feature
|
163
|
+
def feature_hash id_feature, id_feature_value
|
164
|
+
{ id: id_feature, id_feature_value: id_feature_value } if id_feature and id_feature_value
|
165
|
+
end
|
166
|
+
|
167
|
+
# Generate hash of features
|
168
|
+
def features_hash
|
169
|
+
id_features.map{|f| feature_hash(f[:id_feature], f[:id_feature_value])} if id_features
|
170
|
+
end
|
171
|
+
|
172
|
+
def id_categories_all
|
173
|
+
[id_category_default, id_categories].flatten.uniq
|
174
|
+
end
|
175
|
+
|
176
|
+
class << self
|
177
|
+
def fixed_hash id
|
178
|
+
product = find id
|
179
|
+
product.delete(:position_in_category)
|
180
|
+
product.delete(:manufacturer_name)
|
181
|
+
product.delete(:quantity)
|
182
|
+
product.delete(:type)
|
183
|
+
product.delete(:associations)
|
184
|
+
product
|
185
|
+
end
|
186
|
+
|
187
|
+
def deactivate id_supplier
|
188
|
+
first = (Date.today-365).strftime("%F")
|
189
|
+
last = (Date.today-1).strftime("%F")
|
190
|
+
products = where 'filter[date_upd]' => "[#{first},#{last}]", date: 1, 'filter[id_supplier]' => id_supplier, 'filter[active]' => 1, limit: 1000
|
191
|
+
if products and !products.empty?
|
192
|
+
products.map{|p| update(p, active: 0)}
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
using Prestashop::Mapper::Refinement
|
2
|
+
module Prestashop
|
3
|
+
module Mapper
|
4
|
+
class ProductFeature < Model
|
5
|
+
resource :product_features
|
6
|
+
model :product_feature
|
7
|
+
|
8
|
+
attr_accessor :id, :position
|
9
|
+
attr_writer :name
|
10
|
+
attr_accessor :id_lang
|
11
|
+
|
12
|
+
def initialize args = {}
|
13
|
+
@id = args[:id]
|
14
|
+
@position = args[:position]
|
15
|
+
@name = args.fetch(:name)
|
16
|
+
|
17
|
+
@id_lang = args.fetch(:id_lang)
|
18
|
+
end
|
19
|
+
|
20
|
+
def name
|
21
|
+
@name.plain
|
22
|
+
end
|
23
|
+
|
24
|
+
def hash
|
25
|
+
validate!
|
26
|
+
{ name: hash_lang(name, id_lang) }
|
27
|
+
end
|
28
|
+
|
29
|
+
def find_or_create
|
30
|
+
feature = self.class.find_in_cache name, id_lang
|
31
|
+
unless feature
|
32
|
+
feature = create
|
33
|
+
Client.clear_features_cache
|
34
|
+
end
|
35
|
+
feature[:id]
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate!
|
39
|
+
raise ArgumentError, 'id lang must be number' unless id_lang.kind_of?(Integer)
|
40
|
+
raise ArgumentError, 'name must string' unless name.kind_of?(String)
|
41
|
+
end
|
42
|
+
|
43
|
+
class << self
|
44
|
+
def find_in_cache name, id_lang
|
45
|
+
Client.features_cache.find{|k| k[:name].find_lang(name, id_lang) } if Client.features_cache
|
46
|
+
end
|
47
|
+
|
48
|
+
def cache
|
49
|
+
all display: '[id,name]'
|
50
|
+
end
|
51
|
+
|
52
|
+
def create_from_hash resources, id_lang
|
53
|
+
resources = [resources] if resources.kind_of?(Hash)
|
54
|
+
if resources.kind_of?(Array)
|
55
|
+
features = []
|
56
|
+
resources.each do |resource|
|
57
|
+
if resource[:feature] and !resource[:feature].empty? and resource[:value] and !resource[:value].empty?
|
58
|
+
id_f = new(name: resource[:feature], id_lang: id_lang).find_or_create
|
59
|
+
id_fv = ProductFeatureValue.new(value: resource[:value], id_feature: id_f, id_lang: id_lang).find_or_create
|
60
|
+
features << { id_feature: id_f, id_feature_value: id_fv }
|
61
|
+
end
|
62
|
+
end
|
63
|
+
features
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
using Prestashop::Mapper::Refinement
|
2
|
+
module Prestashop
|
3
|
+
module Mapper
|
4
|
+
class ProductFeatureValue < Model
|
5
|
+
resource :product_feature_values
|
6
|
+
model :product_feature_value
|
7
|
+
|
8
|
+
attr_accessor :id, :id_feature, :custom
|
9
|
+
attr_writer :value
|
10
|
+
attr_accessor :id_lang
|
11
|
+
|
12
|
+
def initialize args = {}
|
13
|
+
@id = args[:id]
|
14
|
+
@id_feature = args.fetch(:id_feature)
|
15
|
+
@custom = args.fetch(:custom, 0)
|
16
|
+
@value = args.fetch(:value)
|
17
|
+
|
18
|
+
@id_lang = args.fetch(:id_lang)
|
19
|
+
end
|
20
|
+
|
21
|
+
def value
|
22
|
+
@value.plain
|
23
|
+
end
|
24
|
+
|
25
|
+
def hash
|
26
|
+
validate!
|
27
|
+
|
28
|
+
{ id_feature: id_feature,
|
29
|
+
custom: custom,
|
30
|
+
value: hash_lang(value, id_lang) }
|
31
|
+
end
|
32
|
+
|
33
|
+
def find_or_create
|
34
|
+
result = self.class.find_in_cache id_feature, value, id_lang
|
35
|
+
unless result
|
36
|
+
result = create
|
37
|
+
Client.clear_feature_values_cache
|
38
|
+
end
|
39
|
+
result[:id]
|
40
|
+
end
|
41
|
+
|
42
|
+
def validate!
|
43
|
+
raise ArgumentError, 'id lang must be number' unless id_lang.kind_of?(Integer)
|
44
|
+
raise ArgumentError, 'id feature must string' unless id_feature.kind_of?(Integer)
|
45
|
+
raise ArgumentError, 'custom must be 0 or 1' unless custom == 0 or custom == 1
|
46
|
+
raise ArgumentError, 'value must string' unless value.kind_of?(String)
|
47
|
+
end
|
48
|
+
|
49
|
+
class << self
|
50
|
+
def find_in_cache id_feature, value, id_lang
|
51
|
+
Client.feature_values_cache.find{|v| v[:id_feature] == id_feature and v[:value].find_lang(value, id_lang)} if Client.feature_values_cache
|
52
|
+
end
|
53
|
+
|
54
|
+
def cache
|
55
|
+
all display: '[id,id_feature,value]'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
using Prestashop::Mapper::Refinement
|
2
|
+
module Prestashop
|
3
|
+
module Mapper
|
4
|
+
class ProductOption < Model
|
5
|
+
resource :product_options
|
6
|
+
model :product_option
|
7
|
+
|
8
|
+
attr_accessor :id, :is_color_group, :group_type, :position, :name
|
9
|
+
attr_writer :public_name
|
10
|
+
attr_accessor :id_lang
|
11
|
+
|
12
|
+
def initialize args = {}
|
13
|
+
@id = args[:id]
|
14
|
+
@is_color_group = args.fetch(:is_color_group, 0)
|
15
|
+
@group_type = args.fetch(:group_type, 'select')
|
16
|
+
@position = args[:position]
|
17
|
+
@name = args.fetch(:name)
|
18
|
+
@public_name = args[:public_name]
|
19
|
+
|
20
|
+
@id_lang = args.fetch(:id_lang)
|
21
|
+
end
|
22
|
+
|
23
|
+
def public_name
|
24
|
+
@public_name ? @public_name : name
|
25
|
+
end
|
26
|
+
|
27
|
+
def hash
|
28
|
+
validate!
|
29
|
+
|
30
|
+
{ is_color_group: is_color_group,
|
31
|
+
position: position,
|
32
|
+
group_type: group_type,
|
33
|
+
name: hash_lang(name, id_lang),
|
34
|
+
public_name: hash_lang(public_name, id_lang) }
|
35
|
+
end
|
36
|
+
|
37
|
+
def find_or_create
|
38
|
+
option = self.class.find_in_cache name, id_lang
|
39
|
+
unless option
|
40
|
+
option = create
|
41
|
+
Client.clear_options_cache
|
42
|
+
end
|
43
|
+
option[:id]
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate!
|
47
|
+
raise ArgumentError, 'id lang must be number' unless id_lang.kind_of?(Integer)
|
48
|
+
raise ArgumentError, 'name must string' unless name.kind_of?(String)
|
49
|
+
raise ArgumentError, 'group_type must string' unless group_type.kind_of?(String)
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
def create_from_hash product_options, id_lang
|
54
|
+
result = []
|
55
|
+
product_options.each do |product_option|
|
56
|
+
id_o = ProductOption.new(name: product_option[:name], id_lang: id_lang).find_or_create
|
57
|
+
result << ProductOptionValue.new(name: product_option[:value], id_attribute_group: id_o, id_lang: id_lang).find_or_create
|
58
|
+
end if product_options
|
59
|
+
result
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_in_cache name, id_lang
|
63
|
+
Client.options_cache.find{|k| k[:name].find_lang(name, id_lang) } if Client.options_cache
|
64
|
+
end
|
65
|
+
|
66
|
+
def cache
|
67
|
+
all display: '[id,name]'
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
using Prestashop::Mapper::Refinement
|
2
|
+
module Prestashop
|
3
|
+
module Mapper
|
4
|
+
class ProductOptionValue < Model
|
5
|
+
resource :product_option_values
|
6
|
+
model :product_option_value
|
7
|
+
|
8
|
+
attr_accessor :id, :id_attribute_group, :color, :position, :name
|
9
|
+
attr_accessor :id_lang
|
10
|
+
|
11
|
+
def initialize args = {}
|
12
|
+
@id = args[:id]
|
13
|
+
@id_attribute_group = args.fetch(:id_attribute_group)
|
14
|
+
@color = args.fetch(:color, 0)
|
15
|
+
@position = args[:position]
|
16
|
+
@name = args.fetch(:name)
|
17
|
+
|
18
|
+
@id_lang = args.fetch(:id_lang)
|
19
|
+
end
|
20
|
+
|
21
|
+
def hash
|
22
|
+
validate!
|
23
|
+
{ name: hash_lang(name, id_lang),
|
24
|
+
id_attribute_group: id_attribute_group,
|
25
|
+
color: color }
|
26
|
+
end
|
27
|
+
|
28
|
+
def find_or_create
|
29
|
+
result = self.class.find_in_cache id_attribute_group, name, id_lang
|
30
|
+
unless result
|
31
|
+
result = create
|
32
|
+
Client.clear_option_values_cache
|
33
|
+
end
|
34
|
+
result[:id]
|
35
|
+
end
|
36
|
+
|
37
|
+
# Supplier must have 1/0 as active and name must be string
|
38
|
+
def validate!
|
39
|
+
raise ArgumentError, 'id lang must be number' unless id_lang.kind_of?(Integer)
|
40
|
+
raise ArgumentError, 'name must string' unless name.kind_of?(String)
|
41
|
+
raise ArgumentError, 'id attribute group must be number' unless id_attribute_group.kind_of?(Integer)
|
42
|
+
raise ArgumentError, 'color must be true or false' unless color == 1 or color == 0
|
43
|
+
end
|
44
|
+
|
45
|
+
class << self
|
46
|
+
def find_in_cache id_attribute_group, name, id_lang
|
47
|
+
Client.option_values_cache.find{|v| v[:id_attribute_group] == id_attribute_group and v[:name].find_lang(name, id_lang)} if Client.option_values_cache
|
48
|
+
end
|
49
|
+
|
50
|
+
def cache
|
51
|
+
all display: '[id,id_attribute_group,name]'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|