opensteam 0.9.1 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. data/CHANGELOG +12 -1
  2. data/generators/opensteam/opensteam_generator.rb +5 -0
  3. data/generators/opensteam/templates/app/controllers/admin/invoices_controller.rb +31 -25
  4. data/generators/opensteam/templates/app/controllers/admin/orders_controller.rb +22 -69
  5. data/generators/opensteam/templates/app/controllers/admin/shipments_controller.rb +29 -26
  6. data/generators/opensteam/templates/app/controllers/admin/users_controller.rb +28 -13
  7. data/generators/opensteam/templates/app/controllers/admin_controller.rb +39 -1
  8. data/generators/opensteam/templates/app/controllers/profile/orders_controller.rb +20 -59
  9. data/generators/opensteam/templates/app/helpers/webshop_helper.rb +3 -0
  10. data/generators/opensteam/templates/app/models/filter_entry.rb +17 -0
  11. data/generators/opensteam/templates/app/views/admin/filters/_filter.html.erb +14 -0
  12. data/generators/opensteam/templates/app/views/admin/filters/_filter_entry.html.erb +6 -0
  13. data/generators/opensteam/templates/app/views/admin/filters/_filter_fields.html.erb +8 -0
  14. data/generators/opensteam/templates/app/views/admin/invoices/_invoices.html.erb +9 -9
  15. data/generators/opensteam/templates/app/views/admin/invoices/index.html.erb +5 -1
  16. data/generators/opensteam/templates/app/views/admin/orders/_orders.html.erb +15 -16
  17. data/generators/opensteam/templates/app/views/admin/orders/show.html.erb +9 -8
  18. data/generators/opensteam/templates/app/views/admin/shipments/_shipments.html.erb +11 -11
  19. data/generators/opensteam/templates/app/views/admin/shipments/index.html.erb +3 -0
  20. data/generators/opensteam/templates/app/views/admin/users/edit.html.erb +3 -1
  21. data/generators/opensteam/templates/app/views/admin/users/index.html.erb +18 -6
  22. data/generators/opensteam/templates/app/views/admin/users/new.html.erb +2 -0
  23. data/generators/opensteam/templates/app/views/layouts/admin.html.erb +4 -0
  24. data/generators/opensteam/templates/app/views/profile/orders/_orders.html.erb +9 -19
  25. data/generators/opensteam/templates/config/initializers/opensteam_model_tables.rb +80 -41
  26. data/generators/opensteam/templates/db/migrate/20080609095728_create_order_items.rb +1 -0
  27. data/generators/opensteam/templates/db/migrate/20080609095729_create_orders.rb +2 -2
  28. data/generators/opensteam/templates/db/migrate/20080804152615_create_filter_entries.rb +16 -0
  29. data/generators/opensteam/templates/public/stylesheets/opensteam_white.css +25 -25
  30. data/generators/opensteam_product/templates/controllers/product_controller.rb +1 -1
  31. data/lib/opensteam/extension_base.rb +1 -0
  32. data/lib/opensteam/helpers/config_table_helper.rb +139 -0
  33. data/lib/opensteam/initializer.rb +3 -3
  34. data/lib/opensteam/invoice_base.rb +4 -0
  35. data/lib/opensteam/order_base.rb +5 -3
  36. data/lib/opensteam/shipment_base.rb +6 -0
  37. data/lib/opensteam/user_base.rb +1 -0
  38. data/lib/opensteam/version.rb +1 -1
  39. metadata +8 -3
  40. data/lib/opensteam/helper/configurable_table.rb +0 -228
data/CHANGELOG CHANGED
@@ -1,4 +1,15 @@
1
- *edge*
1
+ *0.9.2*
2
+
3
+
4
+ * fixed bug in product-controller (generators): missing "::" between "Admin" namespace and ProductController
5
+
6
+ * implemented filter methods for configurable tables in admin-backend (Opensteam::Helpers::ConfigTableHelper)
7
+
8
+ * added partials for "filters"
9
+
10
+ * updated views + controller in admin-backend for filter + sortable table (TODO: check if the POST to index for filter is neccessary, REST )
11
+
12
+ * removed uuid for Order-ids due to association problems (e.g. no order_items for an order after checkout ) (TODO: implement!)
2
13
 
