public function search() { $criteria = new CDbCriteria(); $criteria->compare('id', $this->id); $criteria->compare('payerLastName', $this->lastName, true); $criteria->compare('payerFirstName', $this->firstName, true); $criteria->compare('CONCAT(phoneOperatorCode, phoneNumber)', $this->phoneNumber, true); $criteria->order = 'id DESC'; $criteria->join = 'INNER JOIN {{payout_deposition}} pd ON pd.payoutTaskId = t.id'; $criteria->distinct = true; return new CActiveDataProvider(PayoutTask::model(), array('criteria' => $criteria)); }
/** * Returns the data model based on the primary key given in the GET variable. * If the data model is not found, an HTTP exception will be raised. * @param integer $id the ID of the model to be loaded * @return Service the loaded model * @throws CHttpException */ public function loadModel($id) { $model = PayoutTask::model()->findByPk($id); if ($model === null) { throw new CHttpException(404, 'The requested page does not exist.'); } return $model; }
public function actionIndex() { $waitedCriteria = new CDbCriteria(); $waitedCriteria->addCondition('status = \'' . PayoutTask::STATUS_WAIT . '\''); $count = PayoutTask::model()->count($waitedCriteria); if ($count > 0) { $settings = new \YandexMoney\Settings(); $settings->host = Yii::app()->params['yandexPayout']['host']; $settings->cert = Yii::app()->params['yandexPayout']['cert']; $settings->certPassword = Yii::app()->params['yandexPayout']['certPassword']; $settings->privateKey = Yii::app()->params['yandexPayout']['privateKey']; $settings->yaCert = Yii::app()->params['yandexPayout']['yaCert']; $provider = new PKCS7RequestProvider($settings); $api = new PayoutAPI($provider, Yii::app()->params['yandexPayout']['cardSynonimUrl']); /** * @var PayoutTask $task */ while ($task = PayoutTask::model()->findByAttributes(array('status' => PayoutTask::STATUS_WAIT))) { try { $task->status = PayoutTask::STATUS_IN_PROGRESS; $task->save(); $csv = file_get_contents($task->filePath); $inputEncoding = mb_detect_encoding($csv, mb_detect_order(), true); if ($inputEncoding === false) { $csv = iconv('Windows-1251', "UTF-8", $csv); } $depositionLines = explode(PHP_EOL, trim($csv, PHP_EOL)); $depositionLines = array_map(function ($x) { return str_getcsv($x); }, $depositionLines); foreach ($depositionLines as $line) { $deposition = new PayoutDeposition(); $deposition->payoutTaskId = $task->id; $deposition->currency = Yii::app()->params['yandexPayout']['currency']; $deposition->clientOrderId = $this->getNextClientOrderId(); if ($task->type == PayoutTask::TYPE_MOBILE) { $deposition->type = PayoutDeposition::TYPE_MOBILE; $deposition->dstAccount = DepositionRequestParams::getAccountByMobileOperator($line[0]); $deposition->phoneOperatorCode = substr($line[1], 0, 3); $deposition->phoneNumber = substr($line[1], 3); $deposition->amount = floatval($line[2]); } elseif ($task->type == PayoutTask::TYPE_BANK_CARD) { $deposition->type = PayoutDeposition::TYPE_BANK_CARD; $deposition->dstAccount = Yii::app()->params['yandexPayout']['cardDstAccount']; //получить синоним и маску $synonimRes = $api->getCardSynonim(preg_replace('/\\s/', '', $line[0])); if ($synonimRes != null) { $deposition->cardSynonim = $synonimRes['skr_destinationCardSynonim']; $deposition->cardMask = $synonimRes['skr_destinationCardPanmask']; } $deposition->amount = floatval($line[1]); $deposition->payerLastName = trim($line[2]); $deposition->payerFirstName = trim($line[3]); $deposition->payerMiddleName = trim($line[4]); $deposition->payerBirthDate = date('Y-m-d', strtotime(trim($line[5]))); $deposition->payerBirthPlace = trim($line[6]); $deposition->payerCountry = 643; $deposition->payerPostcode = trim($line[7]); $deposition->payerCity = trim($line[8]); $deposition->payerAddress = trim($line[9]); $deposition->payerDocNumber = trim($line[10]); $deposition->payerDocIssueDate = date('Y-m-d', strtotime(trim($line[11]))); $deposition->payerDocIssuedBy = trim($line[12]); $deposition->smsPhoneNumber = trim($line[13]); } if (!$deposition->save()) { throw new Exception("Not valid CSV string: " . print_r($line, 1)); } } $task->refresh(); foreach ($task->payoutDepositions as $deposition) { $deposition = $this->processDeposition($api, $task, $deposition); } } catch (Exception $e) { $task->status = PayoutTask::STATUS_FAILED; $task->save(); throw $e; } $this->updateTaskStatus($task); unlink($task->filePath); $task->filePath = null; $task->fileSize = null; $task->fileType = null; $task->save(); } } }