Commit 885502fc98104a3b68e1422412b03d9af571a510
1 parent
5faa5da5
Exists in
master
and in
21 other branches
shopping_cart: refactor to use orders and delivery plugins
Showing
45 changed files
with
1173 additions
and
1787 deletions
Show diff stats
plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb
1 | require 'base64' | 1 | require 'base64' |
2 | 2 | ||
3 | -class ShoppingCartPluginController < PublicController | 3 | +class ShoppingCartPluginController < OrdersPluginController |
4 | 4 | ||
5 | include ShoppingCartPlugin::CartHelper | 5 | include ShoppingCartPlugin::CartHelper |
6 | helper ShoppingCartPlugin::CartHelper | 6 | helper ShoppingCartPlugin::CartHelper |
7 | 7 | ||
8 | - append_view_path File.join(File.dirname(__FILE__) + '/../views') | ||
9 | - before_filter :login_required, :only => [] | ||
10 | - | ||
11 | - before_filter :login_required, :only => [] | ||
12 | - | ||
13 | def get | 8 | def get |
14 | config = | 9 | config = |
15 | if cart.nil? | 10 | if cart.nil? |
16 | - { :profile_id => nil, | 11 | + { :profile_id => params[:profile_id], |
17 | :has_products => false, | 12 | :has_products => false, |
18 | :visible => false, | 13 | :visible => false, |
19 | :products => []} | 14 | :products => []} |
20 | else | 15 | else |
21 | - { :profile_id => cart[:profile_id], | 16 | + { |
17 | + :profile_id => cart[:profile_id], | ||
18 | + :profile_short_name => cart_profile.short_name, | ||
22 | :has_products => (cart[:items].keys.size > 0), | 19 | :has_products => (cart[:items].keys.size > 0), |
23 | :visible => visible?, | 20 | :visible => visible?, |
24 | - :products => products} | 21 | + :products => products, |
22 | + } | ||
25 | end | 23 | end |
24 | + config[:has_previous_orders] = if cart_profile then previous_orders.first.present? else false end | ||
26 | render :text => config.to_json | 25 | render :text => config.to_json |
27 | end | 26 | end |
28 | 27 | ||
29 | def add | 28 | def add |
30 | product = find_product(params[:id]) | 29 | product = find_product(params[:id]) |
31 | - if product && profile = validate_same_profile(product) | ||
32 | - self.cart = { :profile_id => profile.id, :items => {} } if self.cart.nil? | ||
33 | - self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? | ||
34 | - self.cart[:items][product.id] += 1 | ||
35 | - render :text => { | ||
36 | - :ok => true, | ||
37 | - :error => {:code => 0}, | ||
38 | - :products => [{ | ||
39 | - :id => product.id, | ||
40 | - :name => product.name, | ||
41 | - :price => get_price(product, profile.environment), | ||
42 | - :description => product.description, | ||
43 | - :picture => product.default_image(:minor), | ||
44 | - :quantity => self.cart[:items][product.id] | ||
45 | - }] | ||
46 | - }.to_json | 30 | + if product && (profile = validate_same_profile(product)) |
31 | + self.cart = { :profile_id => profile.id, :items => {} } if self.cart.nil? | ||
32 | + self.cart[:items][product.id] = 0 if self.cart[:items][product.id].nil? | ||
33 | + self.cart[:items][product.id] += 1 | ||
34 | + render :text => { | ||
35 | + :ok => true, | ||
36 | + :error => {:code => 0}, | ||
37 | + :products => [{ | ||
38 | + :id => product.id, | ||
39 | + :name => product.name, | ||
40 | + :price => get_price(product, profile.environment), | ||
41 | + :description => product.description, | ||
42 | + :picture => product.default_image(:minor), | ||
43 | + :quantity => self.cart[:items][product.id] | ||
44 | + }] | ||
45 | + }.to_json | ||
47 | end | 46 | end |
48 | end | 47 | end |
49 | 48 | ||
@@ -93,36 +92,56 @@ class ShoppingCartPluginController < PublicController | @@ -93,36 +92,56 @@ class ShoppingCartPluginController < PublicController | ||
93 | }.to_json | 92 | }.to_json |
94 | end | 93 | end |
95 | 94 | ||
95 | + # override from OrdersPluginController | ||
96 | + def repeat | ||
97 | + unless params[:id].present? | ||
98 | + @orders = previous_orders.last(5).reverse | ||
99 | + @orders.each{ |o| o.enable_product_diff } | ||
100 | + else | ||
101 | + @order = cart_profile.orders.find params[:id] | ||
102 | + self.cart = { profile_id: cart_profile.id, items: {} } | ||
103 | + @order.items.each do |item| | ||
104 | + next unless item.repeat_product and item.repeat_product.available | ||
105 | + self.cart[:items][item.repeat_product.id] = item.quantity_consumer_ordered.to_i | ||
106 | + end | ||
107 | + self.cart[:repeat_order_id] = @order.id | ||
108 | + | ||
109 | + render json: { | ||
110 | + products: products, | ||
111 | + } | ||
112 | + end | ||
113 | + end | ||
114 | + | ||
96 | def buy | 115 | def buy |
116 | + @no_design_blocks = true | ||
97 | @customer = user || Person.new | 117 | @customer = user || Person.new |
98 | - if validate_cart_presence | ||
99 | - @cart = cart | ||
100 | - @profile = environment.profiles.find(cart[:profile_id]) | ||
101 | - @settings = Noosfero::Plugin::Settings.new(@profile, ShoppingCartPlugin) | ||
102 | - render :layout => false | 118 | + return redirect_to request.referer || environment.top_url if self.cart.nil? |
119 | + @settings = cart_profile.shopping_cart_settings | ||
120 | + @cart = cart | ||
121 | + @profile = cart_profile | ||
122 | + @order = profile.sales.build consumer: user | ||
123 | + | ||
124 | + @order.supplier_delivery = profile.delivery_methods.find session[:cart][:last_delivery_option_id] rescue nil | ||
125 | + if repeat_order_id = self.cart[:repeat_order_id] | ||
126 | + repeat_order = cart_profile.orders.where(id: repeat_order_id).first | ||
127 | + @order.consumer_delivery_data = repeat_order.consumer_delivery_data if repeat_order | ||
103 | end | 128 | end |
104 | end | 129 | end |
105 | 130 | ||
106 | def send_request | 131 | def send_request |
107 | - register_order(params[:customer], self.cart[:items]) | 132 | + order = register_order(params[:customer], self.cart[:items]) |
108 | begin | 133 | begin |
109 | - profile = environment.profiles.find(cart[:profile_id]) | ||
110 | - ShoppingCartPlugin::Mailer.customer_notification(params[:customer], profile, self.cart[:items], params[:delivery_option]).deliver | ||
111 | - ShoppingCartPlugin::Mailer.supplier_notification(params[:customer], profile, self.cart[:items], params[:delivery_option]).deliver | 134 | + ShoppingCartPlugin::Mailer.customer_notification(order, self.cart[:items]).deliver |
135 | + ShoppingCartPlugin::Mailer.supplier_notification(order, self.cart[:items]).deliver | ||
136 | + session[:notice] = _('Your order has been sent successfully! You will receive a confirmation e-mail shortly.') | ||
137 | + @success = true | ||
138 | + @profile = cart_profile | ||
139 | + session[:cart] ||= {} | ||
140 | + session[:cart][:last_delivery_option_id] = order.supplier_delivery_id | ||
112 | self.cart = nil | 141 | self.cart = nil |
113 | - render :text => { | ||
114 | - :ok => true, | ||
115 | - :message => _('Request sent successfully. Check your email.'), | ||
116 | - :error => {:code => 0} | ||
117 | - }.to_json | ||
118 | - rescue ActiveRecord::ActiveRecordError | ||
119 | - render :text => { | ||
120 | - :ok => false, | ||
121 | - :error => { | ||
122 | - :code => 6, | ||
123 | - :message => exception.message | ||
124 | - } | ||
125 | - }.to_json | 142 | + rescue ActiveRecord::ActiveRecordError => exception |
143 | + @success = false | ||
144 | + @error = exception.message | ||
126 | end | 145 | end |
127 | end | 146 | end |
128 | 147 | ||
@@ -168,35 +187,35 @@ class ShoppingCartPluginController < PublicController | @@ -168,35 +187,35 @@ class ShoppingCartPluginController < PublicController | ||
168 | end | 187 | end |
169 | end | 188 | end |
170 | 189 | ||
171 | - def update_delivery_option | ||
172 | - profile = environment.profiles.find(cart[:profile_id]) | ||
173 | - settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | ||
174 | - delivery_price = settings.delivery_options[params[:delivery_option]] | ||
175 | - delivery = Product.new(:name => params[:delivery_option], :price => delivery_price) | ||
176 | - delivery.save(false) | ||
177 | - items = self.cart[:items].clone | ||
178 | - items[delivery.id] = 1 | ||
179 | - total_price = get_total_on_currency(items, environment) | ||
180 | - delivery.destroy | ||
181 | - render :text => { | ||
182 | - :ok => true, | ||
183 | - :delivery_price => float_to_currency_cart(delivery_price, environment), | ||
184 | - :total_price => total_price, | ||
185 | - :message => _('Delivery option updated.'), | ||
186 | - :error => {:code => 0} | ||
187 | - }.to_json | 190 | + def update_supplier_delivery |
191 | + @profile = cart_profile | ||
192 | + supplier_delivery = @profile.delivery_methods.find params[:order][:supplier_delivery_id] | ||
193 | + order = build_order self.cart[:items], supplier_delivery | ||
194 | + total_price = order.total_price | ||
195 | + render json: { | ||
196 | + ok: true, | ||
197 | + delivery_price: float_to_currency_cart(supplier_delivery.cost(total_price), environment, unit: ''), | ||
198 | + total_price: float_to_currency_cart(total_price, environment, unit: ''), | ||
199 | + message: _('Delivery option updated.'), | ||
200 | + error: {code: 0} | ||
201 | + } | ||
188 | end | 202 | end |
189 | 203 | ||
190 | - private | 204 | + # must be public |
205 | + def profile | ||
206 | + cart_profile | ||
207 | + end | ||
208 | + | ||
209 | + protected | ||
191 | 210 | ||
192 | def validate_same_profile(product) | 211 | def validate_same_profile(product) |
193 | if self.cart && self.cart[:profile_id] && product.profile_id != self.cart[:profile_id] | 212 | if self.cart && self.cart[:profile_id] && product.profile_id != self.cart[:profile_id] |
194 | render :text => { | 213 | render :text => { |
195 | :ok => false, | 214 | :ok => false, |
196 | :error => { | 215 | :error => { |
197 | - :code => 1, | ||
198 | - :message => _("Can't join items from different enterprises.") | ||
199 | - } | 216 | + :code => 1, |
217 | + :message => _("Your basket contains items from '%{profile_name}'. Please empty the basket or checkout before adding items from here.") % {profile_name: cart_profile.short_name} | ||
218 | + } | ||
200 | }.to_json | 219 | }.to_json |
201 | return nil | 220 | return nil |
202 | end | 221 | end |
@@ -262,40 +281,48 @@ class ShoppingCartPluginController < PublicController | @@ -262,40 +281,48 @@ class ShoppingCartPluginController < PublicController | ||
262 | end | 281 | end |
263 | 282 | ||
264 | def register_order(custumer, items) | 283 | def register_order(custumer, items) |
265 | - new_items = {} | ||
266 | - items.each do |id, quantity| | 284 | + products_list = {}; items.each do |id, quantity| |
267 | product = Product.find(id) | 285 | product = Product.find(id) |
268 | price = product.price || 0 | 286 | price = product.price || 0 |
269 | - new_items[id] = {:quantity => quantity, :price => price, :name => product.name} | 287 | + products_list[id] = {:quantity => quantity, :price => price, :name => product.name} |
270 | end | 288 | end |
271 | - purchase_order = ShoppingCartPlugin::PurchaseOrder.new | ||
272 | - purchase_order.seller = environment.profiles.find(cart[:profile_id]) | ||
273 | - purchase_order.customer = user | ||
274 | - purchase_order.status = ShoppingCartPlugin::PurchaseOrder::Status::OPENED | ||
275 | - purchase_order.products_list = new_items | ||
276 | - purchase_order.customer_delivery_option = params[:delivery_option] | ||
277 | - purchase_order.customer_payment = params[:customer][:payment] | ||
278 | - purchase_order.customer_change = params[:customer][:change] | ||
279 | - purchase_order.customer_name = params[:customer][:name] | ||
280 | - purchase_order.customer_email = params[:customer][:email] | ||
281 | - purchase_order.customer_contact_phone = params[:customer][:contact_phone] | ||
282 | - purchase_order.customer_address = params[:customer][:address] | ||
283 | - purchase_order.customer_district = params[:customer][:district] | ||
284 | - purchase_order.customer_city = params[:customer][:city] | ||
285 | - purchase_order.customer_zip_code = params[:customer][:zip_code] | ||
286 | - purchase_order.save! | ||
287 | - end | ||
288 | 289 | ||
289 | - protected | 290 | + order = OrdersPlugin::Sale.new |
291 | + order.profile = environment.profiles.find(cart[:profile_id]) | ||
292 | + order.supplier_delivery = profile.delivery_methods.find params[:order][:supplier_delivery_id] | ||
293 | + order.session_id = session_id unless user | ||
294 | + order.consumer = user | ||
295 | + order.source = 'shopping_cart_plugin' | ||
296 | + order.status = 'ordered' | ||
297 | + order.products_list = products_list | ||
298 | + order.consumer_data = params[:order][:consumer_data] | ||
299 | + order.payment_data = params[:order][:payment_data] | ||
300 | + order.consumer_delivery_data = params[:order][:consumer_delivery_data] | ||
301 | + order.save! | ||
302 | + | ||
303 | + order | ||
304 | + end | ||
290 | 305 | ||
291 | def cart | 306 | def cart |
292 | @cart ||= | 307 | @cart ||= |
293 | begin | 308 | begin |
294 | cookies[cookie_key] && YAML.load(Base64.decode64(cookies[cookie_key])) || nil | 309 | cookies[cookie_key] && YAML.load(Base64.decode64(cookies[cookie_key])) || nil |
295 | end | 310 | end |
311 | + # migrate from old attribute | ||
312 | + @cart[:profile_id] ||= @cart.delete(:enterprise_id) if @cart and @cart[:enterprise_id].present? | ||
296 | @cart | 313 | @cart |
297 | end | 314 | end |
298 | 315 | ||
316 | + def cart_profile | ||
317 | + profile_id = if params[:profile_id].present? then params[:profile_id] elsif cart then cart[:profile_id] end | ||
318 | + @cart_profile ||= environment.profiles.find profile_id rescue nil | ||
319 | + end | ||
320 | + | ||
321 | + # from OrdersPluginController | ||
322 | + def supplier | ||
323 | + cart_profile | ||
324 | + end | ||
325 | + | ||
299 | def cart=(data) | 326 | def cart=(data) |
300 | @cart = data | 327 | @cart = data |
301 | end | 328 | end |
plugins/shopping_cart/controllers/shopping_cart_plugin_myprofile_controller.rb
1 | class ShoppingCartPluginMyprofileController < MyProfileController | 1 | class ShoppingCartPluginMyprofileController < MyProfileController |
2 | - def edit | ||
3 | - params[:settings] = treat_cart_options(params[:settings]) | ||
4 | - | ||
5 | - @settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin, params[:settings]) | ||
6 | - if request.post? | ||
7 | - begin | ||
8 | - @settings.save! | ||
9 | - session[:notice] = _('Option updated successfully.') | ||
10 | - rescue Exception => exception | ||
11 | - session[:notice] = _('Option wasn\'t updated successfully.') | ||
12 | - end | ||
13 | - redirect_to :action => 'edit' | ||
14 | - end | ||
15 | - end | ||
16 | - | ||
17 | - def reports | ||
18 | - utc_string = ' 00:00:00 UTC' | ||
19 | - @from = params[:from] ? Time.parse(params[:from] + utc_string) : Time.now.utc.at_beginning_of_month | ||
20 | - @to = params[:to] ? Time.parse(params[:to] + utc_string) : Time.now.utc | ||
21 | - @status = !params[:filter_status].blank? ? params[:filter_status].to_i : nil | ||
22 | - | ||
23 | - condition = 'created_at >= ? AND created_at <= ?' | ||
24 | - condition_parameters = [@from, @to+1.day] | ||
25 | - if @status | ||
26 | - condition += ' AND status = ?' | ||
27 | - condition_parameters << @status | ||
28 | - end | ||
29 | 2 | ||
30 | - conditions = [condition] + condition_parameters | ||
31 | - @orders = profile.orders.find(:all, :conditions => conditions) | 3 | + helper DeliveryPlugin::DisplayHelper |
32 | 4 | ||
33 | - @products = {} | ||
34 | - @orders.each do |order| | ||
35 | - order.products_list.each do |id, qp| | ||
36 | - @products[id] ||= ShoppingCartPlugin::LineItem.new(id, qp[:name]) | ||
37 | - @products[id].quantity += qp[:quantity] | 5 | + def edit |
6 | + params[:settings] = treat_cart_options(params[:settings]) | ||
7 | + @settings = profile.shopping_cart_settings params[:settings] || {} | ||
8 | + respond_to do |format| | ||
9 | + format.js do | ||
10 | + if request.post? | ||
11 | + @success = @settings.save! | ||
12 | + end | ||
38 | end | 13 | end |
14 | + format.html | ||
39 | end | 15 | end |
40 | end | 16 | end |
41 | 17 | ||
42 | - def update_order_status | ||
43 | - order = ShoppingCartPlugin::PurchaseOrder.find(params[:order_id].to_i) | ||
44 | - order.status = params[:order_status].to_i | ||
45 | - order.save! | ||
46 | - redirect_to :action => 'reports', :from => params[:context_from], :to => params[:context_to], :filter_status => params[:context_status] | ||
47 | - end | ||
48 | - | ||
49 | - private | 18 | + protected |
50 | 19 | ||
51 | def treat_cart_options(settings) | 20 | def treat_cart_options(settings) |
52 | return if settings.blank? | 21 | return if settings.blank? |
53 | settings[:enabled] = settings[:enabled] == '1' | 22 | settings[:enabled] = settings[:enabled] == '1' |
54 | - settings[:delivery] = settings[:delivery] == '1' | ||
55 | - settings[:free_delivery_price] = settings[:free_delivery_price].blank? ? nil : settings[:free_delivery_price].to_d | ||
56 | - settings[:delivery_options] = treat_delivery_options(settings[:delivery_options]) | ||
57 | settings | 23 | settings |
58 | end | 24 | end |
59 | 25 | ||
60 | - def treat_delivery_options(params) | ||
61 | - result = {} | ||
62 | - return result if params.nil? || params[:options].nil? | ||
63 | - params[:options].size.times do |counter| | ||
64 | - if params[:options][counter].present? && params[:prices][counter].present? | ||
65 | - result[params[:options][counter]] = params[:prices][counter] | ||
66 | - end | ||
67 | - end | ||
68 | - result | ||
69 | - end | ||
70 | end | 26 | end |
plugins/shopping_cart/db/migrate/20121022190819_move_fields_included_on_profiles_table_to_settings.rb
1 | class MoveFieldsIncludedOnProfilesTableToSettings < ActiveRecord::Migration | 1 | class MoveFieldsIncludedOnProfilesTableToSettings < ActiveRecord::Migration |
2 | def self.up | 2 | def self.up |
3 | Profile.find_each do |profile| | 3 | Profile.find_each do |profile| |
4 | - settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | 4 | + settings = profile.shopping_cart_settings |
5 | settings.enabled = profile.shopping_cart | 5 | settings.enabled = profile.shopping_cart |
6 | settings.delivery = profile.shopping_cart_delivery | 6 | settings.delivery = profile.shopping_cart_delivery |
7 | settings.delivery_price = profile.shopping_cart_delivery_price | 7 | settings.delivery_price = profile.shopping_cart_delivery_price |
plugins/shopping_cart/db/migrate/20131226125124_move_shopping_cart_purchase_order_to_orders_plugin_order.rb
0 → 100644
@@ -0,0 +1,86 @@ | @@ -0,0 +1,86 @@ | ||
1 | +OrdersPlugin.send :remove_const, :Item if defined? OrdersPlugin::Item | ||
2 | +OrdersPlugin.send :remove_const, :Order if defined? OrdersPlugin::Order | ||
3 | + | ||
4 | +class ShoppingCartPlugin::PurchaseOrder < Noosfero::Plugin::ActiveRecord | ||
5 | + acts_as_having_settings :field => :data | ||
6 | + | ||
7 | + module Status | ||
8 | + OPENED = 0 | ||
9 | + CANCELED = 1 | ||
10 | + CONFIRMED = 2 | ||
11 | + SHIPPED = 3 | ||
12 | + end | ||
13 | +end | ||
14 | + | ||
15 | +class Profile | ||
16 | + has_many :orders, :class_name => 'OrdersPlugin::Order' | ||
17 | +end | ||
18 | + | ||
19 | +class OrdersPlugin::Item < Noosfero::Plugin::ActiveRecord | ||
20 | + belongs_to :order, :class_name => 'OrdersPlugin::Order' | ||
21 | +end | ||
22 | +class OrdersPlugin::Order < Noosfero::Plugin::ActiveRecord | ||
23 | + has_many :items, :class_name => 'OrdersPlugin::Item', :foreign_key => :order_id | ||
24 | + | ||
25 | + extend CodeNumbering::ClassMethods | ||
26 | + code_numbering :code, :scope => proc{ self.profile.orders } | ||
27 | +end | ||
28 | + | ||
29 | +StatusTransform = { | ||
30 | + ShoppingCartPlugin::PurchaseOrder::Status::OPENED => 'ordered', | ||
31 | + ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED => 'accepted', | ||
32 | + ShoppingCartPlugin::PurchaseOrder::Status::CANCELED => 'cancelled', | ||
33 | + ShoppingCartPlugin::PurchaseOrder::Status::SHIPPED => 'delivered', | ||
34 | +} | ||
35 | + | ||
36 | +class MoveShoppingCartPurchaseOrderToOrdersPluginOrder < ActiveRecord::Migration | ||
37 | + def self.up | ||
38 | + OrdersPlugin::Order.record_timestamps = false | ||
39 | + | ||
40 | + ShoppingCartPlugin::PurchaseOrder.all(:order => 'created_at ASC').each do |purchase_order| | ||
41 | + data = purchase_order.data | ||
42 | + | ||
43 | + order = OrdersPlugin::Order.new :profile_id => purchase_order.seller_id, :consumer_id => purchase_order.customer_id | ||
44 | + | ||
45 | + order.consumer_data = {} | ||
46 | + ['contact_phone','name','email'].each do |prop| | ||
47 | + order.consumer_data[prop.to_sym] = data[('customer_'+prop).to_sym] | ||
48 | + end | ||
49 | + | ||
50 | + order.consumer_delivery_data = { | ||
51 | + :name => data[:customer_delivery_option], | ||
52 | + :address_line1 => data[:customer_address], | ||
53 | + :address_line2 => data[:customer_district], | ||
54 | + :postal_code => data[:customer_zip_code], | ||
55 | + :state => data[:customer_state], | ||
56 | + :country => 'Brasil' | ||
57 | + } | ||
58 | + order.supplier_delivery_data = {} | ||
59 | + | ||
60 | + data[:products_list].each do |id, data| | ||
61 | + item = order.items.build :product_id => id, :name => data[:name], :quantity_consumer_ordered => data[:quantity], :price => data[:price] | ||
62 | + item.order = order | ||
63 | + end | ||
64 | + | ||
65 | + order.payment_data = { | ||
66 | + :method => data[:customer_payment], | ||
67 | + :change => data[:customer_change] | ||
68 | + } | ||
69 | + | ||
70 | + order.status = StatusTransform[purchase_order.status] | ||
71 | + | ||
72 | + order.updated_at = purchase_order.updated_at | ||
73 | + order.created_at = purchase_order.created_at | ||
74 | + | ||
75 | + order.save! | ||
76 | + end | ||
77 | + | ||
78 | + # Leave table for registry | ||
79 | + #drop_table :shopping_cart_plugin_purchase_orders | ||
80 | + | ||
81 | + OrdersPlugin::Order.record_timestamps = true | ||
82 | + end | ||
83 | + | ||
84 | + def self.down | ||
85 | + end | ||
86 | +end |
plugins/shopping_cart/db/migrate/20150202122535_move_shopping_delivery_options_to_delivery_plugin.rb
0 → 100644
@@ -0,0 +1,21 @@ | @@ -0,0 +1,21 @@ | ||
1 | +class MoveShoppingDeliveryOptionsToDeliveryPlugin < ActiveRecord::Migration | ||
2 | + def up | ||
3 | + Enterprise.find_each batch_size: 20 do |enterprise| | ||
4 | + settings = enterprise.shopping_cart_settings | ||
5 | + next if settings.delivery_options.blank? | ||
6 | + | ||
7 | + free_over_price = settings.free_delivery_price | ||
8 | + settings.delivery_options.each do |name, price| | ||
9 | + enterprise.delivery_methods.create! name: name, fixed_cost: price.to_f, delivery_type: 'deliver', free_over_price: free_over_price | ||
10 | + end | ||
11 | + | ||
12 | + settings.free_delivery_price = nil | ||
13 | + settings.delivery_options = nil | ||
14 | + enterprise.save! | ||
15 | + end | ||
16 | + end | ||
17 | + | ||
18 | + def down | ||
19 | + say "this migration can't be reverted" | ||
20 | + end | ||
21 | +end |
plugins/shopping_cart/lib/ext/enterprise.rb
plugins/shopping_cart/lib/ext/person.rb
@@ -0,0 +1,24 @@ | @@ -0,0 +1,24 @@ | ||
1 | +require_dependency 'profile' | ||
2 | + | ||
3 | +class Profile | ||
4 | + | ||
5 | + def shopping_cart_settings attrs = {} | ||
6 | + @shopping_cart_settings ||= Noosfero::Plugin::Settings.new self, ShoppingCartPlugin, attrs | ||
7 | + attrs.each{ |a, v| @shopping_cart_settings.send "#{a}=", v } | ||
8 | + @shopping_cart_settings | ||
9 | + end | ||
10 | + | ||
11 | + def shopping_cart_enabled | ||
12 | + self.shopping_cart_settings.enabled | ||
13 | + end | ||
14 | + | ||
15 | + # may be customized by other profiles | ||
16 | + def cart_order_supplier_notification_recipients | ||
17 | + if self.contact_email.present? | ||
18 | + [self.contact_email] | ||
19 | + else | ||
20 | + self.admins.collect(&:contact_email).select{ |email| email.present? } | ||
21 | + end | ||
22 | + end | ||
23 | + | ||
24 | +end |
plugins/shopping_cart/lib/shopping_cart_plugin.rb
1 | class ShoppingCartPlugin < Noosfero::Plugin | 1 | class ShoppingCartPlugin < Noosfero::Plugin |
2 | 2 | ||
3 | - class << self | ||
4 | - def plugin_name | 3 | + def self.plugin_name |
5 | "Shopping Basket" | 4 | "Shopping Basket" |
6 | - end | ||
7 | - | ||
8 | - def plugin_description | ||
9 | - _("A shopping basket feature for enterprises") | ||
10 | - end | ||
11 | - | ||
12 | - def delivery_default_setting | ||
13 | - false | ||
14 | - end | ||
15 | - | ||
16 | - def delivery_price_default_setting | ||
17 | - 0 | ||
18 | - end | ||
19 | - | ||
20 | - def delivery_options_default_setting | ||
21 | - {} | ||
22 | - end | ||
23 | end | 5 | end |
24 | 6 | ||
25 | - def add_to_cart_button(item) | ||
26 | - profile = item.profile | ||
27 | - settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | ||
28 | - if settings.enabled && item.available | ||
29 | - lambda { | ||
30 | - link_to(_('Add to basket'), "add:#{item.name}", | ||
31 | - :class => 'cart-add-item', | ||
32 | - :onclick => "Cart.addItem(#{item.id}, this); return false" | ||
33 | - ) | ||
34 | - } | ||
35 | - end | 7 | + def self.plugin_description |
8 | + _("A shopping basket feature for enterprises") | ||
36 | end | 9 | end |
37 | 10 | ||
38 | - alias :product_info_extras :add_to_cart_button | ||
39 | - alias :catalog_item_extras :add_to_cart_button | ||
40 | - alias :asset_product_extras :add_to_cart_button | ||
41 | - | ||
42 | def stylesheet? | 11 | def stylesheet? |
43 | true | 12 | true |
44 | end | 13 | end |
@@ -48,19 +17,45 @@ class ShoppingCartPlugin < Noosfero::Plugin | @@ -48,19 +17,45 @@ class ShoppingCartPlugin < Noosfero::Plugin | ||
48 | end | 17 | end |
49 | 18 | ||
50 | def body_beginning | 19 | def body_beginning |
51 | - expanded_template('cart.html.erb') | 20 | + lambda do |
21 | + extend ShoppingCartPlugin::CartHelper | ||
22 | + render 'public/cart' unless cart_minimized | ||
23 | + end | ||
52 | end | 24 | end |
53 | 25 | ||
54 | def control_panel_buttons | 26 | def control_panel_buttons |
55 | - settings = Noosfero::Plugin::Settings.new(context.profile, ShoppingCartPlugin) | ||
56 | buttons = [] | 27 | buttons = [] |
57 | if context.profile.enterprise? | 28 | if context.profile.enterprise? |
58 | buttons << { :title => _('Shopping basket'), :icon => 'shopping-cart-icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } | 29 | buttons << { :title => _('Shopping basket'), :icon => 'shopping-cart-icon', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'edit'} } |
59 | end | 30 | end |
60 | - if context.profile.enterprise? && settings.enabled | ||
61 | - buttons << { :title => _('Purchase reports'), :icon => 'shopping-cart-purchase-report', :url => {:controller => 'shopping_cart_plugin_myprofile', :action => 'reports'} } | ||
62 | - end | ||
63 | 31 | ||
64 | buttons | 32 | buttons |
65 | end | 33 | end |
34 | + | ||
35 | + def add_to_cart_button item, options = {} | ||
36 | + profile = item.profile | ||
37 | + return unless profile.shopping_cart_enabled and item.available | ||
38 | + lambda do | ||
39 | + extend ShoppingCartPlugin::CartHelper | ||
40 | + add_to_cart_button item, options | ||
41 | + end | ||
42 | + end | ||
43 | + | ||
44 | + alias :product_info_extras :add_to_cart_button | ||
45 | + alias :catalog_item_extras :add_to_cart_button | ||
46 | + alias :asset_product_extras :add_to_cart_button | ||
47 | + | ||
48 | + # We now think that it's not a good idea to have the basket in the same time. | ||
49 | + #def catalog_autocomplete_item_extras product | ||
50 | + # add_to_cart_button product, with_text: false | ||
51 | + #end | ||
52 | + | ||
53 | + def catalog_search_extras_begin | ||
54 | + return unless profile.shopping_cart_enabled | ||
55 | + lambda do | ||
56 | + extend ShoppingCartPlugin::CartHelper | ||
57 | + content_tag 'li', render('public/cart'), :class => 'catalog-cart' | ||
58 | + end | ||
59 | + end | ||
60 | + | ||
66 | end | 61 | end |
plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb
1 | +require_dependency 'delivery_plugin/display_helper' | ||
2 | + | ||
1 | module ShoppingCartPlugin::CartHelper | 3 | module ShoppingCartPlugin::CartHelper |
2 | 4 | ||
3 | include ActionView::Helpers::NumberHelper | 5 | include ActionView::Helpers::NumberHelper |
4 | include ActionView::Helpers::TagHelper | 6 | include ActionView::Helpers::TagHelper |
5 | 7 | ||
8 | + include DeliveryPlugin::DisplayHelper | ||
9 | + | ||
10 | + def add_to_cart_button item, options = {} | ||
11 | + label = if options[:with_text].nil? or options[:with_text] then _('Add to basket') else '' end | ||
12 | + button_to_function 'cart', label, "Cart.addItem(#{item.id}, this)", class: 'cart-add-item', type: 'primary' | ||
13 | + end | ||
14 | + | ||
15 | + def cart_applet | ||
16 | + button_to_function 'cart', ' <span class="cart-qtty"></span>', "cart.toggle()", class: 'cart-applet-indicator', type: 'primary' | ||
17 | + end | ||
18 | + | ||
19 | + def cart_minimized | ||
20 | + @catalog_bar | ||
21 | + end | ||
22 | + | ||
23 | + def repeat_checkout_order_button order | ||
24 | + button_to_function :check, t('views.public.repeat.checkout'), 'cart.repeatCheckout(event, this)', 'data-order-id' => order.id, class: 'repeat-checkout-order' | ||
25 | + end | ||
26 | + | ||
27 | + def repeat_choose_order_button order | ||
28 | + button_to_function :edit, t('views.public.repeat.choose'), 'cart.repeatChoose(event, this)', 'data-order-id' => order.id, class: 'repeat-choose-order' | ||
29 | + end | ||
30 | + | ||
6 | def sell_price(product) | 31 | def sell_price(product) |
7 | return 0 if product.price.nil? | 32 | return 0 if product.price.nil? |
8 | product.discount ? product.price_with_discount : product.price | 33 | product.discount ? product.price_with_discount : product.price |
9 | end | 34 | end |
10 | 35 | ||
11 | - def get_price(product, environment, quantity=1) | ||
12 | - float_to_currency_cart(price_with_quantity(product,quantity), environment) | 36 | + def get_price product, environment, quantity=1, options = {} |
37 | + float_to_currency_cart price_with_quantity(product,quantity), environment, options | ||
13 | end | 38 | end |
14 | 39 | ||
15 | def price_with_quantity(product, quantity=1) | 40 | def price_with_quantity(product, quantity=1) |
@@ -25,68 +50,28 @@ module ShoppingCartPlugin::CartHelper | @@ -25,68 +50,28 @@ module ShoppingCartPlugin::CartHelper | ||
25 | float_to_currency_cart(get_total(items), environment) | 50 | float_to_currency_cart(get_total(items), environment) |
26 | end | 51 | end |
27 | 52 | ||
28 | - def items_table(items, profile, delivery_option = nil, by_mail = false) | ||
29 | - environment = profile.environment | ||
30 | - settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | ||
31 | - items = items.to_a | ||
32 | - | ||
33 | - quantity_opts = { :class => 'cart-table-quantity' } | ||
34 | - quantity_opts.merge!({:align => 'center'}) if by_mail | ||
35 | - price_opts = {:class => 'cart-table-price'} | ||
36 | - price_opts.merge!({:align => 'right'}) if by_mail | ||
37 | - items.sort! {|a, b| Product.find(a.first).name <=> Product.find(b.first).name} | ||
38 | - | ||
39 | - if settings.delivery | ||
40 | - if settings.free_delivery_price && get_total(items) >= settings.free_delivery_price | ||
41 | - delivery = Product.new(:name => _('Free delivery'), :price => 0) | ||
42 | - else | ||
43 | - delivery = Product.new(:name => delivery_option || _('Delivery'), :price => settings.delivery_options[delivery_option]) | ||
44 | - end | ||
45 | - delivery.save(false) | ||
46 | - items << [delivery.id, ''] | 53 | + def build_order items, delivery_method = nil |
54 | + @order = @profile.sales.build | ||
55 | + items.each do |product_id, quantity| | ||
56 | + @order.items.build product_id: product_id, quantity_consumer_ordered: quantity | ||
47 | end | 57 | end |
58 | + @order.supplier_delivery = delivery_method | ||
59 | + @order | ||
60 | + end | ||
48 | 61 | ||
49 | - table = '<table id="cart-items-table" cellpadding="2" cellspacing="0" | ||
50 | - border="'+(by_mail ? '1' : '0')+'" | ||
51 | - style="'+(by_mail ? 'border-collapse:collapse' : '')+'">' + | ||
52 | - content_tag('tr', | ||
53 | - content_tag('th', _('Item name')) + | ||
54 | - content_tag('th', by_mail ? ' # ' : '#') + | ||
55 | - content_tag('th', c_('Price')) | ||
56 | - ) + | ||
57 | - items.map do |id, quantity| | ||
58 | - product = Product.find(id) | ||
59 | - name_opts = {} | ||
60 | - is_delivery = quantity.kind_of?(String) | ||
61 | - if is_delivery | ||
62 | - price_opts.merge!({:id => 'delivery-price'}) | ||
63 | - name_opts.merge!({:id => 'delivery-name'}) | ||
64 | - end | ||
65 | - content_tag('tr', | ||
66 | - content_tag('td', product.name, name_opts) + | ||
67 | - content_tag('td', quantity, quantity_opts ) + | ||
68 | - content_tag('td', get_price(product, environment, quantity), price_opts) | ||
69 | - ) | ||
70 | - end.join("\n") | ||
71 | - | ||
72 | - total = get_total_on_currency(items, environment) | ||
73 | - delivery.destroy if settings.delivery | ||
74 | - | ||
75 | - table + | ||
76 | - content_tag('th', _('Total:'), :colspan => 2, :class => 'cart-table-total-label') + | ||
77 | - content_tag('th', total, :class => 'cart-table-total-value') + | ||
78 | - '</table>' | 62 | + def items_table(items, profile, delivery_method = nil, by_mail = false) |
63 | + # partial key needed in mailer context | ||
64 | + render partial: 'shopping_cart_plugin/items', locals: {order: build_order(items, delivery_method), by_mail: by_mail} | ||
79 | end | 65 | end |
80 | 66 | ||
81 | - def float_to_currency_cart(value, environment) | ||
82 | - number_to_currency(value, :unit => environment.currency_unit, :separator => environment.currency_separator, :delimiter => environment.currency_delimiter, :precision => 2, :format => "%u%n") | 67 | + def float_to_currency_cart value, environment, _options = {} |
68 | + options = {:unit => environment.currency_unit, :separator => environment.currency_separator, :delimiter => environment.currency_delimiter, :precision => 2, :format => "%u%n"} | ||
69 | + options.merge! _options | ||
70 | + number_to_currency value, options | ||
83 | end | 71 | end |
84 | 72 | ||
85 | - def select_delivery_options(options, environment) | ||
86 | - result = options.map do |option, price| | ||
87 | - ["#{option} (#{float_to_currency_cart(price, environment)})", option] | ||
88 | - end | ||
89 | - result << ["#{_('Delivery')} (#{float_to_currency_cart(0, environment)})", 'delivery'] if result.empty? | ||
90 | - result | 73 | + def options_for_payment |
74 | + options_for_select OrdersPlugin::Order::PaymentMethods.map{ |key, text| [text.call, key] } | ||
91 | end | 75 | end |
76 | + | ||
92 | end | 77 | end |
plugins/shopping_cart/lib/shopping_cart_plugin/mailer.rb
@@ -2,38 +2,38 @@ class ShoppingCartPlugin::Mailer < Noosfero::Plugin::MailerBase | @@ -2,38 +2,38 @@ class ShoppingCartPlugin::Mailer < Noosfero::Plugin::MailerBase | ||
2 | 2 | ||
3 | include ShoppingCartPlugin::CartHelper | 3 | include ShoppingCartPlugin::CartHelper |
4 | 4 | ||
5 | - def customer_notification(customer, supplier, items, delivery_option) | ||
6 | - domain = supplier.hostname || supplier.environment.default_hostname | ||
7 | - @customer = customer | ||
8 | - @supplier = supplier | 5 | + helper ShoppingCartPlugin::CartHelper |
6 | + | ||
7 | + attr_accessor :environment, :profile | ||
8 | + | ||
9 | + def customer_notification order, items | ||
10 | + domain = order.profile.hostname || order.profile.environment.default_hostname | ||
11 | + self.profile = order.profile | ||
12 | + self.environment = order.profile.environment | ||
13 | + @order = order | ||
9 | @items = items | 14 | @items = items |
10 | - @environment = supplier.environment | ||
11 | - @helper = self | ||
12 | - @delivery_option = delivery_option | ||
13 | 15 | ||
14 | mail( | 16 | mail( |
15 | - to: customer[:email], | 17 | + to: @order.consumer_data[:email], |
16 | from: 'no-reply@' + domain, | 18 | from: 'no-reply@' + domain, |
17 | - reply_to: supplier.contact_email, | ||
18 | - subject: _("[%s] Your buy request was performed successfully.") % supplier[:name], | 19 | + reply_to: @order.profile.cart_order_supplier_notification_recipients, |
20 | + subject: _("[%s] Your buy request was performed successfully.") % @order.profile.short_name(nil), | ||
19 | content_type: 'text/html' | 21 | content_type: 'text/html' |
20 | ) | 22 | ) |
21 | end | 23 | end |
22 | 24 | ||
23 | - def supplier_notification(customer, supplier, items, delivery_option) | ||
24 | - domain = supplier.environment.default_hostname | ||
25 | - @customer = customer | ||
26 | - @supplier = supplier | 25 | + def supplier_notification order, items |
26 | + domain = order.profile.environment.default_hostname | ||
27 | + self.profile = order.profile | ||
28 | + self.environment = order.profile.environment | ||
29 | + @order = order | ||
27 | @items = items | 30 | @items = items |
28 | - @environment = supplier.environment | ||
29 | - @helper = self | ||
30 | - @delivery_option = delivery_option | ||
31 | 31 | ||
32 | mail( | 32 | mail( |
33 | - to: supplier.contact_email, | 33 | + to: @order.profile.cart_order_supplier_notification_recipients, |
34 | from: 'no-reply@' + domain, | 34 | from: 'no-reply@' + domain, |
35 | - reply_to: customer[:email], | ||
36 | - subject: _("[%s] You have a new buy request from %s.") % [supplier.environment.name, customer[:name]], | 35 | + reply_to: @order.consumer_data[:email], |
36 | + subject: _("[%s] You have a new buy request from %s.") % [order.profile.environment.name, @order.consumer_data[:name]], | ||
37 | content_type: 'text/html' | 37 | content_type: 'text/html' |
38 | ) | 38 | ) |
39 | end | 39 | end |
plugins/shopping_cart/lib/shopping_cart_plugin/purchase_order.rb
@@ -1,43 +0,0 @@ | @@ -1,43 +0,0 @@ | ||
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 | - attr_accessible :seller, :status, :products_list | ||
9 | - | ||
10 | - acts_as_having_settings :field => :data | ||
11 | - | ||
12 | - settings_items :products_list, :type => Array, :default => {} | ||
13 | - settings_items :customer_name, :type => String | ||
14 | - settings_items :customer_email, :type => String | ||
15 | - settings_items :customer_contact_phone, :type => String | ||
16 | - settings_items :customer_address, :type => String | ||
17 | - settings_items :customer_district, :type => String | ||
18 | - settings_items :customer_city, :type => String | ||
19 | - settings_items :customer_zip_code, :type => String | ||
20 | - settings_items :customer_delivery_option, :type => String | ||
21 | - settings_items :customer_payment, :type => String | ||
22 | - settings_items :customer_change, :type => String | ||
23 | - | ||
24 | - before_create do |order| | ||
25 | - order.created_at = Time.now.utc | ||
26 | - order.updated_at = Time.now.utc | ||
27 | - end | ||
28 | - | ||
29 | - before_update do |order| | ||
30 | - order.updated_at = Time.now.utc | ||
31 | - end | ||
32 | - | ||
33 | - module Status | ||
34 | - OPENED = 0 | ||
35 | - CANCELED = 1 | ||
36 | - CONFIRMED = 2 | ||
37 | - SHIPPED = 3 | ||
38 | - | ||
39 | - def self.name | ||
40 | - [_('Opened'), _('Canceled'), _('Confirmed'), _('Shipped')] | ||
41 | - end | ||
42 | - end | ||
43 | -end |
plugins/shopping_cart/po/de/shopping_cart.po
@@ -6,8 +6,8 @@ | @@ -6,8 +6,8 @@ | ||
6 | # | 6 | # |
7 | msgid "" | 7 | msgid "" |
8 | msgstr "" | 8 | msgstr "" |
9 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
10 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
10 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" | ||
11 | "PO-Revision-Date: 2015-02-23 11:36+0200\n" | 11 | "PO-Revision-Date: 2015-02-23 11:36+0200\n" |
12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 12 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-" | 13 | "Language-Team: German <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/shopping_cart/po/es/shopping_cart.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
9 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" | ||
10 | "PO-Revision-Date: 2015-02-23 11:35+0200\n" | 10 | "PO-Revision-Date: 2015-02-23 11:35+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: Spanish <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/shopping_cart/po/fr/shopping_cart.po
@@ -4,9 +4,9 @@ | @@ -4,9 +4,9 @@ | ||
4 | # , 2009. | 4 | # , 2009. |
5 | msgid "" | 5 | msgid "" |
6 | msgstr "" | 6 | msgstr "" |
7 | -"Project-Id-Version: 1.1-166-gaf47713\n" | 7 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
8 | "Report-Msgid-Bugs-To: \n" | 8 | "Report-Msgid-Bugs-To: \n" |
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 9 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" |
10 | "PO-Revision-Date: 2015-03-07 10:49+0200\n" | 10 | "PO-Revision-Date: 2015-03-07 10:49+0200\n" |
11 | "Last-Translator: Tuux <tuxa@galaxie.eu.org>\n" | 11 | "Last-Translator: Tuux <tuxa@galaxie.eu.org>\n" |
12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: French <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/shopping_cart/po/hy/shopping_cart.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
9 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" | ||
10 | "PO-Revision-Date: 2015-02-23 11:37+0200\n" | 10 | "PO-Revision-Date: 2015-02-23 11:37+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: Armenian <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: Armenian <https://hosted.weblate.org/projects/noosfero/plugin-" |
plugins/shopping_cart/po/pt/shopping_cart.po
@@ -11,12 +11,12 @@ | @@ -11,12 +11,12 @@ | ||
11 | # | 11 | # |
12 | msgid "" | 12 | msgid "" |
13 | msgstr "" | 13 | msgstr "" |
14 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
15 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | ||
16 | -"PO-Revision-Date: 2015-02-23 11:36+0200\n" | 14 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
15 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" | ||
16 | +"PO-Revision-Date: 2015-06-12 11:29-0300\n" | ||
17 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 17 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
18 | -"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero/" | ||
19 | -"plugin-shopping-cart/pt/>\n" | 18 | +"Language-Team: Portuguese <https://hosted.weblate.org/projects/noosfero" |
19 | +"/plugin-shopping-cart/pt/>\n" | ||
20 | "Language: pt\n" | 20 | "Language: pt\n" |
21 | "MIME-Version: 1.0\n" | 21 | "MIME-Version: 1.0\n" |
22 | "Content-Type: text/plain; charset=UTF-8\n" | 22 | "Content-Type: text/plain; charset=UTF-8\n" |
@@ -65,6 +65,18 @@ msgstr "Frete grátis" | @@ -65,6 +65,18 @@ msgstr "Frete grátis" | ||
65 | msgid "Delivery" | 65 | msgid "Delivery" |
66 | msgstr "Entrega" | 66 | msgstr "Entrega" |
67 | 67 | ||
68 | +#: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb:7 | ||
69 | +msgid "Delivery or pickup" | ||
70 | +msgstr "Forma de retirada ou entrega" | ||
71 | + | ||
72 | +#: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb:7 | ||
73 | +msgid "Deliveries or pickups" | ||
74 | +msgstr "Formas de retirada ou entrega" | ||
75 | + | ||
76 | +#: plugins/delivery/views/delivery_plugin/_order_select.html.slim | ||
77 | +msgid "Instructions" | ||
78 | +msgstr "Instruções" | ||
79 | + | ||
68 | #: plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb:53 | 80 | #: plugins/shopping_cart/lib/shopping_cart_plugin/cart_helper.rb:53 |
69 | msgid "Item name" | 81 | msgid "Item name" |
70 | msgstr "Nome do item" | 82 | msgstr "Nome do item" |
@@ -86,6 +98,10 @@ msgstr "[%s] Você tem um novo pedido de compra de %s." | @@ -86,6 +98,10 @@ msgstr "[%s] Você tem um novo pedido de compra de %s." | ||
86 | msgid "Request sent successfully. Check your email." | 98 | msgid "Request sent successfully. Check your email." |
87 | msgstr "Requisição enviada com sucesso. Cheque seu email." | 99 | msgstr "Requisição enviada com sucesso. Cheque seu email." |
88 | 100 | ||
101 | +#: plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb:115 | ||
102 | +msgid "Your order has been sent successfully! You will receive a confirmation e-mail shortly." | ||
103 | +msgstr "Seu pedido foi enviado com sucesso! Você receberá uma confirmação em breve." | ||
104 | + | ||
89 | #: plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb:138 | 105 | #: plugins/shopping_cart/controllers/shopping_cart_plugin_controller.rb:138 |
90 | msgid "Basket displayed." | 106 | msgid "Basket displayed." |
91 | msgstr "Cesto exibido." | 107 | msgstr "Cesto exibido." |
@@ -134,18 +150,15 @@ msgstr "Opção foi atualizada com sucesso." | @@ -134,18 +150,15 @@ msgstr "Opção foi atualizada com sucesso." | ||
134 | msgid "Option wasn't updated successfully." | 150 | msgid "Option wasn't updated successfully." |
135 | msgstr "Opção não foi atualizada com sucesso." | 151 | msgstr "Opção não foi atualizada com sucesso." |
136 | 152 | ||
137 | -#: plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb:6 | ||
138 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 | 153 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 |
139 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:5 | 154 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:5 |
140 | msgid "Name" | 155 | msgid "Name" |
141 | msgstr "Nome" | 156 | msgstr "Nome" |
142 | 157 | ||
143 | -#: plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb:10 | ||
144 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:13 | 158 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:13 |
145 | -msgid "Delivery Address" | ||
146 | -msgstr "Endereço de Entrega" | 159 | +msgid "Delivery or pickup method" |
160 | +msgstr "Forma de entrega ou retirada" | ||
147 | 161 | ||
148 | -#: plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb:16 | ||
149 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:22 | 162 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:22 |
150 | msgid "Send buy request" | 163 | msgid "Send buy request" |
151 | msgstr "Enviar pedido de compra" | 164 | msgstr "Enviar pedido de compra" |
@@ -176,10 +189,9 @@ msgstr "Estado" | @@ -176,10 +189,9 @@ msgstr "Estado" | ||
176 | msgid "E-mail" | 189 | msgid "E-mail" |
177 | msgstr "E-mail" | 190 | msgstr "E-mail" |
178 | 191 | ||
179 | -#: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 | ||
180 | -#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:8 | ||
181 | -msgid "Delivery option" | ||
182 | -msgstr "Opção de entrega" | 192 | +#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:9 |
193 | +msgid "Personal identification" | ||
194 | +msgstr "Identificação pessoal" | ||
183 | 195 | ||
184 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 | 196 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 |
185 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:20 | 197 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:20 |
@@ -188,12 +200,20 @@ msgstr "Opção de entrega" | @@ -188,12 +200,20 @@ msgstr "Opção de entrega" | ||
188 | msgid "Payment" | 200 | msgid "Payment" |
189 | msgstr "Pagamento" | 201 | msgstr "Pagamento" |
190 | 202 | ||
203 | +#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:9 | ||
204 | +msgid "Payment's method" | ||
205 | +msgstr "Forma de pagamento" | ||
206 | + | ||
191 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 | 207 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb:35 |
192 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:22 | 208 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:22 |
193 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:20 | 209 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:20 |
194 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:10 | 210 | #: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:10 |
195 | msgid "shopping_cart|Change" | 211 | msgid "shopping_cart|Change" |
196 | -msgstr "Troco" | 212 | +msgstr "Troco para" |
213 | + | ||
214 | +#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:10 | ||
215 | +msgid "Your Order" | ||
216 | +msgstr "Seu Pedido" | ||
197 | 217 | ||
198 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb:7 | 218 | #: plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb:7 |
199 | msgid "Quantity" | 219 | msgid "Quantity" |
@@ -303,42 +323,30 @@ msgid "Hi %s!" | @@ -303,42 +323,30 @@ msgid "Hi %s!" | ||
303 | msgstr "Olá %s!" | 323 | msgstr "Olá %s!" |
304 | 324 | ||
305 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:10 | 325 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:10 |
306 | -msgid "This is a notification e-mail about your buy request on %s." | ||
307 | -msgstr "Esse é um email de notificação sobre o seu pedido de compra em %s." | 326 | +msgid "This is a notification e-mail about your buy request on the enterprise %s." |
327 | +msgstr "Esse é um email de notificação sobre o seu pedido de compra no empreendimento %s." | ||
308 | 328 | ||
309 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:11 | 329 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:11 |
310 | msgid "" | 330 | msgid "" |
311 | -"The supplier already received your buy request and may contact you for " | 331 | +"The enterprise already received your buy request and will contact you for " |
312 | "confirmation." | 332 | "confirmation." |
313 | msgstr "" | 333 | msgstr "" |
314 | -"O fornecedor já recebeu o seu pedido de compra e deve te contactar para " | 334 | +"O empreendimento já recebeu o seu pedido de compra e entrará em contato para " |
315 | "confirmação." | 335 | "confirmação." |
316 | 336 | ||
317 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:12 | 337 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:12 |
318 | -msgid "If you have any doubts, contact us at: %s" | ||
319 | -msgstr "Se você tem alguma dúvida, nos contacte em: %s" | 338 | +msgid "If you have any doubts about your order, write to us at: %s." |
339 | +msgstr "Se você tem alguma dúvida sobre o seu pedido, nos escreva: %s." | ||
320 | 340 | ||
321 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:13 | 341 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:13 |
322 | -msgid "Please check if your information below is correct:" | ||
323 | -msgstr "Por favor cheque se suas informações abaixo estão corretas:" | 342 | +msgid "Review below the informations of your order:" |
343 | +msgstr "Abaixo, revise as informações do seu pedido:" | ||
324 | 344 | ||
325 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:19 | 345 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:19 |
326 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:17 | 346 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:17 |
327 | msgid "Phone number" | 347 | msgid "Phone number" |
328 | msgstr "Telefone" | 348 | msgstr "Telefone" |
329 | 349 | ||
330 | -#: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:20 | ||
331 | -#: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:18 | ||
332 | -#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:9 | ||
333 | -msgid "Money" | ||
334 | -msgstr "Dinheiro" | ||
335 | - | ||
336 | -#: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:20 | ||
337 | -#: plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb:18 | ||
338 | -#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:9 | ||
339 | -msgid "shopping_cart|Check" | ||
340 | -msgstr "Cheque" | ||
341 | - | ||
342 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:47 | 350 | #: plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb:47 |
343 | msgid "Here are the products you bought:" | 351 | msgid "Here are the products you bought:" |
344 | msgstr "Aqui estão os produtos que você pediu:" | 352 | msgstr "Aqui estão os produtos que você pediu:" |
@@ -368,3 +376,17 @@ msgstr "E aqui estão os itens pedidos por esse consumidor:" | @@ -368,3 +376,17 @@ msgstr "E aqui estão os itens pedidos por esse consumidor:" | ||
368 | msgid "If there are any problems with this email contact the admin of %s." | 376 | msgid "If there are any problems with this email contact the admin of %s." |
369 | msgstr "" | 377 | msgstr "" |
370 | "Se houver algum problema com esse email contacte o administrador de %s." | 378 | "Se houver algum problema com esse email contacte o administrador de %s." |
379 | + | ||
380 | +#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb:15 | ||
381 | +msgid "Address completion" | ||
382 | +msgstr "Complemento (p.ex. apto)" | ||
383 | + | ||
384 | +#: | ||
385 | +msgid "repeat order" | ||
386 | +msgstr "repetir pedido" | ||
387 | + | ||
388 | +#: plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb | ||
389 | +msgid "haven't finished yet: back to shopping" | ||
390 | +msgstr "ainda não concluí: voltar às compras" | ||
391 | + | ||
392 | + |
plugins/shopping_cart/po/ru/shopping_cart.po
@@ -5,8 +5,8 @@ | @@ -5,8 +5,8 @@ | ||
5 | # | 5 | # |
6 | msgid "" | 6 | msgid "" |
7 | msgstr "" | 7 | msgstr "" |
8 | -"Project-Id-Version: 1.1-166-gaf47713\n" | ||
9 | -"POT-Creation-Date: 2015-06-01 17:26-0300\n" | 8 | +"Project-Id-Version: 1.0-690-gcb6e853\n" |
9 | +"POT-Creation-Date: 2015-03-05 12:09-0300\n" | ||
10 | "PO-Revision-Date: 2015-02-23 11:36+0200\n" | 10 | "PO-Revision-Date: 2015-02-23 11:36+0200\n" |
11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" | 11 | "Last-Translator: Michal Čihař <michal@cihar.com>\n" |
12 | "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/plugin-" | 12 | "Language-Team: Russian <https://hosted.weblate.org/projects/noosfero/plugin-" |
@@ -15,8 +15,8 @@ msgstr "" | @@ -15,8 +15,8 @@ msgstr "" | ||
15 | "MIME-Version: 1.0\n" | 15 | "MIME-Version: 1.0\n" |
16 | "Content-Type: text/plain; charset=UTF-8\n" | 16 | "Content-Type: text/plain; charset=UTF-8\n" |
17 | "Content-Transfer-Encoding: 8bit\n" | 17 | "Content-Transfer-Encoding: 8bit\n" |
18 | -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||
19 | -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" | 18 | +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=" |
19 | +"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" | ||
20 | "X-Generator: Weblate 2.3-dev\n" | 20 | "X-Generator: Weblate 2.3-dev\n" |
21 | 21 | ||
22 | #: plugins/shopping_cart/lib/shopping_cart_plugin.rb:9 | 22 | #: plugins/shopping_cart/lib/shopping_cart_plugin.rb:9 |
plugins/shopping_cart/public/buy.js
1 | -jQuery(document).ready(function(){ | ||
2 | - jQuery("#cart-request-form").validate({ | ||
3 | - submitHandler: function(form) { | ||
4 | - jQuery(form).find('input.submit').attr('disabled', true); | ||
5 | - jQuery('#cboxLoadingOverlay').show().addClass('loading'); | ||
6 | - jQuery('#cboxLoadingGraphic').show().addClass('loading'); | ||
7 | - } | ||
8 | - }); | ||
9 | -}); | 1 | +shopping_cart.buy = { |
10 | 2 | ||
11 | -jQuery('#delivery_option').change(function(){ | ||
12 | - jQuery('#cboxLoadingGraphic').show(); | ||
13 | - me = this; | ||
14 | - profile = jQuery(me).attr('data-profile-identifier'); | ||
15 | - option = jQuery(me).val(); | ||
16 | - jQuery.ajax({ | ||
17 | - url: '/plugin/shopping_cart/update_delivery_option', | ||
18 | - dataType: "json", | ||
19 | - data: 'delivery_option='+option, | ||
20 | - success: function(data, st, ajax) { | ||
21 | - jQuery('#delivery-price').text(data.delivery_price); | ||
22 | - jQuery('.cart-table-total-value').text(data.total_price); | ||
23 | - jQuery('#delivery-name').text(option); | ||
24 | - jQuery('#cboxLoadingGraphic').hide(); | ||
25 | - }, | ||
26 | - error: function(ajax, st, errorThrown) { | ||
27 | - alert('Update delivery option - HTTP '+st+': '+errorThrown); | ||
28 | - }, | ||
29 | - }); | ||
30 | -}); | 3 | + validate: function() { |
4 | + $("#cart-request-form").validate({ | ||
5 | + submitHandler: function(form) { | ||
6 | + $(form).find('input.submit').attr('disabled', true); | ||
7 | + $('#cboxLoadingOverlay').show().addClass('loading'); | ||
8 | + $('#cboxLoadingGraphic').show().addClass('loading'); | ||
9 | + } | ||
10 | + }); | ||
11 | + }, | ||
12 | + | ||
13 | + update_delivery: function () { | ||
14 | + $('#cboxLoadingGraphic').show(); | ||
15 | + var me = $(this); | ||
16 | + var profile = me.attr('data-profile-identifier'); | ||
17 | + var id = me.val(); | ||
18 | + var name = me.find('option:selected').attr('data-label'); | ||
19 | + $.ajax({ | ||
20 | + url: '/plugin/shopping_cart/update_supplier_delivery', | ||
21 | + dataType: "json", | ||
22 | + data: 'order[supplier_delivery_id]='+id, | ||
23 | + success: function(data, st, ajax) { | ||
24 | + $('#delivery-price').text(data.delivery_price); | ||
25 | + $('.cart-table-total-value').text(data.total_price); | ||
26 | + $('#delivery-name').text(name); | ||
27 | + $('#cboxLoadingGraphic').hide(); | ||
28 | + display_notice(data.message) | ||
29 | + }, | ||
30 | + error: function(ajax, st, errorThrown) { | ||
31 | + alert('Update delivery option - HTTP '+st+': '+errorThrown); | ||
32 | + }, | ||
33 | + }); | ||
34 | + }, | ||
35 | + | ||
36 | + update_payment: function() { | ||
37 | + var payment = $(this) | ||
38 | + var form = $(payment.get(0).form) | ||
39 | + var changeField = form.find('#order_payment_data_change').parents('.form-group'); | ||
40 | + var method = payment.val() == 'money' ? 'slideDown' : 'slideUp'; | ||
41 | + changeField[method]('fast'); | ||
42 | + }, | ||
43 | +} | ||
44 | + | ||
45 | +$(document).ready(shopping_cart.buy.validate) | ||
46 | +$('#order_supplier_delivery_id').on('change keyup', shopping_cart.buy.update_delivery) | ||
47 | +$('#order_payment_data_method').on('change keyup', shopping_cart.buy.update_payment) | ||
31 | 48 | ||
32 | -jQuery('#customer_payment').change(function(){ | ||
33 | - jQuery(this).closest('.formfieldline').next().slideToggle('fast'); | ||
34 | -}); |
plugins/shopping_cart/public/cart.js
1 | +shopping_cart = { | ||
2 | +} | ||
3 | + | ||
1 | function Cart(config) { | 4 | function Cart(config) { |
2 | var $ = jQuery; | 5 | var $ = jQuery; |
6 | + config.minimized = Cart.minimized; | ||
3 | Cart.instance = this; // this may be a list on the future; | 7 | Cart.instance = this; // this may be a list on the future; |
4 | - this.cartElem = $("#cart1")[0]; | 8 | + this.cartElem = $("#cart1"); |
5 | this.cartElem.cartObj = this; | 9 | this.cartElem.cartObj = this; |
6 | - this.contentBox = $("#cart1 .cart-content"); | 10 | + this.contentBox = (config.minimized) ? $("#cart1 .cart-inner") : $("#cart1 .cart-inner .cart-content"); |
7 | this.itemsBox = $("#cart1 .cart-items"); | 11 | this.itemsBox = $("#cart1 .cart-items"); |
12 | + this.profileId = config.profile_id; | ||
8 | this.items = {}; | 13 | this.items = {}; |
14 | + this.products = config.products; | ||
9 | this.empty = !config.has_products; | 15 | this.empty = !config.has_products; |
16 | + this.minimized = config.minimized; | ||
17 | + this.hasPreviousOrders = config.has_previous_orders; | ||
10 | this.visible = false; | 18 | this.visible = false; |
19 | + this.itemTemplate = _.template(jQuery('#cart-item-template').html()); | ||
20 | + $("#cart-profile-name").text(config.profile_short_name); | ||
11 | $(".cart-buy", this.cartElem).button({ icons: { primary: 'ui-icon-cart'} }); | 21 | $(".cart-buy", this.cartElem).button({ icons: { primary: 'ui-icon-cart'} }); |
12 | - if (!this.empty) { | ||
13 | - $(this.cartElem).show(); | ||
14 | - this.visible = config.visible; | ||
15 | - this.addToList(config.products, true) | ||
16 | - } | 22 | + this.load() |
17 | } | 23 | } |
18 | 24 | ||
19 | (function($){ | 25 | (function($){ |
20 | - | ||
21 | // Forbidding the user to request more the one action on the cart | 26 | // Forbidding the user to request more the one action on the cart |
22 | - // simultaneously because the cart in the cookie doesn't supports it. | 27 | + // simultaneously because the cart in the cookie doesn't support it. |
23 | Cart.prototype.ajax = function(config){ | 28 | Cart.prototype.ajax = function(config){ |
24 | var me = this; | 29 | var me = this; |
25 | this.disabled = true; | 30 | this.disabled = true; |
@@ -31,6 +36,17 @@ function Cart(config) { | @@ -31,6 +36,17 @@ function Cart(config) { | ||
31 | $.ajax(config); | 36 | $.ajax(config); |
32 | } | 37 | } |
33 | 38 | ||
39 | + Cart.prototype.load = function(){ | ||
40 | + if (!this.empty) { | ||
41 | + if (!this.minimized) { | ||
42 | + $(this.cartElem).show(); | ||
43 | + } | ||
44 | + this.addToList(this.products, true) | ||
45 | + } else if (this.minimized) { | ||
46 | + this.setQuantity(0) | ||
47 | + } | ||
48 | + } | ||
49 | + | ||
34 | Cart.prototype.addToList = function(products, clear) { | 50 | Cart.prototype.addToList = function(products, clear) { |
35 | if( clear ) this.itemsBox.empty(); | 51 | if( clear ) this.itemsBox.empty(); |
36 | var me = this; | 52 | var me = this; |
@@ -38,17 +54,12 @@ function Cart(config) { | @@ -38,17 +54,12 @@ function Cart(config) { | ||
38 | for( var item,i=0; item=products[i]; i++ ) { | 54 | for( var item,i=0; item=products[i]; i++ ) { |
39 | this.items[item.id] = { price:item.price, quantity:item.quantity }; | 55 | this.items[item.id] = { price:item.price, quantity:item.quantity }; |
40 | this.updateTotal(); | 56 | this.updateTotal(); |
41 | - var liId = "cart-item-"+item.id; | ||
42 | - var li = $("#"+liId); | ||
43 | - if( !li[0] ) li = $('<li id="'+liId+'"></li>\n').appendTo(this.itemsBox); | ||
44 | - li.empty(); | ||
45 | - $('<div class="picture" style="background-image:url('+item.picture+')"></div>' + | ||
46 | - '<span class="item-name">'+ item.name +'</span>' + | ||
47 | - '<div class="item-price">' + | ||
48 | - '<input size="1" value="'+item.quantity+'" />'+ (item.price ? '× '+ item.price : '') +'</div>' + | ||
49 | - ' <a href="remove:'+item.name+'" onclick="Cart.removeItem('+item.id+'); return false"' + | ||
50 | - ' class="button icon-remove"><span>remove</span></a>' | ||
51 | - ).appendTo(li); | 57 | + item.priceTxt = (item.price) ? '×' + item.price : ''; |
58 | + | ||
59 | + jQuery('#cart-item-'+item.id).remove() | ||
60 | + var li = jQuery(this.itemTemplate({item: item})) | ||
61 | + li.appendTo(this.itemsBox); | ||
62 | + | ||
52 | var input = $("input", li)[0]; | 63 | var input = $("input", li)[0]; |
53 | input.lastValue = input.value; | 64 | input.lastValue = input.value; |
54 | input.productId = item.id; | 65 | input.productId = item.id; |
@@ -67,16 +78,24 @@ function Cart(config) { | @@ -67,16 +78,24 @@ function Cart(config) { | ||
67 | li.animate({ backgroundColor: liBg }, 1000); | 78 | li.animate({ backgroundColor: liBg }, 1000); |
68 | } | 79 | } |
69 | 80 | ||
70 | - if (!clear && this.empty) $(this.cartElem).show(); | ||
71 | - if((!clear && this.empty) || (this.visible && clear)) { | ||
72 | - this.contentBox.hide(); | ||
73 | - this.show(!clear); | 81 | + if (!Cart.minimized) { |
82 | + if (!clear && this.empty) $(this.cartElem).show(); | ||
83 | + if((!clear && this.empty) || (this.visible && clear)) { | ||
84 | + this.contentBox.hide(); | ||
85 | + } | ||
86 | + } else { | ||
87 | + if (!clear) { | ||
88 | + $( ".cart-applet .cart-applet-indicator" ).addClass( 'cart-highlight' ); | ||
89 | + $( ".cart-applet" ).effect('bounce', 300, function(){ | ||
90 | + $( ".cart-applet .cart-applet-indicator" ).removeClass( 'cart-highlight' ); | ||
91 | + }); | ||
92 | + } | ||
74 | } | 93 | } |
75 | this.empty = false; | 94 | this.empty = false; |
76 | } | 95 | } |
77 | 96 | ||
78 | Cart.prototype.updateQuantity = function(input, itemId, quantity) { | 97 | Cart.prototype.updateQuantity = function(input, itemId, quantity) { |
79 | - if(this.disabled) return alert(shoppingCartPluginL10n.waitLastRequest); | 98 | + if(this.disabled) return alert(Cart.l10n.waitLastRequest); |
80 | quantity = parseInt(quantity); | 99 | quantity = parseInt(quantity); |
81 | input.disabled = true; | 100 | input.disabled = true; |
82 | var originalBg = input.style.backgroundImage; | 101 | var originalBg = input.style.backgroundImage; |
@@ -117,24 +136,16 @@ function Cart(config) { | @@ -117,24 +136,16 @@ function Cart(config) { | ||
117 | } | 136 | } |
118 | 137 | ||
119 | Cart.addItem = function(itemId, link) { | 138 | Cart.addItem = function(itemId, link) { |
120 | - if(this.instance.disabled) return alert(shoppingCartPluginL10n.waitLastRequest); | 139 | + if(this.instance.disabled) return alert(Cart.l10n.waitLastRequest); |
121 | if ( this.productsLength > 100 ) { | 140 | if ( this.productsLength > 100 ) { |
122 | // This limit protect the user from losing data on cookie limit. | 141 | // This limit protect the user from losing data on cookie limit. |
123 | // This is NOT limiting to 100 products, is limiting to 100 kinds of products. | 142 | // This is NOT limiting to 100 products, is limiting to 100 kinds of products. |
124 | - alert(shoppingCartPluginL10n.maxNumberOfItens); | 143 | + alert(Cart.l10n.maxNumberOfItens); |
125 | return false; | 144 | return false; |
126 | } | 145 | } |
127 | - link.intervalId = setInterval(function() { | ||
128 | - $(link).addClass('loading'); | ||
129 | - steps = ['w', 'n', 'e', 's']; | ||
130 | - if( !link.step || link.step==3 ) link.step = 0; | ||
131 | - link.step++; | ||
132 | - $(link).button({ icons: { primary: 'ui-icon-arrowrefresh-1-'+steps[link.step]}}) | ||
133 | - }, 100); | 146 | + $(link).addClass('small-loading'); |
134 | var stopBtLoading = function() { | 147 | var stopBtLoading = function() { |
135 | - clearInterval(link.intervalId); | ||
136 | - $(link).removeClass('loading'); | ||
137 | - $(link).button({ icons: { primary: 'ui-icon-cart'}}); | 148 | + $(link).removeClass('small-loading'); |
138 | }; | 149 | }; |
139 | this.instance.addItem(itemId, stopBtLoading); | 150 | this.instance.addItem(itemId, stopBtLoading); |
140 | } | 151 | } |
@@ -145,7 +156,12 @@ function Cart(config) { | @@ -145,7 +156,12 @@ function Cart(config) { | ||
145 | url: '/plugin/shopping_cart/add/'+ itemId, | 156 | url: '/plugin/shopping_cart/add/'+ itemId, |
146 | dataType: 'json', | 157 | dataType: 'json', |
147 | success: function(data, status, ajax){ | 158 | success: function(data, status, ajax){ |
148 | - if ( !data.ok ) log.error('Shopping cart data failure', data.error); | 159 | + if ( !data.ok ) { |
160 | + if (typeof data.error.message != "undefined") | ||
161 | + alert(data.error.message) | ||
162 | + else | ||
163 | + log.error('Shopping cart data failure', data.error); | ||
164 | + } | ||
149 | else me.addToList(data.products); | 165 | else me.addToList(data.products); |
150 | }, | 166 | }, |
151 | cache: false, | 167 | cache: false, |
@@ -157,8 +173,8 @@ function Cart(config) { | @@ -157,8 +173,8 @@ function Cart(config) { | ||
157 | } | 173 | } |
158 | 174 | ||
159 | Cart.removeItem = function(itemId) { | 175 | Cart.removeItem = function(itemId) { |
160 | - if(this.instance.disabled) return alert(shoppingCartPluginL10n.waitLastRequest); | ||
161 | - if( confirm(shoppingCartPluginL10n.removeItem) ) this.instance.removeItem(itemId); | 176 | + if(this.instance.disabled) return alert(Cart.l10n.waitLastRequest); |
177 | + if( confirm(Cart.l10n.removeItem) ) this.instance.removeItem(itemId); | ||
162 | } | 178 | } |
163 | 179 | ||
164 | Cart.prototype.removeItem = function(itemId) { | 180 | Cart.prototype.removeItem = function(itemId) { |
@@ -179,11 +195,51 @@ function Cart(config) { | @@ -179,11 +195,51 @@ function Cart(config) { | ||
179 | } | 195 | } |
180 | 196 | ||
181 | Cart.toggle = function(link) { | 197 | Cart.toggle = function(link) { |
182 | - if(this.instance.disabled) return alert(shoppingCartPluginL10n.waitLastRequest); | 198 | + if(this.instance.disabled) return alert(Cart.l10n.waitLastRequest); |
183 | link.parentNode.parentNode.cartObj.toggle(); | 199 | link.parentNode.parentNode.cartObj.toggle(); |
184 | } | 200 | } |
185 | Cart.prototype.toggle = function() { | 201 | Cart.prototype.toggle = function() { |
186 | - this.visible ? this.hide(true) : this.show(true); | 202 | + if (this.empty && this.hasPreviousOrders) |
203 | + noosfero.modal.url('/plugin/shopping_cart/repeat?profile_id='+cart.profileId) | ||
204 | + else | ||
205 | + this.visible ? this.hide(true) : this.show(true) | ||
206 | + } | ||
207 | + | ||
208 | + Cart.prototype.repeat = function(order_id, callback) { | ||
209 | + this.ajax({ | ||
210 | + url: '/plugin/shopping_cart/repeat/'+order_id+'?profile_id='+cart.profileId, | ||
211 | + success: function(data) { | ||
212 | + cart.addToList(data.products, true) | ||
213 | + callback(data) | ||
214 | + }, | ||
215 | + // can't do POST because of firefox cookie reset bug | ||
216 | + type: 'GET', dataType: 'json', cache: false | ||
217 | + }) | ||
218 | + } | ||
219 | + | ||
220 | + Cart.prototype.repeatCheckout = function(event, button) { | ||
221 | + var order_id = jQuery(button).attr('data-order-id') | ||
222 | + this.repeat(order_id, function(data) { | ||
223 | + window.location.href = '/plugin/shopping_cart/buy' | ||
224 | + }) | ||
225 | + event.stopPropagation() | ||
226 | + return false; | ||
227 | + } | ||
228 | + | ||
229 | + Cart.prototype.repeatChoose = function(event, button) { | ||
230 | + var order_id = jQuery(button).attr('data-order-id') | ||
231 | + this.repeat(order_id, function(data) { | ||
232 | + noosfero.modal.close() | ||
233 | + cart.show(true); | ||
234 | + }) | ||
235 | + event.stopPropagation() | ||
236 | + return false; | ||
237 | + } | ||
238 | + | ||
239 | + Cart.prototype.clearOrdersSession = function() { | ||
240 | + noosfero.modal.close() | ||
241 | + cart.hasPreviousOrders = false; | ||
242 | + cart.setQuantity(0) | ||
187 | } | 243 | } |
188 | 244 | ||
189 | Cart.prototype.show = function(register) { | 245 | Cart.prototype.show = function(register) { |
@@ -221,7 +277,7 @@ function Cart(config) { | @@ -221,7 +277,7 @@ function Cart(config) { | ||
221 | } | 277 | } |
222 | 278 | ||
223 | Cart.prototype.updateTotal = function() { | 279 | Cart.prototype.updateTotal = function() { |
224 | - var total = 0; | 280 | + var total = qtty = 0; |
225 | var currency, sep = ""; | 281 | var currency, sep = ""; |
226 | for( var itemId in this.items ) { | 282 | for( var itemId in this.items ) { |
227 | var item = this.items[itemId]; | 283 | var item = this.items[itemId]; |
@@ -230,15 +286,27 @@ function Cart(config) { | @@ -230,15 +286,27 @@ function Cart(config) { | ||
230 | sep = item.price.charAt(item.price.length-3); | 286 | sep = item.price.charAt(item.price.length-3); |
231 | var price = item.price.replace(/[^0-9]/g,""); | 287 | var price = item.price.replace(/[^0-9]/g,""); |
232 | total += item.quantity * parseFloat(price); | 288 | total += item.quantity * parseFloat(price); |
289 | + qtty += item.quantity; | ||
233 | } | 290 | } |
234 | } | 291 | } |
235 | total = Math.round(total).toString().replace(/(..)$/, sep+"$1") | 292 | total = Math.round(total).toString().replace(/(..)$/, sep+"$1") |
236 | $(".cart-total b", this.cartElem).text( ( (total!=0) ? currency+" "+total : "---" ) ); | 293 | $(".cart-total b", this.cartElem).text( ( (total!=0) ? currency+" "+total : "---" ) ); |
294 | + this.setQuantity(qtty) | ||
295 | + } | ||
296 | + | ||
297 | + Cart.prototype.setQuantity = function(qtty) { | ||
298 | + this.cartElem.find('.cart-applet-checkout').toggle(qtty > 0) | ||
299 | + this.cartElem.find('.cart-applet-checkout-disabled').toggle(qtty === 0) | ||
300 | + | ||
301 | + if (qtty === 0 && this.hasPreviousOrders) | ||
302 | + $(".cart-qtty", this.cartElem).text( Cart.l10n.repeatOrder ) | ||
303 | + else | ||
304 | + $(".cart-qtty", this.cartElem).text( qtty ) | ||
237 | } | 305 | } |
238 | 306 | ||
239 | Cart.clean = function(link) { | 307 | Cart.clean = function(link) { |
240 | - if(this.instance.disabled) return alert(shoppingCartPluginL10n.waitLastRequest); | ||
241 | - if( confirm(shoppingCartPluginL10n.cleanCart) ) link.parentNode.parentNode.parentNode.cartObj.clean(); | 308 | + if(this.instance.disabled) return alert(Cart.l10n.waitLastRequest); |
309 | + if( confirm(Cart.l10n.cleanCart) ) link.parentNode.parentNode.parentNode.cartObj.clean(); | ||
242 | } | 310 | } |
243 | 311 | ||
244 | Cart.prototype.clean = function() { | 312 | Cart.prototype.clean = function() { |
@@ -250,9 +318,9 @@ function Cart(config) { | @@ -250,9 +318,9 @@ function Cart(config) { | ||
250 | if ( !data.ok ) log.error(data.error); | 318 | if ( !data.ok ) log.error(data.error); |
251 | else{ | 319 | else{ |
252 | me.items = {}; | 320 | me.items = {}; |
253 | - $(me.cartElem).slideUp(500, function() { | 321 | + $(me.contentBox).slideUp(500, function() { |
254 | $(me.itemsBox).empty(); | 322 | $(me.itemsBox).empty(); |
255 | - me.hide(); | 323 | + //me.hide(); |
256 | me.updateTotal(); | 324 | me.updateTotal(); |
257 | me.empty = true; | 325 | me.empty = true; |
258 | }); | 326 | }); |
@@ -277,21 +345,8 @@ function Cart(config) { | @@ -277,21 +345,8 @@ function Cart(config) { | ||
277 | type: 'POST', | 345 | type: 'POST', |
278 | url: '/plugin/shopping_cart/send_request', | 346 | url: '/plugin/shopping_cart/send_request', |
279 | data: params, | 347 | data: params, |
280 | - dataType: 'json', | ||
281 | - success: function(data, status, ajax){ | ||
282 | - if ( !data.ok ) display_notice(data.error.message); | ||
283 | - else { | ||
284 | - me.clean(); | ||
285 | - display_notice(data.message); | ||
286 | - } | ||
287 | - }, | 348 | + dataType: 'script', |
288 | cache: false, | 349 | cache: false, |
289 | - error: function(ajax, status, errorThrown) { | ||
290 | - log.error('Send request - HTTP '+status, errorThrown); | ||
291 | - }, | ||
292 | - complete: function() { | ||
293 | - noosfero.modal.close(); | ||
294 | - } | ||
295 | }); | 350 | }); |
296 | } | 351 | } |
297 | 352 | ||
@@ -301,31 +356,4 @@ function Cart(config) { | @@ -301,31 +356,4 @@ function Cart(config) { | ||
301 | Cart.unloadingPage = true; | 356 | Cart.unloadingPage = true; |
302 | }); | 357 | }); |
303 | 358 | ||
304 | - $(function(){ | ||
305 | - | ||
306 | - $.ajax({ | ||
307 | - url: "/plugin/shopping_cart/get", | ||
308 | - dataType: 'json', | ||
309 | - success: function(data) { | ||
310 | - new Cart(data); | ||
311 | - $('.cart-add-item').button({ icons: { primary: 'ui-icon-cart'} }) | ||
312 | - }, | ||
313 | - cache: false, | ||
314 | - error: function(ajax, status, errorThrown) { | ||
315 | - // Give some time to register page unload. | ||
316 | - setTimeout(function() { | ||
317 | - // page unload is not our problem. | ||
318 | - if (Cart.unloadingPage) { | ||
319 | - log('Page unload before cart load.'); | ||
320 | - } else { | ||
321 | - log.error('Error getting shopping cart - HTTP '+status, errorThrown); | ||
322 | - if ( confirm(shoppingCartPluginL10n.getProblemConfirmReload) ) { | ||
323 | - document.location.reload(); | ||
324 | - } | ||
325 | - } | ||
326 | - }, 100); | ||
327 | - } | ||
328 | - }); | ||
329 | - }); | ||
330 | - | ||
331 | })(jQuery); | 359 | })(jQuery); |
plugins/shopping_cart/public/edit.js
1 | -jQuery('#settings_delivery').click(function(){ | ||
2 | - jQuery('#delivery_settings').toggle('fast'); | 1 | +$('#settings_enabled').click(function(){ |
2 | + $('#delivery-settings').toggle('fast'); | ||
3 | }); | 3 | }); |
4 | +$('#delivery-settings').toggle($('#settings_enabled').prop('checked')) | ||
4 | 5 | ||
5 | -jQuery('#add-new-option').click(function(){ | ||
6 | - new_option = jQuery('#empty-option').clone(); | 6 | +$('#add-new-option').click(function(){ |
7 | + new_option = $('#empty-option').clone(); | ||
7 | new_option.removeAttr('id'); | 8 | new_option.removeAttr('id'); |
8 | - jQuery('#add-new-option-row').before(new_option); | 9 | + $('#add-new-option-row').before(new_option); |
9 | new_option.show(); | 10 | new_option.show(); |
10 | return false; | 11 | return false; |
11 | }); | 12 | }); |
12 | 13 | ||
13 | -jQuery('.remove-option').live('click', function(){ | ||
14 | - jQuery(this).closest('tr').remove(); | 14 | +$('.remove-option').live('click', function(){ |
15 | + $(this).closest('tr').remove(); | ||
15 | return false; | 16 | return false; |
16 | }); | 17 | }); |
18 | + |
plugins/shopping_cart/public/images/control-panel/purchase-report.gif
1.6 KB
plugins/shopping_cart/public/images/control-panel/purchase-report.png
3.13 KB
plugins/shopping_cart/public/images/control-panel/purchase-report.svg
@@ -1,742 +0,0 @@ | @@ -1,742 +0,0 @@ | ||
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.48.2 r9819" | ||
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="1366" | ||
356 | - inkscape:window-height="721" | ||
357 | - inkscape:window-x="-3" | ||
358 | - inkscape:window-y="-3" | ||
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 | - transform="translate(0,1.7382813e-5)"> | ||
424 | - <path | ||
425 | - sodipodi:nodetypes="cccccc" | ||
426 | - d="m 29.5,1015.8622 11,0 m -11,-3 11,0 m -11,-3 11,0" | ||
427 | - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | ||
428 | - id="path4802" | ||
429 | - inkscape:connector-curvature="0" /> | ||
430 | - <path | ||
431 | - transform="translate(0,1004.3622)" | ||
432 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
433 | - sodipodi:ry="1" | ||
434 | - sodipodi:rx="1" | ||
435 | - sodipodi:cy="5.5" | ||
436 | - sodipodi:cx="26.5" | ||
437 | - id="path4804" | ||
438 | - 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" | ||
439 | - sodipodi:type="arc" /> | ||
440 | - <path | ||
441 | - sodipodi:type="arc" | ||
442 | - 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" | ||
443 | - id="path4806" | ||
444 | - sodipodi:cx="26.5" | ||
445 | - sodipodi:cy="5.5" | ||
446 | - sodipodi:rx="1" | ||
447 | - sodipodi:ry="1" | ||
448 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
449 | - transform="translate(0,1007.3622)" /> | ||
450 | - <path | ||
451 | - transform="translate(0,1010.3622)" | ||
452 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
453 | - sodipodi:ry="1" | ||
454 | - sodipodi:rx="1" | ||
455 | - sodipodi:cy="5.5" | ||
456 | - sodipodi:cx="26.5" | ||
457 | - id="path4808" | ||
458 | - 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" | ||
459 | - sodipodi:type="arc" /> | ||
460 | - <path | ||
461 | - id="path4811" | ||
462 | - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | ||
463 | - d="m 29.5,1029.8622 11,0 m -11,-3 11,0 m -11,-3 11,0" | ||
464 | - sodipodi:nodetypes="cccccc" | ||
465 | - inkscape:connector-curvature="0" /> | ||
466 | - <path | ||
467 | - sodipodi:type="arc" | ||
468 | - 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" | ||
469 | - id="path4813" | ||
470 | - sodipodi:cx="26.5" | ||
471 | - sodipodi:cy="5.5" | ||
472 | - sodipodi:rx="1" | ||
473 | - sodipodi:ry="1" | ||
474 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
475 | - transform="translate(0,1018.3622)" /> | ||
476 | - <path | ||
477 | - transform="translate(0,1021.3622)" | ||
478 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
479 | - sodipodi:ry="1" | ||
480 | - sodipodi:rx="1" | ||
481 | - sodipodi:cy="5.5" | ||
482 | - sodipodi:cx="26.5" | ||
483 | - id="path4815" | ||
484 | - 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" | ||
485 | - sodipodi:type="arc" /> | ||
486 | - <path | ||
487 | - sodipodi:type="arc" | ||
488 | - 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" | ||
489 | - id="path4817" | ||
490 | - sodipodi:cx="26.5" | ||
491 | - sodipodi:cy="5.5" | ||
492 | - sodipodi:rx="1" | ||
493 | - sodipodi:ry="1" | ||
494 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
495 | - transform="translate(0,1024.3622)" /> | ||
496 | - <path | ||
497 | - id="path4827" | ||
498 | - style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" | ||
499 | - d="m 29.5,1038.8622 11,0 m -11,3 11,0 m -11,3 9,0" | ||
500 | - inkscape:connector-curvature="0" /> | ||
501 | - <path | ||
502 | - transform="translate(0,1033.3622)" | ||
503 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
504 | - sodipodi:ry="1" | ||
505 | - sodipodi:rx="1" | ||
506 | - sodipodi:cy="5.5" | ||
507 | - sodipodi:cx="26.5" | ||
508 | - id="path4829" | ||
509 | - 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" | ||
510 | - sodipodi:type="arc" /> | ||
511 | - <path | ||
512 | - sodipodi:type="arc" | ||
513 | - 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" | ||
514 | - id="path4831" | ||
515 | - sodipodi:cx="26.5" | ||
516 | - sodipodi:cy="5.5" | ||
517 | - sodipodi:rx="1" | ||
518 | - sodipodi:ry="1" | ||
519 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
520 | - transform="translate(0,1036.3622)" /> | ||
521 | - <path | ||
522 | - transform="translate(0,1039.3622)" | ||
523 | - d="m 27.5,5.5 c 0,0.5522847 -0.447715,1 -1,1 -0.552285,0 -1,-0.4477153 -1,-1 0,-0.5522847 0.447715,-1 1,-1 0.552285,0 1,0.4477153 1,1 z" | ||
524 | - sodipodi:ry="1" | ||
525 | - sodipodi:rx="1" | ||
526 | - sodipodi:cy="5.5" | ||
527 | - sodipodi:cx="26.5" | ||
528 | - id="path4833" | ||
529 | - 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" | ||
530 | - sodipodi:type="arc" /> | ||
531 | - <g | ||
532 | - id="g5575-7" | ||
533 | - transform="matrix(0.01545762,0,0,0.01545762,-84.564216,932.96399)" | ||
534 | - style="fill:#d38d5f"> | ||
535 | - <path | ||
536 | - inkscape:connector-curvature="0" | ||
537 | - id="rect5245-9-6" | ||
538 | - d="m 6408.0436,5064.9271 c -11.726,-11.2912 -32.3679,-9.6218 -42.4594,3.1418 -19.6123,19.9856 -39.9641,39.4417 -59.1428,59.74 -9.518,12.5005 -6.3676,31.3823 5.826,40.9329 19.6892,19.3981 38.735,39.51 58.8119,58.4787 12.3484,9.5947 31.3846,6.505 40.8262,-5.7528 19.4803,-19.979 39.9713,-39.2016 58.856,-59.6292 9.0558,-12.4283 5.7503,-30.9531 -6.2232,-40.3134 -18.839,-18.8581 -37.6197,-37.7778 -56.4947,-56.598 z" | ||
539 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
540 | - <path | ||
541 | - inkscape:connector-curvature="0" | ||
542 | - id="rect5245-3-6-2" | ||
543 | - d="m 6271.4191,5203.1033 c -11.659,-11.815 -32.7156,-10.3098 -42.9669,2.6329 -19.7244,20.2091 -40.4303,39.6819 -59.5621,60.3374 -9.0337,12.4807 -5.8043,30.8944 6.2011,40.2912 19.927,19.5313 39.0995,40.0758 59.474,59.0098 12.4653,9.0761 30.8739,5.764 40.2082,-6.2396 19.3801,-19.7478 39.4876,-38.9701 58.4368,-59.0318 9.4652,-12.3353 6.4045,-31.4347 -5.8482,-40.9551 -18.655,-18.6738 -37.2518,-37.4088 -55.9429,-56.0448 z" | ||
544 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
545 | - <path | ||
546 | - inkscape:connector-curvature="0" | ||
547 | - id="rect5245-8-6-2" | ||
548 | - d="m 6545.5287,5202.6829 c -11.7363,-11.3217 -32.3801,-9.5656 -42.4593,3.1418 -19.5937,19.9946 -39.9139,39.3349 -59.0767,59.7178 -9.5513,12.3449 -6.4556,31.438 5.7819,40.9772 19.6941,19.3922 38.7293,39.519 58.8119,58.4788 12.4118,9.6084 31.3584,6.4621 40.8704,-5.797 19.3229,-19.7402 39.4821,-38.8781 58.3264,-58.9655 9.5617,-12.3467 6.4938,-31.475 -5.7378,-40.933 -18.8464,-18.8655 -37.6344,-37.7925 -56.5168,-56.6201 z" | ||
549 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
550 | - <path | ||
551 | - inkscape:connector-curvature="0" | ||
552 | - id="rect5245-7-4-7" | ||
553 | - d="m 6683.1903,5065.7678 c -11.6727,-11.8214 -32.6711,-10.2704 -42.9667,2.6331 -19.5831,19.9842 -39.9685,39.3886 -59.0767,59.7177 -9.5608,12.3477 -6.4907,31.4696 5.7376,40.9329 19.6964,19.4311 38.8692,39.5905 58.8782,58.5894 12.4019,9.5309 31.358,6.4013 40.8042,-5.8192 19.3581,-19.7586 39.4434,-38.8626 58.3704,-59.0098 9.5628,-12.3863 6.44,-31.439 -5.7818,-40.977 -18.6625,-18.6812 -37.2665,-37.4235 -55.9652,-56.0671 z" | ||
554 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
555 | - <path | ||
556 | - inkscape:connector-curvature="0" | ||
557 | - id="rect5245-5-2-8" | ||
558 | - d="m 6820.3665,5203.4794 c -11.6211,-11.8358 -32.7205,-10.3463 -42.9888,2.6109 -19.6161,19.9836 -39.9579,39.4428 -59.1429,59.7399 -9.5091,12.4948 -6.4432,31.3232 5.7819,40.8887 19.7364,19.4377 38.8215,39.6072 58.9443,58.6115 12.2819,9.5014 31.2571,6.4201 40.7379,-5.8413 19.38,-19.7479 39.4876,-38.9702 58.4367,-59.0319 9.212,-12.1115 6.6473,-30.6982 -5.1419,-40.247 -18.8831,-18.9025 -37.708,-37.8662 -56.6272,-56.7308 z" | ||
559 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
560 | - <path | ||
561 | - inkscape:connector-curvature="0" | ||
562 | - id="rect5245-5-4-1-9" | ||
563 | - d="m 6662,5332.625 c -15.2378,0.1612 -24.0529,14.157 -34.1146,23.4276 -15.476,15.9413 -31.8697,31.086 -46.7916,47.5099 -2.9405,4.2478 -4.8192,9.3664 -5.1563,14.4687 58.2812,-0.042 116.7292,0.083 174.9063,-0.062 -0.7632,-15.4178 -15.3649,-24.1142 -24.7148,-34.6559 -15.4837,-15.0104 -30.156,-31.1956 -46.0978,-45.5317 -5.23,-3.6558 -11.6538,-5.4746 -18.0312,-5.1562 z" | ||
564 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
565 | - <path | ||
566 | - inkscape:connector-curvature="0" | ||
567 | - id="rect5245-5-4-4-4-1" | ||
568 | - d="m 6387.75,5331.1875 c -12.8167,-0.2843 -21.9125,9.8823 -29.9201,18.4726 -16.9981,17.3803 -34.8059,34.2122 -51.3299,51.9024 -3.1649,4.3908 -5.2116,9.685 -5.5625,15.0313 58.2812,-0.042 116.7292,0.083 174.9063,-0.063 -0.723,-15.0722 -14.844,-23.7682 -24.0397,-33.9792 -15.7089,-15.2187 -30.5296,-31.6073 -46.7416,-46.1458 -5.0231,-3.5423 -11.1737,-5.3579 -17.3125,-5.2187 z" | ||
569 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
570 | - <path | ||
571 | - inkscape:connector-curvature="0" | ||
572 | - id="rect5245-5-4-7-7-7" | ||
573 | - d="m 6438.0625,5011.4375 c 0.8844,15.3847 15.3961,24.0874 24.746,34.5934 15.4791,14.996 30.0891,31.1552 46.0665,45.4691 12.3222,9.0732 30.8351,5.8023 40.1691,-6.1752 19.3539,-19.7366 39.5157,-38.9385 58.3934,-58.981 3.1742,-4.3805 5.1726,-9.6672 5.5625,-15.0313 -58.2707,0.083 -116.8752,-0.1665 -174.9375,0.125 z" | ||
574 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
575 | - <path | ||
576 | - inkscape:connector-curvature="0" | ||
577 | - id="rect5245-5-4-7-4-6-5" | ||
578 | - d="m 6701.375,5008.75 c 27.4204,26.9864 54.2733,54.7791 81.9688,81.3438 12.312,9.5662 31.425,6.3692 40.8246,-5.801 59.1737,-59.3365 118.4716,-118.5488 177.7691,-177.7616 -100.1875,34.073 -200.375,68.1459 -300.5625,102.2188 z" | ||
579 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
580 | - <path | ||
581 | - inkscape:connector-curvature="0" | ||
582 | - id="rect5245-5-4-7-4-3-3-0" | ||
583 | - d="m 6998.8438,4984.5938 c -47.3943,47.7404 -95.4006,94.9567 -142.5626,142.875 -10.1297,12.3088 -7.0115,31.8296 5.3324,41.3869 25.2451,25.1714 50.3907,50.4424 75.5426,75.7068 34.073,-100.1875 68.1459,-200.375 102.2188,-300.5625 -13.5104,13.5313 -27.0208,27.0625 -40.5312,40.5938 z" | ||
584 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
585 | - <path | ||
586 | - inkscape:connector-curvature="0" | ||
587 | - id="rect5245-5-4-7-4-2-3-8" | ||
588 | - d="m 6114.2812,5244.9062 c 26.8771,-27.2005 54.2641,-54.0149 80.875,-81.4062 10.0644,-12.3049 7.0844,-31.7597 -5.3634,-41.3871 -59.3365,-59.1737 -118.5488,-118.4717 -177.7616,-177.7691 34.0834,100.1874 68.1667,200.375 102.25,300.5624 z" | ||
589 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
590 | - <path | ||
591 | - inkscape:connector-curvature="0" | ||
592 | - id="rect5245-5-4-7-4-3-5-8-2" | ||
593 | - d="m 6090.125,4947.4375 c 47.677,47.4093 94.9671,95.3478 142.7812,142.5313 12.3096,10.0651 31.7648,7.1628 41.4222,-5.2972 25.2023,-25.2247 50.4579,-50.3961 75.7341,-75.5466 -100.1875,-34.0729 -200.375,-68.1458 -300.5625,-102.2188 13.5417,13.5105 27.0833,27.0209 40.625,40.5313 z" | ||
594 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
595 | - </g> | ||
596 | - <g | ||
597 | - id="g5575-7-8" | ||
598 | - transform="matrix(0.01545762,0,0,0.01545762,-84.486184,947.26528)" | ||
599 | - style="fill:#d38d5f"> | ||
600 | - <path | ||
601 | - inkscape:connector-curvature="0" | ||
602 | - id="rect5245-9-6-5" | ||
603 | - d="m 6408.0436,5064.9271 c -11.726,-11.2912 -32.3679,-9.6218 -42.4594,3.1418 -19.6123,19.9856 -39.9641,39.4417 -59.1428,59.74 -9.518,12.5005 -6.3676,31.3823 5.826,40.9329 19.6892,19.3981 38.735,39.51 58.8119,58.4787 12.3484,9.5947 31.3846,6.505 40.8262,-5.7528 19.4803,-19.979 39.9713,-39.2016 58.856,-59.6292 9.0558,-12.4283 5.7503,-30.9531 -6.2232,-40.3134 -18.839,-18.8581 -37.6197,-37.7778 -56.4947,-56.598 z" | ||
604 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
605 | - <path | ||
606 | - inkscape:connector-curvature="0" | ||
607 | - id="rect5245-3-6-2-0" | ||
608 | - d="m 6271.4191,5203.1033 c -11.659,-11.815 -32.7156,-10.3098 -42.9669,2.6329 -19.7244,20.2091 -40.4303,39.6819 -59.5621,60.3374 -9.0337,12.4807 -5.8043,30.8944 6.2011,40.2912 19.927,19.5313 39.0995,40.0758 59.474,59.0098 12.4653,9.0761 30.8739,5.764 40.2082,-6.2396 19.3801,-19.7478 39.4876,-38.9701 58.4368,-59.0318 9.4652,-12.3353 6.4045,-31.4347 -5.8482,-40.9551 -18.655,-18.6738 -37.2518,-37.4088 -55.9429,-56.0448 z" | ||
609 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
610 | - <path | ||
611 | - inkscape:connector-curvature="0" | ||
612 | - id="rect5245-8-6-2-9" | ||
613 | - d="m 6545.5287,5202.6829 c -11.7363,-11.3217 -32.3801,-9.5656 -42.4593,3.1418 -19.5937,19.9946 -39.9139,39.3349 -59.0767,59.7178 -9.5513,12.3449 -6.4556,31.438 5.7819,40.9772 19.6941,19.3922 38.7293,39.519 58.8119,58.4788 12.4118,9.6084 31.3584,6.4621 40.8704,-5.797 19.3229,-19.7402 39.4821,-38.8781 58.3264,-58.9655 9.5617,-12.3467 6.4938,-31.475 -5.7378,-40.933 -18.8464,-18.8655 -37.6344,-37.7925 -56.5168,-56.6201 z" | ||
614 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
615 | - <path | ||
616 | - inkscape:connector-curvature="0" | ||
617 | - id="rect5245-7-4-7-6" | ||
618 | - d="m 6683.1903,5065.7678 c -11.6727,-11.8214 -32.6711,-10.2704 -42.9667,2.6331 -19.5831,19.9842 -39.9685,39.3886 -59.0767,59.7177 -9.5608,12.3477 -6.4907,31.4696 5.7376,40.9329 19.6964,19.4311 38.8692,39.5905 58.8782,58.5894 12.4019,9.5309 31.358,6.4013 40.8042,-5.8192 19.3581,-19.7586 39.4434,-38.8626 58.3704,-59.0098 9.5628,-12.3863 6.44,-31.439 -5.7818,-40.977 -18.6625,-18.6812 -37.2665,-37.4235 -55.9652,-56.0671 z" | ||
619 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
620 | - <path | ||
621 | - inkscape:connector-curvature="0" | ||
622 | - id="rect5245-5-2-8-3" | ||
623 | - d="m 6820.3665,5203.4794 c -11.6211,-11.8358 -32.7205,-10.3463 -42.9888,2.6109 -19.6161,19.9836 -39.9579,39.4428 -59.1429,59.7399 -9.5091,12.4948 -6.4432,31.3232 5.7819,40.8887 19.7364,19.4377 38.8215,39.6072 58.9443,58.6115 12.2819,9.5014 31.2571,6.4201 40.7379,-5.8413 19.38,-19.7479 39.4876,-38.9702 58.4367,-59.0319 9.212,-12.1115 6.6473,-30.6982 -5.1419,-40.247 -18.8831,-18.9025 -37.708,-37.8662 -56.6272,-56.7308 z" | ||
624 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
625 | - <path | ||
626 | - inkscape:connector-curvature="0" | ||
627 | - id="rect5245-5-4-1-9-8" | ||
628 | - d="m 6662,5332.625 c -15.2378,0.1612 -24.0529,14.157 -34.1146,23.4276 -15.476,15.9413 -31.8697,31.086 -46.7916,47.5099 -2.9405,4.2478 -4.8192,9.3664 -5.1563,14.4687 58.2812,-0.042 116.7292,0.083 174.9063,-0.062 -0.7632,-15.4178 -15.3649,-24.1142 -24.7148,-34.6559 -15.4837,-15.0104 -30.156,-31.1956 -46.0978,-45.5317 -5.23,-3.6558 -11.6538,-5.4746 -18.0312,-5.1562 z" | ||
629 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
630 | - <path | ||
631 | - inkscape:connector-curvature="0" | ||
632 | - id="rect5245-5-4-4-4-1-5" | ||
633 | - d="m 6387.75,5331.1875 c -12.8167,-0.2843 -21.9125,9.8823 -29.9201,18.4726 -16.9981,17.3803 -34.8059,34.2122 -51.3299,51.9024 -3.1649,4.3908 -5.2116,9.685 -5.5625,15.0313 58.2812,-0.042 116.7292,0.083 174.9063,-0.063 -0.723,-15.0722 -14.844,-23.7682 -24.0397,-33.9792 -15.7089,-15.2187 -30.5296,-31.6073 -46.7416,-46.1458 -5.0231,-3.5423 -11.1737,-5.3579 -17.3125,-5.2187 z" | ||
634 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
635 | - <path | ||
636 | - inkscape:connector-curvature="0" | ||
637 | - id="rect5245-5-4-7-7-7-6" | ||
638 | - d="m 6438.0625,5011.4375 c 0.8844,15.3847 15.3961,24.0874 24.746,34.5934 15.4791,14.996 30.0891,31.1552 46.0665,45.4691 12.3222,9.0732 30.8351,5.8023 40.1691,-6.1752 19.3539,-19.7366 39.5157,-38.9385 58.3934,-58.981 3.1742,-4.3805 5.1726,-9.6672 5.5625,-15.0313 -58.2707,0.083 -116.8752,-0.1665 -174.9375,0.125 z" | ||
639 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
640 | - <path | ||
641 | - inkscape:connector-curvature="0" | ||
642 | - id="rect5245-5-4-7-4-6-5-1" | ||
643 | - d="m 6701.375,5008.75 c 27.4204,26.9864 54.2733,54.7791 81.9688,81.3438 12.312,9.5662 31.425,6.3692 40.8246,-5.801 59.1737,-59.3365 118.4716,-118.5488 177.7691,-177.7616 -100.1875,34.073 -200.375,68.1459 -300.5625,102.2188 z" | ||
644 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
645 | - <path | ||
646 | - inkscape:connector-curvature="0" | ||
647 | - id="rect5245-5-4-7-4-3-3-0-1" | ||
648 | - d="m 6998.8438,4984.5938 c -47.3943,47.7404 -95.4006,94.9567 -142.5626,142.875 -10.1297,12.3088 -7.0115,31.8296 5.3324,41.3869 25.2451,25.1714 50.3907,50.4424 75.5426,75.7068 34.073,-100.1875 68.1459,-200.375 102.2188,-300.5625 -13.5104,13.5313 -27.0208,27.0625 -40.5312,40.5938 z" | ||
649 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
650 | - <path | ||
651 | - inkscape:connector-curvature="0" | ||
652 | - id="rect5245-5-4-7-4-2-3-8-5" | ||
653 | - d="m 6114.2812,5244.9062 c 26.8771,-27.2005 54.2641,-54.0149 80.875,-81.4062 10.0644,-12.3049 7.0844,-31.7597 -5.3634,-41.3871 -59.3365,-59.1737 -118.5488,-118.4717 -177.7616,-177.7691 34.0834,100.1874 68.1667,200.375 102.25,300.5624 z" | ||
654 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
655 | - <path | ||
656 | - inkscape:connector-curvature="0" | ||
657 | - id="rect5245-5-4-7-4-3-5-8-2-9" | ||
658 | - d="m 6090.125,4947.4375 c 47.677,47.4093 94.9671,95.3478 142.7812,142.5313 12.3096,10.0651 31.7648,7.1628 41.4222,-5.2972 25.2023,-25.2247 50.4579,-50.3961 75.7341,-75.5466 -100.1875,-34.0729 -200.375,-68.1458 -300.5625,-102.2188 13.5417,13.5105 27.0833,27.0209 40.625,40.5313 z" | ||
659 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
660 | - </g> | ||
661 | - <g | ||
662 | - id="g5575-7-8-8" | ||
663 | - transform="matrix(0.01545762,0,0,0.01545762,-84.564216,961.96398)" | ||
664 | - style="fill:#d38d5f"> | ||
665 | - <path | ||
666 | - inkscape:connector-curvature="0" | ||
667 | - id="rect5245-9-6-5-4" | ||
668 | - d="m 6408.0436,5064.9271 c -11.726,-11.2912 -32.3679,-9.6218 -42.4594,3.1418 -19.6123,19.9856 -39.9641,39.4417 -59.1428,59.74 -9.518,12.5005 -6.3676,31.3823 5.826,40.9329 19.6892,19.3981 38.735,39.51 58.8119,58.4787 12.3484,9.5947 31.3846,6.505 40.8262,-5.7528 19.4803,-19.979 39.9713,-39.2016 58.856,-59.6292 9.0558,-12.4283 5.7503,-30.9531 -6.2232,-40.3134 -18.839,-18.8581 -37.6197,-37.7778 -56.4947,-56.598 z" | ||
669 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
670 | - <path | ||
671 | - inkscape:connector-curvature="0" | ||
672 | - id="rect5245-3-6-2-0-8" | ||
673 | - d="m 6271.4191,5203.1033 c -11.659,-11.815 -32.7156,-10.3098 -42.9669,2.6329 -19.7244,20.2091 -40.4303,39.6819 -59.5621,60.3374 -9.0337,12.4807 -5.8043,30.8944 6.2011,40.2912 19.927,19.5313 39.0995,40.0758 59.474,59.0098 12.4653,9.0761 30.8739,5.764 40.2082,-6.2396 19.3801,-19.7478 39.4876,-38.9701 58.4368,-59.0318 9.4652,-12.3353 6.4045,-31.4347 -5.8482,-40.9551 -18.655,-18.6738 -37.2518,-37.4088 -55.9429,-56.0448 z" | ||
674 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
675 | - <path | ||
676 | - inkscape:connector-curvature="0" | ||
677 | - id="rect5245-8-6-2-9-1" | ||
678 | - d="m 6545.5287,5202.6829 c -11.7363,-11.3217 -32.3801,-9.5656 -42.4593,3.1418 -19.5937,19.9946 -39.9139,39.3349 -59.0767,59.7178 -9.5513,12.3449 -6.4556,31.438 5.7819,40.9772 19.6941,19.3922 38.7293,39.519 58.8119,58.4788 12.4118,9.6084 31.3584,6.4621 40.8704,-5.797 19.3229,-19.7402 39.4821,-38.8781 58.3264,-58.9655 9.5617,-12.3467 6.4938,-31.475 -5.7378,-40.933 -18.8464,-18.8655 -37.6344,-37.7925 -56.5168,-56.6201 z" | ||
679 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
680 | - <path | ||
681 | - inkscape:connector-curvature="0" | ||
682 | - id="rect5245-7-4-7-6-0" | ||
683 | - d="m 6683.1903,5065.7678 c -11.6727,-11.8214 -32.6711,-10.2704 -42.9667,2.6331 -19.5831,19.9842 -39.9685,39.3886 -59.0767,59.7177 -9.5608,12.3477 -6.4907,31.4696 5.7376,40.9329 19.6964,19.4311 38.8692,39.5905 58.8782,58.5894 12.4019,9.5309 31.358,6.4013 40.8042,-5.8192 19.3581,-19.7586 39.4434,-38.8626 58.3704,-59.0098 9.5628,-12.3863 6.44,-31.439 -5.7818,-40.977 -18.6625,-18.6812 -37.2665,-37.4235 -55.9652,-56.0671 z" | ||
684 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
685 | - <path | ||
686 | - inkscape:connector-curvature="0" | ||
687 | - id="rect5245-5-2-8-3-3" | ||
688 | - d="m 6820.3665,5203.4794 c -11.6211,-11.8358 -32.7205,-10.3463 -42.9888,2.6109 -19.6161,19.9836 -39.9579,39.4428 -59.1429,59.7399 -9.5091,12.4948 -6.4432,31.3232 5.7819,40.8887 19.7364,19.4377 38.8215,39.6072 58.9443,58.6115 12.2819,9.5014 31.2571,6.4201 40.7379,-5.8413 19.38,-19.7479 39.4876,-38.9702 58.4367,-59.0319 9.212,-12.1115 6.6473,-30.6982 -5.1419,-40.247 -18.8831,-18.9025 -37.708,-37.8662 -56.6272,-56.7308 z" | ||
689 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
690 | - <path | ||
691 | - inkscape:connector-curvature="0" | ||
692 | - id="rect5245-5-4-1-9-8-0" | ||
693 | - d="m 6662,5332.625 c -15.2378,0.1612 -24.0529,14.157 -34.1146,23.4276 -15.476,15.9413 -31.8697,31.086 -46.7916,47.5099 -2.9405,4.2478 -4.8192,9.3664 -5.1563,14.4687 58.2812,-0.042 116.7292,0.083 174.9063,-0.062 -0.7632,-15.4178 -15.3649,-24.1142 -24.7148,-34.6559 -15.4837,-15.0104 -30.156,-31.1956 -46.0978,-45.5317 -5.23,-3.6558 -11.6538,-5.4746 -18.0312,-5.1562 z" | ||
694 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
695 | - <path | ||
696 | - inkscape:connector-curvature="0" | ||
697 | - id="rect5245-5-4-4-4-1-5-4" | ||
698 | - d="m 6387.75,5331.1875 c -12.8167,-0.2843 -21.9125,9.8823 -29.9201,18.4726 -16.9981,17.3803 -34.8059,34.2122 -51.3299,51.9024 -3.1649,4.3908 -5.2116,9.685 -5.5625,15.0313 58.2812,-0.042 116.7292,0.083 174.9063,-0.063 -0.723,-15.0722 -14.844,-23.7682 -24.0397,-33.9792 -15.7089,-15.2187 -30.5296,-31.6073 -46.7416,-46.1458 -5.0231,-3.5423 -11.1737,-5.3579 -17.3125,-5.2187 z" | ||
699 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
700 | - <path | ||
701 | - inkscape:connector-curvature="0" | ||
702 | - id="rect5245-5-4-7-7-7-6-4" | ||
703 | - d="m 6438.0625,5011.4375 c 0.8844,15.3847 15.3961,24.0874 24.746,34.5934 15.4791,14.996 30.0891,31.1552 46.0665,45.4691 12.3222,9.0732 30.8351,5.8023 40.1691,-6.1752 19.3539,-19.7366 39.5157,-38.9385 58.3934,-58.981 3.1742,-4.3805 5.1726,-9.6672 5.5625,-15.0313 -58.2707,0.083 -116.8752,-0.1665 -174.9375,0.125 z" | ||
704 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
705 | - <path | ||
706 | - inkscape:connector-curvature="0" | ||
707 | - id="rect5245-5-4-7-4-6-5-1-4" | ||
708 | - d="m 6701.375,5008.75 c 27.4204,26.9864 54.2733,54.7791 81.9688,81.3438 12.312,9.5662 31.425,6.3692 40.8246,-5.801 59.1737,-59.3365 118.4716,-118.5488 177.7691,-177.7616 -100.1875,34.073 -200.375,68.1459 -300.5625,102.2188 z" | ||
709 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
710 | - <path | ||
711 | - inkscape:connector-curvature="0" | ||
712 | - id="rect5245-5-4-7-4-3-3-0-1-4" | ||
713 | - d="m 6998.8438,4984.5938 c -47.3943,47.7404 -95.4006,94.9567 -142.5626,142.875 -10.1297,12.3088 -7.0115,31.8296 5.3324,41.3869 25.2451,25.1714 50.3907,50.4424 75.5426,75.7068 34.073,-100.1875 68.1459,-200.375 102.2188,-300.5625 -13.5104,13.5313 -27.0208,27.0625 -40.5312,40.5938 z" | ||
714 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
715 | - <path | ||
716 | - inkscape:connector-curvature="0" | ||
717 | - id="rect5245-5-4-7-4-2-3-8-5-7" | ||
718 | - d="m 6114.2812,5244.9062 c 26.8771,-27.2005 54.2641,-54.0149 80.875,-81.4062 10.0644,-12.3049 7.0844,-31.7597 -5.3634,-41.3871 -59.3365,-59.1737 -118.5488,-118.4717 -177.7616,-177.7691 34.0834,100.1874 68.1667,200.375 102.25,300.5624 z" | ||
719 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
720 | - <path | ||
721 | - inkscape:connector-curvature="0" | ||
722 | - id="rect5245-5-4-7-4-3-5-8-2-9-6" | ||
723 | - d="m 6090.125,4947.4375 c 47.677,47.4093 94.9671,95.3478 142.7812,142.5313 12.3096,10.0651 31.7648,7.1628 41.4222,-5.2972 25.2023,-25.2247 50.4579,-50.3961 75.7341,-75.5466 -100.1875,-34.0729 -200.375,-68.1458 -300.5625,-102.2188 13.5417,13.5105 27.0833,27.0209 40.625,40.5313 z" | ||
724 | - style="fill:#d38d5f;fill-opacity:1;stroke:none" /> | ||
725 | - </g> | ||
726 | - </g> | ||
727 | - <g | ||
728 | - id="g4835" | ||
729 | - style="stroke:url(#linearGradient4958)"> | ||
730 | - <path | ||
731 | - sodipodi:nodetypes="csccc" | ||
732 | - id="path2210" | ||
733 | - 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" | ||
734 | - 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" /> | ||
735 | - <path | ||
736 | - 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" | ||
737 | - d="m 39.5,1042.8622 -5,0 0,4" | ||
738 | - id="path2247" | ||
739 | - sodipodi:nodetypes="ccc" /> | ||
740 | - </g> | ||
741 | - </g> | ||
742 | -</svg> |
plugins/shopping_cart/public/style.css
@@ -1,226 +0,0 @@ | @@ -1,226 +0,0 @@ | ||
1 | -.cart-add-item .ui-icon-cart { | ||
2 | - background: url("/plugins/shopping_cart/images/button-icon.png") no-repeat scroll left center transparent; | ||
3 | - width: 22px; | ||
4 | -} | ||
5 | -.cart-buy .ui-icon-cart { | ||
6 | - background: url("/plugins/shopping_cart/images/button-icon.png") no-repeat scroll left center transparent; | ||
7 | - width: 22px; | ||
8 | -} | ||
9 | -.cart-add-item .ui-button-text { | ||
10 | - padding-left: 2.6em; | ||
11 | -} | ||
12 | - | ||
13 | -.product-item .cart-add-item { | ||
14 | - top: 0px; | ||
15 | -} | ||
16 | - | ||
17 | -.cart { | ||
18 | - position: fixed; | ||
19 | - right: 20px; | ||
20 | - top: 0px; | ||
21 | - width: 200px; | ||
22 | - z-index: 1000; | ||
23 | - border: 1px solid #777; | ||
24 | - background: rgba(100,100,100,0.8); | ||
25 | -} | ||
26 | - | ||
27 | -.cart h3 { | ||
28 | - color: #000; | ||
29 | - margin: 0px 0px 0px 5px; | ||
30 | -} | ||
31 | - | ||
32 | -.cart-clean { | ||
33 | - color: #AAA; | ||
34 | - position: absolute; | ||
35 | - top: 1px; | ||
36 | - right: 5px; | ||
37 | - text-decoration: none; | ||
38 | -} | ||
39 | -.cart-clean:hover { | ||
40 | - color: #888; | ||
41 | -} | ||
42 | - | ||
43 | -.cart-content { | ||
44 | - display: none; | ||
45 | -} | ||
46 | - | ||
47 | -.cart-items { | ||
48 | - margin: 0px; | ||
49 | - padding: 0px; | ||
50 | - max-height: 328px; | ||
51 | - overflow: auto; | ||
52 | -} | ||
53 | - | ||
54 | -.cart-items li { | ||
55 | - height: 50px; | ||
56 | - padding: 5px; | ||
57 | - margin: 3px; | ||
58 | - border: 1px solid #999; | ||
59 | - list-style: none; | ||
60 | - background: #FFF; | ||
61 | - position: relative; | ||
62 | -} | ||
63 | - | ||
64 | -.cart-items .picture { | ||
65 | - float: left; | ||
66 | - width: 50px; | ||
67 | - height: 50px; | ||
68 | - margin-right: 10px; | ||
69 | - background-repeat: no-repeat; | ||
70 | - background-position: 50% 50%; | ||
71 | -} | ||
72 | - | ||
73 | -.cart .item-name { | ||
74 | - margin-right: 20px; | ||
75 | -} | ||
76 | - | ||
77 | -.cart .button { | ||
78 | - position: absolute; | ||
79 | - top: 2px; | ||
80 | - right: 2px; | ||
81 | -} | ||
82 | - | ||
83 | -.cart input { | ||
84 | - border: 1px solid transparent; | ||
85 | - background: transparent 50% 50% no-repeat; | ||
86 | - text-align: center; | ||
87 | - padding: 0px; | ||
88 | - font-family: monospace; | ||
89 | - width: 2em; | ||
90 | -} | ||
91 | -.cart:hover input, .cart input:focus { | ||
92 | - border: 1px solid #CCC; | ||
93 | -} | ||
94 | - | ||
95 | -.cart-buy { | ||
96 | - display: block; | ||
97 | - margin: 2px 4px; | ||
98 | -} | ||
99 | - | ||
100 | -.cart-total { | ||
101 | - position: absolute; | ||
102 | - left: 5px; | ||
103 | - bottom: 0px; | ||
104 | -} | ||
105 | - | ||
106 | -.cart-toggle { | ||
107 | - display: block; | ||
108 | - color: #AAA; | ||
109 | - text-decoration: none; | ||
110 | - float: right; | ||
111 | - padding: 0px 5px; | ||
112 | -} | ||
113 | -.cart-toggle:hover { | ||
114 | - color: #fff; | ||
115 | -} | ||
116 | - | ||
117 | -#cart-request-box { | ||
118 | - width: 690px; | ||
119 | -} | ||
120 | - | ||
121 | -#cart-request-form { | ||
122 | - width: 274px; | ||
123 | - float: left; | ||
124 | -} | ||
125 | - | ||
126 | -#cart-request-box .cart-box-close { | ||
127 | - position: absolute; | ||
128 | - right: 10px; | ||
129 | - bottom: 10px; | ||
130 | - width: 16px; | ||
131 | - height: 16px; | ||
132 | - background-repeat: no-repeat; | ||
133 | -} | ||
134 | - | ||
135 | -#cart-form-main { | ||
136 | - border: 2px solid #FFF; | ||
137 | - padding: 0px 10px; | ||
138 | -} | ||
139 | - | ||
140 | -#cart-request-form fieldset { | ||
141 | - clear: left; | ||
142 | - color: #999; | ||
143 | - border: 1px solid #BBB; | ||
144 | - margin-top: 5px; | ||
145 | -} | ||
146 | - | ||
147 | -#cart-request-form input, | ||
148 | -#cart-request-form select { | ||
149 | - width: 250px; | ||
150 | -} | ||
151 | - | ||
152 | -#cart-form-actions { | ||
153 | - clear: both; | ||
154 | - padding-top: 15px; | ||
155 | - text-align: center; | ||
156 | -} | ||
157 | - | ||
158 | -#cart-form-actions .submit { | ||
159 | - cursor: pointer; | ||
160 | -} | ||
161 | - | ||
162 | -#cart-items-table { | ||
163 | - margin-left: 285px; | ||
164 | - width: 400px | ||
165 | -} | ||
166 | - | ||
167 | -.cart-table-quantity { | ||
168 | - text-align: center; | ||
169 | -} | ||
170 | - | ||
171 | -.cart-table-price, | ||
172 | -.cart-table-total-label, | ||
173 | -.cart-table-total-value { | ||
174 | - text-align: right; | ||
175 | -} | ||
176 | - | ||
177 | -label.error { | ||
178 | - float: none; | ||
179 | - color: red; | ||
180 | - padding-left: .5em; | ||
181 | - vertical-align: top; | ||
182 | -} | ||
183 | - | ||
184 | -.controller-profile_editor a.control-panel-shopping-cart-purchase-report {background-image: url("/plugins/shopping_cart/images/control-panel/purchase-report.png")} | ||
185 | -.controller-profile_editor .msie6 a.control-panel-shopping-cart-purchase-report {background-image: url("/plugins/shopping_cart/images/control-panel/purchase-report.gif")} | ||
186 | -.controller-profile_editor a.control-panel-shopping-cart-icon {background-image: url("/plugins/shopping_cart/images/control-panel/icon.png")} | ||
187 | -.controller-profile_editor .msie6 a.control-panel-shopping-cart-icon {background-image: url("/plugins/shopping_cart/images/control-panel/icon.gif")} | ||
188 | - | ||
189 | -.action-shopping_cart_plugin_myprofile-reports td.order-info { | ||
190 | - padding: 0px; | ||
191 | - height: auto; | ||
192 | -} | ||
193 | - | ||
194 | -.action-shopping_cart_plugin_myprofile-reports .customer-details, | ||
195 | -.action-shopping_cart_plugin_myprofile-reports .order-products { | ||
196 | - list-style-position: inside; | ||
197 | - float: left; | ||
198 | - width: 49%; | ||
199 | - margin: 0px; | ||
200 | - padding: 10px 0px; | ||
201 | -} | ||
202 | - | ||
203 | -.action-shopping_cart_plugin_myprofile-reports .order-products { | ||
204 | - float: right; | ||
205 | -} | ||
206 | - | ||
207 | -.action-shopping_cart_plugin_myprofile-reports .customer-details li, | ||
208 | -.action-shopping_cart_plugin_myprofile-reports .order-products li { | ||
209 | - padding-left: 5px; | ||
210 | -} | ||
211 | - | ||
212 | -#cart-order-filter { | ||
213 | - background-color: #ccc; | ||
214 | - border: 1px solid #aaa; | ||
215 | - border-radius: 5px; | ||
216 | - padding: 3px 8px; | ||
217 | - margin-bottom: 10px; | ||
218 | -} | ||
219 | - | ||
220 | -th { | ||
221 | - text-align: center; | ||
222 | -} | ||
223 | - | ||
224 | -td { | ||
225 | - text-align: left; | ||
226 | -} |
@@ -0,0 +1,289 @@ | @@ -0,0 +1,289 @@ | ||
1 | +.cart-add-item .ui-icon-cart, | ||
2 | +.cart-buy .ui-icon-cart, | ||
3 | +.icon-cart, .btn.icon-cart { | ||
4 | + background-image: url("/plugins/shopping_cart/images/button-icon.png"); | ||
5 | + background-repeat: no-repeat; | ||
6 | + background-position: 5px center; | ||
7 | +} | ||
8 | +.cart-add-item.small-loading { | ||
9 | + background-image: url(/images/loading-small.gif); | ||
10 | +} | ||
11 | + | ||
12 | +a.button.with-text.icon-cart, | ||
13 | +a.button.with-text.icon-cart:visited, | ||
14 | +body.noosfero a.button.with-text.icon-cart, | ||
15 | +body.noosfero a.button.with-text.icon-cart:visited, | ||
16 | +input.button.with-text.icon-cart, | ||
17 | +.icon-cart, .btn.icon-cart { | ||
18 | + padding-left: 30px; | ||
19 | +} | ||
20 | +.catalog-autocomplete .cart-add-item { | ||
21 | + display: block; | ||
22 | + float: right; | ||
23 | +} | ||
24 | +.cart-add-item .ui-button-text { | ||
25 | + padding-left: 2.6em; | ||
26 | +} | ||
27 | +.product-item .cart-add-item { | ||
28 | + top: 0px; | ||
29 | +} | ||
30 | + | ||
31 | + | ||
32 | +.action-shopping_cart_plugin-buy .cart { | ||
33 | + display: none !important; | ||
34 | +} | ||
35 | +.cart { | ||
36 | + display: none; | ||
37 | + position: fixed; | ||
38 | + right: 20px; | ||
39 | + top: 0px; | ||
40 | + z-index: 100; | ||
41 | +} | ||
42 | +.cart-minimized { | ||
43 | + float: right; | ||
44 | + position: relative; | ||
45 | +} | ||
46 | +#catalog-options ul .catalog-cart { | ||
47 | + float: right; | ||
48 | + margin: 0; | ||
49 | +} | ||
50 | +#cart1 .cart-inner { | ||
51 | + width: 200px; | ||
52 | + z-index: 1000; | ||
53 | + border: 1px solid #777; | ||
54 | + border-radius: 10px; | ||
55 | + box-shadow: #000 2px 2px 8px; | ||
56 | + background: rgba(130,130,130,0.9); | ||
57 | +} | ||
58 | +.cart .cart-inner { | ||
59 | + position: relative; | ||
60 | + top: 2px; | ||
61 | + padding-bottom: 20px; | ||
62 | +} | ||
63 | +.cart .cart-inner .cart-content { | ||
64 | + display: none; | ||
65 | +} | ||
66 | +.cart-minimized .cart-inner { | ||
67 | + display: none; | ||
68 | + position: absolute; | ||
69 | + top: 24px; | ||
70 | + left: -150px; | ||
71 | +} | ||
72 | +.cart-minimized .cart-applet { | ||
73 | + float: right; | ||
74 | + text-align: center; | ||
75 | +} | ||
76 | +#content .cart-minimized .cart-applet .cart-highlight { | ||
77 | + background-color: yellow; | ||
78 | +} | ||
79 | +.cart-minimized .cart-applet-checkout, .cart-minimized .cart-applet-checkout-disabled { | ||
80 | + display: block; | ||
81 | + font-size: 80%; | ||
82 | + margin-top: 3px; | ||
83 | +} | ||
84 | +.cart-minimized .cart-applet-checkout-disabled { | ||
85 | + pointer-events: none; | ||
86 | + cursor: default; | ||
87 | + color: #CCC; | ||
88 | + text-decoration: none; | ||
89 | +} | ||
90 | +.cart-qtty { | ||
91 | + font-weight: bold; | ||
92 | +} | ||
93 | +#cart1 h3 { | ||
94 | + color: #036276; | ||
95 | + margin: 0px 0px 0px 5px; | ||
96 | + font-weight: lighter; | ||
97 | +} | ||
98 | +#cart-profile-name { | ||
99 | + white-space: nowrap; | ||
100 | + text-overflow: ellipsis; | ||
101 | + overflow: hidden; | ||
102 | + margin: 0px 5px; | ||
103 | + color: #000; | ||
104 | +} | ||
105 | +.cart-clean { | ||
106 | + color: #AAA; | ||
107 | + position: absolute; | ||
108 | + top: 1px; | ||
109 | + right: 5px; | ||
110 | + text-decoration: none; | ||
111 | +} | ||
112 | +.cart-clean:hover { | ||
113 | + color: #888; | ||
114 | +} | ||
115 | +.cart-items { | ||
116 | + margin: 0px; | ||
117 | + padding: 0px; | ||
118 | + max-height: 328px; | ||
119 | + overflow-y: auto; | ||
120 | + overflow-x: hidden; | ||
121 | +} | ||
122 | +#catalog-options .cart-items { | ||
123 | + padding: 0; | ||
124 | + margin: 0; | ||
125 | +} | ||
126 | +#catalog-options .cart-items li { | ||
127 | + margin-right: 0; | ||
128 | +} | ||
129 | +.cart-items li { | ||
130 | + padding: 0; | ||
131 | + border: 2px solid #999; | ||
132 | + width: 98%; | ||
133 | + list-style: none; | ||
134 | + background: #FFF; | ||
135 | + position: relative; | ||
136 | + border-radius: 5px; | ||
137 | + font-size: 85%; | ||
138 | + min-height: 50px; | ||
139 | +} | ||
140 | +.cart-items .picture { | ||
141 | + float: left; | ||
142 | + width: 50px; | ||
143 | + height: 50px; | ||
144 | + margin-right: 10px; | ||
145 | + background-repeat: no-repeat; | ||
146 | + background-position: 50% 50%; | ||
147 | +} | ||
148 | +#cart1 .item-name { | ||
149 | + margin-right: 0; | ||
150 | +} | ||
151 | +.cart-items .cart-remove-item { | ||
152 | + float: right; | ||
153 | +} | ||
154 | + | ||
155 | +#cart1 input { | ||
156 | + border: 1px solid transparent; | ||
157 | + background: transparent 50% 50% no-repeat; | ||
158 | + text-align: center; | ||
159 | + padding: 0px; | ||
160 | + font-family: monospace; | ||
161 | + width: 2em; | ||
162 | +} | ||
163 | +#cart1:hover input, #cart1 input:focus { | ||
164 | + border: 1px solid #CCC; | ||
165 | +} | ||
166 | +.cart-buy { | ||
167 | + display: block; | ||
168 | + margin: 2px 4px; | ||
169 | +} | ||
170 | +.cart-total { | ||
171 | + float: left; | ||
172 | +} | ||
173 | +.cart-toggle, .cart-toggle:visited { | ||
174 | + display: block; | ||
175 | + color: #036276; | ||
176 | + text-decoration: none; | ||
177 | + float: right; | ||
178 | + padding: 0px 5px; | ||
179 | +} | ||
180 | +.cart-toggle:hover { | ||
181 | + color: #fff; | ||
182 | +} | ||
183 | +.str-hide { | ||
184 | + display: none; | ||
185 | +} | ||
186 | + | ||
187 | +#cart-request-box { | ||
188 | + overflow: hidden; | ||
189 | +} | ||
190 | +#cart-request-box a { | ||
191 | + font-size: smaller; | ||
192 | +} | ||
193 | +#cart-request-form { | ||
194 | +} | ||
195 | +#cart-request-box .cart-box-close { | ||
196 | + position: absolute; | ||
197 | + right: 10px; | ||
198 | + bottom: 10px; | ||
199 | + width: 16px; | ||
200 | + height: 16px; | ||
201 | + background-repeat: no-repeat; | ||
202 | +} | ||
203 | +#cart-request-box .cart-go-back { | ||
204 | + float: right; | ||
205 | + text-transform: none; | ||
206 | + font-variant: normal; | ||
207 | +} | ||
208 | + | ||
209 | +#cart-request-form fieldset { | ||
210 | + clear: left; | ||
211 | + color: #999; | ||
212 | + margin-top: 5px; | ||
213 | +} | ||
214 | + | ||
215 | +#cart-request-form input, | ||
216 | +#cart-request-form select { | ||
217 | +} | ||
218 | + | ||
219 | +#cart-form-actions { | ||
220 | + clear: both; | ||
221 | + padding-top: 15px; | ||
222 | + text-align: center; | ||
223 | +} | ||
224 | + | ||
225 | +#cart-form-actions .submit { | ||
226 | + cursor: pointer; | ||
227 | +} | ||
228 | + | ||
229 | +#cart-items-table { | ||
230 | +} | ||
231 | + | ||
232 | +.cart-table-quantity { | ||
233 | + text-align: center; | ||
234 | +} | ||
235 | + | ||
236 | +.cart-table-price, | ||
237 | +.cart-table-total-label, | ||
238 | +.cart-table-total-value { | ||
239 | + text-align: right; | ||
240 | +} | ||
241 | +label.error { | ||
242 | + float: none; | ||
243 | + color: red; | ||
244 | + padding-left: .5em; | ||
245 | + vertical-align: top; | ||
246 | +} | ||
247 | + | ||
248 | +.controller-profile_editor a.control-panel-shopping-cart-icon {background-image: url("/plugins/shopping_cart/images/control-panel/icon.png")} | ||
249 | +.controller-profile_editor .msie6 a.control-panel-shopping-cart-icon {background-image: url("/plugins/shopping_cart/images/control-panel/icon.gif")} | ||
250 | + | ||
251 | +.action-shopping_cart_plugin_myprofile-reports td.order-info { | ||
252 | + padding: 0px; | ||
253 | + height: auto; | ||
254 | +} | ||
255 | +.action-shopping_cart_plugin_myprofile-reports .customer-details, | ||
256 | +.action-shopping_cart_plugin_myprofile-reports .order-products { | ||
257 | + list-style-position: inside; | ||
258 | + float: left; | ||
259 | + width: 49%; | ||
260 | + margin: 0px; | ||
261 | + padding: 10px 0px; | ||
262 | +} | ||
263 | +.action-shopping_cart_plugin_myprofile-reports .order-products { | ||
264 | + float: right; | ||
265 | +} | ||
266 | +.action-shopping_cart_plugin_myprofile-reports .customer-details li, | ||
267 | +.action-shopping_cart_plugin_myprofile-reports .order-products li { | ||
268 | + padding-left: 5px; | ||
269 | +} | ||
270 | +#cart-order-filter { | ||
271 | + background-color: #ccc; | ||
272 | + border: 1px solid #aaa; | ||
273 | + border-radius: 5px; | ||
274 | + padding: 3px 8px; | ||
275 | + margin-bottom: 10px; | ||
276 | +} | ||
277 | +th { | ||
278 | + text-align: center; | ||
279 | +} | ||
280 | +td { | ||
281 | + text-align: left; | ||
282 | +} | ||
283 | +/* Repeat orders */ | ||
284 | +a.button.repeat-checkout-order, a.button.repeat-choose-order { | ||
285 | + display: block; | ||
286 | + margin: 0 5px 5px 40px; | ||
287 | + font-size: 80%; | ||
288 | + background-color: #ffc64c; | ||
289 | +} |
plugins/shopping_cart/test/functional/shopping_cart_plugin_controller_test.rb
@@ -154,29 +154,29 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | @@ -154,29 +154,29 @@ class ShoppingCartPluginControllerTest < ActionController::TestCase | ||
154 | product1 = fast_create(Product, :profile_id => profile.id, :price => 1.99) | 154 | product1 = fast_create(Product, :profile_id => profile.id, :price => 1.99) |
155 | product2 = fast_create(Product, :profile_id => profile.id, :price => 2.23) | 155 | product2 = fast_create(Product, :profile_id => profile.id, :price => 2.23) |
156 | @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1, product2.id => 2}}) | 156 | @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1, product2.id => 2}}) |
157 | - assert_difference 'ShoppingCartPlugin::PurchaseOrder.count', 1 do | 157 | + assert_difference 'OrdersPlugin::Order.count', 1 do |
158 | post :send_request, | 158 | post :send_request, |
159 | :customer => {:name => "Manuel", :email => "manuel@ceu.com"} | 159 | :customer => {:name => "Manuel", :email => "manuel@ceu.com"} |
160 | end | 160 | end |
161 | 161 | ||
162 | - order = ShoppingCartPlugin::PurchaseOrder.last | 162 | + order = OrdersPlugin::Order.last |
163 | 163 | ||
164 | assert_equal 1.99, order.products_list[product1.id][:price] | 164 | assert_equal 1.99, order.products_list[product1.id][:price] |
165 | assert_equal 1, order.products_list[product1.id][:quantity] | 165 | assert_equal 1, order.products_list[product1.id][:quantity] |
166 | assert_equal 2.23, order.products_list[product2.id][:price] | 166 | assert_equal 2.23, order.products_list[product2.id][:price] |
167 | assert_equal 2, order.products_list[product2.id][:quantity] | 167 | assert_equal 2, order.products_list[product2.id][:quantity] |
168 | - assert_equal ShoppingCartPlugin::PurchaseOrder::Status::OPENED, order.status | 168 | + assert_equal 'confirmed', order.status |
169 | end | 169 | end |
170 | 170 | ||
171 | should 'register order on send request and not crash if product is not defined' do | 171 | should 'register order on send request and not crash if product is not defined' do |
172 | product1 = fast_create(Product, :profile_id => profile.id) | 172 | product1 = fast_create(Product, :profile_id => profile.id) |
173 | @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1}}) | 173 | @controller.stubs(:cart).returns({ :profile_id => profile.id, :items => {product1.id => 1}}) |
174 | - assert_difference 'ShoppingCartPlugin::PurchaseOrder.count', 1 do | 174 | + assert_difference 'OrdersPlugin::Order.count', 1 do |
175 | post :send_request, | 175 | post :send_request, |
176 | :customer => {:name => "Manuel", :email => "manuel@ceu.com"} | 176 | :customer => {:name => "Manuel", :email => "manuel@ceu.com"} |
177 | end | 177 | end |
178 | 178 | ||
179 | - order = ShoppingCartPlugin::PurchaseOrder.last | 179 | + order = OrdersPlugin::Order.last |
180 | 180 | ||
181 | assert_equal 0, order.products_list[product1.id][:price] | 181 | assert_equal 0, order.products_list[product1.id][:price] |
182 | end | 182 | end |
plugins/shopping_cart/test/functional/shopping_cart_plugin_myprofile_controller_test.rb
@@ -51,6 +51,7 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -51,6 +51,7 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
51 | assert settings.delivery_price == price.to_s | 51 | assert settings.delivery_price == price.to_s |
52 | end | 52 | end |
53 | 53 | ||
54 | + # FIXME | ||
54 | should 'be able to choose delivery_options' do | 55 | should 'be able to choose delivery_options' do |
55 | delivery_options = {:options => ['car', 'bike'], :prices => ['20', '5']} | 56 | delivery_options = {:options => ['car', 'bike'], :prices => ['20', '5']} |
56 | post :edit, :profile => profile.identifier, :settings => {:delivery_options => delivery_options} | 57 | post :edit, :profile => profile.identifier, :settings => {:delivery_options => delivery_options} |
@@ -61,18 +62,18 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -61,18 +62,18 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
61 | 62 | ||
62 | should 'filter the reports correctly' do | 63 | should 'filter the reports correctly' do |
63 | another_profile = fast_create(Enterprise) | 64 | another_profile = fast_create(Enterprise) |
64 | - po1 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | ||
65 | - po2 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :status => ShoppingCartPlugin::PurchaseOrder::Status::SHIPPED) | ||
66 | - po3 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | 65 | + po1 = OrdersPlugin::Sale.create! :profile => profile, :status => 'confirmed' |
66 | + po2 = OrdersPlugin::Sale.create! :profile => profile, :status => 'shipped' | ||
67 | + po3 = OrdersPlugin::Sale.create! :profile => profile, :status => 'confirmed' | ||
67 | po3.created_at = 1.year.ago | 68 | po3.created_at = 1.year.ago |
68 | po3.save! | 69 | po3.save! |
69 | - po4 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => another_profile, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | 70 | + po4 = OrdersPlugin::Sale.create! :profile => another_profile, :status => 'confirmed' |
70 | 71 | ||
71 | post :reports, | 72 | post :reports, |
72 | :profile => profile.identifier, | 73 | :profile => profile.identifier, |
73 | :from => (Time.now - 1.day).strftime(TIME_FORMAT), | 74 | :from => (Time.now - 1.day).strftime(TIME_FORMAT), |
74 | :to => (Time.now + 1.day).strftime(TIME_FORMAT), | 75 | :to => (Time.now + 1.day).strftime(TIME_FORMAT), |
75 | - :filter_status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED | 76 | + :filter_status => 'confirmed' |
76 | 77 | ||
77 | assert_includes assigns(:orders), po1 | 78 | assert_includes assigns(:orders), po1 |
78 | assert_not_includes assigns(:orders), po2 | 79 | assert_not_includes assigns(:orders), po2 |
@@ -86,14 +87,14 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -86,14 +87,14 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
86 | p3 = fast_create(Product, :profile_id => profile.id, :price => 3) | 87 | p3 = fast_create(Product, :profile_id => profile.id, :price => 3) |
87 | po1_products = {p1.id => {:quantity => 1, :price => p1.price, :name => p1.name}, p2.id => {:quantity => 2, :price => p2.price, :name => p2.name }} | 88 | po1_products = {p1.id => {:quantity => 1, :price => p1.price, :name => p1.name}, p2.id => {:quantity => 2, :price => p2.price, :name => p2.name }} |
88 | po2_products = {p2.id => {:quantity => 1, :price => p2.price, :name => p2.name }, p3.id => {:quantity => 2, :price => p3.price, :name => p3.name}} | 89 | po2_products = {p2.id => {:quantity => 1, :price => p2.price, :name => p2.name }, p3.id => {:quantity => 2, :price => p3.price, :name => p3.name}} |
89 | - po1 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :products_list => po1_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | ||
90 | - po2 = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :products_list => po2_products, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | 90 | + po1 = OrdersPlugin::Sale.create! :profile => profile, :products_list => po1_products, :status => 'confirmed' |
91 | + po2 = OrdersPlugin::Sale.create! :profile => profile, :products_list => po2_products, :status => 'confirmed' | ||
91 | 92 | ||
92 | post :reports, | 93 | post :reports, |
93 | :profile => profile.identifier, | 94 | :profile => profile.identifier, |
94 | :from => (Time.now - 1.day).strftime(TIME_FORMAT), | 95 | :from => (Time.now - 1.day).strftime(TIME_FORMAT), |
95 | :to => (Time.now + 1.day).strftime(TIME_FORMAT), | 96 | :to => (Time.now + 1.day).strftime(TIME_FORMAT), |
96 | - :filter_status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED | 97 | + :filter_status => 'confirmed' |
97 | 98 | ||
98 | lineitem1 = ShoppingCartPlugin::LineItem.new(p1.id, p1.name) | 99 | lineitem1 = ShoppingCartPlugin::LineItem.new(p1.id, p1.name) |
99 | lineitem1.quantity = 1 | 100 | lineitem1.quantity = 1 |
@@ -107,20 +108,20 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | @@ -107,20 +108,20 @@ class ShoppingCartPluginMyprofileControllerTest < ActionController::TestCase | ||
107 | end | 108 | end |
108 | 109 | ||
109 | should 'be able to update the order status' do | 110 | should 'be able to update the order status' do |
110 | - po = ShoppingCartPlugin::PurchaseOrder.create!(:seller => profile, :status => ShoppingCartPlugin::PurchaseOrder::Status::OPENED) | 111 | + po = OrdersPlugin::Sale.create!(:profile => profile, :status => 'confirmed') |
111 | 112 | ||
112 | post :update_order_status, | 113 | post :update_order_status, |
113 | :profile => profile.identifier, | 114 | :profile => profile.identifier, |
114 | :order_id => po.id, | 115 | :order_id => po.id, |
115 | - :order_status => ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED | 116 | + :order_status => 'confirmed' |
116 | po.reload | 117 | po.reload |
117 | - assert_equal ShoppingCartPlugin::PurchaseOrder::Status::CONFIRMED, po.status | 118 | + assert_equal 'confirmed', po.status |
118 | end | 119 | end |
119 | 120 | ||
120 | private | 121 | private |
121 | 122 | ||
122 | def settings | 123 | def settings |
123 | @profile.reload | 124 | @profile.reload |
124 | - Noosfero::Plugin::Settings.new(@profile, ShoppingCartPlugin) | 125 | + profile.shopping_cart_settings |
125 | end | 126 | end |
126 | end | 127 | end |
plugins/shopping_cart/test/unit/shopping_cart_plugin_test.rb
@@ -28,7 +28,7 @@ class ShoppingCartPluginTest < ActiveSupport::TestCase | @@ -28,7 +28,7 @@ class ShoppingCartPluginTest < ActiveSupport::TestCase | ||
28 | 28 | ||
29 | should 'be disabled by default on the enterprise' do | 29 | should 'be disabled by default on the enterprise' do |
30 | profile = fast_create(Enterprise) | 30 | profile = fast_create(Enterprise) |
31 | - settings = Noosfero::Plugin::Settings.new(profile, ShoppingCartPlugin) | 31 | + settings = profile.shopping_cart_settings |
32 | assert !settings.enabled | 32 | assert !settings.enabled |
33 | end | 33 | end |
34 | end | 34 | end |
plugins/shopping_cart/views/cart.html.erb
@@ -1,30 +0,0 @@ | @@ -1,30 +0,0 @@ | ||
1 | -<div id="cart1" class="cart" style="display:none"> | ||
2 | - <div class="cart-inner"> | ||
3 | - <div class="cart-content"> | ||
4 | - <h3><%= _("Basket") %></h3> | ||
5 | - <a href="cart:clean" onclick="Cart.clean(this); return false" class="cart-clean"><%=_('Clean basket')%></a> | ||
6 | - <ul class="cart-items"></ul> | ||
7 | - <div class="cart-total"><%=_('Total:')%> <b></b></div> | ||
8 | - <a href="/plugin/shopping_cart/buy" class="cart-buy modal"><%=_('Shopping checkout')%></a> | ||
9 | - </div> | ||
10 | - <a href="#" onclick="Cart.toggle(this); return false" class="cart-toggle"> | ||
11 | - <span class="str-show"><%=_('Show basket')%></span> | ||
12 | - <span class="str-hide" style="display:none"><%=_('Hide basket')%></span> | ||
13 | - </a> | ||
14 | - </div> | ||
15 | -</div> | ||
16 | -<script> | ||
17 | - var shoppingCartPluginL10n = { | ||
18 | - getProblemConfirmReload: <%= ( | ||
19 | - _('Ups... I had a problem to load the basket list.') + | ||
20 | - "\n" + | ||
21 | - _('Did you want to reload this page?') | ||
22 | - ).to_json %>, | ||
23 | - maxNumberOfItens: <%= ( | ||
24 | - _('Sorry, you can\'t have more then 100 kinds of items on this basket.') | ||
25 | - ).to_json %>, | ||
26 | - waitLastRequest: <%= _('Oops, you must wait your last request to finish first!').to_json %>, | ||
27 | - removeItem: <%= _('Are you sure you want to remove this item?').to_json %>, | ||
28 | - cleanCart: <%= _('Are you sure you want to clean your basket?').to_json %> | ||
29 | - } | ||
30 | -</script> |
@@ -0,0 +1,82 @@ | @@ -0,0 +1,82 @@ | ||
1 | +<div id="cart1" class="cart<%= '-minimized' if cart_minimized %>"> | ||
2 | + <% if cart_minimized %> | ||
3 | + <div class="cart-applet"> | ||
4 | + <%= cart_applet %> | ||
5 | + | ||
6 | + <%= link_to _('Shopping checkout'), "/plugin/shopping_cart/buy", class: 'cart-applet-checkout' %> | ||
7 | + <span class="cart-applet-checkout-disabled"> | ||
8 | + <%= _('Basket is empty') %> | ||
9 | + </span> | ||
10 | + </div> | ||
11 | + <% end %> | ||
12 | + <div class="cart-inner"> | ||
13 | + <div class="cart-content"> | ||
14 | + <h3><%= _("Basket") %></h3> | ||
15 | + <div id="cart-profile-name"></div> | ||
16 | + <a href="cart:clean" onclick="cart.clean(); return false" class="cart-clean"><%=_('Clean basket')%></a> | ||
17 | + <ul class="cart-items"> | ||
18 | + </ul> | ||
19 | + <%= button 'cart', _('Shopping checkout'), "/plugin/shopping_cart/buy", :class => 'cart-buy modal-toggle' %> | ||
20 | + <div class="cart-total"><%=_('Total:')%> <b></b></div> | ||
21 | + </div> | ||
22 | + <a href="#" onclick="cart.toggle(); return false" class="cart-toggle"> | ||
23 | + <span class="str-show"><%=_('Show basket')%></span> | ||
24 | + <span class="str-hide"><%=_('Hide basket')%></span> | ||
25 | + </a> | ||
26 | + </div> | ||
27 | + | ||
28 | + <script id="cart-item-template" type="text/template"> | ||
29 | + <li id="cart-item-{{item.id}}"> | ||
30 | + <%= button_to_function_without_text 'remove', '', "Cart.removeItem({{item.id}}); return false", :class => 'cart-remove-item' %> | ||
31 | + <div class="picture" style="background-image:url({{item.picture}})"></div> | ||
32 | + <span class="item-name">{{item.name}}</span> | ||
33 | + <div class="item-price"> | ||
34 | + <input size="1" value="{{item.quantity}}" />{{item.priceTxt}} | ||
35 | + </div> | ||
36 | + </li> | ||
37 | + </script> | ||
38 | +</div> | ||
39 | + | ||
40 | +<script type="text/javascript"> | ||
41 | +jQuery(function($) { | ||
42 | + Cart.l10n = { | ||
43 | + getProblemConfirmReload: <%= ( | ||
44 | + _('Ups... I had a problem to load the basket list.') + | ||
45 | + "\n" + | ||
46 | + _('Did you want to reload this page?') | ||
47 | + ).to_json %>, | ||
48 | + maxNumberOfItens: <%= ( | ||
49 | + _('Sorry, you can\'t have more then 100 kinds of items on this basket.') | ||
50 | + ).to_json %>, | ||
51 | + waitLastRequest: <%= _('Oops, you must wait your last request to finish first!').to_json %>, | ||
52 | + removeItem: <%= _('Are you sure you want to remove this item?').to_json %>, | ||
53 | + cleanCart: <%= _('Are you sure you want to clean your basket?').to_json %>, | ||
54 | + repeatOrder: <%= _('repeat order').to_json %>, | ||
55 | + } | ||
56 | + // boolean configuration that defines if the behaviour of the cart is "minimized" or "full" | ||
57 | + Cart.minimized = <%= cart_minimized.to_json %> | ||
58 | + | ||
59 | + $.ajax({ | ||
60 | + url: "/plugin/shopping_cart/get?profile_id="+<%= profile.id.to_json rescue ''.to_json %>, | ||
61 | + dataType: 'json', | ||
62 | + success: function(data) { | ||
63 | + cart = new Cart(data); | ||
64 | + }, | ||
65 | + cache: false, | ||
66 | + error: function(ajax, status, errorThrown) { | ||
67 | + // Give some time to register page unload. | ||
68 | + setTimeout(function() { | ||
69 | + // page unload is not our problem. | ||
70 | + if (Cart.unloadingPage) { | ||
71 | + log('Page unload before cart load.'); | ||
72 | + } else { | ||
73 | + log.error('Error getting shopping cart - HTTP '+status, errorThrown); | ||
74 | + if ( confirm(Cart.l10n.getProblemConfirmReload) ) { | ||
75 | + document.location.reload(); | ||
76 | + } | ||
77 | + } | ||
78 | + }, 100); | ||
79 | + } | ||
80 | + }); | ||
81 | +}); | ||
82 | +</script> |
plugins/shopping_cart/views/shopping_cart_plugin/_items.html.erb
0 → 100644
@@ -0,0 +1,47 @@ | @@ -0,0 +1,47 @@ | ||
1 | +<table id="cart-items-table" cellpadding="2" cellspacing="0" | ||
2 | + border="<%= if by_mail then 1 else 0 end %>" | ||
3 | + style="<%= 'border-collapse: collapse' if by_mail %>"> | ||
4 | + | ||
5 | + <tr> | ||
6 | + <th> | ||
7 | + <%= _('Item name') %> | ||
8 | + </th> | ||
9 | + <th> | ||
10 | + <%= if by_mail then ' # ' else '#' end %> | ||
11 | + </th> | ||
12 | + <th> | ||
13 | + <%= _('Price') + " (#{@environment.currency_unit})" %> | ||
14 | + </th> | ||
15 | + </tr> | ||
16 | + | ||
17 | + <% order.items.each do |item| %> | ||
18 | + <tr> | ||
19 | + <td> | ||
20 | + <%= item.name %> | ||
21 | + </td> | ||
22 | + <td class='cart-table-quantity' align="<%= 'center' if by_mail %>"> | ||
23 | + <%= item.quantity_consumer_ordered %> | ||
24 | + </td> | ||
25 | + <td class='cart-table-price' align="<%= 'right' if by_mail %>"> | ||
26 | + <%= get_price item.product, @environment, item.quantity_consumer_ordered, unit: '' %> | ||
27 | + </td> | ||
28 | + | ||
29 | + </tr> | ||
30 | + <% end %> | ||
31 | + | ||
32 | + <tr> | ||
33 | + <td colspan=2 id='delivery-name'> | ||
34 | + <%= order.supplier_delivery.name if order.supplier_delivery %> | ||
35 | + </td> | ||
36 | + <td id='delivery-price' class="cart-table-price"> | ||
37 | + <%= float_to_currency_cart order.supplier_delivery.cost(order.total_price), @environment, unit: '' if order.supplier_delivery %> | ||
38 | + </td> | ||
39 | + </tr> | ||
40 | + | ||
41 | + <th colspan=2 class="cart-table-total-label"> | ||
42 | + <%= _('Total:') %> | ||
43 | + </th> | ||
44 | + <th class="cart-table-total-value"> | ||
45 | + <%= float_to_currency_cart order.total, @environment %> | ||
46 | + </th> | ||
47 | +</table> |
plugins/shopping_cart/views/shopping_cart_plugin/buy.html.erb
1 | -<div id='cart-request-box'> | ||
2 | - <%= form_for(:customer, :url => {:action => 'send_request'}, | ||
3 | - :html => {:onsubmit => "return Cart.send_request(this)", :id => 'cart-request-form'}) do |f| %> | ||
4 | - <div id="cart-form-main"> | ||
5 | - <%= labelled_form_field('* ' + _("Name"), f.text_field(:name, :class => 'required') ) %> | ||
6 | - <%= labelled_form_field('* ' + c_("Email"), f.text_field(:email, :class => 'required email') ) %> | ||
7 | - <%= labelled_form_field('* ' + c_("Contact phone"), f.text_field(:contact_phone, :class => 'required') ) %> | ||
8 | - <%= labelled_form_field(_('Delivery option'), select_tag(:delivery_option, options_for_select(select_delivery_options(@settings.delivery_options, environment)), 'data-profile-identifier' => @profile.identifier)) unless !@settings.delivery || (@settings.free_delivery_price && get_total(@cart[:items]) >= @settings.free_delivery_price) %> | ||
9 | - <%= labelled_form_field(_('Payment'), select_tag('customer[payment]', options_for_select([[_("Money"), :money],[_('shopping_cart|Check'), :check]]))) %> | ||
10 | - <%= labelled_form_field(s_('shopping_cart|Change'), text_field_tag('customer[change]')) %> | 1 | +<div id='cart-request-box' class="row"> |
2 | + <h1> | ||
3 | + <%= _('Shopping checkout') %> | ||
4 | + <%= button :back, _("haven't finished yet: back to shopping"), 'javascript:history.back()', class: 'cart-go-back' %> | ||
5 | + </h1> | ||
6 | + | ||
7 | + <%= form_for :order, url: {action: :send_request}, | ||
8 | + html: {onsubmit: "return Cart.send_request(this)", id: 'cart-request-form'} do |f| %> | ||
9 | + | ||
10 | + <div class="col-lg-6 col-md-6 col-sm-6"> | ||
11 | + <fieldset> | ||
12 | + <legend><%=_('Personal identification')%></legend> | ||
13 | + | ||
14 | + <%= f.fields_for :consumer_data, @order.consumer do |ff| %> | ||
15 | + <%= labelled_form_field('* ' + _("Name"), ff.text_field(:name, value: (user.name if user), class: 'required') ) %> | ||
16 | + <%= labelled_form_field('* ' + _("Email"), ff.text_field(:email, value: (user.email if user), class: 'required email') ) %> | ||
17 | + <%= labelled_form_field('* ' + _("Contact phone"), ff.text_field(:contact_phone, value: (user.contact_phone if user), class: 'required') ) %> | ||
18 | + <% end %> | ||
19 | + </fieldset> | ||
20 | + | ||
21 | + <fieldset> | ||
22 | + <legend><%=_("Payment's method")%></legend> | ||
23 | + | ||
24 | + <%= f.fields_for :payment_data do |ff| %> | ||
25 | + <%= labelled_form_field _('Payment'), ff.select(:method, options_for_payment) %> | ||
26 | + <%= labelled_form_field(s_('shopping_cart|Change'), ff.text_field(:change)) %> | ||
27 | + <% end %> | ||
28 | + </fieldset> | ||
29 | + | ||
30 | + <% if profile.delivery_methods.size > 0 %> | ||
31 | + <fieldset> | ||
32 | + <legend><%=_('Delivery or pickup method')%></legend> | ||
33 | + <%= render 'delivery_plugin/order_select', f: f, order: @order %> | ||
34 | + </fieldset> | ||
35 | + <% end %> | ||
11 | </div> | 36 | </div> |
12 | - <% if @settings.delivery %> | ||
13 | - <fieldset><legend><%=_('Delivery Address')%></legend> | ||
14 | - <%= labelled_form_field(c_('Address (street and number)'), f.text_field(:address)) %> | ||
15 | - <%= labelled_form_field(c_('Address reference'), f.text_field(:address_reference)) %> | ||
16 | - <%= labelled_form_field(c_('District'), f.text_field(:district)) %> | ||
17 | - <%= labelled_form_field( c_("City"), f.text_field(:city)) %> | ||
18 | - <%= labelled_form_field(c_('ZIP code'), f.text_field(:zip_code)) %> | 37 | + |
38 | + <div class="col-lg-6 col-md-6 col-sm-6"> | ||
39 | + <fieldset> | ||
40 | + <legend><%=s_('Your Order')%></legend> | ||
41 | + <% supplier_delivery = @order.supplier_delivery || profile.delivery_methods.first %> | ||
42 | + <%= items_table @cart[:items], @profile, supplier_delivery %> | ||
19 | </fieldset> | 43 | </fieldset> |
20 | - <% end %> | ||
21 | - <div id="cart-form-actions"> | 44 | + </div> |
45 | + | ||
46 | + <div id="cart-form-actions" class="row"> | ||
22 | <%= submit_button(:send, _('Send buy request')) %> | 47 | <%= submit_button(:send, _('Send buy request')) %> |
23 | </div> | 48 | </div> |
24 | <% end %> | 49 | <% end %> |
25 | - <% delivery_option = @settings.delivery_options.first && @settings.delivery_options.first.first %> | ||
26 | - <%= items_table(@cart[:items], @profile, delivery_option) %> | ||
27 | - <%= link_to_function '', "noosfero.modal.close();", :class => 'cart-box-close icon-cancel' %> | ||
28 | </div> | 50 | </div> |
29 | 51 | ||
30 | <%= javascript_include_tag '../plugins/shopping_cart/buy' %> | 52 | <%= javascript_include_tag '../plugins/shopping_cart/buy' %> |
53 | + |
plugins/shopping_cart/views/shopping_cart_plugin/clear_orders_session.js.erb
0 → 100644
@@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
1 | +cart.clearOrdersSession(); |
plugins/shopping_cart/views/shopping_cart_plugin/mailer/customer_notification.html.erb
@@ -4,52 +4,66 @@ | @@ -4,52 +4,66 @@ | ||
4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | 4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
5 | </head> | 5 | </head> |
6 | <body> | 6 | <body> |
7 | - <h4><%= _('Hi %s!') % @customer[:name] %></h4> | 7 | + <h4><%= _('Hi %s!') % @order.consumer_data[:name] %></h4> |
8 | 8 | ||
9 | <p> | 9 | <p> |
10 | - <%= _('This is a notification e-mail about your buy request on %s.') % link_to(@supplier.name, @supplier.url) %> | ||
11 | - <%= _('The supplier already received your buy request and may contact you for confirmation.') %> | ||
12 | - <%= _('If you have any doubts, contact us at: %s') % @supplier.contact_email %> | ||
13 | - <%= _('Please check if your information below is correct:') %> | 10 | + <%= _('This is a notification e-mail about your buy request on the enterprise %s.') % link_to(@order.profile.name, @order.profile.url) %> |
11 | + <%= _('The enterprise already received your buy request and will contact you for confirmation.') %> | ||
12 | + <%= _('If you have any doubts about your order, write to us at: %s.') % @order.profile.contact_email %> | ||
13 | + <%= _('Review below the informations of your order:') %> | ||
14 | </p> | 14 | </p> |
15 | 15 | ||
16 | <ul> | 16 | <ul> |
17 | - <li><b><%= c_('Full name') %>: </b><%= @customer[:name] %></li> | ||
18 | - <li><b><%= c_('Email') %>: </b><%= @customer[:email] %></li> | ||
19 | - <li><b><%= _('Phone number') %>: </b><%= @customer[:contact_phone] %></li> | ||
20 | - <li><b><%= _('Payment') %>: </b><%= @customer[:payment] == 'money' ? _('Money') : _('shopping_cart|Check') %></li> | ||
21 | - <% if @customer[:payment] == 'money' %> | ||
22 | - <li><b><%= _('shopping_cart|Change') %>: </b><%= @customer[:change] %></li> | 17 | + <li><b><%= c_('Full name') %>: </b><%= @order.consumer_data[:name] %></li> |
18 | + <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> | ||
19 | + <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> | ||
20 | + | ||
21 | + <li><b><%= _("Payment's method") %>: </b><%= _ OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
22 | + <% if @order.payment_data[:method] == 'money' %> | ||
23 | + <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | ||
24 | + <% end %> | ||
25 | + | ||
26 | + <li><b><%= _('Delivery or pickup') %>:</b></li> | ||
27 | + <%= @order.supplier_delivery_data[:name] %><br/> | ||
28 | + <p> | ||
29 | + <i><%= @order.supplier_delivery_data[:description] %></i> | ||
30 | + </p> | ||
31 | + | ||
32 | + <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> | ||
33 | + <li><b><%= c_('Address') %>:</b></li> | ||
34 | + <% end %> | ||
35 | + <% if !@order.consumer_delivery_data[:address].blank? %> | ||
36 | + <%= @order.consumer_delivery_data[:address] %><br \> | ||
23 | <% end %> | 37 | <% end %> |
24 | - <% if !@customer[:address].blank? || !@customer[:city].blank? || !@customer[:zip_code].blank? || !@customer[:district].blank? || !@customer[:address_reference].blank? %> | ||
25 | - <li><b><%= c_('Address') %>:</b> | 38 | + <% if !@order.consumer_delivery_data[:address_line2].blank? %> |
39 | + <%= @order.consumer_delivery_data[:address_line2] %><br \> | ||
26 | <% end %> | 40 | <% end %> |
27 | - <% if !@customer[:address].blank? %> | ||
28 | - <%= @customer[:address] %><br \> | 41 | + <% if !@order.consumer_delivery_data[:address_reference].blank? %> |
42 | + <%= @order.consumer_delivery_data[:address_reference] %><br \> | ||
29 | <% end %> | 43 | <% end %> |
30 | - <% if !@customer[:district].blank? %> | ||
31 | - <%= @customer[:district] %><br \> | 44 | + <% if !@order.consumer_delivery_data[:district].blank? %> |
45 | + <%= @order.consumer_delivery_data[:district] %><br \> | ||
32 | <% end %> | 46 | <% end %> |
33 | - <% if !@customer[:city].blank? %> | ||
34 | - <%= @customer[:city] %><br \> | 47 | + <% if !@order.consumer_delivery_data[:city].blank? %> |
48 | + <%= @order.consumer_delivery_data[:city] %><br \> | ||
35 | <% end %> | 49 | <% end %> |
36 | - <% if !@customer[:zip_code].blank? %> | ||
37 | - <%= @customer[:zip_code] %> | 50 | + <% if !@order.consumer_delivery_data[:state].blank? %> |
51 | + <%= @order.consumer_delivery_data[:state] %><br \> | ||
38 | <% end %> | 52 | <% end %> |
39 | - <% if !@customer[:address_reference].blank? %> | ||
40 | - <%= @customer[:address_reference] %><br \> | 53 | + <% if !@order.consumer_delivery_data[:zip_code].blank? %> |
54 | + <%= @order.consumer_delivery_data[:zip_code] %> | ||
41 | <% end %> | 55 | <% end %> |
42 | - <% if !@customer[:address].blank? || !@customer[:city].blank? || !@customer[:zip_code].blank? || !@customer[:district].blank? || !@customer[:address_reference].blank? %> | 56 | + <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> |
43 | </li> | 57 | </li> |
44 | <% end %> | 58 | <% end %> |
45 | </ul> | 59 | </ul> |
46 | 60 | ||
47 | <p><%=_('Here are the products you bought:')%></p> | 61 | <p><%=_('Here are the products you bought:')%></p> |
48 | - <%= @helper.items_table(@items, @supplier, @delivery_option, true) %> | 62 | + <%= items_table(@items, @order.profile, @order.supplier_delivery, true) %> |
49 | <p> | 63 | <p> |
50 | --<br/> | 64 | --<br/> |
51 | <%=_('Thanks for buying with us!')%><br/> | 65 | <%=_('Thanks for buying with us!')%><br/> |
52 | - <%= link_to @supplier.name, @supplier.url %> | 66 | + <%= link_to @order.profile.name, @order.profile.url %> |
53 | </p> | 67 | </p> |
54 | <small style="color: #888"><%= _('A service of %s.') % @environment.name %></small> | 68 | <small style="color: #888"><%= _('A service of %s.') % @environment.name %></small> |
55 | </body> | 69 | </body> |
plugins/shopping_cart/views/shopping_cart_plugin/mailer/supplier_notification.html.erb
@@ -4,46 +4,54 @@ | @@ -4,46 +4,54 @@ | ||
4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> | 4 | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> |
5 | </head> | 5 | </head> |
6 | <body> | 6 | <body> |
7 | - <h4><%= _('Hi %s!') % @supplier.name %></h4> | 7 | + <h4><%= _('Hi %s!') % @order.profile.name %></h4> |
8 | 8 | ||
9 | <p> | 9 | <p> |
10 | - <%= _('This is a buy request made by %s.') % @customer[:name] %> | 10 | + <%= _('This is a buy request made by %s.') % @order.consumer_data[:name] %> |
11 | <%= _('Below follows the customer informations:') %> | 11 | <%= _('Below follows the customer informations:') %> |
12 | </p> | 12 | </p> |
13 | 13 | ||
14 | <ul> | 14 | <ul> |
15 | - <li><b><%= c_('Full name') %>: </b><%= @customer[:name] %></li> | ||
16 | - <li><b><%= c_('Email') %>: </b><%= @customer[:email] %></li> | ||
17 | - <li><b><%= _('Phone number') %>: </b><%= @customer[:contact_phone] %></li> | ||
18 | - <li><b><%= _('Payment') %>: </b><%= @customer[:payment] == 'money' ? _('Money') : _('shopping_cart|Check') %></li> | ||
19 | - <% if @customer[:payment] == 'money' %> | ||
20 | - <li><b><%= _('shopping_cart|Change') %>: </b><%= @customer[:change] %></li> | ||
21 | - <% end %> | ||
22 | - <% if !@customer[:address].blank? || !@customer[:city].blank? || !@customer[:zip_code].blank? || !@customer[:district].blank? || !@customer[:address_reference].blank? %> | 15 | + <li><b><%= c_('Full name') %>: </b><%= @order.consumer_data[:name] %></li> |
16 | + <li><b><%= c_('Email') %>: </b><%= @order.consumer_data[:email] %></li> | ||
17 | + <li><b><%= _('Phone number') %>: </b><%= @order.consumer_data[:contact_phone] %></li> | ||
18 | + | ||
19 | + <li><b><%= _('Payment') %>: </b><%= OrdersPlugin::Order::PaymentMethods[@order.payment_data[:method].to_sym].call %></li> | ||
20 | + <% if @order.payment_data[:method] == 'money' %> | ||
21 | + <li><b><%= s_('shopping_cart|Change') %>: </b><%= @order.payment_data[:change] %></li> | ||
22 | + <% end %> | ||
23 | + | ||
24 | + <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> | ||
23 | <li><b><%= c_('Address') %>:</b> | 25 | <li><b><%= c_('Address') %>:</b> |
24 | <% end %> | 26 | <% end %> |
25 | - <% if !@customer[:address].blank? %> | ||
26 | - <%= @customer[:address] %><br \> | 27 | + <% if !@order.consumer_delivery_data[:address].blank? %> |
28 | + <%= @order.consumer_delivery_data[:address] %><br \> | ||
29 | + <% end %> | ||
30 | + <% if !@order.consumer_delivery_data[:address_line2].blank? %> | ||
31 | + <%= @order.consumer_delivery_data[:address_line2] %><br \> | ||
32 | + <% end %> | ||
33 | + <% if !@order.consumer_delivery_data[:address_reference].blank? %> | ||
34 | + <%= @order.consumer_delivery_data[:address_reference] %><br \> | ||
27 | <% end %> | 35 | <% end %> |
28 | - <% if !@customer[:district].blank? %> | ||
29 | - <%= @customer[:district] %><br \> | 36 | + <% if !@order.consumer_delivery_data[:district].blank? %> |
37 | + <%= @order.consumer_delivery_data[:district] %><br \> | ||
30 | <% end %> | 38 | <% end %> |
31 | - <% if !@customer[:city].blank? %> | ||
32 | - <%= @customer[:city] %><br \> | 39 | + <% if !@order.consumer_delivery_data[:city].blank? %> |
40 | + <%= @order.consumer_delivery_data[:city] %><br \> | ||
33 | <% end %> | 41 | <% end %> |
34 | - <% if !@customer[:zip_code].blank? %> | ||
35 | - <%= @customer[:zip_code] %> | 42 | + <% if !@order.consumer_delivery_data[:state].blank? %> |
43 | + <%= @order.consumer_delivery_data[:state] %><br \> | ||
36 | <% end %> | 44 | <% end %> |
37 | - <% if !@customer[:address_reference].blank? %> | ||
38 | - <%= @customer[:address_reference] %><br \> | 45 | + <% if !@order.consumer_delivery_data[:zip_code].blank? %> |
46 | + <%= @order.consumer_delivery_data[:zip_code] %> | ||
39 | <% end %> | 47 | <% end %> |
40 | - <% if !@customer[:address].blank? || !@customer[:city].blank? || !@customer[:zip_code].blank? || !@customer[:district].blank? || !@customer[:address_reference].blank? %> | 48 | + <% if !@order.consumer_delivery_data[:address].blank? || !@order.consumer_delivery_data[:city].blank? || !@order.consumer_delivery_data[:zip_code].blank? || !@order.consumer_delivery_data[:district].blank? || !@order.consumer_delivery_data[:address_reference].blank? %> |
41 | </li> | 49 | </li> |
42 | <% end %> | 50 | <% end %> |
43 | </ul> | 51 | </ul> |
44 | 52 | ||
45 | <p><%=_('And here are the items bought by this customer:')%></p> | 53 | <p><%=_('And here are the items bought by this customer:')%></p> |
46 | - <%= @helper.items_table(@items, @supplier, @delivery_option, true) %> | 54 | + <%= items_table(@items, @order.profile, @order.supplier_delivery, true) %> |
47 | <p> | 55 | <p> |
48 | --<br/> | 56 | --<br/> |
49 | <%=_('If there are any problems with this email contact the admin of %s.') % @environment.name %> | 57 | <%=_('If there are any problems with this email contact the admin of %s.') % @environment.name %> |
plugins/shopping_cart/views/shopping_cart_plugin/send_request.html.erb
@@ -1 +0,0 @@ | @@ -1 +0,0 @@ | ||
1 | -<%= _("Request sent successfully check your email.")%> |
plugins/shopping_cart/views/shopping_cart_plugin/send_request.js.erb
0 → 100644
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_orders_list.html.erb
@@ -1,61 +0,0 @@ | @@ -1,61 +0,0 @@ | ||
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%>"><%=c_('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', c_('Contact phone')], ['address', c_('Address')], ['district', c_('District')], ['city', c_('City')], ['zip_code', c_('Zip code')], ['delivery_option', _('Delivery option')], ['payment', _('Payment')], ['change', _('shopping_cart|Change')]].each do |field| %> | ||
36 | - <% attribute = field.first %> | ||
37 | - <% name = field.last %> | ||
38 | - <%= content_tag('li', content_tag('strong', name+': ') + order.send('customer_'+attribute)) if !order.send('customer_'+attribute).blank? %> | ||
39 | - <% end %> | ||
40 | - </ul> | ||
41 | - <ul class="order-products"> | ||
42 | - <% order.products_list.each do |id, qp| %> | ||
43 | - <% | ||
44 | - begin | ||
45 | - product = Product.find(id) | ||
46 | - rescue | ||
47 | - product = nil | ||
48 | - end | ||
49 | - %> | ||
50 | - <li><%= product ? link_to(product.name, product.url) : qp[:name]%> | ||
51 | - × <%= qp[:quantity] %> = <%= float_to_currency_cart( qp[:quantity] * qp[:price], environment ) %></li> | ||
52 | - <% end %> | ||
53 | - </ul> | ||
54 | - <br style="clear:both"/> | ||
55 | - </div> | ||
56 | - </td> | ||
57 | - </tr> | ||
58 | - <% end %> | ||
59 | - </table> | ||
60 | -<% end %> | ||
61 | - |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/_products_list.html.erb
@@ -1,17 +0,0 @@ | @@ -1,17 +0,0 @@ | ||
1 | -<% if @products.empty? %> | ||
2 | - <p><i><%= _("No results.") %></i></p> | ||
3 | -<% else %> | ||
4 | - <table> | ||
5 | - <tr> | ||
6 | - <th><%= c_('Product') %></th> | ||
7 | - <th><%= _('Quantity') %></th> | ||
8 | - </tr> | ||
9 | - <% @products.each do |id, item|%> | ||
10 | - <tr> | ||
11 | - <td><%= item.product ? link_to(item.name, item.product.url) : item.name %></td> | ||
12 | - <td style="text-align: center"><%= item.quantity %></td> | ||
13 | - </tr> | ||
14 | - <% end %> | ||
15 | - </table> | ||
16 | -<% end %> | ||
17 | - |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.html.erb
1 | <h1> <%= _('Basket options') %> </h1> | 1 | <h1> <%= _('Basket options') %> </h1> |
2 | 2 | ||
3 | -<%= form_for(:settings, :url => {:action => 'edit'}, :html => {:method => 'post'}) do |f| %> | ||
4 | - <%= labelled_form_field(_('Enable shopping basket'), f.check_box(:enabled)) %> | ||
5 | - <%= labelled_form_field(_('Enable delivery fields on orders'), f.check_box(:delivery)) %> | ||
6 | - <% display_delivery_settings = @settings.delivery ? 'auto' : 'none' %> | ||
7 | - <fieldset id='delivery_settings' style="display: <%= display_delivery_settings %>"><legend><%=_('Delivery')%></legend> | ||
8 | - <table> | ||
9 | - <tr> | ||
10 | - <th><%= _('Option') %></th> | ||
11 | - <th><%= c_('Price') %></th> | ||
12 | - <th> </th> | ||
13 | - </tr> | ||
14 | - <% @settings.delivery_options.each do |option, price| %> | ||
15 | - <tr> | ||
16 | - <td><%= text_field_tag('settings[delivery_options][options][]', option, :style => 'width: 100%') %></td> | ||
17 | - <td><%= text_field_tag('settings[delivery_options][prices][]', price, :style => 'width: 100%') %></td> | ||
18 | - <td><%= button_without_text(:close, _('Remove option'), '', :class => 'remove-option') %></td> | ||
19 | - </tr> | ||
20 | - <% end %> | ||
21 | - <tr> | ||
22 | - <td><%= text_field_tag('settings[delivery_options][options][]', nil, :style => 'width: 100%') %></td> | ||
23 | - <td><%= text_field_tag('settings[delivery_options][prices][]', nil, :style => 'width: 100%') %></td> | ||
24 | - <td><%= button_without_text(:close, _('Remove option'), '', :class => 'remove-option') %></td> | ||
25 | - </tr> | ||
26 | - <tr id='add-new-option-row'> | ||
27 | - <td colspan='3' style='background-color: #EEE; text-align: center'><%= link_to(_('ADD NEW OPTION'), '', :id => 'add-new-option') %></td> | ||
28 | - </tr> | ||
29 | - <tr id="empty-option" style='display: none'> | ||
30 | - <td><%= text_field_tag('settings[delivery_options][options][]', nil, :style => 'width: 100%') %></td> | ||
31 | - <td><%= text_field_tag('settings[delivery_options][prices][]', nil, :style => 'width: 100%') %></td> | ||
32 | - <td><%= button_without_text(:close, _('Remove option'), '', :class => 'remove-option') %></td> | ||
33 | - </tr> | ||
34 | - </table> | 3 | +<%= form_for :settings, url: {action: 'edit'}, html: {onsubmit: '$(this).ajaxSubmit()'} do |f| %> |
35 | 4 | ||
36 | - <%= labelled_form_field(_("Order's minimum price for free delivery:"), f.text_field(:free_delivery_price)) %> | ||
37 | - <%= content_tag('small', _('Leave empty to always charge the delivery.')) %> | ||
38 | - </fieldset> | ||
39 | - <br style='clear: both'/> | ||
40 | - <br style='clear: both'/> | ||
41 | <div> | 5 | <div> |
42 | - <%= submit_button(:save, c_('Save')) %> | ||
43 | - <%= button :back, c_('Back to control panel'), :controller => 'profile_editor' %> | 6 | + <%= f.check_box :enabled, onchange: 'this.form.onsubmit()' %> |
7 | + <%= f.label :enabled, _('Enable shopping basket') %> | ||
44 | </div> | 8 | </div> |
45 | -<% end%> | 9 | + |
10 | +<% end %> | ||
11 | + | ||
12 | +<fieldset id='delivery-settings'> | ||
13 | + <label><%=_('Deliveries or pickups')%></label> | ||
14 | + <%= render 'delivery_plugin/admin_method/index' %> | ||
15 | +</fieldset> | ||
46 | 16 | ||
47 | <%= javascript_include_tag '../plugins/shopping_cart/edit' %> | 17 | <%= javascript_include_tag '../plugins/shopping_cart/edit' %> |
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/edit.js.erb
0 → 100644
plugins/shopping_cart/views/shopping_cart_plugin_myprofile/reports.html.erb
@@ -1,57 +0,0 @@ | @@ -1,57 +0,0 @@ | ||
1 | -<h1> <%= _('Purchase Reports') %> </h1> | ||
2 | - | ||
3 | -<% extend ProfileHelper %> | ||
4 | -<% extend ShoppingCartPlugin::CartHelper %> | ||
5 | - | ||
6 | -<% status = ShoppingCartPlugin::PurchaseOrder::Status.name; pos=-1 %> | ||
7 | -<% status_collection = [[nil, c_('All')]] %> | ||
8 | -<% status_collection += status.map{|s| [pos+=1, s] } %> | ||
9 | - | ||
10 | -<% form_tag({}, {:id => 'cart-order-filter'}) do %> | ||
11 | - <%= labelled_text_field(c_('From')+' ', :from, @from.strftime("%Y-%m-%d"), :id => 'from', :size => 9) %> | ||
12 | - <%= labelled_text_field(_('to')+' ', :to, @to.strftime("%Y-%m-%d"), :id => 'to', :size => 9) %> | ||
13 | - <span style="white-space:nowrap"><%= labelled_select(_('Status')+' ', :filter_status, :first, :last, @status, status_collection)%></span> | ||
14 | - | ||
15 | - <%= submit_button('save', c_('Filter')) %> | ||
16 | -<% end %> | ||
17 | - | ||
18 | -<% tabs = [] %> | ||
19 | -<% tabs << {:title => _('Products list'), :id => 'products_list', :content => (render :partial => 'products_list')} %> | ||
20 | -<% tabs << {:title => _('Orders list'), :id => 'orders_list', :content => (render :partial => 'orders_list', :locals => {:status_collection => status_collection})} %> | ||
21 | -<%= render_tabs(tabs) %> | ||
22 | - | ||
23 | -<script> | ||
24 | - var dates = jQuery( "#from, #to" ).datepicker({ | ||
25 | - defaultDate: "+1w", | ||
26 | - changeMonth: true, | ||
27 | - dateFormat: 'yy-mm-dd', | ||
28 | - onSelect: function( selectedDate ) { | ||
29 | - var option = this.id == "from" ? "minDate" : "maxDate", | ||
30 | - instance = jQuery( this ).data( "datepicker" ), | ||
31 | - date = jQuery.datepicker.parseDate( | ||
32 | - instance.settings.dateFormat || | ||
33 | - jQuery.datepicker._defaults.dateFormat, | ||
34 | - selectedDate, instance.settings ); | ||
35 | - dates.not( this ).datepicker( "option", option, date ); | ||
36 | - } | ||
37 | - }); | ||
38 | - jQuery(".view-order-details").each(function(index, bt){ | ||
39 | - jQuery(bt).button({ | ||
40 | - icons: { | ||
41 | - primary: "ui-icon-info" | ||
42 | - }, | ||
43 | - text: false | ||
44 | - }); | ||
45 | - bt.onclick = function(){ | ||
46 | - var orderId = this.getAttribute("data-order"); | ||
47 | - var tr = jQuery("#order-details-"+orderId); | ||
48 | - var div = jQuery("#order-details-"+orderId+" div"); | ||
49 | - if ( tr[0].style.display == "none" ) { | ||
50 | - tr.show(); | ||
51 | - div.slideDown('fast'); | ||
52 | - } else { | ||
53 | - div.slideUp("fast", function(){tr.hide()}); | ||
54 | - } | ||
55 | - } | ||
56 | - }); | ||
57 | -</script> |
plugins/shopping_cart/views/shopping_cart_plugin_profile/buy.html.erb
@@ -1,35 +0,0 @@ | @@ -1,35 +0,0 @@ | ||
1 | -<% person = user.nil? ? Person.new : user %> | ||
2 | -<div id='cart-request-box'> | ||
3 | - <%= form_for(:customer, person, :url => {:action => 'send_request'}, | ||
4 | - :html => {:onsubmit => "return Cart.send_request(this)", :id => 'cart-request-form' }) do |f| %> | ||
5 | - <div id="cart-form-main"> | ||
6 | - <%= labelled_form_field('* ' + _("Name"), f.text_field(:name, :class => 'required') ) %> | ||
7 | - <%= labelled_form_field('* ' + c_("Email"), f.text_field(:email, :class => 'required email') ) %> | ||
8 | - <%= labelled_form_field('* ' + c_("Contact phone"), f.text_field(:contact_phone, :class => 'required') ) %> | ||
9 | - </div> | ||
10 | - <fieldset><legend><%=_('Delivery Address')%></legend> | ||
11 | - <%= labelled_form_field(c_('Address (street and number)'), f.text_field(:address)) %> | ||
12 | - <%= labelled_form_field( c_("City"), f.text_field(:city)) %> | ||
13 | - <%= labelled_form_field(c_('ZIP code'), f.text_field(:zip_code)) %> | ||
14 | - </fieldset> | ||
15 | - <div id="cart-form-actions"> | ||
16 | - <%= submit_button(:send, _('Send buy request')) %> | ||
17 | - </div> | ||
18 | - <% end %> | ||
19 | - <%= items_table(session[:cart][:items], profile) %> | ||
20 | - <%= link_to_function '', "noosfero.modal.close();", :class => 'cart-box-close icon-cancel' %> | ||
21 | -</div> | ||
22 | - | ||
23 | -<script type="text/javascript"> | ||
24 | -//<![CDATA[ | ||
25 | - jQuery(document).ready(function(){ | ||
26 | - jQuery("#cart-request-form").validate({ | ||
27 | - submitHandler: function(form) { | ||
28 | - jQuery(form).find('input.submit').attr('disabled', true); | ||
29 | - jQuery('#cboxLoadingOverlay').show().addClass('loading'); | ||
30 | - jQuery('#cboxLoadingGraphic').show().addClass('loading'); | ||
31 | - } | ||
32 | - }); | ||
33 | - }); | ||
34 | -//]]> | ||
35 | -</script> |