3
14
  * deleted unnecessary controllers + views (administration namespace)
4
15
 
@@ -89,6 +89,11 @@ class OpensteamGenerator < Rails::Generator::NamedBase
89
89
  admin.users_admins "users/type/admin", :controller => 'users', :action => 'index', :type => 'admin'
90
90
  admin.users_customers "users/type/customer", :controller => 'users', :action => 'index', :type => 'customer'
91
91
 
92
+ admin.connect "users", :controller => 'users', :action => 'index'
93
+ admin.connect "orders", :controller => 'orders', :action => 'index'
94
+ admin.connect "invoices", :controller => 'invoices', :action => 'index'
95
+ admin.connect "shipments", :controller => 'shipments', :action => 'index'
96
+
92
97
  admin.resources :inventories
93
98
  admin.resources :users, :has_many => [ :orders ]
94
99
  admin.resources :orders, :has_many => [ :shipments, :invoices ]
@@ -1,37 +1,34 @@
1
1
  class Admin::InvoicesController < AdminController
2
+
2
3
 
3
4
 
4
- include Opensteam::Helper::ConfigurableTableController
5
-
6
- def sort
7
- if params[:sort]
8
- if params[:order_id]
9
- @order = Order.find( params[:order_id] )
10
- conditions = { :order_id => params[:order_id] }
11
- end
12
- @results = sort_model( Invoice, @sort_column, conditions )
13
- @invoices = @results
14
- end
5
+ before_filter :set_sort_column
15
6
 
16
- respond_to do |respond|
17
- respond.html { render :action => :sort }
18
- respond.js { render :partial => "invoice", :collection => @results, :layout => false }
19
- end
20
-
21
- end
22
-
23
-
24
7
  def index
25
- @invoices ||= Opensteam::InvoiceBase::Invoice.find( :all )
26
- @order = Opensteam::OrderBase::Order.find( params[:order_id] ) if params[:order_id]
27
-
8
+ save_filter("Invoice") if request.post?
9
+ @invoices = apply_filter( "Invoice" )
10
+
11
+ if params[:order_id]
12
+ @order = Opensteam::OrderBase::Order.find( params[:order_id] )
13
+ @invoices = ( @invoices || Opensteam::InvoiceBase::Invoice ).by_order( params[:order_id ] )
14
+ end
15
+
16
+ @invoices = ( @invoices || Opensteam::InvoiceBase::Invoice ).order_by( @sort_column.order )
17
+
18
+ if params[:sort]
19
+ @invoices.reverse! if session[:invoices]
20
+ session[:invoices] = session[:invoices] ? false : true
21
+ end
22
+
28
23
  respond_to do |format|
29
- format.html # index.html.erb
30
- format.xml { render :xml => @invoices }
31
- format.js { render :partial => "invoices", :layout => false }
24
+ format.html
25
+ format.xml { render :xml => @invoices.to_xml( :root => "invoices" ) }
26
+ format.js { render :partial => "admin/invoices/invoice", :collection => @invoices, :layout => false }
32
27
  end
28
+
33
29
  end
34
30
 
31
+
35
32
 
36
33
  def show
37
34
  @order = Opensteam::OrderBase::Order.find( params[:order_id] )
@@ -102,5 +99,14 @@ class Admin::InvoicesController < AdminController
102
99
 
103
100
  end
104
101
 
102
+ private
103
+ def set_sort_column
104
+ id = params[:sort] || "id"
105
+ @sort_column = Opensteam::InvoiceBase::Invoice.osteam_configtable.columns.find { |s| s.id.to_s == id }
106
+ end
107
+
108
+
109
+
110
+
105
111
 
