1 function addItem( node, unique_item_fields ) {
2 var index = $(node).closest("div").attr('id');
3 var current_qty = parseInt($("#quantity").val());
5 if($("#quantity_to_receive").length != 0){
6 max_qty = parseInt($("#quantity_to_receive").val());
10 if ( $("#items_list table").find('tr[idblock="' + index + '"]').length == 0 ) {
11 if ( current_qty < max_qty ) {
12 if ( current_qty < max_qty - 1 )
13 cloneItemBlock(index, unique_item_fields);
14 addItemInList(index, unique_item_fields);
15 $("#" + index).find("input[name='buttonPlus']").val( (window.MSG_ADDITEM_JS_UPDATEITEM || "Update item") );
16 $("#quantity").val(current_qty + 1).change();
17 } else if ( current_qty >= max_qty ) {
18 alert(window.MSG_ADDITEM_JS_CANT_RECEIVE_MORE_ITEMS
19 || "You can't receive any more items.");
22 if ( current_qty < max_qty )
23 cloneItemBlock(index, unique_item_fields);
24 var tr = constructTrNode(index);
25 $("#items_list table").find('tr[idblock="' + index + '"]:first').replaceWith(tr);
27 $("#" + index).hide();
30 function showItem(index) {
31 $("#outeritemblock").children("div").each(function(){
32 if ( $(this).attr('id') == index ) {
35 if ( $("#items_list table").find('tr[idblock="' + $(this).attr('id') + '"]').length == 0 ) {
44 function constructTrNode(index, unique_item_fields) {
45 var fields = ['barcode', 'homebranch', 'holdingbranch', 'notforloan',
46 'restricted', 'location', 'itemcallnumber', 'copynumber',
47 'stocknumber', 'ccode', 'itype', 'materials', 'itemnotes'];
49 var result = "<tr idblock='" + index + "'>";
50 var edit_link = "<a href='#itemfieldset' style='text-decoration:none' onclick='showItem(\"" + index + "\");'>"
51 + (window.MSG_ADDITEM_JS_EDIT || "Edit") + "</a>";
52 var del_link = "<a style='cursor:pointer' "
53 + "onclick='deleteItemBlock(this, \"" + index + "\", \"" + unique_item_fields + "\");'>"
54 + (window.MSG_ADDITEM_JS_DELETE || "Delete") + "</a>";
55 result += "<td>" + edit_link + "</td>";
56 result += "<td>" + del_link + "</td>";
58 var field = fields[i];
59 var field_elt = $("#" + index)
60 .find("[name='kohafield'][value='items."+field+"']")
61 .prevAll("[name='field_value']")[0];
63 if($(field_elt).is('select')) {
64 field_value = $(field_elt).find("option:selected").text();
66 field_value = $(field_elt).val();
68 if (field_value == undefined) {
71 result += "<td>" + field_value + "</td>";
78 function addItemInList(index, unique_item_fields) {
79 $("#items_list").show();
80 var tr = constructTrNode(index, unique_item_fields);
81 $("#items_list table tbody").append(tr);
84 function deleteItemBlock(node_a, index, unique_item_fields) {
85 $("#" + index).remove();
86 var current_qty = parseInt($("#quantity").val());
88 if($("#quantity_to_receive").length != 0) {
89 max_qty = parseInt($("#quantity_to_receive").val());
93 $("#quantity").val(current_qty - 1).change();
94 $(node_a).parents('tr').remove();
95 if(current_qty - 1 == 0)
96 $("#items_list").hide();
98 if ( $("#quantity").val() <= max_qty - 1) {
99 if ( $("#outeritemblock").children("div :visible").length == 0 ) {
100 $("#outeritemblock").children("div:last").show();
103 if ( $("#quantity").val() == 0 && $("#outeritemblock > div").length == 0) {
104 cloneItemBlock(0, unique_item_fields);
108 function cloneItemBlock(index, unique_item_fields) {
111 original = $("#" + index); //original <div>
113 var dont_copy_fields = new Array();
114 if(unique_item_fields) {
115 var dont_copy_fields = unique_item_fields.split(' ');
116 for(i in dont_copy_fields) {
117 dont_copy_fields[i] = "items." + dont_copy_fields[i];
121 var random = Math.floor(Math.random()*100000); // get a random itemid.
122 var clone = $("<div id='itemblock"+random+"'></div>")
124 url: "/cgi-bin/koha/services/itemrecorddisplay.pl",
129 success: function(data, textStatus, jqXHR) {
130 /* Create the item block */
131 $(clone).append(data);
132 /* Change all itemid fields value */
133 $(clone).find("input[name='itemid']").each(function(){
136 /* Add buttons + and Clear */
137 var buttonPlus = "<fieldset class=\"action\">";
138 buttonPlus += '<input type="button" class="addItemControl" name="buttonPlus" style="cursor:pointer; margin:0 1em;" onclick="addItem(this,\'' + unique_item_fields + '\')" value="' + (window.MSG_ADDITEM_JS_ADDITEM || 'Add item')+ '" />';
139 buttonPlus += '<a class="addItemControl cancel" name="buttonClear" style="cursor:pointer;" onclick="clearItemBlock(this)">' + (window.MSG_ADDITEM_JS_CLEAR || 'Clear') + '</a>';
140 buttonPlus += "</fieldset>";
141 $(clone).append(buttonPlus);
142 /* Copy values from the original block (input) */
143 $(original).find("input[name='field_value']").each(function(){
144 var kohafield = $(this).siblings("input[name='kohafield']").val();
145 if($(this).val() && $.inArray(kohafield,dont_copy_fields) == -1) {
146 $(this).parent("div").attr("id").match(/^(subfield.)/);
148 var value = $(this).val();
149 $(clone).find("div[id^='"+id+"'] input[name='field_value']").val(value);
152 /* Copy values from the original block (select) */
153 $(original).find("select[name='field_value']").each(function(){
154 var kohafield = $(this).siblings("input[name='kohafield']").val();
155 if($(this).val() && $.inArray(kohafield,dont_copy_fields) == -1) {
156 $(this).parent("div").attr("id").match(/^(subfield.)/);
158 var value = $(this).val();
159 $(clone).find("div[id^='"+id+"'] select[name='field_value']").val(value);
163 $("#outeritemblock").append(clone);
168 function clearItemBlock(node) {
169 var index = $(node).closest("div").attr('id');
170 var block = $("#"+index);
171 $(block).find("input[type='text']").each(function(){
174 $(block).find("select").each(function(){
175 $(this).find("option:first").attr("selected", true);
179 function check_additem(unique_item_fields) {
181 var data = new Object();
182 data['field'] = new Array();
183 data['value'] = new Array();
184 var array_fields = unique_item_fields.split(' ');
185 $(".error").empty(); // Clear error div
187 // Check if a value is duplicated in form
188 for ( field in array_fields ) {
189 var fieldname = array_fields[field];
190 if (fieldname == '') {
193 var values = new Array();
194 $("[name='kohafield'][value='items."+ fieldname +"']").each(function(){
195 var input = $(this).prevAll("input[name='field_value']")[0];
197 values.push($(input).val());
198 data['field'].push(fieldname);
199 data['value'].push($(input).val());
203 var sorted_arr = values.sort();
204 for (var i = 0; i < sorted_arr.length - 1; i += 1) {
205 if (sorted_arr[i + 1] == sorted_arr[i]) {
207 fieldname + " '" + sorted_arr[i] + "' "
208 + (window.MSG_ADDITEM_JS_IS_DUPLICATE || "is duplicated")
215 // If there is a duplication, we raise an error
216 if ( success == false ) {
222 url: '/cgi-bin/koha/acqui/check_uniqueness.pl',
226 success: function(data) {
227 for (field in data) {
229 for (var i=0; i < data[field].length; i++) {
230 var value = data[field][i];
232 field + " '" + value + "' "
233 + (window.MSG_ADDITEM_JS_ALREADY_EXISTS_IN_DB
234 || "already exists in database")
242 if ( success == false ) {