aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuc Donnet2014-07-01 19:19:14 +0200
committerLuc Donnet2014-07-01 19:19:14 +0200
commit22c280f7042b554d8382b7d7511132efcd067ad6 (patch)
tree5b5f49e0f6a8465429aaa095ec81fa6bfd19ae12
parent7d5941b0c9f3797daf632e4adcc822f92cd21b63 (diff)
downloadchouette-core-22c280f7042b554d8382b7d7511132efcd067ad6.tar.bz2
Fix export vehicle journey at stops for xls Refs #0026843
-rw-r--r--app/controllers/vehicle_journey_exports_controller.rb36
-rw-r--r--app/models/vehicle_journey_export.rb12
-rw-r--r--app/views/vehicle_journey_exports/index.xls.erb26
3 files changed, 46 insertions, 28 deletions
diff --git a/app/controllers/vehicle_journey_exports_controller.rb b/app/controllers/vehicle_journey_exports_controller.rb
index f29cd01aa..ed1cd61a6 100644
--- a/app/controllers/vehicle_journey_exports_controller.rb
+++ b/app/controllers/vehicle_journey_exports_controller.rb
@@ -5,32 +5,28 @@ class VehicleJourneyExportsController < ChouetteController
end
end
- respond_to :csv, :only => [:new, :index]
- respond_to :xls, :only => [:new, :index]
-
- def new
- new! do |format|
- @vehicle_journey_export = VehicleJourneyExport.new(:route => @route)
-
- format.csv { render text: @vehicle_journey_export.to_csv }
- format.xls { render text: @vehicle_journey_export.to_csv(col_sep: "\t") }
- end
- end
+ respond_to :csv, :only => [:index]
+ respond_to :xls, :only => [:index]
- def index
- index! do |format|
- @vehicle_journey_export = VehicleJourneyExport.new(:route => @route)
-
- format.csv { render text: @vehicle_journey_export.to_csv }
- format.xls { render text: @vehicle_journey_export.to_csv(col_sep: "\t") }
+ def index
+ @column_names = column_names
+ index! do |format|
+ format.csv { send_data VehicleJourneyExport.new(:route => route, :vehicle_journeys => vehicle_journeys, :column_names => column_names).to_csv }
+ format.xls
end
end
- protected
+ protected
+
+ def column_names
+ ["stop_point_id", "stop_area_name"] + vehicle_journeys.collect(&:objectid)
+ end
+
alias_method :route, :parent
-
+
def collection
- @vehicle_journey_exports = []
+ @vehicle_journeys ||= route.vehicle_journeys.includes(:vehicle_journey_at_stops).order("vehicle_journey_at_stops.departure_time")
end
+ alias_method :vehicle_journeys, :collection
end
diff --git a/app/models/vehicle_journey_export.rb b/app/models/vehicle_journey_export.rb
index 8fe7869f1..653e339d9 100644
--- a/app/models/vehicle_journey_export.rb
+++ b/app/models/vehicle_journey_export.rb
@@ -6,9 +6,7 @@ class VehicleJourneyExport
include ActiveModel::Conversion
extend ActiveModel::Naming
- attr_accessor :route
-
- validates_presence_of :route
+ attr_accessor :vehicle_journeys, :column_names, :route
def initialize(attributes = {})
attributes.each { |name, value| send("#{name}=", value) }
@@ -19,11 +17,9 @@ class VehicleJourneyExport
end
def to_csv(options = {})
- CSV.generate(options) do |csv|
- vehicle_journeys_sorted = route.vehicle_journeys.includes(:vehicle_journey_at_stops).order("vehicle_journey_at_stops.departure_time")
-
- vehicle_journey_at_stops_matrix = (vehicle_journeys_sorted.collect{ |vj| vj.vehicle_journey_at_stops.collect(&:departure_time).collect{|time| time.strftime("%H:%M")} }).transpose
- csv << ["stop_point_id", "stop_area_name"] + vehicle_journeys_sorted.collect(&:objectid)
+ CSV.generate(options) do |csv|
+ vehicle_journey_at_stops_matrix = (vehicle_journeys.collect{ |vj| vj.vehicle_journey_at_stops.collect(&:departure_time).collect{|time| time.strftime("%H:%M")} }).transpose
+ csv << column_names
route.stop_points.each_with_index do |stop_point, index|
csv << [stop_point.id, stop_point.stop_area.name] + vehicle_journey_at_stops_matrix[index]
end
diff --git a/app/views/vehicle_journey_exports/index.xls.erb b/app/views/vehicle_journey_exports/index.xls.erb
new file mode 100644
index 000000000..b6fea2b73
--- /dev/null
+++ b/app/views/vehicle_journey_exports/index.xls.erb
@@ -0,0 +1,26 @@
+<?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>
+ <% vehicle_journey_at_stops_matrix = (@vehicle_journeys.collect{ |vj| vj.vehicle_journey_at_stops.collect(&:departure_time).collect{|time| time.strftime("%H:%M")} }).transpose %>
+ <% @route.stop_points.each_with_index do |stop_point, index| %>
+ <Row>
+ <Cell><Data ss:Type="Number"><%= stop_point.id %></Data></Cell>
+ <Cell><Data ss:Type="String"><%= stop_point.stop_area.name %></Data></Cell>
+ <% vehicle_journey_at_stops_matrix[index].each do |vehicle_journey_at_stop| %>
+ <Cell><Data ss:Type="String"><%= vehicle_journey_at_stop %></Data></Cell>
+ <% end %>
+ </Row>
+ <% end %>
+ </Table>
+ </Worksheet>
+</Workbook>