erp_orders 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.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/app/models/charge_line.rb +31 -13
  3. data/app/models/charge_type.rb +7 -0
  4. data/app/models/extensions/party.rb +13 -0
  5. data/app/models/order_line_item.rb +150 -14
  6. data/app/models/order_line_item_rel_type.rb +6 -0
  7. data/app/models/order_line_item_relationship.rb +8 -0
  8. data/app/models/order_txn.rb +314 -61
  9. data/app/models/sales_tax_line.rb +15 -0
  10. data/app/models/sales_tax_policy.rb +7 -0
  11. data/db/data_migrations/20141214150732_add_order_tracked_statues.rb +25 -0
  12. data/db/data_migrations/20150309004308_add_base_charge_types.rb +19 -0
  13. data/db/migrate/20080805000060_base_orders.rb +119 -111
  14. data/db/migrate/20150309003812_add_charge_type_to_charge_lines.rb +5 -0
  15. data/db/migrate/20150309004440_create_charge_types.rb +18 -0
  16. data/db/migrate/20150311160005_add_unit_price_to_order_line_items.rb +5 -0
  17. data/db/migrate/20150622151009_add_tax_policy.rb +42 -0
  18. data/db/migrate/20150622170438_update_taxation_for_orders.rb +58 -0
  19. data/db/migrate/20150624000721_add_internal_identifier_to_charge_type.rb +5 -0
  20. data/db/migrate/20160310163060_add_created_by_updated_by_to_erp_orders.rb +35 -0
  21. data/lib/erp_orders.rb +2 -0
  22. data/lib/erp_orders/engine.rb +0 -4
  23. data/lib/erp_orders/extensions/active_record/acts_as_order_line_item.rb +2 -1
  24. data/lib/erp_orders/extensions/active_record/acts_as_order_txn.rb +1 -1
  25. data/lib/erp_orders/taxation.rb +49 -0
  26. data/lib/erp_orders/version.rb +1 -1
  27. metadata +24 -15
  28. data/app/models/charge_line_payment_txn.rb +0 -7
  29. data/db/migrate/20130620203217_add_quantity_to_order_line_items.rb +0 -13
  30. data/db/migrate/20131005232344_update_order_line_pty_role_indexes.erp_orders.rb +0 -19
  31. data/db/migrate/20131005232611_remove_order_line_specific_rtype.rb +0 -32
  32. data/db/migrate/20140129200040_add_uom_to_order_line_item.rb +0 -13
  33. data/db/migrate/20140930152140_add_custom_fields_to_order_txn.rb +0 -12
@@ -0,0 +1,15 @@
1
+ # create_table :sales_tax_line do |t|
2
+ # t.references :sales_tax_policy
3
+ # t.decimal :rate, precision: 8, scale: 2
4
+ # t.text :comment
5
+ # t.references :taxed_record, polymorphic: true
6
+ #
7
+ # t.timestamps
8
+ # end#
9
+
10
+ class SalesTaxLine < ActiveRecord::Base
11
+ attr_protected :created_at, :updated_at
12
+
13
+ belongs_to :taxed_record, polymorphic: true
14
+ belongs_to :sales_tax_policy
15
+ end
@@ -0,0 +1,7 @@
1
+ class SalesTaxPolicy < ActiveRecord::Base
2
+ attr_protected :created_at, :updated_at
3
+
4
+ acts_as_erp_type
5
+
6
+ has_many :sales_tax_lines
7
+ end
@@ -0,0 +1,25 @@
1
+ class AddOrderTrackedStatues
2
+
3
+ def self.up
4
+ order_statuses = TrackedStatusType.create(internal_identifier: 'order_statuses', description: 'Order Statuses')
5
+
6
+ [
7
+ ['initialized', 'Initialized'],
8
+ ['items_added', 'Items Added'],
9
+ ['demographics_gathered', 'Demographics Gathered'],
10
+ ['payment_failed', 'Payment Failed'],
11
+ ['paid', 'Paid'],
12
+ ['ready_to_ship', 'Ready To Ship'],
13
+ ['shipped', 'Shipped'],
14
+ ].each do |data|
15
+ status = TrackedStatusType.create(internal_identifier: data[0], description: data[1])
16
+ status.move_to_child_of(order_statuses)
17
+ end
18
+
19
+ end
20
+
21
+ def self.down
22
+ TrackedStatusType.find_by_internal_identifier('order_statuses').destroy
23
+ end
24
+
25
+ end
@@ -0,0 +1,19 @@
1
+ class AddBaseChargeTypes
2
+
3
+ def self.up
4
+ ActiveRecord::Base.transaction do
5
+ ChargeType.create(description: 'Shipping', internal_identifier: 'shipping', taxable: false)
6
+ ChargeType.create(description: 'Tax', internal_identifier: 'tax', taxable: true)
7
+ ChargeType.create(description: 'Assembly', internal_identifier: 'assembly', taxable: true)
8
+ end
9
+ end
10
+
11
+ def self.down
12
+ ActiveRecord::Base.transaction do
13
+ ChargeType.find_by_internal_identifier('shipping').destroy
14
+ ChargeType.find_by_internal_identifier('tax').destroy
15
+ ChargeType.find_by_internal_identifier('assembly').destroy
16
+ end
17
+ end
18
+
19
+ end
@@ -1,178 +1,186 @@
1
1
  class BaseOrders < ActiveRecord::Migration
