africompta 1.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +74 -0
- data/TODO +31 -0
- data/Test/ac_account.rb +128 -0
- data/Test/ac_africompta.rb +1001 -0
- data/Test/ac_big.rb +62 -0
- data/Test/ac_movement.rb +59 -0
- data/Test/ac_sqlite.rb +139 -0
- data/Test/config_test.yaml +31 -0
- data/Test/db.testGestion +0 -0
- data/Test/test.rb +39 -0
- data/VERSION +140 -0
- data/africompta.gemspec +20 -0
- data/lib/africompta/acaccess.rb +257 -0
- data/lib/africompta/acqooxview.rb +77 -0
- data/lib/africompta/africompta.rb +83 -0
- data/lib/africompta/entities/account.rb +995 -0
- data/lib/africompta/entities/acschemas.rb +16 -0
- data/lib/africompta/entities/movement.rb +292 -0
- data/lib/africompta/entities/remote.rb +27 -0
- data/lib/africompta/entities/users.rb +55 -0
- data/lib/africompta/views/edit/movement.rb +8 -0
- data/lib/africompta/views/edit/tabs.rb +8 -0
- data/lib/africompta/views/report/annual.rb +3 -0
- data/lib/africompta/views/report/tabs.rb +3 -0
- data/lib/africompta.rb +2 -0
- metadata +84 -0
data/Test/ac_big.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
TESTBIG=false
|
4
|
+
|
5
|
+
class TC_Big < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
setup_db
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
Entities.save_all
|
12
|
+
end
|
13
|
+
|
14
|
+
def setup_db
|
15
|
+
dputs_func
|
16
|
+
dputs(1) { 'Setting up big data' }
|
17
|
+
Entities.delete_all_data()
|
18
|
+
|
19
|
+
dputs(2) { 'Resetting SQLite' }
|
20
|
+
SQLite.dbs_close_all
|
21
|
+
dputs(2) { 'Loading big data' }
|
22
|
+
MigrationVersions.create({:class_name => 'Account', :version => 2})
|
23
|
+
MigrationVersions.create({:class_name => 'Movement', :version => 1})
|
24
|
+
MigrationVersions.save
|
25
|
+
FileUtils.cp('db.man', 'data/compta.db')
|
26
|
+
SQLite.dbs_open_load_migrate
|
27
|
+
dputs(2) { 'Finished loading' }
|
28
|
+
Entities.save_all
|
29
|
+
@user = Users.match_by_name('local')
|
30
|
+
end
|
31
|
+
|
32
|
+
def reload_all
|
33
|
+
Entities.delete_all_data(true)
|
34
|
+
Entities.load_all
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_matches_speed_improved
|
38
|
+
dputs_func
|
39
|
+
require 'benchmark'
|
40
|
+
|
41
|
+
ret = ''
|
42
|
+
dputs(1){ @user.account_index}
|
43
|
+
dputs(1) { Benchmark.measure {
|
44
|
+
ret = Accounts.data.select { |k, v|
|
45
|
+
v._rev_index > 14000 }.
|
46
|
+
collect { |k, v| Accounts.get_data_instance(k) }.
|
47
|
+
sort_by { |a| a.path }.reverse.
|
48
|
+
collect { |a| a.to_s }.
|
49
|
+
join("\n")
|
50
|
+
}.to_s
|
51
|
+
}
|
52
|
+
dputs(1){ ret.length}
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_matches_speed_old
|
56
|
+
dputs_func
|
57
|
+
dputs(1) { Benchmark.measure {
|
58
|
+
ACaccess.accounts_fetch(@user)
|
59
|
+
}.to_s
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
data/Test/ac_movement.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
|
3
|
+
class TC_Movement < Test::Unit::TestCase
|
4
|
+
def setup
|
5
|
+
dputs(1) { 'Setting up new data' }
|
6
|
+
Entities.delete_all_data()
|
7
|
+
|
8
|
+
dputs(2) { 'Resetting SQLite' }
|
9
|
+
SQLite.dbs_close_all
|
10
|
+
FileUtils.cp('db.testGestion', 'data/compta.db')
|
11
|
+
SQLite.dbs_open_load_migrate
|
12
|
+
|
13
|
+
dputs(2) { 'And searching for some accounts' }
|
14
|
+
@root = Accounts.match_by_name('Root')
|
15
|
+
@cash = Accounts.match_by_name('Cash')
|
16
|
+
@lending = Accounts.match_by_name('Lending')
|
17
|
+
@income = Accounts.match_by_name('Income')
|
18
|
+
@outcome = Accounts.match_by_name('Outcome')
|
19
|
+
@local = Users.match_by_name('local')
|
20
|
+
|
21
|
+
@user_1 = Users.create('user1', '', 'pass')
|
22
|
+
@user_2 = Users.create('user2', '', 'pass')
|
23
|
+
end
|
24
|
+
|
25
|
+
def teardown
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_move
|
29
|
+
value_cash = @cash.total.to_f
|
30
|
+
value_lending = @lending.total.to_f
|
31
|
+
value_income = @income.total.to_f
|
32
|
+
m = Movements.create('test', Date.today, 1000, @cash, @lending)
|
33
|
+
assert_equal @cash, m.account_src
|
34
|
+
assert_equal @lending, m.account_dst
|
35
|
+
assert_equal value_cash + 1000, @cash.total.to_f
|
36
|
+
assert_equal value_lending - 1000, @lending.total.to_f
|
37
|
+
|
38
|
+
m.move_from_to(@cash, @income)
|
39
|
+
assert_equal @income, m.account_src
|
40
|
+
assert_equal @lending, m.account_dst
|
41
|
+
assert_equal value_cash, @cash.total.to_f
|
42
|
+
assert_equal value_income - 1000, @income.total.to_f
|
43
|
+
assert_equal value_lending - 1000, @lending.total.to_f
|
44
|
+
|
45
|
+
m.move_from_to(@lending, @cash)
|
46
|
+
assert_equal @income, m.account_src
|
47
|
+
assert_equal @cash, m.account_dst
|
48
|
+
assert_equal value_cash - 1000, @cash.total.to_f
|
49
|
+
assert_equal value_income - 1000, @income.total.to_f
|
50
|
+
assert_equal value_lending, @lending.total.to_f
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_search_index
|
54
|
+
res = Movements.search_index_range(2, 3)
|
55
|
+
assert_equal 2, res.length
|
56
|
+
assert_equal Movement, res.first.class
|
57
|
+
assert_equal [2, 3], res.map { |m| m.rev_index }
|
58
|
+
end
|
59
|
+
end
|
data/Test/ac_sqlite.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'sqlite3'
|
3
|
+
|
4
|
+
class TC_SQLite < Test::Unit::TestCase
|
5
|
+
def setup
|
6
|
+
Entities.delete_all_data()
|
7
|
+
SQLite.dbs_close_all
|
8
|
+
FileUtils.cp('db.testGestion', 'data/compta.db')
|
9
|
+
SQLite.dbs_open_load_migrate
|
10
|
+
|
11
|
+
dputs(2) { 'And searching for some accounts' }
|
12
|
+
@root = Accounts.match_by_name('Root')
|
13
|
+
@cash = Accounts.match_by_name('Cash')
|
14
|
+
@lending = Accounts.match_by_name('Lending')
|
15
|
+
@income = Accounts.match_by_name('Income')
|
16
|
+
@outcome = Accounts.match_by_name('Outcome')
|
17
|
+
@local = Users.match_by_name('local')
|
18
|
+
|
19
|
+
@user_1 = Users.create('user1', '', 'pass')
|
20
|
+
@user_2 = Users.create('user2', '', 'pass')
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_check_accounts
|
27
|
+
Entities.delete_all_data
|
28
|
+
Entities.load_all
|
29
|
+
|
30
|
+
tmpfile = '/tmp/compta.db'
|
31
|
+
tmpfile2 = '/tmp/compta2.db'
|
32
|
+
|
33
|
+
FileUtils.cp('data/compta.db', tmpfile)
|
34
|
+
in_db, diff, in_local = Accounts.check_against_db(tmpfile)
|
35
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
36
|
+
assert_equal [], in_db
|
37
|
+
assert_equal [], diff
|
38
|
+
assert_equal [], in_local
|
39
|
+
|
40
|
+
Accounts.create('Services', '', Accounts.match_by_name('Income'))
|
41
|
+
in_db, diff, in_local = Accounts.check_against_db(tmpfile)
|
42
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
43
|
+
assert_equal [], in_db
|
44
|
+
assert_equal [], diff
|
45
|
+
assert_equal Accounts.match_by_name('Services').to_s.to_a,
|
46
|
+
in_local
|
47
|
+
|
48
|
+
Accounts.save
|
49
|
+
FileUtils.cp('data/compta.db', tmpfile2)
|
50
|
+
Accounts.match_by_name('Lending').name = 'Prêts'
|
51
|
+
in_db, diff, in_local = Accounts.check_against_db(tmpfile2)
|
52
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
53
|
+
assert_equal [], in_db
|
54
|
+
assert_equal 1, diff.length
|
55
|
+
assert_equal [], in_local
|
56
|
+
|
57
|
+
Accounts.delete_all
|
58
|
+
Accounts.storage[:SQLiteAC].close_db
|
59
|
+
FileUtils.cp(tmpfile, 'data/compta.db')
|
60
|
+
SQLite.dbs_open_load_migrate
|
61
|
+
in_db, diff, in_local = Accounts.check_against_db(tmpfile2)
|
62
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
63
|
+
assert_equal [Accounts.create('Services', '', Accounts.match_by_name('Income')).to_s],
|
64
|
+
in_db
|
65
|
+
assert_equal 0, diff.length
|
66
|
+
assert_equal [], in_local
|
67
|
+
end
|
68
|
+
|
69
|
+
def add_mov(desc, value, src, dst)
|
70
|
+
Movements.create(desc, Date.today, value.to_f,
|
71
|
+
Accounts.match_by_name(src), Accounts.match_by_name(dst))
|
72
|
+
end
|
73
|
+
|
74
|
+
def add_movements
|
75
|
+
[
|
76
|
+
%w( Income Cash course1 10),
|
77
|
+
%w( Income Cash course2 20),
|
78
|
+
%w( Income Cash course3 30),
|
79
|
+
%w( Cash Outcome salary1 25),
|
80
|
+
%w( Cash Outcome salary2 15),
|
81
|
+
].each { |src, dst, desc, value|
|
82
|
+
add_mov desc, value, src, dst
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_check_movements
|
87
|
+
Entities.delete_all_data()
|
88
|
+
Entities.load_all
|
89
|
+
|
90
|
+
add_movements
|
91
|
+
Movements.save
|
92
|
+
tmpfile = '/tmp/compta.db'
|
93
|
+
tmpfile2 = '/tmp/compta2.db'
|
94
|
+
|
95
|
+
FileUtils.cp('data/compta.db', tmpfile)
|
96
|
+
in_db, diff, in_local = Movements.check_against_db(tmpfile)
|
97
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
98
|
+
assert_equal [], in_db
|
99
|
+
assert_equal [], diff
|
100
|
+
assert_equal [], in_local
|
101
|
+
|
102
|
+
add_mov 'Services', 20, 'Income', 'Cash'
|
103
|
+
in_db, diff, in_local = Movements.check_against_db(tmpfile)
|
104
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
105
|
+
assert_equal [], in_db
|
106
|
+
assert_equal [], diff
|
107
|
+
assert_equal Movements.match_by_desc('Services').to_s.to_a,
|
108
|
+
in_local
|
109
|
+
|
110
|
+
add_mov 'Services2', 20, 'Income', 'Cash'
|
111
|
+
Movements.match_by_desc('Services2').delete
|
112
|
+
Movements.save
|
113
|
+
FileUtils.cp('data/compta.db', tmpfile2)
|
114
|
+
in_db, diff, in_local = Movements.check_against_db(tmpfile2)
|
115
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
116
|
+
assert_equal [], in_db
|
117
|
+
assert_equal [], diff
|
118
|
+
assert_equal [], in_local
|
119
|
+
|
120
|
+
Movements.save
|
121
|
+
FileUtils.cp('data/compta.db', tmpfile2)
|
122
|
+
Movements.match_by_desc('Services').desc = 'Prêts'
|
123
|
+
in_db, diff, in_local = Movements.check_against_db(tmpfile2)
|
124
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
125
|
+
assert_equal [], in_db
|
126
|
+
assert_equal 1, diff.length
|
127
|
+
assert_equal [], in_local
|
128
|
+
|
129
|
+
Movements.delete_all
|
130
|
+
Movements.storage[:SQLiteAC].close_db
|
131
|
+
FileUtils.cp(tmpfile, 'data/compta.db')
|
132
|
+
SQLite.dbs_open_load_migrate
|
133
|
+
in_db, diff, in_local = Movements.check_against_db(tmpfile2)
|
134
|
+
dputs(3) { "#{in_db.inspect}\n#{diff.inspect}\n#{in_local.inspect}" }
|
135
|
+
assert_equal [add_mov('Services', 20, 'Income', 'Cash').to_s], in_db
|
136
|
+
assert_equal 0, diff.length
|
137
|
+
assert_equal [], in_local
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
StorageType:
|
2
|
+
CSV:
|
3
|
+
csv_dir: ./data2/
|
4
|
+
|
5
|
+
#autologin: linus
|
6
|
+
#autologin: admin
|
7
|
+
|
8
|
+
title: "Gestion du Markas-al-Nour"
|
9
|
+
|
10
|
+
log: events.log
|
11
|
+
|
12
|
+
compta_due:
|
13
|
+
host: "http://localhost:3301"
|
14
|
+
user: "gestion"
|
15
|
+
pass: "gestion777"
|
16
|
+
src: "Emprunts::"
|
17
|
+
dst: "Entrés"
|
18
|
+
|
19
|
+
StorageHandler:
|
20
|
+
Replace:
|
21
|
+
LDAP: CSV
|
22
|
+
|
23
|
+
AfriCompta:
|
24
|
+
disabled: true
|
25
|
+
|
26
|
+
DiplomaDir: Diplomas
|
27
|
+
|
28
|
+
Entities:
|
29
|
+
LogActions:
|
30
|
+
logging: false
|
31
|
+
|
data/Test/db.testGestion
ADDED
Binary file
|
data/Test/test.rb
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
##!/usr/local/bin/ruby -I.
|
3
|
+
##!/usr/bin/ruby -I.. -I../../QooxView -I../../AfriCompta -I../../LibNet -I. -wKU
|
4
|
+
%w( QooxView AfriCompta HelperClasses/lib ).each{|l|
|
5
|
+
$LOAD_PATH.push "../../#{l}"
|
6
|
+
}
|
7
|
+
$LOAD_PATH.push '.'
|
8
|
+
|
9
|
+
require 'test/unit'
|
10
|
+
require 'fileutils'
|
11
|
+
|
12
|
+
FileUtils.rm_rf('data/')
|
13
|
+
FileUtils.rm_rf('data2/')
|
14
|
+
|
15
|
+
CONFIG_FILE='config_test.yaml'
|
16
|
+
DEBUG_LVL=0
|
17
|
+
|
18
|
+
require 'QooxView'
|
19
|
+
require 'ACQooxView'
|
20
|
+
require 'ACaccess'
|
21
|
+
|
22
|
+
Permission.add( 'default', 'View,Welcome' )
|
23
|
+
Permission.add( 'admin', '.*', '.*' )
|
24
|
+
Permission.add( 'internet', 'Internet,PersonShow', 'default' )
|
25
|
+
Permission.add( 'student', '', 'internet' )
|
26
|
+
Permission.add( 'professor', '', 'student' )
|
27
|
+
Permission.add( 'secretary', 'PersonModify', 'professor' )
|
28
|
+
|
29
|
+
qooxView = QooxView.init( '../Entities', '../Views' )
|
30
|
+
|
31
|
+
tests = %w( africompta account movement sqlite )
|
32
|
+
#tests = %w( africompta )
|
33
|
+
#tests = %w( sqlite )
|
34
|
+
#tests = %w( big )
|
35
|
+
tests.each{|t|
|
36
|
+
require "ac_#{t}"
|
37
|
+
}
|
38
|
+
|
39
|
+
# Fails test_archive_sum_up
|
data/VERSION
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
Sometime
|
2
|
+
+ Change the movement/list-description field so it automatically
|
3
|
+
takes the optimum width... Javascript-magic...
|
4
|
+
+ Put money from multiple into multiple accounts, but only once into any
|
5
|
+
tree!
|
6
|
+
+ UNDO
|
7
|
+
|
8
|
+
? - 1.3
|
9
|
+
+ Present transactions
|
10
|
+
? - 1.2
|
11
|
+
+ Interface for Josue
|
12
|
+
? - 1.1
|
13
|
+
+ Better user-authentification
|
14
|
+
+ Jobs for users
|
15
|
+
+ Open / close trees in account-view
|
16
|
+
+ Good <titles>
|
17
|
+
|
18
|
+
130227 - 1.0.1
|
19
|
+
+ Added interface for QooxView-Entities
|
20
|
+
+ Use JSON instead of to_s and from_s -> take care about id's of
|
21
|
+
the objects...
|
22
|
+
+ lots of changes in account-handling
|
23
|
+
+ Fixed bugs
|
24
|
+
+ added possibility to show archives
|
25
|
+
+ cleaned up front-interface
|
26
|
+
+ Archive accounts and movements and hide them
|
27
|
+
+ Delete accounts and merge them
|
28
|
+
+ add "status" field with bits
|
29
|
+
100421 - 0.9.8
|
30
|
+
+ added a movements_put to the code, so that a lot of movements don't
|
31
|
+
block the server
|
32
|
+
+ removed several errors
|
33
|
+
090601 - 0.9.7
|
34
|
+
+ Deleted the menu for chosing accounts, too slow
|
35
|
+
090519 - 0.9.6
|
36
|
+
+ add menu for chosing accoun - it's slow, very slow!t
|
37
|
+
+ translation to french
|
38
|
+
+ Test for bad movements in own menu
|
39
|
+
+ merged report_c and report_a
|
40
|
+
+ Debug-level on 1
|
41
|
+
+ ledger - "grand livre" - first try
|
42
|
+
081103 - 0.9.5
|
43
|
+
+ Fixed "changed"-method for ActiveRecord 2.1.x
|
44
|
+
+ Fixed wrong starting account in "report"-view
|
45
|
+
081028 - 0.9.4
|
46
|
+
+ Speed up merge
|
47
|
+
- Accounts and Movements get a changed "revision":
|
48
|
+
it is a global (one for Accounts and one for Movements)
|
49
|
+
counter that increases steadily. If something is changed,
|
50
|
+
the counter gets increased by one.
|
51
|
+
Remote.account_index and Remote.movement_index point to the
|
52
|
+
last Account and Movement transferred, while
|
53
|
+
User.account_index and User.movement_index do the same on
|
54
|
+
the server side
|
55
|
+
User('local').account_index and User('local').movement_index
|
56
|
+
point to the actual index used in the local database
|
57
|
+
081009 - 0.9.3
|
58
|
+
* account-edit: only propagate multiplier if changed
|
59
|
+
* Only show range of time in accounts
|
60
|
+
* Insert checkboxes on movements and allow moving/deleting
|
61
|
+
080717 - 0.9.2
|
62
|
+
* Merging works again when root-account is not id==0
|
63
|
+
* Cleanup "bypass_markaby" in movement.rb::movement_list
|
64
|
+
080514 - 0.9.1
|
65
|
+
* Speed up movement-listing (wget: 3.0s -> 0.95s)
|
66
|
+
* Kick account-listing with totals and replace with a
|
67
|
+
combobox
|
68
|
+
* Fix delete movement (still shown till next update)
|
69
|
+
* Report: Add all sub-accounts in the total of each month,
|
70
|
+
including the name of the direct child
|
71
|
+
080221 - 0.9
|
72
|
+
* Throw away user-restriction on accounts -
|
73
|
+
has to be re-evaluated in version 1.1
|
74
|
+
* Sort accounts alphabetically in lists
|
75
|
+
* Multiplier for accounts: +1 or -1
|
76
|
+
* When adding account, take multiplier of parent
|
77
|
+
account
|
78
|
+
* Keep last account in "new movement"
|
79
|
+
* Monthly and yearly sums
|
80
|
+
* Speed: setting multipliers in merge-mode doesn't need to go
|
81
|
+
recursif!
|
82
|
+
080213 - 0.8.5
|
83
|
+
* Merge accounts
|
84
|
+
* Put a revision in the accounts, so they
|
85
|
+
can be changed, too
|
86
|
+
* Allow for accounts to be merged back and
|
87
|
+
forth
|
88
|
+
080212 - 0.8.4
|
89
|
+
* Merge transactions
|
90
|
+
* If both change the transaction, the one
|
91
|
+
who does the second merge looses!
|
92
|
+
* Only negativ revisions are to be sent,
|
93
|
+
not revision == 0!
|
94
|
+
* Movement
|
95
|
+
* /movement/list needs to take into account
|
96
|
+
the $ of the sub-accounts
|
97
|
+
* Interface
|
98
|
+
* More nice interface
|
99
|
+
080201 - 0.8.3
|
100
|
+
* Merge transactions
|
101
|
+
* Deleted transactions (value == 0)
|
102
|
+
080130 - 0.8.2
|
103
|
+
* Merge transactions
|
104
|
+
* Movements get the global_id of the accounts
|
105
|
+
* Fix the problem of who's older... or newer, btw.
|
106
|
+
using a "version"-string
|
107
|
+
* Only send new movements to the other side
|
108
|
+
080120 - 0.8.1
|
109
|
+
* Movements
|
110
|
+
* Editing, Deleting
|
111
|
+
080119 - 0.8
|
112
|
+
* Add movements
|
113
|
+
* Date, Amount, src, dst
|
114
|
+
* Adding
|
115
|
+
080116 - 0.7.1
|
116
|
+
* sync to a remote repository
|
117
|
+
* Check for authentification
|
118
|
+
* Add and update accounts
|
119
|
+
* added user "local" with random-md5-hashed string
|
120
|
+
for unique representation of database
|
121
|
+
* user "local" is not shown for editing
|
122
|
+
* added unique account-ids Account.global_id based
|
123
|
+
on the user "local"
|
124
|
+
* create global_id only upon creation of Account
|
125
|
+
and not when editing
|
126
|
+
* Verify account-viewing when root-account is missing
|
127
|
+
080114 - 0.7
|
128
|
+
* Add remote repositories
|
129
|
+
080109 - 0.6
|
130
|
+
* Users
|
131
|
+
* Users and Accounts
|
132
|
+
* Users have passwords
|
133
|
+
* Accounts has_and_belongs_to_many Users
|
134
|
+
* Edit of Users
|
135
|
+
* Accounts
|
136
|
+
* Edit of Users
|
137
|
+
* General cleaning up
|
138
|
+
080105 - 0.5
|
139
|
+
* Accounts work:
|
140
|
+
* It's possible to list, add and delete
|
data/africompta.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'africompta'
|
3
|
+
s.version = '1.9.8'
|
4
|
+
s.date = '2015-05-13'
|
5
|
+
s.summary = 'Africompta-module for QooxView'
|
6
|
+
s.description = 'With this module you can have a simple accounting-system'
|
7
|
+
s.authors = ['Linus Gasser']
|
8
|
+
s.email = 'ineiti@linusetviviane.ch'
|
9
|
+
|
10
|
+
s.files = `git ls-files -z`.split("\x0")
|
11
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
12
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
13
|
+
s.require_paths = ['lib']
|
14
|
+
|
15
|
+
s.homepage =
|
16
|
+
'https://github.com/ineiti/AfriCompta'
|
17
|
+
s.license = 'GPLv3'
|
18
|
+
|
19
|
+
s.add_dependency 'qooxview'
|
20
|
+
end
|