コード例 #1
0
ファイル: obj.action_catalog.php プロジェクト: r3-gis/EcoGIS
 /**
  * Ajax request to submit data
  * @param array $request   the request
  * @return array           ajax format status
  */
 public function submitFormData($request)
 {
     $errors = array();
     $db = ezcDbInstance::get();
     $request = array_merge(array('ac_object_id' => null, 'gc_id' => null), $request);
     $request['wo_id'] = null;
     $request['ac_id'] = $request['id'];
     if (isset($request['mu_name'])) {
         $request['mu_id'] = R3EcoGisHelper::getMunicipalityIdByName($this->do_id, $request['mu_name'], $this->auth->getParam('mu_id'));
     }
     if ($this->act != 'del') {
         $request['ac_green_electricity_purchase'] = forceFloat($request['ac_green_electricity_purchase_mwh'], null, '.') * 1000;
         // Convert MWh to kWh
         $request['ac_co2_reduction'] = forceFloat($request['ac_co2_reduction_tco2'], null, '.') * 1000;
         // Convert tCO2 to kCO2
         $tmpGesIdConsumption = array();
         $tmpEsIdConsumption = array();
         $tmpUdmIdConsumption = array();
         $tmpAcExpectedEnergySaving = array();
         $tmpAcExpectedEnergySavingMwh = array();
         for ($i = 0; $i < count($request['es_id_consumption']); $i++) {
             if ($request['udm_id_consumption'][$i] != '' || $request['ac_expected_energy_saving'][$i] != '') {
                 $tmpGesIdConsumption[] = $request['ges_id_consumption'][$i];
                 $tmpEsIdConsumption[] = $request['es_id_consumption'][$i];
                 $tmpUdmIdConsumption[] = $request['udm_id_consumption'][$i];
                 $tmpAcExpectedEnergySaving[] = $request['ac_expected_energy_saving'][$i];
                 $tmpAcExpectedEnergySavingMwh[] = $request['ac_expected_energy_saving_mwh'][$i];
             }
         }
         $request['ges_id_consumption'] = $tmpGesIdConsumption;
         $request['es_id_consumption'] = $tmpEsIdConsumption;
         $request['udm_id_consumption'] = $tmpUdmIdConsumption;
         $request['ac_expected_energy_saving'] = $tmpAcExpectedEnergySaving;
         $request['ac_expected_energy_saving_mwh'] = $tmpAcExpectedEnergySavingMwh;
         $request['esu_id_consumption'] = R3EcoGisHelper::getMultipleEnergySourceUdmID($_SESSION['do_id'], $request['es_id_consumption'], $request['udm_id_consumption'], $request['mu_id']);
         $request['esu_id_production'] = R3EcoGisHelper::getEnergySourceUdmID($_SESSION['do_id'], $request['es_id_production'], $request['udm_id_production'], $request['mu_id'], true);
         $request['emo_id'] = self::getEnergyMeterObjectByID($request['mu_id'], $request['ac_object_id'], $request['gc_id']);
         if (isset($request['mu_name']) && $request['mu_name'] != '' && $request['mu_id'] == '') {
             $errors['mu_name'] = array('CUSTOM_ERROR' => _('Il comune immesso non è stato trovato'));
         }
         if (!isset($request['gc_id_parent']) || $request['gc_id_parent'] == '') {
             $errors['gc_id_parent'] = array('CUSTOM_ERROR' => _('Il campo "Macro-settore" è obbligatorio'));
         }
         $errors = $this->checkFormData($request, $errors);
         $selectedRelatedActions = array();
         if (isset($request['related_required_action_id'])) {
             for ($i = 0; $i < count($request['related_required_action_id']); $i++) {
                 if ($request['related_required_action_id'][$i] > 0 && in_array($request['related_required_action_id'][$i], $selectedRelatedActions)) {
                     $errors['related_required_action_' . $i] = array('CUSTOM_ERROR' => _("L'azione ") . $this->getActionName($request['related_required_action_id'][$i]) . _(" è già stata selezionata"));
                 }
                 array_push($selectedRelatedActions, $request['related_required_action_id'][$i]);
             }
         }
         if (isset($request['related_action_id'])) {
             for ($i = 0; $i < count($request['related_action_id']); $i++) {
                 if ($request['related_action_id'][$i] > 0 && in_array($request['related_action_id'][$i], $selectedRelatedActions)) {
                     $errors['related_action_' . $i] = array('CUSTOM_ERROR' => _("L'azione ") . $this->getActionName($request['related_action_id'][$i]) . _(" è già stata selezionata"));
                 }
                 array_push($selectedRelatedActions, $request['related_action_id'][$i]);
             }
         }
         if (isset($request['related_excluded_action_id'])) {
             for ($i = 0; $i < count($request['related_excluded_action_id']); $i++) {
                 if ($request['related_excluded_action_id'][$i] > 0 && in_array($request['related_excluded_action_id'][$i], $selectedRelatedActions)) {
                     $errors['related_required_action_' . $i] = array('CUSTOM_ERROR' => _("L'azione ") . $this->getActionName($request['related_excluded_action_id'][$i]) . _(" è già stata selezionata"));
                 }
                 array_push($selectedRelatedActions, $request['related_excluded_action_id'][$i]);
             }
         }
         if (isset($request['enable_benefit_year']) && $request['enable_benefit_year'] == 'T' && isset($request['benefit_year'])) {
             $startBenefitYear = (int) substr($request['ac_benefit_start_date'], 0, 4);
             $endBenefitYear = (int) substr($request['ac_benefit_end_date'], 0, 4);
             $lastBenefitPerc = 0;
             for ($i = 0; $i < count($request['benefit_year']); $i++) {
                 if ($request['benefit_year'][$i] != '' && $request['benefit_year'][$i] < $startBenefitYear) {
                     $errors['benefit_year_' . $i] = array('CUSTOM_ERROR' => sprintf(_("L'anno del beneficio \"%s\" è antecedente al %s (anno inizio beneficio)"), $request['benefit_year'][$i], $startBenefitYear));
                 } else {
                     if ($request['benefit_year'][$i] != '' && $request['benefit_year'][$i] > $endBenefitYear) {
                         $errors['benefit_year_' . $i] = array('CUSTOM_ERROR' => sprintf(_("L'anno del beneficio \"%s\" è oltre al %s (anno fine beneficio)"), $request['benefit_year'][$i], $endBenefitYear));
                     }
                 }
                 if ($request['benefit_benefit'][$i] != '' && $request['benefit_benefit'][$i] < 0 || $request['benefit_benefit'][$i] != '' && $request['benefit_benefit'][$i] > 100) {
                     $errors['benefit_benefit_' . $i] = array('CUSTOM_ERROR' => _("Il valore del beneficio deve essere compreso tra 0 e 100"));
                 }
             }
         }
     }
     if (count($errors) > 0) {
         return $this->getAjaxErrorResult($errors);
     } else {
         setLocale(LC_ALL, 'C');
         $db->beginTransaction();
         $id = $this->applyData($request);
         $sql = "DELETE FROM ecogis.action_catalog_energy WHERE ac_id=" . $db->quote($id, PDO::PARAM_INT);
         $db->exec($sql);
         if ($this->act != 'del') {
             for ($i = 0; $i < count($request['esu_id_consumption']); $i++) {
                 $sql = "INSERT INTO ecogis.action_catalog_energy  (ac_id, esu_id, ace_expected_energy_saving) " . " VALUES (" . $db->quote($id, PDO::PARAM_INT) . ", " . $db->quote($request['esu_id_consumption'][$i], PDO::PARAM_INT) . ", " . $db->quote($request['ac_expected_energy_saving'][$i], PDO::PARAM_INT) . ")";
                 $db->exec($sql);
             }
         }
         $sql = "DELETE FROM ecogis.action_catalog_dependencies WHERE ac_id=" . $db->quote($id, PDO::PARAM_INT);
         $db->exec($sql);
         if ($this->act != 'del') {
             $relatedActions = array();
             if (isset($request['related_action_id'])) {
                 for ($i = 0; $i < count($request['related_action_id']); $i++) {
                     array_push($relatedActions, array('related_action_id' => $request['related_action_id'][$i], 'acd_required' => 'D'));
                 }
             }
             if (isset($request['related_required_action_id'])) {
                 for ($i = 0; $i < count($request['related_required_action_id']); $i++) {
                     array_push($relatedActions, array('related_action_id' => $request['related_required_action_id'][$i], 'acd_required' => 'R'));
                 }
             }
             if (isset($request['related_excluded_action_id'])) {
                 for ($i = 0; $i < count($request['related_excluded_action_id']); $i++) {
                     array_push($relatedActions, array('related_action_id' => $request['related_excluded_action_id'][$i], 'acd_required' => 'E'));
                 }
             }
             foreach ($relatedActions as $relatedAction) {
                 $sql = "INSERT INTO ecogis.action_catalog_dependencies  (ac_id, ac_related_id, acd_type) " . " VALUES (" . $db->quote($id, PDO::PARAM_INT) . ", " . $db->quote($relatedAction['related_action_id'], PDO::PARAM_INT) . ", " . $db->quote($relatedAction['acd_required'], PDO::PARAM_BOOL) . ")";
                 if ($relatedAction['related_action_id'] > 0) {
                     $db->exec($sql);
                 }
             }
         }
         $sql = "DELETE FROM ecogis.action_catalog_benefit_year WHERE ac_id=" . $db->quote($id);
         $db->exec($sql);
         if ($this->act != 'del') {
             if (isset($request['enable_benefit_year']) && $request['enable_benefit_year'] == 'T') {
                 for ($i = 0; $i < count($request['benefit_year']); $i++) {
                     $year = forceInteger($request['benefit_year'][$i]);
                     $benefit = forceFloat($request['benefit_benefit'][$i], null, '.');
                     if ($year > 1970 && $request['benefit_benefit'][$i] != '') {
                         $sql = "INSERT INTO ecogis.action_catalog_benefit_year  (ac_id, acby_year, acby_benefit) " . "VALUES ({$id}, {$year}, {$benefit})";
                         $db->exec($sql);
                     }
                 }
             }
         }
         $db->commit();
         R3EcoGisCacheHelper::resetMapPreviewCache(null);
         R3EcoGisEventNotifier::notifyDataChanged($this, array('data_changed' => true));
         if ($this->bu_id == '') {
             return array('status' => R3_AJAX_NO_ERROR, 'js' => "submitFormDataDoneActionCatalog({$id})");
         } else {
             return array('status' => R3_AJAX_NO_ERROR, 'js' => "submitFormDataDoneActionCatalogFromBuilding({$id})");
         }
     }
 }
