da8abd123aaa39dce2d449bbbac392261f941a87
[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 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(_("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"));
51         if (input_box==false) {
52             return false;
53         }
54     }
55     if ($("#biblionumber").val().length == 0) {
56         alert(_("You must choose or create a 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(_("You must choose a first publication date"));
67             return false;
68         }
69     }
70     if($("#sublength").val().length == 0 && $("input[name='enddate']").val().length == 0){
71         alert(_("You must choose a subscription length or an end date."));
72         return false;
73     }
74     if(advancedpatternlocked == 0){
75         alert(_("You have modified the advanced prediction pattern. Please save your work or cancel modifications."));
76         return false;
77     }
78     if(patternneedtobetested){
79         if( irregularity !== "" ){
80            alert(_("Warning! Present pattern has planned irregularities. Click on 'Test prediction pattern' to check if it's still valid"));
81         } else {
82             alert(_("Please click on 'Test prediction pattern' before saving subscription."));
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             $("input[name='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         $("input[name='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             $("input[name='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         $("input[name='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 += _("- Frequency is not defined") + "\n";
264         error ++;
265     }
266     acquidate = $("#acqui_date").val();
267     if(acquidate == undefined || acquidate == ""){
268         error_msg += _("- First publication date is not defined") + "\n";
269         error ++;
270     }
271     if( more_than_one_serial !== "" ){
272         var nextacquidate = $("#nextacquidate").val();
273         if(nextacquidate == undefined || nextacquidate == ""){
274             error_msg += _("- Next issue publication date is not defined") + "\n";
275             error ++;
276         }
277     }
278
279     if(error){
280         alert(_("Cannot test prediction pattern for the following reason(s): %s").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(_("Please enter a name for this pattern"));
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 = _("This pattern name already exists. Do you want to modify it?")
345             + "\n" + _("Warning: it will modify the pattern for all subscriptions that are using it.");
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(_("Something went wrong. Unable to create a new numbering pattern."));
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>" + _("Mana kb is being asked for your subscription..") + "</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(_("Results from Mana Knowledge Base"));
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>" + _("Subscription found on Mana Knowledge Base:") + "</p><p> <a style='cursor:pointer' data-toggle='modal' data-target='#mana_search_result'>" + _("Quick fill") + "</a></p>");
423         }
424         else if ( $("#mana_results_datatable").length ){
425             $("#mana_search").html("<p>" + _("No subscription found on Mana Knowledge Base :(") + "</p><p>" + _(" Please feel free to share you pattern with all others librarians once you are done") + "</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         $("input[name='mana_id']").val(manaid);
502         $("#mana_search_result").modal("hide");
503         frequencyload();
504         numberpatternload();
505     }).fail( function( result ){
506     });
507 }
508
509 $(document).ready(function() {
510     mana_search();
511     $("#displayexample").hide();
512     $("#mana_search_result").modal("hide");
513     $("#aqbooksellerid").on('keypress', function(e) {
514         if (e.keyCode == 13) {
515             e.preventDefault();
516             FindAcqui();
517         }
518     });
519     $("#biblionumber").on('keypress', function(e) {
520         if (e.keyCode == 13) {
521             e.preventDefault();
522             Plugin();
523         }
524     });
525     $("select#frequency").change(function(){
526         patternneedtobetested = 1;
527         $("input[name='enddate']").val('');
528         frequencyload();
529     });
530     $("select#numberpattern").change(function(){
531         patternneedtobetested = 1;
532         numberpatternload();
533     });
534     $("#subtype").change(function(){
535         $("input[name='enddate']").val('');
536     });
537     $("#sublength").change(function(){
538         $("input[name='enddate']").val('');
539     });
540     $("#lastvaluetemp1").keyup(function(){
541         $("#lastvalue1").val($(this).val());
542     });
543     $("#lastvaluetemp2").keyup(function(){
544         $("#lastvalue2").val($(this).val());
545     });
546     $("#lastvaluetemp3").keyup(function(){
547         $("#lastvalue3").val($(this).val());
548     });
549     $("#lastvalue1").keyup(function(){
550         $("#lastvaluetemp1").val($(this).val());
551     });
552     $("#lastvalue2").keyup(function(){
553         $("#lastvaluetemp2").val($(this).val());
554     });
555     $("#lastvalue3").keyup(function(){
556         $("#lastvaluetemp3").val($(this).val());
557     });
558
559     $("#innerlooptemp1").keyup(function(){
560         $("#innerloop1").val($(this).val());
561     });
562     $("#innerlooptemp2").keyup(function(){
563         $("#innerloop2").val($(this).val());
564     });
565     $("#innerlooptemp3").keyup(function(){
566         $("#innerloop3").val($(this).val());
567     });
568     $("#innerloop1").keyup(function(){
569         $("#innerlooptemp1").val($(this).val());
570     });
571     $("#innerloop2").keyup(function(){
572         $("#innerlooptemp2").val($(this).val());
573     });
574     $("#innerloop3").keyup(function(){
575         $("#innerlooptemp3").val($(this).val());
576     });
577
578     if($("#frequency").val() != ""){
579         frequencyload();
580     }
581     if($("#numberpattern").val() != ""){
582         numberpatternload();
583     }
584
585     if( tags.length > 0 ){
586         tags.forEach( function( item ) {
587             var node = $("[name='" + item + "']");
588             if ( $(node).is('input') || $(node).is('textarea') ) {
589                 $(node).val("");
590             } else if ( $(node).is('select') ) {
591                 $(node).find("option:first").attr('selected','selected');
592             }
593         });
594     }
595
596     $("#mana_search").hide();
597
598     show_page_1();
599     $("#subscription_add_form").on("submit",function(){
600         return Check_page2();
601     });
602     $("#vendor_search").on("click",function(e){
603         e.preventDefault();
604         FindAcqui();
605     });
606     $("#record_search").on("click",function(e){
607         e.preventDefault();
608         Plugin();
609     });
610     $("#biblio_add_edit").on("click",function(e){
611         e.preventDefault();
612         if( $(this).data("biblionumber") ){
613             addbiblioPopup( $(this).data("biblionumber") );
614         } else {
615             addbiblioPopup();
616         }
617     });
618     $("#subscription_add_next").on("click",function(){
619         if ( Check_page1() ){
620             if ( mana_enabled ) {
621                 mana_search();
622             }
623             show_page_2();
624         }
625     });
626     $("#subscription_add_previous").on("click",function(){
627         show_page_1();
628     });
629     $(".toggle_advanced_pattern").on("click",function(e){
630         e.preventDefault();
631         $("#advancedpredictionpattern").toggle();
632         $(".toggle_advanced_pattern").toggle();
633     });
634     $("#modifyadvancedpatternbutton").on("click",function(e){
635         e.preventDefault();
636         modifyAdvancedPattern();
637     });
638     $("#restoreadvancedpatternbutton").on("click",function(e){
639         e.preventDefault();
640         restoreAdvancedPattern();
641     });
642     $("#saveadvancedpatternbutton").on("click",function(e){
643         e.preventDefault();
644         saveAdvancedPattern();
645     });
646     $("#testpatternbutton").on("click",function(e){
647         e.preventDefault();
648         testPredictionPattern();
649     });
650     $('#save-subscription').on("click", function(e){
651         $('select:disabled').removeAttr('disabled');
652     });
653 });