public function test_accountPv() { /** === Test Data === */ $custId = 21; $orderId = 34; $operId = 1024; $pvTotal = 300; $accIdCust = 101; $accIdRepres = 202; /** === Setup Mocks === */ // $sale = $this->_repoSale->getById($saleId); $this->mRepoSale->shouldReceive('getById')->once()->with($orderId)->andReturn(new Sale([Sale::ATTR_TOTAL => $pvTotal])); // $customerId = $this->_repoMod->getSaleOrderCustomerId($saleId); $this->mRepoMod->shouldReceive('getSaleOrderCustomerId')->once()->with($orderId)->andReturn($custId); // $respGetAccCust = $this->_callAccount->get($reqGetAccCust); $mRespGetAccCust = new \Praxigento\Accounting\Service\Account\Response\Get(); $mRespGetAccCust->setData([Account::ATTR_ID => $accIdCust]); $this->mCallAccount->shouldReceive('get')->once()->andReturn($mRespGetAccCust); // $respGetAccRepres = $this->_callAccount->getRepresentative($reqGetAccRepres); $mRespGetAccRepres = new \Praxigento\Accounting\Service\Account\Response\GetRepresentative(); $mRespGetAccRepres->setData([Account::ATTR_ID => $accIdRepres]); $this->mCallAccount->shouldReceive('getRepresentative')->once()->andReturn($mRespGetAccRepres); // $respAddOper = $this->_callOperation->add($reqAddOper); $mRespAddOper = new \Praxigento\Accounting\Service\Operation\Response\Add(); $this->mCallOperation->shouldReceive('add')->once()->andReturn($mRespAddOper); // $operId = $respAddOper->getOperationId(); $mRespAddOper->setOperationId($operId); /** === Call and asserts === */ $req = new Request\AccountPv(); $req->setSaleOrderId($orderId); $res = $this->obj->accountPv($req); $this->assertTrue($res->isSucceed()); $operId = $res->getOperationId(); $this->assertEquals($operId, $operId); }
public function test_accountPv() { $obm = \Magento\Framework\App\ObjectManager::getInstance(); /** @var $call Call */ $call = $obm->get('Praxigento\\Pv\\Service\\Sale\\Call'); $req = new Request\AccountPv(); $req->setSaleOrderId(1); /** @var $resp Response\AccountPv */ $resp = $call->accountPv($req); $this->assertTrue($resp->isSucceed()); }
/** * Account PV on sale done. * * @param Request\AccountPv $request * * @return Response\AccountPv */ public function accountPv(Request\AccountPv $request) { $result = new Response\AccountPv(); $saleId = $request->getSaleOrderId(); $customerId = $request->getCustomerId(); $dateApplied = $request->getDateApplied(); $this->_logger->info("PV accounting operation for sale order #{$saleId} is started."); $sale = $this->_repoSale->getById($saleId); $pvTotal = $sale->getTotal(); /* get customer for sale order */ if (is_null($customerId)) { $this->_logger->info("There is no customer ID in request, select customer ID from sale order data."); $customerId = $this->_repoMod->getSaleOrderCustomerId($saleId); $this->_logger->info("Order #{$saleId} is created by customer #{$customerId}."); } /* get PV account data for customer */ $reqGetAccCust = new GetAccountRequest(); $reqGetAccCust->setCustomerId($customerId); $reqGetAccCust->setAssetTypeCode(Cfg::CODE_TYPE_ASSET_PV); $reqGetAccCust->setCreateNewAccountIfMissed(true); $respGetAccCust = $this->_callAccount->get($reqGetAccCust); /* get PV account data for representative */ $reqGetAccRepres = new GetAccountRepresentativeRequest(); $reqGetAccRepres->setAssetTypeCode(Cfg::CODE_TYPE_ASSET_PV); $respGetAccRepres = $this->_callAccount->getRepresentative($reqGetAccRepres); /* create one operation with one transaction */ $reqAddOper = new AddOperationRequest(); $reqAddOper->setOperationTypeCode(Cfg::CODE_TYPE_OPER_PV_SALE_PAID); $trans = [Transaction::ATTR_DEBIT_ACC_ID => $respGetAccRepres->getId(), Transaction::ATTR_CREDIT_ACC_ID => $respGetAccCust->getId(), Transaction::ATTR_VALUE => $pvTotal, Transaction::ATTR_DATE_APPLIED => $dateApplied]; $reqAddOper->setTransactions([$trans]); $respAddOper = $this->_callOperation->add($reqAddOper); $operId = $respAddOper->getOperationId(); $result->setOperationId($operId); $result->markSucceed(); $this->_logger->info("PV accounting operation for sale order #{$saleId} is completed."); return $result; }