From 2c21a10f6eb1087df3738743aba38c2d0395b331 Mon Sep 17 00:00:00 2001 From: Dante Date: Wed, 10 Jun 2015 11:01:27 -0400 Subject: [PATCH] resolution of calendar conflicts2 --- workflow/engine/classes/class.calendar.php | 82 ++++++++++++---------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/workflow/engine/classes/class.calendar.php b/workflow/engine/classes/class.calendar.php index 944717136..24c968d2b 100755 --- a/workflow/engine/classes/class.calendar.php +++ b/workflow/engine/classes/class.calendar.php @@ -832,43 +832,49 @@ class calendar extends CalendarDefinition return $newDate; } - //Calculate the duration betwen two dates with a calendar - public function dashCalculateDurationWithCalendar ($iniDate, $finDate = null, $calendarData = array()) - { - if ((is_null($finDate)) || ($finDate == '')) { - $finDate = date('Y-m-d H:i:s'); - } - - if ( (strtotime($finDate)) <= (strtotime($iniDate)) ) { - return 0.00; - } - - $secondDuration = 0.00; - $timeIniDate = strtotime($iniDate); - $timeFinDate = strtotime($finDate); - - $finDate = $this->dashGetIniDate($finDate, $calendarData); - $newDate = $iniDate; - while ($timeIniDate < $timeFinDate) { - $newDate = $this->dashGetIniDate($newDate, $calendarData); - - $rangeWorkHour = $this->dashGetRangeWorkHours($newDate, $calendarData['BUSINESS_DAY']); - $onlyDate = (date('Y-m-d',strtotime($newDate))) . ' ' . $rangeWorkHour['END']; - - if ( (strtotime($finDate)) < (strtotime($onlyDate)) ) { - $secondRes = ( ((float)strtotime($finDate)) - ((float)strtotime($newDate)) ); - $timeIniDate = strtotime($finDate); - $secondDuration += (float)$secondRes; - } else { - $secondRes = ( ((float)strtotime($onlyDate)) - ((float)strtotime($newDate)) ); - $newDate = $onlyDate; - $timeIniDate = strtotime($onlyDate); - $secondDuration += (float)$secondRes; - } - } - return $secondDuration; - } - + //Calculate the duration betwen two dates with a calendar + public function dashCalculateDurationWithCalendar ($iniDate, $finDate = null, $calendarData = array()) + { + if ((is_null($finDate)) || ($finDate == '')) { + $finDate = date('Y-m-d H:i:s'); + } + + $secondDuration = 0.00; + + if ( (strtotime($iniDate)) < (strtotime($finDate)) ) { + $timeIniDate = strtotime($iniDate); + $timeFinDate = strtotime($finDate); + } elseif ( (strtotime($finDate)) < (strtotime($iniDate)) ) { + $timeIniDate = strtotime($finDate); + $timeFinDate = strtotime($iniDate); + $auxDate = $iniDate; + $iniDate = $finDate; + $finDate = $auxDate; + } else { + return $secondDuration; + } + + $finDate = $this->dashGetIniDate($finDate, $calendarData); + $newDate = $iniDate; + while ($timeIniDate < $timeFinDate) { + $newDate = $this->dashGetIniDate($newDate, $calendarData); + + $rangeWorkHour = $this->dashGetRangeWorkHours($newDate, $calendarData['BUSINESS_DAY']); + $onlyDate = (date('Y-m-d',strtotime($newDate))) . ' ' . $rangeWorkHour['END']; + + if ( (strtotime($finDate)) < (strtotime($onlyDate)) ) { + $secondRes = ( ((float)strtotime($finDate)) - ((float)strtotime($newDate)) ); + $timeIniDate = strtotime($finDate); + $secondDuration += (float)$secondRes; + } else { + $secondRes = ( ((float)strtotime($onlyDate)) - ((float)strtotime($newDate)) ); + $newDate = $onlyDate; + $timeIniDate = strtotime($onlyDate); + $secondDuration += (float)$secondRes; + } + } + return $secondDuration; + } public function dashGetIniDate ($iniDate, $calendarData = array()) { @@ -1041,4 +1047,4 @@ class calendar extends CalendarDefinition } } -?> +?> \ No newline at end of file