[Koha-patches] [PATCH] Significant refactoring of subscription-add javascript to address serials planning bugs. Most significantly, replace multiple dropdown selects with single multiselect, and add buttons to show/hide advanced prediction table, test for irregularity, and reset pattern.

Ryan Higgins rch at liblime.com
Sun Jul 27 20:26:15 CEST 2008


---
 .../intranet-tmpl/prog/en/css/staff-global.css     |   20 ++
 koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js |   15 +-
 .../prog/en/modules/serials/subscription-add.tmpl  |  279 +++++++++++++-------
 koha-tmpl/intranet-tmpl/prog/img/ajax-loader.gif   |  Bin 0 -> 9427 bytes
 serials/subscription-add.pl                        |    2 +-
 5 files changed, 213 insertions(+), 103 deletions(-)
 create mode 100644 koha-tmpl/intranet-tmpl/prog/img/ajax-loader.gif

diff --git a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
index c2636f2..e645f57 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/en/css/staff-global.css
@@ -1406,6 +1406,26 @@ a.yuimenuitemlabel:hover {
 	color : #000;
 }
 		
+.action_test {
+}
+.action_reset {
+}
+
+#ajax_loading {
+	margin: 10px;
+	border: 2px solid #CCC;
+	padding: 5px;
+	height: 30px;
+	width: 160px;
+	background : #E8E8E8 url(../../img/ajax-loader.gif) center center no-repeat;
+}
+
+#displayexample {
+	padding: 5px; 
+	margin-bottom: 10px;
+	background-color: #CCCCCC;
+}
+
 #toplevelnav {
 	float : left;
 	margin-left : .5em;