2
2
  def self.up
3
-
3
+
4
4
  unless table_exists?(:order_txns)
5
5
  create_table :order_txns do |t|
6
- t.column :state_machine, :string
7
- t.column :description, :string
8
- t.column :order_txn_type_id, :integer
9
- # Multi-table inheritance info
10
- # MTI implemented using Rails' polymorphic associations
11
- # Contact Information
12
- t.column :email, :string
13
- t.column :phone_number, :string
14
- # Shipping Address
15
- t.column :ship_to_first_name, :string
16
- t.column :ship_to_last_name, :string
17
- t.column :ship_to_address_line_1, :string
18
- t.column :ship_to_address_line_2, :string
19
- t.column :bill_to_address_line_1, :string
20
- t.column :bill_to_address_line_2, :string
21
- t.column :ship_to_city, :string
22
- t.column :ship_to_state, :string
23
- t.column :ship_to_postal_code, :string
24
- t.column :ship_to_country, :string
25
- # Private parts
26
- t.column :customer_ip, :string
27
- t.column :order_number, :integer
28
- t.column :status, :string
29
- t.column :error_message, :string
30
- t.column :order_txn_record_id, :integer
31
- t.column :order_txn_record_type, :string
32
- t.timestamps
6
+ t.column :description, :string
7
+ t.column :order_txn_type_id, :integer
8
+
9
+ # Multi-table inheritance info
10
+ t.column :order_txn_record_id, :integer
11
+ t.column :order_txn_record_type, :string
12
+
13
+ # Contact Information
14
+ t.column :email, :string
15
+ t.column :phone_number, :string
16
+
17
+ # Shipping Address
18
+ t.column :ship_to_first_name, :string
19
+ t.column :ship_to_last_name, :string
20
+ t.column :ship_to_address_line_1, :string
21
+ t.column :ship_to_address_line_2, :string
22
+ t.column :bill_to_address_line_1, :string
23
+ t.column :bill_to_address_line_2, :string
24
+ t.column :ship_to_city, :string
25
+ t.column :ship_to_state, :string
26
+ t.column :ship_to_postal_code, :string
27
+ t.column :ship_to_country, :string
28
+
29
+ # Private parts
30
+ t.column :customer_ip, :string
31
+ t.column :order_number, :string
32
+ t.column :error_message, :string
33
+
34
+ t.timestamps
33
35
  end
34
36
 
35
37
  add_index :order_txns, :order_txn_type_id
36
38
  add_index :order_txns, [:order_txn_record_id, :order_txn_record_type], :name => 'order_txn_record_idx'
37
39
  end
38
-
40
+
39
41
  unless table_exists?(:order_txn_types)
40
42
  create_table :order_txn_types do |t|
41
- t.column :parent_id, :integer
42
- t.column :lft, :integer
43
- t.column :rgt, :integer
43
+ t.column :parent_id, :integer
44
+ t.column :lft, :integer
45
+ t.column :rgt, :integer
44
46
  #custom columns go here
45
- t.column :description, :string
46
- t.column :comments, :string
47
- t.column :internal_identifier, :string
48
- t.column :external_identifier, :string
49
- t.column :external_id_source, :string
47
+ t.column :description, :string
48
+ t.column :comments, :string
49
+ t.column :internal_identifier, :string
50
+ t.column :external_identifier, :string
51
+ t.column :external_id_source, :string
50
52
  t.timestamps
