Advertisement
Guest User

Untitled

a guest
Dec 12th, 2017
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.31 KB | None | 0 0
  1. <?php
  2. /**
  3. * Copyright ? 2017 Kemana, Inc. All rights reserved.
  4. */
  5.  
  6. namespace Kemana\Vouchers\Model;
  7.  
  8.  
  9. /**
  10. * Class Vouchers
  11. * @package Kemana\Vouchers\Model
  12. */
  13. class Vouchers implements \Kemana\Vouchers\Api\VouchersInterface
  14. {
  15. const TRANS_REVERSE_STATUS = 0;
  16. const TRANS_REDEEM_STATUS = 1;
  17.  
  18. protected $_vendorModel;
  19. /**
  20. * @var \Kemana\Vouchers\Helper\Data
  21. */
  22. protected $_voucherHelper;
  23. protected $_timezoneInterface;
  24.  
  25. /**
  26. * Vouchers constructor.
  27. * @param APIHelper $APIHelper
  28. */
  29. public function __construct(
  30. \Magento\Framework\View\Element\Template\Context $context,
  31. \Ced\CsMarketplace\Model\Vendor $vendorModel,
  32. \Kemana\Vouchers\Helper\Data $voucherHelper
  33. )
  34. {
  35. $this->_vendorModel = $vendorModel;
  36. $this->_voucherHelper = $voucherHelper;
  37. $this->_timezoneInterface = $context->getLocaleDate();
  38. }
  39.  
  40.  
  41. /**
  42. * Get Voucher detail data
  43. *
  44. * @param string $voucherCode
  45. * @return array
  46. * @throws \Magento\Framework\Exception\LocalizedException
  47. */
  48. public function details($voucherCode){
  49. $isValid = false;
  50. $errNumber = 0;
  51. $resultData = array();
  52.  
  53. //get voucher detail
  54. list($resultStatus, $resultData) = $this->getVoucherDetail($voucherCode);
  55.  
  56. if($resultStatus){
  57. $isValid = true;
  58. }else{
  59. $isValid = false;
  60. $errNumber = 2;
  61. }
  62.  
  63. //return results
  64. if($isValid){
  65. $voucherCode = $resultData['voucher_code'];
  66. $status = $resultData['status'];
  67. $provider = $resultData['provider'];
  68. $redemptionStart = $resultData['redemption_start'];
  69. $redemptionEnd = $resultData['redemption_end'];
  70. $redemptionPoint = $resultData['redemption_point'];
  71. $customerName = $resultData['customer_name'];
  72. $productName = $resultData['product_name'];
  73. $sku = $resultData['sku'];
  74. $productId = $resultData['product_id'];
  75. $redeemDate = $resultData['redeem_date'];
  76. $reverseDate = $resultData['reverse_date'];
  77.  
  78. $results= array(
  79. 'voucher_code' => $voucherCode,
  80. 'voucher_owner' => $customerName,
  81. 'voucher_status' => $status,
  82. 'item_name' => $productName,
  83. 'provider_product_key' => $sku,
  84. 'cxa_product_key' => $productId,
  85. 'provider_name' => $provider,
  86. 'redemption_start_on' => $redemptionStart,
  87. 'redemption_ends_on' => $redemptionEnd,
  88. 'redeemed_on' => $redeemDate,
  89. 'reversed_on' => $reverseDate,
  90. 'redemption_location' => $redemptionPoint,
  91. );
  92.  
  93. }else{
  94. $message = $this->errorMessage($errNumber);
  95. $parameters = array('voucherCode' => $voucherCode);
  96.  
  97. $status = 'fail';
  98. $results= array(
  99. 'status' => $status,
  100. 'message' => $message,
  101. 'parameters' => $parameters
  102. );
  103. }
  104.  
  105. return json_encode($results);
  106. }
  107.  
  108.  
  109. /**
  110. * Redeem Voucher
  111. *
  112. * @param string $voucherCode
  113. * @param string $pin
  114. * @return array
  115. * @throws \Magento\Framework\Exception\LocalizedException
  116. */
  117. public function redeem($voucherCode, $pin){
  118. $isValid = false;
  119. $errNumber = 0;
  120.  
  121. //check PIN
  122. $isValidAccess = $this->checkPIN($pin);
  123.  
  124. if($isValidAccess){
  125. //redeem voucher process
  126. list($resultStatus, $resultData) = $this->redeemVoucher($voucherCode, $pin);
  127. $resultData['additonal_data']=$resultData;
  128. if($resultStatus){
  129. $isValid = true;
  130. $transactionHistory = $resultData['transaction_history'];
  131. }else{
  132. $isValid = false;
  133. $errNumber = $resultData['err_number'];
  134. }
  135. }else{
  136. $isValid = false;
  137. $errNumber = 1;
  138. }
  139.  
  140.  
  141. //return results
  142. if($isValid){
  143. $status = 'succcess';
  144. $message = __('Voucher Successfully Redeemed');
  145. $results= array(
  146. 'status' => $status,
  147. 'message' => $message,
  148. 'transaction_history' => $transactionHistory,
  149. );
  150. }else{
  151. $message = $this->errorMessage($errNumber);
  152. $parameters = array('voucherCode' => $voucherCode, 'pin' => $pin);
  153.  
  154. $status = 'fail';
  155. $results= array(
  156. 'status' => $status,
  157. 'message' => $message,
  158. 'parameters' => $parameters
  159. );
  160. }
  161.  
  162. return json_encode($results);
  163. }
  164.  
  165.  
  166. /**
  167. * Reverse Voucher
  168. *
  169. * @param string $voucherCode
  170. * @param string $pin
  171. * @return array
  172. * @throws \Magento\Framework\Exception\LocalizedException
  173. */
  174. public function reverse($voucherCode, $pin){
  175. $isValid = false;
  176. $errNumber = 0;
  177.  
  178. //check PIN
  179. $isValidAccess = $this->checkPIN($pin);
  180.  
  181. if($isValidAccess){
  182. //reverse voucher process
  183. list($resultStatus, $resultData) = $this->reverseVoucher($voucherCode, $pin);
  184.  
  185. if($resultStatus){
  186. $isValid = true;
  187. $transactionHistory = $resultData['transaction_history'];
  188. }else{
  189. $isValid = false;
  190. $errNumber = $resultData['err_number'];
  191. }
  192. }else{
  193. $isValid = false;
  194. $errNumber = 1;
  195. }
  196.  
  197.  
  198. //return results
  199. if($isValid){
  200. $status = 'succcess';
  201. $message = __('Voucher Successfully Reversed');
  202. $results= array(
  203. 'status' => $status,
  204. 'message' => $message,
  205. 'transaction_history' => $transactionHistory,
  206. );
  207. }else{
  208. $message = $this->errorMessage($errNumber);
  209. $parameters = array('voucherCode' => $voucherCode, 'pin' => $pin);
  210.  
  211. $status = 'fail';
  212. $results= array(
  213. 'status' => $status,
  214. 'message' => $message,
  215. 'parameters' => $parameters
  216. );
  217. }
  218.  
  219. return json_encode($results);
  220. }
  221.  
  222.  
  223. /**
  224. * Check PIN
  225. *
  226. * @param $pin
  227. * @return bool
  228. */
  229. private function checkPIN($pin){
  230. $resultStatus = false;
  231. if ($pin){
  232. $providerCollection = $this->_vendorModel->getCollection()
  233. ->addAttributeToSelect('entity_id')
  234. ->addAttributeToSelect('name')
  235. ->addAttributeToFilter('pin',array('eq' => $pin));
  236. if ($providerCollection->count()){
  237. $resultStatus = true;
  238. }
  239. }
  240. return $resultStatus;
  241. }
  242.  
  243.  
  244. /**
  245. * logic to reverse voucher
  246. *
  247. * @param $voucherCode
  248. * @param $pin
  249. * @return array
  250. */
  251. private function reverseVoucher($voucherCode, $pin){
  252. $resultStatus = false;
  253. $resultData = array(
  254. 'err_number' => 2,
  255. 'additonal_data' => ''
  256. );
  257.  
  258. $voucher=$this->_voucherHelper->getPublicVoucher($voucherCode,$pin);
  259. if($voucher){
  260. if ($voucher->getId()){
  261. $voucherId = $voucher->getId();
  262. $voucherCode = $voucher->getVoucherCode();
  263. $providerId = $voucher->getProviderId();
  264. $provider = $this->_vendorModel->load($providerId);
  265. if ($provider->getId()){
  266. $providerName = $provider->getName();
  267. $reverseStatus=$this->_voucherHelper->reverseVoucher($voucherCode,$providerName,$providerId);
  268. if ($reverseStatus){
  269. $transactionHistory = $this->getTransactionHistory($providerId, self::TRANS_REVERSE_STATUS);
  270.  
  271. $resultStatus = true;
  272. $resultData = array('transaction_history' => $transactionHistory);
  273. }else {
  274. $resultData['err_number'] = 4;
  275. }
  276. }
  277. }
  278. }
  279.  
  280. return [$resultStatus, $resultData];
  281. }
  282.  
  283.  
  284. /**
  285. * logic to redeem voucher
  286. *
  287. * @param $voucherCode
  288. * @param $pin
  289. * @return array
  290. */
  291. private function redeemVoucher($voucherCode, $pin){
  292. $resultStatus = false;
  293. $resultData = array(
  294. 'err_number' => 2,
  295. 'additonal_data' => ''
  296. );
  297.  
  298. $voucher=$this->_voucherHelper->getPublicVoucher($voucherCode,$pin);
  299. if($voucher){
  300. if ($voucher->getId()){
  301. $voucherCode = $voucher->getVoucherCode();
  302. $providerId = $voucher->getProviderId();
  303. $provider = $this->_vendorModel->load($providerId);
  304. if ($provider->getId()){
  305. $providerName = $provider->getName();
  306. $redeemStatus=$this->_voucherHelper->redeemVoucher($voucherCode,$providerName,$providerId);
  307. if ($redeemStatus){
  308. $transactionHistory = $this->getTransactionHistory($providerId, self::TRANS_REDEEM_STATUS);
  309.  
  310. $resultStatus = true;
  311. $resultData = array('transaction_history' => $transactionHistory);
  312. }else {
  313. $resultData['err_number'] = 3;
  314. }
  315. }
  316. }
  317. }
  318.  
  319.  
  320. return [$resultStatus, $resultData];
  321. }
  322.  
  323.  
  324. /**
  325. * get voucher detail
  326. *
  327. * @param $voucherCode
  328. * @return array
  329. */
  330. private function getVoucherDetail($voucherCode){
  331. $resultStatus = false;
  332. $resultData = array(
  333. 'err_number' => 2
  334. );
  335.  
  336. $voucher=$this->_voucherHelper->getVoucher($voucherCode);
  337.  
  338. if($voucher){
  339. if ($voucher->getId()){
  340. $voucherId = $voucher->getId();
  341. $voucherCode = $voucher->getVoucherCode();
  342. $voucherProvider = $voucher->getProviderName();
  343. $voucherCreated = $this->getLocaleDate($voucher->getVoucherCreatedDate(), 'jS F Y, g:i A');
  344. $voucherExpiry = $this->getLocaleDate($voucher->getVoucherExpiredDate(), 'jS F Y, g:i A');
  345. $customerName = $voucher->getCustomerName() ? $voucher->getCustomerName() : $voucher->getFirstname() . ' ' . $voucher->getLastname();
  346. $productName = $voucher->getProductName();
  347. $sku = $voucher->getSku();
  348. $productId = $voucher->getProductId();
  349. $providerId = $voucher->getProviderId();
  350. $redeemDate = '';//data dr mana - cipto
  351. $reverseDate = '';//data dr mana - cipto
  352.  
  353. $voucherTransaction = $this->_voucherHelper->getTransactionHistory($voucherId);
  354. if ($voucherTransaction->count()){
  355. foreach ($voucherTransaction as $transaction){
  356. $status = $transaction->getStatus(); // 0 Reverse 1 Redeem
  357. $timestamp = $transaction->getTimestamp();
  358. if ($status==0){
  359. if ($reverseDate=='' || ($reverseDate<$timestamp)){
  360. $reverseDate = $timestamp;
  361. }
  362. }else if ($status==1){
  363. if ($redeemDate=='' || ($redeemDate<$timestamp)){
  364. $redeemDate = $timestamp;
  365. }
  366. }
  367. }
  368. }
  369.  
  370. $isExpired= $this->_voucherHelper->isExpiredVoucher($voucherId);
  371. if (!$isExpired){
  372. $isRedeemAvailable = $this->_voucherHelper->isRedeemAvailable($voucherId);
  373. if ($isRedeemAvailable){
  374. $voucherStatus='Open';
  375. }else {
  376. $voucherStatus='Redeemed';
  377. }
  378. }else {
  379. $voucherStatus='Expired';
  380. }
  381. $redemptionPoint = $this->_voucherHelper->getRedemptionLocation($voucherId);
  382.  
  383. $resultStatus = true;
  384. $resultData = array(
  385. 'err_number' => '',
  386. 'voucher_code' => $voucherCode,
  387. 'status' => $voucherStatus,
  388. 'provider' => $voucherProvider,
  389. 'redemption_start' => $voucherCreated,
  390. 'redemption_end' => $voucherExpiry,
  391. 'redemption_point' => $redemptionPoint,
  392. 'customer_name' => $customerName,
  393. 'product_name' => $productName,
  394. 'sku' => $sku,
  395. 'product_id' => $productId,
  396. 'redeem_date' => $redeemDate,
  397. 'reverse_date' => $reverseDate
  398. );
  399. }
  400. }
  401.  
  402. return [$resultStatus, $resultData];
  403. }
  404.  
  405.  
  406. /**
  407. * @param $timestamp
  408. * @param $format
  409. * @return string
  410. */
  411. public function getLocaleDate($timestamp, $format){
  412. return $this->_timezoneInterface->date($timestamp)->format($format);
  413. }
  414.  
  415. /**
  416. * get error message
  417. *
  418. * @param $errNumber
  419. * @return \Magento\Framework\Phrase
  420. */
  421. private function errorMessage($errNumber){
  422.  
  423. if($errNumber == 1){
  424. $message = __('Invalid PIN');
  425. }elseif($errNumber == 2){
  426. $message = __('Voucher Not Found');
  427. }elseif($errNumber == 3){
  428. $message = __('Voucher cannot be redeemed');
  429. }elseif($errNumber == 4){
  430. $message = __('Voucher cannot be reversed');
  431. }else{
  432. $message = __('Unknown Error');
  433. }
  434.  
  435. return $message;
  436. }
  437.  
  438.  
  439. /**
  440. * get activity log
  441. *
  442. * @param $providerId
  443. * @param $actionStatus
  444. * @return array
  445. */
  446. public function getTransactionHistory($providerId, $actionStatus){
  447. $transactionHistory = $this->_voucherHelper->getProviderTransactionHistory($providerId, $actionStatus);
  448.  
  449. $logs = array();
  450. $i = 0;
  451. if(count($transactionHistory)){
  452. foreach ($transactionHistory as $history) {
  453.  
  454. if($i == 10){ // only get 10 records
  455. break;
  456. }
  457.  
  458. $transactionTimestamp = $this->getLocaleDate($history->getTimestamp(), 'jS F Y, g:i A');
  459. $performedBy = $history->getPerformedBy();
  460. $voucherCode = $history->getVoucherCode();
  461. $providerName = $history->getProviderName();
  462. $productId = $history->getProductId();
  463. $productName = $history->getProductName();
  464. $voucherTransactionId = $history->getRlogId(); //data dr mana - cipto
  465. $voucherId = $history->getVoucherId(); //data dr mana - cipto
  466. $createdOn = $history->getTimestamp(); //data dr mana - cipto
  467.  
  468. $transactionStatus = $history->getStatus();
  469. if ($transactionStatus == 0){
  470. $transactionStatus = __('Reverse');
  471. $resultantStatus = __('Reversed');
  472. } else if ($transactionStatus == 1){
  473. $transactionStatus = __('Redeem');
  474. $resultantStatus = __('Redeemed');
  475. } else {
  476. $transactionStatus = __('Renew');
  477. $resultantStatus = __('Renewed');
  478. }
  479. $transactionType = $resultantStatus;
  480.  
  481. $logs[] = array(
  482. 'voucher_transaction_id' => $voucherTransactionId,
  483. 'voucher_id' => $voucherId,
  484. 'voucher_code' => $voucherCode,
  485. 'provider_id' => $providerId,
  486. 'provider_name' => $providerName,
  487. 'product_id' => $productId,
  488. 'product_name' => $productName,
  489. 'transaction_type' => $transactionType,
  490. 'created_on' => $createdOn
  491.  
  492. // 'action' => $transactionStatus,
  493. // 'timestamp' => $transactionTimestamp,
  494. // 'performed_by' => $performedBy,
  495. // 'resultant_status' => $resultantStatus
  496. );
  497. $i++;
  498. }
  499. }
  500.  
  501. return $logs;
  502. }
  503.  
  504. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement