c80_yax 0.1.0.4 → 0.1.0.5

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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/app/admin/c80_yax/cats.rb +2 -2
  4. data/app/admin/c80_yax/colors.rb +38 -0
  5. data/app/admin/c80_yax/items.rb +5 -2
  6. data/app/admin/c80_yax/prop_names.rb +1 -1
  7. data/app/admin/c80_yax/uoms.rb +1 -1
  8. data/app/assets/javascripts/backend/strsubcats.js +0 -12
  9. data/app/assets/javascripts/c80_yax.js.coffee +3 -1
  10. data/app/assets/javascripts/lib_backend/init_select_picker.js +13 -0
  11. data/app/assets/stylesheets/c80_yax/elems/cats_iconed_list.scss +73 -0
  12. data/app/assets/stylesheets/c80_yax.scss +3 -1
  13. data/app/helpers/c80_yax/cats/cat_lists_helper.rb +15 -0
  14. data/app/helpers/c80_yax/cats/cat_url_helper.rb +11 -0
  15. data/app/helpers/c80_yax/cats/cat_view_helper.rb +11 -1
  16. data/app/models/c80_yax/cat.rb +2 -2
  17. data/app/models/c80_yax/color.rb +21 -0
  18. data/app/models/c80_yax/common_prop.rb +1 -0
  19. data/app/models/c80_yax/item.rb +1 -0
  20. data/app/models/c80_yax/main_prop.rb +1 -0
  21. data/app/models/c80_yax/mixins/cat/database.rb +28 -0
  22. data/app/models/c80_yax/price_prop.rb +1 -0
  23. data/app/models/c80_yax/strsubcat.rb +2 -0
  24. data/app/views/c80_yax/cats/_cats_iconed_list.html.erb +35 -0
  25. data/config/locales/cat/ru.yml +20 -0
  26. data/config/locales/color/ru.yml +16 -0
  27. data/config/locales/item/ru.yml +28 -0
  28. data/config/locales/prop_name/ru.yml +15 -0
  29. data/config/locales/ru.yml +1 -75
  30. data/config/locales/strsubcat/ru.yml +38 -0
  31. data/config/locales/uom/ru.yml +15 -0
  32. data/config/routes.rb +1 -0
  33. data/db/migrate/20161108095505_create_c80_yax_uoms.rb +2 -1
  34. data/db/migrate/20161108095950_create_c80_yax_prop_names.rb +4 -2
  35. data/db/migrate/20170625175353_create_c80_yax_colors.rb +10 -0
  36. data/db/migrate/20170625180000_create_c80_yax_join_table_colors_items.rb +12 -0
  37. data/engines/pack/README.md +52 -0
  38. data/engines/pack/app/admin/pack/suites.rb +55 -0
  39. data/engines/pack/app/assets/javascripts/backend/suites.js +14 -0
  40. data/engines/pack/app/assets/javascripts/packs.js.coffee +1 -0
  41. data/engines/pack/app/models/pack/srow.rb +8 -0
  42. data/engines/pack/app/models/pack/suite.rb +16 -0
  43. data/engines/pack/config/locales/suite/ru.yml +15 -0
  44. data/engines/pack/db/migrate/20170625205656_create_c80_yax_pack_suites.rb +10 -0
  45. data/engines/pack/db/migrate/20170625215151_create_c80_yax_pack_srows.rb +15 -0
  46. data/engines/pack/lib/pack/engine.rb +25 -0
  47. data/engines/pack/lib/pack.rb +7 -0
  48. data/lib/c80_yax/engine.rb +1 -0
  49. data/lib/c80_yax/version.rb +1 -1
  50. data/lib/c80_yax.rb +1 -0
  51. metadata +29 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d8896703e173f7ebc35c9c9bb777b505e3cd76d3
4
- data.tar.gz: 14fe702299e0a2057d8bfa37cfe20a270415c363
3
+ metadata.gz: 8f84d6d925b03319291e02341f11afd2d6125d78
4
+ data.tar.gz: 841ecbebbd29adaa0f60f8bd9842eded93287030
5
5
  SHA512:
6
- metadata.gz: 11abc62b900d27625364db159894c648727086b793d6550e2955b5540b6a2fbc91df9aed4137352bc246442ae03e5c3edfe90020a1f3446fe5f96c93b1e450bf
7
- data.tar.gz: 9117242d0ecf263ebd5dd09b4483c79f5a17346ff73e7bf2fcee3f059714332668c0007e98fe874679d6d30c8e5ace6681e21787430133c88d5d29981843376c
6
+ metadata.gz: b76cf0581e9c5a3d597756b7f9cd39cf132ef6af0e7cd2a3087abf4de496d5655a3b31405ff0a77dfbe965219dc68fa1576f69984a77155493fbb0bbf781bb48
7
+ data.tar.gz: f1b287c9f282d1b04f97c3626f520084d357ea25d6c0efb1b3e2143dae87895122f5db305a62c63e637f348b4533b5beddcc182cba2633396536e167fff7dd41
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in c80_yax.gemspec
4
4
  gemspec
5
+
6
+ gem 'pack', path: 'engines/pack'
@@ -20,7 +20,7 @@ ActiveAdmin.register C80Yax::Cat, as: 'Cat' do
20
20
  column :ord
21
21
  column :title
22
22
  column :image do |cat|
23
- cat_image(cat)
23
+ cat_image_tag(cat)
24
24
  end
25
25
  column :strsubcats do |cat|
