[Koha-patches] [PATCH] Bug 2365: Serials prediction errors: Roll-overs occur with wrong issue in some cases.
Ryan Higgins
rch at liblime.com
Wed Nov 19 16:55:38 CET 2008
See bugzilla for details.
---
.../prog/en/modules/serials/subscription-add.tmpl | 45 +++++++++++++-------
1 files changed, 30 insertions(+), 15 deletions(-)
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 ab49238..d4ab0f7 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
@@ -806,30 +806,45 @@ function moreoptionsupdate(inputfield,rollover){
var fieldnumber = fieldname.slice(-5,-4);
basefield.value = inputfield.value;
- if(basefield.name.slice(0,-1) == 'lastvalue') {
- // lastvalue seems to mean 'begins with', tracking the first received issue so
- // we can recreate the whole historeven after receiving. innerloop is the var that
- // actually tracks which issue we're on, though.
- document.getElementById('innerloop'+fieldnumber).value = inputfield.value;
- }
var patternchoice = document.getElementById("numberpattern").value;
switch(patternchoice){
case "2":
case "4":
case "5":
case "8": // Year, Number. -- Why not just use Vol, Number withvol==year??
- if (document.f.lastvalue2temp.value>0){document.f.innerloop1.value = document.f.lastvalue2temp.value - 1;}
+ // FIXME: this my conflict with innerloop calc below.
+ if (document.f.lastvalue2temp.value > 0){document.f.innerloop1.value = document.f.lastvalue2temp.value - 1;}
break;
}
- if(rollover){
+ if(basefield.name.slice(0,-1) == 'lastvalue' || 'whenmorethan' ) {
+ // The enumeration string is held in a positional numeral notation with three positions, X,Y,Z.
+ // The last values lastvalue1, lastvalue2,lastvalue3 should match the last received serial's X,Y,Z enumeration.
+ // make array indexes start with 1 for consistency with variable names.
+ var innerloop = new Array( undefined, document.getElementById('innerloop1'), document.getElementById('innerloop2'), document.getElementById('innerloop3') );
+ var lastvalue = new Array( undefined, document.getElementById('lastvalue1').value *1 , document.getElementById('lastvalue2').value *1 , document.getElementById('lastvalue3').value *1 );
+ var every = new Array( undefined, document.getElementById('every1').value *1 , document.getElementById('every2').value *1 , document.getElementById('every3').value *1 );
+ var add = new Array( undefined, document.getElementById('add1').value *1 , document.getElementById('add2').value *1 , document.getElementById('add3').value *1 );
+ var whenmorethan = new Array( undefined, document.getElementById('whenmorethan1').value *1 , document.getElementById('whenmorethan2').value *1 , document.getElementById('whenmorethan3').value *1 );
+
+ if(rollover){
// calculate rollover for higher level of periodicity.
- // if there are two levels of periodicity, (e.g. vol{X},num{Y},issue{Z}, then every1=every2*whenmorethan2
- // otherwise, every2 == 1.
- var addN = (document.getElementById('add'+fieldnumber)) ? document.getElementById('add'+fieldnumber).value : 1 ;
- var everyN = (document.getElementById('every'+fieldnumber)) ? document.getElementById('every'+fieldnumber).value : 1 ;
- document.getElementById('every'+(fieldnumber-1)).value = basefield.value * everyN / addN ;
- }
- //FIXME : add checks for innerloop || lastvalue > rollover
+ // if there are two levels of periodicity, (e.g. vol{X},num{Y},issue{Z}, then every1=every2*whenmorethan2 / add2 .
+ for(var N=3;N>1;N--){
+ if( add[N] > 0){
+ var addN = (add[N]) ? add[N] : 1 ;
+ var everyN = (document.getElementById('every'+N)) ? document.getElementById('every'+N).value : 1 ;
+ document.getElementById('every'+(N-1)).value = whenmorethan[N] * everyN / addN ;
+ }
+ }
+ }
+ innerloop[3].value = ( every[3] > 1 ) ? lastvalue[3] % every[3] : 0 ;
+ innerloop[2].value = ( every[2] > 1 ) ? lastvalue[3] - 1 : 0 ;
+ innerloop[1].value = ( every[1] > 1 ) ?
+ ( whenmorethan[3] > 0 ) ? (lastvalue[2] - 1) * every[2] + 1* innerloop[2].value
+ : lastvalue[2] - 1
+ : 0 ;
+ }
+ //FIXME : add checks for innerloop || lastvalue .gt. rollover
}
--
1.5.6.2
More information about the Koha-patches
mailing list