diff options
| author | Michel Etienne | 2012-07-09 23:02:20 +0200 |
|---|---|---|
| committer | Michel Etienne | 2012-07-09 23:02:20 +0200 |
| commit | 3cf46d6cbe8f490ad1338ae40bf4d1ec8fcbd2d4 (patch) | |
| tree | cf8415ac4f8816be35c9768cd6c9eadd0504036d | |
| parent | ea483438db92d2d8c46717e2fc20ea1417e2c4b6 (diff) | |
| download | chouette-core-3cf46d6cbe8f490ad1338ae40bf4d1ec8fcbd2d4.tar.bz2 | |
add clean up process
| -rw-r--r-- | Gemfile.lock | 2 | ||||
| -rw-r--r-- | app/assets/stylesheets/referentials.css.scss | 31 | ||||
| -rw-r--r-- | app/controllers/clean_ups_controller.rb | 24 | ||||
| -rw-r--r-- | app/models/clean_up.rb | 123 | ||||
| -rw-r--r-- | app/views/referentials/show.html.erb | 18 | ||||
| -rw-r--r-- | config/locales/clean_ups.yml | 53 | ||||
| -rw-r--r-- | config/locales/referentials.yml | 2 | ||||
| -rw-r--r-- | config/routes.rb | 2 |
8 files changed, 252 insertions, 3 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 334ded324..3b408e69c 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,6 +1,6 @@ GIT remote: git://chouette.dryade.priv/ninoxe - revision: cebb174290257773b95eb663cdcb107dccf1fca6 + revision: 9c824f23ba6e025bed97294d4301376b7a85eced specs: ninoxe (0.0.8) GeoRuby diff --git a/app/assets/stylesheets/referentials.css.scss b/app/assets/stylesheets/referentials.css.scss index fe38f4f81..2d916232f 100644 --- a/app/assets/stylesheets/referentials.css.scss +++ b/app/assets/stylesheets/referentials.css.scss @@ -24,9 +24,36 @@ .count td.value { text-align: right; } - + +} +#sidebar div#clean_up { + form { + border-bottom: 1px solid #BBB; + fieldset { + padding: 0; + border: 0; + li.date { + padding: 0; + label { padding-left: 10px; + width: 40%;} + input { width: 42%; } + } + li { + padding: 0; + label { padding-left: 10px; + width: 90%;} + input { width: 12%; } + } + } + fieldset.actions { + margin-bottom: 0; + padding-left: 20px; + } + fieldset.inputs { + padding-top: 16px; + } + } } - ul.logos { margin: 30px 30px 0 0; diff --git a/app/controllers/clean_ups_controller.rb b/app/controllers/clean_ups_controller.rb new file mode 100644 index 000000000..2d270c178 --- /dev/null +++ b/app/controllers/clean_ups_controller.rb @@ -0,0 +1,24 @@ +class CleanUpsController < ChouetteController + respond_to :html, :only => [:create] + + belongs_to :referential + + def create + begin + clean_up = CleanUp.new( params[:clean_up]) + clean_up.clean + #flash[:notice] = "Message 1<br />" + #flash[:notice] << "Message 2" + notice = t('clean_ups.success_tm', :tm_count => clean_up.time_table_count.to_s) + if (clean_up.vehicle_journey_count > 0) + notice += t('clean_ups.success_vj', :vj_count => clean_up.vehicle_journey_count.to_s) + end + flash[:notice] = notice + rescue + flash[:alert] = t('clean_ups.failure') + end + redirect_to referential_path(@referential) + + end + +end diff --git a/app/models/clean_up.rb b/app/models/clean_up.rb new file mode 100644 index 000000000..2d8e4c693 --- /dev/null +++ b/app/models/clean_up.rb @@ -0,0 +1,123 @@ +class CleanUp + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + + attr_accessor :expected_date, :keep_lines, :keep_stops , :keep_companies, :keep_networks + attr_accessor :time_table_count,:vehicle_journey_count,:journey_pattern_count,:route_count,:line_count + attr_accessor :stop_count,:company_count,:network_count + + validates_presence_of :expected_date + + def initialize(attributes = {}) + attributes.each do |name, value| + send("#{name}=", value) + end + end + + def persisted? + false + end + + def clean + + # find and remove time_tables + tms = Chouette::TimeTable.expired_on(Date.parse(expected_date)) + self.time_table_count = tms.size + tms.each do |tm| + tm.destroy + end + # remove vehiclejourneys without timetables + self.vehicle_journey_count = 0 + Chouette::VehicleJourney.find_each do |vj| + if vj.time_tables.size == 0 + self.vehicle_journey_count += 1 + vj.destroy + end + end + # remove journeypatterns without vehicle journeys + self.journey_pattern_count = 0 + Chouette::JourneyPattern.find_each do |jp| + if jp.vehicle_journeys.size == 0 + self.journey_pattern_count += 1 + jp.destroy + end + end + # remove routes without journeypatterns + self.route_count = 0 + Chouette::Route.find_each do |r| + if r.journey_patterns.size == 0 + self.route_count += 1 + r.destroy + end + end + # if asked remove lines without routes + self.line_count = 0 + if keep_lines == "0" + Chouette::Line.find_each do |l| + if l.routes.size == 0 + self.line_count += 1 + l.destroy + end + end + end + # if asked remove stops without children (recurse) + self.stop_count = 0 + if keep_stops == "0" + Chouette::StopArea.find_each(:conditions => { :area_type => "BoardingPosition" }) do |bp| + if bp.stop_points.size == 0 + self.stop_count += 1 + bp.destroy + end + end + Chouette::StopArea.find_each(:conditions => { :area_type => "Quay" }) do |q| + if q.stop_points.size == 0 + self.stop_count += 1 + q.destroy + end + end + Chouette::StopArea.find_each(:conditions => { :area_type => "CommercialStopPoint" }) do |csp| + if csp.children.size == 0 + self.stop_count += 1 + csp.destroy + end + end + Chouette::StopArea.find_each(:conditions => { :area_type => "StopPlace" }) do |sp| + if sp.children.size == 0 + self.stop_count += 1 + sp.destroy + end + end + Chouette::StopArea.find_each(:conditions => { :area_type => "ITL" }) do |itl| + if itl.routing_stops.size == 0 + self.stop_count += 1 + itl.destroy + end + end + end + # if asked remove companies without lines or vehicle journeys + self.company_count = 0 + if keep_companies == "0" + Chouette::Company.find_each do |c| + if c.lines.size == 0 + self.company_count += 1 + c.destroy + end + end + end + + # if asked remove networks without lines + self.network_count = 0 + if keep_networks == "0" + Chouette::Network.find_each do |n| + if n.lines.size == 0 + self.network_count += 1 + n.destroy + end + end + end + + end + +end diff --git a/app/views/referentials/show.html.erb b/app/views/referentials/show.html.erb index f6c9522ce..ba12da4b4 100644 --- a/app/views/referentials/show.html.erb +++ b/app/views/referentials/show.html.erb @@ -96,4 +96,22 @@ <li><%= link_to t('referentials.actions.destroy'), referential_path(@referential), :method => :delete, :confirm => t('referentials.actions.destroy_confirm'), :class => "remove" %></li> <br> </ul> + + <h3><%= t('.clean_up') %></h3> + <div id="clean_up" > + <%= semantic_form_for [@referential, CleanUp.new] do |form| %> + <%= form.inputs do %> + <%= form.input :expected_date, :as => :date_picker , :wrapper_html => { :class => 'date' }%> + <%= form.input :keep_lines, :as => :boolean %> + <%= form.input :keep_stops, :as => :boolean %> + <%= form.input :keep_companies, :as => :boolean %> + <%= form.input :keep_networks, :as => :boolean %> + <% end %> + <%= form.actions do %> + <%= form.action :submit, :as => :button, :label => t('clean_ups.actions.clean_up') , :button_html => {:confirm => t('clean_ups.actions.confirm') }%> + <% end %> + <% end %> + </div> + + <% end %> diff --git a/config/locales/clean_ups.yml b/config/locales/clean_ups.yml new file mode 100644 index 000000000..5f01add0f --- /dev/null +++ b/config/locales/clean_ups.yml @@ -0,0 +1,53 @@ +en: + clean_ups: + success_tm: "%{tm_count} time tables deleted" + success_vj: "<br/>%{vj_count} vehicle journeys deleted" + success_jp: "<br/>%{jp_count} journey patterns deleted" + success_r: "<br/>%{r_count} routes deleted" + success_l: "<br/>%{l_count} lines deleted" + success_sa: "<br/>%{sa_count} stop areas deleted" + success_c: "<br/>%{c_count} companies deleted" + success_n: "<br/>%{n_count} networks deleted" + failure: "Fail when clean_up" + actions: + clean_up: "clean up" + confirm: "Clean up will destroy concerned time tables\nand next recursively all object without any time table\nPlease confirm this action" + activemodel: + attributes: + clean_up: + expected_date: "Final date" + keep_lines: keep lines + keep_stops: keep stop areas + keep_companies: keep companies + keep_networks: keep networks + formtastic: + hints: + clean_up: + expected_date: "value included in clean up" +fr: + clean_ups: + success_tm: "%{tm_count} calendriers supprimés" + success_vj: "<br/>%{vj_count} courses supprimées" + success_jp: "<br/>%{jp_count} missions supprimées" + success_r: "<br/>%{r_count} séquences d'arrêt supprimées" + success_l: "<br/>%{l_count} lignes supprimées" + success_sa: "<br/>%{sa_count} arrêts supprimés" + success_c: "<br/>%{c_count} transporteurs supprimés" + success_n: "<br/>%{n_count} réseaux supprimés" + failure: "Echec de la purge" + actions: + clean_up: "Purger" + confirm: "La purge détruit les calendriers concernés \npuis en cascade les objets qui n'ont pas ou plus de calendrier\nConfirmer cette action SVP" + activemodel: + attributes: + clean_up: + expected_date: "date limite" + keep_lines: conserver les lignes + keep_stops: conserver les arrêts + keep_companies: conserver les transporteurs + keep_networks: conserver les réseaux + formtastic: + hints: + clean_up: + expected_date: "valeur incluse dans la purge" + diff --git a/config/locales/referentials.yml b/config/locales/referentials.yml index feaca8082..da0eda2d1 100644 --- a/config/locales/referentials.yml +++ b/config/locales/referentials.yml @@ -6,6 +6,7 @@ en: title: Data space objects: Data space elements count: count + clean_up: Clean up new: title: Create a new data space submit: "Create a data space" @@ -54,6 +55,7 @@ fr: title: Espace de données objects: Eléments count: Qté + clean_up: Purge des données obsolètes new: title: Créer un nouvel espace de données submit: "Créer un espace de données" diff --git a/config/routes.rb b/config/routes.rb index a5bc53230..3b2dd80de 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -87,6 +87,8 @@ ChouetteIhm::Application.routes.draw do end end + resources :clean_ups + end match '/help/(*slug)' => 'help#show' |