26
26
  res = '-'
@@ -41,7 +41,7 @@ ActiveAdmin.register C80Yax::Cat, as: 'Cat' do
41
41
  f.inputs 'Свойства категории' do
42
42
  f.input :title
43
43
  f.input :ord
44
- f.input :image, :as => :file, :hint => cat_image(f.object)
44
+ f.input :image, :as => :file, :hint => cat_image_tag(f.object)
45
45
  f.input :strsubcats, :as => :check_boxes
46
46
  end
47
47
 
@@ -0,0 +1,38 @@
1
+ ActiveAdmin.register C80Yax::Color, as: 'Color' do
2
+
3
+ menu :label => proc{ I18n.t('c80_yax.active_admin.menu.color')},
4
+ :parent => 'x_c80_yax',
5
+ :priority => 8
6
+
7
+ permit_params :title,
8
+ :value,
9
+ :skidka,
10
+ :item_ids => []
11
+
12
+ config.batch_actions = false
13
+ config.sort_order = 'id_asc'
14
+ before_filter :skip_sidebar!, :only => :index
15
+
16
+ index do
17
+ id_column
18
+ column :title
19
+ column :value
20
+ column :skidka
21
+ column :items
22
+
23
+ actions
24
+ end
25
+
26
+ form(:html => {:multipart => true}) do |f|
27
+
28
+ f.inputs 'Свойства' do
29
+ f.input :title
30
+ f.input :value, :as => :color
31
+ f.input :skidka
32
+ f.input :items, :as => :check_boxes
33
+ end
34
+
35
+ f.actions
36
+ end
37
+
38
+ end
@@ -18,7 +18,8 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
18
18
  :strsubcat_id,
19
19
  :iphotos_attributes => [:id, :image, :_destroy],
20
20
  :item_props_attributes => [:value, :_destroy, :prop_name_id, :id],
21
- :vendor_ids => []
21
+ :vendor_ids => [],
22
+ :color_ids => []
22
23
  # :gallery_ids => [],
23
24
  # :related_child_ids => []
24
25
 
@@ -51,6 +52,8 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
51
52
  print_vendor(itm)
52
53
  end
53
54
 
55
+ column :colors
56
+
54
57
  actions
55
58
  end
56
59
 
@@ -104,7 +107,7 @@ ActiveAdmin.register C80Yax::Item, as: 'Item' do
104
107
  :multiple => false
105
108
  },
106
109
  :include_blank => true
107
-
110
+ f.input :colors, :as => :check_boxes
108
111
  end
109
112
 
110
113
  f.inputs 'Характеристики' do
@@ -1,7 +1,7 @@
1
1
  # категории строительных материалов
2
2
  ActiveAdmin.register C80Yax::PropName, as: 'PropName' do
3
3
 
4
- menu :label => 'Имена свойств',
4
+ menu :label => proc{ I18n.t('c80_yax.active_admin.menu.prop_name')},
5
5
  :parent => 'x_c80_yax',
6
6
  :priority => 6
7
7
 
@@ -1,7 +1,7 @@
1
1
  # единицы измерения
2
2
  ActiveAdmin.register C80Yax::Uom, as: 'Uom' do
3
3
 
4
- menu :label => 'Единицы измерения',
4
+ menu :label => proc{ I18n.t('c80_yax.active_admin.menu.uom')},
5
5
  :parent => 'x_c80_yax',
6
6
  :priority => 7
7
7
 
@@ -1,17 +1,5 @@
1
1
  "use strict";
2
2
 
3
- // при клике по habtm кнопке "добавить",
4
- // на всякий случай,
5
- // инициализируем в появившемся на экране блоке
6
- // возможный bootstrap select picker
7
- var init_select_picker = function (){
8
- $('.has_many_add').on('click', function (){
9
- setTimeout(function() {
10
- $('.selectpicker').selectpicker();
11
- }, 40);
12
- });
13
- };
14
-
15
3
  var f_edit = function (){
16
4
  init_select_picker();
17
5
  };
@@ -1,8 +1,10 @@
1
1
 
2
2
  #= require lib_backend/init
3
+ #= require lib_backend/init_select_picker
3
4
  #= require lib_backend/collapsable-groups
4
5
  #= require lib_backend/jalert
5
6
  #= require lib_backend/loading
6
7
  #= require lib_backend/custom_columns
7
8
 
