From c282cae79c9ed67bf87f63f622ea94ff2990b4f7 Mon Sep 17 00:00:00 2001 From: Benjamin Meichsner Date: Sat, 10 Jan 2009 21:28:22 +0100 Subject: [PATCH] Moved financial_transaction into the new finance-namespace. --- .../finance/transactions_controller.rb | 110 ++++++++++++++++ app/controllers/finance_controller.rb | 117 ------------------ app/helpers/finance/transactions_helper.rb | 2 + app/models/financial_transaction.rb | 2 +- .../transactions}/_list.rhtml | 0 .../{ => transactions}/_order_group.haml | 0 .../_ordergroups.html.haml} | 6 +- .../finance/transactions/create.html.erb | 2 + .../transactions/create_collection.html.erb | 2 + .../index.html.haml} | 9 +- .../transactions/list.html.erb} | 11 +- app/views/finance/transactions/new.html.haml | 21 ++++ .../transactions/new_collection.html.erb | 2 + .../new_collection.html.haml} | 4 +- app/views/financial_transactions/_form.rhtml | 10 -- app/views/financial_transactions/new.rhtml | 9 -- app/views/layouts/_main_tabnav.html.erb | 4 +- config/routes.rb | 1 + .../finance/transactions_controller_test.rb | 8 ++ 19 files changed, 167 insertions(+), 153 deletions(-) create mode 100644 app/controllers/finance/transactions_controller.rb create mode 100644 app/helpers/finance/transactions_helper.rb rename app/views/{financial_transactions => finance/transactions}/_list.rhtml (100%) rename app/views/finance/{ => transactions}/_order_group.haml (100%) rename app/views/finance/{_listOrdergroups.haml => transactions/_ordergroups.html.haml} (67%) create mode 100644 app/views/finance/transactions/create.html.erb create mode 100644 app/views/finance/transactions/create_collection.html.erb rename app/views/finance/{listOrdergroups.haml => transactions/index.html.haml} (77%) rename app/views/{financial_transactions/list.rhtml => finance/transactions/list.html.erb} (69%) create mode 100644 app/views/finance/transactions/new.html.haml create mode 100644 app/views/finance/transactions/new_collection.html.erb rename app/views/finance/{new_transactions.haml => transactions/new_collection.html.haml} (80%) delete mode 100644 app/views/financial_transactions/_form.rhtml delete mode 100644 app/views/financial_transactions/new.rhtml create mode 100644 test/functional/finance/transactions_controller_test.rb diff --git a/app/controllers/finance/transactions_controller.rb b/app/controllers/finance/transactions_controller.rb new file mode 100644 index 00000000..10c45e12 --- /dev/null +++ b/app/controllers/finance/transactions_controller.rb @@ -0,0 +1,110 @@ +class Finance::TransactionsController < ApplicationController + before_filter :authenticate_finance + + def index + if (params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 100) + @per_page = params[:per_page].to_i + else + @per_page = 20 + end + if params["sort"] + sort = case params["sort"] + when "name" then "name" + when "size" then "actual_size" + when "account_balance" then "account_balance" + when "name_reverse" then "name DESC" + when "size_reverse" then "actual_size DESC" + when "account_balance_reverse" then "account_balance DESC" + end + else + sort = "name" + end + + conditions = "name LIKE '%#{params[:query]}%'" unless params[:query].nil? + + @total = OrderGroup.count(:conditions => conditions) + @groups = OrderGroup.paginate :conditions => conditions, :page => params[:page], :per_page => @per_page, :order => sort + + respond_to do |format| + format.html + format.js do + render :update do |page| + page.replace_html 'table', :partial => "ordergroups" + end + end + end + end + + def list + @group = OrderGroup.find(params[:id]) + + if params['sort'] + sort = case params['sort'] + when "date" then "created_on" + when "note" then "note" + when "amount" then "amount" + when "date_reverse" then "created_on DESC" + when "note_reverse" then "note DESC" + when "amount_reverse" then "amount DESC" + end + else + sort = "created_on DESC" + end + + conditions = ["note LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? + + @total = @group.financial_transactions.count(:conditions => conditions) + @financial_transactions = @group.financial_transactions.paginate(:page => params[:page], + :per_page => 10, + :conditions => conditions, + :order => sort) + respond_to do |format| + format.html + format.js do + render :update do |page| + page.replace_html 'table', :partial => "list" + end + end + end + end + + def new + @group = OrderGroup.find(params[:id]) + @financial_transaction = @group.financial_transactions.build + end + + def create + @group = OrderGroup.find(params[:financial_transaction][:order_group_id]) + amount = params[:financial_transaction][:amount] + note = params[:financial_transaction][:note] + begin + @group.addFinancialTransaction(amount, note, @current_user) + flash[:notice] = 'Transaktion erfolgreich angelegt.' + redirect_to :action => 'index' + rescue => e + @financial_transaction = FinancialTransaction.new(params[:financial_transaction]) + flash.now[:error] = 'Transaktion konnte nicht angelegt werden!' + ' (' + e.message + ')' + render :action => 'new' + end + end + + def new_collection + end + + def create_collection + note = params[:note] + raise "Note is required!" if note.blank? + params[:financial_transactions].each do |trans| + # ignore empty amount fields ... + unless trans[:amount].blank? + OrderGroup.find(trans[:order_group_id]).addFinancialTransaction trans[:amount], note, @current_user + end + end + flash[:notice] = 'Saved all transactions successfully' + redirect_to :action => 'index' + rescue => error + flash[:error] = "An error occured: " + error.to_s + redirect_to :action => 'new_collection' + end + +end diff --git a/app/controllers/finance_controller.rb b/app/controllers/finance_controller.rb index 0792f490..067f7513 100644 --- a/app/controllers/finance_controller.rb +++ b/app/controllers/finance_controller.rb @@ -15,123 +15,6 @@ class FinanceController < ApplicationController @unpaid_invoices = Invoice.unpaid end - #list all ordergroups - def listOrdergroups - @user = @current_user - if (params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 100) - @per_page = params[:per_page].to_i - else - @per_page = 20 - end - if params["sort"] - sort = case params["sort"] - when "name" then "name" - when "size" then "actual_size" - when "account_balance" then "account_balance" - when "name_reverse" then "name DESC" - when "size_reverse" then "actual_size DESC" - when "account_balance_reverse" then "account_balance DESC" - end - else - sort = "name" - end - - conditions = "name LIKE '%#{params[:query]}%'" unless params[:query].nil? - - @total = OrderGroup.count(:conditions => conditions) - @groups = OrderGroup.paginate :conditions => conditions, :page => params[:page], :per_page => @per_page, :order => sort - - respond_to do |format| - format.html # listOrdergroups.haml - format.js do - render :update do |page| - page.replace_html 'table', :partial => "listOrdergroups" # _listOrdergroups.haml - end - end - end - end - - #new financial transactions (ordergroups) - def newTransaction - @group = OrderGroup.find(params[:id]) - @financial_transaction = FinancialTransaction.new(:order_group => @group) - render :template => 'financial_transactions/new' - end - - #save the new financial transaction and update the account_balance of the ordergroup - def createTransaction - @group = OrderGroup.find(params[:id]) - amount = params[:financial_transaction][:amount] - note = params[:financial_transaction][:note] - begin - @group.addFinancialTransaction(amount, note, @current_user) - flash[:notice] = MSG_TRANSACTION_SUCCESS - redirect_to :action => 'listTransactions', :id => @group - rescue => e - @financial_transaction = FinancialTransaction.new(params[:financial_transaction]) - flash.now[:error] = ERROR_TRANSACTION_FAILED + ' (' + e.message + ')' - render :template => 'financial_transactions/new' - end - end - - # list transactions of a specific ordergroup - def listTransactions - @group = Group.find(params[:id]) - - if params['sort'] - sort = case params['sort'] - when "date" then "created_on" - when "note" then "note" - when "amount" then "amount" - when "date_reverse" then "created_on DESC" - when "note_reverse" then "note DESC" - when "amount_reverse" then "amount DESC" - end - else - sort = "created_on DESC" - end - - conditions = ["note LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? - - @total = @group.financial_transactions.count(:conditions => conditions) - @financial_transactions = @group.financial_transactions.paginate(:page => params[:page], - :per_page => 10, - :conditions => conditions, - :order => sort) - respond_to do |format| - format.html {render :template => 'financial_transactions/list'} - format.js do - render :update do |page| - page.replace_html 'table', :partial => "financial_transactions/list" - end - end - end - end - - # gives a view to add multiple transactions to different groups - # e.g. this is helpful when updating multiple accounts in case of a new statement - def new_transactions - end - - # creates multiple transactions at once - def create_transactions - begin - note = params[:note] - raise _("Note is required!") if note.blank? - params[:financial_transactions].each do |trans| - # ignore empty amount fields ... - unless trans[:amount].blank? - OrderGroup.find(trans[:order_group_id]).addFinancialTransaction trans[:amount], note, @current_user - end - end - flash[:notice] = _('Saved all transactions successfully') - redirect_to :action => 'index' - rescue => error - flash[:error] = _("An error occured: ") + error.to_s - redirect_to :action => 'new_transactions' - end - end - # list finished orders for the order-clearing def listOrders @orders = Order.paginate_all_by_finished true, :page => params[:page], :per_page => 10, :order => 'ends DESC' diff --git a/app/helpers/finance/transactions_helper.rb b/app/helpers/finance/transactions_helper.rb new file mode 100644 index 00000000..a5e6a2eb --- /dev/null +++ b/app/helpers/finance/transactions_helper.rb @@ -0,0 +1,2 @@ +module Finance::TransactionsHelper +end diff --git a/app/models/financial_transaction.rb b/app/models/financial_transaction.rb index 669c3574..f4bb319d 100644 --- a/app/models/financial_transaction.rb +++ b/app/models/financial_transaction.rb @@ -19,7 +19,7 @@ class FinancialTransaction < ActiveRecord::Base validates_presence_of :note, :user_id, :order_group_id validates_numericality_of :amount - + # Custom attribute setter that accepts decimal numbers using localized decimal separator. def amount=(amount) self[:amount] = String.delocalized_decimal(amount) diff --git a/app/views/financial_transactions/_list.rhtml b/app/views/finance/transactions/_list.rhtml similarity index 100% rename from app/views/financial_transactions/_list.rhtml rename to app/views/finance/transactions/_list.rhtml diff --git a/app/views/finance/_order_group.haml b/app/views/finance/transactions/_order_group.haml similarity index 100% rename from app/views/finance/_order_group.haml rename to app/views/finance/transactions/_order_group.haml diff --git a/app/views/finance/_listOrdergroups.haml b/app/views/finance/transactions/_ordergroups.html.haml similarity index 67% rename from app/views/finance/_listOrdergroups.haml rename to app/views/finance/transactions/_ordergroups.html.haml index 66cb7624..1669e38d 100644 --- a/app/views/finance/_listOrdergroups.haml +++ b/app/views/finance/transactions/_ordergroups.html.haml @@ -19,10 +19,10 @@ %tbody - for group in @groups %tr{:class => cycle('even','odd', :name => 'groups')} - %td= @current_user.role_admin? ? link_to(group.name, {:controller => 'admin', :action => 'showGroup', :id => group}, {:title => _("Show ordergroup")}) : group.name + %td= group.name %td= group.actual_size %td{:class => "currency", :style => "width:5em"}= number_to_currency(group.account_balance) %td{:class => "actions"} - = link_to image_tag("euro_new.png", :size => "16x16", :alt => _("New transaction"), :border => "0"), {:action => 'newTransaction', :id => group}, {:title => _("New transaction")} - = link_to image_tag("b_browse.png", :size => "16x16", :border => "0", :alt => 'Kontoauszug'), {:action => 'listTransactions', :id => group}, {:title => _("List transactions")} + = link_to image_tag("euro_new.png", :size => "16x16", :alt => _("New transaction"), :border => "0"), {:action => 'new', :id => group}, {:title => _("New transaction")} + = link_to image_tag("b_browse.png", :size => "16x16", :border => "0", :alt => 'Kontoauszug'), {:action => 'list', :id => group}, {:title => _("List transactions")} \ No newline at end of file diff --git a/app/views/finance/transactions/create.html.erb b/app/views/finance/transactions/create.html.erb new file mode 100644 index 00000000..c7fdf134 --- /dev/null +++ b/app/views/finance/transactions/create.html.erb @@ -0,0 +1,2 @@ +

Finance::Transactions#create

+

Find me in app/views/finance/transactions/create.html.erb

diff --git a/app/views/finance/transactions/create_collection.html.erb b/app/views/finance/transactions/create_collection.html.erb new file mode 100644 index 00000000..dc280bc8 --- /dev/null +++ b/app/views/finance/transactions/create_collection.html.erb @@ -0,0 +1,2 @@ +

Finance::Transactions#create_collection

+

Find me in app/views/finance/transactions/create_collection.html.erb

diff --git a/app/views/finance/listOrdergroups.haml b/app/views/finance/transactions/index.html.haml similarity index 77% rename from app/views/finance/listOrdergroups.haml rename to app/views/finance/transactions/index.html.haml index 50002ab4..ec1acddb 100644 --- a/app/views/finance/listOrdergroups.haml +++ b/app/views/finance/transactions/index.html.haml @@ -1,8 +1,9 @@ -- title _("Manage accounts") +%h1 Manage accounts %p %i =_ "To create multiple transactions at once please follow this " - = link_to _("link"), :action => 'new_transactions' + = link_to _("link"), :action => 'new_collection' + .left_column{:style=>"width:50em"} .box_title %h2=_ "Ordergroups" @@ -15,10 +16,10 @@ = observe_field 'query', :frequency => 2, | :before => "Element.show('loader')", | :success => "Element.hide('loader')", | - :url => {:action => 'listOrdergroups'}, | + :url => {:action => 'index'}, | :with => 'query' | #table - = render :partial => "listOrdergroups" + = render :partial => "ordergroups" %br/ - if @current_user.role_admin? = link_to _("New ordergroup"), :controller => 'admin', :action => 'newOrderGroup' \ No newline at end of file diff --git a/app/views/financial_transactions/list.rhtml b/app/views/finance/transactions/list.html.erb similarity index 69% rename from app/views/financial_transactions/list.rhtml rename to app/views/finance/transactions/list.html.erb index 78a0a1ae..6a9b5340 100644 --- a/app/views/financial_transactions/list.rhtml +++ b/app/views/finance/transactions/list.html.erb @@ -1,4 +1,5 @@ -

Kontoauszug für <%= @group.name %>

+<% title "Kontoauszug für #{@group.name}" %> +

Kontostand: <%= number_to_currency(@group.account_balance) -%> (zuletzt aktualisiert vor <%= distance_of_time_in_words(Time.now, @group.account_updated) -%>) @@ -13,12 +14,12 @@ <%= observe_field 'query', :frequency => 2, :before => "Element.show('loader')", :success => "Element.hide('loader')", - :url => {:action => 'listTransactions'}, + :url => {:action => 'list'}, :with => 'query' %>

- <%= render :partial => "/financial_transactions/list" %> + <%= render :partial => "list" %>
-

<%= link_to 'Neue Transaktion', :action => 'newTransaction', :id => @group %>

+

<%= link_to 'Neue Transaktion', :action => 'new', :id => @group %>

+ <%= link_to 'Gruppenübersicht', :action => 'index' %> - <%= link_to 'Bestellgruppen', :controller => 'finance', :action => "listOrdergroups" %> \ No newline at end of file diff --git a/app/views/finance/transactions/new.html.haml b/app/views/finance/transactions/new.html.haml new file mode 100644 index 00000000..323ff891 --- /dev/null +++ b/app/views/finance/transactions/new.html.haml @@ -0,0 +1,21 @@ +%h1 New transaction + +.edit_form{ :style => "width:30em" } + - form_for(@financial_transaction, :url => { :action => 'create' }) do |f| + = f.error_messages + = f.hidden_field :order_group_id + %p + Group: + %b=h @group.name + %p + = f.label :amount + %br/ + = f.text_field :amount, :size => 10 + %p + = f.label :note + %br/ + = f.text_area :note, :cols => 40, :rows => 5 + %p + = submit_tag "Save" + += link_to "Back", :controller => 'transactions' \ No newline at end of file diff --git a/app/views/finance/transactions/new_collection.html.erb b/app/views/finance/transactions/new_collection.html.erb new file mode 100644 index 00000000..6921d39c --- /dev/null +++ b/app/views/finance/transactions/new_collection.html.erb @@ -0,0 +1,2 @@ +

Finance::Transactions#new_collection

+

Find me in app/views/finance/transactions/new_collection.html.erb

diff --git a/app/views/finance/new_transactions.haml b/app/views/finance/transactions/new_collection.html.haml similarity index 80% rename from app/views/finance/new_transactions.haml rename to app/views/finance/transactions/new_collection.html.haml index 92176030..f7601d75 100644 --- a/app/views/finance/new_transactions.haml +++ b/app/views/finance/transactions/new_collection.html.haml @@ -1,6 +1,6 @@ - title _("Update multiple accounts") -- form_tag :action => "create_transactions" do +- form_tag :action => "create_collection" do %p %b= _("Note") + ":" = text_field_tag "note" @@ -17,4 +17,4 @@ %p = submit_tag _("Save") | - = link_to _("Cancel"), :action => 'listOrdergroups' \ No newline at end of file + = link_to _("Cancel"), :controller => 'finance/transactions' \ No newline at end of file diff --git a/app/views/financial_transactions/_form.rhtml b/app/views/financial_transactions/_form.rhtml deleted file mode 100644 index ab6ed4a9..00000000 --- a/app/views/financial_transactions/_form.rhtml +++ /dev/null @@ -1,10 +0,0 @@ -<%= error_messages_for 'financial_transaction' %> - -
-

<%=h @group.name %> -

-<%= text_field 'financial_transaction', 'amount', :size => '10' %> Euro

- -


-<%= text_area 'financial_transaction', 'note', :cols => "40", :rows => "5" %>

-
diff --git a/app/views/financial_transactions/new.rhtml b/app/views/financial_transactions/new.rhtml deleted file mode 100644 index aaaa1112..00000000 --- a/app/views/financial_transactions/new.rhtml +++ /dev/null @@ -1,9 +0,0 @@ -

Neue Transaktion

- -<% form_tag(:action => 'createTransaction', :id => @group) do -%> - <%= render :partial => 'financial_transactions/form' %> - <%= submit_tag 'Speichern' %> - <%= hidden_field 'financial_transaction', 'order_group_id' %> -<% end -%> -
-<%= link_to 'Zurück', :controller => 'finance' %> \ No newline at end of file diff --git a/app/views/layouts/_main_tabnav.html.erb b/app/views/layouts/_main_tabnav.html.erb index e9591032..236fe492 100644 --- a/app/views/layouts/_main_tabnav.html.erb +++ b/app/views/layouts/_main_tabnav.html.erb @@ -26,10 +26,10 @@ { :name => "Suppliers", :url => suppliers_path, :access? => (u.role_suppliers?) } ] }, - { :name => "Finance", :url => "/finance", :active => ["finance", "invoices"], + { :name => "Finance", :url => "/finance", :active => ["finance", "invoices", "transactions"], :access? => (u.role_finance?), :subnav => [ - { :name => "Ordergroups", :url => "/finance/listOrdergroups" }, + { :name => "Manage accounts", :url => "/finance/transactions" }, { :name => "Balance orders", :url => "/finance/listOrders" }, { :name => "Invoices", :url => finance_invoices_path } ] diff --git a/config/routes.rb b/config/routes.rb index 292d6fde..08c96876 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,6 +2,7 @@ ActionController::Routing::Routes.draw do |map| map.namespace :finance do |finance| finance.resources :invoices + finance.connect 'transactions/:action/:id', :controller => 'transactions' end #map.resources :invoices diff --git a/test/functional/finance/transactions_controller_test.rb b/test/functional/finance/transactions_controller_test.rb new file mode 100644 index 00000000..e580421a --- /dev/null +++ b/test/functional/finance/transactions_controller_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class Finance::TransactionsControllerTest < ActionController::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end