stall 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +45 -0
- data/app/assets/javascripts/stall.coffee +2 -0
- data/app/assets/javascripts/stall/cart-form.coffee +23 -0
- data/app/controllers/stall/application_controller.rb +10 -2
- data/app/controllers/stall/carts_controller.rb +31 -10
- data/app/controllers/stall/checkout/steps_controller.rb +36 -4
- data/app/controllers/stall/checkouts_controller.rb +12 -3
- data/app/controllers/stall/line_items_controller.rb +3 -3
- data/app/controllers/stall/payments_controller.rb +5 -3
- data/app/helpers/stall/add_to_cart_helper.rb +1 -1
- data/app/helpers/stall/checkout_helper.rb +22 -2
- data/app/helpers/stall/payments_helper.rb +8 -0
- data/app/mailers/stall/admin_mailer.rb +11 -0
- data/app/mailers/stall/base_mailer.rb +17 -0
- data/app/mailers/stall/customer_mailer.rb +13 -0
- data/app/models/address.rb +3 -0
- data/app/models/address_ownership.rb +3 -0
- data/app/models/adjustment.rb +3 -0
- data/app/models/cart.rb +3 -0
- data/app/models/customer.rb +3 -0
- data/app/models/line_item.rb +3 -0
- data/app/models/payment.rb +3 -0
- data/app/models/payment_method.rb +3 -0
- data/app/models/product_list.rb +3 -0
- data/app/models/shipment.rb +3 -0
- data/app/models/shipping_method.rb +3 -0
- data/app/models/stall/models.rb +4 -0
- data/app/models/stall/models/address.rb +45 -0
- data/app/models/stall/models/address_ownership.rb +26 -0
- data/app/models/stall/models/adjustment.rb +49 -0
- data/app/models/stall/models/cart.rb +37 -0
- data/app/models/stall/models/customer.rb +18 -0
- data/app/models/stall/models/line_item.rb +57 -0
- data/app/models/stall/models/payment.rb +33 -0
- data/app/models/stall/models/payment_method.rb +18 -0
- data/app/models/stall/models/product_list.rb +147 -0
- data/app/models/stall/models/shipment.rb +29 -0
- data/app/models/stall/models/shipping_method.rb +16 -0
- data/app/services/stall/add_to_cart_service.rb +11 -1
- data/app/services/stall/cart_update_service.rb +26 -0
- data/app/services/stall/payment_notification_service.rb +23 -9
- data/app/services/stall/shipping_fee_calculator_service.rb +13 -2
- data/app/views/checkout/steps/_informations.html.haml +3 -3
- data/app/views/checkout/steps/_payment.html.haml +25 -4
- data/app/views/checkout/steps/_payment_method.html.haml +1 -3
- data/app/views/checkout/steps/_payment_return.html.haml +6 -0
- data/app/views/checkout/steps/_shipping_method.html.haml +1 -1
- data/app/views/stall/admin_mailer/order_paid_email.html.haml +4 -0
- data/app/views/stall/carts/show.html.haml +36 -8
- data/app/views/stall/customer_mailer/order_paid_email.html.haml +8 -0
- data/app/views/stall/line_items/_added.html.haml +1 -1
- data/app/views/stall/shared/mailers/_address.html.haml +18 -0
- data/app/views/stall/shared/mailers/_cart.html.haml +114 -0
- data/config/locales/stall.fr.yml +90 -8
- data/db/migrate/20160304134849_change_all_json_columns_to_jsonb.rb +18 -0
- data/db/migrate/20160307142924_add_state_to_stall_addresses.rb +5 -0
- data/db/migrate/20160308142713_create_adjustments.rb +16 -0
- data/db/migrate/20160309165136_add_identifier_to_stall_product_lists.rb +5 -0
- data/db/migrate/20160316114649_add_data_to_stall_shipments.rb +5 -0
- data/db/migrate/20160317141632_add_state_to_stall_shipments.rb +5 -0
- data/db/migrate/20160629102943_add_active_to_stall_shipping_methods.rb +11 -0
- data/db/migrate/20160629104617_add_active_to_stall_payment_methods.rb +11 -0
- data/db/migrate/20160705110151_add_locale_to_stall_customers.rb +5 -0
- data/lib/generators/stall/checkout/step/templates/step.html.haml.erb +1 -1
- data/lib/generators/stall/checkout/step/templates/step.rb.erb +10 -2
- data/lib/generators/stall/checkout/wizard/templates/wizard.rb.erb +1 -1
- data/lib/generators/stall/install/templates/initializer.rb +85 -1
- data/lib/generators/stall/model/model_generator.rb +27 -0
- data/lib/generators/stall/service/service_generator.rb +39 -0
- data/lib/generators/stall/service/templates/service.rb.erb +16 -0
- data/lib/generators/stall/shipping/calculator/calculator_generator.rb +17 -0
- data/lib/generators/stall/shipping/calculator/templates/calculator.rb.erb +29 -0
- data/lib/stall.rb +4 -0
- data/lib/stall/addressable.rb +28 -2
- data/lib/stall/cart_helper.rb +84 -0
- data/lib/stall/carts_cleaner.rb +46 -0
- data/lib/stall/checkout.rb +2 -0
- data/lib/stall/checkout/informations_checkout_step.rb +3 -5
- data/lib/stall/checkout/payment_checkout_step.rb +3 -0
- data/lib/stall/checkout/payment_return_checkout_step.rb +11 -0
- data/lib/stall/checkout/shipping_method_checkout_step.rb +2 -1
- data/lib/stall/checkout/step.rb +47 -11
- data/lib/stall/checkout/step_form.rb +71 -0
- data/lib/stall/checkout/wizard.rb +15 -5
- data/lib/stall/config.rb +51 -0
- data/lib/stall/engine.rb +24 -2
- data/lib/stall/payable.rb +26 -0
- data/lib/stall/payments.rb +7 -3
- data/lib/stall/payments/config.rb +37 -0
- data/lib/stall/payments/fake_gateway_payment_notification.rb +34 -0
- data/lib/stall/payments/gateway.rb +19 -12
- data/lib/stall/payments/urls_config.rb +40 -0
- data/lib/stall/priceable.rb +7 -0
- data/lib/stall/rails/currency_helper.rb +1 -1
- data/lib/stall/routes.rb +17 -4
- data/lib/stall/sellable.rb +1 -2
- data/lib/stall/shipping.rb +3 -1
- data/lib/stall/shipping/calculator.rb +36 -3
- data/lib/stall/shipping/config.rb +17 -3
- data/lib/stall/shipping/country_weight_table_calculator.rb +1 -1
- data/lib/stall/shipping/free_shipping_calculator.rb +1 -1
- data/lib/stall/utils.rb +2 -2
- data/lib/stall/utils/config_dsl.rb +5 -1
- data/lib/stall/version.rb +1 -1
- data/lib/tasks/stall_tasks.rake +11 -0
- metadata +73 -15
- data/app/assets/javascripts/stall/application.js +0 -13
- data/app/assets/javascripts/stall/carts.js +0 -2
- data/app/helpers/stall/cart_helper.rb +0 -28
- data/app/models/stall/address.rb +0 -5
- data/app/models/stall/address_ownership.rb +0 -8
- data/app/models/stall/cart.rb +0 -31
- data/app/models/stall/customer.rb +0 -8
- data/app/models/stall/line_item.rb +0 -49
- data/app/models/stall/payment.rb +0 -14
- data/app/models/stall/payment_method.rb +0 -7
- data/app/models/stall/product_list.rb +0 -68
- data/app/models/stall/shipment.rb +0 -15
- data/app/models/stall/shipping_method.rb +0 -5
@@ -8,9 +8,9 @@ module Stall
|
|
8
8
|
@config = config
|
9
9
|
end
|
10
10
|
|
11
|
-
def
|
11
|
+
def available?
|
12
12
|
raise NoMethodError,
|
13
|
-
'Shipping calculators must implement the #
|
13
|
+
'Shipping calculators must implement the #available? method ' \
|
14
14
|
'to allow filtering available shipping methods'
|
15
15
|
end
|
16
16
|
|
@@ -20,8 +20,41 @@ module Stall
|
|
20
20
|
'the actual shipping price for the given cart'
|
21
21
|
end
|
22
22
|
|
23
|
+
def eot_price
|
24
|
+
price / (1 + (vat_rate / 100.0))
|
25
|
+
end
|
26
|
+
|
27
|
+
def vat_rate
|
28
|
+
Stall.config.vat_rate
|
29
|
+
end
|
30
|
+
|
31
|
+
# Register a calculator from inside the class.
|
32
|
+
#
|
33
|
+
# This is useful for registering the calculator direclty in the class
|
34
|
+
# body, but is not suited for "auto-loaded" classes because of Rails'
|
35
|
+
# class unloading behavior
|
36
|
+
#
|
23
37
|
def self.register(name)
|
24
|
-
Stall
|
38
|
+
Stall.config.shipping.register_calculator(name, self)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Fetch a shipping calculator from a shipping method or a shipping
|
42
|
+
# method identifier
|
43
|
+
#
|
44
|
+
def self.for(shipping_method)
|
45
|
+
identifier = case shipping_method
|
46
|
+
when String, Symbol then shipping_method.to_s
|
47
|
+
else shipping_method.identifier
|
48
|
+
end
|
49
|
+
|
50
|
+
name = Stall::Shipping.calculators[identifier]
|
51
|
+
String === name ? name.constantize : name
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def address
|
57
|
+
cart.shipping_address || cart.billing_address
|
25
58
|
end
|
26
59
|
end
|
27
60
|
end
|
@@ -1,13 +1,27 @@
|
|
1
1
|
module Stall
|
2
2
|
module Shipping
|
3
3
|
class Config
|
4
|
+
# This mehtod allows for registering an in-app calculator that can be
|
5
|
+
# auto loaded without having to explicitly require it
|
6
|
+
#
|
7
|
+
# Use a string representing the calculator name if the target class is
|
8
|
+
# auto-loaded by Rails
|
9
|
+
#
|
10
|
+
def register_calculator(name, calculator)
|
11
|
+
Stall::Shipping.calculators[name] = calculator
|
12
|
+
end
|
13
|
+
|
4
14
|
def configure
|
5
|
-
yield
|
15
|
+
yield self
|
6
16
|
end
|
7
17
|
|
8
18
|
def method_missing(name, *args)
|
9
|
-
if (calculator = Stall::Shipping.
|
10
|
-
|
19
|
+
if (calculator = Stall::Shipping::Calculator.for(name))
|
20
|
+
if block_given?
|
21
|
+
yield calculator
|
22
|
+
else
|
23
|
+
calculator
|
24
|
+
end
|
11
25
|
else
|
12
26
|
super
|
13
27
|
end
|
data/lib/stall/utils.rb
CHANGED
@@ -8,11 +8,11 @@ module Stall
|
|
8
8
|
def try_load_constant(name)
|
9
9
|
begin
|
10
10
|
name.constantize
|
11
|
-
rescue NameError
|
11
|
+
rescue NameError => e
|
12
12
|
begin
|
13
13
|
require name.underscore
|
14
14
|
name.constantize
|
15
|
-
rescue LoadError, NameError
|
15
|
+
rescue LoadError, NameError => e
|
16
16
|
nil
|
17
17
|
end
|
18
18
|
end
|
@@ -10,8 +10,12 @@ module Stall
|
|
10
10
|
instance_variable_name = :"@#{ name }"
|
11
11
|
|
12
12
|
define_method(name) do
|
13
|
-
instance_variable_get(instance_variable_name)
|
13
|
+
if (value = instance_variable_get(instance_variable_name))
|
14
|
+
value
|
15
|
+
else
|
16
|
+
default = default.call if default.is_a?(Proc)
|
14
17
|
instance_variable_set(instance_variable_name, default)
|
18
|
+
end
|
15
19
|
end
|
16
20
|
end
|
17
21
|
end
|
data/lib/stall/version.rb
CHANGED
data/lib/tasks/stall_tasks.rake
CHANGED
@@ -2,3 +2,14 @@
|
|
2
2
|
# task :stall do
|
3
3
|
# # Task goes here
|
4
4
|
# end
|
5
|
+
|
6
|
+
namespace :stall do
|
7
|
+
namespace :carts do
|
8
|
+
task clean: :environment do |task, args|
|
9
|
+
require 'stall/carts_cleaner'
|
10
|
+
|
11
|
+
model = (args.extras.first || 'Cart').constantize
|
12
|
+
Stall::CartsCleaner.new(model).clean!
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: stall
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vala
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -150,6 +150,20 @@ dependencies:
|
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '2.0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: cocoon
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.0'
|
153
167
|
- !ruby/object:Gem::Dependency
|
154
168
|
name: rspec-rails
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -274,8 +288,7 @@ files:
|
|
274
288
|
- Rakefile
|
275
289
|
- app/assets/javascripts/stall.coffee
|
276
290
|
- app/assets/javascripts/stall/add-to-cart-form.coffee
|
277
|
-
- app/assets/javascripts/stall/
|
278
|
-
- app/assets/javascripts/stall/carts.js
|
291
|
+
- app/assets/javascripts/stall/cart-form.coffee
|
279
292
|
- app/assets/stylesheets/stall/application.css
|
280
293
|
- app/assets/stylesheets/stall/carts.css
|
281
294
|
- app/controllers/stall/application_controller.rb
|
@@ -286,32 +299,54 @@ files:
|
|
286
299
|
- app/controllers/stall/payments_controller.rb
|
287
300
|
- app/helpers/stall/add_to_cart_helper.rb
|
288
301
|
- app/helpers/stall/application_helper.rb
|
289
|
-
- app/helpers/stall/cart_helper.rb
|
290
302
|
- app/helpers/stall/checkout_helper.rb
|
291
|
-
- app/
|
292
|
-
- app/
|
293
|
-
- app/
|
294
|
-
- app/
|
295
|
-
- app/models/
|
296
|
-
- app/models/
|
297
|
-
- app/models/
|
298
|
-
- app/models/
|
299
|
-
- app/models/
|
300
|
-
- app/models/
|
303
|
+
- app/helpers/stall/payments_helper.rb
|
304
|
+
- app/mailers/stall/admin_mailer.rb
|
305
|
+
- app/mailers/stall/base_mailer.rb
|
306
|
+
- app/mailers/stall/customer_mailer.rb
|
307
|
+
- app/models/address.rb
|
308
|
+
- app/models/address_ownership.rb
|
309
|
+
- app/models/adjustment.rb
|
310
|
+
- app/models/cart.rb
|
311
|
+
- app/models/customer.rb
|
312
|
+
- app/models/line_item.rb
|
313
|
+
- app/models/payment.rb
|
314
|
+
- app/models/payment_method.rb
|
315
|
+
- app/models/product_list.rb
|
316
|
+
- app/models/shipment.rb
|
317
|
+
- app/models/shipping_method.rb
|
318
|
+
- app/models/stall/models.rb
|
319
|
+
- app/models/stall/models/address.rb
|
320
|
+
- app/models/stall/models/address_ownership.rb
|
321
|
+
- app/models/stall/models/adjustment.rb
|
322
|
+
- app/models/stall/models/cart.rb
|
323
|
+
- app/models/stall/models/customer.rb
|
324
|
+
- app/models/stall/models/line_item.rb
|
325
|
+
- app/models/stall/models/payment.rb
|
326
|
+
- app/models/stall/models/payment_method.rb
|
327
|
+
- app/models/stall/models/product_list.rb
|
328
|
+
- app/models/stall/models/shipment.rb
|
329
|
+
- app/models/stall/models/shipping_method.rb
|
301
330
|
- app/services/stall/add_to_cart_service.rb
|
302
331
|
- app/services/stall/base_service.rb
|
332
|
+
- app/services/stall/cart_update_service.rb
|
303
333
|
- app/services/stall/payment_notification_service.rb
|
304
334
|
- app/services/stall/shipping_fee_calculator_service.rb
|
305
335
|
- app/views/checkout/steps/_informations.html.haml
|
306
336
|
- app/views/checkout/steps/_payment.html.haml
|
307
337
|
- app/views/checkout/steps/_payment_method.html.haml
|
338
|
+
- app/views/checkout/steps/_payment_return.html.haml
|
308
339
|
- app/views/checkout/steps/_shipping_method.html.haml
|
309
340
|
- app/views/layouts/stall/application.html.erb
|
341
|
+
- app/views/stall/admin_mailer/order_paid_email.html.haml
|
310
342
|
- app/views/stall/carts/show.html.haml
|
311
343
|
- app/views/stall/checkout/steps/show.html.haml
|
344
|
+
- app/views/stall/customer_mailer/order_paid_email.html.haml
|
312
345
|
- app/views/stall/line_items/_add_error.html.haml
|
313
346
|
- app/views/stall/line_items/_added.html.haml
|
314
347
|
- app/views/stall/line_items/_form.html.haml
|
348
|
+
- app/views/stall/shared/mailers/_address.html.haml
|
349
|
+
- app/views/stall/shared/mailers/_cart.html.haml
|
315
350
|
- config/locales/stall.en.yml
|
316
351
|
- config/locales/stall.fr.yml
|
317
352
|
- db/migrate/20151103154313_create_stall_line_items.rb
|
@@ -324,6 +359,15 @@ files:
|
|
324
359
|
- db/migrate/20160125100733_create_stall_payment_methods.rb
|
325
360
|
- db/migrate/20160125100734_create_stall_payments.rb
|
326
361
|
- db/migrate/20160127113619_add_user_to_customer.rb
|
362
|
+
- db/migrate/20160304134849_change_all_json_columns_to_jsonb.rb
|
363
|
+
- db/migrate/20160307142924_add_state_to_stall_addresses.rb
|
364
|
+
- db/migrate/20160308142713_create_adjustments.rb
|
365
|
+
- db/migrate/20160309165136_add_identifier_to_stall_product_lists.rb
|
366
|
+
- db/migrate/20160316114649_add_data_to_stall_shipments.rb
|
367
|
+
- db/migrate/20160317141632_add_state_to_stall_shipments.rb
|
368
|
+
- db/migrate/20160629102943_add_active_to_stall_shipping_methods.rb
|
369
|
+
- db/migrate/20160629104617_add_active_to_stall_payment_methods.rb
|
370
|
+
- db/migrate/20160705110151_add_locale_to_stall_customers.rb
|
327
371
|
- lib/generators/stall/checkout/step/step_generator.rb
|
328
372
|
- lib/generators/stall/checkout/step/templates/step.html.haml.erb
|
329
373
|
- lib/generators/stall/checkout/step/templates/step.rb.erb
|
@@ -331,19 +375,33 @@ files:
|
|
331
375
|
- lib/generators/stall/checkout/wizard/wizard_generator.rb
|
332
376
|
- lib/generators/stall/install/install_generator.rb
|
333
377
|
- lib/generators/stall/install/templates/initializer.rb
|
378
|
+
- lib/generators/stall/model/model_generator.rb
|
379
|
+
- lib/generators/stall/service/service_generator.rb
|
380
|
+
- lib/generators/stall/service/templates/service.rb.erb
|
381
|
+
- lib/generators/stall/shipping/calculator/calculator_generator.rb
|
382
|
+
- lib/generators/stall/shipping/calculator/templates/calculator.rb.erb
|
334
383
|
- lib/stall.rb
|
335
384
|
- lib/stall/addressable.rb
|
385
|
+
- lib/stall/cart_helper.rb
|
386
|
+
- lib/stall/carts_cleaner.rb
|
336
387
|
- lib/stall/checkout.rb
|
337
388
|
- lib/stall/checkout/informations_checkout_step.rb
|
338
389
|
- lib/stall/checkout/payment_checkout_step.rb
|
339
390
|
- lib/stall/checkout/payment_method_checkout_step.rb
|
391
|
+
- lib/stall/checkout/payment_return_checkout_step.rb
|
340
392
|
- lib/stall/checkout/shipping_method_checkout_step.rb
|
341
393
|
- lib/stall/checkout/step.rb
|
394
|
+
- lib/stall/checkout/step_form.rb
|
342
395
|
- lib/stall/checkout/wizard.rb
|
343
396
|
- lib/stall/config.rb
|
344
397
|
- lib/stall/engine.rb
|
398
|
+
- lib/stall/payable.rb
|
345
399
|
- lib/stall/payments.rb
|
400
|
+
- lib/stall/payments/config.rb
|
401
|
+
- lib/stall/payments/fake_gateway_payment_notification.rb
|
346
402
|
- lib/stall/payments/gateway.rb
|
403
|
+
- lib/stall/payments/urls_config.rb
|
404
|
+
- lib/stall/priceable.rb
|
347
405
|
- lib/stall/rails/currency_helper.rb
|
348
406
|
- lib/stall/rails/routing_mapper.rb
|
349
407
|
- lib/stall/routes.rb
|
@@ -1,13 +0,0 @@
|
|
1
|
-
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
-
// listed below.
|
3
|
-
//
|
4
|
-
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
-
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
-
//
|
7
|
-
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
-
// compiled file.
|
9
|
-
//
|
10
|
-
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
-
// about supported directives.
|
12
|
-
//
|
13
|
-
//= require_tree .
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module Stall
|
2
|
-
module CartHelper
|
3
|
-
def current_cart
|
4
|
-
RequestStore.store[cart_store_key_for(:default)] ||= load_current_cart
|
5
|
-
end
|
6
|
-
|
7
|
-
private
|
8
|
-
|
9
|
-
def load_current_cart
|
10
|
-
if (cart_token = session[cart_store_key_for(:default)])
|
11
|
-
if (current_cart = Stall::Cart.find_by_token(cart_token))
|
12
|
-
return current_cart
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# If no token was stored or the token does not exist anymore, create a
|
17
|
-
# new cart and store the new token
|
18
|
-
#
|
19
|
-
Stall::Cart.create!.tap do |cart|
|
20
|
-
session[cart_store_key_for(:default)] = cart.token
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def cart_store_key_for(identifier)
|
25
|
-
['stall', 'cart', identifier.to_s].join('.')
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
data/app/models/stall/address.rb
DELETED
data/app/models/stall/cart.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module Stall
|
2
|
-
class Cart < Stall::ProductList
|
3
|
-
include Stall::Addressable
|
4
|
-
|
5
|
-
store_accessor :data, :reference
|
6
|
-
|
7
|
-
has_one :shipment, dependent: :destroy, inverse_of: :cart
|
8
|
-
accepts_nested_attributes_for :shipment
|
9
|
-
|
10
|
-
has_one :payment, dependent: :destroy, inverse_of: :cart
|
11
|
-
accepts_nested_attributes_for :payment
|
12
|
-
|
13
|
-
after_save :ensure_reference, on: :create
|
14
|
-
|
15
|
-
def total_weight
|
16
|
-
line_items.reduce(0) do |total, line_item|
|
17
|
-
total + (line_item.weight || Stall.config.default_product_weight)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def ensure_reference
|
24
|
-
unless reference.present?
|
25
|
-
reference = [Time.now.strftime('%Y%m%d'), ('%05d' % id)].join('-')
|
26
|
-
self.reference = reference
|
27
|
-
save(validate: false)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module Stall
|
2
|
-
class LineItem < ActiveRecord::Base
|
3
|
-
store_accessor :data, :weight
|
4
|
-
|
5
|
-
monetize :unit_eot_price_cents, :unit_price_cents,
|
6
|
-
:eot_price_cents, :price_cents,
|
7
|
-
with_model_currency: :currency, allow_nil: true
|
8
|
-
|
9
|
-
belongs_to :sellable, polymorphic: true
|
10
|
-
belongs_to :product_list
|
11
|
-
|
12
|
-
validates :name, :unit_price, :unit_eot_price, :vat_rate, :price, :quantity,
|
13
|
-
:eot_price, :sellable, presence: true
|
14
|
-
|
15
|
-
validates :unit_price, :unit_eot_price, :vat_rate, :price, :eot_price,
|
16
|
-
numericality: true
|
17
|
-
|
18
|
-
validates :quantity, numericality: { greater_than: 0 }
|
19
|
-
|
20
|
-
validate :stock_availability
|
21
|
-
|
22
|
-
before_validation :refresh_total_prices
|
23
|
-
|
24
|
-
def like?(other)
|
25
|
-
[:sellable_id, :sellable_type].all? do |property|
|
26
|
-
public_send(property) == other.public_send(property)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def currency
|
31
|
-
product_list.try(:currency) || Money.default_currency
|
32
|
-
end
|
33
|
-
|
34
|
-
def vat
|
35
|
-
price - eot_price
|
36
|
-
end
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
# TODO : Stocks availibility handling
|
41
|
-
def stock_availability
|
42
|
-
end
|
43
|
-
|
44
|
-
def refresh_total_prices
|
45
|
-
self.eot_price = unit_eot_price * quantity if unit_eot_price && quantity
|
46
|
-
self.price = unit_price * quantity if unit_price && quantity
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|