8
- #= require_tree ./backend
9
+ #= require_tree ./backend
10
+ #= require packs
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ // при клике по habtm кнопке "добавить",
4
+ // на всякий случай,
5
+ // инициализируем в появившемся на экране блоке
6
+ // возможный bootstrap select picker
7
+ var init_select_picker = function (){
8
+ $('.has_many_add').on('click', function (){
9
+ setTimeout(function() {
10
+ $('.selectpicker').selectpicker();
11
+ }, 40);
12
+ });
13
+ };
@@ -0,0 +1,73 @@
1
+ $cat_icon_width: 290px;
2
+ $cat_icon_height: 240px;
3
+
4
+ //noinspection SassScssUnresolvedMixin
5
+ div.cats_iconed_list {
6
+ @include clearfix;
7
+ margin: 15px;
8
+
9
+ > ul {
10
+ @include clearfix;
11
+ padding: 0;
12
+ margin: 0;
13
+ list-style: none;
14
+ /*width: 857px;*/
15
+ position: relative;
16
+
17
+ > li {
18
+ float: left;
19
+ /*margin-right: 59px;*/
20
+ &.child-4th { margin-right:0; }
21
+
22
+ > a {
23
+ display: block;
24
+ width: $cat_icon_width;
25
+ height: $cat_icon_height;
26
+ /*background: transparent url(image_path('strcat_button_bg.png')) no-repeat 0 0;*/
27
+ position: relative;
28
+ text-decoration: none !important;
29
+ outline: none;
30
+
31
+ span {
32
+ position: absolute;
33
+ display: block;
34
+ width: 100%;
35
+ text-decoration: none !important;
36
+
37
+ &.icon {
38
+ width: $cat_icon_width;
39
+ height: $cat_icon_height;
40
+ }
41
+
42
+ &.title {
43
+ bottom: 15px;
44
+ text-align: center;
45
+ padding: 0 30px;
46
+ color: #000000;
47
+ /*font-family: pf_din_text_cond_pro_boldRg, monospace, monospace;*/
48
+ font-weight: normal !important;
49
+ font-size: 12px;
50
+ text-transform: uppercase;
51
+ }
52
+
53
+ }
54
+
55
+ &:hover {
56
+ text-decoration: none !important;
57
+ span { text-decoration: none !important; }
58
+ }
59
+
60
+ &.active {
61
+ }
62
+
63
+ &:focus {
64
+ text-decoration: none !important;
65
+ span { text-decoration: none !important; }
66
+ }
67
+
68
+ }
69
+
70
+ }
71
+
72
+ }
73
+ }
@@ -1 +1,3 @@
1
- @import 'c80_yax/_mixins/**/*';
1
+ @import 'c80_yax/_mixins/**/*';
2
+ @import 'c80_yax/lib/**/*';
3
+ @import 'c80_yax/elems/**/*';
@@ -0,0 +1,15 @@
1
+ module C80Yax
2
+ module Cats
3
+ module CatListsHelper
4
+
5
+ def render_cats_iconed_list(n = 4)
6
+ cats = Cat.iconed_list(n)
7
+ render :partial => 'c80_yax/cats/cats_iconed_list',
8
+ :locals => {
9
+ cats: cats
10
+ }
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module C80Yax
2
+ module Cats
3
+ module CatUrlHelper
4
+
5
+ def cat_normal_url(cat)
6
+ '#'
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -2,7 +2,8 @@ module C80Yax
2
2
  module Cats
3
3
  module CatViewHelper
4
4
 
5
- def cat_image(cat)
5
+ # выдать html строку с image_tag картинки категории
6
+ def cat_image_tag(cat, thumb_type = 'thumb_md')
6
7
  res = ''
7
8
  if cat.image.present?
8
9
  res = image_tag cat.image.thumb_md
@@ -10,6 +11,15 @@ module C80Yax
10
11
  res.html_safe
11
12
  end
12
13
 
14
+ # выдать урл картинки категории
15
+ def cat_image_url(cat, thumb_type = 'thumb_md')
16
+ res = ''
17
+ if cat.image.present?
18
+ res = cat.image.send(thumb_type)
19
+ end
20
+ res
21
+ end
22
+
13
23
  end
14
24
  end
15
25
  end
@@ -3,6 +3,8 @@ require 'babosa'
3
3
  module C80Yax
4
4
  class Cat < ActiveRecord::Base
5
5
 
6
+ include C80Yax::Mixins::Cat::Database
7
+
6
8
  validates :title,
7
9
  presence: true,
8
10
  uniqueness: true,
@@ -22,8 +24,6 @@ module C80Yax
22
24
  input.to_s.to_slug.normalize(transliterations: :russian).to_s
23
25
  end
24
26
 
25
- scope :menu_order, -> {order(:ord => :asc)}
26
-
27
27
  end
28
28
 
29
29
  end
@@ -0,0 +1,21 @@
1
+ module C80Yax
2
+ class Color < ActiveRecord::Base
3
+
4
+ validates :title,
5
+ presence: true,
6
+ uniqueness: true,
7
+ length: { in: 2..50 }
8
+
9
+ validates :value,
10
+ presence: true,
11
+ uniqueness: true,
12
+ length: { in: 2..50 }
13
+
14
+ validates :skidka,
15
+ length: { in: 3..250 }
16
+
17
+ has_and_belongs_to_many :items
18
+
19
+ end
20
+
21
+ end
@@ -2,6 +2,7 @@ module C80Yax
2
2
  class CommonProp < ActiveRecord::Base
3
3
  belongs_to :strsubcat
4
4
  has_and_belongs_to_many :prop_names
5
+ public_constant :HABTM_PropNames
5
6
 
6
7
  include C80Yax::Concerns::Props::Parsable
7
8
 
@@ -12,6 +12,7 @@ class C80Yax::Item < ActiveRecord::Base
12
12
  validates :strsubcat,
13
13
  presence: true
14
14
 
15
+ has_and_belongs_to_many :colors
15
16
  has_and_belongs_to_many :vendors
16
17
  belongs_to :strsubcat
17
18
 
@@ -2,6 +2,7 @@ module C80Yax
2
2
  class MainProp < ActiveRecord::Base
3
3
  belongs_to :strsubcat
4
4
  has_and_belongs_to_many :prop_names
5
+ public_constant :HABTM_PropNames
5
6
 
6
7
  include C80Yax::Concerns::Props::Parsable
7
8
 
