aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/stop_area_exports_controller.rb25
-rw-r--r--app/models/stop_area_export.rb28
-rw-r--r--app/views/stop_area_exports/index.xls.erb33
-rw-r--r--app/views/stop_area_imports/new.html.erb4
-rw-r--r--config/locales/stop_area_imports.yml4
-rw-r--r--spec/fixtures/stop_area_import_invalid.csv14
-rw-r--r--spec/fixtures/stop_area_import_valid.csv14
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",,,,,,