comable-backend 0.7.0.beta1 → 0.7.0.beta2

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +7 -2
  3. data/app/assets/javascripts/comable/admin/application.coffee +23 -0
  4. data/app/assets/javascripts/comable/admin/dispatcher.coffee +3 -0
  5. data/app/assets/javascripts/comable/admin/products.coffee +30 -0
  6. data/app/assets/javascripts/comable/admin/stocks.coffee +10 -0
  7. data/app/assets/stylesheets/comable/admin/_products.scss +7 -0
  8. data/app/assets/stylesheets/comable/admin/application.scss +2 -0
  9. data/app/controllers/comable/admin/navigations_controller.rb +2 -11
  10. data/app/controllers/comable/admin/orders_controller.rb +11 -3
  11. data/app/controllers/comable/admin/pages_controller.rb +1 -1
  12. data/app/controllers/comable/admin/payment_methods_controller.rb +1 -1
  13. data/app/controllers/comable/admin/products_controller.rb +3 -2
  14. data/app/controllers/comable/admin/shipment_methods_controller.rb +1 -1
  15. data/app/controllers/comable/admin/stock_locations_controller.rb +76 -0
  16. data/app/controllers/comable/admin/stocks_controller.rb +3 -2
  17. data/app/controllers/comable/admin/themes_controller.rb +1 -0
  18. data/app/controllers/comable/admin/trackers_controller.rb +1 -1
  19. data/app/controllers/comable/admin/users_controller.rb +1 -1
  20. data/app/controllers/comable/admin/variants_controller.rb +3 -3
  21. data/app/helpers/comable/admin/application_helper.rb +1 -5
  22. data/app/helpers/comable/admin/navigations_helper.rb +0 -4
  23. data/app/helpers/comable/admin/products_helper.rb +5 -0
  24. data/app/helpers/comable/admin/themes_helper.rb +1 -1
  25. data/app/navigations/comable/admin/application.rb +4 -0
  26. data/app/views/comable/admin/navigations/_navigation_item_fields.slim +2 -3
  27. data/app/views/comable/admin/orders/_shipment_state.slim +3 -3
  28. data/app/views/comable/admin/orders/edit.slim +1 -1
  29. data/app/views/comable/admin/orders/show.slim +2 -2
  30. data/app/views/comable/admin/products/_form.slim +19 -2
  31. data/app/views/comable/admin/products/_property_fields.slim +8 -0
  32. data/app/views/comable/admin/shared/_address_form.slim +27 -0
  33. data/app/views/comable/admin/shared/_stocks_fields.slim +15 -0
  34. data/app/views/comable/admin/shared/_variant_form.slim +3 -4
  35. data/app/views/comable/admin/stock_locations/_form.slim +37 -0
  36. data/app/views/comable/admin/stock_locations/edit.slim +27 -0
  37. data/app/views/comable/admin/stock_locations/index.slim +28 -0
  38. data/app/views/comable/admin/stock_locations/new.slim +16 -0
  39. data/app/views/comable/admin/stocks/_form.slim +5 -13
  40. data/app/views/comable/admin/stocks/index.slim +2 -5
  41. data/app/views/comable/admin/users/edit.slim +1 -27
  42. data/app/views/comable/admin/variants/edit.slim +1 -1
  43. data/config/routes.rb +1 -0
  44. data/lib/comable/backend/engine.rb +2 -1
  45. metadata +28 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 21e413e5bc839c0924bfa5d8ffe4b07e996edc6b
4
- data.tar.gz: c9e611eeff9a149567730af68720b2b8a36ab43a
3
+ metadata.gz: a9a4aab8272e2f6d7559b2b904eff5dae392ac9b
4
+ data.tar.gz: 6a467557d5063f57772c037adddabc6099bfce7a
5
5
  SHA512:
6
- metadata.gz: 0c7bcfbceaba2d2806a1b42ee422d443908e8a613e6705c9259b30063b48f2548f8eb1f961e06e6ca70a36c9dd59eab2668e30eceb26d0bcbdfd97b82eb26337
7
- data.tar.gz: 514dd41231eb28738854f4fcb721fe651e46071025b787b4e4ca72807ac6a6324c737adb9679a0eb676cae36ac2df3d3ea191a25d8373d20d13598f9d947eac8
6
+ metadata.gz: 74082e26be423fa71b1d3196d9daf07251b106665314a77bde732c3a77812bb63a27853149375dd8ee14f763e620107788328e657de86291782a5223603a9c61
7
+ data.tar.gz: cfa9c867269a22cb149cea5f1a5e69f67dd73fe40dc9b7e69985a0972bd5718a21ad8d17858a4e7a24dde9483096aa27e146ae4cd0e3faf6ef422c478db08cac
data/Rakefile CHANGED
@@ -4,6 +4,7 @@ rescue LoadError
4
4
  puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
5
  end
6
6
 
7
+ require 'rspec/core/rake_task'
7
8
  require 'rdoc/task'
8
9
 
9
10
  RDoc::Task.new(:rdoc) do |rdoc|
@@ -69,9 +70,9 @@ if File.exist?('comable.gemspec')
69
70
  end
70
71
  end
71
72
 
72
- task default: ['app:spec:all', 'rubocop', 'brakeman:all']
73
+ task default: ['app:spec:all', 'jasmine', 'rubocop', 'brakeman:all']
73
74
  else
74
- task default: ['app:spec', 'rubocop', 'brakeman']
75
+ task default: ['app:spec', 'jasmine', 'rubocop', 'brakeman']
75
76
  end
76
77
 
77
78
  Bundler::GemHelper.install_tasks
@@ -79,6 +80,10 @@ Bundler::GemHelper.install_tasks
79
80
  # from https://github.com/rspec/rspec-rails/issues/936
80
81
  task 'test:prepare'
81
82
 
83
+ task :jasmine do
84
+ sh 'bundle exec rake app:spec:javascript RAILS_ENV=test'
85
+ end
86
+
82
87
  task :rubocop do
83
88
  sh 'rubocop'
84
89
  end
@@ -12,8 +12,10 @@
12
12
  #= require ace/ace
13
13
  #= require ace/worker-html
14
14
  #= require ace/mode-liquid
15
+ #= require ace/theme-monokai
15
16
  #= require moment
16
17
  #= require bootstrap-datetimepicker
18
+ #= require select2
17
19
  #= require comable/admin/dispatcher
18
20
  #= require_tree .
19
21
  #= require_self
@@ -46,6 +48,22 @@ add_beforeunload_event = ->
46
48
  $form.submit(remove_beforeunload_function)
47
49
  $(document).on('page:change', remove_beforeunload_function)
48
50
 
51
+ # Based on http://gistflow.com/posts/428-autocomplete-with-rails-and-select2
52
+ initialize_select2 = ->
53
+ $('.select2').each( ->
54
+ $select = $(this)
55
+ options = { theme: 'bootstrap' }
56
+ if $select.hasClass('ajax')
57
+ options.ajax = {
58
+ url: $select.data('source')
59
+ dataType: 'json'
60
+ cache: true
61
+ data: (params) -> { q: { name_cont: params.term }, page: params.page }
62
+ processResults: (data, page) -> { results: data }
63
+ }
64
+ $select.select2(options)
65
+ )
66
+
49
67
  window.add_fields = (_this, association, content) ->
50
68
  new_id = new Date().getTime()
51
69
  regexp = new RegExp('new_' + association, 'g')
@@ -57,6 +75,11 @@ window.add_fields = (_this, association, content) ->
57
75
 
58
76
  $(document).ready(->
59
77
  add_beforeunload_event()
78
+ initialize_select2()
79
+
80
+ $(document).on('click', '.add_fields', ->
81
+ initialize_select2()
82
+ )
60
83
 
61
84
  $('.btn-file :file').change(->
62
85
  $(this).closest('form').submit()
@@ -22,6 +22,9 @@ class Dispatcher
22
22
  when 'products:new', 'products:show', 'products:edit', 'products:update', 'products:create'
23
23
  new Product
24
24
  new Variant
25
+ new Stock
26
+ when 'variants:show', 'variants:edit', 'variants:update'
27
+ new Stock
25
28
  when 'navigations:new', 'navigations:show', 'navigations:edit', 'navigations:update', 'navigations:create'
26
29
  new Navigation
27
30
  when 'themes:tree'
@@ -25,9 +25,13 @@ class @Product
25
25
  @radio_published = $('#product_published_at_published')
26
26
  @radio_unpublished = $('#product_published_at_unpublished')
27
27
  @published_at = $('#product_published_at')
28
+ @property = $('#product_property')
29
+ @properties = $('#properties')
30
+ @add_property = $('.add_property')
28
31
 
29
32
  @initialize_visibility()
30
33
  @add_event_to_set_visibility()
34
+ @add_event_to_property()
31
35
 
32
36
  # 公開/非公開の制御
33
37
  initialize_visibility: ->
@@ -54,3 +58,29 @@ class @Product
54
58
  @published_at.blur( =>
55
59
  @radio_unpublished.click() unless @published_at.val()
56
60
  )
61
+
62
+ add_event_to_property: ->
63
+ @properties.on('change', 'input', @reset_property)
64
+ @properties.on('click', '.remove_property', @remove_property)
65
+ @properties.on('click', '.remove_property', @reset_property)
66
+ @add_property.click(@adding_property_field)
67
+
68
+ reset_property: =>
69
+ property_attrbutes = $('.property').map( (_index, property) ->
70
+ property_key = $(property).find('.property_key').val()
71
+ property_value = $(property).find('.property_value').val()
72
+ return unless property_key && property_value
73
+ {
74
+ 'property_key': property_key,
75
+ 'property_value': property_value
76
+ }
77
+ )
78
+ @property.val(JSON.stringify(property_attrbutes.get()))
79
+
80
+ remove_property: ->
81
+ $(this).closest('tr').remove()
82
+
83
+ adding_property_field: ->
84
+ field_tags = $(this).data('fields')
85
+ $field = $(field_tags)
86
+ $('#properties').append($field) # タグを追加
@@ -0,0 +1,10 @@
1
+ class @Stock
2
+ constructor: ->
3
+ @register_click_event_to_remove_comable_stock_button()
4
+
5
+ register_click_event_to_remove_comable_stock_button: ->
6
+ $(document).on('click', '.js-remove-comable-stock', ->
7
+ $stock = $(this).closest('.comable-stock')
8
+ $stock.addClass('hidden')
9
+ $stock.find('input[data-name="destroy"]').val(true)
10
+ )
@@ -15,4 +15,11 @@
15
15
  vertical-align: middle;
16
16
  }
17
17
  }
18
+
19
+ tr.property td:first-child {
20
+ border-right: 1px solid #ddd;
21
+ }
22
+ tr.property:last-child {
23
+ border-bottom: 1px solid #ddd;
24
+ }
18
25
  }
