Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Copyright ? 2017 Kemana, Inc. All rights reserved.
- */
- namespace Kemana\Vouchers\Model;
- /**
- * Class Vouchers
- * @package Kemana\Vouchers\Model
- */
- class Vouchers implements \Kemana\Vouchers\Api\VouchersInterface
- {
- const TRANS_REVERSE_STATUS = 0;
- const TRANS_REDEEM_STATUS = 1;
- protected $_vendorModel;
- /**
- * @var \Kemana\Vouchers\Helper\Data
- */
- protected $_voucherHelper;
- protected $_timezoneInterface;
- /**
- * Vouchers constructor.
- * @param APIHelper $APIHelper
- */
- public function __construct(
- \Magento\Framework\View\Element\Template\Context $context,
- \Ced\CsMarketplace\Model\Vendor $vendorModel,
- \Kemana\Vouchers\Helper\Data $voucherHelper
- )
- {
- $this->_vendorModel = $vendorModel;
- $this->_voucherHelper = $voucherHelper;
- $this->_timezoneInterface = $context->getLocaleDate();
- }
- /**
- * Get Voucher detail data
- *
- * @param string $voucherCode
- * @return array
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function details($voucherCode){
- $isValid = false;
- $errNumber = 0;
- $resultData = array();
- //get voucher detail
- list($resultStatus, $resultData) = $this->getVoucherDetail($voucherCode);
- if($resultStatus){
- $isValid = true;
- }else{
- $isValid = false;
- $errNumber = 2;
- }
- //return results
- if($isValid){
- $voucherCode = $resultData['voucher_code'];
- $status = $resultData['status'];
- $provider = $resultData['provider'];
- $redemptionStart = $resultData['redemption_start'];
- $redemptionEnd = $resultData['redemption_end'];
- $redemptionPoint = $resultData['redemption_point'];
- $customerName = $resultData['customer_name'];
- $productName = $resultData['product_name'];
- $sku = $resultData['sku'];
- $productId = $resultData['product_id'];
- $redeemDate = $resultData['redeem_date'];
- $reverseDate = $resultData['reverse_date'];
- $results= array(
- 'voucher_code' => $voucherCode,
- 'voucher_owner' => $customerName,
- 'voucher_status' => $status,
- 'item_name' => $productName,
- 'provider_product_key' => $sku,
- 'cxa_product_key' => $productId,
- 'provider_name' => $provider,
- 'redemption_start_on' => $redemptionStart,
- 'redemption_ends_on' => $redemptionEnd,
- 'redeemed_on' => $redeemDate,
- 'reversed_on' => $reverseDate,
- 'redemption_location' => $redemptionPoint,
- );
- }else{
- $message = $this->errorMessage($errNumber);
- $parameters = array('voucherCode' => $voucherCode);
- $status = 'fail';
- $results= array(
- 'status' => $status,
- 'message' => $message,
- 'parameters' => $parameters
- );
- }
- return json_encode($results);
- }
- /**
- * Redeem Voucher
- *
- * @param string $voucherCode
- * @param string $pin
- * @return array
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function redeem($voucherCode, $pin){
- $isValid = false;
- $errNumber = 0;
- //check PIN
- $isValidAccess = $this->checkPIN($pin);
- if($isValidAccess){
- //redeem voucher process
- list($resultStatus, $resultData) = $this->redeemVoucher($voucherCode, $pin);
- $resultData['additonal_data']=$resultData;
- if($resultStatus){
- $isValid = true;
- $transactionHistory = $resultData['transaction_history'];
- }else{
- $isValid = false;
- $errNumber = $resultData['err_number'];
- }
- }else{
- $isValid = false;
- $errNumber = 1;
- }
- //return results
- if($isValid){
- $status = 'succcess';
- $message = __('Voucher Successfully Redeemed');
- $results= array(
- 'status' => $status,
- 'message' => $message,
- 'transaction_history' => $transactionHistory,
- );
- }else{
- $message = $this->errorMessage($errNumber);
- $parameters = array('voucherCode' => $voucherCode, 'pin' => $pin);
- $status = 'fail';
- $results= array(
- 'status' => $status,
- 'message' => $message,
- 'parameters' => $parameters
- );
- }
- return json_encode($results);
- }
- /**
- * Reverse Voucher
- *
- * @param string $voucherCode
- * @param string $pin
- * @return array
- * @throws \Magento\Framework\Exception\LocalizedException
- */
- public function reverse($voucherCode, $pin){
- $isValid = false;
- $errNumber = 0;
- //check PIN
- $isValidAccess = $this->checkPIN($pin);
- if($isValidAccess){
- //reverse voucher process
- list($resultStatus, $resultData) = $this->reverseVoucher($voucherCode, $pin);
- if($resultStatus){
- $isValid = true;
- $transactionHistory = $resultData['transaction_history'];
- }else{
- $isValid = false;
- $errNumber = $resultData['err_number'];
- }
- }else{
- $isValid = false;
- $errNumber = 1;
- }
- //return results
- if($isValid){
- $status = 'succcess';
- $message = __('Voucher Successfully Reversed');
- $results= array(
- 'status' => $status,
- 'message' => $message,
- 'transaction_history' => $transactionHistory,
- );
- }else{
- $message = $this->errorMessage($errNumber);
- $parameters = array('voucherCode' => $voucherCode, 'pin' => $pin);
- $status = 'fail';
- $results= array(
- 'status' => $status,
- 'message' => $message,
- 'parameters' => $parameters
- );
- }
- return json_encode($results);
- }
- /**
- * Check PIN
- *
- * @param $pin
- * @return bool
- */
- private function checkPIN($pin){
- $resultStatus = false;
- if ($pin){
- $providerCollection = $this->_vendorModel->getCollection()
- ->addAttributeToSelect('entity_id')
- ->addAttributeToSelect('name')
- ->addAttributeToFilter('pin',array('eq' => $pin));
- if ($providerCollection->count()){
- $resultStatus = true;
- }
- }
- return $resultStatus;
- }
- /**
- * logic to reverse voucher
- *
- * @param $voucherCode
- * @param $pin
- * @return array
- */
- private function reverseVoucher($voucherCode, $pin){
- $resultStatus = false;
- $resultData = array(
- 'err_number' => 2,
- 'additonal_data' => ''
- );
- $voucher=$this->_voucherHelper->getPublicVoucher($voucherCode,$pin);
- if($voucher){
- if ($voucher->getId()){
- $voucherId = $voucher->getId();
- $voucherCode = $voucher->getVoucherCode();
- $providerId = $voucher->getProviderId();
- $provider = $this->_vendorModel->load($providerId);
- if ($provider->getId()){
- $providerName = $provider->getName();
- $reverseStatus=$this->_voucherHelper->reverseVoucher($voucherCode,$providerName,$providerId);
- if ($reverseStatus){
- $transactionHistory = $this->getTransactionHistory($providerId, self::TRANS_REVERSE_STATUS);
- $resultStatus = true;
- $resultData = array('transaction_history' => $transactionHistory);
- }else {
- $resultData['err_number'] = 4;
- }
- }
- }
- }
- return [$resultStatus, $resultData];
- }
- /**
- * logic to redeem voucher
- *
- * @param $voucherCode
- * @param $pin
- * @return array
- */
- private function redeemVoucher($voucherCode, $pin){
- $resultStatus = false;
- $resultData = array(
- 'err_number' => 2,
- 'additonal_data' => ''
- );
- $voucher=$this->_voucherHelper->getPublicVoucher($voucherCode,$pin);
- if($voucher){
- if ($voucher->getId()){
- $voucherCode = $voucher->getVoucherCode();
- $providerId = $voucher->getProviderId();
- $provider = $this->_vendorModel->load($providerId);
- if ($provider->getId()){
- $providerName = $provider->getName();
- $redeemStatus=$this->_voucherHelper->redeemVoucher($voucherCode,$providerName,$providerId);
- if ($redeemStatus){
- $transactionHistory = $this->getTransactionHistory($providerId, self::TRANS_REDEEM_STATUS);
- $resultStatus = true;
- $resultData = array('transaction_history' => $transactionHistory);
- }else {
- $resultData['err_number'] = 3;
- }
- }
- }
- }
- return [$resultStatus, $resultData];
- }
- /**
- * get voucher detail
- *
- * @param $voucherCode
- * @return array
- */
- private function getVoucherDetail($voucherCode){
- $resultStatus = false;
- $resultData = array(
- 'err_number' => 2
- );
- $voucher=$this->_voucherHelper->getVoucher($voucherCode);
- if($voucher){
- if ($voucher->getId()){
- $voucherId = $voucher->getId();
- $voucherCode = $voucher->getVoucherCode();
- $voucherProvider = $voucher->getProviderName();
- $voucherCreated = $this->getLocaleDate($voucher->getVoucherCreatedDate(), 'jS F Y, g:i A');
- $voucherExpiry = $this->getLocaleDate($voucher->getVoucherExpiredDate(), 'jS F Y, g:i A');
- $customerName = $voucher->getCustomerName() ? $voucher->getCustomerName() : $voucher->getFirstname() . ' ' . $voucher->getLastname();
- $productName = $voucher->getProductName();
- $sku = $voucher->getSku();
- $productId = $voucher->getProductId();
- $providerId = $voucher->getProviderId();
- $redeemDate = '';//data dr mana - cipto
- $reverseDate = '';//data dr mana - cipto
- $voucherTransaction = $this->_voucherHelper->getTransactionHistory($voucherId);
- if ($voucherTransaction->count()){
- foreach ($voucherTransaction as $transaction){
- $status = $transaction->getStatus(); // 0 Reverse 1 Redeem
- $timestamp = $transaction->getTimestamp();
- if ($status==0){
- if ($reverseDate=='' || ($reverseDate<$timestamp)){
- $reverseDate = $timestamp;
- }
- }else if ($status==1){
- if ($redeemDate=='' || ($redeemDate<$timestamp)){
- $redeemDate = $timestamp;
- }
- }
- }
- }
- $isExpired= $this->_voucherHelper->isExpiredVoucher($voucherId);
- if (!$isExpired){
- $isRedeemAvailable = $this->_voucherHelper->isRedeemAvailable($voucherId);
- if ($isRedeemAvailable){
- $voucherStatus='Open';
- }else {
- $voucherStatus='Redeemed';
- }
- }else {
- $voucherStatus='Expired';
- }
- $redemptionPoint = $this->_voucherHelper->getRedemptionLocation($voucherId);
- $resultStatus = true;
- $resultData = array(
- 'err_number' => '',
- 'voucher_code' => $voucherCode,
- 'status' => $voucherStatus,
- 'provider' => $voucherProvider,
- 'redemption_start' => $voucherCreated,
- 'redemption_end' => $voucherExpiry,
- 'redemption_point' => $redemptionPoint,
- 'customer_name' => $customerName,
- 'product_name' => $productName,
- 'sku' => $sku,
- 'product_id' => $productId,
- 'redeem_date' => $redeemDate,
- 'reverse_date' => $reverseDate
- );
- }
- }
- return [$resultStatus, $resultData];
- }
- /**
- * @param $timestamp
- * @param $format
- * @return string
- */
- public function getLocaleDate($timestamp, $format){
- return $this->_timezoneInterface->date($timestamp)->format($format);
- }
- /**
- * get error message
- *
- * @param $errNumber
- * @return \Magento\Framework\Phrase
- */
- private function errorMessage($errNumber){
- if($errNumber == 1){
- $message = __('Invalid PIN');
- }elseif($errNumber == 2){
- $message = __('Voucher Not Found');
- }elseif($errNumber == 3){
- $message = __('Voucher cannot be redeemed');
- }elseif($errNumber == 4){
- $message = __('Voucher cannot be reversed');
- }else{
- $message = __('Unknown Error');
- }
- return $message;
- }
- /**
- * get activity log
- *
- * @param $providerId
- * @param $actionStatus
- * @return array
- */
- public function getTransactionHistory($providerId, $actionStatus){
- $transactionHistory = $this->_voucherHelper->getProviderTransactionHistory($providerId, $actionStatus);
- $logs = array();
- $i = 0;
- if(count($transactionHistory)){
- foreach ($transactionHistory as $history) {
- if($i == 10){ // only get 10 records
- break;
- }
- $transactionTimestamp = $this->getLocaleDate($history->getTimestamp(), 'jS F Y, g:i A');
- $performedBy = $history->getPerformedBy();
- $voucherCode = $history->getVoucherCode();
- $providerName = $history->getProviderName();
- $productId = $history->getProductId();
- $productName = $history->getProductName();
- $voucherTransactionId = $history->getRlogId(); //data dr mana - cipto
- $voucherId = $history->getVoucherId(); //data dr mana - cipto
- $createdOn = $history->getTimestamp(); //data dr mana - cipto
- $transactionStatus = $history->getStatus();
- if ($transactionStatus == 0){
- $transactionStatus = __('Reverse');
- $resultantStatus = __('Reversed');
- } else if ($transactionStatus == 1){
- $transactionStatus = __('Redeem');
- $resultantStatus = __('Redeemed');
- } else {
- $transactionStatus = __('Renew');
- $resultantStatus = __('Renewed');
- }
- $transactionType = $resultantStatus;
- $logs[] = array(
- 'voucher_transaction_id' => $voucherTransactionId,
- 'voucher_id' => $voucherId,
- 'voucher_code' => $voucherCode,
- 'provider_id' => $providerId,
- 'provider_name' => $providerName,
- 'product_id' => $productId,
- 'product_name' => $productName,
- 'transaction_type' => $transactionType,
- 'created_on' => $createdOn
- // 'action' => $transactionStatus,
- // 'timestamp' => $transactionTimestamp,
- // 'performed_by' => $performedBy,
- // 'resultant_status' => $resultantStatus
- );
- $i++;
- }
- }
- return $logs;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement