added users_list.pt and user_edit.pt
This commit is contained in:
@@ -22,7 +22,7 @@ def execute_query(request, query, params):
|
|||||||
|
|
||||||
def get_users_actifs(request,cd_uti):
|
def get_users_actifs(request,cd_uti):
|
||||||
if cd_uti =='':
|
if cd_uti =='':
|
||||||
query = "SELECT * FROM p_users WHERE agenda IS NOT NULL ORDER BY NOM"
|
query = "SELECT * FROM p_users WHERE agenda <> 0 ORDER BY NOM"
|
||||||
results = request.dbsession.execute(query).fetchall()
|
results = request.dbsession.execute(query).fetchall()
|
||||||
else:
|
else:
|
||||||
query = "SELECT * FROM p_users WHERE cd_uti = :cd_uti;"
|
query = "SELECT * FROM p_users WHERE cd_uti = :cd_uti;"
|
||||||
@@ -122,53 +122,3 @@ def update_rdv(request, nodossier, nolig, comment, commentvi, date_rdv):
|
|||||||
|
|
||||||
execute_query(request, query, {})
|
execute_query(request, query, {})
|
||||||
|
|
||||||
def update_journal(request, jnl, no_id, new_values):
|
|
||||||
# formater les champs
|
|
||||||
s = ''
|
|
||||||
for param in new_values.keys():
|
|
||||||
if param == 'date':
|
|
||||||
ddate = datetime.strptime(new_values['date'], '%d/%m/%Y')
|
|
||||||
new_values['date'] = ddate.strftime("%Y/%m/%d")
|
|
||||||
if s:
|
|
||||||
s += ",%s=:%s" % (param, param)
|
|
||||||
else:
|
|
||||||
s = "%s=:%s" % (param, param)
|
|
||||||
|
|
||||||
if no_id == '0':
|
|
||||||
if jnl == 'C':
|
|
||||||
query = "INSERT INTO jnl_caisse SET %s" % s
|
|
||||||
else:
|
|
||||||
query = "INSERT INTO jnl_caisse SET %s" % s
|
|
||||||
else:
|
|
||||||
new_values['no_id'] = no_id
|
|
||||||
if jnl == 'C':
|
|
||||||
query = "UPDATE jnl_caisse SET %s WHERE no_id = :no_id;" % s
|
|
||||||
else:
|
|
||||||
query = "UPDATE jnl_banque SET %s WHERE no_id = :no_id;" % s
|
|
||||||
|
|
||||||
execute_query(request, query, new_values)
|
|
||||||
|
|
||||||
def delete_membre(request, mbr_id):
|
|
||||||
query = "DELETE FROM membres WHERE mbr_id = :mbr_id ;"
|
|
||||||
execute_query(request, query, {'mbr_id': mbr_id})
|
|
||||||
|
|
||||||
def update_membre(request, mbr_id, new_values):
|
|
||||||
# formater les champs
|
|
||||||
s = ''
|
|
||||||
for param in new_values.keys():
|
|
||||||
if param == 'nom':
|
|
||||||
new_values['nom'] = new_values['nom'].upper()
|
|
||||||
if param == 'ville':
|
|
||||||
new_values['ville'] = new_values['ville'].upper()
|
|
||||||
if s:
|
|
||||||
s += ",%s=:%s" % (param, param)
|
|
||||||
else:
|
|
||||||
s = "%s=:%s" % (param, param)
|
|
||||||
|
|
||||||
if mbr_id == '0':
|
|
||||||
query = "INSERT INTO membres SET %s" % s
|
|
||||||
else:
|
|
||||||
new_values['mbr_id'] = mbr_id
|
|
||||||
query = "UPDATE membres SET %s WHERE mbr_id = :mbr_id;" % s
|
|
||||||
execute_query(request, query, new_values)
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ def get_member_by_mdp_oublie(request, lien):
|
|||||||
return results
|
return results
|
||||||
|
|
||||||
def get_member_by_id(request, mbr_id):
|
def get_member_by_id(request, mbr_id):
|
||||||
|
if mbr_id == '0':
|
||||||
|
query = "SELECT * FROM P_USERS ORDER BY cd_uti"
|
||||||
|
results = request.dbsession.execute(query).fetchall()
|
||||||
|
else:
|
||||||
# lire le membres par son identifianr
|
# lire le membres par son identifianr
|
||||||
query = """SELECT * FROM p_users WHERE CD_UTI=:mbr_id;"""
|
query = """SELECT * FROM p_users WHERE CD_UTI=:mbr_id;"""
|
||||||
results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first()
|
results = request.dbsession.execute(query, {'mbr_id': mbr_id}).first()
|
||||||
@@ -43,16 +47,37 @@ def update_membre_mdp_oublie(request, login):
|
|||||||
|
|
||||||
def update_membre_mdp(request, login, password):
|
def update_membre_mdp(request, login, password):
|
||||||
"""Update password for member login"""
|
"""Update password for member login"""
|
||||||
query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE CD_UTI=:login;"
|
query = "UPDATE p_users SET mdp = SHA1(:password), mdp_oublie=NULL, mdp_oublie_date=NULL WHERE cd_uti=:login;"
|
||||||
execute_query(request, query, {'login': login, 'password': password})
|
execute_query(request, query, {'login': login, 'password': password})
|
||||||
|
|
||||||
def update_last_connection(request, login):
|
def update_last_connection(request, login):
|
||||||
"""Update last connection for login """
|
"""Update last connection for login """
|
||||||
query = "UPDATE p_users SET dern_cnx_le=NOW() WHERE CD_UTI=:login;"
|
query = "UPDATE p_users SET dern_cnx_le=NOW() WHERE cd_uti=:login;"
|
||||||
execute_query(request, query, {'login': login})
|
execute_query(request, query, {'login': login})
|
||||||
|
|
||||||
def get_members_by_last_connection(request, ):
|
def update_membre(request, cd_uti, new_values):
|
||||||
# lire les donnees de l'eleve
|
# formater les champs
|
||||||
query = "SELECT * FROM p_users WHERE dern_cnx_le IS NOT NULL ORDER BY dern_cnx_le DESC"
|
s = ''
|
||||||
results = request.dbsession.execute(query, ).fetchall()
|
for param in new_values.keys():
|
||||||
return results
|
if param == 'nom':
|
||||||
|
new_values['nom'] = new_values['nom'].upper()
|
||||||
|
if param == 'access':
|
||||||
|
' ne prend que le 1er caractère'
|
||||||
|
new_values['access'] = new_values['access'][0]
|
||||||
|
|
||||||
|
if s:
|
||||||
|
s += ",%s=:%s" % (param, param)
|
||||||
|
else:
|
||||||
|
s = "%s=:%s" % (param, param)
|
||||||
|
|
||||||
|
if cd_uti == '0':
|
||||||
|
query = "INSERT INTO p_users SET %s" % s
|
||||||
|
else:
|
||||||
|
new_values['cd_uti'] = cd_uti
|
||||||
|
query = "UPDATE p_users SET %s WHERE cd_uti = :cd_uti;" % s
|
||||||
|
execute_query(request, query, new_values)
|
||||||
|
|
||||||
|
def delete_membre(request, cd_uti):
|
||||||
|
query = "DELETE FROM p_users WHERE cd_uti = :cd_uti ;"
|
||||||
|
execute_query(request, query, {'cd_uti': cd_uti})
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ def dropdown_menu_panel(context, request):
|
|||||||
return { 'logged_in': '' }
|
return { 'logged_in': '' }
|
||||||
else:
|
else:
|
||||||
member = get_member_by_id(request, logged_in)
|
member = get_member_by_id(request, logged_in)
|
||||||
fullname = member.NOM
|
fullname = member.nom
|
||||||
email = member.email
|
email = member.email
|
||||||
if member.access == 9:
|
if member.access == 9:
|
||||||
logged_in_fonction = 'Administrateur'
|
logged_in_fonction = 'Administrateur'
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ def includeme(config):
|
|||||||
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
config.add_route('dossier_view', '/dossier_view/{nodossier}')
|
||||||
config.add_route('rdv_edit','/rdv_edit/{nodossier}/{nolig}')
|
config.add_route('rdv_edit','/rdv_edit/{nodossier}/{nolig}')
|
||||||
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
config.add_route('envoyer_mdp', '/envoyer_mdp')
|
||||||
config.add_route('last_connected', '/last_connected')
|
config.add_route('user_edit', '/user_edit/{cd_uti}')
|
||||||
|
config.add_route('users_list', '/users_list')
|
||||||
config.add_route('login', '/login')
|
config.add_route('login', '/login')
|
||||||
config.add_route('logout', '/logout')
|
config.add_route('logout', '/logout')
|
||||||
config.add_route('planning', '/planning')
|
config.add_route('planning', '/planning')
|
||||||
|
|||||||
74
mondumas/static/dist/datatable/datetime-moment.js
vendored
Normal file
74
mondumas/static/dist/datatable/datetime-moment.js
vendored
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
/**
|
||||||
|
* This plug-in for DataTables represents the ultimate option in extensibility
|
||||||
|
* for sorting date / time strings correctly. It uses
|
||||||
|
* [Moment.js](http://momentjs.com) to create automatic type detection and
|
||||||
|
* sorting plug-ins for DataTables based on a given format. This way, DataTables
|
||||||
|
* will automatically detect your temporal information and sort it correctly.
|
||||||
|
*
|
||||||
|
* For usage instructions, please see the DataTables blog
|
||||||
|
* post that [introduces it](//datatables.net/blog/2014-12-18).
|
||||||
|
*
|
||||||
|
* @name Ultimate Date / Time sorting
|
||||||
|
* @summary Sort date and time in any format using Moment.js
|
||||||
|
* @author [Allan Jardine](//datatables.net)
|
||||||
|
* @depends DataTables 1.10+, Moment.js 1.7+
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* $.fn.dataTable.moment( 'HH:mm MMM D, YY' );
|
||||||
|
* $.fn.dataTable.moment( 'dddd, MMMM Do, YYYY' );
|
||||||
|
*
|
||||||
|
* $('#example').DataTable();
|
||||||
|
*/
|
||||||
|
|
||||||
|
(function (factory) {
|
||||||
|
if (typeof define === "function" && define.amd) {
|
||||||
|
define(["jquery", "moment", "datatables.net"], factory);
|
||||||
|
} else {
|
||||||
|
factory(jQuery, moment);
|
||||||
|
}
|
||||||
|
}(function ($, moment) {
|
||||||
|
|
||||||
|
$.fn.dataTable.moment = function ( format, locale ) {
|
||||||
|
var types = $.fn.dataTable.ext.type;
|
||||||
|
|
||||||
|
// Add type detection
|
||||||
|
types.detect.unshift( function ( d ) {
|
||||||
|
if ( d ) {
|
||||||
|
// Strip HTML tags and newline characters if possible
|
||||||
|
if ( d.replace ) {
|
||||||
|
d = d.replace(/(<.*?>)|(\r?\n|\r)/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip out surrounding white space
|
||||||
|
d = $.trim( d );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Null and empty values are acceptable
|
||||||
|
if ( d === '' || d === null ) {
|
||||||
|
return 'moment-'+format;
|
||||||
|
}
|
||||||
|
|
||||||
|
return moment( d, format, locale, true ).isValid() ?
|
||||||
|
'moment-'+format :
|
||||||
|
null;
|
||||||
|
} );
|
||||||
|
|
||||||
|
// Add sorting method - use an integer for the sorting
|
||||||
|
types.order[ 'moment-'+format+'-pre' ] = function ( d ) {
|
||||||
|
if ( d ) {
|
||||||
|
// Strip HTML tags and newline characters if possible
|
||||||
|
if ( d.replace ) {
|
||||||
|
d = d.replace(/(<.*?>)|(\r?\n|\r)/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Strip out surrounding white space
|
||||||
|
d = $.trim( d );
|
||||||
|
}
|
||||||
|
|
||||||
|
return d === '' || d === null ?
|
||||||
|
-Infinity :
|
||||||
|
parseInt( moment( d, format, locale, true ).format( 'x' ), 10 );
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}));
|
||||||
7
mondumas/static/dist/datatable/moment.min.js
vendored
Normal file
7
mondumas/static/dist/datatable/moment.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@@ -18,9 +18,9 @@
|
|||||||
<br />
|
<br />
|
||||||
<div class="row well" tal:condition="layout.isAdmin">
|
<div class="row well" tal:condition="layout.isAdmin">
|
||||||
<div class="col-sm-3">
|
<div class="col-sm-3">
|
||||||
<a href="${request.application_url}/last_connected">
|
<a href="${request.application_url}/users_list">
|
||||||
<span class="glyphicon glyphicon-log-in logo-small"></span><br />
|
<span class="glyphicon glyphicon-user logo-small"></span><br />
|
||||||
<h4>Derniers connectés</h4></a>
|
<h4>UTILISATEURS</h4></a>
|
||||||
</div>
|
</div>
|
||||||
</div> <!-- row 2 -->
|
</div> <!-- row 2 -->
|
||||||
<br />
|
<br />
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
<metal:block use-macro="main_template">
|
|
||||||
<div metal:fill-slot="content">
|
|
||||||
|
|
||||||
|
|
||||||
<div tal:condition="items">
|
|
||||||
<table class="table table-striped table-bordered">
|
|
||||||
<tr>
|
|
||||||
<th>Date</th>
|
|
||||||
<th>Code</th>
|
|
||||||
<th>Nom</th>
|
|
||||||
<th>email</th>
|
|
||||||
</tr>
|
|
||||||
<tr tal:repeat="item items">
|
|
||||||
<td tal:content="python:item.dern_cnx_le.strftime('%d/%m/%Y %H:%M')" />
|
|
||||||
<td align="left" tal:content="item.CD_UTI" />
|
|
||||||
<td align="left" tal:content="item.NOM" />
|
|
||||||
<td align="left" tal:content="item.email" />
|
|
||||||
</tr>
|
|
||||||
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div><!-- content -->
|
|
||||||
</metal:block>
|
|
||||||
|
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
|
||||||
<link href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.css" rel="stylesheet">
|
<link href="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.css" rel="stylesheet">
|
||||||
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
|
<link href="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/css/bootstrap-datetimepicker.min.css" rel="stylesheet">
|
||||||
<!-- link href="${request.static_url('mondumas:static/dist/datatable/dataTables.bootstrap.css')}" rel="stylesheet" media="all" -->
|
<link href="${request.static_url('mondumas:static/dist/datatable/dataTables.bootstrap.css')}" rel="stylesheet" media="all">
|
||||||
<link href="${request.static_url('mondumas:static/dist/formvalidation/css/formValidation.min.css')}" rel="stylesheet">
|
<link href="${request.static_url('mondumas:static/dist/formvalidation/css/formValidation.min.css')}" rel="stylesheet">
|
||||||
<!-- Custom CSS -->
|
<!-- Custom CSS -->
|
||||||
<link href="${request.static_url('mondumas:static/css/style.less')}" type="text/css" rel="stylesheet/less">
|
<link href="${request.static_url('mondumas:static/css/style.less')}" type="text/css" rel="stylesheet/less">
|
||||||
@@ -23,14 +23,15 @@
|
|||||||
|
|
||||||
<!-- Bootstrap Fullcalendar plugin -->
|
<!-- Bootstrap Fullcalendar plugin -->
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
|
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/locale/fr.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/fullcalendar.min.js"></script>
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/locale/fr.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/fullcalendar/3.1.0/locale/fr.js"></script>
|
||||||
<!-- Bootstrap Datepicker plugin -->
|
<!-- Bootstrap Datepicker plugin -->
|
||||||
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
|
<script src="//cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.47/js/bootstrap-datetimepicker.min.js"></script>
|
||||||
<!-- Datatable
|
<!-- Datatable -->
|
||||||
<script src="${request.static_url('mondumas:static/dist/datatable/jquery.dataTables.js')}"></script>
|
<script src="${request.static_url('mondumas:static/dist/datatable/jquery.dataTables.js')}"></script>
|
||||||
<script src="${request.static_url('mondumas:static/dist/datatable/dataTables.bootstrap.js')}"></script>
|
<script src="${request.static_url('mondumas:static/dist/datatable/dataTables.bootstrap.js')}"></script>
|
||||||
-->
|
<script src="${request.static_url('mondumas:static/dist/datatable/datetime-moment.js')}"></script>
|
||||||
<!-- FormValidation plugin -->
|
<!-- FormValidation plugin -->
|
||||||
<script src="${request.static_url('mondumas:static/dist/formvalidation/js/formValidation.min.js')}"></script>
|
<script src="${request.static_url('mondumas:static/dist/formvalidation/js/formValidation.min.js')}"></script>
|
||||||
<script src="${request.static_url('mondumas:static/dist/formvalidation/js/framework/bootstrap.min.js')}"></script>
|
<script src="${request.static_url('mondumas:static/dist/formvalidation/js/framework/bootstrap.min.js')}"></script>
|
||||||
|
|||||||
11
mondumas/templates/security.py
Normal file
11
mondumas/templates/security.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
from .models.default import get_member_by_id
|
||||||
|
|
||||||
|
def groupfinder(userid, request):
|
||||||
|
member = get_member_by_id(request, userid)
|
||||||
|
|
||||||
|
if member:
|
||||||
|
# Roles administrateur ?
|
||||||
|
if member.access == 9:
|
||||||
|
return ['group:administrators']
|
||||||
|
else:
|
||||||
|
return [] # it means that userid is logged in (it returns None if userid isn't logged in)
|
||||||
110
mondumas/templates/user_edit.pt
Normal file
110
mondumas/templates/user_edit.pt
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<div tal:condition="message" tal:content="message" class="alert alert-danger" />
|
||||||
|
<br />
|
||||||
|
<div class="row">
|
||||||
|
<form id="user_edit-form" class="form-horizontal" action="${url}" method="post" tal:condition="individu"
|
||||||
|
data-fv-framework="bootstrap"
|
||||||
|
data-fv-icon-valid="glyphicon glyphicon-ok"
|
||||||
|
data-fv-icon-invalid="glyphicon glyphicon-remove"
|
||||||
|
data-fv-icon-validating="glyphicon glyphicon-refresh">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="cd_uti">Identifiant</label>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<input class="form-control" type="text" id="cd_uti" name="cd_uti" value="${individu.cd_uti}"
|
||||||
|
placeholder="10 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="L'identifiant est obligatoire"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="3"
|
||||||
|
data-fv-stringlength-message="3 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="intitule">Nom et prénom</label>
|
||||||
|
<div class="col-xs-5">
|
||||||
|
<input class="form-control" type="text" id="intitule" name="nom" value="${individu.nom}"
|
||||||
|
placeholder="30 caractères maximum"
|
||||||
|
data-fv-notempty="true"
|
||||||
|
data-fv-notempty-message="Le nom est obligatoire"
|
||||||
|
data-fv-stringlength="true"
|
||||||
|
data-fv-stringlength-max="25"
|
||||||
|
data-fv-stringlength-message="25 caractères maximum" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="col-xs-2 control-label">Email</label>
|
||||||
|
<div class="col-xs-5">
|
||||||
|
<input class="form-control" type="text" name="email"
|
||||||
|
value="${individu.email}" placeholder="55 caractères maximum"
|
||||||
|
data-fv-emailaddress="true"
|
||||||
|
data-fv-emailaddress-message="L'adresse email n'est pas valide" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="access">Accès</label>
|
||||||
|
<div class="col-xs-2">
|
||||||
|
<select class="form-control" id="access" name="access">
|
||||||
|
<optgroup tal:repeat="item access">
|
||||||
|
<option value="${item}" tal:attributes="selected individu.access==item[0] and 'selected' or None">${item}</option>
|
||||||
|
</optgroup>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||||
|
<label><input type="checkbox" name="agenda" value="individu.agenda" id="agenda"
|
||||||
|
tal:attributes="checked individu.agenda <> 0 and 'checked' or None">Gérer son agenda
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||||
|
<label><input type="checkbox" name="actif" value="individu.actif" id="actif"
|
||||||
|
tal:attributes="checked individu.actif <> 0 and 'checked' or None">La fiche est active
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="control-label col-xs-2" for="access">Dernière modif</label>
|
||||||
|
<div class="col-xs-7">
|
||||||
|
<p class="form-control-static">${individu.modif_le.strftime('%d/%m/%Y - %H:%M')}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-2 col-xs-7 checkbox">
|
||||||
|
<p class="form-control-static">La fiche est active</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
<div class="form-group">
|
||||||
|
<div class="col-xs-offset-2 col-xs-10">
|
||||||
|
<div class="form-group">
|
||||||
|
<a class="btn btn-default" href="${request.application_url}/users_list"><span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||||
|
<button class="btn btn-primary" type="submit" name="form.submitted">
|
||||||
|
<span class="glyphicon glyphicon-ok"></span> Enregistrer</button>
|
||||||
|
<button class="btn btn-warning" type="submit" name="form.deleted"
|
||||||
|
tal:condition="individu.cd_uti > 0">
|
||||||
|
<span class="glyphicon glyphicon-remove"></span> Supprimer</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
</div> <!-- row -->
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
$('#user_edit-form').formValidation();
|
||||||
|
$('form input').on('keypress', function(e) {
|
||||||
|
return e.which !== 13;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</metal:block>
|
||||||
63
mondumas/templates/users_list.pt
Normal file
63
mondumas/templates/users_list.pt
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
<metal:block use-macro="main_template">
|
||||||
|
<div metal:fill-slot="content">
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="${request.application_url}/" class="btn btn-default" role="button">
|
||||||
|
<span class="glyphicon glyphicon-chevron-left"></span> Retour</a>
|
||||||
|
<a href="${request.application_url}/user_edit/0" class="btn btn-success" role="button">
|
||||||
|
<span class="glyphicon glyphicon-plus"></span> Nouveau utilisateur</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<table id="users_list" class="table table-striped table-bordered">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>Login</th>
|
||||||
|
<th>Nom, Prénom</th>
|
||||||
|
<th>Email</th>
|
||||||
|
<th>Agenda</th>
|
||||||
|
<th>Rôle</th>
|
||||||
|
<th>Dern cnx</th>
|
||||||
|
<th>Etat</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var dataSet = ${dt_data};
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
$.fn.dataTable.moment('DD/MM/YYYY - HH:mm');
|
||||||
|
$('#users_list').DataTable({
|
||||||
|
data: dataSet,
|
||||||
|
pageLength: 50,
|
||||||
|
bLengthChange: false,
|
||||||
|
columnDefs: [
|
||||||
|
{ "targets": 0,
|
||||||
|
"render": function (data, type, full, meta) {
|
||||||
|
// ajouter un link vers le formulaire
|
||||||
|
return '<a href="/user_edit/' + data + '">' + data + '</a>';
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{ "targets": 3,
|
||||||
|
"render": function (data, type, full, meta) {
|
||||||
|
if (data != 0) {
|
||||||
|
return '<span class="glyphicon glyphicon-calendar"></span>';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</div><!-- content -->
|
||||||
|
</metal:block>
|
||||||
|
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@ def redefinir_mdp(request):
|
|||||||
if 'form.submitted' in request.params:
|
if 'form.submitted' in request.params:
|
||||||
login = request.params["login"]
|
login = request.params["login"]
|
||||||
mdp = request.params["new_password1"]
|
mdp = request.params["new_password1"]
|
||||||
if login == membre.CD_UTI:
|
if login == membre.cd_uti:
|
||||||
update_membre_mdp(request, login, mdp)
|
update_membre_mdp(request, login, mdp)
|
||||||
request.session.flash(u"Votre mot de passe a été modifié avec succès.", 'success')
|
request.session.flash(u"Votre mot de passe a été modifié avec succès.", 'success')
|
||||||
return HTTPFound(location=request.route_url('login'))
|
return HTTPFound(location=request.route_url('login'))
|
||||||
@@ -181,15 +181,42 @@ def login(request):
|
|||||||
'message': message,
|
'message': message,
|
||||||
}
|
}
|
||||||
|
|
||||||
@view_config(route_name='last_connected', renderer='../templates/last_connected.pt', permission='manage')
|
@view_config(route_name='users_list', renderer='../templates/users_list.pt', permission='manage')
|
||||||
def last_connected(request):
|
def users_list(request):
|
||||||
items = get_members_by_last_connection(request)
|
# lire les utilisateurs
|
||||||
|
items = get_member_by_id(request, '0')
|
||||||
|
|
||||||
|
# construire la liste
|
||||||
|
liste=[]
|
||||||
|
for item in items:
|
||||||
|
if item.dern_cnx_le:
|
||||||
|
der_cnx_le = item.dern_cnx_le.strftime('%d/%m/%Y - %H:%M')
|
||||||
|
else:
|
||||||
|
der_cnx_le = ""
|
||||||
|
|
||||||
|
if item.actif == 0:
|
||||||
|
etat = 'Inactif'
|
||||||
|
else:
|
||||||
|
etat = ''
|
||||||
|
|
||||||
|
if item.access == 0:
|
||||||
|
role = ''
|
||||||
|
elif item.access == 8:
|
||||||
|
role = 'Compta'
|
||||||
|
elif item.access == 9:
|
||||||
|
role = 'Admin'
|
||||||
|
else:
|
||||||
|
role = 'Gestion'
|
||||||
|
|
||||||
|
d = (item.cd_uti, item.nom, item.email, item.agenda, role, der_cnx_le, etat)
|
||||||
|
liste.append(d)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'page_title': u"Derniers connectés",
|
'page_title': u'Liste des utilisateurs',
|
||||||
'items': items,
|
'dt_data': json.dumps(liste),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@view_config(route_name='logout')
|
@view_config(route_name='logout')
|
||||||
def logout(request):
|
def logout(request):
|
||||||
request.session.invalidate()
|
request.session.invalidate()
|
||||||
@@ -217,3 +244,63 @@ gestion.entreprise-dumas.com
|
|||||||
mailer = get_mailer(request)
|
mailer = get_mailer(request)
|
||||||
|
|
||||||
mailer.send_immediately(message)
|
mailer.send_immediately(message)
|
||||||
|
|
||||||
|
@view_config(route_name='user_edit', renderer='../templates/user_edit.pt', permission='manage')
|
||||||
|
def user_edit(request):
|
||||||
|
cd_uti = request.matchdict['cd_uti']
|
||||||
|
url = request.route_url('user_edit', cd_uti=cd_uti)
|
||||||
|
message = ''
|
||||||
|
access = ["0 | Production", "5 | Gestion", u"8 | Comptabilité", "9 | Administration"]
|
||||||
|
|
||||||
|
if cd_uti == '0':
|
||||||
|
# nouveau
|
||||||
|
individu = {}
|
||||||
|
individu['cd_uti'] = 0
|
||||||
|
individu['nom'] = ''
|
||||||
|
individu['email'] = ''
|
||||||
|
individu['access'] = '0 | Production'
|
||||||
|
individu['actif'] = 1
|
||||||
|
individu['agenda'] = 0
|
||||||
|
page_title= 'Nouvelle Fiche'
|
||||||
|
else:
|
||||||
|
# lire la fiche de l'individu
|
||||||
|
individu = get_member_by_id(request, cd_uti)
|
||||||
|
if not individu:
|
||||||
|
request.session.flash(u"Utilisateur non trouvé : %s" % cd_uti, 'warning')
|
||||||
|
return HTTPFound(location=request.route_url('users_list'))
|
||||||
|
page_title= u"Fiche de %s" %(individu.nom)
|
||||||
|
|
||||||
|
if 'form.submitted' in request.params:
|
||||||
|
new_values = {}
|
||||||
|
for param, db_value in individu.items():
|
||||||
|
if param in request.params and request.params[param] != db_value:
|
||||||
|
new_values[param] = request.params[param]
|
||||||
|
|
||||||
|
# actif coché ?
|
||||||
|
if 'actif' in request.params:
|
||||||
|
new_values['actif'] = 1
|
||||||
|
else:
|
||||||
|
new_values['actif'] = 0
|
||||||
|
# agenda coché ?
|
||||||
|
if 'agenda' in request.params:
|
||||||
|
new_values['agenda'] = 1
|
||||||
|
else:
|
||||||
|
new_values['agenda'] = 0
|
||||||
|
|
||||||
|
if new_values:
|
||||||
|
update_membre(request, cd_uti, new_values)
|
||||||
|
request.session.flash(u"La fiche a été mise à jour avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('users_list'))
|
||||||
|
|
||||||
|
if 'form.deleted' in request.params:
|
||||||
|
delete_membre(request, cd_uti)
|
||||||
|
request.session.flash(u"La fiche a été supprimée avec succès.", 'success')
|
||||||
|
return HTTPFound(location=request.route_url('users_list'))
|
||||||
|
|
||||||
|
return {
|
||||||
|
'page_title': page_title,
|
||||||
|
'url': url,
|
||||||
|
'individu': individu,
|
||||||
|
'access': access,
|
||||||
|
'message': message,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user