erp_products 4.0.0 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|