diff --git a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
index ddbc3ce..645d6f5 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
+++ b/koha-tmpl/intranet-tmpl/prog/en/js/staff-global.js
@@ -70,4 +70,17 @@ YAHOO.util.Event.onContentReady("changelanguage", function () {
 				YAHOO.util.Event.addListener("showlang", "click", onYahooClick);
 
 				YAHOO.widget.Overlay.windowResizeEvent.subscribe(positionoMenu);
-            });
\ No newline at end of file
+            });
+
+function addLoadEvent(func) {
+  // From: http://simonwillison.net/2004/May/26/addLoadEvent/
+  var oldonload = window.onload;
+  if (typeof window.onload != 'function') {
+    window.onload = func;
+  } else {
+    window.onload = function() {
+      oldonload();
+      func();
+    }
+  }
+}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tmpl
index b048091..642385a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/serials/subscription-add.tmpl
@@ -11,9 +11,9 @@ var text = new Array(_("Number"),_("Volume"),_("Issue"),_("Month"),_("Week"),_("
 _("Autumn"),_("Winter"),_("Spring"),_("Summer"),_("Fall"),_("Season"),_("Year"));
 var is_season = 0;
 var is_hemisphere = 1;
-<!-- TMPL_IF NAME="weekarrayjs" -->
-    var weeks = new Array(<!-- TMPL_VAR NAME="weekarrayjs" -->); 
-<!-- /TMPL_IF -->
+var irregular_issues;   // will hold irregularity object.
+
+
 function xmlhttpPost(strURL) {
     var xmlHttpReq = false;
     var self = this;
@@ -41,11 +41,24 @@ function getquerystring() {
 }
 
 function updatepage(str){
-    //document.getElementById("notes").innerHTML = str;
- 	weeks = eval("(" + str + ")");
-	var titles = weeks;
+	irregular_issues.weeks = eval("(" + str + ")");
 }
 
+function ajax_loading(el) {
+	el.innerHTML = '';
+	el.innerHTML = '<div id="ajax_loading">' + _("please wait") + ' </div>';
+}
+function update_weeks(){
+	// make ajax call to get a new dates array for irregularity select.
+	//  only need to update if periodicity is weeks.  Otherwise we have monthnames locally.
+	//  this could also be done with the local Calendar object, obviating the ajax bit.
+	var periodicity = document.f.periodicity.value;
+	if(periodicity == 2 || periodicity == 3 || periodicity == 4){
+		ajax_loading(document.getElementById("irregularity"));	
+		xmlhttpPost("/cgi-bin/koha/serials/serials_planning_ajax.pl");
+		irregularity_check();
+	}
+}
 
 function YMDaToYWDa(S) {
     with (new Date(Date.UTC(S[0], S[1] - 1, S[2]))) {
@@ -68,8 +81,67 @@ return ddiff+1;
 }
 
 
+// create irregularity object.
+function IrregularPattern() {
+	this.months = new Array(_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December"));
+	this.seasons = new Array(_("Autumn"),_("Winter"),_("Spring"),_("Summer"),_("Fall"));
+    this.daynames = new Array(_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday"),_("Sunday"));
+	<!-- TMPL_IF NAME="weekarrayjs" -->
+    	this.weeks = new Array(<!-- TMPL_VAR NAME="weekarrayjs" -->); 
+	<!-- /TMPL_IF -->
+	this.numskipped = 0;
+    // init:
+	var irregular = '<!-- TMPL_VAR NAME="irregularity" -->';
+    var periodicity = document.f.periodicity.value;
+    var skipped = irregular.split(',');
+    if(skipped.lengh > 0) {
+		// when loading page, irregularity_select doesn't exist.  create it here:
+    	for(j=0;j<skipped.length;j++){
+	//		if(periodicity ==1){  
+				// for daily pubs, make checkboxes.
+    //	    	document.getElementById("irregular"+skipped[j]).checked = true; 
+    //	    } else {
+				document.getElementById("irregularity_select").options[i].selected = true;
+    //	}	
+		}
+		this.update;
+	}
+}
+
+IrregularPattern.prototype.update = function() {
+		this.skipped= new Array;
+		var cnt = 0;
+		// daily periodicity, we interpret irregular array as which days of week to skip.
+		// else irregular array is list of issues to skip
+		for( var i in document.f.irregularity_select.options ) {
+			if( document.f.irregularity_select.options[i].selected ) {
+				this.skipped[cnt] = document.f.irregularity_select.options[i].value ;
+				cnt++;
+			}
+		}
+}
+
+IrregularPattern.prototype.irregular = function(index) { 
+	for( var i in this.skipped) {
+			if( this.skipped[i] == index) {
+				return true;
+			}
+	}
+	return false;
+}
+
+function init_pattern() {
+	irregular_issues = new IrregularPattern();
+}
+function reset_pattern() {
+	document.getElementById("numberpattern").value = '';
+	document.getElementById("numberpattern").value = '';
+	init_pattern();
+	reset_num_pattern();
+
+}
 // common pre defined number patterns
-function num_pattern() {
+function reset_num_pattern() {
 var patternchoice = document.getElementById("numberpattern").value;
     switch(patternchoice){
     case "2":
@@ -85,9 +157,9 @@ var patternchoice = document.getElementById("numberpattern").value;
         document.f.setto1.value=0;
         document.f.setto2.value=1;
         document.f.setto3.value=1;
-/*        document.f.lastvalue1.value=1;
+        document.f.lastvalue1.value=1;
         document.f.lastvalue2.value=1;
-        document.f.lastvalue3.value=1;*/
+        document.f.lastvalue3.value=1;
         document.f.numberingmethod.value=_("Vol {X}, No {Y}, Issue {Z}");
         moreoptions(text[1],text[0],text[2]);
         display_table(0); // toggle info box on (1) or off (0)
@@ -105,9 +177,9 @@ var patternchoice = document.getElementById("numberpattern").value;
         document.f.setto1.value=0;
         document.f.setto2.value=1;
         document.f.setto3.value='';
-/*        document.f.lastvalue1.value=1;
+        document.f.lastvalue1.value=1;
         document.f.lastvalue2.value=1;
-        document.f.lastvalue3.value='';*/
+        document.f.lastvalue3.value='';
         document.f.numberingmethod.value=_("Vol {X}, No {Y}");
         moreoptions(text[1],text[0]);
         display_table(0);
@@ -125,6 +197,9 @@ var patternchoice = document.getElementById("numberpattern").value;
         document.f.setto1.value=0;
         document.f.setto2.value=1;
         document.f.setto3.value='';
+        document.f.lastvalue1.value=1;
+        document.f.lastvalue2.value=1;
+        document.f.lastvalue3.value='';
         document.f.numberingmethod.value=_("Vol {X}, Issue {Y}");
         moreoptions(text[1],text[2]);
         display_table(0);
@@ -193,7 +268,6 @@ var patternchoice = document.getElementById("numberpattern").value;
         document.f.setto1.value=0;
         document.f.setto2.value=1;
         document.f.setto3.value='';
-//         document.f.setto3.value='';
         if (document.f.lastvalue1.value==0){document.f.lastvalue1.value=sYear};
         if (document.f.lastvalue2.value==0 ||document.f.lastvalue2.value=='' ){    
           switch (document.f.periodicity.value){
@@ -258,11 +332,12 @@ var patternchoice = document.getElementById("numberpattern").value;
         document.f.setto1.value=0;
         document.f.setto2.value='';
         document.f.setto3.value='';
-/*        document.f.lastvalue1.value=1;
+        document.f.lastvalue1.value=1;
         document.f.lastvalue2.value='';
-        document.f.lastvalue3.value='';*/
+        document.f.lastvalue3.value='';
         document.f.numberingmethod.value='{X}';
-        moreoptions_daily_check(text[0]);
+//        moreoptions_daily_check(text[0]);
+        moreoptions(text[0]);
         document.f.irreg_check.value=1;
         display_table(0);
         break;
@@ -272,15 +347,18 @@ var patternchoice = document.getElementById("numberpattern").value;
 function display_table(n) {
     if(n==1){
         document.getElementById("basetable").style.display = 'block';
-    } else {
+    } else if(n==0){
         document.getElementById("basetable").style.display = 'none';
-    }
+    } else {
+		var disp_val = ( document.getElementById("basetable").style.display == 'none' ) ? 'block' : 'none' ;
+			document.getElementById("basetable").style.display = disp_val;
+	}
 }
 
-function modify_num_pattern() {
+function set_num_pattern_from_template_vars() {
 	if(!document.getElementById("numberpattern")){ return false; }
     document.getElementById("numberpattern").value = '<!-- TMPL_VAR NAME="numberpattern" -->';
-    num_pattern();
+    reset_num_pattern();
     
     document.f.add1.value='<!-- TMPL_VAR NAME="add1" -->';
     document.f.add2.value='<!-- TMPL_VAR NAME="add2" -->';
@@ -311,7 +389,6 @@ function modify_num_pattern() {
         more_strZ="Z";
     }
     <!-- /TMPL_IF -->
-
     document.f.lastvaluetemp1.value='<!-- TMPL_VAR NAME="lastvalue1" -->';
     if(more_strY){
         document.f.lastvaluetemp2.value='<!-- TMPL_VAR NAME="lastvalue2" -->';
@@ -324,15 +401,15 @@ function modify_num_pattern() {
 }
 
 // a pre check with more options to see if 'number' and '1/day' are chosen
+
 function moreoptions_daily_check(x) {
     var periodicity = document.f.periodicity.value;
     var errortext='';
-    if(periodicity == 1){
+    if(periodicity == 1){ // i.e. daily
         document.getElementById("irregularity").innerHTML = '';
-        var daynames = new Array(_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday"),_("Sunday"));
         errortext =_("Please indicate which days of the week you <b>DO NOT<\/b> expect to receive issues.<br \/>");
-        for(var j=0;j<daynames.length;j++){
-            errortext +="<input type='checkbox' name='irregular' id='irregular"+(j+1)+"' value='"+(j+1)+"' />"+daynames[j]+" &nbsp; ";
+        for(var j=0;j<irregular_issues.daynames.length;j++){
+            errortext +="<input type='checkbox' name='irregular' id='irregular"+(j+1)+"' value='"+(j+1)+"' />"+irregular_issues.daynames[j]+" &nbsp; ";
         }
         var error = errortext;
         moreoptions(x);
@@ -344,6 +421,7 @@ function moreoptions_daily_check(x) {
     }
 }
 
+
 // to dispaly the more options section
 function moreoptions(x,y,z){
 document.getElementById("irregularity").innerHTML = '';
@@ -369,14 +447,14 @@ var textbox = '';
         textbox +="<\/tr>\n";
         if(y){
             textbox +="<tr><th scope=\"row\">"+text[6]+"<\/th>";
-            textbox +="<td><a href='javascript:irregularity_check()'>"+_("Irregularity?")+"<\/a><\/td>\n";
+            textbox +="<td>&nbsp;<\/td>\n";
             textbox +="<td><input type='text' name='whenmorethantemp2' size='4' onkeyup='moreoptionsupdate(\"whenmorethan2\",1)'><\/td>\n";
             if(z){
                 textbox +="<td><input type='text' name='whenmorethantemp3' size='4' onkeyup='moreoptionsupdate(\"whenmorethan3\",1)'><\/td>\n";
             }
             textbox +="<\/tr>";
         } else {
-          textbox +="<tr> <td>"+_("issues expected")+"</td><td><input type='text' name='issuesexpectedtemp1' size='4' onkeyup='moreoptionsupdate(\"issuesexpected1\",0)' value=\"" + document.f.issuesexpected1.value + "\" ><br/><a href='javascript:irregularity_check()'>"+_("Irregularity?")+"</a></td></tr>";
+          textbox +="<tr> <td>"+_("issues expected")+"</td><td><input type='text' name='issuesexpectedtemp1' size='4' onkeyup='moreoptionsupdate(\"issuesexpected1\",0)' value=\"" + document.f.issuesexpected1.value + "\" ></td></tr>";
         }
         textbox +="<\/table>\n";
     }
@@ -389,7 +467,7 @@ var selbox = document.getElementById("season1");
     var selboxselected = selbox.options[selbox.selectedIndex].value;
     selbox.options.length = 0;
 
-    if (chosen == "1") {
+    if ( (chosen == "1") || ( ! (chosen) && is_hemisphere == 1 )) {
         selbox.options[selbox.options.length] = new Option(text[11],'1');
         selbox.options[selbox.options.length] = new Option(text[12],'2');
         selbox.options[selbox.options.length] = new Option(text[13],'3');
@@ -398,7 +476,7 @@ var selbox = document.getElementById("season1");
         selbox.options[selboxselected-1].selected = true;
     }
 
-    if (chosen == "2") {
+    if ( (chosen == "2") || ( ! (chosen) && is_hemisphere == 2 )) {
         selbox.options[selbox.options.length] = new Option(text[13],'1');
         selbox.options[selbox.options.length] = new Option(text[10],'2');
         selbox.options[selbox.options.length] = new Option(text[11],'3');
@@ -409,7 +487,7 @@ var selbox = document.getElementById("season1");
     }
 }
 
-// to dispaly the more options section for seasons
+// to display the more options section for seasons
 function moreoptions_seasons(x,y){
 document.getElementById("irregularity").innerHTML = '';
 document.getElementById("more_options").innerHTML = '';
@@ -439,7 +517,6 @@ var textbox = '';
         }
         textbox +="<\/select><\/td><\/tr>\n";
         textbox +="<tr><th scope=\"row\">"+text[6]+"<\/th>";
-        textbox +="<td><a href='javascript:irregularity_check()'>"+_("Irregularity?")+"<\/a><\/td>\n";
         textbox +="<td><input type='text' name='whenmorethantemp2' size='4' onkeyup='moreoptionsupdate(\"whenmorethan2\",1)'><\/td>\n";
                 textbox +="<\/tr><\/table>\n";
 
@@ -451,11 +528,15 @@ function irregularity_check(){
     document.f.irreg_check.value = 1; // Irregularity button now pushed
     var periodicity = document.f.periodicity.value;
 	var rollover = document.f.issuesexpected1.value;
-    if(document.f.whenmorethantemp2){
-      rollover = document.f.whenmorethantemp2.value;
+    if( (document.f.whenmorethan2) && ( document.f.whenmorethan2.value > 0) ){
+      rollover = document.f.whenmorethan2.value;
     }
-    if(document.f.whenmorethantemp3){
-        rollover = document.f.whenmorethantemp3.value;
+    if((document.f.whenmorethan3) && document.f.whenmorethan3.value > 0 ){
+        // FIXME: This assumes that whenmorethan3 issues are published in one year.
+		//   the other option is that whenmorethan3 * whenmorethan2 issues are published,
+		//  e.g. where there are two volumes of six issues each in one year. 
+		//  a way to distinguish between these two cases is needed.
+		rollover = document.f.whenmorethan3.value;
     }
     var error='';
     var toobig;
@@ -550,24 +631,19 @@ function irregularity_check(){
         break;
     }
     if(expected){
-        if(expected == 365 || expected==730){
-            var daynames = new Array(_("Monday"),_("Tuesday"),_("Wednesday"),_("Thursday"),_("Friday"),_("Saturday"),_("Sunday"));
+        if(expected == 365 || expected==730){  // what about leap years ?
+			// FIXME:  We interpret irregularity as which days per week for periodicity==1.
+			//  We need two cases: one in which we're published n days/week, in which case irregularity should be per week,
+			//  and a regular daily pub, where irregularity should be per year.
             errortext += _("Please indicate which days of the week you <b>DO NOT<\/b> expect to receive issues.<br \/>");
-            for(var j=0;j<daynames.length;j++){
-                errortext +="<input type='checkbox' name='irregular' id='irregular"+(j+1)+"' value='"+(j+1)+"' />"+daynames[j]+" &nbsp; ";
-            }
-            error=errortext;
         } else {
             errortext +=expected+_(" issues expected, ")+rollover+_(" were entered. <br \/>Please indicate which date(s) an issue is not expected<br \/>");
-            var count=0;
-            for(var i=rollover;i<expected;i++){
-                errortext +="<select name='irregular' id='irregular"+count+"' onchange='display_example(expected)'>\n";
-                errortext +=irregular_options(periodicity);
-                errortext +="<\/select>\n";
-                count++;
-            }
-            error=errortext;
-        }
+            irregular_issues.numskipped = expected - rollover;
+		}
+        errortext +="<select multiple id='irregularity_select' name='irregularity_select' onchange='irregular_issues.update();'>\n"; 
+		errortext +=irregular_options(periodicity);
+		errortext += "</select>";
+        error=errortext;
     }
     if(toobig){
         errortext +=expectedover+_(" issues expected, ")+rollover+_(" were entered.<br \/> You seem to have indicated more issues per year than expected.");
@@ -576,15 +652,13 @@ function irregularity_check(){
     if(error.length ==0){
         error=_("No irregularities noticed");
     }
-    display_example(expected);
+	display_example(expected);
     document.getElementById("irregularity").innerHTML = error;
 }
 
 function irregular_options(periodicity){
     var titles;
     var count;
-    var months = new Array(_("January"),_("February"),_("March"),_("April"),_("May"),_("June"),_("July"),_("August"),_("September"),_("October"),_("November"),_("December"));
-    var seasons = new Array(_("Autumn"),_("Winter"),_("Spring"),_("Summer"),_("Fall"));
     var errortext='';
     if(periodicity == 1) {
         expected = 366;
@@ -593,20 +667,19 @@ function irregular_options(periodicity){
     }
     if(periodicity == 2 || periodicity == 3 || periodicity == 4) { 
         expected = 52;
-    <!-- TMPL_IF NAME="weekarrayjs" -->
-        titles = weeks;
-        count = <!-- TMPL_VAR NAME="weekno" -->;
-    <!-- TMPL_ELSE -->
-        titles = "Week";
-        count = 1;
-    <!-- /TMPL_IF -->
+        titles = irregular_issues.weeks;
+        <!-- TMPL_IF NAME="weekno" -->
+		count = <!-- TMPL_VAR NAME="weekno" -->;
+		<!-- TMPL_ELSE -->
+		count = 1;
+		<!-- /TMPL_IF -->
     }
     if(periodicity == 5 || periodicity == 6 || periodicity == 7 || periodicity == 8 || periodicity == 9) {
         if(periodicity == 8) {
             is_season = 1; // setting up from edit page
         } 
         if(is_season){
-            titles = seasons;
+            titles = irregular_issues.seasons;
             expected = 4;
             if(is_hemisphere == 2){
                 count = 2;
@@ -614,11 +687,14 @@ function irregular_options(periodicity){
                 count = 1;
             }
         } else {
-            titles = months;
+            titles = irregular_issues.months;
             expected = 12;
             count = 1;
         }
     }
+	if( !expected) {
+		return '';   // don't know how to deal with irregularity.
+	} 	
     for(var j=1;j<=expected;j++){
         if(isArray(titles)){
             if(count>expected){
@@ -631,30 +707,20 @@ function irregular_options(periodicity){
                 errortext +="<option value='"+((count*3)-2)+"'>"+titles[j-1]+"<\/option>\n";
 // alert("value: "+((count*3)-2)+" title: "+titles[j-1]);
             } else {
-                errortext +="<option value='"+count+"'>"+titles[j-1]+"<\/option>\n";
+                errortext += "<option value='" + count ;
+				if(irregular_issues.irregular(j)) {
+					errortext += "' selected='selected" ;
+				}
+				errortext += "'>"+titles[j-1]+"<\/option>\n";
             }
             count++;
-        } else {
+        } else { 
             errortext +="<option value='"+j+"'>"+titles+" "+j+"<\/option>\n";
         }
     }
     return errortext;
 }
 
-function irregular_order(){
-    var irregular = '<!-- TMPL_VAR NAME="irregularity" -->';
-    var periodicity = document.f.periodicity.value;
-    var irregarray = irregular.split(',');
-    if(periodicity ==1){
-        for(j=0;j<irregarray.length;j++){
-        document.getElementById("irregular"+irregarray[j]).checked = true; 
-        }
-    } else {
-        for(i=0;i<irregarray.length;i++){    
-            document.getElementById("irregular"+i).value = irregarray[i];
-        }
-    }
-}
 
 function display_example(expected){
     var startfrom1 = parseInt(document.f.lastvalue1.value);
@@ -668,11 +734,11 @@ function display_example(expected){
     var whenmorethan3 = parseInt(document.f.whenmorethan3.value);
     var setto2 = parseInt(document.f.setto2.value);
     var setto3 = parseInt(document.f.setto3.value);
-    var displaytext = _("Based on the information<br \/>entered the Numbering Pattern<br \/>will look like this<br \/>\n");
+    var displaytext = _("Based on the information entered, the Numbering Pattern will look like this: <br \/><ul class=\"numpattern_preview\">");
     if(startfrom3>0){
         var count=startfrom3-1;
         var count2=startfrom2;
-        for(var i=0;i<12;i++){
+        for(var i = 0 ; i < 12; i++){
             if(count>=whenmorethan3){
                 count=setto3;
                 if(count2>=whenmorethan2){
@@ -684,9 +750,9 @@ function display_example(expected){
             } else {
                 count++;
             }
-            displaytext += numberpattern.replace(/{Z}/,count)+'\n';
-            displaytext = displaytext.replace(/{Y}/,count2)+'<br \/>\n';
-            displaytext = displaytext.replace(/{X}/,startfrom1)+'<br \/>\n';
+            displaytext += '<li>' + numberpattern.replace(/{Z}/,count) + '</li>\n';
+            displaytext = displaytext.replace(/{Y}/,count2);
+            displaytext = displaytext.replace(/{X}/,startfrom1);
 
         }
     }
@@ -725,7 +791,7 @@ function display_example(expected){
             displaytext += numberpattern.replace(/{X}/,i)+'<br \/>\n';
         }
     }
-    displaytext = "<div style='padding: 5px; background-color: #CCCCCC'>"+displaytext+"<\/div>";
+   //  displaytext = "<div style='padding: 5px; background-color: #CCCCCC'>"+displaytext+"<\/div>";
     document.getElementById("displayexample").innerHTML = displaytext;
 }
 
@@ -811,23 +877,28 @@ function Check(f) {
             if(f.numbering_pattern.value == ''){
                 alert(_("Please choose a numbering pattern"));
             } else {
-                alert(_("Please check for irregularity by clicking 'Irregularity?'"));
+                alert(_("Please check for irregularity by clicking 'Test Prediction Pattern'"));
             }
         }
     } else {
         alert(_("You must choose a start date and a subscription length"));
     }
+	if(irregular_issues.numskipped < irregular_issues.skipped.length ) {
+		alert(_("You have not accounted for all missing issues."));
+	}
     return false;
 }
+
 <!-- TMPL_IF name="mod" -->
-window.onload = modify_num_pattern();
+addLoadEvent(set_num_pattern_from_template_vars);
     <!-- TMPL_IF name="hemisphere" -->
-    window.onload = hemispheres(<!-- TMPL_VAR NAME="hemisphere" -->);
+	is_hemisphere = <!-- TMPL_VAR NAME="hemisphere" --> ;
+    addLoadEvent(hemispheres);
     <!-- /TMPL_IF -->
 <!-- /TMPL_IF -->
+addLoadEvent(init_pattern);
 <!-- TMPL_IF name="irregularity" -->
-window.onload = irregularity_check();
-window.onload = irregular_order();
+addLoadEvent(irregularity_check);
 <!-- /TMPL_IF -->
 -->
 </script>
@@ -950,7 +1021,7 @@ window.onload = irregular_order();
            <label for="firstacquidate"> First issue publication date:</label>
             
                 <img src="<!-- TMPL_VAR Name="themelang" -->/lib/calendar/cal.gif" id="button2" style="cursor: pointer;" alt="Show Calendar" title="Show Calendar" />
-                <input type="text" name="firstacquidate" value="<!-- TMPL_VAR name="firstacquidate" -->" size="13" maxlength="10" id="acqui_date" style="border-width: 0px;" onchange='JavaScript:xmlhttpPost("/cgi-bin/koha/serials/serials_planning_ajax.pl"); return false;'  />
+                <input type="text" name="firstacquidate" value="<!-- TMPL_VAR name="firstacquidate" -->" size="13" maxlength="10" id="acqui_date" style="border-width: 0px;" onchange='JavaScript:update_weeks(); return false;'  />
                 <!-- both scripts for calendar must follow the input field --> 
                 <script type="text/javascript">
                     Calendar.setup({
@@ -973,7 +1044,7 @@ window.onload = irregular_order();
         <li>
             <label for="periodicity">Frequency: (*)</label>
             
-                <select name="periodicity" size="1" id="periodicity" onchange="javascript:document.getElementsByName('manualhist')[0].checked=(this.value==1); num_pattern();">
+                <select name="periodicity" size="1" id="periodicity" onchange="javascript:document.getElementsByName('manualhist')[0].checked=(this.value==1); reset_num_pattern();">
                 <option value="" selected="selected">-- please choose --</option>
                 <!-- TMPL_IF name="periodicity16" -->
                 <option value="16" selected="selected">Without periodicity</option>
@@ -1063,7 +1134,7 @@ window.onload = irregular_order();
         <li>
            <label for="numberpattern"> Numbering pattern:</label>
             
-                <select name="numbering_pattern" size="1" id="numberpattern" onchange="num_pattern()">
+                <select name="numbering_pattern" size="1" id="numberpattern" onchange="reset_num_pattern()">
                     <option value="" selected="selected">-- please choose --</option>
                     <!-- TMPL_IF name="numberpattern1" -->
                         <option value="1" selected="selected">Number</option>
@@ -1153,10 +1224,21 @@ window.onload = irregular_order();
         </li>
     <li><label for="numberingmethod">Numbering formula:</label> <input type="text" name="numberingmethod" id="numberingmethod" value="<!-- TMPL_VAR name="numberingmethod" -->" />
     </li>
-    <li>
-           <div id="basetable" style="display: none;">
+    </ol>
+	</fieldset>
+</div>
+	<fieldset class="action">
+	<input type="button" class="action_test" value="Test Prediction Pattern" onclick="javascript:irregularity_check()" />
+	<input type="button" class="action_reset" value="Reset Pattern" onclick="javascript:reset_pattern()" />
+    <input type="button" class="action_save"  value="Save subscription" onclick="Check(this.form)" accesskey="w" />
+	</fieldset>
+    <fieldset class="action">
+    <input type="button" class="action_advanced" value="Show/Hide Advanced Pattern" onclick="javascript:display_table()" />
+    </fieldset>
+           <div id="basetable"  style="display: none;">
             <table class="small">
-                <tr>
+                <tr><th colspan="4">Advanced Prediction Pattern</th></tr>
+				<tr>
                     <th>&nbsp;</th>
                     <th>X</th>
                     <th>Y</th>
@@ -1212,12 +1294,7 @@ window.onload = irregular_order();
                 </tr>
             </table>
         </div>
-        </li>
-    </ol>
-	</fieldset>
-</div>
-	<fieldset class="action">
-    <input type="button" value="Save subscription" onclick="Check(this.form)" accesskey="w" /></fieldset>
+
 </div>
 
 </form>
@@ -1230,7 +1307,7 @@ window.onload = irregular_order();
         <input type="hidden" name="op" value="modsubscription" />
         <input type="hidden" name="subscriptionid" value="<!-- TMPL_VAR name="subscriptionid" -->" />
         <input type="hidden" name="history_only" value="1" />
-        <p>Hint : you can update the serial history manually. This can be useful for an old subscription or to clean the existing history. Modify those fields with care, as future serial recieve will continue to update them automatically.</p>
+        <p>Hint : you can update the serial history manually. This can be useful for an old subscription or to clean the existing history. Modify these fields with care, as future serial receive will continue to update them automatically.</p>
         <table>
             <tr>
             <td>Subscription start date</td>
diff --git a/koha-tmpl/intranet-tmpl/prog/img/ajax-loader.gif b/koha-tmpl/intranet-tmpl/prog/img/ajax-loader.gif
new file mode 100644
index 0000000000000000000000000000000000000000..ee6271efe743305fe6d49585f569d743f0554e2d
GIT binary patch
literal 9427
zcmb{2X;>5I+cxmYkbx{fLNXyN2~I-9fRL~W0Z~H;5Ct&-w1~*Af<;6H#n!fALP8cG
zVNqEG*;L%Y6{#X1Dk>^iYpG&IuoaiK+S=AGPx}sF+qds~JjY}I$HP}S{P5$v&bhC9
zCVXL-C?Ev^5a34u_~Va1e5zOf^4qUpeDl at AZzq2Huiq|@eOi6(SmVu(fiH)D`sL^6
zKfKs|^YqSZ?Z<{MK7I9V at x}eQXLi;M9DnltH?MyFamUrR6Q5t|`r=075lu>)cJ;C1
zq6>S*UOf5nm)Dh7j-I}E<>z02xixV=wN0nHu=krEzia=jue|^8)kmM*eLkLWSe<mV
z=<NN0p~oY4o{ql!>D9>BkCq=odq;<^jNdtP at 9KB2f6({s+xN-22j4t?{N2~}H%<jN
z<Sf{|e#yS~=htVybFkpZo!+m$d;aL<({F$L{`?m=kA8OH!0qz|=NnpvI`@Clwf2N@
z{ppI09osWclxCkQ-+SxqXHOqyoh(~(yyWv|V>iCKyP>1<(5Kzu&3VzSAH*M0NgFpw
z8a7-SyZzqT+RdF+r|$NbUOKS#<C+h<>e24TZRhH?d|Vy1_r1tHTNkx#iQWIv?I&N{
z{OX>jx25mlt-_w>We1d<BiF*3az8r1dtu9F<K=^8mk;$k7*w=w+jad!db^=%@JvwM
zI^dr_oIl7>p|LR`!SYaVfu|V``&Z8I4j~&?rR1(kN48|<W*{kRQ}VOcr=$xqvsbSN
zI6vcw5cXT{lmE};9}%$lLkXa&LbawytJ52bOG=HVvhqT5fS+##N?~$T(44 at zv}zL7
zj%$m;+`04S)SJjQ_ICEx0PJvh0ZR54gQXzN!QR!*8}JL7&j%#@A%T(Z=-}qr4B%NP
zeTWa6Sk4YyAB{xF7nSp7d-Z78RYnrbhDv at hfaaDoUL|#BD`3Lm30#MqhG2-|636G_
zj;!E<1iK9Bpv2}xhOG at lHrm}=L`PsocQB&um6G6=f!jAjEu?T_pj$WYq9Ic)J7h+C
zvf>006%X{`q8 at X>p~Pfb;OJN3u$VpX#X<=+7M9{(lepj7K#(e1N(K#kk-dCsXQu}*
z867#3|NYbZ*S16>Z-Z1sp&Lt?ZgDFr3?!Rn%M+k#71_%}#g42~kQxERYT+Uu6mE at I
zAZUY;7q%!;evA~mEPiDJ#?@I2g-0w_M8*J1-w8^@xb6vzWS0oJ0|AZR1JLjB;R>-+
z#3JStSEIzs`&uE}w*m<~w6;&EAag at ahwQXdTEjD&Mv+FVS<!Hr{Bp33mSZc4?`V|W
zJ5{Pz@;s4o9S{oTPzl@(WlHprL+6B2E4dyHp$+*%hpD>v#NPAdv-UFtfavyrrT3-W
zGkg?o at xoWv)Y{xElo7aX9<D%oaAFiqG;!$^qGIG|78OZkH#Fq4U);ZT`sjo6N(%^l
z8z~JhY5{C4p#`n7+-_h;1g&0#)T$)je3kFwpf!=CW&j~1r-h*G*n{#WfW2Lil#-sz
zY)e0w0Fh`uVyG07rlzf2=?*NIpD_dQOZDIjj6BQK1REIuayaPH7(Tz!NGII#(ulEi
zH4A3N+_21RXeagw!f?zoQ+w*gN>vdFuosIHxwavKLsdP&HpF~>pxb*Jn;sEA)D<e>
zYHcq73u|26lqxaR;FC0O)6g?2wCg6?ZTXJ2a6VFNtK5b3Hy|veKtLl^Gz{U+#r8Ts
z?Z2pG^6)mwBDfoM493Gj`Ksp)g at JTjq;eK7yAMkE8jBMqb*=y#%Kv%nG`ywOm=hsx
ze)x6+DJ?F0CFTVA2dm)pxQs=lW^{HEbp^^!IB3%ZP}oMuFUip{3qZmShCw8&Y#Wi0
z>6G;DIuF3w-flf0i=UShV-zfKqNZ8{kVhuEZr-YJ-|b}Sm$NkCanhT$FeekTBm&%{
z(KuWw=ncL^FTyZ^&H%iXz|2t59ku+p*oFur0q!*bt%V#aS)`BU0hdc0>9&*e*B at Ga
zl-4<sr|n&w6f8e0TCVLQ!(zV=@b<^!q^y}Ad2?N3>xUfAMb{jXrgQ@|l%R|xB^T`1
z8u1P1ymrJ!Nn)w$v-4t;aYNH%_s;sa8as`|HiT^~ktw*L7}C26`wd8KAwp8IQyuJ+
z_cj9*Y1CS@&cQ9M2_Or$6A2bpL;#^W*f|3vn(HE#afzR$l at lNEkt;%gr5l$AE-<p0
zQ2|b~0VsM2>ik6 at bGu+Xz+K~)GdBgUW%Gqah~-(Eu>%U6ik>~v-99yTKe}!#XyTF_
z^s=~IzoD_vP>G*kUt><M3=HP^xn~SQdqUvY`EJy{8Am0&#0KEl!nDwe3wT0rio&It
z$Vf^a*s6-|*ZZ?w5l>|y0y4Hf?Zinl_J9`9{r*6{djud;P=i*q0=m{L!uZv?h|}M+
zir*?hg4tOlW64aLSfA|%#KmT at Ggzx*Z`z%TpooyNeMuG{CFR=4-)$l%Wh<gf>4^(u
znE+^IvoIGRC9PVsF{*2}ZD<r8$V;}#0v2q(u`I6?iCJ&$w*r8K?O at pIjX7bk5nj7~
z<~eovi!fd-5{$B%UR**=iW0G$Kd8myKr9^@L#VhY6qaX5gF|d|B`nYEN3Ak~ER2#p
zqHS#jtU<BBJ5}4Jz%jk86ji79i>a_M!H(N*-M`o9upFgAz~!*|Qm2e<LuC^s2A4Uc
z5AbL=@DV`B at FgYpSRs+KhwwRR&l^t8fpL+8`JP7_LEfpm)1CAI_5^&JQG?9PjHOx5
z>%1!sh~>I83#dj%+ESl{IeCY`MjoHCzb+vc1b9xa+2N(6wO-5$FnnDC4InW*Gd8E4
zDrR#I`iKB;=dfyP*MXn~MwYwzYz_eVS3u6$n^!p=E=BO}D_EM)cUHa2tATjrB7VZ_
zQAw;bRrK168?5Xu45fDuUrA0bLz#T<Tk^t31B at B#<R!hW3LBgsF>WOJ#OS4xB0Xso
z0i*>zwOUdKR^DLHqRH}Bv{8x0V&8LD3G_Z6mc8P)tXIgmp(K3$3z&8?BM9_|Y5i5O
zI0Ct;wC)VvEa&e+ZCuh}kVzvR&6|9}oj&?@aVkPUV`*^c0&zw03`Ww7YCX7sLA5Lg
zKw=hFKN4RQlr~$GOSUNNWyato91#FnGv<UtNI<@uYwBJDDCB#@@Bq%1To1sf!!^#@
zDCS3V{84%plxy$mnRKueVU3YBQrG!ZN%i5Q8g}07gl%i_sp$ML34vPGmLak8cSv^!
zaaNH2L+y7H!&TA(uHIJY7I>>UolZ5_j&$_Mhs-Fkt%Y`k1IwF1!58*T;)gK>2tSeF
zE(IO-F62p074rz;{q;ttxNR>FOq48 at NUYW2qvmq}yt~s<VvF)-uz#Pmcf_VayupHU
z&(=+xdT`|9$#a0gpZYdQGMb7=nH*A?Ax38Dy;BE;)GUBd(A}GDV($PzrYyh at 1O(wW
zi)R|?LNf^f<;k{mAW^aMNb0d-$e+&_!hmoAK?sDbTpa1(V-(-uQ&8R*M7x{MXvKVP
z3N(q4`A#oPkYGr|UXkZpS1gX4xF{n`PTIT-RROU!6f{@<y0c%yn!T)2DTg;SaUGXS
z)+VIC2$O_T`m}N1QAZm=xH6#k^bIQX!B6N}AL$rGLds;yxkQP*b&kk!Ue1qWNjDu^
z3zf$&mv&oWT`e-3oHSN5R}Bq5f85Y6m?d(aI3~x at VoCQV`{>C1GjI1yGn%wKa#=Ae
z#K(WT-koV3q5_3$NhSnAp}LtfAi!6;E^UU9htZ&!OeqrpXND!Lv^rA4nvxOc*|Grh
zV=E)NN<~*N7+)S5m9{cAU{5L1FZ9(g(;q#<U<Nd#Su0-D>Oo4d<dUwCig>2jm>e8p
zc|VumG%0a+9UMB-_Hm7~y=e?(Rb(m$zgkk$o+d6MgZ?D9_u4olx=R#(!Y8&tbv^vM
zKqS>my5=l$6>Frj(Fn)JlPC7$Idrj~tF>JGo+*+Itnkkz4efYlL#TWJP-W)QLDW$M
zjInZ6&ykbA&|P at X0*_-*vS(9+melpuP6$|5ELq~t+pfoFdb_J2mbeUoRQ{Rf-Y9#$
zlZ%H at BJ`J_bt_^3XtoRWU2EgCk;KEC4y<K#r>-!HE at DO`U(`D3-7p!+i1Z2XsaH5|
z at Ox~81pOMseb!41i7XcXsFmRHHLhcxMT=-Isd668vpfFdkbvlxZi!8=s}#?2>m1*k
z7EaJ7P&+uDHr9kimGbJ4(fUS^otl{b>c|BSHAFL97>j7Vm>O2bkhl4SGwlvOidJc^
zcVc at X^Z2W+0bRVG+OE5~h`^&d&%yO;QCJCiyH(~E9jIEKD1a>%^Ec1V#+tkMO>@_R
zZ`IsbprEo6*dI at -)MEgwLZre3H39fKAxa`jnboDf{+QCfXfpuv4iB*48-rV6Kw`!h
z0MXc!-)eWMsE$uYk)wG7E{S`JkzK+I>a`ZR*6cD!@KB8`;XJM}fIN}tnO1<u(+y&a
zwDeAK_x6d{Sq}PAPhGEEWf5wwKq4z=sX`4Dx&p~j?QSAE^(%2P50?i?pupVxPx<V#
z5-_zd|4FO3joDA~YU5s(MTPTPw&FQrc@;bUP+P$(fFYp?vv-9wne8`|A)@luPl*Ho
zvKrC86s;XBIihlc=Mj at 7v*NR?$qeMB&yo9+owNrgyj>+>>l;Zd1}k)8KA%#p!gd|}
zE*1)z#o$fsNuCydFuKIY+S=DB+9hOTJZ3NuJli^SDYmxl!gxRgb+-)-&odz`zOYXn
zy>u&+gaJKJgZ^e;?$$vP3gx^Wo&=(AowF|0YT3+kwd9?q8R?z5Ix44#i<;XoG9_hW
z?Dz566EUwwORJ0l8Rwc?x>q)D`r-Dv&&zKq3XuCd7*{WhU)5+!WTJZnkPbL6yD{tq
zJP8)A<Ry;0UfQ=vF1+hquDv)ZLu<?NT9rLmazJGp`Tl2?(4n$IlF6hyb@<-t9Q?Q+
z3I8u(L>P?d|AJBRSn%I2Vs~?niT;M=0FUFHmsM3td85L*=+j{YF_Z&pQQi#VAl5$j
zG@{^#yS0!nkJqo8G9gPXoLppLeLLS5{$RLmZ%Huk_Z?8=qvU}qPwRF3 at -5BvTv~Y7
zw(2yqqD~36#iscl*~uZT7gTMFMPz<VO=(Au_v25UY1iCQ0$)j{_|Bi;=eM}85YvQR
zZ8&A2g>iOVR1g?EYEF#f2bo+OMkA{CC31DNTr;TbFp!bo-IU%vYb6ubD#vnuh{4gw
zVIPi6t!$>Z9WpFIAe{_NL6NIfRg(cy!Gbb29*a*i79TpcYyHIppWWplG?91JVaYkh
z_gE`7L6}juTH+DIZ^X*yjz+R`w_zW9L^}l}nH?JCH{-DGDBoA_Wnsl&IIV#1U)wp+
zyHjP6#*g08T*u`|c_U}W0Y-oX@!q_t{hG<Z$O_y{mR#p at 9PNF5JwMm>c at -^L<T{Fm
zLiJ```+5D_DO!>*?%?Zg6ldHSjw~yqzLH!l^@7CtcKVb;WriyL^>DCx1(h&A`nT7w
z#`LA!y~BmSNgv9#?_y3LvIQ+~b;zE&9f5ef3OyDga+MZe%Tlq~Wh53}f;LRa2zMGO
zwZc79V<o9QY$Bhp13={H`2)sDmb2<E>=FbL3~FHC`eG7%*)WB|j+s4UcC_IT|DMi$
zX{b!L;KlCquZv<Vf4B5Y;M2A=k97OXvZyJS51Rl8+;N7#N*iWrPvSBNW0A>?GZu4^
z;mg{-qZ`5a4v-UO2D@$L`yKc)YlU?{oF$NhNJ40Cvz-c%oN*e&2pqL at 1tgN2JQtF<
zoTS7Tx1_XmzCgHoXvw<r-|eJ5K-dy`>2Idb+os1W>|c!66b$_ at 7zFtnh9WfcHDNH5
zh2syOsl@^`B?F>0wbL}`)RNjBtY~g&;N$fM5P^y(X&wmI65R)Mhxqrk{&^ux<}Aav
zFN>mWf44QaRgC70?`pC(Uwu}$;mQgQZmi}^_bRQ%a?T!vK>)9-Il{ENu|sz-m`z|k
zfCI)N at PZ8o`1!HqyYBcP>FBTGnP8R3>kUlMva4BqfNP}f4&Vmr`S_4qeq$LUjkmrm
z*=MsXztZkD=XzyzmCJCB@=hbxJJ9&m?f;^YA)cf{Px)I0nv~fIOh$$x^k<uD_`>6p
zFo2|%Px(`Ze*Qoy#5#3WJ#}+7bqK^l1MQiDF+gH7GjYEjlhIL at cw}bY`R4pfZLs(6
z-bY|e=E5#6)gx+`3GA)q<e1v7- at P=p at Pam2E+eK)fOyIbm%xqfPx at JD9J$@x!M)~n
z6sBY5d#a0MVAlK>c7P`@s at 7%`EeL!mu{6WM<--Ljy>Z(;7knh9$t^8x=gz;2G>`Vl
zYVE3QTe}Y|HK8S5&I)<z<?HMsHB~U$SZ<!(Xu*4qoq~4C-)ggeGgpEsB;NE~fm2A+
zb44-3Ba=vf#fOX`^#Cm>W`qsaDJ(pbw~Ld5#m0>GluV5kB>wnQY^X+b7tVja`~271
zZ);x`!7TqrdMH?E-tsK$MLZR!5jS)cP@|7?<36-2 at 9Dl|3z-TL&*NrjyRWb~V1LeI
zLanA`b=(u&8gnJrzLEzdCtF_$@^IR7Wz at x}w2p`#J(D(YjYXjii at 7hwRHBQkberp^
zJ*aMOwCB8%`0-k$;}Op at 8Rc9R5mg6CKTz!$L}}{@o~I^H(hdKjbR_ at 4fy)2t9EuqW
z{M)9ZmcQRf?!unqEdagiEQWLPTH&8K>Pei-f99vN&u|dK>8(BWwCiiFr0b=A8b^c|
z0nfsyGNS!45|Mz8*ESOuzSr-X!Y@=YGHHPaj)hq43IOmyXE+&}655P-v3H|$L^T7@
z`r2Orl at 546?Y8_Et!fP%h0nF4uhP*0=;<gA#Fv|LB|D^z8<nuuV}Yfz8=j*tCq2mC
z+7x{085>o9lYdyXgQ}zC5l;Q@;gJ1<|3jR*H#la;^v|Yr3~zJ at Ijx@^cC at yb^@zdU
z;Cc%`b9sK8XKskO0eRrSE^yu#2?0>z2{0%1;tp45_EuBcrR!86vEz0=DAubPS+|w>
zukfULE(jlblG=jrcTHTjYxrjw!3z-d=IS;TRw|jq11TGA_C-_$*?&Al9se|}M-qP4
zLFD)~irbrIj@=27k+)n=u_rn7-{uCpjBYXhHB(q_&Q9m%7`>|->z$KVRc~T*6T5+~
zFFy8HZ1!U^_jJ52|1Y#=Yl&WUItkXv9x01mPSYlD2MHgCvJ0P&hY>8wIEeL`4%k)3
z^vPz~H8Gyq=sZ^)d2Iq30Nh$YUT8wcdYmmd_gmv|qY^8k8GsLHFYk6HZXRjrcNQ1u
z=D1|+edKzztdgM6k2ERLtk at +p3jhUh<)SFq7dccNQpn+uHr?6Qp1i|kc5<!NUF#-9
zr3SD&#jmX1{!sY8D0If3j`ecqPQ4^~(Hxq;p4Wvp at LcE3n>%CTWid0-b<QwpQb^Vv
z!cNE^U!8%f?Jyyc1+m|5hTC at xw1|7hnX_(N3$@Gw2uKB#mhV5pUy||jfUGk49!5Ca
z<WMkL&JBSrAhBo0=%d00;w`73R8z33LJRYJ`{^-MNMFM57d3W2turTRJb8F7W!NK)
zXfGP&t%<K-S+t(3i`bd{FDm&T>8S at u!EX*aJiHkCyL3+1@;^3`&taw04$#k?$I^4+
zAL%KRw3b{do^9v(Zk-MipSh=(*v<WRy`Fat<FQ}9Jjdtxxh6wMjkZd4SdL at iQ8=ij
z8|qMKoCZ9BF{)Z^$T?wy`x52QZY9s7fjA1?ZE5^U5ReWxySZ%7 at dCuxjhqXGufQ>a
z)X`;e=Kvp3%F67c@$>Ru_O5WAwU|rYFS`&{MsYXKlLPxNz;hCCx%}upgM+pZzm1=Y
zgW at G3D*-R=r)7f|I`hB3^B<?@KNk{A3Wad(oF|3M at WUEO{<54LCT7&6mnc at RUbX)9
zkHx9E3&#rBGch4M-xj4gCS;o+Lq;(ny~}{2S6zY$Da9KV1*B?GB7R7Y5M;vjB`kLi
zeRZJ&5S`lc`OKEj at Zrc;g9-FzrIHhJTW<DZ^deBK(H3TYzc;nWK4kBRGXzE#Q9X(a
zIy`wj%d}{mWq_CE*9hcK`ml5Ip|vvPZLc-{zxw%qdAvRTe56m+PXP7AbcC=163dg8
z3`{qW$ogUt+ZS6UcoMLrU(ZW&u;)6qPBER<C2rmv6tv3vaaWVhXM_MxgqBg04$;aQ
zKEYotH{bci!~8wTikUQ<a1OV}1s at Osw*<uJAW<cFjV#s-)S06q$BElEEkGfHbdAh;
zFD?B7i?{^9Z}lF%)3f-V9nsYGFhWfSNNo)lY29X98SLvhS2eqUIVXO{iOd%kRAM`R
zOXGods%e(cN_uLK>Ez+bZQbqP9Gd?cF%=uz)oWSxK<45F(~A~1WsSy7^IXlR&pjX4
z^3NM-bLWLoQ1Ar3=R&Dy;oMbAreCaz7G#~k9`8oTcL!MVK<DnbIC5dqbe1}`NLbvj
zo}My24?Wj=nxhI<S;Iu4xm01WO7AaDp;8n$)-ka=$dPJAF}eg^et9-ky~ZdLRd3p-
z=Fo;6<~PaJHwuD?_<}(K5Z-1i8Lkp3M=x6eo)#1F9hp7OTnjs71F>QI0Q5t?Uv$Mj
zZH*kt&T=3$h!=*@%XN2KtazM6ycOKxk-mBAKEvrh6M`kvLLQ4<L#I~JsUC7#9=ObW
zYO$CSvdoE}OT&bKDWce%HPbIs%jq*$3``SAd`I<9w3(aIBW#=+r-H=RA#)T82Zwwu
zpKJ4+!Nuj)@MA?GWu{~?ywGcC?{$LX_f$qVhup`d3KGOVdD^fV$7gtj-IIQ`I%q*Q
zc46o-=1g5*8vC<SLM0f19K7RWg1W*jF*OJfZxVME)dn&Sr#|cjmepnnIxJ3<q4cbD
zke`!Q(bMi~Pel4sJ^{<s*8H5&LB{lr&&q$ZU;G^+-#>}u_DlaJvRJ)rmG|F7;X!Mb
z1^h`wPY>FhH=QDSqW3frESMsSwn$Cc5HLPPMACtbl`Cx`A_N$brM7Es8qI~(B$EY)
zn%Px(4t4hgNuiv6uw4c~4(v$Rr!RU(Iix`+h4!KPx>*SCSoOBtv5-2~dw_D309-yE
z&Rcdn;AMKk0FJ}X?tIh_Iof9?f*Gqe_LLwX^7%7-LwCvIqxi$MaQY`;nHt7dd)iK}
zq}b*a`Y&WCOhH8<nO>N*IGR at l#4OC8iNbD+qFIfM?02%I0BoO*?O>BBGDdl3Z_Y3W
zqSj5WVf=wBrIZxUj35R|KL^kU_%}-ZhvwT(D^X at JL9CHX-@wC$?{&iPO;l>sx06N$
zzKn<5tnpjdXP45f?ejx^H*KpHmBlr!8bDme<PZ*=#q4CeDbtwRP%uz#XSb*fWJ#zB
z>Jx%gi(evOa1~MG&CHnkhG9I=w-6AW8p^eoOc=HVS>(!3End?Mn#s=skWw5LOwJx{
zy)5ei5BgU<q)9i^sH at 48cn6y2!<sj*FkIjMj7SdkAyuFfCZ{lWZeVydXfgG*NB-P-
zF4evX_O5P|AA1~<PAgeD*vCzM>k&8kt;Y>``dbegil?CT8~j1zKfm>uV#2=lIA8pe
zUSb<Sqs at FkoqEf>R~q6F`(m_53WoAJaSB*f5NdFLwJ`P(T4H7~BPv%O3xo@)#V}u7
zommDjohb^!>sG*G>SbX;HkX%u!-W9$(8B#|iV33kImXAzvg`H1AX<U<TQi?IBDdJD
oG^l`V5!suc6w%B-bjp`ET5$Jdj>Y6F)pxKH(A>#SV5WZl4+vK+SO5S3

literal 0
HcmV?d00001

diff --git a/serials/subscription-add.pl b/serials/subscription-add.pl
index a4b40ea..391fb74 100755
--- a/serials/subscription-add.pl
+++ b/serials/subscription-add.pl
@@ -178,7 +178,7 @@ if ($op eq 'addsubscription') {
     my $firstacquidate = $query->param('firstacquidate');    
     my $periodicity = $query->param('periodicity');
     my $dow = $query->param('dow');
-    my @irregularity = $query->param('irregular');
+    my @irregularity = $query->param('irregularity_select');
     my $numberlength = 0;
     my $weeklength = 0;
     my $monthlength = 0;
-- 
1.5.5.GIT




More information about the Koha-patches mailing list