Bug 25879: Improve display of guarantor information in the patron entry form
[koha.git] / koha-tmpl / intranet-tmpl / prog / js / members.js
blob4de6e6e19845b205fff373873280ac43f62a9651
1 // this function checks id date is like DD/MM/YYYY
2 function CheckDate(field) {
3 var d = field.value;
4 if (d!=="") {
5       var amin = 1900;
6       var amax = 2100;
7       var date = d.split("/");
8       var ok=1;
9       var msg;
10       if ( (date.length < 2) && (ok==1) ) {
11         msg = MSG_SEPARATOR.format(field.name);
12         alert(msg); ok=0; field.focus();
13         return;
14       }
15       var dd   = date[0];
16       var mm   = date[1];
17       var yyyy = date[2];
18       // checking days
19       if ( ((isNaN(dd))||(dd<1)||(dd>31)) && (ok==1) ) {
20         msg = MSG_INCORRECT_DAY.format(field.name);
21         alert(msg); ok=0; field.focus();
22         return false;
23       }
24       // checking months
25       if ( ((isNaN(mm))||(mm<1)||(mm>12)) && (ok==1) ) {
26         msg = MSG_INCORRECT_MONTH.format(field.name);
27         alert(msg); ok=0; field.focus();
28         return false;
29       }
30       // checking years
31       if ( ((isNaN(yyyy))||(yyyy<amin)||(yyyy>amax)) && (ok==1) ) {
32         msg = MSG_INCORRECT_YEAR.format(field.name);
33         alert(msg); ok=0; field.focus();
34         return false;
35       }
36    }
39 //function test if member is unique and if it's right the member is registred
40 function unique() {
41 var msg1;
42 var msg2;
43 if (  document.form.check_member.value==1){
44     if (document.form.categorycode.value != "I"){
46         msg1 += MSG_DUPLICATE_PATRON;
47         alert(msg1);
48     check_form_borrowers(0);
49     document.form.submit();
51     }else{
52         msg2 += MSG_DUPLICATE_ORGANIZATION;
53         alert(msg2);
54     check_form_borrowers(0);
55     }
57 else
59     document.form.submit();
63 //end function
64 //function test if date enrooled < date expiry
65 // WARNING: format-specific test.
66 function check_manip_date(status) {
67 if (status=='verify'){
68 // this part of function('verify') is used to check if dateenrolled<date expiry
69 if (document.form.dateenrolled !== '' && document.form.dateexpiry.value !=='') {
70 var myDate1=document.form.dateenrolled.value.split ('/');
71 var myDate2=document.form.dateexpiry.value.split ('/');
72     if ((myDate1[2]>myDate2[2])||(myDate1[2]==myDate2[2] && myDate1[1]>myDate2[1])||(myDate1[2]==myDate2[2] && myDate1[1]>=myDate2[1] && myDate1[0]>=myDate2[0]))
74         {
75         document.form.dateenrolled.focus();
76         var msg = MSG_LATE_EXPIRY;
77         alert(msg);
78         }
79     }
80     }
82 //end function
84 function check_password( password ) {
85     if ( password.match(/^\s/) || password.match(/\s$/)) {
86         return false;
87     }
88     return true;
91 // function to test all fields in forms and nav in different forms(1 ,2 or 3)
92 function check_form_borrowers(nav){
93     var statut=0;
94     var message = "";
95     var message_champ="";
96     if (document.form.check_member.value == 1 )
97     {
98         if (document.form.answernodouble) {
99             if( (!(document.form.answernodouble.checked))){
100                 document.form.nodouble.value=0;
101             } else {
102                 document.form.nodouble.value=1;
103             }
104         }
105     }
107     //patrons form to test if you checked no to the question of double
108     if (statut!=1 && document.form.check_member.value > 0 ) {
109         if (!(document.form.answernodouble.checked)){
110             message_champ+= MSG_DUPLICATE_SUSPICION;
111             statut=1;
112             document.form.nodouble.value=0;
113         } else {
114             document.form.nodouble.value=1;
115         }
116     }
118     if (statut==1){
119         //alert if at least 1 error
120         alert(message+"\n"+message_champ);
121         return false;
122     } else {
123         return true;
124     }
127 function Dopop(link) {
128 // //   var searchstring=document.form.value[i].value;
129     var newin=window.open(link,'popup','width=600,height=400,resizable=no,toolbar=false,scrollbars=no,top');
132 function clear_entry(node) {
133     var original = $(node).parent();
134     $("textarea", original).attr('value', '');
135     $("select", original).attr('value', '');
138 function clone_entry(node) {
139     var original = $(node).parent();
140     var clone = original.clone();
142     var newId = 50 + parseInt(Math.random() * 100000);
143     $("input,select,textarea", clone).attr('id', function() {
144         return this.id.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
145     });
146     $("input,select,textarea", clone).attr('name', function() {
147         return this.name.replace(/patron_attr_\d+/, 'patron_attr_' + newId);
148     });
149     $("label", clone).attr('for', function() {
150         return $(this).attr("for").replace(/patron_attr_\d+/, 'patron_attr_' + newId);
151     });
152     $("input#patron_attr_" + newId, clone).attr('value','');
153     $("select#patron_attr_" + newId, clone).attr('value','');
154     $(original).after(clone);
155     return false;
158 function update_category_code(category_code) {
159     if ( $(category_code).is("select") ) {
160         category_code = $("#categorycode_entry").find("option:selected").val();
161     }
162     var mytables = $(".attributes_table");
163     $(mytables).find("li").hide();
164     $(mytables).find(" li[data-category_code='"+category_code+"']").show();
165     $(mytables).find(" li[data-category_code='']").show();
168 function select_user(borrowernumber, borrower, relationship) {
169     let is_guarantor = $(`.guarantor-details[data-borrowernumber=${borrower.borrowernumber}]`).length;
171     if ( is_guarantor ) {
172         alert("Patron is already a guarantor for this patron");
173     } else {
174         $('#guarantor_id').val(borrower.borrowernumber);
175         $('#guarantor_surname').val(borrower.surname);
176         $('#guarantor_firstname').val(borrower.firstname);
178         var fieldset = $('#guarantor_template').clone();
179         fieldset.removeAttr('id');
181         var guarantor_id = $('#guarantor_id').val();
182         if ( guarantor_id ) {
183             fieldset.find('.new_guarantor_id').first().val( guarantor_id );
184             fieldset.find('.new_guarantor_id_text').first().text( borrower.cardnumber );
185             fieldset.find('.new_guarantor_link').first().attr("href", "/cgi-bin/koha/members/moremember.pl?borrowernumber=" + guarantor_id );
186         } else {
187             fieldset.find('.guarantor_id').first().hide();
188         }
189         $('#guarantor_id').val("");
191         var guarantor_surname = $('#guarantor_surname').val();
192         fieldset.find('.new_guarantor_surname').first().val( guarantor_surname );
193         fieldset.find('.new_guarantor_surname_text').first().text( guarantor_surname );
194         $('#guarantor_surname').val("");
196         var guarantor_firstname = $('#guarantor_firstname').val();
197         fieldset.find('.new_guarantor_firstname').first().val( guarantor_firstname );
198         fieldset.find('.new_guarantor_firstname_text').first().text( guarantor_firstname );
199         $('#guarantor_firstname').val("");
201         var guarantor_relationship = $('#relationship').val();
202         fieldset.find('.new_guarantor_relationship').first().val( guarantor_relationship );
203         $('#relationship').find('option:eq(0)').prop('selected', true);
205         fieldset.find('.guarantor-details').first().attr( 'data-borrowernumber', borrower.borrowernumber );
207         $('#guarantor_relationships').append( fieldset );
208         fieldset.show();
210         if ( relationship ) {
211             fieldset.find('.new_guarantor_relationship').val(relationship);
212         }
213     }
215     return 0;
218 function CalculateAge(dateofbirth) {
219     var today = new Date();
220     var dob = Date_from_syspref(dateofbirth);
221     var age = {};
223     age.year = today.getFullYear() - dob.getFullYear();
224     age.month = today.getMonth() - dob.getMonth();
225     var day = today.getDate() - dob.getDate();
227     if(day < 0) {
228         age.month = parseInt(age.month) -1;
229     }
231     if(age.month < 0) {
232         age.year = parseInt(age.year) -1;
233         age.month = 12 + age.month;
234     }
236     return age;
239 function write_age() {
240     var hint = $("#dateofbirth").siblings(".hint").first();
241     hint.html(dateformat);
243     var age = CalculateAge(document.form.dateofbirth.value);
245     if (!age.year && !age.month) {
246         return;
247     }
249     var age_string;
250     if (age.year || age.month) {
251         age_string = LABEL_AGE + ": ";
252     }
254     if (age.year) {
255         age_string += age.year > 1 ? MSG_YEARS.format(age.year) : MSG_YEAR.format(age.year);
256         age_string += " ";
257     }
259     if (age.month) {
260         age_string += age.month > 1 ? MSG_MONTHS.format(age.month) : MSG_MONTH.format(age.month);
261     }
263     hint.html(age_string);
266 $(document).ready(function(){
267     if($("#yesdebarred").is(":checked")){
268         $("#debarreduntil").show();
269     } else {
270         $("#debarreduntil").hide();
271     }
272     $("#yesdebarred,#nodebarred").change(function(){
273         if($("#yesdebarred").is(":checked")){
274             $("#debarreduntil").show();
275             $("#datedebarred").focus();
276         } else {
277             $("#debarreduntil").hide();
278         }
279     });
280     var mandatory_fields = $("input[name='BorrowerMandatoryField']").val().split ('|');
281     $(mandatory_fields).each(function(){
282         $("[name='"+this+"']").attr('required', 'required');
283     });
285     $("fieldset.rows input, fieldset.rows select").addClass("noEnterSubmit");
287     $('body').on('click', '#guarantor_search', function(e) {
288         e.preventDefault();
289         var newin = window.open('guarantor_search.pl','popup','width=600,height=400,resizable=no,toolbar=false,scrollbars=yes,top');
290     });
292     $('#guarantor_relationships').on('click', '.guarantor_cancel', function(e) {
293         e.preventDefault();
294         $(this).parents('fieldset').first().remove();
295     });
297     $(document.body).on('change','.select_city',function(){
298         var selected_city = $(this).val();
299         var addressfield = $(this).data("addressfield");
300         var myRegEx=new RegExp(/(.*)\|(.*)\|(.*)\|(.*)/);
301         var matches = selected_city.match( myRegEx );
302         $("#" + addressfield + "zipcode").val( matches[1] );
303         $("#" + addressfield + "city").val( matches[2] );
304         $("#" + addressfield + "state").val( matches[3] );
305         $("#" + addressfield + "country").val( matches[4] );
306     });
308     dateformat = $("#dateofbirth").siblings(".hint").first().html();
310     if( $('#dateofbirth').length ) {
311         write_age();
312     }
314     $.validator.addMethod(
315         "phone",
316         function(value, element, phone) {
317             var e164 = "^\\+?[1-9]\\d{1,14}$";
318             var re = new RegExp(e164);
320             let has_plus = value.charAt(0) === '+';
321             value = value.replace(/\D/g,'');
322             if ( has_plus ) value = '+' + value;
323             element.value = value;
325             return this.optional(element) || re.test(value);
326         },
327         jQuery.validator.messages.phone);
329     $("#entryform").validate({
330         rules: {
331             email: {
332                 email: true
333             },
334             emailpro: {
335                 email: true
336             },
337             B_email: {
338                 email: true
339             },
340             password: {
341                password_strong: true,
342                password_no_spaces: true
343             },
344             password2: {
345                password_match: true
346             },
347             SMSnumber: {
348                phone: true,
349             }
350         },
351         submitHandler: function(form) {
352             $("body, form input[type='submit'], form button[type='submit'], form a").addClass('waiting');
353             if (form.beenSubmitted)
354                 return false;
355             else
356                 form.beenSubmitted = true;
357                 form.submit();
358             }
359     });
361     var mrform = $("#manual_restriction_form");
362     var mrlink = $("#add_manual_restriction");
363     mrform.hide();
364     mrlink.on("click",function(e){
365         $(this).hide();
366         mrform.show();
367         e.preventDefault();
368     });
370     $("#cancel_manual_restriction").on("click",function(e){
371         $('#debarred_expiration').val('');
372         $('#add_debarment').val(0);
373         $('#debarred_comment').val('');
374         mrlink.show();
375         mrform.hide();
376         e.preventDefault();
377     });
378     $('#floating-save').css( { bottom: parseInt( $('#floating-save').css('bottom') ) + $('#changelanguage').height() + 'px' } );
379     $('#qa-save').css( {
380         bottom: parseInt( $('#qa-save').css('bottom') ) + $('#changelanguage').height() + 'px' ,
381         "background-color": "rgba(185, 216, 217, 0.6)",
382         "bottom": "3%",
383         "position": "fixed",
384         "right": "1%",
385         "width": "150px",
386     } );