mirror of
https://github.com/internetee/registry.git
synced 2025-07-25 03:58:27 +02:00
Binding interface for bank statements
This commit is contained in:
parent
2dfa65645b
commit
851e5368eb
15 changed files with 113 additions and 26 deletions
|
@ -1,7 +1,7 @@
|
|||
class Admin::BankStatementsController < AdminController
|
||||
load_and_authorize_resource
|
||||
|
||||
before_action :set_bank_statement, only: [:show, :download_import_file]
|
||||
before_action :set_bank_statement, only: [:show, :download_import_file, :bind_invoices]
|
||||
|
||||
def index
|
||||
@q = BankStatement.search(params[:q])
|
||||
|
@ -10,7 +10,8 @@ class Admin::BankStatementsController < AdminController
|
|||
end
|
||||
|
||||
def show
|
||||
@q = @bank_statement.bank_transactions.search(params[:q])
|
||||
@q = @bank_statement.bank_transactions.includes(:account_activity).search(params[:q])
|
||||
@q.sorts = 'account_activity_id desc' if @q.sorts.empty?
|
||||
@bank_transactions = @q.result.page(params[:page])
|
||||
end
|
||||
|
||||
|
@ -30,6 +31,16 @@ class Admin::BankStatementsController < AdminController
|
|||
end
|
||||
end
|
||||
|
||||
def bind_invoices
|
||||
@bank_statement.bind_invoices
|
||||
|
||||
flash[:notice] = t('invoices_were_fully_binded') if @bank_statement.fully_binded?
|
||||
flash[:warning] = t('invoices_were_partially_binded') if @bank_statement.partially_binded?
|
||||
flash[:alert] = t('no_invoices_were_binded') if @bank_statement.not_binded?
|
||||
|
||||
redirect_to [:admin, @bank_statement]
|
||||
end
|
||||
|
||||
def download_import_file
|
||||
filename = @bank_statement.import_file_path.split('/').last
|
||||
send_data File.open(@bank_statement.import_file_path, 'r').read, filename: filename
|
||||
|
|
|
@ -5,6 +5,10 @@ class BankStatement < ActiveRecord::Base
|
|||
|
||||
validates :bank_code, :iban, :queried_at, presence: true
|
||||
|
||||
FULLY_BINDED = 'fully_binded'
|
||||
PARTIALLY_BINDED = 'partially_binded'
|
||||
NOT_BINDED = 'not_binded'
|
||||
|
||||
def import
|
||||
import_th6_file && save
|
||||
end
|
||||
|
@ -50,7 +54,30 @@ class BankStatement < ActiveRecord::Base
|
|||
nil
|
||||
end
|
||||
|
||||
def bind_with_invoices
|
||||
bank_transactions.unbinded.each(&:bind_with_invoice)
|
||||
# TODO: Cache this to database so it can be used for searching
|
||||
def status
|
||||
if bank_transactions.unbinded.count == bank_transactions.count
|
||||
NOT_BINDED
|
||||
elsif bank_transactions.unbinded.count == 0
|
||||
FULLY_BINDED
|
||||
else
|
||||
PARTIALLY_BINDED
|
||||
end
|
||||
end
|
||||
|
||||
def not_binded?
|
||||
status == NOT_BINDED
|
||||
end
|
||||
|
||||
def partially_binded?
|
||||
status == PARTIALLY_BINDED
|
||||
end
|
||||
|
||||
def fully_binded?
|
||||
status == FULLY_BINDED
|
||||
end
|
||||
|
||||
def bind_invoices
|
||||
bank_transactions.unbinded.each(&:bind_invoice)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -8,10 +8,15 @@ class BankTransaction < ActiveRecord::Base
|
|||
account_activity.present?
|
||||
end
|
||||
|
||||
def binded_invoice
|
||||
return unless binded?
|
||||
account_activity.invoice
|
||||
end
|
||||
|
||||
# For successful binding, reference number, invoice id and sum must match with the invoice
|
||||
# rubocop: disable Metrics/PerceivedComplexity
|
||||
# rubocop: disable Metrics/CyclomaticComplexity
|
||||
def bind_with_invoice
|
||||
def bind_invoice
|
||||
return if binded?
|
||||
registrar = Registrar.find_by(reference_no: reference_no)
|
||||
return unless registrar
|
||||
|
|
|
@ -7,6 +7,10 @@ class Invoice < ActiveRecord::Base
|
|||
validates :invoice_type, :due_date, :currency, :seller_name,
|
||||
:seller_iban, :buyer_name, :invoice_items, :vat_prc, presence: true
|
||||
|
||||
def to_s
|
||||
I18n.t('invoice_no', no: id)
|
||||
end
|
||||
|
||||
def seller_address
|
||||
[seller_street, seller_city, seller_state, seller_zip].reject(&:blank?).compact.join(', ')
|
||||
end
|
||||
|
|
|
@ -11,18 +11,25 @@
|
|||
%table.table.table-hover.table-bordered.table-condensed
|
||||
%thead
|
||||
%tr
|
||||
%th{class: 'col-xs-2'}
|
||||
%th{class: 'col-xs-3'}
|
||||
= sort_link(@q, 'created_at', t('imported_at'))
|
||||
%th{class: 'col-xs-2'}
|
||||
%th{class: 'col-xs-3'}
|
||||
= sort_link(@q, 'bank_code')
|
||||
%th{class: 'col-xs-2'}
|
||||
%th{class: 'col-xs-3'}
|
||||
= sort_link(@q, 'iban', t('iban').upcase)
|
||||
/ TODO: Make this searchable by caching the status to the database
|
||||
%th{class: 'col-xs-3'}
|
||||
= t('status')
|
||||
%tbody
|
||||
- @bank_statements.each do |x|
|
||||
%tr
|
||||
%td= link_to(l(x.created_at), admin_bank_statement_path(x))
|
||||
%td= x.bank_code
|
||||
%td= x.iban
|
||||
- sc = 'text-success' if x.status == BankStatement::FULLY_BINDED
|
||||
- sc = 'text-warning' if x.status == BankStatement::PARTIALLY_BINDED
|
||||
- sc = 'text-danger' if x.status == BankStatement::NOT_BINDED
|
||||
%td{class: sc}= t(x.status)
|
||||
.row
|
||||
.col-md-12
|
||||
= paginate @bank_statements
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
%h2.text-center-xs= t('bank_statement')
|
||||
.col-sm-6
|
||||
%h2.text-right.text-center-xs
|
||||
= link_to(t('bind_with_invoices'), '#', class: 'btn btn-primary')
|
||||
= link_to(t('bind_invoices'), bind_invoices_admin_bank_statement_path, class: 'btn btn-primary', method: :post)
|
||||
= link_to(t('back_to_bank_statements'), admin_bank_statements_path, class: 'btn btn-default')
|
||||
%hr
|
||||
%row
|
||||
|
@ -16,9 +16,15 @@
|
|||
%dt= t('bank_code')
|
||||
%dd= @bank_statement.bank_code
|
||||
|
||||
%dt= t('iban').upcase
|
||||
%dt= t('iban')
|
||||
%dd= @bank_statement.iban
|
||||
|
||||
%dt= t('status')
|
||||
- sc = 'text-success' if @bank_statement.status == BankStatement::FULLY_BINDED
|
||||
- sc = 'text-warning' if @bank_statement.status == BankStatement::PARTIALLY_BINDED
|
||||
- sc = 'text-danger' if @bank_statement.status == BankStatement::NOT_BINDED
|
||||
%dd{class: sc}= t(@bank_statement.status)
|
||||
|
||||
%dt= t('queried_at')
|
||||
%dd= l(@bank_statement.queried_at)
|
||||
|
||||
|
@ -46,7 +52,7 @@
|
|||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'currency')
|
||||
%th{class: 'col-xs-2'}
|
||||
= sort_link(@q, 'account_activity', t('status'))
|
||||
= sort_link(@q, 'account_activity_id', t('status'))
|
||||
%tbody
|
||||
- @bank_transactions.each do |x|
|
||||
%tr
|
||||
|
@ -54,10 +60,8 @@
|
|||
%td= x.buyer_name
|
||||
%td= x.sum
|
||||
%td= x.currency
|
||||
%td
|
||||
- c = x.binded? ? 'label-success' : 'label-danger'
|
||||
%span.label{class: c}= x.binded? ? t('binded') : t('not_binded')
|
||||
|
||||
- c = x.binded? ? 'text-success' : 'text-danger'
|
||||
%td{class: c}= x.binded? ? t('binded') : t('not_binded')
|
||||
.row
|
||||
.col-md-12
|
||||
= paginate @bank_transactions
|
||||
|
|
|
@ -16,6 +16,14 @@
|
|||
%dt= t('document_no')
|
||||
%dd= @bank_transaction.document_no
|
||||
|
||||
%dt= t('status')
|
||||
- c = @bank_transaction.binded? ? 'text-success' : 'text-danger'
|
||||
%dd{class: c}= @bank_transaction.binded? ? t('binded') : t('not_binded')
|
||||
|
||||
- if @bank_transaction.binded?
|
||||
%dt= t('binded_invoice')
|
||||
%dd= link_to(@bank_transaction.binded_invoice, '#')
|
||||
|
||||
%dt= t('bank_reference')
|
||||
%dd= @bank_transaction.bank_reference
|
||||
|
||||
|
|
|
@ -63,10 +63,7 @@
|
|||
|
||||
/ /.nav-collapse
|
||||
.container
|
||||
- display = (flash.empty?) ? 'none' : 'block'
|
||||
#flash{style: "display: #{display};"}
|
||||
- type = (flash[:notice]) ? 'bg-success' : 'bg-danger'
|
||||
.alert{class: type}= flash[:notice] || flash[:alert]
|
||||
= render 'registrar/shared/flash'
|
||||
= yield
|
||||
|
||||
.footer.text-right
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
- display = (flash[:notice] || flash[:alert]) ? 'block' : 'none'
|
||||
- display = (flash[:notice] || flash[:alert] || flash[:warning]) ? 'block' : 'none'
|
||||
#flash{style: "display: #{display};"}
|
||||
- type = (flash[:notice]) ? 'bg-success' : 'bg-danger'
|
||||
.alert{class: type}= flash[:notice] || flash[:alert]
|
||||
- type = 'bg-warning' if flash[:warning]
|
||||
.alert{class: type}= flash[:notice] || flash[:alert] || flash[:warning]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue