public function test_getNewPeriodDataForPv_date()
 {
     /** === Test Data === */
     $mResult = new \Praxigento\BonusBase\Service\Period\Response\GetForPvBasedCalc();
     $mCalcTypeId = 4;
     $mPeriodType = \Praxigento\Core\Tool\IPeriod::TYPE_DAY;
     /** === Setup Mocks === */
     // $firstDate = $this->_repoService->getFirstDateForPvTransactions();
     $mFirstDate = 'timestamp';
     $this->mRepoService->shouldReceive('getFirstDateForPvTransactions')->once()->andReturn($mFirstDate);
     // $periodMonth = $this->_toolPeriod->getPeriodCurrent($firstDate, $periodType);
     $mPeriodMonth = 'month';
     $this->mToolPeriod->shouldReceive('getPeriodCurrent')->once()->with($mFirstDate, $mPeriodType)->andReturn($mPeriodMonth);
     // $dsBegin = $this->_toolPeriod->getPeriodFirstDate($periodMonth);
     $mDsBegin = 'datestamp begin';
     $this->mToolPeriod->shouldReceive('getPeriodFirstDate')->once()->with($mPeriodMonth)->andReturn($mDsBegin);
     // $dsEnd = $this->_toolPeriod->getPeriodLastDate($periodMonth);
     $mDsEnd = 'datestamp end';
     $this->mToolPeriod->shouldReceive('getPeriodLastDate')->once()->with($mPeriodMonth)->andReturn($mDsEnd);
     // $periodId = $this->_repoPeriod->create($period);
     $mPeriodId = 32;
     $this->mRepoPeriod->shouldReceive('create')->once()->andReturn($mPeriodId);
     // $dateStarted = $this->_toolDate->getUtcNowForDb();
     $mDateStarted = 'started';
     $this->mToolDate->shouldReceive('getUtcNowForDb')->once()->andReturn($mDateStarted);
     // $calcId = $this->_repoCalc->create($calc);
     $mCalcId = 64;
     $this->mRepoCalc->shouldReceive('create')->once()->andReturn($mCalcId);
     /** === Call and asserts  === */
     $res = $this->obj->getNewPeriodDataForPv($mResult, $mPeriodType, $mCalcTypeId);
     $this->assertEquals($mPeriodId, $res->getPeriodData()->getId());
     $this->assertEquals($mCalcId, $res->getCalcData()->getId());
 }
 public function getForPvBasedCalc(Request\GetForPvBasedCalc $request)
 {
     $result = new Response\GetForPvBasedCalc();
     $calcTypeCode = $request->getCalcTypeCode();
     $periodType = $request->getPeriodType() ?? ToolPeriod::TYPE_MONTH;
     $msg = "'Get latest period for PV based calc' operation is started in bonus base module " . "(type code: {$calcTypeCode}; period: {$periodType}).";
     $this->_logger->info($msg);
     /* get calculation type ID by type code */
     $calcTypeId = $this->_repoTypeCalc->getIdByCode($calcTypeCode);
     $def = $this->_manTrans->begin();
     try {
         $reqLatest = new Request\GetLatest();
         $reqLatest->setCalcTypeId($calcTypeId);
         $latestPeriod = $this->getLatest($reqLatest);
         $periodData = $latestPeriod->getPeriodData();
         if (is_null($periodData)) {
             $result = $this->_subPvBased->getNewPeriodDataForPv($result, $periodType, $calcTypeId);
         } else {
             $result->setPeriodData($periodData);
             $periodId = $periodData->getId();
             $this->_logger->info("There is registered period #{$periodId} for '{$calcTypeCode}' calculation.");
             $calcData = $latestPeriod->getCalcData();
             $result = $this->_subPvBased->checkExistingPeriod($result, $calcTypeCode, $calcTypeId, $periodType, $periodData, $calcData);
         }
         /* mark succeed if period data exists */
         if ($result->getPeriodData() && $result->getCalcData()) {
             $this->_manTrans->commit($def);
             $result->markSucceed();
         }
     } finally {
         $this->_manTrans->end($def);
     }
     $this->_logger->info("'Get latest period for PV based calc' operation is completed in bonus base module.");
     return $result;
 }