From fece34f7dc6cfcba81d59d357f4d827bc8da1ad4 Mon Sep 17 00:00:00 2001 From: Chris Cromer Date: Sun, 20 Jan 2019 11:25:55 -0300 Subject: [PATCH] validity checks --- src/place_editor.vala | 236 +++++++++++++++++++++++++++++++++++------- src/tour_editor.vala | 10 +- 2 files changed, 205 insertions(+), 41 deletions(-) diff --git a/src/place_editor.vala b/src/place_editor.vala index 76e0c6b..f0ef845 100644 --- a/src/place_editor.vala +++ b/src/place_editor.vala @@ -141,6 +141,152 @@ namespace Sernatur { } } + /** + * Validate the tour data before trying to insert it into the database + * @return Returns true if the data is valid + */ + private bool validate_place_data () { + if (lugar.nombre_lugar.strip () == "") { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: Place name cannot be left blank!")); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + return false; + } + bool list_success = true; + try { + List list = Lugar.get_all_lugares (conn); + list.foreach ((entry) => { + if (lugar.nombre_lugar.down () == entry.nombre_lugar.down () && lugar.id_lugar != entry.id_lugar) { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: A place named \"%s\" already exists!"), entry.nombre_lugar); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + list_success = false; + } + }); + } + catch (Error e) { + #if DEBUG + error (e.message); + #else + warning (e.message); + return false; + #endif + } + return list_success; + } + + /** + * Validate the city data before trying to insert it into the database + * @param ciudad The city to validate + * @return Returns true if the data is valid + */ + private bool validate_city_data (Ciudad ciudad) { + if (ciudad.nombre_ciudad.strip () == "") { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: City name cannot be left blank!")); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + return false; + } + bool list_success = true; + try { + List list = Ciudad.get_all_ciudades (conn); + list.foreach ((entry) => { + if (ciudad.nombre_ciudad.down () == entry.nombre_ciudad.down ()) { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: A city named \"%s\" already exists!"), entry.nombre_ciudad); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + list_success = false; + } + }); + } + catch (Error e) { + #if DEBUG + error (e.message); + #else + warning (e.message); + return false; + #endif + } + return list_success; + } + + /** + * Validate the region data before trying to insert it into the database + * @param region The region to validate + * @return Returns true if the data is valid + */ + private bool validate_region_data (Region region) { + if (region.nombre_region.strip () == "") { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: Region name cannot be left blank!")); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + return false; + } + bool list_success = true; + try { + List list = Region.get_all_regiones (conn); + list.foreach ((entry) => { + if (region.nombre_region.down () == entry.nombre_region.down ()) { + var msg = new Gtk.MessageDialog (this, + Gtk.DialogFlags.MODAL, + Gtk.MessageType.ERROR, + Gtk.ButtonsType.CLOSE, + _ ("Error: A region named \"%s\" already exists!"), entry.nombre_region); + msg.response.connect ((response_id) => { + msg.destroy (); + }); + msg.set_title (_ ("Error")); + msg.run (); + list_success = false; + } + }); + } + catch (Error e) { + #if DEBUG + error (e.message); + #else + warning (e.message); + return false; + #endif + } + return list_success; + } + /** * Reset the city dropdown */ @@ -194,38 +340,40 @@ namespace Sernatur { [GtkCallback] public void on_clicked_button (Gtk.Button button) { if (button == save) { - if (lugar.id_lugar == 0) { - update_place_instance (); - try { - Lugar.insert_place (conn, lugar); + if (update_place_instance () && validate_place_data ()) { + if (lugar.id_lugar == 0) { + update_place_instance (); + try { + Lugar.insert_place (conn, lugar); + } + catch (Error e) { + #if DEBUG + error (e.message); + #else + warning (e.message); + #endif + } + finally { + save_place (); // Signal the parent to update itself + this.close (); + } } - catch (Error e) { - #if DEBUG - error (e.message); - #else - warning (e.message); - #endif - } - finally { - save_place (); // Signal the parent to update itself - this.close (); - } - } - else { - update_place_instance (); - try { - Lugar.update_place (conn, lugar); - } - catch (Error e) { - #if DEBUG - error (e.message); - #else - warning (e.message); - #endif - } - finally { - save_place (); // Signal the parent to update itself - this.close (); + else { + update_place_instance (); + try { + Lugar.update_place (conn, lugar); + } + catch (Error e) { + #if DEBUG + error (e.message); + #else + warning (e.message); + #endif + } + finally { + save_place (); // Signal the parent to update itself + this.close (); + } } } } @@ -237,14 +385,20 @@ namespace Sernatur { /** * Update the the place object with new info from the editor */ - private void update_place_instance () { + private bool update_place_instance () { lugar.nombre_lugar = place_name.get_text (); lugar.valor_entrada = (uint) int.parse (ticket_price.get_text ()); lugar.nivel = (uint) difficulty.get_value_as_int (); if (region.get_active () == -1) { Region new_region = new Region (0, region.get_active_text ()); try { - new_region.id_region = Region.insert_region (conn, new_region); + if (validate_region_data (new_region)) { + new_region.id_region = Region.insert_region (conn, new_region); + return update_place_instance_city (new_region); + } + else { + return false; + } } catch (Error e) { #if DEBUG @@ -253,9 +407,6 @@ namespace Sernatur { warning (e.message); #endif } - finally { - update_place_instance_city (new_region); - } } else { Region new_region; @@ -268,21 +419,27 @@ namespace Sernatur { else { new_region = new Region (); } - update_place_instance_city (new_region); + return update_place_instance_city (new_region); } + return true; } /** * This method updates the city part of the lugar instance * @param new_region The region to insert into the city object */ - private void update_place_instance_city (Region new_region) { + private bool update_place_instance_city (Region new_region) { Ciudad ciudad; if (city.get_active () == -1) { ciudad = new Ciudad (0, city.get_active_text ()); ciudad.region = new_region; try { - ciudad.id_ciudad = Ciudad.insert_city (conn, ciudad); + if (validate_city_data (ciudad)) { + ciudad.id_ciudad = Ciudad.insert_city (conn, ciudad); + } + else { + return false; + } } catch (Error e) { #if DEBUG @@ -305,6 +462,7 @@ namespace Sernatur { lugar.ciudad = ciudad; } } + return true; } /** diff --git a/src/tour_editor.vala b/src/tour_editor.vala index b682e33..6e1792f 100644 --- a/src/tour_editor.vala +++ b/src/tour_editor.vala @@ -437,7 +437,10 @@ namespace Sernatur { try { if (validate_region_data (new_region)) { new_region.id_region = Region.insert_region (conn, new_region); - update_tour_instance_city (new_region); + return update_tour_instance_city (new_region); + } + else { + return false; } } catch (Error e) { @@ -459,7 +462,7 @@ namespace Sernatur { else { new_region = new Region (); } - update_tour_instance_city (new_region); + return update_tour_instance_city (new_region); } return true; } @@ -477,6 +480,9 @@ namespace Sernatur { if (validate_city_data (ciudad)) { ciudad.id_ciudad = Ciudad.insert_city (conn, ciudad); } + else { + return false; + } } catch (Error e) { #if DEBUG