Improve delivery validation: StockArticles must not be associated more than once

This commit is contained in:
Julius 2013-06-26 17:56:20 +02:00
parent 5df4c8f8a6
commit 2ee7f716ae
7 changed files with 55 additions and 25 deletions

View file

@ -6,14 +6,15 @@
var stock_change = $(this).closest('tr');
stock_change.hide(); // do not remove (to ensure destruction)
unmark_article_unavailable_for_delivery( stock_change.data('id') );
stock_change.removeAttr('id'); // remove id to allow re-adding
mark_article_for_delivery( stock_change.data('id') );
return false;
});
$('.remove_new_stock_change').live('click', function() {
var stock_change = $(this).closest('tr');
stock_change.remove();
unmark_article_unavailable_for_delivery( stock_change.data('id') );
mark_article_for_delivery( stock_change.data('id') );
return false;
})
@ -62,23 +63,26 @@
});
});
function mark_article_unavailable_for_delivery(stock_article_id) {
function mark_article_for_delivery(stock_article_id) {
var articleTr = $('#stock_article_' + stock_article_id);
articleTr.addClass('unavailable');
$('.button-add-stock-change', articleTr).attr('disabled', 'disabled');
if( is_article_available_for_delivery(stock_article_id) ) {
articleTr.removeClass('unavailable');
$('.button-add-stock-change', articleTr).removeAttr('disabled');
}
else {
articleTr.addClass('unavailable');
$('.button-add-stock-change', articleTr).attr('disabled', 'disabled');
}
}
function unmark_article_unavailable_for_delivery(stock_article_id) {
var articleTr = $('#stock_article_' + stock_article_id);
articleTr.removeClass('unavailable');
$('.button-add-stock-change', articleTr).removeAttr('disabled');
}
function is_article_unavailable_for_delivery(stock_article_id) {
var articleTr = $('#stock_article_' + stock_article_id);
return articleTr.hasClass('unavailable');
function is_article_available_for_delivery(stock_article_id) {
return ( 0 == $('#stock_change_stock_article_' + stock_article_id).length );
}
= simple_form_for [@supplier, @delivery], validate: true do |f|
= f.hidden_field :supplier_id
= f.error_notification
= base_errors f.object
= f.association :supplier, :as => :hidden
%h2= t '.title_select_stock_articles'
.well.well-small
.btn-toolbar

View file

@ -1,13 +1,5 @@
(function(w) {
if(is_article_unavailable_for_delivery(<%= @stock_change.stock_article.id %>)) {
return false;
}
mark_article_unavailable_for_delivery(<%= @stock_change.stock_article.id %>);
var quantity = w.prompt('<%= j(t('.how_many_units', :unit => @stock_change.stock_article.unit, :name => @stock_change.stock_article.name)) %>'); <%# how to properly escape here? %>
if(null === quantity) {
unmark_article_unavailable_for_delivery(<%= @stock_change.stock_article.id %>); // think wisely before changing this: What about double clicks on "deliver" button?
if(!is_article_available_for_delivery(<%= @stock_change.stock_article.id %>)) {
return false;
}
@ -17,8 +9,16 @@
'<%= j(render(:partial => 'stock_change', :locals => {:stock_change => @stock_change})) %>'
).addClass('success');
$('#stock_changes').append(stock_change);
mark_article_for_delivery(<%= @stock_change.stock_article.id %>);
updateSort('#stock_changes');
var quantity = w.prompt('<%= j(t('.how_many_units', :unit => @stock_change.stock_article.unit, :name => @stock_change.stock_article.name)) %>'); <%# how to properly escape here? %>
if(null === quantity) {
stock_change.remove();
mark_article_for_delivery(<%= @stock_change.stock_article.id %>);
return false;
}
$('input.stock-change-quantity', stock_change).val(quantity);
$('#stock_changes').append(stock_change);
updateSort('#stock_changes');
})(window);