Exemplo n.º 1
0
 /**
  * Проверяет обновления аккредитивов в статусах form|new.
  * Если статус изменился на cover, отмечает резерв в соответствующей сделке
  * 
  * @param type $cntIn       
  * @param type $cntOut
  * @return boolean
  */
 public static function checkStatus($ids = array(), &$cntIn = 0, &$cntOut = 0)
 {
     $db = new DB('master');
     $sql = "SELECT lc.*, s.emp_id, s.frl_id FROM pskb_lc lc\n                INNER JOIN sbr s ON s.id = lc.sbr_id AND s.is_draft = false\n                WHERE lc_id IS NOT NULL AND state IN ('form', 'new')";
     if ($ids) {
         $sql .= " AND lc_id IN (?l) ";
         $data = $db->rows($sql, $ids);
     } else {
         $data = $db->rows($sql);
     }
     if (!$data) {
         return false;
     }
     $cntIn = count($data);
     $list = array();
     foreach ($data as $row) {
         $list[] = intval($row['lc_id']);
     }
     $pskb = new pskb();
     $resp = $pskb->_checks(json_encode(array('id' => $list)));
     foreach ($data as $row) {
         if (!$row['lc_id'] || !isset($resp[$row['lc_id']])) {
             continue;
         }
         $lc = $resp[$row['lc_id']];
         if ($lc->state == $row['state']) {
             continue;
         }
         $up_data = array('state' => $lc->state, 'stateReason' => $lc->stateReason);
         switch ($lc->state) {
             case self::STATE_NEW:
                 // справедливо только для статуса form
                 if ($row['state'] != pskb::STATE_FORM) {
                     continue;
                 }
                 require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/smail.php';
                 $smail = new smail();
                 $smail->SbrReservedMoney($row['sbr_id'], $row['emp_id']);
                 $up_data['created'] = 'NOW()';
                 break;
             case self::STATE_COVER:
                 // покрыть можно только из статуса new
                 if ($row['state'] != pskb::STATE_NEW) {
                     continue;
                 }
                 $time = time();
                 $date = date('c', $time);
                 $descr = "ПСКБ аккредитив #{$row['lc_id']};" . " платежная cистема пользователя #{$row['ps_emp']}: сумма оплаты {$row['sum']} руб.;" . " обработан {$date}";
                 $account = new account();
                 $account->GetInfo($row['emp_id'], true);
                 $ammount = $row['sum'];
                 $op_code = sbr::OP_RESERVE;
                 $amm = 0;
                 $descr .= ' СбР #' . $row['sbr_id'];
                 $error = $account->deposit($op_id, $account->id, $amm, $descr, onlinedengi::PAYMENT_SYS, $ammount, $op_code, $row['sbr_id']);
                 $up_data['covered'] = 'NOW()';
                 break;
             case self::STATE_EXP_COVER:
             case self::STATE_EXP_EXEC:
             case self::STATE_EXP_END:
                 break;
             case self::STATE_END:
                 break;
             case self::STATE_ERR:
                 $up_data['dol_is_failed'] = null;
                 break;
             default:
                 continue;
         }
         if (!$error) {
             $db->update('pskb_lc', $up_data, 'lc_id = ?', $row['lc_id']);
         }
         $cntOut++;
     }
     // отметить резерв
     return true;
 }