@@ -0,0 +1,28 @@
1
+ module C80Yax
2
+ module Mixins
3
+ module Cat
4
+ module Database
5
+
6
+ def self.included(base)
7
+ base.extend(ClassMethods)
8
+ base.instance_eval do
9
+ scope :menu_order, -> {order(:ord => :asc)}
10
+ end
11
+ end
12
+
13
+ module ClassMethods
14
+
15
+
16
+
17
+ # выдать первые N категорий, отсортированные
18
+ # в ord порядке
19
+
20
+ def iconed_list(n)
21
+ self.menu_order.limit(n)
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -2,6 +2,7 @@ module C80Yax
2
2
  class PriceProp < ActiveRecord::Base
3
3
  belongs_to :strsubcat
4
4
  has_and_belongs_to_many :prop_names
5
+ public_constant :HABTM_PropNames
5
6
 
6
7
  include C80Yax::Concerns::Props::Parsable
7
8
 
@@ -11,6 +11,7 @@ class C80Yax::Strsubcat < ActiveRecord::Base
11
11
  length: { in: 6..50 }
12
12
 
13
13
  has_and_belongs_to_many :cats
14
+ public_constant :HABTM_Cats
14
15
 
15
16
  has_many :subordinates,
16
17
  class_name: 'C80Yax::Strsubcat',
@@ -22,6 +23,7 @@ class C80Yax::Strsubcat < ActiveRecord::Base
22
23
  has_and_belongs_to_many :prop_names,
23
24
  :after_add => :after_add_prop_names,
24
25
  :after_remove => :after_remove_prop_names
26
+ public_constant :HABTM_PropNames
25
27
 
26
28
  has_many :items, :dependent => :destroy
27
29
 
@@ -0,0 +1,35 @@
1
+ <%
2
+ # Квадратные кнопки категорий
3
+ #
4
+ # k - счётчик элементов в строке, для того, чтобы симулировать last-child селектор: у каждого 4-го элемента (последнего в строке) убираем margin справа
5
+ #
6
+ %>
7
+ <div class="cats_iconed_list">
8
+ <ul>
9
+
10
+ <% cats.each_with_index do |cat, index| %>
11
+ <% k = index % 4 %>
12
+ <li class="child-<%=k+1%>th">
13
+
14
+ <%= link_to "#{cat_normal_url(cat)}",
15
+ :title => cat.title,
16
+ :class => 'a_cat_nav',
17
+ :id => "a_#{cat.slug}",
18
+ :role => 'button',
19
+ :tabindex => index,
20
+ :data => {
21
+ :cat_slug => cat.slug,
22
+ # :html => true,
23
+ # :toggle => 'popover',
24
+ # :trigger => 'click'
25
+ } do %>
26
+ <span class="icon" style="background: transparent url(<%= cat_image_url(cat) %>) no-repeat 50% 50%;"></span>
27
+ <span class="title"><%= cat.title %></span>
28
+ <% end %>
29
+
30
+ </li>
31
+
32
+ <% end %>
33
+
34
+ </ul>
35
+ </div>
@@ -0,0 +1,20 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ cat: 'Категории'
6
+ activerecord:
7
+ models:
8
+ cat:
9
+ one: 'категорию'
10
+ other: 'Категории'
11
+ attributes:
12
+ c80_yax/cat:
13
+ id: 'id'
14
+ ord: 'Порядковый №'
15
+ title: 'Название'
16
+ slug: 'Friendly URL'
17
+ image: 'Изображение'
18
+ strsubcats: 'Подкатегории'
19
+ created_at: 'Дата создания'
20
+ updated_at: 'Обновлено'
@@ -0,0 +1,16 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ color: 'Цвета'
6
+ activerecord:
7
+ models:
8
+ color:
9
+ one: 'цвет'
10
+ other: 'Цвета'
11
+ attributes:
12
+ c80_yax/color:
13
+ title: 'Название'
14
+ value: 'Значение'
15
+ skidka: 'Алгоритм скидки'
16
+ items: 'Назначен товарам'
@@ -0,0 +1,28 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ item: 'Товары'
6
+ activerecord:
7
+ models:
8
+ item:
9
+ one: 'товар'
10
+ other: 'Товары'
11
+ attributes:
12
+ c80_yax/item:
13
+ id: 'id'
14
+ title: 'Название'
15
+ short_desc: 'Краткое описание'
16
+ full_desc: 'Подробное описание'
17
+ is_hit: 'Хит'
18
+ is_sale: 'Акция'
19
+ is_main: 'Выводить на главной'
20
+ is_gift: 'Подарочный набор'
21
+ is_starting: 'Стартовый набор'
22
+ is_available: 'В наличии'
23
+ strsubcat: 'Подкатегория'
24
+ cat: 'Категория'
25
+ related_parent: 'related_parent'
26
+ related_childs: 'related_childs'
27
+ iphotos: 'Фото'
28
+ colors: 'Цвет'
@@ -0,0 +1,15 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ prop_name: 'Имена свойств'
6
+ activerecord:
7
+ models:
8
+ prop_name:
9
+ one: 'Имя свойства'
10
+ other: 'Имена свойств'
11
+ attributes:
12
+ c80_yax/prop_name:
13
+ title: 'Название'
14
+ uom: 'Ед. измерения'
15
+ related: 'Старая цена'
@@ -2,78 +2,4 @@ ru:
2
2
  c80_yax:
3
3
  active_admin:
4
4
  menu:
