Skillnad mellan versioner av "IntranetUserJS/mellansjo"

Från Svenska kohanätverkets wiki
Hoppa till navigering Hoppa till sök
Rad 689: Rad 689:
 
      
 
      
 
     });
 
     });
 +
  };
 +
});
 +
 +
</pre>
 +
 +
 +
== Exemplar / Skolbibliotek ==
 +
 +
'''Vid redigering av exemplar så sparas exemplaret automatisk ifall man drar streckkoden, man behöver alltså inte klicka på knappen "Spara" vid redigering av exemplar.'''
 +
 +
<pre>
 +
 +
$('#cataloguing_additem_newitem #f').has('#edititem').each(function() {
 +
 +
  $('#subfield952p input').keypress(function(event) {
 +
    var keycode = event.keyCode || event.which;
 +
    if(keycode == '13') {
 +
      if ($(this).val()) {
 +
        $('input[onclick="return Check(this.form)"]').trigger('click');
 +
      }
 +
    }
 +
  });
 +
});
 +
 +
</pre>
 +
 +
 +
== Låntagare / Personnummer ==
 +
 +
'''Personnummerfältet låst till endast 10 siffror och flytta fältet till ovan födelsedatum samt autofyll födelsedagsdatum. Känner av att det är ett giltigt personnr annars rensar den fältet och ger ett meddelande. Kontrollerar även nu också att inte personnumret finns registrerat i katalogen.'''
 +
 +
<pre>
 +
 +
var validatePersonalNumber = function(input) {  // Valideringsscript för svenskt personnummer
 +
  // Kontrollera godkänd längd och form
 +
  if (!input) return false;
 +
 +
  if (input.indexOf('-') == -1) {
 +
    if (input.length === 10) {
 +
      input = input.slice(0, 6) + "-" + input.slice(6);
 +
    } else {
 +
      input = input.slice(0, 8) + "-" + input.slice(8);
 +
    }
 +
  }
 +
  if (!input.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})|(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) return false;
 +
 +
  // Snygga till input
 +
  input = input.replace('-', '');
 +
  if (input.length == 12) {
 +
    input = input.substring(2);
 +
  }
 +
 +
  // Deklarera variabler
 +
  var d = new Date(((!!RegExp.$1) ? RegExp.$1 : RegExp.$5), (((!!RegExp.$2) ? RegExp.$2 : RegExp.$6)-1), ((!!RegExp.$3) ? RegExp.$3 : RegExp.$7)),
 +
    sum = 0,
 +
    numdigits = input.length,
 +
    parity = numdigits % 2,
 +
    i,
 +
    digit;
 +
 +
  // Kontrollera godkänt datum
 +
  if (Object.prototype.toString.call(d) !== "[object Date]" || isNaN(d.getTime())) return false;
 +
 +
  // Kontrollera luhn algoritmen
 +
  for (i = 0; i < numdigits; i = i + 1) {
 +
    digit = parseInt(input.charAt(i))
 +
    if (i % 2 == parity) digit *= 2;
 +
      if (digit > 9) digit -= 9;
 +
        sum += digit;
 +
  }
 +
  return (sum % 10) == 0;
 +
};
 +
 +
 +
$('#patron_attr_3').attr('maxlength','10').attr('placeholder','10 siffror (ÅÅMMDDNNNN)').attr('style','width: 174px; height: 22px;'); // Ge fältet rätt attribut
 +
 +
$('#patron_attr_3').parent().insertBefore('li label[for="dateofbirth"]'); // Flyttar personnrfältet till innan födelsedagsdatumfältet
 +
 +
