示例#1
0
 protected function addCalculations($file_config)
 {
     $station_id = $file_config['station']['station_id'];
     $this->stations[$station_id];
     foreach ($file_config['station_calculation'] as $calc) {
         $calc_main_handler_db = CalculationDBHandler::model()->findByAttributes(array('handler_id_code' => $calc['handler']));
         $calculation_db = new StationCalculation();
         $calculation_db->station_id = $station_id;
         $calculation_db->handler_id = $calc_main_handler_db->handler_id;
         $calculation_db->formula = $calc['formula'] ? $calc['formula'] : 'default';
         $calculation_db->save(false);
         foreach ($this->sensors_for_calcs[$calc['handler']][$station_id] as $sensor) {
             $calc_variables = new StationCalculationVariable();
             $station_sensor_features = $sensor->features();
             foreach ($station_sensor_features as $s_feature) {
                 if (is_object($s_feature)) {
                     if ($s_feature->is_main) {
                         $calc_variables->sensor_feature_id = $s_feature->sensor_feature_id;
                         $calc_variables->variable_name = $s_feature->feature_code;
                         $calc_variables->calculation_id = $calculation_db->getPrimaryKey();
                         $calc_variables->save(false);
                     }
                 }
             }
         }
     }
 }
示例#2
0
 public function actionCalculationSave()
 {
     $station_id = intval($_REQUEST['station_id']);
     if (!$station_id) {
         $this->redirect($this->createUrl('admin/Stations'));
     }
     $handler_id = intval($_REQUEST['handler_id']);
     if (!$handler_id) {
         $this->redirect($this->createUrl('admin/Sensors', array('station_id' => $station_id)));
     }
     $station = Station::model()->findByPk($station_id);
     $handler_db = CalculationDBHandler::model()->findByPk($handler_id);
     if (!$station || !$handler_db) {
         $this->redirect($this->createUrl('admin/Sensors', array('station_id' => $station_id)));
     }
     $handler = CalculationHandler::create($handler_db->handler_id_code);
     $measurements = $handler->getMeasurements();
     $formulas = $handler->getFormulas();
     $calculation_db = StationCalculation::model()->find('handler_id = :handler_id AND station_id = :station_id', array(':handler_id' => $handler_db->handler_id, ':station_id' => $station->station_id));
     if (!$calculation_db) {
         $calculation_db = new StationCalculation();
         $calculation_db->station_id = $station->station_id;
         $calculation_db->handler_id = $handler_db->handler_id;
         $calculation_db->formula = $formulas ? $formulas[0] : 'default';
     }
     if ($calculation_db->calculation_id) {
         foreach ($measurements as $key => $value) {
             $measurements[$key]['object'] = StationCalculationVariable::model()->find('calculation_id = :calculation_id AND variable_name = :variable_name', array(':calculation_id' => $calculation_db->calculation_id, ':variable_name' => $value['variable_name']));
         }
     }
     foreach ($measurements as $key => $value) {
         if (!$measurements[$key]['object']->calculation_variable_id) {
             $measurements[$key]['object'] = new StationCalculationVariable();
             $measurements[$key]['object']->variable_name = $value['variable_name'];
         }
     }
     if ($measurements) {
         $sql = "SELECT t2.sensor_id_code, t1.sensor_feature_id\n                    FROM `" . StationSensorFeature::model()->tableName() . "` t1\n                    LEFT JOIN `" . StationSensor::model()->tableName() . "` t2 ON t2.station_sensor_id = t1.sensor_id\n                    WHERE t2.station_id = ? AND  t1.feature_code = ?\n                    ORDER BY t2.sensor_id_code";
         foreach ($measurements as $key => $value) {
             $measurements[$key]['sensors'] = Yii::app()->db->createCommand($sql)->queryAll(true, array($station->station_id, $value['variable_name']));
         }
     }
     $formulas_act = array();
     if ($formulas) {
         foreach ($formulas as $key => $value) {
             $formulas_act[$value] = $value;
         }
     }
     $validated = true;
     if (Yii::app()->request->isPostRequest) {
         $calculation_db->attributes = $_POST['StationCalculation'];
         foreach ($measurements as $key => $value) {
             $measurements[$key]['object']->sensor_feature_id = $_POST['StationCalculationVariable'][$key]['sensor_feature_id'];
             if ($measurements[$key]['required'] == 1 && !$measurements[$key]['object']->sensor_feature_id) {
                 $measurements[$key]['object']->addError('sensor_feature_id', $measurements[$key]['display_name'] . ' is required.');
                 $validated = false;
             }
             if ($measurements[$key]['required'] == 0 && $_POST['StationCalculationVariable'][$key]['sensor_feature_id'] == 0) {
                 if (is_object($measurements[$key]['object']) && !$measurements[$key]['object']->isNewRecord) {
                     $measurements[$key]['object']->delete();
                 }
                 unset($measurements[$key]);
             }
         }
         $validated = $validated & $calculation_db->validate();
         if ($validated) {
             $calculation_db->save();
             foreach ($measurements as $key => $value) {
                 $measurements[$key]['object']->calculation_id = $calculation_db->calculation_id;
                 $measurements[$key]['object']->save();
             }
             It::memStatus('admin_station_calculation_saved');
             $this->redirect($this->createUrl('admin/sensors', array('station_id' => $station->station_id)));
         }
     }
     $this->render('station_calculation', array('station' => $station, 'handler_db' => $handler_db, 'measurements' => $measurements, 'formulas' => $formulas_act, 'calculation_db' => $calculation_db));
 }