Bug 15206 - Show patron's age under date of birth in memberentry.pl
authorAlex Arnaud <alex.arnaud@biblibre.com>
Mon, 4 Jan 2016 13:49:04 +0000 (14:49 +0100)
committerBrendan Gallagher <brendan@bywatersolutions.com>
Sat, 12 Mar 2016 23:41:40 +0000 (23:41 +0000)
Test plan:

Create or edit a patron (members/memberentry.pl), enter a date of birth
(for a new patron), patron'a age should be shown under

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Brendan Gallagher brendan@bywatersolutions.com

koha-tmpl/intranet-tmpl/prog/en/js/members.js
koha-tmpl/intranet-tmpl/prog/en/modules/members/memberentrygen.tt

index 59deeae..1dd1cb8 100644 (file)
@@ -217,6 +217,57 @@ function select_user(borrowernumber, borrower) {
     return 0;
 }
 
+function CalculateAge() {
+    var hint = $("#dateofbirth").siblings(".hint").first();
+    hint.html(dateformat);
+
+    if (dformat == 'metric' && false === CheckDate(document.form.dateofbirth)) {
+        return;
+    }
+
+    if (!$("#dateofbirth").datepicker( 'getDate' )) {
+        return;
+    }
+
+    var today = new Date();
+    var dob = new Date($("#dateofbirth").datepicker( 'getDate' ));
+
+    var nowyear = today.getFullYear();
+    var nowmonth = today.getMonth();
+    var nowday = today.getDate();
+
+    var birthyear = dob.getFullYear();
+    var birthmonth = dob.getMonth();
+    var birthday = dob.getDate();
+
+    var year = nowyear - birthyear;
+    var month = nowmonth - birthmonth;
+    var day = nowday - birthday;
+
+    if(day < 0) {
+        month = parseInt(month) -1;
+    }
+
+    if(month < 0) {
+        year = parseInt(year) -1;
+        month = 12 + month;
+    }
+
+    var age_string;
+    if (year || month) {
+        age_string = _('Age: ');
+    }
+    if (year) {
+        age_string += _(year > 1 ? '%s years ' : '%s year ').format(year);
+    }
+
+    if (month) {
+        age_string += _(month > 1 ? '%s months ' : '%s month ').format(month);
+    }
+
+    hint.html(age_string);
+}
+
 $(document).ready(function(){
     if($("#yesdebarred").is(":checked")){
         $("#debarreduntil").show();
index 497c1a7..78c5e05 100644 (file)
                 update_category_code( category_code );
             }
         [% END %]
+        $("#dateofbirth").datepicker({ maxDate: "-1D", yearRange: "c-120:" });
+        dateformat = $("#dateofbirth").siblings(".hint").first().html();
+        CalculateAge();
+        $("#entryform").validate({
+            rules: {
+                email: {
+                    email: true
+                },
+                emailpro: {
+                    email: true
+                },
+                B_email: {
+                    email: true
+                }
+            },
+            submitHandler: function(form) {
+                $("body, form input[type='submit'], form button[type='submit'], form a").addClass('waiting');
+                if (form.beenSubmitted)
+                    return false;
+                else
+                    form.beenSubmitted = true;
+                    form.submit();
+                }
+        });
+
+        var mrform = $("#manual_restriction_form");
+        var mrlink = $("#add_manual_restriction");
+        mrform.hide();
+        mrlink.on("click",function(e){
+            $(this).hide();
+            mrform.show();
+            e.preventDefault();
+        });
+        $("#cancel_manual_restriction").on("click",function(e){
+            $('#debarred_expiration').val('');
+            $('#add_debarment').val(0);
+            $('#debarred_comment').val('');
+            mrlink.show();
+            mrform.hide();
+            e.preventDefault();
+        });
     });
 
+    function clear_entry(node) {
+        var original = $(node).parent();
+        $("textarea", original).attr('value', '');
+        $("select", original).attr('value', '');
+    }
+
+    function clone_entry(node) {
+        var original = $(node).parent();
+        var clone = original.clone();
+
+        var newId = 50 + parseInt(Math.random() * 100000);
+        $("input,select,textarea", clone).attr('id', function() {
+            return this.id.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
+        });
+        $("input,select,textarea", clone).attr('name', function() {
+            return this.name.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
+        });
+        $("label", clone).attr('for', function() {
+            return $(this).attr("for").replace(/patron_attr_\d+/, 'patron_attr_' + newId);
+        });
+        $("input#patron_attr_" + newId, clone).attr('value','');
+        $("select#patron_attr_" + newId, clone).attr('value','');
+        $(original).after(clone);
+        return false;
+    }
+
+    function update_category_code(category_code) {
+        if ( $(category_code).is("select") ) {
+            category_code = $("#categorycode_entry").find("option:selected").val();
+        }
+        var mytables = $(".attributes_table");
+        $(mytables).find("li").hide();
+        $(mytables).find(" li[data-category_code='"+category_code+"']").show();
+        $(mytables).find(" li[data-category_code='']").show();
+    }
+
+    function select_user(borrowernumber, borrower) {
+        var form = $('#entryform').get(0);
+        if (form.guarantorid.value) {
+            $("#contact-details").find('a').remove();
+            $("#contactname, #contactfirstname").parent().find('span').remove();
+        }
+
+        var id = borrower.borrowernumber;
+        form.guarantorid.value = id;
+        $('#contact-details')
+            .show()
+            .find('span')
+            .after('<a target="blank" href="/cgi-bin/koha/members/moremember.pl?borrowernumber=' + id + '">' + id + '</a>');
+
+        $(form.contactname)
+            .val(borrower.surname)
+            .before('<span>' + borrower.surname + '</span>').get(0).type = 'hidden';
+        $(form.contactfirstname)
+            .val(borrower.firstname)
+            .before('<span>' + borrower.firstname + '</span>').get(0).type = 'hidden';
+
+        form.streetnumber.value = borrower.streetnumber;
+        form.address.value = borrower.address;
+        form.address2.value = borrower.address2;
+        form.city.value = borrower.city;
+        form.state.value = borrower.state;
+        form.zipcode.value = borrower.zipcode;
+        form.country.value = borrower.country;
+        form.branchcode.value = borrower.branchcode;
+
+        form.guarantorsearch.value = _("Change");
+
+        return 0;
+    }
+
+>>>>>>> Bug 15206 - Show patron's age under date of birth in memberentry.pl
         var MSG_SEPARATOR = _("Separator must be / in field %s");
         var MSG_INCORRECT_DAY = _("Invalid day entered in field %s");
         var MSG_INCORRECT_MONTH = _("Invalid month entered in field %s");
                 [% END %]
                 Date of birth: </label>
 
-        [% IF ( dateformat == "metric" ) %]
-                <input type="text" id="dateofbirth" name="dateofbirth" size="20" onchange="CheckDate(document.form.dateofbirth);" value="[% UNLESS opduplicate %][% dateofbirth %][% END %]" />
-        [% ELSE %]
-                <input type="text" id="dateofbirth" name="dateofbirth" size="20" value="[% UNLESS opduplicate %][% dateofbirth %][% END %]" />
-        [% END %]
+                <input type="text" id="dateofbirth" name="dateofbirth" size="20" onchange="CalculateAge();" value="[% UNLESS opduplicate %][% dateofbirth %][% END %]" />
 
         [% IF ( mandatorydateofbirth ) %]<span class="required">Required</span>[% END %]
         [% IF ( ERROR_dateofbirth ) %]<span class="required">(Error)</span>[% END %]