nik_neman
@nik_neman
php-junior

Как сделать реализацию по-нормальному?

Здравствуйте.
Подскажите, пожалуйста, есть ли в данной реализации кода что-то похожее на нормальную реализацию.
Есть 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>

Всё выводится как я задумывал, но вот хочется узнать как переписать данный говнокод по-нормальному.
Заранее спасибо.
  • Вопрос задан
  • 2268 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Вы предлагаете сделать за Вас работу? Здесь вопросы задают, а не просят "до ума" довести.
К тому же не понятна структура таблицы. Вместо пояснения, что Tarrifs это "тарифы", указали бы тип данных и являются ли они уникальными.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы