mirror of
https://github.com/internetee/registry.git
synced 2025-06-11 07:04:47 +02:00
Remove bank statement import functionality
This commit is contained in:
parent
bfa60a9c17
commit
aa2d9547a4
8 changed files with 2 additions and 125 deletions
|
@ -2,7 +2,7 @@ module Admin
|
||||||
class BankStatementsController < BaseController
|
class BankStatementsController < BaseController
|
||||||
load_and_authorize_resource
|
load_and_authorize_resource
|
||||||
|
|
||||||
before_action :set_bank_statement, only: [:show, :download_import_file, :bind_invoices]
|
before_action :set_bank_statement, only: [:show, :bind_invoices]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@q = BankStatement.search(params[:q])
|
@q = BankStatement.search(params[:q])
|
||||||
|
@ -43,22 +43,6 @@ module Admin
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def import
|
|
||||||
@bank_statement = BankStatement.new
|
|
||||||
end
|
|
||||||
|
|
||||||
def create_from_import
|
|
||||||
@bank_statement = BankStatement.new(bank_statement_params)
|
|
||||||
|
|
||||||
if @bank_statement.import
|
|
||||||
flash[:notice] = I18n.t('record_created')
|
|
||||||
redirect_to [:admin, @bank_statement]
|
|
||||||
else
|
|
||||||
flash.now[:alert] = I18n.t('failed_to_create_record')
|
|
||||||
render 'new'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
def bind_invoices
|
def bind_invoices
|
||||||
@bank_statement.bind_invoices(manual: true)
|
@bank_statement.bind_invoices(manual: true)
|
||||||
|
|
||||||
|
@ -69,11 +53,6 @@ module Admin
|
||||||
redirect_to [:admin, @bank_statement]
|
redirect_to [:admin, @bank_statement]
|
||||||
end
|
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
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def set_bank_statement
|
def set_bank_statement
|
||||||
|
@ -81,7 +60,7 @@ module Admin
|
||||||
end
|
end
|
||||||
|
|
||||||
def bank_statement_params
|
def bank_statement_params
|
||||||
params.require(:bank_statement).permit(:th6_file, :bank_code, :iban, bank_transactions_attributes: [
|
params.require(:bank_statement).permit(:bank_code, :iban, bank_transactions_attributes: [
|
||||||
:description, :sum, :currency, :reference_no, :paid_at
|
:description, :sum, :currency, :reference_no, :paid_at
|
||||||
])
|
])
|
||||||
end
|
end
|
||||||
|
|
|
@ -4,65 +4,12 @@ class BankStatement < ApplicationRecord
|
||||||
|
|
||||||
accepts_nested_attributes_for :bank_transactions
|
accepts_nested_attributes_for :bank_transactions
|
||||||
|
|
||||||
attr_accessor :th6_file
|
|
||||||
|
|
||||||
validates :bank_code, :iban, presence: true
|
validates :bank_code, :iban, presence: true
|
||||||
|
|
||||||
FULLY_BINDED = 'fully_binded'
|
FULLY_BINDED = 'fully_binded'
|
||||||
PARTIALLY_BINDED = 'partially_binded'
|
PARTIALLY_BINDED = 'partially_binded'
|
||||||
NOT_BINDED = 'not_binded'
|
NOT_BINDED = 'not_binded'
|
||||||
|
|
||||||
def import
|
|
||||||
import_th6_file && save
|
|
||||||
end
|
|
||||||
|
|
||||||
def import_th6_file
|
|
||||||
return false unless th6_file
|
|
||||||
|
|
||||||
th6_file.open.each_line do |row|
|
|
||||||
bt_params = parse_th6_row(row)
|
|
||||||
next unless bt_params
|
|
||||||
bank_transactions.build(bt_params)
|
|
||||||
end
|
|
||||||
|
|
||||||
prepare_dir
|
|
||||||
self.import_file_path = "#{ENV['bank_statement_import_dir']}/#{Time.zone.now.to_formatted_s(:number)}.txt"
|
|
||||||
File.open(import_file_path, 'w') { |f| f.write(th6_file.open.read) }
|
|
||||||
end
|
|
||||||
|
|
||||||
def prepare_dir
|
|
||||||
dirname = ENV['bank_statement_import_dir']
|
|
||||||
FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_th6_row(row)
|
|
||||||
return parse_th6_header(row) if row[4, 3].strip == '000'
|
|
||||||
return if row[4, 3].strip == '999' # skip footer
|
|
||||||
return unless row[4, 1].strip == '1' # import only transactions
|
|
||||||
return unless row[266, 2].strip == 'C' # import only Credit transactions
|
|
||||||
|
|
||||||
{
|
|
||||||
paid_at: DateTime.strptime(row[5, 8].strip, '%Y%m%d'),
|
|
||||||
bank_reference: row[5, 16].strip,
|
|
||||||
iban: row[25, 20].strip,
|
|
||||||
currency: row[45, 3].strip,
|
|
||||||
buyer_bank_code: row[48, 3].strip,
|
|
||||||
buyer_iban: row[51, 32].strip,
|
|
||||||
buyer_name: row[83, 35].strip,
|
|
||||||
document_no: row[118, 8].strip,
|
|
||||||
description: row[126, 140].strip,
|
|
||||||
sum: BigDecimal(row[268, 12].strip) / BigDecimal('100.0'),
|
|
||||||
reference_no: row[280, 35].strip
|
|
||||||
}
|
|
||||||
end
|
|
||||||
|
|
||||||
def parse_th6_header(row)
|
|
||||||
self.bank_code = row[7, 3].strip
|
|
||||||
self.iban = row[10, 20].strip
|
|
||||||
self.queried_at = DateTime.strptime(row[30, 10].strip, '%y%m%d%H%M')
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
# TODO: Cache this to database so it can be used for searching
|
# TODO: Cache this to database so it can be used for searching
|
||||||
def status
|
def status
|
||||||
if bank_transactions.unbinded.count == bank_transactions.count
|
if bank_transactions.unbinded.count == bank_transactions.count
|
||||||
|
|
|
@ -1,20 +0,0 @@
|
||||||
- content_for :actions do
|
|
||||||
= link_to(t(:back_to_bank_statements), admin_bank_statements_path, class: 'btn btn-default')
|
|
||||||
= render 'shared/title', name: t(:import_th6_bank_statement)
|
|
||||||
|
|
||||||
= form_for(@bank_statement, url: { action: :create_from_import }, multipart: true) do |f|
|
|
||||||
= render 'shared/full_errors', object: @bank_statement
|
|
||||||
|
|
||||||
.row
|
|
||||||
.col-md-8
|
|
||||||
.form-group
|
|
||||||
.col-md-4.control-label
|
|
||||||
= f.label :th6_file
|
|
||||||
.col-md-8
|
|
||||||
= f.file_field :th6_file
|
|
||||||
.col-md-4
|
|
||||||
%p= t(:bank_statement_desc).html_safe
|
|
||||||
%hr
|
|
||||||
.row
|
|
||||||
.col-md-8.text-right
|
|
||||||
= button_tag(t(:save), class: 'btn btn-primary')
|
|
|
@ -1,6 +1,5 @@
|
||||||
- content_for :actions do
|
- content_for :actions do
|
||||||
= link_to(t(:add), new_admin_bank_statement_path, class: 'btn btn-primary')
|
= link_to(t(:add), new_admin_bank_statement_path, class: 'btn btn-primary')
|
||||||
= link_to(t('.import_btn'), import_admin_bank_statements_path, class: 'btn btn-primary')
|
|
||||||
= render 'shared/title', name: t(:bank_statements)
|
= render 'shared/title', name: t(:bank_statements)
|
||||||
|
|
||||||
.row
|
.row
|
||||||
|
|
|
@ -30,10 +30,6 @@
|
||||||
%dt= t(:created_at)
|
%dt= t(:created_at)
|
||||||
%dd= l(@bank_statement.created_at)
|
%dd= l(@bank_statement.created_at)
|
||||||
|
|
||||||
- if @bank_statement.import_file_path
|
|
||||||
%dt= t(:import_file)
|
|
||||||
%dd= link_to(t(:download), download_import_file_admin_bank_statement_path(@bank_statement))
|
|
||||||
|
|
||||||
.row
|
.row
|
||||||
.col-sm-6
|
.col-sm-6
|
||||||
%h3.text-center-xs
|
%h3.text-center-xs
|
||||||
|
|
|
@ -467,7 +467,6 @@ en:
|
||||||
paid_at: 'Paid at'
|
paid_at: 'Paid at'
|
||||||
invoice: 'Invoice'
|
invoice: 'Invoice'
|
||||||
bank_statements: 'Bank statements'
|
bank_statements: 'Bank statements'
|
||||||
import_th6_bank_statement: 'Import TH6 bank statement'
|
|
||||||
back_to_bank_statements: 'Back to bank statements'
|
back_to_bank_statements: 'Back to bank statements'
|
||||||
back_to_bank_statement: 'Back to bank statement'
|
back_to_bank_statement: 'Back to bank statement'
|
||||||
back_to_billing: 'Back to billing'
|
back_to_billing: 'Back to billing'
|
||||||
|
@ -584,7 +583,6 @@ en:
|
||||||
valid: Valid
|
valid: Valid
|
||||||
object_is_not_eligible_for_renewal: 'Object is not eligible for renewal'
|
object_is_not_eligible_for_renewal: 'Object is not eligible for renewal'
|
||||||
object_is_not_holded: 'Object is not holded'
|
object_is_not_holded: 'Object is not holded'
|
||||||
bank_statement_desc: 'Import file row will match only when matching following attributes: <b><br>ref number<br>payment amount<br>invoice number (the first numerical value in comment field)</b>.'
|
|
||||||
create_bank_statement: 'Create bank statement'
|
create_bank_statement: 'Create bank statement'
|
||||||
create_bank_transaction: 'Create bank transaction'
|
create_bank_transaction: 'Create bank transaction'
|
||||||
create_new_invoice: 'Create new invoice'
|
create_new_invoice: 'Create new invoice'
|
||||||
|
|
|
@ -213,13 +213,7 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
resources :bank_statements do
|
resources :bank_statements do
|
||||||
resources :bank_transactions
|
resources :bank_transactions
|
||||||
collection do
|
|
||||||
get 'import'
|
|
||||||
post 'create_from_import'
|
|
||||||
end
|
|
||||||
|
|
||||||
post 'bind_invoices', on: :member
|
post 'bind_invoices', on: :member
|
||||||
get 'download_import_file', on: :member
|
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :bank_transactions do
|
resources :bank_transactions do
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
require 'application_system_test_case'
|
|
||||||
|
|
||||||
class AdminAreaBankStatementTest < ApplicationSystemTestCase
|
|
||||||
setup do
|
|
||||||
sign_in users(:admin)
|
|
||||||
travel_to Time.zone.parse('2010-07-05 00:30:00')
|
|
||||||
end
|
|
||||||
|
|
||||||
def test_import_statement
|
|
||||||
assert_difference 'BankStatement.count', 1 do
|
|
||||||
visit import_admin_bank_statements_path
|
|
||||||
attach_file 'Th6 file', Rails.root.join('test', 'fixtures', 'files', 'bank_statement_test.txt').to_s
|
|
||||||
click_link_or_button 'Save'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Add table
Add a link
Reference in a new issue