From 235725b528aaf6eadbbe8811dbc07564852b6f52 Mon Sep 17 00:00:00 2001 From: Ahmad Hadeed Date: Mon, 5 Apr 2021 19:57:33 +0300 Subject: [PATCH 1/6] Add support for Friday as a holiday and some comment alignment fixes --- htdocs/core/lib/date.lib.php | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index ecf1cf999de..9e921f0f42a 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -658,20 +658,21 @@ function getGMTEasterDatetime($year) } /** - * Return the number of non working days including saturday and sunday (or not) between 2 dates in timestamp. + * Return the number of non working days including saturday and sunday (or not) between 2 dates in timestamp. * Dates must be UTC with hour, min, sec to 0. - * Called by function num_open_day() + * Called by function num_open_day() * - * @param int $timestampStart Timestamp start (UTC with hour, min, sec = 0) - * @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0) - * @param string $country_code Country code - * @param int $lastday Last day is included, 0: no, 1:yes - * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) - * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) - * @return int|string Number of non working days or error message string if error + * @param int $timestampStart Timestamp start (UTC with hour, min, sec = 0) + * @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0) + * @param string $country_code Country code + * @param int $lastday Last day is included, 0: no, 1:yes + * @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes) + * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) + * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) + * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */ -function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1) +function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includefriday = -1, $includesaturday = -1, $includesunday = -1) { global $db, $conf, $mysoc; @@ -685,7 +686,9 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', if (empty($country_code)) { $country_code = $mysoc->country_code; } - + if ($includefriday < 0) { + $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 1); + } if ($includesaturday < 0) { $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); } @@ -838,15 +841,20 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', // If we have to include saturday and sunday if (!$ferie) { - if ($includesaturday || $includesunday) { + if ($includefriday || $includesaturday || $includesunday) { $jour_julien = unixtojd($timestampStart); $jour_semaine = jddayofweek($jour_julien, 0); - if ($includesaturday) { //Saturday (6) and Sunday (0) + if ($includefriday) { //Friday (5), Saturday (6) and Sunday (0) + if ($jour_semaine == 5) { + $ferie = true; + } + } + if ($includesaturday) { //Friday (5), Saturday (6) and Sunday (0) if ($jour_semaine == 6) { $ferie = true; } } - if ($includesunday) { //Saturday (6) and Sunday (0) + if ($includesunday) { //Friday (5), Saturday (6) and Sunday (0) if ($jour_semaine == 0) { $ferie = true; } From caa2facd47a52283be710f2abf9a4f47327afd9c Mon Sep 17 00:00:00 2001 From: stickler-ci Date: Mon, 5 Apr 2021 17:09:25 +0000 Subject: [PATCH 2/6] Fixing style errors. --- htdocs/core/lib/date.lib.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 9e921f0f42a..56f456e7c51 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -687,8 +687,8 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $country_code = $mysoc->country_code; } if ($includefriday < 0) { - $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 1); - } + $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 1); + } if ($includesaturday < 0) { $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); } @@ -845,10 +845,10 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $jour_julien = unixtojd($timestampStart); $jour_semaine = jddayofweek($jour_julien, 0); if ($includefriday) { //Friday (5), Saturday (6) and Sunday (0) - if ($jour_semaine == 5) { - $ferie = true; - } - } + if ($jour_semaine == 5) { + $ferie = true; + } + } if ($includesaturday) { //Friday (5), Saturday (6) and Sunday (0) if ($jour_semaine == 6) { $ferie = true; From f2f2aed6cd715377cacd676f97e4711ff5a866ce Mon Sep 17 00:00:00 2001 From: Ahmad Hadeed Date: Mon, 5 Apr 2021 22:05:22 +0300 Subject: [PATCH 3/6] Fix 3 weekend holiday behavior after adding support to Friday as a holiday. --- htdocs/core/lib/date.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 56f456e7c51..2d4bb04abb3 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -658,7 +658,7 @@ function getGMTEasterDatetime($year) } /** - * Return the number of non working days including saturday and sunday (or not) between 2 dates in timestamp. + * Return the number of non working days including Friday, Saturday and Sunday (or not) between 2 dates in timestamp. * Dates must be UTC with hour, min, sec to 0. * Called by function num_open_day() * @@ -687,7 +687,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $country_code = $mysoc->country_code; } if ($includefriday < 0) { - $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 1); + $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 0); } if ($includesaturday < 0) { $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); @@ -839,7 +839,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', } //print "ferie=".$ferie."\n"; - // If we have to include saturday and sunday + // If we have to include Friday, Saturday and Sunday if (!$ferie) { if ($includefriday || $includesaturday || $includesunday) { $jour_julien = unixtojd($timestampStart); From 937fe333f1a7745df43c872a9b6954968a0ee397 Mon Sep 17 00:00:00 2001 From: Ahmad Hadeed Date: Fri, 9 Apr 2021 20:49:39 +0300 Subject: [PATCH 4/6] Moving Friday to end of function declaration to maintain backward compatibility --- htdocs/core/lib/date.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 2d4bb04abb3..74953305de7 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -672,7 +672,7 @@ function getGMTEasterDatetime($year) * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */ -function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includefriday = -1, $includesaturday = -1, $includesunday = -1) +function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1, $includefriday = -1) { global $db, $conf, $mysoc; @@ -687,7 +687,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $country_code = $mysoc->country_code; } if ($includefriday < 0) { - $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 0); + $includefriday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_FRIDAY : 0); } if ($includesaturday < 0) { $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); From 20e51016eda824257ed18e69d14015ea03d570ed Mon Sep 17 00:00:00 2001 From: Ahmad Hadeed Date: Fri, 9 Apr 2021 21:11:37 +0300 Subject: [PATCH 5/6] fixing function description comment to satisfy 'stickler-ci' --- htdocs/core/lib/date.lib.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 74953305de7..63a6f83da4a 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -666,10 +666,10 @@ function getGMTEasterDatetime($year) * @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0) * @param string $country_code Country code * @param int $lastday Last day is included, 0: no, 1:yes - * @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes) + * @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes) * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) - * @return int|string Number of non working days or error message string if error + * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $lastday = 0, $includesaturday = -1, $includesunday = -1, $includefriday = -1) @@ -693,7 +693,7 @@ function num_public_holiday($timestampStart, $timestampEnd, $country_code = '', $includesaturday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SATURDAY : 1); } if ($includesunday < 0) { - $includesunday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY : 1); + $includesunday = (isset($conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY) ? $conf->global->MAIN_NON_WORKING_DAYS_INCLUDE_SUNDAY : 1); } $country_id = dol_getIdFromCode($db, $country_code, 'c_country', 'code', 'rowid'); From 63f7369adb04c03bd14d4e39419a150d4fc62e9b Mon Sep 17 00:00:00 2001 From: Ahmad Hadeed Date: Fri, 9 Apr 2021 21:16:24 +0300 Subject: [PATCH 6/6] Fixing 'stickler-ci' complaint, function description not in order --- htdocs/core/lib/date.lib.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/htdocs/core/lib/date.lib.php b/htdocs/core/lib/date.lib.php index 63a6f83da4a..aa7476cd321 100644 --- a/htdocs/core/lib/date.lib.php +++ b/htdocs/core/lib/date.lib.php @@ -666,9 +666,9 @@ function getGMTEasterDatetime($year) * @param int $timestampEnd Timestamp end (UTC with hour, min, sec = 0) * @param string $country_code Country code * @param int $lastday Last day is included, 0: no, 1:yes - * @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes) * @param int $includesaturday Include saturday as non working day (-1=use setup, 0=no, 1=yes) * @param int $includesunday Include sunday as non working day (-1=use setup, 0=no, 1=yes) + * @param int $includefriday Include friday as non working day (-1=use setup, 0=no, 1=yes) * @return int|string Number of non working days or error message string if error * @see num_between_day(), num_open_day() */