2009-01-10 19:36:58 +01:00
|
|
|
class Finance::InvoicesController < ApplicationController
|
2020-04-11 00:04:35 +02:00
|
|
|
before_action :authenticate_finance_or_invoices
|
2009-01-08 16:33:27 +01:00
|
|
|
|
2019-10-28 21:11:35 +01:00
|
|
|
before_action :find_invoice, only: [:show, :edit, :update, :destroy]
|
|
|
|
before_action :ensure_can_edit, only: [:edit, :update, :destroy]
|
2016-02-17 21:07:35 +01:00
|
|
|
|
2009-01-08 16:33:27 +01:00
|
|
|
def index
|
2021-02-08 01:07:10 +01:00
|
|
|
@invoices_all = Invoice.includes(:supplier, :deliveries, :orders).order('date DESC')
|
|
|
|
@invoices = @invoices_all.page(params[:page]).per(@per_page)
|
|
|
|
|
|
|
|
respond_to do |format|
|
|
|
|
format.js; format.html { render }
|
|
|
|
format.csv do
|
|
|
|
send_data InvoicesCsv.new(@invoices_all).to_csv, filename: 'invoices.csv', type: 'text/csv'
|
|
|
|
end
|
|
|
|
end
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
|
|
|
|
2017-10-22 02:21:27 +02:00
|
|
|
def unpaid
|
|
|
|
@suppliers = Supplier.includes(:invoices).where('invoices.paid_on IS NULL').references(:invoices)
|
|
|
|
end
|
|
|
|
|
2009-01-08 16:33:27 +01:00
|
|
|
def show
|
|
|
|
end
|
|
|
|
|
|
|
|
def new
|
2016-02-25 12:56:34 +01:00
|
|
|
@invoice = Invoice.new :supplier_id => params[:supplier_id]
|
|
|
|
@invoice.deliveries << Delivery.find_by_id(params[:delivery_id]) if params[:delivery_id]
|
|
|
|
@invoice.orders << Order.find_by_id(params[:order_id]) if params[:order_id]
|
2016-03-11 13:23:13 +01:00
|
|
|
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def edit
|
2016-03-11 13:23:13 +01:00
|
|
|
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
|
|
|
|
end
|
|
|
|
|
|
|
|
def form_on_supplier_id_change
|
|
|
|
fill_deliveries_and_orders_collection params[:invoice_id], params[:supplier_id]
|
|
|
|
render :layout => false
|
|
|
|
end
|
|
|
|
|
|
|
|
def fill_deliveries_and_orders_collection(invoice_id, supplier_id)
|
2021-02-08 01:05:13 +01:00
|
|
|
@deliveries_collection = Delivery.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id, supplier_id).order(date: :desc).limit(25)
|
|
|
|
@orders_collection = Order.where('invoice_id = ? OR (invoice_id IS NULL AND supplier_id = ?)', invoice_id, supplier_id).order(ends: :desc).limit(25)
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def create
|
|
|
|
@invoice = Invoice.new(params[:invoice])
|
2016-02-17 16:11:01 +01:00
|
|
|
@invoice.created_by = current_user
|
2009-01-08 16:33:27 +01:00
|
|
|
|
2009-01-29 21:28:22 +01:00
|
|
|
if @invoice.save
|
2013-02-22 00:44:39 +01:00
|
|
|
flash[:notice] = I18n.t('finance.create.notice')
|
2020-02-18 19:02:34 +01:00
|
|
|
if @invoice.orders.count == 1 && current_user.role_finance?
|
2009-01-29 21:28:22 +01:00
|
|
|
# Redirect to balancing page
|
2016-02-25 12:56:34 +01:00
|
|
|
redirect_to new_finance_order_url(order_id: @invoice.orders.first.id)
|
2009-01-08 16:33:27 +01:00
|
|
|
else
|
2009-01-29 21:28:22 +01:00
|
|
|
redirect_to [:finance, @invoice]
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
2009-01-29 21:28:22 +01:00
|
|
|
else
|
2018-09-14 01:53:05 +02:00
|
|
|
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
|
2009-01-29 21:28:22 +01:00
|
|
|
render :action => "new"
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def update
|
2012-11-10 16:44:05 +01:00
|
|
|
if @invoice.update_attributes(params[:invoice])
|
2013-02-22 00:44:39 +01:00
|
|
|
redirect_to [:finance, @invoice], notice: I18n.t('finance.update.notice')
|
2012-11-10 16:44:05 +01:00
|
|
|
else
|
2018-09-14 01:53:05 +02:00
|
|
|
fill_deliveries_and_orders_collection @invoice.id, @invoice.supplier_id
|
2012-11-10 16:44:05 +01:00
|
|
|
render :edit
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def destroy
|
|
|
|
@invoice.destroy
|
|
|
|
|
2012-11-10 16:44:05 +01:00
|
|
|
redirect_to finance_invoices_url
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|
2016-02-17 21:07:35 +01:00
|
|
|
|
2016-05-06 15:04:58 +02:00
|
|
|
def attachment
|
|
|
|
@invoice = Invoice.find(params[:invoice_id])
|
|
|
|
type = MIME::Types[@invoice.attachment_mime].first
|
|
|
|
filename = "invoice_#{@invoice.id}_attachment.#{type.preferred_extension}"
|
|
|
|
send_data(@invoice.attachment_data, :filename => filename, :type => type)
|
|
|
|
end
|
|
|
|
|
2016-02-17 21:07:35 +01:00
|
|
|
private
|
|
|
|
|
|
|
|
def find_invoice
|
|
|
|
@invoice = Invoice.find(params[:id])
|
|
|
|
end
|
|
|
|
|
|
|
|
# Returns true if @current_user can edit the invoice..
|
|
|
|
def ensure_can_edit
|
|
|
|
unless @invoice.user_can_edit?(current_user)
|
|
|
|
deny_access
|
|
|
|
end
|
|
|
|
end
|
2009-01-08 16:33:27 +01:00
|
|
|
end
|