Commit dba8a0e7d8a08ba47cda0a134e65c58f556749c8
Exists in
master
and in
29 other branches
Merge commit 'refs/merge-requests/40' of git://gitorious.org/noosfero/noosfero
Showing
16 changed files
with
1022 additions
and
3 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
1 | +include ShoppingCartPlugin::CartHelper | |
2 | + | |
1 | 3 | class ShoppingCartPluginMyprofileController < MyProfileController |
2 | 4 | append_view_path File.join(File.dirname(__FILE__) + '/../views') |
3 | 5 | |
... | ... | @@ -13,4 +15,35 @@ class ShoppingCartPluginMyprofileController < MyProfileController |
13 | 15 | end |
14 | 16 | end |
15 | 17 | |
18 | + def reports | |
19 | + utc_string = ' 00:00:00 UTC' | |
20 | + @from = params[:from] ? Time.parse(params[:from] + utc_string) : Time.now.utc.at_beginning_of_month | |
21 | + @to = params[:to] ? Time.parse(params[:to] + utc_string) : Time.now.utc | |
22 | + @status = !params[:filter_status].blank? ? params[:filter_status].to_i : nil | |
23 | + | |
24 | + condition = 'created_at >= ? AND created_at <= ?' | |
25 | + condition_parameters = [@from, @to+1.day] | |
26 | + if @status | |
27 | + condition += ' AND status == ?' | |
28 | + condition_parameters << @status | |
29 | + end | |
30 | + | |
31 | + conditions = [condition] + condition_parameters | |
32 | + @orders = profile.orders.find(:all, :conditions => conditions) | |
33 | + | |
34 | + @products = {} | |
35 | + @orders.each do |order| | |
36 | + order.products_list.each do |id, qp| | |
37 | + @products[id] ||= 0 | |
38 | + @products[id] += qp[:quantity] | |
39 | + end | |
40 | + end | |
41 | + end | |
42 | + | |
43 | + def update_order_status | |
44 | + order = ShoppingCartPlugin::PurchaseOrder.find(params[:order_id].to_i) | |
45 | + order.status = params[:order_status].to_i | |
46 | + order.save! | |
47 | + redirect_to :action => 'reports', :from => params[:context_from], :to => params[:context_to], :filter_status => params[:context_status] | |
48 | + end | |
16 | 49 | end | ... | ... |
plugins/shopping_cart/controllers/shopping_cart_plugin_profile_controller.rb
... | ... | @@ -89,6 +89,7 @@ class ShoppingCartPluginProfileController < ProfileController |
89 | 89 | end |
90 | 90 | |
91 | 91 | def send_request |
92 | + register_order(params[:customer], session[:cart][:items]) | |
92 | 93 | begin |
93 | 94 | ShoppingCartPlugin::Mailer.deliver_customer_notification(params[:customer], profile, session[:cart][:items]) |
94 | 95 | ShoppingCartPlugin::Mailer.deliver_supplier_notification(params[:customer], profile, session[:cart][:items]) |
... | ... | @@ -223,4 +224,23 @@ class ShoppingCartPluginProfileController < ProfileController |
223 | 224 | end |
224 | 225 | true |
225 | 226 | end |
227 | + | |
228 | + def register_order(custumer, items) | |
229 | + new_items = {} | |
230 | + items.each do |id, quantity| | |
231 | + new_items[id] = {:quantity => quantity, :price => Product.find(id).price} | |
232 | + end | |
233 | + ShoppingCartPlugin::PurchaseOrder.create!( | |
234 | + :seller => profile, | |
235 | + :customer => user, | |
236 | + :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED, | |
237 | + :products_list => new_items, | |
238 | + :customer_name => params[:customer][:name], | |
239 | + :customer_email => params[:customer][:email], | |
240 | + :customer_contact_phone => params[:customer][:contact_phone], | |
241 | + :customer_address => params[:customer][:address], | |
242 | + :customer_city => params[:customer][:city], | |
243 | + :customer_zip_code => params[:customer][:zip_code] | |
244 | + ) | |
245 | + end | |
226 | 246 | end | ... | ... |
plugins/shopping_cart/db/migrate/20110825173657_create_purchase_order.rb
0 → 100644
... | ... | @@ -0,0 +1,15 @@ |
1 | +class CreatePurchaseOrder < ActiveRecord::Migration | |
2 | + def self.up | |
3 | + create_table :shopping_cart_plugin_purchase_orders do |t| | |
4 | + t.references :customer | |
5 | + t.references :seller | |
6 | + t.text :data | |
7 | + t.integer :status | |
8 | + t.timestamps | |
9 | + end | |
10 | + end | |
11 | + | |
12 | + def self.down | |
13 | + drop_table :shopping_cart_plugin_purchase_order | |
14 | + end | |
15 | +end | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin.rb
1 | +require_dependency 'ext/enterprise' | |
2 | +require_dependency 'ext/person' | |
3 | + | |
1 | 4 | class ShoppingCartPlugin < Noosfero::Plugin |
2 | 5 | |
3 | 6 | def self.plugin_name |
... | ... | @@ -42,8 +45,14 @@ class ShoppingCartPlugin < Noosfero::Plugin |
42 | 45 | end |
43 | 46 | |
44 | 47 | def control_panel_buttons |
48 | + buttons = [] | |
45 | 49 | if context.profile.enterprise? |
46 | - { :title => 'Shopping cart', :icon => 'shopping_cart_icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } | |
50 | + buttons << { :title => 'Shopping cart', :icon => 'shopping_cart_icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } | |
51 | + end | |
52 | + if context.profile.enterprise? && context.profile.shopping_cart | |
53 | + buttons << { :title => 'Purchase reports', :icon => 'shopping-cart-purchase-report', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'reports'} } | |
47 | 54 | end |
55 | + | |
56 | + buttons | |
48 | 57 | end |
49 | 58 | end | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
... | ... | @@ -54,8 +54,6 @@ module ShoppingCartPlugin::CartHelper |
54 | 54 | '</table>' |
55 | 55 | end |
56 | 56 | |
57 | - private | |
58 | - | |
59 | 57 | def float_to_currency_cart(value, environment) |
60 | 58 | number_to_currency(value, :unit => environment.currency_unit, :separator => environment.currency_separator, :delimiter => environment.currency_delimiter, :format => "%u %n") |
61 | 59 | end | ... | ... |
plugins/shopping_cart/lib/shopping_cart_plugin/purchase_order.rb
0 → 100644
... | ... | @@ -0,0 +1,37 @@ |
1 | +class ShoppingCartPlugin::PurchaseOrder < Noosfero::Plugin::ActiveRecord | |
2 | + | |
3 | + belongs_to :customer, :class_name => "Profile" | |
4 | + belongs_to :seller, :class_name => "Profile" | |
5 | + | |
6 | + validates_presence_of :status, :seller | |
7 | + | |
8 | + acts_as_having_settings :field => :data | |
9 | + | |
10 | + settings_items :products_list, :type => Array, :default => {} | |
11 | + settings_items :customer_name, :type => String | |
12 | + settings_items :customer_email, :type => String | |
13 | + settings_items :customer_contact_phone, :type => String | |
14 | + settings_items :customer_address, :type => String | |
15 | + settings_items :customer_city, :type => String | |
16 | + settings_items :customer_zip_code, :type => String | |
17 | + | |
18 | + before_create do |order| | |
19 | + order.created_at = Time.now.utc | |
20 | + order.updated_at = Time.now.utc | |
21 | + end | |
22 | + | |
23 | + before_update do |order| | |
24 | + order.updated_at = Time.now.utc | |
25 | + end | |
26 | + | |
27 | + module Status | |
28 | + OPENED = 0 | |
29 | + CANCELED = 1 | |
30 | + CONFIRMED = 2 | |
31 | + SHIPPED = 3 | |
32 | + | |
33 | + def self.name | |
34 | + [_('Opened'), _('Canceled'), _('Confirmed'), _('Shipped')] | |
35 | + end | |
36 | + end | |
37 | +end | ... | ... |
2.44 KB
plugins/shopping_cart/public/images/control-panel/purchase-report.svg
0 → 100644
... | ... | @@ -0,0 +1,648 @@ |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
2 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> | |
3 | + | |
4 | +<svg | |
5 | + xmlns:dc="http://purl.org/dc/elements/1.1/" | |
6 | + xmlns:cc="http://creativecommons.org/ns#" | |
7 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
8 | + xmlns:svg="http://www.w3.org/2000/svg" | |
9 | + xmlns="http://www.w3.org/2000/svg" | |
10 | + xmlns:xlink="http://www.w3.org/1999/xlink" | |
11 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
12 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
13 | + width="48" | |
14 | + height="48" | |
15 | + id="svg2" | |
16 | + version="1.1" | |
17 | + inkscape:version="0.47 r22583" | |
18 | + sodipodi:docname="purchase-report.svg" | |
19 | + inkscape:export-filename="/home/aurium/purchase-report.png" | |
20 | + inkscape:export-xdpi="90" | |
21 | + inkscape:export-ydpi="90"> | |
22 | + <defs | |
23 | + id="defs4"> | |
24 | + <linearGradient | |
25 | + inkscape:collect="always" | |
26 | + id="linearGradient4980"> | |
27 | + <stop | |
28 | + style="stop-color:#2e3436;stop-opacity:1;" | |
29 | + offset="0" | |
30 | + id="stop4982" /> | |
31 | + <stop | |
32 | + style="stop-color:#babdb6;stop-opacity:0" | |
33 | + offset="1" | |
34 | + id="stop4984" /> | |
35 | + </linearGradient> | |
36 | + <linearGradient | |
37 | + id="linearGradient4962" | |
38 | + inkscape:collect="always"> | |
39 | + <stop | |
40 | + id="stop4964" | |
41 | + offset="0" | |
42 | + style="stop-color:#ffffff;stop-opacity:0" /> | |
43 | + <stop | |
44 | + id="stop4966" | |
45 | + offset="1" | |
46 | + style="stop-color:#ffffff;stop-opacity:1" /> | |
47 | + </linearGradient> | |
48 | + <linearGradient | |
49 | + inkscape:collect="always" | |
50 | + id="linearGradient4952"> | |
51 | + <stop | |
52 | + style="stop-color:#555753;stop-opacity:1;" | |
53 | + offset="0" | |
54 | + id="stop4954" /> | |
55 | + <stop | |
56 | + style="stop-color:#888a85;stop-opacity:1" | |
57 | + offset="1" | |
58 | + id="stop4956" /> | |
59 | + </linearGradient> | |
60 | + <linearGradient | |
61 | + inkscape:collect="always" | |
62 | + id="linearGradient4944"> | |
63 | + <stop | |
64 | + style="stop-color:#888a85;stop-opacity:1;" | |
65 | + offset="0" | |
66 | + id="stop4946" /> | |
67 | + <stop | |
68 | + style="stop-color:#555753;stop-opacity:1" | |
69 | + offset="1" | |
70 | + id="stop4948" /> | |
71 | + </linearGradient> | |
72 | + <linearGradient | |
73 | + inkscape:collect="always" | |
74 | + id="linearGradient4914"> | |
75 | + <stop | |
76 | + style="stop-color:#cccccc;stop-opacity:1" | |
77 | + offset="0" | |
78 | + id="stop4916" /> | |
79 | + <stop | |
80 | + style="stop-color:#4d4d4d;stop-opacity:1" | |
81 | + offset="1" | |
82 | + id="stop4918" /> | |
83 | + </linearGradient> | |
84 | + <linearGradient | |
85 | + inkscape:collect="always" | |
86 | + id="linearGradient4853"> | |
87 | + <stop | |
88 | + style="stop-color:#000000;stop-opacity:1;" | |
89 | + offset="0" | |
90 | + id="stop4855" /> | |
91 | + <stop | |
92 | + style="stop-color:#000000;stop-opacity:0;" | |
93 | + offset="1" | |
94 | + id="stop4857" /> | |
95 | + </linearGradient> | |
96 | + <inkscape:perspective | |
97 | + sodipodi:type="inkscape:persp3d" | |
98 | + inkscape:vp_x="0 : 526.18109 : 1" | |
99 | + inkscape:vp_y="0 : 1000 : 0" | |
100 | + inkscape:vp_z="744.09448 : 526.18109 : 1" | |
101 | + inkscape:persp3d-origin="372.04724 : 350.78739 : 1" | |
102 | + id="perspective10" /> | |
103 | + <inkscape:perspective | |
104 | + id="perspective3634" | |
105 | + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
106 | + inkscape:vp_z="1 : 0.5 : 1" | |
107 | + inkscape:vp_y="0 : 1000 : 0" | |
108 | + inkscape:vp_x="0 : 0.5 : 1" | |
109 | + sodipodi:type="inkscape:persp3d" /> | |
110 | + <inkscape:perspective | |
111 | + id="perspective3659" | |
112 | + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
113 | + inkscape:vp_z="1 : 0.5 : 1" | |
114 | + inkscape:vp_y="0 : 1000 : 0" | |
115 | + inkscape:vp_x="0 : 0.5 : 1" | |
116 | + sodipodi:type="inkscape:persp3d" /> | |
117 | + <inkscape:perspective | |
118 | + id="perspective4618" | |
119 | + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
120 | + inkscape:vp_z="1 : 0.5 : 1" | |
121 | + inkscape:vp_y="0 : 1000 : 0" | |
122 | + inkscape:vp_x="0 : 0.5 : 1" | |
123 | + sodipodi:type="inkscape:persp3d" /> | |
124 | + <linearGradient | |
125 | + id="linearGradient2251"> | |
126 | + <stop | |
127 | + style="stop-color:#ffffff;stop-opacity:1;" | |
128 | + offset="0" | |
129 | + id="stop2253" /> | |
130 | + <stop | |
131 | + style="stop-color:#ffffff;stop-opacity:0;" | |
132 | + offset="1" | |
133 | + id="stop2255" /> | |
134 | + </linearGradient> | |
135 | + <linearGradient | |
136 | + inkscape:collect="always" | |
137 | + xlink:href="#linearGradient2224" | |
138 | + id="linearGradient4602" | |
139 | + gradientUnits="userSpaceOnUse" | |
140 | + gradientTransform="translate(3.2628514,1006.5776)" | |
141 | + x1="36.237148" | |
142 | + y1="41.284599" | |
143 | + x2="33.664921" | |
144 | + y2="37.770721" /> | |
145 | + <linearGradient | |
146 | + id="linearGradient2224"> | |
147 | + <stop | |
148 | + style="stop-color:#7c7c7c;stop-opacity:1;" | |
149 | + offset="0" | |
150 | + id="stop2226" /> | |
151 | + <stop | |
152 | + style="stop-color:#b8b8b8;stop-opacity:1;" | |
153 | + offset="1" | |
154 | + id="stop2228" /> | |
155 | + </linearGradient> | |
156 | + <linearGradient | |
157 | + inkscape:collect="always" | |
158 | + xlink:href="#linearGradient2259" | |
159 | + id="linearGradient4605" | |
160 | + gradientUnits="userSpaceOnUse" | |
161 | + gradientTransform="matrix(0.999421,0,0,1,-5.0089689,998.39565)" | |
162 | + x1="26.076092" | |
163 | + y1="26.696676" | |
164 | + x2="30.811172" | |
165 | + y2="42.007351" /> | |
166 | + <linearGradient | |
167 | + inkscape:collect="always" | |
168 | + id="linearGradient2259"> | |
169 | + <stop | |
170 | + style="stop-color:#ffffff;stop-opacity:1;" | |
171 | + offset="0" | |
172 | + id="stop2261" /> | |
173 | + <stop | |
174 | + style="stop-color:#ffffff;stop-opacity:0;" | |
175 | + offset="1" | |
176 | + id="stop2263" /> | |
177 | + </linearGradient> | |
178 | + <linearGradient | |
179 | + inkscape:collect="always" | |
180 | + xlink:href="#linearGradient15218" | |
181 | + id="linearGradient4608" | |
182 | + gradientUnits="userSpaceOnUse" | |
183 | + gradientTransform="matrix(1.067236,0,0,0.989276,4.391684,4.035227)" | |
184 | + x1="22.308331" | |
185 | + y1="18.99214" | |
186 | + x2="35.785294" | |
187 | + y2="39.498238" /> | |
188 | + <linearGradient | |
189 | + id="linearGradient15218"> | |
190 | + <stop | |
191 | + style="stop-color:#f0f0ef;stop-opacity:1.0000000;" | |
192 | + offset="0.0000000" | |
193 | + id="stop15220" /> | |
194 | + <stop | |
195 | + id="stop2269" | |
196 | + offset="0.59928656" | |
197 | + style="stop-color:#e8e8e8;stop-opacity:1;" /> | |
198 | + <stop | |
199 | + id="stop2267" | |
200 | + offset="0.82758623" | |
201 | + style="stop-color:#ffffff;stop-opacity:1;" /> | |
202 | + <stop | |
203 | + style="stop-color:#d8d8d3;stop-opacity:1.0000000;" | |
204 | + offset="1.0000000" | |
205 | + id="stop15222" /> | |
206 | + </linearGradient> | |
207 | + <inkscape:perspective | |
208 | + id="perspective4722" | |
209 | + inkscape:persp3d-origin="0.5 : 0.33333333 : 1" | |
210 | + inkscape:vp_z="1 : 0.5 : 1" | |
211 | + inkscape:vp_y="0 : 1000 : 0" | |
212 | + inkscape:vp_x="0 : 0.5 : 1" | |
213 | + sodipodi:type="inkscape:persp3d" /> | |
214 | + <linearGradient | |
215 | + y2="-968.28137" | |
216 | + x2="46.01725" | |
217 | + y1="-987.48724" | |
218 | + x1="31.962252" | |
219 | + gradientTransform="matrix(1.067236,0,0,0.989276,-9.611267,2002.7597)" | |
220 | + gradientUnits="userSpaceOnUse" | |
221 | + id="linearGradient4644-0" | |
222 | + xlink:href="#linearGradient15218-5" | |
223 | + inkscape:collect="always" /> | |
224 | + <linearGradient | |
225 | + id="linearGradient15218-5"> | |
226 | + <stop | |
227 | + style="stop-color:#f0f0ef;stop-opacity:1.0000000;" | |
228 | + offset="0.0000000" | |
229 | + id="stop15220-1" /> | |
230 | + <stop | |
231 | + id="stop2269-8" | |
232 | + offset="0.59928656" | |
233 | + style="stop-color:#e8e8e8;stop-opacity:1;" /> | |
234 | + <stop | |
235 | + id="stop2267-9" | |
236 | + offset="0.82758623" | |
237 | + style="stop-color:#ffffff;stop-opacity:1;" /> | |
238 | + <stop | |
239 | + style="stop-color:#d8d8d3;stop-opacity:1.0000000;" | |
240 | + offset="1.0000000" | |
241 | + id="stop15222-1" /> | |
242 | + </linearGradient> | |
243 | + <linearGradient | |
244 | + y2="39.498238" | |
245 | + x2="35.785294" | |
246 | + y1="18.99214" | |
247 | + x1="22.308331" | |
248 | + gradientTransform="matrix(1.067236,0,0,0.989276,-11.611266,-5.9647499)" | |
249 | + gradientUnits="userSpaceOnUse" | |
250 | + id="linearGradient4733" | |
251 | + xlink:href="#linearGradient15218-5" | |
252 | + inkscape:collect="always" /> | |
253 | + <linearGradient | |
254 | + inkscape:collect="always" | |
255 | + xlink:href="#linearGradient4853" | |
256 | + id="linearGradient4870" | |
257 | + gradientUnits="userSpaceOnUse" | |
258 | + x1="32.5" | |
259 | + y1="1026.8622" | |
260 | + x2="36.5" | |
261 | + y2="1026.8622" | |
262 | + gradientTransform="translate(0,15)" /> | |
263 | + <linearGradient | |
264 | + inkscape:collect="always" | |
265 | + xlink:href="#linearGradient4914" | |
266 | + id="linearGradient4926" | |
267 | + gradientUnits="userSpaceOnUse" | |
268 | + x1="21.5" | |
269 | + y1="16.5" | |
270 | + x2="32.5" | |
271 | + y2="38.5" | |
272 | + gradientTransform="translate(0,1004.3622)" /> | |
273 | + <mask | |
274 | + maskUnits="userSpaceOnUse" | |
275 | + id="mask4922"> | |
276 | + <rect | |
277 | + style="color:#000000;fill:url(#linearGradient4926);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
278 | + id="rect4924" | |
279 | + width="34" | |
280 | + height="41" | |
281 | + x="7.5" | |
282 | + y="1006.8622" /> | |
283 | + </mask> | |
284 | + <filter | |
285 | + inkscape:collect="always" | |
286 | + id="filter4938" | |
287 | + x="-0.063571429" | |
288 | + width="1.1271429" | |
289 | + y="-1.0679999" | |
290 | + height="3.1359998"> | |
291 | + <feGaussianBlur | |
292 | + inkscape:collect="always" | |
293 | + stdDeviation="1.1124999" | |
294 | + id="feGaussianBlur4940" /> | |
295 | + </filter> | |
296 | + <linearGradient | |
297 | + inkscape:collect="always" | |
298 | + xlink:href="#linearGradient4944" | |
299 | + id="linearGradient4950" | |
300 | + x1="5.5" | |
301 | + y1="1015.8622" | |
302 | + x2="11.5" | |
303 | + y2="1049.8622" | |
304 | + gradientUnits="userSpaceOnUse" /> | |
305 | + <linearGradient | |
306 | + inkscape:collect="always" | |
307 | + xlink:href="#linearGradient4962" | |
308 | + id="linearGradient4958" | |
309 | + x1="36.5" | |
310 | + y1="1047.8622" | |
311 | + x2="31.5" | |
312 | + y2="1038.8622" | |
313 | + gradientUnits="userSpaceOnUse" /> | |
314 | + <linearGradient | |
315 | + inkscape:collect="always" | |
316 | + xlink:href="#linearGradient4952" | |
317 | + id="linearGradient4960" | |
318 | + gradientUnits="userSpaceOnUse" | |
319 | + x1="34.5" | |
320 | + y1="1046.8622" | |
321 | + x2="29.5" | |
322 | + y2="1039.8622" /> | |
323 | + <linearGradient | |
324 | + inkscape:collect="always" | |
325 | + xlink:href="#linearGradient4962" | |
326 | + id="linearGradient4968" | |
327 | + gradientUnits="userSpaceOnUse" | |
328 | + x1="37.420265" | |
329 | + y1="1044.8622" | |
330 | + x2="36.5" | |
331 | + y2="1043.8622" /> | |
332 | + <linearGradient | |
333 | + inkscape:collect="always" | |
334 | + xlink:href="#linearGradient4980" | |
335 | + id="linearGradient4986" | |
336 | + x1="38.5" | |
337 | + y1="41.5" | |
338 | + x2="41.5" | |
339 | + y2="44.5" | |
340 | + gradientUnits="userSpaceOnUse" /> | |
341 | + </defs> | |
342 | + <sodipodi:namedview | |
343 | + id="base" | |
344 | + pagecolor="#ffffff" | |
345 | + bordercolor="#666666" | |
346 | + borderopacity="1.0" | |
347 | + inkscape:pageopacity="0.0" | |
348 | + inkscape:pageshadow="2" | |
349 | + inkscape:zoom="12.541667" | |
350 | + inkscape:cx="24" | |
351 | + inkscape:cy="24" | |
352 | + inkscape:document-units="px" | |
353 | + inkscape:current-layer="layer1" | |
354 | + showgrid="true" | |
355 | + inkscape:window-width="1440" | |
356 | + inkscape:window-height="827" | |
357 | + inkscape:window-x="0" | |
358 | + inkscape:window-y="25" | |
359 | + inkscape:window-maximized="1"> | |
360 | + <inkscape:grid | |
361 | + type="xygrid" | |
362 | + id="grid2816" | |
363 | + empspacing="5" | |
364 | + visible="true" | |
365 | + enabled="true" | |
366 | + snapvisiblegridlinesonly="true" | |
367 | + spacingx="1px" | |
368 | + originx="0.5px" | |
369 | + originy="0.5px" /> | |
370 | + </sodipodi:namedview> | |
371 | + <metadata | |
372 | + id="metadata7"> | |
373 | + <rdf:RDF> | |
374 | + <cc:Work | |
375 | + rdf:about=""> | |
376 | + <dc:format>image/svg+xml</dc:format> | |
377 | + <dc:type | |
378 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
379 | + <dc:title></dc:title> | |
380 | + </cc:Work> | |
381 | + </rdf:RDF> | |
382 | + </metadata> | |
383 | + <g | |
384 | + inkscape:label="Camada 1" | |
385 | + inkscape:groupmode="layer" | |
386 | + id="layer1" | |
387 | + transform="translate(0,-1004.3622)"> | |
388 | + <rect | |
389 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;filter:url(#filter4938);opacity:0.7" | |
390 | + id="rect4928" | |
391 | + width="41.999996" | |
392 | + height="2.5" | |
393 | + x="3.5" | |
394 | + y="43.5" | |
395 | + transform="translate(0,1004.3622)" | |
396 | + ry="1" /> | |
397 | + <rect | |
398 | + style="color:#000000;fill:url(#linearGradient4644-0);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4950);stroke-width:1.00000024000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
399 | + id="rect4699" | |
400 | + width="38" | |
401 | + height="45" | |
402 | + x="5.5" | |
403 | + y="1004.8622" | |
404 | + ry="1" /> | |
405 | + <path | |
406 | + style="fill:url(#linearGradient4986);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1;opacity:0.59999999999999998" | |
407 | + d="M 33.5,45 43,36.5 43,45 33.5,45 z" | |
408 | + id="path4970" | |
409 | + transform="translate(0,1004.3622)" | |
410 | + sodipodi:nodetypes="cccc" /> | |
411 | + <rect | |
412 | + style="fill:none;stroke:url(#linearGradient4605);stroke-width:1.00000083;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" | |
413 | + id="rect15244" | |
414 | + width="35.997337" | |
415 | + height="43.000019" | |
416 | + x="6.5026627" | |
417 | + y="1005.8622" | |
418 | + rx="0" | |
419 | + ry="0" /> | |
420 | + <g | |
421 | + id="g4873" | |
422 | + mask="url(#mask4922)"> | |
423 | + <g | |
424 | + transform="translate(6,1)" | |
425 | + id="g4757"> | |
426 | + <path | |
427 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" | |
428 | + d="m 2.5,2.5 2,0 0,8 12,0 0,-6" | |
429 | + id="path2839" | |
430 | + transform="translate(0,1004.3622)" | |
431 | + sodipodi:nodetypes="ccccc" /> | |
432 | + <path | |
433 | + sodipodi:nodetypes="cccccc" | |
434 | + id="path3619" | |
435 | + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 1;stroke-dashoffset:0" | |
436 | + d="m 15,1012.8622 -9.5,0 m 9.5,-2 -9.5,0 m 9.5,-2 -9.5,0" /> | |
437 | + <path | |
438 | + transform="translate(7.5,1000.8622)" | |
439 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
440 | + sodipodi:ry="1.5" | |
441 | + sodipodi:rx="1.5" | |
442 | + sodipodi:cy="16" | |
443 | + sodipodi:cx="7" | |
444 | + id="path3647" | |
445 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
446 | + sodipodi:type="arc" /> | |
447 | + <path | |
448 | + sodipodi:type="arc" | |
449 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
450 | + id="path4776" | |
451 | + sodipodi:cx="7" | |
452 | + sodipodi:cy="16" | |
453 | + sodipodi:rx="1.5" | |
454 | + sodipodi:ry="1.5" | |
455 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
456 | + transform="translate(-1,1000.8622)" /> | |
457 | + </g> | |
458 | + <g | |
459 | + id="g4778" | |
460 | + transform="translate(6,15)"> | |
461 | + <path | |
462 | + sodipodi:nodetypes="ccccc" | |
463 | + transform="translate(0,1004.3622)" | |
464 | + id="path4780" | |
465 | + d="m 2.5,2.5 2,0 0,8 12,0 0,-6" | |
466 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" /> | |
467 | + <path | |
468 | + d="m 15,1012.8622 -9.5,0 m 9.5,-2 -9.5,0 m 9.5,-2 -9.5,0" | |
469 | + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 1;stroke-dashoffset:0" | |
470 | + id="path4782" | |
471 | + sodipodi:nodetypes="cccccc" /> | |
472 | + <path | |
473 | + sodipodi:type="arc" | |
474 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
475 | + id="path4784" | |
476 | + sodipodi:cx="7" | |
477 | + sodipodi:cy="16" | |
478 | + sodipodi:rx="1.5" | |
479 | + sodipodi:ry="1.5" | |
480 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
481 | + transform="translate(7.5,1000.8622)" /> | |
482 | + <path | |
483 | + transform="translate(-1,1000.8622)" | |
484 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
485 | + sodipodi:ry="1.5" | |
486 | + sodipodi:rx="1.5" | |
487 | + sodipodi:cy="16" | |
488 | + sodipodi:cx="7" | |
489 | + id="path4786" | |
490 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
491 | + sodipodi:type="arc" /> | |
492 | + </g> | |
493 | + <g | |
494 | + transform="translate(6,29)" | |
495 | + id="g4788"> | |
496 | + <path | |
497 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" | |
498 | + d="m 2.5,2.5 2,0 0,8 12,0 0,-6" | |
499 | + id="path4790" | |
500 | + transform="translate(0,1004.3622)" | |
501 | + sodipodi:nodetypes="ccccc" /> | |
502 | + <path | |
503 | + sodipodi:nodetypes="cccccc" | |
504 | + id="path4792" | |
505 | + style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:1, 1;stroke-dashoffset:0" | |
506 | + d="m 15,1012.8622 -9.5,0 m 9.5,-2 -9.5,0 m 9.5,-2 -9.5,0" /> | |
507 | + <path | |
508 | + transform="translate(7.5,1000.8622)" | |
509 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
510 | + sodipodi:ry="1.5" | |
511 | + sodipodi:rx="1.5" | |
512 | + sodipodi:cy="16" | |
513 | + sodipodi:cx="7" | |
514 | + id="path4794" | |
515 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
516 | + sodipodi:type="arc" /> | |
517 | + <path | |
518 | + sodipodi:type="arc" | |
519 | + style="color:#000000;fill:#000000;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
520 | + id="path4796" | |
521 | + sodipodi:cx="7" | |
522 | + sodipodi:cy="16" | |
523 | + sodipodi:rx="1.5" | |
524 | + sodipodi:ry="1.5" | |
525 | + d="m 8.5,16 c 0,0.828427 -0.6715729,1.5 -1.5,1.5 -0.8284271,0 -1.5,-0.671573 -1.5,-1.5 0,-0.828427 0.6715729,-1.5 1.5,-1.5 0.8284271,0 1.5,0.671573 1.5,1.5 z" | |
526 | + transform="translate(-1,1000.8622)" /> | |
527 | + </g> | |
528 | + <path | |
529 | + sodipodi:nodetypes="cccccc" | |
530 | + d="m 29.5,1015.8622 11,0 m -11,-3 11,0 m -11,-3 11,0" | |
531 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | |
532 | + id="path4802" /> | |
533 | + <path | |
534 | + transform="translate(0,1004.3622)" | |
535 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
536 | + sodipodi:ry="1" | |
537 | + sodipodi:rx="1" | |
538 | + sodipodi:cy="5.5" | |
539 | + sodipodi:cx="26.5" | |
540 | + id="path4804" | |
541 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
542 | + sodipodi:type="arc" /> | |
543 | + <path | |
544 | + sodipodi:type="arc" | |
545 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
546 | + id="path4806" | |
547 | + sodipodi:cx="26.5" | |
548 | + sodipodi:cy="5.5" | |
549 | + sodipodi:rx="1" | |
550 | + sodipodi:ry="1" | |
551 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
552 | + transform="translate(0,1007.3622)" /> | |
553 | + <path | |
554 | + transform="translate(0,1010.3622)" | |
555 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
556 | + sodipodi:ry="1" | |
557 | + sodipodi:rx="1" | |
558 | + sodipodi:cy="5.5" | |
559 | + sodipodi:cx="26.5" | |
560 | + id="path4808" | |
561 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
562 | + sodipodi:type="arc" /> | |
563 | + <path | |
564 | + id="path4811" | |
565 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | |
566 | + d="m 29.5,1029.8622 11,0 m -11,-3 11,0 m -11,-3 11,0" | |
567 | + sodipodi:nodetypes="cccccc" /> | |
568 | + <path | |
569 | + sodipodi:type="arc" | |
570 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
571 | + id="path4813" | |
572 | + sodipodi:cx="26.5" | |
573 | + sodipodi:cy="5.5" | |
574 | + sodipodi:rx="1" | |
575 | + sodipodi:ry="1" | |
576 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
577 | + transform="translate(0,1018.3622)" /> | |
578 | + <path | |
579 | + transform="translate(0,1021.3622)" | |
580 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
581 | + sodipodi:ry="1" | |
582 | + sodipodi:rx="1" | |
583 | + sodipodi:cy="5.5" | |
584 | + sodipodi:cx="26.5" | |
585 | + id="path4815" | |
586 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
587 | + sodipodi:type="arc" /> | |
588 | + <path | |
589 | + sodipodi:type="arc" | |
590 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
591 | + id="path4817" | |
592 | + sodipodi:cx="26.5" | |
593 | + sodipodi:cy="5.5" | |
594 | + sodipodi:rx="1" | |
595 | + sodipodi:ry="1" | |
596 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
597 | + transform="translate(0,1024.3622)" /> | |
598 | + <path | |
599 | + id="path4827" | |
600 | + style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | |
601 | + d="m 29.5,1038.8622 11,0 m -11,3 11,0 m -11,3 9,0" /> | |
602 | + <path | |
603 | + transform="translate(0,1033.3622)" | |
604 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
605 | + sodipodi:ry="1" | |
606 | + sodipodi:rx="1" | |
607 | + sodipodi:cy="5.5" | |
608 | + sodipodi:cx="26.5" | |
609 | + id="path4829" | |
610 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
611 | + sodipodi:type="arc" /> | |
612 | + <path | |
613 | + sodipodi:type="arc" | |
614 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
615 | + id="path4831" | |
616 | + sodipodi:cx="26.5" | |
617 | + sodipodi:cy="5.5" | |
618 | + sodipodi:rx="1" | |
619 | + sodipodi:ry="1" | |
620 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
621 | + transform="translate(0,1036.3622)" /> | |
622 | + <path | |
623 | + transform="translate(0,1039.3622)" | |
624 | + d="m 27.5,5.5 a 1,1 0 1 1 -2,0 1,1 0 1 1 2,0 z" | |
625 | + sodipodi:ry="1" | |
626 | + sodipodi:rx="1" | |
627 | + sodipodi:cy="5.5" | |
628 | + sodipodi:cx="26.5" | |
629 | + id="path4833" | |
630 | + style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" | |
631 | + sodipodi:type="arc" /> | |
632 | + </g> | |
633 | + <g | |
634 | + id="g4835" | |
635 | + style="stroke:url(#linearGradient4958)"> | |
636 | + <path | |
637 | + sodipodi:nodetypes="csccc" | |
638 | + id="path2210" | |
639 | + d="m 30.5,1049.8622 c 3,0 4.031657,-1.3115 7,-4 2.357963,-2.1356 6,-4 6,-8 0,5 -5,4 -10,4 0,4 1,8 -3,8 z" | |
640 | + style="color:#000000;fill:url(#linearGradient4602);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4960);stroke-width:1.00000024000000010;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" /> | |
641 | + <path | |
642 | + style="opacity:0.50000000000000000;color:#000000;fill:none;stroke:url(#linearGradient4968);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible" | |
643 | + d="m 39.5,1042.8622 -5,0 0,4" | |
644 | + id="path2247" | |
645 | + sodipodi:nodetypes="ccc" /> | |
646 | + </g> | |
647 | + </g> | |
648 | +</svg> | ... | ... |
plugins/shopping_cart/public/style.css
... | ... | @@ -168,3 +168,47 @@ label.error { |
168 | 168 | padding-left: .5em; |
169 | 169 | vertical-align: top; |
170 | 170 | } |
171 | + | |
172 | +.controller-profile_editor a.control-panel-shopping-cart-purchase-report {background-image: url(images/control-panel/purchase-report.png)} | |
173 | +.controller-profile_editor .msie6 a.control-panel-shopping-cart-purchase-report {background-image: url(images/control-panel/purchase-report.gif)} | |
174 | +.controller-profile_editor a.control-panel-shopping-cart {background-image: url(/images/control-panel/shopping-cart.png)} | |
175 | +.controller-profile_editor .msie6 a.control-panel-shopping-cart {background-image: url(/images/control-panel/shopping-cart.gif)} | |
176 | + | |
177 | +.action-shopping_cart_plugin_myprofile-reports td.order-info { | |
178 | + padding: 0px; | |
179 | + height: auto; | |
180 | +} | |
181 | + | |
182 | +.action-shopping_cart_plugin_myprofile-reports .customer-details, | |
183 | +.action-shopping_cart_plugin_myprofile-reports .order-products { | |
184 | + list-style-position: inside; | |
185 | + float: left; | |
186 | + width: 49%; | |
187 | + margin: 0px; | |
188 | + padding: 10px 0px; | |
189 | +} | |
190 | + | |
191 | +.action-shopping_cart_plugin_myprofile-reports .order-products { | |
192 | + float: right; | |
193 | +} | |
194 | + | |
195 | +.action-shopping_cart_plugin_myprofile-reports .customer-details li, | |
196 | +.action-shopping_cart_plugin_myprofile-reports .order-products li { | |
197 | + padding-left: 5px; | |
198 | +} | |
199 | + | |
200 | +#order-filter { | |
201 | + background-color: #ccc; | |
202 | + border: 1px solid #aaa; | |
203 | + border-radius: 5px; | |
204 | + padding: 3px 8px; | |
205 | + margin-bottom: 10px; | |
206 | +} | |
207 | + | |
208 | +th { | |
209 | + text-align: center; | |
210 | +} | |
211 | + | |
212 | +td { | |
213 | + text-align: left; | |
214 | +} | ... | ... |
plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb
... | ... | @@ -6,6 +6,8 @@ class ShoppingCartPluginMyprofileController; def rescue_action(e) raise e end; e |
6 | 6 | |
7 | 7 | class ShoppingCartPluginMyprofileControllerTest < Test::Unit::TestCase |
8 | 8 | |
9 | + TIME_FORMAT = '%Y-%m-%d' | |
10 | + | |
9 | 11 | def setup |
10 | 12 | @controller = ShoppingCartPluginMyprofileController.new |
11 | 13 | @request = ActionController::TestRequest.new |
... | ... | @@ -59,4 +61,56 @@ class ShoppingCartPluginMyprofileControllerTest < Test::Unit::TestCase |
59 | 61 | enterprise.reload |
60 | 62 | assert enterprise.shopping_cart_delivery_price == price |
61 | 63 | end |
64 | + | |
65 | + should 'filter the reports correctly' do | |
66 | + another_enterprise = fast_create(Enterprise) | |
67 | + po1 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
68 | + po2 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :status => ShoppingCartPlugin::PurchaseOrder::Status::SHIPPED) | |
69 | + po3 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
70 | + po3.created_at = 1.year.ago | |
71 | + po3.save! | |
72 | + po4 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => another_enterprise, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
73 | + | |
74 | + post :reports, | |
75 | + :profile => enterprise.identifier, | |
76 | + :from => (Time.now - 1.day).strftime(TIME_FORMAT), | |
77 | + :to => (Time.now + 1.day).strftime(TIME_FORMAT), | |
78 | + :filter_status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED | |
79 | + | |
80 | + assert_includes assigns(:orders), po1 | |
81 | + assert_not_includes assigns(:orders), po2 | |
82 | + assert_not_includes assigns(:orders), po3 | |
83 | + assert_not_includes assigns(:orders), po4 | |
84 | + end | |
85 | + | |
86 | + should 'group filtered orders products and quantities' do | |
87 | + p1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1) | |
88 | + p2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2) | |
89 | + p3 = fast_create(Product, :enterprise_id => enterprise.id, :price => 3) | |
90 | + po1_products = {p1.id => {:quantity => 1, :price => p1.price}, p2.id => {:quantity => 2, :price => p2.price }} | |
91 | + po2_products = {p2.id => {:quantity => 1, :price => p2.price}, p3.id => {:quantity => 2, :price => p3.price }} | |
92 | + po1 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :products_list => po1_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
93 | + po2 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :products_list => po2_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
94 | + | |
95 | + post :reports, | |
96 | + :profile => enterprise.identifier, | |
97 | + :from => (Time.now - 1.day).strftime(TIME_FORMAT), | |
98 | + :to => (Time.now + 1.day).strftime(TIME_FORMAT), | |
99 | + :filter_status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED | |
100 | + | |
101 | + hash = {p1.id => 1, p2.id => 3, p3.id => 2} | |
102 | + | |
103 | + assert_equal hash, assigns(:products) | |
104 | + end | |
105 | + | |
106 | + should 'be able to update the order status' do | |
107 | + po = ShoppingCartPlugin::PurchaseOrder.create!(:seller => enterprise, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | |
108 | + | |
109 | + post :update_order_status, | |
110 | + :profile => enterprise.identifier, | |
111 | + :order_id => po.id, | |
112 | + :order_status => ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED | |
113 | + po.reload | |
114 | + assert_equal ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED, po.status | |
115 | + end | |
62 | 116 | end | ... | ... |
plugins/shopping_cart/test/functional/shopping_cart_plugin_profile_controller_test.rb
... | ... | @@ -144,6 +144,25 @@ class ShoppingCartPluginProfileControllerTest < Test::Unit::TestCase |
144 | 144 | assert_nothing_raised { get :clean, :profile => enterprise.identifier } |
145 | 145 | end |
146 | 146 | |
147 | + should 'register order on send request' do | |
148 | + product1 = fast_create(Product, :enterprise_id => enterprise.id, :price => 1.99) | |
149 | + product2 = fast_create(Product, :enterprise_id => enterprise.id, :price => 2.23) | |
150 | + @controller.stubs(:session).returns({:cart => {:items => {product1.id => 1, product2.id => 2}}}) | |
151 | + assert_difference ShoppingCartPlugin::PurchaseOrder, :count, 1 do | |
152 | + post :send_request, | |
153 | + :customer => {:name => "Manuel", :email => "manuel@ceu.com"}, | |
154 | + :profile => enterprise.identifier | |
155 | + end | |
156 | + | |
157 | + order = ShoppingCartPlugin::PurchaseOrder.last | |
158 | + | |
159 | + assert_equal 1.99, order.products_list[product1.id][:price] | |
160 | + assert_equal 1, order.products_list[product1.id][:quantity] | |
161 | + assert_equal 2.23, order.products_list[product2.id][:price] | |
162 | + assert_equal 2, order.products_list[product2.id][:quantity] | |
163 | + assert_equal ShoppingCartPlugin::PurchaseOrder::Status::OPENED, order.status | |
164 | + end | |
165 | + | |
147 | 166 | private |
148 | 167 | |
149 | 168 | def json_response | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb
0 → 100644
... | ... | @@ -0,0 +1,59 @@ |
1 | +<% if @orders.empty? %> | |
2 | + <p><i><%= _("No results.") %></i></p> | |
3 | +<% else %> | |
4 | + <table> | |
5 | + <tr> | |
6 | + <th><%= _('Date') %></th> | |
7 | + <th><%= _('Customer') %></th> | |
8 | + <th><%= _('Purchase value') %></th> | |
9 | + <th><%= _('Status')%></th> | |
10 | + <th> </th> | |
11 | + </tr> | |
12 | + <% status_collection.delete_at(0) %> | |
13 | + <% @orders.each do |order|%> | |
14 | + <tr> | |
15 | + <td><%= order.created_at.strftime("%Y-%m-%d")%></td> | |
16 | + <td><%= order.customer_name %></td> | |
17 | + <td style="text-align: right"><%= float_to_currency_cart(order.products_list.sum {|id, qp| qp[:price]*qp[:quantity]}, environment) %></td> | |
18 | + <td> | |
19 | + <% form_tag :action => 'update_order_status' do %> | |
20 | + <%= hidden_field_tag(:order_id, order.id) + | |
21 | + hidden_field_tag(:context_from, @from) + | |
22 | + hidden_field_tag(:context_to, @to) + | |
23 | + hidden_field_tag(:context_status, @status) + | |
24 | + select_tag( :order_status, options_from_collection_for_select(status_collection, :first, :last, order.status), | |
25 | + :onchange => "this.form.submit()" ) | |
26 | + %> | |
27 | + <% end %> | |
28 | + </td> | |
29 | + <td><button class="view-order-details" data-order="<%=order.id%>"><%=_('View details')%></button></td> | |
30 | + </tr> | |
31 | + <tr id="order-details-<%=order.id%>" style="display:none"> | |
32 | + <td class="order-info" colspan="5"> | |
33 | + <div style="display:none"> | |
34 | + <ul class="customer-details"> | |
35 | + <% { 'name' =>_('Name'), 'email' => _('E-mail'), 'contact_phone' => _('Contact phone'), 'address' => _('Address'), 'city' => _('City'), 'zip_code' => _('Zip code')}.each do |attribute, name| %> | |
36 | + <%= content_tag('li', content_tag('strong', name+': ') + order.send('customer_'+attribute)) if !order.send('customer_'+attribute).blank? %> | |
37 | + <% end %> | |
38 | + </ul> | |
39 | + <ul class="order-products"> | |
40 | + <% order.products_list.each do |id, qp| %> | |
41 | + <% | |
42 | + begin | |
43 | + product = Product.find(id) | |
44 | + rescue | |
45 | + product = nil | |
46 | + end | |
47 | + %> | |
48 | + <li><%= product ? link_to(product.name, product.url) : _("Pruduct unavailable")%> | |
49 | + × <%= qp[:quantity] %> = <%= float_to_currency_cart( qp[:quantity] * qp[:price], environment ) %></li> | |
50 | + <% end %> | |
51 | + </ul> | |
52 | + <br style="clear:both"/> | |
53 | + </div> | |
54 | + </td> | |
55 | + </tr> | |
56 | + <% end %> | |
57 | + </table> | |
58 | +<% end %> | |
59 | + | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb
0 → 100644
... | ... | @@ -0,0 +1,17 @@ |
1 | +<% if @products.empty? %> | |
2 | + <p><i><%= _("No results.") %></i></p> | |
3 | +<% else %> | |
4 | + <table> | |
5 | + <tr> | |
6 | + <th><%= _('Product') %></th> | |
7 | + <th><%= _('Quantity') %></th> | |
8 | + </tr> | |
9 | + <% @products.each do |id, quantity|%> | |
10 | + <tr> | |
11 | + <td><%= link_to(Product.find(id).name, Product.find(id).url) %></td> | |
12 | + <td style="text-align: center"><%= quantity %></td> | |
13 | + </tr> | |
14 | + <% end %> | |
15 | + </table> | |
16 | +<% end %> | |
17 | + | ... | ... |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/reports.html.erb
0 → 100644
... | ... | @@ -0,0 +1,56 @@ |
1 | +<h1> <%= _('Purchase Reports') %> </h1> | |
2 | + | |
3 | +<% extend ProfileHelper %> | |
4 | + | |
5 | +<% status = ShoppingCartPlugin::PurchaseOrder::Status.name; pos=-1 %> | |
6 | +<% status_collection = [[nil, _('All')]] %> | |
7 | +<% status_collection += status.map{|s| [pos+=1, s] } %> | |
8 | + | |
9 | +<% form_tag({}, {:id => 'order-filter'}) do %> | |
10 | + <%= labelled_text_field(_('From')+' ', :from, @from.strftime("%Y-%m-%d"), :id => 'from', :size => 9) %> | |
11 | + <%= labelled_text_field(_('to')+' ', :to, @to.strftime("%Y-%m-%d"), :id => 'to', :size => 9) %> | |
12 | + <span style="white-space:nowrap"><%= labelled_select(_('Status')+' ', :filter_status, :first, :last, @status, status_collection)%></span> | |
13 | + | |
14 | + <%= submit_button('save', _('Filter')) %> | |
15 | +<% end %> | |
16 | + | |
17 | +<% tabs = [] %> | |
18 | +<% tabs << {:title => _('Products list'), :id => 'products_list', :content => (render :partial => 'products_list')} %> | |
19 | +<% tabs << {:title => _('Orders list'), :id => 'orders_list', :content => (render :partial => 'orders_list', :locals => {:status_collection => status_collection})} %> | |
20 | +<%= render_tabs(tabs) %> | |
21 | + | |
22 | +<script> | |
23 | + var dates = jQuery( "#from, #to" ).datepicker({ | |
24 | + defaultDate: "+1w", | |
25 | + changeMonth: true, | |
26 | + dateFormat: 'yy-mm-dd', | |
27 | + onSelect: function( selectedDate ) { | |
28 | + var option = this.id == "from" ? "minDate" : "maxDate", | |
29 | + instance = jQuery( this ).data( "datepicker" ), | |
30 | + date = jQuery.datepicker.parseDate( | |
31 | + instance.settings.dateFormat || | |
32 | + jQuery.datepicker._defaults.dateFormat, | |
33 | + selectedDate, instance.settings ); | |
34 | + dates.not( this ).datepicker( "option", option, date ); | |
35 | + } | |
36 | + }); | |
37 | + jQuery(".view-order-details").each(function(index, bt){ | |
38 | + jQuery(bt).button({ | |
39 | + icons: { | |
40 | + primary: "ui-icon-info" | |
41 | + }, | |
42 | + text: false | |
43 | + }); | |
44 | + bt.onclick = function(){ | |
45 | + var orderId = this.getAttribute("data-order"); | |
46 | + var tr = jQuery("#order-details-"+orderId); | |
47 | + var div = jQuery("#order-details-"+orderId+" div"); | |
48 | + if ( tr[0].style.display == "none" ) { | |
49 | + tr.show(); | |
50 | + div.slideDown('fast'); | |
51 | + } else { | |
52 | + div.slideUp("fast", function(){tr.hide()}); | |
53 | + } | |
54 | + } | |
55 | + }); | |
56 | +</script> | ... | ... |