5
- core_item: 'Каталог'
6
- strsubcat: 'Подкатегории'
7
- cat: 'Категории'
8
- item: 'Товары'
9
- pages:
10
- strsubcat:
11
- label_view_title: 'Настройки подкатегории'
12
- label_all_props: 'Характеристики, которыми описываются товары из этой подкатегории'
13
- label_main_props: 'Характеристки, которые выводятся на странице просмотра товара под заголовком (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
14
- label_price_props: 'Ценовые характеристики, которые выводятся на странице просмотра товара (<a class="poiasn" href="%{img}" target="_blank">пример</a>)'
15
- label_common_props: 'Характеристки, которые выводятся на странице просмотра товара справа (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
16
- label_prefix_props: 'Префикс-характеристики (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
17
- activerecord:
18
- models:
19
- strsubcat:
20
- one: 'подкатегорию'
21
- other: 'Подкатегории'
22
- cat:
23
- one: 'категорию'
24
- other: 'Категории'
25
- item:
26
- one: 'товар'
27
- other: 'Товары'
28
- prop_name:
29
- one: 'Имя свойства'
30
- other: 'Имена свойств'
31
- # iphoto:
32
- # one: 'Фотоm'
33
- # other: 'Фотоr'
34
- attributes:
35
- c80_yax/prop_name:
36
- title: 'Название'
37
- uom: 'Ед. измерения'
38
- c80_yax/strsubcat:
39
- id: 'id'
40
- ord: 'Порядковый №'
41
- title: 'Название'
42
- created_at: 'Дата создания'
43
- updated_at: 'Обновлено'
44
- cats: 'Принадлежит категории'
45
- parent: 'Принадлежит подкатегории'
46
- parent_id_in: 'Принадлежит подкатегории'
47
- c80_yax/cat:
48
- id: 'id'
49
- ord: 'Порядковый №'
50
- title: 'Название'
51
- strsubcats: 'Подкатегории'
52
- created_at: 'Дата создания'
53
- updated_at: 'Обновлено'
54
- c80_yax/item:
55
- id: 'id'
56
- title: 'Название'
57
- short_desc: 'Краткое описание'
58
- full_desc: 'Подробное описание'
59
- is_hit: 'Хит'
60
- is_sale: 'Акция'
61
- is_main: 'Выводить на главной'
62
- is_gift: 'Подарочный набор'
63
- is_starting: 'Стартовый набор'
64
- is_available: 'В наличии'
65
- strsubcat: 'Подкатегория'
66
- cat: 'Категория'
67
- related_parent: 'related_parent'
68
- related_childs: 'related_childs'
69
- iphotos: 'Фото'
70
- # iphoto: 'Фото'
71
- errors:
72
- models:
73
- c80_yax/strsubcat:
74
- attributes:
75
- title:
76
- taken: 'Подкатегория с таким названием уже существует'
77
- blank: 'Укажите, пожалуйста, название подкатегории'
78
- too_short: 'Название слишком короткое'
79
- too_long: 'Название слишком длинное'
5
+ core_item: 'Каталог'
@@ -0,0 +1,38 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ strsubcat: 'Подкатегории'
6
+ pages:
7
+ strsubcat:
8
+ label_view_title: 'Настройки подкатегории'
9
+ label_all_props: 'Характеристики, которыми описываются товары из этой подкатегории'
10
+ label_main_props: 'Характеристки, которые выводятся на странице просмотра товара под заголовком (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
11
+ label_price_props: 'Ценовые характеристики, которые выводятся на странице просмотра товара (<a class="poiasn" href="%{img}" target="_blank">пример</a>)'
12
+ label_common_props: 'Характеристки, которые выводятся на странице просмотра товара справа (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
13
+ label_prefix_props: 'Префикс-характеристики (<a class="poiasn" href="%{img}" target="_blank">например</a>)'
14
+ activerecord:
15
+ models:
16
+ strsubcat:
17
+ one: 'подкатегорию'
18
+ other: 'Подкатегории'
19
+ attributes:
20
+ c80_yax/strsubcat:
21
+ id: 'id'
22
+ ord: 'Порядковый №'
23
+ title: 'Название'
24
+ created_at: 'Дата создания'
25
+ updated_at: 'Обновлено'
26
+ cats: 'Принадлежит категории'
27
+ parent: 'Принадлежит подкатегории'
28
+ parent_id_in: 'Принадлежит подкатегории'
29
+ prop_names: 'Имена свойств'
30
+ errors:
31
+ models:
32
+ c80_yax/strsubcat:
33
+ attributes:
34
+ title:
35
+ taken: 'Подкатегория с таким названием уже существует'
36
+ blank: 'Укажите, пожалуйста, название подкатегории'
37
+ too_short: 'Название слишком короткое'
38
+ too_long: 'Название слишком длинное'
@@ -0,0 +1,15 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ uom: 'Единицы измерения'
6
+ activerecord:
7
+ models:
8
+ uom:
9
+ one: 'единицу измерения'
10
+ other: 'Единицы измерения'
11
+ attributes:
12
+ c80_yax/uom:
13
+ title: 'Название'
14
+ comment: 'Комментарий'
15
+ is_number: 'Является числом?'
data/config/routes.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  C80Yax::Engine.routes.draw do
2
2
  match 'admin_data_get_strsubcat_propnames', :to => 'admin_data#get_strsubcat_propnames', :via => :post
3
+ mount Pack::Engine => '/'
3
4
  end
@@ -1,8 +1,9 @@
1
1
  class CreateC80YaxUoms < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :c80_yax_uoms, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
