public function setPmReleaseDate($dueDate, $pmRow, $pmAssetRow, $setLastClosed = false) { $schedBo = new CalemPmScheduleBo($pmRow['release_schedule']); $nextDueDate = $schedBo->getNextDueDate($dueDate); if (!$nextDueDate) { $nextDueDate = $dueDate; } //In case there's no schedule planned $pmAssetDbo = CalemFactory::getDbo('pm_asset'); $pmAssetRow = $pmAssetDbo->fetchById($pmAssetRow['id']); $pmAssetDbo->setChangeBulk(array('last_released' => CalemText::getServerDate($dueDate), 'next_due_date' => CalemText::getServerDate($nextDueDate), 'release_count' => $pmAssetRow['release_count'] + 1)); $pmAssetDbo->setIdForUpdate($pmAssetRow['id']); $pmAssetDbo->update(); //Going through meters if any $pmMeterDbo = CalemFactory::getDbo("pm_meter"); try { $pmMeterRows = $pmMeterDbo->fetchBySqlParam('select * from pm_meter where pm_asset_id=?', $pmAssetRow['id']); $assetMeterDbo = CalemFactory::getDbo('asset_meter'); foreach ($pmMeterRows as $pmMeterRow) { if ($pmMeterRow['release_by_meter']) { try { $assetMeterRow = $assetMeterDbo->fetchById($pmMeterRow['meter_id']); $pmMeterDbo->setChangeBulk(array('reading_released' => $assetMeterRow['reading'], 'rollover_count' => $assetMeterRow['rollover_count'])); $pmMeterDbo->setIdForUpdate($pmMeterRow['id']); $pmMeterDbo->update(); } catch (CalemDboDataNotFoundException $ex) { } } } } catch (CalemDboDataNotFoundException $ex) { } }
/** * Release at the same time */ public function depReleasePm($childPmId, $scopeId, $typeId, $woId, $dueDate, $finishTime, $pmRow, $pmAssetRow, $wogenBo) { $depPmRow = $this->getPmRow($childPmId); if ($scopeId == 'pm_dependency_scope_same') { $depPmAssetRows = $this->getPmAssetRow($childPmId, $pmAssetRow['asset_id']); } else { if ($scopeId == 'pm_dependency_scope_all') { $depPmAssetRows = $this->getPmAssetRow($childPmId); } } if (!$depPmRow || !$depPmAssetRows) { return; } if (!$wogenBo->isDependencySchedulePm($depPmRow)) { return; } //this dependent PmRow cannot be released. $assetDbo = CalemFactory::getDbo('asset'); //Get schedule object $schedBo = new CalemPmScheduleBo($depPmRow['release_schedule']); //release each based on scope and type. foreach ($depPmAssetRows as $depPmAssetRow) { //Let's check for asset here if (!$wogenBo->isDependencyScheduleAsset($depPmAssetRow, $assetDbo)) { continue; } //Let's go ahead and release the asset $depDueDate = $dueDate; //@todo - do we need a configuration to check for floating case so it's not released? if ($typeId == 'pm_dependency_before') { //Figure out a dueDate by $startDate = $this->releaseBo->getStartDate($dueDate, $depPmRow['duration_hours']); $depDueDate = $schedBo->adjustReleaseDate($startDate); } else { if ($typeId == 'pm_dependency_after') { $depDueDate = $schedBo->adjustReleaseDate($finishTime); } } $depFinishTime = $this->releaseBo->getPlannedFinishTime($depDueDate, $depPmRow['duration_hours']); $depWoId = $this->releaseBo->releasePm($depDueDate, $depFinishTime, $depPmRow, $depPmAssetRow); if ($depWoId) { $wogenBo->incWoCount(); $this->setDepWoId($typeId, $woId, $depWoId); //Need to recursively release for dependency $wogenBo->releaseByDependency($depWoId, $depDueDate, $depFinishTime, $depPmRow, $depPmAssetRow); } } }