mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-25 20:46:48 +00:00
102 lines
2.8 KiB
Ruby
102 lines
2.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Admin
|
|
class OrdersReflex < ApplicationReflex
|
|
before_reflex :authorize_order, only: [:capture, :ship]
|
|
|
|
def capture
|
|
payment_capture = OrderCaptureService.new(@order)
|
|
|
|
if payment_capture.call
|
|
morph dom_id(@order), render(partial: "spree/admin/orders/table_row",
|
|
locals: { order: @order.reload, success: true })
|
|
else
|
|
flash[:error] = with_locale{
|
|
payment_capture.gateway_error || I18n.t(:payment_processing_failed)
|
|
}
|
|
morph_admin_flashes
|
|
end
|
|
end
|
|
|
|
def ship
|
|
if @order.ship
|
|
morph dom_id(@order), render(partial: "spree/admin/orders/table_row",
|
|
locals: { order: @order.reload, success: true })
|
|
else
|
|
flash[:error] = with_locale{ I18n.t("api.orders.failed_to_update") }
|
|
morph_admin_flashes
|
|
end
|
|
end
|
|
|
|
def bulk_invoice(params)
|
|
cable_ready.append(
|
|
selector: "#orders-index",
|
|
html: render(partial: "spree/admin/orders/bulk/invoice_modal")
|
|
).broadcast
|
|
|
|
BulkInvoiceJob.perform_later(
|
|
params[:bulk_ids],
|
|
"tmp/invoices/#{Time.zone.now.to_i}-#{SecureRandom.hex(2)}.pdf",
|
|
channel: SessionChannel.for_request(request)
|
|
)
|
|
|
|
morph :nothing
|
|
end
|
|
|
|
def cancel_orders(params)
|
|
cancelled_orders = OrdersBulkCancelService.new(params, current_user).call
|
|
|
|
cable_ready.dispatch_event(name: "modal:close")
|
|
|
|
cancelled_orders.each do |order|
|
|
cable_ready.replace(
|
|
selector: dom_id(order),
|
|
html: render(partial: "spree/admin/orders/table_row", locals: { order: order })
|
|
)
|
|
end
|
|
|
|
cable_ready.broadcast
|
|
morph :nothing
|
|
end
|
|
|
|
def resend_confirmation_emails(params)
|
|
editable_orders.where(id: params[:bulk_ids]).find_each do |order|
|
|
next unless can? :resend, order
|
|
|
|
Spree::OrderMailer.confirm_email_for_customer(order.id, true).deliver_later
|
|
end
|
|
|
|
success("admin.resend_confirmation_emails_feedback", params[:bulk_ids].count)
|
|
end
|
|
|
|
def send_invoices(params)
|
|
count = 0
|
|
editable_orders.where(id: params[:bulk_ids]).find_each do |o|
|
|
next unless o.distributor.can_invoice? && (o.resumed? || o.complete?)
|
|
|
|
Spree::OrderMailer.invoice_email(o.id).deliver_later
|
|
count += 1
|
|
end
|
|
|
|
success("admin.send_invoice_feedback", count)
|
|
end
|
|
|
|
private
|
|
|
|
def authorize_order
|
|
@order = Spree::Order.find_by(id: element.dataset[:id])
|
|
authorize! :admin, @order
|
|
end
|
|
|
|
def success(i18n_key, count)
|
|
flash[:success] = with_locale { I18n.t(i18n_key, count: count) }
|
|
cable_ready.dispatch_event(name: "modal:close")
|
|
morph_admin_flashes
|
|
end
|
|
|
|
def editable_orders
|
|
Permissions::Order.new(current_user).editable_orders
|
|
end
|
|
end
|
|
end
|