1 function addItem( node, unique_item_fields ) {
2 var index = $(node).parent().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("a[name='buttonPlus']").text("Update");
16 $("#quantity").val(current_qty + 1);
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 result += "<td>" + field_value + "</td>";
75 function addItemInList(index, unique_item_fields) {
76 $("#items_list").show();
77 var tr = constructTrNode(index, unique_item_fields);
78 $("#items_list table tbody").append(tr);
81 function deleteItemBlock(node_a, index, unique_item_fields) {
82 $("#" + index).remove();
83 var current_qty = parseInt($("#quantity").val());
85 if($("#quantity_to_receive").length != 0) {
86 max_qty = parseInt($("#quantity_to_receive").val());
90 $("#quantity").val(current_qty - 1);
91 $(node_a).parents('tr').remove();
92 if(current_qty - 1 == 0)
93 $("#items_list").hide();
95 if ( $("#quantity").val() <= max_qty - 1) {
96 if ( $("#outeritemblock").children("div :visible").length == 0 ) {
97 $("#outeritemblock").children("div:last").show();
100 if ( $("#quantity").val() == 0 && $("#outeritemblock > div").length == 0) {
101 cloneItemBlock(0, unique_item_fields);
105 function cloneItemBlock(index, unique_item_fields) {
108 original = $("#" + index); //original <div>
110 var dont_copy_fields = new Array();
111 if(unique_item_fields) {
112 var dont_copy_fields = unique_item_fields.split(' ');
113 for(i in dont_copy_fields) {
114 dont_copy_fields[i] = "items." + dont_copy_fields[i];
118 var random = Math.floor(Math.random()*100000); // get a random itemid.
119 var clone = $("<div id='itemblock"+random+"'></div>")
121 url: "/cgi-bin/koha/services/itemrecorddisplay.pl",
126 success: function(data, textStatus, jqXHR) {
127 /* Create the item block */
128 $(clone).append(data);
129 /* Change all itemid fields value */
130 $(clone).find("input[name='itemid']").each(function(){
133 /* Add buttons + and Clear */
134 var buttonPlus = '<a name="buttonPlus" style="cursor:pointer; margin:0 1em;" onclick="addItem(this,\'' + unique_item_fields + '\')">Add</a>';
135 var buttonClear = '<a name="buttonClear" style="cursor:pointer;" onclick="clearItemBlock(this)">' + (window.MSG_ADDITEM_JS_CLEAR || 'Clear') + '</a>';
136 $(clone).append(buttonPlus).append(buttonClear);
137 /* Copy values from the original block (input) */
138 $(original).find("input[name='field_value']").each(function(){
139 var kohafield = $(this).siblings("input[name='kohafield']").val();
140 if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) {
141 $(this).parent("div").attr("id").match(/^(subfield.)/);
143 var value = $(this).val();
144 $(clone).find("div[id^='"+id+"'] input[name='field_value']").val(value);
147 /* Copy values from the original block (select) */
148 $(original).find("select[name='field_value']").each(function(){
149 var kohafield = $(this).siblings("input[name='kohafield']").val();
150 if($(this).val() && dont_copy_fields.indexOf(kohafield) == -1) {
151 $(this).parent("div").attr("id").match(/^(subfield.)/);
153 var value = $(this).val();
154 $(clone).find("div[id^='"+id+"'] select[name='field_value']").val(value);
158 $("#outeritemblock").append(clone);
163 function clearItemBlock(node) {
164 var index = $(node).parent().attr('id');
165 var block = $("#"+index);
166 $(block).find("input[type='text']").each(function(){
169 $(block).find("select").each(function(){
170 $(this).find("option:first").attr("selected", true);
174 function check_additem(unique_item_fields) {
176 var data = new Object();
177 data['field'] = new Array();
178 data['value'] = new Array();
179 var array_fields = unique_item_fields.split(' ');
180 $(".error").empty(); // Clear error div
182 // Check if a value is duplicated in form
183 for ( field in array_fields ) {
184 var fieldname = array_fields[field];
185 var values = new Array();
186 $("[name='kohafield'][value=items."+array_fields[field]+"]").each(function(){
187 var input = $(this).prevAll("input[name='field_value']")[0];
189 values.push($(input).val());
190 data['field'].push(fieldname);
191 data['value'].push($(input).val());
195 var sorted_arr = values.sort();
196 for (var i = 0; i < sorted_arr.length - 1; i += 1) {
197 if (sorted_arr[i + 1] == sorted_arr[i]) {
199 fieldname + " '" + sorted_arr[i] + "' "
200 + (window.MSG_ADDITEM_JS_IS_DUPLICATE || "is duplicated")
207 // If there is a duplication, we raise an error
208 if ( success == false ) {
214 url: '/cgi-bin/koha/acqui/check_uniqueness.pl',
218 success: function(data) {
219 for (field in data) {
221 for (var i=0; i < data[field].length; i++) {
222 var value = data[field][i];
224 field + " '" + value + "' "
225 + (window.MSG_ADDITEM_JS_ALREADY_EXISTS_IN_DB
226 || "already exists in database")
234 if ( success == false ) {