...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/classes/general/crm_quote.php
- Класс: \CAllCrmQuote
- Вызов: CAllCrmQuote::GetNextQuoteNumber
static function GetNextQuoteNumber($ID, $templateType, $param) { global $DB; $value = false; switch ($templateType) { case 'NUMBER': $param = intval($param); $maxLastID = 0; $strSql = ''; switch($DB->type) { case "MYSQL": $strSql = "SELECT ID, QUOTE_NUMBER FROM b_crm_quote WHERE QUOTE_NUMBER IS NOT NULL ORDER BY ID DESC LIMIT 1"; break; case "ORACLE": $strSql = "SELECT ID, QUOTE_NUMBER FROM b_crm_quote WHERE QUOTE_NUMBER IS NOT NULL AND ROWNUM <= 1 ORDER BY ID DESC"; break; case "MSSQL": $strSql = "SELECT TOP 1 ID, QUOTE_NUMBER FROM b_crm_quote WHERE QUOTE_NUMBER IS NOT NULL ORDER BY ID DESC"; break; } $dbres = $DB->Query($strSql, true); if ($arRes = $dbres->GetNext()) { if (mb_strlen($arRes["QUOTE_NUMBER"]) === mb_strlen(intval($arRes["QUOTE_NUMBER"]))) $maxLastID = intval($arRes["QUOTE_NUMBER"]); } $value = ($maxLastID >= $param) ? $maxLastID + 1 : $param; break; case 'PREFIX': $value = $param.$ID; break; case 'RANDOM': $rand = randString(intval($param), array("ABCDEFGHIJKLNMOPQRSTUVWXYZ", "0123456789")); $dbres = $DB->Query("SELECT ID, QUOTE_NUMBER FROM b_crm_quote WHERE QUOTE_NUMBER = '".$rand."'", true); $value = ($arRes = $dbres->GetNext()) ? false : $rand; break; case 'USER': $dbres = $DB->Query("SELECT ASSIGNED_BY_ID FROM b_crm_quote WHERE ID = '".$ID."'", true); if ($arRes = $dbres->GetNext()) { $userID = intval($arRes["ASSIGNED_BY_ID"]); $strSql = ''; switch($DB->type) { case "MYSQL": $strSql = "SELECT MAX(CAST(SUBSTRING(QUOTE_NUMBER, LENGTH('".$userID."_') + 1) as UNSIGNED)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$userID."\_%'"; break; case "ORACLE": $strSql = "SELECT MAX(CAST(SUBSTR(QUOTE_NUMBER, LENGTH('".$userID."_') + 1) as NUMBER)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$userID."_%'"; break; case "MSSQL": $strSql = "SELECT MAX(CAST(SUBSTRING(QUOTE_NUMBER, LEN('".$userID."_') + 1, LEN(QUOTE_NUMBER)) as INT)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$userID."_%'"; break; } $dbres = $DB->Query($strSql, true); if ($arRes = $dbres->GetNext()) { $numID = (intval($arRes["NUM_ID"]) > 0) ? $arRes["NUM_ID"] + 1 : 1; $value = $userID."_".$numID; } else $value = $userID."_1"; } else $value = false; break; case 'DATE': $date = ''; switch ($param) { // date in the site format but without delimeters case 'day': $date = date($DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")), mktime(0, 0, 0, date("m"), date("d"), date("Y"))); $date = preg_replace("/[^0-9]/", "", $date); break; case 'month': $date = date($DB->DateFormatToPHP(str_replace("DD", "", CSite::GetDateFormat("SHORT"))), mktime(0, 0, 0, date("m"), date("d"), date("Y"))); $date = preg_replace("/[^0-9]/", "", $date); break; case 'year': $date = date('Y'); break; } $strSql = ''; switch($DB->type) { case "MYSQL": $strSql = "SELECT MAX(CAST(SUBSTRING(QUOTE_NUMBER, LENGTH('".$date." / ') + 1) as UNSIGNED)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$date." / %'"; break; case "ORACLE": $strSql = "SELECT MAX(CAST(SUBSTR(QUOTE_NUMBER, LENGTH('".$date." / ') + 1) as NUMBER)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$date." / %'"; break; case "MSSQL": $strSql = "SELECT MAX(CAST(SUBSTRING(QUOTE_NUMBER, LEN('".$date." / ') + 1, LEN(QUOTE_NUMBER)) as INT)) as NUM_ID FROM b_crm_quote WHERE QUOTE_NUMBER LIKE '".$date." / %'"; break; } $dbres = $DB->Query($strSql, true); if ($arRes = $dbres->GetNext()) { $numID = (intval($arRes["NUM_ID"]) > 0) ? $arRes["NUM_ID"] + 1 : 1; $value = $date." / ".$numID; } else $value = $date." / 1"; break; default: // if unknown template $value = false; break; } return $value; }