@@ -12,6 +12,8 @@
12
12
  @import 'gritter';
13
13
  @import 'awesome_admin_layout';
14
14
  @import 'bootstrap-datetimepicker';
15
+ @import 'select2';
16
+ @import 'select2-bootstrap';
15
17
 
16
18
  @import 'comable/admin/mixins';
17
19
  @import 'comable/admin/overrides';
@@ -7,7 +7,7 @@ module Comable
7
7
 
8
8
  def index
9
9
  @q = Comable::Navigation.ransack(params[:q])
10
- @navigations = @q.result.accessible_by(current_ability)
10
+ @navigations = @q.result.accessible_by(current_ability).by_newest
11
11
  end
12
12
 
13
13
  def show
@@ -46,21 +46,12 @@ module Comable
46
46
  end
47
47
 
48
48
  def search_linkable_ids
49
- @linkable_id_options = linkable_id_options
49
+ @linkable_id_options = Comable::NavigationItem.linkable_id_options(params[:linkable_type])
50
50
  render layout: false
51
51
  end
52
52
 
53
53
  private
54
54
 
55
- def linkable_type
56
- return if params[:linkable_type].blank?
57
- params[:linkable_type] if Comable.const_defined?(params[:linkable_type].demodulize)
58
- end
59
-
60
- def linkable_id_options
61
- linkable_type ? linkable_type.constantize.linkable_id_options : [[]]
62
- end
63
-
64
55
  def navigation_params
65
56
  params.require(:navigation).permit(
66
57
  :name,
@@ -59,17 +59,21 @@ module Comable
59
59
  end
60
60
 
61
61
  def ship
62
- @order.shipment.ship!
62
+ if params[:shipment_id]
63
+ find_shipment.ship!
64
+ else
65
+ @order.ship!
66
+ end
63
67
  redirect_to :back, notice: Comable.t('successful')
64
68
  end
65
69
 
66
70
  def cancel_shipment
67
- @order.shipment.cancel!
71
+ find_shipment.cancel!
68
72
  redirect_to :back, notice: Comable.t('successful')
69
73
  end
70
74
 
71
75
  def resume_shipment
72
- @order.shipment.resume!
76
+ find_shipment.resume!
73
77
  redirect_to :back, notice: Comable.t('successful')
74
78
  end
75
79
 
@@ -90,6 +94,10 @@ module Comable
90
94
  def redirect_to_back_with_alert(exception)
91
95
  redirect_to :back, alert: exception.message
92
96
  end
97
+
98
+ def find_shipment
99
+ @order.shipments.find(params[:shipment_id])
100
+ end
93
101
  end
94
102
  end
95
103
  end
@@ -7,7 +7,7 @@ module Comable
7
7
 
8
8
  def index
9
9
  @q = Comable::Page.ransack(params[:q])
10
- @pages = @q.result.accessible_by(current_ability)
10
+ @pages = @q.result.accessible_by(current_ability).by_newest
11
11
  end
12
12
 
13
13
  def show
@@ -6,7 +6,7 @@ module Comable
6
6
  load_and_authorize_resource class: Comable::PaymentMethod.name
7
7
 
8
8
  def index
9
- @payment_methods = @payment_methods.page(params[:page])
9
+ @payment_methods = @payment_methods.page(params[:page]).by_newest
10
10
  end
11
11
 
12
12
  def show
@@ -7,7 +7,7 @@ module Comable
7
7
 
8
8
  def index
9
9
  @q = Comable::Product.ransack(params[:q])
10
- @products = @q.result(distinct: true).includes(:images, variants: [:option_values, :stock]).page(params[:page]).accessible_by(current_ability)
10
+ @products = @q.result(distinct: true).includes(:images, variants: [:option_values, :stocks]).page(params[:page]).accessible_by(current_ability).by_newest
11
11
  end
12
12
 
13
13
  def show
@@ -73,10 +73,11 @@ module Comable
73
73
  params.require(:product).permit(
74
74
  :name,
75
75
  :caption,
76
+ :property,
76
77
  :published_at,
77
78
  category_path_names: [],
78
79
  images_attributes: [:id, :file, :_destroy],
79
- variants_attributes: [:id, :price, :sku, :options, :quantity, :_destroy],
80
+ variants_attributes: [:id, :price, :sku, :options, :_destroy, stocks_attributes: [:id, :quantity, :stock_location_id, :_destroy]],
80
81
  option_types_attributes: [:id, :name, { values: [] }]
81
82
  )
82
83
  end
@@ -6,7 +6,7 @@ module Comable
6
6
  load_and_authorize_resource class: Comable::ShipmentMethod.name
7
7
 
8
8
  def index
9
- @shipment_methods = @shipment_methods.page(params[:page])
9
+ @shipment_methods = @shipment_methods.page(params[:page]).by_newest
10
10
  end
11
11
 
12
12
  def show
@@ -0,0 +1,76 @@
1
+ require_dependency 'comable/admin/application_controller'
2
+
3
+ module Comable
4
+ module Admin
5
+ class StockLocationsController < Comable::Admin::ApplicationController
6
+ include Comable::PermittedAttributes
7
+
8
+ load_and_authorize_resource class: Comable::StockLocation.name, except: :index
9
+
10
+ before_filter :build_address, only: [:show, :new, :edit]
11
+
12
+ def index
13
+ @q = Comable::StockLocation.ransack(params[:q])
14
+ @stock_locations = @q.result.page(params[:page]).accessible_by(current_ability)
15
+
16
+ respond_to do |format|
17
+ format.html
18
+ format.json { render json: @stock_locations }
19
+ end
20
+ end
21
+
22
+ def show
23
+ render :edit
24
+ end
25
+
26
+ def new
27
+ @stock_location.build_address unless @stock_location.address
28
+ end
29
+
30
+ def create
31
+ if @stock_location.save
32
+ redirect_to comable.admin_stock_location_path(@stock_location), notice: Comable.t('successful')
33
+ else
34
+ flash.now[:alert] = Comable.t('failure')
35
+ render :new
36
+ end
37
+ end
38
+
39
+ def edit
40
+ end
41
+
42
+ def update
43
+ if @stock_location.update_attributes(stock_location_params)
44
+ redirect_to comable.admin_stock_location_path(@stock_location), notice: Comable.t('successful')
45
+ else
46
+ flash.now[:alert] = Comable.t('failure')
47
+ render :edit
48
+ end
49
+ end
50
+
51
+ def destroy
52
+ @stock_location.destroy
53
+ redirect_to comable.admin_stock_locations_path, notice: Comable.t('successful')
54
+ end
55
+
56
+ private
57
+
58
+ def stock_location_params
59
+ params.require(:stock_location).permit(
60
+ :name,
61
+ :active,
62
+ :default,
63
+ address_attributes: permitted_address_attributes
64
+ ).tap do |params|
65
+ next unless params[:address_attributes]
66
+ next if params[:address_attributes].values.any?(&:present?)
67
+ params.delete(:address_attributes)
68
+ end
69
+ end
70
+
71
+ def build_address
72
+ @stock_location.build_address unless @stock_location.address
73
+ end
74
+ end
75
+ end
76
+ end
@@ -10,7 +10,7 @@ module Comable
10
10
 
11
11
  def index
12
12
  @q = @stocks.ransack(params[:q])
13
- @stocks = @q.result.includes(variant: [:product, :option_values]).page(params[:page]).accessible_by(current_ability)
13
+ @stocks = @q.result.includes(variant: [:product, :option_values]).page(params[:page]).accessible_by(current_ability).by_newest
14
14
  end
15
15
 
16
16
  def show
@@ -76,7 +76,8 @@ module Comable
76
76
  :code,
77
77
  :quantity,
78
78
  :sku_h_choice_name,
79
- :sku_v_choice_name
79
+ :sku_v_choice_name,
80
+ :stock_location_id
80
81
  )
