workarea-admin 3.5.6 → 3.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/workarea/admin/modules/datetimepicker_fields.js +4 -2
- data/app/assets/javascripts/workarea/admin/templates/datetime_picker.jst.ejs +4 -4
- data/app/controllers/workarea/admin/application_controller.rb +1 -1
- data/app/view_models/workarea/admin/pricing_sku_view_model.rb +3 -3
- data/app/views/workarea/admin/pricing_skus/_cards.html.haml +7 -7
- data/app/views/workarea/admin/pricing_skus/edit.html.haml +5 -5
- data/app/views/workarea/admin/pricing_skus/index.html.haml +2 -0
- data/app/views/workarea/admin/pricing_skus/new.html.haml +9 -6
- data/app/views/workarea/admin/reports/timeline.html.haml +1 -1
- data/app/views/workarea/admin/users/index.html.haml +3 -1
- data/test/integration/workarea/admin/index_tracking_integration_test.rb +21 -0
- data/test/integration/workarea/admin/jump_to_integration_test.rb +16 -0
- data/test/view_models/workarea/admin/pricing_sku_view_model_test.rb +12 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a50c0890b678de1a3775d9227c9a1cf3a9c2a874e933342d986c943937d9b369
|
4
|
+
data.tar.gz: 0d30f205a6b061caa140360efdc87ebc9bc580a1673d09fb256a7dfc5a70b501
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04c7943314cf9a6fc8ffe116bbdd0f6d15ccfa0f13f55e037869106593759a03d70e7554f1d898d9c9e740a8602722de9383bf067427d59a1f7ad56b6d2d3085
|
7
|
+
data.tar.gz: b305c1426413775da437f2887b25f42d8c4da83c75b4fbb32cf6a19bd05c1949b06425d25cc30feaeb7b2db35ecc64c6daef6ad50264d7c8a7b81a5a32ade014
|
@@ -101,11 +101,13 @@ WORKAREA.registerModule('datetimepickerFields', (function () {
|
|
101
101
|
},
|
102
102
|
|
103
103
|
injectUI = function($input) {
|
104
|
-
var
|
104
|
+
var required = !_.isEmpty($input.attr('required')) ? 'required' : '',
|
105
|
+
placeholder = JST['workarea/admin/templates/datetime_picker']({
|
105
106
|
id: $input.attr('id'),
|
106
107
|
initialDateTime: parseDate($input),
|
107
108
|
fieldSuffixes: WORKAREA.config.datetimepickerFields.fieldSuffixes,
|
108
|
-
name: $input.attr('id')
|
109
|
+
name: $input.attr('id'),
|
110
|
+
required: required
|
109
111
|
});
|
110
112
|
|
111
113
|
// Prevents UI being injected twice on browser back
|
@@ -4,13 +4,13 @@
|
|
4
4
|
<div class="grid__cell grid__cell--50-at-medium">
|
5
5
|
<div class='property'>
|
6
6
|
<label for="<%= name + fieldSuffixes.date %>" class='property__name'><%= I18n.t('workarea.admin.js.datetime_picker.date') %></label>
|
7
|
-
<input type="text" name="<%= name + fieldSuffixes.date %>" id="<%= name + fieldSuffixes.date %>" class="text-box" data-datetimepicker-field-date-input='' placeholder='YYYY-MM-DD' pattern='^\d{4}-\d{2}-\d{2}$' />
|
7
|
+
<input type="text" name="<%= name + fieldSuffixes.date %>" id="<%= name + fieldSuffixes.date %>" class="text-box" data-datetimepicker-field-date-input='' placeholder='YYYY-MM-DD' pattern='^\d{4}-\d{2}-\d{2}$' <%= required %> />
|
8
8
|
</div>
|
9
9
|
</div>
|
10
10
|
<div class="grid__cell grid__cell--50-at-medium">
|
11
11
|
<div class='property'>
|
12
12
|
<label for="<%= name + fieldSuffixes.hours %>" class='property__name'><%= I18n.t('workarea.admin.js.datetime_picker.time') %></label>
|
13
|
-
<select id="<%= name + fieldSuffixes.hours %>" name="<%= name + fieldSuffixes.hours %>"
|
13
|
+
<select id="<%= name + fieldSuffixes.hours %>" name="<%= name + fieldSuffixes.hours %>" <%= required %>>
|
14
14
|
<% for ( var i = 1; i <= 12; i++ ) {
|
15
15
|
var selected = ( initialDateTime.hours == i ) ? 'selected' : '';
|
16
16
|
%>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
<% } %>
|
19
19
|
</select>
|
20
20
|
|
21
|
-
<select id="<%= name + fieldSuffixes.minutes %>" name="<%= name + fieldSuffixes.minutes %>"
|
21
|
+
<select id="<%= name + fieldSuffixes.minutes %>" name="<%= name + fieldSuffixes.minutes %>" <%= required %>>
|
22
22
|
<% for ( var i = 0; i < 60; i++ ) {
|
23
23
|
if (i < 10) { i = '0' + i }
|
24
24
|
var selected = ( initialDateTime.minutes == i ) ? 'selected' : '';
|
@@ -27,7 +27,7 @@
|
|
27
27
|
<% } %>
|
28
28
|
</select>
|
29
29
|
|
30
|
-
<select id="<%= name + fieldSuffixes.ampm %>" name="<%= name + fieldSuffixes.ampm %>"
|
30
|
+
<select id="<%= name + fieldSuffixes.ampm %>" name="<%= name + fieldSuffixes.ampm %>" <%= required %>>
|
31
31
|
<option value="am" <%= initialDateTime.ampm === 'am' ? 'selected' : '' %> >am</option>
|
32
32
|
<option value="pm" <%= initialDateTime.ampm === 'pm' ? 'selected' : '' %> >pm</option>
|
33
33
|
</select>
|
@@ -30,14 +30,14 @@ module Workarea
|
|
30
30
|
#
|
31
31
|
# @return [Money]
|
32
32
|
def min_price
|
33
|
-
sell_prices.first
|
33
|
+
sell_prices.first&.sell
|
34
34
|
end
|
35
35
|
|
36
36
|
# The highest regular price set on this SKU.
|
37
37
|
#
|
38
38
|
# @return [Money]
|
39
39
|
def max_price
|
40
|
-
sell_prices.last
|
40
|
+
sell_prices.last&.sell
|
41
41
|
end
|
42
42
|
|
43
43
|
# Show a price range if the `min_price` and `max_price` are not
|
@@ -45,7 +45,7 @@ module Workarea
|
|
45
45
|
#
|
46
46
|
# @return [Boolean]
|
47
47
|
def show_range?
|
48
|
-
min_price != max_price
|
48
|
+
min_price.present? && max_price.present? && min_price != max_price
|
49
49
|
end
|
50
50
|
|
51
51
|
# This SKU is considered "on sale" if it is marked as such, or if
|
@@ -14,25 +14,25 @@
|
|
14
14
|
%li
|
15
15
|
%strong #{t('workarea.admin.fields.tax_code')}:
|
16
16
|
= model.tax_code.presence || '(none)'
|
17
|
-
%li
|
18
|
-
%strong #{t('workarea.admin.fields.msrp')}:
|
19
|
-
- if model.msrp.blank?
|
20
|
-
= t('workarea.admin.cards.attributes.no_value')
|
21
|
-
- else
|
22
|
-
= number_to_currency model.msrp
|
23
17
|
%li
|
24
18
|
%strong #{t('workarea.admin.fields.on_sale')}:
|
25
19
|
= model.on_sale?.to_s.titleize
|
26
20
|
%li
|
27
21
|
%strong #{t('workarea.admin.fields.discountable')}:
|
28
22
|
= model.discountable?.to_s.titleize
|
23
|
+
%li
|
24
|
+
%strong #{t('workarea.admin.fields.msrp')}:
|
25
|
+
- if model.msrp.blank?
|
26
|
+
= t('workarea.admin.cards.attributes.no_value')
|
27
|
+
- else
|
28
|
+
= number_to_currency model.msrp
|
29
|
+
= append_partials('admin.pricing_sku_attributes_card', pricing_sku: model)
|
29
30
|
%li
|
30
31
|
%strong= t('workarea.admin.fields.updated_at')
|
31
32
|
#{local_time_ago(model.updated_at)}
|
32
33
|
%li
|
33
34
|
%strong= t('workarea.admin.fields.created_at')
|
34
35
|
#{local_time_ago(model.created_at)}
|
35
|
-
= append_partials('admin.pricing_sku_attributes_card', pricing_sku: model)
|
36
36
|
|
37
37
|
= link_to edit_pricing_sku_path(model), class: 'card__button' do
|
38
38
|
%span.button.button--small= t('workarea.admin.cards.attributes.button')
|
@@ -31,11 +31,6 @@
|
|
31
31
|
= label_tag 'sku[tax_code]', t('workarea.admin.fields.tax_code'), class: 'property__name'
|
32
32
|
= text_field_tag 'sku[tax_code]', @sku.tax_code, class: 'text-box'
|
33
33
|
|
34
|
-
.property
|
35
|
-
= label_tag 'sku_msrp', t('workarea.admin.fields.msrp'), class: 'property__name'
|
36
|
-
= currency_symbol
|
37
|
-
= text_field_tag 'sku[msrp]', @sku.msrp, class: 'text-box text-box--small'
|
38
|
-
|
39
34
|
.grid
|
40
35
|
.grid__cell.grid__cell--50.grid__cell--25-at-medium
|
41
36
|
.property
|
@@ -47,6 +42,11 @@
|
|
47
42
|
%span.property__name= t('workarea.admin.fields.discountable')
|
48
43
|
= toggle_button_for 'sku[discountable]', @sku.discountable?, title_true: t('workarea.admin.pricing_skus.allow_discounting'), title_false: t('workarea.admin.pricing_skus.disallow_discounting')
|
49
44
|
|
45
|
+
.property
|
46
|
+
= label_tag 'sku_msrp', t('workarea.admin.fields.msrp'), class: 'property__name'
|
47
|
+
= currency_symbol
|
48
|
+
= text_field_tag 'sku[msrp]', @sku.msrp, class: 'text-box text-box--small'
|
49
|
+
|
50
50
|
= append_partials('admin.pricing_sku_fields', sku: @sku)
|
51
51
|
|
52
52
|
.grid.grid--huge
|
@@ -46,6 +46,7 @@
|
|
46
46
|
= check_box_tag 'select_all', nil, false, id: 'select_all', class: 'checkbox__input', data: { bulk_action_select_all: '' }
|
47
47
|
= label_tag 'select_all', t('workarea.admin.bulk_actions.select_all'), class: 'checkbox__label'
|
48
48
|
%th= t('workarea.admin.fields.sku')
|
49
|
+
= append_partials('admin.pricing_skus_additional_field_labels')
|
49
50
|
%th.align-right= t('workarea.admin.fields.msrp')
|
50
51
|
%th.align-right= t('workarea.admin.fields.sell_price')
|
51
52
|
%th.align-center= t('workarea.admin.fields.on_sale')
|
@@ -61,6 +62,7 @@
|
|
61
62
|
%td
|
62
63
|
= link_to result.id, pricing_sku_path(result)
|
63
64
|
= upcoming_changesets_icon_for(result)
|
65
|
+
= append_partials('admin.pricing_skus_additional_fields', result: result)
|
64
66
|
%td.align-right= number_to_currency result.msrp
|
65
67
|
%td.align-right= result.sell_price
|
66
68
|
%td.align-center= t("workarea.admin.#{result.on_sale?}")
|
@@ -26,13 +26,16 @@
|
|
26
26
|
= label_tag 'sku[tax_code]', t('workarea.admin.fields.tax_code'), class: 'property__name'
|
27
27
|
= text_field_tag 'sku[tax_code]', @sku.tax_code, class: 'text-box', placeholder: t('workarea.admin.pricing_skus.tax_code_placeholder')
|
28
28
|
|
29
|
-
.
|
30
|
-
|
31
|
-
|
29
|
+
.grid
|
30
|
+
.grid__cell.grid__cell--50.grid__cell--25-at-medium
|
31
|
+
.property
|
32
|
+
%span.property__name= t('workarea.admin.fields.on_sale')
|
33
|
+
= toggle_button_for 'sku[on_sale]', @sku.on_sale?, title_true: t('workarea.admin.pricing_skus.on_sale'), title_false: t('workarea.admin.pricing_skus.not_on_sale')
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
.grid__cell.grid__cell--50.grid__cell--25-at-medium
|
36
|
+
.property
|
37
|
+
%span.property__name= t('workarea.admin.fields.discountable')
|
38
|
+
= toggle_button_for 'sku[discountable]', @sku.discountable?, title_true: t('workarea.admin.pricing_skus.allow_discounting'), title_false: t('workarea.admin.pricing_skus.disallow_discounting')
|
36
39
|
|
37
40
|
.property
|
38
41
|
= label_tag 'sku_msrp', t('workarea.admin.fields.msrp'), class: 'property__name'
|
@@ -45,7 +45,7 @@
|
|
45
45
|
= text_field_tag 'custom_event[name]', nil, class: 'text-box', required: true
|
46
46
|
.property
|
47
47
|
.box.box--rounded.box--padded
|
48
|
-
= hidden_field_tag 'custom_event[occurred_at]', nil, data: { datetimepicker_field: { inline: true } }
|
48
|
+
= hidden_field_tag 'custom_event[occurred_at]', nil, required: true, data: { datetimepicker_field: { inline: true } }
|
49
49
|
.align-center
|
50
50
|
= submit_tag t('workarea.admin.reports.timeline.add_custom_event'), class: 'button button--create button--small'
|
51
51
|
|
@@ -2,11 +2,13 @@
|
|
2
2
|
|
3
3
|
.view
|
4
4
|
.view__header
|
5
|
-
.grid.grid--middle.grid--
|
5
|
+
.grid.grid--middle.grid--right
|
6
6
|
.grid__cell.grid__cell--50
|
7
7
|
.view__heading
|
8
8
|
= link_to "↑ #{t('workarea.admin.users.index.dashboard_link')}", people_dashboards_path, class: 'view__dashboard-button'
|
9
9
|
%h1= t('workarea.admin.users.index.title')
|
10
|
+
.grid__cell.grid__cell--25
|
11
|
+
= append_partials('admin.user_index_aux_navigation')
|
10
12
|
|
11
13
|
.view__container
|
12
14
|
.browsing-controls.browsing-controls--with-divider.browsing-controls--center{ class: ('browsing-controls--filters-displayed' unless @search.toggle_facets?) }
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module Workarea
|
4
|
+
module Admin
|
5
|
+
class IndexTrackingIntegrationTest < Workarea::IntegrationTest
|
6
|
+
include Admin::IntegrationTest
|
7
|
+
|
8
|
+
def test_track_index_filters
|
9
|
+
get admin.pricing_skus_path
|
10
|
+
|
11
|
+
assert_equal(admin.pricing_skus_path, session[:last_index_path])
|
12
|
+
assert_no_changes -> { session[:last_index_path] } do
|
13
|
+
get admin.catalog_products_path(format: :json)
|
14
|
+
end
|
15
|
+
assert_no_changes -> { session[:last_index_path] } do
|
16
|
+
get admin.catalog_products_path, xhr: true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -234,6 +234,22 @@ module Workarea
|
|
234
234
|
results = JSON.parse(response.body)['results']
|
235
235
|
assert_equal(0, results.length)
|
236
236
|
end
|
237
|
+
|
238
|
+
def test_limiting_results_by_type
|
239
|
+
Workarea.config.jump_to_type_limit = 2
|
240
|
+
Workarea.config.jump_to_results_per_type = 2
|
241
|
+
|
242
|
+
5.times { |i| create_product(name: "Test Product #{i}") }
|
243
|
+
5.times { |i| create_category(name: "Test Category #{i}") }
|
244
|
+
|
245
|
+
get admin.jump_to_path(q: 'test')
|
246
|
+
results = JSON.parse(response.body)['results']
|
247
|
+
|
248
|
+
assert_equal(
|
249
|
+
%w(Products Products Categories Categories),
|
250
|
+
results.map { |r| r['type'] }
|
251
|
+
)
|
252
|
+
end
|
237
253
|
end
|
238
254
|
end
|
239
255
|
end
|
@@ -30,6 +30,10 @@ module Workarea
|
|
30
30
|
@sku.update!(on_sale: false)
|
31
31
|
|
32
32
|
assert_equal(3.to_m, @sku.min_price)
|
33
|
+
|
34
|
+
@sku.prices.destroy_all
|
35
|
+
|
36
|
+
assert_nil(@sku.min_price)
|
33
37
|
end
|
34
38
|
|
35
39
|
def test_max_price
|
@@ -38,6 +42,10 @@ module Workarea
|
|
38
42
|
@sku.update!(on_sale: false)
|
39
43
|
|
40
44
|
assert_equal(4.to_m, @sku.max_price)
|
45
|
+
|
46
|
+
@sku.prices.destroy_all
|
47
|
+
|
48
|
+
assert_nil(@sku.min_price)
|
41
49
|
end
|
42
50
|
|
43
51
|
def test_show_range?
|
@@ -46,6 +54,10 @@ module Workarea
|
|
46
54
|
@sku.prices.last.destroy!
|
47
55
|
|
48
56
|
refute(@sku.show_range?)
|
57
|
+
|
58
|
+
@sku.prices.destroy_all
|
59
|
+
|
60
|
+
refute(@sku.show_range?)
|
49
61
|
end
|
50
62
|
|
51
63
|
def test_on_sale?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: workarea-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Crouse
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-03-
|
11
|
+
date: 2020-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: workarea-core
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.5.
|
19
|
+
version: 3.5.7
|
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: 3.5.
|
26
|
+
version: 3.5.7
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: workarea-storefront
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.5.
|
33
|
+
version: 3.5.7
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.5.
|
40
|
+
version: 3.5.7
|
41
41
|
description: Provides site administration functionality for the Workarea Commerce
|
42
42
|
Platform.
|
43
43
|
email:
|
@@ -1334,6 +1334,7 @@ files:
|
|
1334
1334
|
- test/integration/workarea/admin/help_articles_integration_test.rb
|
1335
1335
|
- test/integration/workarea/admin/impersonations_integration_test.rb
|
1336
1336
|
- test/integration/workarea/admin/import_taxes_integration_test.rb
|
1337
|
+
- test/integration/workarea/admin/index_tracking_integration_test.rb
|
1337
1338
|
- test/integration/workarea/admin/inventory_skus_integration_test.rb
|
1338
1339
|
- test/integration/workarea/admin/jump_to_integration_test.rb
|
1339
1340
|
- test/integration/workarea/admin/menus_integration_test.rb
|