Merge pull request #1674 from internetee/1556-get-rid-of-th6

Remove bank statement (TH6) import functionality
This commit is contained in:
Timo Võhmar 2020-09-08 16:54:13 +03:00 committed by GitHub
commit e14bdc987b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 62 additions and 122 deletions

View file

@ -2,7 +2,7 @@ module Admin
class BankStatementsController < BaseController
load_and_authorize_resource
before_action :set_bank_statement, only: [:show, :download_import_file, :bind_invoices]
before_action :set_bank_statement, only: %i[show bind_invoices]
def index
@q = BankStatement.search(params[:q])
@ -43,22 +43,6 @@ module Admin
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
@bank_statement.bind_invoices(manual: true)
@ -69,11 +53,6 @@ module Admin
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
end
private
def set_bank_statement
@ -81,7 +60,7 @@ module Admin
end
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
])
end

View file

@ -4,70 +4,17 @@ class BankStatement < ApplicationRecord
accepts_nested_attributes_for :bank_transactions
attr_accessor :th6_file
validates :bank_code, :iban, presence: true
FULLY_BINDED = 'fully_binded'
PARTIALLY_BINDED = 'partially_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
FULLY_BINDED = 'fully_binded'.freeze
PARTIALLY_BINDED = 'partially_binded'.freeze
NOT_BINDED = 'not_binded'.freeze
# 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
elsif bank_transactions.unbinded.count.zero?
FULLY_BINDED
else
PARTIALLY_BINDED

View file

@ -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')

View file

@ -1,6 +1,5 @@
- content_for :actions do
= 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)
.row

View file

@ -30,10 +30,6 @@
%dt= t(: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
.col-sm-6
%h3.text-center-xs

View file

@ -27,7 +27,6 @@ smtp_authentication: 'plain' # 'plain', 'login', 'cram_md5'
#
app_name: '.EE Registry'
zonefile_export_dir: 'export/zonefiles'
bank_statement_import_dir: 'import/bank_statements'
legal_documents_dir: 'import/legal_documents'
time_zone: 'Tallinn' # more zones by rake time:zones:all

View file

@ -466,7 +466,6 @@ en:
paid_at: 'Paid at'
invoice: 'Invoice'
bank_statements: 'Bank statements'
import_th6_bank_statement: 'Import TH6 bank statement'
back_to_bank_statements: 'Back to bank statements'
back_to_bank_statement: 'Back to bank statement'
back_to_billing: 'Back to billing'
@ -583,7 +582,6 @@ en:
valid: Valid
object_is_not_eligible_for_renewal: 'Object is not eligible for renewal'
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_transaction: 'Create bank transaction'
create_new_invoice: 'Create new invoice'

View file

@ -213,13 +213,7 @@ Rails.application.routes.draw do
resources :bank_statements do
resources :bank_transactions
collection do
get 'import'
post 'create_from_import'
end
post 'bind_invoices', on: :member
get 'download_import_file', on: :member
end
resources :bank_transactions do

View file

@ -0,0 +1,9 @@
class RemoveImportFilePathFromBankStatements < ActiveRecord::Migration[6.0]
def up
remove_column :bank_statements, :import_file_path
end
def down
add_column :bank_statements, :import_file_path, :string
end
end

View file

@ -371,7 +371,6 @@ CREATE TABLE public.bank_statements (
id integer NOT NULL,
bank_code character varying,
iban character varying,
import_file_path character varying,
queried_at timestamp without time zone,
created_at timestamp without time zone,
updated_at timestamp without time zone,
@ -4850,4 +4849,7 @@ INSERT INTO "schema_migrations" (version) VALUES
('20200807110611'),
('20200811074839'),
('20200812090409'),
('20200812125810');
('20200812125810'),
('20200908131554');

View file

@ -6,11 +6,48 @@ class AdminAreaBankStatementTest < ApplicationSystemTestCase
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
def test_can_create_statement_manually
create_bank_statement
assert_text 'Record created'
end
def test_can_add_transaction_to_statement_manually
create_bank_statement
click_link_or_button 'Add'
assert_text 'Create bank transaction'
fill_in 'Description', with: 'Invoice with id 123'
fill_in 'Reference number', with: '1232'
fill_in 'Sum', with: '500'
fill_in 'Paid at', with: Time.zone.today.to_s
click_link_or_button 'Save'
assert_text 'Record created'
end
def test_can_bind_statement_transactions
registrar = registrars(:bestnames)
registrar.issue_prepayment_invoice(amount: 500)
invoice = registrar.invoices.last
create_bank_statement
click_link_or_button 'Add'
assert_text 'Create bank transaction'
fill_in 'Description', with: "Invoice with id #{invoice.number}"
fill_in 'Reference number', with: invoice.reference_no
fill_in 'Sum', with: invoice.total
fill_in 'Paid at', with: Time.zone.today.to_s
click_link_or_button 'Save'
click_link_or_button 'Back to bank statement'
click_link_or_button 'Bind invoices'
assert_text 'Invoices were fully binded'
end
def create_bank_statement
visit admin_bank_statements_path
click_link_or_button 'Add'
click_link_or_button 'Save'
end
end