81
82
  end
82
83
  end
@@ -6,6 +6,7 @@ module Comable
6
6
  load_and_authorize_resource class: Comable::Theme.name, find_by: :name
7
7
 
8
8
  def index
9
+ @themes = @themes.by_newest
9
10
  end
10
11
 
11
12
  def show
@@ -6,7 +6,7 @@ module Comable
6
6
  load_and_authorize_resource class: Comable::Tracker.name
7
7
 
8
8
  def index
9
- @trackers = @trackers.page(params[:page])
9
+ @trackers = @trackers.page(params[:page]).by_newest
10
10
  end
11
11
 
12
12
  def show
@@ -9,7 +9,7 @@ module Comable
9
9
 
10
10
  def index
11
11
  @q = Comable::User.ransack(params[:q])
12
- @users = @q.result.page(params[:page]).accessible_by(current_ability)
12
+ @users = @q.result.page(params[:page]).accessible_by(current_ability).by_newest
13
13
  end
14
14
 
15
15
  def show
@@ -8,7 +8,7 @@ module Comable
8
8
 
9
9
  def index
10
10
  @q = @variants.ransack(params[:q])
11
- @variants = @q.result.includes(:product).page(params[:page]).accessible_by(current_ability)
11
+ @variants = @q.result.includes(:product).page(params[:page]).accessible_by(current_ability).by_newest
12
12
  end
13
13
 
14
14
  def show
@@ -41,7 +41,7 @@ module Comable
41
41
 
42
42
  def destroy
43
43
  @variant.destroy
44
- redirect_to comable.admin_product_variants_path(@product), notice: Comable.t('successful')
44
+ redirect_to comable.admin_product_path(@product), notice: Comable.t('successful')
45
45
  end
46
46
 
47
47
  private
@@ -50,7 +50,7 @@ module Comable
50
50
  params.require(:variant).permit(
51
51
  :price,
52
52
  :sku,
53
- stock_attributes: [:quantity],
53
+ stocks_attributes: [:id, :quantity, :stock_location_id, :_destroy],
54
54
  option_values_attributes: [:id, :name]
55
55
  )
56
56
  end
@@ -31,7 +31,7 @@ module Comable
31
31
  new_object = f.object.send("build_#{type}")
32
32
  f.send("#{type}_fields", new_object, child_index: "new_#{type}", &render_block)
33
33
  else
34
- new_object = f.object.send(type).build
34
+ new_object = Comable.const_get(type.to_s.classify).new
35
35
  f.send('fields_for', type, new_object, child_index: "new_#{type}", &render_block)
36
36
  end
37
37
  end
@@ -46,10 +46,6 @@ module Comable
46
46
  false
47
47
  end
48
48
 
49
- def page_name
50
- [controller_name, action_name].join(':')
51
- end
52
-
53
49
  private
54
50
 
55
51
  def singular?(string)
@@ -5,10 +5,6 @@ module Comable
5
5
  Comable::NavigationItem.linkable_params_lists.map { |attr| attr.slice(:name, :type).values }
