/** * Registry next period if current period has complete calculation. * * @param \Praxigento\BonusBase\Service\Period\Response\GetForPvBasedCalc $result * @param int $calcTypeId * @param string $periodType see \Praxigento\Core\Tool\IPeriod::TYPE_* * @param \Praxigento\BonusBase\Data\Entity\Period $periodData * @return \Praxigento\BonusBase\Service\Period\Response\GetForPvBasedCalc */ public function _registryNextPeriod(\Praxigento\BonusBase\Service\Period\Response\GetForPvBasedCalc $result, $calcTypeId, $periodType, \Praxigento\BonusBase\Data\Entity\Period $periodData) { $periodEnd = $periodData->getDstampEnd(); /* calculate new period bounds */ $periodNext = $this->_toolPeriod->getPeriodNext($periodEnd, $periodType); $dsNextBegin = $this->_toolPeriod->getPeriodFirstDate($periodNext); $dsNextEnd = $this->_toolPeriod->getPeriodLastDate($periodNext); /* check "right" bound according to now */ $periodNow = $this->_toolPeriod->getPeriodCurrent(time(), $periodType); $dsNowEnd = $this->_toolPeriod->getPeriodLastDate($periodNow); if ($dsNextEnd < $dsNowEnd) { /* registry new period */ /* create new period for given calculation type */ $newPeriod = new EPeriod(); $newPeriod->setCalcTypeId($calcTypeId); $newPeriod->setDstampBegin($dsNextBegin); $newPeriod->setDstampEnd($dsNextEnd); $periodId = $this->_repoPeriod->create($newPeriod); $newPeriod->setId($periodId); /* create related calculation */ $newCalc = new ECalculation(); $newCalc->setPeriodId($periodId); $dateStarted = $this->_toolDate->getUtcNowForDb(); $newCalc->setDateStarted($dateStarted); $newCalc->setState(Cfg::CALC_STATE_STARTED); $calcId = $this->_repoCalc->create($newCalc); $newCalc->setId($calcId); $result->setPeriodData($newPeriod); $result->setCalcData($newCalc); } else { $msg = "New period can be registered in the past only (to register: {$dsNextBegin}-{$dsNextEnd}, " . "current end: {$dsNowEnd})."; $this->_logger->warning($msg); $result->setErrorCode(ResponsePv::ERR_PERIOD_CAN_BE_REGISTERED_IN_PAST_ONLY); } return $result; }