Здравствуйте.
Подскажите, пожалуйста, есть ли в данной реализации кода что-то похожее на нормальную реализацию.
Есть 4 таблицы - Indicator(показатели), Indicator_type(название показателей), Calendar(месяцы), Tarrifs(тарифы).
Модели для этих таблиц созданы через Gii.
Необходимо узнать разницу данных между показателями текущего и прошлого месяцев, умножить эту разницу на тариф, и вывести название месяца и название показателя.
В SiteController.php создал actionTally
public function actionTally()
{
// предыдущий месяц
$prevMonth = intval(date("n") - 1) . date("y");
// текущий месяц
$currentMonth = intval(date("n") . date("y"));
// данные предыдущего месяца
$data = Indicator::model()->findAll('month_id=:month_id', array(':month_id' => $prevMonth));
// данные текущего месяца
$model = Indicator::model()->findAll('month_id=:month_id', array(':month_id' => $currentMonth));
// название показателей
$indicators = IndicatorType::model()->findAll();
// тарифы
$tarrifs = Tarrifs::model()->findAll();
// месяц
$calendar = Calendar::model()->findAll('keyMonth=:keyMonth', array(':keyMonth' => $currentMonth));
// название месяца
foreach ($calendar as $vlCalendar) {
$monthly = $vlCalendar->monthly;
}
// текущий месяц
foreach ($model as $type) {
$current[] = $type->value;
}
// прошлый месяц
foreach ($data as $datas) {
$preview[] = $datas->value;
}
// показатели
foreach ($indicators as $vli) {
$indicator[] = $vli->indicator;
}
// тарифы
foreach ($tarrifs as $tarif) {
$unit[] = $tarif->unit;
$amount[] = $tarif->amount;
}
$this->render('tally', array(
'current' => $current,
'preview' => $preview,
'indicator' => $indicator,
'tarrifs' => $tarrifs,
'unit' => $unit,
'amount' => $amount,
'monthly' => $monthly,
));
}
А в виде выводил так:
<?php
/**
* Подсчёт данных
*
* @var $this SiteController
*/
?>
<h1> Подсчёт данных за <?php echo $monthly; ?> </h1>
<div class="form">
<?php
for ($tally = 0; $tally < 4; $tally++) {
// разница
$number = $current[$tally] - $preview[$tally];
// массив всех значений
$total[] = $number * $amount[$tally];
// вывод данных
echo $indicator[$tally] . ' - ' . $number . ' ' . $unit[$tally] . ' = <b>' . round($number * $amount[$tally]) . '</b> рублей <br/>';
}
// общая сумма
$sum = array_sum($total);
?>
<br/>
Приблизительная сумма по счётчика = <b> <?php echo round($sum); ?> </b> рублей
</div>
Всё выводится как я задумывал, но вот хочется узнать как переписать данный говнокод по-нормальному.
Заранее спасибо.