6
6
  end
7
7
 
8
- def linkable_id_options(navigation_item)
9
- navigation_item.linkable_class.try(:linkable_id_options) || [[]]
10
- end
11
-
12
8
  # アイテム追加ボタン設置
13
9
  def add_fields_button_tag(name, f, association)
14
10
  new_object = f.object.send(association).klass.new
@@ -1,6 +1,11 @@
1
1
  module Comable
2
2
  module Admin
3
3
  module ProductsHelper
4
+ # プロパティ追加ボタン設置
5
+ def add_property_button_tag(name)
6
+ fields = render 'comable/admin/products/property_fields', property_key: nil, property_value: nil
7
+ button_tag(name, type: :button, class: 'add_property btn btn-default pull-right', data: { fields: fields.delete("\n") })
8
+ end
4
9
  end
5
10
  end
6
11
  end
@@ -20,7 +20,7 @@ module Comable
20
20
  private
21
21
 
22
22
  def views_dir
23
- spec = Gem::Specification.find_by_name('comable-frontend')
23
+ spec = Gem::Specification.find_by_path('comable/frontend')
24
24
  fail 'Please install "comable-frontend" gem!' unless spec
25
25
  "#{spec.gem_dir}/app/views"
26
26
  end
@@ -54,6 +54,10 @@ AwesomeAdminLayout.define(only: Comable::Admin::ApplicationController) do |contr
54
54
  link comable.admin_stocks_path
55
55
  end
56
56
 
57
+ item Comable.t('admin.nav.stock_location') do
58
+ link comable.admin_stock_locations_path
59
+ end
60
+
57
61
  item Comable.t('admin.nav.category') do
58
62
  link comable.admin_categories_path
59
63
  end
@@ -1,5 +1,4 @@
1
- - linkable_class = f.object.linkable_class
2
- - link_selectable = linkable_class.try(:linkable_exists?)
1
+ - link_selectable = f.object.linkable_exists?
3
2
 
4
3
  fieldset.navigation-item class="#{'hidden' if f.object._destroy}"
5
4
  .row
@@ -16,7 +15,7 @@ fieldset.navigation-item class="#{'hidden' if f.object._destroy}"
16
15
  = f.text_field :url
17
16
 
18
17
  .col-sm-3.linkable_id class="#{'hidden' unless link_selectable}"
19
- = f.select :linkable_id, linkable_id_options(f.object)
18
+ = f.select :linkable_id, f.object.linkable_id_options
20
19
 
21
20
  .col-sm-3
22
21
  = f.hidden_field :_destroy, class: :destroy
@@ -19,7 +19,7 @@ section.row
19
19
 
20
20
  li
21
21
  - if shipment.state?(:ready)
22
- = link_to comable.ship_admin_order_path(shipment.order), options_of_shipment_badge_for(shipment, state: :completed).merge(method: :post, disabled: !@order.can_ship?) do
22
+ = link_to comable.ship_admin_order_path(shipment.order, shipment_id: shipment.id), options_of_shipment_badge_for(shipment, state: :completed).merge(method: :post, disabled: !shipment.can_ship?) do
23
23
  i.fa.fa-truck
24
24
  - else
25
25
  = content_tag :div, options_of_shipment_badge_for(shipment, state: :completed) do
@@ -32,7 +32,7 @@ section.row
32
32
 
33
33
  - if shipment.state?(:completed) || shipment.state?(:resumed)
34
34
  li
35
- = link_to comable.cancel_shipment_admin_order_path(shipment.order), options_of_shipment_badge_for(shipment, state: :canceled).merge(method: :post) do
35
+ = link_to comable.cancel_shipment_admin_order_path(shipment.order, shipment_id: shipment.id), options_of_shipment_badge_for(shipment, state: :canceled).merge(method: :post) do
36
36
  i.fa.fa-close
37
37
 
38
38
  - if shipment.state?(:canceled)
@@ -40,5 +40,5 @@ section.row
40
40
  = content_tag :div, options_of_shipment_badge_for(shipment, state: :canceled) do
41
41
  i.fa.fa-close
42
42
  li
43
- = link_to comable.resume_shipment_admin_order_path(shipment.order), options_of_shipment_badge_for(shipment, state: :resumed).merge(method: :post) do
43
+ = link_to comable.resume_shipment_admin_order_path(shipment.order, shipment_id: shipment.id), options_of_shipment_badge_for(shipment, state: :resumed).merge(method: :post) do
44
44
  i.fa.fa-refresh
@@ -141,7 +141,7 @@
141
141
  p
142
142
  = ff.text_field :name, placeholder: ff.object.class.human_attribute_name(:name), data: { name: 'name' }
143
143
  p.text-muted
144
- = ff.text_field :code, placeholder: ff.object.class.human_attribute_name(:code), data: { name: 'code' }
144
+ = ff.text_field :sku, placeholder: ff.object.class.human_attribute_name(:sku), data: { name: 'sku' }
145
145
  td
146
146
  = ff.text_field :price, placeholder: ff.object.class.human_attribute_name(:price), data: { name: 'price' }
147
147
  td
@@ -39,8 +39,8 @@
39
39
  .comable-page-body
40
40
  - if @order.payment
41
41
  = render 'payment_state', payment: @order.payment
42
- - if @order.shipment
43
- = render 'shipment_state', shipment: @order.shipment
42
+ - @order.shipments.each do |shipment|
43
+ = render 'shipment_state', shipment: shipment
44
44
 
45
45
  section.row
