Example #1
0
 /**
  * Функция проверки статуса оплаченности этапа сделки.
  * 
  * @param array $ids    ИД этапов
  * @param int   $cntIn  Количество обрабатываемых запросов
  * @param int   $cntOut Количество обработанных запросов
  *
  * @return bool
  */
 public static function checkStagePayouts($ids = array(), &$cntIn = 0, &$cntOut = 0)
 {
     $db = new DB('master');
     $sql = 'SELECT sp.*, ss.sbr_id, ss.num, pl.lc_id, u.role, s.emp_id, s.frl_id, pl.state as lc_state 
             FROM sbr_stages_payouts sp 
             INNER JOIN sbr_stages ss ON ss.id = sp.stage_id
             INNER JOIN sbr s ON s.id = ss.sbr_id
             INNER JOIN pskb_lc pl ON pl.sbr_id = s.id
             INNER JOIN users u ON u.uid = sp.user_id';
     if ($ids) {
         $sql .= ' WHERE sp.stage_id IN (?l)';
         $data = $db->rows($sql, $ids);
     } else {
         $sql .= " WHERE s.scheme_type = ?i \n                        AND sp.state = 'trans' \n                        AND ( sp.completed IS NULL OR (requested > NOW() - '" . self::PERIOD_BANK_CHECK . "'::interval AND credit_sys = ?i) )";
         $data = $db->rows($sql, sbr::SCHEME_LC, exrates::BANK);
     }
     if (!$data) {
         return false;
     }
     $cntIn = count($data);
     $list = array();
     foreach ($data as $lsrow) {
         $list[] = intval($lsrow['lc_id']);
     }
     $pskb = new self();
     $resp = $pskb->_checks(json_encode(array('id' => $list)));
     foreach ($data as $row) {
         if (self::PSKB_SUPERCHECK) {
             $pskb_lc = $pskb->getSuperCheckLocal($row['lc_id'], sbr_stages::getOuterNum($row['sbr_id'], $row['num']), is_emp($row['role']) ? false : true);
         } else {
             $pskb_lc = $pskb->_historyLC($row['lc_id'], sbr_stages::getOuterNum($row['sbr_id'], $row['num']), is_emp($row['role']) ? false : true);
         }
         if (!$pskb_lc->id) {
             continue;
         }
         if ($pskb_lc->state == $row['state']) {
             continue;
         }
         // Если выплата уже прошла но они не обновили статус сделки в checks -- тогда спрашиваем еще раз позже в ПСКБ
         if (!isset($resp[$row['lc_id']])) {
             continue;
         }
         $lc = $resp[$row['lc_id']];
         if (!$lc->id || $lc->state == $row['lc_state']) {
             continue;
         }
         switch ($pskb_lc->state) {
             case self::PAYOUT_END:
                 // отправлено по реквизитам
             // отправлено по реквизитам
             case self::PAYOUT_ERR:
                 // зачислено в ВК
                 // выплачено
                 $sbr = new sbr($row['emp_id']);
                 $stage = $sbr->getStage($row['stage_id']);
                 $stage->getArbitrage(false, false);
                 if ($stage->arbitrage && $stage->arbitrage['resolved']) {
                     $emp_percent = abs(sbr::EMP - $stage->arbitrage['frl_percent']);
                     $frl_percent = abs(sbr::FRL - $stage->arbitrage['frl_percent']);
                 } else {
                     $frl_percent = 1;
                 }
                 $frl_payout = true;
                 $emp_payout = true;
                 if ($frl_percent > 0) {
                     $frl_payout = !$stage->payoutAgnt($row['frl_id'], new self($stage->sbr->data['id']), $pskb_lc);
                 }
                 if ($emp_percent > 0) {
                     $emp_payout = !$stage->payoutAgnt($row['emp_id'], new self($stage->sbr->data['id']), $pskb_lc);
                 }
                 if (!$frl_payout && !$emp_payout) {
                     continue;
                 }
                 break;
         }
         switch ($lc->state) {
             case self::STATE_COVER:
             case self::STATE_END:
                 if ($lc->state == self::STATE_END) {
                     $up_data['ended'] = $pskb_lc->date;
                 }
                 break;
             case self::STATE_ERR:
                 break;
             default:
                 continue;
         }
         $up_data['state'] = $lc->state;
         $up_data['stateReason'] = $lc->stateReason;
         $pskb->upLC($up_data, $row['lc_id']);
         ++$cntOut;
     }
 }