| Class | ProductController |
| In: |
app/controllers/product_controller.rb
|
| Parent: | ApplicationController |
-*- coding: utf-8 -*- プロダクトの制御を行う:
| DEFAULT_PER_PAGE | = | 10 |
| ALLOWED_PER_PAGE | = | [ 10, 20, 50, 100, 0, ] |
関連文書向けに新規作成する
# File app/controllers/product_controller.rb, line 195
195: def create_document
196: @copying = false
197: view_in :document
198: create("create_document") do
199: p = {
200: :type => params[:type],
201: :product_id => params[:relatable_product_id],
202: :target_id => @it.id,
203: :target_type => @it.class.to_s,
204: :target_product_id => @product.id,
205: }
206: p[:id] = params[:id] unless params[:id].blank?
207: render :update do |page|
208: page << "new Ajax.Updater('document_table_base', '#{url_for(:controller => "document", :action => "select")}', {onComplete: function(){$('view_dp').innerHTML = '';}, parameters: #{p.to_json}})"
209: end
210: end
211: end
削除を行う。
# File app/controllers/product_controller.rb, line 79
79: def destroy
80: view_in :detail
81: prepare_display_to :show
82: raise PermissionDenied, "product is not modifiable" unless @product.modifiable?
83: raise DisabledException, "disabled with respect to button" unless @display.button_delete?
84: unless request.post? && params[:id] && (params[:confirm_destroy] || request.xhr?)
85: begin
86: @it = @model_class.find(params[:id])
87: rescue ActiveRecord::RecordNotFound
88: flash[:notice] = s_("flash|notice|It has been already destroyed.")
89: x_close_or_redirect_to :action => "list"
90: return
91: end
92: # @title : same as show
93: @display = Object.new
94: def @display.method_missing(sym, *args)
95: return false
96: end
97: def @display.button_back?
98: return true
99: end
100: render :action => :confirm_destroy
101: return
102: end
103: begin
104: it = @model_class.find(params[:id])
105: if @product.is_a?(ProductDetailed)
106: @details = it.details
107: @details.each {|d| instance_variable_set("@details_#{d.id}", d)}
108: end
109: if with_logic(it, :destroy)
110: flash[:notice] = s_("flash|notice|It was successfully destroyed.")
111: else
112: flash[:warning] = s_("flash|warning|It was failed to destroy.")
113: end
114: rescue ActiveRecord::RecordNotFound
115: flash[:notice] = s_("flash|notice|It has been already destroyed.")
116: x_close_or_redirect_to :action => "list"
117: return
118: end
119: x_close_or_redirect_to :action => "list"
120: end
編集画面を表示し、編集を行う。
# File app/controllers/product_controller.rb, line 133
133: def edit
134: view_in :detail
135: prepare_display_to :edit
136: begin
137: @it = @model_class.find(params[:id])
138: rescue ActiveRecord::RecordNotFound
139: flash[:notice] = s_("flash|notice|It has been already destroyed.")
140: x_close_or_redirect_to :action => "list"
141: return
142: end
143:
144: return if use_picker
145:
146: if @product.is_a?(ProductDetailed)
147: @details = @it.details
148: @details.each {|d| instance_variable_set("@details_#{d.id}", d)}
149: begin
150: @old_details = ActiveSupport::JSON.decode(params[:old_details] || "[]")
151: rescue ActiveSupport::JSON::ParseError
152: @old_details = []
153: end
154: set_new_details
155: set_order_details
156: end
157:
158: if params[:it]
159: set_attributes
160: if request.post? && params[:update]
161: # update
162: begin
163: if with_logic(@it, :update)
164: flash[:notice] = s_("flash|notice|It was successfully updated.")
165: x_close_or_redirect_to :action => "list"
166: return
167: end
168: rescue ActiveRecord::StaleObjectError
169: @stale_object_error = true
170: end
171: end
172: end
173:
174: render :action => "form"
175: end
一覧画面を表示する。
# File app/controllers/product_controller.rb, line 15
15: def list
16: view_in :m
17: prepare_display_to_list
18: options = @display.query_options
19: setup_list_id
20: setup_per_page(@model_class, options) do |default_per_page|
21: sync_fragment("m", :per, default_per_page)
22: end
23: sync_fragment("m", :page, 1)
24: @pages, @things = paginate(@model_class, options)
25: @header_per_line = User.list_header_per_line
26: end
新規作成画面を表示し、新規作成を行う。
# File app/controllers/product_controller.rb, line 123
123: def newnewnew
124: @copying = !!params[:id]
125: view_in :detail
126: create("form") do
127: flash[:notice] = s_("flash|notice|It was successfully created.")
128: x_close_or_redirect_to :action => "list"
129: end
130: end
詳細を並び替える。
# File app/controllers/product_controller.rb, line 214
214: def order_details
215: render :update do |page|
216: page[:order_details].value = params[:details_table_body].to_json
217: end
218: end
関連文書を選択するための一覧を表示する。
# File app/controllers/product_controller.rb, line 178
178: def select_document
179: view_in :document
180: prepare_display_to_list
181: options = @display.query_options
182: setup_per_page(@model_class, options) do |default_per_page|
183: params[:per] ||= default_per_page
184: end
185: @pages, @things = paginate(@model_class, options)
186: @header_per_line = User.list_header_per_line
187: begin
188: @relatable = params[:type].constantize.find(params[:id])
189: rescue
190: @relatable = nil
191: end
192: end
詳細画面を表示する。
# File app/controllers/product_controller.rb, line 29
29: def show
30: view_in :detail
31: prepare_display_to :show
32: begin
33: @it = @model_class.find(params[:id], :readonly => true)
34: rescue ActiveRecord::RecordNotFound
35: flash[:notice] = s_("flash|notice|It does not exists.")
36: x_close_or_redirect_to :action => "list"
37: return
38: end
39: if @product.is_a?(ProductDetailed)
40: @details = @it.details
41: end
42:
43: @id_suffix = "#{@it.id}of#{@product.id}"
44:
45: return if use_picker
46:
47: if @display.mail?
48: @disable_mailsend = true
49: if params[:mail] && !params[:mail][:recipients].blank?
50: @disable_mailsend = false
51: end
52: if !@disable_mailsend && params[:mailsend]
53: mail_to_queue(@it, true)
54: end
55: end
56: end
詳細画面(関連文書用)を表示する。
# File app/controllers/product_controller.rb, line 59
59: def show_only
60: @parent_view = "view_detail"
61: # @current_view,@sub_view は後で設定
62: prepare_display_to :show
63: begin
64: @it = @model_class.find(params[:id], :readonly => true)
65: rescue ActiveRecord::RecordNotFound
66: flash[:notice] = s_("flash|notice|It does not exists.")
67: x_close_or_redirect_to :action => "list"
68: return
69: end
70: if @product.is_a?(ProductDetailed)
71: @details = @it.details
72: end
73: @id_suffix = "#{@it.id}of#{@product.id}"
74: @current_view = "view_detail#{@it.id}of#{@product.id}"
75: @sub_view = "view_subofdetail#{@it.id}of#{@product.id}"
76: end