opensteam 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
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