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}')"); } }
/** * Ajax request to submit data * @param array $request the request * @return array ajax format status */ public function submitFormData($request) { $request = array_merge(array('insert_type' => 'free', 'reinsert' => ''), $request); $db = ezcDbInstance::get(); $data = array(); $errors = array(); if ($request['kind'] == 'street_lighting' && $this->act == 'add') { // Valore finto per bypassare controlli automatici $request['em_id'] = '-1'; } $checkDate = false; if ($this->act != 'del') { switch ($request['insert_type']) { case 'free': $checkDate = true; $data[] = array('act' => $request['act'], 'co_start_date' => forceISODate($request['co_start_date_free']), 'co_end_date' => forceISODate($request['co_end_date_free']), 'co_value' => forceFloat($request['co_value_free'], null, '.'), 'co_bill' => forceFloat($request['co_bill_free'], null, '.'), 'co_bill_is_calculated' => 'F', 'em_id' => $request['em_id'], 'co_id' => forceInteger($request['id'], 0, false, '.')); break; case 'month': for ($i = 0; $i < 12; $i++) { if ($request['co_start_date_month'][$i] != '' && $request['co_end_date_month'][$i] != '' && $request['co_value_month'][$i] != '' && $request['co_bill_month'][$i] != '') { $data[] = array('act' => $request['act'], 'co_start_date' => forceISODate($request['co_start_date_month'][$i]), 'co_end_date' => forceISODate($request['co_end_date_month'][$i]), 'co_value' => forceFloat($request['co_value_month'][$i], null, '.'), 'co_bill' => forceFloat($request['co_bill_month'][$i], null, '.'), 'co_bill_is_calculated' => 'F', 'em_id' => $request['em_id']); } } if (count($data) == 0) { $errors['dummy'] = array('CUSTOM_ERROR' => _('Impossibile salvare. Nessun dato valido inserito')); } break; case 'year': $data[] = array('act' => $request['act'], 'co_start_date' => forceISODate($request['co_start_date_year']), 'co_end_date' => forceISODate($request['co_end_date_year']), 'co_value' => forceFloat($request['co_value_year'], null, '.'), 'co_bill' => forceFloat($request['co_bill_year'], null, '.'), 'co_bill_is_calculated' => 'F', 'em_id' => $request['em_id']); break; } foreach ($data as $values) { $errors = $this->checkFormData($values, $errors); } if ($checkDate) { // Verifica data inserimento per bollette singole if (forceISODate($request['co_start_date_free']) > forceISODate($request['co_end_date_free'])) { $errors['co_end_date_bis'] = array('CUSTOM_ERROR' => _("La data di fine periodo precedenta a quella di inizio")); } } } if (count($errors) > 0) { return $this->getAjaxErrorResult($errors); } else { if ($this->act == 'del') { $request['co_id'] = forceInteger($request['id'], 0, false, '.'); if ($request['kind'] == 'street_lighting') { // Ricavo contatore finto per cancellazione $db->beginTransaction(); $em_id = $db->query("SELECT em_id FROM consumption WHERE co_id={$request['co_id']}")->fetchColumn(); $id = $this->applyData($request); if ($db->query("SELECT COUNT(*) FROM consumption WHERE em_id={$em_id}")->fetchColumn() == 0) { $db->exec("DELETE FROM energy_meter WHERE em_id={$em_id}"); } $db->commit(); } else { $id = $this->applyData($request); } } else { $db->beginTransaction(); if ($request['kind'] == 'street_lighting' && $this->act == 'add') { $em_id = R3EcoGisHelper::getDummyEnergyMeter('STREET_LIGHTING', $request['sl_id']); if ($em_id == '') { // Aggiungo contatore finto per tratto stradale $electricityData = $this->getElectricityUDMData($_SESSION['do_id']); $em_id = R3EcoGisHelper::addDummyEnergyMeter(array('esu_id' => $electricityData['esu_id'], 'em_object_id' => $request['sl_id']), 'STREET_LIGHTING'); } $data[0]['em_id'] = $em_id; } $id = array(); foreach ($data as $values) { $id[] = $this->applyData($values); } $db->commit(); } R3EcoGisEventNotifier::notifyDataChanged($this, array('data_changed' => true)); return array('status' => R3_AJAX_NO_ERROR, 'js' => "submitFormDataDoneConsumption(" . json_encode($id) . ", '{$request['reinsert']}')"); } }