/** * Permits to clean parent task and calculate parent data like total duration, * date start and complete average. * @param PHPProject_Task $oParentTask */ private function sanitizeTaskParent(Task $oParentTask) { $arrTasksChilds = $oParentTask->getTasks(); $iProgress = 0; $tStartDate = null; $tEndDate = null; foreach ($arrTasksChilds as $oTaskChild) { if ($oTaskChild->getTaskCount() == 0) { $this->sanitizeTask($oTaskChild); } else { $this->sanitizeTaskParent($oTaskChild); } $iProgress += $oTaskChild->getProgress(); if (is_null($tStartDate)) { $tStartDate = $oTaskChild->getStartDate(); } elseif ($tStartDate > $oTaskChild->getStartDate()) { $tStartDate = $oTaskChild->getStartDate(); } if (is_null($tEndDate)) { $tEndDate = $oTaskChild->getEndDate(); } elseif ($tEndDate < $oTaskChild->getEndDate()) { $tEndDate = $oTaskChild->getEndDate(); } } $oParentTask->setProgress($iProgress / $oParentTask->getTaskCount()); $oParentTask->setStartDate($tStartDate); $oParentTask->setEndDate($tEndDate); $oParentTask->setDuration(($tEndDate - $tStartDate) / 60 / 60 / 24 + 1); }
public function testGetSetStartDate() { $object = new Task(); $value = time(); $this->assertEquals('', $object->getStartDate()); $this->assertInstanceOf('PhpOffice\\PhpProject\\Task', $object->setStartDate()); $this->assertEquals($value, $object->getStartDate()); $this->assertInstanceOf('PhpOffice\\PhpProject\\Task', $object->setStartDate($value)); $this->assertEquals($value, $object->getStartDate()); $this->assertInstanceOf('PhpOffice\\PhpProject\\Task', $object->setStartDate((string) $value)); $this->assertEquals($value, $object->getStartDate()); $this->assertInstanceOf('PhpOffice\\PhpProject\\Task', $object->setStartDate('2014-12-05 00:05:00')); $this->assertEquals(strtotime('2014-12-05 00:05:00'), $object->getStartDate()); }
/** * Node "Task" * @param XMLReader $oXML * @param \DOMElement $domNode */ private function readNodeTask(XMLReader $oXML, \DOMElement $domNode, Task $oTask) { // Attributes $oTask->setIndex($domNode->getAttribute('id')); $oTask->setName($domNode->getAttribute('name')); $oTask->setStartDate($domNode->getAttribute('start')); $oTask->setDuration($domNode->getAttribute('duration')); $oTask->setProgress($domNode->getAttribute('complete')); // SubNodes $oNodes = $oXML->getElements('*', $domNode); if ($oNodes->length > 0) { foreach ($oNodes as $oNode) { if ($oNode->nodeName == 'task') { $oTaskChild = $oTask->createTask(); $this->readNodeTask($oXML, $oNode, $oTaskChild); } } } }