106
112
  end
@@ -1,67 +1,32 @@
1
1
  class Admin::OrdersController < AdminController
2
-
3
-
4
-
5
- include Opensteam::Helper::ConfigurableTableController
6
-
7
- helper :all
8
-
9
-
10
-
11
- def livesearch
12
- if params[:livesearch]
13
-
14
- @result = Order.find(:all, :include => [:customer, :shipping_address, :payment_address ] )
15
-
16
- @result = @result.select { |s|
17
- Order.configured_table.columns.collect { |c|
18
- seek = s.__send__( c.id )
19
- seek = seek.__send__( c.method ) if c.method
20
- seek.to_s.include?( params[:livesearch] )
21
- }.any?
22
- }
23
- render :partial => 'order', :collection => @result, :layout => false
24
- end
25
-
26
- end
27
-
28
-
29
2
 
3
+ helper :all
4
+ before_filter :set_sort_column
30
5
 
31
- def sort
32
-
33
- if params[:sort]
34
- if params[:user_id]
35
- @customer = Opensteam::UserBase::User.find( params[:user_id] )
36
- conditions = { :customer_id => params[:customer_id] }
37
- end
38
- @results = sort_model( Order, @sort_column, conditions, [:customer, :payment_address, :shipping_address ] )
39
- @orders = @results
40
- end
41
-
42
- respond_to do |respond|
43
- respond.html { render :action => :sort }
44
- respond.js { render :partial => "order", :collection => @results, :layout => false }
45
- end
46
-
47
- end
48
-
49
-
50
6
  def index
7
+ save_filter("Order") if request.post?
8
+ @orders = apply_filter( "Order" )
9
+
51
10
  if params[:user_id]
52
11
  @customer = Opensteam::UserBase::User.find( params[:user_id] )
53
- @orders = @customer.orders
54
- else
55
- @orders ||= find_orders
12
+ @orders = ( @orders || Opensteam::OrderBase.Order ).by_user( params[:user_id ] )
56
13
  end
57
-
14
+
15
+ @orders = ( @orders || Opensteam::OrderBase::Order ).order_by( @sort_column.order )
16
+
17
+ if params[:sort]
18
+ @orders.reverse! if session[:orders]
19
+ session[:orders] = session[:orders] ? false : true
20
+ end
21
+
58
22
  respond_to do |format|
59
- format.html # index.html.erb
60
- format.xml { render :xml => @orders }
61
- format.js { render :partial => "orders", :layout => false }
23
+ format.html
24
+ format.xml { render :xml => @orders.to_xml( :root => "orders" ) }
25
+ format.js { render :partial => "admin/orders/order", :collection => @orders, :layout => false }
62
26
  end
27
+
63
28
  end
64
-
29
+
65
30
 
66
31
  def show
67
32
  @order ||= Opensteam::OrderBase::Order.find( params[:id] )
@@ -93,21 +58,9 @@ class Admin::OrdersController < AdminController
93
58
 
94
59
  private
95
60
 
96
- def find_orders
97
- if params[:filter] && (params[:filter][:enabled] == "1")
98
- params[:state] = params[:filter][:state] || [""]
99
- params[:last] = params[:filter][:last] unless params[:filter][:last].blank?
100
- end
101
-
102
- scope = Opensteam::OrderBase::Order.scoped({})
103
-
104
- scope = scope.scoped :include => :state, :conditions => ["state_bases.name in (?)", params[:state] ] if params[:state]
105
-
106
- scope = scope.scoped :order => :state_id if params[:state]
107
- scope = scope.scoped :conditions => { :customer_id => params[:customer_id] } if params[:customer_id]
108
- scope = scope.scoped :conditions => ["orders.created_at >= ?", 1.send(params[:last]).ago ] if params[:last]
109
- # scope = scope.scoped :conditions => [ "orders.created_at < ?", params[:before]] if params[:before]
110
- scope = scope.scoped :include => :customer
61
+ def set_sort_column
62
+ id = params[:sort] || "id"
63
+ @sort_column = Opensteam::OrderBase::Order.osteam_configtable[ id ]
111
64
  end
112
65
 
113
66
  end
@@ -1,35 +1,31 @@
1
1
  class Admin::ShipmentsController < AdminController
2
2
 
3
-
4
- include Opensteam::Helper::ConfigurableTableController
5
-
6
- def sort
7
- if params[:sort]
8
- if params[:order_id]
9
- @customer = Order.find( params[:order_id] )
10
- conditions = { :order_id => params[:order_id] }
11
- end
12
- @results = sort_model( Shipment, @sort_column, conditions )
13
- @shipments = @results
14
- end
3
+
4
+ before_filter :set_sort_column
15
5
 
16
- respond_to do |respond|
17
- respond.html { render :action => :sort }
18
- respond.js { render :partial => "shipment", :collection => @results, :layout => false }
19
- end
20
-
21
- end
22
-
23
-
24
6
  def index
25
- @shipments ||= Opensteam::ShipmentBase::Shipment.find( :all )
26
- @order = Opensteam::OrderBase::Order.find( params[:order_id] ) if params[:order_id]
27
-
7
+ save_filter("Shipment") if request.post?
8
+ @shipments = apply_filter( "Shipment" )
9
+
10
+ @filter_entries = []
11
+ if params[:order_id]
12
+ @order = Opensteam::OrderBase::Order.find( params[:order_id] )
13
+ @shipments = ( @shipments || Opensteam::ShipmentBase::Shipment ).by_order( params[:order_id ] )
14
+ end
15
+
16
+ @shipments = ( @shipments || Opensteam::ShipmentBase::Shipment ).order_by( @sort_column.order )
17
+
18
+ if params[:sort]
19
+ @shipments.reverse! if session[:shipments]
20
+ session[:shipments] = session[:shipments] ? false : true
21
+ end
22
+
28
23
  respond_to do |format|
29
- format.html # index.html.erb
30
- format.xml { render :xml => @shipments }
31
- format.js { render :partial => "shipments", :layout => false }
24
+ format.html
25
+ format.xml { render :xml => @shipments.to_xml( :root => "shipments" ) }
26
+ format.js { render :partial => "admin/shipments/shipment", :collection => @shipments, :layout => false }
32
27
  end
28
+
33
29
  end
34
30
 
35
31
 
@@ -102,5 +98,12 @@ class Admin::ShipmentsController < AdminController
102
98
 
103
99
  end
104
100
 
101
+ private
102
+ def set_sort_column
103
+ id = params[:sort] || "id"
104
+ @sort_column = Opensteam::ShipmentBase::Shipment.osteam_configtable.columns.find { |s| s.id.to_s == id }
105
+ end
106
+
107
+
105
108
 
106
109
  end
@@ -1,19 +1,31 @@
1
1
  class Admin::UsersController < AdminController
2
2
 
3
+ before_filter :set_sort_column
4
+
3
5
 
4
6
  def index
7
+ save_filter( "User" ) if request.post?
8
+ @users = apply_filter( "User" )
9
+
5
10
  if params[:type]
6
- @users = Opensteam::UserBase::User.by_profile( params[:type] )
7
- else
8
- @users = Opensteam::UserBase::User.all
11
+ @users = ( @users || Opensteam::UserBase::User ).by_profile( params[:type] )
12
+ end
13
+
14
+ @users = ( @users || Opensteam::UserBase::User ).order_by( @sort_column.order )
15
+ if params[:sort]
16
+ @users.reverse! if session[:users]
17
+ session[:users] = session[:users] ? false : true
9
18
  end
10
19
 
11
20
  respond_to do |format|
12
21
  format.html
13
22
  format.xml { render :xml => @users.to_xml( :root => params[:type] || "users" ) }
23
+ format.js { render :partial => "admin/users/#{ params[:type] ? params[:type] + 's' : 'users' }", :collection => @users, :layout => false }
14
24
  end
15
25
  end
16
-
26
+
27
+
28
+
17
29
  def show
18
30
  @user = Opensteam::UserBase::User.find( params[:id] )
19
31
 
@@ -25,25 +37,18 @@ class Admin::UsersController < AdminController
25
37
  end
26
38
 
27
39
 
28
-
29
-
30
40
  def edit
31
41
  @user = Opensteam::UserBase::User.find( params[:id] )
32
42
  @profiles = Opensteam::UserBase::Profile.all
33
-
34
-
35
-
36
43
  end
37
44
 
38
45
 
39
46
 
40
-
41
-
42
47
  def update
43
48
  @user = Opensteam::UserBase::User.find( params[:id] )
44
49
 
45
50
  if params[:type]
46
- @profile = Opensteam::UserBase::Profile.find_or_create_by_name( :name => params[:type].classify )
51
+ @profile = Opensteam::UserBase::Profile.find( params[:type] )
47
52
  end
48
53
 
49
54
 
@@ -68,6 +73,7 @@ class Admin::UsersController < AdminController
68
73
  def new
69
74
  @user = Opensteam::UserBase::User.new
70
75
  @profiles = Opensteam::UserBase::Profile.all
76
+ @user.profile_id = Opensteam::UserBase::Profile.find_by_name( params[:type].classify ).id if params[:type]
71
77
  end
72
78
 
73
79
 
@@ -75,7 +81,7 @@ class Admin::UsersController < AdminController
75
81
  @user = Opensteam::UserBase::User.new( params[:user] )
76
82
 
77
83
  if params[:type]
78
- @profile = Opensteam::UserBase::Profile.find_or_create_by_name( :name => params[:type].classify )
84
+ @profile = Opensteam::UserBase::Profile.find( params[:type] )
79
85
  end
80
86
 
81
87
  respond_to do |format|
@@ -96,4 +102,13 @@ class Admin::UsersController < AdminController
96
102
 
97
103
  end
98
104
 
105
+
106
+ private
107
+ def set_sort_column
108
+ id = params[:sort] || "id"
109
+ @sort_column = Opensteam::UserBase::User.osteam_configtable.columns.find { |s| s.id.to_s == id }
110
+ end
111
+
112
+
113
+
99
114
  end
@@ -11,7 +11,7 @@ class AdminController < ApplicationController
11
11
 
12
12
  def index
13
13
  @extensions = []
14
- # @extensions = Opensteam::ExtensionBase::Extension.active
14
+ # @extensions = Opensteam::ExtensionBase::Extension.active
15
15
  end
16
16
 
17
17
  # show product classes
@@ -25,10 +25,17 @@ class AdminController < ApplicationController
25
25
  end
26
26
 
27
27
 
28
+ def delete_filter
29
+ # FilterEntry.find( params[:id] ).destroy
30
+ session[:filter][ params[:model] ].delete( params[:id].to_i )
31
+ redirect_to :action => :index
32
+ end
33
+
28
34
 
29
35
  private
30
36
  def authorized?
31
37
  unless logged_in? && is_admin?
38
+ store_location
32
39
  redirect_to login_path
33
40
  return false
34
41
  end
@@ -36,5 +43,36 @@ class AdminController < ApplicationController
36
43
  end
37
44
 
38
45
 
