africompta 1.9.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 704d5cbfc5f07dfb28510afdc7e48fc55ee903d5
4
+ data.tar.gz: c8f6198db4e0471ab210681789b9f9313770a55c
5
+ SHA512:
6
+ metadata.gz: ba2375b01c9751d0cfa28a39f7f422b41478239c96f1594279471ba3bfba46dd6c7f013c32f487ccc43b3e74e909ca7641d8e7c30ea34829f49d6c6ef1d1f7d2
7
+ data.tar.gz: 961f644f75673085a8eda617a4a3d9d6afc410137fe9b304c52514c4f16013af20a915e6f6b19259ea9a9884eb4822fe3b7d47fabeca48f83b97721652feca35
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ Backups
2
+ db.*
3
+ camping-1.5.old
4
+ nohup.out
5
+ .hg
6
+ *.log
7
+ config.yaml
8
+ data
9
+ tmp/
10
+ .idea
11
+ compta.db.*
12
+ test/test.pdf
13
+ test/*db
14
+ test/data*
15
+ /*gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in qooxview.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,74 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ africompta (1.9.8)
5
+ qooxview
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (3.1.1)
11
+ activesupport (= 3.1.1)
12
+ builder (~> 3.0.0)
13
+ i18n (~> 0.6)
14
+ activerecord (3.1.1)
15
+ activemodel (= 3.1.1)
16
+ activesupport (= 3.1.1)
17
+ arel (~> 2.2.1)
18
+ tzinfo (~> 0.3.29)
19
+ activesupport (3.1.1)
20
+ multi_json (~> 1.0)
21
+ arel (2.2.1)
22
+ builder (3.0.4)
23
+ chunky_png (1.3.4)
24
+ docsplit (0.7.6)
25
+ gettext (3.0.0)
26
+ locale (>= 2.0.5)
27
+ text
28
+ helper_classes (0.2.1)
29
+ i18n (0.6.0)
30
+ iconv (1.0.3)
31
+ json (1.8.2)
32
+ locale (2.0.8)
33
+ multi_json (1.0.3)
34
+ net-ldap (0.5.1)
35
+ parseconfig (0.5.2)
36
+ pdf-core (0.5.1)
37
+ prawn (2.0.1)
38
+ pdf-core (~> 0.5.1)
39
+ ttfunk (~> 1.4.0)
40
+ qooxview (2.0.0.pre.pre1)
41
+ activemodel (= 3.1.1)
42
+ activerecord (= 3.1.1)
43
+ activesupport (= 3.1.1)
44
+ arel (= 2.2.1)
45
+ chunky_png (= 1.3.4)
46
+ docsplit (= 0.7.6)
47
+ gettext (= 3.0.0)
48
+ helper_classes (= 0.2.1)
49
+ i18n (= 0.6.0)
50
+ iconv (= 1.0.3)
51
+ json (= 1.8.2)
52
+ locale (= 2.0.8)
53
+ multi_json (= 1.0.3)
54
+ net-ldap (= 0.5.1)
55
+ parseconfig (= 0.5.2)
56
+ pdf-core (= 0.5.1)
57
+ prawn (= 2.0.1)
58
+ rqrcode (= 0.4.2)
59
+ rubyzip (= 1.1.7)
60
+ serialport (= 1.3.1)
61
+ text (= 1.2.3)
62
+ ttfunk (= 1.4.0)
63
+ rqrcode (0.4.2)
64
+ rubyzip (1.1.7)
65
+ serialport (1.3.1)
66
+ text (1.2.3)
67
+ ttfunk (1.4.0)
68
+ tzinfo (0.3.44)
69
+
70
+ PLATFORMS
71
+ ruby
72
+
73
+ DEPENDENCIES
74
+ africompta!
data/TODO ADDED
@@ -0,0 +1,31 @@
1
+ - Users
2
+ - some users can add accounts
3
+ - Add remote repositories
4
+ - sync movements to a remote repository
5
+
6
+ Think
7
+ * What to do about a movement that includes an account not available to
8
+ that user?
9
+
10
+ JOLI
11
+ * Edition des comptes en cliquant dedans
12
+
13
+ Performance:
14
+ /movement/list:
15
+ Before making it better
16
+ Sorting movements: 0.06-0.08
17
+ Writing accounts: 1.05-1.2
18
+ Preparing edit: 0.50-0.65
19
+ Sorting a year: 0.29-0.37
20
+ Movements: 1.60-1.65
21
+ Total: 3.6-3.8
22
+
23
+ Kicking Markaby out of loops:
24
+ Sorting movements: 0.04-0.07
25
+ Writing accounts: 0.25-0.50
26
+ Preparing edit: 0.30-0.50
27
+ Sorting a year: 0.30-0.32
28
+ Movements: 0.25-0.35
29
+ Total: 1.15-1.50
30
+
31
+ Improvement: Down to 30%-50%
@@ -0,0 +1,128 @@
1
+ require 'test/unit'
2
+
3
+ class TC_Account < Test::Unit::TestCase
4
+ def setup
5
+ dputs(1){ 'Setting up new data'
6
+ }
7
+ Entities.delete_all_data()
8
+
9
+ dputs(2){ 'Resetting SQLite'
10
+ }
11
+ SQLite.dbs_close_all
12
+ FileUtils.cp( 'db.testGestion', 'data/compta.db')
13
+ SQLite.dbs_open_load_migrate
14
+
15
+ dputs(2){ 'And searching for some accounts'
16
+ }
17
+ @root = Accounts.match_by_name('Root')
18
+ @cash = Accounts.match_by_name('Cash')
19
+ @lending = Accounts.match_by_name('Lending')
20
+ @income = Accounts.match_by_name('Income')
21
+ @outcome = Accounts.match_by_name('Outcome')
22
+ @local = Users.match_by_name( 'local' )
23
+
24
+ @user_1 = Users.create( 'user1', '', 'pass')
25
+ @user_2 = Users.create( 'user2', '', 'pass')
26
+ end
27
+
28
+ def teardown
29
+ end
30
+
31
+ def test_path
32
+ assert_equal 'Root::Cash', @cash.path
33
+ end
34
+
35
+ def test_del_account
36
+ AccountRoot.accounts.each{|a|
37
+ dputs(1){"Found root-account #{a.inspect}"}
38
+ a.get_tree{|t|
39
+ dputs(1){
40
+ "#{t.path} - #{t.deleted.inspect}"
41
+ }
42
+ }
43
+ }
44
+ assert_equal false, @root.delete, @root.inspect
45
+ assert_equal false, @income.delete
46
+ old_index = @lending.rev_index
47
+ assert_equal true, @lending.delete
48
+ assert_operator old_index, :<, @lending.rev_index
49
+
50
+ Accounts.create_path('Root::Cash::Foo', '')
51
+ end
52
+
53
+ def test_account_root
54
+ Accounts.create_path('Root::Archive')
55
+ assert_equal nil, AccountRoot.archive
56
+
57
+ Accounts.create_path('Archive')
58
+ assert_not_equal nil, AccountRoot.archive
59
+ end
60
+
61
+ def test_clean
62
+ Accounts.create_path('Test')
63
+ Accounts.dump
64
+ count_mov, bad_mov, count_acc, bad_acc = AccountRoot.clean
65
+ assert_equal [ 4, 0, 19, 1 ],
66
+ [ count_mov, bad_mov, count_acc, bad_acc ]
67
+
68
+ Accounts.dump
69
+ count_mov, bad_mov, count_acc, bad_acc = AccountRoot.clean
70
+ assert_equal [ 4, 0, 19, 0 ],
71
+ [ count_mov, bad_mov, count_acc, bad_acc ]
72
+ end
73
+
74
+ def test_merge_two_users
75
+ @user_1.update_all
76
+ @u1 = {'user' => 'user1', 'pass' => 'pass'}
77
+ @user_2.update_all
78
+ @u2 = {'user' => 'user2', 'pass' => 'pass'}
79
+
80
+ a_id = ACaccess.post( 'account_get_id', @u1.merge( 'account' => 'Root') )
81
+ assert_equal '1', a_id
82
+
83
+ assert_equal '', ACaccess.get('accounts_get/user1,pass')
84
+ assert_equal '', ACaccess.get('accounts_get/user2,pass')
85
+ end
86
+
87
+ def test_merge_account_delete
88
+ test_merge_two_users
89
+
90
+ @lending.delete
91
+ dputs(3){@lending.inspect}
92
+ ACaccess.post( 'account_put', @u1.merge( 'account' => @lending.to_s ) )
93
+ assert_equal '', ACaccess.get('accounts_get/user1,pass')
94
+ assert_equal @lending.to_s, ACaccess.get('accounts_get/user2,pass').chomp
95
+ end
96
+
97
+ def test_merge_account_change
98
+ test_merge_two_users
99
+
100
+ @lending.name = 'Lendings'
101
+ @lending.new_index
102
+ dputs(3){@lending.inspect}
103
+ ACaccess.post( 'account_put', @u1.merge( 'account' => @lending.to_s ) )
104
+ assert_equal '', ACaccess.get('accounts_get/user1,pass')
105
+ assert_equal @lending.to_s, ACaccess.get('accounts_get/user2,pass').chomp
106
+
107
+ assert_equal 1, @lending.account_id
108
+ end
109
+
110
+ def test_print_pdf
111
+ @root.print_pdf( 'test.pdf', true )
112
+ end
113
+
114
+ def test_get_archives
115
+ (2011..2014).each{|y|
116
+ Movements.create( '', Date.new(y), 1000, @income, @cash )
117
+ }
118
+ Movements.create( '', Date.new(2013, 3, 3), 1000, @outcome, @cash )
119
+ Accounts.archive( 1, 2014 )
120
+
121
+ assert_equal %w(Archive::2011::Income Archive::2012::Income Archive::2013::Income),
122
+ Accounts.get_by_path('Root::Income').get_archives.collect{|a|
123
+ a.path }.sort
124
+ assert_equal %w(Archive::2012::Outcome Archive::2013::Outcome),
125
+ Accounts.get_by_path('Root::Outcome').get_archives.collect{|a|
126
+ a.path }.sort
127
+ end
128
+ end