Bug 22250: Clean up Mana KB integration with serials and reports
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / subscription-add.js
1 /* global _ irregularity more_than_one_serial subscriptionid tags interface theme mana_enabled MSG_FREQUENCY_LENGTH_ERROR */
2
3 var globalnumpatterndata;
4 var globalfreqdata;
5 var mananumpatterndata;
6 var manafreqdata;
7 var manaid;
8 var advancedpatternlocked;
9 var patternneedtobetested = 0;
10 if ( irregularity !== "" ){
11     patternneedtobetested = 1;
12 }
13
14 function check_issues(){
15     if (globalfreqdata.unit.length >0) {
16         if (document.f.subtype.value == globalfreqdata.unit){
17             document.f.issuelengthcount.value=(document.f.sublength.value*globalfreqdata.issuesperunit)/globalfreqdata.unitsperissue;
18         } else if (document.f.subtype.value != "issues"){
19             alert( MSG_FREQUENCY_LENGTH_ERROR );
20         }
21     }
22 }
23
24 function addbiblioPopup(biblionumber) {
25     var destination = "/cgi-bin/koha/cataloguing/addbiblio.pl?mode=popup";
26     if(biblionumber){
27         destination += "&biblionumber="+biblionumber;
28     }
29     window.open(destination,'AddBiblioPopup','width=1024,height=768,toolbar=no,scrollbars=yes');
30 }
31
32 function Plugin(){
33     window.open('subscription-bib-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
34 }
35
36 function FindAcqui(){
37     window.open('acqui-search.pl','FindASupplier','width=800,height=400,toolbar=no,scrollbars=yes');
38 }
39
40 function Find_ISSN(f){
41     window.open('issn-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
42 }
43
44 function Clear(id) {
45     $("#"+id).val('');
46 }
47
48 function Check_page1() {
49     if ( $("#aqbooksellerid").val().length == 0) {
50         input_box = confirm( MSG_LINK_TO_VENDOR );
51         if (input_box==false) {
52             return false;
53         }
54     }
55     if ($("#biblionumber").val().length == 0) {
56         alert( MSG_LINK_BIBLIO );
57         return false;
58     }
59
60     return true;
61 }
62
63 function Check_page2(){
64     if( more_than_one_serial == "" ){
65         if($("#acqui_date").val().length == 0){
66             alert( MSG_REQUIRED_PUB_DATE );
67             return false;
68         }
69     }
70     if($("#sublength").val().length == 0 && $("input[name='enddate']").val().length == 0){
71         alert( MSG_REQUIRED_SUB_LENGTH );
72         return false;
73     }
74     if(advancedpatternlocked == 0){
75         alert( MSG_SAVE_PREDICTION_PATTERN );
76         return false;
77     }
78     if(patternneedtobetested){
79         if( irregularity !== "" ){
80             alert( MSG_PATTERN_IRREG );
81         } else {
82             alert( MSG_TEST_PREDICTION );
83         }
84         return false;
85     }
86
87     return true;
88 }
89
90 function frequencyload(){
91     if ($("#frequency option:selected").val() === "mana"){
92         globalfreqdata=manafreqdata;
93         $("input[name='sfdescription']").val(manafreqdata.description);
94         $("input[name='unit']").val(manafreqdata.unit);
95         $("input[name='unitsperissue']").val(manafreqdata.unitsperissue);
96         $("input[name='issuesperunit']").val(manafreqdata.issuesperunit);
97         if ($( "#numberpattern option:selected" ).val() === "mana" ) {
98             $("#mana_id").val(manaid);
99         }
100     } else {
101         $.getJSON("subscription-frequency.pl",{"frequency_id":document.f.frequency.value,ajax:'true'},
102             function(freqdata){
103                 globalfreqdata=freqdata;
104                 if ( globalfreqdata.unit && globalfreqdata.unit.length == 0 ) {
105                     var option = $("#subtype option[value='issues']");
106                     $(option).attr('selected', 'selected');
107                     $("#subtype option[value!='issues']").prop('disabled', true);
108                 } else {
109                     $("#subtype option").prop('disabled', false);
110                 }
111             }
112         );
113         $("#mana_id").val("");
114     }
115 }
116
117 function numberpatternload(){
118     if($("#numberpattern option:selected" ).val() === "mana"){
119         globalnumpatterndata=mananumpatterndata;
120         $("input[name='sndescription']").val(mananumpatterndata.description);
121         if($("#frequency option:selected" ).val() === "mana"){
122             $("#mana_id").val(manaid);
123         }
124         if (globalnumpatterndata==undefined){
125             return false;
126         }
127         displaymoreoptions();
128         restoreAdvancedPattern();
129     } else {
130         $.getJSON("subscription-numberpattern.pl",{"numberpattern_id":document.f.numbering_pattern.value,ajax:'true'},
131             function(numpatterndata){
132                 globalnumpatterndata=numpatterndata;
133                 if (globalnumpatterndata==undefined){
134                     return false;
135                 }
136                 displaymoreoptions();
137                 restoreAdvancedPattern();
138             }
139         );
140         $("#mana_id").val("");
141     }
142 }
143
144 function displaymoreoptions() {
145     if(globalnumpatterndata == undefined){
146         $("#moreoptionst").hide();
147         return false;
148     }
149
150     var X = 0, Y = 0, Z = 0;
151     var numberingmethod = globalnumpatterndata.numberingmethod;
152     if(numberingmethod.match(/{X}/)) X = 1;
153     if(numberingmethod.match(/{Y}/)) Y = 1;
154     if(numberingmethod.match(/{Z}/)) Z = 1;
155
156     if(X || Y || Z) {
157         $("#moreoptionst").show();
158     } else {
159         $("#moreoptionst").hide();
160     }
161
162     if(X) {
163         if(globalnumpatterndata.label1) {
164             $("#headerX").html(globalnumpatterndata.label1);
165         } else {
166             $("#headerX").html("X");
167         }
168         $("#headerX").show();
169         $("#beginsX").show();
170         $("#innerX").show();
171     } else {
172         $("#headerX").hide();
173         $("#beginsX").hide();
174         $("#innerX").hide();
175         $("#lastvaluetemp1").val('');
176         $("#innerlooptemp1").val('');
177     }
178     if(Y) {
179         if(globalnumpatterndata.label2) {
180             $("#headerY").html(globalnumpatterndata.label2);
181         } else {
182             $("#headerY").html("Y");
183         }
184         $("#headerY").show();
185         $("#beginsY").show();
186         $("#innerY").show();
187     } else {
188         $("#headerY").hide();
189         $("#beginsY").hide();
190         $("#innerY").hide();
191         $("#lastvaluetemp2").val('');
192         $("#innerlooptemp2").val('');
193     }
194     if(Z) {
195         if(globalnumpatterndata.label3) {
196             $("#headerZ").html(globalnumpatterndata.label3);
197         } else {
198             $("#headerZ").html("Z");
199         }
200         $("#headerZ").show();
201         $("#beginsZ").show();
202         $("#innerZ").show();
203     } else {
204         $("#headerZ").hide();
205         $("#beginsZ").hide();
206         $("#innerZ").hide();
207         $("#lastvaluetemp3").val('');
208         $("#innerlooptemp3").val('');
209     }
210 }
211
212 function modifyAdvancedPattern() {
213     $("#patternname").prop('readOnly', false).val('');
214     $("#numberingmethod").prop('readOnly', false);
215
216     $("#advancedpredictionpatternt input").each(function() {
217         $(this).prop('readOnly', false);
218     });
219     $("#advancedpredictionpatternt select").each(function() {
220         $(this).prop('disabled', false);
221     });
222
223     $("#restoreadvancedpatternbutton").show();
224     $("#saveadvancedpatternbutton").show();
225     $("#modifyadvancedpatternbutton").hide();
226
227     advancedpatternlocked = 0;
228 }
229
230 function restoreAdvancedPattern() {
231     $("#patternname").prop('readOnly', true).val(globalnumpatterndata.label);
232     $("#numberingmethod").prop('readOnly', true).val(globalnumpatterndata.numberingmethod);
233
234     $("#advancedpredictionpatternt input").each(function() {
235         $(this).prop('readOnly', true);
236         var id = $(this).attr('id');
237         if(id.match(/lastvalue/) || id.match(/innerloop/)) {
238             var tempid = id.replace(/(\d)/, "temp$1");
239             $(this).val($("#"+tempid).val());
240         } else {
241             $(this).val(globalnumpatterndata[id]);
242         }
243     });
244     $("#advancedpredictionpatternt select").each(function() {
245         $(this).prop('disabled', true);
246         var id = $(this).attr('id');
247         $(this).val(globalnumpatterndata[id]);
248     });
249
250     $("#restoreadvancedpatternbutton").hide();
251     $("#saveadvancedpatternbutton").hide();
252     $("#modifyadvancedpatternbutton").show();
253
254     advancedpatternlocked = 1;
255 }
256
257 function testPredictionPattern() {
258     var frequencyid = $("#frequency").val();
259     var acquidate;
260     var error = 0;
261     var error_msg = "";
262     if(frequencyid == undefined || frequencyid == ""){
263         error_msg += "- " + MSG_FREQUENCY_UNDEFINED + "\n";
264         error ++;
265     }
266     acquidate = $("#acqui_date").val();
267     if(acquidate == undefined || acquidate == ""){
268         error_msg += "-" + MSG_PUB_DATE_UNDEFINED + "\n";
269         error ++;
270     }
271     if( more_than_one_serial !== "" ){
272         var nextacquidate = $("#nextacquidate").val();
273         if(nextacquidate == undefined || nextacquidate == ""){
274             error_msg += "-" + MSG_NEXT_ISSUE_UNDEFINED + "\n";
275             error ++;
276         }
277     }
278
279     if(error){
280         alert( MSG_PATTERN_TEST_FAILED.format(error_msg) );
281         return false;
282     }
283
284     var custompattern = 0;
285     if(advancedpatternlocked == 0) {
286         custompattern = 1;
287     }
288
289     var ajaxData = {
290         'custompattern': custompattern,
291         'firstacquidate': acquidate
292     };
293
294     if( subscriptionid !== "" ){
295         ajaxData.subscriptionid = subscriptionid;
296     }
297     if( more_than_one_serial !== "" ){
298         ajaxData.nextacquidate = nextacquidate;
299     }
300
301
302     var ajaxParams = [
303         'to', 'subtype', 'sublength', 'frequency', 'numberingmethod',
304         'lastvalue1', 'lastvalue2', 'lastvalue3', 'add1', 'add2', 'add3',
305         'every1', 'every2', 'every3', 'innerloop1', 'innerloop2', 'innerloop3',
306         'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
307         'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale',
308         'sfdescription', 'unitsperissue', 'issuesperunit', 'unit'
309     ];
310     for(i in ajaxParams) {
311         var param = ajaxParams[i];
312         var value = $("#"+param).val();
313         if(value.length > 0)
314             ajaxData[param] = value;
315     }
316
317     $.ajax({
318         url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
319         data: ajaxData,
320         success: function(data) {
321             $("#displayexample").html(data).show();
322             patternneedtobetested = 0;
323         }
324     });
325 }
326
327 function saveAdvancedPattern() {
328     if ($("#patternname").val().length == 0) {
329         alert( MSG_PATTERN_NAME );
330         return false;
331     }
332
333     // Check if patternname already exists, and modify pattern
334     // instead of creating it if so
335     var found = 0;
336     $("#numberpattern option").each(function(){
337         if($(this).text() == $("#patternname").val()){
338             found = 1;
339             return false;
340         }
341     });
342     var cnfrm = 1;
343     if(found){
344         var msg = MSG_PATTERN_NAME_EXISTS
345             + "\n" + MSG_OVERWRITE_PATTERNS;
346         cnfrm = confirm(msg);
347     }
348
349     if(cnfrm) {
350         var ajaxData = {};
351         var ajaxParams = [
352             'patternname', 'numberingmethod', 'label1', 'label2', 'label3',
353             'add1', 'add2', 'add3', 'every1', 'every2', 'every3',
354             'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
355             'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale'
356         ];
357         for(i in ajaxParams) {
358             var param = ajaxParams[i];
359             var value = $("#"+param).val();
360             if(value.length > 0)
361                 ajaxData[param] = value;
362         }
363
364         $.getJSON(
365             "/cgi-bin/koha/serials/create-numberpattern.pl",
366             ajaxData,
367             function(data){
368                 if (data.numberpatternid) {
369                     if(found == 0){
370                         $("#numberpattern").append("<option value=\""+data.numberpatternid+"\">"+$("#patternname").val()+"</option>");
371                     }
372                     $("#numberpattern").val(data.numberpatternid);
373                     numberpatternload();
374                 } else {
375                     alert( MSG_PATTERN_CREATE_FAILED );
376                 }
377             }
378         );
379     }
380 }
381
382 function show_page_1() {
383     $("#page_1").show();
384     $("#page_2").hide();
385     $("#page_number").text("1/2");
386 }
387
388 function show_page_2() {
389     $("#page_1").hide();
390     $("#page_2").show();
391     $("#page_number").text("2/2");
392     displaymoreoptions();
393 }
394
395 function mana_search() {
396     $("#mana_search").html("<p>" + MSG_MANA_SEARCHING + "... <img src='" + interface + "/" + theme + "/img/spinner-small.gif' /></p>");
397     $("#mana_search").show();
398
399     $.ajax({
400         type: "POST",
401         url: "/cgi-bin/koha/svc/mana/search",
402         data: {id: $("#biblionumber").val(), resource: 'subscription', usecomments: 1},
403         dataType: "html",
404     })
405         .done( function( result ) {
406             $("#mana_search_result .modal-body").html(result);
407             $("#mana_search_result_label").text( MSG_MANA_RESULTS );
408             $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, {
409                 "sPaginationType": "four_button",
410                 "order":[[4, "desc"], [5, "desc"]],
411                 "autoWidth": false,
412                 "columnDefs": [
413                     { "width": "35%", "targets": 1 }
414                 ],
415                 "aoColumnDefs": [
416                     { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
417                     { "sType": "title-string", "aTargets" : [ "title-string" ] },
418                     { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
419                 ]
420             }));
421             if( $("#mana_results_datatable").length && $("td.dataTables_empty").length == 0){
422                 $("#mana_search").html("<p>" + MSG_MANA_SUBSCRIPTION_FOUND + "</p><p> <a href=\"#\" data-toggle=\"modal\" data-target=\"#mana_search_result\"><i class=\"fa fa-window-maximize\"></i> " + MSG_MANA_SHOW_DETAILS + "</a></p>");
423             }
424             else if ( $("#mana_results_datatable").length ){
425                 $("#mana_search").html("<p>" + MSG_MANA_NO_SUBSCRIPTION_FOUND + "</p><p>" + MSG_MANA_SHARE_PATTERN + "</p>");
426             }
427             else{
428                 $("#mana_search").html( result );
429             }
430             $("#mana_search").show();
431         });
432 }
433
434 function mana_use(mana_id){
435     $("tr").removeClass("selected");
436     $("#row"+mana_id).addClass("selected");
437     $.ajax( {
438         type: "POST",
439         url: "/cgi-bin/koha/svc/mana/use",
440         data: {id: mana_id, resource: 'subscription'},
441         dataType: "json",
442     })
443         .done(function(result){
444             var select = document.getElementById('numberpattern');
445             for(i = 0; i < select.length; i++){
446                 if(select[i].value === "mana"){
447                     select.remove(i);
448                 }
449             }
450             var optionnumpattern = document.createElement("option");
451             optionnumpattern.text = result.label + " (mana)";
452             optionnumpattern.selected = true;
453             optionnumpattern.value="mana";
454             select.add(optionnumpattern);
455
456             mananumpatterndata = {
457                 id:"mana",
458                 add1:result.add1,
459                 add2:result.add2,
460                 add3:result.add3,
461                 description:result.sndescription,
462                 displayorder:result.displayorder,
463                 every1:result.every1,
464                 every2:result.every2,
465                 every3:result.every3,
466                 label:result.label,
467                 label1:result.label1,
468                 label2:result.label2,
469                 label3:result.label3,
470                 numbering1:result.numbering1,
471                 numbering2:result.numbering2,
472                 numbering3:result.numbering3,
473                 numberingmethod:result.numberingmethod,
474                 setto1:result.setto1,
475                 setto2:result.setto2,
476                 setto3:result.setto3,
477                 whenmorethan1:result.whenmorethan1,
478                 whenmorethan2:result.whenmorethan2,
479                 whenmorethan3:result.whenmorethan3,
480             };
481             select = document.getElementById("frequency");
482             for(i = 0; i < select.length; i++){
483                 if(select[i].value === "mana"){
484                     select.remove(i);
485                 }
486             }
487             var optionfreq = document.createElement("option");
488             optionfreq.text = result.sfdescription + " (mana)";
489             optionfreq.selected = true;
490             optionfreq.value="mana";
491             select.add(optionfreq);
492             manafreqdata = {
493                 id:"mana",
494                 description:result.sfdescription,
495                 displayorder:result.displayorder,
496                 issuesperunit:result.issuesperunit,
497                 unit:result.unit,
498                 unitsperissue:result.unitsperissue,
499             };
500             manaid = result.id;
501             $("#mana_id").val(manaid);
502             $("#mana_search_result").modal("hide");
503             frequencyload();
504             numberpatternload();
505         })
506         .done( function(){
507             $("tr").removeClass("selected");
508             $(".mana-use i").attr("class","fa fa-download");
509         })
510         .fail( function( result ){
511         });
512 }
513
514 function mana_comment_close(){
515     $("#selected_id").val("");
516     $("#mana-resource-id").val("");
517     $("#mana-comment").val("");
518     $("#mana_results").show();
519     $("#new_mana_comment").hide();
520 }
521
522 $(document).ready(function() {
523     if ( mana_enabled == 1 ) {
524         mana_search();
525     }
526     $("#displayexample").hide();
527
528     // When Mana search results modal is hidden, hide comment form and any status messages
529     $("#mana_search_result").on("hide.bs.modal", function(){
530         $("#mana_results").show();
531         $("#new_mana_comment").hide();
532         $(".mana_comment_status").hide();
533     });
534
535     $("#aqbooksellerid").on('keypress', function(e) {
536         if (e.keyCode == 13) {
537             e.preventDefault();
538             FindAcqui();
539         }
540     });
541     $("#biblionumber").on('keypress', function(e) {
542         if (e.keyCode == 13) {
543             e.preventDefault();
544             Plugin();
545         }
546     });
547     $("select#frequency").change(function(){
548         patternneedtobetested = 1;
549         $("input[name='enddate']").val('');
550         frequencyload();
551     });
552     $("select#numberpattern").change(function(){
553         patternneedtobetested = 1;
554         numberpatternload();
555     });
556     $("#subtype").change(function(){
557         $("input[name='enddate']").val('');
558     });
559     $("#sublength").change(function(){
560         $("input[name='enddate']").val('');
561     });
562     $("#lastvaluetemp1").keyup(function(){
563         $("#lastvalue1").val($(this).val());
564     });
565     $("#lastvaluetemp2").keyup(function(){
566         $("#lastvalue2").val($(this).val());
567     });
568     $("#lastvaluetemp3").keyup(function(){
569         $("#lastvalue3").val($(this).val());
570     });
571     $("#lastvalue1").keyup(function(){
572         $("#lastvaluetemp1").val($(this).val());
573     });
574     $("#lastvalue2").keyup(function(){
575         $("#lastvaluetemp2").val($(this).val());
576     });
577     $("#lastvalue3").keyup(function(){
578         $("#lastvaluetemp3").val($(this).val());
579     });
580
581     $("#innerlooptemp1").keyup(function(){
582         $("#innerloop1").val($(this).val());
583     });
584     $("#innerlooptemp2").keyup(function(){
585         $("#innerloop2").val($(this).val());
586     });
587     $("#innerlooptemp3").keyup(function(){
588         $("#innerloop3").val($(this).val());
589     });
590     $("#innerloop1").keyup(function(){
591         $("#innerlooptemp1").val($(this).val());
592     });
593     $("#innerloop2").keyup(function(){
594         $("#innerlooptemp2").val($(this).val());
595     });
596     $("#innerloop3").keyup(function(){
597         $("#innerlooptemp3").val($(this).val());
598     });
599
600     if($("#frequency").val() != ""){
601         frequencyload();
602     }
603     if($("#numberpattern").val() != ""){
604         numberpatternload();
605     }
606
607     if( tags.length > 0 ){
608         tags.forEach( function( item ) {
609             var node = $("[name='" + item + "']");
610             if ( $(node).is('input') || $(node).is('textarea') ) {
611                 $(node).val("");
612             } else if ( $(node).is('select') ) {
613                 $(node).find("option:first").attr('selected','selected');
614             }
615         });
616     }
617
618     $("#mana_search").hide();
619
620     show_page_1();
621     $("#subscription_add_form").on("submit",function(){
622         return Check_page2();
623     });
624     $("#vendor_search").on("click",function(e){
625         e.preventDefault();
626         FindAcqui();
627     });
628     $("#record_search").on("click",function(e){
629         e.preventDefault();
630         Plugin();
631     });
632     $("#biblio_add_edit").on("click",function(e){
633         e.preventDefault();
634         if( $(this).data("biblionumber") ){
635             addbiblioPopup( $(this).data("biblionumber") );
636         } else {
637             addbiblioPopup();
638         }
639     });
640     $("#subscription_add_next").on("click",function(){
641         if ( Check_page1() ){
642             if ( mana_enabled == 1 ) {
643                 mana_search();
644             }
645             show_page_2();
646         }
647     });
648     $("#subscription_add_previous").on("click",function(){
649         show_page_1();
650     });
651     $(".toggle_advanced_pattern").on("click",function(e){
652         e.preventDefault();
653         $("#advancedpredictionpattern").toggle();
654         $(".toggle_advanced_pattern").toggle();
655     });
656     $("#modifyadvancedpatternbutton").on("click",function(e){
657         e.preventDefault();
658         modifyAdvancedPattern();
659     });
660     $("#restoreadvancedpatternbutton").on("click",function(e){
661         e.preventDefault();
662         restoreAdvancedPattern();
663     });
664     $("#saveadvancedpatternbutton").on("click",function(e){
665         e.preventDefault();
666         saveAdvancedPattern();
667     });
668     $("#testpatternbutton").on("click",function(e){
669         e.preventDefault();
670         testPredictionPattern();
671     });
672     $('#save-subscription').on("click", function(e){
673         $('select:disabled').removeAttr('disabled');
674     });
675
676     $("body").on("click", ".mana-use", function(e) {
677         e.preventDefault();
678         $(this).find("i").attr("class","fa fa-refresh fa-spin");
679         var subscription_id = $(this).data("subscription_id");
680         mana_use( subscription_id );
681     });
682 });