コード例 #2
0
ファイル: obj.meter.php プロジェクト: r3-gis/EcoGIS
 /**
  * Ajax request to submit data
  * @param array $request   the request
  * @return array           ajax format status
  */
 public function submitFormData($request)
 {
     $errors = array();
     $data = R3EcoGisHelper::getBuildingData($this->bu_id);
     $this->mu_id = $data['mu_id'];
     $request = array_merge(array('us_id' => ''), $request);
     $request['em_id'] = forceInteger($request['id'], 0, false, '.');
     if ($this->act != 'del') {
         // Change required fields
         if ($request['em_is_production'] == 'T') {
             $request['up_id'] = null;
             $this->setFieldAttrib('esu_id', array('required' => true));
         } else {
             if ($request['us_id'] == '') {
                 $this->setFieldAttrib('esu_id', array('required' => true));
             } else {
                 $this->setFieldAttrib('up_id', array('required' => true));
             }
         }
         if ($request['us_id'] == '') {
             $request['esu_id'] = R3EcoGisHelper::getEnergySourceUdmID($this->do_id, $request['es_id'], $request['udm_id'], $this->mu_id);
         } else {
             $request['esu_id'] = '';
         }
         $request['emo_id'] = R3EcoGisHelper::getEnergyMeterObjectIdByCode('BUILDING');
         $request['em_object_id'] = $request['bu_id'];
         $errors = $this->checkFormData($request);
     }
     if (count($errors) > 0) {
         return $this->getAjaxErrorResult($errors);
     } else {
         $id = $this->applyData($request);
         R3EcoGisEventNotifier::notifyDataChanged($this, array('data_changed' => true));
         return array('status' => R3_AJAX_NO_ERROR, 'js' => "submitFormDataDoneMeter({$id})");
     }
 }