46
46
  .col-lg-8
@@ -103,8 +103,9 @@
103
103
  th
104
104
  = @product.variants.human_attribute_name(:quantity)
105
105
  tbody
106
- = f.fields_for :variants do |ff|
107
- = render 'comable/admin/shared/variants_fields', f: ff
106
+ - if @product.persisted?
107
+ = f.fields_for :variants do |ff|
108
+ = render 'comable/admin/shared/variants_fields', f: ff
108
109
  = link_to_add_fields nil, f, :variants, class: 'hidden js-add-variant'
109
110
 
110
111
  - if @product.persisted?
@@ -142,6 +143,22 @@
142
143
 
143
144
  hr
144
145
 
146
+ fieldset
147
+ .col-md-3
148
+ legend
149
+ = Comable.t('admin.nav.products.property')
150
+ .help-block
151
+
152
+ .col-md-9
153
+ .form-group
154
+ table.table#properties
155
+ - @product.properties.each do |property|
156
+ = render 'comable/admin/products/property_fields', property_key: property['property_key'], property_value: property['property_value']
157
+ = f.hidden_field :property
158
+ = add_property_button_tag Comable.t('admin.nav.products.add_property')
159
+
160
+ hr
161
+
145
162
  fieldset
146
163
  .col-md-3
147
164
  legend
@@ -0,0 +1,8 @@
1
+ tr.property
2
+ td
3
+ = text_field_tag nil, property_key, id: nil, class: :property_key
4
+ td
5
+ = text_field_tag nil, property_value, id: nil, class: :property_value
6
+ td
7
+ button.btn.btn-default.pull-right.remove_property type="button"
8
+ = Comable.t('actions.destroy')
@@ -0,0 +1,27 @@
1
+ .form-group
2
+ = f.label :full_name
3
+ .row
4
+ .col-sm-6
5
+ = f.text_field :family_name, placeholder: f.object.class.human_attribute_name(:family_name)
6
+ .col-sm-6
7
+ = f.text_field :first_name, placeholder: f.object.class.human_attribute_name(:first_name)
8
+
9
+ .form-group
10
+ = f.label :zip_code
11
+ = f.text_field :zip_code, max_length: 8
12
+
13
+ .form-group
14
+ = f.label :state_name
15
+ = f.text_field :state_name
16
+
17
+ .form-group
18
+ = f.label :city
19
+ = f.text_field :city
20
+
21
+ .form-group
22
+ = f.label :detail
23
+ = f.text_field :detail
24
+
25
+ .form-group
26
+ = f.label :phone_number
27
+ = f.text_field :phone_number, max_length: 18
@@ -0,0 +1,15 @@
1
+ .row.comable-stock
2
+ = f.hidden_field :_destroy, data: { name: 'destroy' }
3
+
4
+ .col-md-6
5
+ .form-group
6
+ = f.label :quantity
7
+ = f.text_field :quantity
8
+
9
+ .col-md-6
10
+ .form-group
11
+ = f.label :stock_location_id
12
+ = f.collection_select :stock_location_id, [f.object.try(:stock_location)].compact, :id, :name, {}, class: 'select2 ajax', data: { source: comable.admin_stock_locations_path }
13
+
14
+ .help-block.text-right
15
+ = link_to Comable.t('admin.actions.destroy'), 'javascript: void(0)', class: 'js-remove-comable-stock'
@@ -20,7 +20,6 @@ fieldset
20
20
  = f.label :sku
21
21
  = f.text_field :sku
22
22
 
