/** * @param Request\PvWriteOff $request * * @return Response\PvWriteOff */ public function pvWriteOff(Request\PvWriteOff $request) { $result = new Response\PvWriteOff(); $datePerformed = $request->getDatePerformed(); $this->_logger->info("'PV Write Off' calculation is started."); $reqGetPeriod = new PeriodGetForWriteOffRequest(); $respGetPeriod = $this->_callPeriod->getForWriteOff($reqGetPeriod); if ($respGetPeriod->isSucceed()) { if ($respGetPeriod->hasNoPvTransactionsYet()) { $this->_logger->info("There is no PV transactions yet. Nothing to calculate."); $result->markSucceed(); } else { $def = $this->_manTrans->begin(); try { /* working vars */ $periodData = $respGetPeriod->getPeriodData(); $periodId = $periodData[Period::ATTR_ID]; $calcData = $respGetPeriod->getCalcData(); $calcId = $calcData[Calculation::ATTR_ID]; $periodBegin = $periodData[Period::ATTR_DSTAMP_BEGIN]; $periodEnd = $periodData[Period::ATTR_DSTAMP_END]; $this->_logger->info("Processing period #{$periodId} ({$periodBegin}-{$periodEnd}), calculation #{$calcId}."); $transData = $this->_subDb->getDataForWriteOff($calcId, $periodBegin, $periodEnd); $updates = $this->_subCalc->pvWriteOff($transData); $dateApplied = $this->_toolPeriod->getTimestampTo($periodEnd); $operId = $this->_subDb->saveOperationPvWriteOff($updates, $datePerformed, $dateApplied); $this->_subDb->saveLogPvWriteOff($transData, $operId, $calcId); $this->_subDb->markCalcComplete($calcId); $this->_manTrans->commit($def); $result->setPeriodId($periodId); $result->setCalcId($calcId); $result->markSucceed(); } finally { $this->_manTrans->end($def); } } } $this->_logMemoryUsage(); $this->_logger->info("'PV Write Off' calculation is completed."); return $result; }
public function test_pvWriteOff() { /** === Test Data === */ $TRANSACTIONS = [[Transaction::ATTR_DEBIT_ACC_ID => 2, Transaction::ATTR_CREDIT_ACC_ID => 4, Transaction::ATTR_VALUE => 10], [Transaction::ATTR_DEBIT_ACC_ID => 2, Transaction::ATTR_CREDIT_ACC_ID => 8, Transaction::ATTR_VALUE => 20], [Transaction::ATTR_DEBIT_ACC_ID => 4, Transaction::ATTR_CREDIT_ACC_ID => 8, Transaction::ATTR_VALUE => 30]]; /** === Mocks === */ $mLogger = $this->_mockLogger(); $mToolbox = $this->_mockToolbox(); $mCallDownlineSnap = $this->_mockFor('\\Praxigento\\Downline\\Service\\ISnap'); /** * Prepare request and perform call. */ /** @var $sub Calc */ $sub = new Calc($mLogger, $mToolbox, $mCallDownlineSnap); $res = $sub->pvWriteOff($TRANSACTIONS); $this->assertTrue(is_array($res)); }