diff options
| author | Luc Donnet | 2014-07-01 19:19:14 +0200 |
|---|---|---|
| committer | Luc Donnet | 2014-07-01 19:19:14 +0200 |
| commit | 22c280f7042b554d8382b7d7511132efcd067ad6 (patch) | |
| tree | 5b5f49e0f6a8465429aaa095ec81fa6bfd19ae12 | |
| parent | 7d5941b0c9f3797daf632e4adcc822f92cd21b63 (diff) | |
| download | chouette-core-22c280f7042b554d8382b7d7511132efcd067ad6.tar.bz2 | |
Fix export vehicle journey at stops for xls Refs #0026843
| -rw-r--r-- | app/controllers/vehicle_journey_exports_controller.rb | 36 | ||||
| -rw-r--r-- | app/models/vehicle_journey_export.rb | 12 | ||||
| -rw-r--r-- | app/views/vehicle_journey_exports/index.xls.erb | 26 |
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> |
