stall 0.1.1 → 0.1.2
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/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
|