- t.string :title
4
+ t.string :title, null: false, limit: 50
5
5
  t.string :comment
6
+ t.string :regex
6
7
  t.boolean :is_number
7
8
 
8
9
  t.timestamps null: false
@@ -1,12 +1,14 @@
1
1
  class CreateC80YaxPropNames < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :c80_yax_prop_names, :options => 'COLLATE=utf8_unicode_ci' do |t|
4
- t.string :title
4
+ t.string :title, null: false
5
5
  t.boolean :is_normal_price
6
6
  t.boolean :is_excluded_from_filtering
7
7
  t.references :uom, index: true
8
8
  t.references :related, index: true # NOTE:: see forbiz schema.rb:518: "prop_names" t.integer "related" (скорее всего, был забыт _id)
9
-
9
+ t.string :regex
10
+ t.string :comment
11
+ t.string :opt
10
12
  t.timestamps null: false
11
13
  end
12
14
  end
@@ -0,0 +1,10 @@
1
+ class CreateC80YaxColors < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :c80_yax_colors do |t|
4
+ t.string :title, null: false, limit: 50
5
+ t.string :value, null: false, limit: 50
6
+ t.string :skidka, limit: 255
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class CreateC80YaxJoinTableColorsItems < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :c80_yax_colors_items, :id => false do |t|
4
+ t.integer :color_id, :null => false
5
+ t.integer :item_id, :null => false
6
+ end
7
+
8
+ add_index :c80_yax_colors_items, [:color_id, :item_id], name: 'too_long17'
9
+ add_index :c80_yax_colors_items, [:item_id, :color_id], name: 'too_long18'
10
+
11
+ end
12
+ end
@@ -0,0 +1,52 @@
1
+ # Описание
2
+
3
+ Добавляем возможность создавать т.н. "Выдачи товаров" - `Suites`.
4
+
5
+ * Suite:
6
+ * + title:string, null: false
7
+ * has_many srows:
8
+ * ord:integer, null: false, default: 10
9
+ * belongs_to :suite
10
+ * belongs_to :item
11
+ * + where:string, default: 'before' # before, after
12
+ * + url:string
13
+
14
+
15
+ # Цитата из ТЗ
16
+
17
+ Функционал формирования выдач позволяет создавать специальные
18
+ выдачи продуктов и выводить блок из каталога (блок выдачи)
19
+ на любые страницы сайта кроме страниц:
20
+ - контакты,
21
+ - дилеры,
22
+ - техническая информация,
23
+ - диллеры
24
+ - страницы диллеров.
25
+
26
+ Каждая выдача имеет следующие характеристики
27
+ - Название (например «Скидки до 50% на снегозадержатели» или «Линия жизни»)
28
+ - Набор товаров принадлежащих данной акции (набор)
29
+ Для каждой страницы, на которой будет располагаться тот или иной блок
30
+ выдачи, из панели управления сайтом можно выбрать место для расположения
31
+ блока: перед основным содержанием страницы или после основного содержания.
32
+ Если на странице предполагается расположение нескольких различных блоков
33
+ выдачи, то расположение каждого из них опять же задаются по принципу
34
+ «после или перед основным содержанием страницы», а сам порядок блоков
35
+ выдачи регулируется через установку порядкового номера каждому блоку.
36
+ При этом существует отдельная нумерация (по порядковому номеру) для
37
+ блоков расположенных перед основным содержанием страницы и после него.
38
+ Определение продуктов, которые войдут в ту или иную выдачу, производится
39
+ вручную – из панели управления сайтом. При создании/редактировании той
40
+ или иной выдачи выдачи, можно включать в состав выдачи любые продукты
41
+ из базы каталога сайта, а также включать продукты в выдачу группами
42
+ (категориями и подкатегориями)
43
+
44
+ Подобная организация функционала позволяет управлять блоками с
45
+ продуктами на главной странице, а также позволяют вставлять необходимые
46
+ выдачи на нужные страницы сайта, например на страницу конкретной акции
47
+ без обращения к инструментарию программиста.
48
+
49
+ Также любая сформированная выдача может быть размещена во всплывающем
50
+ окне каталога. При этом можно выбрать категорию, под стобцом которой
51
+ будет размещена данная выдача (ссылка).
52
+ Каждая выдача имеет заранее предопределенное свойство "id".
@@ -0,0 +1,55 @@
1
+ ActiveAdmin.register Pack::Suite, as: 'Suite' do
2
+
3
+ menu :label => proc{ I18n.t('c80_yax.active_admin.menu.suite')},
4
+ :parent => 'x_c80_yax',
5
+ :priority => 9
6
+
7
+ permit_params :title,
8
+ :where,
9
+ :url,
10
+ :srows_attributes => [:id, :_destroy, :item_id, :ord]
11
+
12
+ config.batch_actions = false
13
+ config.sort_order = 'id_asc'
14
+ before_filter :skip_sidebar!, :only => :index
15
+
16
+ index do
17
+ id_column
18
+ column :title
19
+ column :where
20
+ column :url
21
+
22
+ actions
23
+ end
24
+
25
+ form(:html => {:multipart => true}) do |f|
26
+
27
+ f.inputs 'Свойства' do
28
+ f.input :title
29
+ f.input :where
30
+ f.input :url
31
+
32
+ f.inputs 'Товары' do
33
+ f.has_many :srows, allow_destroy: true do |srow|
34
+ srow.input :ord
35
+ srow.input :item,
36
+ :as => :select,
37
+ :input_html => {
38
+ :title => '',
39
+ :class => 'selectpicker',
40
+ :data => {
41
+ :size => 10,
42
+ :width => '500px'
43
+ },
44
+ :multiple => false
45
+ },
46
+ :collection => C80Yax::Item.all.map { |o| ["#{o.title}", o.id]}
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ f.actions
53
+ end
54
+
55
+ end
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+
3
+ var f_edit = function (){
4
+ init_select_picker();
5
+ };
6
+
7
+ var f_new = function (){
8
+ init_select_picker();
9
+ };
10
+
11
+ C80_YAX.suites = {
12
+ edit: f_edit,
13
+ "new": f_new
14
+ };
@@ -0,0 +1 @@
1
+ #= require_tree ./backend
@@ -0,0 +1,8 @@
1
+ module Pack
2
+ class Srow < ActiveRecord::Base
3
+ belongs_to :suite
4
+ belongs_to :item, class_name: 'C80Yax::Item'
5
+ scope :def_order, -> {order(:ord => :asc)}
6
+
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ module Pack
2
+ class Suite < ActiveRecord::Base
3
+
4
+ has_many :srows, :dependent => :destroy
5
+ accepts_nested_attributes_for :srows,
6
+ :reject_if => lambda { |attributes|
7
+ !attributes.present?
8
+ },
9
+ :allow_destroy => true
10
+
11
+ validates :title,
12
+ :presence => true,
13
+ :length => { in: 2..255 }
14
+
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ ru:
2
+ c80_yax:
3
+ active_admin:
4
+ menu:
5
+ suite: 'Выдачи'
6
+ activerecord:
7
+ models:
8
+ suite:
9
+ one: 'выдачу'
10
+ other: 'Выдачи'
11
+ attributes:
12
+ pack/suite:
13
+ title: 'Название'
14
+ where: 'Место на странице'
15
+ url: 'Выводится на страницах'
@@ -0,0 +1,10 @@
1
+ class CreateC80YaxPackSuites < ActiveRecord::Migration
2
+ def change
3
+ create_table :c80_yax_pack_suites do |t|
4
+ t.string :title, null: false, limit: 255
5
+ t.string :where, limit: 20
6
+ t.string :url
7
+ t.timestamps null: false
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ class CreateC80YaxPackSrows < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :c80_yax_pack_srows do |t|
4
+ t.integer :ord, null: false, default: 0
5
+ t.references :suite, index: true
6
+ t.references :item, index: true
7
+
8
+ t.timestamps null: false
9
+ end
10
+
11
+ add_foreign_key :c80_yax_pack_srows, :c80_yax_items, column: :item_id
12
+ add_foreign_key :c80_yax_pack_srows, :c80_yax_pack_suites, column: :suite_id
13
+
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ module Pack
2
+ class Engine < ::Rails::Engine
3
+ config.i18n.load_path += Dir[config.root.join('config', 'locales', '*','*.{yml}').to_s]
4
+ isolate_namespace Pack
5
+
6
+ initializer :pack_engine do
7
+ # byebug
8
+ if defined?(ActiveAdmin)
9
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/helpers/**/"]
10
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/models/**/"]
11
+ ActiveAdmin.application.load_paths += Dir["#{config.root}/app/admin/**/"]
12
+ end
13
+ end
14
+
15
+ initializer :append_migrations do |app|
16
+ # byebug
17
+ unless app.root.to_s.match root.to_s
18
+ config.paths['db/migrate'].expanded.each do |expanded_path|
19
+ app.config.paths['db/migrate'] << expanded_path
20
+ end
21
+ end
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ require_relative 'pack/engine'
2
+
3
+ module Pack
4
+ def self.table_name_prefix
5
+ 'c80_yax_pack_'
6
+ end
7
+ end
@@ -1,6 +1,7 @@
1
1
  module C80Yax
