diff --git a/workflow/engine/classes/class.calendar.php b/workflow/engine/classes/class.calendar.php
index 8d303107b..dc13dcbc3 100755
--- a/workflow/engine/classes/class.calendar.php
+++ b/workflow/engine/classes/class.calendar.php
@@ -1,7 +1,8 @@
.
+ * along with this program. If not, see .
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
@@ -27,207 +28,205 @@
* @name calendar
* created 2010-03-22
*
- * @author Hugo Loza 2010-03-22 *
+ * @author Hugo Loza 2010-03-22 *
*/
-
- require_once ( "classes/model/CalendarDefinition.php" );
-
+
+require_once ("classes/model/CalendarDefinition.php");
+
/**
* A Calendar object where it is defined Working Days, Business Hours and Holidays
* A Calendar is applied to a User, Process or Task
* Extends CalendarDefinition.
- *
+ *
* @author Hugo Loza 2010-03-22
* @uses CalendarDefinition
- * @package workflow.engine.classes
+ * @package workflow.engine.classes
*
*/
class calendar extends CalendarDefinition
{
- /**
- * @param string(32) $userUid
- * @param string(32) $proUid
- * @param string(32) $tasUid
- */
- function calendar($userUid = NULL, $proUid = NULL, $tasUid = NULL)
- {
- $this->userUid = $userUid;
- $this->proUid = $proUid;
- $this->tasUid = $tasUid;
- $this->calendarLog = "";
- $this->setupCalendar($userUid,$proUid,$tasUid);
- }
-
- /**
- * Small function used to add important information about the calcs and actions
- * to the log (that log will be saved)
- *
- * @name addCalendarLog
- * @param text $msg
- * @access public
- *
- */
- function addCalendarLog($msg)
- {
- $this->calendarLog .= "\n".date("D M j G:i:s T Y").": " . $msg;
- }
-
- /**
- * setupCalendar is used to generate a valid instance of calendar using $userUid, $proUid and $tasUid
- * to find a valid calendar. If there is no valid calendar then use the Default
- *
- * @name setupCalendar
- * @param string(32) $userUid
- * @param string(32) $proUid
- * @param string(32) $tasUid
- * @return void
- */
- function setupCalendar($userUid,$proUid,$tasUid)
- {
- $calendarDefinition = $this->getCalendarFor($userUid,$proUid,$tasUid);
- $this->calendarUid = $calendarDefinition['CALENDAR_UID'];
- $this->calendarDefinition = $calendarDefinition;
- }
- /**
- * getnextValidBusinessHoursrange is used recursivily to find a valid BusinessHour
- * for the given $date and $time. This function use all the exeptions defined for
- * Working days, Business Hours and Holidays.
- *
- * @author Hugo Loza
- * @name getNextValidBusinessHoursRange
- * @param date $date
- * @param time $time
- *
- * @var array $businessHoursA Object with all the infromation about the valid Business Hours found
- * $return array('DATE'=>$date,'TIME'=>$time,'BUSINESS_HOURS'=>$businessHoursA)
- */
- function getNextValidBusinessHoursRange($date, $time)
- {
- $this->addCalendarLog("================= Start : $date,$time ================");
-
- //First Validate if is a valid date
- $sw_valid_date = false;
- $sw_date_changed = false;
- while (!$sw_valid_date) {
- $dateArray = explode("-",$date);
- $hour = 0;
- $minute = 0;
- $second = 0;
- $month = $dateArray[1];
- $day = $dateArray[2];
- $year = $dateArray[0];
- $weekDay = date("w",mktime($hour,$minute,$second,$month,$day,$year));
- $weekDayLabel = date("l",mktime($hour,$minute,$second,$month,$day,$year));
- $dateInt = mktime($hour,$minute,$second,$month,$day,$year);
-
-
- $this->addCalendarLog("**** $weekDayLabel ($weekDay) * $date");
- $sw_week_day = false;
- $sw_not_holiday = true;
-
-
- if(in_array($weekDay,$this->calendarDefinition['CALENDAR_WORK_DAYS_A'])){
- $sw_week_day = true;
- }
- if(!$sw_week_day){
- $this->addCalendarLog("Valid working Dates: ".$this->calendarDefinition['CALENDAR_WORK_DAYS_A']);
- $this->addCalendarLog("- Non working Day");
- }
-
-
- foreach ($this->calendarDefinition['HOLIDAY'] as $key => $holiday) {
- //Normalize Holiday date to SAME year of date
- $holidayStartA = explode(" ",$holiday['CALENDAR_HOLIDAY_START']);
- $holidayStartA = explode("-",$holidayStartA[0]);
-
- $normalizedHolidayStart = date("Y-m-d",mktime($hour,$minute,$second,$holidayStartA[1],$holidayStartA[2],$year));
- $normalizedHolidayStartInt = mktime($hour,$minute,$second,$holidayStartA[1],$holidayStartA[2],$year);
-
- $holidayEndA = explode(" ",$holiday['CALENDAR_HOLIDAY_END']);
- $holidayEndA = explode("-",$holidayEndA[0]);
- $normalizedHolidayEnd = date("Y-m-d",mktime($hour,$minute,$second,$holidayEndA[1],$holidayEndA[2],$year));
- $normalizedHolidayEndInt = mktime($hour,$minute,$second,$holidayEndA[1],$holidayEndA[2],$year);
- $sw_not_holiday_aux = true;
- if( $dateInt >= $normalizedHolidayStartInt && $dateInt <= $normalizedHolidayEndInt ){
- $sw_not_holiday = false;
- $sw_not_holiday_aux = false;
- }
- if(!$sw_not_holiday_aux){
- $this->addCalendarLog("It is a holiday -> ".$holiday['CALENDAR_HOLIDAY_NAME']." ($normalizedHolidayStart - $normalizedHolidayEnd)");
- }
- }
- $sw_valid_date=$sw_week_day && $sw_not_holiday;
-
- if(!$sw_valid_date){//Go to next day
- $date=date("Y-m-d",mktime($hour,$minute+1,$second,$month,$day+1,$year));
- $sw_date_changed=true;
- }else{
- $this->addCalendarLog("FOUND VALID DATE -> $date");
+ /**
+ *
+ * @param string(32) $userUid
+ * @param string(32) $proUid
+ * @param string(32) $tasUid
+ */
+ function calendar ($userUid = NULL, $proUid = NULL, $tasUid = NULL)
+ {
+ $this->userUid = $userUid;
+ $this->proUid = $proUid;
+ $this->tasUid = $tasUid;
+ $this->calendarLog = "";
+ $this->setupCalendar( $userUid, $proUid, $tasUid );
+ }
-
- //We got a valid day, now get the valid Business Hours
- //Here Need to find a rule to get the most nea
- $businessHoursA=array();
- $prevHour="00:00";
-
- if($sw_date_changed){// If date has changed then Use the first available period
- $time="00:01";
- }
-
- foreach($this->calendarDefinition['BUSINESS_DAY'] as $keyBH => $businessHours){
-
- // First the period may correspond to ALL or to the current week day
- if(($businessHours['CALENDAR_BUSINESS_DAY']==7)||($businessHours['CALENDAR_BUSINESS_DAY']==$weekDay)){
- $this->addCalendarLog("Validating ($time/$prevHour) From: ".$businessHours['CALENDAR_BUSINESS_START']." to ".$businessHours['CALENDAR_BUSINESS_END']);
-
- //Prev Hour
- $prevHourA = explode(":",$prevHour);
- $prevHourSeconds = ($prevHourA[0]*60*60)+($prevHour[1]*60);
-
- $calendarBusinessStartA = explode(":",$businessHours['CALENDAR_BUSINESS_START']);
- $calendarBusinessStartSeconds = ($calendarBusinessStartA[0]*60*60)+($calendarBusinessStartA[1]*60);
-
- $calendarBusinessEndA = explode(":",$businessHours['CALENDAR_BUSINESS_END']);
- $calendarBusinessEndSeconds = ($calendarBusinessEndA[0]*60*60)+($calendarBusinessEndA[1]*60);
-
- $timeAuxA = explode(":",$time);
- $timeAuxSeconds = ($timeAuxA[0]*60*60)+($timeAuxA[1]*60);
-
- if(($timeAuxSeconds>=$prevHourSeconds)&&($timeAuxSeconds<$calendarBusinessEndSeconds)){
- $this->addCalendarLog("*** FOUND VALID BUSINESS HOUR ".$businessHours['CALENDAR_BUSINESS_START']." - ".$businessHours['CALENDAR_BUSINESS_END']);
-
- if($timeAuxSeconds<$calendarBusinessStartSeconds){//Out of range then assign first hour
- $this->addCalendarLog("Set to default start hour to: ".$businessHours['CALENDAR_BUSINESS_START']);
- $time = $businessHours['CALENDAR_BUSINESS_START'];
- }
- $prevHour = $businessHours['CALENDAR_BUSINESS_END'];
- $businessHoursA = $businessHours;
- }
-
-
-
+ /**
+ * Small function used to add important information about the calcs and actions
+ * to the log (that log will be saved)
+ *
+ * @name addCalendarLog
+ * @param text $msg
+ * @access public
+ *
+ */
+ function addCalendarLog ($msg)
+ {
+ $this->calendarLog .= "\n" . date( "D M j G:i:s T Y" ) . ": " . $msg;
+ }
+
+ /**
+ * setupCalendar is used to generate a valid instance of calendar using $userUid, $proUid and $tasUid
+ * to find a valid calendar.
+ * If there is no valid calendar then use the Default
+ *
+ * @name setupCalendar
+ * @param string(32) $userUid
+ * @param string(32) $proUid
+ * @param string(32) $tasUid
+ * @return void
+ */
+ function setupCalendar ($userUid, $proUid, $tasUid)
+ {
+ $calendarDefinition = $this->getCalendarFor( $userUid, $proUid, $tasUid );
+ $this->calendarUid = $calendarDefinition['CALENDAR_UID'];
+ $this->calendarDefinition = $calendarDefinition;
+ }
+
+ /**
+ * getnextValidBusinessHoursrange is used recursivily to find a valid BusinessHour
+ * for the given $date and $time.
+ * This function use all the exeptions defined for
+ * Working days, Business Hours and Holidays.
+ *
+ * @author Hugo Loza
+ * @name getNextValidBusinessHoursRange
+ * @param date $date
+ * @param time $time
+ *
+ * @var array $businessHoursA Object with all the infromation about the valid Business Hours found
+ * $return array('DATE'=>$date,'TIME'=>$time,'BUSINESS_HOURS'=>$businessHoursA)
+ */
+ function getNextValidBusinessHoursRange ($date, $time)
+ {
+ $this->addCalendarLog( "================= Start : $date,$time ================" );
+
+ //First Validate if is a valid date
+ $sw_valid_date = false;
+ $sw_date_changed = false;
+ while (! $sw_valid_date) {
+ $dateArray = explode( "-", $date );
+ $hour = 0;
+ $minute = 0;
+ $second = 0;
+ $month = $dateArray[1];
+ $day = $dateArray[2];
+ $year = $dateArray[0];
+ $weekDay = date( "w", mktime( $hour, $minute, $second, $month, $day, $year ) );
+ $weekDayLabel = date( "l", mktime( $hour, $minute, $second, $month, $day, $year ) );
+ $dateInt = mktime( $hour, $minute, $second, $month, $day, $year );
+
+ $this->addCalendarLog( "**** $weekDayLabel ($weekDay) * $date" );
+ $sw_week_day = false;
+ $sw_not_holiday = true;
+
+ if (in_array( $weekDay, $this->calendarDefinition['CALENDAR_WORK_DAYS_A'] )) {
+ $sw_week_day = true;
+ }
+ if (! $sw_week_day) {
+ $this->addCalendarLog( "Valid working Dates: " . $this->calendarDefinition['CALENDAR_WORK_DAYS_A'] );
+ $this->addCalendarLog( "- Non working Day" );
}
- }
- }
-
- if(empty($businessHoursA)){
- $this->addCalendarLog("> No Valid Business Hour found for current date, go to next");
- $date = date("Y-m-d", mktime($hour,$minute+1,$second,$month,$day+1,$year));
- $sw_date_changed = true;
- $sw_valid_date = false;
- }
-
-
- }
-
- $return['DATE'] = $date;
- $return['TIME'] = $time;
- $return['BUSINESS_HOURS'] = $businessHoursA;
-
- return $return;
+ foreach ($this->calendarDefinition['HOLIDAY'] as $key => $holiday) {
+ //Normalize Holiday date to SAME year of date
+
+
+ $holidayStartA = explode( " ", $holiday['CALENDAR_HOLIDAY_START'] );
+ $holidayStartA = explode( "-", $holidayStartA[0] );
+
+ $normalizedHolidayStart = date( "Y-m-d", mktime( $hour, $minute, $second, $holidayStartA[1], $holidayStartA[2], $year ) );
+ $normalizedHolidayStartInt = mktime( $hour, $minute, $second, $holidayStartA[1], $holidayStartA[2], $year );
+
+ $holidayEndA = explode( " ", $holiday['CALENDAR_HOLIDAY_END'] );
+ $holidayEndA = explode( "-", $holidayEndA[0] );
+ $normalizedHolidayEnd = date( "Y-m-d", mktime( $hour, $minute, $second, $holidayEndA[1], $holidayEndA[2], $year ) );
+ $normalizedHolidayEndInt = mktime( $hour, $minute, $second, $holidayEndA[1], $holidayEndA[2], $year );
+ $sw_not_holiday_aux = true;
+ if ($dateInt >= $normalizedHolidayStartInt && $dateInt <= $normalizedHolidayEndInt) {
+ $sw_not_holiday = false;
+ $sw_not_holiday_aux = false;
+ }
+ if (! $sw_not_holiday_aux) {
+ $this->addCalendarLog( "It is a holiday -> " . $holiday['CALENDAR_HOLIDAY_NAME'] . " ($normalizedHolidayStart - $normalizedHolidayEnd)" );
+ }
+ }
+ $sw_valid_date = $sw_week_day && $sw_not_holiday;
+
+ if (! $sw_valid_date) { //Go to next day
+ $date = date( "Y-m-d", mktime( $hour, $minute + 1, $second, $month, $day + 1, $year ) );
+ $sw_date_changed = true;
+ } else {
+ $this->addCalendarLog( "FOUND VALID DATE -> $date" );
+
+ //We got a valid day, now get the valid Business Hours
+ //Here Need to find a rule to get the most nea
+ $businessHoursA = array ();
+ $prevHour = "00:00";
+
+ if ($sw_date_changed) { // If date has changed then Use the first available period
+ $time = "00:01";
+ }
+
+ foreach ($this->calendarDefinition['BUSINESS_DAY'] as $keyBH => $businessHours) {
+
+ // First the period may correspond to ALL or to the current week day
+ if (($businessHours['CALENDAR_BUSINESS_DAY'] == 7) || ($businessHours['CALENDAR_BUSINESS_DAY'] == $weekDay)) {
+ $this->addCalendarLog( "Validating ($time/$prevHour) From: " . $businessHours['CALENDAR_BUSINESS_START'] . " to " . $businessHours['CALENDAR_BUSINESS_END'] );
+
+ //Prev Hour
+ $prevHourA = explode( ":", $prevHour );
+ $prevHourSeconds = ($prevHourA[0] * 60 * 60) + ($prevHour[1] * 60);
+
+ $calendarBusinessStartA = explode( ":", $businessHours['CALENDAR_BUSINESS_START'] );
+ $calendarBusinessStartSeconds = ($calendarBusinessStartA[0] * 60 * 60) + ($calendarBusinessStartA[1] * 60);
+
+ $calendarBusinessEndA = explode( ":", $businessHours['CALENDAR_BUSINESS_END'] );
+ $calendarBusinessEndSeconds = ($calendarBusinessEndA[0] * 60 * 60) + ($calendarBusinessEndA[1] * 60);
+
+ $timeAuxA = explode( ":", $time );
+ $timeAuxSeconds = ($timeAuxA[0] * 60 * 60) + ($timeAuxA[1] * 60);
+
+ if (($timeAuxSeconds >= $prevHourSeconds) && ($timeAuxSeconds < $calendarBusinessEndSeconds)) {
+ $this->addCalendarLog( "*** FOUND VALID BUSINESS HOUR " . $businessHours['CALENDAR_BUSINESS_START'] . " - " . $businessHours['CALENDAR_BUSINESS_END'] );
+
+ if ($timeAuxSeconds < $calendarBusinessStartSeconds) { //Out of range then assign first hour
+ $this->addCalendarLog( "Set to default start hour to: " . $businessHours['CALENDAR_BUSINESS_START'] );
+ $time = $businessHours['CALENDAR_BUSINESS_START'];
+ }
+ $prevHour = $businessHours['CALENDAR_BUSINESS_END'];
+ $businessHoursA = $businessHours;
+ }
+
+ }
+ }
+ }
+
+ if (empty( $businessHoursA )) {
+ $this->addCalendarLog( "> No Valid Business Hour found for current date, go to next" );
+ $date = date( "Y-m-d", mktime( $hour, $minute + 1, $second, $month, $day + 1, $year ) );
+ $sw_date_changed = true;
+ $sw_valid_date = false;
+ }
+
+ }
+
+ $return['DATE'] = $date;
+ $return['TIME'] = $time;
+ $return['BUSINESS_HOURS'] = $businessHoursA;
+
+ return $return;
}
-
+
}
?>
\ No newline at end of file