コード例 #1
0
ファイル: Call.php プロジェクト: praxigento/mobi_mod_mage2_pv
 /**
  * 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;
 }
コード例 #2
0
 /**
  * Get all balances for WALLET_ACTIVE asset and then reset it to zero.
  */
 private function _resetWalletBalances()
 {
     /* get WALLET_ACTIVE asset ID */
     $assetId = $this->_repoTypeAsset->getIdByCode(Cfg::CODE_TYPE_ASSET_WALLET_ACTIVE);
     /* get WALLET_ACTIVE representative account */
     $reqGetRepres = new AccGetRepresentativeRequest();
     $reqGetRepres->setAssetTypeCode(Cfg::CODE_TYPE_ASSET_WALLET_ACTIVE);
     $respGetRepres = $this->_callAccAccount->getRepresentative($reqGetRepres);
     $accountIdRepres = $respGetRepres->getData(Account::ATTR_ID);
     /* get all customer balances for WALLET_ACTIVE and create transactions */
     $whereByAsset = Account::ATTR_ASSET_TYPE_ID . '=' . $assetId;
     $whereByRepres = Account::ATTR_ID . '<>' . $accountIdRepres;
     $accounts = $this->_repoBasic->getEntities(Account::ENTITY_NAME, null, "{$whereByAsset} AND {$whereByRepres}");
     $trans = [];
     $datePerformed = $this->_toolPeriod->getTimestampTo(self::DATE_FEB_PERIOD_BEGIN);
     $dateApplied = $datePerformed;
     foreach ($accounts as $account) {
         $balance = $account[Account::ATTR_BALANCE];
         if ($balance != 0) {
             $tran = [Transaction::ATTR_DEBIT_ACC_ID => $account[Account::ATTR_ID], Transaction::ATTR_CREDIT_ACC_ID => $accountIdRepres, Transaction::ATTR_VALUE => $account[Account::ATTR_BALANCE], Transaction::ATTR_DATE_APPLIED => $dateApplied];
             $trans[] = $tran;
         }
     }
     /* create operation to write off all WALLET_ACTIVE balances */
     $reqOper = new AccOperationAddRequest();
     $reqOper->setOperationTypeCode(Cfg::CODE_TYPE_OPER_WALLET_TRANSFER);
     $reqOper->setDatePerformed($datePerformed);
     $reqOper->setTransactions($trans);
     $respOper = $this->_callAccOperation->add($reqOper);
     $this->assertTrue($respOper->isSucceed());
 }
コード例 #3
0
ファイル: Call.php プロジェクト: praxigento/mobi_mod_mage2_pv
 public function debitFromCustomer(Request\DebitFromCustomer $request)
 {
     $result = new Response\DebitFromCustomer();
     /* get representative customer account for PV asset */
     $reqRepres = new AccountGetRepresentativeRequest();
     $reqRepres->setAssetTypeCode(Cfg::CODE_TYPE_ASSET_PV);
     $respRepres = $this->_callAccount->getRepresentative($reqRepres);
     /* extract input parameters */
     $requestData = $request->getData();
     $requestData[Request\BetweenCustomers::TO_CUSTOMER_ID] = $respRepres->getData(Account::ATTR_CUST_ID);
     $requestData[Request\BetweenCustomers::COND_FORCE_ALL] = true;
     $reqBetween = new Request\BetweenCustomers($requestData);
     $respBetween = $this->betweenCustomers($reqBetween);
     if ($respBetween->isSucceed()) {
         $result->markSucceed();
     }
     return $result;
 }