gestion 1.9.12
Sign up to get free protection for your applications and to get access to all the features.
- 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,167 @@
|
|
1
|
+
class NetworkShare < View
|
2
|
+
include VTListPane
|
3
|
+
|
4
|
+
def layout
|
5
|
+
set_data_class :Shares
|
6
|
+
|
7
|
+
@order = 50
|
8
|
+
@update = true
|
9
|
+
@functions_need = [:share]
|
10
|
+
|
11
|
+
@samba = Entities.Statics.get(:NetworkSamba)
|
12
|
+
if @samba.data_str.class != Hash
|
13
|
+
dputs(4) { "Oups - samba is #{@samba.data_str.inspect}" }
|
14
|
+
@samba.data_str = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
gui_vbox :nogroup do
|
18
|
+
gui_hbox do
|
19
|
+
gui_vbox :nogroup do
|
20
|
+
vtlp_list :shares, :name
|
21
|
+
show_button :new, :delete
|
22
|
+
end
|
23
|
+
gui_vbox :nogroup do
|
24
|
+
show_block :config, :width => 200
|
25
|
+
show_button :share_save, :change_path, :add_htaccess
|
26
|
+
end
|
27
|
+
gui_vbox :nogroup do
|
28
|
+
show_list_single :users, :width => 200
|
29
|
+
show_button :no_access, :read_write, :read_only
|
30
|
+
end
|
31
|
+
end
|
32
|
+
gui_hbox :nogroup do
|
33
|
+
gui_vbox :nogroup do
|
34
|
+
show_str :domain, :width => 200
|
35
|
+
show_str :hostname
|
36
|
+
show_button :samba_save
|
37
|
+
end
|
38
|
+
gui_vbox :nogroup do
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
gui_window :msg do
|
43
|
+
show_html :msg_txt
|
44
|
+
show_button :close
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def users_update(session)
|
50
|
+
if session and (share_str = session.s_data[:share])
|
51
|
+
users = Persons.search_by_groups('share')
|
52
|
+
share = Shares.match_by_share_id(share_str)
|
53
|
+
dputs(3) { "Users is #{users.inspect} and share is #{share.inspect}" }
|
54
|
+
if users and share
|
55
|
+
dputs(3) { "Acl of #{share.name} is #{share.acl.inspect}" }
|
56
|
+
share.acl.collect { |k, v|
|
57
|
+
if user = Persons.match_by_login_name(k)
|
58
|
+
users.delete(user)
|
59
|
+
access = v == 'ro' ? 'read-only' : 'read-write'
|
60
|
+
name = user.full_name
|
61
|
+
name.to_s == 0 and name = user.login_name
|
62
|
+
[k, "#{name}: #{access}"]
|
63
|
+
else
|
64
|
+
nil
|
65
|
+
end
|
66
|
+
}.compact.sort { |a, b| a[1] <=> b[1] } +
|
67
|
+
users.collect { |u|
|
68
|
+
[u.login_name, u.full_name]
|
69
|
+
}.sort { |a, b| a[1] <=> b[1] }
|
70
|
+
else
|
71
|
+
return []
|
72
|
+
end
|
73
|
+
else
|
74
|
+
return []
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
alias_method :rpc_list_choice_old, :rpc_list_choice
|
79
|
+
|
80
|
+
def rpc_list_choice(session, name, *args)
|
81
|
+
dputs(3) { "rpc_list_choice with #{name} - #{args.inspect}" }
|
82
|
+
if name == @vtlp_field
|
83
|
+
session.s_data[:share] = args[0][name][0]
|
84
|
+
dputs(4) { "session.s_data is #{session.s_data.inspect}" }
|
85
|
+
end
|
86
|
+
rpc_list_choice_old(session, name, args[0])
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
def rpc_update(session)
|
91
|
+
dputs(4) { "Updating samba: #{users_update(session)}" }
|
92
|
+
show_users = reply(:hide, :users)
|
93
|
+
begin
|
94
|
+
if (share_id = session.s_data[:share]) and
|
95
|
+
(Shares.match_by_share_id(share_id).public == ['No'])
|
96
|
+
show_users = reply(:unhide, :users)
|
97
|
+
end
|
98
|
+
rescue NoMethodError
|
99
|
+
end
|
100
|
+
reply(:empty, [:users]) +
|
101
|
+
reply(:update,
|
102
|
+
:users => users_update(session)) +
|
103
|
+
%w( domain hostname ).collect { |d|
|
104
|
+
reply(:update, d => @samba.data_str[d])
|
105
|
+
}.flatten +
|
106
|
+
show_users
|
107
|
+
end
|
108
|
+
|
109
|
+
def rpc_button(session, name, data)
|
110
|
+
case name
|
111
|
+
when /no_access|read_write|read_only/
|
112
|
+
if (user = Persons.match_by_login_name(data['users'][0])) and
|
113
|
+
(share = Shares.match_by_share_id(data['shares'][0]))
|
114
|
+
case name
|
115
|
+
when /no_access/
|
116
|
+
share.acl.delete user.login_name
|
117
|
+
when /read_write/
|
118
|
+
share.acl[user.login_name] = 'rw'
|
119
|
+
when /read_only/
|
120
|
+
share.acl[user.login_name] = 'ro'
|
121
|
+
end
|
122
|
+
dputs(4) { "Share.acl is #{share.acl.inspect}" }
|
123
|
+
session.s_data[:share] = data['shares'][0]
|
124
|
+
else
|
125
|
+
return reply(:window_show, :msg) +
|
126
|
+
reply(:update, :msg_txt => 'First choose a share<br>' +
|
127
|
+
'then a user')
|
128
|
+
end
|
129
|
+
rpc_update(session)
|
130
|
+
when /new/
|
131
|
+
rpc_button_new(session, data) +
|
132
|
+
reply(:hide, :users)
|
133
|
+
else
|
134
|
+
super(session, name, data)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def rpc_button_share_save(session, data)
|
139
|
+
ret = rpc_button_save(session, data) +
|
140
|
+
rpc_button_samba_save(session, data)
|
141
|
+
end
|
142
|
+
|
143
|
+
def rpc_button_close(session, data)
|
144
|
+
reply(:window_hide)
|
145
|
+
end
|
146
|
+
|
147
|
+
def rpc_button_samba_save(session, data)
|
148
|
+
%w( domain hostname ).each { |d|
|
149
|
+
dputs(4) { "Saving -#{d}- for -#{@samba.data_str.inspect}-" }
|
150
|
+
store = data[d] ? data[d] : d
|
151
|
+
@samba.data_str[d] = store
|
152
|
+
}
|
153
|
+
dputs(4) { "@samba is now -#{@samba.data_str.inspect}-" }
|
154
|
+
|
155
|
+
Shares.save_config(@samba.data_str['domain'])
|
156
|
+
return []
|
157
|
+
end
|
158
|
+
|
159
|
+
def rpc_button_add_htaccess(session, data)
|
160
|
+
share = Shares.find_by_share_id(data['shares'][0])
|
161
|
+
dputs(3) { "Working with #{share}" }
|
162
|
+
|
163
|
+
share.add_htaccess
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class NetworkTables < View
|
2
|
+
def layout
|
3
|
+
set_data_class :ConfigBases
|
4
|
+
#@visible = false
|
5
|
+
@order = 100
|
6
|
+
@update = true
|
7
|
+
@functions_need = [:network]
|
8
|
+
|
9
|
+
gui_vbox do
|
10
|
+
show_block :captive
|
11
|
+
show_arg :prerouting, :width => 300
|
12
|
+
show_button :save_costs
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def rpc_button_save_costs(session, data)
|
17
|
+
ConfigBase.data_set_hash(data)
|
18
|
+
ConfigBase.send_config
|
19
|
+
end
|
20
|
+
|
21
|
+
def update(session)
|
22
|
+
ConfigBase.to_hash
|
23
|
+
end
|
24
|
+
|
25
|
+
def rpc_update(session)
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# Allows to add, modify and delete persons
|
2
|
+
|
3
|
+
class PersonAdmin < View
|
4
|
+
def layout
|
5
|
+
set_data_class :Persons
|
6
|
+
@update = true
|
7
|
+
@order = 30
|
8
|
+
|
9
|
+
gui_vboxg do
|
10
|
+
gui_group do
|
11
|
+
gui_hboxg :nogroup do
|
12
|
+
gui_hboxg :nogroup do
|
13
|
+
gui_fields do
|
14
|
+
show_str_ro :login_name
|
15
|
+
show_str_ro :person_id
|
16
|
+
show_block :admin
|
17
|
+
show_arg :permissions, :flexheight => 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
gui_vbox :nogroup do
|
21
|
+
gui_vbox :nogroup do
|
22
|
+
show_field :groups
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
show_button :save
|
27
|
+
end
|
28
|
+
|
29
|
+
gui_window :win_error do
|
30
|
+
show_html :err_html
|
31
|
+
show_entity_person :centers, :drop, :full_name, :width => 200
|
32
|
+
show_button :chose
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def rpc_button_save(session, data)
|
38
|
+
dputs(3) { "#{data.inspect}" }
|
39
|
+
person = Persons.match_by_person_id(data._person_id)
|
40
|
+
rep = reply(:empty_nonlists)
|
41
|
+
if person
|
42
|
+
log_msg :persons, "#{session.owner.login_name} saves #{data.inspect}"
|
43
|
+
Persons.save_data(data)
|
44
|
+
person.update_accounts
|
45
|
+
if (centers = Persons.search_by_permissions(:center)).count > 1 &&
|
46
|
+
!ConfigBase.has_function?(:course_server)
|
47
|
+
centers_name = centers.collect { |p| p.listp_full_name }
|
48
|
+
rep += reply(:window_show, :win_error) +
|
49
|
+
reply(:update, :err_html => "<p>There can't be more than one center<br>" +
|
50
|
+
'in the database. Please chose one') +
|
51
|
+
reply(:empty, :centers) +
|
52
|
+
reply(:update, :centers => centers_name)
|
53
|
+
end
|
54
|
+
rep += update_form_data(person)
|
55
|
+
end
|
56
|
+
rep + rpc_update(session)
|
57
|
+
end
|
58
|
+
|
59
|
+
def rpc_button_chose(session, data)
|
60
|
+
Persons.search_by_permissions(:center).each { |p|
|
61
|
+
dputs(2) { "Comparing #{p} with #{data._centers}" }
|
62
|
+
if p != data._centers
|
63
|
+
p.permissions -= ['center']
|
64
|
+
end
|
65
|
+
}
|
66
|
+
person = Persons.match_by_person_id(data._person_id)
|
67
|
+
reply(:window_hide) +
|
68
|
+
reply(:empty_nonlists) +
|
69
|
+
update_form_data(person)
|
70
|
+
end
|
71
|
+
|
72
|
+
def rpc_find(session, field, data)
|
73
|
+
rep = Persons.find(field, data)
|
74
|
+
if not rep
|
75
|
+
rep = {"#{field}" => data}
|
76
|
+
end
|
77
|
+
update_layout(session) +
|
78
|
+
reply(:update, rep) + rpc_update(session)
|
79
|
+
end
|
80
|
+
|
81
|
+
def rpc_list_choice(session, name, data)
|
82
|
+
if name == 'persons'
|
83
|
+
dputs(2) { "Got data: #{data.inspect}" }
|
84
|
+
if p = Persons.match_by_login_name(data['persons'].flatten[0])
|
85
|
+
#reply( :empty_nonlists, [:internet_none] ) +
|
86
|
+
reply(:empty_nonlists, [:permissions, :groups]) +
|
87
|
+
reply(:update, :permissions => Permission.list.sort) +
|
88
|
+
reply(:update, :groups => eval(Persons.get_value(:groups).list)) +
|
89
|
+
reply(:update, p)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def update(session)
|
95
|
+
if ConfigBase.has_function? :accounting
|
96
|
+
{:your_account_total_due => session.owner.account_total_due}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Some special, restricted administration-things for a center-director
|
2
|
+
|
3
|
+
class PersonCenter < View
|
4
|
+
def layout
|
5
|
+
set_data_class :Persons
|
6
|
+
@update = true
|
7
|
+
@order = 40
|
8
|
+
@functions_need = [:course_server]
|
9
|
+
|
10
|
+
gui_vbox do
|
11
|
+
gui_hbox :nogroup do
|
12
|
+
show_str_ro :login_name
|
13
|
+
show_str_ro :person_id
|
14
|
+
show_field :role_diploma
|
15
|
+
show_list :permissions, "%w( teacher center_director )"
|
16
|
+
show_button :save
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def reply_person( p )
|
22
|
+
reply( :empty_nonlists, [:permissions] ) +
|
23
|
+
reply( :update, :permissions => %w( teacher center_director ) ) +
|
24
|
+
reply( :update, :login_name => p.login_name, :person_id => p.person_id,
|
25
|
+
:role_diploma => p.role_diploma,
|
26
|
+
:permissions => p.permissions & %w( teacher center_director ) )
|
27
|
+
end
|
28
|
+
|
29
|
+
def rpc_button_save( session, data )
|
30
|
+
person = Persons.match_by_person_id( data['person_id'] )
|
31
|
+
if person
|
32
|
+
log_msg :persons, "#{session.owner.login_name} saves #{data.inspect}"
|
33
|
+
person.role_diploma = data._role_diploma
|
34
|
+
person.permissions = person.permissions - %w( teacher center_director ) +
|
35
|
+
data._permissions
|
36
|
+
reply_person( person )
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def rpc_list_choice( session, name, data )
|
41
|
+
if name == "persons"
|
42
|
+
dputs( 2 ){ "Got data: #{data.inspect}" }
|
43
|
+
if p = Persons.match_by_login_name( data['persons'].flatten[0])
|
44
|
+
reply_person( p )
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# Allows to add, modify and delete persons
|
2
|
+
|
3
|
+
class PersonCourse < View
|
4
|
+
def layout
|
5
|
+
set_data_class :Persons
|
6
|
+
@update = true
|
7
|
+
@order = 45
|
8
|
+
@functions_need = [:courses]
|
9
|
+
|
10
|
+
gui_vbox do
|
11
|
+
show_str_ro :first_name
|
12
|
+
show_str_ro :family_name
|
13
|
+
show_list_single :courses, :maxheight => 150
|
14
|
+
show_button :add, :delete
|
15
|
+
|
16
|
+
gui_window :new_course do
|
17
|
+
show_list_single :courses_available, 'Entities.Courses.list_courses',
|
18
|
+
:maxheight => 150
|
19
|
+
show_button :add_course, :close
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def rpc_update( session )
|
25
|
+
reply( :empty_nonlists, [:courses] )
|
26
|
+
end
|
27
|
+
|
28
|
+
def rpc_list_choice( session, name, args )
|
29
|
+
dputs( 3 ){ "args is #{args.inspect}" }
|
30
|
+
ret = reply( :empty_nonlists, [:courses] )
|
31
|
+
if name == "persons" and args['persons']
|
32
|
+
p = Entities.Persons.match_by_login_name( args['persons'].flatten[0] )
|
33
|
+
if p
|
34
|
+
ret += reply( :update, :courses => Entities.Courses.list_courses_for_person( p ) ) +
|
35
|
+
update_form_data( p )
|
36
|
+
end
|
37
|
+
end
|
38
|
+
ret
|
39
|
+
end
|
40
|
+
|
41
|
+
def rpc_button_add( session, args )
|
42
|
+
if args['persons'].flatten.length > 0
|
43
|
+
reply( :empty, [ :courses_available ] ) +
|
44
|
+
reply( :update, :courses_available =>
|
45
|
+
( Entities.Courses.list_courses -
|
46
|
+
Entities.Courses.list_courses_for_person( args['persons'].flatten[0] ) ) ) +
|
47
|
+
reply( :window_show, :new_course )
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def rpc_button_delete( session, args )
|
52
|
+
if ca = args['courses'] and ca.length > 0
|
53
|
+
c = Entities.Courses.match_by_id( ca[0] )
|
54
|
+
c.students.delete( args['persons'].flatten[0] )
|
55
|
+
end
|
56
|
+
rpc_list_choice( session, 'persons', args )
|
57
|
+
end
|
58
|
+
|
59
|
+
def rpc_button_add_course( session, args )
|
60
|
+
if ca = args['courses_available'] and ca.length > 0
|
61
|
+
c = Entities.Courses.match_by_id( ca[0] )
|
62
|
+
c.students_add args['persons'].flatten[0]
|
63
|
+
end
|
64
|
+
reply( :window_hide ) +
|
65
|
+
rpc_list_choice( session, 'persons', args )
|
66
|
+
end
|
67
|
+
|
68
|
+
def rpc_button_close( session, args )
|
69
|
+
reply( :window_hide )
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# Allows to add, modify and delete persons
|
2
|
+
|
3
|
+
class PersonModify < View
|
4
|
+
include PrintButton
|
5
|
+
|
6
|
+
def layout
|
7
|
+
set_data_class :Persons
|
8
|
+
@update = true
|
9
|
+
@order = 10
|
10
|
+
|
11
|
+
gui_hbox do
|
12
|
+
gui_vbox do
|
13
|
+
gui_fields do
|
14
|
+
show_str_ro :login_name, :width => 150
|
15
|
+
show_str_ro :person_id
|
16
|
+
show_block :address
|
17
|
+
end
|
18
|
+
gui_hbox :nogroup do
|
19
|
+
show_button :save, :print
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
gui_vbox :nogroup do
|
24
|
+
show_str :new_password
|
25
|
+
show_str_ro :password_plain
|
26
|
+
show_html :not_allowed
|
27
|
+
show_button :change_password
|
28
|
+
end
|
29
|
+
|
30
|
+
gui_window :printing do
|
31
|
+
show_html :msg_print
|
32
|
+
show_button :next_page, :close
|
33
|
+
end
|
34
|
+
|
35
|
+
gui_window :print_choice do
|
36
|
+
show_print :print_student
|
37
|
+
show_print :print_library
|
38
|
+
show_print :print_responsible
|
39
|
+
show_button :close
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def rpc_button(session, name, data)
|
45
|
+
dputs(3) { "Pressed button #{name} with #{data.inspect}" }
|
46
|
+
person = Persons.match_by_person_id(data['person_id'])
|
47
|
+
|
48
|
+
rep = []
|
49
|
+
owner = session.owner
|
50
|
+
if person
|
51
|
+
case name
|
52
|
+
when 'change_password'
|
53
|
+
if owner.has_all_rights_of(person) ||
|
54
|
+
(owner.permissions.index(:center) &&
|
55
|
+
person.login_name =~ /^#{owner.login_name}_/)
|
56
|
+
person.password = data['new_password']
|
57
|
+
rep = reply(:empty, [:new_password]) +
|
58
|
+
reply(:update, :password_plain => person.password_plain)
|
59
|
+
end
|
60
|
+
when 'save'
|
61
|
+
log_msg :persons, "#{session.owner.login_name} saves #{data.inspect}"
|
62
|
+
rep = reply(:update, Persons.save_data(data))
|
63
|
+
when 'print_student', 'print_library', 'print_responsible'
|
64
|
+
rep = reply(:window_hide) +
|
65
|
+
rpc_print(session, name, data)
|
66
|
+
files = ''
|
67
|
+
case name
|
68
|
+
when 'print_student'
|
69
|
+
person.lp_cmd = nil
|
70
|
+
files = OpenPrint.pdf_nup_duplex(person.print, 'student_cards')
|
71
|
+
when 'print_library'
|
72
|
+
files = ActivityPayments.active_for(person).first.print
|
73
|
+
when 'print_responsible'
|
74
|
+
person.lp_cmd = nil
|
75
|
+
files = person.print(:responsible)
|
76
|
+
end
|
77
|
+
if lpr = cmd_printer(session, name)
|
78
|
+
rep += reply(:window_show, :printing) +
|
79
|
+
reply(:unhide, :next_page) +
|
80
|
+
reply(:update, :msg_print => 'Printing front page')
|
81
|
+
System.run_bool("#{lpr} #{files[0]}")
|
82
|
+
session.s_data._person_page = files
|
83
|
+
else
|
84
|
+
rep += reply(:window_show, :printing) +
|
85
|
+
reply(:update, :msg_print => 'Click to download:<ul>' +
|
86
|
+
files.to_a.collect { |file|
|
87
|
+
"<li><a target='other' href=\"#{file}\">#{file}</a></li>" }.join +
|
88
|
+
'</ul>') +
|
89
|
+
reply(:hide, :next_page)
|
90
|
+
end
|
91
|
+
when 'next_page'
|
92
|
+
System.run_bool("#{cmd_printer(session, :print_student)} #{session.s_data._person_page[1]}")
|
93
|
+
rep += reply(:update, :msg_print => 'Printing back page') +
|
94
|
+
reply(:hide, :next_page)
|
95
|
+
when 'close'
|
96
|
+
rep += reply(:window_hide)
|
97
|
+
when 'print'
|
98
|
+
rep += reply(:window_show, :print_choice) +
|
99
|
+
reply_visible(ActivityPayments.active_for(person).size > 0, :print_library) +
|
100
|
+
reply_visible(person.is_responsible?, :print_responsible)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
rep + rpc_update(session)
|
105
|
+
end
|
106
|
+
|
107
|
+
def rpc_find(session, field, data)
|
108
|
+
rep = Persons.find(field, data)
|
109
|
+
if not rep
|
110
|
+
rep = {"#{field}" => data}
|
111
|
+
end
|
112
|
+
update_layout(session) +
|
113
|
+
reply(:update, rep) + rpc_update(session)
|
114
|
+
end
|
115
|
+
|
116
|
+
def rpc_list_choice(session, name, data)
|
117
|
+
if name == 'persons'
|
118
|
+
dputs(3) { "Got data: #{data.inspect}" }
|
119
|
+
if data['persons'][0] and
|
120
|
+
p = Persons.match_by_login_name(data._persons.flatten[0])
|
121
|
+
can_change = p.show_password?(session.owner) ||
|
122
|
+
session.owner.has_permission?(:director)
|
123
|
+
change_pwd =
|
124
|
+
reply_one_two(can_change,
|
125
|
+
%i(new_password password_plain change_password), :not_allowed) +
|
126
|
+
reply_visible(p.show_password?(session.owner), :password_plain) +
|
127
|
+
reply(:update, :not_allowed => "<b>Vous n'avez pas le droit<br>" +
|
128
|
+
'de changer ce mot de passe</b>')
|
129
|
+
dputs(4) { "change_pwd is #{change_pwd.inspect}" }
|
130
|
+
reply(:empty_nonlists) + reply(:update, p) +
|
131
|
+
reply(:update, update(session)) +
|
132
|
+
reply(:focus, :credit_add) + reply_print(session) + change_pwd
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
def update(session)
|
138
|
+
if person = session.owner
|
139
|
+
if ConfigBase.has_function? :accounting
|
140
|
+
{:your_account_total_due => person.account_total_due}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def rpc_update(session)
|
146
|
+
super(session) +
|
147
|
+
reply(:parent, reply(:focus, :search)) +
|
148
|
+
reply_print(session) +
|
149
|
+
(session.owner.permissions.index('center') ?
|
150
|
+
reply(:hide, :print_student) : [])
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|