$('#patron_attr_3').change(function() {  // Känner av ändring i personnrfältet och uppdaterar födelsedagsdatumfältet och OPAC användarnamnet
 +
 +
  if (validatePersonalNumber($(this).val())) {
 +
    var d = new Date(); // Kollar det aktuella datumet
 +
    var year = d.getFullYear(); // Sorterar ut vilket år det är
 +
    year = year.toString().slice(0,2); // Gör om till sträng och ta bara med de två första siffrorna, dvs 19 eller 20
 +
   
 +
    var patronyear = $(this).val().slice(0,2); // Kollar personnummrets två första siffror och sparar det till variable
 +
 +
    if (patronyear > year) { // Kontrollerar om personen är mer än hundra år, om inte gör detta följande
 +
      $('input#dateofbirth').val('19' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
 +
    }
 +
    else {  // Personen är äntingen över hundra år (inte så troligt) så då förutsätter vi att personen är född på 2000-talet
 +
      $('input#dateofbirth').val('20' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
 +
    };
 +
 
 +
    $('input#userid').val($(this).val());  // Kopierar även personnr till OPAC Användarnamnet
 +
 +
    chkpnr = $(this).val();
 +
 +
    $.get('https://' + window.location.hostname + '/cgi-bin/koha/circ/circulation.pl?findborrower=' + chkpnr).done(function(datan) {
 +
 +
      var contents = datan.slice(datan.indexOf('<title>')+7, datan.indexOf('</title>'));
 +
 +
      if (contents.indexOf('Låna ut') > -1 | contents.indexOf('Checking') > -1) {
 +
 +
        alert('Personnumret finns redan registrerat!');
 +
        $('#patron_attr_3').css('background','red').focus().select();
 +
   
 +
      } else {
 +
 
 +
        $('#patron_attr_3').css('background','#d4efb7');
 +
      };
 +
    });
 +
 +
  }
 +
  else {
 +
    $('textarea[id="patron_attr_3"]').val(null);  // Rensa fältet
 +
    alert("Personnummret är felaktigt, var god ändra.");  // Varna för fel personnr
 +
    setTimeout(function(){$('textarea[id="patron_attr_3"]').focus();}, 1); // Ställ markören i fältet igen
 
   };
 
   };
 
});
 
});
  
 
</pre>
 
</pre>

Versionen från 2 april 2019 kl. 10.03

Väntfunktionen VIKTIGT

Lägg denna högst upp i intranetuserjs under $(document).ready(function() {, Viktig funktion för att scripten ska fungera.

// Vänt-funktion
var waitForEl = function(selector, callback) {
  if (jQuery(selector).length) {
    callback();
  } else {
    setTimeout(function() {
      waitForEl(selector, callback);
    }, 100);
  }
};

Periodika / Ta emot

Lättare att se hembibliotekets prenumeration genom att markera den grön och förstora rutan vid sökning. ver 1 2019-03-22 Periodika.png

if ($('#ser_serials-home').length) {
  waitForEl('.dataTables_wrapper', function() {
    var logbib = localStorage.getItem('loggedinbranch');
    $('.dataTables_wrapper td:nth-child(5)').each(function() {
      if ($(this).text().indexOf(logbib) > -1) {
        $(this).closest('tr').children().css('background-color','#d4efb7');
        $(this).closest('tr').children().css('padding','30px 4px');
      };
    });
  });
};

Katalog / Sökning

Skapar språkfält vid enkel sökning i katalogen. Språk hämtas från 008 och 040 fler språk går att lägga till.

Sprakfalt.png

if ($('#header_search').length) {

  $('<select id="language-limit" name="limit" style="margin-left:3px;"><option value="">Alla språk</option><option value="ln,rtrn:alb">Albanska</option><option value="ln,rtrn:ara">Arabiska</option><option value="ln,rtrn:bos">Bosniska</option><option value="ln,rtrn:dan">Danska</option><option value="ln,rtrn:eng">Engelska</option><option value="ln,rtrn:fin">Finska</option><option value="ln,rtrn:fre">Franska</option><option value="ln,rtrn:heb">Hebreiska</option><option value="ln,rtrn:ita">Italienska</option><option value="ln,rtrn:hrv">Kroatiska</option><option value="ln,rtrn:chi">Kinesiska</option><option value="ln,rtrn:nob">Norskt bokmål</option><option value="ln,rtrn:nno">Nynorsk</option><option value="ln,rtrn:per">Persiska</option><option value="ln,rtrn:pol">Polska</option><option value="ln,rtrn:prs">Dari</option><option value="ln,rtrn:por">Portugisiska</option><option value="ln,rtrn:rum">Romani</option><option value="ln,rtrn:rus">Ryska</option><option value="ln,rtrn:srp">Serbiska</option><option value="ln,rtrn:slo">Slovakiska</option><option value="ln,rtrn:slv">Slovenska</option><option value="ln,rtrn:som">Somaliska</option><option value="ln,rtrn:spa">Spanska</option><option value="ln,rtrn:swe">Svenska</option><option value="ln,rtrn:tha">Thailändska</option><option value="ln,rtrn:tgl">Tagalog </option><option value="ln,rtrn:tir">Tigriska</option><option value="ln,rtrn:tur">Turkiska</option><option value="ln,rtrn:ger">Tyska</option><option value="ln,rtrn:urd">Urdu</option></select>').insertAfter('#header_search #search-form');

};


Cirkulation / Återlämning

Meddelande om återlämnad Magasin-bok.

Magasinsmeddelande.png

if ($('#circ_returns').length) {

  if ($('#checkedintable tbody tr:first .ci-type').text().indexOf('Magasin') > -1) {
    $('#bd .yui-g:first').append('<div class="dialog message"><h3 class="problem" style="margin:25px;color:#990000">Detta exemplar tillhör Magasin</hr></div>');
  };
};


Cirkulation / Omlån

Skapar en egen låna om-knapp för varje utlånat exemplar.

Omlanknapp.PNG

// IntranetUserJS

if ($('#circ_circulation').length) {

  waitForEl('.renew', function() {
    $('.renew:visible').each(function() {
      var itemId = $(this).attr('value');
      $(this).parent().parent().append('<button class="btn btn-default btn-xs renewlink" value="' + itemId + '">Låna om</a>');
    });
    $('.renewlink').on('click', function(event) {
      event.preventDefault();
      var id = $(this).attr('value');
      console.log('Button pressed! - ' + id);
      $(".renew:visible").prop("checked", false);
      $(this).siblings().find('.renew').prop('checked', true);
      $('#RenewCheckinChecked').trigger('click');
      $(".renew:visible").prop("checked", true);
    });

    $('.renewals-disabled:visible').each(function() {
       $(this).parent().append('<i class="fa fa-frown-o" style="float:right;font-size:x-large;color:#d0d0d0;"></i>');
    });

  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

/* Lånaom-knapp */
.renewlink {
  font-size: smaller !important;
}

.renewals-disabled {
  color: #c00;
}

Katalog / Reservationer

Hämta mer information om reservationer på detaljsidan.

Reservationsinfo.PNG

// IntranetUserJS

if ($('#catalog_detail').length) {
  var bibnr = $('input[name="bib"]').attr('value');
  if ($('.number_box').length) {
    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=463&sql_params=' + bibnr, "json").done(function(data) {

      function countResStat(type) { 
        val = 0;
        for (i = 0;i < data.length;i++) {
          if (data[i][2] === type) {
            val = val + 1;
          };
        };
        return val;
      };
       
      var res = data[data.length - 1][3];
      var trans = countResStat('T');
      var waiting = countResStat('W');

      if (res > 0) {
        $('.number_box').parent().append('<span class="resDetail">Antal i kö: ' + res + '</span>');
      };
      if (trans > 0) {
        $('.number_box').parent().append('<span class="resDetail">På väg: ' + trans + '</span>');
      };
      if (waiting > 0) {
        $('.number_box').parent().append('<span class="resDetail">Aviserade: ' + waiting + '</span>');
      };
    });
  };
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

//IntranetUserCSS

.resDetail { /* Detaljsidan: Reservationsdetaljer avstånd */
  padding: 10px;
  color: #900;
}

.resExtra {
  padding: 20px !important;
  font-size: large;  
}

Katalog / Shelving location

Lägg till en pil och ändra färg på shelving locations på detaljsidan.

Shelvinglocationpil.PNG

// IntranetUserJS

if ($('#bibliodetails').length) {
  $('.shelvingloc').each(function() {
    if ($(this).text().length) {
      var loc = $(this).text();
      $(this).html('<span class="pil">↳ </span>' + loc);
    };
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.shelvingloc {
  color: olive;
}

.pil { /* Pil framför Lokal placering under Hembibliotek */
  font-style: normal; /* Normal font */
  color: #900; /* Färg (rödaktig) */
  font-size: large; /* Större text */
}

Katalog / postsammanslagning

Skapar en sammanslagningsknapp på resultatsidan för enklare hantering av dublettposter.

Sammanslagning.PNG

// IntranetUserJS

if ($('#catalog_results').length) {

  $('#selection_ops').append('<div class="btn-group"><button id="mergeposts" class="btn btn-default btn-xs" type="submit"><i class="fa fa-compress"></i> Slå samman</button></div>');

  $('#mergeposts').on('click', function() {

    var selIDs = [];
    var link = 'https://' + window.location.hostname + '/cgi-bin/koha/cataloguing/merge.pl?';

    $('.selection').each(function() {
      if ($(this).is(':checked')) {
        selIDs.push($(this).attr('value'));
      };
    });

    for (i = 0; i < selIDs.length; i++) {
      link = link + 'biblionumber=' + selIDs[i] + '&';
    }

    link = link.substring(0, link.length -1);

    if (selIDs.length > 1) {
      window.open(link);
    } else {
      alert('Välj vilka poster du vill slå samman först...');
    };
  });
};


Katalog / Knappar

Skapar knappar för Kopiera streckkod, Återlämna exemplar och Radera exemplar bredvid streckkoden i katalogen.

Knapparstreckkod.PNG

// IntranetUserJS

if ($('#catalog_detail').length) {

  $('#holdings_table tbody tr td:nth-child(9), #otherholdings_table tbody tr td:nth-child(9)').each(function() {

  $(this).append('<br /><a href="#" class="btn btn-default btn-xs bcopy" data-toggle="tooltip" title="Kopiera"><i class="fa fa-copy"></i></a><a href="#" class="btn btn-default btn-xs breturn" data-toggle="tooltip" title="Återlämna"><i class="fa fa-sign-in"></i></a><a href="#" class="btn btn-default btn-xs btrash" data-toggle="tooltip" title="Radera"><i class="fa fa-trash"></i></a>');

  });

// Kopiera

  $('.bcopy').on('click', function(event) {
    event.preventDefault();

    $('a').removeClass('bcSel');
    $(this).siblings('a:first').addClass('bcSel');

    var bcLink = document.querySelector('.bcSel');
    var range = document.createRange();
    range.selectNode(bcLink);
    window.getSelection().addRange(range);

    try {
      document.execCommand('copy');
    } catch(e) {
      alert(e);
    };

    window.getSelection().removeAllRanges();
  });

// Återlämna

  $('.breturn').on('click', function(event) {
    event.preventDefault();
    var bc = $(this).siblings('a:first').text();
     if(confirm("Är du säker på att du vill återlämna detta exemplaret? \n\r\n\r" + bc)){
      window.location.href = 'https://' + window.location.hostname + '/cgi-bin/koha/circ/returns.pl?barcode=' + bc;
    };
  });

// Radera

  $('.btrash').on('click', function(event) {
    event.preventDefault();
    var bc = $(this).siblings('a:first').text();
    var itemnr = $(this).siblings('a:first').attr('href');
    itemnr = itemnr.slice(itemnr.indexOf('itemnumber=') + 11, itemnr.indexOf('&biblionumber'));
    var bibnr = $('.yui-b #menu li:first a').attr('href');
    bibnr = bibnr.slice(bibnr.indexOf('biblionumber') + 13);
    var link = 'https://' + window.location.hostname + '/cgi-bin/koha/tools/batchMod.pl?op=show&del=1&itemnumber=' + itemnr + '&src=%2Fcgi-bin%2Fkoha%2Fcatalogue%2Fdetail.pl%3Fbiblionumber%3D' + bibnr;

    if (confirm("Är du säker på att du vill radera detta exemplaret? \n\r\n\r" + bc)) {
      window.location.href = link;
    };
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.bcSel {
  background-color: gold;
}

.bcopy, .breturn, .btrash {
  min-width: 22px;
  margin: 5px 7px 2px 0;
}

Cirkulation / Knappar

Skapar knappar för Kopiera streckkod och Återlämna bredvid streckkod på utlåningssidan.

Knapparutlaning.PNG

// IntranetUserJS

if ($('#circ_circulation').length | $('#pat_moremember').length) {

  waitForEl('#issues-table tbody tr td:nth-child(2)', function() {

    $('#issues-table tbody tr td:nth-child(2)').each(function() {
      $(this).append('</br><a href="#" class="btn btn-default btn-xs bcopy" data-toggle="tooltip" title="Kopiera"><i class="fa fa-copy"></i><a href="#" class="btn btn-default btn-xs breturn" data-toggle="tooltip" title="Återlämna"><i class="fa fa-sign-in"></i></a>');
    });

// Kopiera

    $('.bcopy').on('click', function(event) {
      event.preventDefault();

      var isSupported = document.queryCommandSupported('copy');
      console.log('Går kopiera? = ' + isSupported);

      $('td a').removeClass('bcSel');
      $(this).siblings('a:first').addClass('bcSel');

      var bcLink = document.querySelector('.bcSel');
      var range = document.createRange();
      range.selectNode(bcLink);
      window.getSelection().addRange(range);

      try {
        document.execCommand('copy');
      } catch(e) {
        alert(e);
      };

      window.getSelection().removeAllRanges();

    });

// Återlämna
  
    $('.breturn').on('click', function(event) {
      event.preventDefault();
      var bc = $(this).siblings('a:first').text();

      if(confirm("Är du säker på att du vill återlämna detta exemplaret? \n\r\n\r" + bc)){
        window.location.href = 'https://' + window.location.hostname + '/cgi-bin/koha/circ/returns.pl?barcode=' + bc;
      };

    });
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.bcSel {
  background-color: gold;
}

.bcopy, .breturn, .btrash {
  min-width: 22px;
  margin: 5px 7px 2px 0;
}

Katalog / Visning

Visa antal exemplar på flikarna för både egna och andra bibliotek.

Flikexemplar.PNG


$('#holdings').each(function() {

  var nrex = $('#holdings tbody tr').length;
  var nroex = $('#otherholdings tbody tr').length;  

  $('a[href="#holdings"]').append('<span> (' + nrex + ')</span>');

  $('a[href="#otherholdings"]').append('<span> (' + nroex + ')</span>');
  
});



Katalog / Barnmedia

Ändrar automatiskt till itemtype "BARNBOK" om man skriver in Hcf, Hcg eller något med litet u i Full call number vid exemplarinläggning eller redigering.


$('#subfield952o input:first').change(function() {

  if ($(this).val().indexOf('Hcf') > -1 | $(this).val().indexOf('Hcg') > -1 | ($(this).val().startsWith('u',0) && $(this).val().charAt(1) === $(this).val().charAt(1).toUpperCase()) | $(this).val().indexOf(',u') > -1 ) {

    $('select[id^="tag_952_subfield_y"]').select2('val','BARNBOK');

  };

});

Katalog / Exemplar

Döljer onödiga fält vid exemplarredigering/registrering.

Doldafalt.PNG


if ($('#cat_additem').length) {

  var hiddenArr = ['1','3','5','6','f','j','t','u','w'];

  for (i = 0; i < hiddenArr.length; i++) {

    $('.subfield_line label').each(function() {
      if ($(this).text().charAt(0) == hiddenArr[i]) {
        $(this).closest('li').hide();
      };
    });
  };
};


Låntagare / Registrering

Tvingar stor bokstav i början på alla namn och adresser på låntagaranmälan och redigering.


jQuery.fn.capitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var stringStart = box.selectionStart;
        var stringEnd = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
            return $word.toUpperCase();
        }));
        box.setSelectionRange(stringStart , stringEnd);
    });

   return this;
}


jQuery.fn.capitalizefw = function() {
    $(this).keyup(function(event) {
            var textBox = event.target;
            var start = textBox.selectionStart;
            var end = textBox.selectionEnd;
            textBox.value = textBox.value.charAt(0).toUpperCase() + textBox.value.slice(1);
            textBox.setSelectionRange(start, end);
    });

   return this;
}


$('#surname, #firstname, #city, #country, #B_city, #B_country').addClass('capitalizer');
$('#address, #address2, #B_address, #B_address2').addClass('capitalizerfw');


$('.capitalizer').on('input', function() {
  $(this).capitalize();
});

$('.capitalizerfw').on('input', function() {
  $(this).capitalizefw();
});

Endast småbokstäver i e-postfält.


jQuery.fn.decapitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var stringStart = box.selectionStart;
        var stringEnd = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
            return $word.toLowerCase();
        }));
        box.setSelectionRange(stringStart , stringEnd);
    });

   return this;
}

$('#email').addClass('decapitalizer');

$('.decapitalizer').on('input', function() {
  $(this).decapitalize();
});


Cirkulation / Utlåning och detaljer för låntagare

Meddelanden på låntagarsidan går nu redigera så man slipper skriva en nya varje gång.

Meddelande.png


$('<a class="editmsg btn btn-link btn-sm" href="#"><i class="fa fa-edit"></i>Ändra</a>').insertAfter('#messages .circ-hlt');

$('.editmsg').on('click', function() {

  var delmsglink = $(this).next().attr('href');
  var msg =  $(this).closest('li').find('span.circ-hlt i').text().slice(1,-1);
  localStorage.setItem('editmsg', msg);

  $('#addnewmessageLabel').trigger('click');

  $('#borrower_message').val(msg);

  $('.modal-footer button.btn.btn-default.approve').on('click', function (event) {
    event.preventDefault();
    $.get('https://' + window.location.hostname + delmsglink).done(function(datan) {
      $('form#message_form').trigger('submit');
    });
  });

  $('.modal-footer button.btn.btn-default.deny.cancel').on('click', function () {
    $('#borrower_message').val(msg);
  });
});



Exemplar / Streckkoder

Markera innehållet i Streckkodsrutan när man klickar i rutan, förenklar så man kan dra streckkoden direkt när man ställer sig i rutan.

Streckkodsrutan.PNG


$('input[id^="tag_952_subfield_p"]').each(function() {
  $(this).addClass('bcselect');
});

$('.bcselect').on('focus', function(){
  $(this).select(); 
});

$('input[id^="tag_952_subfield_p"]').on('click', function() {
  if (!$('input[id^="tag_952_subfield_p"]').val() > -1) {
    $(this).select();
  };
});


Cirkulation / Reservationer

Visar antal reservationer i kö vid utlån.

Antalreservationervidutlan.PNG


$('#circ_needsconfirmation').each(function() { 
  var barcode = sessionStorage.getItem('lastbarcode');

  if ($('#circ_needsconfirmation ul li').text().indexOf('Efterfrågat') > -1 | $('#circ_needsconfirmation ul li').text().indexOf('High demand') > -1) {

    $('#circ_needsconfirmation ul').append('<li>Antal reservationer i kö:\t <span id="antal"><i>Hämtar...</i></span></li>');

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=454&sql_params=' + barcode, "json").done(function(data) {

      var res = data[data.length - 1][4];
      var link = '/cgi-bin/koha/reserve/request.pl?biblionumber=' + data[0][5];

      $('#antal').html('<b>' + res + '</b><a href="https://' + window.location.hostname + link +'" target="_blank"> (Öppna kön i ny flik)</a>');

    });  
  };
});



