From 13ba2592254c861dafa337121902168d83f610bd Mon Sep 17 00:00:00 2001 From: Winfried Donkers Date: Fri, 9 Sep 2016 13:18:42 +0200 Subject: tdf#101541 function WORKDAY.INTL not working properly When holidays are adjacent to weekend days, wrong results occurred. Change-Id: I9ec86e00f1a62ea941ff70617a1b448601aff9cc Reviewed-on: https://gerrit.libreoffice.org/28771 Reviewed-by: Eike Rathke Tested-by: Eike Rathke (cherry picked from commit 5e9d5eeb8a33fdcc500377d9eace40b5f5a7f750) Reviewed-on: https://gerrit.libreoffice.org/28970 Tested-by: Jenkins --- sc/source/core/tool/interpr2.cxx | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx index 773eabae412f..38523e5e7e52 100644 --- a/sc/source/core/tool/interpr2.cxx +++ b/sc/source/core/tool/interpr2.cxx @@ -538,14 +538,16 @@ void ScInterpreter::ScWorkday_MS() size_t nRef = 0; while ( nDays ) { - while ( nRef < nMax && nSortArray.at( nRef ) < nDate ) - nRef++; - if ( !( nRef < nMax && nSortArray.at( nRef ) == nDate ) || nRef >= nMax ) - nDays--; - do + { ++nDate; + } while ( bWeekendMask[ GetDayOfWeek( nDate ) ] ); //jump over weekend day(s) + + while ( nRef < nMax && nSortArray.at( nRef ) < nDate ) + nRef++; + if ( !( nRef < nMax && nSortArray.at( nRef ) == nDate ) || nRef >= nMax ) + nDays--; } } else @@ -553,14 +555,16 @@ void ScInterpreter::ScWorkday_MS() sal_Int16 nRef = nMax - 1; while ( nDays ) { + do + { + --nDate; + } + while ( bWeekendMask[ GetDayOfWeek( nDate ) ] ); //jump over weekend day(s) + while ( nRef >= 0 && nSortArray.at( nRef ) > nDate ) nRef--; if ( !( nRef >= 0 && nSortArray.at( nRef ) == nDate ) || nRef < 0 ) nDays++; - - do - --nDate; - while ( bWeekendMask[ GetDayOfWeek( nDate ) ] ); //jump over weekend day(s) } } PushDouble( ( double ) ( nDate - nNullDate ) ); -- cgit v1.2.3