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);
164 BindPluginEvents(data);
169 function BindPluginEvents(data) {
170 // the script tag in data for plugins contains a document ready that binds
171 // the events for the plugin
172 // when we append, this code does not get executed anymore; so we do it here
173 var events= data.match(/BindEventstag_\d+_subfield_._\d+/g);
174 if ( events == null ) return;
175 for(var i=0; i<events.length; i++) {
177 if( i<events.length-1 && events[i]==events[i+1] ) { i++; }
178 // normally we find the function name twice
182 function clearItemBlock(node) {
183 var index = $(node).closest("div").attr('id');
184 var block = $("#"+index);
185 $(block).find("input[type='text']").each(function(){
188 $(block).find("select").each(function(){
189 $(this).find("option:first").attr("selected", true);
193 function check_additem(unique_item_fields) {
195 var data = new Object();
196 data['field'] = new Array();
197 data['value'] = new Array();
198 var array_fields = unique_item_fields.split(' ');
199 $(".error").empty(); // Clear error div
201 // Check if a value is duplicated in form
202 for ( field in array_fields ) {
203 var fieldname = array_fields[field];
204 if (fieldname == '') {
207 var values = new Array();
208 $("[name='kohafield'][value='items."+ fieldname +"']").each(function(){
209 var input = $(this).prevAll("input[name='field_value']")[0];
211 values.push($(input).val());
212 data['field'].push(fieldname);
213 data['value'].push($(input).val());
217 var sorted_arr = values.sort();
218 for (var i = 0; i < sorted_arr.length - 1; i += 1) {
219 if (sorted_arr[i + 1] == sorted_arr[i]) {
221 fieldname + " '" + sorted_arr[i] + "' "
222 + (window.MSG_ADDITEM_JS_IS_DUPLICATE || "is duplicated")
229 // If there is a duplication, we raise an error
230 if ( success == false ) {
236 url: '/cgi-bin/koha/acqui/check_uniqueness.pl',
240 success: function(data) {
241 for (field in data) {
243 for (var i=0; i < data[field].length; i++) {
244 var value = data[field][i];
246 field + " '" + value + "' "
247 + (window.MSG_ADDITEM_JS_ALREADY_EXISTS_IN_DB
248 || "already exists in database")
256 if ( success == false ) {