CC-5090: Unscheduled tracks are still marked at Scheduled in linked show

This commit is contained in:
denise 2013-05-14 10:58:06 -04:00
parent bfd525395a
commit c173744929
4 changed files with 48 additions and 8 deletions

View File

@ -20,7 +20,7 @@ SQL;
return (is_numeric($count) && ($count != '0'));
}
public static function getAllFutureScheduledFiles()
public static function getAllFutureScheduledFiles($instanceId=null)
{
$sql = <<<SQL
SELECT distinct(file_id)
@ -29,6 +29,24 @@ WHERE ends > now() AT TIME ZONE 'UTC'
AND file_id is not null
SQL;
/* If an instance id gets passed into this function we need to check
* if it is a repeating show. If it is a repeating show, we need to
* check for any files scheduled in the future in the linked instances
* as well
*/
if (!is_null($instanceId)) {
$excludeIds = array();
$ccShow = CcShowInstancesQuery::create()
->findPk($instanceId)
->getCcShow();
if ($ccShow->isLinked()) {
foreach ($ccShow->getOtherInstances($instanceId) as $instance) {
$excludeIds[] = $instance->getDbId();
}
$sql .= " AND instance_id IN (".implode(",", $excludeIds).")";
}
}
$files = Application_Common_Database::prepareAndExecute( $sql, array());
$real_files = array();

View File

@ -1322,7 +1322,9 @@ SQL;
}
}
public static function setIsScheduled($p_scheduleItem, $p_status, $p_fileId=null) {
public static function setIsScheduled($p_scheduleItem, $p_status,
$p_fileId=null, $instanceId=null) {
if (is_null($p_fileId)) {
$fileId = Application_Model_Schedule::GetFileId($p_scheduleItem);
} else {
@ -1331,7 +1333,8 @@ SQL;
$file = self::RecallById($fileId);
$updateIsScheduled = false;
if (!is_null($fileId) && !in_array($fileId, Application_Model_Schedule::getAllFutureScheduledFiles())) {
if (!is_null($fileId) && !in_array($fileId,
Application_Model_Schedule::getAllFutureScheduledFiles($instanceId))) {
$file->_file->setDbIsScheduled($p_status)->save();
$updateIsScheduled = true;
}
@ -1341,15 +1344,23 @@ SQL;
public static function updatePastFilesIsScheduled()
{
/* Retrieve files that are scheduled in the past OR that belong
* to a show that has ended. We need to check if the show has
* ended incase a track is overbooked, since that alone will
* indicate the show is still scheduled in the future
*/
$sql = <<<SQL
SELECT file_id FROM cc_schedule
WHERE ends < now() at time zone 'UTC'
SELECT s.file_id, s.instance_id FROM cc_schedule AS s
LEFT JOIN cc_show_instances AS i
ON s.instance_id = i.id
WHERE s.ends < now() at time zone 'UTC'
OR i.ends < now() at time zone 'UTC'
SQL;
$files = Application_Common_Database::prepareAndExecute($sql);
foreach ($files as $file) {
if (!is_null($file['file_id'])) {
self::setIsScheduled(null, false, $file['file_id']);
self::setIsScheduled(null, false, $file['file_id'], $file['instance_id']);
}
}

View File

@ -189,4 +189,12 @@ class CcShow extends BaseCcShow {
}
return $instanceIds;
}
public function getOtherInstances($instanceId)
{
return CcShowInstancesQuery::create()
->filterByCcShow($this)
->filterByDbId($instanceId, Criteria::NOT_IN)
->find();
}
} // CcShow

View File

@ -41,8 +41,11 @@ class Application_Service_SchedulerService
/**
*
* Enter description here ...
* @param array $instanceIds
* Applies the show start difference to any scheduled items
*
* @param $instanceIds
* @param $diff
* @param $newStart
*/
public static function updateScheduleStartTime($instanceIds, $diff=null, $newStart=null)
{