Cirkulation / Sparade lån

SPARADE LÅN - Varning med datum, Vid försök av lån tidigare lånad bok så anges nu senast lånat datum i bekräftelserutan, även om annan streckkod av samma titel försöker lånas.

Sparadelandatum.PNG


$('form#mainform').on('submit', function(event) {  // Spara senast dragna streckkod vid utlån i webbläsaren
  sessionStorage.setItem('lastbarcode',$('#barcode').val());
});

$('#circ_needsconfirmation').each(function() {  // Bekräfta lån-rutan
  var link = $.cookie('patronlink');
  var barcode = sessionStorage.getItem('lastbarcode');
 
  if (link.indexOf("findborrower") > -1) {
    var type = "cardnumber=";
  }
  else {
    var type = "borrowernumber=";
  };

  link = link.slice(link.indexOf('=')+1);

  if ($('#circ_needsconfirmation ul li').text().indexOf('previously ') > -1 | $('#circ_needsconfirmation ul li').text().indexOf('tidigare') > -1) {

    $('#circ_needsconfirmation ul').append('<h4 id="lastdateloading">Hämtar information... vänta</h4>');

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=450&sql_params=' + link + '&sql_params=' + barcode, "json").done(function(data) {

      var lastdate = data[0][5];

      if (lastdate == null) {
        lastdate = 0;
      };

      $('#circ_needsconfirmation #lastdateloading').remove();
      if (lastdate == 0) {
        $('#circ_needsconfirmation ul').append('<li id="lastdate">Senast lånad:\t <b>Okänt</b> <i>(före övergång till koha)</i></li>');
        sessionStorage.removeItem('lastbarcode');
      }
      else {
        $('#circ_needsconfirmation ul').append('<li id="lastdate">Senast lånad:\t <b>' + lastdate + '</b></li>');
        sessionStorage.removeItem('lastbarcode');
      };
    
    });
  };
});


