OSDN Git Service

- スマートフォン対応レポジトリからマージ
[elecoma/elecoma.git] / app / helpers / cart_helper.rb
1 module CartHelper
2
3   # カートを渡すと、カート内の商品への加算用リンクを生成します。
4   def incriment_tag(cart)
5     uri = {:controller => 'cart',
6            :action => 'inc',
7            :id => cart.product_style_id}
8     str = request.mobile? ? "増やす" : " + "
9     if request.mobile.respond_to?('smartphone?')
10         link_to str, url_for(uri), {:class => 'rosy small_button'}
11     else
12         link_to str, url_for(uri), {:class => 'product_incriment'}
13     end
14   end
15
16   # カートを渡すと、カート内の商品への減算用リンクを生成します。
17   def decriment_tag(cart)
18     uri = {:controller => 'cart',
19            :action => 'dec',
20            :id => cart.product_style_id}
21     str = request.mobile? ? "減らす" : " - "
22       if request.mobile.respond_to?('smartphone?')
23         link_to str, url_for(uri), {:class => 'rosy small_button'}
24     else
25         link_to str, url_for(uri), {:class => 'product_decriment'}
26     end
27   end
28
29   # 非会員用お届け先追加のJavaScript
30   def optional_address_script
31     enable_setting = {
32       :parametor => false,
33       :style     => {:backgroundColor => '#ffffff'}
34     }
35
36     disable_setting = {
37       :parametor => true,
38       :style     => {:backgroundColor => '#f0f0f0'}
39     }
40     js = <<"EJS"
41       function fnCheckOptionalAddress() {
42         if(!$$('.optional_address').first().disabled) {
43           fnChangeOptionalAddress('#dddddd');
44         } else {
45           fnChangeOptionalAddress('');
46         }
47       }
48
49       function fnChangeOptionalAddress(color) {
50       if(color == "") {
51         #{update_page do |page|
52           page.select('.optional_address').each('disabled') do |element|
53             element.disabled = enable_setting[:parametor]
54           end
55           page.select('.optional_address').each('disabled') do |element|
56             element.setStyle enable_setting[:style]
57           end
58         end}
59
60       } else {
61
62         #{update_page do |page|
63           page.select('.optional_address').each('disabled') do |element|
64             element.disabled = disable_setting[:parametor]
65           end
66           page.select('.optional_address').each('disabled') do |element|
67             element.setStyle disable_setting[:style]
68           end
69         end}
70
71       }
72     }
73 EJS
74
75     javascript_tag js
76   end
77
78 =begin rdoc
79   * INFO
80
81     parametors:
82       :address => DeliveryAddress[必須]
83
84     return:
85       引数として渡された、DeliveryAddressインスタンスが、会員登録情報から生成されたものであれば
86       checked="checked"かつ、value="0"となるラジオボタンタグを生成する。
87       追加お届け先の場合は、checked="checked"とはならず、valueにはお届け先IDが格納された
88       ラジオボタンタグを生成する。
89
90    dependent:
91      Customer#basic_address
92
93 =end
94   def address_button(address)
95     parametors = ['address_select']
96     parametors << (address.frozen? ? '0' : address.id.to_s)
97     parametors << address.frozen?
98     radio_button_tag(parametors[0], parametors[1], parametors[2], :class => "radio_btn")
99   end
100
101 =begin rdoc
102   * INFO
103
104     parametors:
105       :address => DeliveryAddress[必須]
106
107     return:
108       引数として渡された、DeliveryAddressインスタンスが、会員登録情報から生成されたものであれば、
109       "会員登録住所"と返し、そうでない場合(追加お届け先である場合)は、"追加登録住所"と返す
110
111     dependent:
112       Customer#basic_address
113
114 =end
115   def address_type_to_s(address)
116     h(address.frozen? ? "会員登録住所" : "追加登録住所")
117   end
118
119 =begin rdoc
120   * INFO
121
122     parametors:
123       :address => DeliveryAddress[必須]
124
125     return:
126       引数として渡された、DeliveryAddressの都道府県名、市区町村、詳細住所を結合して返す
127
128 =end
129   def address_detail(address)
130     zip = '〒'+address.zipcode01 + '-' + address.zipcode02
131     addr = [address.prefecture.name, address.address_city, address.address_detail].join(' ')
132     add_name = address.family_name + ' ' + address.first_name
133     res = ''
134     res << h(zip)
135     res << '<br/>'
136     res << h(addr)
137     res << '<br/>'
138     res << h(add_name)
139   end
140
141 =begin rdoc
142   * INFO
143
144     parametors:
145       :address => DeliveryAddress[必須]
146
147     return:
148       引数として渡された、DelivaryAddressインスタンスが、会員登録住所でない場合、
149       お届け先内容変更ポップアップを開くリンクを生成する。
150
151     dependent:
152       Customer#basic_address
153
154 =end
155   def link_to_edit_address(address, custom_class = 'delivery_edit')
156     address.frozen? and return nil
157     link_to('変更', {:controller => :accounts, :action => :delivery_edit_popup, :id => address.id}, :class => custom_class)
158   end
159
160 =begin rdoc
161   * INFO
162
163     parametors:
164       :address => DeliveryAddress[必須]
165
166     return:
167       引数として渡された、DelivaryAddressインスタンスが、会員登録住所でない場合、
168       追加お届け先を削除するリンクを生成する。
169
170     dependent:
171       Customer#basic_address
172
173 =end
174   def link_to_delete_address(address, custom_class = nil)
175     link_to('削除',
176       {
177         :controller => 'accounts',
178         :action => 'delivery_destroy',
179         :id => address.id,
180         :backurl => url_for({:controller => 'cart', :action => 'shipping'})
181       },
182       {:confirm => "一度削除したデータは元には戻せません。\n削除してもよろしいですか?", :class => custom_class}
183     ) unless address.frozen?
184   end
185
186   def link_to_continue_shopping
187     if session[:cart_last_product_id]
188       link_to 'お買い物を続ける', {:controller => 'product', :action => 'show', :id => session[:cart_last_product_id]}
189     else
190       link_to 'お買い物を続ける', {:controller => 'portal', :action => 'show'}
191     end
192   end
193 end