mirror of
https://github.com/System-End/theseus.git
synced 2026-04-19 22:15:09 +00:00
152 lines
4.5 KiB
Ruby
152 lines
4.5 KiB
Ruby
class Letter::QueuesController < ApplicationController
|
|
before_action :set_letter_queue, only: %i[ show edit update destroy batch ]
|
|
skip_after_action :verify_authorized
|
|
# GET /letter/queues or /letter/queues.json
|
|
def index
|
|
authorize Letter::Queue, policy_class: Letter::QueuePolicy
|
|
@letter_queues = policy_scope(Letter::Queue, policy_scope_class: Letter::QueuePolicy::Scope)
|
|
end
|
|
|
|
# GET /letter/queues/1 or /letter/queues/1.json
|
|
def show
|
|
@letters = @letter_queue.letters.queued
|
|
@batches = @letter_queue.letter_batches
|
|
end
|
|
|
|
# GET /letter/queues/new
|
|
def new
|
|
@letter_queue = Letter::Queue.new
|
|
end
|
|
|
|
# GET /letter/queues/1/edit
|
|
def edit
|
|
end
|
|
|
|
# POST /letter/queues or /letter/queues.json
|
|
def create
|
|
@letter_queue = letter_queue_class.new(letter_queue_params.merge(user: current_user))
|
|
|
|
respond_to do |format|
|
|
if @letter_queue.save
|
|
format.html { redirect_to @letter_queue, notice: "Queue was successfully created." }
|
|
format.json { render :show, status: :created, location: @letter_queue }
|
|
else
|
|
format.html { render :new, status: :unprocessable_entity }
|
|
format.json { render json: @letter_queue.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
# PATCH/PUT /letter/queues/1 or /letter/queues/1.json
|
|
def update
|
|
respond_to do |format|
|
|
if @letter_queue.update(letter_queue_params)
|
|
format.html { redirect_to @letter_queue, notice: "Queue was successfully updated." }
|
|
format.json { render :show, status: :ok, location: @letter_queue }
|
|
else
|
|
format.html { render :edit, status: :unprocessable_entity }
|
|
format.json { render json: @letter_queue.errors, status: :unprocessable_entity }
|
|
end
|
|
end
|
|
end
|
|
|
|
# DELETE /letter/queues/1 or /letter/queues/1.json
|
|
def destroy
|
|
@letter_queue.destroy!
|
|
|
|
respond_to do |format|
|
|
format.html { redirect_to letter_queues_path, status: :see_other, notice: "Queue was successfully destroyed." }
|
|
format.json { head :no_content }
|
|
end
|
|
end
|
|
|
|
def batch
|
|
authorize @letter_queue
|
|
unless @letter_queue.letters.any?
|
|
flash[:error] = "no letters?"
|
|
redirect_to @letter_queue
|
|
end
|
|
batch = @letter_queue.make_batch(user: current_user)
|
|
User::UpdateTasksJob.perform_now(current_user)
|
|
flash[:success] = "now do something with it!"
|
|
redirect_to process_letter_batch_path(batch, uft: @letter_queue.user_facing_title, template: @letter_queue.template)
|
|
end
|
|
|
|
def mark_printed_instants_mailed
|
|
authorize Letter::Queue
|
|
|
|
# Find all letters with "printed" status in any instant letter queue
|
|
printed_letters = Letter.joins(:queue)
|
|
.where(letter_queues: { type: "Letter::InstantQueue" })
|
|
.where(aasm_state: "printed")
|
|
|
|
if printed_letters.empty?
|
|
flash[:notice] = "No printed letters found in instant queues."
|
|
redirect_to letter_queues_path
|
|
return
|
|
end
|
|
|
|
# Mark all printed letters as mailed
|
|
marked_count = 0
|
|
failed_letters = []
|
|
|
|
printed_letters.each do |letter|
|
|
begin
|
|
letter.mark_mailed!
|
|
marked_count += 1
|
|
rescue => e
|
|
failed_letters << "#{letter.public_id} (#{e.message})"
|
|
end
|
|
end
|
|
|
|
# Update user tasks after marking letters as mailed
|
|
User::UpdateTasksJob.perform_now(current_user) if marked_count > 0
|
|
|
|
if failed_letters.any?
|
|
flash[:alert] = "Marked #{marked_count} letters as mailed, but failed to mark #{failed_letters.count} letters: #{failed_letters.join(", ")}"
|
|
else
|
|
flash[:success] = "Successfully marked #{marked_count} letters as mailed from instant queues."
|
|
end
|
|
|
|
redirect_to letter_queues_path
|
|
end
|
|
|
|
private
|
|
|
|
# Use callbacks to share common setup or constraints between actions.
|
|
def set_letter_queue
|
|
@letter_queue = Letter::Queue.find_by!(slug: params[:id])
|
|
end
|
|
|
|
def letter_queue_class
|
|
type = params[:letter_queue]&.dig(:type) || params[:letter_instant_queue]&.dig(:type)
|
|
case type
|
|
when "Letter::InstantQueue"
|
|
Letter::InstantQueue
|
|
else
|
|
Letter::Queue
|
|
end
|
|
end
|
|
|
|
# Only allow a list of trusted parameters through.
|
|
def letter_queue_params
|
|
params.require(:letter_queue).permit(
|
|
:name,
|
|
:type,
|
|
:letter_height,
|
|
:letter_width,
|
|
:letter_weight,
|
|
:letter_processing_category,
|
|
:letter_mailer_id_id,
|
|
:letter_return_address_id,
|
|
:letter_return_address_name,
|
|
:user_facing_title,
|
|
:template,
|
|
:postage_type,
|
|
:usps_payment_account_id,
|
|
:include_qr_code,
|
|
:letter_mailing_date,
|
|
tags: [],
|
|
)
|
|
end
|
|
end
|