public function addToWalletActive(Request\AddToWalletActive $req) { $result = new Response\AddToWalletActive(); $dateApplied = $req->getDateApplied(); $datePerformed = $req->getDatePerformed(); $operTypeCode = $req->getOperationTypeCode(); $transData = $req->getTransData(); $asAmount = $req->getAsAmount(); $asCustId = $req->getAsCustomerId(); $asRef = $req->getAsRef(); $this->_logger->info("'Add to Wallet Active' operation is started."); /* prepare additional data */ $datePerformed = is_null($datePerformed) ? $this->_toolDate->getUtcNowForDb() : $datePerformed; $dateApplied = is_null($dateApplied) ? $datePerformed : $dateApplied; /* get asset type ID */ $assetTypeId = $this->_repoMod->getTypeAssetIdByCode(Cfg::CODE_TYPE_ASSET_WALLET_ACTIVE); /* get representative customer ID */ $represAccId = $this->_getRepresentativeAccId($assetTypeId); /* save operation */ $reqOperAdd = new \Praxigento\Accounting\Service\Operation\Request\Add(); $reqOperAdd->setOperationTypeCode($operTypeCode); $reqOperAdd->setDatePerformed($datePerformed); $reqOperAdd->setAsTransRef($asRef); $trans = []; $reqGetAccount = new AccountGetRequest(); $reqGetAccount->setCreateNewAccountIfMissed(); $reqGetAccount->setAssetTypeId($assetTypeId); foreach ($transData as $item) { $custId = $item[$asCustId]; $value = $item[$asAmount]; if ($value > 0) { /* get WALLET_ACTIVE account ID for customer */ $reqGetAccount->setCustomerId($custId); $respGetAccount = $this->_callAccount->get($reqGetAccount); $accId = $respGetAccount->getData(Account::ATTR_ID); $one = [Transaction::ATTR_DEBIT_ACC_ID => $represAccId, Transaction::ATTR_CREDIT_ACC_ID => $accId, Transaction::ATTR_DATE_APPLIED => $dateApplied, Transaction::ATTR_VALUE => $value]; if (!is_null($asRef) && isset($item[$asRef])) { $one[$asRef] = $item[$asRef]; } $trans[] = $one; $this->_logger->debug("Transaction ({$value}) for customer #{$custId} (acc #{$accId}) is added to operation with type '{$operTypeCode}'."); } else { $this->_logger->debug("Transaction for customer #{$custId} is '{$value}'. Transaction is not included in operation with type '{$operTypeCode}'."); } } $reqOperAdd->setTransactions($trans); $respOperAdd = $this->_callOper->add($reqOperAdd); $operId = $respOperAdd->getOperationId(); $this->_logger->debug("New operation (type id '{$operTypeCode}') is added with id={$operId} ."); $result->setData($respOperAdd->getData()); $result->markSucceed(); $this->_logger->info("'Add to Wallet Active' operation is completed."); return $result; }
/** * @param $updates [$custId=>[$rankId=>$bonus, ...], ...] * * @return \Praxigento\Wallet\Service\Operation\Response\AddToWalletActive */ private function _createBonusOperation($updates) { $asCustId = 'asCid'; $asAmount = 'asAmnt'; $asRef = 'asRef'; $transData = []; foreach ($updates as $custId => $ranks) { foreach ($ranks as $rankId => $amount) { $item = [$asCustId => $custId, $asAmount => $amount, $asRef => $rankId]; $transData[] = $item; } } $req = new WalletOperationAddToWalletActiveRequest(); $req->setAsCustomerId($asCustId); $req->setAsAmount($asAmount); $req->setAsRef($asRef); $req->setOperationTypeCode(Cfg::CODE_TYPE_OPER_BONUS); $req->setTransData($transData); $result = $this->_callWalletOperation->addToWalletActive($req); return $result; }