summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWinfried Donkers <winfrieddonkers@libreoffice.org>2016-09-09 13:18:42 +0200
committerEike Rathke <erack@redhat.com>2016-09-16 19:36:21 +0000
commit5e9d5eeb8a33fdcc500377d9eace40b5f5a7f750 (patch)
treeabcfc9f38d576217f45fcd18e811ad756183cc2d
parentcfde267f21b047bc19fe77dbd7ce52bdd7a1141d (diff)
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 <erack@redhat.com> Tested-by: Eike Rathke <erack@redhat.com>
-rw-r--r--sc/source/core/tool/interpr2.cxx30
1 files changed, 13 insertions, 17 deletions
diff --git a/sc/source/core/tool/interpr2.cxx b/sc/source/core/tool/interpr2.cxx
index e214d395dcf2..0d02066482ed 100644
--- a/sc/source/core/tool/interpr2.cxx
+++ b/sc/source/core/tool/interpr2.cxx
@@ -596,41 +596,37 @@ void ScInterpreter::ScWorkday_MS()
if ( nDays > 0 )
{
size_t nRef = 0;
- //skip holidays before/on start date
- while ( nRef < nMax && nSortArray.at( nRef ) <= nDate )
- nRef++;
-
while ( 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--;
-
- do
- ++nDate;
- while ( bWeekendMask[ GetDayOfWeek( nDate ) ] ); //jump over weekend day(s)
+ nDays--;
}
}
else
{
sal_Int16 nRef = nMax - 1;
- //skip holidays after/on start date
- while ( nRef >= 0 && nSortArray.at( nRef ) >= nDate )
- nRef--;
-
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 ) );