diff --git a/Gemfile b/Gemfile index 9b116430..3be7cf8c 100644 --- a/Gemfile +++ b/Gemfile @@ -9,11 +9,10 @@ gem "rails", '~> 3.2.9' group :assets do gem 'sass-rails', '~> 3.2.3' gem 'coffee-rails', '~> 3.2.1' - + gem 'less-rails' + gem 'uglifier', '>= 1.0.3' # See https://github.com/sstephenson/execjs#readme for more supported runtimes gem 'therubyracer', platforms: :ruby - - gem 'uglifier', '>= 1.0.3' end gem 'jquery-rails' @@ -27,8 +26,9 @@ gem 'mysql2' gem 'prawn' gem 'haml-rails' gem 'kaminari' -gem 'client_side_validations' gem 'simple_form' +gem 'client_side_validations' +gem 'client_side_validations-simple_form' gem 'inherited_resources' gem 'localize_input', git: "git://github.com/bennibu/localize_input.git" gem 'wikicloth' @@ -44,7 +44,7 @@ gem 'resque' gem 'whenever', require: false # For defining cronjobs, see config/schedule.rb group :production do - gem 'exception_notification', require: 'exception_notifier' + gem 'exception_notification' end group :development do diff --git a/Gemfile.lock b/Gemfile.lock index 8dddd96e..0370d43d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -22,12 +22,12 @@ GEM remote: https://rubygems.org/ specs: Ascii85 (1.0.2) - actionmailer (3.2.13) - actionpack (= 3.2.13) - mail (~> 2.5.3) - actionpack (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) + actionmailer (3.2.14) + actionpack (= 3.2.14) + mail (~> 2.5.4) + actionpack (3.2.14) + activemodel (= 3.2.14) + activesupport (= 3.2.14) builder (~> 3.0.0) erubis (~> 2.7.0) journey (~> 1.0.4) @@ -35,31 +35,33 @@ GEM rack-cache (~> 1.2) rack-test (~> 0.6.1) sprockets (~> 2.2.1) - activemodel (3.2.13) - activesupport (= 3.2.13) + activemodel (3.2.14) + activesupport (= 3.2.14) builder (~> 3.0.0) - activerecord (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) + activerecord (3.2.14) + activemodel (= 3.2.14) + activesupport (= 3.2.14) arel (~> 3.0.2) tzinfo (~> 0.3.29) - activeresource (3.2.13) - activemodel (= 3.2.13) - activesupport (= 3.2.13) - activesupport (3.2.13) - i18n (= 0.6.1) + activeresource (3.2.14) + activemodel (= 3.2.14) + activesupport (= 3.2.14) + activesupport (3.2.14) + i18n (~> 0.6, >= 0.6.4) multi_json (~> 1.0) - acts_as_tree (1.2.0) + acts_as_tree (1.4.0) activerecord (>= 3.0.0) + afm (0.2.0) arel (3.0.2) - better_errors (0.2.0) + better_errors (1.0.1) coderay (>= 1.0.0) - erubis (>= 2.7.0) - binding_of_caller (0.6.8) - bootstrap-datepicker-rails (1.1.1.1) + erubis (>= 2.6.6) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + bootstrap-datepicker-rails (1.1.1.8) railties (>= 3.0) builder (3.0.4) - bullet (4.3.0) + bullet (4.6.0) uniform_notifier capistrano (2.13.5) highline @@ -77,72 +79,78 @@ GEM xpath (~> 2.0) childprocess (0.3.9) ffi (~> 1.0, >= 1.0.11) - chronic (0.9.0) - client_side_validations (3.1.4) - coderay (1.0.8) + chronic (0.10.2) + client_side_validations (3.2.6) + client_side_validations-simple_form (2.1.0) + client_side_validations (~> 3.2.5) + simple_form (~> 2.1.0) + coderay (1.1.0) coffee-rails (3.2.2) coffee-script (>= 2.2.0) railties (~> 3.2.0) coffee-script (2.2.0) coffee-script-source execjs - coffee-script-source (1.3.3) - commonjs (0.2.6) + coffee-script-source (1.6.3) + commonjs (0.2.7) daemons (1.1.9) - database_cleaner (0.7.1) + database_cleaner (1.2.0) + debug_inspector (0.0.2) diff-lcs (1.2.4) erubis (2.7.0) eventmachine (1.0.3) - exception_notification (2.6.1) + exception_notification (4.0.1) actionmailer (>= 3.0.4) - execjs (1.4.0) - multi_json (~> 1.0) + activesupport (>= 3.0.4) + execjs (2.0.2) expression_parser (0.9.0) factory_girl (4.2.0) activesupport (>= 3.0.0) factory_girl_rails (4.2.1) factory_girl (~> 4.2.0) railties (>= 3.0.0) - faker (1.1.2) + faker (1.2.0) i18n (~> 0.5) ffi (1.9.0) - haml (3.1.7) - haml-rails (0.3.5) + haml (4.0.3) + tilt + haml-rails (0.4) actionpack (>= 3.1, < 4.1) activesupport (>= 3.1, < 4.1) - haml (~> 3.1) + haml (>= 3.1, < 4.1) railties (>= 3.1, < 4.1) - has_scope (0.5.1) - hashery (2.0.1) + has_scope (0.6.0.rc) + actionpack (>= 3.2, < 5) + activesupport (>= 3.2, < 5) + hashery (2.1.1) highline (1.6.19) hike (1.2.3) - i18n (0.6.1) + i18n (0.6.5) i18n-spec (0.4.0) iso - inherited_resources (1.3.1) - has_scope (~> 0.5.0) - responders (~> 0.6) + inherited_resources (1.4.1) + has_scope (~> 0.6.0.rc) + responders (~> 1.0.0.rc) iso (0.2.0) i18n journey (1.0.4) - jquery-rails (2.1.3) - railties (>= 3.1.0, < 5.0) - thor (~> 0.14) - json (1.7.7) + jquery-rails (3.0.4) + railties (>= 3.0, < 5.0) + thor (>= 0.14, < 2.0) + json (1.8.0) kaminari (0.14.1) actionpack (>= 3.0.0) activesupport (>= 3.0.0) - less (2.2.2) - commonjs (~> 0.2.6) - less-rails (2.2.3) + less (2.4.0) + commonjs (~> 0.2.7) + less-rails (2.4.2) actionpack (>= 3.1) - less (~> 2.2.0) - libv8 (3.3.10.4) - mail (2.5.3) - i18n (>= 0.4.0) + less (~> 2.4.0) + libv8 (3.16.14.3) + mail (2.5.4) mime-types (~> 1.16) treetop (~> 1.4.8) - mailcatcher (0.5.11) + mailcatcher (0.5.12) activesupport (~> 3.0) eventmachine (~> 1.0.0) haml (>= 3.1, < 5) @@ -156,24 +164,26 @@ GEM activerecord (~> 3.1) activesupport (~> 3.1) polyamorous (~> 0.5.0) - mime-types (1.21) + mime-types (1.25) mini_portile (0.5.1) mono_logger (1.1.0) - multi_json (1.7.9) - mysql2 (0.3.11) - net-scp (1.1.1) + multi_json (1.8.1) + mysql2 (0.3.13) + net-scp (1.1.2) net-ssh (>= 2.6.5) net-sftp (2.1.2) net-ssh (>= 2.6.5) - net-ssh (2.6.7) + net-ssh (2.7.0) net-ssh-gateway (1.2.0) net-ssh (>= 2.6.5) nokogiri (1.6.0) mini_portile (~> 0.5.0) - pdf-reader (1.2.0) + pdf-reader (1.3.3) Ascii85 (~> 1.0.0) + afm (~> 0.2.0) hashery (~> 2.0) ruby-rc4 + ttfunk polyamorous (0.5.0) activerecord (~> 3.0) polyglot (0.3.3) @@ -191,14 +201,14 @@ GEM rack rack-test (0.6.2) rack (>= 1.0) - rails (3.2.13) - actionmailer (= 3.2.13) - actionpack (= 3.2.13) - activerecord (= 3.2.13) - activeresource (= 3.2.13) - activesupport (= 3.2.13) + rails (3.2.14) + actionmailer (= 3.2.14) + actionpack (= 3.2.14) + activerecord (= 3.2.14) + activeresource (= 3.2.14) + activesupport (= 3.2.14) bundler (~> 1.0) - railties (= 3.2.13) + railties (= 3.2.14) rails-assets-listjs (0.2.0.beta.4) railties (>= 3.1) rails-i18n (3.0.0) @@ -206,31 +216,32 @@ GEM rails (>= 3.0.0, < 4.0.0) rails-settings-cached (0.2.4) rails (>= 3.0.0) - railties (3.2.13) - actionpack (= 3.2.13) - activesupport (= 3.2.13) + railties (3.2.14) + actionpack (= 3.2.14) + activesupport (= 3.2.14) rack-ssl (~> 1.3.2) rake (>= 0.8.7) rdoc (~> 3.4) thor (>= 0.14.6, < 2.0) - rake (10.0.3) + rake (10.1.0) rdoc (3.12.2) json (~> 1.4) - redis (3.0.4) + redis (3.0.5) redis-namespace (1.3.1) redis (~> 3.0.0) - responders (0.9.3) - railties (~> 3.1) - resque (1.24.1) + ref (1.0.5) + responders (1.0.0) + railties (>= 3.2, < 5) + resque (1.25.1) mono_logger (~> 1.0) multi_json (~> 1.0) redis-namespace (~> 1.2) sinatra (>= 0.9.2) vegas (~> 0.1.2) - rspec-core (2.14.2) - rspec-expectations (2.14.0) + rspec-core (2.14.5) + rspec-expectations (2.14.3) diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.14.1) + rspec-mocks (2.14.3) rspec-rails (2.14.0) actionpack (>= 3.0) activesupport (>= 3.0) @@ -241,22 +252,22 @@ GEM ruby-prof (0.13.0) ruby-rc4 (0.1.5) rubyzip (0.9.9) - sass (3.2.1) - sass-rails (3.2.5) + sass (3.2.12) + sass-rails (3.2.6) railties (~> 3.2.0) sass (>= 3.1.10) tilt (~> 1.3) - select2-rails (3.4.2) - sass-rails + select2-rails (3.5.0) thor (~> 0.14) selenium-webdriver (2.35.1) childprocess (>= 0.2.5) multi_json (~> 1.0) rubyzip (< 1.0.0) websocket (~> 1.0.4) - simple-navigation (3.9.0) + simple-navigation (3.11.0) activesupport (>= 2.3.2) - simple-navigation-bootstrap (0.0.4) + simple-navigation-bootstrap (1.0.0) + railties (>= 3.1) simple-navigation (>= 3.7.0) simple_form (2.1.0) actionpack (~> 3.0) @@ -265,10 +276,10 @@ GEM multi_json (~> 1.0) simplecov-html (~> 0.7.1) simplecov-html (0.7.1) - sinatra (1.3.6) + sinatra (1.4.3) rack (~> 1.4) - rack-protection (~> 1.3) - tilt (~> 1.3, >= 1.3.3) + rack-protection (~> 1.4) + tilt (~> 1.3, >= 1.3.4) skinny (0.2.3) eventmachine (~> 1.0.0) thin (~> 1.5.0) @@ -277,33 +288,34 @@ GEM multi_json (~> 1.0) rack (~> 1.0) tilt (~> 1.1, != 1.3.0) - sqlite3 (1.3.6) - therubyracer (0.10.2) - libv8 (~> 3.3.10) + sqlite3 (1.3.8) + therubyracer (0.12.0) + libv8 (~> 3.16.14.0) + ref thin (1.5.1) daemons (>= 1.0.9) eventmachine (>= 0.12.6) rack (>= 1.0.0) - thor (0.17.0) + thor (0.18.1) tilt (1.4.1) - treetop (1.4.12) + treetop (1.4.15) polyglot polyglot (>= 0.3.1) ttfunk (1.0.3) - twitter-bootstrap-rails (2.1.3) + twitter-bootstrap-rails (2.2.8) actionpack (>= 3.1) - less-rails (~> 2.2.3) + execjs + rails (>= 3.1) railties (>= 3.1) - therubyracer (~> 0.10.2) - tzinfo (0.3.37) - uglifier (1.3.0) + tzinfo (0.3.38) + uglifier (2.2.1) execjs (>= 0.3.0) multi_json (~> 1.0, >= 1.0.2) - uniform_notifier (1.1.1) + uniform_notifier (1.3.0) vegas (0.1.11) rack (>= 1.0.0) websocket (1.0.7) - whenever (0.8.1) + whenever (0.8.4) activesupport (>= 2.3.4) chronic (>= 0.6.3) wikicloth (0.8.0) @@ -326,6 +338,7 @@ DEPENDENCIES capistrano-ext capybara (~> 2.1.0) client_side_validations + client_side_validations-simple_form coffee-rails (~> 3.2.1) daemons database_cleaner @@ -338,6 +351,7 @@ DEPENDENCIES inherited_resources jquery-rails kaminari + less-rails localize_input! mailcatcher meta_search diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index eb0ebb76..0517c896 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -1,5 +1,4 @@ //= require jquery -//= require jquery-ui //= require jquery_ujs //= require select2 //= require twitter/bootstrap @@ -7,12 +6,14 @@ //= require bootstrap-datepicker/core //= require bootstrap-datepicker/locales/bootstrap-datepicker.de //= require bootstrap-datepicker/locales/bootstrap-datepicker.nl +//= require bootstrap-datepicker/locales/bootstrap-datepicker.fr //= require jquery.observe_field //= require list //= require list.unlist //= require list.delay //= require list.reset //= require rails.validations +//= require rails.validations.simple_form //= require i18n //= require i18n/translations //= require_self @@ -36,19 +37,19 @@ $.fn.extend({ $(function() { // Show/Hide a specific DOM element - $('a[data-toggle-this]').live('click', function() { + $(document).on('click', 'a[data-toggle-this]', function() { $($(this).data('toggle-this')).toggle(); return false; }); // Remove this item from DOM - $('a[data-remove-this]').live('click', function() { + $(document).on('click', 'a[data-remove-this]', function() { $($(this).data('remove-this')).remove(); return false; }); // Check/Uncheck a single checkbox - $('[data-check-this]').live('click', function() { + $(document).on('click', '[data-check-this]', function() { var checkbox = $($(this).data('check-this')); checkbox.attr('checked', !checkbox.is(':checked')); highlightRow(checkbox); @@ -56,7 +57,7 @@ $(function() { }); // Check/Uncheck all checkboxes for a specific form - $('input[data-check-all]').live('click', function() { + $(document).on('click', 'input[data-check-all]', function() { var status = $(this).is(':checked'); var context = $(this).data('check-all'); var elms = $('input[type="checkbox"]', context); @@ -68,7 +69,7 @@ $(function() { }); // Submit form when changing a select menu. - $('form[data-submit-onchange] select').live('change', function() { + $(document).on('change', 'form[data-submit-onchange] select', function() { var confirmMessage = $(this).children(':selected').data('confirm'); if (confirmMessage) { if (confirm(confirmMessage)) { @@ -101,7 +102,7 @@ $(function() { }); // Remote paginations - $('div.pagination[data-remote] a').live('click', function() { + $(document).on('click', 'div.pagination[data-remote] a', function() { $.getScript($(this).attr('href')); return false; }); @@ -122,6 +123,20 @@ $(function() { // Use bootstrap datepicker for dateinput $('.datepicker').datepicker({format: 'yyyy-mm-dd', language: I18n.locale}); + + // bootstrap tooltips (for price) + // Extra options don't work when using selector, so override defaults + // https://github.com/twbs/bootstrap/issues/3875 . These can still be + // overridden per tooltip using data-placement attributes and the like. + $.extend($.fn.tooltip.defaults, { + html: true, + animation: false, + placement: 'left', + container: 'body' + }); + $(document).tooltip({ + selector: '[data-toggle~="tooltip"]', + }); // See stupidtable.js for initialization of local table sorting }); @@ -148,3 +163,5 @@ function highlightRow(checkbox) { function setHiddenId(text, li) { $('hidden_id').value = li.id; } + + diff --git a/app/assets/javascripts/bootstrap.js.coffee b/app/assets/javascripts/bootstrap.js.coffee index c9404a8e..94406798 100644 --- a/app/assets/javascripts/bootstrap.js.coffee +++ b/app/assets/javascripts/bootstrap.js.coffee @@ -1,4 +1,3 @@ jQuery -> - $("a[rel=popover]").popover() - $(".tooltip").tooltip() - $("a[rel=tooltip]").tooltip() \ No newline at end of file + $("a[rel~=popover], .has-popover").popover() + $("a[rel~=tooltip], .has-tooltip").tooltip() diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.less b/app/assets/stylesheets/bootstrap_and_overrides.css.less index cce03029..6ad25972 100644 --- a/app/assets/stylesheets/bootstrap_and_overrides.css.less +++ b/app/assets/stylesheets/bootstrap_and_overrides.css.less @@ -1,24 +1,23 @@ @import "twitter/bootstrap/bootstrap"; +@import "twitter/bootstrap/responsive"; body { padding-top: 10px; } -@import "twitter/bootstrap/responsive"; - // Set the correct sprite paths -@iconSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings.png'); -@iconWhiteSpritePath: asset-path('twitter/bootstrap/glyphicons-halflings-white.png'); +@iconSpritePath: image-url('twitter/bootstrap/glyphicons-halflings.png'); +@iconWhiteSpritePath: image-url('twitter/bootstrap/glyphicons-halflings-white.png'); // Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines) -// Note: If you use asset_path() here, your compiled boostrap_and_overrides.css will not -// have the proper paths. So for now we use the absolute path. -@fontAwesomeEotPath: '/assets/fontawesome-webfont.eot'; -@fontAwesomeWoffPath: '/assets/fontawesome-webfont.woff'; -@fontAwesomeTtfPath: '/assets/fontawesome-webfont.ttf'; -@fontAwesomeSvgPath: '/assets/fontawesome-webfont.svg'; +@fontAwesomeEotPath: asset-url('fontawesome-webfont.eot'); +@fontAwesomeEotPath_iefix: asset-url('fontawesome-webfont.eot?#iefix'); +@fontAwesomeWoffPath: asset-url('fontawesome-webfont.woff'); +@fontAwesomeTtfPath: asset-url('fontawesome-webfont.ttf'); +@fontAwesomeSvgPath: asset-url('fontawesome-webfont.svg#fontawesomeregular'); +@import 'fontawesome/font-awesome'; -// Font Awesome -@import "fontawesome"; +// Glyphicons +//@import "twitter/bootstrap/sprites.less"; // Your custom LESS stylesheets goes here // @@ -26,7 +25,7 @@ body { // you may use and inherit here // // If you'd like to override bootstrap's own variables, you can do so here as well -// See http://twitter.github.com/bootstrap/less.html for their names and documentation +// See http://twitter.github.com/bootstrap/customize.html#variables for their names and documentation // // Example: // @linkColor: #ff0000; diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index 65dc951b..d52ae698 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -98,6 +98,8 @@ class OrdersController < ApplicationController order = Order.find(params[:id]) order.finish!(@current_user) redirect_to order, notice: I18n.t('orders.finish.notice') + rescue => error + redirect_to orders_url, alert: I18n.t('errors.general_msg', :msg => error.message) end # Renders the fax-text-file diff --git a/app/models/order.rb b/app/models/order.rb index f4545d02..057c0768 100644 --- a/app/models/order.rb +++ b/app/models/order.rb @@ -155,7 +155,7 @@ class Order < ActiveRecord::Base unless finished? Order.transaction do # set new order state (needed by notify_order_finished) - update_attributes(:state => 'finished', :ends => Time.now, :updated_by => user) + update_attributes!(:state => 'finished', :ends => Time.now, :updated_by => user) # Update order_articles. Save the current article_price to keep price consistency # Also save results for each group_order_result diff --git a/app/models/ordergroup.rb b/app/models/ordergroup.rb index 6e1b65dc..0188abcf 100644 --- a/app/models/ordergroup.rb +++ b/app/models/ordergroup.rb @@ -66,7 +66,7 @@ class Ordergroup < Group end def avg_jobs_per_euro - stats[:orders_sum] != 0 ? stats[:jobs_size].to_f / stats[:orders_sum].to_f : 0 + stats[:jobs_size].to_f / stats[:orders_sum].to_f rescue 0 end # This is the ordergroup job per euro performance @@ -90,7 +90,7 @@ class Ordergroup < Group # Global average def self.avg_jobs_per_euro stats = Ordergroup.pluck(:stats) - stats.sum {|s| s[:jobs_size].to_f } / stats.sum {|s| s[:orders_sum].to_f } + stats.sum {|s| s[:jobs_size].to_f } / stats.sum {|s| s[:orders_sum].to_f } rescue 0 end def account_updated diff --git a/app/views/deliveries/_form.html.haml b/app/views/deliveries/_form.html.haml index c1702708..3e1a3b6c 100644 --- a/app/views/deliveries/_form.html.haml +++ b/app/views/deliveries/_form.html.haml @@ -61,8 +61,6 @@ return true; } }); - - enablePriceTooltips(); }); function mark_article_for_delivery(stock_article_id) { @@ -80,14 +78,6 @@ return ( 0 == $('#stock_change_stock_article_' + stock_article_id).length ); } - function enablePriceTooltips(context) { - $('[data-toggle~="tooltip"]', context).tooltip({ - animation: false, - html: true, - placement: 'left' - }); - } - = simple_form_for [@supplier, @delivery], validate: true do |f| = f.error_notification = base_errors f.object diff --git a/app/views/deliveries/add_stock_change.js.erb b/app/views/deliveries/add_stock_change.js.erb index 3e233bb6..2d01bc68 100644 --- a/app/views/deliveries/add_stock_change.js.erb +++ b/app/views/deliveries/add_stock_change.js.erb @@ -13,7 +13,6 @@ var stock_change = $( '<%= j(render(:partial => 'stock_change', :locals => {:stock_change => @stock_change})) %>' ).addClass('success'); - enablePriceTooltips(stock_change); $('input.stock-change-quantity', stock_change).val(quantity); $('#stock_changes').append(stock_change); diff --git a/app/views/deliveries/create_stock_article.js.erb b/app/views/deliveries/create_stock_article.js.erb index 5e2893a9..cb9d0159 100644 --- a/app/views/deliveries/create_stock_article.js.erb +++ b/app/views/deliveries/create_stock_article.js.erb @@ -8,7 +8,6 @@ $('div.container-fluid').prepend( var stock_article_for_adding = $( '<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article})) %>' ).addClass('success'); - enablePriceTooltips(stock_article_for_adding); $('#stock_articles_for_adding tbody').append(stock_article_for_adding); updateSort('#stock_articles_for_adding'); diff --git a/app/views/deliveries/update_stock_article.js.erb b/app/views/deliveries/update_stock_article.js.erb index ef46636d..7b2d56d6 100644 --- a/app/views/deliveries/update_stock_article.js.erb +++ b/app/views/deliveries/update_stock_article.js.erb @@ -10,7 +10,6 @@ $('div.container-fluid').prepend( var stock_article_for_adding = $( '<%= j(render(:partial => 'stock_article_for_adding', :locals => {:article => @stock_article, :delivery => @delivery})) %>' ).addClass('success'); - enablePriceTooltips(stock_article_for_adding); $('#stock_article_<%= @stock_article.id %>').replaceWith(stock_article_for_adding); updateSort('#stock_articles_for_adding'); diff --git a/app/views/finance/financial_transactions/new_collection.html.haml b/app/views/finance/financial_transactions/new_collection.html.haml index 324b118b..aaa67129 100644 --- a/app/views/finance/financial_transactions/new_collection.html.haml +++ b/app/views/finance/financial_transactions/new_collection.html.haml @@ -5,12 +5,12 @@ var ordergroup = "#{escape_javascript(render('ordergroup'))}" $(function() { - $('a[data-remove-transaction]').live('click', function() { + $(document).on('click', 'a[data-remove-transaction]', function() { $(this).parents('tr').remove(); return false; }); - $('a[data-add-transaction]').click(function() { + $(document).on('click', 'a[data-add-transaction]', function() { $('#ordergroups').append(ordergroup); return false; }); diff --git a/app/views/shared/_open_orders.html.haml b/app/views/shared/_open_orders.html.haml index ebda2730..63259520 100644 --- a/app/views/shared/_open_orders.html.haml +++ b/app/views/shared/_open_orders.html.haml @@ -2,7 +2,7 @@ %h2= t '.title' - if ordergroup.not_enough_apples? .alert - = t '.not_enough_apples' + = t '.not_enough_apples' - unless Order.open.empty? %table.table.table-striped %thead diff --git a/app/views/stock_takings/new.html.haml b/app/views/stock_takings/new.html.haml index 6e4526f9..51239ba4 100644 --- a/app/views/stock_takings/new.html.haml +++ b/app/views/stock_takings/new.html.haml @@ -1,20 +1,5 @@ - title t('.title') -- content_for :javascript do - :javascript - $(function() { - enablePriceTooltips(); - }); - - function enablePriceTooltips(context) { - $('[data-toggle~="tooltip"]', context).tooltip({ - animation: false, - html: true, - placement: 'left', - container: 'body' - }); - } - - content_for :sidebar do %p %i= t('.text_deviations', inv_link: link_to(t('.temp_inventory'), stock_articles_path)).html_safe diff --git a/app/views/suppliers/_form.haml b/app/views/suppliers/_form.haml index 09047bc1..93de2a97 100644 --- a/app/views/suppliers/_form.haml +++ b/app/views/suppliers/_form.haml @@ -1,7 +1,7 @@ = simple_form_for @supplier do |f| - if @supplier.shared_supplier - .alert.alert-success - = t 'suppliers.shared_supplier_note' + .alert.alert-info + = t 'suppliers.shared_supplier_note' = f.hidden_field :shared_supplier_id = f.input :name = f.input :address diff --git a/app/views/suppliers/show.haml b/app/views/suppliers/show.haml index 1b239775..fbc4e90a 100644 --- a/app/views/suppliers/show.haml +++ b/app/views/suppliers/show.haml @@ -4,7 +4,7 @@ .span6 - if shared_supplier = @supplier.shared_supplier .alert.alert-info - = t 'suppliers.shared_supplier_note' + = t 'suppliers.shared_supplier_note' %dl.dl-horizontal %dt= heading_helper(Supplier, :address) + ':' diff --git a/config/initializers/client_side_validations.rb b/config/initializers/client_side_validations.rb index caf18378..95ff1644 100644 --- a/config/initializers/client_side_validations.rb +++ b/config/initializers/client_side_validations.rb @@ -1,7 +1,15 @@ # ClientSideValidations Initializer -require 'client_side_validations/simple_form' if defined?(::SimpleForm) -require 'client_side_validations/formtastic' if defined?(::Formtastic) +# Uncomment to disable uniqueness validator, possible security issue +# Disabled because of possible security issue and because of bug +# https://github.com/bcardarella/client_side_validations/pull/532 +ClientSideValidations::Config.disabled_validators = [:uniqueness] + +# Uncomment to validate number format with current I18n locale +# Foodsoft is currently using localize_input which is activated on certain +# fields only, meaning we can't globally turn this on. The non-i18n number +# format is still supported - so for now keep false. +# ClientSideValidations::Config.number_format_with_locale = true # Uncomment the following block if you want each input field to have the validation messages attached. # ActionView::Base.field_error_proc = Proc.new do |html_tag, instance| diff --git a/config/initializers/load_app_config.rb b/config/initializers/load_app_config.rb index 1509536e..9501a48a 100644 --- a/config/initializers/load_app_config.rb +++ b/config/initializers/load_app_config.rb @@ -14,13 +14,15 @@ url_options.merge!({:port => FoodsoftConfig[:port]}) if FoodsoftConfig[:port] Foodsoft::Application.configure do config.action_mailer.default_url_options = url_options - if Rails.env !~ /development|test/ + if %w(production).include? Rails.env # Configuration of the exception_notification plugin # Mailadresses are set in config/app_config.yml - config.middleware.use ExceptionNotifier, - :email_prefix => FoodsoftConfig[:notification]['email_prefix'], - :sender_address => FoodsoftConfig[:notification]['sender_address'], - :exception_recipients => FoodsoftConfig[:notification]['error_recipients'] + config.middleware.use ExceptionNotification::Rack, + :email => { + :email_prefix => FoodsoftConfig[:notification]['email_prefix'], + :sender_address => FoodsoftConfig[:notification]['sender_address'], + :exception_recipients => FoodsoftConfig[:notification]['error_recipients'] + } end end diff --git a/config/locales/fr.yml b/config/locales/fr.yml index a5a52d42..5bb71604 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -507,6 +507,7 @@ fr: filename: Commande %{name}-%{date} - Répartition par cellules rows: - Nom de l'article + - Commandée - Quantité - Prix unitaire - Unités par lot diff --git a/config/locales/nl.yml b/config/locales/nl.yml index de5980bd..3f0d6378 100644 --- a/config/locales/nl.yml +++ b/config/locales/nl.yml @@ -8,10 +8,10 @@ nl: fc_price: prijs foodcoop fc_share: marge foodcoop gross_price: bruto prijs - name: - note: + name: Naam + note: Notitie price: netto prijs - supplier: + supplier: Leverancier tax: BTW unit: eenheid unit_quantity: groothandelseenheid @@ -271,7 +271,7 @@ nl: one: Er moet éen artikel bijgewerkt worden. other: Er moeten %{count} artikelen bijgewerkt worden. upload: - body: + body:

