diff options
| author | Luc Donnet | 2014-07-01 19:17:40 +0200 |
|---|---|---|
| committer | Luc Donnet | 2014-07-01 19:17:40 +0200 |
| commit | 7d5941b0c9f3797daf632e4adcc822f92cd21b63 (patch) | |
| tree | 6bb13d48f5ca1ab87902daa5f10b518f251f1e03 | |
| parent | c2a7db083fb83ac0c4a1c2ed7beabb35ea4d11ee (diff) | |
| download | chouette-core-7d5941b0c9f3797daf632e4adcc822f92cd21b63.tar.bz2 | |
Add export for stop_areas Refs #0026832
| -rw-r--r-- | app/controllers/stop_area_exports_controller.rb | 25 | ||||
| -rw-r--r-- | app/models/stop_area_export.rb | 28 | ||||
| -rw-r--r-- | app/views/stop_area_exports/index.xls.erb | 33 | ||||
| -rw-r--r-- | app/views/stop_area_imports/new.html.erb | 4 | ||||
| -rw-r--r-- | config/locales/stop_area_imports.yml | 4 | ||||
| -rw-r--r-- | spec/fixtures/stop_area_import_invalid.csv | 14 | ||||
| -rw-r--r-- | spec/fixtures/stop_area_import_valid.csv | 14 |
7 files changed, 104 insertions, 18 deletions
diff --git a/app/controllers/stop_area_exports_controller.rb b/app/controllers/stop_area_exports_controller.rb new file mode 100644 index 000000000..e675a9826 --- /dev/null +++ b/app/controllers/stop_area_exports_controller.rb @@ -0,0 +1,25 @@ +class StopAreaExportsController < ChouetteController + belongs_to :referential + + respond_to :csv, :only => [:index] + respond_to :xls, :only => [:index] + + def index + @column_names = column_names + index! do |format| + format.csv { send_data StopAreaExport.new( {:column_names => column_names, :stop_areas => collection} ).to_csv } + format.xls + end + end + + protected + + def column_names + ["id","name","longitude","latitude","area_type","parent_id", "comment","country_code","street_name","mobility_restricted_suitability","stairs_availability","lift_availability","int_user_needs"] + end + + def collection + @stop_areas ||= Chouette::StopArea.order(:country_code, :name) + end + +end diff --git a/app/models/stop_area_export.rb b/app/models/stop_area_export.rb new file mode 100644 index 000000000..1b9cc36a7 --- /dev/null +++ b/app/models/stop_area_export.rb @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +require "csv" + +class StopAreaExport + include ActiveModel::Validations + include ActiveModel::Conversion + extend ActiveModel::Naming + + attr_accessor :column_names, :stop_areas + + def initialize(attributes = {}) + attributes.each { |name, value| send("#{name}=", value) } + end + + def persisted? + false + end + + def to_csv(options = {}) + CSV.generate(options) do |csv| + csv << column_names + stop_areas.each do |stop_area| + csv << stop_area.attributes.values_at(*column_names) + end + end + end + +end diff --git a/app/views/stop_area_exports/index.xls.erb b/app/views/stop_area_exports/index.xls.erb new file mode 100644 index 000000000..e48a97fe0 --- /dev/null +++ b/app/views/stop_area_exports/index.xls.erb @@ -0,0 +1,33 @@ +<?xml version="1.0"?> +<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" + xmlns:o="urn:schemas-microsoft-com:office:office" + xmlns:x="urn:schemas-microsoft-com:office:excel" + xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" + xmlns:html="http://www.w3.org/TR/REC-html40"> + <Worksheet ss:Name="Sheet1"> + <Table> + <Row> + <% @column_names.each do |column_name|%> + <Cell><Data ss:Type="String"><%= column_name %></Data></Cell> + <% end %> + </Row> + <% @stop_areas.each do |stop_area| %> + <Row> + <Cell><Data ss:Type="Number"><%= stop_area.id %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.name %></Data></Cell> + <Cell><Data ss:Type="Number"><%= stop_area.longitude %></Data></Cell> + <Cell><Data ss:Type="Number"><%= stop_area.latitude %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.area_type %></Data></Cell> + <Cell><Data ss:Type="Number"><%= stop_area.parent_id %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.comment %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.country_code %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.street_name %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.mobility_restricted_suitability %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.stairs_availability %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.lift_availability %></Data></Cell> + <Cell><Data ss:Type="String"><%= stop_area.int_user_needs %></Data></Cell> + </Row> + <% end %> + </Table> + </Worksheet> +</Workbook> diff --git a/app/views/stop_area_imports/new.html.erb b/app/views/stop_area_imports/new.html.erb index 67b02892d..54ca1c57a 100644 --- a/app/views/stop_area_imports/new.html.erb +++ b/app/views/stop_area_imports/new.html.erb @@ -6,8 +6,8 @@ <%= t('stop_area_imports.new.export_stop_areas') %><span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> - <li><%= link_to image_tag("icons/file_csv.png") + " Csv" , "/stop_area_imports.csv" %></li> - <li><%= link_to image_tag("icons/file_excel.png") + " Excel", "/stop_area_imports.xls" %></li> + <li><%= link_to image_tag("icons/file_csv.png") + " Csv" , referential_stop_area_exports_path(@referential, :format => :csv) %></li> + <li><%= link_to image_tag("icons/file_excel.png") + " Excel", referential_stop_area_exports_path(@referential, :format => :xls) %></li> </ul> </div> </div> diff --git a/config/locales/stop_area_imports.yml b/config/locales/stop_area_imports.yml index 124157cba..c080ea1b5 100644 --- a/config/locales/stop_area_imports.yml +++ b/config/locales/stop_area_imports.yml @@ -2,7 +2,7 @@ en: stop_area_imports: new: title: "Import stop areas" - export_stop_areas: "Export a model" + export_stop_areas: "Export existing stop_areas" succcess: "Import is a success" tooltip: file: "Select a CSV or Excel file" @@ -18,7 +18,7 @@ fr: stop_area_imports: new: title: "Import des arrêts" - export_stop_areas: "Exporter un modèle" + export_stop_areas: "Exporter les arrêts existants" succcess: "L'import des données est un succès" tooltip: file: "Sélectionner un fichier CSV ou Excel" diff --git a/spec/fixtures/stop_area_import_invalid.csv b/spec/fixtures/stop_area_import_invalid.csv index 7fc4caefc..379c33012 100644 --- a/spec/fixtures/stop_area_import_invalid.csv +++ b/spec/fixtures/stop_area_import_invalid.csv @@ -1,7 +1,7 @@ -"id","name","longitude","latitude","area_type","comment","country_code","street_name","mobility_restricted_suitability","stairs_availability","lift_availability","int_user_needs" -,"StopArea1","0.1","0.1",,"Comment",,,,,, -,"StopArea2","0.2","0.2",,"Comment",,,,,, -,"StopArea3","0.3","0.3",,"Comment",,,,,, -,"StopArea4","0.4","0.4",,"Comment",,,,,, -,"StopArea5","0.5","0.5",,"Comment",,,,,, -,"StopArea6","0.6","0.6",,"Comment",,,,,, +"id","name","longitude","latitude","area_type","parent_id","comment","country_code","street_name","mobility_restricted_suitability","stairs_availability","lift_availability","int_user_needs" +,"StopArea1","0.1","0.1",,,"Comment",,,,,, +,"StopArea2","0.2","0.2",,,"Comment",,,,,, +,"StopArea3","0.3","0.3",,,"Comment",,,,,, +,"StopArea4","0.4","0.4",,,"Comment",,,,,, +,"StopArea5","0.5","0.5",,,"Comment",,,,,, +,"StopArea6","0.6","0.6",,,"Comment",,,,,, diff --git a/spec/fixtures/stop_area_import_valid.csv b/spec/fixtures/stop_area_import_valid.csv index a929378f9..d3d2c6974 100644 --- a/spec/fixtures/stop_area_import_valid.csv +++ b/spec/fixtures/stop_area_import_valid.csv @@ -1,7 +1,7 @@ -"id","name","longitude","latitude","area_type","comment","country_code","street_name","mobility_restricted_suitability","stairs_availability","lift_availability","int_user_needs" -,"StopArea1","0.1","0.1","Quay","Comment",,,,,, -,"StopArea2","0.2","0.2","Quay","Comment",,,,,, -,"StopArea3","0.3","0.3","Quay","Comment",,,,,, -,"StopArea4","0.4","0.4","Quay","Comment",,,,,, -,"StopArea5","0.5","0.5","Quay","Comment",,,,,, -,"StopArea6","0.6","0.6","Quay","Comment",,,,,, +"id","name","longitude","latitude","area_type","parent_id","comment","country_code","street_name","mobility_restricted_suitability","stairs_availability","lift_availability","int_user_needs" +,"StopArea1","0.1","0.1","Quay",,"Comment",,,,,, +,"StopArea2","0.2","0.2","Quay",,"Comment",,,,,, +,"StopArea3","0.3","0.3","Quay",,"Comment",,,,,, +,"StopArea4","0.4","0.4","Quay",,"Comment",,,,,, +,"StopArea5","0.5","0.5","Quay",,"Comment",,,,,, +,"StopArea6","0.6","0.6","Quay",,"Comment",,,,,, |
