Moved financial_transaction into the new finance-namespace.
This commit is contained in:
parent
1d85b880f2
commit
c282cae79c
19 changed files with 167 additions and 153 deletions
110
app/controllers/finance/transactions_controller.rb
Normal file
110
app/controllers/finance/transactions_controller.rb
Normal file
|
@ -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
|
|
@ -15,123 +15,6 @@ class FinanceController < ApplicationController
|
||||||
@unpaid_invoices = Invoice.unpaid
|
@unpaid_invoices = Invoice.unpaid
|
||||||
end
|
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
|
# list finished orders for the order-clearing
|
||||||
def listOrders
|
def listOrders
|
||||||
@orders = Order.paginate_all_by_finished true, :page => params[:page], :per_page => 10, :order => 'ends DESC'
|
@orders = Order.paginate_all_by_finished true, :page => params[:page], :per_page => 10, :order => 'ends DESC'
|
||||||
|
|
2
app/helpers/finance/transactions_helper.rb
Normal file
2
app/helpers/finance/transactions_helper.rb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
module Finance::TransactionsHelper
|
||||||
|
end
|
|
@ -19,7 +19,7 @@ class FinancialTransaction < ActiveRecord::Base
|
||||||
|
|
||||||
validates_presence_of :note, :user_id, :order_group_id
|
validates_presence_of :note, :user_id, :order_group_id
|
||||||
validates_numericality_of :amount
|
validates_numericality_of :amount
|
||||||
|
|
||||||
# Custom attribute setter that accepts decimal numbers using localized decimal separator.
|
# Custom attribute setter that accepts decimal numbers using localized decimal separator.
|
||||||
def amount=(amount)
|
def amount=(amount)
|
||||||
self[:amount] = String.delocalized_decimal(amount)
|
self[:amount] = String.delocalized_decimal(amount)
|
||||||
|
|
|
@ -19,10 +19,10 @@
|
||||||
%tbody
|
%tbody
|
||||||
- for group in @groups
|
- for group in @groups
|
||||||
%tr{:class => cycle('even','odd', :name => '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= group.actual_size
|
||||||
%td{:class => "currency", :style => "width:5em"}= number_to_currency(group.account_balance)
|
%td{:class => "currency", :style => "width:5em"}= number_to_currency(group.account_balance)
|
||||||
%td{:class => "actions"}
|
%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("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 => 'listTransactions', :id => group}, {:title => _("List transactions")}
|
= link_to image_tag("b_browse.png", :size => "16x16", :border => "0", :alt => 'Kontoauszug'), {:action => 'list', :id => group}, {:title => _("List transactions")}
|
||||||
|
|
2
app/views/finance/transactions/create.html.erb
Normal file
2
app/views/finance/transactions/create.html.erb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<h1>Finance::Transactions#create</h1>
|
||||||
|
<p>Find me in app/views/finance/transactions/create.html.erb</p>
|
|
@ -0,0 +1,2 @@
|
||||||
|
<h1>Finance::Transactions#create_collection</h1>
|
||||||
|
<p>Find me in app/views/finance/transactions/create_collection.html.erb</p>
|
|
@ -1,8 +1,9 @@
|
||||||
- title _("Manage accounts")
|
%h1 Manage accounts
|
||||||
%p
|
%p
|
||||||
%i
|
%i
|
||||||
=_ "To create multiple transactions at once please follow this "
|
=_ "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"}
|
.left_column{:style=>"width:50em"}
|
||||||
.box_title
|
.box_title
|
||||||
%h2=_ "Ordergroups"
|
%h2=_ "Ordergroups"
|
||||||
|
@ -15,10 +16,10 @@
|
||||||
= observe_field 'query', :frequency => 2, |
|
= observe_field 'query', :frequency => 2, |
|
||||||
:before => "Element.show('loader')", |
|
:before => "Element.show('loader')", |
|
||||||
:success => "Element.hide('loader')", |
|
:success => "Element.hide('loader')", |
|
||||||
:url => {:action => 'listOrdergroups'}, |
|
:url => {:action => 'index'}, |
|
||||||
:with => 'query' |
|
:with => 'query' |
|
||||||
#table
|
#table
|
||||||
= render :partial => "listOrdergroups"
|
= render :partial => "ordergroups"
|
||||||
%br/
|
%br/
|
||||||
- if @current_user.role_admin?
|
- if @current_user.role_admin?
|
||||||
= link_to _("New ordergroup"), :controller => 'admin', :action => 'newOrderGroup'
|
= link_to _("New ordergroup"), :controller => 'admin', :action => 'newOrderGroup'
|
|
@ -1,4 +1,5 @@
|
||||||
<h1>Kontoauszug für <%= @group.name %></h1>
|
<% title "Kontoauszug für #{@group.name}" %>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
<b>Kontostand: <%= number_to_currency(@group.account_balance) -%></b>
|
<b>Kontostand: <%= number_to_currency(@group.account_balance) -%></b>
|
||||||
<span style="color:grey">(zuletzt aktualisiert vor <%= distance_of_time_in_words(Time.now, @group.account_updated) -%>)</span>
|
<span style="color:grey">(zuletzt aktualisiert vor <%= distance_of_time_in_words(Time.now, @group.account_updated) -%>)</span>
|
||||||
|
@ -13,12 +14,12 @@
|
||||||
<%= observe_field 'query', :frequency => 2,
|
<%= observe_field 'query', :frequency => 2,
|
||||||
:before => "Element.show('loader')",
|
:before => "Element.show('loader')",
|
||||||
:success => "Element.hide('loader')",
|
:success => "Element.hide('loader')",
|
||||||
:url => {:action => 'listTransactions'},
|
:url => {:action => 'list'},
|
||||||
:with => 'query' %>
|
:with => 'query' %>
|
||||||
<div id="table">
|
<div id="table">
|
||||||
<%= render :partial => "/financial_transactions/list" %>
|
<%= render :partial => "list" %>
|
||||||
</div>
|
</div>
|
||||||
<p><%= link_to 'Neue Transaktion', :action => 'newTransaction', :id => @group %></p>
|
<p><%= link_to 'Neue Transaktion', :action => 'new', :id => @group %></p>
|
||||||
</div>
|
</div>
|
||||||
|
<%= link_to 'Gruppenübersicht', :action => 'index' %>
|
||||||
</div>
|
</div>
|
||||||
<%= link_to 'Bestellgruppen', :controller => 'finance', :action => "listOrdergroups" %>
|
|
21
app/views/finance/transactions/new.html.haml
Normal file
21
app/views/finance/transactions/new.html.haml
Normal file
|
@ -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'
|
2
app/views/finance/transactions/new_collection.html.erb
Normal file
2
app/views/finance/transactions/new_collection.html.erb
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<h1>Finance::Transactions#new_collection</h1>
|
||||||
|
<p>Find me in app/views/finance/transactions/new_collection.html.erb</p>
|
|
@ -1,6 +1,6 @@
|
||||||
- title _("Update multiple accounts")
|
- title _("Update multiple accounts")
|
||||||
|
|
||||||
- form_tag :action => "create_transactions" do
|
- form_tag :action => "create_collection" do
|
||||||
%p
|
%p
|
||||||
%b= _("Note") + ":"
|
%b= _("Note") + ":"
|
||||||
= text_field_tag "note"
|
= text_field_tag "note"
|
||||||
|
@ -17,4 +17,4 @@
|
||||||
%p
|
%p
|
||||||
= submit_tag _("Save")
|
= submit_tag _("Save")
|
||||||
|
|
|
|
||||||
= link_to _("Cancel"), :action => 'listOrdergroups'
|
= link_to _("Cancel"), :controller => 'finance/transactions'
|
|
@ -1,10 +0,0 @@
|
||||||
<%= error_messages_for 'financial_transaction' %>
|
|
||||||
|
|
||||||
<div class="edit_form" style="width:30em">
|
|
||||||
<p><b><%=h @group.name %></b>
|
|
||||||
<p><label for="financial_transaction_amount">Betrag</label>
|
|
||||||
<%= text_field 'financial_transaction', 'amount', :size => '10' %> Euro</p>
|
|
||||||
|
|
||||||
<p><label for="financial_transaction_note">Note</label><br/>
|
|
||||||
<%= text_area 'financial_transaction', 'note', :cols => "40", :rows => "5" %></p>
|
|
||||||
</div>
|
|
|
@ -1,9 +0,0 @@
|
||||||
<h1>Neue Transaktion</h1>
|
|
||||||
|
|
||||||
<% form_tag(:action => 'createTransaction', :id => @group) do -%>
|
|
||||||
<%= render :partial => 'financial_transactions/form' %>
|
|
||||||
<%= submit_tag 'Speichern' %>
|
|
||||||
<%= hidden_field 'financial_transaction', 'order_group_id' %>
|
|
||||||
<% end -%>
|
|
||||||
<br />
|
|
||||||
<%= link_to 'Zurück', :controller => 'finance' %>
|
|
|
@ -26,10 +26,10 @@
|
||||||
{ :name => "Suppliers", :url => suppliers_path, :access? => (u.role_suppliers?) }
|
{ :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?),
|
:access? => (u.role_finance?),
|
||||||
:subnav => [
|
:subnav => [
|
||||||
{ :name => "Ordergroups", :url => "/finance/listOrdergroups" },
|
{ :name => "Manage accounts", :url => "/finance/transactions" },
|
||||||
{ :name => "Balance orders", :url => "/finance/listOrders" },
|
{ :name => "Balance orders", :url => "/finance/listOrders" },
|
||||||
{ :name => "Invoices", :url => finance_invoices_path }
|
{ :name => "Invoices", :url => finance_invoices_path }
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,6 +2,7 @@ ActionController::Routing::Routes.draw do |map|
|
||||||
|
|
||||||
map.namespace :finance do |finance|
|
map.namespace :finance do |finance|
|
||||||
finance.resources :invoices
|
finance.resources :invoices
|
||||||
|
finance.connect 'transactions/:action/:id', :controller => 'transactions'
|
||||||
end
|
end
|
||||||
|
|
||||||
#map.resources :invoices
|
#map.resources :invoices
|
||||||
|
|
8
test/functional/finance/transactions_controller_test.rb
Normal file
8
test/functional/finance/transactions_controller_test.rb
Normal file
|
@ -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
|
Loading…
Reference in a new issue