OSDN Git Service

Merge branch 'feature/travis_ci'
[elecoma/elecoma.git] / app / controllers / admin / totals_controller.rb
1 # -*- coding: utf-8 -*-
2 require 'ostruct'
3 require 'totalizer'
4
5 class Admin::TotalsController < Admin::BaseController
6   before_filter :admin_permission_check_term
7
8   def index
9     
10     #searchに商品集計用の要素を追加
11     params[:search] ||= {}
12     [:month, :date_from, :date_to, :sale_start_from, :sale_start_to].each do | key |
13       params[:search][key] = parse_date_select(params[:search], key)
14     end
15    
16     #販売元id=ログインしているユーザーの販売元id 
17     params[:search][:retailer_id] ||= session[:admin_user].retailer_id
18    
19     #ログインユーザーのショップが無くて販売元idが違ったらエラー 
20     if !session[:admin_user].master_shop? && params[:search][:retailer_id] != session[:admin_user].retailer_id
21       raise ActiveRecord::RecordNotFound
22     end
23     
24     #OpenStructのsearch生成
25     @search = OpenStruct.new(params[:search])
26
27     #:pageがnilだったら代入
28     params[:page] ||= 'term'
29
30     #:pageのクラス取得
31     @agent = Totalizer.get_instance(params[:page])
32     
33     #取得できなかったら取得
34     if not @agent
35       params[:page] = 'term'
36       @agent = Totalizer.get_instance(params[:page])
37     end
38     
39     #productのページだったらtrue
40     @sale_start_enabled = (params[:page] == 'product')
41     params[:type] ||= @agent.default_type
42     
43     #
44     @title = @agent.title
45     @list_view = @agent.columns
46     @links = @agent.links
47     @labels = @agent.labels
48     
49     #当てはまったものをレコードに入れる
50     begin
51       @records = @agent.get_records(params)
52     rescue => e
53       logger.error e.message
54       e.backtrace.each{|bt|logger.error(bt)}
55     end
56
57     @total = @agent.total
58     
59     #
60     begin
61       flash[:graph] = @agent.graph
62     rescue =>e
63       logger.error(e.message)
64       e.backtrace.each{|bt|logger.error(bt)}
65     end
66     
67     #
68     @selected_retailer = params[:search][:retailer_id].to_i
69   end
70
71   def graph
72     if flash[:graph]
73       send_data flash[:graph], :type => 'image/png', :disposition => 'inline'
74     else
75       head :status => :not_found
76     end
77   end
78
79   def csv
80     totalizer = Object.const_get("#{params[:page]}_totalizer".classify)
81     csv_data, filename = totalizer.csv(params)
82     send_data(csv_data.tosjis, :type => "application/octet-stream; name=#{filename}; charset=shift_jis; header=present",:disposition => 'attachment', :filename => filename)
83   end
84 end
85