コード例 #1
0
ファイル: pskb.php プロジェクト: uadev/fl-ru-damp
 /**
  * Функция проверки статуса оплаченности этапа сделки
  * 
  * @param array     $ids     ИД этапов
  * @param integer   $cntIn   Количество обрабатываемых запросов
  * @param integer   $cntOut  Количество обработанных запросов
  * @return boolean 
  */
 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 \n                FROM sbr_stages_payouts sp \n                INNER JOIN sbr_stages ss ON ss.id = sp.stage_id\n                INNER JOIN sbr s ON s.id = ss.sbr_id\n                INNER JOIN pskb_lc pl ON pl.sbr_id = s.id\n                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 pskb();
     $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 pskb($stage->sbr->data['id']), $pskb_lc);
                 }
                 if ($emp_percent > 0) {
                     $emp_payout = !$stage->payoutAgnt($row['emp_id'], new pskb($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++;
     }
 }