2
2
  class Engine < ::Rails::Engine
3
3
  config.autoload_paths += %W(#{config.root}/app/models/c80_yax/concerns)
4
+ config.i18n.load_path += Dir[config.root.join('config', 'locales', '*','*.{yml}').to_s]
4
5
  isolate_namespace C80Yax
5
6
 
6
7
  initializer :c80_yax_engine do
@@ -1,3 +1,3 @@
1
1
  module C80Yax
2
- VERSION = '0.1.0.4'
2
+ VERSION = '0.1.0.5'
3
3
  end
data/lib/c80_yax.rb CHANGED
@@ -4,6 +4,7 @@ require 'c80_yax/strsubcat_runtime_tables'
4
4
  require 'c80_yax/watermarker'
5
5
  require 'rails-observers'
6
6
  require 'mini_magick'
7
+ require_relative '../engines/pack/lib/pack'
7
8
 
8
9
  module C80Yax
9
10
  def self.table_name_prefix
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: c80_yax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.4
4
+ version: 0.1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - C80609A
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-06-25 00:00:00.000000000 Z
11
+ date: 2017-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -124,6 +124,7 @@ files:
124
124
  - README.md
125
125
  - Rakefile
126
126
  - app/admin/c80_yax/cats.rb
127
+ - app/admin/c80_yax/colors.rb
127
128
  - app/admin/c80_yax/items.rb
128
129
  - app/admin/c80_yax/lib/custom_columns.rb
129
130
  - app/admin/c80_yax/prop_names.rb
@@ -137,6 +138,7 @@ files:
137
138
  - app/assets/javascripts/lib_backend/collapsable-groups.js
138
139
  - app/assets/javascripts/lib_backend/custom_columns.js
139
140
  - app/assets/javascripts/lib_backend/init.js
141
+ - app/assets/javascripts/lib_backend/init_select_picker.js
140
142
  - app/assets/javascripts/lib_backend/jalert.js
141
143
  - app/assets/javascripts/lib_backend/loading.js
142
144
  - app/assets/stylesheets/c80_yax.scss
@@ -147,12 +149,15 @@ files:
147
149
  - app/assets/stylesheets/c80_yax/backend/collapsed.scss
148
150
  - app/assets/stylesheets/c80_yax/backend/jquery-my-dialog.scss
149
151
  - app/assets/stylesheets/c80_yax/elems/add_to_bucket.scss
152
+ - app/assets/stylesheets/c80_yax/elems/cats_iconed_list.scss
150
153
  - app/assets/stylesheets/c80_yax/lib/bootstrap_checkboxes.scss
151
154
  - app/assets/stylesheets/c80_yax/lib/loading.scss
152
155
  - app/assets/stylesheets/c80_yax/lib_custom/bootstrap_checkboxes.scss
153
156
  - app/assets/stylesheets/c80_yax_backend.scss
154
157
  - app/controllers/c80_yax/admin_data_controller.rb
155
158
  - app/controllers/c80_yax/app_controller.rb
159
+ - app/helpers/c80_yax/cats/cat_lists_helper.rb
160
+ - app/helpers/c80_yax/cats/cat_url_helper.rb
156
161
  - app/helpers/c80_yax/cats/cat_view_helper.rb
157
162
  - app/helpers/c80_yax/data_helper.rb
158
163
  - app/helpers/c80_yax/items/asterix_helper.rb
@@ -164,6 +169,7 @@ files:
164
169
  - app/helpers/c80_yax/strsubcats/props_helper.rb
165
170
  - app/helpers/c80_yax/uom_helper.rb
166
171
  - app/models/c80_yax/cat.rb
172
+ - app/models/c80_yax/color.rb
167
173
  - app/models/c80_yax/common_prop.rb
168
174
  - app/models/c80_yax/concerns/props/parsable.rb
169
175
  - app/models/c80_yax/iphoto.rb
@@ -171,6 +177,7 @@ files:
171
177
  - app/models/c80_yax/item_observer.rb
172
178
  - app/models/c80_yax/item_prop.rb
173
179
  - app/models/c80_yax/main_prop.rb
180
+ - app/models/c80_yax/mixins/cat/database.rb
174
181
  - app/models/c80_yax/mixins/item/database/props.rb
175
182
  - app/models/c80_yax/mixins/strsubcat/database/prop_names_changed.rb
176
183
  - app/models/c80_yax/mixins/strsubcat/database/props.rb
@@ -185,11 +192,18 @@ files:
185
192
  - app/uploaders/c80_yax/icat_uploader.rb
186
193
  - app/uploaders/c80_yax/iphoto_uploader.rb
187
194
  - app/views/admin/strsubcats/_view.html.erb
195
+ - app/views/c80_yax/cats/_cats_iconed_list.html.erb
188
196
  - app/views/c80_yax/items/_buy_options.html.erb
189
197
  - bin/console
190
198
  - bin/setup
191
199
  - c80_yax.gemspec
200
+ - config/locales/cat/ru.yml
201
+ - config/locales/color/ru.yml
202
+ - config/locales/item/ru.yml
203
+ - config/locales/prop_name/ru.yml
192
204
  - config/locales/ru.yml
205
+ - config/locales/strsubcat/ru.yml
206
+ - config/locales/uom/ru.yml
193
207
  - config/routes.rb
194
208
  - db/migrate/20161030061203_create_c80_yax_strsubcats.rb
195
209
  - db/migrate/20161030225354_create_c80_yax_items.rb
@@ -211,7 +225,20 @@ files:
211
225
  - db/migrate/20170621170808_create_c80_yax_join_table_prefix_props_prop_names.rb
212
226
  - db/migrate/20170622193535_create_c80_yax_vendors.rb
213
227
  - db/migrate/20170622194040_create_c80_yax_join_table_items_vendors.rb
228
+ - db/migrate/20170625175353_create_c80_yax_colors.rb
229
+ - db/migrate/20170625180000_create_c80_yax_join_table_colors_items.rb
214
230
  - db/seeds/c80_yax_01_fill_props.rb
231
+ - engines/pack/README.md
232
+ - engines/pack/app/admin/pack/suites.rb
233
+ - engines/pack/app/assets/javascripts/backend/suites.js
234
+ - engines/pack/app/assets/javascripts/packs.js.coffee
235
+ - engines/pack/app/models/pack/srow.rb
236
+ - engines/pack/app/models/pack/suite.rb
237
+ - engines/pack/config/locales/suite/ru.yml
238
+ - engines/pack/db/migrate/20170625205656_create_c80_yax_pack_suites.rb
239
+ - engines/pack/db/migrate/20170625215151_create_c80_yax_pack_srows.rb
240
+ - engines/pack/lib/pack.rb
241
+ - engines/pack/lib/pack/engine.rb
215
242
  - lib/c80_yax.rb
216
243
  - lib/c80_yax/engine.rb
217
244
  - lib/c80_yax/strsubcat_runtime_tables.rb