diff --git a/src/Dashboard.php b/src/Dashboard.php
index 5d353ca..a90dc50 100644
--- a/src/Dashboard.php
+++ b/src/Dashboard.php
@@ -537,9 +537,9 @@ public function showActivityGraph($input)
}
}
if (!empty($datat["begin"]) && !empty($datat["end"])) {
- $values = $report->timeRepartition($datat['actiontime'] / $AllDay, $datat["begin"], $values, Report::$WORK, $mtitle, $holiday->getHolidays());
+ $values = $report->timeRepartition($datat['actiontime'], $datat["begin"], $values, Report::$WORK, $mtitle, $holiday->getHolidays(), [], $AllDay);
} else {
- $values = $report->timeRepartition($datat['actiontime'] / $AllDay, $datat["date"], $values, Report::$WORK, $mtitle, $holiday->getHolidays());
+ $values = $report->timeRepartition($datat['actiontime'], $datat["date"], $values, Report::$WORK, $mtitle, $holiday->getHolidays(), [], $AllDay);
}
}
$intern = $values[0];
@@ -640,7 +640,7 @@ public function getActivities($users_id, $activities_id = 0)
$values = [];
if (count($result)) {
foreach ($result as $data) {
- $values = $report->timeRepartition($data['actiontime'] / $AllDay, $data["begin"], $values, Report::$WORK, $data['id'], $holiday->getHolidays(), ['real_hour' => true]);
+ $values = $report->timeRepartition($data['actiontime'], $data["begin"], $values, Report::$WORK, $data['id'], $holiday->getHolidays(), ['real_hour' => true], $AllDay);
}
$currentime = date("Y-m-d H:i:s");
@@ -703,7 +703,7 @@ public function getActivities($users_id, $activities_id = 0)
// $isallday = true;
//}
- $values = $report->timeRepartition($datah['actiontime'] / $AllDay, $datah["begin"], $values, Report::$WORK, $datah["id"], $holiday->getHolidays());
+ $values = $report->timeRepartition($datah['actiontime'], $datah["begin"], $values, Report::$WORK, $datah["id"], $holiday->getHolidays(), [], $AllDay);
//if (empty($datah["type"])) {
// $holidaytypes[$datah["id"]] = $datah["entity"]." > ".__('No defined type', 'activity');
@@ -768,9 +768,9 @@ public function getActivities($users_id, $activities_id = 0)
if ($use_timerepartition > 0) {
if (!empty($datat["begin"]) && !empty($datat["end"])) {
- $alltickets = $report->timeRepartition($datat['actiontime'] / $AllDay, $datat["begin"], $alltickets, Report::$WORK, $mtitle, $holiday->getHolidays());
+ $alltickets = $report->timeRepartition($datat['actiontime'], $datat["begin"], $alltickets, Report::$WORK, $mtitle, $holiday->getHolidays(), [], $AllDay);
} else {
- $alltickets = $report->timeRepartition($datat['actiontime'] / $AllDay, $datat["date"], $alltickets, Report::$WORK, $mtitle, $holiday->getHolidays());
+ $alltickets = $report->timeRepartition($datat['actiontime'], $datat["date"], $alltickets, Report::$WORK, $mtitle, $holiday->getHolidays(), [], $AllDay);
}
} else {
if (!empty($datat["begin"]) && !empty($datat["end"])) {
diff --git a/src/Holiday.php b/src/Holiday.php
index 8bbafca..657186e 100644
--- a/src/Holiday.php
+++ b/src/Holiday.php
@@ -230,7 +230,7 @@ function prepareInputForAdd($input)
if (isset($input["actiontime"])) {
$values = [];
$report = new Report();
- $values = $report->timeRepartition($input['actiontime'] / $AllDay, $input["begin"], $values, Report::$WORK, $input['plugin_activity_holidaytypes_id'], $this->getHolidays());
+ $values = $report->timeRepartition($input['actiontime'], $input["begin"], $values, Report::$WORK, $input['plugin_activity_holidaytypes_id'], $this->getHolidays(), [], $AllDay);
foreach ($values as $k => $v) {
foreach ($v as $key => $val) {
diff --git a/src/PlanningExternalEvent.php b/src/PlanningExternalEvent.php
index 82d76ac..94637a9 100644
--- a/src/PlanningExternalEvent.php
+++ b/src/PlanningExternalEvent.php
@@ -1234,7 +1234,7 @@ public static function getExternalEventWithActivityOnPeriod(string $begin, strin
}
$yearRegex .= ")";
- $table = PlanningExternalEvent::getTable();
+ $table = \PlanningExternalEvent::getTable();
$entityTable = \Entity::getTable();
$categoryTable = PlanningEventCategory::getTable();
$subQueryCrit = [
diff --git a/src/Report.php b/src/Report.php
index 232b550..2bcac00 100644
--- a/src/Report.php
+++ b/src/Report.php
@@ -461,7 +461,8 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
$options = [
'use_hours' => $use_hour_on_cra,
- 'use_planning_activity_hours' => $use_planning_activity_hours
+ 'use_planning_activity_hours' => $use_planning_activity_hours,
+ 'arrondir_heure' => $use_hour_on_cra,
];
$holiday = new Holiday();
@@ -721,13 +722,14 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
//End All Day planning Case
// Repartition of the time
$values = $this->timeRepartition(
- $data2['actiontime'] / $AllDay,
+ $data2['actiontime'],
$data2["begin"],
$values,
$opt_act,
$type,
$holiday->getHolidays(),
- $options
+ $options,
+ $AllDay
);
@@ -799,13 +801,14 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
//End All Day planning Case
// Repartition of the time
$values = $this->timeRepartition(
- $data2['actiontime'] / $AllDay,
+ $data2['actiontime'],
$data2["begin"],
$values,
$opt_act,
$type,
$holiday->getHolidays(),
- $options
+ $options,
+ $AllDay
);
$this->item_search[$type]['PlanningExternalEvent'][date(
@@ -884,7 +887,7 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
$opt_act = self::$HOLIDAY;
// Repartition of the time
- $values = $this->timeRepartition($datah['actiontime'] / $AllDay, $datah["begin"], $values, $opt_act, $type, $holiday->getHolidays(), $options);
+ $values = $this->timeRepartition($datah['actiontime'], $datah["begin"], $values, $opt_act, $type, $holiday->getHolidays(), $options, $AllDay);
if (!isset($this->holiday_type[$type])) {
$this->holiday_type[$type]['is_holiday'] = $datah['is_holiday'];
$this->holiday_type[$type]['is_sickness'] = $datah['is_sickness'];
@@ -907,10 +910,10 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
}
}
if (!empty($datat["begin"]) && !empty($datat["end"])) {
- $values = $this->timeRepartition($datat['actiontime'] / $AllDay, $datat["begin"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options);
+ $values = $this->timeRepartition($datat['actiontime'], $datat["begin"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options, $AllDay);
$this->item_search[$mtitle]['Ticket'][date('Y-m-d', strtotime($datat["begin"]))][] = $datat['tickets_id'];
} else {
- $values = $this->timeRepartition($datat['actiontime'] / $AllDay, $datat["date"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options);
+ $values = $this->timeRepartition($datat['actiontime'], $datat["date"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options, $AllDay);
$this->item_search[$mtitle]['Ticket'][date('Y-m-d', strtotime($datat["date"]))][] = $datat['tickets_id'];
}
}
@@ -983,7 +986,7 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
$title[$mtitle][] = $dataTask["begin"];
// Repartition of the time
- $values = $this->timeRepartition($dataTask['actiontime'] / $AllDay, $dataTask["begin"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options);
+ $values = $this->timeRepartition($dataTask['actiontime'], $dataTask["begin"], $values, self::$WORK, $mtitle, $holiday->getHolidays(), $options, $AllDay);
$this->item_search[$mtitle]['Ticket'][date('Y-m-d', strtotime($dataTask["begin"]))][] = $datam['tickets_id'];
}
@@ -1041,13 +1044,14 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
(strtotime(self::$PM_BEGIN) - strtotime(self::$AM_END));
$values = $this->timeRepartition(
- $planned_duration / $AllDay,
+ $planned_duration,
$timestart->format('Y-m-d H:i:s'),
$values,
self::$WORK,
$mtitle,
$holiday->getHolidays(),
- $options
+ $options,
+ $AllDay
);
}
$timestart->modify('+1 day');
@@ -1060,23 +1064,25 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
$planned_duration = (strtotime($timeendFinal->format('Y-m-d H:i:s')) - strtotime($timestart->format('Y-m-d H:i:s'))
- ($midi));
$values = $this->timeRepartition(
- $planned_duration / $AllDay,
+ $planned_duration,
$timestart->format('Y-m-d H:i:s'),
$values,
self::$WORK,
$mtitle,
$holiday->getHolidays(),
- $options
+ $options,
+ $AllDay
);
} else {
$values = $this->timeRepartition(
- $datapt['planned_duration'] / $AllDay,
+ $datapt['planned_duration'],
$datapt["plan_start_date"],
$values,
self::$WORK,
$mtitle,
$holiday->getHolidays(),
- $options
+ $options,
+ $AllDay
);
}
$this->item_search[$mtitle]['ProjectTask'][date('Y-m-d', strtotime($datapt["plan_start_date"]))][] = $datapt['projects_id'];
@@ -1381,11 +1387,11 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
if (count($iteratort)) {
foreach ($iteratort as $datat) {
$comment .= RichText::getTextFromHtml($datat["text"])
- . " (" . self::TotalTpsPassesArrondis($datat["actiontime"] / $AllDay, $options) . ")
";
+ . " (" . self::TotalTpsPassesArrondis($use_hour_on_cra ? $datat["actiontime"] : ($datat["actiontime"] / $AllDay), $options) . ")
";
}
}
- $total_ouvres = self::TotalTpsPassesArrondis($data["total_actiontime"] / $AllDay, $options);
+ $total_ouvres = self::TotalTpsPassesArrondis($use_hour_on_cra ?$data["total_actiontime"] : ($data["total_actiontime"] / $AllDay), $options);
$entry = [
'category' => htmlspecialchars($data["name"], ENT_QUOTES),
'comment' => $comment,
@@ -1406,10 +1412,10 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
$comment = "";
foreach ($data['events'] as $datat) {
$comment .= RichText::getTextFromHtml($datat["text"])
- . " (" . self::TotalTpsPassesArrondis($datat["actiontime"] / $AllDay, $options) . ")
";
+ . " (" . self::TotalTpsPassesArrondis($use_hour_on_cra ? $datat["actiontime"] : ($datat["actiontime"] / $AllDay), $options) . ")
";
}
- $total_ouvres = self::TotalTpsPassesArrondis($data["total_actiontime"] / $AllDay, $options);
+ $total_ouvres = self::TotalTpsPassesArrondis($use_hour_on_cra ?$data["total_actiontime"] : ($data["total_actiontime"] / $AllDay), $options);
$entry = [
'category' => htmlspecialchars($data["category_name"], ENT_QUOTES),
'comment' => $comment,
@@ -1474,7 +1480,7 @@ function showCRA($input, $output_type, CraPDF $PDF, $pdfMode = false)
*
* @return array
*/
- function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [], $options = [])
+ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [], $options = [], $allDay = 86400)
{
$opt = [
'real_hour' => false,
@@ -1484,9 +1490,12 @@ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [
foreach ($options as $key => $value) {
$opt[$key] = $value;
}
- if ($time > 1) {
+
+ $timejour = $time / $allDay;
+
+ if ($timejour > 1) {
if ($opt['use_hours']) {
- for ($i = 0; $i < $time; $i++) {
+ for ($i = 0; $i < $timejour; $i++) {
$date_add = date('Y-m-d', strtotime($begin . ' + ' . $i . ' DAY'));
$h = date("H:i:s", strtotime($begin));
@@ -1496,14 +1505,16 @@ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [
$hour = self::$PM_BEGIN;
}
- if ($time >= ($i + 1)) {
+ if ($timejour >= ($i + 1)) {
// more than one day remaining => add a full day to $date_add
$toAdd = 1;
} else {
// add the remaining percentage to $date_add
- $toAdd = $time - $i;
+ $toAdd = $timejour - $i;
}
+ $toAdd = $toAdd * $allDay;
+
$values = self::setTimes(
$toAdd,
$opt['real_hour'] ? $h : $hour,
@@ -1511,11 +1522,14 @@ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [
$values,
$type,
$activity,
- $holidays
+ $holidays,
+ $timejour,
+ $allDay,
+ $options
);
}
} else {
- $tot = $time * 100;
+ $tot = $timejour * 100;
$add = 0;
for ($i = 0; $i < $tot; $i = $i + 25) {
$mod = $i % 4;
@@ -1533,22 +1547,22 @@ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [
$hour = self::$PM_BEGIN;
}
- $values = self::setTimes(0.25, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays);
+ $values = self::setTimes(0.25, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays, $timejour, $allDay, $options);
}
}
- } elseif ($time == 1) {
+ } elseif ($timejour == 1) {
$date_add = date('Y-m-d', strtotime($begin));
$h = date("H:i:s", strtotime($begin));
if ($h > self::$AM_END) {
$hour = self::$PM_BEGIN;
- $values = self::setTimes(0.5, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays);
+ $values = self::setTimes($opt['use_hours'] ? $allDay / 2 : 0.5, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays, $timejour, $allDay, $options);
$date_add = date('Y-m-d', strtotime($begin . ' + 1 DAY'));
$hour = self::getAmBegin();
- $values = self::setTimes(0.5, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays);
+ $values = self::setTimes($opt['use_hours'] ? $allDay / 2 : 0.5, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays, $timejour, $allDay, $options);
} else {
$hour = self::getAmBegin();
- $values = self::setTimes(1, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays);
+ $values = self::setTimes($opt['use_hours'] ? $allDay : 1, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays, $timejour, $allDay, $options);
}
} else {
$date_add = date('Y-m-d', strtotime($begin));
@@ -1559,7 +1573,7 @@ function timeRepartition($time, $begin, $values, $type, $activity, $holidays = [
$hour = self::$PM_BEGIN;
}
- $values = self::setTimes($time, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays);
+ $values = self::setTimes($opt['use_hours'] ? $time : $timejour, $opt['real_hour'] ? $h : $hour, $date_add, $values, $type, $activity, $holidays, $timejour, $allDay, $options);
}
return $values;
@@ -1638,7 +1652,7 @@ function getActionTime($begin, $end, $values, $actiontime, $type)
*
* @return array
*/
- static function setTimes($time, $hour, $date_add, $values, $type, $activity, $holidays = [])
+ static function setTimes($time, $hour, $date_add, $values, $type, $activity, $holidays = [], $timejour, $allDay, $options)
{
$holiday = new Holiday();
$isWe = $holiday->countWe($date_add, $date_add, $holidays);
@@ -1681,23 +1695,31 @@ static function setTimes($time, $hour, $date_add, $values, $type, $activity, $ho
$exeedingDay = 0;
$exeedingAM = 0;
$exeedingPM = 0;
- if ($countAll + $time > 1) {
+ if (($options['use_hours'] && (($countAll / $allDay) + $timejour) > 1)) {
+ $exeedingDay = 1;
+ } elseif (! $options['use_hours'] && ($countAll + $timejour) > 1) {
$exeedingDay = 1;
}
- if ($hour <= self::$AM_END && $countAM + $time > 0.5 && $countAM > 0) {
+
+ if ($hour <= self::$AM_END && $countAM > 0 &&
+ (($options['use_hours'] && (($countAM / $allDay) + $timejour > 0.5)) ||
+ (!$options['use_hours'] && ($countAM + $timejour > 0.5)))) {
$exeedingAM = 1;
}
- if ($hour >= self::$PM_BEGIN && $countPM + $time > 0.5) {
+
+ if ($hour >= self::$PM_BEGIN &&
+ (($options['use_hours'] && (($countPM/ $allDay) + $timejour > 0.5)) ||
+ (!$options['use_hours'] && ($countPM + $timejour > 0.5)))){
$exeedingPM = 1;
}
// Is AM+PM exceeding ?
if ($exeedingDay || $exeedingPM) {
- if ($countAll - $time < 0) {
+ if (($options['use_hours'] && ($countAll / $allDay) - $timejour < 0) || (!$options['use_hours'] && ($countAll - $timejour < 0))) {
$values[$type][$activity][$date_add . ' ' . self::getAmBegin()] = $time;
- $values = self::setTimes($countAll, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays);
+ $values = self::setTimes($countAll, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays, $options['use_hours'] ? ($countAll / $allDay) : $countAll, $allDay, $options);
} else {
- $values = self::setTimes($time, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays);
+ $values = self::setTimes($time, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays, $options['use_hours'] ? ($time / $allDay) : $time, $allDay, $options);
}
// Appending/adding time
@@ -1718,7 +1740,7 @@ static function setTimes($time, $hour, $date_add, $values, $type, $activity, $ho
// No addition weekend, trying next day
} else {
- $values = self::setTimes($time, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays);
+ $values = self::setTimes($time, self::getAmBegin(), date('Y-m-d', strtotime($date_add . ' + 1 DAY')), $values, $type, $activity, $holidays, $options['use_hours'] ? ($time / $allDay) : $time, $allDay, $options);
}
return $values;
}
@@ -2139,8 +2161,17 @@ static function TotalTpsPassesArrondis($a_arrondir, $options = [])
$allday = 3600*24;
}
- $hour = ((float) $a_arrondir)* (float)$allday;
- $a_arrondir = $hour / 3600;
+ $optconf = new Option();
+ $optconf->getFromDB(1);
+
+
+ if ($optconf->fields['use_hour_on_cra']) {
+ $a_arrondir = ((float)$a_arrondir) / 3600;
+ } else {
+ $hour = ((float) $a_arrondir)* (float)$allday;
+ $a_arrondir = $hour / 3600;
+ }
+
$tranches_arrondi = [0,0.25,0.5,0.75,1];
}
@@ -2236,6 +2267,8 @@ private function addEventToValues(array &$values, DateTime $begin, DateTime $end
{
$dateBegin = $begin->format('Y-m-d');
$dateEnd = $end->format('Y-m-d');
+ $opt = new Option();
+ $opt->getFromDB(1);
if ($dateBegin != $dateEnd) {
$loopDate = $dateBegin;
while ($loopDate <= $dateEnd) {
@@ -2247,7 +2280,11 @@ private function addEventToValues(array &$values, DateTime $begin, DateTime $end
$dateTimeLoop->format('Y-m-d').' 00:00:00',
$event
);
- $dayLength = round($actionTime / (60 * 60 * 24), 4,PHP_ROUND_HALF_UP);
+ if ($opt->fields['use_hour_on_cra']) {
+ $dayLength = $event['actiontime'];
+ } else {
+ $dayLength = round($actionTime / (60 * 60 * 24), 4, PHP_ROUND_HALF_UP);
+ }
if (isset($values[$part][$title][$loopDate . ' 00:00:00'])) {
$values[$part][$title][$loopDate . ' 00:00:00'] += $dayLength;
} else {
@@ -2260,7 +2297,11 @@ private function addEventToValues(array &$values, DateTime $begin, DateTime $end
$loopDate = $dateTimeLoop->format('Y-m-d');
}
} else {
- $dayLength = round($event['actiontime'] / (60 * 60 * 24), 4, PHP_ROUND_HALF_UP);
+ if ($opt->fields['use_hour_on_cra']) {
+ $dayLength = $event['actiontime'];
+ } else {
+ $dayLength = round($event['actiontime'] / (60 * 60 * 24), 4, PHP_ROUND_HALF_UP);
+ }
if (isset($values[$part][$title][$dateBegin . ' 00:00:00'])) {
$values[$part][$title][$dateBegin . ' 00:00:00'] += $dayLength;
} else {
diff --git a/src/TicketTask.php b/src/TicketTask.php
index 4f8d6ec..5da7e7b 100644
--- a/src/TicketTask.php
+++ b/src/TicketTask.php
@@ -313,12 +313,12 @@ static function populatePlanning($options = [])
if (!$datat['is_private']) {
if ($opt->fields['use_timerepartition']) {
$allTickets = $report->timeRepartition(
- $datat['actiontime'] / $AllDay,
+ $datat['actiontime'],
$begin,
$allTickets,
Report::$WORK,
$mtitle,
- $holiday->getHolidays()
+ $holiday->getHolidays(), [], $AllDay
);
} else {
$allTickets[0][$mtitle][$begin] = $datat['actiontime'] / $AllDay;
@@ -326,12 +326,12 @@ static function populatePlanning($options = [])
} else {
if ($opt->fields['use_timerepartition']) {
$privateTickets = $report->timeRepartition(
- $datat['actiontime'] / $AllDay,
+ $datat['actiontime'],
$begin,
$privateTickets,
Report::$WORK,
$mtitle,
- $holiday->getHolidays()
+ $holiday->getHolidays(), [], $AllDay
);
} else {
$privateTickets[0][$mtitle][$begin] = $datat['actiontime'] / $AllDay;