erp_products 4.0.0 → 4.2.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/app/controllers/api/v1/product_types_controller.rb +140 -0
- data/app/controllers/erp_products/shared/product_features_controller.rb +46 -0
- data/app/models/extensions/biz_txn_acct_root.rb +5 -0
- data/app/models/product_feature.rb +117 -0
- data/app/models/product_feature_applicability.rb +17 -0
- data/app/models/product_feature_interaction.rb +21 -0
- data/app/models/product_feature_interaction_type.rb +17 -0
- data/app/models/product_feature_type.rb +70 -0
- data/app/models/product_feature_type_product_feature_value.rb +16 -0
- data/app/models/product_feature_value.rb +42 -0
- data/app/models/product_instance.rb +4 -0
- data/app/models/product_offer.rb +25 -3
- data/app/models/product_type.rb +185 -21
- data/app/models/product_type_pty_role.rb +2 -0
- data/app/models/simple_product_offer.rb +3 -1
- data/config/routes.rb +15 -4
- data/db/data_migrations/20141222195727_add_product_type_view_types.rb +24 -0
- data/db/migrate/20080805000040_base_products.rb +284 -136
- data/db/migrate/20150304211841_add_shipping_cost_to_product_types.rb +7 -0
- data/db/migrate/20150507075057_add_dimensions_to_product_types.rb +12 -0
- data/db/migrate/20150622150625_add_taxable_to_product_types.rb +5 -0
- data/db/migrate/20150711194216_update_product_feature_interactions.rb +21 -0
- data/db/migrate/20151216235328_add_biz_txn_acct_root_to_products.rb +15 -0
- data/db/migrate/20160310163055_add_created_by_updated_by_to_erp_products.rb +43 -0
- data/lib/erp_products/engine.rb +0 -4
- data/lib/erp_products/extensions/active_record/acts_as_product_offer.rb +7 -4
- data/lib/erp_products/version.rb +1 -1
- metadata +24 -14
- data/app/controllers/erp_products/shared/product_types_controller.rb +0 -96
- data/app/views/erp_products/shared/product_types/show_details.html.erb +0 -8
- data/db/migrate/20080805000041_base_products_indexes.rb +0 -61
- data/db/migrate/20130131204335_add_product_instances_nested_set_indexes.rb +0 -9
- data/db/migrate/20130131204336_add_type_column_to_product_types.rb +0 -9
- data/db/migrate/20140124185720_add_product_party_roles.rb +0 -17
- data/db/migrate/20140130211433_add_sku_comment_uom_to_product_type.rb +0 -7
@@ -0,0 +1,7 @@
|
|
1
|
+
class AddShippingCostToProductTypes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
unless column_exists? :product_types, :shipping_cost
|
4
|
+
add_column :product_types, :shipping_cost, :decimal, :precision => 8, :scale => 2 unless column_exists?(:product_types, :shipping_cost)
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class AddDimensionsToProductTypes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
unless column_exists? :product_types, :length
|
4
|
+
add_column :product_types, :length, :decimal
|
5
|
+
add_column :product_types, :width, :decimal
|
6
|
+
add_column :product_types, :height, :decimal
|
7
|
+
add_column :product_types, :weight, :decimal
|
8
|
+
add_column :product_types, :cylindrical, :boolean
|
9
|
+
remove_column :product_types, :shipping_cost
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class UpdateProductFeatureInteractions < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
rename_column :product_feature_interactions, :product_feature_id, :product_feature_from_id unless column_exists? :product_feature_interactions, :product_feature_from_id
|
4
|
+
rename_column :product_feature_interactions, :interacted_product_feature_id, :product_feature_to_id unless column_exists? :product_feature_interactions, :product_feature_to_id
|
5
|
+
|
6
|
+
add_index :product_feature_values, :internal_identifier, :name => 'product_ft_vals_iid_idx' unless index_exists? :product_feature_values, name: 'product_ft_vals_iid_idx'
|
7
|
+
add_index :product_feature_interaction_types, :internal_identifier, name: 'product_ft_int_types_iid_idx' unless index_exists? :product_feature_interaction_types, name: 'product_ft_int_types_iid_idx'
|
8
|
+
add_index :product_feature_types, :internal_identifier, name: 'product_ft_types_iid_idx' unless index_exists? :product_feature_types, name: 'product_ft_types_iid_idx'
|
9
|
+
add_index :product_feature_types, [:rgt, :lft, :parent_id], name: 'product_ft_types_nested_set_idx' unless index_exists? :product_feature_types, 'product_ft_types_nested_set_idx'
|
10
|
+
end
|
11
|
+
|
12
|
+
def down
|
13
|
+
rename_column :product_feature_interactions, :product_feature_from_id, :product_feature_id if column_exists? :product_feature_interactions, :product_feature_from_id
|
14
|
+
rename_column :product_feature_interactions, :product_feature_to_id, :interacted_product_feature_id if column_exists? :product_feature_interactions, :product_feature_to_id
|
15
|
+
|
16
|
+
remove_index :product_feature_values, name: 'product_ft_vals_iid_idx' if index_exists? :product_feature_values, 'product_ft_vals_iid_idx'
|
17
|
+
remove_index :product_feature_interaction_types, name: 'product_ft_int_types_iid_idx' if index_exists? :product_feature_interaction_types, 'product_ft_int_types_iid_idx'
|
18
|
+
remove_index :product_feature_types, name: 'product_ft_types_iid_idx' if index_exists? :product_feature_types, 'product_ft_types_iid_idx'
|
19
|
+
remove_index :product_feature_types, name: 'product_ft_types_nested_set_idx' if index_exists? :product_feature_types, 'product_ft_types_nested_set_idx'
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddBizTxnAcctRootToProducts < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
unless column_exists? :product_types, :biz_txn_acct_root_id
|
4
|
+
add_column :product_types, :biz_txn_acct_root_id, :integer
|
5
|
+
|
6
|
+
add_index :product_types, :biz_txn_acct_root_id
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def down
|
11
|
+
if column_exists? :product_types, :biz_txn_acct_root_id
|
12
|
+
remove_column :product_types, :biz_txn_acct_root_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class AddCreatedByUpdatedByToErpProducts < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
%w{product_feature_types
|
4
|
+
product_feature_values
|
5
|
+
product_features
|
6
|
+
product_offers
|
7
|
+
product_types}.each do |table|
|
8
|
+
|
9
|
+
unless column_exists? table.to_sym, :created_by_party_id
|
10
|
+
add_column table.to_sym, :created_by_party_id, :integer
|
11
|
+
|
12
|
+
add_index table.to_sym, :created_by_party_id, name: "#{table}_created_by_pty_idx"
|
13
|
+
end
|
14
|
+
|
15
|
+
unless column_exists? table.to_sym, :updated_by_party_id
|
16
|
+
add_column table.to_sym, :updated_by_party_id, :integer
|
17
|
+
|
18
|
+
add_index table.to_sym, :updated_by_party_id, name: "#{table}_updated_by_pty_idx"
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
def down
|
26
|
+
%w{product_feature_types
|
27
|
+
product_feature_values
|
28
|
+
product_features
|
29
|
+
product_offers
|
30
|
+
product_types}.each do |table|
|
31
|
+
|
32
|
+
if column_exists? table.to_sym, :created_by_party_id
|
33
|
+
remove_column table.to_sym, :created_by_party_id
|
34
|
+
end
|
35
|
+
|
36
|
+
if column_exists? table.to_sym, :updated_by_party_id
|
37
|
+
remove_column table.to_sym, :updated_by_party_id
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
data/lib/erp_products/engine.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
module ErpProducts
|
2
2
|
class Engine < Rails::Engine
|
3
3
|
isolate_namespace ErpProducts
|
4
|
-
|
5
|
-
initializer "erp_products.merge_public" do |app|
|
6
|
-
app.middleware.insert_before Rack::Runtime, ::ActionDispatch::Static, "#{root}/public"
|
7
|
-
end
|
8
4
|
|
9
5
|
ActiveSupport.on_load(:active_record) do
|
10
6
|
include ErpProducts::Extensions::ActiveRecord::ActsAsProductInstance
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module ErpProducts
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
module Extensions
|
3
|
+
module ActiveRecord
|
4
|
+
module ActsAsProductOffer
|
5
5
|
|
6
6
|
def self.included(base)
|
7
7
|
base.extend(ClassMethods)
|
@@ -19,7 +19,10 @@ module ErpProducts
|
|
19
19
|
|
20
20
|
has_one :product_offer, :as => :product_offer_record
|
21
21
|
|
22
|
-
[:description, :description
|
22
|
+
[:description, :description=, :valid_from,
|
23
|
+
:valid_from=, :valid_to, :valid_to=].each do |m|
|
24
|
+
delegate m, :to => :product_offer
|
25
|
+
end
|
23
26
|
end
|
24
27
|
end
|
25
28
|
|
data/lib/erp_products/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erp_products
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Koloski, Russell Holmes
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-06-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erp_app
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '4.
|
19
|
+
version: '4.2'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '4.
|
26
|
+
version: '4.2'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: erp_dev_svcs
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '4.
|
33
|
+
version: '4.2'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '4.
|
40
|
+
version: '4.2'
|
41
41
|
description: 'The Products Engine implements ProductType and ProductInstance, as well
|
42
42
|
as a number of classes to support product catalog-type functions and search/shopping
|
43
43
|
scenarios. '
|
@@ -50,7 +50,9 @@ files:
|
|
50
50
|
- GPL-3-LICENSE
|
51
51
|
- README.rdoc
|
52
52
|
- Rakefile
|
53
|
-
- app/controllers/
|
53
|
+
- app/controllers/api/v1/product_types_controller.rb
|
54
|
+
- app/controllers/erp_products/shared/product_features_controller.rb
|
55
|
+
- app/models/extensions/biz_txn_acct_root.rb
|
54
56
|
- app/models/prod_availability_status_type.rb
|
55
57
|
- app/models/prod_instance_reln.rb
|
56
58
|
- app/models/prod_instance_reln_type.rb
|
@@ -58,23 +60,31 @@ files:
|
|
58
60
|
- app/models/prod_type_reln.rb
|
59
61
|
- app/models/prod_type_reln_type.rb
|
60
62
|
- app/models/prod_type_role_type.rb
|
63
|
+
- app/models/product_feature.rb
|
64
|
+
- app/models/product_feature_applicability.rb
|
65
|
+
- app/models/product_feature_interaction.rb
|
66
|
+
- app/models/product_feature_interaction_type.rb
|
67
|
+
- app/models/product_feature_type.rb
|
68
|
+
- app/models/product_feature_type_product_feature_value.rb
|
69
|
+
- app/models/product_feature_value.rb
|
61
70
|
- app/models/product_instance.rb
|
62
71
|
- app/models/product_offer.rb
|
63
72
|
- app/models/product_package.rb
|
64
73
|
- app/models/product_type.rb
|
65
74
|
- app/models/product_type_pty_role.rb
|
66
75
|
- app/models/simple_product_offer.rb
|
67
|
-
- app/views/erp_products/shared/product_types/show_details.html.erb
|
68
76
|
- config/routes.rb
|
69
77
|
- db/data_migrations/20110324010232_product_role_types.rb
|
70
78
|
- db/data_migrations/20110527160807_add_default_prod_avail_types.rb
|
71
79
|
- db/data_migrations/20140130204915_add_vendor_consumer_product_roles_to_role_type.rb
|
80
|
+
- db/data_migrations/20141222195727_add_product_type_view_types.rb
|
72
81
|
- db/migrate/20080805000040_base_products.rb
|
73
|
-
- db/migrate/
|
74
|
-
- db/migrate/
|
75
|
-
- db/migrate/
|
76
|
-
- db/migrate/
|
77
|
-
- db/migrate/
|
82
|
+
- db/migrate/20150304211841_add_shipping_cost_to_product_types.rb
|
83
|
+
- db/migrate/20150507075057_add_dimensions_to_product_types.rb
|
84
|
+
- db/migrate/20150622150625_add_taxable_to_product_types.rb
|
85
|
+
- db/migrate/20150711194216_update_product_feature_interactions.rb
|
86
|
+
- db/migrate/20151216235328_add_biz_txn_acct_root_to_products.rb
|
87
|
+
- db/migrate/20160310163055_add_created_by_updated_by_to_erp_products.rb
|
78
88
|
- lib/erp_products.rb
|
79
89
|
- lib/erp_products/engine.rb
|
80
90
|
- lib/erp_products/extensions.rb
|
@@ -141,7 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
151
|
version: '0'
|
142
152
|
requirements: []
|
143
153
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
154
|
+
rubygems_version: 2.4.8
|
145
155
|
signing_key:
|
146
156
|
specification_version: 4
|
147
157
|
summary: The Products Engine implements ProductType and ProductInstance, as well as
|
@@ -1,96 +0,0 @@
|
|
1
|
-
module ErpProducts
|
2
|
-
module Shared
|
3
|
-
class ProductTypesController < ::ErpApp::Organizer::BaseController
|
4
|
-
|
5
|
-
def index
|
6
|
-
|
7
|
-
party_id = params[:party_id]
|
8
|
-
party_role = params[:party_role]
|
9
|
-
|
10
|
-
#
|
11
|
-
# Get all product types
|
12
|
-
#
|
13
|
-
product_types = ProductType.order('created_at asc')
|
14
|
-
|
15
|
-
#
|
16
|
-
# Scope by party id and/or party role if specified
|
17
|
-
#
|
18
|
-
unless party_id.blank? and party_role.blank?
|
19
|
-
|
20
|
-
product_types = product_types.joins(:product_type_pty_roles)
|
21
|
-
product_types = product_types.where('product_type_pty_roles.party_id = ?', party_id) unless party_id.blank?
|
22
|
-
|
23
|
-
unless party_role.blank?
|
24
|
-
role_type = RoleType.iid(party_role)
|
25
|
-
product_types = product_types.where('product_type_pty_roles.role_type_id = ?', role_type)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
total = product_types.count
|
30
|
-
|
31
|
-
render :json => {:success => true, :total => total, :product_types => product_types.collect { |product_type| product_type.to_data_hash }}
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
def show
|
36
|
-
|
37
|
-
product_type = ProductType.find(params[:product_type_id])
|
38
|
-
render :json => {:success => true, :data => product_type.to_data_hash}
|
39
|
-
|
40
|
-
end
|
41
|
-
|
42
|
-
def show_details
|
43
|
-
|
44
|
-
@product_type = ProductType.find(params[:id]) rescue nil
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
def create
|
49
|
-
|
50
|
-
product_type = ProductType.new
|
51
|
-
product_type.description = params[:description]
|
52
|
-
product_type.sku = params[:sku]
|
53
|
-
product_type.unit_of_measurement_id = params[:unit_of_measurement]
|
54
|
-
product_type.comment = params[:comment]
|
55
|
-
product_type.save
|
56
|
-
|
57
|
-
#
|
58
|
-
# For scoping by party, add party_id and role_type 'vendor' to product_party_roles table. However may want to override controller elsewhere
|
59
|
-
# so that default is no scoping in erp_products engine
|
60
|
-
#
|
61
|
-
party_role = params[:party_role]
|
62
|
-
party_id = params[:party_id]
|
63
|
-
unless party_role.blank? or party_id.blank?
|
64
|
-
product_type_party_role = ProductTypePtyRole.new
|
65
|
-
product_type_party_role.product_type = product_type
|
66
|
-
product_type_party_role.party_id = party_id
|
67
|
-
product_type_party_role.role_type = RoleType.iid(party_role)
|
68
|
-
product_type_party_role.save
|
69
|
-
end
|
70
|
-
|
71
|
-
render :json => {:success => true, :product_type_id => product_type.id, :data => product_type.to_hash(:only => [:id, :description, :sku, :created_at, :updated_at])}
|
72
|
-
end
|
73
|
-
|
74
|
-
def update
|
75
|
-
|
76
|
-
product_type = ProductType.find(params[:product_type_id])
|
77
|
-
product_type.description = params[:description]
|
78
|
-
product_type.sku = params[:sku]
|
79
|
-
product_type.unit_of_measurement_id = params[:unit_of_measurement]
|
80
|
-
product_type.comment = params[:comment]
|
81
|
-
product_type.save
|
82
|
-
|
83
|
-
render :json => {:success => true, :data => product_type.to_hash(:only => [:id, :description, :sku, :created_at, :updated_at])}
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
def destroy
|
88
|
-
|
89
|
-
ProductType.find(params[:product_type_id]).destroy
|
90
|
-
render :json => {:success => true}
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,8 +0,0 @@
|
|
1
|
-
<div style='padding: 10px;'>
|
2
|
-
|
3
|
-
<h1>Description: <%= @product_type.description %></h1>
|
4
|
-
<h2>SKU: <%= @product_type.sku %></h2>
|
5
|
-
<h2>Unit of Measurement: <%= @product_type.unit_of_measurement.description rescue nil%></h2>
|
6
|
-
<h2>Details: <%= @product_type.comment %></h2>
|
7
|
-
|
8
|
-
</div>
|
@@ -1,61 +0,0 @@
|
|
1
|
-
class BaseProductsIndexes < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
add_index :product_types, :parent_id
|
4
|
-
add_index :product_types, [:product_type_record_id, :product_type_record_type],
|
5
|
-
:name => "bpi_1"
|
6
|
-
|
7
|
-
add_index :product_instances, :parent_id
|
8
|
-
add_index :product_instances, [:product_instance_record_id, :product_instance_record_type],
|
9
|
-
:name => "bpi_2"
|
10
|
-
add_index :product_instances, :product_type_id
|
11
|
-
|
12
|
-
add_index :product_offers, [:product_offer_record_id, :product_offer_record_type],
|
13
|
-
:name => "bpi_3"
|
14
|
-
|
15
|
-
add_index :simple_product_offers, :product_id
|
16
|
-
|
17
|
-
add_index :prod_instance_reln_types, :parent_id
|
18
|
-
|
19
|
-
add_index :prod_instance_role_types, :parent_id
|
20
|
-
|
21
|
-
add_index :prod_instance_relns, :prod_instance_reln_type_id
|
22
|
-
add_index :prod_instance_relns, :status_type_id
|
23
|
-
|
24
|
-
add_index :prod_type_reln_types, :parent_id
|
25
|
-
|
26
|
-
add_index :prod_type_role_types, :parent_id
|
27
|
-
|
28
|
-
add_index :prod_type_relns, :prod_type_reln_type_id
|
29
|
-
add_index :prod_type_relns, :status_type_id
|
30
|
-
|
31
|
-
add_index :product_instances, :lft, :name => 'lft_index' unless indexes(:product_instances).collect {|i| i.name}.include?('lft_index')
|
32
|
-
add_index :product_instances, :rgt, :name => 'rgt_index' unless indexes(:product_instances).collect {|i| i.name}.include?('rgt_index')
|
33
|
-
end
|
34
|
-
|
35
|
-
def self.down
|
36
|
-
remove_index :product_types, :parent_id
|
37
|
-
remove_index :product_types, :name => "bpi_1"
|
38
|
-
|
39
|
-
remove_index :product_instances, :parent_id
|
40
|
-
remove_index :product_instances, :name => "bpi_2"
|
41
|
-
remove_index :product_instances, :product_type_id
|
42
|
-
|
43
|
-
remove_index :product_offers, :name => "bpi_3"
|
44
|
-
|
45
|
-
remove_index :simple_product_offers, :product_id
|
46
|
-
|
47
|
-
remove_index :prod_instance_reln_types, :parent_id
|
48
|
-
|
49
|
-
remove_index :prod_instance_role_types, :parent_id
|
50
|
-
|
51
|
-
remove_index :prod_instance_relns, :prod_instance_reln_type_id
|
52
|
-
remove_index :prod_instance_relns, :status_type_id
|
53
|
-
|
54
|
-
remove_index :prod_type_reln_types, :parent_id
|
55
|
-
|
56
|
-
remove_index :prod_type_role_types, :parent_id
|
57
|
-
|
58
|
-
remove_index :prod_type_relns, :prod_type_reln_type_id
|
59
|
-
remove_index :prod_type_relns, :status_type_id
|
60
|
-
end
|
61
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
class AddProductInstancesNestedSetIndexes < ActiveRecord::Migration
|
2
|
-
def up
|
3
|
-
add_index :product_instances, :lft, :name => 'lft_index' unless indexes(:product_instances).collect {|i| i.name}.include?('lft_index')
|
4
|
-
add_index :product_instances, :rgt, :name => 'rgt_index' unless indexes(:product_instances).collect {|i| i.name}.include?('rgt_index')
|
5
|
-
end
|
6
|
-
|
7
|
-
def down
|
8
|
-
end
|
9
|
-
end
|