protected function getDetailForm($affiliateFields, $model, $request = null, $validationResult = null) { //add widget_form_error js to affiliate_detail page add_action('admin_footer', array($this, 'onFooter')); $db = new WPAM_Data_DataAccess(); $response = new WPAM_Pages_TemplateResponse('admin/affiliate_detail'); $response->viewData['affiliateFields'] = $affiliateFields; $response->viewData['affiliate'] = $model; $where = array('affiliateId' => $model->affiliateId); $affiliateHelper = new WPAM_Util_AffiliateFormHelper(); $affiliateHelper->addTransactionDateRange($where, $request, $response); $response->viewData['transactions'] = $db->getTransactionRepository()->loadMultipleBy($where, array('dateCreated' => 'desc')); $response->viewData['showBalance'] = true; $response->viewData['paymentMethods'] = $affiliateHelper->getPaymentMethods(); $response->viewData['paymentMethod'] = isset($request['ddPaymentMethod']) ? $request['ddPaymentMethod'] : $model->paymentMethod; $response->viewData['paypalEmail'] = isset($request['txtPaypalEmail']) ? $request['txtPaypalEmail'] : $model->paypalEmail; $response->viewData['bountyType'] = isset($request['ddBountyType']) ? $request['ddBountyType'] : $model->bountyType; $response->viewData['bountyAmount'] = isset($request['txtBountyAmount']) ? $request['txtBountyAmount'] : $model->bountyAmount; $this->addBalance($response->viewData['transactions'], $db->getTransactionRepository()->getBalance($model->affiliateId, empty($request['from']) ? NULL : $request['from']), 'desc'); $accountStanding = $db->getTransactionRepository()->getAccountSummary($model->affiliateId); $response->viewData['accountStanding'] = $accountStanding->standing; $response->viewData['accountCredits'] = $accountStanding->credits; $response->viewData['accountDebits'] = $accountStanding->debits; $response->viewData['accountAdjustments'] = $accountStanding->adjustments; $response->viewData['user'] = new WP_User($model->userId); if ($request !== null) { $response->viewData['request'] = $request; } if ($validationResult !== null) { //die(print_r($validationResult, true)); $response->viewData['validationResult'] = $validationResult; } $response->viewData['affiliateFields'] = $affiliateFields; $response->viewData['creatives'] = $db->getCreativesRepository()->loadAllActiveNoDeletes(); if (get_option(WPAM_PluginConfig::$AffEnableImpressions)) { $where = array('sourceAffiliateId' => $model->affiliateId); $response->viewData['impressions'] = $db->getImpressionRepository()->loadMultipleByLimit($where, array('dateCreated' => 'desc'), 100); $creativeNames = array(); foreach ($response->viewData['impressions'] as $impression) { if (!array_key_exists($impression->sourceCreativeId, $creativeNames)) { $creativeNames[$impression->sourceCreativeId] = $db->getCreativesRepository()->load($impression->sourceCreativeId)->name; } } $response->viewData['creativeNames'] = $creativeNames; $where = array('sourceAffiliateId' => $model->affiliateId); $response->viewData['impressionCount'] = $db->getImpressionRepository()->count($where); } //$summary = $db->getEventRepository()->getSummary ( $model->affiliateId ); $args = array(); $args['aff_id'] = $model->affiliateId; $total_clicks = WPAM_Click_Tracking::get_all_time_total_clicks($args); $total_transaction_count = WPAM_Commission_Tracking::get_all_time_transaction_count($args); $response->viewData['visitCount'] = $total_clicks; //$summary->visits; $response->viewData['purchaseCount'] = $total_transaction_count; //$summary->purchases; //save for form validation in the footer $this->response = $response; return $response; }
protected function doPayments($request, $affiliate) { $response = new WPAM_Pages_TemplateResponse('affiliate_cp_transactions'); $where = array('affiliateId' => $affiliate->affiliateId, 'type' => array('!=', 'credit')); $affiliateHelper = new WPAM_Util_AffiliateFormHelper(); $affiliateHelper->addTransactionDateRange($where, $request, $response); $db = new WPAM_Data_DataAccess(); $response->viewData['transactions'] = $db->getTransactionRepository()->loadMultipleBy($where, array('dateCreated' => 'desc')); return $response; }
public function addTransaction($affiliateId, $type, $amount, $description = NULL) { if (!wp_get_current_user()->has_cap(WPAM_PluginConfig::$AdminCap)) { throw new Exception(__('Access denied.', 'affiliates-manager')); } if (!in_array($type, array('credit', 'payout', 'adjustment'))) { throw new Exception(__('Invalid transaction type.', 'affiliates-manager')); } if (!is_numeric($amount)) { throw new Exception(__('Invalid value for amount.', 'affiliates-manager')); } $db = new WPAM_Data_DataAccess(); if (!$db->getAffiliateRepository()->exists($affiliateId)) { throw new Exception(__('Invalid affiliate', 'affiliates-manager')); } $transaction = new WPAM_Data_Models_TransactionModel(); $transaction->type = $type; $transaction->affiliateId = $affiliateId; $transaction->amount = $amount; $transaction->dateCreated = time(); $transaction->description = $description; $db->getTransactionRepository()->insert($transaction); return new JsonResponse(JsonResponse::STATUS_OK); }
private function processSubmitToPaypalRequest($request) { $options = new WPAM_Options(); $db = new WPAM_Data_DataAccess(); $aff_db = $db->getAffiliateRepository(); $tr_db = $db->getTransactionRepository(); $paypalService = new WPAM_PayPal_Service($options->getPaypalAPIEndPointURL(), $options->getPaypalAPIUser(), $options->getPaypalAPIPassword(), $options->getPaypalAPISignature()); $massPayRequest = new WPAM_PayPal_MassPayRequest(WPAM_PayPal_MassPayRequest::RECEIVERTYPE_EMAIL_ADDRESS, __('Affiliate Payment', 'affiliates-manager')); $transactions = array(); $amount = '0.00'; $fee = '0.00'; $totalAmount = '0.00'; foreach ($request['affiliates'] as $affiliateArray) { $affiliateModel = $aff_db->load($affiliateArray['id']); if ($affiliateModel === NULL) { throw new Exception(__('Affiliate not found', 'affiliates-manager')); } if ($affiliateModel->paymentMethod !== 'paypal') { throw new Exception(__('Payment method for affiliate is not PayPal', 'affiliates-manager')); } $paymentTransaction = new WPAM_Data_Models_TransactionModel(); $paymentTransaction->affiliateId = $affiliateModel->affiliateId; $paymentTransaction->amount = bcmul($affiliateArray['amount'], -1, 2); $paymentTransaction->dateCreated = time(); $paymentTransaction->dateModified = time(); $paymentTransaction->description = __('Payout via PayPal Mass Pay', 'affiliates-manager'); $paymentTransaction->status = WPAM_Data_Models_TransactionModel::STATUS_PENDING; $paymentTransaction->type = WPAM_Data_Models_TransactionModel::TYPE_PAYOUT; $transactionId = $tr_db->insert($paymentTransaction); $transactions[] = array('transactionId' => $transactionId); $massPayRequest->addRecipient($affiliateModel->paypalEmail, $affiliateArray['amount'], $transactionId); $amount = bcadd($amount, $affiliateArray['amount'], 2); if ($amount * 0.02 > 1.0) { $fee += 1.0; } else { $fee = bcadd($fee, bcmul($affiliateArray['amount'], '0.02', 2), 2); } } $totalAmount = $amount + $fee; $ppResponse = $paypalService->doMassPay($massPayRequest); $ppLogModel = new WPAM_Data_Models_PaypalLogModel(); $ppLogModel->ack = $ppResponse->getAck(); $ppLogModel->build = $ppResponse->getBuild(); $ppLogModel->correlationId = $ppResponse->getCorrelationId(); $ppLogModel->dateOccurred = time(); $ppLogModel->errors = $ppResponse->getErrors(); $ppLogModel->responseTimestamp = $ppResponse->getTimestamp(); $ppLogModel->version = $ppResponse->getVersion(); $ppLogModel->rawResponse = $ppResponse->getRawResponse(); $ppLogModel->status = $ppResponse->IsFailure() ? 'failed' : 'pending'; $ppLogModel->amount = $amount; $ppLogModel->totalAmount = $totalAmount; $ppLogModel->fee = $fee; $ppLogId = $db->getPaypalLogRepository()->insert($ppLogModel); if ($ppResponse->IsFailure()) { foreach ($transactions as $transaction) { $tr_db->delete(array('transactionId' => $transaction['transactionId'])); } return new WPAM_Pages_TemplateResponse('admin/paypalpayments/masspay_failed', array('response' => $ppResponse)); } foreach ($transactions as $transaction) { $dbtr = $tr_db->load($transaction['transactionId']); $dbtr->referenceId = $ppResponse->getCorrelationId(); $tr_db->update($dbtr); } $response = new WPAM_Pages_TemplateResponse('admin/paypalpayments/masspay_submitted', array('response' => $ppResponse, 'ppLogId' => $ppLogId)); return $response; }
public function handleCheckoutWithRefKey($purchaseLogId, $purchaseAmount, $strRefKey) { $db = new WPAM_Data_DataAccess(); $binConverter = new WPAM_Util_BinConverter(); $affiliate = NULL; // keeping this block and "($affiliate !== NULL)" seperate to // help indicate any problems // (purchase log recorded w/o a purchase event) if (!empty($strRefKey)) { $trackingToken = $db->getTrackingTokenRepository()->loadBy(array('trackingKey' => $strRefKey)); if ($trackingToken !== NULL) { $ttpl = $db->getTrackingTokenPurchaseLogRepository()->loadBy(array('trackingTokenId' => $trackingToken->trackingTokenId, 'purchaseLogId' => $purchaseLogId)); if ($ttpl === NULL) { $trackingTokenPurchaseLog = new WPAM_Data_Models_TrackingTokenPurchaseLogModel(); $trackingTokenPurchaseLog->trackingTokenId = $trackingToken->trackingTokenId; $trackingTokenPurchaseLog->purchaseLogId = $purchaseLogId; $db->getTrackingTokenPurchaseLogRepository()->insert($trackingTokenPurchaseLog); //this will be handled further down if the affiliate is set and the purchase was successful //$db->getEventRepository()->quickInsert(time(), $strRefKey, 'purchase'); } } } $affiliate = $db->getAffiliateRepository()->loadByPurchaseLogId($purchaseLogId); if ($affiliate !== NULL && $affiliate->isActive()) { if ($strRefKey) { $db->getEventRepository()->quickInsert(time(), $binConverter->stringToBin($strRefKey), 'purchase'); } $creditAmount = $this->calculateCreditAmount($affiliate, $purchaseAmount); $creditAmount = apply_filters('wpam_credit_amount', $creditAmount, $purchaseAmount, $purchaseLogId); $currency = WPAM_MoneyHelper::getCurrencyCode(); $description = "Credit for sale of {$purchaseAmount} {$currency} (PURCHASE LOG ID = {$purchaseLogId})"; $existingCredit = $db->getTransactionRepository()->loadBy(array('referenceId' => $purchaseLogId)); if ($existingCredit === NULL) { $credit = new WPAM_Data_Models_TransactionModel(); $credit->dateCreated = time(); $credit->referenceId = $purchaseLogId; $credit->affiliateId = $affiliate->affiliateId; $credit->type = 'credit'; $credit->description = $description; $credit->amount = $creditAmount; $db->getTransactionRepository()->insert($credit); } else { $existingCredit->dateModified = time(); $existingCredit->description = $description; $existingCredit->amount = $creditAmount; $db->getTransactionRepository()->update($existingCredit); } } }