1 /* global __ irregularity more_than_one_serial subscriptionid tags interface theme mana_enabled MSG_FREQUENCY_LENGTH_ERROR MSG_BIBLIO_NOT_EXIST */
3 var globalnumpatterndata;
5 var mananumpatterndata;
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( __("Frequency and subscription length provided doesn't combine well. Please consider entering an issue count rather than a time period.") );
24 function addbiblioPopup(biblionumber) {
25 var destination = "/cgi-bin/koha/cataloguing/addbiblio.pl?mode=popup";
27 destination += "&biblionumber="+biblionumber;
29 window.open(destination,'AddBiblioPopup','width=1024,height=768,toolbar=no,scrollbars=yes');
33 window.open('subscription-bib-search.pl','FindABibIndex','width=800,height=400,toolbar=no,scrollbars=yes');
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');
48 function Check_page1() {
49 var bookseller_id = $("#aqbooksellerid").val();
50 if ( bookseller_id.length == 0) {
51 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") );
52 if (input_box==false) {
56 var bookseller_ids = BOOKSELLER_IDS;
57 if ( $.inArray(Number(bookseller_id), bookseller_ids) == -1 ) {
58 alert ( __("The vendor does not exist") );
63 var biblionumber = $("#biblionumber").val()
64 if ( biblionumber.length == 0 ) {
65 alert( __("You must choose or create a bibliographic record") );
69 var bib_exists = $("input[name='title']").val().length;
72 alert( __("Bibliographic record does not exist!") );
76 if( isNaN( $("#staffdisplaycount").val() ) ){
77 alert( __("Number of issues to display to staff must be a number") );
80 if( isNaN( $("#opacdisplaycount").val() ) ){
81 alert( __("Number of issues to display to the public must be a number") );
88 function Check_page2(){
89 if( more_than_one_serial == "" ){
90 if($("#acqui_date").val().length == 0){
91 alert( __("You must choose a first publication date") );
95 if($("#sublength").val().length == 0 && $("input[name='enddate']").val().length == 0){
96 alert( __("You must choose a subscription length or an end date.") );
99 if(advancedpatternlocked == 0){
100 alert( __("You have modified the advanced prediction pattern. Please save your work or cancel modifications.") );
103 if(patternneedtobetested){
104 if( irregularity !== "" ){
105 alert( __("Warning! Present pattern has planned irregularities. Click on 'Test prediction pattern' to check if it's still valid") );
107 alert( __("Please click on 'Test prediction pattern' before saving subscription.") );
115 function frequencyload(){
116 if ($("#frequency option:selected").val() === "mana"){
117 globalfreqdata=manafreqdata;
118 $("input[name='sfdescription']").val(manafreqdata.description);
119 $("input[name='unit']").val(manafreqdata.unit);
120 $("input[name='unitsperissue']").val(manafreqdata.unitsperissue);
121 $("input[name='issuesperunit']").val(manafreqdata.issuesperunit);
122 if ($( "#numberpattern option:selected" ).val() === "mana" ) {
123 $("#mana_id").val(manaid);
126 $.getJSON("subscription-frequency.pl",{"frequency_id":document.f.frequency.value,ajax:'true'},
128 globalfreqdata=freqdata;
129 if ( globalfreqdata.unit && globalfreqdata.unit.length == 0 ) {
130 var option = $("#subtype option[value='issues']");
131 $(option).attr('selected', 'selected');
132 $("#subtype option[value!='issues']").prop('disabled', true);
134 $("#subtype option").prop('disabled', false);
138 $("#mana_id").val("");
142 function numberpatternload(){
143 if($("#numberpattern option:selected" ).val() === "mana"){
144 globalnumpatterndata=mananumpatterndata;
145 $("input[name='sndescription']").val(mananumpatterndata.description);
146 if($("#frequency option:selected" ).val() === "mana"){
147 $("#mana_id").val(manaid);
149 if (globalnumpatterndata==undefined){
152 displaymoreoptions();
153 restoreAdvancedPattern();
155 $.getJSON("subscription-numberpattern.pl",{"numberpattern_id":document.f.numbering_pattern.value,ajax:'true'},
156 function(numpatterndata){
157 globalnumpatterndata=numpatterndata;
158 if (globalnumpatterndata==undefined){
161 displaymoreoptions();
162 restoreAdvancedPattern();
165 $("#mana_id").val("");
169 function displaymoreoptions() {
170 if(globalnumpatterndata == undefined){
171 $("#moreoptionst").hide();
175 var X = 0, Y = 0, Z = 0;
176 var numberingmethod = globalnumpatterndata.numberingmethod;
177 if(numberingmethod.match(/{X}/)) X = 1;
178 if(numberingmethod.match(/{Y}/)) Y = 1;
179 if(numberingmethod.match(/{Z}/)) Z = 1;
182 $("#moreoptionst").show();
184 $("#moreoptionst").hide();
188 if(globalnumpatterndata.label1) {
189 $("#headerX").html(globalnumpatterndata.label1);
191 $("#headerX").html("X");
193 $("#headerX").show();
194 $("#beginsX").show();
197 $("#headerX").hide();
198 $("#beginsX").hide();
200 $("#lastvaluetemp1").val('');
201 $("#innerlooptemp1").val('');
204 if(globalnumpatterndata.label2) {
205 $("#headerY").html(globalnumpatterndata.label2);
207 $("#headerY").html("Y");
209 $("#headerY").show();
210 $("#beginsY").show();
213 $("#headerY").hide();
214 $("#beginsY").hide();
216 $("#lastvaluetemp2").val('');
217 $("#innerlooptemp2").val('');
220 if(globalnumpatterndata.label3) {
221 $("#headerZ").html(globalnumpatterndata.label3);
223 $("#headerZ").html("Z");
225 $("#headerZ").show();
226 $("#beginsZ").show();
229 $("#headerZ").hide();
230 $("#beginsZ").hide();
232 $("#lastvaluetemp3").val('');
233 $("#innerlooptemp3").val('');
237 function modifyAdvancedPattern() {
238 $("#patternname").prop('readOnly', false).val('').focus();
239 $("#numberingmethod").prop('readOnly', false);
241 $("#advancedpredictionpatternt input").each(function() {
242 $(this).prop('readOnly', false);
244 $("#advancedpredictionpatternt select").each(function() {
245 $(this).prop('disabled', false);
248 $("#restoreadvancedpatternbutton").show();
249 $("#saveadvancedpatternbutton").show();
250 $("#modifyadvancedpatternbutton").hide();
252 advancedpatternlocked = 0;
255 function restoreAdvancedPattern() {
256 $("#patternname").prop('readOnly', true).val(globalnumpatterndata.label);
257 $("#numberingmethod").prop('readOnly', true).val(globalnumpatterndata.numberingmethod);
259 $("#advancedpredictionpatternt input").each(function() {
260 $(this).prop('readOnly', true);
261 var id = $(this).attr('id');
262 if(id.match(/lastvalue/) || id.match(/innerloop/)) {
263 var tempid = id.replace(/(\d)/, "temp$1");
264 $(this).val($("#"+tempid).val());
266 $(this).val(globalnumpatterndata[id]);
269 $("#advancedpredictionpatternt select").each(function() {
270 $(this).prop('disabled', true);
271 var id = $(this).attr('id');
272 $(this).val(globalnumpatterndata[id]);
275 $("#restoreadvancedpatternbutton").hide();
276 $("#saveadvancedpatternbutton").hide();
277 $("#modifyadvancedpatternbutton").show();
279 advancedpatternlocked = 1;
282 function testPredictionPattern() {
283 var frequencyid = $("#frequency").val();
287 if(frequencyid == undefined || frequencyid == ""){
288 error_msg += "- " + __("Frequency is not defined") + "\n";
291 acquidate = $("#acqui_date").val();
292 if(acquidate == undefined || acquidate == ""){
293 error_msg += "-" + __("First publication date is not defined") + "\n";
296 if( more_than_one_serial !== "" ){
297 var nextacquidate = $("#nextacquidate").val();
298 if(nextacquidate == undefined || nextacquidate == ""){
299 error_msg += "-" + __("Next issue publication date is not defined") + "\n";
305 alert( __("Cannot test prediction pattern for the following reason(s): %s").format(error_msg) );
309 var custompattern = 0;
310 if(advancedpatternlocked == 0) {
315 'custompattern': custompattern,
316 'firstacquidate': acquidate
319 if( subscriptionid !== "" ){
320 ajaxData.subscriptionid = subscriptionid;
322 if( more_than_one_serial !== "" ){
323 ajaxData.nextacquidate = nextacquidate;
328 'to', 'subtype', 'sublength', 'frequency', 'numberingmethod',
329 'lastvalue1', 'lastvalue2', 'lastvalue3', 'add1', 'add2', 'add3',
330 'every1', 'every2', 'every3', 'innerloop1', 'innerloop2', 'innerloop3',
331 'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
332 'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale',
333 'sfdescription', 'unitsperissue', 'issuesperunit', 'unit'
335 for(i in ajaxParams) {
336 var param = ajaxParams[i];
337 var value = $("#"+param).val();
339 ajaxData[param] = value;
343 url:"/cgi-bin/koha/serials/showpredictionpattern.pl",
345 success: function(data) {
346 showPredictionPatternTest( data );
347 patternneedtobetested = 0;
352 function saveAdvancedPattern() {
353 if ($("#patternname").val().length == 0) {
354 alert( __("Please enter a name for this pattern") );
358 // Check if patternname already exists, and modify pattern
359 // instead of creating it if so
361 $("#numberpattern option").each(function(){
362 if($(this).text() == $("#patternname").val()){
369 var msg = __("This pattern name already exists. Do you want to modify it?")
370 +"\n" + __("Warning: This will modify the pattern for all subscriptions that are using it.");
371 cnfrm = confirm(msg);
377 'patternname', 'numberingmethod', 'label1', 'label2', 'label3',
378 'add1', 'add2', 'add3', 'every1', 'every2', 'every3',
379 'setto1', 'setto2', 'setto3', 'numbering1', 'numbering2', 'numbering3',
380 'whenmorethan1', 'whenmorethan2', 'whenmorethan3', 'locale'
382 for(i in ajaxParams) {
383 var param = ajaxParams[i];
384 var value = $("#"+param).val();
386 ajaxData[param] = value;
390 "/cgi-bin/koha/serials/create-numberpattern.pl",
393 if (data.numberpatternid) {
395 $("#numberpattern").append("<option value=\""+data.numberpatternid+"\">"+$("#patternname").val()+"</option>");
397 $("#numberpattern").val(data.numberpatternid);
400 alert( __("Something went wrong. Unable to create a new numbering pattern.") );
407 function show_page_1() {
410 $("#page_number").text("1/2");
413 function show_page_2() {
416 $("#page_number").text("2/2");
417 displaymoreoptions();
420 function mana_search() {
421 $("#mana_search").html("<p>" + __("Searching for subscription in Mana Knowledge Base") + "... <img src='" + interface + "/" + theme + "/img/spinner-small.gif' /></p>");
422 $("#mana_search").show();
426 url: "/cgi-bin/koha/svc/mana/search",
427 data: {id: $("#biblionumber").val(), resource: 'subscription', usecomments: 1},
430 .done( function( result ) {
431 $("#mana_search_result .modal-body").html(result);
432 $("#mana_search_result_label").text( __("Results from Mana Knowledge Base") );
433 $("#mana_results_datatable").dataTable($.extend(true, {}, dataTablesDefaults, {
434 "sPaginationType": "full",
435 "order":[[4, "desc"], [5, "desc"]],
438 { "width": "35%", "targets": 1 }
441 { 'bSortable': false, "bSearchable": false, 'aTargets': [ 'NoSort' ] },
442 { 'sType': "anti-the", 'aTargets' : [ 'anti-the'] }
445 if( $("#mana_results_datatable").length && $("td.dataTables_empty").length == 0){
446 $("#mana_search").html("<p>" + __("Subscription found on Mana Knowledge Base:") + "</p><p> <a href=\"#\" data-toggle=\"modal\" data-target=\"#mana_search_result\"><i class=\"fa fa-window-maximize\"></i> " + __("Show Mana results") + "</a></p>");
448 else if ( $("#mana_results_datatable").length ){
449 $("#mana_search").html("<p>" + __("No subscription found on Mana Knowledge Base") + "</p><p>" + __("Please feel free to share your pattern with all others librarians once you are done") + "</p>");
452 $("#mana_search").html( result );
454 $("#mana_search").show();
458 function mana_use(mana_id){
459 $("tr").removeClass("selected");
460 $("#row"+mana_id).addClass("selected");
463 url: "/cgi-bin/koha/svc/mana/use",
464 data: {id: mana_id, resource: 'subscription'},
467 .done(function(result){
468 var select = document.getElementById('numberpattern');
469 for(i = 0; i < select.length; i++){
470 if(select[i].value === "mana"){
474 var optionnumpattern = document.createElement("option");
475 optionnumpattern.text = result.label + " (mana)";
476 optionnumpattern.selected = true;
477 optionnumpattern.value="mana";
478 select.add(optionnumpattern);
480 mananumpatterndata = {
485 description:result.sndescription,
486 displayorder:result.displayorder,
487 every1:result.every1,
488 every2:result.every2,
489 every3:result.every3,
491 label1:result.label1,
492 label2:result.label2,
493 label3:result.label3,
494 numbering1:result.numbering1,
495 numbering2:result.numbering2,
496 numbering3:result.numbering3,
497 numberingmethod:result.numberingmethod,
498 setto1:result.setto1,
499 setto2:result.setto2,
500 setto3:result.setto3,
501 whenmorethan1:result.whenmorethan1,
502 whenmorethan2:result.whenmorethan2,
503 whenmorethan3:result.whenmorethan3,
505 select = document.getElementById("frequency");
506 for(i = 0; i < select.length; i++){
507 if(select[i].value === "mana"){
511 var optionfreq = document.createElement("option");
512 optionfreq.text = result.sfdescription + " (mana)";
513 optionfreq.selected = true;
514 optionfreq.value="mana";
515 select.add(optionfreq);
518 description:result.sfdescription,
519 displayorder:result.displayorder,
520 issuesperunit:result.issuesperunit,
522 unitsperissue:result.unitsperissue,
525 $("#mana_id").val(manaid);
526 $("#mana_search_result").modal("hide");
531 $("tr").removeClass("selected");
532 $(".mana-use i").attr("class","fa fa-download");
534 .fail( function( result ){
538 function mana_comment_close(){
539 $("#selected_id").val("");
540 $("#mana-resource-id").val("");
541 $("#mana-comment").val("");
542 $("#mana_results").show();
543 $("#new_mana_comment").hide();
546 function showPredictionPatternTest( data ){
547 $("#displayexample").html(data).show();
548 $("#page_2 > div").attr("class","col-xs-6");
551 function hidePredcitionPatternTest(){
552 $("#displayexample").hide();
553 $("#page_2 > div").attr("class","col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2");
556 $(document).ready(function() {
557 if ( mana_enabled == 1 ) {
560 $("#displayexample").hide();
562 // When Mana search results modal is hidden, hide comment form and any status messages
563 $("#mana_search_result").on("hide.bs.modal", function(){
564 $("#mana_results").show();
565 $("#new_mana_comment").hide();
566 $(".mana_comment_status").hide();
569 $("#aqbooksellerid").on('keypress', function(e) {
570 if (e.keyCode == 13) {
575 $("#biblionumber").on('keypress', function(e) {
576 if (e.keyCode == 13) {
581 $("select#frequency").change(function(){
582 patternneedtobetested = 1;
583 $("input[name='enddate']").val('');
586 $("select#numberpattern").change(function(){
587 patternneedtobetested = 1;
590 $("#subtype").change(function(){
591 $("input[name='enddate']").val('');
593 $("#sublength").change(function(){
594 $("input[name='enddate']").val('');
596 $("#lastvaluetemp1").keyup(function(){
597 $("#lastvalue1").val($(this).val());
599 $("#lastvaluetemp2").keyup(function(){
600 $("#lastvalue2").val($(this).val());
602 $("#lastvaluetemp3").keyup(function(){
603 $("#lastvalue3").val($(this).val());
605 $("#lastvalue1").keyup(function(){
606 $("#lastvaluetemp1").val($(this).val());
608 $("#lastvalue2").keyup(function(){
609 $("#lastvaluetemp2").val($(this).val());
611 $("#lastvalue3").keyup(function(){
612 $("#lastvaluetemp3").val($(this).val());
615 $("#innerlooptemp1").keyup(function(){
616 $("#innerloop1").val($(this).val());
618 $("#innerlooptemp2").keyup(function(){
619 $("#innerloop2").val($(this).val());
621 $("#innerlooptemp3").keyup(function(){
622 $("#innerloop3").val($(this).val());
624 $("#innerloop1").keyup(function(){
625 $("#innerlooptemp1").val($(this).val());
627 $("#innerloop2").keyup(function(){
628 $("#innerlooptemp2").val($(this).val());
630 $("#innerloop3").keyup(function(){
631 $("#innerlooptemp3").val($(this).val());
634 if($("#frequency").val() != ""){
637 if($("#numberpattern").val() != ""){
641 if( tags.length > 0 ){
642 tags.forEach( function( item ) {
643 var node = $("[name='" + item + "']");
644 if ( $(node).is('input') || $(node).is('textarea') ) {
646 } else if ( $(node).is('select') ) {
647 $(node).find("option:first").attr('selected','selected');
652 $("#mana_search").hide();
655 $("#subscription_add_form").on("submit",function(){
656 return Check_page2();
658 $("#vendor_search").on("click",function(e){
662 $("#record_search").on("click",function(e){
666 $("#biblio_add_edit").on("click",function(e){
668 if( $(this).data("biblionumber") ){
669 addbiblioPopup( $(this).data("biblionumber") );
674 $("#subscription_add_next").on("click",function(){
675 if ( Check_page1() ){
676 if ( mana_enabled == 1 ) {
682 $("#subscription_add_previous").on("click",function(){
685 $(".toggle_advanced_pattern").on("click",function(e){
687 $("#advancedpredictionpattern").toggle();
688 $(".toggle_advanced_pattern").toggle();
690 $("#modifyadvancedpatternbutton").on("click",function(e){
692 modifyAdvancedPattern();
694 $("#restoreadvancedpatternbutton").on("click",function(e){
696 restoreAdvancedPattern();
698 $("#saveadvancedpatternbutton").on("click",function(e){
700 saveAdvancedPattern();
702 $("#testpatternbutton").on("click",function(e){
704 testPredictionPattern();
706 $('#save-subscription').on("click", function(e){
707 $('select:disabled').removeAttr('disabled');
710 $("body").on("click", ".mana-use", function(e) {
712 $(this).find("i").attr("class","fa fa-refresh fa-spin");
713 var subscription_id = $(this).data("subscription_id");
714 mana_use( subscription_id );
717 $("#displayexample").on("click", "#hidepredictionpattern", function(e){
719 hidePredcitionPatternTest();
722 $("#biblionumber").on("change", function(){
723 var biblionumber = $(this).val();
725 url: "/api/v1/biblios/" + biblionumber,
728 Accept: "application/json",
730 contentType: "application/json",
731 success: function (biblio) {
732 $("input[name='title']").val(biblio['title']);
733 $("#error_bib_not_exist").html("");
735 error: function (x) {
736 $("input[name='title']").val('');
737 $("#error_bib_not_exist").html( __("This bibliographic record does not exist") );
742 $("input[name='serialsadditems']").on("change", function(){
743 const display = $(this).val() == "1" ? "block" : "none";
744 $(".use_items").css('display', display).find("select").val("")