From a3defc54632f77ae4349370b0c0f1793c47df942 Mon Sep 17 00:00:00 2001 From: Patrick Gansterer Date: Mon, 11 Nov 2019 12:18:00 +0100 Subject: [PATCH] Add FinacialTransaction create_collection for ordergroup custom fields Custom fields of an ordergroup can set financial_transaction_source to true, to act as an source for a new collection of FinacialTransaction. A typical usecase would be a variable membership fee, which will be stored in a custom field on the ordergroup. When a new membership period begins a collection with all membership fees can be created with one click. --- .../financial_transactions_controller.rb | 8 ++++++ .../new_collection.html.haml | 28 +++++++++++++++---- config/locales/de.yml | 1 + config/locales/en.yml | 1 + 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/app/controllers/finance/financial_transactions_controller.rb b/app/controllers/finance/financial_transactions_controller.rb index 468a943d..5155541c 100644 --- a/app/controllers/finance/financial_transactions_controller.rb +++ b/app/controllers/finance/financial_transactions_controller.rb @@ -58,6 +58,14 @@ class Finance::FinancialTransactionsController < ApplicationController end def new_collection + @ordergroups = {} + Ordergroup.undeleted.order(:name).map do |ordergroup| + obj = { name: ordergroup.name } + Ordergroup.custom_fields.each do |field| + obj[field[:name]] = ordergroup.settings.custom_fields[field[:name]] + end + @ordergroups[ordergroup.id] = obj + end end def create_collection diff --git a/app/views/finance/financial_transactions/new_collection.html.haml b/app/views/finance/financial_transactions/new_collection.html.haml index 9d8e64ff..c5b5820d 100644 --- a/app/views/finance/financial_transactions/new_collection.html.haml +++ b/app/views/finance/financial_transactions/new_collection.html.haml @@ -3,6 +3,7 @@ - content_for :javascript do :javascript var ordergroup = $($.parseHTML("#{escape_javascript(render('ordergroup'))}")); + var ordergroups = #{raw @ordergroups.to_json}; $(function() { $(document).on('touchclick', 'a[data-remove-transaction]', function() { @@ -16,16 +17,27 @@ }); $(document).on('touchclick', 'a[data-add-all-ordergroups]', function() { - var value = prompt("#{escape_javascript(heading_helper(FinancialTransaction, :amount))}:"); - if (value === null) - return false; + var customField = $(this).data('custom-field'); + var value; + if (!customField) { + value = prompt("#{escape_javascript(heading_helper(FinancialTransaction, :amount))}:"); + if (value === null) { + return false; + } + } $('#ordergroups > tbody > tr').remove(); - var options = ordergroup.find('td > select > option').each(function() { + for (var id in ordergroups) { + if (!ordergroups.hasOwnProperty(id)) { + continue; + } + if (customField) { + value = ordergroups[id][customField]; + } var row = ordergroup.clone(); row.find('td > input').val(value); - row.find('td > select').val(this.value); + row.find('td > select').val(id); row.appendTo('#ordergroups'); - }); + } return false; }); }); @@ -61,6 +73,10 @@ %label = check_box_tag :create_financial_link, true, params[:create_financial_link] = t('.create_financial_link') + %p + - Ordergroup.custom_fields.each do |f| + - if f[:financial_transaction_source] + = link_to t('.add_all_ordergroups_custom_field', label: f[:label]), '#', 'data-custom-field' => f[:name], 'data-add-all-ordergroups' => true, class: 'btn' .form-actions = submit_tag t('.save'), class: 'btn btn-primary' = link_to t('ui.or_cancel'), finance_ordergroups_path diff --git a/config/locales/de.yml b/config/locales/de.yml index 6f86f521..7cfa7e0b 100644 --- a/config/locales/de.yml +++ b/config/locales/de.yml @@ -862,6 +862,7 @@ de: title: Neue Transaktion new_collection: add_all_ordergroups: Alle Bestellgruppen hinzufügen + add_all_ordergroups_custom_field: Alle Bestellgruppen mit %{label} hinzufügen create_financial_link: Erstelle einen gemeinsamen Finanzlink für die neuen Transaktionen. new_ordergroup: Weitere Bestellgruppe hinzufügen save: Transaktionen speichern diff --git a/config/locales/en.yml b/config/locales/en.yml index e3398eca..6c07d333 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -887,6 +887,7 @@ en: title: New transaction new_collection: add_all_ordergroups: Add all ordergroups + add_all_ordergroups_custom_field: Add all ordergoups with %{label} create_financial_link: Create a common financial link for the new transactions. new_ordergroup: Add new ordergroup save: Save transaction