51
53
  end
52
54
 
53
55
  add_index :order_txn_types, :parent_id
54
56
  end
55
-
57
+
56
58
 
57
59
  unless table_exists?(:order_line_items)
58
60
  create_table :order_line_items do |t|
59
- t.column :order_txn_id, :integer
60
- t.column :order_line_item_type_id, :integer
61
- t.column :product_id, :integer
62
- t.column :product_description, :string
63
- t.column :product_instance_id, :integer
64
- t.column :product_instance_description, :string
65
- t.column :product_type_id, :integer
66
- t.column :product_type_description, :string
67
- t.column :sold_price, :decimal, :precision => 8, :scale => 2
68
- t.column :sold_price_uom, :integer
69
- t.column :sold_amount, :integer
70
- t.column :sold_amount_uom, :integer
71
- t.column :product_offer_id, :integer
72
- t.column :quantity, :integer
61
+ t.column :order_txn_id, :integer
62
+ t.column :order_line_item_type_id, :integer
63
+ t.column :product_instance_id, :integer
64
+ t.column :product_instance_description, :string
65
+ t.column :product_type_id, :integer
66
+ t.column :product_type_description, :string
67
+ t.column :sold_price, :decimal, :precision => 8, :scale => 2
68
+ t.column :sold_price_uom, :integer
69
+ t.column :sold_amount, :integer
70
+ t.column :sold_amount_uom, :integer
71
+ t.column :product_offer_id, :integer
72
+ t.column :quantity, :integer
73
+ t.references :unit_of_measurement
74
+ t.string :product_offer_description
75
+
73
76
  t.timestamps
74
77
  end
75
78
 
79
+ add_index :order_line_items, :unit_of_measurement_id, :name => 'order_line_item_uom_idx'
76
80
  add_index :order_line_items, :order_txn_id
77
81
  add_index :order_line_items, :order_line_item_type_id
78
- add_index :order_line_items, :product_id
79
82
  add_index :order_line_items, :product_instance_id
80
83
  add_index :order_line_items, :product_type_id
81
84
  add_index :order_line_items, :product_offer_id
82
85
  end
83
-
86
+
84
87
  unless table_exists?(:order_line_item_types)
85
88
  create_table :order_line_item_types do |t|
86
- t.column :parent_id, :integer
87
- t.column :lft, :integer
88
- t.column :rgt, :integer
89
+ t.column :parent_id, :integer
90
+ t.column :lft, :integer
91
+ t.column :rgt, :integer
89
92
  #custom columns go here
90
- t.column :description, :string
91
- t.column :comments, :string
92
- t.column :internal_identifier, :string
93
- t.column :external_identifier, :string
94
- t.column :external_id_source, :string
93
+ t.column :description, :string
94
+ t.column :comments, :string
95
+ t.column :internal_identifier, :string
96
+ t.column :external_identifier, :string
97
+ t.column :external_id_source, :string
95
98
  t.timestamps
96
99
  end
97
100
 
98
101
  add_index :order_line_item_types, :parent_id
99
102
  end
100
-
103
+
101
104
  unless table_exists?(:order_line_item_pty_roles)
102
105
  create_table :order_line_item_pty_roles do |t|
103
- t.column :description, :string
104
- t.column :order_line_item_id, :integer
105
- t.column :party_id, :integer
106
- t.column :line_item_role_type_id, :integer
107
- t.column :biz_txn_acct_root_id, :integer #optional for splitting orders across accounts
106
+ t.references :role_type
107
+ t.references :biz_txn_acct_root #optional for splitting orders across accounts
108
+ t.references :order_line_item
109
+ t.references :party
110
+
111
+ t.string :description
112
+
108
113
  t.timestamps
109
114
  end
110
115
 
111
- add_index :order_line_item_pty_roles, :order_line_item_id
112
- add_index :order_line_item_pty_roles, :party_id
113
- add_index :order_line_item_pty_roles, :line_item_role_type_id
114
- add_index :order_line_item_pty_roles, :biz_txn_acct_root_id
116
+ add_index :order_line_item_pty_roles, :order_line_item_id, :name => 'order_line_item_pty_role_order_line_item_idx'
117
+ add_index :order_line_item_pty_roles, :party_id, :name => 'order_line_item_pty_role_party_idx'
118
+ add_index :order_line_item_pty_roles, :role_type_id, :name => 'order_line_item_pty_role_role_type_idx'
119
+ add_index :order_line_item_pty_roles, :biz_txn_acct_root_id , :name => 'order_line_item_pty_role_biz_txn_acct_root_idx'
115
120
  end
