Bug 23013: Upgrade DataTables in the staff client
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / subscription-add.js
blob63104717bdfe097141c2cf20d3e8a41ca4b37057
1 /* global _ irregularity more_than_one_serial subscriptionid tags interface theme mana_enabled MSG_FREQUENCY_LENGTH_ERROR */
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;
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     }
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');
32 function Plugin(){
33     window.open('subscription-bib-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
36 function FindAcqui(){
37     window.open('acqui-search.pl','FindASupplier','width=800,height=400,toolbar=no,scrollbars=yes');
40 function Find_ISSN(f){
41     window.open('issn-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
44 function Clear(id) {
45     $("#"+id).val('');
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     }
60     return true;
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     }
87     return true;
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     }
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     }
144 function displaymoreoptions() {
145     if(globalnumpatterndata == undefined){
146         $("#moreoptionst").hide();
147         return false;
148     }
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;
156     if(X || Y || Z) {
157         $("#moreoptionst").show();
158     } else {
159         $("#moreoptionst").hide();
160     }
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     }
212 function modifyAdvancedPattern() {
213     $("#patternname").prop('readOnly', false).val('').focus();
214     $("#numberingmethod").prop('readOnly', false);
216     $("#advancedpredictionpatternt input").each(function() {
217         $(this).prop('readOnly', false);
218     });
219     $("#advancedpredictionpatternt select").each(function() {
220         $(this).prop('disabled', false);
221     });
223     $("#restoreadvancedpatternbutton").show();
224     $("#saveadvancedpatternbutton").show();
225     $("#modifyadvancedpatternbutton").hide();
227     advancedpatternlocked = 0;
230 function restoreAdvancedPattern() {
231     $("#patternname").prop('readOnly', true).val(globalnumpatterndata.label);
232     $("#numberingmethod").prop('readOnly', true).val(globalnumpatterndata.numberingmethod);
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     });
250     $("#restoreadvancedpatternbutton").hide();
251     $("#saveadvancedpatternbutton").hide();
252     $("#modifyadvancedpatternbutton").show();
254     advancedpatternlocked = 1;
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     }
279     if(error){
280         alert( MSG_PATTERN_TEST_FAILED.format(error_msg) );
281         return false;
282     }
284     var custompattern = 0;
285     if(advancedpatternlocked == 0) {
286         custompattern = 1;
287     }
289     var ajaxData = {
290         'custompattern': custompattern,
291         'firstacquidate': acquidate
292     };
294     if( subscriptionid !== "" ){
295         ajaxData.subscriptionid = subscriptionid;
296     }
297     if( more_than_one_serial !== "" ){
298         ajaxData.nextacquidate = nextacquidate;
299     }
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     }
317     $.ajax({
318         url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
319         data: ajaxData,
320         success: function(data) {
321             showPredictionPatternTest( data );
322             patternneedtobetested = 0;
323         }
324     });
327 function saveAdvancedPattern() {
328     if ($("#patternname").val().length == 0) {
329         alert( MSG_PATTERN_NAME );
330         return false;
331     }
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     }
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         }
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     }
382 function show_page_1() {
383     $("#page_1").show();
384     $("#page_2").hide();
385     $("#page_number").text("1/2");
388 function show_page_2() {
389     $("#page_1").hide();
390     $("#page_2").show();
391     $("#page_number").text("2/2");
392     displaymoreoptions();
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();
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": "full",
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         });
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);
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         });
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();
522 function showPredictionPatternTest( data ){
523     $("#displayexample").html(data).show();
524     $("#page_2 > div").attr("class","col-xs-6");
527 function hidePredcitionPatternTest(){
528     $("#displayexample").hide();
529     $("#page_2 > div").attr("class","col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2");
532 $(document).ready(function() {
533     if ( mana_enabled == 1 ) {
534         mana_search();
535     }
536     $("#displayexample").hide();
538     // When Mana search results modal is hidden, hide comment form and any status messages
539     $("#mana_search_result").on("hide.bs.modal", function(){
540         $("#mana_results").show();
541         $("#new_mana_comment").hide();
542         $(".mana_comment_status").hide();
543     });
545     $("#aqbooksellerid").on('keypress', function(e) {
546         if (e.keyCode == 13) {
547             e.preventDefault();
548             FindAcqui();
549         }
550     });
551     $("#biblionumber").on('keypress', function(e) {
552         if (e.keyCode == 13) {
553             e.preventDefault();
554             Plugin();
555         }
556     });
557     $("select#frequency").change(function(){
558         patternneedtobetested = 1;
559         $("input[name='enddate']").val('');
560         frequencyload();
561     });
562     $("select#numberpattern").change(function(){
563         patternneedtobetested = 1;
564         numberpatternload();
565     });
566     $("#subtype").change(function(){
567         $("input[name='enddate']").val('');
568     });
569     $("#sublength").change(function(){
570         $("input[name='enddate']").val('');
571     });
572     $("#lastvaluetemp1").keyup(function(){
573         $("#lastvalue1").val($(this).val());
574     });
575     $("#lastvaluetemp2").keyup(function(){
576         $("#lastvalue2").val($(this).val());
577     });
578     $("#lastvaluetemp3").keyup(function(){
579         $("#lastvalue3").val($(this).val());
580     });
581     $("#lastvalue1").keyup(function(){
582         $("#lastvaluetemp1").val($(this).val());
583     });
584     $("#lastvalue2").keyup(function(){
585         $("#lastvaluetemp2").val($(this).val());
586     });
587     $("#lastvalue3").keyup(function(){
588         $("#lastvaluetemp3").val($(this).val());
589     });
591     $("#innerlooptemp1").keyup(function(){
592         $("#innerloop1").val($(this).val());
593     });
594     $("#innerlooptemp2").keyup(function(){
595         $("#innerloop2").val($(this).val());
596     });
597     $("#innerlooptemp3").keyup(function(){
598         $("#innerloop3").val($(this).val());
599     });
600     $("#innerloop1").keyup(function(){
601         $("#innerlooptemp1").val($(this).val());
602     });
603     $("#innerloop2").keyup(function(){
604         $("#innerlooptemp2").val($(this).val());
605     });
606     $("#innerloop3").keyup(function(){
607         $("#innerlooptemp3").val($(this).val());
608     });
610     if($("#frequency").val() != ""){
611         frequencyload();
612     }
613     if($("#numberpattern").val() != ""){
614         numberpatternload();
615     }
617     if( tags.length > 0 ){
618         tags.forEach( function( item ) {
619             var node = $("[name='" + item + "']");
620             if ( $(node).is('input') || $(node).is('textarea') ) {
621                 $(node).val("");
622             } else if ( $(node).is('select') ) {
623                 $(node).find("option:first").attr('selected','selected');
624             }
625         });
626     }
628     $("#mana_search").hide();
630     show_page_1();
631     $("#subscription_add_form").on("submit",function(){
632         return Check_page2();
633     });
634     $("#vendor_search").on("click",function(e){
635         e.preventDefault();
636         FindAcqui();
637     });
638     $("#record_search").on("click",function(e){
639         e.preventDefault();
640         Plugin();
641     });
642     $("#biblio_add_edit").on("click",function(e){
643         e.preventDefault();
644         if( $(this).data("biblionumber") ){
645             addbiblioPopup( $(this).data("biblionumber") );
646         } else {
647             addbiblioPopup();
648         }
649     });
650     $("#subscription_add_next").on("click",function(){
651         if ( Check_page1() ){
652             if ( mana_enabled == 1 ) {
653                 mana_search();
654             }
655             show_page_2();
656         }
657     });
658     $("#subscription_add_previous").on("click",function(){
659         show_page_1();
660     });
661     $(".toggle_advanced_pattern").on("click",function(e){
662         e.preventDefault();
663         $("#advancedpredictionpattern").toggle();
664         $(".toggle_advanced_pattern").toggle();
665     });
666     $("#modifyadvancedpatternbutton").on("click",function(e){
667         e.preventDefault();
668         modifyAdvancedPattern();
669     });
670     $("#restoreadvancedpatternbutton").on("click",function(e){
671         e.preventDefault();
672         restoreAdvancedPattern();
673     });
674     $("#saveadvancedpatternbutton").on("click",function(e){
675         e.preventDefault();
676         saveAdvancedPattern();
677     });
678     $("#testpatternbutton").on("click",function(e){
679         e.preventDefault();
680         testPredictionPattern();
681     });
682     $('#save-subscription').on("click", function(e){
683         $('select:disabled').removeAttr('disabled');
684     });
686     $("body").on("click", ".mana-use", function(e) {
687         e.preventDefault();
688         $(this).find("i").attr("class","fa fa-refresh fa-spin");
689         var subscription_id = $(this).data("subscription_id");
690         mana_use( subscription_id );
691     });
693     $("#displayexample").on("click", "#hidepredictionpattern", function(e){
694         e.preventDefault();
695         hidePredcitionPatternTest();
696     });