From 3398bcd845b58d23219bf25b105e1068bfdacd59 Mon Sep 17 00:00:00 2001 From: Martin Lensment Date: Mon, 13 Apr 2015 18:36:08 +0300 Subject: [PATCH] Add views for bank items --- .../admin/bank_statements_controller.rb | 36 ++++++++++++++ .../admin/bank_transactions_controller.rb | 7 +++ app/models/ability.rb | 2 + app/models/bank_statement.rb | 47 +++++++++++++++++++ app/models/bank_transaction.rb | 3 ++ app/views/admin/bank_statements/index.haml | 28 +++++++++++ app/views/admin/bank_statements/new.haml | 21 +++++++++ app/views/admin/bank_statements/show.haml | 28 +++++++++++ app/views/admin/bank_transactions/show.haml | 44 +++++++++++++++++ config/locales/en.yml | 8 ++++ config/routes.rb | 3 ++ ...0150410132037_create_account_activities.rb | 2 +- ...20150413080832_create_bank_transactions.rb | 14 +++--- .../20150413102310_create_bank_statements.rb | 7 ++- db/migrate/bank_statements.rb | 0 db/schema.rb | 20 ++++---- 16 files changed, 248 insertions(+), 22 deletions(-) create mode 100644 app/controllers/admin/bank_statements_controller.rb create mode 100644 app/controllers/admin/bank_transactions_controller.rb create mode 100644 app/models/bank_statement.rb create mode 100644 app/models/bank_transaction.rb create mode 100644 app/views/admin/bank_statements/index.haml create mode 100644 app/views/admin/bank_statements/new.haml create mode 100644 app/views/admin/bank_statements/show.haml create mode 100644 app/views/admin/bank_transactions/show.haml create mode 100644 db/migrate/bank_statements.rb diff --git a/app/controllers/admin/bank_statements_controller.rb b/app/controllers/admin/bank_statements_controller.rb new file mode 100644 index 000000000..1997e88cb --- /dev/null +++ b/app/controllers/admin/bank_statements_controller.rb @@ -0,0 +1,36 @@ +class Admin::BankStatementsController < AdminController + load_and_authorize_resource + + def index + @q = BankStatement.search(params[:q]) + @bank_statements = @q.result.page(params[:page]) + end + + def show + @bank_statement = BankStatement.find(params[:id]) + @q = @bank_statement.bank_transactions.search(params[:q]) + @bank_transactions = @q.result.page(params[:page]) + end + + def new + @bank_statement = BankStatement.new + end + + def create + @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 + + private + + def bank_statement_params + params.require(:bank_statement).permit(:th6_file) + end +end diff --git a/app/controllers/admin/bank_transactions_controller.rb b/app/controllers/admin/bank_transactions_controller.rb new file mode 100644 index 000000000..ee5ed809e --- /dev/null +++ b/app/controllers/admin/bank_transactions_controller.rb @@ -0,0 +1,7 @@ +class Admin::BankTransactionsController < AdminController + load_and_authorize_resource + + def show + + end +end diff --git a/app/models/ability.rb b/app/models/ability.rb index ecd4acc55..c53bd48d4 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -81,6 +81,8 @@ class Ability can :manage, Certificate can :manage, Keyrelay can :manage, LegalDocument + can :manage, BankStatement + can :manage, BankTransaction can :read, ApiLog::EppLog can :read, ApiLog::ReppLog # can :index, :delayed_job diff --git a/app/models/bank_statement.rb b/app/models/bank_statement.rb new file mode 100644 index 000000000..daf62943f --- /dev/null +++ b/app/models/bank_statement.rb @@ -0,0 +1,47 @@ +class BankStatement < ActiveRecord::Base + has_many :bank_transactions + + attr_accessor :th6_file + + 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 + 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.new(row[268, 12].strip) / BigDecimal.new('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 +end diff --git a/app/models/bank_transaction.rb b/app/models/bank_transaction.rb new file mode 100644 index 000000000..5d2b8bd7d --- /dev/null +++ b/app/models/bank_transaction.rb @@ -0,0 +1,3 @@ +class BankTransaction < ActiveRecord::Base + belongs_to :bank_statement +end diff --git a/app/views/admin/bank_statements/index.haml b/app/views/admin/bank_statements/index.haml new file mode 100644 index 000000000..5304a0409 --- /dev/null +++ b/app/views/admin/bank_statements/index.haml @@ -0,0 +1,28 @@ +.row + .col-sm-6 + %h2.text-center-xs= t('bank_statements') + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('import'), new_admin_bank_statement_path, class: 'btn btn-primary') +%hr +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + = sort_link(@q, 'created_at', t('imported_at')) + %th{class: 'col-xs-2'} + = sort_link(@q, 'bank_code') + %th{class: 'col-xs-2'} + = sort_link(@q, 'iban', t('iban').upcase) + %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 +.row + .col-md-12 + = paginate @bank_statements diff --git a/app/views/admin/bank_statements/new.haml b/app/views/admin/bank_statements/new.haml new file mode 100644 index 000000000..53558ed0c --- /dev/null +++ b/app/views/admin/bank_statements/new.haml @@ -0,0 +1,21 @@ +.row + .col-sm-6 + %h2.text-center-xs= t('import_th6_bank_statement') + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('back_to_bank_statements'), admin_bank_statements_path, class: 'btn btn-primary') + +%hr += form_for([:admin, @bank_statement], multipart: true) do |f| + = render 'shared/full_errors', object: @bank_statement + + .row + .col-md-12.text-left + .form-group + = f.label :th6_file + = f.file_field :th6_file + %hr + .row + .col-md-12.text-right + = button_tag(t('save'), class: 'btn btn-primary') + diff --git a/app/views/admin/bank_statements/show.haml b/app/views/admin/bank_statements/show.haml new file mode 100644 index 000000000..97d4eee63 --- /dev/null +++ b/app/views/admin/bank_statements/show.haml @@ -0,0 +1,28 @@ +.row + .col-sm-6 + %h2.text-center-xs= t('bank_statement') + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('back_to_bank_statements'), admin_bank_statements_path, class: 'btn btn-primary') +%hr +.row + .col-md-12 + .table-responsive + %table.table.table-hover.table-bordered.table-condensed + %thead + %tr + %th{class: 'col-xs-2'} + = sort_link(@q, 'buyer_name') + %th{class: 'col-xs-2'} + = sort_link(@q, 'paid_at') + %th{class: 'col-xs-2'} + = sort_link(@q, 'sum', t('sum')) + %tbody + - @bank_transactions.each do |x| + %tr + %td= link_to(x.buyer_name, [:admin, x]) + %td= l(x.paid_at) + %td= x.sum +.row + .col-md-12 + = paginate @bank_transactions diff --git a/app/views/admin/bank_transactions/show.haml b/app/views/admin/bank_transactions/show.haml new file mode 100644 index 000000000..eab236966 --- /dev/null +++ b/app/views/admin/bank_transactions/show.haml @@ -0,0 +1,44 @@ +.row + .col-sm-6 + %h2.text-center-xs + = t('bank_transaction') + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('back_to_bank_statement'), admin_bank_statement_path(@bank_transaction.bank_statement), class: 'btn btn-primary') +%hr +%row + .col-md-12 +.panel.panel-default + .panel-heading + %h3.panel-title= t(:details) + .panel-body + %dl.dl-horizontal + %dt= t('bank_reference') + %dd= @bank_transaction.bank_reference + + %dt= t('iban').upcase + %dd= @bank_transaction.iban + + %dt= t('currency') + %dd= @bank_transaction.currency + + %dt= t('buyer_bank_code') + %dd= @bank_transaction.buyer_bank_code + + %dt= t('buyer_iban') + %dd= @bank_transaction.buyer_iban + + %dt= t('buyer_name') + %dd= @bank_transaction.buyer_name + + %dt= t('document_no') + %dd= @bank_transaction.document_no + + %dt= t('description') + %dd= @bank_transaction.description + + %dt= t('sum') + %dd= @bank_transaction.sum + + %dt= t('reference_no') + %dd= @bank_transaction.reference_no diff --git a/config/locales/en.yml b/config/locales/en.yml index 2dab06488..e24adad24 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -671,3 +671,11 @@ en: total_without_vat: 'Total without VAT' 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' + imported_at: 'Imported at' + bank_statement: 'Bank statement' + bank_transaction: 'Bank transaction' + sum: 'Sum' diff --git a/config/routes.rb b/config/routes.rb index f5cb5fca1..a8761dbb0 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -85,6 +85,9 @@ Rails.application.routes.draw do resources :keyrelays + resources :bank_statements + resources :bank_transactions + resources :domains do resources :domain_versions end diff --git a/db/migrate/20150410132037_create_account_activities.rb b/db/migrate/20150410132037_create_account_activities.rb index 4ccba49df..a5a5d81e6 100644 --- a/db/migrate/20150410132037_create_account_activities.rb +++ b/db/migrate/20150410132037_create_account_activities.rb @@ -3,7 +3,7 @@ class CreateAccountActivities < ActiveRecord::Migration create_table :account_activites do |t| t.integer :account_id t.integer :invoice_id - t.decimal :amount + t.decimal :sum t.string :currency t.integer :bank_transaction_id diff --git a/db/migrate/20150413080832_create_bank_transactions.rb b/db/migrate/20150413080832_create_bank_transactions.rb index 392833b7b..fad780006 100644 --- a/db/migrate/20150413080832_create_bank_transactions.rb +++ b/db/migrate/20150413080832_create_bank_transactions.rb @@ -2,19 +2,21 @@ class CreateBankTransactions < ActiveRecord::Migration def change create_table :bank_transactions do |t| t.integer :bank_statement_id - t.string :subject_code + # t.string :subject_code (VV) # record_code # kirjetunnus - ei kasuta? # impordime ainult tehingud nagunii t.string :bank_reference # panga viide - t.string :tr_code # tehingu liik (MK / MV) + # t.string :tr_code # tehingu liik (MK / MV) t.string :iban # own bank account no. t.string :currency - t.string :other_party_bank - t.string :other_party_name - t.string :doc_no + t.string :buyer_bank_code + t.string :buyer_iban + t.string :buyer_name + t.string :document_no t.string :description #tr_type # C/D # impordime ainult cre nagunii - t.decimal :amount + t.decimal :sum t.string :reference_no + t.datetime :paid_at t.timestamps end diff --git a/db/migrate/20150413102310_create_bank_statements.rb b/db/migrate/20150413102310_create_bank_statements.rb index fba842ac8..dd4b895b2 100644 --- a/db/migrate/20150413102310_create_bank_statements.rb +++ b/db/migrate/20150413102310_create_bank_statements.rb @@ -1,12 +1,11 @@ class CreateBankStatements < ActiveRecord::Migration def change create_table :bank_statements do |t| - t.string :subject_code + # t.string :subject_code t.string :bank_code - t.string :account_number - t.date :date - t.time :time + t.string :iban t.string :import_file_path + t.datetime :queried_at t.timestamps end diff --git a/db/migrate/bank_statements.rb b/db/migrate/bank_statements.rb new file mode 100644 index 000000000..e69de29bb diff --git a/db/schema.rb b/db/schema.rb index 340f252ee..50aaa5641 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -19,7 +19,7 @@ ActiveRecord::Schema.define(version: 20150413115829) do create_table "account_activites", force: :cascade do |t| t.integer "account_id" t.integer "invoice_id" - t.decimal "amount" + t.decimal "sum" t.string "currency" t.integer "bank_transaction_id" t.datetime "created_at" @@ -64,29 +64,27 @@ ActiveRecord::Schema.define(version: 20150413115829) do end create_table "bank_statements", force: :cascade do |t| - t.string "subject_code" t.string "bank_code" - t.string "account_number" - t.date "date" - t.time "time" + t.string "iban" t.string "import_file_path" + t.datetime "queried_at" t.datetime "created_at" t.datetime "updated_at" end create_table "bank_transactions", force: :cascade do |t| t.integer "bank_statement_id" - t.string "subject_code" t.string "bank_reference" - t.string "tr_code" t.string "iban" t.string "currency" - t.string "other_party_bank" - t.string "other_party_name" - t.string "doc_no" + t.string "buyer_bank_code" + t.string "buyer_iban" + t.string "buyer_name" + t.string "document_no" t.string "description" - t.decimal "amount" + t.decimal "sum" t.string "reference_no" + t.datetime "paid_at" t.datetime "created_at" t.datetime "updated_at" end