has_accounts 0.8.2 → 0.8.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/app/models/account.rb +2 -3
- data/app/models/account.rb~ +1 -0
- data/app/models/booking.rb +2 -19
- data/app/models/booking.rb~ +1 -19
- data/lib/generators/has_accounts/templates/migration.rb~ +59 -0
- data/lib/generators/migration_generator.rb~ +27 -0
- metadata +15 -17
- data/app/models/account_type.rb~ +0 -6
- data/lib/has_accounts/core_ext/rounding.rb~ +0 -31
- data/lib/has_accounts/model.rb~ +0 -58
- data/lib/has_accounts/railtie.rb~ +0 -10
data/Rakefile
CHANGED
data/app/models/account.rb
CHANGED
@@ -51,9 +51,10 @@ class Account < ActiveRecord::Base
|
|
51
51
|
|
52
52
|
# Calculations
|
53
53
|
def turnover(selector = Date.today, inclusive = true)
|
54
|
+
equality = "=" if inclusive
|
55
|
+
|
54
56
|
if selector.is_a? Range or selector.is_a? Array
|
55
57
|
if selector.first.is_a? Booking
|
56
|
-
equality = "=" if inclusive
|
57
58
|
if selector.first.value_date == selector.last.value_date
|
58
59
|
condition = ["date(value_date) = :value_date AND id >#{equality} :first_id AND id <#{equality} :last_id", {
|
59
60
|
:value_date => selector.first.value_date,
|
@@ -82,11 +83,9 @@ class Account < ActiveRecord::Base
|
|
82
83
|
end
|
83
84
|
else
|
84
85
|
if selector.is_a? Booking
|
85
|
-
equality = "=" if inclusive
|
86
86
|
# date(value_date) is needed on sqlite!
|
87
87
|
condition = ["(value_date < :value_date) OR (date(value_date) = :value_date AND id <#{equality} :id)", {:value_date => selector.value_date, :id => selector.id}]
|
88
88
|
else
|
89
|
-
equality = "=" if inclusive
|
90
89
|
condition = ["date(value_date) <#{equality} ?", selector]
|
91
90
|
end
|
92
91
|
end
|
data/app/models/account.rb~
CHANGED
data/app/models/booking.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
class Booking < ActiveRecord::Base
|
2
2
|
# Validation
|
3
|
-
validates_presence_of :debit_account, :credit_account, :title, :
|
3
|
+
validates_presence_of :debit_account, :credit_account, :title, :value_date
|
4
|
+
validates :amount, :presence => true, :numericality => true
|
4
5
|
validates_time :value_date
|
5
6
|
|
6
7
|
# Account
|
@@ -74,24 +75,6 @@ class Booking < ActiveRecord::Base
|
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
77
|
-
def self.scope_by_value_date(value_date)
|
78
|
-
scoping = self.default_scoping - [@by_value_scope]
|
79
|
-
|
80
|
-
@by_value_scope = {:find => {:conditions => {:value_date => value_date}}}
|
81
|
-
scoping << @by_value_scope
|
82
|
-
|
83
|
-
Thread.current["#{self}_scoped_methods"] = nil
|
84
|
-
self.default_scoping = scoping
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.filter(controller, &block)
|
88
|
-
if controller.value_date_scope
|
89
|
-
with_scope(:find => {:conditions => {:value_date => controller.value_date_scope}}, &block)
|
90
|
-
else
|
91
|
-
block.call
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
78
|
# Standard methods
|
96
79
|
def to_s(format = :default)
|
97
80
|
case format
|
data/app/models/booking.rb~
CHANGED
@@ -64,7 +64,7 @@ class Booking < ActiveRecord::Base
|
|
64
64
|
rescue ArgumentError
|
65
65
|
end
|
66
66
|
|
67
|
-
where("title LIKE :text OR comments
|
67
|
+
where("title LIKE :text OR comments LIKE :text OR amount = :amount OR value_date = :value_date", :text => text, :amount => amount, :value_date => date)
|
68
68
|
}
|
69
69
|
|
70
70
|
# Returns array of all years we have bookings for
|
@@ -74,24 +74,6 @@ class Booking < ActiveRecord::Base
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
|
-
def self.scope_by_value_date(value_date)
|
78
|
-
scoping = self.default_scoping - [@by_value_scope]
|
79
|
-
|
80
|
-
@by_value_scope = {:find => {:conditions => {:value_date => value_date}}}
|
81
|
-
scoping << @by_value_scope
|
82
|
-
|
83
|
-
Thread.current["#{self}_scoped_methods"] = nil
|
84
|
-
self.default_scoping = scoping
|
85
|
-
end
|
86
|
-
|
87
|
-
def self.filter(controller, &block)
|
88
|
-
if controller.value_date_scope
|
89
|
-
with_scope(:find => {:conditions => {:value_date => controller.value_date_scope}}, &block)
|
90
|
-
else
|
91
|
-
block.call
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
77
|
# Standard methods
|
96
78
|
def to_s(format = :default)
|
97
79
|
case format
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class SetupHasAccountsEngine < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table "account_types", :force => true do |t|
|
4
|
+
t.string "name", :limit => 100
|
5
|
+
t.string "title", :limit => 100
|
6
|
+
t.datetime "created_at"
|
7
|
+
t.datetime "updated_at"
|
8
|
+
end
|
9
|
+
|
10
|
+
create_table "accounts", :force => true do |t|
|
11
|
+
t.string "title", :limit => 100
|
12
|
+
t.integer "parent_id"
|
13
|
+
t.integer "account_type_id"
|
14
|
+
t.integer "number"
|
15
|
+
t.string "code"
|
16
|
+
t.integer "type"
|
17
|
+
t.integer "holder_id"
|
18
|
+
t.string "holder_type"
|
19
|
+
t.integer "bank_id"
|
20
|
+
t.integer "esr_id"
|
21
|
+
t.integer "pc_id"
|
22
|
+
t.datetime "created_at"
|
23
|
+
t.datetime "updated_at"
|
24
|
+
end
|
25
|
+
|
26
|
+
add_index "accounts", ["bank_id"], :name => "index_accounts_on_bank_id"
|
27
|
+
add_index "accounts", ["code"], :name => "index_accounts_on_code"
|
28
|
+
add_index "accounts", ["holder_id", "holder_type"], :name => "index_accounts_on_holder_id_and_holder_type"
|
29
|
+
add_index "accounts", ["type"], :name => "index_accounts_on_type"
|
30
|
+
|
31
|
+
create_table "banks", :force => true do |t|
|
32
|
+
t.integer "vcard_id"
|
33
|
+
t.datetime "created_at"
|
34
|
+
t.datetime "updated_at"
|
35
|
+
end
|
36
|
+
|
37
|
+
create_table "bookings", :force => true do |t|
|
38
|
+
t.string "title", :limit => 100
|
39
|
+
t.decimal "amount"
|
40
|
+
t.integer "credit_account_id"
|
41
|
+
t.integer "debit_account_id"
|
42
|
+
t.date "value_date"
|
43
|
+
t.text "comments", :limit => 1000, :default => ""
|
44
|
+
t.string "scan"
|
45
|
+
t.string "debit_currency", :default => "CHF"
|
46
|
+
t.string "credit_currency", :default => "CHF"
|
47
|
+
t.float "exchange_rate", :default => 1.0
|
48
|
+
t.datetime "created_at"
|
49
|
+
t.datetime "updated_at"
|
50
|
+
t.integer "reference_id"
|
51
|
+
t.string "reference_type"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.down
|
56
|
+
drop_table :account_types, :accounts, :banks, :bookings
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
|
4
|
+
module HasVcards
|
5
|
+
class MigrationGenerator < Rails::Generators::Base
|
6
|
+
include Rails::Generators::Migration
|
7
|
+
|
8
|
+
def self.source_root
|
9
|
+
@source_root ||= File.join(File.dirname(__FILE__), 'templates')
|
10
|
+
end
|
11
|
+
|
12
|
+
# Implement the required interface for Rails::Generators::Migration.
|
13
|
+
# taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
|
14
|
+
def self.next_migration_number(dirname)
|
15
|
+
if ActiveRecord::Base.timestamped_migrations
|
16
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
17
|
+
else
|
18
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_migration_file
|
23
|
+
migration_template 'migration.rb', 'db/migrate/create_has_vcards.rb'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_accounts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 57
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 8
|
9
|
-
-
|
10
|
-
version: 0.8.
|
9
|
+
- 3
|
10
|
+
version: 0.8.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Simon H\xC3\xBCrlimann (CyT)"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-06 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|
@@ -29,25 +29,23 @@ extensions: []
|
|
29
29
|
extra_rdoc_files: []
|
30
30
|
|
31
31
|
files:
|
32
|
-
- app/models/account.rb~
|
33
32
|
- app/models/account_scope_extension.rb
|
33
|
+
- app/models/booking.rb~
|
34
34
|
- app/models/bank.rb
|
35
35
|
- app/models/account.rb
|
36
|
-
- app/models/booking.rb
|
37
|
-
- app/models/account_type.rb~
|
38
|
-
- app/models/account_type.rb
|
39
36
|
- app/models/bank_account.rb
|
40
|
-
- app/models/
|
41
|
-
-
|
42
|
-
-
|
43
|
-
- lib/has_accounts.rb
|
44
|
-
- lib/has_accounts/model.rb~
|
37
|
+
- app/models/account_type.rb
|
38
|
+
- app/models/booking.rb
|
39
|
+
- app/models/account.rb~
|
40
|
+
- lib/has_accounts/railtie.rb
|
45
41
|
- lib/has_accounts/class_methods.rb
|
46
|
-
- lib/has_accounts/railtie.rb~
|
47
|
-
- lib/has_accounts/core_ext/rounding.rb~
|
48
42
|
- lib/has_accounts/core_ext/rounding.rb
|
49
|
-
- lib/has_accounts/railtie.rb
|
50
43
|
- lib/has_accounts/model.rb
|
44
|
+
- lib/has_accounts.rb
|
45
|
+
- lib/generators/has_accounts/migration_generator.rb
|
46
|
+
- lib/generators/has_accounts/templates/migration.rb~
|
47
|
+
- lib/generators/has_accounts/templates/migration.rb
|
48
|
+
- lib/generators/migration_generator.rb~
|
51
49
|
- MIT-LICENSE
|
52
50
|
- Rakefile
|
53
51
|
- README.md
|
@@ -81,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
81
79
|
requirements: []
|
82
80
|
|
83
81
|
rubyforge_project:
|
84
|
-
rubygems_version: 1.
|
82
|
+
rubygems_version: 1.5.2
|
85
83
|
signing_key:
|
86
84
|
specification_version: 3
|
87
85
|
summary: HasAccounts provides models for financial accounting.
|
data/app/models/account_type.rb~
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
module HasAccounts #:nodoc:
|
2
|
-
module CoreExtensions #:nodoc:
|
3
|
-
module Rounding
|
4
|
-
# Rounds the float according to currency rules.
|
5
|
-
# Currently targeted to Swiss Francs (CHF), usable
|
6
|
-
# for all currencies having 0.05 as smallest unit.
|
7
|
-
#
|
8
|
-
# x = 1.337
|
9
|
-
# x.round # => 1.35
|
10
|
-
def currency_round
|
11
|
-
if self.nil?
|
12
|
-
return 0.0
|
13
|
-
else
|
14
|
-
return (self * 20).round / 20.0
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
module BigDecimal
|
20
|
-
module Rounding
|
21
|
-
def currency_round
|
22
|
-
if self.nil?
|
23
|
-
return BigDecimal.new("0")
|
24
|
-
else
|
25
|
-
return (self * 20).round / 20
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/lib/has_accounts/model.rb~
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
module HasAccounts
|
2
|
-
module Model
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
class_inheritable_accessor :direct_account
|
7
|
-
|
8
|
-
has_many :bookings, :as => :reference, :dependent => :destroy do
|
9
|
-
# TODO: duplicated in Booking (without parameter)
|
10
|
-
def direct_balance(value_date = nil, direct_account = nil)
|
11
|
-
return BigDecimal.new('0') unless proxy_owner.direct_account
|
12
|
-
|
13
|
-
direct_account ||= proxy_owner.direct_account
|
14
|
-
balance = BigDecimal.new('0')
|
15
|
-
|
16
|
-
direct_bookings = scoped
|
17
|
-
direct_bookings = direct_bookings.where("date(value_date) <= ?", value_date) if value_date
|
18
|
-
|
19
|
-
for booking in direct_bookings.all
|
20
|
-
balance += booking.accounted_amount(direct_account)
|
21
|
-
end
|
22
|
-
|
23
|
-
balance
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
module ClassMethods
|
29
|
-
end
|
30
|
-
|
31
|
-
module InstanceMethods
|
32
|
-
# Delegate to class
|
33
|
-
def direct_account
|
34
|
-
self.class.direct_account
|
35
|
-
end
|
36
|
-
|
37
|
-
# Build booking
|
38
|
-
def build_booking(params = {}, template_code = nil)
|
39
|
-
template_code ||= self.class.to_s.underscore + ':invoice'
|
40
|
-
booking_template = BookingTemplate.find_by_code(template_code)
|
41
|
-
|
42
|
-
# Prepare booking parameters
|
43
|
-
booking_params = {:reference => self}
|
44
|
-
booking_params.merge!(params)
|
45
|
-
|
46
|
-
# Build and assign booking
|
47
|
-
booking = booking_template.build_booking(booking_params)
|
48
|
-
bookings << booking
|
49
|
-
|
50
|
-
booking
|
51
|
-
end
|
52
|
-
|
53
|
-
def balance(value_date = nil, direct_account = nil)
|
54
|
-
bookings.direct_balance(value_date, direct_account)
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,10 +0,0 @@
|
|
1
|
-
require 'has_accounts'
|
2
|
-
require 'rails'
|
3
|
-
|
4
|
-
module HasAccounts
|
5
|
-
class Railtie < Rails::Engine
|
6
|
-
Float.send :include, HasAccounts::CoreExtensions::Rounding
|
7
|
-
Fixnum.send :include, HasAccounts::CoreExtensions::Rounding
|
8
|
-
BigDecimal.send :include, HasAccounts::CoreExtensions::Rounding
|
9
|
-
end
|
10
|
-
end
|