46
+ def save_filter( model )
47
+ return nil unless params[:filter]
48
+ session[:filter] ||= {}
49
+ ( session[:filter][ model ] ||= [] ).push( *params[:filter].collect { |f| FilterEntry.create( f ).id } )
50
+ end
51
+
52
+
53
+
54
+ def apply_filter( model )
55
+
56
+ session[:filter] ||= {}
57
+ session[:filter][ model ] ||= []
58
+ if session[:filter][ model ].empty?
59
+ @filter_entries = []
60
+ return nil
61
+ end
62
+
63
+ @filter_entries = FilterEntry.find( :all, :conditions => { :id => session[:filter][ model ] } )
64
+ return nil if @filter_entries.empty?
65
+
66
+ model.classify.constantize.scoped(
67
+ { :conditions => [ @filter_entries.collect(&:to_sql).join(" AND "),
68
+ @filter_entries.collect(&:to_val).inject({}) { |r,v| r.merge(v) } ]
69
+ }
70
+ )
71
+ end
72
+
73
+
74
+
75
+
76
+
39
77
  end
40
78
 
@@ -1,75 +1,29 @@
1
1
  class Profile::OrdersController < ProfileController
2
-
3
- include Opensteam::Helper::ConfigurableTableController
4
- include AuthenticatedSystem
5
-
6
- def livesearch
7
- if params[:livesearch]
8
-
9
- @result = @customer.orders
10
- @result = @result.select { |s|
11
-
12
- Order.configured_table.columns.collect { |c|
13
- seek = s.__send__( c.id )
14
- seek = seek.__send__( c.method ) if c.method
15
- seek.to_s.include?( params[:livesearch] )
16
- }.any?
17
- }
18
- render :partial => 'order', :collection => @result, :layout => false
19
- end
20
2
 
21
- end
22
-
23
-
24
-
25
- def sort
26
- if params[:sort]
27
- @results = sort_model( @customer.orders, @sort_column )
28
- @orders = @results
29
- end
30
-
31
- respond_to do |respond|
32
- respond.html { render :action => :sort }
33
- respond.js { render :partial => "order", :collection => @results, :layout => false }
34
- end
35
-
36
- end
37
-
38
-
39
- def sort_model( collection, column, conditions = nil )
40
- finder_args = {}
41
- finder_args[:conditions] = conditions if conditions
42
-
43
- if column.order_ruby?
44
- result = collection.find( :all, finder_args )
45
- result.sort!(&column.order)
46
- else
47
- finder_args[:order] = column.order
48
- result = collection.find(:all, finder_args )
49
- end
50
- toggle_sorted("Orders" )
51
- result.reverse! if sorted?( "Orders" )
52
- result
53
- end
54
-
55
-
3
+ include AuthenticatedSystem
56
4
 
5
+ before_filter :set_sort_column
57
6
 
58
7
  def index
8
+ @orders = Opensteam::OrderBase::Order.by_user( @customer.id )
9
+
59
10
  if params[:state]
60
11
  if ( params[:state].collect(&:to_sym) - Order.available_states.collect(&:name).collect(&:to_sym) ).empty?
61
- @orders = params[:state].collect { |s| @customer.orders.scoped :conditions => { :state => s } }.flatten
62
- else
63
- @orders = []
12
+ @orders = @orders.scoped :conditions => { :state => params[:state] }
64
13
  end
65
- else
66
- @orders = @customer.orders
14
+ end
15
+
16
+ @orders = ( @orders || Opensteam::OrderBase::Order ).order_by( @sort_column.order )
17
+
18
+ if params[:sort]
19
+ @orders.reverse! if session[:orders]
20
+ session[:orders] = session[:orders] ? false : true
67
21
  end
68
22
 
69
23
  respond_to do |format|
70
24
  format.html # index.html.erb
71
25
  format.xml { render :xml => @orders.to_xml( :root => 'orders' ) }
72
- format.js { render :partial => "orders", :layout => false }
26
+ format.js { render :partial => "order", :collection => @orders, :layout => false }
73
27
  end
74
28
  end
75
29
 
@@ -101,5 +55,12 @@ class Profile::OrdersController < ProfileController
101
55
 
102
56
  end
103
57
 
58
+ private
59
+
60
+ def set_sort_column
61
+ id = params[:sort] || "id"
62
+ @sort_column = Opensteam::OrderBase::Order.osteam_configtable[ id ]
63
+ end
64
+
104
65
 
105
66
  end