public function calculateDueDate($sNextTasParam) { //Get Task properties $task = TaskPeer::retrieveByPK($this->getTasUid()); $aData['TAS_UID'] = $this->getTasUid(); //Added to allow User defined Timing Control at Run time from Derivation screen if (isset($sNextTasParam['NEXT_TASK']['TAS_TRANSFER_HIDDEN_FLY']) && $sNextTasParam['NEXT_TASK']['TAS_TRANSFER_HIDDEN_FLY'] == 'true') { $aData['TAS_DURATION'] = $sNextTasParam['NEXT_TASK']['TAS_DURATION']; $aData['TAS_TIMEUNIT'] = $sNextTasParam['NEXT_TASK']['TAS_TIMEUNIT']; $aData['TAS_TYPE_DAY'] = $sNextTasParam['NEXT_TASK']['TAS_TYPE_DAY']; if (isset($sNextTasParam['NEXT_TASK']['TAS_CALENDAR']) && $sNextTasParam['NEXT_TASK']['TAS_CALENDAR'] != '') { $aCalendarUID = $sNextTasParam['NEXT_TASK']['TAS_CALENDAR']; } else { $aCalendarUID = ''; } //Updating the task Table , so that user will see updated values in the assign screen in consequent cases $oTask = new Task(); $oTask->update($aData); } else { if (is_null($task)) { return 0; } $aData['TAS_DURATION'] = $task->getTasDuration(); $aData['TAS_TIMEUNIT'] = $task->getTasTimeUnit(); $aData['TAS_TYPE_DAY'] = $task->getTasTypeDay(); $aCalendarUID = ''; } //use the dates class to calculate dates $calendar = new calendar(); if ($calendar->pmCalendarUid == '') { $calendar->getCalendar(null, $task->getProUid(), $aData['TAS_UID']); $calendar->getCalendarData(); } $iDueDate = $calendar->calculateDate($this->getDelDelegateDate(), $aData['TAS_DURATION'], $aData['TAS_TIMEUNIT']); return $iDueDate; }
public function toCalculateTime($aData, $iDate = null) { G::LoadClass('calendar'); $oCalendar = new calendar(); $iDate = isset($iDate) ? $iDate : date('Y-m-d H:i:s'); $estimatedDuration = $aData['EVN_TAS_ESTIMATED_DURATION']; //task duration $when = $aData['EVN_WHEN']; //how many days $whenOccurs = $aData['EVN_WHEN_OCCURS']; //time on action (AFTER_TIME/TASK_STARTED) if ($oCalendar->pmCalendarUid == '') { $oCalendar->getCalendar(null, $aData['PRO_UID'], $aData['TAS_UID']); $oCalendar->getCalendarData(); } if ($whenOccurs == 'TASK_STARTED') { $calculatedDueDateA = $oCalendar->calculateDate($iDate, $when, 'days'); $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); } else { $calculatedDueDateA = $oCalendar->calculateDate($iDate, $estimatedDuration + $when, 'days'); $sActionDate = date('Y-m-d H:i:s', $calculatedDueDateA['DUE_DATE_SECONDS']); } return $sActionDate; }
function executeCaseSelfService() { try { global $sFilter; if ($sFilter != "" && strpos($sFilter, "unassigned-case") === false) { return false; } $criteria = new Criteria("workflow"); //SELECT $criteria->addSelectColumn(AppCacheViewPeer::APP_UID); $criteria->addSelectColumn(AppCacheViewPeer::DEL_INDEX); $criteria->addSelectColumn(AppCacheViewPeer::DEL_DELEGATE_DATE); $criteria->addSelectColumn(AppCacheViewPeer::APP_NUMBER); $criteria->addSelectColumn(AppCacheViewPeer::PRO_UID); $criteria->addSelectColumn(TaskPeer::TAS_UID); $criteria->addSelectColumn(TaskPeer::TAS_SELFSERVICE_TIME); $criteria->addSelectColumn(TaskPeer::TAS_SELFSERVICE_TIME_UNIT); $criteria->addSelectColumn(TaskPeer::TAS_SELFSERVICE_TRIGGER_UID); /*----------------------------------********---------------------------------*/ //FROM $condition = array(); $condition[] = array(AppCacheViewPeer::TAS_UID, TaskPeer::TAS_UID); $condition[] = array(TaskPeer::TAS_SELFSERVICE_TIMEOUT, 1); $criteria->addJoinMC($condition, Criteria::LEFT_JOIN); //WHERE $criteria->add(AppCacheViewPeer::USR_UID, ""); $criteria->add(AppCacheViewPeer::DEL_THREAD_STATUS, "OPEN"); //QUERY $rsCriteria = AppCacheViewPeer::doSelectRS($criteria); $rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC); setExecutionMessage("Unassigned case"); saveLog("unassignedCase", "action", "Unassigned case", "c"); $calendar = new calendar(); while ($rsCriteria->next()) { $row = $rsCriteria->getRow(); $flag = false; $appcacheAppUid = $row["APP_UID"]; $appcacheDelIndex = $row["DEL_INDEX"]; $appcacheDelDelegateDate = $row["DEL_DELEGATE_DATE"]; $appcacheAppNumber = $row["APP_NUMBER"]; $appcacheProUid = $row["PRO_UID"]; $taskUid = $row["TAS_UID"]; $taskSelfServiceTime = intval($row["TAS_SELFSERVICE_TIME"]); $taskSelfServiceTimeUnit = $row["TAS_SELFSERVICE_TIME_UNIT"]; $taskSelfServiceTriggerUid = $row["TAS_SELFSERVICE_TRIGGER_UID"]; /*----------------------------------********---------------------------------*/ if ($calendar->pmCalendarUid == '') { $calendar->getCalendar(null, $appcacheProUid, $taskUid); $calendar->getCalendarData(); } $dueDate = $calendar->calculateDate( $appcacheDelDelegateDate, $taskSelfServiceTime, $taskSelfServiceTimeUnit //HOURS|DAYS|MINUTES //1 ); if (time() > $dueDate["DUE_DATE_SECONDS"] && $flag == false) { $sessProcess = null; $sessProcessSw = 0; //Load data $case = new Cases(); $appFields = $case->loadCase($appcacheAppUid); $appFields["APP_DATA"]["APPLICATION"] = $appcacheAppUid; if (isset($_SESSION["PROCESS"])) { $sessProcess = $_SESSION["PROCESS"]; $sessProcessSw = 1; } $_SESSION["PROCESS"] = $appFields["PRO_UID"]; //Execute trigger $criteriaTgr = new Criteria(); $criteriaTgr->add(TriggersPeer::TRI_UID, $taskSelfServiceTriggerUid); $rsCriteriaTgr = TriggersPeer::doSelectRS($criteriaTgr); $rsCriteriaTgr->setFetchmode(ResultSet::FETCHMODE_ASSOC); if ($rsCriteriaTgr->next()) { $row = $rsCriteriaTgr->getRow(); if (is_array($row) && $row["TRI_TYPE"] == "SCRIPT") { $arrayCron = unserialize(trim(@file_get_contents(PATH_DATA . "cron"))); $arrayCron["processcTimeProcess"] = 60; //Minutes $arrayCron["processcTimeStart"] = time(); @file_put_contents(PATH_DATA . "cron", serialize($arrayCron)); //Trigger global $oPMScript; $oPMScript = new PMScript(); $oPMScript->setFields($appFields["APP_DATA"]); $oPMScript->setScript($row["TRI_WEBBOT"]); $oPMScript->execute(); /*----------------------------------********---------------------------------*/ $appFields["APP_DATA"] = array_merge($appFields["APP_DATA"], $oPMScript->aFields); unset($appFields['APP_STATUS']); unset($appFields['APP_PROC_STATUS']); unset($appFields['APP_PROC_CODE']); unset($appFields['APP_PIN']); $case->updateCase($appFields["APP_UID"], $appFields); saveLog("unassignedCase", "action", "OK Executed tigger to the case $appcacheAppNumber"); } } unset($_SESSION["PROCESS"]); if ($sessProcessSw == 1) { $_SESSION["PROCESS"] = $sessProcess; } } } setExecutionResultMessage("DONE"); } catch (Exception $e) { setExecutionResultMessage("WITH ERRORS", "error"); eprintln(" '-" . $e->getMessage(), "red"); saveLog("unassignedCase", "error", "Error in unassigned case: " . $e->getMessage()); } }
/** * @return unknown_type */ public function run() { $tpl = new template(); $helper = new helper(); if (!$this->userHasWidgets($_SESSION['userdata']['id'])) { $this->setDefaultWidgets($_SESSION['userdata']['id']); } // CALENDAR $calendar = new calendar(); $tpl->assign('calendar', $calendar->getCalendar($_SESSION['userdata']['id'])); // TICKETS $tickets = new tickets(); $tpl->assign('myTickets', $tickets->getUserTickets(3, $_SESSION['userdata']['id'])); // PROJECTS $projects = new projects(); $allProjects = $projects->getAll(false, 5); $myProjects = array(); foreach ($allProjects as $project) { $opentickets = $projects->getOpenTickets($project['id']); $closedTickets = $project['numberOfTickets'] - $opentickets['openTickets']; if ($project['numberOfTickets'] != 0) { $projectPercentage = round($closedTickets / $project['numberOfTickets'] * 100, 2); } else { $projectPercentage = 0; } $values = array('id' => $project['id'], 'name' => $project['name'], 'projectPercentage' => $projectPercentage); $myProjects[] = $values; } // HOURS $ts = new timesheets(); $myHours = $ts->getUsersHours($_SESSION['userdata']['id']); $tpl->assign('myHours', $myHours); // NOTES if (isset($_POST['save'])) { if (isset($_POST['title']) && isset($_POST['description'])) { $values = array('title' => $_POST['title'], 'description' => $_POST['description']); $this->addNote($_SESSION['userdata']['id'], $values); $tpl->setNotification('SAVE_SUCCESS', 'success'); } else { $tpl->setNotification('MISSING_FIELDS', 'error'); } } // Statistics $tpl->assign('closedTicketsPerWeek', $this->getClosedTicketsPerWeek()); $tpl->assign('hoursPerTicket', round($this->getHoursPerTicket())); $tpl->assign('hoursBugFixing', round($this->getHoursBugFixing(), 1)); // WIDGET CUSTOMIZATION if (isset($_POST['updateWidgets'])) { $widgets = array(); foreach ($this->getWidgets() as $widget) { if (isset($_POST['widget-' . $widget['id']])) { $widgets[] = $widget['id']; } } if (count($widgets)) { $this->updateWidgets($_SESSION['userdata']['id'], $widgets); $tpl->setNotification('SAVE_SUCCESS', 'success'); } else { $tpl->setNotification('ONE_WIDGET_REQUIRED', 'error'); } } // HOT LEADS $leads = new leads(); $hotLeads = $leads->getHotLeads(); $tpl->assign('hotLeads', $hotLeads); $tpl->assign('notes', $this->getNotes($_SESSION['userdata']['id'])); $tpl->assign('availableWidgets', $this->getAvailableWidgets($_SESSION['userdata']['id'])); $tpl->assign('myProjects', $myProjects); $tpl->assign('widgetTypes', $this->getWidgets()); $tpl->assign('widgets', $this->getUsersWidgets($_SESSION['userdata']['id'])); $tpl->assign('helper', $helper); $tpl->display('dashboard.show'); }
public function calculateDuration($cron = 0) { $this->writeFileIfCalledFromCronForCalculateDuration($cron); $this->patchDataWithValuesForCalculateDuration(); $rs = $this->recordSetForCalculateDuration(); $rs->next(); $row = $rs->getRow(); $i = 0; $calendar = new calendar(); $now = new DateTime(); while (is_array ($row)) { $oAppDel = AppDelegationPeer::retrieveByPk( $row['APP_UID'], $row['DEL_INDEX'] ); $calendar = new calendar(); $calendar->getCalendar($row['USR_UID'], $row['PRO_UID'], $row['TAS_UID']); $calData = $calendar->getCalendarData(); $calculatedValues = $this->getValuesToStoreForCalculateDuration($row, $calendar, $calData, $now); $oAppDel->setDelStarted($calculatedValues['isStarted']); $oAppDel->setDelFinished($calculatedValues['isFinished']); $oAppDel->setDelDelayed($calculatedValues['isDelayed']); $oAppDel->setDelQueueDuration($calculatedValues['queueTime']); $oAppDel->setDelDelayDuration($calculatedValues['delayTime']); $oAppDel->setDelDuration($calculatedValues['durationTime']); $oAppDel->setAppOverduePercentage($calculatedValues['percentDelay']); $RES = $oAppDel->save(); $rs->next(); $row = $rs->getRow(); } }
public function calculateDuration ($cron = 0) { try { if ($cron == 1) { $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); $arrayCron["processcTimeStart"] = time(); @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); } //patch rows with initdate = null and finish_date $c = new Criteria(); $c->clearSelectColumns(); $c->addSelectColumn( AppDelegationPeer::APP_UID ); $c->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $c->addSelectColumn( AppDelegationPeer::DEL_DELEGATE_DATE ); $c->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); $c->add( AppDelegationPeer::DEL_INIT_DATE, null, Criteria::ISNULL ); $c->add( AppDelegationPeer::DEL_FINISH_DATE, null, Criteria::ISNOTNULL ); //$c->add(AppDelegationPeer::DEL_INDEX, 1); $rs = AppDelegationPeer::doSelectRS( $c ); $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rs->next(); $row = $rs->getRow(); while (is_array( $row )) { $oAppDel = AppDelegationPeer::retrieveByPk( $row['APP_UID'], $row['DEL_INDEX'] ); if (isset( $row['DEL_FINISH_DATE'] )) { $oAppDel->setDelInitDate( $row['DEL_FINISH_DATE'] ); } else { $oAppDel->setDelInitDate( $row['DEL_INIT_DATE'] ); } $oAppDel->save(); $rs->next(); $row = $rs->getRow(); } //walk in all rows with DEL_STARTED = 0 or DEL_FINISHED = 0 $c = new Criteria( 'workflow' ); $c->clearSelectColumns(); $c->addSelectColumn( AppDelegationPeer::APP_UID ); $c->addSelectColumn( AppDelegationPeer::DEL_INDEX ); $c->addSelectColumn( AppDelegationPeer::USR_UID); $c->addSelectColumn( AppDelegationPeer::PRO_UID); $c->addSelectColumn( AppDelegationPeer::TAS_UID); $c->addSelectColumn( AppDelegationPeer::DEL_DELEGATE_DATE ); $c->addSelectColumn( AppDelegationPeer::DEL_INIT_DATE ); $c->addSelectColumn( AppDelegationPeer::DEL_TASK_DUE_DATE ); $c->addSelectColumn( AppDelegationPeer::DEL_FINISH_DATE ); $c->addSelectColumn( AppDelegationPeer::DEL_DURATION ); $c->addSelectColumn( AppDelegationPeer::DEL_QUEUE_DURATION ); $c->addSelectColumn( AppDelegationPeer::DEL_DELAY_DURATION ); $c->addSelectColumn( AppDelegationPeer::DEL_STARTED ); $c->addSelectColumn( AppDelegationPeer::DEL_FINISHED ); $c->addSelectColumn( AppDelegationPeer::DEL_DELAYED ); $c->addSelectColumn( TaskPeer::TAS_DURATION ); $c->addSelectColumn( TaskPeer::TAS_TIMEUNIT ); $c->addSelectColumn( TaskPeer::TAS_TYPE_DAY ); $c->addJoin( AppDelegationPeer::TAS_UID, TaskPeer::TAS_UID, Criteria::LEFT_JOIN ); //$c->add(AppDelegationPeer::DEL_INIT_DATE, NULL, Criteria::ISNULL); //$c->add(AppDelegationPeer::APP_UID, '7694483844a37bfeb0931b1063501289'); //$c->add(AppDelegationPeer::DEL_STARTED, 0); $cton1 = $c->getNewCriterion( AppDelegationPeer::DEL_STARTED, 0 ); $cton2 = $c->getNewCriterion( AppDelegationPeer::DEL_FINISHED, 0 ); $cton1->addOR( $cton2 ); $c->add( $cton1 ); $rs = AppDelegationPeer::doSelectRS( $c ); $rs->setFetchmode( ResultSet::FETCHMODE_ASSOC ); $rs->next(); $row = $rs->getRow(); $i = 0; //print "<table colspacing='2' border='1'>"; //print "<tr><td>iDelegateDate </td><td>iInitDate </td><td>iDueDate </td><td>iFinishDate </td><td>isStarted </td><td>isFinished </td><td>isDelayed </td><td>queueDuration </td><td>delDuration </td><td>delayDuration</td></tr>"; $calendar = new calendar(); $now = strtotime( 'now' ); while (is_array( $row )) { $fTaskDuration = $row['TAS_DURATION']; $fTaskDurationUnit = $row['TAS_TIMEUNIT']; $iDelegateDate = strtotime( $row['DEL_DELEGATE_DATE'] ); $iInitDate = strtotime( $row['DEL_INIT_DATE'] ); $iDueDate = strtotime( $row['DEL_TASK_DUE_DATE'] ); $iFinishDate = strtotime( $row['DEL_FINISH_DATE'] ); $isStarted = intval( $row['DEL_STARTED'] ); $isFinished = intval( $row['DEL_FINISHED'] ); $isDelayed = intval( $row['DEL_DELAYED'] ); $queueDuration = $this->getDiffDate( $iInitDate, $iDelegateDate ); $delDuration = 0; $delayDuration = 0; $overduePercentage = 0.0; //get the object, $oAppDel = AppDelegationPeer::retrieveByPk( $row['APP_UID'], $row['DEL_INDEX'] ); //getting the calendar $calendar->getCalendar($row['USR_UID'], $row['PRO_UID'], $row['TAS_UID']); $calData = $calendar->getCalendarData(); //if the task is not started if ($isStarted == 0) { if ($row['DEL_INIT_DATE'] != null && $row['DEL_INIT_DATE'] != '') { $oAppDel->setDelStarted( 1 ); $queueDuration = $this->getDiffDate( $iInitDate, $iDelegateDate ); $oAppDel->setDelQueueDuration( $queueDuration ); } else { //the task was not started $queueDuration = $this->getDiffDate( $now, $iDelegateDate ); $oAppDel->setDelQueueDuration( $queueDuration ); //we are putting negative number if the task is not delayed, and positive number for the time the task is delayed //$delayDuration = $this->getDiffDate( $now, $iDueDate ); $delayDuration = $calendar->dashCalculateDurationWithCalendar( $row['DEL_TASK_DUE_DATE'], date("Y-m-d H:i:s"), $calData ); $delayDuration = $delayDuration / (24 * 60 * 60); //Days $oAppDel->setDelDelayDuration( $delayDuration ); if ($fTaskDuration != 0) { $overduePercentage = $delayDuration / $fTaskDuration; $oAppDel->setAppOverduePercentage( $overduePercentage ); if ($iDueDate < $now) { $oAppDel->setDelDelayed( 1 ); } } } } //if the task was not finished if ($isFinished == 0) { if ($row['DEL_FINISH_DATE'] != null && $row['DEL_FINISH_DATE'] != '') { $oAppDel->setAppOverduePercentage( $overduePercentage ); $oAppDel->setDelFinished( 1 ); //$delDuration = $this->getDiffDate( $iFinishDate, $iInitDate ); $delDuration = $calendar->dashCalculateDurationWithCalendar($row['DEL_INIT_DATE'], $row['DEL_FINISH_DATE'], $calData );//by jen $delDuration = $delDuration / (24 * 60 * 60); //Saving the delDuration in days. The calculateDurationSLA func returns mins. $oAppDel->setDelDuration( $delDuration ); //calculate due date if correspond $dueDate = strtotime($iDueDate); $finishDate = strtotime($iFinishDate); if ($dueDate < $finishDate) { $oAppDel->setDelDelayed( 1 ); //$delayDuration = $this->getDiffDate( $iFinishDate, $iDueDate ); $delayDuration = $calendar->dashCalculateDurationWithCalendar( $row['DEL_TASK_DUE_DATE'], $row['DEL_FINISH_DATE'], $calData ); $delayDuration = $delayDuration / (24 * 60 * 60); //Days } else { $oAppDel->setDelDelayed( 0 ); $delayDuration = 0; } $oAppDel->setDelDelayDuration( $delayDuration ); } else { //the task was not completed if ($row['DEL_INIT_DATE'] != null && $row['DEL_INIT_DATE'] != '') { //$delDuration = $this->getDiffDate( $now, $iInitDate ); $delDuration = $calendar->dashCalculateDurationWithCalendar($row['DEL_INIT_DATE'], date("Y-m-d H:i:s"), $calData );//by jen $delDuration = $delDuration / (24 * 60 * 60); //Saving the delDuration in days. The calculateDurationSLA func returns mins. } else { //$delDuration = $this->getDiffDate( $now, $iDelegateDate ); $delDuration = $calendar->dashCalculateDurationWithCalendar($row['DEL_DELEGATE_DATE'], date("Y-m-d H:i:s"), $calData ); //byJen $delDuration = $delDuration / (24 * 60 * 60); //Saving the delDuration in days. The calculateDurationSLA func returns mins. } $oAppDel->setDelDuration( $delDuration ); //we are putting negative number if the task is not delayed, and positive number for the time the task is delayed //$delayDuration = $this->getDiffDate( $now, $iDueDate ); $delayDuration = 0; if($now > $iDueDate){ $delayDuration = $calendar->dashCalculateDurationWithCalendar( $row['DEL_TASK_DUE_DATE'], date("Y-m-d H:i:s"), $calData ); $delayDuration = $delayDuration / (24 * 60 * 60); } //Days $oAppDel->setDelDelayDuration( $delayDuration ); if ($fTaskDuration != 0) { $overduePercentage = $delayDuration / $fTaskDuration; $oAppDel->setAppOverduePercentage( $overduePercentage ); if ($iDueDate < $now) { $oAppDel->setDelDelayed( 1 ); } } } } //and finally save the record $RES = $oAppDel->save(); $rs->next(); $row = $rs->getRow(); } if ($cron == 1) { $arrayCron = unserialize( trim( @file_get_contents( PATH_DATA . "cron" ) ) ); $arrayCron["processcTimeStart"] = time(); @file_put_contents( PATH_DATA . "cron", serialize( $arrayCron ) ); } } catch (Exception $oError) { error_log( $oError->getMessage() ); } }