Bug 21333: (follow-up) Make link a button
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / subscription-add.js
1 /* global irregularity more_than_one_serial subscriptionid tags */
2
3 var globalnumpatterndata;
4 var globalfreqdata;
5 var advancedpatternlocked;
6 var patternneedtobetested = 0;
7 if ( irregularity !== "" ){
8     patternneedtobetested = 1;
9 }
10
11 function check_issues(){
12     if (globalfreqdata.unit.length >0) {
13         if (document.f.subtype.value == globalfreqdata.unit){
14             document.f.issuelengthcount.value=(document.f.sublength.value*globalfreqdata.issuesperunit)/globalfreqdata.unitsperissue;
15         } else if (document.f.subtype.value != "issues"){
16             alert( MSG_FREQUENCY_LENGTH_ERROR );
17         }
18     }
19 }
20
21 function addbiblioPopup(biblionumber) {
22     var destination = "/cgi-bin/koha/cataloguing/addbiblio.pl?mode=popup";
23     if(biblionumber){
24         destination += "&biblionumber="+biblionumber;
25     }
26     window.open(destination,'AddBiblioPopup','width=1024,height=768,toolbar=no,scrollbars=yes');
27 }
28
29 function Plugin(){
30     window.open('subscription-bib-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
31 }
32
33 function FindAcqui(){
34     window.open('acqui-search.pl','FindASupplier','width=800,height=400,toolbar=no,scrollbars=yes');
35 }
36
37 function Find_ISSN(f){
38     window.open('issn-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
39 }
40
41 function Clear(id) {
42     $("#"+id).val('');
43 }
44
45 function Check_page1() {
46     if ( $("#aqbooksellerid").val().length == 0) {
47         input_box = confirm(_("If you wish to claim late or missing issues you must link this subscription to a vendor. Click OK to ignore or Cancel to return and enter a vendor"));
48         if (input_box==false) {
49             return false;
50         }
51     }
52     if ($("#biblionumber").val().length == 0) {
53         alert(_("You must choose or create a biblio"));
54         return false;
55     }
56
57     return true;
58 }
59
60 function Check_page2(){
61     if( more_than_one_serial == "" ){
62         if($("#acqui_date").val().length == 0){
63             alert(_("You must choose a first publication date"));
64             return false;
65         }
66     }
67     if($("#sublength").val().length == 0 && $("input[name='enddate']").val().length == 0){
68         alert(_("You must choose a subscription length or an end date."));
69         return false;
70     }
71     if(advancedpatternlocked == 0){
72         alert(_("You have modified the advanced prediction pattern. Please save your work or cancel modifications."));
73         return false;
74     }
75     if(patternneedtobetested){
76         if( irregularity !== "" ){
77            alert(_("Warning! Present pattern has planned irregularities. Click on 'Test prediction pattern' to check if it's still valid"));
78         } else {
79             alert(_("Please click on 'Test prediction pattern' before saving subscription."));
80         }
81         return false;
82     }
83
84     return true;
85 }
86
87 function frequencyload(){
88     $.getJSON("subscription-frequency.pl",{"frequency_id":document.f.frequency.value,ajax:'true'},
89         function(freqdata){
90             globalfreqdata=freqdata;
91             if ( globalfreqdata.unit && globalfreqdata.unit.length == 0 ) {
92                 var option = $("#subtype option[value='issues']");
93                 $(option).attr('selected', 'selected');
94                 $("#subtype option[value!='issues']").prop('disabled', true)
95             } else {
96                 $("#subtype option").prop('disabled', false)
97             }
98         }
99     )
100 }
101
102 function numberpatternload(){
103     $.getJSON("subscription-numberpattern.pl",{"numberpattern_id":document.f.numbering_pattern.value,ajax:'true'},
104         function(numpatterndata){
105             globalnumpatterndata=numpatterndata;
106             if (globalnumpatterndata==undefined){
107                 return false;
108             }
109             displaymoreoptions();
110             restoreAdvancedPattern();
111         }
112     );
113 }
114
115 function displaymoreoptions() {
116     if(globalnumpatterndata == undefined){
117         $("#moreoptionst").hide();
118         return false;
119     }
120
121     var X = 0, Y = 0, Z = 0;
122     var numberingmethod = globalnumpatterndata.numberingmethod;
123     if(numberingmethod.match(/{X}/)) X = 1;
124     if(numberingmethod.match(/{Y}/)) Y = 1;
125     if(numberingmethod.match(/{Z}/)) Z = 1;
126
127     if(X || Y || Z) {
128         $("#moreoptionst").show();
129     } else {
130         $("#moreoptionst").hide();
131     }
132
133     if(X) {
134         if(globalnumpatterndata.label1) {
135             $("#headerX").html(globalnumpatterndata.label1);
136         } else {
137             $("#headerX").html("X");
138         }
139         $("#headerX").show();
140         $("#beginsX").show();
141         $("#innerX").show();
142     } else {
143         $("#headerX").hide();
144         $("#beginsX").hide();
145         $("#innerX").hide();
146         $("#lastvaluetemp1").val('');
147         $("#innerlooptemp1").val('');
148     }
149     if(Y) {
150         if(globalnumpatterndata.label2) {
151             $("#headerY").html(globalnumpatterndata.label2);
152         } else {
153             $("#headerY").html("Y");
154         }
155         $("#headerY").show();
156         $("#beginsY").show();
157         $("#innerY").show();
158     } else {
159         $("#headerY").hide();
160         $("#beginsY").hide();
161         $("#innerY").hide();
162         $("#lastvaluetemp2").val('');
163         $("#innerlooptemp2").val('');
164     }
165     if(Z) {
166         if(globalnumpatterndata.label3) {
167             $("#headerZ").html(globalnumpatterndata.label3);
168         } else {
169             $("#headerZ").html("Z");
170         }
171         $("#headerZ").show();
172         $("#beginsZ").show();
173         $("#innerZ").show();
174     } else {
175         $("#headerZ").hide();
176         $("#beginsZ").hide();
177         $("#innerZ").hide();
178         $("#lastvaluetemp3").val('');
179         $("#innerlooptemp3").val('');
180     }
181 }
182
183 function modifyAdvancedPattern() {
184     $("#patternname").prop('readOnly', false).val('');
185     $("#numberingmethod").prop('readOnly', false);
186
187     $("#advancedpredictionpatternt input").each(function() {
188         $(this).prop('readOnly', false);
189     });
190     $("#advancedpredictionpatternt select").each(function() {
191         $(this).prop('disabled', false);
192     });
193
194     $("#restoreadvancedpatternbutton").show();
195     $("#saveadvancedpatternbutton").show();
196     $("#modifyadvancedpatternbutton").hide();
197
198     advancedpatternlocked = 0;
199 }
200
201 function restoreAdvancedPattern() {
202     $("#patternname").prop('readOnly', true).val(globalnumpatterndata.label);
203     $("#numberingmethod").prop('readOnly', true).val(globalnumpatterndata.numberingmethod);
204
205     $("#advancedpredictionpatternt input").each(function() {
206         $(this).prop('readOnly', true);
207         var id = $(this).attr('id');
208         if(id.match(/lastvalue/) || id.match(/innerloop/)) {
209             var tempid = id.replace(/(\d)/, "temp$1");
210             $(this).val($("#"+tempid).val());
211         } else {
212             $(this).val(globalnumpatterndata[id]);
213         }
214     });
215     $("#advancedpredictionpatternt select").each(function() {
216         $(this).prop('disabled', true);
217         var id = $(this).attr('id');
218         $(this).val(globalnumpatterndata[id]);
219     });
220
221     $("#restoreadvancedpatternbutton").hide();
222     $("#saveadvancedpatternbutton").hide();
223     $("#modifyadvancedpatternbutton").show();
224
225     advancedpatternlocked = 1;
226 }
227
228 function testPredictionPattern() {
229     var frequencyid = $("#frequency").val();
230     var acquidate;
231     var error = 0;
232     var error_msg = "";
233     if(frequencyid == undefined || frequencyid == ""){
234         error_msg += _("- Frequency is not defined") + "\n";
235         error ++;
236     }
237     acquidate = $("#acqui_date").val();
238     if(acquidate == undefined || acquidate == ""){
239         error_msg += _("- First publication date is not defined") + "\n";
240         error ++;
241     }
242     if( more_than_one_serial !== "" ){
243         var nextacquidate = $("#nextacquidate").val();
244         if(nextacquidate == undefined || nextacquidate == ""){
245             error_msg += _("- Next issue publication date is not defined") + "\n";
246             error ++;
247         }
248     }
249
250     if(error){
251         alert(_("Cannot test prediction pattern for the following reason(s): %s").format(error_msg));
252         return false;
253     }
254
255     var custompattern = 0;
256     if(advancedpatternlocked == 0) {
257         custompattern = 1;
258     }
259
260     var ajaxData = {
261         'custompattern': custompattern,
262         'firstacquidate': acquidate
263     };
264
265     if( subscriptionid !== "" ){
266         ajaxData.subscriptionid = subscriptionid;
267     }
268     if( more_than_one_serial !== "" ){
269         ajaxData.nextacquidate = nextacquidate;
270     }
271
272
273     var ajaxParams = [
274         'to', 'subtype', 'sublength', 'frequency', 'numberingmethod',
275         'lastvalue1', 'lastvalue2', 'lastvalue3', 'add1', 'add2', 'add3',
276         'every1', 'every2', 'every3', 'innerloop1', 'innerloop2', 'innerloop3',
277         'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
278         'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale'
279     ];
280     for(i in ajaxParams) {
281         var param = ajaxParams[i];
282         var value = $("#"+param).val();
283         if(value.length > 0)
284             ajaxData[param] = value;
285     }
286
287     $.ajax({
288         url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
289         data: ajaxData,
290         success: function(data) {
291             $("#displayexample").html(data);
292             patternneedtobetested = 0;
293         }
294     });
295 }
296
297 function saveAdvancedPattern() {
298     if ($("#patternname").val().length == 0) {
299         alert(_("Please enter a name for this pattern"));
300         return false;
301     }
302
303     // Check if patternname already exists, and modify pattern
304     // instead of creating it if so
305     var found = 0;
306     $("#numberpattern option").each(function(){
307         if($(this).text() == $("#patternname").val()){
308             found = 1;
309             return false;
310         }
311     });
312     var cnfrm = 1;
313     if(found){
314         var msg = _("This pattern name already exists. Do you want to modify it?")
315             + "\n" + _("Warning: it will modify the pattern for all subscriptions that are using it.");
316         cnfrm = confirm(msg);
317     }
318
319     if(cnfrm) {
320         var ajaxData = {};
321         var ajaxParams = [
322             'patternname', 'numberingmethod', 'label1', 'label2', 'label3',
323             'add1', 'add2', 'add3', 'every1', 'every2', 'every3',
324             'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
325             'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale'
326         ];
327         for(i in ajaxParams) {
328             var param = ajaxParams[i];
329             var value = $("#"+param).val();
330             if(value.length > 0)
331                 ajaxData[param] = value;
332         }
333
334         $.getJSON(
335             "/cgi-bin/koha/serials/create-numberpattern.pl",
336             ajaxData,
337             function(data){
338                 if (data.numberpatternid) {
339                     if(found == 0){
340                         $("#numberpattern").append("<option value=\""+data.numberpatternid+"\">"+$("#patternname").val()+"</option>");
341                     }
342                     $("#numberpattern").val(data.numberpatternid);
343                     numberpatternload();
344                 } else {
345                     alert(_("Something went wrong. Unable to create a new numbering pattern."));
346                 }
347             }
348         );
349     }
350 }
351
352 function show_page_1() {
353     $("#page_1").show();
354     $("#page_2").hide();
355     $("#page_number").text("1/2");
356 }
357
358 function show_page_2() {
359     $("#page_1").hide();
360     $("#page_2").show();
361     $("#page_number").text("2/2");
362     displaymoreoptions();
363 }
364
365
366 $(document).ready(function() {
367     $("#aqbooksellerid").on('keypress', function(e) {
368         if (e.keyCode == 13) {
369             e.preventDefault();
370             FindAcqui();
371         }
372     });
373     $("#biblionumber").on('keypress', function(e) {
374         if (e.keyCode == 13) {
375             e.preventDefault();
376             Plugin();
377         }
378     });
379     $("select#frequency").change(function(){
380         patternneedtobetested = 1;
381         $("input[name='enddate']").val('');
382         frequencyload();
383     });
384     $("select#numberpattern").change(function(){
385         patternneedtobetested = 1;
386         numberpatternload();
387     });
388     $("#subtype").change(function(){
389         $("input[name='enddate']").val('');
390     });
391     $("#sublength").change(function(){
392         $("input[name='enddate']").val('');
393     });
394     $("#lastvaluetemp1").keyup(function(){
395         $("#lastvalue1").val($(this).val());
396     });
397     $("#lastvaluetemp2").keyup(function(){
398         $("#lastvalue2").val($(this).val());
399     });
400     $("#lastvaluetemp3").keyup(function(){
401         $("#lastvalue3").val($(this).val());
402     });
403     $("#lastvalue1").keyup(function(){
404         $("#lastvaluetemp1").val($(this).val());
405     });
406     $("#lastvalue2").keyup(function(){
407         $("#lastvaluetemp2").val($(this).val());
408     });
409     $("#lastvalue3").keyup(function(){
410         $("#lastvaluetemp3").val($(this).val());
411     });
412
413     $("#innerlooptemp1").keyup(function(){
414         $("#innerloop1").val($(this).val());
415     });
416     $("#innerlooptemp2").keyup(function(){
417         $("#innerloop2").val($(this).val());
418     });
419     $("#innerlooptemp3").keyup(function(){
420         $("#innerloop3").val($(this).val());
421     });
422     $("#innerloop1").keyup(function(){
423         $("#innerlooptemp1").val($(this).val());
424     });
425     $("#innerloop2").keyup(function(){
426         $("#innerlooptemp2").val($(this).val());
427     });
428     $("#innerloop3").keyup(function(){
429         $("#innerlooptemp3").val($(this).val());
430     });
431
432     if($("#frequency").val() != ""){
433         frequencyload();
434     }
435     if($("#numberpattern").val() != ""){
436         numberpatternload();
437     }
438
439     if( tags.length > 0 ){
440         tags.forEach( function( item ) {
441             var node = $("[name='" + item + "']");
442             if ( $(node).is('input') || $(node).is('textarea') ) {
443                 $(node).val("");
444             } else if ( $(node).is('select') ) {
445                 $(node).find("option:first").attr('selected','selected');
446             }
447         });
448     }
449
450     show_page_1();
451     $("#subscription_add_form").on("submit",function(){
452         return Check_page2();
453     });
454     $("#vendor_search").on("click",function(e){
455         e.preventDefault();
456         FindAcqui();
457     });
458     $("#record_search").on("click",function(e){
459         e.preventDefault();
460         Plugin();
461     });
462     $("#biblio_add_edit").on("click",function(e){
463         e.preventDefault();
464         if( $(this).data("biblionumber") ){
465             addbiblioPopup( $(this).data("biblionumber") );
466         } else {
467             addbiblioPopup();
468         }
469     });
470     $("#subscription_add_next").on("click",function(){
471         if ( Check_page1() ){
472             show_page_2();
473         }
474     });
475     $("#subscription_add_previous").on("click",function(){
476         show_page_1();
477     });
478     $(".toggle_advanced_pattern").on("click",function(e){
479         e.preventDefault();
480         $("#advancedpredictionpattern").toggle();
481         $(".toggle_advanced_pattern").toggle();
482     });
483     $("#modifyadvancedpatternbutton").on("click",function(e){
484         e.preventDefault();
485         modifyAdvancedPattern();
486     });
487     $("#restoreadvancedpatternbutton").on("click",function(e){
488         e.preventDefault();
489         restoreAdvancedPattern();
490     });
491     $("#saveadvancedpatternbutton").on("click",function(e){
492         e.preventDefault();
493         saveAdvancedPattern();
494     });
495     $("#testpatternbutton").on("click",function(e){
496         e.preventDefault();
497         testPredictionPattern();
498     });
499 });