116
-
117
- unless table_exists?(:line_item_role_types)
118
- create_table :line_item_role_types do |t|
119
- t.column :parent_id, :integer
120
- t.column :lft, :integer
121
- t.column :rgt, :integer
122
- #custom columns go here
123
- t.column :description, :string
124
- t.column :comments, :string
125
- t.column :internal_identifier, :string
126
- t.column :external_identifier, :string
127
- t.column :external_id_source, :string
128
- t.timestamps
121
+
122
+ unless table_exists?(:order_line_item_relationships)
123
+ create_table :order_line_item_relationships do |t|
124
+ t.column :order_line_item_rel_type_id, :integer
125
+ t.column :description, :string
126
+ t.column :order_line_item_id_from, :integer
127
+ t.column :order_line_item_id_to, :integer
128
+ t.column :status_type_id, :integer
129
+ t.column :from_date, :date
130
+ t.column :thru_date, :date
131
+ t.timestamps
129
132
  end
130
133
 
131
- add_index :line_item_role_types, :parent_id
134
+ add_index :order_line_item_relationships, :order_line_item_rel_type_id, name: 'order_line_item_rel_on_order_line_item_rel_type_id'
135
+ add_index :order_line_item_relationships, :status_type_id
132
136
  end
133
-
134
- unless table_exists?(:charge_lines)
135
- create_table :charge_lines do |t|
136
- t.string :sti_type
137
- t.references :money
138
- t.string :description #could be expanded to include type information, etc.
139
- t.string :external_identifier
140
- t.string :external_id_source
141
-
142
- #polymorphic
143
- t.references :charged_item, :polymorphic => true
144
137
 
138
+ unless table_exists?(:order_line_item_rel_types)
139
+ create_table :order_line_item_rel_types do |t|
140
+ t.column :parent_id, :integer
141
+ t.column :lft, :integer
142
+ t.column :rgt, :integer
143
+ #custom columns go here
144
+ t.column :description, :string
145
+ t.column :comments, :string
146
+ t.column :internal_identifier, :string
147
+ t.column :external_identifier, :string
148
+ t.column :external_id_source, :string
145
149
  t.timestamps
146
150
  end
147
151
 
148
- add_index :charge_lines, [:charged_item_id, :charged_item_type], :name => 'charged_item_idx'
152
+ add_index :order_line_item_rel_types, :parent_id
149
153
  end
150
-
151
- unless table_exists?(:charge_line_payment_txns)
152
- create_table :charge_line_payment_txns do |t|
153
- t.column :charge_line_id, :integer
154
-
154
+
155
+ unless table_exists?(:charge_lines)
156
+ create_table :charge_lines do |t|
157
+ t.string :sti_type
158
+ t.references :money
159
+ t.string :description #could be expanded to include type information, etc.
160
+ t.string :external_identifier
161
+ t.string :external_id_source
162
+
155
163
  #polymorphic
156
- t.references :payment_txn, :polymorphic => true
164
+ t.references :charged_item, :polymorphic => true
157
165
 
158
166
  t.timestamps
159
167
  end
160
168
 
161
- add_index :charge_line_payment_txns, [:payment_txn_id, :payment_txn_type], :name => 'payment_txn_idx'
162
- add_index :charge_line_payment_txns, :charge_line_id
169
+ add_index :charge_lines, [:charged_item_id, :charged_item_type], :name => 'charged_item_idx'
163
170
  end
171
+
164
172
  end
165
173
 
166
174
  def self.down
167
175
  [
168
- :charge_lines, :charge_line_payment_txns, :line_item_role_types, :order_line_item_pty_roles,
169
- :order_line_item_types, :order_line_items, :order_txn_types,
170
- :order_txns
176
+ :charge_lines, :line_item_role_types, :order_line_item_pty_roles,
177
+ :order_line_item_types, :order_line_items, :order_txn_types,
178
+ :order_txns, :order_line_item_relationships, :order_line_item_rel_types
171
179
  ].each do |tbl|
