• Модуль: voximplant
  • Путь к файлу: ~/bitrix/modules/voximplant/classes/general/vi_main.php
  • Класс: CVoxImplantMain
  • Вызов: CVoxImplantMain::GetTelephonyStatistic
static function GetTelephonyStatistic()
{
	$arMonthlyStat = COption::GetOptionString("voximplant", "telephony_statistic", "");
	if ($arMonthlyStat)
	{
		$arMonthlyStat = unserialize($arMonthlyStat, ['allowed_classes' => false]);
	}

	if(!$arMonthlyStat)
	{
		$arMonthlyStat = array();
	}

	$lastUncountedMonth = COption::GetOptionString("voximplant", "telephony_statistic_last_month", "");  //last month which wasn't counted
	if ($lastUncountedMonth)
	{
		$lastUncountedMonth = unserialize($lastUncountedMonth, ['allowed_classes' => false]);
	}
	else
	{
		$lastUncountedMonth = Array();
	}

	$curLastMonth = array();
	$curLastMonth["MM"] = date("m");
	$curLastMonth["YYYY"] = date("Y");

	if (date("m") != $lastUncountedMonth["MM"] || date("Y") != $lastUncountedMonth["YYYY"])  //current month is not last month which wasn't counted
	{
		$firstDayCurMonth = ConvertTimeStamp(MakeTimeStamp("01.".date("m").".".date("Y"), "DD.MM.YYYY"));

		if (!empty($lastUncountedMonth))
		{
			$firstUncountedDay = ConvertTimeStamp(MakeTimeStamp("01.".$lastUncountedMonth["MM"].".".$lastUncountedMonth["YYYY"], "DD.MM.YYYY"));
			$arFilter = array(
				array(
					'LOGIC' => 'AND',
					'>CALL_START_DATE' => $firstUncountedDay,
					' $firstDayCurMonth
				)
			);
		}
		else
		{
			$arFilter = array(
				array(
					'LOGIC' => 'AND',
					'>CALL_START_DATE' => ConvertTimeStamp(MakeTimeStamp("04.02.2014", "DD.MM.YYYY")), // correct start date for counting statistics
					' $firstDayCurMonth
				)
			);
		}

		$arFilter['CALL_CATEGORY'] = 'external';

		$parameters = array(
			'order' => array('CALL_START_DATE'=>'DESC'),
			'filter' => $arFilter,
			'select' => array('COST', 'COST_CURRENCY', 'CALL_DURATION', 'CALL_START_DATE'),
		);
		$dbStat = VIStatisticTable::getList($parameters);

		$curPortalCurrency = "";

		while($arData = $dbStat->fetch())
		{
			$arData["COST_CURRENCY"] = ($arData["COST_CURRENCY"] == "RUR" ? "RUB" : $arData["COST_CURRENCY"]);

			if (!$curPortalCurrency)
				$curPortalCurrency = $arData["COST_CURRENCY"];

			$arDateParse = ParseDateTime($arData["CALL_START_DATE"]);
			$arMonthlyStat[$arDateParse["YYYY"]][$arDateParse["MM"]]["CALL_DURATION"] += $arData["CALL_DURATION"];

			$arMonthlyStat[$arDateParse["YYYY"]][$arDateParse["MM"]]["COST"] += $arData["COST"];
	//		$arMonthlyStat[$arDateParse["YYYY"]][$arDateParse["MM"]]["COST"] = number_format($arMonthlyStat[$arDateParse["YYYY"]][$arDateParse["MM"]]["COST"], 4);
			$arMonthlyStat[$arDateParse["YYYY"]][$arDateParse["MM"]]["COST_CURRENCY"] = $curPortalCurrency;
		}

		if (!empty($arMonthlyStat))
		{
			krsort ($arMonthlyStat);
			foreach($arMonthlyStat as $year => $arYear)
			{
				krsort ($arYear);
				$arMonthlyStat[$year] = $arYear;
			}

			COption::SetOptionString("voximplant", "telephony_statistic", serialize($arMonthlyStat));
			COption::SetOptionString("voximplant", "telephony_statistic_last_month", serialize($curLastMonth));
		}
	}

	return $arMonthlyStat;
}