Het bestand moet een utf-8 tekstbestand zijn met als extensie '.csv'. De eerste regel wordt overgeslagen.

Velden moeten met een puntkomma (';') gescheiden worden, en tekst mag tussen dubbele aanhalingstekstens ("Tekst...") staan.

Volgende van de kolommen:

fields: season_amount: season_price: @@ -346,6 +346,7 @@ nl: filename: Bestelling %{name}-%{date} - Huishoudenslijst rows: - Artikel + - Besteld - Hoeveelheid - Prijs - Gr.Eenh. @@ -679,7 +680,7 @@ nl: remaining: nog %{remaining} title: Lopende bestellingen update: - error_general: + error_general: Er is een probleem opgetreden, de bestelling kon niet bijgewerkt worden. error_stale: In de tussentijd heeft iemand anders ook bestelt, daarom kon je bestelling niet opgeslagen worden. Sorry! notice: De bestelling is opgeslagen. helpers: @@ -717,8 +718,8 @@ nl: index: due_date_format: ! '%A %d %B' messages: - title: - view_all: + title: Nieuwste berichten + view_all: Alle berichten bekijken my_ordergroup: funds: ! '| Beschikbaar tegoed:' last_update: Laatst gewijzigd %{when} geleden @@ -748,7 +749,7 @@ nl: description: Omschrijving funds: ! 'Beschikbaar krediet:' invite: Iemand uitnodigen - people: + people: Personen search: Zoeken ... title: Mijn huishouden ordergroup_cancelled: Je bent geen lid meer van de groep %{group}. @@ -786,19 +787,25 @@ nl: write_message: Bericht schrijven invites: errors: - already_member: + already_member: is al lid van de foodcoop. modal_form: - body: - title: + body:

