c80_yax 0.1.0.4 → 0.1.0.5

Sign up to get free protection for your applications and to get access to all the features.
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