コード例 #3
0
 public function submitFormData($request)
 {
     $errors = array();
     $db = ezcDbInstance::get();
     setLocale(LC_ALL, 'C');
     setLangInfo(array('thousands_sep' => "."));
     $request['gs_id'] = forceInteger($request['id'], 0, false, '.');
     if ($this->act == 'mod') {
         $sql = "SELECT ge_id, gc_id FROM global_subcategory WHERE gs_id={$request['gs_id']}";
         list($request['ge_id'], $request['gc_id']) = $db->query($sql)->fetch(PDO::FETCH_NUM);
     }
     if ($this->act != 'del') {
         $errors = $this->checkFormData($request, $request['kind']);
     }
     if (count($errors) > 0) {
         return $this->getAjaxErrorResult($errors);
     } else {
         $db->beginTransaction();
         // Remove consumption
         $em_list = $this->getEnergyMeterList($request['gs_id']);
         if (count($em_list) > 0) {
             $sql = "DELETE FROM consumption WHERE em_id IN (" . implode(', ', $em_list) . ")";
             // Remove consumption
             $db->exec($sql);
             $sql = "DELETE FROM energy_meter WHERE em_id IN (" . implode(', ', $em_list) . ")";
             // Remove energy_meter
             $db->exec($sql);
         }
         $sql = "DELETE FROM global_data WHERE gs_id=" . $request['gs_id'];
         $db->exec($sql);
         if ($this->act == 'del') {
             $sql = "DELETE FROM global_subcategory WHERE gs_id=" . $request['gs_id'];
             $db->exec($sql);
         } else {
             if (isset($request['gs_tot_value'])) {
                 $request['gs_tot_value'] = $request['gs_tot_value'] * 1000;
             }
             if (isset($request['gs_tot_production_value'])) {
                 $request['gs_tot_production_value'] = $request['gs_tot_production_value'] * 1000;
             }
             if (isset($request['gs_tot_emission_value'])) {
                 $request['gs_tot_emission_value'] = $request['gs_tot_emission_value'] * 1000;
             }
             if (isset($request['gs_tot_emission_factor'])) {
                 $request['gs_tot_emission_factor'] = $request['gs_tot_emission_factor'] * 1000;
             }
             $id = $this->applyData($request);
             $geData = $db->query("SELECT mu_id, ge_year FROM global_entry WHERE ge_id={$request['ge_id']}")->fetch(PDO::FETCH_ASSOC);
             $year = $geData['ge_year'];
             $mu_id = $geData['mu_id'];
             $totalOnly = $db->query("SELECT gc_total_only FROM global_category WHERE gc_id=" . (int) $request['gc_id'])->fetchColumn() == true;
             if (!$totalOnly) {
                 foreach ($request['ges_id_consumption'] as $key => $value) {
                     if (empty($request['ac_expected_energy_saving'][$key])) {
                         continue;
                     }
                     $ges_id = $this->getGlobalEnergySource($request['es_id_consumption'][$key], $request['udm_id_consumption'][$key]);
                     if (empty($ges_id)) {
                         throw new Exception("getGlobalEnergySource(" . $request['es_id_consumption'][$key] . ', ' . $request['udm_id_consumption'][$key] . ") key={$key} faild");
                     }
                     $sql = "INSERT INTO global_data (ges_id, gs_id) VALUES ({$ges_id}, {$id})";
                     $db->exec($sql);
                     $gd_id = $db->lastInsertId('global_data_gd_id_seq');
                     $esu_id = R3EcoGisHelper::getEnergySourceUdmID($this->do_id, $request['es_id_consumption'][$key], $request['udm_id_consumption'][$key], $mu_id, false);
                     if (!empty($esu_id)) {
                         $em_id = R3EcoGisHelper::addDummyEnergyMeter(array('esu_id' => $esu_id, 'em_object_id' => $gd_id), 'GLOBAL_ENERGY');
                         $data = array();
                         $data['co_start_date'] = "'{$year}-01-01'";
                         $data['co_end_date'] = "'{$year}-12-31'";
                         $data['co_value'] = forceFloat($request['ac_expected_energy_saving'][$key], null, '.');
                         $data['co_bill'] = 0;
                         $data['em_id'] = $em_id;
                         if (in_array($this->kind, array('ENERGY_PRODUCTION', 'HEATH_PRODUCTION'))) {
                             $data['co_production_co2_factor'] = (double) forceFloat($request['co_production_co2_factor'][$key], null, '.');
                         }
                         $sql = "INSERT INTO consumption (" . implode(', ', array_keys($data)) . ") VALUES (" . implode(', ', $data) . ")";
                         $db->exec($sql);
                     } else {
                         throw new Exception("Unknown esu [es_id={$request['es_id_consumption'][$key]}; udm_id={$request['udm_id_consumption'][$key]}; do_id={$this->do_id}; mu_id={$mu_id}]");
                     }
                 }
             }
             if (isset($request['geometryStatus']) && strtoupper($request['geometryStatus']) == 'CHANGED') {
                 $session_id = session_id();
                 $sql = "UPDATE global_subcategory\r\n                            SET the_geom=foo.the_geom\r\n                            FROM (SELECT MULTI(ST_Force_2d(ST_union(ST_Buffer(the_geom, 0.0)))) AS the_geom FROM edit_tmp_polygon WHERE session_id='{$session_id}') AS foo\r\n                            WHERE gs_id={$id}";
                 $db->exec($sql);
             }
         }
         $db->commit();
         R3EcoGisEventNotifier::notifyDataChanged($this, array('data_changed' => true));
         return array('status' => R3_AJAX_NO_ERROR, 'js' => "submitFormDataDoneEnergySourceRow({$id}, '{$this->kind}')");
     }
 }