gestion 1.9.12
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 +48 -0
- data/.project +14 -0
- data/Binaries/adduser_to_buzz +15 -0
- data/Binaries/backup +7 -0
- data/Binaries/check_gestion +8 -0
- data/Binaries/gestion.gnumail +22 -0
- data/Binaries/gestion.logrotate +34 -0
- data/Binaries/gestion.service +12 -0
- data/Binaries/gestion_update.rb +183 -0
- data/Binaries/gestion_update.service +10 -0
- data/Binaries/get_compta +11 -0
- data/Binaries/kill_gestion +16 -0
- data/Binaries/ldap/add_indexes +51 -0
- data/Binaries/ldap/backup +2 -0
- data/Binaries/ldap/install_ldap +92 -0
- data/Binaries/ldap/restore +7 -0
- data/Binaries/lib_backup +5 -0
- data/Binaries/log_scan_errors +8 -0
- data/Binaries/loop_gestion +64 -0
- data/Binaries/onetimers/sync_courses_from_compta.rb +74 -0
- data/Binaries/onetimers/transfer_cash_from_ldap_to_csv +26 -0
- data/Binaries/reboot +5 -0
- data/Binaries/restore +3 -0
- data/Binaries/restore_do +22 -0
- data/Binaries/sort_events +31 -0
- data/Binaries/start_gestion +18 -0
- data/Binaries/swipe_gestion +18 -0
- data/Binaries/update_africompta +21 -0
- data/Binaries/update_users +3 -0
- data/Diplomas.src/accredited.odg +0 -0
- data/Diplomas.src/diploma.odg +0 -0
- data/Diplomas.src/label.odg +0 -0
- data/Diplomas.src/presence_sheet.ods +0 -0
- data/Diplomas.src/presence_sheet_small.ods +0 -0
- data/Diplomas.src/student_card.odg +0 -0
- data/Doc/130514-it-ideas.odt +0 -0
- data/Doc/Compta-cash.mm +179 -0
- data/Doc/General.odt +0 -0
- data/Entities/AccessGroups.rb +117 -0
- data/Entities/Activity.rb +178 -0
- data/Entities/ChatMsg.rb +142 -0
- data/Entities/Classroom.rb +11 -0
- data/Entities/Client.rb +19 -0
- data/Entities/Computer.rb +21 -0
- data/Entities/ConfigBase.rb +280 -0
- data/Entities/Course.rb +1588 -0
- data/Entities/CourseType.rb +171 -0
- data/Entities/DFiles.rb +466 -0
- data/Entities/FilesManage.rb +226 -0
- data/Entities/Grade.rb +186 -0
- data/Entities/Internet.rb +300 -0
- data/Entities/Netdev.rb +10 -0
- data/Entities/Person.rb +1175 -0
- data/Entities/Plug.rb +98 -0
- data/Entities/Quiz.rb +33 -0
- data/Entities/Recharges.rb +37 -0
- data/Entities/Report.rb +136 -0
- data/Entities/Room.rb +12 -0
- data/Entities/SMS.rb +30 -0
- data/Entities/ScheduleType.rb +33 -0
- data/Entities/Share.rb +120 -0
- data/Entities/Task.rb +51 -0
- data/Entities/Ticket.rb +72 -0
- data/Entities/Usage.rb +143 -0
- data/Entities/Worker.rb +29 -0
- data/Files/apache-profeda.conf +36 -0
- data/Files/label.erb +121 -0
- data/Files/label_notfound.erb +64 -0
- data/Files/label_notpassed.erb +84 -0
- data/Files/mobileinfo.erb +115 -0
- data/Files/smb.conf +333 -0
- data/Files/timetable.html +36 -0
- data/Files/timetable.js +239 -0
- data/Gemfile +12 -0
- data/Gemfile.dev +12 -0
- data/Gemfile.dev.lock +127 -0
- data/Gemfile.lock +127 -0
- data/Gemfile.prod +8 -0
- data/Gestion +35 -0
- data/Gestion.rb +220 -0
- data/INSTALL +40 -0
- data/Images/connection.xcf +0 -0
- data/Images/connection_no.png +0 -0
- data/Images/connection_wait.png +0 -0
- data/Images/connection_yes.png +0 -0
- data/Paths/Exas.rb +13 -0
- data/Paths/Files.rb +19 -0
- data/Paths/GetDiplomas.rb +20 -0
- data/Paths/Info.rb +114 -0
- data/Paths/Label.rb +187 -0
- data/Paths/MobileInfo.rb +19 -0
- data/Paths/internetCash.rb +34 -0
- data/Paths/internetWifi.rb +54 -0
- data/README.md +60 -0
- data/Rakefile +13 -0
- data/TODO +1391 -0
- data/Test/.gitignore +3 -0
- data/Test/Diplomas/base_gestion.odt +0 -0
- data/Test/Diplomas/base_report.odt +0 -0
- data/Test/Diplomas/carte_etudiant.odg +0 -0
- data/Test/Diplomas/exam_language.odt +0 -0
- data/Test/Diplomas/label.odg +0 -0
- data/Test/Diplomas/presence_sheet.ods +0 -0
- data/Test/Diplomas/presence_sheet_small.ods +0 -0
- data/Test/Diplomas/student_card.odg +0 -0
- data/Test/Manual/testMerge +18 -0
- data/Test/config_test.yaml +26 -0
- data/Test/db.testGestion +0 -0
- data/Test/dfiles/descs/avg-rescue.desc +10 -0
- data/Test/dfiles/descs/avg.desc +8 -0
- data/Test/dfiles/descs/driver.desc +8 -0
- data/Test/dfiles/descs/linuxmint.desc +7 -0
- data/Test/dfiles/files/avg-160203.exe +1 -0
- data/Test/dfiles/files/avg.iso +1 -0
- data/Test/dfiles/files/driver.exe +1 -0
- data/Test/dfiles/index_post.html +3 -0
- data/Test/dfiles/index_pre.html +8 -0
- data/Test/dfiles/priorities +5 -0
- data/Test/ge_activity.rb +124 -0
- data/Test/ge_chat.rb +106 -0
- data/Test/ge_compta.rb +67 -0
- data/Test/ge_configbase.rb +54 -0
- data/Test/ge_course.rb +1114 -0
- data/Test/ge_dfiles.rb +121 -0
- data/Test/ge_filesmanage.rb +180 -0
- data/Test/ge_info.rb +27 -0
- data/Test/ge_internet.rb +246 -0
- data/Test/ge_login.rb +55 -0
- data/Test/ge_person.rb +373 -0
- data/Test/ge_qvinfo.rb +28 -0
- data/Test/ge_report.rb +97 -0
- data/Test/ge_share.rb +27 -0
- data/Test/ge_sms.rb +34 -0
- data/Test/ge_tasks.rb +19 -0
- data/Test/ge_usage.rb +168 -0
- data/Test/ge_view.rb +46 -0
- data/Test/multiconf-captive +29 -0
- data/Test/test.conf +7 -0
- data/Test/test.rb +49 -0
- data/Test/test_bytes.png +0 -0
- data/VERSION +140 -0
- data/Views/Admin/Backup.rb +91 -0
- data/Views/Admin/Configuration.rb +44 -0
- data/Views/Admin/Credit.rb +32 -0
- data/Views/Admin/FilesManage.rb +219 -0
- data/Views/Admin/Function.rb +39 -0
- data/Views/Admin/Power.rb +49 -0
- data/Views/Admin/Printer.rb +37 -0
- data/Views/Admin/Server.rb +252 -0
- data/Views/Admin/Tabs.rb +5 -0
- data/Views/Admin/Update.rb +73 -0
- data/Views/Admin/UpdateSystem.rb +26 -0
- data/Views/Cashbox/Activity.rb +191 -0
- data/Views/Cashbox/Course.rb +141 -0
- data/Views/Cashbox/Credit.rb +79 -0
- data/Views/Cashbox/Report.rb +115 -0
- data/Views/Cashbox/Service.rb +105 -0
- data/Views/Cashbox/Tabs.rb +10 -0
- data/Views/Compta/Accounts.rb +36 -0
- data/Views/Compta/Course.rb +96 -0
- data/Views/Compta/Show.rb +6 -0
- data/Views/Compta/Transfer.rb +66 -0
- data/Views/Course/Diploma.rb +203 -0
- data/Views/Course/Grade.rb +401 -0
- data/Views/Course/Modify.rb +447 -0
- data/Views/Course/Print.rb +94 -0
- data/Views/Course/Responsible.rb +44 -0
- data/Views/Course/Stats.rb +76 -0
- data/Views/Course/Students.rb +92 -0
- data/Views/Course/Tabs.rb +220 -0
- data/Views/Internet/Access.rb +134 -0
- data/Views/Internet/ClassEdit.rb +24 -0
- data/Views/Internet/ClassUsers.rb +81 -0
- data/Views/Internet/Config.rb +32 -0
- data/Views/Internet/Mobile.rb +213 -0
- data/Views/Internet/Recharges.rb +49 -0
- data/Views/Internet/Tabs.rb +6 -0
- data/Views/Inventory/Computer.rb +24 -0
- data/Views/Inventory/Room.rb +18 -0
- data/Views/Inventory/Tabs.rb +9 -0
- data/Views/Inventory/TicketClosed.rb +7 -0
- data/Views/Inventory/TicketOpen.rb +23 -0
- data/Views/Library/Person.rb +36 -0
- data/Views/Library/Tabs.rb +7 -0
- data/Views/Network/Block.rb +87 -0
- data/Views/Network/Netdevs.rb +21 -0
- data/Views/Network/Restriction.rb +37 -0
- data/Views/Network/Share.rb +167 -0
- data/Views/Network/Tables.rb +28 -0
- data/Views/Network/Tabs.rb +6 -0
- data/Views/Person/Admin.rb +99 -0
- data/Views/Person/Center.rb +48 -0
- data/Views/Person/Course.rb +72 -0
- data/Views/Person/Modify.rb +153 -0
- data/Views/Person/Tabs.rb +162 -0
- data/Views/Report/ComptaExecutive.rb +221 -0
- data/Views/Report/ComptaFlat.rb +79 -0
- data/Views/Report/ReportCourse.rb +47 -0
- data/Views/Report/Tabs.rb +8 -0
- data/Views/Report/Usage.rb +52 -0
- data/Views/Report/UsageCases.rb +59 -0
- data/Views/Self/Cash.rb +67 -0
- data/Views/Self/Chat.rb +55 -0
- data/Views/Self/Concours.rb +109 -0
- data/Views/Self/Email.rb +34 -0
- data/Views/Self/Internet.rb +255 -0
- data/Views/Self/Results.rb +17 -0
- data/Views/Self/Services.rb +85 -0
- data/Views/Self/Show.rb +47 -0
- data/Views/Self/Tabs.rb +5 -0
- data/Views/Special/DFileEdit.rb +13 -0
- data/Views/Special/PlugEdit.rb +56 -0
- data/Views/Special/Tabs.rb +6 -0
- data/Views/Special/Vnc.rb +39 -0
- data/Views/Task/Client.rb +21 -0
- data/Views/Task/Edit.rb +33 -0
- data/Views/Task/List.rb +55 -0
- data/Views/Task/Tabs.rb +9 -0
- data/Views/Task/Worker.rb +30 -0
- data/Views/Template/Activity.rb +33 -0
- data/Views/Template/CourseType.rb +63 -0
- data/Views/Template/ScheduleType.rb +29 -0
- data/Views/Template/Tabs.rb +5 -0
- data/Views/Welcome.rb +121 -0
- data/config.yaml.default +36 -0
- data/po/Gestion-ar.po +2356 -0
- data/po/Gestion-en.mo +0 -0
- data/po/Gestion-en.po +4363 -0
- data/po/Gestion-fr.mo +0 -0
- data/po/Gestion-fr.po +4345 -0
- data/po/traduction-ar.rtf +76 -0
- metadata +381 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
%w( QooxView AfriCompta LibNet Network/lib Hilink/lib HelperClasses/lib Gestion ).each { |l|
|
3
|
+
$LOAD_PATH.push "../../../#{l}"
|
4
|
+
}
|
5
|
+
$LOAD_PATH.push "."
|
6
|
+
|
7
|
+
=begin
|
8
|
+
Due to a problem in the CSV-save module, most of the CSV-data hasn't been saved!!
|
9
|
+
This was mostly a problem for the sign-ups of the students that were missing
|
10
|
+
in the courses.
|
11
|
+
=end
|
12
|
+
|
13
|
+
DEBUG_LVL=1
|
14
|
+
$config_file='config.yaml'
|
15
|
+
|
16
|
+
require 'QooxView'
|
17
|
+
require 'ACQooxView'
|
18
|
+
require 'LibNet'
|
19
|
+
require 'Label'
|
20
|
+
ACQooxView.load_entities
|
21
|
+
|
22
|
+
unless File.exists? 'data/'
|
23
|
+
dputs(0) { "Didn't find data/-directory, aborting" }
|
24
|
+
exit -1
|
25
|
+
end
|
26
|
+
|
27
|
+
QooxView.init('../../Entities', '../../Views')
|
28
|
+
|
29
|
+
course_accounts = []
|
30
|
+
|
31
|
+
CourseTypes.search_all().each { |ct|
|
32
|
+
if ct.account_base
|
33
|
+
ct.account_base.accounts.each { |a|
|
34
|
+
course_accounts.push a
|
35
|
+
}
|
36
|
+
end
|
37
|
+
}
|
38
|
+
|
39
|
+
course_accounts.uniq!
|
40
|
+
|
41
|
+
Courses.search_all().each { |c|
|
42
|
+
if ca = c.entries
|
43
|
+
if course_accounts.index ca
|
44
|
+
course_accounts.delete ca
|
45
|
+
puts "Linked: #{c.name}"
|
46
|
+
puts "Students before: #{c.students.sort.to_s}"
|
47
|
+
std = ca.movements.select { |m| m.desc =~ /^For student/ }.map{|m|
|
48
|
+
m.desc.match( /.* ([^ :]*):.*/ )[1]}.uniq
|
49
|
+
puts "Students in compta: #{std.sort.to_s}"
|
50
|
+
c.students = ( c.students + std ).sort.uniq
|
51
|
+
puts "Merged : #{c.students.sort.to_s}"
|
52
|
+
else
|
53
|
+
puts "Not linked: #{c.name}"
|
54
|
+
end
|
55
|
+
elsif c.name =~ /_14/
|
56
|
+
puts "Missing link: #{c.name}"
|
57
|
+
end
|
58
|
+
}
|
59
|
+
|
60
|
+
Entities.save_all
|
61
|
+
|
62
|
+
begin
|
63
|
+
course_accounts.each { |ca|
|
64
|
+
if ca.path =~ /14/ and ca.movements.length > 0
|
65
|
+
puts "Not linked: #{ca.path}"
|
66
|
+
if c = Courses.match_by_name( ca.name )
|
67
|
+
puts "Late finding: #{ca.path} - #{c.name}"
|
68
|
+
end
|
69
|
+
ca.movements.each{|m|
|
70
|
+
puts m.to_json
|
71
|
+
}
|
72
|
+
end
|
73
|
+
}
|
74
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
if [ ! -f Persons.csv ]; then
|
3
|
+
echo Please run in data-directory!
|
4
|
+
exit
|
5
|
+
fi
|
6
|
+
|
7
|
+
cp Persons.csv Persons.csv.backup.$( date +%Y%m%d-%M%H )
|
8
|
+
|
9
|
+
# First we read everything in
|
10
|
+
slapcat | egrep "(^MaN-Internet-Cash|^cn|^uidNumber)" | grep -B 2 MaN | grep -v -- "--" > cash
|
11
|
+
|
12
|
+
# Then we clean up Persons.csv
|
13
|
+
perl -pi -e "s/.credit_due[^,]*,//" Persons.csv
|
14
|
+
|
15
|
+
# Finally we set every cash
|
16
|
+
while read one; do
|
17
|
+
read two
|
18
|
+
read three
|
19
|
+
echo -e "$one\n$two\n$three" | sort | sed -e "s/.* //" > cash.tmp
|
20
|
+
while read cn; do
|
21
|
+
read cash
|
22
|
+
read uid
|
23
|
+
echo cn is $cn with uid=$uid and $cash CFAs;
|
24
|
+
perl -pi -e "s/(.person_id..$uid[^0-9])/\"credit\":$cash,\1/" Persons.csv
|
25
|
+
done < cash.tmp
|
26
|
+
done < cash
|
data/Binaries/reboot
ADDED
data/Binaries/restore
ADDED
data/Binaries/restore_do
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
. $( dirname $0 )/lib_backup
|
4
|
+
. /etc/gestion.conf
|
5
|
+
DATE=$1
|
6
|
+
|
7
|
+
#sleep 2
|
8
|
+
#touch /tmp/stop_gestion
|
9
|
+
#$WDIR/Binaries/kill_gestion
|
10
|
+
#sleep 2
|
11
|
+
|
12
|
+
systemctl stop gestion
|
13
|
+
sleep 5
|
14
|
+
touch /tmp/stop_gestion
|
15
|
+
$WDIR/Binaries/kill_gestion
|
16
|
+
echo Going to restore $BACKUP_DIR/$DATE > /tmp/restore
|
17
|
+
tar -C ${DATADIR:-/var/lib/gestion} -Pxzf $BACKUP_DIR/$DATE
|
18
|
+
|
19
|
+
sleep 5
|
20
|
+
systemctl start gestion
|
21
|
+
|
22
|
+
#$WDIR/Binaries/start_gestion
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
ORDER="chat course_payment ActivityPayments AddCash cashbox_course grade grades diploma \
|
4
|
+
course person Welcome"
|
5
|
+
|
6
|
+
if [ ! "$1" -o ! "$2" ]; then
|
7
|
+
echo Syntax: $0 in.log out.log
|
8
|
+
exit 1
|
9
|
+
fi
|
10
|
+
|
11
|
+
EVENTS_IN=$1
|
12
|
+
EVENTS_OUT=$2
|
13
|
+
|
14
|
+
if [ ! -f $EVENTS_IN ]; then
|
15
|
+
echo "$EVENTS_IN doesn't exist"
|
16
|
+
exit 1
|
17
|
+
fi
|
18
|
+
|
19
|
+
SRC=/tmp/events_src.log
|
20
|
+
OTHER=/tmp/events_dst.log
|
21
|
+
cp $EVENTS_IN $SRC
|
22
|
+
rm -f $EVENTS_OUT
|
23
|
+
|
24
|
+
for field in $ORDER; do
|
25
|
+
# echo Sorting for field $field
|
26
|
+
grep " $field: " $SRC >> $EVENTS_OUT
|
27
|
+
grep -v " $field: " $SRC > $OTHER
|
28
|
+
mv $OTHER $SRC
|
29
|
+
done
|
30
|
+
echo "-----------------------" >> $EVENTS_OUT
|
31
|
+
sort -k 3 $SRC >> $EVENTS_OUT
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
test -x /etc/init.d/blink-fast && /etc/init.d/blink-fast start
|
4
|
+
. /etc/environment
|
5
|
+
export LANG
|
6
|
+
export LC_ALL
|
7
|
+
date >> /var/log/start_gestion
|
8
|
+
set >> /var/log/start_gestion
|
9
|
+
logger -s "Starting Gestion"
|
10
|
+
sleep 2
|
11
|
+
cd $( dirname $0 )/..
|
12
|
+
pwd >> /var/log/start_gestion
|
13
|
+
if pgrep -f ruby.*Gestion; then
|
14
|
+
Binaries/kill_gestion
|
15
|
+
fi
|
16
|
+
logger -s "Starting new Gestion"
|
17
|
+
sudo -i screen -S Gestion -d -s /usr/bin/bash -m $( pwd )/Binaries/loop_gestion
|
18
|
+
echo $! > /var/run/gestion.pid
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
WDIR=$( dirname ${BASH_SOURCE[0]} )
|
4
|
+
|
5
|
+
if [ "$1" = "-f" ]; then
|
6
|
+
shift
|
7
|
+
$WDIR/kill_gestion
|
8
|
+
sleep 2
|
9
|
+
mv $WDIR/../data /var/tmp/data.$( date +%s )
|
10
|
+
if [ "$1" ]; then
|
11
|
+
$WDIR/restore $1
|
12
|
+
else
|
13
|
+
$WDIR/start_gestion
|
14
|
+
fi
|
15
|
+
else
|
16
|
+
echo Not doing swipe - use the '-f' parameter
|
17
|
+
exit 1
|
18
|
+
fi
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
echo This is not used for the moment - just kept for
|
4
|
+
echo future reference in case the column-names need
|
5
|
+
echo to change...
|
6
|
+
|
7
|
+
exit 1
|
8
|
+
|
9
|
+
cp db.testGestion.orig db.testGestion
|
10
|
+
|
11
|
+
cat - > sqlite.cmd <<EOF
|
12
|
+
PRAGMA writable_schema = 1;
|
13
|
+
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE "compta_accounts" ("account_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "parent_id" integer, "name" varchar(255), "desc" text, "global_id" varchar(255), "total" varchar(255), "multiplier" float, "index" integer)' WHERE NAME = 'compta_accounts';
|
14
|
+
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE "compta_movements" ("movement_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "account_src_id" integer NOT NULL, "account_dst_id" integer NOT NULL, "value" real, "desc" varchar(255), "date" date, "revision" integer, "global_id" varchar(255), "index" integer)' WHERE NAME = 'compta_movements';
|
15
|
+
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE "compta_users" ("user_id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "full" varchar(255), "pass" varchar(255), "account_index" integer, "movement_index" integer)' WHERE NAME = 'compta_users';
|
16
|
+
PRAGMA writable_schema = 0;
|
17
|
+
.quit
|
18
|
+
EOF
|
19
|
+
echo .quit | sqlite3 -init sqlite.cmd $1
|
20
|
+
|
21
|
+
echo .dump | sqlite3 $1
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/Doc/Compta-cash.mm
ADDED
@@ -0,0 +1,179 @@
|
|
1
|
+
<map version="0.9.0">
|
2
|
+
<!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
|
3
|
+
<node TEXT="Compta" ID="ID_1373652054" CREATED="1375460748765" MODIFIED="1375460753057">
|
4
|
+
<hook NAME="MapStyle" max_node_width="600"/>
|
5
|
+
<node TEXT="Views" POSITION="right" ID="ID_1258978740" CREATED="1375460753836" MODIFIED="1375460755120">
|
6
|
+
<node TEXT="ComptaCourse" ID="ID_1947432729" CREATED="1375460758941" MODIFIED="1375460761120">
|
7
|
+
<node TEXT="Search by course" ID="ID_1172449143" CREATED="1375460762461" MODIFIED="1375460809029">
|
8
|
+
<richcontent TYPE="NOTE">
|
9
|
+
<html>
|
10
|
+
<head>
|
11
|
+
|
12
|
+
</head>
|
13
|
+
<body>
|
14
|
+
<p>
|
15
|
+
offer list like CourseTab
|
16
|
+
</p>
|
17
|
+
</body>
|
18
|
+
</html></richcontent>
|
19
|
+
</node>
|
20
|
+
<node TEXT="Search by student" ID="ID_892630374" CREATED="1375460813003" MODIFIED="1375461037857">
|
21
|
+
<richcontent TYPE="NOTE">
|
22
|
+
<html>
|
23
|
+
<head>
|
24
|
+
|
25
|
+
</head>
|
26
|
+
<body>
|
27
|
+
<p>
|
28
|
+
Updated if clicked on course
|
29
|
+
</p>
|
30
|
+
</body>
|
31
|
+
</html></richcontent>
|
32
|
+
</node>
|
33
|
+
<node TEXT="Pay" ID="ID_1998407710" CREATED="1375461037850" MODIFIED="1375461049048">
|
34
|
+
<richcontent TYPE="NOTE">
|
35
|
+
<html>
|
36
|
+
<head>
|
37
|
+
|
38
|
+
</head>
|
39
|
+
<body>
|
40
|
+
<p>
|
41
|
+
prints receit
|
42
|
+
</p>
|
43
|
+
</body>
|
44
|
+
</html></richcontent>
|
45
|
+
</node>
|
46
|
+
<node TEXT="Add manual receit" ID="ID_338147804" CREATED="1375461050161" MODIFIED="1375461053813"/>
|
47
|
+
</node>
|
48
|
+
<node TEXT="ComptaService" ID="ID_662432531" CREATED="1375460758941" MODIFIED="1375461066626">
|
49
|
+
<node TEXT="Pay" ID="ID_13579623" CREATED="1375461037850" MODIFIED="1375461049048">
|
50
|
+
<richcontent TYPE="NOTE">
|
51
|
+
<html>
|
52
|
+
<head>
|
53
|
+
|
54
|
+
</head>
|
55
|
+
<body>
|
56
|
+
<p>
|
57
|
+
prints receit
|
58
|
+
</p>
|
59
|
+
</body>
|
60
|
+
</html></richcontent>
|
61
|
+
</node>
|
62
|
+
<node TEXT="Move PersonCash" ID="ID_1926602512" CREATED="1375461086039" MODIFIED="1375461091096"/>
|
63
|
+
<node TEXT="Move SelfServices" ID="ID_1990164522" CREATED="1375461091662" MODIFIED="1375461096490"/>
|
64
|
+
<node TEXT="Add manual receit" ID="ID_919067297" CREATED="1375461050161" MODIFIED="1375461053813"/>
|
65
|
+
</node>
|
66
|
+
<node TEXT="ComptaCash" ID="ID_1584009219" CREATED="1375461111714" MODIFIED="1375461115734">
|
67
|
+
<node TEXT="Print" ID="ID_1536490968" CREATED="1375461116211" MODIFIED="1375461121590">
|
68
|
+
<node TEXT="Daily checklist" ID="ID_1033771005" CREATED="1375461121923" MODIFIED="1375461145248">
|
69
|
+
<richcontent TYPE="NOTE">
|
70
|
+
<html>
|
71
|
+
<head>
|
72
|
+
|
73
|
+
</head>
|
74
|
+
<body>
|
75
|
+
<p>
|
76
|
+
With signature for "OK"
|
77
|
+
</p>
|
78
|
+
<p>
|
79
|
+
Allow for printing of days, weeks
|
80
|
+
</p>
|
81
|
+
</body>
|
82
|
+
</html></richcontent>
|
83
|
+
</node>
|
84
|
+
<node TEXT="Course-lists" ID="ID_1102569461" CREATED="1375461145242" MODIFIED="1375461154495">
|
85
|
+
<richcontent TYPE="NOTE">
|
86
|
+
<html>
|
87
|
+
<head>
|
88
|
+
|
89
|
+
</head>
|
90
|
+
<body>
|
91
|
+
<p>
|
92
|
+
only print changed courses
|
93
|
+
</p>
|
94
|
+
</body>
|
95
|
+
</html></richcontent>
|
96
|
+
</node>
|
97
|
+
<node TEXT="Library-lists" ID="ID_313754190" CREATED="1375461154489" MODIFIED="1375461169062">
|
98
|
+
<richcontent TYPE="NOTE">
|
99
|
+
<html>
|
100
|
+
<head>
|
101
|
+
|
102
|
+
</head>
|
103
|
+
<body>
|
104
|
+
<p>
|
105
|
+
only print last sheet
|
106
|
+
</p>
|
107
|
+
</body>
|
108
|
+
</html></richcontent>
|
109
|
+
</node>
|
110
|
+
<node TEXT="Move SelfCash" ID="ID_604769849" CREATED="1375461169233" MODIFIED="1375461180348"/>
|
111
|
+
</node>
|
112
|
+
</node>
|
113
|
+
<node TEXT="ComptaAdmin" ID="ID_1188322166" CREATED="1379581289830" MODIFIED="1379581291833">
|
114
|
+
<node TEXT="Print manual sheets" ID="ID_397624358" CREATED="1379581365278" MODIFIED="1379581381208"/>
|
115
|
+
<node TEXT="Manage lost sheets" ID="ID_999379367" CREATED="1379581381862" MODIFIED="1379581387728"/>
|
116
|
+
</node>
|
117
|
+
<node TEXT="CourseCompta" ID="ID_892736667" CREATED="1375461216487" MODIFIED="1375461220346">
|
118
|
+
<node TEXT="Change money per course" ID="ID_1386173998" CREATED="1375461220855" MODIFIED="1375461224200"/>
|
119
|
+
<node TEXT="Move students to other courses" ID="ID_503441439" CREATED="1375461225229" MODIFIED="1375461229706"/>
|
120
|
+
</node>
|
121
|
+
<node TEXT="AdminService" ID="ID_58796879" CREATED="1375461234942" MODIFIED="1375461240600">
|
122
|
+
<node TEXT="Change costs for services" ID="ID_179134349" CREATED="1375461241150" MODIFIED="1375461249593"/>
|
123
|
+
<node TEXT="add and remove new services" ID="ID_1111616537" CREATED="1375461250414" MODIFIED="1375461303693">
|
124
|
+
<richcontent TYPE="NOTE">
|
125
|
+
<html>
|
126
|
+
<head>
|
127
|
+
|
128
|
+
</head>
|
129
|
+
<body>
|
130
|
+
<p>
|
131
|
+
Have once (special fee), multiple (CDs, print, ...), daily, weekly services
|
132
|
+
</p>
|
133
|
+
</body>
|
134
|
+
</html></richcontent>
|
135
|
+
</node>
|
136
|
+
</node>
|
137
|
+
<node TEXT="AdminAccounts" ID="ID_260369204" CREATED="1379588717973" MODIFIED="1379588721280">
|
138
|
+
<node TEXT="Edit different accounts for different services" ID="ID_657135979" CREATED="1379588721741" MODIFIED="1379588733240"/>
|
139
|
+
</node>
|
140
|
+
<node TEXT="CourseDiploma" ID="ID_1841349214" CREATED="1375461311313" MODIFIED="1375461315545">
|
141
|
+
<node TEXT="Add column "paid"" ID="ID_686128343" CREATED="1375461315960" MODIFIED="1375461323562"/>
|
142
|
+
</node>
|
143
|
+
<node TEXT="CourseTabs" ID="ID_1657862182" CREATED="1379583222647" MODIFIED="1379583227978">
|
144
|
+
<node TEXT="When adding, add also the corresponding account" ID="ID_1585632095" CREATED="1379583228559" MODIFIED="1379583241997"/>
|
145
|
+
</node>
|
146
|
+
</node>
|
147
|
+
<node TEXT="Payments" POSITION="left" ID="ID_1876632421" CREATED="1375461332330" MODIFIED="1375461333920">
|
148
|
+
<node TEXT="Receits" ID="ID_612380965" CREATED="1375461334372" MODIFIED="1375461336503">
|
149
|
+
<node TEXT="Is always printed out twice" ID="ID_116581679" CREATED="1375461339093" MODIFIED="1375461355658">
|
150
|
+
<richcontent TYPE="NOTE">
|
151
|
+
<html>
|
152
|
+
<head>
|
153
|
+
|
154
|
+
</head>
|
155
|
+
<body>
|
156
|
+
<p>
|
157
|
+
One for the archives, one for the student
|
158
|
+
</p>
|
159
|
+
</body>
|
160
|
+
</html></richcontent>
|
161
|
+
</node>
|
162
|
+
<node TEXT="Fields" ID="ID_1523419689" CREATED="1375461355652" MODIFIED="1375461360982">
|
163
|
+
<node TEXT="Name of student" ID="ID_1076775739" CREATED="1375461361500" MODIFIED="1375461365278"/>
|
164
|
+
<node TEXT="Name of receiver" ID="ID_576269462" CREATED="1375461366211" MODIFIED="1375461372126"/>
|
165
|
+
<node TEXT="Subject" ID="ID_529830863" CREATED="1375461376537" MODIFIED="1375461382734"/>
|
166
|
+
<node TEXT="Date" ID="ID_291785192" CREATED="1375461383115" MODIFIED="1375461384565"/>
|
167
|
+
<node TEXT="Amount" ID="ID_129543000" CREATED="1375461384875" MODIFIED="1375461386029"/>
|
168
|
+
<node TEXT="Id" ID="ID_859282044" CREATED="1375461386282" MODIFIED="1375461389358"/>
|
169
|
+
<node TEXT="QRcode for verification" ID="ID_1373775432" CREATED="1375461389866" MODIFIED="1375461393965"/>
|
170
|
+
</node>
|
171
|
+
</node>
|
172
|
+
<node TEXT="Manual receits" ID="ID_1017256078" CREATED="1375461398730" MODIFIED="1375461401571">
|
173
|
+
<node TEXT="Only printable from accountant" ID="ID_937775751" CREATED="1375461402170" MODIFIED="1375461410357"/>
|
174
|
+
<node TEXT="in case of malfunctioning" ID="ID_1382316541" CREATED="1375461411306" MODIFIED="1375461426142"/>
|
175
|
+
<node TEXT="Have signature and stamp instead of QRcode" ID="ID_677144629" CREATED="1375461426971" MODIFIED="1375461435166"/>
|
176
|
+
</node>
|
177
|
+
</node>
|
178
|
+
</node>
|
179
|
+
</map>
|
data/Doc/General.odt
ADDED
Binary file
|
@@ -0,0 +1,117 @@
|
|
1
|
+
# Defines groups for access to the internet
|
2
|
+
|
3
|
+
class AccessGroups < Entities
|
4
|
+
def setup_data
|
5
|
+
value_str :name
|
6
|
+
value_list_single :members
|
7
|
+
value_list_drop :action, '%w( allow allow_else_block block )'
|
8
|
+
value_int :priority
|
9
|
+
value_int :limit_day_mo
|
10
|
+
value_list_single :access_times, '[]'
|
11
|
+
end
|
12
|
+
|
13
|
+
def listp_name
|
14
|
+
search_all_.sort { |a, b|
|
15
|
+
b.priority.to_i <=> a.priority.to_i
|
16
|
+
}.collect { |ag|
|
17
|
+
ag.priority ||= '10'
|
18
|
+
[ag.accessgroup_id, "#{ag.priority.rjust(2, '0')}:#{ag.name}"]
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.allow_user(user, time)
|
23
|
+
dputs(4) { "Searching for #{user} at #{time}" }
|
24
|
+
if user.class == Person
|
25
|
+
user = user.login_name
|
26
|
+
end
|
27
|
+
search_all_.sort { |a, b|
|
28
|
+
b.priority.to_i <=> a.priority.to_i
|
29
|
+
}.each { |ag|
|
30
|
+
match_user = true
|
31
|
+
if ag.members.class == Array and ag.members.size > 0
|
32
|
+
dputs(5) { "members.index is #{ag.members.index(user).inspect}" }
|
33
|
+
match_user = ag.members.index(user) != nil
|
34
|
+
end
|
35
|
+
match_time = ag.time_in_atimes(time)
|
36
|
+
limit_ok = true
|
37
|
+
if (limit = ag.limit_day_mo.to_i) > 0
|
38
|
+
limit_ok = Network::Captive.usage_daily.to_i / 1e6 <= limit
|
39
|
+
end
|
40
|
+
dputs(4) { "Checking #{ag.name}, u,t = #{match_user},#{match_time}" }
|
41
|
+
dputs(4) { "Action is #{ag.action[0].inspect}, members = #{ag.members.inspect}" }
|
42
|
+
case ag.action[0]
|
43
|
+
when /allow_else_block/
|
44
|
+
dputs(4) { 'allow_else_block' }
|
45
|
+
return [true, "#{ag.name}"] if (match_time and match_user and limit_ok)
|
46
|
+
return [false, "Over limit of #{ag.limit_day_mo}Mo in rule **#{ag.name}**"] if not limit_ok
|
47
|
+
return [false, "Blocked by rule **#{ag.name}**"] if match_user
|
48
|
+
when /block/
|
49
|
+
dputs(4) { 'block' }
|
50
|
+
return [false, "Blocked by rule **#{ag.name}**"] if (match_time and match_user)
|
51
|
+
when /allow/
|
52
|
+
dputs(4) { 'allow' }
|
53
|
+
return [true, "#{ag.name}"] if (match_time and match_user and limit_ok)
|
54
|
+
end
|
55
|
+
}
|
56
|
+
dputs(4) { 'Nothing found - must be OK' }
|
57
|
+
return [true, 'default']
|
58
|
+
end
|
59
|
+
|
60
|
+
def self.allow_user_now(user)
|
61
|
+
self.allow_user(user, Time.now)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
class AccessGroup < Entity
|
66
|
+
|
67
|
+
def self.time_in_atime(t, a)
|
68
|
+
dow_raw, start_raw, stop_raw = a.split(';')
|
69
|
+
{:di => 0, :lu => 1, :ma => 2, :me => 3, :je => 4, :ve => 5, :sa => 6}.each { |k, v|
|
70
|
+
dow_raw.gsub!(/#{k}/, "#{v}")
|
71
|
+
}
|
72
|
+
dputs(4) { "dow_raw is #{dow_raw}" }
|
73
|
+
dow = []
|
74
|
+
dow_raw.split(',').each { |d|
|
75
|
+
if d =~ /(.)-(.)/
|
76
|
+
b, e = $1.to_i, $2.to_i
|
77
|
+
if e < b
|
78
|
+
e += 7
|
79
|
+
end
|
80
|
+
(b..e).each { |i|
|
81
|
+
dow.push(i % 7)
|
82
|
+
}
|
83
|
+
else
|
84
|
+
dow.push d.to_i
|
85
|
+
end
|
86
|
+
}
|
87
|
+
start_raw = start_raw.split(':')
|
88
|
+
start = start_raw[0].to_i * 60 + start_raw[1].to_i
|
89
|
+
stop_raw = stop_raw.split(':')
|
90
|
+
stop = stop_raw[0].to_i * 60 + stop_raw[1].to_i
|
91
|
+
if stop == 0
|
92
|
+
stop = 24 * 60
|
93
|
+
end
|
94
|
+
time = t.hour * 60 + t.min
|
95
|
+
time_dow = t.wday
|
96
|
+
dputs(4) { "dow:#{dow.inspect} - start:#{start} - stop:#{stop}" }
|
97
|
+
dputs(4) { "time: #{time} - time_dow:#{time_dow}" }
|
98
|
+
|
99
|
+
# If we start in the evening and end in the morning...
|
100
|
+
if start > stop and time < stop
|
101
|
+
return (dow.index((time_dow + 6) % 7)) != nil
|
102
|
+
end
|
103
|
+
(dow.index(time_dow) and start <= time and time < stop) == true
|
104
|
+
end
|
105
|
+
|
106
|
+
def time_in_atimes(t)
|
107
|
+
if access_times
|
108
|
+
ret = false
|
109
|
+
access_times.each { |a|
|
110
|
+
ret = (ret or AccessGroup.time_in_atime(t, a))
|
111
|
+
}
|
112
|
+
return ret
|
113
|
+
else
|
114
|
+
return true
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|