172
180
  if table_exists?(tbl)
173
181
  drop_table tbl
174
182
  end
175
- end
183
+ end
176
184
  end
177
-
185
+
178
186
  end
@@ -0,0 +1,5 @@
1
+ class AddChargeTypeToChargeLines < ActiveRecord::Migration
2
+ def change
3
+ add_column :charge_lines, :charge_type_id, :integer unless column_exists?(:charge_lines, :charge_type_id)
4
+ end
5
+ end
@@ -0,0 +1,18 @@
1
+ class CreateChargeTypes < ActiveRecord::Migration
2
+ def up
3
+ unless table_exists?(:charge_types)
4
+ create_table :charge_types do |t|
5
+ t.string :description
6
+ t.string :internal_identifier
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
12
+
13
+ def down
14
+ if table_exists?(:charge_types)
15
+ drop_table :charge_types
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,5 @@
1
+ class AddUnitPriceToOrderLineItems < ActiveRecord::Migration
2
+ def change
3
+ add_column :order_line_items, :unit_price, :decimal unless column_exists?(:order_line_items, :unit_price)
4
+ end
5
+ end
@@ -0,0 +1,42 @@
1
+ class AddTaxPolicy < ActiveRecord::Migration
2
+ def up
3
+
4
+ #
5
+ # Stores tax rates determined from external system
6
+ #
7
+ unless table_exists? :sales_tax_lines
8
+ create_table :sales_tax_lines do |t|
9
+ t.references :sales_tax_policies
10
+ t.decimal :rate, precision: 8, scale: 2
11
+ t.text :comment
12
+ t.references :taxed_record, polymorphic: true
13
+
14
+ t.timestamps
15
+ end
16
+ end
17
+
18
+ #
19
+ # Federal Sales Tax
20
+ # State Sales Tax
21
+ # Local Sales Tax
22
+ #
23
+ unless table_exists? :sales_tax_policies
24
+ create_table :sales_tax_policies do |t|
25
+ t.string :description
26
+ t.string :internal_identifier
27
+
28
+ t.timestamps
29
+ end
30
+ end
31
+
32
+ end
33
+
34
+ def down
35
+ [:sales_tax_lines, :sales_tax_policies].each do |table|
36
+ if table_exists? table
37
+ drop_table table
38
+ end
39
+ end
40
+ end
41
+
42
+ end
@@ -0,0 +1,58 @@
1
+ class UpdateTaxationForOrders < ActiveRecord::Migration
2
+ def up
3
+
4
+ unless column_exists? :order_line_items, :sales_tax
5
+ add_column :order_line_items, :sales_tax, :decimal, precision: 8, scale: 2
6
+ end
7
+
8
+ unless column_exists? :order_line_items, :taxed
9
+ add_column :order_line_items, :taxed, :boolean
10
+ end
11
+
12
+ unless column_exists? :order_txns, :sales_tax
13
+ add_column :order_txns, :sales_tax, :decimal, precision: 8, scale: 2
14
+ end
15
+
16
+ unless column_exists? :charge_lines, :sales_tax
17
+ add_column :charge_lines, :sales_tax, :decimal, precision: 8, scale: 2
18
+ end
19
+
20
+ unless column_exists? :charge_lines, :taxed
21
+ add_column :charge_lines, :taxed, :boolean
22
+ end
23
+
24
+ unless column_exists? :charge_types, :taxable
25
+ add_column :charge_types, :taxable, :boolean
26
+ end
27
+
28
+ end
29
+
30
+ def down
31
+
32
+ if column_exists? :order_line_items, :sales_tax
33
+ remove_column :order_line_items, :sales_tax
34
+ end
35
+
36
+ if column_exists? :order_line_items, :taxed
37
+ remove_column :order_line_items, :taxed
38
+ end
39
+
40
+ if column_exists? :order_txns, :sales_tax
41
+ remove_column :order_txns, :sales_tax
42
+ end
43
+
44
+ if column_exists? :charge_lines, :sales_tax
45
+ remove_column :charge_lines, :sales_tax
46
+ end
47
+
48
+ if column_exists? :charge_types, :taxable
49
+ remove_column :charge_types, :taxable
50
+ end
51
+
52
+ if column_exists? :charge_lines, :taxed
53
+ remove_column :charge_lines, :taxed
54
+ end
55
+
56
+ end
57
+
58
+ end