Add method to close all invoices with an invoice direct

When the charge_members_manually option is active there is no need for an
explicit balancing step. This new function allows to close_direct all
orders which have an assigned invoice, which is usually indication enough
to find orders which can be closed finally.
This commit is contained in:
Patrick Gansterer 2020-02-28 12:17:27 +01:00
parent 226d2dda74
commit ecb4a8a4ba
6 changed files with 31 additions and 5 deletions

View file

@ -29,16 +29,16 @@ class Finance::BalancingController < Finance::BaseController
render layout: false if request.xhr?
end
def new_on_order_article_create # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
render :layout => false
end
def new_on_order_article_update # See publish/subscribe design pattern in /doc.
@order_article = OrderArticle.find(params[:order_article_id])
render :layout => false
end
@ -85,4 +85,17 @@ class Finance::BalancingController < Finance::BaseController
redirect_to finance_order_index_url, alert: t('finance.balancing.close_direct.alert', message: error.message)
end
def close_all_direct_with_invoice
count = 0
Order.transaction do
Order.finished_not_closed.with_invoice.each do |order|
order.close_direct! current_user
count += 1
end
end
redirect_to finance_order_index_url, notice: t('finance.balancing.close_all_direct_with_invoice.notice', count: count)
rescue => error
redirect_to finance_order_index_url, alert: t('errors.general_msg', msg: error.message)
end
end

View file

@ -34,6 +34,7 @@ class Order < ApplicationRecord
scope :stockit, -> { where(supplier_id: 0).order('ends DESC') }
scope :recent, -> { order('starts DESC').limit(10) }
scope :stock_group_order, -> { group_orders.where(ordergroup_id: nil).first }
scope :with_invoice, -> { where.not(invoice: nil) }
# Allow separate inputs for date and time
# with workaround for https://github.com/einzige/date_time_attribute/issues/14

View file

@ -1,3 +1,7 @@
- title t('.title')
#ordersTable= render 'orders'
- content_for :actionbar do
- if FoodsoftConfig[:charge_members_manually]
= link_to t('.close_all_direct_with_invoice'), close_all_direct_with_invoice_finance_order_index_path, method: :post, class: 'btn'
#ordersTable= render 'orders'