23
- = f.fields_for :stock, f.object.stock || f.object.build_stock do |ff|
24
- .form-group
25
- = ff.label :quantity
26
- = ff.text_field :quantity
23
+ = f.fields_for :stocks do |ff|
24
+ = render 'comable/admin/shared/stocks_fields', f: ff
25
+ = link_to_add_fields Comable.t('admin.add_stocks'), f, :stocks
@@ -0,0 +1,37 @@
1
+ = error_messages_for @stock_location
2
+
3
+ = form_for [comable, :admin, @stock_location] do |f|
4
+ .hidden
5
+ = f.submit
6
+
7
+ fieldset
8
+ .col-md-3
9
+ legend
10
+ = Comable.t('admin.general')
11
+
12
+ .col-md-9
13
+ .form-group
14
+ = f.label :name
15
+ = f.text_field :name
16
+
17
+ .form-group
18
+ .checkbox
19
+ = f.label :active do
20
+ = f.check_box :active
21
+ = f.object.class.human_attribute_name(:active)
22
+
23
+ .form-group
24
+ .checkbox
25
+ = f.label :default do
26
+ = f.check_box :default
27
+ = f.object.class.human_attribute_name(:default)
28
+
29
+ fieldset
30
+ .col-md-3
31
+ legend
32
+ = f.object.class.human_attribute_name(:address)
33
+ .help-block
34
+
35
+ .col-md-9
36
+ = f.fields_for :address do |ff|
37
+ = render 'comable/admin/shared/address_form', f: ff
@@ -0,0 +1,27 @@
1
+ .comable-page
2
+ .comable-main-fixed-top
3
+ .comable-page-heading
4
+ ul.pull-right.list-inline
5
+ li
6
+ = link_to_save
7
+
8
+ h1.page-header
9
+ ol.breadcrumb
10
+ li>
11
+ = link_to Comable.t('admin.nav.stock_location'), comable.admin_stock_locations_path
12
+ li.active
13
+ = @stock_location.name
14
+
15
+ .comable-page-body
16
+ = render 'form'
17
+ hr
18
+ .panel.panel-danger
19
+ .panel-heading type="button" data-toggle="collapse" data-target="#comable-danger"
20
+ strong
21
+ span.fa.fa-angle-down>
22
+ = Comable.t('admin.actions.destroy')
23
+ #comable-danger.collapse
24
+ .panel-body
25
+ p
26
+ = Comable.t('admin.confirmation_to_remove_product')
27
+ = link_to Comable.t('admin.actions.destroy'), comable.admin_stock_location_path(@stock_location), method: :delete, class: 'btn btn-danger'
@@ -0,0 +1,28 @@
1
+ .comable-page
2
+ .comable-page-heading
3
+ ul.pull-right.list-inline
4
+ li
5
+ = link_to Comable.t('admin.actions.new'), comable.new_admin_stock_location_path, class: 'btn btn-default'
6
+
7
+ h1.page-header
8
+ = Comable.t('admin.nav.stock_location')
9
+ small<
10
+ | #{@stock_locations.size} #{Comable.t('admin.results')}
11
+
12
+ .comable-page-body
13
+ - if @stock_locations.empty?
14
+ = Comable.t('admin.not_found')
15
+ - else
16
+ table.table.table-striped
17
+ thead
18
+ th
19
+ = @stock_locations.klass.human_attribute_name(:name)
20
+ tbody
21
+ - @stock_locations.each do |stock_location|
22
+ tr
23
+ td
24
+ = link_to stock_location.name, comable.admin_stock_location_path(stock_location)
25
+ - unless stock_location.active
26
+ span.fa.fa-eye-slash.text-muted<
27
+ - if stock_location.default
28
+ span.fa.fa-check.text-primary<
@@ -0,0 +1,16 @@
1
+ .comable-page
2
+ .comable-main-fixed-top
3
+ .comable-page-heading
4
+ ul.pull-right.list-inline
5
+ li
6
+ = link_to_save
7
+
8
+ h1.page-header
9
+ ol.breadcrumb
10
+ li>
11
+ = link_to Comable.t('admin.nav.stock_location'), comable.admin_stock_locations_path
12
+ li.active
13
+ = Comable.t('admin.actions.new')
14
+
15
+ .comable-page-body
16
+ = render 'form'
@@ -14,21 +14,13 @@
14
14
  .help-block
15
15
 
16
16
  .col-md-9
17
- .form-group
18
- = f.label :code
19
- = f.text_field :code
20
-
21
17
  .form-group
22
18
  = f.label :quantity
23
19
  = f.text_field :quantity
24
20
 
25
- - if @stock.sku?
26
- - if @stock.sku_h?
27
- .form-group
28
- = f.label :sku_h_choice_name, @stock.sku_h_item_name
29
- = f.text_field :sku_h_choice_name
21
+ .form-group
22
+ = f.label :stock_location_id
23
+ = f.collection_select :stock_location_id, [@stock.stock_location].compact, :id, :name, {}, class: 'select2 ajax', data: { source: comable.admin_stock_locations_path }
30
24
 
31
- - if @stock.sku_v?
32
- .form-group
33
- = f.label :sku_v_choice_name, @stock.sku_v_item_name
34
- = f.text_field :sku_v_choice_name
25
+ .help-block.text-right
26
+ = link_to Comable.t('admin.remove'), 'javascript: void(0)', class: 'remove-fields'
@@ -66,16 +66,13 @@
66
66
  - @stocks.each do |stock|
67
67
  tr
68
68
  td
69
+ p
70
+ = link_to stock.variant.product.name, comable.admin_product_variant_path(stock.variant.product, stock.variant)
69
71
  - if stock.variant.options.any?
70
- p
71
- = link_to stock.variant.product.name, comable.admin_product_variant_path(stock.variant.product, stock.variant)
72
72
  p
73
73
  - stock.variant.options.each do |option|
74
74
  span.comable-variant-name
75
75
  = option.value
76
- - else
77
- p
78
- = link_to stock.variant.product.name, comable.admin_product_path(stock.variant.product)
79
76
  td
80
77
  = stock.variant.sku
81
78
  td
@@ -50,30 +50,4 @@
50
50
 
51
51
  .col-md-9
52
52
  = f.fields_for :bill_address do |ff|
53
- .form-group
54
- = ff.label :full_name
55
- .row
56
- .col-sm-6
57
- = ff.text_field :family_name, placeholder: ff.object.class.human_attribute_name(:family_name)
58
- .col-sm-6
59
- = ff.text_field :first_name, placeholder: ff.object.class.human_attribute_name(:first_name)
60
-
61
- .form-group
62
- = ff.label :zip_code
63
- = ff.text_field :zip_code, max_length: 8
64
-
65
- .form-group
66
- = ff.label :state_name
67
- = ff.text_field :state_name
68
-
69
- .form-group
70
- = ff.label :city
71
- = ff.text_field :city
72
-
73
- .form-group
74
- = ff.label :detail
75
- = ff.text_field :detail
76
-
77
- .form-group
78
- = ff.label :phone_number
79
- = ff.text_field :phone_number, max_length: 18
53
+ = render 'comable/admin/shared/address_form', f: ff
@@ -28,4 +28,4 @@
28
28
  .panel-body
29
29
  p
30
30
  = Comable.t('admin.confirmation_to_remove_product')
