From 280e882df7b590f004d5b32f08f8181e7370a569 Mon Sep 17 00:00:00 2001 From: Fernando Ontiveros Date: Tue, 9 Oct 2012 12:33:39 -0400 Subject: [PATCH] CODE STYLE class.calendar.php --- workflow/engine/classes/class.calendar.php | 377 ++++++++++----------- 1 file changed, 188 insertions(+), 189 deletions(-) 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