diff --git a/app/assets/javascripts/supplier/app/application.js.coffee b/app/assets/javascripts/supplier/app/application.js.coffee index fc3cdf0f..415ca709 100644 --- a/app/assets/javascripts/supplier/app/application.js.coffee +++ b/app/assets/javascripts/supplier/app/application.js.coffee @@ -8,3 +8,4 @@ #= require_tree . @$assets_path = '/assets/'; @EmberENV = {FEATURES: {'query-params-new': true}} +@$days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] diff --git a/app/assets/javascripts/supplier/app/components/menu-time-preview.js.coffee b/app/assets/javascripts/supplier/app/components/menu-time-preview.js.coffee new file mode 100644 index 00000000..8de3da41 --- /dev/null +++ b/app/assets/javascripts/supplier/app/components/menu-time-preview.js.coffee @@ -0,0 +1,55 @@ +App.MenuTimePreviewComponent = Ember.Component.extend + active: false + collapsed: true + preview_day: null + filter: null + preview_full_day: true + preview_minute_of_day: 1340 + classNames: 'menu-time-preview-container' + classNameBindings: ['active:active'] + actions: + openTimePreview: -> + @set 'collapsed', false + closeTimePreview: -> + #@set 'active', false + @set 'collapsed', true + activateTimePreview: -> + @set 'collapsed', true + @set 'active', true + deactivateTimePreview: -> + @set 'preview_day', null + @set 'preview_full_day', true + @set 'active', false + @set 'collapsed', true + daysContent: (-> + $days.map( (d) -> Ember.Object.create( name: d, text: t("date.day_names.#{d}")) ) + ).property() + preview_day_text: (-> + return "" unless day = @get('preview_day.text') + #day_text = tspan("date.day_names.#{day.get('name')}") + tag = "

#{day}