31
- = link_to Comable.t('admin.actions.destroy'), comable.admin_product_path(@product), method: :delete, class: 'btn btn-danger'
31
+ = link_to Comable.t('admin.actions.destroy'), comable.admin_product_variant_path(@product, @variant), method: :delete, class: 'btn btn-danger'
@@ -39,6 +39,7 @@ Comable::Core::Engine.routes.draw do
39
39
  end
40
40
 
41
41
  resources :categories
42
+ resources :stock_locations
42
43
  resources :pages
43
44
 
44
45
  resources :navigations do
@@ -21,8 +21,9 @@ require 'jquery-turbolinks'
21
21
  require 'awesome_admin_layout'
22
22
  require 'ace-rails-ap'
23
23
 
24
- require 'bootstrap3-datetimepicker-rails'
25
24
  require 'momentjs-rails'
25
+ require 'bootstrap3-datetimepicker-rails'
26
+ require 'select2-rails'
26
27
 
27
28
  module Comable
28
29
  module Backend
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: comable-backend
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0.beta1
4
+ version: 0.7.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - YOSHIDA Hiroki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-25 00:00:00.000000000 Z
11
+ date: 2015-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: comable-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.7.0.beta1
19
+ version: 0.7.0.beta2
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: 0.7.0.beta1
26
+ version: 0.7.0.beta2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rails
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -460,6 +460,20 @@ dependencies:
460
460
  - - ">="
461
461
  - !ruby/object:Gem::Version
462
462
  version: 4.7.14
463
+ - !ruby/object:Gem::Dependency
464
+ name: select2-rails
465
+ requirement: !ruby/object:Gem::Requirement
466
+ requirements:
467
+ - - "~>"
468
+ - !ruby/object:Gem::Version
469
+ version: '4.0'
470
+ type: :runtime
471
+ prerelease: false
472
+ version_requirements: !ruby/object:Gem::Requirement
473
+ requirements:
474
+ - - "~>"
475
+ - !ruby/object:Gem::Version
476
+ version: '4.0'
463
477
  description: Provide backend functions for Comable.
464
478
  email:
465
479
  - hyoshida@appirits.com
@@ -478,6 +492,7 @@ files:
478
492
  - app/assets/javascripts/comable/admin/pages.coffee
479
493
  - app/assets/javascripts/comable/admin/products.coffee
480
494
  - app/assets/javascripts/comable/admin/search.coffee
495
+ - app/assets/javascripts/comable/admin/stocks.coffee
481
496
  - app/assets/javascripts/comable/admin/themes.coffee
482
497
  - app/assets/javascripts/comable/admin/variants.coffee
483
498
  - app/assets/stylesheets/comable/admin/_common.scss
@@ -508,6 +523,7 @@ files:
508
523
  - app/controllers/comable/admin/payment_methods_controller.rb
509
524
  - app/controllers/comable/admin/products_controller.rb
510
525
  - app/controllers/comable/admin/shipment_methods_controller.rb
526
+ - app/controllers/comable/admin/stock_locations_controller.rb
511
527
  - app/controllers/comable/admin/stocks_controller.rb
512
528
  - app/controllers/comable/admin/store_controller.rb
513
529
  - app/controllers/comable/admin/themes_controller.rb
@@ -548,9 +564,11 @@ files:
548
564
  - app/views/comable/admin/payment_methods/index.slim
549
565
  - app/views/comable/admin/payment_methods/new.slim
550
566
  - app/views/comable/admin/products/_form.slim
567
+ - app/views/comable/admin/products/_property_fields.slim
551
568
  - app/views/comable/admin/products/edit.slim
552
569
  - app/views/comable/admin/products/index.slim
553
570
  - app/views/comable/admin/products/new.slim
571
+ - app/views/comable/admin/shared/_address_form.slim
554
572
  - app/views/comable/admin/shared/_advanced_search.slim
555
573
  - app/views/comable/admin/shared/_condition_fields.slim
556
574
  - app/views/comable/admin/shared/_footer.slim
@@ -559,6 +577,7 @@ files:
559
577
  - app/views/comable/admin/shared/_notifier.slim
560
578
  - app/views/comable/admin/shared/_option_type_fields.slim
561
579
  - app/views/comable/admin/shared/_option_types_fields.slim
580
+ - app/views/comable/admin/shared/_stocks_fields.slim
562
581
  - app/views/comable/admin/shared/_value_fields.slim
563
582
  - app/views/comable/admin/shared/_variant_form.slim
564
583
  - app/views/comable/admin/shared/_variants_fields.slim
@@ -567,6 +586,10 @@ files:
567
586
  - app/views/comable/admin/shipment_methods/edit.slim
568
587
  - app/views/comable/admin/shipment_methods/index.slim
569
588
  - app/views/comable/admin/shipment_methods/new.slim
589
+ - app/views/comable/admin/stock_locations/_form.slim
590
+ - app/views/comable/admin/stock_locations/edit.slim
591
+ - app/views/comable/admin/stock_locations/index.slim
592
+ - app/views/comable/admin/stock_locations/new.slim
570
593
  - app/views/comable/admin/stocks/_form.slim
571
594
  - app/views/comable/admin/stocks/edit.slim
572
595
  - app/views/comable/admin/stocks/index.slim
@@ -623,7 +646,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
623
646
  version: 1.3.1
624
647
  requirements: []
625
648
  rubyforge_project:
626
- rubygems_version: 2.2.2
649
+ rubygems_version: 2.4.5
627
650
  signing_key:
628
651
  specification_version: 4
629
652
  summary: Provide backend functions for Comable.