diff --git a/app/controllers/admin/bank_statements_controller.rb b/app/controllers/admin/bank_statements_controller.rb index 1e69aa1af..d41d446f3 100644 --- a/app/controllers/admin/bank_statements_controller.rb +++ b/app/controllers/admin/bank_statements_controller.rb @@ -16,7 +16,18 @@ class Admin::BankStatementsController < AdminController end def new - @bank_statement = BankStatement.new + @bank_statement = BankStatement.new( + bank_code: Setting.registry_bank_code, + iban: Setting.registry_iban + ) + @invoice = Invoice.find_by(id: params[:invoice_id]) + @bank_transaction = @bank_statement.bank_transactions.build( + description: @invoice.to_s, + sum: @invoice.sum, + reference_no: @invoice.reference_no, + paid_at: Time.zone.now.to_date, + currency: 'EUR' + ) if @invoice end def create @@ -69,6 +80,8 @@ class Admin::BankStatementsController < AdminController end def bank_statement_params - params.require(:bank_statement).permit(:th6_file, :bank_code, :iban) + params.require(:bank_statement).permit(:th6_file, :bank_code, :iban, bank_transactions_attributes: [ + :description, :sum, :currency, :reference_no, :paid_at + ]) end end diff --git a/app/models/bank_statement.rb b/app/models/bank_statement.rb index 7267b4773..89a5c7d69 100644 --- a/app/models/bank_statement.rb +++ b/app/models/bank_statement.rb @@ -2,6 +2,8 @@ class BankStatement < ActiveRecord::Base include Versions has_many :bank_transactions + accepts_nested_attributes_for :bank_transactions + attr_accessor :th6_file validates :bank_code, :iban, presence: true diff --git a/app/views/admin/bank_statements/_form.haml b/app/views/admin/bank_statements/_form.haml index 158d69e89..9fac97ee8 100644 --- a/app/views/admin/bank_statements/_form.haml +++ b/app/views/admin/bank_statements/_form.haml @@ -13,6 +13,35 @@ = f.label :iban .col-md-8 = f.text_field(:iban, class: 'form-control') + + - if @invoice + %hr + %h4= t('bank_transaction') + %hr + = f.fields_for :bank_transactions, [@bank_transaction] do |x| + .row + .col-md-8 + .form-group + = x.label :description, class: 'col-md-4 control-label required' + .col-md-8 + = x.text_field(:description, class: 'form-control', required: true) + .form-group + = x.label :sum, class: 'col-md-4 control-label required' + .col-md-8 + = x.text_field(:sum, class: 'form-control', required: true) + .form-group + = x.label :currency, class: 'col-md-4 control-label required' + .col-md-8 + = x.text_field(:currency, class: 'form-control', required: true, readonly: true) + .form-group + = x.label :reference_no, class: 'col-md-4 control-label required' + .col-md-8 + = x.text_field(:reference_no, class: 'form-control', required: true) + .form-group + = x.label :paid_at, class: 'col-md-4 control-label required' + .col-md-8 + = x.text_field(:paid_at, class: 'form-control datepicker', required: true) + %hr .row .col-md-8.text-right diff --git a/app/views/admin/bank_transactions/new.haml b/app/views/admin/bank_transactions/new.haml index 403eb415e..c2acb0c79 100644 --- a/app/views/admin/bank_transactions/new.haml +++ b/app/views/admin/bank_transactions/new.haml @@ -1,5 +1,6 @@ - content_for :actions do - = link_to(t(:back), admin_bank_statement_path(@bank_statement), class: 'btn btn-default') + - if @bank_statement.persisted? + = link_to(t(:back), admin_bank_statement_path(@bank_statement), class: 'btn btn-default') = render 'shared/title', name: t(:create_bank_transaction) diff --git a/app/views/admin/invoices/show.haml b/app/views/admin/invoices/show.haml index 1d8480da4..33fc5a5d1 100644 --- a/app/views/admin/invoices/show.haml +++ b/app/views/admin/invoices/show.haml @@ -1,9 +1,11 @@ .row - .col-sm-6 + .col-sm-4 %h1.text-center-xs = @invoice - .col-sm-6 + .col-sm-8 %h1.text-right.text-center-xs + - unless @invoice.binded? + = link_to(t(:payment_received), new_admin_bank_statement_path(invoice_id: @invoice.id), class: 'btn btn-default') = link_to(t(:download), admin_invoice_download_pdf_path(@invoice), class: 'btn btn-default') = link_to(t(:forward), admin_invoice_forward_path(@invoice), class: 'btn btn-default') - if !@invoice.cancelled? && !@invoice.binded? diff --git a/app/views/admin/settings/index.haml b/app/views/admin/settings/index.haml index 85926fcef..b47a23384 100644 --- a/app/views/admin/settings/index.haml +++ b/app/views/admin/settings/index.haml @@ -71,6 +71,7 @@ = render 'setting_row', var: :registry_vat_no = render 'setting_row', var: :registry_vat_prc = render 'setting_row', var: :registry_bank + = render 'setting_row', var: :registry_bank_code = render 'setting_row', var: :registry_iban = render 'setting_row', var: :registry_swift diff --git a/config/initializers/initial_settings.rb b/config/initializers/initial_settings.rb index 2cff727b4..1417ef7e3 100644 --- a/config/initializers/initial_settings.rb +++ b/config/initializers/initial_settings.rb @@ -50,6 +50,7 @@ if con.present? && con.table_exists?('settings') Setting.save_default(:registry_vat_prc, 0.2) Setting.save_default(:registry_iban, 'EE557700771000598731') Setting.save_default(:registry_bank, 'LHV Pank') + Setting.save_default(:registry_bank_code, '689') Setting.save_default(:registry_swift, 'LHVBEE22') Setting.save_default(:registry_invoice_contact, 'Martti Õigus') end diff --git a/config/locales/en.yml b/config/locales/en.yml index 0b71bf267..32199609b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -869,4 +869,5 @@ en: reserved_pw: 'Reserved pw' no_transfers_found: 'No transfers found' parameter_value_range_error: 'Parameter value range error: %{key}' + payment_received: 'Payment received' domain_registrant_updated: 'Domeeni %{name} registreerija vahetus teostatud / Registrant change of %{name} has been finished.' diff --git a/spec/features/admin/invoice_spec.rb b/spec/features/admin/invoice_spec.rb index 91e29afab..9c787eeb8 100644 --- a/spec/features/admin/invoice_spec.rb +++ b/spec/features/admin/invoice_spec.rb @@ -59,4 +59,52 @@ feature 'Invoice', type: :feature do response_headers['Content-Type'].should == 'application/pdf' response_headers['Content-Disposition'].should == "attachment; filename=\"#{@invoice.pdf_name}\"" end + + it 'should create bank statement and transaction for invoice' do + r = Fabricate(:registrar, reference_no: 'RF7086666663') + invoice = r.issue_prepayment_invoice(200, 'add some money') + + visit '/admin/invoices' + click_link invoice.to_s + + page.should have_content('Unpaid') + + click_link 'Payment received' + + paid_at = Time.zone.now + find_field('Bank code').value.should == '689' + find_field('Iban').value.should == 'EE557700771000598731' + find_field('Description').value.should == invoice.to_s + find_field('Sum').value.should == invoice.sum.to_s + find_field('Currency').value.should == 'EUR' + find_field('Reference no').value.should == invoice.reference_no + find_field('Paid at').value.should == paid_at.to_date.to_s + + click_button 'Save' + + page.should have_content('Record created') + page.should have_content('689') + page.should have_content('EE557700771000598731') + page.should have_content('Not binded', count: 2) + page.should have_content(invoice.sum.to_s) + page.should have_content('EUR') + + click_link 'Bind invoices' + + page.should have_content('Invoices were fully binded') + page.should have_content('Fully binded') + page.should have_content('Binded') + + click_link I18n.l(paid_at, format: :date_long) + + page.should have_content('Binded') + page.should have_content(invoice.to_s) + page.should have_content(invoice.sum.to_s) + page.should have_content(invoice.reference_no) + page.should have_content(I18n.l(paid_at, format: :date_long)) + + click_link(invoice.to_s) + page.should_not have_content('Unpaid') + page.should_not have_content('Payment received') + end end