diff --git a/app/controllers/finance/financial_transactions_controller.rb b/app/controllers/finance/financial_transactions_controller.rb index 1141425f..45efeda8 100644 --- a/app/controllers/finance/financial_transactions_controller.rb +++ b/app/controllers/finance/financial_transactions_controller.rb @@ -59,12 +59,20 @@ class Finance::FinancialTransactionsController < ApplicationController params[:financial_transactions].each do |trans| # ignore empty amount fields ... unless trans[:amount].blank? - Ordergroup.find(trans[:ordergroup_id]).add_financial_transaction!(trans[:amount], params[:note], @current_user, type) + amount = trans[:amount].to_f + note = params[:note] + ordergroup = Ordergroup.find(trans[:ordergroup_id]) + if params[:set_balance] + note += " (#{amount})" + amount -= ordergroup.financial_transaction_class_balance(type.financial_transaction_class) + end + ordergroup.add_financial_transaction!(amount, note, @current_user, type) end end redirect_to finance_ordergroups_url, notice: I18n.t('finance.financial_transactions.controller.create_collection.notice') rescue => error - redirect_to finance_new_transaction_collection_url, alert: I18n.t('finance.financial_transactions.controller.create_collection.alert', error: error.to_s) + flash.now[:alert] = error.message + render action: :new_collection end protected diff --git a/app/models/ordergroup.rb b/app/models/ordergroup.rb index 4fe5ed7c..d61df2d5 100644 --- a/app/models/ordergroup.rb +++ b/app/models/ordergroup.rb @@ -65,6 +65,13 @@ class Ordergroup < Group account_balance - value_of_open_orders(exclude) - value_of_finished_orders(exclude) end + def financial_transaction_class_balance(klass) + financial_transactions + .joins(:financial_transaction_type) + .where(financial_transaction_types: {financial_transaction_class_id: klass}) + .sum(:amount) + end + # Creates a new FinancialTransaction for this Ordergroup and updates the account_balance accordingly. # Throws an exception if it fails. def add_financial_transaction!(amount, note, user, transaction_type, link = nil) diff --git a/app/views/finance/financial_transactions/new_collection.html.haml b/app/views/finance/financial_transactions/new_collection.html.haml index 7e157dee..b5373733 100644 --- a/app/views/finance/financial_transactions/new_collection.html.haml +++ b/app/views/finance/financial_transactions/new_collection.html.haml @@ -37,10 +37,14 @@ - if FinancialTransactionType.has_multiple_types %p %b= heading_helper FinancialTransaction, :financial_transaction_type - = select_tag :type, options_for_select(FinancialTransactionType.order(:name).map { |t| [ t.name, t.id ] }) + = select_tag :type, options_for_select(FinancialTransactionType.order(:name).map { |t| [ t.name, t.id ] }, params[:type]) %p %b= heading_helper FinancialTransaction, :note = text_field_tag :note, params[:note], class: 'input-xlarge', required: 'required' + %p + %label + = check_box_tag :set_balance, true, params[:set_balance] + = t('.set_balance') %p %table#ordergroups{:style => "width:20em"} %thead diff --git a/config/locales/de.yml b/config/locales/de.yml index 77fc98e2..cfb2ebd9 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -930,6 +930,7 @@ de: add_all_ordergroups: Alle Bestellgruppen hinzufügen new_ordergroup: Weitere Bestellgruppe hinzufügen save: Transaktionen speichern + set_balance: Setze den Kontostand der Bestellgrupppe auf den eingegebenen Betrag. sidebar: Hier kannst Du mehrere Konten gleichzeitig aktualsieren. Z.B. alle Überweisungen der Bestellgruppen aus einem Kontoauszug. title: Mehrere Konten aktualisieren ordergroup: diff --git a/config/locales/en.yml b/config/locales/en.yml index a54c9932..2c8d1280 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -947,6 +947,7 @@ en: add_all_ordergroups: Add all ordergroups new_ordergroup: Add new ordergroup save: Save transaction + set_balance: Set the balance of the ordergroup to the entered amount. sidebar: Here you can update more accounts at the same time. For example all transfers of the ordergroup from one account statement. title: Updating more accounts ordergroup: