Class: Admin::AdminController

Inherits:
CrmController
  • Object
show all
Defined in:
app/controllers/admin/admin_controller.rb

Instance Method Summary collapse

Instance Method Details

#auto_ship_confirm_deliveriesObject



138
139
140
141
142
143
# File 'app/controllers/admin/admin_controller.rb', line 138

def auto_ship_confirm_deliveries
  authorize! :manage, Delivery
  Delivery.auto_ship_confirm
  flash[:info] = 'Any deliveries pending ship confirm are now being processed.'
  redirect_to action: :index
end

#cache_statusObject



83
84
85
86
# File 'app/controllers/admin/admin_controller.rb', line 83

def cache_status
  @cache_info = gather_cache_status
  @redis_connections = gather_redis_connections
end

#check_for_receiptsObject



105
106
107
108
109
# File 'app/controllers/admin/admin_controller.rb', line 105

def check_for_receipts
  Order.check_for_receipts
  flash[:info] = 'Any unsettled orders are being checked to see if all invoices are paid'
  redirect_to action: :index
end

#exception_testObject

Exception testing page for verifying AppSignal error reporting
GET /admin/exception_test



192
193
194
# File 'app/controllers/admin/admin_controller.rb', line 192

def exception_test
  authorize! :manage, Employee
end

#flush_cacheObject



125
126
127
128
129
130
131
132
133
134
135
136
# File 'app/controllers/admin/admin_controller.rb', line 125

def flush_cache
  if .has_role?('admin')
    Rails.cache.clear
    flash[:info] = 'Successfully flushed redis'
    redirect_to action: :index
  else
    head :forbidden
  end
rescue StandardError => e
  flash[:error] = "Could not flush cache: #{e}"
  redirect_to action: :index
end

#get_all_exchange_ratesObject



118
119
120
121
122
123
# File 'app/controllers/admin/admin_controller.rb', line 118

def get_all_exchange_rates
  authorize! :manage, ExchangeRate
  ExchangeRate.get_all_exchange_rates
  flash[:info] = 'Missing exchange rates have been downloaded'
  redirect_to action: :index
end

#get_exchange_rates_for_todayObject



111
112
113
114
115
116
# File 'app/controllers/admin/admin_controller.rb', line 111

def get_exchange_rates_for_today
  authorize! :manage, ExchangeRate
  ExchangeRate.get_exchange_rates_for_today
  flash[:info] = 'Exchange rate has been downloaded'
  redirect_to action: :index
end

#indexObject



88
# File 'app/controllers/admin/admin_controller.rb', line 88

def index; end

#invoice_shipped_deliveriesObject



145
146
147
148
149
150
151
# File 'app/controllers/admin/admin_controller.rb', line 145

def invoice_shipped_deliveries
  authorize! :manage, Invoice
  Delivery.invoice_shipped_deliveries
  flash[:info] =
    'Shipped deliveries have been queued for invoicing, process may take a few minutes to complete.'
  redirect_to action: :index
end

#process_shipped_deliveriesObject



90
91
92
93
94
95
96
# File 'app/controllers/admin/admin_controller.rb', line 90

def process_shipped_deliveries
  authorize! :manage, Invoice

  Delivery.invoice_shipped_deliveries
  flash[:info] = 'Any shipped deliveries are now being processed'
  redirect_to action: :index
end

#reconcile_committed_itemsObject



98
99
100
101
102
103
# File 'app/controllers/admin/admin_controller.rb', line 98

def reconcile_committed_items
  authorize! :manage, StoreItem
  Item::InventoryCommitter.consolidate_commit_counts
  flash[:info] = 'Item reconciliation complete'
  redirect_to action: :index
end

#refresh_all_specsObject



162
163
164
165
166
167
# File 'app/controllers/admin/admin_controller.rb', line 162

def refresh_all_specs
  authorize! :manage, Item
  count = Item.async_update_all_items_product_specifications
  flash[:info] = "Specs queued for #{count} items"
  redirect_to action: :index
end

#refresh_cache_blog_postsObject



179
180
181
182
183
184
185
186
# File 'app/controllers/admin/admin_controller.rb', line 179

def refresh_cache_blog_posts
  authorize! :manage, Post
  Post.all.each(&:touch)
  flash[:info] = 'Cache has been refreshed'
  redirect_to action: :index
rescue StandardError => e
  flash[:error] = "Could not refresh cache: #{e}"
end

#refresh_cache_product_linesObject



169
170
171
172
173
174
175
176
177
# File 'app/controllers/admin/admin_controller.rb', line 169

def refresh_cache_product_lines
  authorize! :manage, Item
  ProductLine.touch_all
  Item.touch_all
  flash[:info] = 'Cache has been refreshed'
  redirect_to action: :index
rescue StandardError => e
  flash[:error] = "Could not refresh cache: #{e}"
end

#refresh_cache_showcasesObject



