Merge branch 'master' into i18n
Conflicts: Gemfile config/locales/de.yml config/locales/en.yml
This commit is contained in:
commit
34a4951e28
21 changed files with 382 additions and 70 deletions
1
Gemfile
1
Gemfile
|
@ -19,6 +19,7 @@ end
|
||||||
gem 'jquery-rails'
|
gem 'jquery-rails'
|
||||||
gem 'select2-rails'
|
gem 'select2-rails'
|
||||||
gem 'bootstrap-datepicker-rails'
|
gem 'bootstrap-datepicker-rails'
|
||||||
|
gem 'rails-assets-listjs', '0.2.0.beta.4' # remember to maintain list.*.js plugins and template engines on update
|
||||||
gem 'i18n-js', git: 'git://github.com/fnando/i18n-js.git' # to avoid US-ASCII js.erb error
|
gem 'i18n-js', git: 'git://github.com/fnando/i18n-js.git' # to avoid US-ASCII js.erb error
|
||||||
|
|
||||||
gem 'mysql2'
|
gem 'mysql2'
|
||||||
|
|
|
@ -199,6 +199,8 @@ GEM
|
||||||
activesupport (= 3.2.13)
|
activesupport (= 3.2.13)
|
||||||
bundler (~> 1.0)
|
bundler (~> 1.0)
|
||||||
railties (= 3.2.13)
|
railties (= 3.2.13)
|
||||||
|
rails-assets-listjs (0.2.0.beta.4)
|
||||||
|
railties (>= 3.1)
|
||||||
rails-settings-cached (0.2.4)
|
rails-settings-cached (0.2.4)
|
||||||
rails (>= 3.0.0)
|
rails (>= 3.0.0)
|
||||||
railties (3.2.13)
|
railties (3.2.13)
|
||||||
|
@ -340,6 +342,7 @@ DEPENDENCIES
|
||||||
prawn
|
prawn
|
||||||
quiet_assets
|
quiet_assets
|
||||||
rails (~> 3.2.9)
|
rails (~> 3.2.9)
|
||||||
|
rails-assets-listjs (= 0.2.0.beta.4)
|
||||||
rails-settings-cached (= 0.2.4)
|
rails-settings-cached (= 0.2.4)
|
||||||
resque
|
resque
|
||||||
rspec-core
|
rspec-core
|
||||||
|
|
|
@ -8,6 +8,10 @@
|
||||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.de
|
//= require bootstrap-datepicker/locales/bootstrap-datepicker.de
|
||||||
//= require bootstrap-datepicker/locales/bootstrap-datepicker.nl
|
//= require bootstrap-datepicker/locales/bootstrap-datepicker.nl
|
||||||
//= require jquery.observe_field
|
//= require jquery.observe_field
|
||||||
|
//= require list
|
||||||
|
//= require list.unlist
|
||||||
|
//= require list.delay
|
||||||
|
//= require list.reset
|
||||||
//= require rails.validations
|
//= require rails.validations
|
||||||
//= require i18n
|
//= require i18n
|
||||||
//= require i18n/translations
|
//= require i18n/translations
|
||||||
|
|
50
app/assets/javascripts/list.delay.js
Normal file
50
app/assets/javascripts/list.delay.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
// for use with listjs 0.2.0
|
||||||
|
// https://github.com/javve/list.js
|
||||||
|
|
||||||
|
(function(window, undefined) {
|
||||||
|
|
||||||
|
window.List.prototype.plugins.delay = function(locals, options) {
|
||||||
|
var list = this;
|
||||||
|
|
||||||
|
this.searchTimeout = undefined;
|
||||||
|
|
||||||
|
var init = {
|
||||||
|
start: function(options) {
|
||||||
|
this.defaults(options);
|
||||||
|
this.callbacks(options);
|
||||||
|
this.onload(options);
|
||||||
|
},
|
||||||
|
defaults: function(options) {
|
||||||
|
options.delayedSearchClass = options.delayedSearchClass || 'delayed-search';
|
||||||
|
options.delayedSearchTime = options.delayedSearchTime || 500;
|
||||||
|
},
|
||||||
|
callbacks: function(options) {
|
||||||
|
$('.' + options.delayedSearchClass, list.listContainer).keyup(list.searchDelayStart);
|
||||||
|
},
|
||||||
|
onload: function(options) {
|
||||||
|
var initialSearchTerm = $('.' + options.delayedSearchClass, list.listContainer).val();
|
||||||
|
if('' != initialSearchTerm) {
|
||||||
|
list.search(initialSearchTerm);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.searchDelayStart = function(searchString, columns) {
|
||||||
|
// TODO: if keycode corresponds to 'ENTER' ? skip delay
|
||||||
|
clearTimeout(list.searchTimeout);
|
||||||
|
list.searchTimeout = window.setTimeout(
|
||||||
|
function() {list.searchDelayEnd(searchString, columns)},
|
||||||
|
options.delayedSearchTime
|
||||||
|
);
|
||||||
|
|
||||||
|
$(list.listContainer).trigger('updateComing');
|
||||||
|
};
|
||||||
|
|
||||||
|
this.searchDelayEnd = function(searchString, columns) {
|
||||||
|
list.search(searchString, columns);
|
||||||
|
};
|
||||||
|
|
||||||
|
init.start(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
})(window);
|
42
app/assets/javascripts/list.reset.js
Normal file
42
app/assets/javascripts/list.reset.js
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// for use with listjs 0.2.0
|
||||||
|
// https://github.com/javve/list.js
|
||||||
|
|
||||||
|
(function(window, undefined) {
|
||||||
|
|
||||||
|
window.List.prototype.plugins.reset = function(locals, options) {
|
||||||
|
var list = this;
|
||||||
|
|
||||||
|
var init = {
|
||||||
|
start: function(options) {
|
||||||
|
this.defaults(options);
|
||||||
|
this.callbacks(options);
|
||||||
|
},
|
||||||
|
defaults: function(options) {
|
||||||
|
options.highlightClass = options.highlightClass || 'btn-primary';
|
||||||
|
options.resetSearchClass = options.resetSearchClass || 'reset-search';
|
||||||
|
options.resettableClass = options.resettableClass || 'resettable';
|
||||||
|
},
|
||||||
|
callbacks: function(options) {
|
||||||
|
$('.' + options.resetSearchClass, list.listContainer).click(list.resetSearch);
|
||||||
|
list.on('updated', list.highlightResetButton);
|
||||||
|
|
||||||
|
$(list.listContainer).on('updateComing', function() {
|
||||||
|
list.highlightResetButton(false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.highlightResetButton = function(highlightEnabled) {
|
||||||
|
highlightEnabled = (undefined === highlightEnabled) ? (list.searched) : (highlightEnabled);
|
||||||
|
$('.' + options.resetSearchClass, list.listContainer).toggleClass(options.highlightClass, highlightEnabled);
|
||||||
|
};
|
||||||
|
|
||||||
|
this.resetSearch = function() {
|
||||||
|
$('.' + options.resettableClass, list.listContainer).val('');
|
||||||
|
list.search('');
|
||||||
|
};
|
||||||
|
|
||||||
|
init.start(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
})(window);
|
124
app/assets/javascripts/list.unlist.js
Normal file
124
app/assets/javascripts/list.unlist.js
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
// for use with listjs 0.2.0
|
||||||
|
// https://github.com/javve/list.js
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
The following code is a modification of list.js. It was created by copy-pasting
|
||||||
|
the original code with the copyright notice below.
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
Begin copyright notice of the original code
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
ListJS Beta 0.2.0
|
||||||
|
By Jonny Strömberg (www.jonnystromberg.com, www.listjs.com)
|
||||||
|
|
||||||
|
OBS. The API is not frozen. It MAY change!
|
||||||
|
|
||||||
|
License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2011 Jonny Strömberg http://jonnystromberg.com
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without restriction,
|
||||||
|
including without limitation the rights to use, copy, modify, merge,
|
||||||
|
publish, distribute, sublicense, and/or sell copies of the Software,
|
||||||
|
and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
End copyright notice of the original code
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(function(w, undefined) {
|
||||||
|
/*******************************************************************************
|
||||||
|
Begin copy-pasted and modified code
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
// * template engine which adds class 'unlisted' instead of removing from DOM
|
||||||
|
// * especially useful in case of formulars
|
||||||
|
// * uses jQuery's $
|
||||||
|
w.List.prototype.templateEngines.unlist = function(list, settings) {
|
||||||
|
var h = w.ListJsHelpers;
|
||||||
|
|
||||||
|
// start with standard engine, override specific methods afterwards
|
||||||
|
this.superClass = w.List.prototype.templateEngines.standard;
|
||||||
|
this.superClass(list, settings);
|
||||||
|
|
||||||
|
// todo refer to listjs code instead of copy-pasting
|
||||||
|
var listSource = h.getByClass(settings.listClass, list.listContainer, true);
|
||||||
|
var templater = this;
|
||||||
|
var ensure = {
|
||||||
|
created: function(item) {
|
||||||
|
if(item.elm === undefined) {
|
||||||
|
templater.create(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var init = {
|
||||||
|
start: function(options) {
|
||||||
|
this.defaults(options);
|
||||||
|
this.callbacks(options);
|
||||||
|
},
|
||||||
|
defaults: function(options) {
|
||||||
|
options.listHeadingsClass = options.listHeadingsClass || 'list-heading';
|
||||||
|
},
|
||||||
|
callbacks: function(options) {
|
||||||
|
list.on('updated', templater.updateListHeadings);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
this.show = function(item) {
|
||||||
|
ensure.created(item);
|
||||||
|
listSource.appendChild(item.elm); // append item (or move it to the end)
|
||||||
|
$(item.elm).removeClass('unlisted');
|
||||||
|
};
|
||||||
|
this.hide = function(item) {
|
||||||
|
ensure.created(item);
|
||||||
|
$(item.elm).addClass('unlisted');
|
||||||
|
listSource.appendChild(item.elm);
|
||||||
|
};
|
||||||
|
this.clear = function() {
|
||||||
|
$(listSource.childNodes).addClass('unlisted');
|
||||||
|
};
|
||||||
|
|
||||||
|
this.updateListHeadings = function() {
|
||||||
|
var headSel = '.' + settings.listHeadingsClass;
|
||||||
|
|
||||||
|
$(headSel, listSource).each(function() {
|
||||||
|
var listedCount = $(this).nextUntil(headSel, ':not(.unlisted)').length;
|
||||||
|
$(this).toggleClass('unlisted', 0==listedCount);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
init.start(settings);
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
End copy-pasted and modified code
|
||||||
|
*******************************************************************************/
|
||||||
|
})(window);
|
|
@ -3,4 +3,5 @@
|
||||||
*= require select2
|
*= require select2
|
||||||
*= require token-input-bootstrappy
|
*= require token-input-bootstrappy
|
||||||
*= require bootstrap-datepicker
|
*= require bootstrap-datepicker
|
||||||
|
*= require list.unlist
|
||||||
*/
|
*/
|
|
@ -238,3 +238,8 @@ tr.unavailable {
|
||||||
margin-bottom: 15px
|
margin-bottom: 15px
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// allow buttons as input add-on (with proper height)
|
||||||
|
.input-append button.add-on {
|
||||||
|
height: inherit;
|
||||||
|
}
|
||||||
|
|
3
app/assets/stylesheets/list.unlist.css
Normal file
3
app/assets/stylesheets/list.unlist.css
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.list .unlisted:not(.no-unlist) {
|
||||||
|
display: none;
|
||||||
|
}
|
|
@ -31,6 +31,11 @@ class StockitController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
@stock_article = StockArticle.find(params[:id])
|
||||||
|
@stock_changes = @stock_article.stock_changes.order('stock_changes.created_at DESC')
|
||||||
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@article = StockArticle.find(params[:id])
|
@article = StockArticle.find(params[:id])
|
||||||
@article.mark_as_deleted
|
@article.mark_as_deleted
|
||||||
|
@ -55,9 +60,4 @@ class StockitController < ApplicationController
|
||||||
|
|
||||||
render :partial => 'form', :locals => {:stock_article => stock_article}
|
render :partial => 'form', :locals => {:stock_article => stock_article}
|
||||||
end
|
end
|
||||||
|
|
||||||
def history
|
|
||||||
@stock_article = StockArticle.undeleted.find(params[:stock_article_id])
|
|
||||||
@stock_changes = @stock_article.stock_changes.order('stock_changes.created_at DESC').each {|s| s.readonly!}
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -6,12 +6,17 @@
|
||||||
setMinimumBalance(#{FoodsoftConfig[:minimum_balance] or 0});
|
setMinimumBalance(#{FoodsoftConfig[:minimum_balance] or 0});
|
||||||
setToleranceBehaviour(#{FoodsoftConfig[:tolerance_is_costly]});
|
setToleranceBehaviour(#{FoodsoftConfig[:tolerance_is_costly]});
|
||||||
setStockit(#{@order.stockit?});
|
setStockit(#{@order.stockit?});
|
||||||
|
// create List for search-feature (using list.js, http://listjs.com)
|
||||||
|
var listjsResetPlugin = ['reset', {highlightClass: 'btn-primary'}];
|
||||||
|
var listjsDelayPlugin = ['delay', {delayedSearchTime: 500}];
|
||||||
|
new List(document.body, { valueNames: ['name'], engine: 'unlist', plugins: [listjsResetPlugin, listjsDelayPlugin] });
|
||||||
});
|
});
|
||||||
|
|
||||||
- title t('.title'), false
|
- title t('.title'), false
|
||||||
|
|
||||||
.row-fluid
|
.row-fluid
|
||||||
.well.pull-left
|
.well.pull-left
|
||||||
|
%button{type: "button", class: "close", data: {dismiss: 'alert'}}= '×'.html_safe
|
||||||
%h2= @order.name
|
%h2= @order.name
|
||||||
%dl.dl-horizontal
|
%dl.dl-horizontal
|
||||||
- unless @order.note.blank?
|
- unless @order.note.blank?
|
||||||
|
@ -34,8 +39,17 @@
|
||||||
%dd= number_to_currency(@ordering_data[:available_funds])
|
%dd= number_to_currency(@ordering_data[:available_funds])
|
||||||
|
|
||||||
.well.pull-right
|
.well.pull-right
|
||||||
|
%button{type: "button", class: "close", data: {dismiss: 'alert'}}= '×'.html_safe
|
||||||
= render 'switch_order', current_order: @order
|
= render 'switch_order', current_order: @order
|
||||||
|
|
||||||
|
.row-fluid
|
||||||
|
.well.clear
|
||||||
|
.form-search
|
||||||
|
.input-append
|
||||||
|
= text_field_tag :article, params[:article], placeholder: t('.search_article'), class: 'search-query delayed-search resettable'
|
||||||
|
%button.add-on.btn.reset-search{:type => :button, :title => t('.reset_article_search')}
|
||||||
|
%i.icon.icon-remove
|
||||||
|
|
||||||
= form_for @group_order do |f|
|
= form_for @group_order do |f|
|
||||||
= f.hidden_field :lock_version
|
= f.hidden_field :lock_version
|
||||||
= f.hidden_field :order_id
|
= f.hidden_field :order_id
|
||||||
|
@ -58,9 +72,9 @@
|
||||||
%th(style="width:20px")= t '.available'
|
%th(style="width:20px")= t '.available'
|
||||||
%th#col_required= t '.amount'
|
%th#col_required= t '.amount'
|
||||||
%th{style: "width:15px;"}= t '.sum'
|
%th{style: "width:15px;"}= t '.sum'
|
||||||
%tbody
|
%tbody.list
|
||||||
- @order.articles_grouped_by_category.each do |category, order_articles|
|
- @order.articles_grouped_by_category.each do |category, order_articles|
|
||||||
%tr.article-category
|
%tr.list-heading.article-category
|
||||||
%td
|
%td
|
||||||
= category
|
= category
|
||||||
%i.icon-tag
|
%i.icon-tag
|
||||||
|
|
|
@ -3,5 +3,6 @@
|
||||||
= form.hidden_field :stock_article_id
|
= form.hidden_field :stock_article_id
|
||||||
= "Menge (#{stock_change.stock_article.quantity_available})"
|
= "Menge (#{stock_change.stock_article.quantity_available})"
|
||||||
= form.text_field :quantity, :size => 5, :autocomplete => 'off'
|
= form.text_field :quantity, :size => 5, :autocomplete => 'off'
|
||||||
|
%span{:data => {:toggle => :tooltip, :title => render(:partial => 'shared/article_price_info', :locals => {:article => stock_change.stock_article})}}
|
||||||
%b= stock_change.stock_article.name
|
%b= stock_change.stock_article.name
|
||||||
= "(#{number_to_currency(stock_change.stock_article.price)} / #{stock_change.stock_article.unit})"
|
= "(#{number_to_currency(stock_change.stock_article.price)} / #{stock_change.stock_article.unit})"
|
||||||
|
|
|
@ -1,5 +1,20 @@
|
||||||
- title t('.title')
|
- 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
|
- content_for :sidebar do
|
||||||
%p
|
%p
|
||||||
%i= t('.text_deviations', inv_link: link_to(t('.temp_inventory'), stock_articles_path)).html_safe
|
%i= t('.text_deviations', inv_link: link_to(t('.temp_inventory'), stock_articles_path)).html_safe
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
- title t('.stock_changes', :article_name => @stock_article.name)
|
|
||||||
|
|
||||||
%table.table.table-hover#stock_changes
|
|
||||||
%thead
|
|
||||||
%tr
|
|
||||||
%th= t '.datetime'
|
|
||||||
%th= t '.reason'
|
|
||||||
%th= t '.change_quantity'
|
|
||||||
%th= t '.new_quantity'
|
|
||||||
%tbody
|
|
||||||
- reversed_history = @stock_article.quantity_history.reverse
|
|
||||||
- @stock_changes.each_with_index do |stock_change, index|
|
|
||||||
%tr
|
|
||||||
%td= l stock_change.created_at
|
|
||||||
%td= link_to_stock_change_reason(stock_change)
|
|
||||||
%td= stock_change.quantity
|
|
||||||
%td= reversed_history[index]
|
|
|
@ -45,7 +45,7 @@
|
||||||
%tbody
|
%tbody
|
||||||
- for article in @stock_articles
|
- for article in @stock_articles
|
||||||
%tr{:class => stock_article_classes(article), :id => "stockArticle-#{article.id}"}
|
%tr{:class => stock_article_classes(article), :id => "stockArticle-#{article.id}"}
|
||||||
%td=h article.name
|
%td= link_to article.name, article
|
||||||
%td= article.quantity
|
%td= article.quantity
|
||||||
%td= article.quantity - article.quantity_available
|
%td= article.quantity - article.quantity_available
|
||||||
%th= article.quantity_available
|
%th= article.quantity_available
|
||||||
|
@ -56,7 +56,6 @@
|
||||||
%td= article.article_category.name
|
%td= article.article_category.name
|
||||||
%td
|
%td
|
||||||
= link_to t('ui.edit'), edit_stock_article_path(article), class: 'btn btn-mini'
|
= link_to t('ui.edit'), edit_stock_article_path(article), class: 'btn btn-mini'
|
||||||
= link_to t('ui.history'), stock_article_history_path(article), class: 'btn btn-mini'
|
|
||||||
= link_to t('ui.delete'), article, :method => :delete, :confirm => t('.confirm_delete'),
|
= link_to t('ui.delete'), article, :method => :delete, :confirm => t('.confirm_delete'),
|
||||||
class: 'btn btn-mini btn-danger', :remote => true
|
class: 'btn btn-mini btn-danger', :remote => true
|
||||||
%p
|
%p
|
||||||
|
|
47
app/views/stockit/show.html.haml
Normal file
47
app/views/stockit/show.html.haml
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
- title @stock_article.name
|
||||||
|
|
||||||
|
.row-fluid
|
||||||
|
.span6
|
||||||
|
%dl.dl-horizontal
|
||||||
|
%dt= StockArticle.human_attribute_name 'supplier'
|
||||||
|
%dd= link_to @stock_article.supplier.name, @stock_article.supplier
|
||||||
|
%dt= StockArticle.human_attribute_name 'name'
|
||||||
|
%dd= @stock_article.name
|
||||||
|
%dt= StockArticle.human_attribute_name 'unit'
|
||||||
|
%dd= @stock_article.unit
|
||||||
|
%dt= StockArticle.human_attribute_name 'price'
|
||||||
|
%dd= number_to_currency @stock_article.price
|
||||||
|
%dt= StockArticle.human_attribute_name 'tax'
|
||||||
|
%dd= number_to_percentage @stock_article.tax
|
||||||
|
%dt= StockArticle.human_attribute_name 'deposit'
|
||||||
|
%dd= number_to_currency @stock_article.deposit
|
||||||
|
%dt= StockArticle.human_attribute_name 'fc_price'
|
||||||
|
%dd= number_to_currency @stock_article.fc_price
|
||||||
|
%dt= StockArticle.human_attribute_name 'article_category'
|
||||||
|
%dd= @stock_article.article_category.name
|
||||||
|
%dt= StockArticle.human_attribute_name 'note'
|
||||||
|
%dd= @stock_article.note
|
||||||
|
%dt= StockArticle.human_attribute_name 'quantity'
|
||||||
|
%dd= @stock_article.quantity
|
||||||
|
%dt= StockArticle.human_attribute_name 'quantity_available'
|
||||||
|
%dd= @stock_article.quantity_available
|
||||||
|
.form-actions
|
||||||
|
= link_to t('ui.edit'), edit_stock_article_path(@stock_article), class: 'btn'
|
||||||
|
|
||||||
|
.span6
|
||||||
|
%h2= t('.stock_changes')
|
||||||
|
%table.table.table-hover#stock_changes
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th= t '.datetime'
|
||||||
|
%th= t '.reason'
|
||||||
|
%th= t '.change_quantity'
|
||||||
|
%th= t '.new_quantity'
|
||||||
|
%tbody
|
||||||
|
- reversed_history = @stock_article.quantity_history.reverse
|
||||||
|
- @stock_changes.each_with_index do |stock_change, index|
|
||||||
|
%tr
|
||||||
|
%td= l stock_change.created_at
|
||||||
|
%td= link_to_stock_change_reason(stock_change)
|
||||||
|
%td= stock_change.quantity
|
||||||
|
%td= reversed_history[index]
|
|
@ -42,7 +42,10 @@ de:
|
||||||
fc_price: Endpreis
|
fc_price: Endpreis
|
||||||
fc_share: FC-Aufschlag
|
fc_share: FC-Aufschlag
|
||||||
gross_price: Bruttopreis
|
gross_price: Bruttopreis
|
||||||
|
name: Name
|
||||||
|
note: Notiz
|
||||||
price: Nettopreis
|
price: Nettopreis
|
||||||
|
supplier: Lieferantin
|
||||||
tax: MwSt
|
tax: MwSt
|
||||||
unit: Einheit
|
unit: Einheit
|
||||||
unit_quantity: Gebindegröße
|
unit_quantity: Gebindegröße
|
||||||
|
@ -66,6 +69,8 @@ de:
|
||||||
supplier: Lieferant
|
supplier: Lieferant
|
||||||
stock_article:
|
stock_article:
|
||||||
price: Nettopreis
|
price: Nettopreis
|
||||||
|
quantity: Lagerbestand
|
||||||
|
quantity_available: Verfügbarer Bestand
|
||||||
supplier:
|
supplier:
|
||||||
address: Adresse
|
address: Adresse
|
||||||
contact_person: Ansprechparter_in
|
contact_person: Ansprechparter_in
|
||||||
|
@ -839,6 +844,8 @@ de:
|
||||||
new_funds: Neuer Kontostand
|
new_funds: Neuer Kontostand
|
||||||
note: Notiz
|
note: Notiz
|
||||||
price: Preis
|
price: Preis
|
||||||
|
reset_article_search: Suche zurücksetzen
|
||||||
|
search_article: Artikel suchen...
|
||||||
sum: Summe
|
sum: Summe
|
||||||
sum_amount: ! 'Gesamtbestellmenge bisher:'
|
sum_amount: ! 'Gesamtbestellmenge bisher:'
|
||||||
supplier: Lieferant
|
supplier: Lieferant
|
||||||
|
@ -1739,15 +1746,6 @@ de:
|
||||||
title: Lagerartikel bearbeiten
|
title: Lagerartikel bearbeiten
|
||||||
form:
|
form:
|
||||||
price_hint: Um Chaos zu vermeiden können bis auf weiteres die Preise von angelegten Lagerartikeln nicht mehr verändert werden.
|
price_hint: Um Chaos zu vermeiden können bis auf weiteres die Preise von angelegten Lagerartikeln nicht mehr verändert werden.
|
||||||
history:
|
|
||||||
change_quantity: Veränderung
|
|
||||||
datetime: Zeitpunkt
|
|
||||||
delivery: Lieferung
|
|
||||||
new_quantity: Neuer Bestand
|
|
||||||
order: Bestellung
|
|
||||||
reason: Ereignis
|
|
||||||
stock_changes: Verlauf anzeigen für »%{article_name}«
|
|
||||||
stock_taking: Inventur
|
|
||||||
index:
|
index:
|
||||||
article:
|
article:
|
||||||
article: Artikel
|
article: Artikel
|
||||||
|
@ -1773,6 +1771,15 @@ de:
|
||||||
new:
|
new:
|
||||||
search_text: ! 'Suche nache Artikeln aus allen Katalogen:'
|
search_text: ! 'Suche nache Artikeln aus allen Katalogen:'
|
||||||
title: Neuen Lagerartikel anlegen
|
title: Neuen Lagerartikel anlegen
|
||||||
|
show:
|
||||||
|
change_quantity: Veränderung
|
||||||
|
datetime: Zeitpunkt
|
||||||
|
delivery: Lieferung
|
||||||
|
new_quantity: Neuer Bestand
|
||||||
|
order: Bestellung
|
||||||
|
reason: Ereignis
|
||||||
|
stock_changes: Verlauf des Lagerbestands
|
||||||
|
stock_taking: Inventur
|
||||||
stock_create:
|
stock_create:
|
||||||
notice: Lagerartikel wurde gespeichert.
|
notice: Lagerartikel wurde gespeichert.
|
||||||
stock_update:
|
stock_update:
|
||||||
|
@ -1898,7 +1905,6 @@ de:
|
||||||
close: Schließen
|
close: Schließen
|
||||||
delete: Löschen
|
delete: Löschen
|
||||||
edit: Bearbeiten
|
edit: Bearbeiten
|
||||||
history: Verlauf anzeigen
|
|
||||||
marks:
|
marks:
|
||||||
close: ! '×'
|
close: ! '×'
|
||||||
success: <i class="icon icon-ok"></i>
|
success: <i class="icon icon-ok"></i>
|
||||||
|
|
|
@ -50,6 +50,7 @@ en:
|
||||||
note: Note
|
note: Note
|
||||||
origin: Origin
|
origin: Origin
|
||||||
price: Price
|
price: Price
|
||||||
|
supplier: Supplier
|
||||||
tax: VAT
|
tax: VAT
|
||||||
unit: Unit
|
unit: Unit
|
||||||
unit_quantity: Unit quantity
|
unit_quantity: Unit quantity
|
||||||
|
@ -76,6 +77,8 @@ en:
|
||||||
supplier: Supplier
|
supplier: Supplier
|
||||||
stock_article:
|
stock_article:
|
||||||
price: Price
|
price: Price
|
||||||
|
quantity: Quantity
|
||||||
|
quantity_available: Available quantity
|
||||||
supplier:
|
supplier:
|
||||||
address: Address
|
address: Address
|
||||||
contact_person: Contact person
|
contact_person: Contact person
|
||||||
|
@ -858,6 +861,8 @@ en:
|
||||||
new_funds: New account balance
|
new_funds: New account balance
|
||||||
note: Note
|
note: Note
|
||||||
price: Price
|
price: Price
|
||||||
|
reset_article_search: Reset search
|
||||||
|
search_article: Search for article...
|
||||||
sum: Sum
|
sum: Sum
|
||||||
sum_amount: Current amount
|
sum_amount: Current amount
|
||||||
supplier: Supplier
|
supplier: Supplier
|
||||||
|
@ -1740,15 +1745,6 @@ en:
|
||||||
title: Edit stock articles
|
title: Edit stock articles
|
||||||
form:
|
form:
|
||||||
price_hint: To avoid choas, it is not possible to edit the prices of already added stock articles until further notice.
|
price_hint: To avoid choas, it is not possible to edit the prices of already added stock articles until further notice.
|
||||||
history:
|
|
||||||
change_quantity: Change
|
|
||||||
datetime: Time
|
|
||||||
delivery: Delivery
|
|
||||||
new_quantity: New quantity
|
|
||||||
order: Order
|
|
||||||
reason: Reason
|
|
||||||
stock_changes: Stock quantity changes of ‘%{article_name}’
|
|
||||||
stock_taking: Inventory
|
|
||||||
index:
|
index:
|
||||||
article:
|
article:
|
||||||
article: Article
|
article: Article
|
||||||
|
@ -1774,6 +1770,15 @@ en:
|
||||||
new:
|
new:
|
||||||
search_text: ! 'Search for articles in all catalogues:'
|
search_text: ! 'Search for articles in all catalogues:'
|
||||||
title: Add new stock article
|
title: Add new stock article
|
||||||
|
show:
|
||||||
|
change_quantity: Change
|
||||||
|
datetime: Time
|
||||||
|
delivery: Delivery
|
||||||
|
new_quantity: New quantity
|
||||||
|
order: Order
|
||||||
|
reason: Reason
|
||||||
|
stock_changes: Stock quantity changes
|
||||||
|
stock_taking: Inventory
|
||||||
stock_create:
|
stock_create:
|
||||||
notice: Stock article was created.
|
notice: Stock article was created.
|
||||||
stock_update:
|
stock_update:
|
||||||
|
@ -1898,7 +1903,6 @@ en:
|
||||||
close: Close
|
close: Close
|
||||||
delete: Delete
|
delete: Delete
|
||||||
edit: Edit
|
edit: Edit
|
||||||
history: Show history
|
|
||||||
marks:
|
marks:
|
||||||
close: ! '×'
|
close: ! '×'
|
||||||
success: <i class="icon icon-ok"></i>
|
success: <i class="icon icon-ok"></i>
|
||||||
|
|
|
@ -42,7 +42,10 @@ fr:
|
||||||
fc_price: prix final
|
fc_price: prix final
|
||||||
fc_share: supplément boufcoop
|
fc_share: supplément boufcoop
|
||||||
gross_price: prix brut
|
gross_price: prix brut
|
||||||
|
name:
|
||||||
|
note:
|
||||||
price: prix net
|
price: prix net
|
||||||
|
supplier:
|
||||||
tax: TVA
|
tax: TVA
|
||||||
unit: unité
|
unit: unité
|
||||||
unit_quantity: unités par lot
|
unit_quantity: unités par lot
|
||||||
|
@ -51,6 +54,8 @@ fr:
|
||||||
note: note
|
note: note
|
||||||
stock_article:
|
stock_article:
|
||||||
price: Prix net
|
price: Prix net
|
||||||
|
quantity:
|
||||||
|
quantity_available:
|
||||||
user:
|
user:
|
||||||
first_name: Prénom
|
first_name: Prénom
|
||||||
password: Mot de passe
|
password: Mot de passe
|
||||||
|
@ -811,6 +816,8 @@ fr:
|
||||||
new_funds: Nouveau solde
|
new_funds: Nouveau solde
|
||||||
note: Note
|
note: Note
|
||||||
price: Prix
|
price: Prix
|
||||||
|
reset_article_search:
|
||||||
|
search_article:
|
||||||
sum: Prix total
|
sum: Prix total
|
||||||
sum_amount: ! 'Quantité déjà commandée:'
|
sum_amount: ! 'Quantité déjà commandée:'
|
||||||
supplier: Fourni par
|
supplier: Fourni par
|
||||||
|
@ -1738,15 +1745,6 @@ fr:
|
||||||
title: Modifier l'article
|
title: Modifier l'article
|
||||||
form:
|
form:
|
||||||
price_hint: Pour éviter que ça soit le bazar, les prix des articles en stock ne peuvent plus être modifiés.
|
price_hint: Pour éviter que ça soit le bazar, les prix des articles en stock ne peuvent plus être modifiés.
|
||||||
history:
|
|
||||||
change_quantity: Modification
|
|
||||||
datetime: Temps
|
|
||||||
delivery: Réapprovisionnement
|
|
||||||
new_quantity: Nouveau stock
|
|
||||||
order: Commande
|
|
||||||
reason: Raison
|
|
||||||
stock_changes: Afficher l'historique pour "%{article_name}"
|
|
||||||
stock_taking: Inventaire
|
|
||||||
index:
|
index:
|
||||||
article:
|
article:
|
||||||
article: Article
|
article: Article
|
||||||
|
@ -1772,6 +1770,15 @@ fr:
|
||||||
new:
|
new:
|
||||||
search_text: ! 'Rechercher des articles dans tous les catalogues:'
|
search_text: ! 'Rechercher des articles dans tous les catalogues:'
|
||||||
title: Ajouter un article au stock
|
title: Ajouter un article au stock
|
||||||
|
show:
|
||||||
|
change_quantity: Modification
|
||||||
|
datetime: Temps
|
||||||
|
delivery: Réapprovisionnement
|
||||||
|
new_quantity: Nouveau stock
|
||||||
|
order: Commande
|
||||||
|
reason: Raison
|
||||||
|
stock_changes: Afficher l'historique
|
||||||
|
stock_taking: Inventaire
|
||||||
stock_create:
|
stock_create:
|
||||||
notice: L'article a été sauvegardé.
|
notice: L'article a été sauvegardé.
|
||||||
stock_update:
|
stock_update:
|
||||||
|
@ -1904,7 +1911,6 @@ fr:
|
||||||
close: Fermer
|
close: Fermer
|
||||||
delete: Supprimer
|
delete: Supprimer
|
||||||
edit: Modifier
|
edit: Modifier
|
||||||
history: Afficher l'historique
|
|
||||||
marks:
|
marks:
|
||||||
close: ! '×'
|
close: ! '×'
|
||||||
success: <i class="icon icon-ok"></i>
|
success: <i class="icon icon-ok"></i>
|
||||||
|
|
|
@ -42,7 +42,10 @@ nl:
|
||||||
fc_price: prijs foodcoop
|
fc_price: prijs foodcoop
|
||||||
fc_share: marge foodcoop
|
fc_share: marge foodcoop
|
||||||
gross_price: bruto prijs
|
gross_price: bruto prijs
|
||||||
|
name:
|
||||||
|
note:
|
||||||
price: netto prijs
|
price: netto prijs
|
||||||
|
supplier:
|
||||||
tax: BTW
|
tax: BTW
|
||||||
unit: eenheid
|
unit: eenheid
|
||||||
unit_quantity: groothandelseenheid
|
unit_quantity: groothandelseenheid
|
||||||
|
@ -51,6 +54,8 @@ nl:
|
||||||
note: notitie
|
note: notitie
|
||||||
stock_article:
|
stock_article:
|
||||||
price: prijs
|
price: prijs
|
||||||
|
quantity:
|
||||||
|
quantity_available:
|
||||||
user:
|
user:
|
||||||
first_name: Voornaam
|
first_name: Voornaam
|
||||||
password: Wachtwoord
|
password: Wachtwoord
|
||||||
|
@ -797,6 +802,8 @@ nl:
|
||||||
new_funds: Nieuw tegoed
|
new_funds: Nieuw tegoed
|
||||||
note: Notitie
|
note: Notitie
|
||||||
price: Prijs
|
price: Prijs
|
||||||
|
reset_article_search:
|
||||||
|
search_article:
|
||||||
sum: Som
|
sum: Som
|
||||||
sum_amount: ! 'Huidig totaalbedrag:'
|
sum_amount: ! 'Huidig totaalbedrag:'
|
||||||
supplier: Leverancier
|
supplier: Leverancier
|
||||||
|
@ -1664,15 +1671,6 @@ nl:
|
||||||
title:
|
title:
|
||||||
form:
|
form:
|
||||||
price_hint:
|
price_hint:
|
||||||
history:
|
|
||||||
change_quantity:
|
|
||||||
datetime:
|
|
||||||
delivery:
|
|
||||||
new_quantity:
|
|
||||||
order:
|
|
||||||
reason:
|
|
||||||
stock_changes:
|
|
||||||
stock_taking:
|
|
||||||
index:
|
index:
|
||||||
article:
|
article:
|
||||||
article:
|
article:
|
||||||
|
@ -1698,6 +1696,15 @@ nl:
|
||||||
new:
|
new:
|
||||||
search_text:
|
search_text:
|
||||||
title:
|
title:
|
||||||
|
show:
|
||||||
|
change_quantity:
|
||||||
|
datetime:
|
||||||
|
delivery:
|
||||||
|
new_quantity:
|
||||||
|
order:
|
||||||
|
reason:
|
||||||
|
stock_changes:
|
||||||
|
stock_taking:
|
||||||
stock_create:
|
stock_create:
|
||||||
notice: Voorraadsartikel is opgeslagen.
|
notice: Voorraadsartikel is opgeslagen.
|
||||||
stock_update:
|
stock_update:
|
||||||
|
@ -1822,7 +1829,6 @@ nl:
|
||||||
close: Sluiten
|
close: Sluiten
|
||||||
delete: Verwijder
|
delete: Verwijder
|
||||||
edit: Bewerk
|
edit: Bewerk
|
||||||
history:
|
|
||||||
marks:
|
marks:
|
||||||
close: ! '×'
|
close: ! '×'
|
||||||
success: <i class="icon icon-ok"></i>
|
success: <i class="icon icon-ok"></i>
|
||||||
|
|
|
@ -97,8 +97,6 @@ Foodsoft::Application.routes.draw do
|
||||||
get :articles_search
|
get :articles_search
|
||||||
get :fill_new_stock_article_form
|
get :fill_new_stock_article_form
|
||||||
end
|
end
|
||||||
|
|
||||||
get :history
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :suppliers do
|
resources :suppliers do
|
||||||
|
|
Loading…
Reference in a new issue