Exemplar / Skolbibliotek

Vid redigering av exemplar så sparas exemplaret automatisk ifall man drar streckkoden, man behöver alltså inte klicka på knappen "Spara" vid redigering av exemplar.


$('#cataloguing_additem_newitem #f').has('#edititem').each(function() {

  $('#subfield952p input').keypress(function(event) {
    var keycode = event.keyCode || event.which;
    if(keycode == '13') {
      if ($(this).val()) {
        $('input[onclick="return Check(this.form)"]').trigger('click'); 
      }
    }
  });
});


Låntagare / Personnummer

Personnummerfältet låst till endast 10 siffror och flytta fältet till ovan födelsedatum samt autofyll födelsedagsdatum. Känner av att det är ett giltigt personnr annars rensar den fältet och ger ett meddelande. Kontrollerar även nu också att inte personnumret finns registrerat i katalogen.


var validatePersonalNumber = function(input) {  // Valideringsscript för svenskt personnummer
  // Kontrollera godkänd längd och form
  if (!input) return false;

  if (input.indexOf('-') == -1) {
    if (input.length === 10) {
      input = input.slice(0, 6) + "-" + input.slice(6);
    } else {
      input = input.slice(0, 8) + "-" + input.slice(8);
    }
  }
  if (!input.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})|(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) return false;

  // Snygga till input
  input = input.replace('-', '');
  if (input.length == 12) {
    input = input.substring(2);
  }

  // Deklarera variabler
  var d = new Date(((!!RegExp.$1) ? RegExp.$1 : RegExp.$5), (((!!RegExp.$2) ? RegExp.$2 : RegExp.$6)-1), ((!!RegExp.$3) ? RegExp.$3 : RegExp.$7)),
    sum = 0,
    numdigits = input.length,
    parity = numdigits % 2,
    i,
    digit;

  // Kontrollera godkänt datum 
  if (Object.prototype.toString.call(d) !== "[object Date]" || isNaN(d.getTime())) return false;

  // Kontrollera luhn algoritmen
  for (i = 0; i < numdigits; i = i + 1) {
    digit = parseInt(input.charAt(i))
    if (i % 2 == parity) digit *= 2;
      if (digit > 9) digit -= 9;
        sum += digit;
  }
  return (sum % 10) == 0;
};


