Merge pull request #1939 from internetee/1937-lhv-connect-check-invoices-marked-paid-by-admin

added test for transaction with binded invoice which already paid
This commit is contained in:
Timo Võhmar 2021-04-29 20:59:08 +03:00 committed by GitHub
commit f7455008c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 131 additions and 12 deletions

View file

@ -20,6 +20,18 @@ module Admin
end
end
def cancel_paid
invoice_id = params[:invoice_id]
invoice = Invoice.find(invoice_id)
if account_activity_with_negative_sum(invoice)
flash[:notice] = t(:payment_was_cancelled)
else
flash[:alert] = t(:failed_to_payment_cancel)
end
redirect_to admin_invoices_path
end
def index
@q = Invoice.includes(:account_activity).search(params[:q])
@q.sorts = 'number desc' if @q.sorts.empty?
@ -43,5 +55,21 @@ module Admin
def deposit_params
params.require(:deposit).permit(:amount, :description, :registrar_id)
end
def account_activity_with_negative_sum(invoice)
account_activity = AccountActivity.find_by(invoice_id: invoice.id)
account_activity_dup = account_activity.dup
account_activity_dup.sum = -account_activity.sum.to_i
account_activity_dup.save
account_activity.update(invoice_id: nil)
account_activity_dup.update(invoice_id: nil)
mark_cancelled_payment_order(invoice)
account_activity.save && account_activity_dup.save
end
def mark_cancelled_payment_order(invoice)
payment_order = invoice.payment_orders.last
payment_order.update(notes: 'Cancelled')
end
end
end

View file

@ -1,5 +1,6 @@
class BankTransaction < ApplicationRecord
include Versions
include TransactionPaidInvoices
belongs_to :bank_statement
has_one :account_activity
@ -17,16 +18,6 @@ class BankTransaction < ApplicationRecord
account_activity.invoice
end
def invoice
return unless registrar
@invoice ||= registrar.invoices
.order(created_at: :asc)
.unpaid
.non_cancelled
.find_by(total: sum)
end
def registrar
@registrar ||= Invoice.find_by(reference_no: parsed_ref_number)&.buyer
end

View file

@ -0,0 +1,37 @@
module TransactionPaidInvoices
extend ActiveSupport::Concern
def invoice
return unless registrar
@invoice ||= registrar.invoices
.order(created_at: :asc)
.unpaid
.non_cancelled
.find_by(total: sum)
end
def non_canceled?
paid_invoices = registrar.invoices
.order(created_at: :asc)
.non_cancelled
.where(total: sum)
paid_invoices.any? do |invoice|
return true if invoice.paid? && fresh_admin_paid_invoice(invoice)
end
end
private
def fresh_admin_paid_invoice(invoice)
check_for_date_paid_invoice(invoice) && does_invoice_created_by_admin?(invoice)
end
def check_for_date_paid_invoice(invoice)
invoice.account_activity.created_at > Time.zone.today - 2.days
end
def does_invoice_created_by_admin?(invoice)
invoice.account_activity.creator_str&.include? 'Admin'
end
end

View file

@ -6,6 +6,10 @@
%h1.text-right.text-center-xs
- if @invoice.unpaid?
= link_to(t(:payment_received), new_admin_bank_statement_path(invoice_id: @invoice.id), class: 'btn btn-default')
- if @invoice.paid? and !@invoice.cancelled?
= link_to(t(:cancel_payment), cancel_paid_admin_invoices_path(invoice_id: @invoice.id), method: 'post', data: { confirm: t(:are_you_sure) }, class: 'btn btn-warning')
= link_to(t('.download_btn'), download_admin_invoice_path(@invoice), class: 'btn btn-default')
= link_to(t('.deliver_btn'), new_admin_invoice_delivery_path(@invoice), class: 'btn btn-default')
- if @invoice.cancellable?