Hier kun je iemand die nog geen lid is uitnodigen voor de groep%{group}.

Na aanmelding is hij of zij automatisch lid van deze groep.

+ title: Iemand uitnodigen new: - action: - body: - success: + action: Uitnodiging versturen + body:

Hier kun je iemand die nog geen lid is, uitnodigen voor de groep %{group}.

+ success: Persoon is uitgenodigd. layouts: application1: title: Foodsoft - %{title} email: - footer: + footer: ! '-- + + Foodsoft: %{foodsoft} + + Foodcoop-Homepage: %{foodcoop} + + Help: %{help}' foodsoft: Foodsoft header: feedback: @@ -815,7 +822,7 @@ nl: page: Pagina %{number} login: accept_invitation: - body: + body:

Je bent uitgenodigd als lid voor foodcoop %{foodcoop} in de groep %{group}.

Als je wilt meedoen, vul dan dit formulier in.

Natuurlijk zullen we je informatie niet delen met anderen. Je kunt zelf aangeven, welke informatie voor andere leden beschikbaar is (maar beheerders hebben daar altijd toegang toe).

submit: Foodsoft account aanmaken title: Uitnodiging voor %{name} controller: @@ -837,9 +844,9 @@ nl: submit: Nieuw wachtwoord opslaan title: Nieuw wachtwoord mailer: - dateformat: + dateformat: ! '%d %b' feedback: - header: + header: ! '%{user} schreef op %{date}:' subject: foodsoft_message: footer: @@ -911,21 +918,21 @@ nl: new: list: desc: - mail: + mail: bijvoorbeeld door een email te sturen naar %{email}. subscribe: subscribe_msg: wiki: no_user_found: Geen gebruiker gevonden search: Zoeken ... search_user: Gebruiker zoeken - title: + title: Nieuw bericht show: - all_messages: - from: - reply: - sent_on: - subject: - title: + all_messages: Berichtenoverzicht + from: ! 'Van:' + reply: Antwoorden + sent_on: ! 'Verzonden:' + subject: ! 'Onderwerp:' + title: Bericht lezen model: delivery: each_stock_article_must_be_unique: In een levering mag ieder voorraadsartikel maar een keer voorkomen. @@ -1014,9 +1021,9 @@ nl: title: Artikel unit_quantity: index: - action_end: - confirm_delete: - confirm_end: + action_end: Sluiten + confirm_delete: Wil je de bestelling werkelijk verwijderen? + confirm_end: Wil je de bestelling %{order} werkelijk sluiten? Dit kun je niet ongedaan maken. ended_orders: Gesloten bestellingen ending: new_order: @@ -1037,11 +1044,11 @@ nl: title: orders: ending: - start: + start: Start status: - supplier: + supplier: Leverancier show: - action_end: + action_end: Sluiten! amounts: articles: articles_ordered: diff --git a/public/dispatch.cgi b/public/dispatch.cgi deleted file mode 100755 index 3848806d..00000000 --- a/public/dispatch.cgi +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/ruby1.8 - -require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT) - -# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like: -# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired -require "dispatcher" - -ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun) -Dispatcher.dispatch \ No newline at end of file diff --git a/public/dispatch.fcgi b/public/dispatch.fcgi deleted file mode 100755 index 91c4ed57..00000000 --- a/public/dispatch.fcgi +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/ruby1.8 -# -# You may specify the path to the FastCGI crash log (a log of unhandled -# exceptions which forced the FastCGI instance to exit, great for debugging) -# and the number of requests to process before running garbage collection. -# -# By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log -# and the GC period is nil (turned off). A reasonable number of requests -# could range from 10-100 depending on the memory footprint of your app. -# -# Example: -# # Default log path, normal GC behavior. -# RailsFCGIHandler.process! -# -# # Default log path, 50 requests between GC. -# RailsFCGIHandler.process! nil, 50 -# -# # Custom log path, normal GC behavior. -# RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log' -# -RAILS_ENV = "production" - -require File.dirname(__FILE__) + "/../config/environment" -require 'fcgi_handler' - -RailsFCGIHandler.process! diff --git a/public/dispatch.rb b/public/dispatch.rb deleted file mode 100755 index 3848806d..00000000 --- a/public/dispatch.rb +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/ruby1.8 - -require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT) - -# If you're using RubyGems and mod_ruby, this require should be changed to an absolute path one, like: -# "/usr/local/lib/ruby/gems/1.8/gems/rails-0.8.0/lib/dispatcher" -- otherwise performance is severely impaired -require "dispatcher" - -ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun) -Dispatcher.dispatch \ No newline at end of file