$('#patron_attr_3').attr('maxlength','10').attr('placeholder','10 siffror (ÅÅMMDDNNNN)').attr('style','width: 174px; height: 22px;'); // Ge fältet rätt attribut

$('#patron_attr_3').parent().insertBefore('li label[for="dateofbirth"]'); // Flyttar personnrfältet till innan födelsedagsdatumfältet

$('#patron_attr_3').change(function() {  // Känner av ändring i personnrfältet och uppdaterar födelsedagsdatumfältet och OPAC användarnamnet

  if (validatePersonalNumber($(this).val())) {
    var d = new Date(); // Kollar det aktuella datumet
    var year = d.getFullYear(); // Sorterar ut vilket år det är
    year = year.toString().slice(0,2); // Gör om till sträng och ta bara med de två första siffrorna, dvs 19 eller 20
    
    var patronyear = $(this).val().slice(0,2); // Kollar personnummrets två första siffror och sparar det till variable

    if (patronyear > year) { // Kontrollerar om personen är mer än hundra år, om inte gör detta följande
      $('input#dateofbirth').val('19' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
    }
    else {  // Personen är äntingen över hundra år (inte så troligt) så då förutsätter vi att personen är född på 2000-talet
      $('input#dateofbirth').val('20' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
    };
  
    $('input#userid').val($(this).val());  // Kopierar även personnr till OPAC Användarnamnet

    chkpnr = $(this).val();

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/circ/circulation.pl?findborrower=' + chkpnr).done(function(datan) {

      var contents = datan.slice(datan.indexOf('<title>')+7, datan.indexOf('</title>'));

      if (contents.indexOf('Låna ut') > -1 | contents.indexOf('Checking') > -1) {

        alert('Personnumret finns redan registrerat!');
        $('#patron_attr_3').css('background','red').focus().select();
    
      } else {
   
        $('#patron_attr_3').css('background','#d4efb7');
      };
    });

  }
  else {
    $('textarea[id="patron_attr_3"]').val(null);  // Rensa fältet
    alert("Personnummret är felaktigt, var god ändra.");  // Varna för fel personnr
    setTimeout(function(){$('textarea[id="patron_attr_3"]').focus();}, 1); // Ställ markören i fältet igen
  };
});