mirror of
https://github.com/System-End/theseus.git
synced 2026-04-19 16:38:18 +00:00
81 lines
2.6 KiB
Ruby
81 lines
2.6 KiB
Ruby
class PublicIdsController < ApplicationController
|
||
# GET /id/:public_id
|
||
#
|
||
skip_after_action :verify_authorized
|
||
#
|
||
def index
|
||
end
|
||
|
||
def lookup
|
||
# The public_id contains the prefix that determines the model class
|
||
prefix = params[:id].split("!").first&.downcase
|
||
id_part = params[:id].split("!").last
|
||
|
||
# Find the corresponding model based on the prefix
|
||
case prefix
|
||
when "mtr"
|
||
@record = USPS::IVMTR::Event.find_by_public_id!(params[:id])
|
||
@letter = @record.letter
|
||
if current_user.admin?
|
||
redirect_to inspect_iv_mtr_event_path(@record)
|
||
else
|
||
if @letter.present?
|
||
redirect_to public_letter_path(@letter)
|
||
else
|
||
redirect_to public_ids_path, alert: "MTR event found, but no associated letter...?"
|
||
end
|
||
end
|
||
when "hackapost", "dev"
|
||
@indicium = USPS::Indicium.find(id_part[1...])
|
||
@letter = @indicium.letter
|
||
if current_user.admin?
|
||
redirect_to inspect_indicium_path(@indicium)
|
||
else
|
||
if @letter.present?
|
||
redirect_to public_letter_path(@letter)
|
||
else
|
||
redirect_to public_ids_path, alert: "indicium found, but no associated letter...?"
|
||
end
|
||
end
|
||
else
|
||
# bad hack:
|
||
clazzes = ActiveRecord::Base.descendants.select { |c| c.included_modules.include?(PublicIdentifiable) }
|
||
clazz = clazzes.find { |c| c.public_id_prefix == prefix }
|
||
unless clazz.present?
|
||
return search_by_tracking_number(params[:id])
|
||
end
|
||
@record = clazz.find_by_public_id(params[:id])
|
||
unless @record.present?
|
||
return redirect_to public_ids_path, alert: "no #{clazz.name} found with public id #{params[:id]}"
|
||
end
|
||
|
||
redirect_to url_for(@record)
|
||
|
||
# If no matching prefix is found, return 404
|
||
# raise ActiveRecord::RecordNotFound, "No record found with public_id: #{params[:id]}"
|
||
end
|
||
rescue ActiveRecord::RecordNotFound => e
|
||
flash[:alert] = "Record not found"
|
||
redirect_to public_ids_path
|
||
end
|
||
|
||
private
|
||
|
||
def search_by_tracking_number(tracking_number)
|
||
# Search for warehouse orders by tracking number
|
||
warehouse_order = Warehouse::Order.find_by(tracking_number: tracking_number)
|
||
if warehouse_order
|
||
return redirect_to warehouse_order_path(warehouse_order)
|
||
end
|
||
|
||
lsv = LSV::MarketingShipmentRequest.first_where("{Warehouse–Tracking Number} = '#{tracking_number.gsub("'", "\\'")}'")
|
||
|
||
if lsv
|
||
return redirect_to show_lsv_path(LSV.slug_for(lsv), lsv.id)
|
||
end
|
||
|
||
# No package found with this tracking number
|
||
flash[:alert] = "nothing found at all."
|
||
redirect_to public_ids_path
|
||
end
|
||
end
|