153
154
155
156
157
158
159
160
# File 'app/controllers/admin/admin_controller.rb', line 153

def refresh_cache_showcases
  authorize! :manage, Showcase
  Showcase.find_each(&:touch)
  flash[:info] = 'Cache has been refreshed'
  redirect_to action: :index
rescue StandardError => e
  flash[:error] = "Could not refresh cache: #{e}"
end

#search_testObject



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/controllers/admin/admin_controller.rb', line 19

def search_test
  authorize! :search_test, Employee
  # A full database is required to test a solid text search methodology.  But
  # in automated testing this is not possible
  # So a simple web portal will display the result against various test cases

  names = { 'We Floors' => 156_336,
            "Don's Floor Covering" => 119_642,
            'DirectBuy Cincinnati' => 122_491,
            'directbuy cin*' => 122_491,
            'dir* cin*' => 122_491,
            'DirectBuy Gaithersburg' => 123_584,
            'directbuy gaith*' => 123_584,
            'Prosource of Monroeville' => 133_439,
            'Amy Bronzonie' => 180_273,
            'Amy Bronz*' => 180_273,
            'M A K Interiors' => 44_068,
            'MAK Interiors' => 44_068,
            'Design Kitchen and Bath' => 49_508 }

  @results = []
  names.each do |n, pid|
    res = Party.lookup(n).limit(5)
    @results << { original: n, results: res.map do |p|
                                          "#{p.full_name} [#{p.id}]"
                                        end, success: res.any? do |p|
                                                        p.id == pid
                                                      end }
  end
  render layout: false
end

#sendfile_testObject

X-Accel-Redirect diagnostics page
GET /admin/sendfile_test



198
199
200
201
202
203
204
# File 'app/controllers/admin/admin_controller.rb', line 198

def sendfile_test
  authorize! :manage, Employee
  @nginx_prefix   = Rails.application.config.x.temp_storage_nginx_prefix
  @storage_path   = Rails.application.config.x.temp_storage_path
  @sendfile_header = Rails.application.config.action_dispatch.x_sendfile_header
  @acceleration_enabled = @sendfile_header.present? && @storage_path.present? && @nginx_prefix.present?
end

#sendfile_test_downloadObject

Serves a small generated text file via send_file_accelerated to verify the full
nginx X-Accel-Redirect chain end-to-end.
GET /admin/sendfile_test/download



209
210
211
212
213
214
215
216
217
# File 'app/controllers/admin/admin_controller.rb', line 209

def sendfile_test_download
  authorize! :manage, Employee
  test_file = Tempfile.new(['sendfile_test', '.txt'], Rails.application.config.x.temp_storage_path)
  test_file.write("X-Accel-Redirect test — generated at #{Time.current}\nServer: #{request.host}\nEnvironment: #{Rails.env}\n")
  test_file.flush
  send_file_accelerated(test_file.path, download: true, mime_type: 'text/plain', file_name: 'sendfile_test.txt')
ensure
  test_file&.close
end

#simple_formObject



4
5
6
7
8
# File 'app/controllers/admin/admin_controller.rb', line 4

def simple_form
  # Create a model with error
  @customer = Customer.new
  @customer.save
end

#simple_form_verticalObject



10
11
12
13
14
# File 'app/controllers/admin/admin_controller.rb', line 10

def simple_form_vertical
  # Create a model with error
  @customer = Customer.new
  @customer.save
end

#statusObject



81
# File 'app/controllers/admin/admin_controller.rb', line 81

def status; end

#stimulus_formObject



16
17
# File 'app/controllers/admin/admin_controller.rb', line 16

def stimulus_form
end

#testObject



188
# File 'app/controllers/admin/admin_controller.rb', line 188

def test; end

#youtubeObject



51
# File 'app/controllers/admin/admin_controller.rb', line 51

def youtube; end


53
54
55
56
57
58
59
# File 'app/controllers/admin/admin_controller.rb', line 53

def youtube_auto_link
  service = YouTube::AutoLinkService.new
  @matches = service.discover_matches
rescue YouTube::OauthService::TokenRefreshError, YouTube::ApiClient::ApiError => e
  @matches = []
  flash.now[:alert] = "YouTube API error: #{e.message}"
end


61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# File 'app/controllers/admin/admin_controller.rb', line 61

def youtube_link_selected
  links = params[:links]&.select { |_yt_id, video_id| video_id.present? } || {}

  if links.empty?
    redirect_to admin_youtube_auto_link_path, alert: 'No videos selected.'
    return
  end

  service = YouTube::AutoLinkService.new
  linked = 0
  links.each do |youtube_id, video_id|
    service.link!(video_id.to_i, youtube_id)
    linked += 1
  rescue StandardError => e
    Rails.logger.error("[YouTubeAutoLink] Failed to link video #{video_id} to #{youtube_id}: #{e.message}")
  end

  redirect_to admin_youtube_path, notice: "Linked #{linked} video(s) to YouTube. Metadata sync queued."
end