X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=koha-tmpl%2Fintranet-tmpl%2Fprog%2Fen%2Fjs%2Fadditem.js;h=2c15b047791a274873f518de24bc474732ff9805;hb=8a53d284907bbbe9d3ee2552e964af9f5dfbd0ac;hp=2f6c3fefe852300e7aa05a0a3d28ffe8c806935d;hpb=324615e396be7fadc8ba3cfa1a9f6025e900df3a;p=koha.git diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/additem.js b/koha-tmpl/intranet-tmpl/prog/en/js/additem.js index 2f6c3fefe8..2c15b04779 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/js/additem.js +++ b/koha-tmpl/intranet-tmpl/prog/en/js/additem.js @@ -1,110 +1,245 @@ -function deleteItemBlock(index) { - var aDiv = document.getElementById(index); - aDiv.parentNode.removeChild(aDiv); - var quantity = document.getElementById('quantity'); - quantity.setAttribute('value',parseFloat(quantity.getAttribute('value'))-1); +function addItem( node, unique_item_fields ) { + var index = $(node).parent().attr('id'); + var current_qty = parseInt($("#quantity").val()); + var max_qty; + if($("#quantity_to_receive").length != 0){ + max_qty = parseInt($("#quantity_to_receive").val()); + } else { + max_qty = 99999; + } + if ( $("#items_list table").find('tr[idblock="' + index + '"]').length == 0 ) { + if ( current_qty < max_qty ) { + if ( current_qty < max_qty - 1 ) + cloneItemBlock(index, unique_item_fields); + addItemInList(index, unique_item_fields); + $("#" + index).find("a[name='buttonPlus']").text("Update"); + $("#quantity").val(current_qty + 1).change(); + } else if ( current_qty >= max_qty ) { + alert(window.MSG_ADDITEM_JS_CANT_RECEIVE_MORE_ITEMS + || "You can't receive any more items."); + } + } else { + if ( current_qty < max_qty ) + cloneItemBlock(index, unique_item_fields); + var tr = constructTrNode(index); + $("#items_list table").find('tr[idblock="' + index + '"]:first').replaceWith(tr); + } + $("#" + index).hide(); +} + +function showItem(index) { + $("#outeritemblock").children("div").each(function(){ + if ( $(this).attr('id') == index ) { + $(this).show(); + } else { + if ( $("#items_list table").find('tr[idblock="' + $(this).attr('id') + '"]').length == 0 ) { + $(this).remove(); + } else { + $(this).hide(); + } + } + }); +} + +function constructTrNode(index, unique_item_fields) { + var fields = ['barcode', 'homebranch', 'holdingbranch', 'notforloan', + 'restricted', 'location', 'itemcallnumber', 'copynumber', + 'stocknumber', 'ccode', 'itype', 'materials', 'itemnotes']; + + var result = ""; + var edit_link = "" + + (window.MSG_ADDITEM_JS_EDIT || "Edit") + ""; + var del_link = "" + + (window.MSG_ADDITEM_JS_DELETE || "Delete") + ""; + result += "" + edit_link + ""; + result += "" + del_link + ""; + for(i in fields) { + var field = fields[i]; + var field_elt = $("#" + index) + .find("[name='kohafield'][value='items."+field+"']") + .prevAll("[name='field_value']")[0]; + var field_value; + if($(field_elt).is('select')) { + field_value = $(field_elt).find("option:selected").text(); + } else { + field_value = $(field_elt).val(); + } + if (field_value == undefined) { + field_value = ''; + } + result += "" + field_value + ""; + } + result += ""; + + return result; +} + +function addItemInList(index, unique_item_fields) { + $("#items_list").show(); + var tr = constructTrNode(index, unique_item_fields); + $("#items_list table tbody").append(tr); +} + +function deleteItemBlock(node_a, index, unique_item_fields) { + $("#" + index).remove(); + var current_qty = parseInt($("#quantity").val()); + var max_qty; + if($("#quantity_to_receive").length != 0) { + max_qty = parseInt($("#quantity_to_receive").val()); + } else { + max_qty = 99999; + } + $("#quantity").val(current_qty - 1).change(); + $(node_a).parents('tr').remove(); + if(current_qty - 1 == 0) + $("#items_list").hide(); + + if ( $("#quantity").val() <= max_qty - 1) { + if ( $("#outeritemblock").children("div :visible").length == 0 ) { + $("#outeritemblock").children("div:last").show(); + } + } + if ( $("#quantity").val() == 0 && $("#outeritemblock > div").length == 0) { + cloneItemBlock(0, unique_item_fields); + } } -function cloneItemBlock(index) { - var original = document.getElementById(index); //original
- var clone = clone_with_selected(original) + +function cloneItemBlock(index, unique_item_fields) { + var original; + if(index) { + original = $("#" + index); //original
+ } + var dont_copy_fields = new Array(); + if(unique_item_fields) { + var dont_copy_fields = unique_item_fields.split(' '); + for(i in dont_copy_fields) { + dont_copy_fields[i] = "items." + dont_copy_fields[i]; + } + } + var random = Math.floor(Math.random()*100000); // get a random itemid. - // set the attribute for the new 'div' subfields - clone.setAttribute('id',index + random);//set another id. - var NumTabIndex; - NumTabIndex = parseInt(original.getAttribute('tabindex')); - if(isNaN(NumTabIndex)) NumTabIndex = 0; - clone.setAttribute('tabindex',NumTabIndex+1); - var CloneButtonPlus; - var CloneButtonMinus; - // try{ - var jclone = $(clone); - CloneButtonPlus = $("a.addItem", jclone).get(0); - CloneButtonPlus.setAttribute('onclick',"cloneItemBlock('" + index + random + "')"); - CloneButtonMinus = $("a.delItem", jclone).get(0); - CloneButtonMinus.setAttribute('onclick',"deleteItemBlock('" + index + random + "')"); - CloneButtonMinus.setAttribute('style',"display:inline"); - // change itemids of the clone - var elems = clone.getElementsByTagName('input'); - for( i = 0 ; elems[i] ; i++ ) - { - if(elems[i].name.match(/^itemid/)) { - elems[i].value = random; + var clone = $("
") + $.ajax({ + url: "/cgi-bin/koha/services/itemrecorddisplay.pl", + dataType: 'html', + data: { + frameworkcode: 'ACQ' + }, + success: function(data, textStatus, jqXHR) { + /* Create the item block */ + $(clone).append(data); + /* Change all itemid fields value */ + $(clone).find("input[name='itemid']").each(function(){ + $(this).val(random); + }); + /* Add buttons + and Clear */ + var buttonPlus = 'Add'; + var buttonClear = '' + (window.MSG_ADDITEM_JS_CLEAR || 'Clear') + ''; + $(clone).append(buttonPlus).append(buttonClear); + /* Copy values from the original block (input) */ + $(original).find("input[name='field_value']").each(function(){ + var kohafield = $(this).siblings("input[name='kohafield']").val(); + if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) { + $(this).parent("div").attr("id").match(/^(subfield.)/); + var id = RegExp.$1; + var value = $(this).val(); + $(clone).find("div[id^='"+id+"'] input[name='field_value']").val(value); + } + }); + /* Copy values from the original block (select) */ + $(original).find("select[name='field_value']").each(function(){ + var kohafield = $(this).siblings("input[name='kohafield']").val(); + if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) { + $(this).parent("div").attr("id").match(/^(subfield.)/); + var id = RegExp.$1; + var value = $(this).val(); + $(clone).find("div[id^='"+id+"'] select[name='field_value']").val(value); + } + }); + + $("#outeritemblock").append(clone); } - } - // } - //catch(e){ // do nothig if ButtonPlus & CloneButtonPlus don't exist. - //} - // insert this line on the page - original.parentNode.insertBefore(clone,original.nextSibling); - var quantity = document.getElementById('quantity'); - quantity.setAttribute('value',parseFloat(quantity.getAttribute('value'))+1); + }); } -function check_additem() { - var barcodes = document.getElementsByName('barcode'); - var success = true; - for(i=0;i j) && (barcodes[i].value == barcodes[j].value) && barcodes[i].value !='') { - barcodes[i].className='error'; - barcodes[j].className='error'; - success = false; - } - } - } - // TODO : Add AJAX function to test against barcodes already in the database, not just - // duplicates within the form. - return success; + +function clearItemBlock(node) { + var index = $(node).parent().attr('id'); + var block = $("#"+index); + $(block).find("input[type='text']").each(function(){ + $(this).val(""); + }); + $(block).find("select").each(function(){ + $(this).find("option:first").attr("selected", true); + }); +} + +function check_additem(unique_item_fields) { + var success = true; + var data = new Object(); + data['field'] = new Array(); + data['value'] = new Array(); + var array_fields = unique_item_fields.split(' '); + $(".error").empty(); // Clear error div + + // Check if a value is duplicated in form + for ( field in array_fields ) { + var fieldname = array_fields[field]; + if (fieldname == '') { + continue; + } + var values = new Array(); + $("[name='kohafield'][value='items."+ fieldname +"']").each(function(){ + var input = $(this).prevAll("input[name='field_value']")[0]; + if($(input).val()) { + values.push($(input).val()); + data['field'].push(fieldname); + data['value'].push($(input).val()); + } + }); + + var sorted_arr = values.sort(); + for (var i = 0; i < sorted_arr.length - 1; i += 1) { + if (sorted_arr[i + 1] == sorted_arr[i]) { + $(".error").append( + fieldname + " '" + sorted_arr[i] + "' " + + (window.MSG_ADDITEM_JS_IS_DUPLICATE || "is duplicated") + + "
"); + success = false; + } + } + } + + // If there is a duplication, we raise an error + if ( success == false ) { + $(".error").show(); + return false; + } + + $.ajax({ + url: '/cgi-bin/koha/acqui/check_uniqueness.pl', + async: false, + dataType: 'json', + data: data, + success: function(data) { + for (field in data) { + success = false; + for (var i=0; i < data[field].length; i++) { + var value = data[field][i]; + $(".error").append( + field + " '" + value + "' " + + (window.MSG_ADDITEM_JS_ALREADY_EXISTS_IN_DB + || "already exists in database") + + "
" + ); + } + } + } + }); + + if ( success == false ) { + $(".error").show(); + } + return success; } -function clone_with_selected (node) { - var origin = node.getElementsByTagName("select"); - var tmp = node.cloneNode(true) - var selectelem = tmp.getElementsByTagName("select"); - for (var i=0; i