" + new Ember.Handlebars.SafeString(tag) + ).property('preview_day') + + preview_time_text: (-> + return "" if @get('preview_full_day') + day_minute = @get('preview_minute_of_day') + hour = Math.floor(day_minute/60) + minute = Math.floor(day_minute%60) + hour = "0#{hour}".substr(-2,2) + minute = "0#{minute}".substr(-2,2) + new Ember.Handlebars.SafeString("#{hour}:#{minute}") + ).property('preview_full_day', 'preview_minute_of_day') + hasSelection: (-> + return true if @get('preview_day') + return true unless @get('preview_full_day') + false + ).property('preview_day', 'preview_full_day') + + remoteFilter: (-> + return @set('targetObject.filter', null) unless @get('active') + filter = Ember.Object.create() + filter.set 'day', @get('preview_day.name') + filter.set 'minute_of_day', @get('preview_minute_of_day') unless @get('preview_full_day') + @set('targetObject.filter', filter) + ).observes('active', 'preview_day', 'preview_full_day', 'preview_minute_of_day') diff --git a/app/assets/javascripts/supplier/app/controllers/menu_controller.js.coffee b/app/assets/javascripts/supplier/app/controllers/menu_controller.js.coffee index ecb5febf..05f767f2 100644 --- a/app/assets/javascripts/supplier/app/controllers/menu_controller.js.coffee +++ b/app/assets/javascripts/supplier/app/controllers/menu_controller.js.coffee @@ -2,7 +2,16 @@ App.MenuController = Ember.ObjectController.extend needs: ['application'] product_code_filter: '' product_categories: (-> @store.all('product_category')).property() - sorted_product_categories: (-> @get('product_categories').sortBy('position')).property('product_categories.@each', 'product_categories.@each.position') + filter: null + sorted_product_categories: (-> + list = @get('product_categories') + if filter_day = @get('filter.day') + list = list.filterBy "active_on_#{filter_day}" + if filter_minute = @get('filter.minute_of_day') + list = list.filter (r) -> r.get('full_day') or (filter_minute > r.get('start_from') and filter_minute < r.get('end_on')) + + list.sortBy('position') + ).property('product_categories.@each', 'product_categories.@each.position', 'filter.day', 'filter.minute_of_day') product_code_filter_placeholder: t('product.code_filter.placeholder') actions: editProductCategory: (product_category)-> diff --git a/app/assets/javascripts/supplier/app/models/product_category.js.coffee b/app/assets/javascripts/supplier/app/models/product_category.js.coffee index 2b7b8844..f99d0109 100644 --- a/app/assets/javascripts/supplier/app/models/product_category.js.coffee +++ b/app/assets/javascripts/supplier/app/models/product_category.js.coffee @@ -3,13 +3,13 @@ App.ProductCategory = DS.Model.extend name: attr('string') products: DS.hasMany('product') supplier: DS.belongsTo 'supplier' - active_on_sunday: attr('boolean') - active_on_monday: attr('boolean') - active_on_tuesday: attr('boolean') - active_on_wednesday: attr('boolean') - active_on_thursday: attr('boolean') - active_on_friday: attr('boolean') - active_on_saturday: attr('boolean') + active_on_sunday: attr('boolean', defaultValue: true) + active_on_monday: attr('boolean', defaultValue: true) + active_on_tuesday: attr('boolean', defaultValue: true) + active_on_wednesday: attr('boolean', defaultValue: true) + active_on_thursday: attr('boolean', defaultValue: true) + active_on_friday: attr('boolean', defaultValue: true) + active_on_saturday: attr('boolean', defaultValue: true) full_day: attr 'boolean', defaultValue: true start_from: attr('number') end_on: attr('number') @@ -18,8 +18,7 @@ App.ProductCategory = DS.Model.extend sorted_products: (-> @get('products').sortBy('position') ).property('products.@each.position') availability_text: Ember.computed 'active_on_sunday', 'active_on_monday', 'active_on_tuesday', 'active_on_wednesday', 'active_on_thursday', 'active_on_friday', 'active_on_saturday', 'full_day', 'start_from', 'end_on', -> - days = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'] - active_days = days.filter (day)=>@get("active_on_#{day}") + active_days = $days.filter (day)=>@get("active_on_#{day}") result = "" if active_days.length < 7 result += "#{active_days.map((day) -> tspan("date.day_name.#{day}")).join(", ")} " diff --git a/app/assets/javascripts/supplier/app/templates/components/menu-time-preview.emblem b/app/assets/javascripts/supplier/app/templates/components/menu-time-preview.emblem new file mode 100644 index 00000000..f773aa85 --- /dev/null +++ b/app/assets/javascripts/supplier/app/templates/components/menu-time-preview.emblem @@ -0,0 +1,22 @@ +if collapsed + if active + .menu-time-preview-active-panel{action "openTimePreview"} + = preview_day_text + = preview_time_text + else + a.open-time-preview-handle{action "openTimePreview"}: span +else + .menu-time-preview-selection-container + a.close-time-preview-handle{action "closeTimePreview"}: span + h4= t 'product_category.time_preview.title' + = view "select" content=daysContent optionValuePath="content.value" optionLabelPath="content.text" selection=preview_day prompt=" -- " + br + = view 'boolean-button' value=preview_full_day reverse=true text_path="product_category.time_preview.active_at" + unless preview_full_day + = view "select-minute-of-day" value=preview_minute_of_day + hr + if active + a.deactivate-time-preview-button{action "deactivateTimePreview"}= t 'product_category.time_preview.deactivate_button' + else + if hasSelection + a.activate-time-preview-button{action "activateTimePreview"}= t 'product_category.time_preview.activate_button' diff --git a/app/assets/javascripts/supplier/app/templates/menu.emblem b/app/assets/javascripts/supplier/app/templates/menu.emblem index 527a6c26..fffe2035 100644 --- a/app/assets/javascripts/supplier/app/templates/menu.emblem +++ b/app/assets/javascripts/supplier/app/templates/menu.emblem @@ -1,3 +1,4 @@ += menu-time-preview .row: .small-12.columns .products-menu-filters-container = input value=product_code_filter type="search" placeholder=product_code_filter_placeholder diff --git a/app/assets/javascripts/supplier/app/views/form_elements/select_minute_of_day_view.js.coffee b/app/assets/javascripts/supplier/app/views/form_elements/select_minute_of_day_view.js.coffee index dc5731a1..d66fd3be 100644 --- a/app/assets/javascripts/supplier/app/views/form_elements/select_minute_of_day_view.js.coffee +++ b/app/assets/javascripts/supplier/app/views/form_elements/select_minute_of_day_view.js.coffee @@ -1,13 +1,17 @@ App.SelectMinuteOfDayView = Ember.View.extend templateName: "form_elements/select_minute_of_day" classNameBindings: ['rounded:round'] - hours_list: [0..24] - minutes_list: [0..60] - hour: Ember.computed 'value', (a,b,c)-> + hours_list: [0..24].map (n) -> "0#{n}".substr(-2,2) + minutes_list: [0..60].map (n) -> "0#{n}".substr(-2,2) + hour: Ember.computed 'value', (attribute, setValue)-> if arguments.length > 1 - @set 'value', 60*b + (@get('minute') || 0) - Math.floor (@get('value') || 0)/60 - minute: Ember.computed 'value', (a,b,c)-> + minute = if @get('minute') then parseInt(@get('minute')) else 0 + @set 'value', 60*parseInt(setValue) + minute + number = Math.floor (@get('value') || 0)/60 + "0#{number}".substr(-2,2) + minute: Ember.computed 'value', (attribute, setValue)-> if arguments.length > 1 - @set 'value', 60*(@get('hour')||0) + b - Math.floor @get('value')%60 + hour = if @get('hour') then parseInt(@get('hour')) else 0 + @set 'value', 60*hour + parseInt(setValue) + number = Math.floor @get('value')%60 + "0#{number}".substr(-2,2) diff --git a/app/assets/javascripts/supplier/foundation1/application.js.erb b/app/assets/javascripts/supplier/foundation1/application.js.erb index db1c14e2..1cc2f17b 100644 --- a/app/assets/javascripts/supplier/foundation1/application.js.erb +++ b/app/assets/javascripts/supplier/foundation1/application.js.erb @@ -23,7 +23,6 @@ $.extend($translations.en, <%= I18n.t('supplier', locale: :en).to_json %>); $.extend($translations.nl, <%= I18n.t('supplier', locale: :nl).to_json %>); String.prototype.capitalize = function() { return this.charAt(0).toUpperCase() + this.slice(1); } - window.time_zones = <%= ActiveSupport::TimeZone.all.map{|tz| {name: tz.name, formatted: "GMT#{tz.formatted_offset} #{tz.name}"}}.to_json.html_safe %>; window.countries = <%= IsoCountryCodes.all.map{|cc| {name: cc.name}}.to_json.html_safe %>; diff --git a/app/assets/stylesheets/supplier/foundation1/components/_menu_products_time_preview.css.sass b/app/assets/stylesheets/supplier/foundation1/components/_menu_products_time_preview.css.sass new file mode 100644 index 00000000..8b00bac3 --- /dev/null +++ b/app/assets/stylesheets/supplier/foundation1/components/_menu_products_time_preview.css.sass @@ -0,0 +1,36 @@ += time-preview-panel($bg: rgba(200,200,200,0.8)) + background-color: $bg + padding: 7px + border: 1px solid #777 + border-left-size: 0 + border-bottom-right-radius: 8px + border-top-right-radius: 8px +.menu-time-preview-container + position: fixed + top: 30% + left: 0 + z-index: 9056 + .button + margin: 0 + .open-time-preview-handle + +time-preview-panel() + span + @extend .fa, .fa-2x, .fa-calendar + .close-time-preview-handle + float: right + color: $warning-color + span + @extend .fa, .fa-lg, .fa-times + .menu-time-preview-selection-container + min-width: 200px + +time-preview-panel() + .activate-time-preview-button + +button() + margin: 0 + .deactivate-time-preview-button + +button() + margin: 0 + + .menu-time-preview-active-panel + +time-preview-panel($bg: rgba(199, 255, 176, 0.8)) + diff --git a/app/assets/stylesheets/supplier/foundation1/components/_products_menu.css.sass b/app/assets/stylesheets/supplier/foundation1/components/_products_menu.css.sass index b77615ed..566a02d6 100644 --- a/app/assets/stylesheets/supplier/foundation1/components/_products_menu.css.sass +++ b/app/assets/stylesheets/supplier/foundation1/components/_products_menu.css.sass @@ -53,6 +53,7 @@ margin-top: -5px background-color: #ccc padding: 5px + z-index: 722 .highlight text-decoration: underline font-weight: bold diff --git a/config/locales/supplier.en.yml b/config/locales/supplier.en.yml index b13e7349..2d3039b8 100644 --- a/config/locales/supplier.en.yml +++ b/config/locales/supplier.en.yml @@ -139,6 +139,11 @@ en: friday: F saturday: S new_button: Add ${models.product_category} + time_preview: + title: Preview ${models.plural.product_category|downcase} + active_at: Active on + activate_button: Activate preview + deactivate_button: Stop preview modal: active_between: top: Active between diff --git a/config/locales/supplier.nl.yml b/config/locales/supplier.nl.yml index 928dd1f7..13744084 100644 --- a/config/locales/supplier.nl.yml +++ b/config/locales/supplier.nl.yml @@ -137,6 +137,11 @@ nl: friday: V saturday: Z new_button: ${models.product_category} toevoegen + time_preview: + title: Preview ${models.plural.product_category|downcase} + active_at: Actief om + activate_button: Activeer preview + deactivate_button: Stop preview modal: active_between: top: Actief tussen